ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmNGRlOQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAyIEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDExIE5lc3QsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlZmlsZSBmb3IgdGhlIE5ldHdvcmsgUGVyZm9ybWFuY2UgKG5ldHBlcmYpCisjICAgICAgYmVuY2htYXJraW5nIHV0aWxpdHkuCisjCisKK0J1aWxkQ29uZmlnU3BlY2lhbGl6ZWQJOj0gTm8KK0J1aWxkUHJvZHVjdFNwZWNpYWxpemVkCTo9IE5vCisKK2luY2x1ZGUgcHJlLm1haworCitQYWNrYWdlTmFtZQkJOj0gbmV0cGVyZgorCitQYWNrYWdlRXh0ZW5zaW9uCTo9IHRhci5negorUGFja2FnZVNlcGFyYXRvcgk6PSAtCisKK1BhY2thZ2VQYXRjaEFyZ3MJOj0gLXAxCisKK1BhY2thZ2VBcmNoaXZlCQk6PSAkKFBhY2thZ2VOYW1lKS4kKFBhY2thZ2VFeHRlbnNpb24pCitQYWNrYWdlU291cmNlRGlyCTo9ICQoUGFja2FnZU5hbWUpJChQYWNrYWdlU2VwYXJhdG9yKSQoUGFja2FnZVZlcnNpb24pCisKK1BhY2thZ2VCdWlsZE1ha2VmaWxlCT0gJChjYWxsIEdlbmVyYXRlQnVpbGRQYXRocyxNYWtlZmlsZSkKKworQ2xlYW5QYXRocwkJKz0gJChQYWNrYWdlTGljZW5zZUZpbGUpCisKK2FsbDogJChQYWNrYWdlRGVmYXVsdEdvYWwpCisKKyMgR2VuZXJhdGUgdGhlIHBhY2thZ2UgbGljZW5zZSBjb250ZW50cy4KKworJChQYWNrYWdlU291cmNlRGlyKS9DT1BZSU5HOiBzb3VyY2UKKworJChQYWNrYWdlTGljZW5zZUZpbGUpOiAkKFBhY2thZ2VTb3VyY2VEaXIpL0NPUFlJTkcKKwkkKGNvcHktcmVzdWx0KQorCisjIEV4dHJhY3QgdGhlIHNvdXJjZSBmcm9tIHRoZSBhcmNoaXZlIGFuZCBhcHBseSBwYXRjaGVzLCBpZiBhbnkuCisKKyQoUGFja2FnZVNvdXJjZURpcik6ICQoUGFja2FnZUFyY2hpdmUpICQoUGFja2FnZVBhdGNoUGF0aHMpCisJJChleHBhbmQtYW5kLXBhdGNoLXBhY2thZ2UpCisKKyMgUHJlcGFyZSB0aGUgc291cmNlcy4KKworLlBIT05ZOiBzb3VyY2UKK3NvdXJjZTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpCisKKyMgUGF0Y2ggdGhlIHNvdXJjZXMsIGlmIG5lY2Vzc2FyeS4KKworLlBIT05ZOiBwYXRjaAorcGF0Y2g6IHNvdXJjZQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGJ1aWxkIG1ha2VmaWxlLgorCiskKFBhY2thZ2VCdWlsZE1ha2VmaWxlKTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpICQoQnVpbGREaXJlY3RvcnkpICQoUmVzdWx0RGlyZWN0b3J5KQorCSQoVmVyYm9zZSljZCAkKEJ1aWxkRGlyZWN0b3J5KSAmJiBcCisJJChDVVJESVIpLyQoUGFja2FnZVNvdXJjZURpcikvY29uZmlndXJlIFwKKwlDQz0iJChDQykiIEFSPSQoQVIpIFJBTkxJQj0kKFJBTkxJQikgU1RSSVA9JChTVFJJUCkgXAorCUlOU1RBTEw9IiQoSU5TVEFMTCkgJChJTlNUQUxMRkxBR1MpIiBcCisJYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzIFwKKwktLWJ1aWxkPSQoSG9zdFR1cGxlKSBcCisJLS1ob3N0PSQoVGFyZ2V0VHVwbGUpIFwKKwktLXByZWZpeD0vdXNyIFwKKwktLXN5c2NvbmZkaXI9L2V0YyBcCisJLS1sb2NhbHN0YXRlZGlyPS92YXIKKworIyBDb25maWd1cmUgdGhlIHNvdXJjZSBmb3IgYnVpbGRpbmcuCisKKy5QSE9OWTogY29uZmlndXJlCitjb25maWd1cmU6IHNvdXJjZSAkKFBhY2thZ2VCdWlsZE1ha2VmaWxlKQorCisjIEJ1aWxkIHRoZSBzb3VyY2UuCisjCisjIFdlIGhhdmUgdG8gdW5zZXQgTUFLRUZMQUdTIHNpbmNlIHRoZXkgY29uZnVzZSB0aGUgcGFja2FnZSBidWlsZCBvdGhlcndpc2UuCisKKy5QSE9OWTogYnVpbGQKK2J1aWxkOiBjb25maWd1cmUKKwkkKFZlcmJvc2UpdW5zZXQgTUFLRUZMQUdTICYmIFwKKwkkKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGREaXJlY3RvcnkpIGFsbAorCisjIFN0YWdlIHRoZSBidWlsZCB0byBhIHRlbXBvcmFyeSBpbnN0YWxsYXRpb24gYXJlYS4KKyMKKyMgV2UgaGF2ZSB0byB1bnNldCBNQUtFRkxBR1Mgc2luY2UgdGhleSBjb25mdXNlIHRoZSBwYWNrYWdlIGJ1aWxkIG90aGVyd2lzZS4KKworLlBIT05ZOiBzdGFnZQorc3RhZ2U6IGJ1aWxkIHwgJChSZXN1bHREaXJlY3RvcnkpCisJJChWZXJib3NlKXVuc2V0IE1BS0VGTEFHUyAmJiBcCisJJChNQUtFKSAkKEpPQlNGTEFHKSAtQyAkKEJ1aWxkRGlyZWN0b3J5KSBERVNURElSPSQoUmVzdWx0RGlyZWN0b3J5KSBpbnN0YWxsCisKK2NsZWFuOgorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUGFja2FnZVNvdXJjZURpcikKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUmVzdWx0RGlyZWN0b3J5KQorCitpbmNsdWRlIHBvc3QubWFrCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L0FVVEhPUlMgYi9uZXRwZXJmLTIuNC41L0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5MjU1MQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvQVVUSE9SUwpAQCAtMCwwICsxLDIzNCBAQAorVGhpcyBmaWxlIGlzIGhlcmUgZm9yIHBlb3BsZSB0byBsaXN0IHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlCituZXRwZXJmIGJlbmNobWFyay4gV2hlbiB5b3UgZW5oYW5jZSBvciBmaXggc29tZXRoaW5nLCBwdXQgeW91ciBuYW1lCithbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgd2hhdC93aGVyZS93aGV5L3doeS9ob3cgaGVyZS4gSWYgeW91IGxpa2UsCitmZWVsIGZyZWUgdG8gaW5jbHVkZSBhbiBlbWFpbCBhZGRyZXNzLiAKKworSSB3b3VsZCBsaWtlIHRvIGFwb2xvZ2l6ZSBpbiBhZHZhbmNlIHRvIGFueW9uZSBJJ3ZlIGZvcmdvdHRlbiB0bworaW5jbHVkZS4KKworUmljayBKb25lcyA8cmFqQGN1cC5ocC5jb20+CitSZXNwb25zaWJsZSBmb3IgaW5pdGlhbCBwYWNrYWdpbmcgYW5kIHJlbGVhc2Ugb2YgbmV0cGVyZiBhbmQKKyJlZGl0b3JpYWwiIGNvbnRpbnVpdHkgZm9yIHN1YnNlcXVlbnQgcmVsZWFzZXMuIAorCitLYXJlbiBDaG95CitDb2RlIHRvIGFsbG93IG5ldHNlcnZlciB0byBydW4gYXMgYSBzdGFuZGFsb25lIGRhZW1vbi4gCisKK0RhdmUgU2hpZWxkIDxkYXZlc0Bjc2MubGl2LmFjLnVrPgorV3JvdGUgdGhlIGZpcnN0IHJldmlzaW9uIG9mIHRoZSBuZXRwZXJmIGFuZCBuZXRzZXJ2ZXIgbWFucGFnZXMuCisKK1NhcnIgQmx1bXNvbiA8c2FyckBjaXRpLnVtaWNoLmVkdT4KK0ZpeGVzIGZvciBBSVggMy4xIGFuZCAzLjIuIEFsc28gZml4ZXMgZm9yIFNvbGFyaXMgMi4xIHdpdGhvdXQKK3JlYWxpemluZyBpdCA7LSkgCisKK0plZmYgU21pdHMgPGpnc0B1c2wuY29tPgorRml4ZXMgZm9yIFRDUF9SUiBhbmQgVURQX1JSIG9uIHN5dGVtcyB3aXRoIGFuIGh0b25sIHRoYXQgaXMgbm90IGEgbm8tb3AuCisKK1dhcnJlbiBCdXJuZXR0IDxzb21ld2hlcmUgaW4gS2Fuc2FzPgorRXhhbXBsZSBjb2RlIGZvciBETFBJIHRlc3RzLgorCitTZXZlcmFsIEZvbGtzCitDb2RlIHRvIHRlbGwgU3VuT1MgNCB0byAqbm90KiByZXN0YXJ0IHN5c3RlbSBjYWxscyBvbiByZWNlaXB0IG9mIGEKK3NpZ25hbC4gCisKK0ZvcmUgU3lzdGVtcyBJbmMuCitNYW5wYWdlcyBmb3IgdGhlIEZPUkUgQVBJIGFuZCBxdWVzdGlvbiBhbnN3ZXJpbmcKKworRGF2aWQgQ2hhbm5pbgorQWNjZXNzIHRvIHN5c3RlbXMgcnVubmluZyB0aGUgRm9yZSBBVE0gQVBJCisKK0pvbmF0aGFuIFN0b25lIDxqb25hdGhhbkBEU0cuU3RhbmZvcmQuRURVPgorSW5jbHVkZSBmaWxlIGZpeGVzIGZvciBVbHRyaXgKKworQnJ1Y2UgQmFybmV0dCA8YmFybmV0dEBncnltb2lyZS5jcmQuZ2UuY29tPgorQnVuY2hlcyBvZiB3YXJuaW5ncyBmaXhlcyBhbmQgbGludCBwaWNrcyBmb3IgU29sYXJpcyAyLjMKKworSGVybWFuIERpZXJrcyBldCBhbCA8ZGllcmtzQGF1c3Rpbi5pYm0uY29tPgorQ29kZSB0byBjYWxjdWxhdGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgZm9yIHRlc3RzCisKK0hhbCBNdXJyYXkgPG11cnJheUBwYS5kZWMuY29tPgorSGVscGZ1bCBzdWdnZXN0aW9ucyBmb3IgdGhlIHNjcmlwdHMgdG8gbWFrZSB0aGVtIG1vcmUgY29tcGF0aWJsZSB3aXRoCit0aGUgbmV0cGVyZiBkYXRhYmFzZSAoaHR0cDovL3d3dy5jdXAuaHAuY29tL25ldHBlcmYvTmV0cGVyZlBhZ2UuaHRtbCkuCitIaXMgcHJvbXB0aW5nIGZpbmFsbHkgZ290IG1lIG9mZiBteSB3aGF0ZXZlciB0byBwdXQgdGhlIGNvbmZpZGVuY2UKK2ludGVydmFsIHN0dWZmIGZyb20gdGhlIGd1eXMgYXQgSUJNIGludG8gbmV0cGVyZgorCitQZXRlciBTa29wcCBwZHNAY3MuY29sdW1iaWEuZWR1CitGaXhlcyB0byBtYWtlIG5ldHBlcmYgbW9yZSBzZWN1cmUuCQorCitUb20gV2lsc29uIDx0Y3dpbHNvbkBuZXdicmlkZ2UuY29tPgorQSBmaXggdG8gc2VuZF91ZHBfcnIgdG8gY29ycmVjdCBib2d1cyB0aHJvdWdocHV0IHZhbHVlcy4KKworVGhvcnN0ZW4gTG9ja2VydCA8dGhvbG9AdGV0aGVybGVzcy5jb20+CitBIGJ1bmNoIG9mIGNsZWFuLXVwIGZvciB0aGUgKkJTRCBPU2VzCisKK1NlcmdlIFBhY2hrb3Zza3kgPHBzQG9jaXNnaTcudW5pemguY2g+CitDb2RlIGZvciBsb3ctcHJpb3JpdHkgc29ha2VyIHByb2Nlc3MgZm9yIEFJWCBhbmQgU0dJCisKK1RoZSBmaW5lIGZvbGtzIGF0IEFkYXB0ZWMKK1RoZSBpbml0aWFsIHBvcnQgb2YgbmV0cGVyZiAoMS45UEw0KSB0byBXaW5kb3dzIE5UIDMuNTEuCisKK1JvYmluIENhbGxlbmRlciA8cm9iaW5fY2FsbGVuZGVyQFZORVQuSUJNLkNPTT4KK1RoZSBQUEMgYmluYXJpZXMgZm9yIHRoZSAxLjlQTDQgcG9ydCBvZiBuZXRwZXJmIHRvIE5UIGFuZCBmb3IgYXNzb3J0ZWQKK2NvZGUgY2xlYW4tdXBzIGFuZCBoZWxwIHdpdGggQ1BVIHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cy4KKworIlRvZGQgSi4gRGVyciIgPHRqZEBmb3JlLmNvbT4KK0ZvciBvZmZlcmluZyB0byB0YWtlLW9uIHN1cHBvcnQgb2YgdGhlIEZvcmUgQVRNIEFQSSBmaWxlcyB3aXRoIDIuMSBhbmQKK2ZvciBoaXMgaGVscCBpbiBtYWtpbmcgdGhlIHRhciBmaWxlcyBhbmQgc3VjaCBtb3JlIHVzZXItZnJpZW5kbHkKKworTWljaGFlbCBTaHVsZG1hbiA8bWljaGFlbHNAaW5ldC5ubz4KK0ltcHJvdmVtZW50cyB0byB0aGUgbWFrZWZpbGUgYW5kIGFkZGl0aW9uYWwgY2hlY2tzIGZvciBPcGVuQlNECisKK0tyaXMgQ29yd2luCitkaXNjb3Zlcnkgb2YgYSBkZWJ1ZyBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBpZiAoZGVidWcpIHRoYXQgbWF5IGhhdmUKK2JlZW4gdGhlIGNhdXNlIG9mIGFsbCB0aGUgbmFzdHkgY29ubmVjdGlvbiByZWZ1c2VkIGVycm9ycyBpbiByYW5kb20KK1VEUF9SUiB0ZXN0cy4uLiAKKworQ2hhcmxlcyBIYXJyaXMKK0luaXRpYWwgcHJvdG90eXBlIG9mIHRoZSBUQ1BfU0VOREZJTEUgdGVzdCBzdXBwb3J0CisKK1BoaWxpcCBQaXNoaW9uZXJpIG9mIENvcm5lbAorQ29udmVyc2lvbiBvZiB0aGUgbmV0cGVyZi5wcyBtYW51bCB0byBQREYgZm9ybWF0LgorCitUaGUgSGV3bGV0dC1QYWNrYXJkIE9wZW5WTVMgZm9sa3MKK0Fzc2lzdGFuY2Ugd2l0aCB0aGUgcG9ydCB0byBPcGVuVk1TCisKK011bmVjaGlrYSBTVU1JS0FXQSBAIEtBTUUgUHJvamVjdCAvIEZyZWVCU0Qub3JnCitJUHY2IGZpeGVzCisKK0phbiBJdmVuIG9mIENFUk4KK2luaXRpYWwgbW9kcyBmb3Igc2VuZGZpbGUoKSB1bmRlciBMaW51eAorCitGYWJyaWNlIEJhY2NoZWxsYQorZm9yIHBvaW50aW5nLW91dCB0aGF0IFNvbGFyaXMgOSBoYXMgYSBjb3B5IG9mIExpbnV4IHNlbmRmaWxlKCkKKworQW5kcmV3IEdhbGxhdGluIAorZm9yIGFzc2lzdGFuY2Ugd2l0aCB0aGUgRnJlZUJTRCBzeXNjdGwoKSBzdHVmZiwgYW5kIGxhdGVyIG1ha2luZyBpdAorY2FsaWJyYXRpb24tZnJlZQorZml4ZXMgdG8gY29uZmlndXJlIHRvIHJlY29nbml6ZSBTb2xhcmlzIDExCitmaXhlcyB0byBuZXRjcHVfcHJvY3N0YXQuYyBmb3IgbGF0ZXIgbGludXgga2VybmVscworCitNYXJrIENvb3BlcgorcG9pbnRpbmctb3V0IHRoZSBuZWVkIGZvciAtbHJlc29sdiB3aGVuIGNvbXBpbGluZyAtRERPX0ROUyBvbiBSZWRIYXQKKzcuMQorCitDYXJsIE1hc2NvdHQgCitmaW5kaW5nIHNvbWUgY3V0LWFuZC1wYXN0ZSBlcm9ycyBpbiBjcmVhdGVfZGF0YV9zb2NrZXQgZXJyb3IgbG9nZ2luZworCitGYWJyaWNlIEJhY2NoZWxsYQorRml4ZXMgZm9yIC1ESElTVE9HUkFNIGFuZCAtRFVOSVggb24gTWFjIE9TIFgsIHVwZGF0ZXMgdG8gdXNhZ2Ugc3RyaW5ncworCitTcGVuY2VyIEZyaW5rCitGaXhlcyBhbmQgQ2xlYW51cCBmb3IgV0lOMzIuICBNYW55IG92ZXIgbWFueSB5ZWFycy4KKworTmljaG9sYXMgVGhvbWFzCitGaXhlcyBmb3IgRExQSSBvbiBTVlI0IFN0cmVhbXMgdW5kZXIgTGludXgKKworRGF2ZSBDcmFpZworRml4ZXMgZm9yIGdldGFkZHJpbmZvIGVycm9yIHJldHVybnMKKworRGF2aWQgTW9zYmVyZ2VyIG9mIEhQCitXb3JrYXJvdW5kIGZvciB0aGUgTGludXggZ2V0c29ja29wdCgpIGJ1ZyB0aGF0IHJldHVybnMgbW9yZSB0aGFuIHRoYXQKK2ZvciB3aGljaCBvbmUgYXNrZWQuCisKK1N0ZXBoZW4gQnVyZ2VyIG9mIEhQCitDb2RlIHRvIGltcGxlbWVudCB0aGUgbmV0c2VydmVyIENQVSBiaW5kaW5nLgorCitWbGFkaXNsYXYgIlZsYWQiIFlhc2V2aWNoIG9mIEhQCitJbml0aWFsIFNDVFAgdGVzdHMuICBFbmhhbmNlbWVudHMgdG8gdGhlIGNvbmZpZ3VyZS5hYyBzb3VyY2VzIHRvIHNob3cKK3RoZSB3YXkgdG8gbWFrZSBtYW55IG9mIHRoZSBMSUJTPSJmb28iIGJlZm9yZSAuL2NvbmZpZ3VyZSB1bm5lY2Vzc2FyeS4KKworUGFkbWFuYWJoYW4gIlBhZGR1IiBTIE4gb2YgSFAKK1BhdGNoZXMgZm9yIC9wcm9jL3N0YXQgQ1BVIHV0aWwgYW5kIHJlY3ZfdGNwX3JyLgorCitDYXJ5IENvdXRhbnQgYW5kIG90aGVyIGhwLW1hYy11c2VycyBvZiBIUAorQWNjZXNzIHRvIE1hYyBPUyBYIHN5c3RlbXMgZm9yIHBvcnRpbmcgbmV0cGVyZiAyLjQuMAorCitDaHJpcyBCZXJ0aW4gb2YgSFAKK0FjY2VzcyB0byBBSVggZm9yIGluaXRpYWwgcG9ydGluZyBvZiBuZXRwZXJmIDIuNC4wCisKK0phbWVzIENhcmxzb24KK0Fzc2lzdGFuY2UgZmluZGluZyB0aGUgcmlnaHQgbWFnaWMgdG8gY29tcGlsZSBTQ1RQIG9uIFNvbGFyaXMgMTAuCisKK0dhdmluIAorUG9pbnRlcnMgb24gU29sYXJpcyAxMCBNaWNyb3N0YXRlIGFjY291bnRpbmcuCisKK0JyZW50IERyYW5leQorR2V0dGluZyBuZXRjcHVfcGVyZnN0YXQuYyBpbiBydW5uaW5nIG9yZGVyIG9uIEFJWCBhbmQgb3RoZXIgbWlzYworZml4dXBzIGluIHBsYWNlcyBzdWNoIGFzIEJTRC4KKworU2FtdWVsIFlpbmcKK0NoYW5nZSBzdHJ1Y3Qgc29ja2FkZHIgdG8gc3RydWN0IHNvY2thZGRyIHN0b3JhZ2UgaW4gbmV0c2VydmVyLmMKKworUm9kb2xwaG8gQm9lcgorRml4IGZvciBkZWZhdWx0IG1lc3NhZ2Ugc2l6ZSBpbiBVRFBfU1RSRUFNIHdoZW4gZGVmdWFsdCBTT19TTkRCVUYgc2l6ZQoraXMgPiBtYXggVURQIGRhdGFncmFtIHNpemUuCisKK01pY2hhZWwgRG9yZmYKK0dldHRpbmcgbmV0cGVyZi9uZXRzZXJ2ZXIgdG8gY29tcGlsZSB1bmRlciBXaW5kb3dzIHdpdGggTVMgVmlzdWFsCitTdHVkaW8gMjAwMworCitHZW9yZ2UgRGF2aXMKK0NoYW5nZXMgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBmbG9hdGluZy1wb2ludCBmb3JtYXRzLgorCitBbm9ueW1vdXMKK0NoYW5nZXMgdG8gcmV0cmlldmUgQ1BVIHV0aWwgb24gTWFjT1MgWC4KKworRGlja29uIFJlZWQKK1BhdGNoZXMgdG8gYXR0ZW5kIHRvIHNvbWUgd2luZG93cyBpbiBUQ1BfQ1JSIGFuZCBUQ1BfQ0MgdW5kZXIgV2luZG93cworCitCcmV0IE1jS2VlIDxicmV0QGhwLmNvbT4KK0ZpeGVzIHRvIGdldCBuZXRjcHVfbG9vcGVyIGNvbXBpbGluZyBhbmQgd29ya2luZyBhZnRlciB0aGUgIm5ldGNwdSIKK3NwbGl0CisKK0hhbnMgQmxvbQorSW1wcm92ZW1lbnRzIHRvIGNsb3NpbmcvcmVkaXJlY3Rpbmcgc3RkaW4vc3Rkb3V0L3N0ZGVyciBpbiBuZXRzZXJ2ZXIKKworTWFydGluIEJyb3duCitSUE0gc3VwcG9ydCBpbiB0aGUgZm9ybSBvZiBuZXRwZXJmLnNwZWMuaW4gYW5kIHJlbGF0ZWQgY29uZmlndXJlLmFjCitldGMgY2hhbmdlcworCitTaGlscGkgQWdhcndhbAorQ2hhbmdlcyB0byBhbGxvdyBVRFBfU1RSRUFNIHRvIHVzZSBjb25uZWN0ZWQgc29ja2V0cyBvbiBib3RoIHNpZGVzLgorCitTdGV2ZSBSZWluaGFyZHQgPHN0ZXZlckBlZWNzLnVtaWNoLmVkdT4KK0ZpeGVzIGZvciBidWZmZXIgZmlsbGluZy4KKworR2lzbGUgVmFuZW0KK0ZpeGVzIGZvciBXaW5kb3dzIGNvbXBpbGF0aW9uIHVuZGVyIE1pbmdXL2djYy4KKworU2NvdHQgV2VpdHplbmthbXAKK1BhdGNoZXMgdG8gZW5hYmxlIGRlbW8gbW9kZSBpbiB0aGUgVURQX1NUUkVBTSB0ZXN0CisKK0VtaXIgSGFsZXBvdmljCitGZWVkYmFjayBvbiB0aGUgbWFudWFsCisKK0tvdWhlaSBTdXRvdQorR2VuZXJhdGUgbmV0cGVyZl92ZXJzaW9uLmggYW5kIG5ldHBlcmYuc3BlYyB2aWEgY29uZmlndXJlIHJhdGhlciB0aGFuCittYWtlZmlsZSwgaW5jbHVkZSBsaW1pdHMgdG8gZ2V0IFBhdGhNQVggb24gRnJlZUJTRC4KKworRGFuIFlvc3QKK0ZpeCB0byBmZmx1c2goKSBlYWNoIGludGVyaW0gcmVzdWx0IGluIGRlbW8gbW9kZSB0byBtYWtlIHRoaW5ncworaGFwcGllciBmb3IgZm9sa3MgcmVkaXJlY3Rpbmcgc2FtZSB0byBhIGZpbGUuCisKK0FsZXhhbmRlciBEdXljaworRml4ZXMgdG8gcmVwbGFjZSBzdHJ1Y3Qgc29ja2FkZHJfaW4gd2l0aCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQorRml4ZXMgdG8gVURQX1JSIHRvIHByZWNsdWRlIGhhbmdzIG9uIFdpbmRvd3MKK0ZpemVzIHRvIFVEUF9SUiB0byBob25vdXIgLWYgYW5kIC1CIG9wdGlvbnMKKworQW5vbnltb3VzCitTdXBwb3J0IGZvciBzZW5kZmlsZSgpIG9uIE9TWAorCitNYXR0IFdhZGRlbAorRml4IHRvIHVzZSB2Zm9yaygpIGluc3RlYWQgb2YgZm9yaygpIG9uIHBsYXRmb3JtcyB3aXRob3V0IGZvcmsoKQorCitTaW1vbiBCdXJnZSA8c2ltb25iQE5ldEJTRC5vcmc+CitGaXhlcyBmb3IgKkJTRCBDUFUgdXRpbC4KKworQWRhbSBCaWRlbWEKK0ZpeGVzIGZvciBsYXVuY2hpbmcgbmV0c2VydmVyIGNoaWxkcmVuIHdoZW4gdGhlIHBhdGggdG8gbmV0c2VydmVyLmV4ZQoraXMgdmVyeSBsb25nLiAKKworR2lzbGUgVmFuZW0KK01pbmdXIGNuZCBNU0RPUyAoZGpncHApIGxlYW51cHMuCisKK01hcmNlbCBTaHVsZG1hbgorQ2hhbmdlcyB0byBtYWtlIG5ldHBlcmYgbW9yZSBwcm9maWxpbmcgZnJpZW5kbHkKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvQ09QWUlORyBiL25ldHBlcmYtMi40LjUvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjNjZWIyCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9DT1BZSU5HCkBAIC0wLDAgKzEsNDMgQEAKKworIAorICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTMgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyAgICAgICAgICAgICAgICAgICAgICAgICBBTEwgUklHSFRTIFJFU0VSVkVELgorIAorICBUaGUgZW5jbG9zZWQgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gaW5jbHVkZXMgY29weXJpZ2h0ZWQgd29ya3MKKyAgb2YgSGV3bGV0dC1QYWNrYXJkIENvLiBGb3IgYXMgbG9uZyBhcyB5b3UgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZworICBsaW1pdGF0aW9ucywgeW91IGFyZSBoZXJlYnkgYXV0aG9yaXplZCB0byAoaSkgdXNlLCByZXByb2R1Y2UsIGFuZAorICBtb2RpZnkgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uLCBhbmQgdG8gKGlpKSBkaXN0cmlidXRlIHRoZQorICBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMsIGZvcgorICBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBvbmx5LgorICAgICAgCisgIDEuICBUaGUgZW5jbG9zZWQgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXQgbm8KKyAgICAgIGNoYXJnZSBpbiBvcmRlciB0byBhZHZhbmNlIHRoZSBnZW5lcmFsIGRldmVsb3BtZW50IG9mCisgICAgICBoaWdoLXBlcmZvcm1hbmNlIG5ldHdvcmtpbmcgcHJvZHVjdHMuCisgCisgIDIuICBZb3UgbWF5IG5vdCBkZWxldGUgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCBpbiB0aGUKKyAgICAgIHNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24uIEFsbCBoYXJkIGNvcGllcywgYW5kIGNvcGllcyBpbgorICAgICAgc291cmNlIGNvZGUgb3Igb2JqZWN0IGNvZGUgZm9ybSwgb2YgdGhlIHNvZnR3YXJlIG9yCisgICAgICBkb2N1bWVudGF0aW9uIChpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucykgbXVzdCBjb250YWluIGF0IGxlYXN0CisgICAgICBvbmUgb2YgdGhlIGNvcHlyaWdodCBub3RpY2VzLgorIAorICAzLiAgVGhlIGVuY2xvc2VkIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGhhcyBub3QgYmVlbiBzdWJqZWN0ZWQKKyAgICAgIHRvIHRlc3RpbmcgYW5kIHF1YWxpdHkgY29udHJvbCBhbmQgaXMgbm90IGEgSGV3bGV0dC1QYWNrYXJkIENvLgorICAgICAgcHJvZHVjdC4gQXQgYSBmdXR1cmUgdGltZSwgSGV3bGV0dC1QYWNrYXJkIENvLiBtYXkgb3IgbWF5IG5vdAorICAgICAgb2ZmZXIgYSB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcyBhIHByb2R1Y3QuCisgIAorICA0LiAgVEhFIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVEICJBUyBJUyIuCisgICAgICBIRVdMRVRULVBBQ0tBUkQgQ09NUEFOWSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFVTRSwKKyAgICAgIFJFUFJPRFVDVElPTiwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgU09GVFdBUkUgT1IKKyAgICAgIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgSU5GUklOR0UgQSBUSElSRCBQQVJUWSdTIElOVEVMTEVDVFVBTAorICAgICAgUFJPUEVSVFkgUklHSFRTLiBIUCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIE9SCisgICAgICBET0NVTUVOVEFUSU9OIElTIEVSUk9SIEZSRUUuIEhQIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywKKyAgICAgIEVYUFJFU1MgQU5EIElNUExJRUQsIFdJVEggUkVHQVJEIFRPIFRIRSBTT0ZUV0FSRSBBTkQgVEhFCisgICAgICBET0NVTUVOVEFUSU9OLiBIUCBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIE9GCisgICAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICAKKyAgNS4gIEhFV0xFVFQtUEFDS0FSRCBDT01QQU5ZIFdJTEwgTk9UIElOIEFOWSBFVkVOVCBCRSBMSUFCTEUgRk9SIEFOWQorICAgICAgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgICAgIChJTkNMVURJTkcgTE9TVCBQUk9GSVRTKSBSRUxBVEVEIFRPIEFOWSBVU0UsIFJFUFJPRFVDVElPTiwKKyAgICAgIE1PRElGSUNBVElPTiwgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OLgorIAorCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L0NoYW5nZUxvZyBiL25ldHBlcmYtMi40LjUvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NDAyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L0NoYW5nZUxvZwpAQCAtMCwwICsxIEBACitTZWUgdGhlIGZpbGUgUmVsZWFzZV9Ob3Rlcy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L0lOU1RBTEwgYi9uZXRwZXJmLTIuNC41L0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjYWY3YwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvSU5TVEFMTApAQCAtMCwwICsxLDIyOSBAQAorQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIGZyZWUgZG9jdW1lbnRhdGlvbjsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwordW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCitCYXNpYyBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PQorCisgICBUaGVzZSBhcmUgZ2VuZXJpYyBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCisgICBUaGUgYGNvbmZpZ3VyZScgc2hlbGwgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGNvcnJlY3QgdmFsdWVzIGZvcgordmFyaW91cyBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4gIEl0IHVzZXMKK3Rob3NlIHZhbHVlcyB0byBjcmVhdGUgYSBgTWFrZWZpbGUnIGluIGVhY2ggZGlyZWN0b3J5IG9mIHRoZSBwYWNrYWdlLgorSXQgbWF5IGFsc28gY3JlYXRlIG9uZSBvciBtb3JlIGAuaCcgZmlsZXMgY29udGFpbmluZyBzeXN0ZW0tZGVwZW5kZW50CitkZWZpbml0aW9ucy4gIEZpbmFsbHksIGl0IGNyZWF0ZXMgYSBzaGVsbCBzY3JpcHQgYGNvbmZpZy5zdGF0dXMnIHRoYXQKK3lvdSBjYW4gcnVuIGluIHRoZSBmdXR1cmUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW5kIGEKK2ZpbGUgYGNvbmZpZy5sb2cnIGNvbnRhaW5pbmcgY29tcGlsZXIgb3V0cHV0ICh1c2VmdWwgbWFpbmx5IGZvcgorZGVidWdnaW5nIGBjb25maWd1cmUnKS4KKworICAgSXQgY2FuIGFsc28gdXNlIGFuIG9wdGlvbmFsIGZpbGUgKHR5cGljYWxseSBjYWxsZWQgYGNvbmZpZy5jYWNoZScKK2FuZCBlbmFibGVkIHdpdGggYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnIG9yIHNpbXBseSBgLUMnKSB0aGF0IHNhdmVzCit0aGUgcmVzdWx0cyBvZiBpdHMgdGVzdHMgdG8gc3BlZWQgdXAgcmVjb25maWd1cmluZy4gIChDYWNoaW5nIGlzCitkaXNhYmxlZCBieSBkZWZhdWx0IHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aCBhY2NpZGVudGFsIHVzZSBvZiBzdGFsZQorY2FjaGUgZmlsZXMuKQorCisgICBJZiB5b3UgbmVlZCB0byBkbyB1bnVzdWFsIHRoaW5ncyB0byBjb21waWxlIHRoZSBwYWNrYWdlLCBwbGVhc2UgdHJ5Cit0byBmaWd1cmUgb3V0IGhvdyBgY29uZmlndXJlJyBjb3VsZCBjaGVjayB3aGV0aGVyIHRvIGRvIHRoZW0sIGFuZCBtYWlsCitkaWZmcyBvciBpbnN0cnVjdGlvbnMgdG8gdGhlIGFkZHJlc3MgZ2l2ZW4gaW4gdGhlIGBSRUFETUUnIHNvIHRoZXkgY2FuCitiZSBjb25zaWRlcmVkIGZvciB0aGUgbmV4dCByZWxlYXNlLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgY2FjaGUsIGFuZCBhdAorc29tZSBwb2ludCBgY29uZmlnLmNhY2hlJyBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdQorbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorCisgICBUaGUgZmlsZSBgY29uZmlndXJlLmFjJyAob3IgYGNvbmZpZ3VyZS5pbicpIGlzIHVzZWQgdG8gY3JlYXRlCitgY29uZmlndXJlJyBieSBhIHByb2dyYW0gY2FsbGVkIGBhdXRvY29uZicuICBZb3Ugb25seSBuZWVkCitgY29uZmlndXJlLmFjJyBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQgb3IgcmVnZW5lcmF0ZSBgY29uZmlndXJlJyB1c2luZworYSBuZXdlciB2ZXJzaW9uIG9mIGBhdXRvY29uZicuCisKK1RoZSBzaW1wbGVzdCB3YXkgdG8gY29tcGlsZSB0aGlzIHBhY2thZ2UgaXM6CisKKyAgMS4gYGNkJyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBhbmQgdHlwZQorICAgICBgLi9jb25maWd1cmUnIHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnZSBmb3IgeW91ciBzeXN0ZW0uICBJZiB5b3UncmUKKyAgICAgdXNpbmcgYGNzaCcgb24gYW4gb2xkIHZlcnNpb24gb2YgU3lzdGVtIFYsIHlvdSBtaWdodCBuZWVkIHRvIHR5cGUKKyAgICAgYHNoIC4vY29uZmlndXJlJyBpbnN0ZWFkIHRvIHByZXZlbnQgYGNzaCcgZnJvbSB0cnlpbmcgdG8gZXhlY3V0ZQorICAgICBgY29uZmlndXJlJyBpdHNlbGYuCisKKyAgICAgUnVubmluZyBgY29uZmlndXJlJyB0YWtlcyBhd2hpbGUuICBXaGlsZSBydW5uaW5nLCBpdCBwcmludHMgc29tZQorICAgICBtZXNzYWdlcyB0ZWxsaW5nIHdoaWNoIGZlYXR1cmVzIGl0IGlzIGNoZWNraW5nIGZvci4KKworICAyLiBUeXBlIGBtYWtlJyB0byBjb21waWxlIHRoZSBwYWNrYWdlLgorCisgIDMuIE9wdGlvbmFsbHksIHR5cGUgYG1ha2UgY2hlY2snIHRvIHJ1biBhbnkgc2VsZi10ZXN0cyB0aGF0IGNvbWUgd2l0aAorICAgICB0aGUgcGFja2FnZS4KKworICA0LiBUeXBlIGBtYWtlIGluc3RhbGwnIHRvIGluc3RhbGwgdGhlIHByb2dyYW1zIGFuZCBhbnkgZGF0YSBmaWxlcyBhbmQKKyAgICAgZG9jdW1lbnRhdGlvbi4KKworICA1LiBZb3UgY2FuIHJlbW92ZSB0aGUgcHJvZ3JhbSBiaW5hcmllcyBhbmQgb2JqZWN0IGZpbGVzIGZyb20gdGhlCisgICAgIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBieSB0eXBpbmcgYG1ha2UgY2xlYW4nLiAgVG8gYWxzbyByZW1vdmUgdGhlCisgICAgIGZpbGVzIHRoYXQgYGNvbmZpZ3VyZScgY3JlYXRlZCAoc28geW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvcgorICAgICBhIGRpZmZlcmVudCBraW5kIG9mIGNvbXB1dGVyKSwgdHlwZSBgbWFrZSBkaXN0Y2xlYW4nLiAgVGhlcmUgaXMKKyAgICAgYWxzbyBhIGBtYWtlIG1haW50YWluZXItY2xlYW4nIHRhcmdldCwgYnV0IHRoYXQgaXMgaW50ZW5kZWQgbWFpbmx5CisgICAgIGZvciB0aGUgcGFja2FnZSdzIGRldmVsb3BlcnMuICBJZiB5b3UgdXNlIGl0LCB5b3UgbWF5IGhhdmUgdG8gZ2V0CisgICAgIGFsbCBzb3J0cyBvZiBvdGhlciBwcm9ncmFtcyBpbiBvcmRlciB0byByZWdlbmVyYXRlIGZpbGVzIHRoYXQgY2FtZQorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK0NvbXBpbGVycyBhbmQgT3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09CisKKyAgIFNvbWUgc3lzdGVtcyByZXF1aXJlIHVudXN1YWwgb3B0aW9ucyBmb3IgY29tcGlsYXRpb24gb3IgbGlua2luZyB0aGF0Cit0aGUgYGNvbmZpZ3VyZScgc2NyaXB0IGRvZXMgbm90IGtub3cgYWJvdXQuICBSdW4gYC4vY29uZmlndXJlIC0taGVscCcKK2ZvciBkZXRhaWxzIG9uIHNvbWUgb2YgdGhlIHBlcnRpbmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKyAgIFlvdSBjYW4gZ2l2ZSBgY29uZmlndXJlJyBpbml0aWFsIHZhbHVlcyBmb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCitieSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIHRoZSBlbnZpcm9ubWVudC4gIEhlcmUKK2lzIGFuIGV4YW1wbGU6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9Yzg5IENGTEFHUz0tTzIgTElCUz0tbHBvc2l4CisKKyAgICpOb3RlIERlZmluaW5nIFZhcmlhYmxlczo6LCBmb3IgbW9yZSBkZXRhaWxzLgorCitDb21waWxpbmcgRm9yIE11bHRpcGxlIEFyY2hpdGVjdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBZb3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG1vcmUgdGhhbiBvbmUga2luZCBvZiBjb21wdXRlciBhdCB0aGUKK3NhbWUgdGltZSwgYnkgcGxhY2luZyB0aGUgb2JqZWN0IGZpbGVzIGZvciBlYWNoIGFyY2hpdGVjdHVyZSBpbiB0aGVpcgorb3duIGRpcmVjdG9yeS4gIFRvIGRvIHRoaXMsIHlvdSBtdXN0IHVzZSBhIHZlcnNpb24gb2YgYG1ha2UnIHRoYXQKK3N1cHBvcnRzIHRoZSBgVlBBVEgnIHZhcmlhYmxlLCBzdWNoIGFzIEdOVSBgbWFrZScuICBgY2QnIHRvIHRoZQorZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRoZSBvYmplY3QgZmlsZXMgYW5kIGV4ZWN1dGFibGVzIHRvIGdvIGFuZCBydW4KK3RoZSBgY29uZmlndXJlJyBzY3JpcHQuICBgY29uZmlndXJlJyBhdXRvbWF0aWNhbGx5IGNoZWNrcyBmb3IgdGhlCitzb3VyY2UgY29kZSBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgYGNvbmZpZ3VyZScgaXMgaW4gYW5kIGluIGAuLicuCisKKyAgIElmIHlvdSBoYXZlIHRvIHVzZSBhIGBtYWtlJyB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGBWUEFUSCcKK3ZhcmlhYmxlLCB5b3UgaGF2ZSB0byBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBvbmUgYXJjaGl0ZWN0dXJlIGF0IGEKK3RpbWUgaW4gdGhlIHNvdXJjZSBjb2RlIGRpcmVjdG9yeS4gIEFmdGVyIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUKK3BhY2thZ2UgZm9yIG9uZSBhcmNoaXRlY3R1cmUsIHVzZSBgbWFrZSBkaXN0Y2xlYW4nIGJlZm9yZSByZWNvbmZpZ3VyaW5nCitmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUuCisKK0luc3RhbGxhdGlvbiBOYW1lcworPT09PT09PT09PT09PT09PT09CisKKyAgIEJ5IGRlZmF1bHQsIGBtYWtlIGluc3RhbGwnIHdpbGwgaW5zdGFsbCB0aGUgcGFja2FnZSdzIGZpbGVzIGluCitgL3Vzci9sb2NhbC9iaW4nLCBgL3Vzci9sb2NhbC9tYW4nLCBldGMuICBZb3UgY2FuIHNwZWNpZnkgYW4KK2luc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBgL3Vzci9sb2NhbCcgYnkgZ2l2aW5nIGBjb25maWd1cmUnIHRoZQorb3B0aW9uIGAtLXByZWZpeD1QQVRIJy4KKworICAgWW91IGNhbiBzcGVjaWZ5IHNlcGFyYXRlIGluc3RhbGxhdGlvbiBwcmVmaXhlcyBmb3IKK2FyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyBhbmQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzLiAgSWYgeW91CitnaXZlIGBjb25maWd1cmUnIHRoZSBvcHRpb24gYC0tZXhlYy1wcmVmaXg9UEFUSCcsIHRoZSBwYWNrYWdlIHdpbGwgdXNlCitQQVRIIGFzIHRoZSBwcmVmaXggZm9yIGluc3RhbGxpbmcgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4KK0RvY3VtZW50YXRpb24gYW5kIG90aGVyIGRhdGEgZmlsZXMgd2lsbCBzdGlsbCB1c2UgdGhlIHJlZ3VsYXIgcHJlZml4LgorCisgICBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSBhbiB1bnVzdWFsIGRpcmVjdG9yeSBsYXlvdXQgeW91IGNhbiBnaXZlCitvcHRpb25zIGxpa2UgYC0tYmluZGlyPVBBVEgnIHRvIHNwZWNpZnkgZGlmZmVyZW50IHZhbHVlcyBmb3IgcGFydGljdWxhcgora2luZHMgb2YgZmlsZXMuICBSdW4gYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBhIGxpc3Qgb2YgdGhlIGRpcmVjdG9yaWVzCit5b3UgY2FuIHNldCBhbmQgd2hhdCBraW5kcyBvZiBmaWxlcyBnbyBpbiB0aGVtLgorCisgICBJZiB0aGUgcGFja2FnZSBzdXBwb3J0cyBpdCwgeW91IGNhbiBjYXVzZSBwcm9ncmFtcyB0byBiZSBpbnN0YWxsZWQKK3dpdGggYW4gZXh0cmEgcHJlZml4IG9yIHN1ZmZpeCBvbiB0aGVpciBuYW1lcyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCitvcHRpb24gYC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYJyBvciBgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVgnLgorCitPcHRpb25hbCBGZWF0dXJlcworPT09PT09PT09PT09PT09PT0KKworICAgU29tZSBwYWNrYWdlcyBwYXkgYXR0ZW50aW9uIHRvIGAtLWVuYWJsZS1GRUFUVVJFJyBvcHRpb25zIHRvCitgY29uZmlndXJlJywgd2hlcmUgRkVBVFVSRSBpbmRpY2F0ZXMgYW4gb3B0aW9uYWwgcGFydCBvZiB0aGUgcGFja2FnZS4KK1RoZXkgbWF5IGFsc28gcGF5IGF0dGVudGlvbiB0byBgLS13aXRoLVBBQ0tBR0UnIG9wdGlvbnMsIHdoZXJlIFBBQ0tBR0UKK2lzIHNvbWV0aGluZyBsaWtlIGBnbnUtYXMnIG9yIGB4JyAoZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0pLiAgVGhlCitgUkVBRE1FJyBzaG91bGQgbWVudGlvbiBhbnkgYC0tZW5hYmxlLScgYW5kIGAtLXdpdGgtJyBvcHRpb25zIHRoYXQgdGhlCitwYWNrYWdlIHJlY29nbml6ZXMuCisKKyAgIEZvciBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgWCBXaW5kb3cgU3lzdGVtLCBgY29uZmlndXJlJyBjYW4gdXN1YWxseQorZmluZCB0aGUgWCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGZpbGVzIGF1dG9tYXRpY2FsbHksIGJ1dCBpZiBpdCBkb2Vzbid0LAoreW91IGNhbiB1c2UgdGhlIGBjb25maWd1cmUnIG9wdGlvbnMgYC0teC1pbmNsdWRlcz1ESVInIGFuZAorYC0teC1saWJyYXJpZXM9RElSJyB0byBzcGVjaWZ5IHRoZWlyIGxvY2F0aW9ucy4KKworU3BlY2lmeWluZyB0aGUgU3lzdGVtIFR5cGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbm5vdCBmaWd1cmUgb3V0CithdXRvbWF0aWNhbGx5LCBidXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIG1hY2hpbmUgdGhlIHBhY2thZ2UKK3dpbGwgcnVuIG9uLiAgVXN1YWxseSwgYXNzdW1pbmcgdGhlIHBhY2thZ2UgaXMgYnVpbHQgdG8gYmUgcnVuIG9uIHRoZQorX3NhbWVfIGFyY2hpdGVjdHVyZXMsIGBjb25maWd1cmUnIGNhbiBmaWd1cmUgdGhhdCBvdXQsIGJ1dCBpZiBpdCBwcmludHMKK2EgbWVzc2FnZSBzYXlpbmcgaXQgY2Fubm90IGd1ZXNzIHRoZSBtYWNoaW5lIHR5cGUsIGdpdmUgaXQgdGhlCitgLS1idWlsZD1UWVBFJyBvcHRpb24uICBUWVBFIGNhbiBlaXRoZXIgYmUgYSBzaG9ydCBuYW1lIGZvciB0aGUgc3lzdGVtCit0eXBlLCBzdWNoIGFzIGBzdW40Jywgb3IgYSBjYW5vbmljYWwgbmFtZSB3aGljaCBoYXMgdGhlIGZvcm06CisKKyAgICAgQ1BVLUNPTVBBTlktU1lTVEVNCisKK3doZXJlIFNZU1RFTSBjYW4gaGF2ZSBvbmUgb2YgdGhlc2UgZm9ybXM6CisKKyAgICAgT1MgS0VSTkVMLU9TCisKKyAgIFNlZSB0aGUgZmlsZSBgY29uZmlnLnN1YicgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZWFjaCBmaWVsZC4gIElmCitgY29uZmlnLnN1YicgaXNuJ3QgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlLCB0aGVuIHRoaXMgcGFja2FnZSBkb2Vzbid0CituZWVkIHRvIGtub3cgdGhlIG1hY2hpbmUgdHlwZS4KKworICAgSWYgeW91IGFyZSBfYnVpbGRpbmdfIGNvbXBpbGVyIHRvb2xzIGZvciBjcm9zcy1jb21waWxpbmcsIHlvdSBzaG91bGQKK3VzZSB0aGUgYC0tdGFyZ2V0PVRZUEUnIG9wdGlvbiB0byBzZWxlY3QgdGhlIHR5cGUgb2Ygc3lzdGVtIHRoZXkgd2lsbAorcHJvZHVjZSBjb2RlIGZvci4KKworICAgSWYgeW91IHdhbnQgdG8gX3VzZV8gYSBjcm9zcyBjb21waWxlciwgdGhhdCBnZW5lcmF0ZXMgY29kZSBmb3IgYQorcGxhdGZvcm0gZGlmZmVyZW50IGZyb20gdGhlIGJ1aWxkIHBsYXRmb3JtLCB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlCisiaG9zdCIgcGxhdGZvcm0gKGkuZS4sIHRoYXQgb24gd2hpY2ggdGhlIGdlbmVyYXRlZCBwcm9ncmFtcyB3aWxsCitldmVudHVhbGx5IGJlIHJ1bikgd2l0aCBgLS1ob3N0PVRZUEUnLgorCitTaGFyaW5nIERlZmF1bHRzCis9PT09PT09PT09PT09PT09CisKKyAgIElmIHlvdSB3YW50IHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYGNvbmZpZ3VyZScgc2NyaXB0cyB0byBzaGFyZSwKK3lvdSBjYW4gY3JlYXRlIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FsbGVkIGBjb25maWcuc2l0ZScgdGhhdCBnaXZlcworZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcyBsaWtlIGBDQycsIGBjYWNoZV9maWxlJywgYW5kIGBwcmVmaXgnLgorYGNvbmZpZ3VyZScgbG9va3MgZm9yIGBQUkVGSVgvc2hhcmUvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cywgdGhlbgorYFBSRUZJWC9ldGMvY29uZmlnLnNpdGUnIGlmIGl0IGV4aXN0cy4gIE9yLCB5b3UgY2FuIHNldCB0aGUKK2BDT05GSUdfU0lURScgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBzaXRlIHNjcmlwdC4KK0Egd2FybmluZzogbm90IGFsbCBgY29uZmlndXJlJyBzY3JpcHRzIGxvb2sgZm9yIGEgc2l0ZSBzY3JpcHQuCisKK0RlZmluaW5nIFZhcmlhYmxlcworPT09PT09PT09PT09PT09PT09CisKKyAgIFZhcmlhYmxlcyBub3QgZGVmaW5lZCBpbiBhIHNpdGUgc2hlbGwgc2NyaXB0IGNhbiBiZSBzZXQgaW4gdGhlCitlbnZpcm9ubWVudCBwYXNzZWQgdG8gYGNvbmZpZ3VyZScuICBIb3dldmVyLCBzb21lIHBhY2thZ2VzIG1heSBydW4KK2NvbmZpZ3VyZSBhZ2FpbiBkdXJpbmcgdGhlIGJ1aWxkLCBhbmQgdGhlIGN1c3RvbWl6ZWQgdmFsdWVzIG9mIHRoZXNlCit2YXJpYWJsZXMgbWF5IGJlIGxvc3QuICBJbiBvcmRlciB0byBhdm9pZCB0aGlzIHByb2JsZW0sIHlvdSBzaG91bGQgc2V0Cit0aGVtIGluIHRoZSBgY29uZmlndXJlJyBjb21tYW5kIGxpbmUsIHVzaW5nIGBWQVI9dmFsdWUnLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9L3Vzci9sb2NhbDIvYmluL2djYworCit3aWxsIGNhdXNlIHRoZSBzcGVjaWZpZWQgZ2NjIHRvIGJlIHVzZWQgYXMgdGhlIEMgY29tcGlsZXIgKHVubGVzcyBpdCBpcworb3ZlcnJpZGRlbiBpbiB0aGUgc2l0ZSBzaGVsbCBzY3JpcHQpLgorCitgY29uZmlndXJlJyBJbnZvY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09CisKKyAgIGBjb25maWd1cmUnIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgaG93IGl0CitvcGVyYXRlcy4KKworYC0taGVscCcKK2AtaCcKKyAgICAgUHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIGBjb25maWd1cmUnLCBhbmQgZXhpdC4KKworYC0tdmVyc2lvbicKK2AtVicKKyAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgQXV0b2NvbmYgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYGNvbmZpZ3VyZScKKyAgICAgc2NyaXB0LCBhbmQgZXhpdC4KKworYC0tY2FjaGUtZmlsZT1GSUxFJworICAgICBFbmFibGUgdGhlIGNhY2hlOiB1c2UgYW5kIHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzIGluIEZJTEUsCisgICAgIHRyYWRpdGlvbmFsbHkgYGNvbmZpZy5jYWNoZScuICBGSUxFIGRlZmF1bHRzIHRvIGAvZGV2L251bGwnIHRvCisgICAgIGRpc2FibGUgY2FjaGluZy4KKworYC0tY29uZmlnLWNhY2hlJworYC1DJworICAgICBBbGlhcyBmb3IgYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnLgorCitgLS1xdWlldCcKK2AtLXNpbGVudCcKK2AtcScKKyAgICAgRG8gbm90IHByaW50IG1lc3NhZ2VzIHNheWluZyB3aGljaCBjaGVja3MgYXJlIGJlaW5nIG1hZGUuICBUbworICAgICBzdXBwcmVzcyBhbGwgbm9ybWFsIG91dHB1dCwgcmVkaXJlY3QgaXQgdG8gYC9kZXYvbnVsbCcgKGFueSBlcnJvcgorICAgICBtZXNzYWdlcyB3aWxsIHN0aWxsIGJlIHNob3duKS4KKworYC0tc3JjZGlyPURJUicKKyAgICAgTG9vayBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBpbiBkaXJlY3RvcnkgRElSLiAgVXN1YWxseQorICAgICBgY29uZmlndXJlJyBjYW4gZGV0ZXJtaW5lIHRoYXQgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCisKK2Bjb25maWd1cmUnIGFsc28gYWNjZXB0cyBzb21lIG90aGVyLCBub3Qgd2lkZWx5IHVzZWZ1bCwgb3B0aW9ucy4gIFJ1bgorYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBtb3JlIGRldGFpbHMuCisKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvTWFrZWZpbGUuYW0gYi9uZXRwZXJmLTIuNC41L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYmQ5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNCBAQAorCitBVVRPTUFLRV9PUFRJT05TID0gZGlzdC1iemlwMiBkaXN0LXppcAorU1VCRElSUyA9IHNyYyBkb2MKK0VYVFJBX0RJU1QgPSBSRUFETUUuKiBSZWxlYXNlX05vdGVzIGluZXRfbnRvcC5jIGF1dG9nZW4uc2ggbTQKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvTWFrZWZpbGUuaW4gYi9uZXRwZXJmLTIuNC41L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Y2JjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNTU3IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjcuOSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4KKworYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgoraG9zdF90cmlwbGV0ID0gQGhvc3RACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitHUkVQID0gQEdSRVBACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK05FRURfTElCQ09NUEFUX0ZBTFNFID0gQE5FRURfTElCQ09NUEFUX0ZBTFNFQAorTkVFRF9MSUJDT01QQVRfVFJVRSA9IEBORUVEX0xJQkNPTVBBVF9UUlVFQAorTkVUQ1BVX1NPVVJDRSA9IEBORVRDUFVfU09VUkNFQAorTkVURFJWTEtVUF9TT1VSQ0UgPSBATkVURFJWTEtVUF9TT1VSQ0VACitORVRSVExLVVBfU09VUkNFID0gQE5FVFJUTEtVUF9TT1VSQ0VACitORVRTRUNMS1VQX1NPVVJDRSA9IEBORVRTRUNMS1VQX1NPVVJDRUAKK05FVFNMT1RMS1VQX1NPVVJDRSA9IEBORVRTTE9UTEtVUF9TT1VSQ0VACitORVRTWVNMS1VQX1NPVVJDRSA9IEBORVRTWVNMS1VQX1NPVVJDRUAKK09CSkVYVCA9IEBPQkpFWFRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACisKK0FVVE9NQUtFX09QVElPTlMgPSBkaXN0LWJ6aXAyIGRpc3QtemlwCitTVUJESVJTID0gc3JjIGRvYworRVhUUkFfRElTVCA9IFJFQURNRS4qIFJlbGVhc2VfTm90ZXMgaW5ldF9udG9wLmMgYXV0b2dlbi5zaCBtNAorc3ViZGlyID0gLgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9IGNvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBuZXRwZXJmLnNwZWMKK0RJU1RfU09VUkNFUyA9CisKK1JFQ1VSU0lWRV9UQVJHRVRTID0gaW5mby1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWFsbC1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsZGlycy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZSBcCisJY2hlY2stcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29uZmlndXJlIEFVVEhPUlMgXAorCUNPUFlJTkcgQ2hhbmdlTG9nIElOU1RBTEwgTWFrZWZpbGUuYW0gTkVXUyBhY2luY2x1ZGUubTQgXAorCWFjbG9jYWwubTQgY29uZmlnLmd1ZXNzIGNvbmZpZy5oLmluIGNvbmZpZy5zdWIgY29uZmlndXJlIFwKKwljb25maWd1cmUuYWMgZGVwY29tcCBpbnN0YWxsLXNoIG1pc3NpbmcgbWtpbnN0YWxsZGlycyBcCisJbmV0cGVyZi5zcGVjLmluCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCithbGw6IGNvbmZpZy5oCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisKK2FtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBcCisgY29uZmlndXJlLmxpbmVubworJChzcmNkaXIpL01ha2VmaWxlLmluOiAgTWFrZWZpbGUuYW0gICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjICQoQUNMT0NBTF9NNCkKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBNYWtlZmlsZQorTWFrZWZpbGU6ICAkKHNyY2RpcikvTWFrZWZpbGUuaW4gICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSkKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQoc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCiskKHNyY2RpcikvY29uZmlndXJlOiAgJChzcmNkaXIpL2NvbmZpZ3VyZS5hYyAkKEFDTE9DQUxfTTQpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykKKwljZCAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKKworJChBQ0xPQ0FMX000KTogIGNvbmZpZ3VyZS5hYyBhY2luY2x1ZGUubTQKKwljZCAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKworY29uZmlnLmg6IHN0YW1wLWgxCisJQGlmIHRlc3QgISAtZiAkQDsgdGhlbiBcCisJICBybSAtZiBzdGFtcC1oMTsgXAorCSAgJChNQUtFKSBzdGFtcC1oMTsgXAorCWVsc2UgOjsgZmkKKworc3RhbXAtaDE6ICQoc3JjZGlyKS9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzdGFtcC1oMQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKKworJChzcmNkaXIpL2NvbmZpZy5oLmluOiAgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChBQ0xPQ0FMX000KSAKKwljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKwl0b3VjaCAkKHNyY2RpcikvY29uZmlnLmguaW4KKworZGlzdGNsZWFuLWhkcjoKKwktcm0gLWYgY29uZmlnLmggc3RhbXAtaDEKK25ldHBlcmYuc3BlYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgbmV0cGVyZi5zcGVjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAordW5pbnN0YWxsLWluZm8tYW06CisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAc2V0IGZub3JkICQkTUFLRUZMQUdTOyBhbWY9JCQyOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgIHx8IGNhc2UgIiQkYW1mIiBpbiAqPSopIGV4aXQgMTs7ICprKikgZmFpbD15ZXM7OyAqKSBleGl0IDE7OyBlc2FjOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKK21vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBcCittYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZToKKwlAc2V0IGZub3JkICQkTUFLRUZMQUdTOyBhbWY9JCQyOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgICB8fCBjYXNlICIkJGFtZiIgaW4gKj0qKSBleGl0IDE7OyAqayopIGZhaWw9eWVzOzsgKikgZXhpdCAxOzsgZXNhYzsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworRVRBR1MgPSBldGFncworRVRBR1NGTEFHUyA9CisKK0NUQUdTID0gY3RhZ3MKK0NUQUdTRkxBR1MgPQorCit0YWdzOiBUQUdTCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKGV0YWdzIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1mICQkc3ViZGlyL1RBR1MgJiYgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKwordG9wX2Rpc3RkaXIgPSAuCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCisKK2FtX19yZW1vdmVfZGlzdGRpciA9IFwKKyAgeyB0ZXN0ICEgLWQgJChkaXN0ZGlyKSBcCisgICAgfHwgeyBmaW5kICQoZGlzdGRpcikgLXR5cGUgZCAhIC1wZXJtIC0yMDAgLWV4ZWMgY2htb2QgdSt3IHt9ICc7JyBcCisgICAgICAgICAmJiBybSAtZnIgJChkaXN0ZGlyKTsgfTsgfQorCitHWklQX0VOViA9IC0tYmVzdAorZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCW1rZGlyICQoZGlzdGRpcikKKwkkKG1raW5zdGFsbGRpcnMpICQoZGlzdGRpcikvLiAkKGRpc3RkaXIpL3NyYworCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2luc3RhbGxkaXJzKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWQgJChkaXN0ZGlyKS8kJHN1YmRpciBcCisJICAgIHx8IG1rZGlyICQoZGlzdGRpcikvJCRzdWJkaXIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgICAgKGNkICQkc3ViZGlyICYmIFwKKwkgICAgICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAgICAgICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIFwKKwkgICAgICAgIGRpc3RkaXI9Li4vJChkaXN0ZGlyKS8kJHN1YmRpciBcCisJICAgICAgICBkaXN0ZGlyKSBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwktZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtNzc3IC1leGVjIGNobW9kIGErcnd4IHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChTSEVMTCkgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAorCXx8IGNobW9kIC1SIGErciAkKGRpc3RkaXIpCitkaXN0LWd6aXA6IGRpc3RkaXIKKwkkKEFNVEFSKSBjaG9mIC0gJChkaXN0ZGlyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC1iemlwMjogZGlzdGRpcgorCSQoQU1UQVIpIGNob2YgLSAkKGRpc3RkaXIpIHwgYnppcDIgLTkgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXppcDogZGlzdGRpcgorCS1ybSAtZiAkKGRpc3RkaXIpLnppcAorCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0IGRpc3QtYWxsOiBkaXN0ZGlyCisJJChBTVRBUikgY2hvZiAtICQoZGlzdGRpcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikudGFyLmd6CisJJChBTVRBUikgY2hvZiAtICQoZGlzdGRpcikgfCBiemlwMiAtOSAtYyA+JChkaXN0ZGlyKS50YXIuYnoyCisJLXJtIC1mICQoZGlzdGRpcikuemlwCisJemlwIC1ycSAkKGRpc3RkaXIpLnppcCAkKGRpc3RkaXIpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKKyMgVGhpcyB0YXJnZXQgdW50YXJzIHRoZSBkaXN0IGZpbGUgYW5kIHRyaWVzIGEgVlBBVEggY29uZmlndXJhdGlvbi4gIFRoZW4KKyMgaXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc2VsZi1jb250YWluZWQgYnkgbWFraW5nIGFub3RoZXIKKyMgdGFyZmlsZS4KK2Rpc3RjaGVjazogZGlzdAorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCUdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikudGFyLmd6IHwgJChBTVRBUikgeGYgLQorCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpOyBjaG1vZCBhK3cgJChkaXN0ZGlyKQorCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCisJbWtkaXIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJZGNfaW5zdGFsbF9iYXNlPWAkKGFtX19jZCkgJChkaXN0ZGlyKS9faW5zdCAmJiBwd2QgfCBzZWQgLWUgJ3MsXlteOlxcL106W1xcL10sLywnYCBcCisJICAmJiBkY19kZXN0ZGlyPSIkJHtUTVBESVItL3RtcH0vYW0tZGMtJCQkJC8iIFwKKwkgICYmIGNkICQoZGlzdGRpcikvX2J1aWxkIFwKKwkgICYmIC4uL2NvbmZpZ3VyZSAtLXNyY2Rpcj0uLiAtLXByZWZpeD0iJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICAgJChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAorCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgJiYgKHsgXAorCSAgICAgICAoY2QgLi4vLi4gJiYgJChta2luc3RhbGxkaXJzKSAiJCRkY19kZXN0ZGlyIikgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIGluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIHVuaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgXAorCSAgICAgICAgICAgIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfZGVzdGRpciIgZGlzdHVuaW5zdGFsbGNoZWNrOyBcCisJICAgICAgfSB8fCB7IHJtIC1yZiAiJCRkY19kZXN0ZGlyIjsgZXhpdCAxOyB9KSBcCisJICAmJiBybSAtcmYgIiQkZGNfZGVzdGRpciIgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdC1nemlwIFwKKwkgICYmIHJtIC1mICQoZGlzdGRpcikudGFyLmd6IFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisJQGVjaG8gIiQoZGlzdGRpcikudGFyLmd6IGlzIHJlYWR5IGZvciBkaXN0cmlidXRpb24iIHwgXAorCSAgc2VkICdoO3MvLi89L2c7cDt4O3A7eCcKK2Rpc3R1bmluc3RhbGxjaGVjazoKKwlAY2QgJChkaXN0dW5pbnN0YWxsY2hlY2tfZGlyKSBcCisJJiYgdGVzdCBgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtbGUgMSBcCisJICAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBhZnRlciB1bmluc3RhbGw6IiA7IFwKKwkgICAgICAgIGlmIHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuIFwKKwkgICAgICAgICAgZWNobyAiICAoY2hlY2sgREVTVERJUiBzdXBwb3J0KSI7IFwKKwkgICAgICAgIGZpIDsgXAorCSAgICAgICAgJChkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzKSA7IFwKKwkgICAgICAgIGV4aXQgMTsgfSA+JjIKK2Rpc3RjbGVhbmNoZWNrOiBkaXN0Y2xlYW4KKwlAaWYgdGVzdCAnJChzcmNkaXIpJyA9IC4gOyB0aGVuIFwKKwkgIGVjaG8gIkVSUk9SOiBkaXN0Y2xlYW5jaGVjayBjYW4gb25seSBydW4gZnJvbSBhIFZQQVRIIGJ1aWxkIiA7IFwKKwkgIGV4aXQgMSA7IFwKKwlmaQorCUB0ZXN0IGAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWVxIDAgXAorCSAgfHwgeyBlY2hvICJFUlJPUjogZmlsZXMgbGVmdCBpbiBidWlsZCBkaXJlY3RvcnkgYWZ0ZXIgZGlzdGNsZWFuOiIgOyBcCisJICAgICAgICQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSA7IFwKKwkgICAgICAgZXhpdCAxOyB9ID4mMgorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSBjb25maWcuaAoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS1ybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYworCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKK3VuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdCBcCisJZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgXAorCWR2aS1hbSBkdmktcmVjdXJzaXZlIGluZm8gaW5mby1hbSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsIFwKKwlpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcGRmLXJlY3Vyc2l2ZSBwcyBwcy1hbSBcCisJcHMtcmVjdXJzaXZlIHRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9ORVdTIGIvbmV0cGVyZi0yLjQuNS9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L05FV1MKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvUkVBRE1FIGIvbmV0cGVyZi0yLjQuNS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc0NWI5NgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvUkVBRE1FCkBAIC0wLDAgKzEsNDkgQEAKKworQkUgU1VSRSBUTyBSRUFEIFRIRSBNQU5VQUwuIEVWRU4gVEhPVUdIIElUIE1BWSBCRSBPVVREQVRFRC4KKworVGhpcyBpcyBhIGJyaWVmIHJlYWRtZSBmaWxlIGZvciB0aGUgbmV0cGVyZiBUQ1AvVURQL3NvY2tldHMvZXRjCitwZXJmb3JtYW5jZSBiZW5jaG1hcmsuIFRoaXMgaXMgaGVyZSBtb3N0bHkgYXMgYSBib290LXN0cmFwLiBUaGUgcmVhbAoraW5mb3JtYXRpb24gaXMgaW4gdGhlIG1hbnVhbCwgd2hpY2ggY2FuIGJlIGZvdW5kIGluIG5ldHBlcmYucHMgYW5kCitvbmxpbmUgZnJvbSBodHRwOi8vd3d3Lm5ldHBlcmYub3JnL25ldHBlcmYvTmV0cGVyZlBhZ2UuaHRtbC4gVGhlCitzb3VyY2VzLCBhbmQgYSBsaW1pdGVkIG51bWJlciBvZiBiaW5hcmllcywgY2FuIGJlIGZvdW5kIGZyb20KK2Z0cDovL2Z0cC5jdXAuaHAuY29tL2Rpc3QvbmV0d29ya2luZy9iZW5jaG1hcmtzL25ldHBlcmYvIC4KKworQkUgU1VSRSBUTyBSRUFEIFRIRSBNQU5VQUwuIEVWRU4gVEhPVUdIIElUIE1BWSBCRSBPVVREQVRFRC4KKworVGhlcmUgaXMgYSBDT1BZUklHSFQgZmlsZSBpbmNsdWRlZC4gIEl0IGlzIGNhbGxlZCBDT1BZSU5HIGJlY2F1c2UgdGhhdAoraXMgd2hhdCBhdXRvc29tZXRoaW5nb3JvdGhlciB3YW50ZWQuIEl0IGlzIGJhc2VkIG9uIHdoYXQgdGhlIEhQIExlZ2FsCitFYWdsZXMgZ2F2ZSBtZS4gSSBhbSBub3Qgc3VyZSBpZiB0aGUgbGVnYWxlc2UgaXMgY2xlYXIsIGJ1dCB0aGUgaW50ZW50CitpcyB0byBzYXkgIkhlcmUgaXMgYSBiZW5jaG1hcmsuIFVzZSBpdCBpbiBnb29kIGhlYWx0aC4gUGFzcyBpdCBhbG9uZywKK3BvcnQgaXQsIGVuaGFuY2UgaXQuIFlvdSBkaWRuJ3QgcGF5IGZvciB0aGlzIHRvb2wsIHNvIGRvbid0IGV4cGVjdCBpdAordG8gYmUgcGVyZmVjdCA7LSkiIFRoZSByZXN0IG9mIGl0IGlzIHRoZXJlIHRvIGtlZXAgdGhlIGxheWVycyBoYXBweS4uLiAgCisKK1doaWxlIHRoZSBjb3B5cmlnaHQgaXMgcHJldHR5IG11Y2ggaW4gc3Bpcml0IGFuICJvcGVuIHNvdXJjZSIgb25lLCBpdAoraXMgbm90IGluIGxldHRlciAtIEkgbmV2ZXIgdG9vayB0aGUgdGltZSB0byB0cnkgdG8gZ2V0IGl0IGFwcHJvdmVkLgorSWYgeW91IGZlZWwgc3Ryb25nbHkgYWJvdXQgdGhlIGxpY2Vuc2Ugb2YgdGhlIGNvZGUgeW91IHVzZSBhbmQgd2FudAorc29tZXRoaW5nIHVuZGVyIHRoZSBHUEwsIGNvbnNpZGVyIG5ldHBlcmY0OgorCitodHRwOi8vd3d3Lm5ldHBlcmYub3JnL3N2bi9uZXRwZXJmNC90cnVuaworCitGZWVsIGZyZWUgdG8gcmVwb3J0IG5ldHBlcmYgcmVzdWx0cyBpbiBwdWJsaWMgZm9ydW1zLCBidXQgcGxlYXNlIGJlCitleGNydWNpYXRpbmdseSBjb21wbGV0ZSBpbiB5b3VyIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0IGVudm9yaW5tZW50LgorVGhlIG9sZCBuZXRwZXJmIGRhdGFiYXNlIGF0OgorCisgIGh0dHA6Ly93d3cubmV0cGVyZi5vcmcvbmV0cGVyZi9OZXRwZXJmUGFnZS5odG1sCisKK2lzIG5vIG1vcmUgLSBvciByYXRoZXIgdGhlIHV0aWxpdGllcyBmb3IgYWNjZXNzaW5nIGl0IG5vIGxvbmdlciBydW4uCitUaGUgZGF0YSBpcyBzdGlsbCBwcmVzZW50IGluIHRoZSB0cmVlLCBhbGJlaXQgX1ZFUllfIG9sZCBub3cuCisKK1RoZXJlIGlzIGFuIEludGVybmV0IG1haWxpbmcgbGlzdCBkZXZvdGVkIHRvIG5ldHBlcmYuIEl0IGlzIGNhbGxlZAorbmV0cGVyZi10YWxrIGFuZCBpdCBpcyBob3N0ZWQgb24gbmV0cGVyZi5vcmcuIFN1YnNjcmlwdGlvbiByZXF1ZXN0cworc2hvdWxkIGdvIHRvIG5ldHBlcmYtdGFsay1yZXF1ZXN0QG5ldHBlcmYub3JnLgorCitQbGVhc2UgRE8gTk9UIFNFTkQgc3Vic2NyaXB0aW9uIHJlcXVlc3RzIHRvIG5ldHBlcmYtdGFsayEKKworSWYgeW91IHJ1biBpbnRvIHNldmVyZSBkaWZmaWN1bHRpZXMsIG9yIGFyZSBqdXN0IGZlZWxpbmcgY2hhdHR5LAorcGxlYXNlIGZlZWwgZnJlZSB0byBkcm9wIHNvbWUgZW1haWwgdG8gbWUgLSBSaWNrIEpvbmVzCis8cmFqQGN1cC5ocC5jb20+LiBCZSBzdXJlIHRvIGluY2x1ZGUgYSBtZWFuaW5nZnVsIHN1YmplY3QgbGluZXMuCisKK2hhcHB5IGJlbmNobWFya2luZywgCityaWNrIGpvbmVzCisKK0JFIFNVUkUgVE8gUkVBRCBUSEUgTUFOVUFMLiBFVkVOIFRIT1VHSCBJVCBNQVkgQkUgT1VUREFURUQuCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L1JFQURNRS5haXggYi9uZXRwZXJmLTIuNC41L1JFQURNRS5haXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1N2I2NAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvUkVBRE1FLmFpeApAQCAtMCwwICsxLDI0IEBACitQc2V1ZG8tcmFuZG9tIHRoaW5ncyBhYm91dCBuZXRwZXJmIG9uIEFJWDoKKworV2hpbGUgaXQgX3Nob3VsZF8gbm90IGJlIG5lY2Vzc2FyeSBpbiB0aGUgcmVsZWFzZSBiaXRzLCB0aGUgcmMgYml0cworZm9yIG5ldHBlcmYgMi40LjAgcmVxdWlyZWQ6CisKKyAgICBjb25maWd1cmUgX21heV8gbmVlZDoKKworICAgIENGTEFHUz0iLXFjcGx1c2NtdCAtbHBlcmZzdGF0IgorCisgICAgdW50aWwgc3VjaCB0aW1lIGFzIFJpY2sgSm9uZXMgY2FuIGZpZ3VyZS1vdXQgb3IgYmUgdG9sZCBob3cgdG8KKyAgICBhdXRvbWFnaWNhbGx5IGFkZCB0aG9zZSB1c2luZyB0aGUgY29uZmlndXJlIHNjcmlwdCAoaGludCBoaW50IDopCisKK1RoZSByZWxlYXNlIGJpdHMgc2hvdWxkIGJlIE9LIHdpdGhvdXQgdGhlIGFib3ZlLiAgRGVwZW5kaW5nIG9uIHRoZQorbmFtZSB1c2VkIHRvIGludm9rZSB0aGUgY29tcGlsZXIsIHRoZSAtcW11bWJsZSBvcHRpb24gbWF5IGJlIGltcGxpY2l0LgorCitBSVggaW5jbHVkZSBmaWxlcyBoYXZlIGEgVkVSWSB1bmZvcnR1bmVhdGUgc2V0IG9mICNkZWZpbmUncyBpbiB0aGVtCitmb3IgcGhyYXNlcyBuZXR3b3JrIG9yaWVudGVkIHByb2dyYW1zIGFyZSBRVUlURSBsaWtlbHkgdG8gaGF2ZSBpbgordGhlaXIgc291cmNlIC0gInJlbV9hZGRyIiBhbmQgInJlbV9zaXplIiBBICJjb3VzaW4iIG9mIHRoZSBOZXRwZXJmCitDb250cmlidXRpbmcgRWRpdG9yIHJlcG9ydHMgdGhpcyBpbnRlcmZlcmVzIHdpdGggLS1lbmFibGUtZGxwaQorY29tcGlsYXRpb24gYW5kIHRoYXQgaXQgd2FzIGFsc28gYSBwcm9ibGVtIGZvciBNeVNRTCBjb21waWx0aW9uLgorV2hpbGUgd2UgYXdhaXQgSUJNJ3MgQVBBUiB3aXRoIGJhdGVkIGJyZWF0aCwgbmV0cGVyZiBoYXMgYmVlbiBrbHVkZ2VkCit0byB3b3JrYXJvdW5kIHRoaXMgYnVnIGluIElCTSdzIGluY2x1ZGUgZmlsZXMuICBJdCBoYXMgYmVlbiByZXBvcnRlZAordGhhdCBhICJQTVIiIDM0OTQwLDIxMiw4NDggaGFzIGJlZW4gc3VibWl0dGVkIHRvIElCTSBpbiByZWxhdGlvbiB0bwordGhpcyBidWcgaW4gdGhlaXIgaGVhZGVyIGZpbGVzLgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9SRUFETUUuaHB1eCBiL25ldHBlcmYtMi40LjUvUkVBRE1FLmhwdXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxODQ0OQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvUkVBRE1FLmhwdXgKQEAgLTAsMCArMSwzMSBAQAorQSBub3RlIGFib3V0IENQVSB1dGlsaXphdGlvbi4uLgorCitGb3IgSFAtVVggMTEuMCA8PSBzeXN0ZW0gPCAxMS4yMyB0aGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIHNlbGVjdCB0aGUKKyJwc3RhdCIgQ1BVIHV0aWxpemF0aW9uIG1lY2hhbmlzbS4gIFRoaXMgbWVjaGFuaXNtIGlzIHRoZSBmYW1pbGlhcgorSFAtVVggaWRsZSBjb3VudGVyIG1lY2hhbmlzbSAoZm9yIGFsbCBpbmNlbnNlIGFuZCBwb3Jwb2lzZXMpIGFuZAorcmVxdWlyZXMgY2FsaWJyYXRpb24uICBTZWUgc3JjL25ldGNwdV9wc3RhdC5jIGZvciBhbGwgdGhlIGRldGFpbHMuCisKK0ZvciBIUC1VWCAxMS4yMyA+PSBzeXN0ZW0sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgc2VsZWN0IHRoZQorInBzdGF0bmV3IiBDUFUgdXRpbGl6YXRpb24gbWVjaGFuaXNtLiAgMTEuMjMgYWRkcyBjeWNsZSBjb3VudHMgZm9yCit1c2VyLCBrZXJuZWwgYW5kIGludGVycnVwdCBtb2RlcyB0byB0aGUgaWRsZSBjeWNsZSBjb3VudGVyLiAgQXMgc3VjaCwKK2l0IF9zaG91bGRfIGJlIHBvc3NpYmxlIHRvIHNpbXBseSB0YWtlIHRoZSBzdW0gb2YgdGhlIGZvdXIgYW5kIHRoZQorZnJhY3Rpb25zIGFuZCBrbm93IGhvdyBtdWNoIHRpbWUgd2FzIHNwZW50IGluIGVhY2ggbW9kZS4KK0hPV0VWRVIuLi4gdGhlcmUgaXMgYSBidWcgaW4gdGhlIGFjY291bnRpbmcgZm9yIGludGVycnVwdCBjeWNsZXMsCit3aGVyZSBpbnRlcnJ1cHQgY3ljbGVzIGdvIG1pc3NpbmcuICBTT09PLCBzaW5jZSB0aGVyZSBpcyBhbiBhY2N1cmF0ZQord2F5IHRvIGtub3cgd2hhdCB0aGUgdG90YWwgbnVtYmVyIG9mIGN5Y2xlcyBzaG91bGQgaGF2ZSBiZWVuIG92ZXIgdGhlCitpbnRlcnZhbCwgYW5kIHdlIGtub3cgKGFzcy11LW1lKSB0aGF0IHRoZSBpZGxlIGN5Y2xlIGNvdW50ZXIgaXMgZ29vZAorKHNpbmNlIHRoZSBwc3RhdCBtZWNoYW5pc20gaGFzIHRlc3RlZCB0aGF0IG9uZSBPSyksIHdlIHdpbGwgdGFrZSB0aGUKK3JhdGlvIG9mIGlkbGUgdG8gdG90YWwgY3ljbGVzIHRvIGNvbXB1dGUgQ1BVIHV0aWwuICAKKworV2Ugd2lsbCBzdGlsbCBjYWxjdWxhdGUgZnJhY3Rpb25zIGZvciB1c2VyLCBrZXJuZWwgYW5kIGludGVycnVwdCwgYW5kCityZXBvcnQgdGhlbSBpbiBkZWJ1ZyAoLWQpIG91dHB1dCwgYnV0IHdpdGggYSB3YXJuaW5nIGZvciBpbnRlcnJ1cHQKK3RpbWUuICBTZWUgc3JjL25ldGNwdV9wc3RhdG5ldy5jIGZvciBhbGwgdGhlIGRldGFpbHMuCisKK1VwIHRocm91Z2ggSFAtVVggMTEuMjMgKGFrYSAxMWlWMikgaWYgeW91IGVuYWJsZSBidXJzdCBtb2RlLCBhbmQKK2hhcHBlbiB0byBzZW5kIHN1Yi1NU1MgcmVxdWVzdHMgYW5kL29yIHJlc3BvbnNlcyB5b3UgX2Nhbm5vdF8gYXNzdW1lCit0aGF0IHRoZSBwYWNrZXQgcGVyIHNlY29uZCByYXRlIG9uIHRoZSB3aXJlIHdpbGwgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uCitwZXIgc2Vjb25kIHJhdGUgcmVwb3J0ZWQgYnkgbmV0cGVyZiwgZXZlbiBpZiB5b3Ugc2V0IFRDUF9OT0RFTEFZIHdpdGgKK3RoZSB0ZXN0LXNwZWNpZmljIC1EIG9wdGlvbi4gIFRoZSBIUC1VWCAxMS5YIFRDUCBzdGFjayBsaWtlbHkgd2lsbCBiZQorZ2VuZXJhdGluZyBzb21lIGltbWVkaWF0ZSAnc3RhbmRhbG9uZScgQUNLbm93bGVkZ2VtZW50cyB3aGljaCBtYXkgbm90CitiZSBnZW5lcmF0ZWQgYnkgb3RoZXIgc3RhY2tzLiAgVGhpcyBoYXMgYmVlbiByZXBvcnRlZCB0byB0aGUgSFAtVVggVENQCitmb2xrcywgYW5kIGFuIGFubm91bmNlbWVudCB3aWxsIGJlIG1hZGUgd2hlbiB0aGF0IGlzc3VlIGlzIHJlc29sdmVkLgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9SRUFETUUub3N4IGIvbmV0cGVyZi0yLjQuNS9SRUFETUUub3N4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWRiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L1JFQURNRS5vc3gKQEAgLTAsMCArMSw0IEBACitJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcywgaXQgc3VnZ2VzdHMgeW91IGFyZSB1c2luZyBhIHZlcnNpb24gb2YKK25ldHBlcmYgaW4gd2hpY2ggdGhlIGlzc3VlIG9mIGZpbGUvZGlyZWN0b3J5IG5hbWUgY2FzZSBpbnNlbnNpdGl2aXR5CitpbiBPU1ggaGFzIGJlZW4gd29ya2VkLWFyb3VuZCBieSByZW5hbWluZyB0aGUgTmV0UGVyZiBhbmQgTmV0U2VydmVyCitkaXJlY3RvcmllcyB0byBOZXRQZXJmRGlyIGFuZCBOZXRTZXJ2ZXJEaXIgcmVzcGVjdGl2ZWx5LgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9SRUFETUUub3ZtcyBiL25ldHBlcmYtMi40LjUvUkVBRE1FLm92bXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3Yjg5ZAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvUkVBRE1FLm92bXMKQEAgLTAsMCArMSw2NiBAQAorRmVicnVhcnkgMTEsIDIwMDMKKworQXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgcG9ydCwgSSB3YXMgbm90IGF3YXJlIG9mIGEgbWFrZSBmYWNpbGl0eQorZm9yIE9wZW5WTVMuICBTbywgSSB3b3VsZCBqdXN0IGNvbXBpbGUgYW5kIGxpbmsgdGhlIHZhcmlvdXMgZmlsZXMgYnkKK2hhbmQ6CisKKyAgICQgY2MgbmV0cGVyZi5jCisgICAkIGNjIG5ldGxpYi5jCisgICAkIGNjIG5ldHNoLmMKKyAgICQgY2MgbmV0dGVzdF9ic2QuYworICAgJCBjYyBuZXRzZXJ2ZXIuYworICAgJCBsaW5rL2V4ZT1uZXRwZXJmIG5ldHBlcmYub2JqLG5ldHNoLm9iaixuZXRsaWIub2JqLG5ldHRlc3RfYnNkLm9iagorICAgJCBsaW5rL2V4ZT1uZXRzZXJ2ZXIgbmV0c2VydmVyLm9iaixuZXRzaC5vYmosbmV0bGliLm9iaixuZXR0ZXN0X2JzZC5vYmoKKworSW5zdGFsbGF0aW9uIGZvciBPcGVuVk1TIGhhcyBhIGZldyBkaWZmZXJlbmNlcyBmcm9tIGluc3RhbGxhdGlvbiB1bmRlcgorc2F5IFVuaXguICBUaGVyZSBpcyBubyBpbmV0ZCBmb3IgVk1TIC0gaG93ZXZlciwgdGhlcmUgaXMgdGhlIGNvbmNlcHQKK29mIGFuIGFkZGluZyBhbiBhdXhpbGxpYXJ5IHNlcnZpY2UgdGhhdCBzZWVtcyBxdWl0ZSBzaW1pbGFyLgorCitUbyBjb25maWd1cmUgbmV0cGVyZiBmb3Igb3BlcmF0aW9uIGFzIGFuIGF1eGlsbGlhcnkgc2VydmljZSwgeW91IHdpbGwKK25lZWQgdG8gZWRpdC91c2UgdGhlIG5ldHNlcnZlcl9ydW4uY29tIGZpbGUgYW5kIGFsdGVyIHRoZSAicGF0aCIgdG8KK25ldHNlcnZlciBhY2NvcmRpbmdseS4gIFRoZSB2ZXJzaW9uIHRoYXQgc2hpcHMgaXMgc2V0dXAgZm9yIHdoZXJlIFJpY2sKK0pvbmVzIGRpZCBoaXMgaW5pdGlhbCBwb3J0aW5nIHdvcmsgYW5kIG1vc3QgbGlrZWx5IGlzIG5vdCBhcHJvcHJpYXRlCitmb3IgeW91IDopCisKKyAgICQgIGRlZmluZSBzeXMkb3V0cHV0IHN5cyRzeXNyb290OltuZXRwZXJmXWhlbGxvX3NlcnZpY2UubG9nIAorICAgJCAgZGVmaW5lIHN5cyRlcnJvciAgc3lzJHN5c3Jvb3Q6W25ldHBlcmZdaGVsbG9fc2VydmljZS5sb2cgCisgICAkICBydW4gc3lzJHN5c3Jvb3Q6W25ldHBlcmZdbmV0c2VydmVyLmV4ZSAKKworVGhlbiBpdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byAiZGVmaW5lIiBuZXRwZXJmIChuZXRzZXJ2ZXIpIGFzIGFuCithdXhpbGxpYXJ5IHNlcnZpY2UuIFRoaXMgd2lsbCBuZWVkIHRvIGJlIGN1c3RvbWl6ZWQgYXMgYXByb3ByaWF0ZSBmb3IKK3lvdXIgc3lzdGVtCisKKyAgICQgdGNwaXAgc2V0IHNlcnZpY2UgbmV0c2VydmVyIC0gCisgICBfJCAvcG9ydD0xMjg2NSAtIAorICAgXyQgL3Byb3RvY29sPXRjcCAtIAorICAgXyQgL3VzZXI9c3lzdGVtIC0gCisgICBfJCAvbGltaXQ9NDggLQorICAgXyQgL3Byb2Nlc3NfbmFtZT1uZXRzZXJ2ZXIgLSAKKyAgIF8kIC9maWxlPXN5cyRzeXNyb290OltuZXRwZXJmXW5ldHNlcnZlcl9ydW4uY29tIAorCitBbmQgdGhlbiBpdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHRoZSBzZXJ2aWNlOgorCiskIHRjcGlwIGVuYWJsZSBzZXJ2aWNlIG5ldHNlcnZlcgorCitJZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRoZSBzZXJ2aWNlLCB5b3UgY2FuIGlzc3VlIHRoZSBjb21tYW5kCisKKyQgdGNwaXAgc2V0IG5vc2VydmljZSBuZXRzZXJ2ZXIKKworQnkgZGVmYXVsdCwgT3BlblZNUyBpcyBjYXNlLWluc2Vuc2l0aXZlIHdpdGggY29tbWFuZGxpbmVzLCBhbmQgd2lsbAorZG93bnNoaWZ0IGV2ZXJ5dGhpbmcgdG8gbG93ZXIgY2FzZS4gIFRoaXMgZG9lcyBub3QgaW50ZXJhY3Qgd2VsbCB3aXRoCituZXRwZXJmJ3MgdXNlIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zIGxpa2UgIi1IIiBhbmQgIi1oIiB3aXRoIHJhdGhlcgorZGlmZmVyZW50IG1lYW5pbmdzLgorCitUbyB3b3JrYXJvdW5kIHRoYXQsIHRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgYmVsaWV2ZWQgdG8gYmUKK3N1ZmZpY2llbnQuCisKKyQgZGVmaW5lICBERUNDJEFSR1ZfUEFSU0VfU1RZTEUgICAgICAgRU5BQkxFCiskIGRlZmluZSAgREVDQyRFRlNfQ0FTRV9QUkVTRVJWRSAgICAgIEVOQUJMRQorJCBkZWZpbmUgIERFQ0MkUE9TSVhfU0VFS19TVFJFQU1fRklMRSBFTkFCTEUKKyQgZGVmaW5lICBERUNDJEVGU19DSEFSU0VUICAgICAgICAgICAgRU5BQkxFCiskIHNldCBwcm9jZXNzIC9wYXJzZV9zdHlsZT1leHRlbmRlZAorCitJIGRvIG5vdCBrbm93IGlmIHRoaXMgd2lsbCBiZSBzb21ldGhpbmcgb25lIGNhbiBhbHNvIGRvIGZvciB0aGUKK25ldHNlcnZlciAtIHByZXN1bWVhYmx5IG9uZSBjb3VsZCBwdXQgdGhlc2UgdGhpbmdzIGluIHRoZQorbmV0c2VydmVyX3J1bi5jb20gZmlsZSAoZ3Vlc3NpbmcpLiBBdCBwcmVzZW50IHRob3VnaCBJJ3ZlIG5vdCB0cmllZAordGhhdCwgYW5kIEknbSBhbHNvIG5vdCBzdXJlIHRoYXQgbmV0c2VydmVyIGhhcyBhbnkgdXBwZXItY2FzZSBvcHRpb25zLgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9SRUFETUUuc29sYXJpcyBiL25ldHBlcmYtMi40LjUvUkVBRE1FLnNvbGFyaXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwY2ExMAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvUkVBRE1FLnNvbGFyaXMKQEAgLTAsMCArMSwyOSBAQAorVW50aWwgdGhlIHJlbGVhc2UgYml0cyB0aGUgZm9sbG93aW5nIHdhcyB0cnVlOgorCisgICAgVW50aWwgc3VjaCB0aW1lIGFzIFJpY2sgSm9uZXMgY2FuIGZpZ3VyZS1vdXQgb3IgYmUgdG9sZCBob3cgdG8gbWFrZSBpdAorICAgIGF1dG9tYWdpYyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCwgcHJpb3IgdG8gY29uZmlndXJlIG9uIHNvbGFyaXMsIHlvdQorICAgIG1heSBuZWVkOgorCisgICAgQ0ZMQUdTPSItbHNvY2tldCAtbG5zbCAtbGtzdGF0IgorCisgICAgYW5kIGlmIHlvdSBhcmUgdHJ5aW5nIHRvIGNvbXBpbGUgdGhlIFNDVFAgdGVzdHM6CisKKyAgICBDRkxBR1M9Ii1seG5ldCAtbHNvY2tldCAtbG5zbCAtbGtzdGF0IC1EX1hPUEVOX1NPVVJDRT01MDAgLURfX0VYVEVOU0lPTlNfXyIKKworYXMgdGhlIHJlbGVhc2UgYml0cyBoYXZlIGEgInNtYXJ0ZXIiIGNvbmZpZ3VyZSBzY3JpcHQsIGFuZCB0aGUgU0NUUAordGVzdHMgdXNlIGxpYnNjdHAsIHRoZSBhYm92ZSBubyBsb25nZXIgYXBwbGllcy4gIEl0IHNob3VsZCBhbGwganVzdCBiZQorYXV0b21hZ2ljIChhbHRob3VnaCBmb3IgU0NUUCB5b3Ugc3RpbGwgbXVzdCAtLWVuYWJsZS1zY3RwIGF0IGNvbmZpZ3VyZQordGltZSkKKworQmV3YXJlIENQVSB1dGlsIGZpZ3VyZXMgb24gYW55dGhpbmcgYmVmb3JlIFNvbGFyaXMgMTAgdGhhdCBkb2VzIG5vdAorc2F5IDEwMCUsIGFuZCBzdGlsbCBiZSBhIHRyaWZmbGUgY2F1dGlvdXMgd2l0aCBTb2xhcmlzIDEwIENQVSB1dGlsCityZXBvcnRzLiAgVGhlIENQVSB0aW1lIGFjY291bnRpbmcgbWVjaGFuaXNtcyBlaXRoZXIgZG8gbm90IHRyYWNrIHRpbWUKK3NwZW50IHNlcnZpY2luZyBpbnRlcnJ1cHRzLCBvciBkbyBzbyBpbiBwYXJhbGxlbCB3aXRoIHRpbWUgc3BlbnQgaW4KK3VzZXIva2VybmVsL2lkbGUgd2hpY2ggbWVhbnMgdGhhdCBzb21lIGlkbGUgdGltZSBpc24ndCBfcmVhbGx5XyBpZGxlCit0aW1lLgorCitBbmQgYmV5b25kIHRoYXQsIGl0IGlzIHN0aWxsIG5vdCBjbGVhciBpZiB0aGUgQ1BVIHV0aWxpemF0aW9uIHJlcG9ydGVkCitvbiBzeXN0ZW1zIHdpdGggaGFyZHdhcmUgdGhyZWFkaW5nIHN1cHBvcnQgKGVnIFVsdHJhU1BBUkMtVDEpIGlzCityZWFsbHkgYWNjdXJhdGUgZXZlbiBpZ25vcmluZyB0aGUgaXNzdWUgd2l0aCBpbnRlcnJ1cHQgdGltZS4gIEl0IGlzCitsaWtlbHkgdGhhdCB0byBiZSB0cnVlbHkgYWNjdXJhdGUsIGl0IGlzIG5lY2Vzc2FyeSB0byBrbm93IGhvdyBtdWNoCisicmVhbCB3b3JrIiBhbnkgb25lIHN0cmFuZCBwZXJmb3JtZWQuCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L1JFQURNRS52bXdhcmUgYi9uZXRwZXJmLTIuNC41L1JFQURNRS52bXdhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5OTZkMgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvUkVBRE1FLnZtd2FyZQpAQCAtMCwwICsxLDE1IEBACitDb21waWxpbmcgZm9yIFZNd2FyZSBpcyBzb21ld2hhdCBsaWtlIGNvbXBpbGluZyBmb3IgV2luZG93cyAtIHRoZXJlIGlzCithIHNlcGFyYXRlLCBzdGFuZGFsb25lIG1ha2VmaWxlIG9uZSB1c2VzLiAgSW4gdGhpcyBjYXNlLCBpdCBpcworc3JjL01ha2VmaWxlLnV3LiAgU28sIHRvIGJ1aWxkIHRoZSBiaXRzLCBjZCB0byBzcmMvIGFuZCBtYWtlIC1mCitNYWtlZmlsZS51dy4KKworQXQgcHJlc2VudCwgdGhlIG1ha2VmaWxlIGlzIHNldHVwIHRvIHVzZSBhIG51bWJlciBvZiB0aGUgIm5vbmUiIGZpbGVzCistIGluIHBhcnRpY3VsYXIgbmV0Y3B1X25vbmUuYy4gIFdoZW4vaWYgd2UgZW5hYmxlIHRoZSAib21uaSIgdGVzdHMKK3dlJ2xsIHBlcmhhcHMgc2VlIHRoZSBhZGRpdGlvbiBvZiBhIG51bWJlciBvZiBvdGhlciAibm9uZSIgZmlsZXMgYXMKK3dlbGwuCisKK0Fsc28sIHNlZW1zIHRoZSB3YXkgdGhpbmdzIGFyZSAicnVuIiB1bmRlciBWTXdhcmUgaXMgZW5vdWdoIGRpZmZlcmVudAordGhhdCB0aGUgc2NyaXB0cywgc2hvdWxkIHlvdSBjaG9zZSB0byB1c2UgdGhlbSwgd2lsbCBuZWVkIHRvIGJlCittb2RpZmllZC4gIFRoZSBpbml0aWFsIHNldCBvZiBwYXRjaGVzIG1ha2Ugc29tZSBhcmJpdHJhcnkgY2hhbmdlcyB0aGF0CituZWVkIHRvIGJlIHJlLXdvcmtlZCB3aXRoIHNvbWUgIlRvIHJ1biB0aGlzIHVuZGVyIFZNd2FyZSB1bmNvbW1lbnQKK3RoaXMgbGluZSIgb3Igc29tZXN1Y2guCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L1JFQURNRS53aW5kb3dzIGIvbmV0cGVyZi0yLjQuNS9SRUFETUUud2luZG93cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjk0NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9SRUFETUUud2luZG93cwpAQCAtMCwwICsxLDEwNiBAQAorSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCB2ZXJzaW9ucyBvZiBuZXRwZXJmIGhhdmUgY29uZmlndXJlZCBhbmQNCitjb21waWxlZCB1bmRlciBDeWd3aW4uICANCisNCitJdCBpcyBhbHNvIGtub3duIHRoYXQgbmV0cGVyZiBoYXMgY29tcGlsZWQgdXNpbmcgdGhlIFdpbmRvd3MgRERLLg0KK0hlcmUgaXMgYSBza2VsZXRvbiBvZiB0aGUgaW5zdHJ1Y3Rpb25zIHRvIGRvIHNvOg0KKw0KK1N0ZXBzIGFyZToNCisNCitBKSBJbnN0YWxsIHRoZSBXaW5kb3dzIGRyaXZlciBkZXZlbG9wZXIga2l0IChpZiBub3QgYWxyZWFkeSBkb25lKS4NCisNCitCKSBvcGVuIGEgQ21kIHdpbmRvd3MgKGkuZS4sIGEgRE9TIGJveCkgZm9yIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQNCisgICAodGFyZ2V0IE9TIHZlcnNpb247IGZyZWUgdnMgY2hlY2tlZCBidWlsZDsgeDg2LCBBTUQ2NCwgb3IgSUE2NCkuDQorICAgVGhpcyBpcyBwaWNrZWQgZnJvbSB0aGUgIlN0YXJ0XERldmVsb3BlciBLaXRzIiBwYXRoLg0KKw0KK0MpIGVudGVyIHRoZSBzcmNcTmV0UGVyZkRpciBkaXJlY3RvcnkNCisNCitEKSBFZGl0IHNvdXJjZXMgdG8gZW5hYmxlIGFueSBkZXNpcmVkIG9wdGlvbmFsIGZlYXR1cmVzIChlZw0KKyAgIC1EV0FOVF9ISVNUT0dSQU0pIG9yIHRvIHJlbW92ZSBmZWF0dXJlcyB3aGljaCB5b3VyIHZlcnNpb24gb2YNCisgICBXaW5kb3dzIG1pZ2h0IG5vdCBzdXBwb3J0IChlZyAtREhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UpDQorDQorRSkgd2hpbGUgc3RpbGwgaW4gdGhlIHNyY1xOZXRwZXJmRGlyIGRpcmVjdG9yeSB0eXBlICJidWlsZCAvY0QiLg0KKw0KK0YpIFJlcGVhdCBzdGVwcyBDIHRocm91Z2ggRSBpbiBzcmNcTmV0U2VydmVyRGlyDQorDQorRykgdGhlIHRhcmdldCBmaWxlcyB3aWxsIGJlIGluIGEgZGlyZWN0b3J5IGxpa2U6DQorICAgTmV0UGVyZkRpclxvYmpjaGtfd25ldF9JQTY0XElBNjQsIE5ldFNlcnZlckRpclxvYmpjaGtfd25ldF9JQTY0XElBNjQNCisgICBOZXRQZXJmRGlyXG9iamZyZV93bmV0X3g4NlxpMzg2LCBvciBOZXRQZXJmRGlyXG9iamZyZV93bmV0X0FNRDY0XGFtZDY0DQorDQorTk9URTogSWYgYW55IGNvbXBvbmVudHMgb2YgdGhlIHBhdGggKGllIHRoZSBmdWxsIG5hbWVzIG9mIHRoZSBmaWxlcywNCitpbmNsdWRpbmcgcGFyZW50IGRpcmVjdG9yaWVzKSBjb250YWluIHNwYWNlcyAoZWcgIk15IERvY3VtZW50cyIpLA0KK2J1aWxkIHdpbGwgY2hhcmdlIG9mZiBpbnRvIHRoZSB3ZWVkcy4NCisNCitBbmQgaWYgdGhhdCB3ZXJlbid0IGVub3VnaCwgaXQgaXMgYWxzbyBrbm93biB0aGF0IG5ldHBlcmYgaGFzIGJlZW4NCitjb21waWxlZCB1c2luZyBNUyBWaXN1YWwgU3R1ZGlvIDIwMDMuICBIZXJlIGFyZSB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20NCit0aGUgcGVyc29uIHdobyBtYWRlIHRoYXQgd29yayAoU2VlIEF1dGhvcnMpOg0KKw0KKzEuICBVbmRlciB0aGUgUFJPSkVDVCB0YWIsIDxwcm9qZWN0IG5hbWU+IFBST1BFUlRJRVMsIExJTktFUiBmb2xkZXIsDQorU2VsZWN0IENPTU1BTkQgTElORSBhbmQgYWRkIFdTMl8zMi5saWIgaW4gdGhlIHdoaXRlc3BhY2UgbGFiZWxlZA0KK0FkZGl0aW9uYWwgT3B0aW9uczoNCisgDQorIA0KKzIuICBVbmRlciB0aGUgUFJPSkVDVCB0YWIsIDxwcm9qZWN0IG5hbWU+IFBST1BFUlRJRVMsIEMvQysrIGZvbGVkZXIsDQorU2VsZWN0IFByZXByb2Nlc3NvciwgT24gdGhlIHJpZ2h0LCBhZGQgRE9fSVBWNjsgYXQgdGhlIGVuZCBvZiB0aGUNCitQcmVwcm9jZXNzb3IgRGVmaW5pdGlvbnMgd2hpdGVzcGFjZS4NCisgDQorIA0KK0hlIGdvZXMgb24gdG8gc2F5Og0KKyANCitOT1RFOiBXSEVOIENPTVBMSU5HIE5FVFNFUlZFUiwgaXQgd29ya3MsIGJ1dCBJIGdvdCBpc3N1ZWQgdGhlDQorZm9pbGxvd2luZyB3YXJuaWducyBpbiBteSBidWlsZDoNCisgDQorDQorLS0tLS0tIFJlYnVpbGQgQWxsIHN0YXJ0ZWQ6IFByb2plY3Q6IG5ldHNlcnZlciwgQ29uZmlndXJhdGlvbjogRGVidWcgV2luMzIgLS0tLS0tDQorDQorRGVsZXRpbmcgaW50ZXJtZWRpYXRlIGZpbGVzIGFuZCBvdXRwdXQgZmlsZXMgZm9yIHByb2plY3QgJ25ldHNlcnZlcicsIGNvbmZpZ3VyYXRpb24gJ0RlYnVnfFdpbjMyJy4NCisNCitDb21waWxpbmcuLi4NCisNCituZXR0ZXN0X2JzZC5jDQorDQorZzpcUHJvZ3JhbSBGaWxlc1xuZXRwZXJmXG5ldHBlcmYtMi40LjFyYzFcc3JjXG5ldHRlc3RfYnNkLmMoODQ2KSA6IHdhcm5pbmcgQzQyNjc6ICdmdW5jdGlvbicgOiBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ2ludCcsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQ0KKw0KK2c6XFByb2dyYW0gRmlsZXNcbmV0cGVyZlxuZXRwZXJmLTIuNC4xcmMxXHNyY1xuZXR0ZXN0X2JzZC5jKDEzMDMpIDogd2FybmluZyBDNDI2NzogJ2Z1bmN0aW9uJyA6IGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAnaW50JywgcG9zc2libGUgbG9zcyBvZiBkYXRhDQorDQorZzpcUHJvZ3JhbSBGaWxlc1xuZXRwZXJmXG5ldHBlcmYtMi40LjFyYzFcc3JjXG5ldHRlc3RfYnNkLmMoMjAyMCkgOiB3YXJuaW5nIEM0MjY3OiAnZnVuY3Rpb24nIDogY29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICdpbnQnLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGENCisNCitnOlxQcm9ncmFtIEZpbGVzXG5ldHBlcmZcbmV0cGVyZi0yLjQuMXJjMVxzcmNcbmV0dGVzdF9ic2QuYyg1MDgwKSA6IHdhcm5pbmcgQzQyNjc6ICdmdW5jdGlvbicgOiBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ2ludCcsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQ0KKw0KK2c6XFByb2dyYW0gRmlsZXNcbmV0cGVyZlxuZXRwZXJmLTIuNC4xcmMxXHNyY1xuZXR0ZXN0X2JzZC5jKDU3MTUpIDogd2FybmluZyBDNDI2NzogJ2Z1bmN0aW9uJyA6IGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAnaW50JywgcG9zc2libGUgbG9zcyBvZiBkYXRhDQorDQorZzpcUHJvZ3JhbSBGaWxlc1xuZXRwZXJmXG5ldHBlcmYtMi40LjFyYzFcc3JjXG5ldHRlc3RfYnNkLmMoNjU5MSkgOiB3YXJuaW5nIEM0MjY3OiAnZnVuY3Rpb24nIDogY29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICdpbnQnLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGENCisNCitnOlxQcm9ncmFtIEZpbGVzXG5ldHBlcmZcbmV0cGVyZi0yLjQuMXJjMVxzcmNcbmV0dGVzdF9ic2QuYyg4MDEzKSA6IHdhcm5pbmcgQzQyNjc6ICdmdW5jdGlvbicgOiBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ2ludCcsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQ0KKw0KK2c6XFByb2dyYW0gRmlsZXNcbmV0cGVyZlxuZXRwZXJmLTIuNC4xcmMxXHNyY1xuZXR0ZXN0X2JzZC5jKDExMTIzKSA6IHdhcm5pbmcgQzQyNjc6ICdmdW5jdGlvbicgOiBjb252ZXJzaW9uIGZyb20gJ3NpemVfdCcgdG8gJ2ludCcsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQ0KKw0KK25ldHNoLmMNCisNCituZXRzZXJ2ZXIuYw0KKw0KK2c6XFByb2dyYW0gRmlsZXNcbmV0cGVyZlxuZXRwZXJmLTIuNC4xcmMxXHNyY1xuZXRzZXJ2ZXIuYyg0NTcpIDogd2FybmluZyBDNDI2NzogJ2Z1bmN0aW9uJyA6IGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAnaW50JywgcG9zc2libGUgbG9zcyBvZiBkYXRhDQorDQorbmV0bGliLmMNCisNCitnOlxQcm9ncmFtIEZpbGVzXG5ldHBlcmZcbmV0cGVyZi0yLjQuMXJjMVxzcmNcbmV0bGliLmMoMjQ3MCkgOiB3YXJuaW5nIEM0MjY3OiAnZnVuY3Rpb24nIDogY29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICdpbnQnLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGENCisNCitnOlxQcm9ncmFtIEZpbGVzXG5ldHBlcmZcbmV0cGVyZi0yLjQuMXJjMVxzcmNcbmV0bGliLmMoMjQ4MCkgOiB3YXJuaW5nIEM0MjY3OiAnZnVuY3Rpb24nIDogY29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICdpbnQnLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGENCisNCituZXRjcHVfbnRwZXJmLmMNCisNCitpbmV0X250b3AuYw0KKw0KK0dlbmVyYXRpbmcgQ29kZS4uLg0KKw0KK0xpbmtpbmcuLi4NCisNCitCdWlsZCBsb2cgd2FzIHNhdmVkIGF0ICJmaWxlOi8vZzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xBZG1pbmlzdHJhdG9yXE15IERvY3VtZW50c1xWaXN1YWwgU3R1ZGlvIFByb2plY3RzXG5ldHNlcnZlclxEZWJ1Z1xCdWlsZExvZy5odG0iDQorDQorbmV0c2VydmVyIC0gMCBlcnJvcihzKSwgMTEgd2FybmluZyhzKQ0KKw0KKyANCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1JlYnVpbGQgQWxsOiAxIHN1Y2NlZWRlZCwgMCBmYWlsZWQsIDAgc2tpcHBlZA0KKw0KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvUmVsZWFzZV9Ob3RlcyBiL25ldHBlcmYtMi40LjUvUmVsZWFzZV9Ob3RlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzA4NDEzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9SZWxlYXNlX05vdGVzCkBAIC0wLDAgKzEsODU2IEBACitUaGVzZSBhcmUgdGhlIFJlbGVhc2UgTm90ZXMgbGVhZGluZy11cCB0byBSZXZpc2lvbiAyLjQuNSBvZiBuZXRwZXJmOgorCitUaGluZ3MgY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2U6CisKKyopIEZpeGVzIGZvciBMaW51eCBwcm9jc3RhdC1iYXNlZCBDUFUgdXRpbGl6YXRpb24gb24gbmV3ZXIga2VybmVscworICAgZnJvbSBBbmRyZXcgR2FsbGF0aW4uCisKKyopIEZpeCBmb3IgYSBUQ1BfUlIgaGFuZyBmcm9tIE1pY2hhZWwgU2h1bGRtYW4KKworKikgQ29tcGlsYXRpb24gY2xlYW51cHMgZm9yIE1pbmdXIGNuZCBNU0RPUyAoZGpncHApIG91cnRlc3kgb2YgR2lzbGUKKyAgIFZhbmVtLgorCisqKSBDaGFuZ2VzIHRvIGVuYWJsZSBjb21waWxhdGlvbiBhbmQgYnVpbGRpbmcgb2YgbmV0cGVyZiBmb3IKKyAgIFZNd2FyZS4gS3Vkb3MgdG8gdGhlIHBlcnNvbiB3aG8gZGlkIHRoZSBmaXJzdCBwb3J0LCBJIHdpbGwgYmUgaGFwcHkKKyAgIHRvIG5hbWUgdGhhdCBwZXJzb24gd2hlbiB0b2xkIGl0IGlzIE9LIDopCisKKyopIEZpeGVzIGZyb20gQWRhbSBCaWRlbWEgZm9yIGxhdW5jaGluZyBuZXRzZXJ2ZXIgY2hpbGRyZW4gd2hlbiB0aGUKKyAgIHBhdGggdG8gbmV0c2VydmVyLmV4ZSBpcyB2ZXJ5IGxvbmcuICAKKworKikgRm9yIHRoZSBmaXJzdCB0aW1lLCBuZXRwZXJmMiBoYXMgYSBkZXBlbmRlbmN5LCBhbGJlaXQgb3B0aW9uYWwsIG9uCisgICBhbm90aGVyIG5vbi1iYXNlLW9zIGJpdCBvZiBjb2RlIC0gbGlic21iaW9zIHVuZGVyIExpbnV4LiAgSXQgd2lsbAorICAgYXR0ZXB0IHRvIGRldGVjdCB0aGlzIGF0IGNvbXBpbGUgdGltZSBhbmQgdXNlIGl0IHRvIHJlcG9ydCB0aGUKKyAgIHN5c3RlbSBtb2RlbCBuYW1lIGluIGFuIG9tbmkgdGVzdC4gIElmIGxpYnNtYmlvcyBpcyB0aGVyZSB3ZSB3aWxsCisgICB0cnkgdG8gdXNlIGl0LCBvdGhlcndpc2Ugd2Ugd2lsbCBub3QuICBJZiB0aGUgYXNzb2NpYXRlZCBpbmNsdWRlCisgICBmaWxlIGlzIGFsc28gdGhlcmUgKGVnIHRoZSAtZGV2IHBhY2thZ2UgaW4gYXB0LWdldC1zcGVhayksIHdlIHdpbGwKKyAgIHVzZSBpdCB0byBnZXQgdGhlIHByb3RvdHlwZSBmb3IgU01CSU9TR2V0U3lzdGVtTmFtZSwgb3RoZXJ3aXNlIHdlCisgICBtYWtlIGEgZ3Vlc3MgYXMgdG8gdGhlIHByb3RvdHlwZSBmb3IgU01CSU9TR2V0U3lzdGVtTmFtZSgpLCB3aGljaAorICAgaXMgdGhlIG9ubHkgY2FsbCB3ZSBtYWtlIHRvIGxpYnNtYmlvcy4KKworKikgRml4ZXMgZm9yIEJTRCBDUFUgdXRpbGl6YXRpb24gdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBCU0QgdmFyaWFudHMKKyAgIHVzaW5nIGRpZmZlcmVudCB0eXBlcy4gIENvdXJ0ZXN5IG9mIFNpbW9uIEJ1cmdlIDxzaW1vbmJATmV0QlNELm9yZz4KKworKikgVGhlICJvbW5pIiBzdWl0ZSBoYXMgYmVlbiBhZGRlZCBvbiBhbiBleHBlcmltZW50YWwgYmFzaXMuICBJZiBpdAorICAgd29ya3Mtb3V0IHRoZW4gbWFueSBvZiB0aGUgdGVzdHMgaW4gc3JjL25ldHRlc3RfYnNkLmMsCisgICBzcmMvbmV0dGVzdF9zZHAuYywgYW5kIHNyYy9uZXR0ZXN0X3NjdHAuYyB3aWxsIGJlICJtaWdyYXRlZCIgdG8gdXNlCisgICB0aGUgIm9tbmkgaW5mcmFzdHJ1Y3R1cmUiIChha2EgdHdvIHJvdXRpbmVzIHRvIG1lYXN1cmUgdGhlbQorICAgYWxsLi4uKS4gIEFwYXJ0IGZyb20gcmVkdWNlZCBzb2NrZXQgY29kZSwgdGhlIG9tbmkgc3VpdGUgaGFzCisgICB1c2VyLWNvbmZpZ3VyYWJsZSBvdXRwdXQgaW4gZWl0aGVyICJodW1hbiByZWFkYWJsZSwiIENTViBvcgorICAga2V5d29yZD12YWx1ZSBmb3JtYXQuICBCeSBkZWZhdWx0LCBhIFZFUlkgbGFyZ2UgcXVhbnRpdHkgb2YgZGF0YSBpcworICAgb3V0cHV0IHdoZW4gYXNraW5nIGZvciBjc3YgZm9ybWF0ICh0ZXN0LXNwZWNpZmljIC1vIG9wdGlvbikgb3IKKyAgIGtleXdvcmQgZm9ybWF0ICh0ZXN0LXNwZWNpZmljIC1rIG9wdGlvbikuICBUaGUgb21uaSBzdWl0ZSBpcyBub3QKKyAgIHlldCBkb2N1bWVudGVkICh0aGVyZSBhcmUgc29tZSBhcy15ZXQgdW5kaWFnbm9zZWQgcHJvYmxlbXMgd2l0aAorICAgZG9jL25ldHBlcmYudGV4aSBpbiBlbWFjcyB0ZXhpbmZvIG1vZGUgYW5kIHVwZGF0aW5nIG5vZGVzIGFuZCBsaW5rcworICAgYW5kIHN1Y2ggLSBhbnkgaGVscCB0aGVyZSB3b3VsZCBiZSBhcHByZWNpYXRlZCkgYnV0IHRoZXJlIGlzIGEKKyAgIHNtYWxsIHRleHQgZmlsZSBpbiBkb2MvIGRlc2NyaWJpbmcgdGhlIG5hbWVzIChtb3N0KSBvZiB0aGUKKyAgIGF2YWlsYWJsZSBvdXRwdXQncy4gIEZvciB0aGUgbW9zdCB1cC10by1kYXRlIGxpc3QgY29uc3VsdAorICAgc3JjL25ldHRlc3Rfb21uaS5jIGFuZCB0aGUgZW51bSBuZXRwZXJmX291dHB1dF9uYW1lLiBPciwgeW91IGNhbgorICAgcGFzcy1pbiBhICJmaWxlbmFtZSIgb2YgJz8nIHRvIGVpdGhlciBvZiB0aGUgLU8sIC1vIG9yIC1rIG9wdGlvbnMKKyAgIGFuZCBuZXRwZXJmIHdpbGwgZW1pdCBhIGxpc3Qgb2YgdGhlIGtub3duIGF2YWlsYWJsZSBvdXRwdXRzLgorCisqKSBDb21pbmcgYWxvbmcgZm9yIHRoZSByaWRlIGFyZSBzb21lIG5ldyBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcyB0bworICAgZGV0ZXJtaW5lIHRoZSBwcm9iYWJsZSBlZ3Jlc3MgaW50ZXJmYWNlIGZvciBlYWNoIGVuZCBvZiBhIHRlc3QsIGFzCisgICB3ZWxsIGFzIGRyaXZlciBpbmZvcm1hdGlvbiBmb3IgdGhhdCBpbnRlcmZhY2UuICBUaGVyZSBpcyBhbHNvCisgICByZXBvcnRpbmcgb2YgInVuYW1lIiBsaWtlIGluZm9ybWF0aW9uIGZvciBib3RoIGxvY2FsIGFuZCByZW1vdGUKKyAgIHN5c3RlbSwgYW5kIGV2ZW50dWFsbHkgcGVyaGFwcyBzb21ldGhpbmcgYWJvdXQgdGhlIHZlbmRvcidzIG1vZGVsCisgICBuYW1lIGZvciB0aGUgc3lzdGVtcyBhcyB3ZWxsIGFzIHRoZSBwcm9jZXNzb3IgdHlwZXMuICBUaGUgZW5kIGdvYWwKKyAgIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBnZXQgbW9zdCBpZiBub3QgYWxsIHdoYXQgb25lIHdvdWxkIHdhbnQgaW4gYQorICAgZGF0YWJhc2Ugb2YgbmV0cGVyZiByZXN1bHRzLgorCisqKSBUaGUgVURQX1JSIHRlc3Qgbm93IHVuZGVyc3RhbmRzIHRoZSBnbG9iYWwgLWYgb3B0aW9uIHRvIGNoYW5nZQorICAgb3V0cHV0IHVuaXRzLiAgSXQgYWxzbyB1bmRlcnN0YW5kcyB0aGUgLUIgb3B0aW9uIHRvIHRhZworICAgcmVzdWx0cy4gQ291cnRlc3kgb2YgQWxleGFuZGVyIER1eWNrLgorCisqKSBBIGZpeCBoYXMgYmVlbiBhZGRlZCBmb3IgaGFuZ2luZyBVRFBfUlIgdGVzdHMgdW5kZXIKKyAgIFdpbmRvd3MuIENvdXJ0ZXN5IG9mIEFsZXhhbmRlciBEdXljay4KKworKikgVXNlIHZmb3JrKCkgb24gdGhvc2UgcGxhdGZvcm1zIHdpdGhvdXQgZm9yaygpLCBjb3VydGVzeSBvZiBNYXR0CisgICBXYWRkZWwKKworKikgVHJhY2sgdGhlIGJvdW5jaW5nIGludGVyZmFjZXMgdGhhdCBhcmUgbGludXggcHJvY2Vzc29yIGFmZmluaXR5CisKKyopIEZpeGVzIGZvciBTb2xhcmlzIHNlbmRmaWxldiB1c2FnZS4KKworKikgQSBUQ1BfTVNTIHRlc3QgaGFzIGJlZW4gYWRkZWQgd2hpY2ggd2lsbCByZXBvcnQgdGhlIE1TUyBmb3IgYSBkYXRhCisgICBjb25uZWN0aW9uIHNldHVwIGFzIGlmIHRoZSB0ZXN0IHdlcmUgYSBUQ1BfU1RSRUFNIHRlc3QuICBXaGlsZSB0aGUKKyAgIHJlbW90ZSAobmV0c2VydmVyKSBpcyB0cmlja2VkIGludG8gdGhpbmtpbmcgaXQgaXMgdG8gYWNjZXB0IGEKKyAgIFRDUF9TVFJFQU0gdGVzdCwgbm8gYWN0dWFsIGRhdGEgd2lsbCBmbG93IG92ZXIgdGhlIGNvbm5lY3Rpb24uCisgICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIE1TUyBpcyBvbmUgd2hpY2ggbWlnaHQgY2hhbmdlIG92ZXIgdGhlIGxpZmUKKyAgIG9mIHRoZSBjb25uZWN0aW9uLCBpdCB3aWxsIG5vdCBiZSByZWZsZWN0ZWQgaW4gdGhlIHRlc3Qgb3V0cHV0LgorICAgU2hvdWxkIHRoaXMgcHJvdmUgdG8gYmUgYSBwcm9ibGVtIGEgc2luZ2xlIHNlbmQoKSBjYW4gYmUgYXJyYW5nZWQKKyAgIGFsb25nIHdpdGggdGhlIHJldHVybiBvZiB0aGUgc2h1dGRvd24oKTtyZWN2KCkgaGFuZHNoYWtlLgorCisgICBUaGUgaWRlYSBpcyB0aGF0IHRoaXMgbWlnaHQgYmUgdXNlZnVsIGZvciBuZXRwZXJmIHNjcmlwdHMgd2FudGluZworICAgdG8gcGFyYW1ldGVyaXplIHRoaW5ncyBiYXNlZCBvbiB0aGUgTVNTIC0gZm9yIGV4YW1wbGUgdGhlCisgICBwYWNrZXRfYnl0ZV9zY3JpcHQuCisKKyopIFRoZSB3aWR0aCBvZiB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBjYW4gYmUgc3BlY2lmaWVkIGluIGZyYWN0aW9ucworICAgb2YgYSBwZXJjZW50IGZvciB0aGUgY29uZmlkZW5jZSBvZiBhIGNsZWFuLCBjbG9zZSwgY29tZm9ydGFibGUKKyAgIGNhbGN1bGF0aW9uLiA6KQorCisqKSBIb25vciB0aGUgZ2xvYmFsIC1CIG9wdGlvbiBpbiBhIFRDUF9TRU5ERklMRSB0ZXN0LgorCisqKSBDb3JyZWN0IHRoZSBzZW5zZSBvZiBTZW5kL1JlY3YgaW4gdGhlIGJhbm5lciBvZiBhIFRDUF9NQUVSVFMgdGVzdC4KKworVGhlc2UgYXJlIHRoZSBSZWxlYXNlIE5vdGVzIGZvciBSZXZpc2lvbiAyLjQuNCBvZiBuZXRwZXJmOgorCitUaGluZ3MgY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2U6CisKKyopIFRoZSBMT0NfQ1BVIGFuZCBSRU1fQ1BVIHRlc3RzIHdpbGwgcmVwb3J0IHRoZWlyIHJlc3BlY3RpdmUgYmVsaWVmcworICAgYXMgdG8gdGhlIG51bWJlciBvZiBDUFVzIHByZXNlbnQgd2hlbiB0aGUgdmVyYm9zaXR5IGlzIHNldCB0byBtb3JlCisgICB0aGFuIG9uZS4gIFRoaXMgY2FuIGJlIHVzZWQgd2hlbiB0cnlpbmcgdG8gZGlhZ25vc2UgaXNzdWVzIHdpdGggQ1BVCisgICB1dGlsaXphdGlvbi4KKworKikgQSBraW5kIHNvdWwgd2hvIHdpc2hlcyB0byByZW1haW4gYW5vbnltb3VzIHByb3ZpZGVkIGEgcGF0Y2ggdG8KKyAgIGVuYWJsZSB1c2Ugb2Ygc2VuZGZpbGUoKSBvbiBPU1guCisKKyopIEZpeCBhIG1pc3BsYWNlZCBcbiBpbiBhIGZvcm1hdCBzdHJpbmcgb2Ygc2VuZF90Y3BfbWFlcnRzLCBjb3VydGVzeQorICAgb2YgQWxleGFuZGVyIER1eWNrLgorCisqKSBUaGVyZSBpcyBhbiBleHBlcmltZW50YWwgZ2xvYmFsIC1yIG9wdGlvbiB3aGljaCB3aWxsIGFsbG93IG9uZSB0bworICAgaW5jbHVkZSBDUFUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCBidXQgbWFrZSB0aGUgZGVjaXNpb24gYWJvdXQKKyAgIGhpdHRpbmcgY29uZmlkZW5jZSBiYXNlZCBvbiB0aGUgcmVzdWx0IG9ubHkuICBUaGUgdGVzdCBiYW5uZXIgd2lsbAorICAgcmVmbGVjdHMgdGhpcyB3aGVuIC1yIGlzIHVzZWQuCisKKyopIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gc3BlY2lmeSBhIGZpbGUgd2l0aCB0aGUgZ2xvYmFsIC1GCisgICBvcHRpb24gd2hlbiBydW5uaW5nIGEgX1NFTkRGSUxFIHRlc3QuICBOZXRwZXJmIHdpbGwgY3JlYXRlIGEKKyAgIHRlbXBvcmFyeSBmaWxlIGFuZCBwb3B1bGF0ZSBpdCB3aXRoIHJhbmRvbSBkYXRhIGFuZCB1c2UgdGhhdC4gIElmCisgICBydW5uaW5nIGFnZ3JlZ2F0ZSB0ZXN0cyBpdCBpcyBzdHJvbmdseSBzdWdnZXN0ZWQgb25lIHVzZSBhIC1GCisgICBvcHRpb24uIE90aGVyd2lzZSwgdGhlIG92ZXJoZWFkIHNwZW50IGNyZWF0aW5nIGFuZCBwb3B1bGF0aW5nIHRoZQorICAgdGVtcG9yYXJ5IGZpbGUgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQ1BVIHV0aWxpemF0aW9uIGNhbGN1bGF0aW9uLgorCisqKSBUaGUgY29uZmlndXJlIHNjcmlwdCByZWNvZ25pemVzIFNvbGFyaXMgMTEgYW5kIHNlbGVjdHMgdGhlIGNvcnJlY3QKKyAgIENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc20gLSBvciByYXRoZXIgaXQgc2VsZWN0cyB0aGUgc2FtZSBtZWNoYW5pc20KKyAgIGFzIGlzIHVzZWQgaW4gU29sYXJpcyAxMC4gIEZpeCBjb3VydGVzeSBvZiBBbmRyZXcgR2FsbGF0aW4uCisKKyopIENvbnZlcnQgYSBudW1iZXIgb2Ygc3RydWN0IHNvY2thZGRyX2luJ3MgdG8gc3RydWN0CisgICBzb2NrYWRkcl9zdG9yYWdlJ3MgYW5kIGFkZCByZXF1aXNpdGUgY2FzdHMgdG8gZGVhbCB3aXRoIHNvbWUgYWJvcnQKKyAgIHByb2JsZW1zIG9uIFdpbmRvd3MgYW5kIHBlcmhhcHMgb3RoZXIgcGxhdGZvcm1zIGFzIHdlbGwuIEt1ZG9zIHRvCisgICBBbGV4YW5kZXIgRHV5Y2suCisKKyopIE9uZSBjYW4gbm93IHBhc3MgYSB2YWx1ZSBvZiAneCcgdG8gdGhlIGdsb2JhbCAtZiBvcHRpb24gdG8gc3BlY2lmeQorICAgdGhlIHVuaXRzIGFzIHRyYW5zYWN0aW9ucyBwZXIgc2Vjb25kLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgYW55CisgICByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIHdoaWNoIGlzIGRldGVybWluZWQgYnkgdGhlcmUgYmVpbmcgYSAiZG91YmxlCisgICBgciciIGluIHRoZSBuYW1lIC0gZWcgIlJSLCIgInJyLCIgIlJyLCIgb3IgInJSLiIgIEF0IHByZXNlbnQgb25seQorICAgdGhlIFRDUF9SUiB0ZXN0IGFjdHVhbGx5IGxvb2tzIGZvciB0aGlzIHRvIGJlIHNldC4KKworKikgT25lIGNhbiByZXF1ZXN0IGJpdHMvYnl0ZXMgcGVyIHNlY29uZCBhcyB0aGUgcHJpbWFyeSBvdXRwdXQgb2YgYQorICAgVENQX1JSIHRlc3QgYnkgc2V0dGluZyB0aGUgZ2xvYmFsIC1mIG9wdGlvbiB0byBba21nS01HXSBhcyB3aXRoIGFueQorICAgb2YgdGhlICJTVFJFQU0iIHRlc3RzLiAgVGhpcyBjb252ZXJ0cyB0aGUgcHJpbWFyeSB0aHJvdWdocHV0IG1ldHJpYworICAgdG8gYSBiaXRyYXRlIChieXRlcmF0ZSkgZm9sbG93aW5nIHRoZSB2ZXJib3NpdHkgcnVsZXMgZm9yIGEgU1RSRUFNCisgICB0ZXN0LiAgU2VydmljZSBkZW1hbmQgcmVtYWlucyB1c2VjL1RyYW5zYWN0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICBzZXR0aW5nIG9mIHRoZSBnbG9iYWwgLWYgb3B0aW9uLgorCisgICBBIHZlcmJvc2l0eSBsZXZlbCBvZiAyIG9yIG1vcmUgd2lsbCBjYXVzZSB0aGUgVENQX1JSIHRlc3QgdG8gcmVwb3J0CisgICBjYWxjdWxhdGVkIGF2ZXJhZ2UgUlRUIGxhdGVuY3ksIHRyYW5zYWN0aW9uIHJhdGUsIGFuZCBpbmJvdW5kIGFuZAorICAgb3V0Ym91bmQgdHJhbnNmZXIgcmF0ZXMgcmVnYXJkbGVzcyBvZiB0aGUgcHJpbWFyeSB1bml0cyBzZWxlY3RlZAorICAgd2l0aCB0aGUgZ2xvYmFsIC1mIHBhcmFtdGVyLiAgSWYgdGhlIHByaW1hcnkgb3V0cHV0IGlzIHRyYW5zYWN0aW9ucworICAgcGVyIHNlY29uZCwgdGhlIHJlcG9ydGVkIGluYm91bmQgYW5kIG91dGJvdW5kIHRyYW5zZmVyIHJhdGVzIHdpbGwKKyAgIGJlIDEwXjYgYml0cyBwZXIgc2Vjb25kLCBvdGhlcndpc2UsIHRoZXkgaG9ub3IgdGhlIHNldHRpbmcgb2YgdGhlCisgICBnbG9iYWwgLWYgb3B0aW9uLgorCisgICBBbGwgb2YgdGhpcyBpcyBFWFBFUklNRU5UQUwgYW5kIHN1YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgcHJpb3IKKyAgIG5vdGljZSBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgbmV0cGVyZi4KKworKikgUmVwbGFjZSAiYnJlYWsiIHdpdGggImJyZWFrIDIiIGluIGFjaW5jbHVkZS5tNCBmb3IgYSBzb2NrbGVuIG1hY3JvCisKKyopIFRoZSBkZWZhdWx0IGZvciB0aGUgcmVxdWVzdGVkIHNvY2tldCBidWZmZXIgc2l6ZSBpcyBjaGFuZ2VkIGZyb20gMAorICAgdG8gLTEgdG8gZW5hYmxlIHBhc3NpbmcgYSB2YWx1ZSBvZiAwIHVuZGVyIFdpbmRvd3MsIHdoaWNoIHRlbGxzIHRoYXQKKyAgIHN0YWNrIG9uZSB3aXNoZXMgdG8gZW5hYmxlIGNvcHktYXZvaWRhbmNlLgorCisqKSBDYWxsIGZmbHVzaCgpIG9uIGVhY2ggaW50ZXJpbSByZXN1bHQgZGlzcGxheWVkIGluIGRlbW8gbW9kZSB0byBtYWtlCisgICB0aGluZ3MgaGFwcGllciBmb3IgZm9sa3MgcmVkaXJlY3Rpbmcgc2FtZSB0byBhIGZpbGUuICBGcm9tIERhbgorICAgWW9zdC4KKworKikgSW4gdGhlb3J5IGVhY2ggZGlzdGluY3QgbmV0c2VydmVyIGNoaWxkIHdpbGwgaGF2ZSBhIGRlYnVnIGxvZyB3aXRoCisgICBpdHMgcGlkIGFwcGVuZGVkIHRvIHRoZSBuYW1lLCBzb21ld2hhdCBsaWtlIHdoYXQgYXBwZWFycyB0byBoYXBwZW4KKyAgIHVuZGVyIFdpbmRvd3MuCisKKyopIEEgbmV3IGdsb2JhbCwgY29tbWFuZC1saW5lIG9wdGlvbiB0byBuZXRwZXJmIGFuZCBuZXRzZXJ2ZXIgaGFzIGJlZW4KKyAgIGFkZGVkLiBUaGUgLVYgb3B0aW9uIHdpbGwgY2F1c2UgbmV0cGVyZi9uZXRzZXJ2ZXIgdG8gZGlzcGxheSBpdHMKKyAgIHZlcnNpb24gYW5kIGV4aXQuCisKKyopIFNldHRpbmcgLUkgd2l0aG91dCBzZXR0aW5nIC1pIHdpbGwgbm93IGltcGxpY2l0bHkgc2V0IHRoZSBpdGVyYXRpb24KKyAgIG1pbmltdW0gYW5kIG1heGltdW1zIGFzIGlmIGEgLWkgMTAsMyB3ZXJlIHNldC4gIEFsc28sIHNvbWUgZnVydGhlcgorICAgc2FuaXR5IGNoZWNraW5nIG9uIHRoZSBib3VuZHMgZm9yIGVhY2ggaXMgbWFkZS4KKworKikgRml4ZWQgYSB0eXBvIGluIHRoZSBtYW51YWwgKGZvdW5kIGJ5IEVtaXIgSGFsZXBvdmljKSBzbyB0aGUKKyAgIGRlc2NyaXB0aW9uIGZvciB0aGUgLXMgYW5kIC1TIG9wdGlvbnMgcHJvcGVybHkgc3BlY2lmaWVzIHRoZXkKKyAgIGFmZmVjdCB0aGUgZGF0YSBjb25uZWN0aW9uLgorCitUaGVzZSBhcmUgdGhlIFJlbGVhc2UgTm90ZXMgZm9yIFJldmlzaW9uIDIuNC4zIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZToKKworKikgVGhlIFVEUF9TVFJFQU0gdGVzdCBpbmNsdWRlcyAtLWVuYWJsZS1kZW1vIHN1cHBvcnQsIGNvdXJ0ZXN5IG9mCisgICBwYXRjaGVzIGZyb20gU2NvdHQgV2VpdHplbmthbXAuCisKKyopIFRoZSBuZXR0ZXN0X2Rucy4qIGZpbGVzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlbGVhc2UgYW5kIHRoZQorICAgcmVwb3NpdG9yeS4gIFRob3NlIHdpc2hpbmcgdG8gcGVyZm9ybSBETlMgc2VydmVyIHRlc3RzIHNob3VsZAorICAgbWlncmF0ZSB0byBuZXRwZXJmNCB3aGljaCBoYXMgYmV0dGVyIHN1cHBvcnQgZm9yIEROUyB0ZXN0LgorCisqKSBGaXhlcyBmb3IgY29tcGlsaW5nIHVuZGVyIFdpbmRvd3Mgd2l0aCBNaW5ndy9nY2MgY291cnRlc3kgb2YgR2lzbGUKKyAgIFZhbmVtLgorCisqKSBBIG5ldyBnbG9iYWwgb3B0aW9uIC0gLU4gLSBoYXMgYmVlbiBhZGRlZC4gV2hlbiBzcGVjaWZpZWQsIHRoaXMKKyAgIG9wdGlvbiB3aWxsIHRlbGwgbmV0cGVyZiB0byBub3QgYm90aGVyIHRvIHRyeSB0byBlc3RhYmxpc2ggYQorICAgY29udHJvbCBjb25uZWN0aW9uIHdpdGggYSByZW1vdGUgbmV0c2VydmVyLiAgSW5zdGVhZCwgbmV0cGVyZiB3aWxsCisgICBvbmx5IGF0dGVtcHQgdG8gbWFrZSBhIGRhdGEgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIHN5c3RlbS4gIEJ5CisgICBkZWZhdWx0LCB0aGlzIHdpbGwgYmUgdG8gdGhlICJkaXNjYXJkIiBzZXJ2aWNlIGZvciBhICJTVFJFQU0iIG9yCisgICAiU0VOREZJTEUiIHRlc3QsIHRoZSAiZWNobyIgc2VydmljZSBmb3IgYSAiUlIiIHRlc3QgYW5kIHRoZQorICAgImNoYXJnZW4iIHNlcnZpY2UgZm9yIGEgIk1BRVJUUyIgdGVzdC4gIEFueSAicmVtb3RlIiBzZXR0aW5ncyBhcmUKKyAgIGNoYW5nZWQgdG8gcmVmbGVjdCB0aGVpciBiZWluZyB1bnVzZWQgaW4gdGhlIHRlc3QsIGFuZCBhICJubworICAgY29udHJvbCIgdGFnIGlzIGFkZGVkIHRvIHRoZSB0ZXN0IGJhbm5lciB3aGVuIC1OIGlzIHNwZWNpZmllZC4KKworICAgVGhpcyBzdGlsbCBuZWVkcyB0byBiZSBwcm9wYWdhdGVkIHRvIG90aGVyIHRlc3QgZmlsZXMgLSBhdCBsZWFzdAorICAgZm9yIHRob3NlIGZvciB3aGljaCBpdCBtYXkgbWFrZSBzZW5zZS4KKworKikgVGhlIHRlc3RzIGluIG5ldHRlc3RfYnNkLmMgaGF2ZSBiZWVuIGFsdGVyZWQgdG8gbm90IGFjdHVhbGx5IHRha2UKKyAgIHRpbWVzdGFtcHMgYW5kIGRlbHRhcyBpbiAtLWVuYWJsZS1oaXN0b2dyYW0gdW5sZXNzIHRoZSB2ZXJib3NpdHkKKyAgIGxldmVsIGhhcyBiZWVuIHNldCB0byBhY3R1YWxseSBkaXNwbGF5IGEgaGlzdG9ncmFtLiAgVGhpcyByZWR1Y2VzCisgICB0aGUgb3ZlcmhlYWQgbWVhc3VyYWJseSwgZXZlbiBvbiBzeXN0ZW1zIHdpdGggImZhc3QiIHRpbWUgY2FsbHMsCisgICB3aGljaCBfbWF5XyBtZWFuIHRoYXQgYSBmdXR1cmUgcmVsZWFzZSBvZiBuZXRwZXJmIG1heSBoYXZlCisgICBoaXN0b2dyYW0gc3VwcG9ydCBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKyAgIFRoaXMgc3RpbGwgbmVlZHMgdG8gYmUgcHJvcGFnYXRlZCB0byBvdGhlciB0ZXN0IGZpbGVzLiAgUGF0Y2hlcworICAgZnJvbSB0aGUgY29tbXVuaXR5IHdvdWxkIGJlIG1vc3Qgd2VsY29tZSA6KQorCisqKSBFbGltaW5hdGUgYSBib2d1cyBmcHJpbnRmIGZyb20gdGhlIHNpZ25hbCBjYXRjaGluZyByb3V0aW5lIHdoaWNoCisgICB3YXMgYmVpbmcgZXhlY3V0ZWQgd2hlbiBib3RoIGludGVydmFscyBhbmQgZGVtbyBtb2RlIHdlcmUgYWN0aXZlIGF0CisgICB0aGUgc2FtZSB0aW1lLgorCisqKSBUaGUgbmV0dGVzdF9pcHY2LiogZmlsZXMgYXJlIG5vIGxvbmdlciBpbmNsdWRlZCBpbiB0aGUgc291cmNlCisgICB0YXIvemlwIGZpbGUuIElQdjYgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiBzdWJzdW1lZCBpbnRvIHRoZQorICAgbmV0dGVzdF9ic2QuKiBmaWxlcyBmb3Igc29tZSB0aW1lIG5vdy4gCisKKyopIFVzZSBhIGhpZ2hlciByZXNvbHV0aW9uICJ0aW1lIiBzb3VyY2UgZm9yIEhJU1RPR1JBTSBzdXBwb3J0IHVuZGVyCisgICBXaW5kb3dzLCBjb3VydGVzeSBvZiBTcGVuY2VyIEZyaW5rLiBQcmlvciB0byB0aGlzIGl0IGhhZCBubyBiZXR0ZXIKKyAgIHRoYW4gMTBtcyBncmFudWxhcml0eSB3aGljaCBjb3VsZCBsZWFkIHRvIHNvbWUgcmF0aGVyIHN0cmFuZ2UKKyAgIGxvb2tpbmcgcmVzdWx0cyA6KQorCisqKSBBIGJ1ZyBmaXggcmVwb3J0aW5nIHJlY3Zfc2l6ZSByYXRoZXIgdGhhbiBzZW5kX3NpemUgaW4gVENQX01BRVJUUworICAgd2hlbiBDUFUgdXRpbGl6YXRpb24gd2FzIHJlcXVlc3RlZC4KKworKikgQSBidWcgZml4IGZvciBidWZmZXIgZmlsbGluZyBmcm9tIGEgZmlsZSB0byBwcm9wZXJseSBhZHZhbmNlIHRoZQorICAgYnVmZmVyIHBvaW50ZXIgd2hlbiB0aGUgZmlsZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHNlbmQgYnVmZmVyLgorCisqKSBFbmFibGUgY2VydGFpbiBVRFAgdGVzdHMgd2hpY2ggcHJldmlvdXNseSB1c2VkIHVuY29ubmVjdGVkIHNvY2tldHMgCisgICB0byB1c2UgY29ubmVjdGVkIHNvY2tldHMuICBDb3VydGVzeSBvZiBTaGlscGkgQWdhcndhbC4KKworKikgVGhlIE9TWCBDUFUgdXRpbGl6YXRpb24gY29kZSBhY3R1YWxseSBnZXRzIHB1dCBpbnRvIHRoZSB0YXJiYWxsIGluCisgICBhIG1ha2UgZGlzdCBub3cgOikKKworKikgVGhlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IGdldGFkZHJpbmZvIHJldHVybmVkIGFpX3Byb3RvY29sIGFuZC9vcgorICAgYWlfc29ja3R5cGUncyBtYXRjaGluZyB0aGF0IHdoaWNoIHdlIHJlcXVlc3RlZCBpcyBkb25lIGZvciBhbGwgc29ja2V0CisgICBhbmQvb3IgcHJvdG9jb2wgdHlwZXMgYW5kIGEgd2FybmluZyBpcyBlbWl0dGVkIGlmIGl0IHJldHVybnMgYW55IHdoaWNoCisgICBkbyBub3QgbWF0Y2guCisKKyopIFRoZSBsaW51eCBDUFUgYWZmaW5pdHkgY29kZSBoYXMgYmVlbiBtYWRlIGNhcGFibGUgb2YgYmluZGluZyB0bworICAgQ1BVJ3MgPj0zMiBvbiBhIDMyLWJpdCBjb21waWxhdGlvbiBhbmQgPj02NCBvbiBhIDY0LWJpdAorICAgY29tcGlsYXRpb24uCisKKyopIE1vcmUgY29tcGxldGUgY2xvc2luZy9yZWRpcmVjdGluZyBvZiBzdGRpbi9zdGRvdXQvc3RkZXJyL3doZXJlIGluCisgICBuZXRzZXJ2ZXIgdG8gbWFrZSBpdCBlYXNpZXIgdG8gbGF1bmNoIG5ldHNlcnZlciBhdCB0aGUgZmFyLWVuZCBvZiBhCisgICByZW1vdGUgc2hlbGwuICBDb3VydGVzeSBvZiBIYW5zIEJsb20uCisKKyopIFNlbmRmaWxlIGNoYW5nZXMgZm9yIFNvbGFyaXMgY291cnRlc3kgb2YgQW5kcmV3IEdhbGxhdGluLgorCisqKSAic3BlYyIgZmlsZSBzdXBwb3J0IHRvIGdlbmVyYXRlIFJQTXMgY291cnRlc3kgb2YgTWFydGluIEJyb3duCisKK1RoZXNlIGFyZSB0aGUgUmVsZWFzZSBOb3RlcyBmb3IgUmV2aXNpb24gMi40LjIgb2YgbmV0cGVyZjoKKworVGhpbmdzIGNoYW5nZWQgaW4gdGhpcyByZWxlYXNlOgorCisqKSBGaXhlcyBmb3IgZmxvYXRpbmcgcG9pbnQgZm9ybWF0IGRpZmZlcmVuY2VzLCBjb3VydGVzeSBvZiBHZW9yZ2UKKyAgIERhdmlzLgorCisqKSBBZGRpdGlvbnMgZm9yIENQVSB1dGlsIHN1cHBvcnQgb24gTWFjT1MgWCwgY291cnRlc3kgb2YgQW5vbnltb3VzLgorCisqKSBQcm9jZXNzb3IgYWZmaW5pdHkgaXMgbm93IHN1cHBvcnRlZCBvbiBBSVggNS4zIChwZXJoYXBzIGVhcmxpZXIpCisgICB2aWEgdGhlIGJpbmRwcm9jZXNzb3Igc3lzdGVtIGNhbGwuCisKKyopIEZpeGVzIGZvciB0ZXN0IGxvY2t1cHMgd2l0aCBUQ1BfQ1JSIGFuZCBUQ1BfQ0MgdW5kZXIgV2luZG93cworICAgY291cnRlc3kgb2YgRGlrb24gUmVlZC4KKworKikgRml4ZXMgdG8gbmV0Y3B1X2xvb3Blci5jIHRvIGdldCBpdCB0byBhY3R1YWxseSBjb21waWxlIDopCisKKyopIEhhdmUgbmV0Y3B1X2xvb3BlciB1c2UgdGhlIGJpbmRfdG9fc3BlY2lmaWNfcHJvY2Vzc29yKCkgY2FsbAorICAgcHJvdmlkZWQgYnkgbmV0bGliIHNpbmNlIHRoYXQga25vd3MgYWJvdXQgbW9yZSBwbGF0Zm9ybXMgdGhhbiB0aGUKKyAgIGNvZGUgaW4gbmV0Y3B1X2xvb3BlciBkaWQuIFRoZSBsb29wZXIgQ1BVIGJpbmRpbmcgd2lsbCB1c2UgYQorICAgbWFwcGluZyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIENQVSBpZCdzIG9uIHRoZSBzeXN0ZW0gbWF5IG5vdCBiZQorICAgYSBjb250aWd1b3VzIHNwYWNlIHN0YXJ0aW5nIGZyb20gemVyby4gIEF0IHByZXNlbnQsIHRoZSBjb2RlIHRoYXQKKyAgIHNldHVwcyB0aGUgbWFwcGluZyBvbmx5IGtub3dzIGFib3V0IHJldHJpZXZpbmcgYWN0dWFsIENQVSBpZHMgdW5kZXIKKyAgIEhQLVVYLgorCisqKSBUaGUgbmV0Y3B1X3N5c2N0bCBtZXRob2QgYmVjb21lcyBjYWxpYnJhdGlvbi1mcmVlLCBjb3VydGVzeSBvZiAKKyAgIEFuZHJldyBHYWxsYXRpbgorCitUaGVzZSBhcmUgdGhlIFJlbGVhc2UgTm90ZXMgZm9yIFJldmlzaW9uIDIuNC4xIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZToKKworKikgVGhlcmUgaXMgbm93IGEgLUIgZ2xvYmFsIGNvbW1hbmQtbGluZSBhcmd1bWVudCB0aGF0IHdpbGwgYXBwZW5kIGl0cworICAgcGFyYW1ldGVyIGFzIGEgc3RyaW5nIHRvIHRoZSBlbmQgb2YgcmVzdWx0IGxpbmVzIHdoZW4gdGVzdCBiYW5uZXJzCisgICBoYXZlIGJlZW4gc3VwcHJlc3NlZC4gIHRoaXMgaXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggb25lCisgICByZXN1bHQgZnJvbSBhbm90aGVyIHdoZW4gYWdncmVnYXRlIHJlc3R1bHRzIGFyZSBiZWluZyBydW4gaW4KKyAgIHBhcmFsbGVsLCB3aXRob3V0IGhhdmluZyB0byByZXNvcnQgdG8gaGF2aW5nIHRoZSBpbmRpdmlkdWFsIHJlc3VsdHMKKyAgIHNoZWxsIHJlZGlyZWN0ZWQgdG8gYSBmaWxlLiBUaGlzIGhhcyBiZWVuIGRvbmUgZm9yIHNvbWUgb2YgdGhlCisgICB0ZXN0cyBpbiBuZXR0ZXN0X2JzZC5jLCBidXQgbm90IGFsbCBvZiB0aGVtLCBub3IgZm9yIHRoZSB0ZXN0cyBpbgorICAgdGhlIG90aGVyIG5ldHRlc3RfbXVtYmxlLmMgZmlsZXMuCisKKyopIFRoZXJlIGlzIG5vdyBhbiAtLWVuYWJsZS1zcGluIGNvbmZpZ3VyZSBvcHRpb24gdGhhdCB3aWxsIGVuYWJsZQorICAgaW50ZXJ2YWxzIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQgYW5kIHdpbGwgaGF2ZSB0aGUgc2VuZGVyIHNpdCBhbmQKKyAgIHNwaW4gaW4gYSB0aWdodCBsb29wIHVudGlsIHRpbWUgZm9yIHRoZSBuZXh0IGludGVydmFsIHJhdGhlciB0aGFuCisgICB3YWl0IGZvciBhbiBpbnRlcnZhbCB0aW1lciB0byBleHBpcmUuICBUaGlzIG1lYW5zIGl0IHNob3VsZCBiZQorICAgcG9zc2libGUgdG8gaGF2ZSBhIG11Y2ggZmluZXIgZ3JhbnVsYXJpdHkgb24gdGhlIGludGVydmFsLCBhdCB0aGUKKyAgIGV4cGVuc2Ugb2YgYW4gRVhUUkVNRSBpbmNyZWFzZSBpbiBDUFUgdXRpbGl6YXRpb24uICAoVG8gdGhlIGV4dGVudAorICAgSSdtIGNvbnNpZGVyaW5nIGRpc2FibGluZyBtZWFzdXJlbWVudCBvZiBsb2NhbCBDUFUgdXRpbGl6YXRpb24gd2hlbgorICAgdGhhdCBtb2RlIGlzIGVuYWJsZWQsIGFuZCBidXJzdHMgaGF2ZSBiZWVuIHJlcXVlc3RlZCAtIHlvdXIKKyAgIGZlZWRiYWNrIG9uIHRoYXQgdG9waWMgd291bGQgYmUgbW9zdCBhcHByZWNpYXRlZCkgCisKKyAgIElmIG9ubHkgLS1lbmFibGUtaW50ZXJ2YWxzIGlzIHVzZWQgd2l0aCBjb25maWd1cmUsIHRoZSBvbGQgc2V0IHRoZQorICAgaW50ZXJ2YWwgdGltZXIgYW5kIHdhaXQgbWV0aG9kIGlzIHN0aWxsIHVzZWQuCisKKyAgIElmIC0tZW5hYmxlLXNwaW4gaXMgY29uZmlndXJlZCwgdGhlIHRlc3QgYmFubmVyIHdpbGwgaW5jbHVkZSAic3BpbgorICAgaW50ZXJ2YWxzIiByYXRoZXIgdGhhbiB0aGUgImludGVydmFscyIgZnJvbSBhIHBsYWluCisgICAtLWVuYWJsZS1pbnRlcnZhbHMuICBUaGUgc2l0IGFuZCBzcGluIHdpbGwgZWl0aGVyIHVzZQorICAgZ2V0dGltZW9mZGF5KCksIG9yIGdldGhydGltZSgpIGlmIGdldGhydGltZSgpIGlzIGF2YWlsYWJsZS4KKworICAgVGhpcyBoYXMgYmVlbiBpbXBsZW1lbnRlZCBpbiB0aGUgdGVzdHMgb2YgbmV0dGVzdF9ic2QuYyBidXQgbm9uZSBvZgorICAgdGhlIG90aGVycy4gIFZvbHVudGVlcnMgd291bGQgYmUgbW9zdCB3ZWxjb21lLiAgSSB3b3VsZCBlbnRlcnRhaW4KKyAgIHRoZSBub3Rpb24gb2YgbWFraW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBhIHNlcmllcyBvZiBpbmxpbmUKKyAgIGZ1bmN0aW9ucyBpbiBuZXRsaWIuIFRoaXMgaG9sZHMgdHJ1ZSBmb3IgdGhlIGRlbW8gbW9kZSAtIHdoeSB3aWxsCisgICBiZWNvbWUgY2xlYXIgd2hlbiB5b3UgbG9vayBhdCBuZXR0ZXN0X2JzZC5jLiAgV2hpbGUgdGhpbmdzIGFyZQorICAgY29uc2lkZXJhYmx5IGNsZWFuZXIgdGhhbiB0aGV5IHdlcmUgYmVmb3JlLCB3aXRoIHJldXNlIHdpdGhpbgorICAgbmV0dGVzdF9ic2QuYywgdGhlcmUgaXMgbm8gcmVzdXNlIHdpdGggdGhlIHJlc3Qgb2YgdGhlCisgICBuZXR0ZXN0X211bWJsZS5jIGZpbGVzLgorCisqKSB0aGUgLXcgb3B0aW9uIGZvciB0aGUgaW50ZXJ2YWwgdGltZSBub3cgdGFrZXMgdGhyZWUgb3B0aW9uYWwKKyAgIHN1ZmZpeGVzLiBpZiB0aGUgc3VmZml4IGlzICdtJyAoZWcgMTBtKSBpdCB3aWxsIGFzc3VtZSB0aGUgdXNlciBoYXMKKyAgIHNwZWNpZmllZCB0aW1lIGluIHVuaXRzIG9mIG1pbGxpc2Vjb25kcy4gIGlmIHRoZSBzdWZmaXggaXMgJ3UnIGl0CisgICB3aWxsIGFzc3VtZSBtaWNyb3NlY29uZHMsIGFuZCBpZiAncycgc2Vjb25kcy4gbm8gc3VmZml4IHJlbWFpbnMKKyAgIG1pbGxpc2Vjb25kcyBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgd2l0aCBwcmV2aW91cyBuZXRwZXJmCisgICB2ZXJzaW9ucy4KKworKikgSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHN1Y2Nlc3NmdWxseSBjb21waWxlIHdpdGgKKyAgIC0tZW5hYmxlLWludGVydmFscy4KKworVGhlc2UgYXJlIHRoZSBSZWxlYXNlIE5vdGVzIGZvciBSZXZpc2lvbiAyLjQuMSBvZiBuZXRwZXJmOgorCitUaGluZ3MgY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2U6CisKKyopIG5ldGNwdV9wc3RhdG5ldy5jIGhhcyBiZWVuIGFsdGVyZWQgdG8gd29ya2Fyb3VuZCBhIGJ1ZyBpbiB0aGUKKyAgIGludGVycnVwdCBjeWNsZSBhY2NvdW50aW5nIGluIEhQLVVYIDExLjIzIHRoYXQgaXMgbm90IGV4cGVjdGVkIHRvCisgICBiZSByZXNvbHZlZCB1bnRpbCBhIGxhdGVyIHJlbGVhc2UuICBiYXNpY2FsbHksIHNvbWUgaW50ZXJydXB0IHRpbWUKKyAgIGlzIG5vdCBjb3VudGVkLCB3aGljaCBtZWFucyB0aGUgc3VtIG9mIGlkbGUsIHVzZXIsIGtlcm5lbCBhbmQKKyAgIGludGVycnVwdCBpcyBsZXNzIHRoYW4gdGhlIGN5Y2xlcyBwZXIgc2Vjb25kIG11bHRpcGxpZWQgYnkgdGhlCisgICBlbGFwc2VkIHRpbWUuICB0aGUgd29ya2Fyb3VuZCBwcmVzZXJ2ZXMgdGhlICJubyBjYWxpYnJhdGlvbgorICAgcmVxdWlyZWQiIG5hdHVyZSBvZiB0aGUgcHN0YXRuZXcgQ1BVIHV0aWxpemF0aW9uIG1lY2hhbmlzbS4gIHlvdQorICAgY2FuIHNlZSBtb3JlIGluIG5ldGNwdV9wc3RhdG5ldy5jIGFuZC9vciBpbiBkZWJ1ZyBvdXRwdXQuCisKKyopIGluIG5ldGxpYi5jIHJlY3ZfcmVzcG9uc2UgaGFzIGJlZW4gcmVuYW1lZAorICAgcmVjdl9yZXNwb25zZV90aW1lZChhZGRsX3RpbWUpIHdoaWNoIGlzIG5vdyB1c2VkIGluCisgICBjYWxpYnJhdGVfcmVtb3RlX2NwdSBpbiBwbGFjZSBvZiB0aGUgInNsZWVwKDQwKTtyZWN2X3Jlc3BvbnNlKCkiCisgICBzZXF1ZW5jZS4gIFRoaXMgdGhlbiBhbGxvd3MgdGhlIFJFTV9DUFUgdGVzdCB0byBjb21wbGV0ZSBpbiBsZXNzCisgICB0aGFuIDQwIHNlY29uZHMgd2hlbiB0aGUgcmVtb3RlJ3MgQ1BVIHV0aWxpemF0aW9uIG1lY2hhbmlzbSBkb2VzCisgICBub3QgcmVxdWlyZSBjYWxpYnJhdGlvbi4gIFRoZSB2YWx1ZSBvZiAiYWRkbF90aW1lIiBpcyBhZGRlZCB0byB0aGUKKyAgIHRjX3NlYyBmaWVsZCBvZiB0aGUgc2VsZWN0KCkgdGltZW91dC4gIEEgIm5ldyIgcmVjdl9yZXNwb25zZSBoYXMKKyAgIGJlZW4gYWRkZWQgdGhhdCBzaW1wbHkgY2FsbHMgcmVjdl9yZXNwb25zZV90aW1lZCgwKSAtIHRoaXMgaXMgdG8KKyAgIG1pbmltaXplIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBuZWVkZWQgZWxzZXdoZXJlIGluIHRoZSBjb2RlLgorCisqKSBob3BlZnVsbHksIHRoaXMgcmVsZWFzZSBmaXhlcyBwcm9ibGVtcyBwZW9wbGUgaGF2ZSBiZWVuIGhhdmluZyB3aXRoCisgICB0aGUgY29uZmlndXJlIHNjcmlwdCBmYWlsaW5nIHdoZW4gcGlja2luZyBhIHR5cGUgZm9yIHNvY2tsZW5fdC4KKyAgIG5vdywgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFuIGVycm9yLCBpdCBlbWl0cyBhIHdhcm5pbmcgYW5kIHNpbXBseQorICAgdHJpZXMgc29ja2xlbl90CisKKyopIHRoZSBjb25maWd1cmUgc2NyaXB0IG5vIGxvbmdlciBsb29rcyBmb3IgdGhlIHNpemUgb2YgYW4gaW5fcG9ydF90CisKKyopIG5ldGxpYi5jIG5vdyBoYXMgY29kZSB0byBwZXJmb3JtIHByb2Nlc3NvciBiaW5kaW5nIGZvciBUcnU2NCwgYnV0CisgICB0aGUgY29uZmlndXJlIHNjcmlwdCBtYXkgb3IgbWF5IG5vdCBkZXRlY3QgaXQgY29ycmVjdGx5LiBUaGlzIG1lYW5zCisgICB0aGF0IG9uZSBtYXkgaGF2ZSB0byBlZGl0IHRoZSBjb25maWcuaCBmaWxlIGJ5IGhhbmQgdG8gZ2V0IHRoZQorICAgZnVuY3Rpb25hbGl0eS4KKworKikgaXQgaXMga25vd24gdGhhdCBuZXRwZXJmIHdpbGwgY29tcGlsZSB1bmRlciBXaW5kb3dzIFhQIGFuZCAyMDAzCisgICB1c2luZyB0aGUgRERLIGl0IGlzIHBvc3NpYmxlIHRoYXQgbmV0cGVyZiAyLjQuMSB3aWxsIGNvbXBpbGUgb24gYQorICAgV2luZG93cyBzeXN0ZW0gdW5kZXIgVkMrKy9WaXN1YWwgU3R1ZGlvLiAgSXQgbWlnaHQgZXZlbiB3b3JrIS0pIFNlZQorICAgdGhlIFJFQURNRS53aW5kb3cgZmlsZSBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorCitUaGluZ3MgX05PVF8gY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2U6CisKKyopIFRoZSBhdXRvbWFnaWMgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbnVtYmVyIGFuZCB0eXBlIG9mIHBhcmFtZXRlcnMgdG8KKyAgIHNjaGVkX3NldGFmZmluaXR5IHVuZGVyIExpbnV4IHJlbWFpbnMgYnJpdHRsZSBhdCBiZXN0LgorCitUaGVzZSBhcmUgdGhlIFJlbGVhc2UgTm90ZXMgZm9yIFJldmlzaW9uIDIuNC4wIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZToKKworKikgTmV0cGVyZiBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlIGEgY29uZmlndXJlIHNjcmlwdC4gIFllcyBib3lzIGFuZAorICAgZ2lybHMsIGFmdGVyIDEyIHllYXJzIG9mIGRpc3RyaWJ1dGluZyBuZXRwZXJmIHdpdGgganVzdCBhIG1ha2VmaWxlCisgICBJIGhhdmUgZmluYWxseSBiaXR0ZW4gdGhlIGJ1bGxldCBhbmQgY2FzdCBteSBmYXRlIHRvIGF1dG9jb25mLAorICAgYXV0b21ha2UsIGV0Yy4gIFRvIGdldCB0aGUgbW9zdCBiYXNpYyBuZXRwZXJmIGJ1aWx0IGFsbCB5b3Ugc2hvdWxkCisgICBuZWVkIHRvIGRvIGlzOgorCisgICBjZCB0byB0aGUgbmV0cGVyZiBkaXJlY3RvcnkKKyAgIC4vY29uZmlndXJlCisgICBtYWtlCisgICBhbmQgcGVyaGFwcworICAgbWFrZSBpbnN0YWxsCisKKyAgIChOb3RlLCBJJ3ZlIG5vdCBkb25lIG11Y2ggd2l0aCBtYWtlIGluc3RhbGwgLSBJJ20gaGVtbWluZyBhbmQKKyAgIGhhd2luZyBvdmVyIHdoYXQgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIHNob3VsZCBiZSkKKworICAgUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgSSd2ZSB0cmllZCB0byB1c2UKKyAgIGF1dG9jb25mIGV0IGFsLiBJIGFtIHN1cmUgdGhlcmUgYXJlIHRoaW5ncyB0aGF0IHNob3VsZCBiZSBkb25lCisgICBkaWZmZXJlbnRseSBhbmQgd291bGQgd2VsY29tZSBhbnkgYW5kIGFsbCBjb25zdHJ1Y3RpdmUgY3JpdGljaXNtcy4KKworICAgSSBzdXNwZWN0IHRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSBJJ3ZlIG5vdCBmdWxseQorICAgZGVtb25zdHJhdGVkIGJlaW5nIG9mIHRoZSBhdXRvY29uZiBib2R5IC0gcGFydGljdWxhcnkgYXMgcGVydGFpbnMKKyAgIHRvIGluY2x1ZGUgZmlsZXMgYmVpbmcgaW4gIiNpZiBtdW1ibGUgI2VuZGlmIiBibG9ja3MuICBGaXhlcyB3b3VsZAorICAgYmUgbW9zdCB3ZWxjb21lLgorCisqKSBTcGVha2luZyBvZiBiZWNvbW1pbmcgb25lIHdpdGggdmFyaW91cyBHTlUgdG9vbHMsIHdvcmsgb24gYSBuZXcKKyAgIG5ldHBlcmYgbWFudWFsIGhhcyBiZWd1biwgd2l0aCB0aGUgc291cmNlIGJlaW5nIGEgdGV4aW5mbyBkb2N1bWVudAorICAgdGhhdCBpcyBjb252ZXJ0ZWQgdG8gImFsbCIgdGhlIG90aGVyIGZvcm1hdHMuICBUaGlzIHJlc2lkZXMgaW4gZG9jLworICAgLgorCisqKSBUaGUgcGxhdGZvcm0tc3BlY2lmaWMgcGFydHMgb2YgQ1BVIHV0aWxpemF0aW9uIG1lYXN1cmVtZW50IGhhdmUKKyAgIGJlZW4gYnJva2VuLW91dCBpbnRvIHNlcGFyYXRlIC5jIGZpbGVzIGFuZCBzZWxlY3RlZCBhdCBjb25maWd1cmUKKyAgIHRpbWUgYSBsYSB0aGUgcGNhcF9tdW1ibGUgZmlsZXMgb2YgdGNwZHVtcC4gIFRoaXMgbWFrZXMKKyAgIHNyYy9uZXRsaWIuYyBfbXVjaF8gZWFzaWVyIHRvIHJlYWQgYW5kIHRoZSBhZGRpdGlvbiBvZiBuZXcgQ1BVCisgICB1dGlsaXphdGlvbiBtZWNoYW5pc21zIG11Y2ggZWFzaWVyLgorCisqKSBOZXcgSFAtVVggMTEuMjMgYW5kIFNvbGFyaXMgMTAgQ1BVIHV0aWxpemF0aW9uIG1lYXN1cmVtZW50CisgICBtZWNoYW5pc21zIChjYWxsZWQgcHN0YXRuZXcgYW5kIGtzdGF0MTAgcmVzcGVjdGl2ZWx5KSBuZWVkIG5vCisgICBjYWxpYnJhdGlvbiBzdGVwLiAgQm90aCBoYXZlIHZhcmlhdGlvbnMgb24gbWljcm9zdGF0ZSBhY2NvdW50aW5nLgorICAgSFAtVVggMTEuMjMgc3RpbGwgaWRlbnRpZmllcyB0aGUgbWV0aG9kIGluIHRoZSBoZWFkZXJzIGFzICdQJyBmb3IKKyAgIHBzdGF0LiAgVGhlIGtzdGF0MTAgbWV0aG9kIGlzIGlkZW50aWZpZWQgYXMgJ00nIGZvciBNaWNyb3N0YXRlLgorCisgICBTY3JpcHRzIHdoaWNoIG1ha2UgY2FsaWJyYXRpb24gcnVucyB3aXRoIExPQ19DUFUgYW5kIFJFTV9DUFUgbWF5CisgICBjb250aW51ZSB0byBkbyBzbywgdGhleSB3aWxsIGp1c3QgcnVuIGZvcnR5IHRvIGVpZ2h0eSBzZWNvbmRzCisgICBmYXN0ZXIgb24gcGxhdGZvcm1zIHdpdGggdGhlIGNhbGlicmF0aW9uLWZyZWUgQ1BVIHV0aWwgbWVjaGFuaXNtcy4KKworKikgQXV0b21hdGljIGRldGVjdGlvbiBvZiBDUFUgdXRpbGl6YXRpb24gbWVjaGFuaXNtIGZvciBIUC1VWCwgTGludXgsCisgICBBSVgsICpCU0QgYW5kIFNvbGFyaXMuICBJZiB5b3UgZG8gbm90IGxpa2Ugd2hhdCB0aGUgY29uZmlndXJlCisgICBzY3JpcHQgc2VsZWN0cywgeW91IGNhbiB1c2UgLS1lbmFibGUtY3B1dXRpbD08Zm9vPiAuCisKKyopIFRoZSAidGltZXMiIChha2EgJ1QnKSBDUFUgdXRpbGl6YXRpb24gbWVjaGFuaXNtIGhhcyBiZWVuIHJlbW92ZWQuCisgICBJdCB3YXMgbmV2ZXIgdmVyeSBhY2N1cmF0ZSBhdCBhbGwsIG9ubHkgc2hvd2luZyBDUFUgdGltZSBjaGFyZ2VkIHRvCisgICB0aGUgcHJvY2VzcywgYW5kIHdpdGggaW50ZXJydXB0cyBhbmQgb3RoZXIgbmV0d29yayBwcm9jZXNzaW5nIGl0IGlzCisgICByYXJlbHkgY2hhZ2VkIHRvIGEgb3IgdGhlIGNvcnJlY3QgcHJvY2Vzcy4gIEl0IGFuZCBvdGhlciBtZXRob2RzCisgICBtYXkgcmVtYWluIGluIHRoZSBmb3JtYXRfY3B1X21ldGhvZCgpIHJvdXRpbmUgb2Ygc3JjL25ldGxpYi5jIGZvcgorICAgaGlzdG9yaWNhbCBwdXJwb3NlcyBvbmx5LgorCisqKSBDQVZFQVQgLSB0aGUgImtzdGF0IiBtZWNoYW5pc20gaXMgS05PV04gVE8gQkUgQk9HVVMgZm9yIFNvbGFyaXMuCisgICBJdCBkb2VzIG5vdCBpbmNsdWRlIHRpbWUgc3BlbnQgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzLCBhbmQKKyAgIG5ldHdvcmtpbmcgYmVuY2htYXJrcyB3aWxsIGdlbmVyYXRlIGF0IGxlYXN0IGEgZmV3IG9mIHRob3NlLi4uCisgICBUaGlzIGFmZmVjdHMgX0FMTF8gdmVyc2lvbnMgb2YgU29sYXJpcyB3aXRoIGtzdGF0LgorCisgICBTbywgZG8gTk9UIHRydXN0IGFueSBDUFUgdXRpbCBmaWd1cmVzIHdoZXJlIG5ldHBlcmYgc2F5cyB0aGUgbWV0aG9kCisgICB3YXMgJ0snIGZvciBrc3RhdCAtIHVubGVzcyBwZXJoYXBzIGl0IHJlcG9ydHMgMTAwJSBDUFUgdXRpbC4KKworICAgU29sYXJpcyAxMCB0YWtlcyBhIHN0ZXAgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiBhZGRpbmcgbWljcm9zdGF0ZQorICAgYWNjb3VudGluZyBzaW1pbGFyIHRvIHdoYXQgbmV0cGVyZiB1c2VzIG9uIEhQLVVYIDExLjIzLiAgSE9XRVZFUiwKKyAgIFNvbGFyaXMgMTAncyBhY2NvdW50aW5nIGZvciB1c2VyL2tlcm5lbC9pZGxlIGlzIGRvbmUgaW4gX3BhcmFsbGVsXworICAgd2l0aCBpbnRlcnJ1cHQsIHdoaWNoIG1lYW5zIHRoZXkgb3ZlcmxhcC4gRG91YmxlcGx1c3VuZ29vZC4gTmV0cGVyZgorICAgYXR0ZW1wdHMgdG8gY29tcGVuc2F0ZSBmb3IgdGhhdCB3aXRoIHNvbWUgaGFuZHdhdmluZworICAgKHNyYy9uZXRjcHVfa3N0YXQxMC5jKQorCisqKSBJbml0aWFsIHN1cHBvcnQgZm9yIFNDVFAgaGFzIGJlZW4gYWRkZWQgd2l0aCB0aGUgU0NUUF9TVFJFQU0gYW5kCisgICBTQ1RQX1JSIHRlc3RzLiAgVGhlc2UgdGVzdHMgdXNlIHRoZSBsaWJzY3RwIG1lY2hhbmlzbXMgZm9yCisgICBpbmNyZWFzZWQgcG9ydGFiaWxpdHkuICBJdCBoYXMgYmVlbiBleHBsYWluZWQgdGhhdCBsaWJzY3RwIHNob3VsZAorICAgbm90IGltcGFydCBhbGwgdGhhdCBtdWNoIG92ZXJoZWFkIGFuZCBpdCBkb2VzIG1ha2UgdGhpbmdzIHJhdGhlcgorICAgc2ltcGxlci4KKworKikgTmV0cGVyZiBub3cgdXNlcyBnZXRhZGRyaW5mbygpIHRvIHJlc29sdmUgaG9zdG5hbWVzIGFuZCBJUAorICAgYWRkcmVzc2VzLiBBIHJlcGxhY2VtZW50IGdldGFkZHJpbmZvKCkgaXMgcHJvdmlkZWQgZm9yIHRob3NlCisgICBwbGF0Zm9ybXMgd2hlcmUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgY2Fubm90IHRlbGwgdGhhdCBnZXRhZGRyaW5mbworICAgaXMgcHJlc2VudC4gICAKKworICAgVGhlcmUgYXJlIGNhc2VzIHdoZXJlIGEgaG9zdCdzIGdldGFkZHJpbmZvIGNhbGwgbWF5IHJldHVybiByZXN1bHRzCisgICB0aGF0IGlnbm9yZSB0aGUgaGludHMgZm9yIHByb3RvY29sLiAgTmV0cGVyZiBjYXRjaGVzIHRoZXNlIGFuZAorICAgcmVwb3J0cyBhIHdhcm5pbmcgc28geW91IGNhbiBwZXN0ZXIgeW91ciBPUyBzb3VyY2UgZm9yIGZpeGVzLgorCisgICBTb2xhcmlzIGdldGFkZHJpbmZvKCkgc2VlbXMgdG8gcmV0dXJuIHJlc3VsdHMgd2l0aCBTQ1RQIHByb2NvdG9sCisgICBjbGVhcmVkLgorCisgICBNYWMgT1MgWCBnZXRhZGRyaW5mbyBib3RjaGVzIHdoZW4gdGhlIHNlcnZpY2UvcG9ydCBpcyBzcGVjaWZpZWQgYXMKKyAgICIwIiBzbyBvbmUgbXVzdCBzcGVjaWZ5IGEgcG9ydCBudW1iZXIgb24gdGhlIG5ldHBlcmYgY29tbWFuZCBsaW5lLgorCisgICBBSVggNS5zb21ldGhpbmcgZ2V0YWRkcmluZm8gaGFzIGEgZGlmZmVyZW50IGJ1dCBzaW1pbGFyIHByb2JsZW0KKyAgIHdpdGggIjAiIGFzIGEgcG9ydC9zZXJ2aWNlIG5hbWUgYXMgd2VsbC4KKworICAgTGludXggMi42IGFuZCBIUC1VWCAxMWkgZ2V0YWRkcmluZm8gc2VlbSB0byBiZSBmaW5lIC0gYXQgbGVhc3QgYXMKKyAgIGZhciBhcyBuZXRwZXJmIGdvZXMgOikKKworKikgQSAiRGVtbyBNb2RlIiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbWFpbiBCU0QgU29ja2V0cy9UQ1AvVURQIHRlc3RzOgorICAgVENQX1NUUkVBTSwgVENQX01BRVJUUywgVENQX1NFTkRGSUxFLCBUQ1BfUlIsIFRDUF9DQywgVENQX0NSUiBhbmQKKyAgIFVEUF9SUi4gSXQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIFVEUF9TVFJFQU0uICBUaGlzIG1vZGUgaXMgZW5hYmxlZAorICAgd2l0aCAtLWVuYWJsZS1kZW1vIHdoZW4gY29uZmlndXJpbmcgbmV0cGVyZiwgd2hpY2ggYWN0aXZhdGVzIGEKKyAgIGdsb2JhbCAiLUQiIG9wdGlvbi4gIEJ5IGRlZmF1bHQsIC1EIHdpbGwgY2F1c2UgaW50ZXJpbSByZXN1bHRzCisgICAodGhyb3VnaHB1dCBvciB0cmFuc2FjdGlvbnMvcyBvbmx5LCBub3QgQ1BVIHV0aWwpIGZyb20gdGhlCisgICBuZXRwZXJmJ3MgcGVyc3BlY3RpdmUgdG8gYmUgZW1pdHRlZCBubyBzb29uZXIgdGhhbiBvbmNlIHBlciBzZWNvbmQuCisgICBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgY2FuIHNwZWNpZnkgYW5vdGhlciBpbnRlcnZhbCBpbiB1bml0cworICAgKGZsb2F0aW5nIHBvaW50KSBvZiBzZWNvbmRzOgorCisgICAgICAtRCAxLjUKKworICAgd2lsbCBtYWtlIHRoZSByZXBvcnRpbmcgaW50ZXJ2YWwgYXQgbGVhc3QgMS41IHNlY29uZHMuCisKKyAgIFRoaXMgbW9kZSBtYWtlcyBubyB1c2Ugb2YgZXhwbGljaXQgaW50ZXJ2YWwgdGltZXJzIHNpbmNlIHRoYXQgY2FuCisgICBiZSBzbywgd2VsbCBmdW4gb24gZGlmZmVyZW50IHBsYXRmb3Jtcy4gIEluc3RlYWQsIGFuIGluaXRpYWwgZ3Vlc3MKKyAgIG9mIGhvdyBtYW55IHVuaXRzIG9mIHdvcmsgbXVzdCBiZSBkb25lIHRvIGNvbnN1bWUgdGhlIGRlc2lyZWQKKyAgIHJlcG9ydGluZyBpbnRlcnZhbCBpcyBtYWRlLCBhbmQgdGhhdCBndWVzcyBpcyByZWZpbmVkIHRocm91Z2hvdXQKKyAgIHRoZSBlbnRpcmUgdGVzdC4gIElmIHNvbWV0aGluZyBoYXBwZW5zIHRvIGRyYW1hdGljYWxseSBzbG93LWRvd24KKyAgIHRoZSB0ZXN0LCB0aGUgcmVwcm90aW5nIGludGVydmFsIG1heSBiZWNvbWUgbXVzdCBsYXJnZXIgZm9yIGEgZmV3CisgICBpbnRlcnZhbHMuICBXaGVuIHRoaW5ncyBzcGVlZC11cCBpdCBpcyBkZXRlY3RlZCB2ZXJ5IHF1aWNrbHkuICBBcworICAgd2l0aCB0aGUgLS1lbmFibGUtaGlzdG9yZ3JhbSBzdXBwb3J0LCBpZiBnZXRocnRpbWUoKSBpcyBhdmFpbGFibGUKKyAgIG9uIHRoZSBwbGF0Zm9ybSwgaXQgd2lsbCBiZSB1c2VkIGluIGxpZXUgb2YgZ2V0dGltZW9mZGF5KCkuICBJbiBhbnkKKyAgIGNhc2UsIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gZ2V0dGltZW9mZGF5KCkvZ2V0aHJ0aW1lKCkgaXMgbXVjaCwKKyAgIE11Y2gsIE1VQ0ggc21hbGxlciB0aGFuIGZvciAtLWVuYWJsZS1oaXN0b2dyYW0gc28gd2hpbGUgdGhlcmUgbWF5CisgICBiZSBhIG1lYXN1cmFibGUgZWZmZWN0IG9uIHRoZSByZXN1bHRzLCBpdCBzaG91bGQgYmUgcmF0aGVyIHNtYWxsLgorCisqKSBUaGUgZ2xvYmFsIC1IIG9wdGlvbiBoYXMgYmVlbiBlbmhhbmNlZCB0byB0YWtlIGFuIG9wdGlvbmFsIGFkZHJlc3MKKyAgIGZhbWlseSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uOgorCisgICAtSCA8cmVtb3RlPiw8ZmFtaWx5PgorCisgICBVbmxpa2Ugb3RoZXIgY29tbWEtc2VwYXJhdGVkIG9wdGlvbnMsIHdoZXJlIHNwZWNpZnlpbmcgb25seSBvbmUKKyAgIHRoaW5nIHdpbGwgc2V0IGJvdGgsIGhlcmUgc3BlY2lmeWluZyBvbmx5IG9uZSB0aGluZyB3aWxsIGJlCisgICBhc3MtdS1tZS1kIHRvIGJlIHRoZSA8cmVtb3RlPiBhbmQgd2lsbCBsZWF2ZSA8ZmFtaWx5PiBkZWZhdWx0ZWQKKyAgIChBRl9VTlNQRUMpLiAgIEZhbWlseSBjYW4gYmUgc3BlY2lmaWVkIGFzICI0IiBvciAiaW5ldCIgZm9yCisgICBBRl9JTkVULCAiNiIgb3IgImluZXQ2IiBmb3IgQUZfSU5FVDYuCisKKyopIEEgbmV3IGdsb2JhbCAtTCBvcHRpb24gaGFzIGJlZW4gYWRkZWQgdG8gc3BlY2lmeSB0aGUgbG9jYWwgbmFtZS9JUAorICAgYW5kL29yIGFkZHJlc3MgZmFtaWx5IGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uOgorCisgICAtTCA8bG9jYWw+LDxmYW1pbHk+CisKKyAgIFVubGlrZSBvdGhlciBjb21tYS1zZXBhcmF0ZWQgb3B0aW9ucywgd2hlcmUgc3BlY2lmeWluZyBvbmx5IG9uZQorICAgdGhpbmcgd2lsbCBzZXQgYm90aCwgaGVyZSBzcGVjaWZ5aW5nIG9ubHkgb25lIHRoaW5nIHdpbGwgYmUKKyAgIGFzcy11LW1lLWQgdG8gYmUgdGhlIDxsb2NhbD4gYW5kIHdpbGwgbGVhdmUgPGZhbWlseT4gZGVmYXVsdGVkCisgICAoQUZfVU5TUEVDKS4gIEZhbWlseSBjYW4gYmUgc3BlY2lmaWVkIGFzICI0IiBvciAiaW5ldCIgZm9yCisgICBBRl9JTkVULCAiNiIgb3IgImluZXQ2IiBmb3IgQUZfSU5FVDYuCisKKyopIFRlc3Qtc3BlY2lmaWMgLUggYW5kIC1MIG9wdGlvbnMgYXJlIHByZXNlbnQgZm9yIHRoZSBUQ1AsIFVEUCBhbmQKKyAgIFNDVFAgdGVzdHMsIHdoaWNoIGFyZSBub3cgKGludGVuZGVkIHRvIGJlKSBJUCBwcm90b2NvbCB2ZXJzaW9uCisgICBhZ25vc3RpYy4KKworKikgR2xvYmFsIC00IGFuZCAtNiBvcHRpb25zIHdpbGwgc2V0IHRoZSBib3RoIHRoZSBsb2NhbCBhbmQgcmVtb3RlCisgICBhZGRyZXNzIGZhbWlseSB0byBlaXRoZXIgQUZfSU5FVCBvciBBRl9JTkVUNiByZXNwZWN0aXZlbHkuCisKKyopIFRlc3Qtc3BlY2lmaWMgLTQgYW5kIC02IG9wdGlvbnMgaGF2ZSBiZWVuIGFkZGVkIGZvciBUQ1AsIFVEUCBhbmQKKyAgIFNDVFAgdGVzdHMuCisKKyopIFNpbmNlIHRoZSBiYXNpYyBUQ1AgVURQIGFuZCBTQ1RQIHRlc3RzIGFyZSBubyBsb25nZXIgSVB2NC1vbmx5LCB0aGUKKyAgIG5ldHRlc3RfaXB2Ni5bY2hdIGZpbGVzIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBzb3VyY2UKKyAgIGRpc3RyaWJ1dGlvbiBmb3IgaGlzdG9yaWNhbCBpbnRlcmVzdC4KKworKikgVGhlIG1haW4gdGVzdCBiYW5uZXJzIGZvciB0aGUgVENQLCBVRFAgYW5kIFNDVFAgdGVzdHMgaGF2ZSBiZWVuCisgICBlbmhhbmNlZCB0byBnaXZlIGJvdGggbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzaW5nIGluZm9ybWF0aW9uIGZvcgorICAgdGhlIGRhdGEgY29ubmVjdGlvbi4KKworKikgQ29tcGlsYXRpb24gdW5kZXIgV2luZG93cyBpcyBsaWtlbHkgRlVCQVIgYXQgdGhpcyBwb2ludC4gIEkgX2hvcGVfCisgICB0byBzdGFydCB0cnlpbmcgdG8gZG8gYnVpbGRzIHVuZGVyIHRoZSBEREsgc29vbiwgYnV0IGFtIG5vdCBzdXJlCisgICB3aGVuIEknbGwgYmUgYWJsZSB0byBzdGFydC4gIEFueSBhbmQgYWxsIGFzc2lzdGFuY2UgeW91IGNhbiBnaXZlCisgICB0aGVyZSB3b3VsZCBiZSBtb3N0IHdlbGNvbWUuCisKKyopIFZhcmlvdXMgYW5kIHN1bmRyeSBmaXhlcy4gIFRDUF9SUiBzaG91bGQgbm8gbG9uZ2VyIGdvIGludG8gYW4KKyAgIGluZmluaXRlIGxvb3Agd2hlbiB5b3UgYWJvcnQgbmV0cGVyZi4gIEknbSBzdXJlIHRoZXJlIGFyZSBvdGhlcnMuCisKKyopIFVuaXggZG9tYWluIHNvY2tldCB0ZXN0cyBhcmUgY29tcGlsZWQtaW4gd2l0aCAtLWVuYWJsZS11bml4PXllcyBhdAorICAgY29uZmlndXJlIHRpbWUuCisKKyopIERMUEkgdGVzdHMgYXJlIGNvbXBpbGVkLWluIHdpdGggLS1lbmFibGUtZGxwaT15ZXMgYXQgY29uZmlndXJlCisgICB0aW1lLgorCisqKSBYVEkgdGVzdHMgYXJlIGNvbXBpbGVkLWluIHdpdGggLS1lbmFibGUteHRpPXllcyBhdCBjb25maWd1cmUgdGltZS4gCisKK1RoaW5ncyBub3QgY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2U6CisKKyopIFNlZW1zIGxpa2UgZXZlcnl0aGluZyBoYXMgY2hhbmdlZCA6KQorCitUaGVzZSBhcmUgdGhlIFJlbGVhc2UgTm90ZXMgZm9yIFJldmlzaW9uIDIuM3BsMiBvZiBuZXRwZXJmOgorCitUaGluZ3MgY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2UKKworKikgT25lIGNhbiBiaW5kIG5ldHBlcmYgb3IgbmV0c2VydmVyIHRvIHNwZWNpZmljIENQVXMgd2l0aCB0aGUgLVQKKyAgIG9wdGlvbi4gVGhpcyBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIHNvbWUgSFAtVVggYW5kIG5ldHNlcnZlciBzcGVjaWZpYworICAgd29yayBmcm9tIDIuM3BsMS4KKworKikgRXh0ZW5kIHRoZSBrbHVkZ2UgdG8gd29ya2Fyb3VuZCB0aGUgTGludXggc2V0c29ja29wdC9nZXRzb2Nrb3B0CisgICBiaXp6YXJyZW5lc3MgdG8gdGhlIHNvY2tldCBidWZmZXIgc2l6ZXMgZm9yIHRoZSByZW1vdGUgc2lkZSBpbgorICAgYWRkaXRpb24gdG8gdGhlIGxvY2FsIHNpZGUuCisKKyopIEZpeCB0aGUgbGFjayBvZiBpbml0aWFsaXphdGlvbiBvZiB0aW1lc191cCBpbiByZWN2X3RjcF9tYWVydHMoKQorICAgdGhhdCBjYXVzZWQgY29uZmlkZW5jZSBpbnRlcnZhbHMgdG8gZmFpbCBtaXNlcmFibHkuCisKKyopIE90aGVyIG1pc2MgZml4ZXMgLSB0aGFuIHlvdSB0byBhbGwgb2YgeW91IHdobyBzZW50IHRoZW0uCisKK1RoZXNlIGFyZSB0aGUgUmVsZWFzZSBOb3RlcyBmb3IgcmV2aXNpb24gMi4zcGwxIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZQorCisqKSBUaGUgYmluZCgpIGNhbGwgaW4gY3JlYXRlX2RhdGFfc29ja2V0KCkgaW4gdGhlIGZpbGUgbmV0dGVzdF9ic2QuYworICAgaXMgbm8gbG9uZ2VyIGNvbmRpdGlvbmFsIG9uIHRoZSB1c2VyJ3Mgc3BlY2lmeWluZyBhbiBJUCBhZGRyZXNzIG9yCisgICBwb3J0IG51bWJlciB0byB3aGljaCB0aGUgZGF0YSBzb2NrZXQgc2hvdWxkIGJlIGJvdW5kLiAgVGhpcyBmaXhlcworICAgdGhlICJjb25uZWN0aW9uIHJlZnVzZWQiIGVycm9ycyBpbiB0aGUgVURQIHRlc3RzLgorCisqKSBTb21lIGV4cGVyaW1lbnRhbCBjb2RlIHRvIGFsbG93IG9uZSB0byBzcGVjaWZ5IGEgQ1BVIHRvIHdoaWNoIHRoZQorICAgcmVtb3RlIG5ldHNlcnZlciBzaG91bGQgYmUgYm91bmQuICBUaGlzIGlzIGludGVuZGVkIHRvIGFsbG93IG9uZSB0bworICAgZ2V0IGdyZWF0ZXIgY2VydGFpbnR5IChhcyBpbiBjb25maWRlbmNlIGludGVydmFscykgb24gU01QCisgICBzeXN0ZW1zLiBBdCBwcmVzZW50IHRoZSBmdW5jdGlvbmFsaXR5IGlzIEhQLVVYIHNwZWNpZmljLgorICAgU3VibWl0dGFscyBvZiBjaGFuZ2VzIGZvciBhIG1vcmUgZ2VuZXJhbCBhcHByb2FjaCBhcmUgd2VsY29tZWQuCisKK1RoZXNlIGFyZSB0aGUgUmVsZWFzZSBOb3RlcyBmb3IgcmV2aXNpb24gMi4zIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZQorCisqKSBUaGUgdXNlciBjYW4gbm93IHNwZWNpZnkgbG9jYWwgYW5kL29yIHJlbW90ZSBwb3J0IG51bWJlcnMgZm9yIHRoZQorICAgZGF0YSBjb25uZWN0aW9uIHVzaW5nIHRoZSAtUCB0ZXN0LXNwZWNpZmljIG9wdGlvbi4gIFRoaXMgaXMgdG8KKyAgIHN1cHBvcnQgdGhvc2UgZm9sa3Mgd2hvIHdhbnQgdG8gcnVuIG5ldHBlcmYgdGhyb3VnaCB0aG9zZSBldmlsLAorICAgZW5kLXRvLWVuZC1icmVha2luZyB0aGluZ3Mga25vd24gYXMgZmlyZXdhbGxzLi4uIDopICBUaGlzIGNoYW5nZXMKKyAgIHRoZSBmb3JtYXQgb2Ygc29tZSBvZiB0aGUgY29udHJvbCBtZXNzYWdlcywgaGVuY2UgdGhlIGJ1bXAgaW4gdGhlCisgICB1cGRhdGUgbnVtYmVyIGluIHRoZSBWVUYuIFdoaWxlIGl0IG1heSBiZSBwb3NzaWJsZSB0byBtaXggMi4zIGFuZAorICAgcHJlLTIuMyBuZXRwZXJmIGFuZCBuZXRzZXJ2ZXIsIGl0IGlzIG5vdCBzdXBwb3J0ZWQuCisKKyopIFRoZSB1c2VyIGNhbiBub3cgc3BlY2lmeSBsb2NhbCBhbmQvb3IgcmVtb3RlIElQIGFkZHJlc3NlcyBmb3IgdGhlCisgICBkYXRhIGNvbm5lY3Rpb24gdXNpbmcgdGhlIC1JIHRlc3Qtc3BlY2lmaWMgb3B0aW9uLiAgVGhpcyBpcyB0bworICAgc3VwcG9ydCB0aG9zZSBmb2xrcyB3aG8gd2FudCB0byBydW4gbmV0cGVyZiB0aHJvdWdoIHRob3NlIGV2aWwsCisgICBlbmQtdG8tZW5kLWJyZWFraW5nIHRoaW5ncyBrbm93biBhcyBmaXJld2FsbHMuLi4gOikgVGhpcyBjaGFuZ2VzCisgICB0aGUgZm9ybWF0IG9mIHNvbWUgb2YgdGhlIGNvbnRyb2wgbWVzc2FnZXMsIGhlbmNlIHRoZSBidW1wIGluIHRoZQorICAgdXBkYXRlIG51bWJlciBpbiB0aGUgVlVGLiBXaGlsZSBpdCBtYXkgYmUgcG9zc2libGUgdG8gbWl4IDIuMyBhbmQKKyAgIHByZS0yLjMgbmV0cGVyZiBhbmQgbmV0c2VydmVyLCBpdCBpcyBub3Qgc3VwcG9ydGVkLgorCisqKSBTZXQgRExfbXVtYmxlICBtZXNzYWdlIHByaW9yaXRpZXMgaW4gdGhlIERMUEkgdGVzdHMKKworKikgRml4IGVycm9yIHJldHVybiBjaGVjayBmb3IgZ2V0YWRkcmluZm8oKQorCisqKSBUaG9zZSBzeXN0ZW1zIHdpdGggZ2V0aHJ0aW1lKCkgY2FuIGRlZmluZSAtREhBVkVfR0VUSFJUSU1FIHRvIHVzZQorICAgZ2V0aHJ0aW1lKCkgaW5zdGVhZCBvZiBnZXR0aW1lb2ZkYXkoKSBhbmQgcmVkdWNlIHRoZSBtZWFzdXJlbWVudAorICAgb3ZlcmhlYWQgd2hlbiBlbmFibGluZyB0aGUgLURISVNUT0dSQU0gZnVuY3Rpb25hbGl0eS4KKworKikgVGhlIGRlZmF1bHQgZm9yIC1ESElTVE9HUkFNIGNvbXBpbGF0aW9uIG5vdyBhZGRzIGEgVU5JVF9VU0VDIGFuZAorICAgVEVOX1VTRUMgcm93IGFuZCByZW5hbWVzIFRFTlRIX01TRUMgdG8gSFVORFJFRF9VU0VDLiAgSWYgeW91IHdhbnQKKyAgIHRoZSBvbGQgYmVoYXZpb3VyIGFkZCAtRE9MRF9ISVNUT0dSQU0gdG8gQ0ZMQUdTLgorCisqKSBBZGQgbWlzc2luZyAnIScgaW4gdGhlIHJlY3ZfdWRwKl9zdHJlYW0gc28gd2UgcmVjb2duaXplIHRoZSBlbmQgb2YgCisgICBhIHRpbWVkIHRlc3QgY29ycmVjdGx5LgorCisqKSBSZXBsYWNlICJ8fCIgd2l0aCAiJiYiIHRvIGZpeCBhbiBpbmZpbml0ZSBsb29wIGluCisgICByZWN2X3RjcF9jb25uX3JyKCkgbW9zdCBsaWtlbHkgaW50cm9kdWNlZCBpbiAyLjJwbDUuIAorCisqKSBDb2RlIGhhcyBiZWVuIGFkZGVkIHRvIGtsdWRnZSBhcm91bmQgdGhlIGJ1ZyBpbiBMaW51eCBnZXRzb2Nrb3B0KCkKKyAgIHdoZXJlIGl0IGFsbW9zdCBhbHdheXMgcmV0dXJucyB0d2ljZSB0aGUgdmFsdWUgZm9yIHdoaWNoIG9uZQorICAgYXNrcyB1bmxpa2UgdmlydHVhbGx5IGV2ZXJ5IG90aGVyIHN0YWNrIG9uIHRoZSBmYWNlIG9mIHRoZQorICAgcGxhbmV0LiBUaGlzIHdhcyBkb2luZyBzb21lIHVucGxlYXNhbnQgdGhpbmdzIHRvIHRlc3RzIGluIHdoaWNoCisgICBjb25maWRlbmNlIGludGVydmFscyB3ZXJlIHJlcXVlc3RlZC4gCisKK1RoaW5ncyBub3QgY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2UKKworKikgTG90cyA6KQorCitUaGVzZSBhcmUgdGhlIFJlbGVhc2UgTm90ZXMgZm9yIHJldmlzaW9uIDIuMnBsNSBvZiBuZXRwZXJmOgorCitUaGluZ3MgY2hhbmdlZCBpbiB0aGlzIHJlbGVhc2UKKworKikgSW1wcm92ZWQgKHBlcmhhcHMgZXZlbiB1c2FibGUgOikgc3VwcG9ydCBmb3IgV2luZG93cywgaW5jbHVkaW5nCitjb21waWxhdGlvbiBhbmQgcnVuIG9uIFdpbjY0LgorCisqKSBGaXhlcyBmb3IgTWFjT1MgWCBhbmQgRnJlZUJTRAorCitUaGluZ3Mgbm90IGNoYW5nZWQgaW4gdGhpcyByZWxlYXNlCisKKyopIFNwZWNpZnlpbmcgdGhlIHBvcnQgbnVtYmVyKHMpIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uCisKK1RoZXNlIGFyZSB0aGUgUmVsZWFzZSBOb3RlcyBmb3IgUmV2aXNpb24gMi4ycGw0IG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZQorCisqKSBVU0VfU1lTQ1RMIGF2YWlsYWJsZSBvbiBzdWl0YWJsZSBGcmVlQlNEIHJlbGVhc2VzIHRvIG1lYXN1cmUgQ1BVCisgICB1dGlsaXphdGlvbiB3aXRob3V0IGhhdmluZyB0byByZXNvcnQgdG8gLURVU0VfTE9PUEVSLgorCisqKSBJbmNsdWRlIFNvbGFyaXMgOSB3aXRoIHRoZSBMaW51eCBzZW5kZmlsZSBwYXRoIHVuZGVyIC1ESEFWRV9TRU5ERklMRQorCitUaGlzIHN0aWxsIG91dHN0YW5kaW5nIGluIHRoaXMgcmVsZWFzZQorCisqKSBLbm93aW5nIHdoeSBzaWduYWxzIGFyZSBub3QgaW50ZXJydXB0aW5nIHNvY2tldCBjYWxscyB1bmRlcgorICAgT3BlblZNUy4gIEEgcXVpY2sgdHJ5IHRvIHVzZSB0aHJlYWRzIGZvciB0aW1pbmcgYSBsYSBXaW4zMiB3b3JrZWQsCisgICBidXQgYWxzbyBjdXQgcGVyZm9ybWFuY2UgaW4gaGFsZi4gIEFueSBhbmQgYWxsIGFzc2lzdGFuY2UgaW4gdGhpcworICAgYXJlYSB3b3VsZCBiZSBtb3N0IHdlbGNvbWUuCisKK1RoZXNlIGFyZSB0aGUgUmVsZWFzZSBOb3RlcyBmb3IgcmV2aXNvaW4gMi4ycGwzIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZQorCisqKSBJIHN0YXJ0ZWQgcHJhY3RpY2luZyB3aGF0IEkgcHJlYWNoIGFuZCB3aWxsIHNldCBTT19SRVVTRUFERFIgYmVmb3JlCisgICBuZXRzZXJ2ZXIgdHJpZXMgdG8gYmluZCB0byBpdHMgd2VsbC1rbm93biBwb3J0LgorCisqKSBJbml0aWFsIHBvcnQgdG8gT3BlblZNUy4gIFRoaXMgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlIE9WTVMKKyAgIEF1eGlsbGlhcnkgc2VydmVyIChpbmV0ZCByZXBsYWNlbWVudCkuICBTZWUgUkVBRE1FLm92bXMgZm9yIG1vcmUKKyAgIGRldGFpbHMgb24gd2hhdCBpcyBpbnZvbHZlZCBpbiBjb21waWxpbmcgYW5kIHJ1bm5pbmcgbmV0cGVyZiB1bmRlcgorICAgT3BlblZNUy4KKworKikgVGVzdG5hbWUgY29tcGFyaXNvbnMgYXJlIG5vdyBjYXNlIGluc2Vuc2l0aXZlLiAgVGhpcyBpcyBhIHNpZGUKKyAgIGVmZmVjdCBvZiBPcGVuVk1TIGRvd25zaGlmdGluZyBjb21tYW5kbGluZXMgdG8gbG93ZXJjYXNlLiAgSSBtYWRlCisgICB0aGUgY2hhbmdlIGFuZCBkZWNpZGVkIGl0IHdhcyBPSyB0byBrZWVwIGl0IHRoYXQgd2F5LCBldmVuIHRob3VnaAorICAgZm9yIE9wZW5WTVMgb25lIF9oYXNfIHRvIHNldCB0aGUgcmlnaHQgZGVmaW5lcyB0byBkaXNhYmxlIHRoYXQKKyAgIGRvd25zaGlmdGluZyBvciB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgd2lsbCBub3Qgd29yay4gRm9yIGV4YW1wbGUKKyAgICItSCIgd2lsbCBiZWNvbWUgIi1oIiB3aGljaCBpc24ndCBxdWl0ZSB0aGUgc2FtZSB0aGluZy4uLgorCisqKSBNaXNjIGZpeGVzIGZvciBuZXR0ZXN0X2lwdjYuYy4KKworKikgU3VwcG9ydCBmb3Igc2VuZGZpbGUoKSB1bmRlciBMaW51eAorCitUaGlucyBJIHdvdWxkIGxpa2UgdG8gaGF2ZSBjaGFuZ2VkIGJ1dCBkaWQgbm90IGtub3cgaG93IG9yIGRpZG4ndCBoYXZlCit0aW1lOgorCisqKSBBbGxvdyBuZXRzZXJ2ZXIgdG8gcnVuIGFzIGEgc3RhbmRhbG9uZSBkYWVtb24gdW5kZXIgT3BlblZNUworKikgQWxsb3cgbmV0c2VydmVyIHRvIHJ1biBhcyBhIHN0YW5kYWxvbmUgZGFlbW9uIHVuZGVyIFdpbmRvd3MKKyopIFJlZGlzY292ZXIgYW4gaW5ldGQtbGlrZSBmYWNpbGl0eSBmb3IgV2luZG93cworKikgRmlndXJlLW91dCBob3cgdG8gZ2V0IGxvdy1vdmVyaGVhZCwgYWNjdXJhdGUsIHBlci1DUFUgdXRpbGl6YXRpb24KKyAgIGZpZ3VyZXMgdW5kZXIgT3BlblZNUworKikgR2V0IHRoZSBVRFBfUlIgYW5kIFVEUF9TVFJFQU0gdGVzdHMgdG8gd29yayB1bmRlciBPcGVuVk1TLCBhbmQgZ2V0CisgICB0aGUgVENQX1JSIHRlc3QgdG8gd29yayBiYXNlZCBvbiB0aW1lIHJhdGhlciB0aGFuIHRyYW5zYWN0aW9uCisgICBjb3VudC4gIFRoZXJlIGlzIHNvbWUgYnVnIChwb3NzaWJseSBpbiBPcGVuVk1TPykgd2hlcmUgdGhlIFNJR0FMUk0KKyAgIGZpcmVzLCBidXQgYSBzb2NrZXQgY2FsbCB3aWxsIG5vdCByZXR1cm4gYW4gRUlOVFIuCisKK1RoaW5ncyB0aGF0IGNoYW5nZWQgcHJpb3IgdG8gdGhpcyByZWxlYXNlOgorCisqKSBBZGRpdGlvbiBvZiB0aGUgVENQX01BRVJUUyB0ZXN0IC0gdGhpcyBpcyBhIFRDUF9TVFJFQU0gdGVzdCB3aGVyZQorICAgdGhlIGRhdGEgZmxvd3MgZnJvbSB0aGUgbmV0c2VydmVyIHRvIHRoZSBuZXRwZXJmIHJhdGhlciB0aGFuIGZyb20KKyAgIHRoZSBuZXRwZXJmIHRvIHRoZSBuZXRzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaW4gdGhvc2UKKyAgIHNpdHVhdGlvbnMgd2hlcmUgbmV0cGVyZiAobmV0c2VydmVyKSBpcyBpbnN0YWxsZWQgb24gYSByZW1vdGUKKyAgIHN5c3RlbSwgYnV0IHRoZSB0ZXN0ZXIgaGFzIG5vIHNoZWxsIGFjY2VzcyBhbmQgd2lzaGVzIHRvIGdldAorICAgcGVyZm9ybWFuY2UgZGF0YSBmb3IgdGhlIHBhdGggZnJvbSBuZXRzZXJ2ZXIgdG8gbmV0cGVyZi4KKworVGhlc2UgYXJlIHRoZSBSZWxlYXNlIE5vdGVzIGZvciB0aGUgMi4yIHJldmlzaW9uIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBjaGFuZ2VkIGluIHRoaXMgcmVsZWFzZQorCisqKSBWYXJpb3VzIGFuZCBzdW5kcnkgYnVncyBmaXhlZCAoaW4gdGhlb3J5KSBmb3IgcGxhdGZvcm1zIHN1Y2ggYXMKKyAgIEZyZWVCU0QgYW5kIExpbnV4LiBJZiBJIGxlZnQtb3V0IHlvdXIgYnVnIGZpeCwgaXQgd2FzIHB1cmVseQorICAgYWNjaWRlbnRhbCAtIG15IG1pbmQgaGFzIGEgdmVyeSBzbWFsbCBjYWNoZSwgYW5kIHNvbWV0aW1lcyBJIHdpbGwKKyAgICJsb3NlIiBlbWFpbCBpbiB0aGUgc2h1ZmZsZS4KKworKikgSW5pdGlhbCBzdXBwb3J0IGZvciBzZW5kZmlsZSgpIG9uIEhQLVVYLiBUaGlzIHRlc3Qgd2lsbCB1c2UgdGhlCisgICBzZW5kZmlsZSgpIGNhbGwgaW5zdGVhZCBvZiBzZW5kKCkgdG8gc2VuZCBkYXRhIHRvIHRoZQorICAgcmVtb3RlLiBOZXRwZXJmICJsaWVzIiB0byBuZXRzZXJ2ZXIgYW5kIGNhbGxzIGl0IGEgVENQX1NUUkVBTSB0ZXN0CisgICBzaW5jZSB3aGF0IG5ldHNlcnZlciBuZWVkcyB0byBkbyBpcyBleGFjdGx5IHRoZSBzYW1lLiBBIGZ1dHVyZQorICAgcGF0Y2ggbWF5IGNoYW5nZSB0aGF0IGFuZCBzaW1wbHkgaGF2ZSBuZXRzZXJ2ZXIgY2FsbCB0aGUgc2FtZQorICAgcm91dGluZSBmb3IgYm90aCB0ZXN0IHR5cGVzLiBLdWRvcyB0byBDaGFybGVzIEhhcnJpcyBmb3IgdGhlCisgICBpbml0aWFsIHByb3RvdHlwZS4KKworKikgVGhlIEZvcmUgQVRNIEFQSSBhbmQgSGlQUEkgdGVzdHMgaGF2ZSBiZWVuIGRyb3BwZWQgZnJvbSB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4gCisKK1RoaW5ncyBJIHdvdWxkIGhhdmUgbGlrZWQgdG8gaGF2ZSBjaGFuZ2VkLCBidXQgZGlkIG5vdCBoYXZlIHRpbWUgZm9yOgorCisqKSBDb252ZXJzaW9uIG9mIHRoZSBzb3VyY2UgYW5kIG1ha2VmaWxlIHRvIHVzZSB0aGUgR05VIGNvbmZpZ3VyZS9hdXRvY29uZiAKKyAgIHV0aWxpdHkgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIGZvbGtzIHRvIGJ1aWxkIGJ5IG5vdCBoYXZpbmcgdG8gZWRpdAorICAgbWFrZWZpbGVzLi4uIFlvdSB3aWxsIG5vdGljZSB0aGF0IEkgaGF2ZSBzdGFydGVkIHRvIHN3aXRjaCBmcm9tCisgICAiRE9fTVVNQkxFIiB0byAiSEFWRV9NVU1CTEUiCisKK2FzIGFsd2F5cyAtIGhhcHB5IGJlbmNobWFya2luZywKKworcmljayBqb25lcyA8cmFqQGN1cC5ocC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBhcmUgdGhlIFJlbGVhc2UgTm90ZXMgZm9yIHRoZSAyLjFwbDMgcmV2aXNpb24gb2YgbmV0cGVyZjoKKworKikgQW4gT0JPQiAoT2ZmIEJ5IE9uZSBCdWcpIGluIG5ldGxpYi5jIHRoYXQgd2FzIGNhdXNpbmcgYSBjb3JlIGR1bXAKKyAgIG9uIElyaXggc2hvdWxkIGJlIGZpeGVkLgorCisqKSBJcml4IHN5c3RlbXMgc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIENQVSdzCisgICBwcmVzZW50IGF1dG9tYWdpY2FsbHkgKGNvZGUgZnJvbSBvdXRzaWRlLCBub3QgdGVzdGVkIHlldCBiZWNhdXNlIEkKKyAgIGhhdmUgbm8gTVAgSXJpeCBzeXN0ZW1zIGF0IG15IGRpc3Bvc2FsKQorCisqKSBBbiBhbHBoYSB2ZXJzaW9uIG9mIGEgVENQX0NDIHRlc3QgaGFzIGJlZW4gYWRkZWQgLSB0aGlzIGlzIGEKKyAgIFRDUF9DUlIgdGVzdCB3aXRoIG91dCB0aGUgIlJSLiIKKworKikgVGhlIC1BZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRlZmF1bHQgbWFrZWZpbGUuIElmIHNvbWVvbmUgaGFzCisgICBhIG5pY2Ugd2F5IHRvIGF1dG9tYWdpY2FsbHkgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgbWFrZWZpbGUgZm9yCisgICBkaWZmZXJlbnQgcGxhdGZvcm1zIEkgd291bGQgbGlrZSB0byBsZWFybiBob3cuCisKK2hhcHB5IGJlbmNobWFya2luZywKKworcmljayBqb25lcyA8cmFqQGN1cC5ocC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIHRoZSBSZWxlYXNlIE5vdGVzIGZvciB0aGUgMi4xIHJldmlzaW9uIG9mIG5ldHBlcmY6CisKK1RoaW5ncyBDaGFuZ2VkIGluIHRoaXMgcmVsZWFzZToKKworKikgVGhlIFhUSSAoVmVyc2lvbiAyIG9mIHRoZSBzcGVjKSB0ZXN0cyBhcmUgbm93IGRvY3VtZW50ZWQgaW4gdGhlCisgICBtYW51YWwuIAorCisqKSBUaGUgVENQX0NSUiAoQ29ubmVjdCBSZXF1ZXN0L1Jlc3BvbnNlKSB0ZXN0IGlzIG5vdyBkb2N1bWVudGVkIGluCisgICB0aGUgbWFudWFsLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgaXQgbWltaWNzIHRoZSBiZWhhdmlvdXIKKyAgIG9mIGh0dHAgKHRoZSBwcm90b2NvbCB1bmRlcmx5aW5nIHRoZSBXV1cpLgorCisqKSBTdXBwb3J0IGZvciBmb3IgV2luZG93cyBOVCAzLjUxIE9TIGluIHRoZSBCU0QgU29ja2V0cyB0ZXN0cyAob2ssIHNvCisgICB0aGV5IGFyZSByZWFsbHkgV2luc29jayBpbiB0aGF0IGNhc2UgOikuIE90aGVyIHRlc3Qgc3VpdGVzIG1heSBiZQorICAgcG9ydGVkIGFzIHJlcXVpcmVkL2Rlc2lyZWQvYXBwcm9wcmlhdGUuIAorCisqKSBUZXN0cyBmb3IgVENQIGFuZCBVRFAsIHVzaW5nIHRoZSBJUHY2IGV4dGVuc2lvbnMgdG8gQlNEIHNvY2tldHMgYXJlCisgICBpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuIFRoZXkgYXJlIGluY2x1ZGVkIGJ5IGFkZGluZyAtRFVTRV9JUHY2IHRvCisgICB0aGUgbWFrZWZpbGUgYW5kIHJlY29tcGlsaW5nLgorCisqKSBTdXBwb3J0IGZvciBhICJsb25nIGxvbmciIGRhdGF0eXBlIHNob3VsZCBvbmx5IGJlIHJlcXVpcmVkIGZvcgorICAgLURVU0VfUFNUQVQgY29tcGlsYXRpb24gd2hpY2ggaXMgYW4gSFAtVVggb25seSB0aGluZy4gVGhlCisgICAqdW5idW5kbGVkKiBIUCBjb21waWxlcnMgZnJvbSBhdCBsZWFzdCAiSFA5MjQ1My0wMSBBLjA5LjYxIEhQIEMKKyAgIENvbXBpbGVyIiBhbmQgbGF0ZXIgc2hvdWxkIGhhdmUgdGhlIHJlcXVpcmVkIHN1cHBvcnQuIFRoZSBidW5kbGVkCisgICBjb21waWxlciBtYXkgbm90LiBHQ0Mgc2hvdWxkIHdvcmsgLSBjaGVjayB0aGUgYXJjaGl2ZXMgbGlzdGVkIGluCisgICB0aGUgY29tcC5zeXMuaHAuaHB1eCBGQVEgZm9yIGNvcGllcy4gVGhlIEZBUSBpcyBhcmNoaXZlZCBvbgorICAgcnRmbS5taXQuZWR1IHVuZGVyIHRoZSBwYXRoIHB1Yi91c2VuZXQvY29tcC5zeXMuaHAuaHB1eC4KKworKikgQSAicHJvcGVyIiBmaXggZm9yIGRvdWJsZSBkYXRhIHR5cGUgYWxpZ25tZW50IGhhcyBiZWVuIGluY2x1ZGVkLgorCisqKSBBIG5ldyBzY3JpcHQgaXMgaW5jbHVkZWQgd2l0aCB0aGlzIHJlbGVhc2Ugd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgIG1lYXN1cmUgYWdncmVnYXRlIFRDUF9SUiBwZXJmb3JtYW5jZSAobXVsdGlwbGUsIGNvbmN1cnJlbnQKKyAgIGluc3RhbmNlcyBvZiB0aGUgVENQX1JSIHRlc3QpLiBBIHJlbGF0ZWQgdXNlIG9mIHRoaXMgc2NyaXB0IHdvdWxkCisgICBiZSBtZWFzdXJpbmcgTVAgc2NhbGluZy4gQSBzaW5nbGUtYnl0ZSBUQ1BfUlIgdGVzdCBpcyBnb29kIGZvciB0aGlzCisgICBwdXJwb3NlIGZvciB0d28gcmVhc29uczoKKworICAgICAgMSkgaXQgZXhjZXJjaXNlcyB0aGUgY29udHJvbC9wcm90b2NvbCBwYXRocyBoZWF2aWx5IHdpdGhvdXQKKyAgICAgICAgIHVzaW5nIG11Y2ggaW4gdGhlIHdheSBvZiBkYXRhIGNvcGllcyB3aGljaCBtYXkgYmUgZWFzaWVyIHRvCisgICAgICAgICBzY2FsZS4KKyAgICAgIDIpIG1vc3Qgc3lzdGVtcyBjYW4gZWFzaWx5IHNhdHVyYXRlIGNhcmRzIHdpdGggYmFuZHdpZHRoLCBidXQKKyAgICAgICAgIG5vdCBzbyBlYXNpbHkgd2l0aCByZXF1ZXN0L3Jlc3BvbnNlCisKKyAgIE9mIGNvdXJzZSwgZmVlZGJhY2sgb24gdGhpcyBpcyBtb3N0IHdlbGNvbWUuCisKKyopIFdoZW4gbWVhc3VyaW5nIENQVSB1dGlsaXphdGlvbiwgdGhlIHVuaXRzIGZvciBzZXJ2aWNlIGRlbWFuZCBoYXZlCisgICBiZWVuIGNoYW5nZWQgZnJvbSBtaWxsaXNlY29uZHMgKGRlc2lnbmF0ZWQgbXMpIG9mIENQVSBwZXIgdW5pdCAoS0IKKyAgIG9yIFRyYW5zYWN0aW9uKSB0byBtaWNyb3NlY29uZHMgKGRlc2dpbmF0ZWQgdXMpLgorCisqKSBGb3IgYWNjdXJhdGUgcmVwb3J0aW5nIG9mIHNlcnZpY2UgZGVtYW5kLCBuZXRwZXJmIG5lZWRzIHRvIGtub3cgdGhlCisgICBudW1iZXIgb2YgQ1BVJ3MgcHJlc2VudCBvbiBhIHN5c3RlbS4gT24gc29tZSBzeXN0ZW1zIChIUC1VWCksIHRoaXMKKyAgIGlzIGF1dG9tYXRpYy4gRm9yIG90aGVycyAoQWxsKSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGFkZCBhIGdsb2JhbCAiLW4KKyAgIDxudW1jcHU+IiBvcHRpb24gdG8gYm90aCBuZXRwZXJmIGFuZCBuZXRzZXJ2ZXIuCisKKyAgICEhIElGIFRISVMgSVMgTEVGVC1PVVQgQ1BVIFVUSUxJWkFUSU9OIEFORCBTRVJWSUNFIERFTUFORCBGT1IgISEKKwkgICAgICEhIE1VTFRJLVBST0NFU1NPUiBTWVNURU1TIFdJTEwgQkUgV1JPTkcuICEhCisKKyAgIElmIHlvdSBrbm93IG9mIHdheXMgdG8gcHJvZ3JhbWF0aWNhbGx5IGRldGVybWluZSB0aGUgbnVtYmVyIG9mCisgICBhY3RpdmUgQ1BVcyBvbiBhIHN5c3RlbSwgcGxlYXNlIGxldCB0aGUgYXV0aG9yIFJpY2sgSm9uZXMKKyAgIDxyYWpAY3VwLmhwLmNvbT4ga25vdy4KKworKikgb3RoZXIgdGhpbmdzIEkndmUgcHJvYmFibHkgZm9yZ290dGVuIDopCisKK1RoaW5ncyBOb3QgQ2hhbmdlZCBpbiB0aGlzIHJlbGVhc2U6CisKKyopIFRoZSBhbmNpbGxhcnkgdGVzdCBzdWl0ZXMgYXJlIGVzc2VudGlhbGx5IHVuY2hhbmdlZCAtIERMUEksCisgICBIaVBQSS9MTEEsIFVuaXggRG9tYWluLCBhbmQgRm9yZSBBVE0gQVBJLiBVbmxlc3MgdGhlcmUgaXMgbXVjaAorICAgaW50ZXJlc3QgZXhwcmVzc2VkIGluIHRoZXNlIHRlc3RzLCAyLjEgbWF5IGJlIHRoZSBsYXN0IHJlbGVhc2UgaW4KKyAgIHdoaWNoIHRoZXkgYXJlIGluY2x1ZGVkLiBUaGUgb3JkZXIgb2YgcmV0aXJlbWVudCB3b3VsZCBsaWtlbHkgYmUKKyAgIFVuaXggRG9tYWluLCBIaVBQSS9MTEEsIEZvcmUgQVRNIEFQSSwgYW5kIHRoZW4gRExQSS4KKworTWlzY2VsYW5lb3VzIENvbW1lbnRzOgorCisqKSBUaGUgLURVU0VfTE9PUEVSIENQVSB1dGlsaXphdGlvbiBfc2VlbXNfIHRvIGJlIG5pY2UgYW5kIGxvdy1pbXBhY3QKKyAgIG9uIEhQLVVYLCBEaWdpdGFsIFVuaXgsIGFuZCBJUklYLiBJdCBkb2VzIG5vdCB5ZXQgc2VlbSB0byBiZQorICAgbG93LWltcGFjdCBvbiBTb2xhcmlzIChJIG5lZWQgYW4gZXhhbXBsZSBvZiBwcmlvY250bCB1c2FnZSksIEFJWAorICAgKHNldHByaSBvbmx5IHdvcmtzIGlmIHlvdSBhcmUgcm9vdCksIGFuZCBOVCAobm90IHN1cmUgb2YgdGhlCisgICByZWFzb24pLiBIZWxwIHdpdGggdGhvc2UgcHJvYmxlbXMgd291bGQgYmUgbW9zdCBhcHByZWNpYXRlZC4KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvYWNpbmNsdWRlLm00IGIvbmV0cGVyZi0yLjQuNS9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5NTE3NwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsMzQxIEBACisKK2RubCBUaGlzIGNvbWVzIGZyb20gbGliY3VybCdzIGFjaW5jbHVkZS5tNC4gIGl0IGlzIG5vdCBjbGVhciBpZiB0aGlzCitkbmwgaXMgb3JpZ2luYWwgbGliY3VybCBjb2RlLCBvciBvdGhlciBjb2RlLCBzbyB3ZSBpbmNsdWRlIHRoZSBsaWJjdXJsCitkbmwgY29weXJpZ2h0IGhlcmUKK2RubAorZG5sIAorZG5sIENvcHlyaWdodCAoYykgMTk5NiAtIDIwMDUsIERhbmllbCBTdGVuYmVyZywgPGRhbmllbEBoYXh4LnNlPi4KK2RubCAKK2RubCBBbGwgcmlnaHRzIHJlc2VydmVkLgorZG5sIAorZG5sIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlCitkbmwgd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Citkbmwgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorZG5sIAorZG5sIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitkbmwgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitkbmwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOCitkbmwgTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCitkbmwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitkbmwgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UKK2RubCBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCitkbmwgCitkbmwgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdAorZG5sIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncworZG5sIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisKK2RubCBDaGVjayBmb3Igc29ja2xlbl90OiBoaXN0b3JpY2FsbHkgb24gQlNEIGl0IGlzIGFuIGludCwgYW5kIGluCitkbmwgUE9TSVggMWcgaXQgaXMgYSB0eXBlIG9mIGl0cyBvd24sIGJ1dCBzb21lIHBsYXRmb3JtcyB1c2UgZGlmZmVyZW50CitkbmwgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB0byBnZXRzb2Nrb3B0LCBnZXRwZWVybmFtZSwgZXRjLiAgU28gd2UKK2RubCBoYXZlIHRvIHRlc3QgdG8gZmluZCBzb21ldGhpbmcgdGhhdCB3aWxsIHdvcmsuCisKK2RubCBSZW1vdmUgdGhlIEFDX0NIRUNLX1RZUEUgLSBvbiBIUC1VWCBpdCB3b3VsZCBmaW5kIGEgc29ja2xlbl90LCBidXQgdGhlIAorZG5sIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGdldHNvY2tvcHQgZXQgYWwgd2lsbCBub3QgYWN0dWFsbHkgdXNlIAorZG5sIHNvY2tsZW5fdCBhcmdzIHVubGVzcyBfWE9QRU5fU09VUkNFX0VYVEVOREVEIGlzIGRlZmluZWQuIHNvLCB0aGUKK2RubCBBQ19DSEVDS19UWVBFIHdpbGwgZmluZCBhIHNvY2tsZW5fdCBhbmQgdGhpbmsgYWxsIGlzIGhhcHBpbmVzcyBhbmQKK2RubCBqb3kgd2hlbiB5b3Ugd2lsbCByZWFsbHkgZ2V0IHdhcm5pbmdzIGFib3V0IG1pc21hdGNoIHR5cGVzIC0gdHlwZQorZG5sIG1pc21hdGNoZXMgdGhhdCB3b3VsZCBiZSBwb3NzaWJseSBCYWQgKHRtKSBpbiBhIDY0LWJpdCBjb21waWxlLgorZG5sIHJhaiAyMDA1LTA1LTExIHRoaXMgY2hhbmdlIG1heSBiZSByZWRpc3RyaWJ1dGVkIGF0IHdpbGwgCisKK2RubCBhbHNvLCBhZGRlZCAiZXh0ZXJuIiB0byB0aGUgImludCBnZXRwZWVybmFtZSIgaW4gYW4gYXR0ZW1wdCB0byByZXNvbHZlCitkbmwgYW4gaXNzdWUgd2l0aCB0aGlzIGNvZGUgdW5kZXIgU29sYXJpcyAyLjkuICB0aGlzIHRvbyBtYXkgYmUgCitkbmwgcmVkaXN0cmlidXRlZCBhdCB3aWxsCisKKworQUNfREVGVU4oW09MRF9UWVBFX1NPQ0tMRU5fVF0sCitbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisgICAgICBBQ19DQUNIRV9WQUwoW2N1cmxfY3Zfc29ja2xlbl90X2VxdWl2XSwKKyAgICAgIFsKKyAgICAgICAgICMgU3lzdGVtcyBoYXZlIGVpdGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yCisgICAgICAgICAjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKyAgICAgICAgIGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2PQorICAgICAgICAgZm9yIGFyZzIgaW4gInN0cnVjdCBzb2NrYWRkciIgdm9pZDsgZG8KKyAgICAgICAgICAgIGZvciB0IGluIGludCBzaXplX3QgdW5zaWduZWQgbG9uZyAidW5zaWduZWQgbG9uZyIgc29ja2xlbl90OyBkbworICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworICAgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICAgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgICR0IGxlbjsKKyAgICAgICAgICAgICAgICAgIGdldHBlZXJuYW1lKDAsMCwmbGVuKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgY3VybF9jdl9zb2NrbGVuX3RfZXF1aXY9IiR0IgorICAgICAgICAgICAgICAgICAgYnJlYWsgMgorICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgIGRvbmUKKworICAgICAgICAgaWYgdGVzdCAieCRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisgICAgICAgICMgdGFrZSBhIHdpbGQgZ3Vlc3MKKyAgICAgICAgICAgIGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2PSJzb2NrbGVuX3QiCisgICAgICAgICAgICBBQ19NU0dfV0FSTihbQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QsIGd1ZXNzaW5nIHNvY2tsZW5fdF0pCisgICAgICAgICBmaQorICAgICAgXSkKKyAgICAgIEFDX01TR19SRVNVTFQoJGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2KQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKG5ldHBlcmZfc29ja2xlbl90LCAkY3VybF9jdl9zb2NrbGVuX3RfZXF1aXYsCisgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90IGlmIG5vdCBkZWZpbmVkXSkKK10pCisKKworZG5sICoKK2RubCAqIENvcHlyaWdodCAoYykgMjAwMSAgTW90b3l1a2kgS2FzYWhhcmEKK2RubCAqCitkbmwgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK2RubCAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworZG5sICogYXJlIG1ldDoKK2RubCAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitkbmwgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG5sICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK2RubCAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCitkbmwgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKK2RubCAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorZG5sICogCitkbmwgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorZG5sICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitkbmwgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK2RubCAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlNCRQorZG5sICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorZG5sICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK2RubCAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworZG5sICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK2RubCAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitkbmwgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCitkbmwgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitkbmwgKgorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBoX2Vycm5vLgorZG5sICoKK0FDX0RFRlVOKFtBQ19ERUNMX0hfRVJSTk9dLAorW0FDX0NBQ0hFX0NIRUNLKGZvciBoX2Vycm5vIGRlY2xhcmF0aW9uIGluIG5ldGRiLmgsIGFjX2N2X2RlY2xfaF9lcnJubywKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8bmV0ZGIuaD5dXSwgW1sKK2hfZXJybm8gPSAwOworXV0pXSxbYWNfY3ZfZGVjbF9oX2Vycm5vPXllc10sW2FjX2N2X2RlY2xfaF9lcnJubz1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl9kZWNsX2hfZXJybm8iID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhfRVJSTk9fREVDTEFSRUQsIDEsCitbRGVmaW5lIHRvIDEgaWYgYGhfZXJybm8nIGlzIGRlY2xhcmVkIGJ5IDxuZXRkYi5oPl0pCitmaV0pCisKK2RubCAqCitkbmwgKiBDb3B5cmlnaHQgKGMpIDIwMDEgIE1vdG95dWtpIEthc2FoYXJhCitkbmwgKgorZG5sICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitkbmwgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2RubCAqIGFyZSBtZXQ6CitkbmwgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorZG5sICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RubCAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitkbmwgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworZG5sICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCitkbmwgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK2RubCAqIAorZG5sICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK2RubCAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorZG5sICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitkbmwgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTQkUKK2RubCAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK2RubCAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitkbmwgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK2RubCAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitkbmwgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorZG5sICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorZG5sICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorZG5sICoKKworZG5sICogCitkbmwgKiBDaGVjayBmb3Igc3RydWN0IHNvY2thZGRyX2luNgorZG5sICoKK0FDX0RFRlVOKFtBQ19TVFJVQ1RfU09DS0FERFJfSU42XSwKK1tBQ19DQUNIRV9DSEVDSyhmb3Igc3RydWN0IHNvY2thZGRyX2luNiwgYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNiwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dXSwgW1sKK3N0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcmVzczsKK11dKV0sW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9pbjY9eWVzXSxbYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNj1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfaW42IiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjYsIDEsCitbRGVmaW5lIHRvIDEgaWYgPG5ldGluZXQvaW4uaD4gZGVmaW5lcyBgc3RydWN0IHNvY2thZGRyX2luNiddKQorZmldKQorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQorZG5sICogCitBQ19ERUZVTihbQUNfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VdLAorW0FDX0NBQ0hFX0NIRUNLKGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSwgYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0sIFtbCitzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyZXNzOworXV0pXSxbYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9eWVzXSxbYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9bm9dKV0pCitpZiB0ZXN0ICIkYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UsIDEsCitbRGVmaW5lIHRvIDEgaWYgPG5ldGluZXQvaW4uaD4gZGVmaW5lcyBgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UnXSkKK2ZpXSkKKworZG5sICoKK2RubCAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMyAgTW90b3l1a2kgS2FzYWhhcmEKK2RubCAqCitkbmwgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK2RubCAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworZG5sICogYXJlIG1ldDoKK2RubCAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitkbmwgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG5sICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK2RubCAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCitkbmwgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKK2RubCAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorZG5sICogCitkbmwgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorZG5sICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitkbmwgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK2RubCAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlNCRQorZG5sICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorZG5sICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK2RubCAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworZG5sICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK2RubCAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitkbmwgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCitkbmwgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitkbmwgKgorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBzb2NrbGVuX3QuCitkbmwgKiAKK0FDX0RFRlVOKFtBQ19UWVBFX1NPQ0tMRU5fVF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzb2NrbGVuX3RdLCBhY19jdl90eXBlX3NvY2tsZW5fdCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLCBbWworc29ja2xlbl90IHNvY2tsZW47CitdXSldLFthY19jdl90eXBlX3NvY2tsZW5fdD15ZXNdLFthY19jdl90eXBlX3NvY2tsZW5fdD1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl90eXBlX3NvY2tsZW5fdCIgIT0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKHNvY2tsZW5fdCwgaW50LAorW0RlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IG9yIDxzeXMvc29ja2V0Lmg+IGRvZXMgbm90IGRlZmluZS5dKQorZmldKQorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBpbl9wb3J0X3QuCitkbmwgKiAKK0FDX0RFRlVOKFtBQ19UWVBFX0lOX1BPUlRfVF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbl9wb3J0X3RdLCBhY19jdl90eXBlX2luX3BvcnRfdCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dXSwgW1sKK2luX3BvcnRfdCBpbl9wb3J0OworXV0pXSxbYWNfY3ZfdHlwZV9pbl9wb3J0X3Q9eWVzXSxbYWNfY3ZfdHlwZV9pbl9wb3J0X3Q9bm9dKV0pCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbl9wb3J0X3QiICE9IHllczsgdGhlbgorICAgIGFjX2N2X3Npbl9wb3J0X3NpemU9dW5rbm93bgorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNpbl9wb3J0KSA9PSBzaXplb2YobG9uZykpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3Npbl9wb3J0X3NpemU9bG9uZ10sW10sW10pCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2luX3BvcnQpID09IHNpemVvZihpbnQpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zaW5fcG9ydF9zaXplPWludF0sW10sW10pCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2luX3BvcnQpID09IHNpemVvZihzaG9ydCkpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3Npbl9wb3J0X3NpemU9c2hvcnRdLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNpbl9wb3J0KSA9PSBzaXplb2YoY2hhcikpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3Npbl9wb3J0X3NpemU9Y2hhcl0sW10sW10pCisgICAgaWYgdGVzdCAiJGFjX2N2X3Npbl9wb3J0X3NpemUiID0gdW5rbm93bjsgdGhlbgorCUFDX01TR19FUlJPUihbRmFpbGVkIHRvIGdldCBzaXplIG9mIHNpbl9wb3J0IGluIHN0cnVjdCBzb2NrYWRkcl9pbi5dKQorICAgIGZpCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKGluX3BvcnRfdCwgdW5zaWduZWQgJGFjX2N2X3Npbl9wb3J0X3NpemUsCitbRGVmaW5lIHRvIGB1bnNpZ25lZCBjaGFyJywgYHVuc2lnbmVkIHNob3J0JywgYHVuc2lnbmVkIGludCcgb3IKK2B1bnNpZ25lZCBsb25nJyBhY2NvcmRpbmcgd2l0aCBzaXplIG9mIGBzaW5fcG9ydCcgaW4gYHN0cnVjdCBzb2NrYWRkcl9pbicsCitpZiA8c3lzL3R5cGVzLmg+LCA8c3lzL3NvY2tldC5oPiBvciA8bmV0aW5ldC9pbi5oPiBkb2VzIG5vdCBkZWZpbmUKK2Bpbl9wb3J0X3QnLl0pCitmaV0pCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIHNhX2ZhbWlseV90LgorZG5sICogCitBQ19ERUZVTihbQUNfVFlQRV9TQV9GQU1JTFlfVF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzYV9mYW1pbHlfdF0sIGFjX2N2X3R5cGVfc2FfZmFtaWx5X3QsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1sKK3NhX2ZhbWlseV90IHNhX2ZhbWlseTsKK11dKV0sW2FjX2N2X3R5cGVfc2FfZmFtaWx5X3Q9eWVzXSxbYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdD1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl90eXBlX3NhX2ZhbWlseV90IiAhPSB5ZXM7IHRoZW4KKyAgICBhY19jdl9zYV9mYW1pbHlfc2l6ZT11bmtub3duCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNhX2ZhbWlseSkgPT0gc2l6ZW9mKGxvbmcpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zYV9mYW1pbHlfc2l6ZT1sb25nXSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2FfZmFtaWx5KSA9PSBzaXplb2YoaW50KSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2FfZmFtaWx5X3NpemU9aW50XSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2FfZmFtaWx5KSA9PSBzaXplb2Yoc2hvcnQpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zYV9mYW1pbHlfc2l6ZT1zaG9ydF0sW10sW10pCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNhX2ZhbWlseSkgPT0gc2l6ZW9mKGNoYXIpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zYV9mYW1pbHlfc2l6ZT1jaGFyXSxbXSxbXSkKKyAgICBpZiB0ZXN0ICIkYWNfY3Zfc2FfZmFtaWx5X3NpemUiID0gdW5rbm93bjsgdGhlbgorCUFDX01TR19FUlJPUihbRmFpbGVkIHRvIGdldCBzaXplIG9mIHNhX2ZhbWlseSBpbiBzdHJ1Y3Qgc29ja2FkZHIuXSkKKyAgICBmaQorICAgIEFDX0RFRklORV9VTlFVT1RFRChzYV9mYW1pbHlfdCwgdW5zaWduZWQgJGFjX2N2X3NhX2ZhbWlseV9zaXplLAorW0RlZmluZSB0byBgdW5zaWduZWQgY2hhcicsIGB1bnNpZ25lZCBzaG9ydCcsIGB1bnNpZ25lZCBpbnQnIG9yCitgdW5zaWduZWQgbG9uZycgYWNjb3JkaW5nIHdpdGggc2l6ZSBvZiBgc2FfZmFtaWx5JyBpbiBgc3RydWN0IHNvY2thZGRyJywKK2lmIDxzeXMvdHlwZXMuaD4gb3IgPHN5cy9zb2NrZXQuaD4gZG9lcyBub3QgZGVmaW5lIGBzYV9mYW1pbHlfdCcuXSkKK2ZpXSkKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvYWNsb2NhbC5tNCBiL25ldHBlcmYtMi40LjUvYWNsb2NhbC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODIyYjgzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMTIzNiBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuNy45IC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKworZG5sIFRoaXMgY29tZXMgZnJvbSBsaWJjdXJsJ3MgYWNpbmNsdWRlLm00LiAgaXQgaXMgbm90IGNsZWFyIGlmIHRoaXMKK2RubCBpcyBvcmlnaW5hbCBsaWJjdXJsIGNvZGUsIG9yIG90aGVyIGNvZGUsIHNvIHdlIGluY2x1ZGUgdGhlIGxpYmN1cmwKK2RubCBjb3B5cmlnaHQgaGVyZQorZG5sCitkbmwgCitkbmwgQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAwNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LgorZG5sIAorZG5sIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitkbmwgCitkbmwgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UKK2RubCB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCitkbmwgCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK2RubCBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK2RubCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gSU4KK2RubCBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK2RubCBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRQorZG5sIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KK2RubCAKK2RubCBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90CitkbmwgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCitkbmwgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworZG5sIENoZWNrIGZvciBzb2NrbGVuX3Q6IGhpc3RvcmljYWxseSBvbiBCU0QgaXQgaXMgYW4gaW50LCBhbmQgaW4KK2RubCBQT1NJWCAxZyBpdCBpcyBhIHR5cGUgb2YgaXRzIG93biwgYnV0IHNvbWUgcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQKK2RubCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHRvIGdldHNvY2tvcHQsIGdldHBlZXJuYW1lLCBldGMuICBTbyB3ZQorZG5sIGhhdmUgdG8gdGVzdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IHdpbGwgd29yay4KKworZG5sIFJlbW92ZSB0aGUgQUNfQ0hFQ0tfVFlQRSAtIG9uIEhQLVVYIGl0IHdvdWxkIGZpbmQgYSBzb2NrbGVuX3QsIGJ1dCB0aGUgCitkbmwgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgZ2V0c29ja29wdCBldCBhbCB3aWxsIG5vdCBhY3R1YWxseSB1c2UgCitkbmwgc29ja2xlbl90IGFyZ3MgdW5sZXNzIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgaXMgZGVmaW5lZC4gc28sIHRoZQorZG5sIEFDX0NIRUNLX1RZUEUgd2lsbCBmaW5kIGEgc29ja2xlbl90IGFuZCB0aGluayBhbGwgaXMgaGFwcGluZXNzIGFuZAorZG5sIGpveSB3aGVuIHlvdSB3aWxsIHJlYWxseSBnZXQgd2FybmluZ3MgYWJvdXQgbWlzbWF0Y2ggdHlwZXMgLSB0eXBlCitkbmwgbWlzbWF0Y2hlcyB0aGF0IHdvdWxkIGJlIHBvc3NpYmx5IEJhZCAodG0pIGluIGEgNjQtYml0IGNvbXBpbGUuCitkbmwgcmFqIDIwMDUtMDUtMTEgdGhpcyBjaGFuZ2UgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgYXQgd2lsbCAKKworZG5sIGFsc28sIGFkZGVkICJleHRlcm4iIHRvIHRoZSAiaW50IGdldHBlZXJuYW1lIiBpbiBhbiBhdHRlbXB0IHRvIHJlc29sdmUKK2RubCBhbiBpc3N1ZSB3aXRoIHRoaXMgY29kZSB1bmRlciBTb2xhcmlzIDIuOS4gIHRoaXMgdG9vIG1heSBiZSAKK2RubCByZWRpc3RyaWJ1dGVkIGF0IHdpbGwKKworCitBQ19ERUZVTihbT0xEX1RZUEVfU09DS0xFTl9UXSwKK1sKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHNvY2tsZW5fdCBlcXVpdmFsZW50XSkKKyAgICAgIEFDX0NBQ0hFX1ZBTChbY3VybF9jdl9zb2NrbGVuX3RfZXF1aXZdLAorICAgICAgWworICAgICAgICAgIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKyAgICAgICAgICMgInZvaWQgKiIgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBnZXRwZWVybmFtZQorICAgICAgICAgY3VybF9jdl9zb2NrbGVuX3RfZXF1aXY9CisgICAgICAgICBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworICAgICAgICAgICAgZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIiBzb2NrbGVuX3Q7IGRvCisgICAgICAgICAgICAgICBBQ19UUllfQ09NUElMRShbCisgICAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgICAgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBnZXRwZWVybmFtZSAoaW50LCAkYXJnMiAqLCAkdCAqKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgJHQgbGVuOworICAgICAgICAgICAgICAgICAgZ2V0cGVlcm5hbWUoMCwwLCZsZW4pOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICBjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCisgICAgICAgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgZG9uZQorCisgICAgICAgICBpZiB0ZXN0ICJ4JGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2IiA9IHg7IHRoZW4KKyAgICAgICAgIyB0YWtlIGEgd2lsZCBndWVzcworICAgICAgICAgICAgY3VybF9jdl9zb2NrbGVuX3RfZXF1aXY9InNvY2tsZW5fdCIKKyAgICAgICAgICAgIEFDX01TR19XQVJOKFtDYW5ub3QgZmluZCBhIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCwgZ3Vlc3Npbmcgc29ja2xlbl90XSkKKyAgICAgICAgIGZpCisgICAgICBdKQorICAgICAgQUNfTVNHX1JFU1VMVCgkY3VybF9jdl9zb2NrbGVuX3RfZXF1aXYpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQobmV0cGVyZl9zb2NrbGVuX3QsICRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QgaWYgbm90IGRlZmluZWRdKQorXSkKKworCitkbmwgKgorZG5sICogQ29weXJpZ2h0IChjKSAyMDAxICBNb3RveXVraSBLYXNhaGFyYQorZG5sICoKK2RubCAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorZG5sICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCitkbmwgKiBhcmUgbWV0OgorZG5sICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK2RubCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkbmwgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorZG5sICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK2RubCAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorZG5sICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitkbmwgKiAKK2RubCAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitkbmwgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK2RubCAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorZG5sICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SU0JFCitkbmwgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitkbmwgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorZG5sICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitkbmwgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorZG5sICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK2RubCAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK2RubCAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK2RubCAqCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIGhfZXJybm8uCitkbmwgKgorQUNfREVGVU4oW0FDX0RFQ0xfSF9FUlJOT10sCitbQUNfQ0FDSEVfQ0hFQ0soZm9yIGhfZXJybm8gZGVjbGFyYXRpb24gaW4gbmV0ZGIuaCwgYWNfY3ZfZGVjbF9oX2Vycm5vLAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxuZXRkYi5oPl1dLCBbWworaF9lcnJubyA9IDA7CitdXSldLFthY19jdl9kZWNsX2hfZXJybm89eWVzXSxbYWNfY3ZfZGVjbF9oX2Vycm5vPW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X2RlY2xfaF9lcnJubyIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSF9FUlJOT19ERUNMQVJFRCwgMSwKK1tEZWZpbmUgdG8gMSBpZiBgaF9lcnJubycgaXMgZGVjbGFyZWQgYnkgPG5ldGRiLmg+XSkKK2ZpXSkKKworZG5sICoKK2RubCAqIENvcHlyaWdodCAoYykgMjAwMSAgTW90b3l1a2kgS2FzYWhhcmEKK2RubCAqCitkbmwgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK2RubCAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworZG5sICogYXJlIG1ldDoKK2RubCAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitkbmwgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG5sICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK2RubCAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCitkbmwgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKK2RubCAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorZG5sICogCitkbmwgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorZG5sICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitkbmwgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK2RubCAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlNCRQorZG5sICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorZG5sICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK2RubCAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworZG5sICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK2RubCAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitkbmwgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCitkbmwgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitkbmwgKgorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBzdHJ1Y3Qgc29ja2FkZHJfaW42CitkbmwgKgorQUNfREVGVU4oW0FDX1NUUlVDVF9TT0NLQUREUl9JTjZdLAorW0FDX0NBQ0hFX0NIRUNLKGZvciBzdHJ1Y3Qgc29ja2FkZHJfaW42LCBhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfaW42LAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl1dLCBbWworc3RydWN0IHNvY2thZGRyX2luNiBhZGRyZXNzOworXV0pXSxbYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNj15ZXNdLFthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfaW42PW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9pbjYiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONiwgMSwKK1tEZWZpbmUgdG8gMSBpZiA8bmV0aW5ldC9pbi5oPiBkZWZpbmVzIGBzdHJ1Y3Qgc29ja2FkZHJfaW42J10pCitmaV0pCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCitkbmwgKiAKK0FDX0RFRlVOKFtBQ19TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV0sCitbQUNfQ0FDSEVfQ0hFQ0soZm9yIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLCBhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dXSwgW1sKK3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJlc3M7CitdXSldLFthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZT15ZXNdLFthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZT1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSwgMSwKK1tEZWZpbmUgdG8gMSBpZiA8bmV0aW5ldC9pbi5oPiBkZWZpbmVzIGBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSddKQorZmldKQorCitkbmwgKgorZG5sICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAzICBNb3RveXVraSBLYXNhaGFyYQorZG5sICoKK2RubCAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorZG5sICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCitkbmwgKiBhcmUgbWV0OgorZG5sICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK2RubCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkbmwgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorZG5sICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK2RubCAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorZG5sICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitkbmwgKiAKK2RubCAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitkbmwgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK2RubCAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorZG5sICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SU0JFCitkbmwgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitkbmwgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorZG5sICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitkbmwgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorZG5sICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK2RubCAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK2RubCAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK2RubCAqCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIHNvY2tsZW5fdC4KK2RubCAqIAorQUNfREVGVU4oW0FDX1RZUEVfU09DS0xFTl9UXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIHNvY2tsZW5fdF0sIGFjX2N2X3R5cGVfc29ja2xlbl90LAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sIFtbCitzb2NrbGVuX3Qgc29ja2xlbjsKK11dKV0sW2FjX2N2X3R5cGVfc29ja2xlbl90PXllc10sW2FjX2N2X3R5cGVfc29ja2xlbl90PW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfc29ja2xlbl90IiAhPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoc29ja2xlbl90LCBpbnQsCitbRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gb3IgPHN5cy9zb2NrZXQuaD4gZG9lcyBub3QgZGVmaW5lLl0pCitmaV0pCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIGluX3BvcnRfdC4KK2RubCAqIAorQUNfREVGVU4oW0FDX1RZUEVfSU5fUE9SVF9UXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIGluX3BvcnRfdF0sIGFjX2N2X3R5cGVfaW5fcG9ydF90LAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl1dLCBbWworaW5fcG9ydF90IGluX3BvcnQ7CitdXSldLFthY19jdl90eXBlX2luX3BvcnRfdD15ZXNdLFthY19jdl90eXBlX2luX3BvcnRfdD1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl90eXBlX2luX3BvcnRfdCIgIT0geWVzOyB0aGVuCisgICAgYWNfY3Zfc2luX3BvcnRfc2l6ZT11bmtub3duCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2luX3BvcnQpID09IHNpemVvZihsb25nKSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2luX3BvcnRfc2l6ZT1sb25nXSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zaW5fcG9ydCkgPT0gc2l6ZW9mKGludCkpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3Npbl9wb3J0X3NpemU9aW50XSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zaW5fcG9ydCkgPT0gc2l6ZW9mKHNob3J0KSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2luX3BvcnRfc2l6ZT1zaG9ydF0sW10sW10pCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2luX3BvcnQpID09IHNpemVvZihjaGFyKSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2luX3BvcnRfc2l6ZT1jaGFyXSxbXSxbXSkKKyAgICBpZiB0ZXN0ICIkYWNfY3Zfc2luX3BvcnRfc2l6ZSIgPSB1bmtub3duOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtGYWlsZWQgdG8gZ2V0IHNpemUgb2Ygc2luX3BvcnQgaW4gc3RydWN0IHNvY2thZGRyX2luLl0pCisgICAgZmkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoaW5fcG9ydF90LCB1bnNpZ25lZCAkYWNfY3Zfc2luX3BvcnRfc2l6ZSwKK1tEZWZpbmUgdG8gYHVuc2lnbmVkIGNoYXInLCBgdW5zaWduZWQgc2hvcnQnLCBgdW5zaWduZWQgaW50JyBvcgorYHVuc2lnbmVkIGxvbmcnIGFjY29yZGluZyB3aXRoIHNpemUgb2YgYHNpbl9wb3J0JyBpbiBgc3RydWN0IHNvY2thZGRyX2luJywKK2lmIDxzeXMvdHlwZXMuaD4sIDxzeXMvc29ja2V0Lmg+IG9yIDxuZXRpbmV0L2luLmg+IGRvZXMgbm90IGRlZmluZQorYGluX3BvcnRfdCcuXSkKK2ZpXSkKKworZG5sICogCitkbmwgKiBDaGVjayBmb3Igc2FfZmFtaWx5X3QuCitkbmwgKiAKK0FDX0RFRlVOKFtBQ19UWVBFX1NBX0ZBTUlMWV9UXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIHNhX2ZhbWlseV90XSwgYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLCBbWworc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OworXV0pXSxbYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdD15ZXNdLFthY19jdl90eXBlX3NhX2ZhbWlseV90PW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfc2FfZmFtaWx5X3QiICE9IHllczsgdGhlbgorICAgIGFjX2N2X3NhX2ZhbWlseV9zaXplPXVua25vd24KKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2FfZmFtaWx5KSA9PSBzaXplb2YobG9uZykpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3NhX2ZhbWlseV9zaXplPWxvbmddLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zYV9mYW1pbHkpID09IHNpemVvZihpbnQpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zYV9mYW1pbHlfc2l6ZT1pbnRdLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zYV9mYW1pbHkpID09IHNpemVvZihzaG9ydCkpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3NhX2ZhbWlseV9zaXplPXNob3J0XSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2FfZmFtaWx5KSA9PSBzaXplb2YoY2hhcikpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3NhX2ZhbWlseV9zaXplPWNoYXJdLFtdLFtdKQorICAgIGlmIHRlc3QgIiRhY19jdl9zYV9mYW1pbHlfc2l6ZSIgPSB1bmtub3duOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtGYWlsZWQgdG8gZ2V0IHNpemUgb2Ygc2FfZmFtaWx5IGluIHN0cnVjdCBzb2NrYWRkci5dKQorICAgIGZpCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKHNhX2ZhbWlseV90LCB1bnNpZ25lZCAkYWNfY3Zfc2FfZmFtaWx5X3NpemUsCitbRGVmaW5lIHRvIGB1bnNpZ25lZCBjaGFyJywgYHVuc2lnbmVkIHNob3J0JywgYHVuc2lnbmVkIGludCcgb3IKK2B1bnNpZ25lZCBsb25nJyBhY2NvcmRpbmcgd2l0aCBzaXplIG9mIGBzYV9mYW1pbHknIGluIGBzdHJ1Y3Qgc29ja2FkZHInLAoraWYgPHN5cy90eXBlcy5oPiBvciA8c3lzL3NvY2tldC5oPiBkb2VzIG5vdCBkZWZpbmUgYHNhX2ZhbWlseV90Jy5dKQorZmldKQorCisjIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2ggc29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCisjIHlvdXIgcGFja2FnZSBkb2VzIGNlcnRhaW4gdGhpbmdzLiAgQnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGEgYmlnIGRlYWwuCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCisjIHNlcmlhbCAxMAorCitBQ19QUkVSRVEoWzIuNTRdKQorCisjIEF1dG9jb25mIDIuNTAgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdworIyB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgorbTRfcGF0dGVybl9hbGxvdyhbXkFNX1tBLVpdK0ZMQUdTJF0pZG5sCisKKyMgQU1fSU5JVF9BVVRPTUFLRShQQUNLQUdFLCBWRVJTSU9OLCBbTk8tREVGSU5FXSkKKyMgQU1fSU5JVF9BVVRPTUFLRShbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBjYWxsIHdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTiBhcmd1bWVudHMgaXMgdGhlIG9sZCBzdHlsZQorIyBjYWxsIChwcmUgYXV0b2NvbmYtMi41MCksIHdoaWNoIGlzIGJlaW5nIHBoYXNlZCBvdXQuICBQQUNLQUdFCisjIGFuZCBWRVJTSU9OIHNob3VsZCBub3cgYmUgcGFzc2VkIHRvIEFDX0lOSVQgYW5kIHJlbW92ZWQgZnJvbQorIyB0aGUgY2FsbCB0byBBTV9JTklUX0FVVE9NQUtFLgorIyBXZSBzdXBwb3J0IGJvdGggY2FsbCBzdHlsZXMgZm9yIHRoZSB0cmFuc2l0aW9uLiAgQWZ0ZXIKKyMgdGhlIG5leHQgQXV0b21ha2UgcmVsZWFzZSwgQXV0b2NvbmYgY2FuIG1ha2UgdGhlIEFDX0lOSVQKKyMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgorIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgorQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dKWRubAorIEFDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCisjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCIgJiYKKyAgIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKK2ZpCisKKyMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAoraWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KKyAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JworICBlbHNlCisgICAgQ1lHUEFUSF9XPWVjaG8KKyAgZmkKK2ZpCitBQ19TVUJTVChbQ1lHUEFUSF9XXSkKKworIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgorZG5sIERpc3Rpbmd1aXNoIGJldHdlZW4gb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2FsbHMuCittNF9pZnZhbChbJDJdLAorW200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAorIEFDX1NVQlNUKFtQQUNLQUdFXSwgWyQxXSlkbmwKKyBBQ19TVUJTVChbVkVSU0lPTl0sIFskMl0pXSwKK1tfQU1fU0VUX09QVElPTlMoWyQxXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFsnQUNfUEFDS0FHRV9UQVJOQU1FJ10pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJ0FDX1BBQ0tBR0VfVkVSU0lPTiddKV0pZG5sCisKK19BTV9JRl9PUFRJT04oW25vLWRlZmluZV0sLAorW0FDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFLCAiJFBBQ0tBR0UiLCBbTmFtZSBvZiBwYWNrYWdlXSkKKyBBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIiwgW1ZlcnNpb24gbnVtYmVyIG9mIHBhY2thZ2VdKV0pZG5sCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KK0FDX1JFUVVJUkUoW0FNX1NBTklUWV9DSEVDS10pZG5sCitBQ19SRVFVSVJFKFtBQ19BUkdfUFJPR1JBTV0pZG5sCitBTV9NSVNTSU5HX1BST0coQUNMT0NBTCwgYWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0NPTkYsIGF1dG9jb25mKQorQU1fTUlTU0lOR19QUk9HKEFVVE9NQUtFLCBhdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0pCitBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKK0FNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8pCitBTV9NSVNTSU5HX1BST0coQU1UQVIsIHRhcikKK0FNX1BST0dfSU5TVEFMTF9TSAorQU1fUFJPR19JTlNUQUxMX1NUUklQCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKKworX0FNX0lGX09QVElPTihbbm8tZGVwZW5kZW5jaWVzXSwsCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ0NdLAorICAgICAgICAgICAgICAgICAgW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSwKKyAgICAgICAgICAgICAgICAgIFtkZWZpbmUoW0FDX1BST0dfQ0NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhDQyldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICAgICAgICAgICAgICAgICAgW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0sCisgICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX0NYWF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZm4oW0FDX1BST0dfQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSldKWRubAorXSkKK10pCisKKworIyBXaGVuIGNvbmZpZy5zdGF0dXMgZ2VuZXJhdGVzIGEgaGVhZGVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUgc3RhbXAtaCBmaWxlLgorIyBUaGlzIGZpbGUgcmVzaWRlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvbmZpZyBoZWFkZXIKKyMgdGhhdCBpcyBnZW5lcmF0ZWQuICBUaGUgc3RhbXAgZmlsZXMgYXJlIG51bWJlcmVkIHRvIGhhdmUgZGlmZmVyZW50IG5hbWVzLgorCisjIEF1dG9jb25mIGNhbGxzIF9BQ19BTV9DT05GSUdfSEVBREVSX0hPT0sgKHdoZW4gZGVmaW5lZCkgaW4gdGhlCisjIGxvb3Agd2hlcmUgY29uZmlnLnN0YXR1cyBjcmVhdGVzIHRoZSBoZWFkZXJzLCBzbyB3ZSBjYW4gZ2VuZXJhdGUKKyMgb3VyIHN0YW1wIGZpbGVzIHRoZXJlLgorQUNfREVGVU4oW19BQ19BTV9DT05GSUdfSEVBREVSX0hPT0tdLAorWyMgQ29tcHV0ZSAkMSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9zdGFtcF9jb3VudD0xCitmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KKyAgY2FzZSAkX2FtX2hlYWRlciBpbgorICAgICQxIHwgJDE6KiApCisgICAgICBicmVhayA7OworICAgICogKQorICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OworICBlc2FjCitkb25lCitlY2hvICJ0aW1lc3RhbXAgZm9yICQxIiA+YEFTX0RJUk5BTUUoWyQxXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorCisjIENvcHlyaWdodCAyMDAyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisKKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgorIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KK0FDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSxbYW1fX2FwaV92ZXJzaW9uPSIxLjciXSkKKworIyBBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIGl0IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQUNfSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKKwkgW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuNy45XSldKQorCisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgMjAwMSwgMjAwMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3LCBVU0EuCisKKyMgc2VyaWFsIDIKKworIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKK1tbX0FNX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisjIF9BTV9TRVRfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgMSldKQorCisjIF9BTV9TRVRfT1BUSU9OUyhPUFRJT05TKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCitbQUNfRk9SRUFDSChbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4KKyMKKworIyBDb3B5cmlnaHQgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworIyBzZXJpYWwgMworCisjIEFNX1NBTklUWV9DSEVDSworIyAtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBTV9TQU5JVFlfQ0hFQ0tdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lXSkKKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkWypdIiA9ICJYIjsgdGhlbgorICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KKyAgICAgIHNldCBYIGBscyAtdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlYAorICAgZmkKKyAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKKyAgIGlmIHRlc3QgIiRbKl0iICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKyAgICAgICYmIHRlc3QgIiRbKl0iICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisKKyAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKyAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKyAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKyAgICAgIEFDX01TR19FUlJPUihbbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCisgICBmaQorCisgICB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUKKyAgICkKK3RoZW4KKyAgICMgT2suCisgICA6CitlbHNlCisgICBBQ19NU0dfRVJST1IoW25ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2tdKQorZmkKK0FDX01TR19SRVNVTFQoeWVzKV0pCisKKyMgIC0qLSBBdXRvY29uZiAtKi0KKworCisjIENvcHlyaWdodCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCisjIHNlcmlhbCAzCisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgorIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCit0ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBBTV9BVVhfRElSX0VYUEFORAorCisjIENvcHlyaWdodCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCisjIEZvciBwcm9qZWN0cyB1c2luZyBBQ19DT05GSUdfQVVYX0RJUihbZm9vXSksIEF1dG9jb25mIHNldHMKKyMgJGFjX2F1eF9kaXIgdG8gYCRzcmNkaXIvZm9vJy4gIEluIG90aGVyIHByb2plY3RzLCBpdCBpcyBzZXQgdG8KKyMgYCRzcmNkaXInLCBgJHNyY2Rpci8uLicsIG9yIGAkc3JjZGlyLy4uLy4uJy4KKyMKKyMgT2YgY291cnNlLCBBdXRvbWFrZSBtdXN0IGhvbm9yIHRoaXMgdmFyaWFibGUgd2hlbmV2ZXIgaXQgY2FsbHMgYQorIyB0b29sIGZyb20gdGhlIGF1eGlsaWFyeSBkaXJlY3RvcnkuICBUaGUgcHJvYmxlbSBpcyB0aGF0ICRzcmNkaXIgKGFuZAorIyB0aGVyZWZvcmUgJGFjX2F1eF9kaXIgYXMgd2VsbCkgY2FuIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSwKKyMgZGVwZW5kaW5nIG9uIGhvdyBjb25maWd1cmUgaXMgcnVuLiAgVGhpcyBpcyBwcmV0dHkgYW5ub3lpbmcsIHNpbmNlCisjIGl0IG1ha2VzICRhY19hdXhfZGlyIHF1aXRlIHVudXNhYmxlIGluIHN1YmRpcmVjdG9yaWVzOiBpbiB0aGUgdG9wCisjIHNvdXJjZSBkaXJlY3RvcnksIGFueSBmb3JtIHdpbGwgd29yayBmaW5lLCBidXQgaW4gc3ViZGlyZWN0b3JpZXMgYQorIyByZWxhdGl2ZSBwYXRoIG5lZWRzIHRvIGJlIGFkanVzdGVkIGZpcnN0LgorIworIyAkYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaWYgJGFjX2F1eF9kaXIgaXMgcmVsYXRpdmUKKyMgJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyBpZiAkYWNfYXV4X2RpciBpcyBhYnNvbHV0ZSwKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpbiBhIFZQQVRIIGJ1aWxkIHdpdGgKKyMgICAgICAgICAgYSByZWxhdGl2ZSAkYWNfYXV4X2RpcgorIworIyBUaGUgcmVhc29uIG9mIHRoZSBsYXR0ZXIgZmFpbHVyZSBpcyB0aGF0ICR0b3Bfc3JjZGlyIGFuZCAkYWNfYXV4X2RpcgorIyBhcmUgYm90aCBwcmVmaXhlZCBieSAkc3JjZGlyLiAgSW4gYW4gaW4tc291cmNlIGJ1aWxkIHRoaXMgaXMgdXN1YWxseQorIyBoYXJtbGVzcyBiZWNhdXNlICRzcmNkaXIgaXMgYC4nLCBidXQgdGhpbmdzIHdpbGwgYnJva2Ugd2hlbiB5b3UKKyMgc3RhcnQgYSBWUEFUSCBidWlsZCBvciB1c2UgYW4gYWJzb2x1dGUgJHNyY2Rpci4KKyMKKyMgU28gd2UgY291bGQgdXNlIHNvbWV0aGluZyBzaW1pbGFyIHRvICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcsCisjIGlmZiB3ZSBzdHJpcCB0aGUgbGVhZGluZyAkc3JjZGlyIGZyb20gJGFjX2F1eF9kaXIuICBUaGF0IHdvdWxkIGJlOgorIyAgIGFtX2F1eF9kaXI9J1wkKHRvcF9zcmNkaXIpLydgZXhwciAiJGFjX2F1eF9kaXIiIDogIiRzcmNkaXIvLypcKC4qXCkiYAorIyBhbmQgdGhlbiB3ZSB3b3VsZCBkZWZpbmUgJE1JU1NJTkcgYXMKKyMgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVGhpcyB3aWxsIHdvcmsgYXMgbG9uZyBhcyBNSVNTSU5HIGlzIG5vdCBjYWxsZWQgZnJvbSBjb25maWd1cmUsIGJlY2F1c2UKKyMgdW5mb3J0dW5hdGVseSAkKHRvcF9zcmNkaXIpIGhhcyBubyBtZWFuaW5nIGluIGNvbmZpZ3VyZS4KKyMgSG93ZXZlciB0aGVyZSBhcmUgb3RoZXIgdmFyaWFibGVzLCBsaWtlIENDLCB3aGljaCBhcmUgb2Z0ZW4gdXNlZCBpbgorIyBjb25maWd1cmUsIGFuZCBjb3VsZCB0aGVyZWZvcmUgbm90IHVzZSB0aGlzICJmaXhlZCIgJGFjX2F1eF9kaXIuCisjCisjIEFub3RoZXIgc29sdXRpb24sIHVzZWQgaGVyZSwgaXMgdG8gYWx3YXlzIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbgorIyBhYnNvbHV0ZSBQQVRILiAgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcHJldmVudCBhCisjIGNvbmZpZ3VyZWQgdHJlZSB0byBiZSBtb3ZlZCB3aXRob3V0IHJlY29uZmlndXJhdGlvbi4KKworIyBSZWx5IG9uIGF1dG9jb25mIHRvIHNldCB1cCBDRFBBVEggcHJvcGVybHkuCitBQ19QUkVSRVEoWzIuNTBdKQorCitBQ19ERUZVTihbQU1fQVVYX0RJUl9FWFBBTkRdLCBbCisjIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCithbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCitdKQorCisjIEFNX1BST0dfSU5TVEFMTF9TSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lICRpbnN0YWxsX3NoLgorCisjIENvcHlyaWdodCAyMDAxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitpbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCJ9CitBQ19TVUJTVChpbnN0YWxsX3NoKV0pCisKKyMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisKKyMgQ29weXJpZ2h0IDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3LCBVU0EuCisKKyMgT25lIGlzc3VlIHdpdGggdmVuZG9yIGBpbnN0YWxsJyAoZXZlbiBHTlUpIGlzIHRoYXQgeW91IGNhbid0CisjIHNwZWNpZnkgdGhlIHByb2dyYW0gdXNlZCB0byBzdHJpcCBiaW5hcmllcy4gIFRoaXMgaXMgZXNwZWNpYWxseQorIyBhbm5veWluZyBpbiBjcm9zcy1jb21waWxpbmcgZW52aXJvbm1lbnRzLCB3aGVyZSB0aGUgYnVpbGQncyBzdHJpcAorIyBpcyB1bmxpa2VseSB0byBoYW5kbGUgdGhlIGhvc3QncyBiaW5hcmllcy4KKyMgRm9ydHVuYXRlbHkgaW5zdGFsbC1zaCB3aWxsIGhvbm9yIGEgU1RSSVBQUk9HIHZhcmlhYmxlLCBzbyB3ZQorIyBhbHdheXMgdXNlIGluc3RhbGwtc2ggaW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcsIGFuZCBpbml0aWFsaXplCisjIFNUUklQUFJPRyB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgU1RSSVAgdmFyaWFibGUgKHNldCBieSB0aGUgdXNlcikuCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NUUklQXSwKK1tBQ19SRVFVSVJFKFtBTV9QUk9HX0lOU1RBTExfU0hdKWRubAorIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CisjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCisjIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgorZG5sIERvbid0IHRlc3QgZm9yICRjcm9zc19jb21waWxpbmcgPSB5ZXMsIGJlY2F1c2UgaXQgbWlnaHQgYmUgYG1heWJlJy4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIEFDX0NIRUNLX1RPT0woW1NUUklQXSwgW3N0cmlwXSwgOikKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09Ilwke1NIRUxMfSBcJChpbnN0YWxsX3NoKSAtYyAtcyIKK0FDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCisKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDMgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCisjIHNlcmlhbCAxCisKKyMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKKyMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCitbcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKK0FDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCisKKyMgc2VyaWFsIDUJCQkJCQktKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworCisjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nIGBBQ19QUk9HX0NDJyBiZQorIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKKyMgd2lsbCB0aGluayBpdCBzZWVzIGEgKnVzZSosIGFuZCB0aGVyZWZvcmUgd2lsbCB0cmlnZ2VyIGFsbCBpdCdzCisjIEMgc3VwcG9ydCBtYWNoaW5lcnkuICBBbHNvIG5vdGUgdGhhdCBpdCBtZWFucyB0aGF0IGF1dG9zY2FuLCBzZWVpbmcKKyMgQ0MgZXRjLiBpbiB0aGUgTWFrZWZpbGUsIHdpbGwgYXNrIGZvciBhbiBBQ19QUk9HX0NDIHVzZS4uLgorCisKKworIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgorIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiR0NKIiwgb3IgIk9CSkMiLgorIyBXZSB0cnkgYSBmZXcgdGVjaG5pcXVlcyBhbmQgdXNlIHRoYXQgdG8gc2V0IGEgc2luZ2xlIGNhY2hlIHZhcmlhYmxlLgorIworIyBXZSBkb24ndCBBQ19SRVFVSVJFIHRoZSBjb3JyZXNwb25kaW5nIEFDX1BST0dfQ0Mgc2luY2UgdGhlIGxhdHRlciB3YXMKKyMgbW9kaWZpZWQgdG8gaW52b2tlIF9BTV9ERVBFTkRFTkNJRVMoQ0MpOyB3ZSB3b3VsZCBoYXZlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZW5jeSwgYW5kIGdpdmVuIHRoYXQgdGhlIHVzZXIgaXMgbm90IGV4cGVjdGVkIHRvIHJ1biB0aGlzIG1hY3JvLAorIyBqdXN0IHJlbHkgb24gQUNfUFJPR19DQy4KK0FDX0RFRlVOKFtfQU1fREVQRU5ERU5DSUVTXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfREVQRElSXSlkbmwKK0FDX1JFUVVJUkUoW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSlkbmwKK0FDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCitBQ19SRVFVSVJFKFtBTV9ERVBfVFJBQ0tdKWRubAorCitpZmVsc2UoWyQxXSwgQ0MsICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIENYWCwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBPQkpDLCBbZGVwY2M9IiRPQkpDIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgIFskMV0sIEdDSiwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQorCitBQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAorICAgICAgICAgICAgICAgW2FtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSwKK1tpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiBbJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnXSA8IC4vZGVwY29tcGAKKyAgZmkKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgOiA+IHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgorICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZC4KKyAgICAgIGlmIGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCitdKQorQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCitBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQorXSkKKworCisjIEFNX1NFVF9ERVBESVIKKyMgLS0tLS0tLS0tLS0tLQorIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KKyMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTCitBQ19ERUZVTihbQU1fU0VUX0RFUERJUl0sCitbQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK0FDX1NVQlNUKFtERVBESVJdLCBbIiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiXSlkbmwKK10pCisKKworIyBBTV9ERVBfVFJBQ0sKKyMgLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fREVQX1RSQUNLXSwKK1tBQ19BUkdfRU5BQkxFKGRlcGVuZGVuY3ktdHJhY2tpbmcsCitbICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBTcGVlZHMgdXAgb25lLXRpbWUgYnVpbGRzCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIERvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnNdKQoraWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCisgIEFNREVQQkFDS1NMQVNIPSdcJworZmkKK0FNX0NPTkRJVElPTkFMKFtBTURFUF0sIFt0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm9dKQorQUNfU1VCU1QoW0FNREVQQkFDS1NMQVNIXSkKK10pCisKKyMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorIyAwMjExMS0xMzA3LCBVU0EuCisKKyNzZXJpYWwgMgorCisjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorW2ZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbworICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0CisgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAjIFNvIGxldCdzIGdyZXAgd2hvbGUgZmlsZS4KKyAgaWYgZ3JlcCAnXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZScgJG1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKKyAgZWxzZQorICAgIGNvbnRpbnVlCisgIGZpCisgIGdyZXAgJ15ERVBfRklMRVMgKj0gKltbXiBAJTpAXV0nIDwgIiRtZiIgPiAvZGV2L251bGwgfHwgY29udGludWUKKyAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUF9GSUxFUyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0CisgICMgcnVubmluZyBgbWFrZScuCisgIERFUERJUj1gc2VkIC1uIC1lICcvXkRFUERJUiA9IC8gcy8vL3AnIDwgIiRtZiJgCisgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0CisgIFU9YHNlZCAtbiAtZSAnL15VID0gLyBzLy8vcCcgPCAiJG1mImAKKyAgdGVzdCAtZCAiJGRpcnBhcnQvJERFUERJUiIgfHwgbWtkaXIgIiRkaXJwYXJ0LyRERVBESVIiCisgICMgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZSBzaW1wbGVzdCBhcHByb2FjaCB0bworICAjIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZSBleHBhbnNpb24uCisgIGZvciBmaWxlIGluIGBzZWQgLW4gLWUgJworICAgIC9eREVQX0ZJTEVTID0gLipcXFxcJC8geworICAgICAgcy9eREVQX0ZJTEVTID0gLy8KKyAgICAgIDpsb29wCisJcy9cXFxcJC8vCisJcAorCW4KKwkvXFxcXCQvIGIgbG9vcAorICAgICAgcAorICAgIH0KKyAgICAvXkRFUF9GSUxFUyA9IC8gcy9eREVQX0ZJTEVTID0gLy9wJyA8ICIkbWYiIHwgXAorICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbworICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgIGZkaXI9YEFTX0RJUk5BTUUoWyIkZmlsZSJdKWAKKyAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgZG9uZQorZG9uZQorXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworCisKKyMgQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBzaG91bGQgb25seSBiZSBpbnZva2VkIG9uY2UgLS0gdXNlIHZpYSBBQ19SRVFVSVJFLgorIworIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCisjIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoIGAuUCcgZmlsZSB0aGF0IHdlIHdpbGwKKyMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KK0FDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCisgICAgIFt0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAorICAgICBbQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIl0pCitdKQorCisjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworIyBzZXJpYWwgMgorCisjIEFNX01BS0VfSU5DTFVERSgpCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCitBQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKK1thbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gZG9uZQorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzdHlsZSBvZiBpbmNsdWRlIHVzZWQgYnkgJGFtX21ha2VdKQorYW1fX2luY2x1ZGU9IiMiCithbV9fcXVvdGU9CitfYW1fcmVzdWx0PW5vbmUKKyMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCitlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCisjIFdlIGdyZXAgb3V0IGBFbnRlcmluZyBkaXJlY3RvcnknIGFuZCBgTGVhdmluZyBkaXJlY3RvcnknCisjIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCisjIEluIHBhcnRpY3VsYXIgd2UgZG9uJ3QgbG9vayBhdCBgXm1ha2U6JyBiZWNhdXNlIEdOVSBtYWtlIG1pZ2h0CisjIGJlIGludm9rZWQgdW5kZXIgc29tZSBvdGhlciBuYW1lICh1c3VhbGx5ICJnbWFrZSIpLCBpbiB3aGljaAorIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCitpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXYgJ2luZyBkaXJlY3RvcnknYCIgPSAiZG9uZSI7IHRoZW4KKyAgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgIGFtX19xdW90ZT0KKyAgIF9hbV9yZXN1bHQ9R05VCitmaQorIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCitpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCisgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCisgICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCisgICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgIF9hbV9yZXN1bHQ9QlNECisgICBmaQorZmkKK0FDX1NVQlNUKFthbV9faW5jbHVkZV0pCitBQ19TVUJTVChbYW1fX3F1b3RlXSkKK0FDX01TR19SRVNVTFQoWyRfYW1fcmVzdWx0XSkKK3JtIC1mIGNvbmZpbmMgY29uZm1mCitdKQorCisjIEFNX0NPTkRJVElPTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgMTk5NywgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworIyBzZXJpYWwgNQorCitBQ19QUkVSRVEoMi41MikKKworIyBBTV9DT05ESVRJT05BTChOQU1FLCBTSEVMTC1DT05ESVRJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgY29uZGl0aW9uYWwuCitBQ19ERUZVTihbQU1fQ09ORElUSU9OQUxdLAorW2lmZWxzZShbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCisgICAgICAgIFskMV0sIFtGQUxTRV0sIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSlkbmwKK0FDX1NVQlNUKFskMV9UUlVFXSkKK0FDX1NVQlNUKFskMV9GQUxTRV0pCitpZiAkMjsgdGhlbgorICAkMV9UUlVFPQorICAkMV9GQUxTRT0nIycKK2Vsc2UKKyAgJDFfVFJVRT0nIycKKyAgJDFfRkFMU0U9CitmaQorQUNfQ09ORklHX0NPTU1BTkRTX1BSRSgKK1tpZiB0ZXN0IC16ICIkeyQxX1RSVUV9IiAmJiB0ZXN0IC16ICIkeyQxX0ZBTFNFfSI7IHRoZW4KKyAgQUNfTVNHX0VSUk9SKFtjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXSkKK2ZpXSldKQorCisjIExpa2UgQUNfQ09ORklHX0hFQURFUiwgYnV0IGF1dG9tYXRpY2FsbHkgY3JlYXRlIHN0YW1wIGZpbGUuIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworQUNfUFJFUkVRKFsyLjUyXSkKKworIyBzZXJpYWwgNgorCisjIEFNX0NPTkZJR19IRUFERVIgaXMgb2Jzb2xldGUuICBJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBBQ19DT05GSUdfSEVBREVSUy4KK0FVX0RFRlVOKFtBTV9DT05GSUdfSEVBREVSXSwgW0FDX0NPTkZJR19IRUFERVJTKCRAKV0pCisKK2RubCBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgKK2RubCB0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKK2RubCBkbmwgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKK2RubCBkbmwgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCitkbmwgZG5sIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgorZG5sIGRubCB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorZG5sIGRubCBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKK2RubCBkbmwgd3JpdHRlbiBwZXJtaXNzaW9uLgorZG5sIGRubCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitkbmwgZG5sIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitkbmwgZG5sIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCitkbmwgZG5sCitkbmwgZG5sIExCTCBhdXRvY29uZiBtYWNyb3MKK2RubCBkbmwKK2RubAorZG5sCitkbmwgQ2hlY2tzIHRvIHNlZSBpZiB0aGUgc29ja2FkZHIgc3RydWN0IGhhcyB0aGUgNC40IEJTRCBzYV9sZW4gbWVtYmVyCitkbmwgYm9ycm93ZWQgZnJvbSBMQkwgbGlicGNhcAorQUNfREVGVU4oQUNfQ0hFQ0tfU0FfTEVOLCBbCisgICAgICAgIEFDX01TR19DSEVDS0lORyhpZiBzb2NrYWRkciBzdHJ1Y3QgaGFzIHNhX2xlbiBtZW1iZXIpCisgICAgICAgIEFDX0NBQ0hFX1ZBTCgkMSwKKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworIyAgICAgICAgICAgICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyAgICAgICAgICAgICAgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAorICAgICAgICAgICAgICAgIFt1X2ludCBpID0gc2l6ZW9mKCgoc3RydWN0IHNvY2thZGRyICopMCktPnNhX2xlbildLAorICAgICAgICAgICAgICAgICQxPXllcywKKyAgICAgICAgICAgICAgICAkMT1ubykpCisgICAgICAgIEFDX01TR19SRVNVTFQoJCQxKQorICAgICAgICAgICAgICAgIGlmIHRlc3QgJCQxID0geWVzIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX1NPQ0tBRERSX1NBX0xFTl0sMSxbRGVmaW5lIGlmIHN0cnVjdCBzb2NrYWRkciBoYXMgdGhlIHNhX2xlbiBtZW1iZXJdKQorICAgICAgICBmaQorXSkKKwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9hdXRvZ2VuLnNoIGIvbmV0cGVyZi0yLjQuNS9hdXRvZ2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3MTljMjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2F1dG9nZW4uc2gKQEAgLTAsMCArMSw1IEBACisjISAvYmluL3NoCisKK2FjbG9jYWwgLUkgc3JjL21pc3NpbmcvbTQgXAorJiYgYXV0b21ha2UgIC0tYWRkLW1pc3NpbmcgXAorJiYgYXV0b2NvbmYgCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2NvbmZpZy5ndWVzcyBiL25ldHBlcmYtMi40LjUvY29uZmlnLmd1ZXNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkNTI4MWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE0NjYgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDA1LTA4LTAzJworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyIDxwZXJAYm90aG5lci5jb20+LgorIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorIworIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCisjIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAorIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KKyMKKyMgVGhlIHBsYW4gaXMgdGhhdCB0aGlzIGNhbiBiZSBjYWxsZWQgYnkgY29uZmlndXJlIHNjcmlwdHMgaWYgeW91CisjIGRvbid0IHNwZWNpZnkgYW4gZXhwbGljaXQgYnVpbGQgc3lzdGVtIHR5cGUuCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgLXEgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKKyMgTm90ZTogb3JkZXIgaXMgc2lnbmlmaWNhbnQgLSB0aGUgY2FzZSBicmFuY2hlcyBhcmUgbm90IGV4Y2x1c2l2ZS4KKworY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorICAgICo6TmV0QlNEOio6KikKKwkjIE5ldEJTRCAobmJzZCkgdGFyZ2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgorCSMgbW9yZSBvZiB0aGUgdHVwcGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OworCWVzYWMKKwkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKKwkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJCXwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGwKKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJICAgICAgICBvcz1uZXRic2QKKwkJOzsKKwllc2FjCisJIyBUaGUgT1MgcmVsZWFzZQorCSMgRGViaWFuIEdOVS9OZXRCU0QgbWFjaGluZXMgaGF2ZSBhIGRpZmZlcmVudCB1c2VybGFuZCwgYW5kCisJIyB0aHVzLCBuZWVkIGEgZGlzdGluY3QgdHJpcGxldC4gSG93ZXZlciwgdGhleSBkbyBub3QgbmVlZAorCSMga2VybmVsIHZlcnNpb24gaW5mb3JtYXRpb24sIHNvIGl0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEKKwkjIHN1aXRhYmxlIHRhZywgaW4gdGhlIHN0eWxlIG9mIGxpbnV4LWdudS4KKwljYXNlICIke1VOQU1FX1ZFUlNJT059IiBpbgorCSAgICBEZWJpYW4qKQorCQlyZWxlYXNlPSctZ251JworCQk7OworCSAgICAqKQorCQlyZWxlYXNlPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stX10uKi9cLi8nYAorCQk7OworCWVzYWMKKwkjIFNpbmNlIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTToKKwkjIGNvbnRhaW5zIHJlZHVuZGFudCBpbmZvcm1hdGlvbiwgdGhlIHNob3J0ZXIgZm9ybToKKwkjIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNIGlzIHVzZWQuCisJZWNobyAiJHttYWNoaW5lfS0ke29zfSR7cmVsZWFzZX0iCisJZXhpdCA7OworICAgICo6T3BlbkJTRDoqOiopCisJVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tb3BlbmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpla2tvQlNEOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1la2tvYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYWNwcGM6TWlyQlNEOio6KikKKwllY2hvIHBvd2VycHBjLXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk1pckJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbWlyYnNkJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhbHBoYTpPU0YxOio6KikKKwljYXNlICRVTkFNRV9SRUxFQVNFIGluCisJKjQuMCkKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9J2AKKwkJOzsKKwkqNS4qKQorCSAgICAgICAgVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCWV4aXQgOzsKKyAgICBBbHBoYVwgKjpXaW5kb3dzX05UKjoqKQorCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KKwkjIFNob3VsZCB3ZSBjaGFuZ2UgVU5BTUVfTUFDSElORSBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIHVuYW1lIGluc3RlYWQKKwkjIG9mIHRoZSBzcGVjaWZpYyBBbHBoYSBtb2RlbD8KKwllY2hvIGFscGhhLXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgMjEwNjQ6V2luZG93c19OVDo1MDozKQorCWVjaG8gYWxwaGEtZGVjLXdpbm50My41CisJZXhpdCA7OworICAgIEFtaWdhKjpVTklYX1N5c3RlbV9WOjQuMDoqKQorCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0CisJZXhpdCA7OworICAgICo6W0FhXW1pZ2FbT29dW1NzXToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYW1pZ2FvcworCWV4aXQgOzsKKyAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1vcnBob3MKKwlleGl0IDs7CisgICAgKjpPUy8zOTA6KjoqKQorCWVjaG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KKwlleGl0IDs7CisgICAgKjp6L1ZNOio6KikKKwllY2hvIHMzOTAtaWJtLXp2bW9lCisJZXhpdCA7OworICAgICo6T1M0MDA6KjoqKQorICAgICAgICBlY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybTpyaXNjb3M6KjoqfGFybTpSSVNDT1M6KjoqKQorCWVjaG8gYXJtLXVua25vd24tcmlzY29zCisJZXhpdCA7OworICAgIFNSMj8wMTpISS1VWC9NUFA6KjoqIHwgU1I4MDAwOkhJLVVYL01QUDoqOiopCisJZWNobyBocHBhMS4xLWhpdGFjaGktaGl1eG1wcAorCWV4aXQgOzsKKyAgICBQeXJhbWlkKjpPU3gqOio6KiB8IE1JUyo6T1N4KjoqOiogfCBNSVMqOlNNUF9EQy1PU3gqOio6KikKKwkjIGFrZWVAd3BkaXMwMy53cGFmYi5hZi5taWwgKEVhcmxlIEYuIEFrZSkgY29udHJpYnV0ZWQgTUlTIGFuZCBOSUxFLgorCWlmIHRlc3QgImAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgIiA9IGF0dCA7IHRoZW4KKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtc3lzdjMKKwllbHNlCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAorCWZpCisJZXhpdCA7OworICAgIE5JTEUqOio6KjpkY29zeCkKKwllY2hvIHB5cmFtaWQtcHlyYW1pZC1zdnI0CisJZXhpdCA7OworICAgIERSUz82MDAwOnVuaXg6NC4wOjYqKQorCWVjaG8gc3BhcmMtaWNsLW54NgorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDppc2lzOjQuMio6NyopCisJY2FzZSBgL3Vzci9iaW4vdW5hbWUgLXBgIGluCisJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgc3VuNEg6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1oYWwtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBpODZwYzpTdW5PUzo1Lio6KikKKwllY2hvIGkzODYtcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICAqZmFsY29uKjoqTWlOVDoqOiogfCAqZmFsY29uKjoqbWludDoqOiogfCAqZmFsY29uKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKyAgICAgICAgZWNobyBtNjhrLW1pbGFuLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICBoYWRlcyo6Kk1pTlQ6KjoqIHwgaGFkZXMqOiptaW50Oio6KiB8ICpoYWRlcyo6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKjoqTWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay11bmtub3duLW1pbnQke1VOQU1FX1JFTEVBU0V9CisgICAgICAgIGV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorICAgICAgICAjIERHL1VYIHJldHVybnMgQVZpaU9OIGZvciBhbGwgYXJjaGl0ZWN0dXJlcworICAgICAgICBVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWlmIFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMDAgXSB8fCBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTEwIF0KKwl0aGVuCisJICAgIGlmIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0gbTg4a2RndXhlbGZ4IF0gfHwgXAorCSAgICAgICBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IHggXQorCSAgICB0aGVuCisJCWVjaG8gbTg4ay1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCSAgICBlbHNlCisJCWVjaG8gbTg4ay1kZy1kZ3V4YmNzJHtVTkFNRV9SRUxFQVNFfQorCSAgICBmaQorCWVsc2UKKwkgICAgZWNobyBpNTg2LWRnLWRndXgke1VOQU1FX1JFTEVBU0V9CisJZmkKKyAJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1XSkKKwlJQk1fQ1BVX0lEPWAvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSB8IHNlZCAxcSB8IGF3ayAneyBwcmludCAkMSB9J2AKKwlpZiAvdXNyL3NiaW4vbHNhdHRyIC1FbCAke0lCTV9DUFVfSUR9IHwgZ3JlcCAnIFBPV0VSJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJSUJNX0FSQ0g9cnM2MDAwCisJZWxzZQorCQlJQk1fQVJDSD1wb3dlcnBjCisJZmkKKwlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKKwllbHNlCisJCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9CisJZmkKKwllY2hvICR7SUJNX0FSQ0h9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOio6KikKKwllY2hvIHJzNjAwMC1pYm0tYWl4CisJZXhpdCA7OworICAgIGlibXJ0OjQuNEJTRDoqfHJvbXAtaWJtOkJTRDoqKQorCWVjaG8gcm9tcC1pYm0tYnNkNC40CisJZXhpdCA7OworICAgIGlibXJ0OipCU0Q6Knxyb21wLWlibTpCU0Q6KikgICAgICAgICAgICAjIGNvdmVycyBSVC9QQyBCU0QgYW5kCisJZWNobyByb21wLWlibS1ic2Qke1VOQU1FX1JFTEVBU0V9ICAgIyA0LjMgd2l0aCB1bmFtZSBhZGRlZCB0bworCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCisgICAgKjpCT1NYOio6KikKKwllY2hvIHJzNjAwMC1idWxsLWJvc3gKKwlleGl0IDs7CisgICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKKwllY2hvIG02OGstYnVsbC1zeXN2MworCWV4aXQgOzsKKyAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCisJZWNobyBtNjhrLWhwLWJzZAorCWV4aXQgOzsKKyAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2Q0LjQKKwlleGl0IDs7CisgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OworCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7CisJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQorCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgorCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKKyAgICAgICAgICAgICAgICAgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKKyAgICAgICAgICAgICAgICAgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorICAgICAgICAgICAgICAgICAgICAgICAgZXNhYyA7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisJCWZpCisJCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgorCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQkgICAgc2VkICdzL14gICAgICAgICAgICAgIC8vJyA8PCBFT0YgPiRkdW1teS5jCisKKyAgICAgICAgICAgICAgI2RlZmluZSBfSFBVWF9TT1VSQ0UKKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyAgICAgICAgICAgICAgaW50IG1haW4gKCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgICAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgbG9uZyBjcHUgID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKworICAgICAgICAgICAgICAgICAgc3dpdGNoIChjcHUpCisgICAgICAgICAgICAgIAl7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzJfMDoKKyAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorICAgICAgICAgICAgICAJICAgIHN3aXRjaCAoYml0cykKKyAgICAgICAgICAgICAgCQl7CisgICAgICAgICAgICAgIAkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOworICAgICAgICAgICAgICAJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQlkZWZhdWx0OiBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQl9IGJyZWFrOworICAgICAgICAgICAgICAjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLworICAgICAgICAgICAgICAJICAgIHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgICAgICAgIH0KK0VPRgorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKKwkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKKwkJZmkgOzsKKwllc2FjCisJaWYgWyAke0hQX0FSQ0h9ID0gImhwcGEyLjB3IiBdCisJdGhlbgorCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisKKwkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKKwkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCisJICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6CisJICAgICMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMworCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcworCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKKworCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8CisJCWdyZXAgX19MUDY0X18gPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCUhQX0FSQ0g9ImhwcGEyLjB3IgorCSAgICBlbHNlCisJCUhQX0FSQ0g9ImhwcGE2NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtIUF9BUkNIfS1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgaWE2NDpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJZWNobyBpYTY0LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICAzMDUwKjpISS1VWDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCWludAorCW1haW4gKCkKKwl7CisJICBsb25nIGNwdSA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisJICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVzZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucworCSAgICAgdHJ1ZSBmb3IgQ1BVX1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKKwkgICAgIHJlc3VsdHMsIGhvd2V2ZXIuICAqLworCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChjcHUpCisJCXsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQorCSAgICBwdXRzICgibTY4ay1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4d2UyIik7CisJICBleGl0ICgwKTsKKwl9CitFT0YKKwkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YCAmJgorCQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKwllY2hvIHVua25vd24taGl0YWNoaS1oaXV4d2UyCisJZXhpdCA7OworICAgIDkwMDAvNz8/OjQuM2JzZDoqOiogfCA5MDAwLzg/Wzc5XTo0LjNic2Q6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtYnNkCisJZXhpdCA7OworICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCisJZWNobyBocHBhMS4wLWhwLWJzZAorCWV4aXQgOzsKKyAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMwMDAqOk1QRS9pWDoqOiopCisJZWNobyBocHBhMS4wLWhwLW1wZWl4CisJZXhpdCA7OworICAgIGhwNz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1vc2YKKwlleGl0IDs7CisgICAgaHA4Pz86T1NGMToqOiopCisJZWNobyBocHBhMS4wLWhwLW9zZgorCWV4aXQgOzsKKyAgICBpKjg2Ok9TRjE6KjoqKQorCWlmIFsgLXggL3Vzci9zYmluL3N5c3ZlcnNpb24gXSA7IHRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMW1rCisJZWxzZQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxCisJZmkKKwlleGl0IDs7CisgICAgcGFyaXNjKjpMaXRlcyo6KjoqKQorCWVjaG8gaHBwYTEuMS1ocC1saXRlcworCWV4aXQgOzsKKyAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQorCWVjaG8gYzEtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzIqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMio6KikKKwlpZiBnZXRzeXNpbmZvIC1mIHNjYWxhcl9hY2MKKwl0aGVuIGVjaG8gYzMyLWNvbnZleC1ic2QKKwllbHNlIGVjaG8gYzItY29udmV4LWJzZAorCWZpCisgICAgICAgIGV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM4KjoqKQorCWVjaG8gYzM4LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzQqOiopCisJZWNobyBjNC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKyAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy8gL18vJ2AKKyAgICAgICAgZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKyAgICAgICAgZXhpdCA7OworICAgIDUwMDA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorICAgICAgICBlY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisJZXhpdCA7OworICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBzcGFyYyo6QlNEL09TOio6KikKKwllY2hvIHNwYXJjLXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpCU0QvT1M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RnJlZUJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgaSo6Q1lHV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KKwlleGl0IDs7CisgICAgaSo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorICAgIAkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICB4ODY6SW50ZXJpeCo6WzM0XSopCisJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9cLi4qLy8nCisJZXhpdCA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICBpKjpXaW5kb3dzX05UKjoqIHwgUGVudGl1bSo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBJdCBhbHNvIGNvbmZsaWN0cyB3aXRoIHByZS0yLjAgdmVyc2lvbnMgb2YgQVQmVCBVV0lOLiBTaG91bGQgd2UKKwkjIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkIG9mIGkzODY/CisJZWNobyBpNTg2LXBjLWludGVyaXgKKwlleGl0IDs7CisgICAgaSo6VVdJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtdXdpbgorCWV4aXQgOzsKKyAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWV4aXQgOzsKKyAgICBwKjpDWUdXSU4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcHJlcCo6U3VuT1M6NS4qOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICAqOkdOVToqOiopCisJIyB0aGUgR05VIHN5c3RlbQorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi1nbnVgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWV4aXQgOzsKKyAgICAqOkdOVS8qOio6KikKKwkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLWdudQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYXJtKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gY3Jpcy1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvIGNyaXN2MzItYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKyAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaWE2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgbWlwcworCSN1bmRlZiBtaXBzZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPW1pcHMKKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwIF5DUFU9YAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgbWlwczY0CisJI3VuZGVmIG1pcHM2NGVsCisJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKwlDUFU9bWlwczY0ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPW1pcHM2NAorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgXkNQVT1gCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwk7OworICAgIG9yMzI6TGludXg6KjoqKQorCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgYWxwaGE6TGludXg6KjoqKQorCWNhc2UgYHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyA8IC9wcm9jL2NwdWluZm9gIGluCisJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OworCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CisJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBQQ0E1NykgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CisJICBFVjYpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NiA7OworCSAgRVY2NykgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY3IDs7CisJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKKyAgICAgICAgZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgbGQuc28uMSA+L2Rldi9udWxsCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LWdudSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKwlleGl0IDs7CisgICAgc2g2NCo6TGludXg6KjoqKQorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc2gqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJIyBUaGUgQkZEIGxpbmtlciBrbm93cyB3aGF0IHRoZSBkZWZhdWx0IG9iamVjdCBmaWxlIGZvcm1hdCBpcywgc28KKwkjIGZpcnN0IHNlZSBpZiBpdCB3aWxsIHRlbGwgdXMuIGNkIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmV2ZW50CisJIyBwcm9ibGVtcyB3aXRoIG90aGVyIHByb2dyYW1zIG9yIGRpcmVjdG9yaWVzIGNhbGxlZCBgbGQnIGluIHRoZSBwYXRoLgorCSMgU2V0IExDX0FMTD1DIHRvIGVuc3VyZSBsZCBvdXRwdXRzIG1lc3NhZ2VzIGluIEVuZ2xpc2guCisJbGRfc3VwcG9ydGVkX3RhcmdldHM9YGNkIC87IExDX0FMTD1DIGxkIC0taGVscCAyPiYxIFwKKwkJCSB8IHNlZCAtbmUgJy9zdXBwb3J0ZWQgdGFyZ2V0czovIWQKKwkJCQkgICAgcy9bIAldWyAJXSovIC9nCisJCQkJICAgIHMvLipzdXBwb3J0ZWQgdGFyZ2V0czogKi8vCisJCQkJICAgIHMvIC4qLy8KKwkJCQkgICAgcCdgCisgICAgICAgIGNhc2UgIiRsZF9zdXBwb3J0ZWRfdGFyZ2V0cyIgaW4KKwkgIGVsZjMyLWkzODYpCisJCVRFTlRBVElWRT0iJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnUiCisJCTs7CisJICBhLm91dC1pMzg2LWxpbnV4KQorCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWFvdXQiCisJCWV4aXQgOzsKKwkgIGNvZmYtaTM4NikKKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVjb2ZmIgorCQlleGl0IDs7CisJICAiIikKKwkJIyBFaXRoZXIgYSBwcmUtQkZEIGEub3V0IGxpbmtlciAobGludXgtZ251b2xkbGQpIG9yCisJCSMgb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgorCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudW9sZGxkIgorCQlleGl0IDs7CisJZXNhYworCSMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRlZmF1bHQgY29tcGlsZXIgaXMgYS5vdXQgb3IgZWxmCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmZGVmIF9fRUxGX18KKwkjIGlmZGVmIF9fR0xJQkNfXworCSMgIGlmIF9fR0xJQkNfXyA+PSAyCisJTElCQz1nbnUKKwkjICBlbHNlCisJTElCQz1nbnVsaWJjMQorCSMgIGVuZGlmCisJIyBlbHNlCisJTElCQz1nbnVsaWJjMQorCSMgZW5kaWYKKwkjZWxzZQorCSNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisJTElCQz1nbnUKKwkjZWxzZQorCUxJQkM9Z251YW91dAorCSNlbmRpZgorCSNlbmRpZgorCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCBeTElCQz1gCisJdGVzdCB4IiR7TElCQ30iICE9IHggJiYgeworCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJCWV4aXQKKwl9CisJdGVzdCB4IiR7VEVOVEFUSVZFfSIgIT0geCAmJiB7IGVjaG8gIiR7VEVOVEFUSVZFfSI7IGV4aXQ7IH0KKwk7OworICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCisJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KKwkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCisJIyBzeXNuYW1lIGFuZCBub2RlbmFtZS4KKwllY2hvIGkzODYtc2VxdWVudC1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlVOSVhfU1Y6NC4yTVA6Mi4qKQorICAgICAgICAjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisgICAgICAgICMgbnVtYmVyIHNlcmllcyBzdGFydGluZyB3aXRoIDIuLi4KKyAgICAgICAgIyBJIGFtIG5vdCBwb3NpdGl2ZSB0aGF0IG90aGVyIFNWUjQgc3lzdGVtcyB3b24ndCBtYXRjaCB0aGlzLAorCSMgSSBqdXN0IGhhdmUgdG8gaG9wZS4gIC0tIHJtcy4KKyAgICAgICAgIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuMCo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKKwlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQorCWZpCisJZXhpdCA7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKyAgICAJIyBVbml4V2FyZSA3LngsIE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCisJY2FzZSBgL2Jpbi91bmFtZSAtWCB8IGdyZXAgIl5NYWNoaW5lImAgaW4KKwkgICAgKjQ4NiopCSAgICAgVU5BTUVfTUFDSElORT1pNDg2IDs7CisJICAgICpQZW50aXVtKQkgICAgIFVOQU1FX01BQ0hJTkU9aTU4NiA7OworCSAgICAqUGVudCp8KkNlbGVyb24pIFVOQU1FX01BQ0hJTkU9aTY4NiA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjoqOjMuMjoqKQorCWlmIHRlc3QgLWYgL3Vzci9vcHRpb25zL2NiLm5hbWU7IHRoZW4KKwkJVU5BTUVfUkVMPWBzZWQgLW4gJ3MvLipWZXJzaW9uIC8vcCcgPC91c3Ivb3B0aW9ucy9jYi5uYW1lYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtaXNjJFVOQU1FX1JFTAorCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCisJCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYmIFVOQU1FX01BQ0hJTkU9aTQ4NgorCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVudGl1bScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtIFBybycgPi9kZXYvbnVsbCkgXAorCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2CisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zY28kVU5BTUVfUkVMCisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjMyCisJZmkKKwlleGl0IDs7CisgICAgcGM6KjoqOiopCisJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CisgICAgICAgICMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0CisgICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGkzODYuCisJZWNobyBpMzg2LXBjLW1zZG9zZGpncHAKKyAgICAgICAgZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwllY2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKyAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisgICAgICAgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJZWNobyBtNjhrLWF0YXJpLXN5c3Y0CisJZXhpdCA7OworICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC4wKjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU01bQkVdUzpVTklYX1NWOio6KikKKwllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgIFJNKjpTSU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAorCWVsc2UKKwkJZWNobyBuczMyay1zbmktc3lzdgorCWZpCisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopICMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisgICAgICAgICAgICAgICAgICAgICAgIyBzYXlzIDxSaWNoYXJkLk0uQmFydGVsQGNjTWFpbC5DZW5zdXMuR09WPgorICAgICAgICBlY2hvIGk1ODYtdW5pc3lzLXN5c3Y0CisgICAgICAgIGV4aXQgOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjoqOio6RlRYKikKKwkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KKwllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgICo6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCWVjaG8gbWlwcy1zb255LW5ld3NvczYKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCisJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCisJICAgICAgICBlY2hvIG1pcHMtbmVjLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZWxzZQorCSAgICAgICAgZWNobyBtaXBzLXVua25vd24tc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorICAgICAgICBleGl0IDs7CisgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1iZS1iZW9zCisJZXhpdCA7OworICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYXBwbGUtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1iZW9zCisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RGFyd2luOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICAqODYpIFVOQU1FX1BST0NFU1NPUj1pNjg2IDs7CisJICAgIHVua25vd24pIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjIDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9ICJ4ODYiOyB0aGVuCisJCVVOQU1FX1BST0NFU1NPUj1pMzg2CisJCVVOQU1FX01BQ0hJTkU9cGMKKwlmaQorCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LSR7VU5BTUVfTUFDSElORX0tbnRvLXFueCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpRTlg6Kjo0KikKKwllY2hvIGkzODYtcGMtcW54CisJZXhpdCA7OworICAgIE5TRS0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zZS10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBOU1ItPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc3ItdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpOb25TdG9wLVVYOio6KikKKwllY2hvIG1pcHMtY29tcGFxLW5vbnN0b3B1eAorCWV4aXQgOzsKKyAgICBCUzIwMDA6UE9TSVgqOio6KikKKwllY2hvIGJzMjAwMC1zaWVtZW5zLXN5c3YKKwlleGl0IDs7CisgICAgRFMvKjpVTklYX1N5c3RlbV9WOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tJHtVTkFNRV9TWVNURU19LSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpQbGFuOToqOiopCisJIyAidW5hbWUgLW0iIGlzIG5vdCBjb25zaXN0ZW50LCBzbyB1c2UgJGNwdXR5cGUgaW5zdGVhZC4gMzg2CisJIyBpcyBjb252ZXJ0ZWQgdG8gaTM4NiBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciB4ODYKKwkjIG9wZXJhdGluZyBzeXN0ZW1zLgorCWlmIHRlc3QgIiRjcHV0eXBlIiA9ICIzODYiOyB0aGVuCisJICAgIFVOQU1FX01BQ0hJTkU9aTM4NgorCWVsc2UKKwkgICAgVU5BTUVfTUFDSElORT0iJGNwdXR5cGUiCisJZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1wbGFuOQorCWV4aXQgOzsKKyAgICAqOlRPUFMtMTA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMTAKKwlleGl0IDs7CisgICAgKjpURU5FWDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRlbmV4CisJZXhpdCA7OworICAgIEtTMTA6VE9QUy0yMDoqOiogfCBLTDEwOlRPUFMtMjA6KjoqIHwgVFlQRTQ6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC1kZWMtdG9wczIwCisJZXhpdCA7OworICAgIFhLTC0xOlRPUFMtMjA6KjoqIHwgVFlQRTU6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC14a2wtdG9wczIwCisJZXhpdCA7OworICAgICo6VE9QUy0yMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOklUUzoqOiopCisJZWNobyBwZHAxMC11bmtub3duLWl0cworCWV4aXQgOzsKKyAgICBTRUk6KjoqOlNFSVVYKQorICAgICAgICBlY2hvIG1pcHMtc2VpLXNlaXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRyYWdvbkZseToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZHJhZ29uZmx5YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYAorCWV4aXQgOzsKKyAgICAqOipWTVM6KjoqKQorICAgIAlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworZXNhYworCisjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKyNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorICAgICAgICAgICI0IgorI2Vsc2UKKwkgICIiCisjZW5kaWYKKyAgICAgICAgICk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuZ3Vlc3MKK2FuZAorICBodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9jZ2ktYmluL3ZpZXdjdnMvKmNoZWNrb3V0Ki9jb25maWcvY29uZmlnL2NvbmZpZy5zdWIKKworSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCitzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQorcGVydGluZW50IHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPiBpbiBvcmRlciB0byBwcm92aWRlIHRoZSBuZWVkZWQKK2luZm9ybWF0aW9uIHRvIGhhbmRsZSB5b3VyIHN5c3RlbS4KKworY29uZmlnLmd1ZXNzIHRpbWVzdGFtcCA9ICR0aW1lc3RhbXAKKwordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCisKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGxgCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGxgCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbGAKKworVU5BTUVfTUFDSElORSA9ICR7VU5BTUVfTUFDSElORX0KK1VOQU1FX1JFTEVBU0UgPSAke1VOQU1FX1JFTEVBU0V9CitVTkFNRV9TWVNURU0gID0gJHtVTkFNRV9TWVNURU19CitVTkFNRV9WRVJTSU9OID0gJHtVTkFNRV9WRVJTSU9OfQorRU9GCisKK2V4aXQgMQorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2NvbmZpZy5oLmluIGIvbmV0cGVyZi0yLjQuNS9jb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjk2ZTFmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9jb25maWcuaC5pbgpAQCAtMCwwICsxLDM4NCBAQAorLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSB0byBvbmUgdG8gZW5hYmxlIGRpcnR5IGJ1ZmZlciBzdXBwb3J0LiBNYXkgYWZmZWN0IHJlc3VsdHMuICovCisjdW5kZWYgRElSVFkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BTEFSTQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFycGEvaW5ldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0FSUEFfSU5FVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmluZHByb2Nlc3NvcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9CSU5EUFJPQ0VTU09SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmluZF90b19jcHVfaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQklORF9UT19DUFVfSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiemVybycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9CWkVSTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VORElBTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FUlJOT19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9GQ05UTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GT1JLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0YWRkcmluZm8nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUQUREUklORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0YnluYW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRocnRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSFJUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aWZhZGRycycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRJRkFERFJTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0bmFtZWluZm8nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUTkFNRUlORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwYWdlc2l6ZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRQQUdFU0laRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKworLyogRGVmaW5lIHRvIG9uZSB0byBpbmNsdWRlIElDU0MtRVhTIHRlc3RzLiAqLworI3VuZGVmIEhBVkVfSUNTQ19FWFMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpZmFkZHJzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSUZBRERSU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9udG9hJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfTlRPQQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluZXRfbnRvcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX05UT1AKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkZXZpbmZvJyBsaWJyYXJ5ICgtbGRldmluZm8pLiAqLworI3VuZGVmIEhBVkVfTElCREVWSU5GTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsJyBsaWJyYXJ5ICgtbGRsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQkRMCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhzJyBsaWJyYXJ5ICgtbGV4cykuICovCisjdW5kZWYgSEFWRV9MSUJFWFMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrc3RhdCcgbGlicmFyeSAoLWxrc3RhdCkuICovCisjdW5kZWYgSEFWRV9MSUJLU1RBVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG0nIGxpYnJhcnkgKC1sbSkuICovCisjdW5kZWYgSEFWRV9MSUJNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWFjaCcgbGlicmFyeSAoLWxtYWNoKS4gKi8KKyN1bmRlZiBIQVZFX0xJQk1BQ0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBuc2wnIGxpYnJhcnkgKC1sbnNsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQk5TTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBlcmZzdGF0JyBsaWJyYXJ5ICgtbHBlcmZzdGF0KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlBFUkZTVEFUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2N0cCcgbGlicmFyeSAoLWxzY3RwKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNDVFAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZHAnIGxpYnJhcnkgKC1sc2RwKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNEUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbmRmaWxlJyBsaWJyYXJ5ICgtbHNlbmRmaWxlKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNFTkRGSUxFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc21iaW9zJyBsaWJyYXJ5ICgtbHNtYmlvcykuICovCisjdW5kZWYgSEFWRV9MSUJTTUJJT1MKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGxpYnJhcnkgKC1sc29ja2V0KS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTUlUU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUFMTE9DX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1jcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNQ1BZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1zZXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNU0VUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgd29ya2luZyBgbW1hcCcgc3lzdGVtIGNhbGwuICovCisjdW5kZWYgSEFWRV9NTUFQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXBjdGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTVBDVEwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtdW5tYXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTVVOTUFQCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0ZGIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVREQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfSU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvc2N0cC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfU0NUUF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHJvY2Vzc29yX2JpbmQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFJPQ0VTU09SX0JJTkQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzY2hlZF9zZXRhZmZpbml0eScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TQ0hFRF9TRVRBRkZJTklUWQorCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlJyBoYXMgYQorICAgYHNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudCcgbWVtYmVyICovCisjdW5kZWYgSEFWRV9TQ1RQX0FEQVBUQVRJT05fTEFZRVJfRVZFTlQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZWxlY3QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VMRUNUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VuZGZpbGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VOREZJTEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TSUdOQUxfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNtYmlvcy9TeXN0ZW1JbmZvLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU01CSU9TX1NZU1RFTUlORk9fSAorCisvKiBEZWZpbmUgaWYgc3RydWN0IHNvY2thZGRyIGhhcyB0aGUgc2FfbGVuIG1lbWJlciAqLworI3VuZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NPQ0tFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNxcnQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1FSVAorCisvKiBEZWZpbmUgdG8gMSBpZiBzdGRib29sLmggY29uZm9ybXMgdG8gQzk5LiAqLworI3VuZGVmIEhBVkVfU1REQk9PTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RESU5UX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERMSUJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VjbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0FTRUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNocicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJDSFIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJzdHInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSU1RSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJUT1VMCisKKy8qIERlZmluZSB0byAxIGlmIDxuZXRpbmV0L2luLmg+IGRlZmluZXMgYHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlJyAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfSU9DVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tbWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX01NQU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QQVJBTV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NibWlvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TQk1JT1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU0VMRUNUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc21iaW9zLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NNQklPU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLRVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NraW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU09DS0lPX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19USU1FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8c3lzL3dhaXQuaD4gdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuICovCisjdW5kZWYgSEFWRV9TWVNfV0FJVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZmb3JrJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1ZGT1JLCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dmZvcmsuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9WRk9SS19ICisKKy8qIERlZmluZSB0byAxIGlmIGBmb3JrJyB3b3Jrcy4gKi8KKyN1bmRlZiBIQVZFX1dPUktJTkdfRk9SSworCisvKiBEZWZpbmUgdG8gMSBpZiBgdmZvcmsnIHdvcmtzLiAqLworI3VuZGVmIEhBVkVfV09SS0lOR19WRk9SSworCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgX0Jvb2wnLiAqLworI3VuZGVmIEhBVkVfX0JPT0wKKworLyogRGVmaW5lIHRvIDEgaWYgYGhfZXJybm8nIGlzIGRlY2xhcmVkIGJ5IDxuZXRkYi5oPiAqLworI3VuZGVmIEhfRVJSTk9fREVDTEFSRUQKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjdW5kZWYgUEFDS0FHRQorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORworCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisKKy8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLworI3VuZGVmIFJFVFNJR1RZUEUKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyAxIGZvciBgc2VsZWN0Jy4gKi8KKyN1bmRlZiBTRUxFQ1RfVFlQRV9BUkcxCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmdzIDIsIDMgYW5kIDQgZm9yIGBzZWxlY3QnLiAqLworI3VuZGVmIFNFTEVDVF9UWVBFX0FSRzIzNAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDUgZm9yIGBzZWxlY3QnLiAqLworI3VuZGVmIFNFTEVDVF9UWVBFX0FSRzUKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIGBzZXRwZ3JwJyBmdW5jdGlvbiB0YWtlcyBubyBhcmd1bWVudC4gKi8KKyN1bmRlZiBTRVRQR1JQX1ZPSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorCisvKiBVc2UgU29sYXJpcydzIGtzdGF0IGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLiAqLworI3VuZGVmIFVTRV9LU1RBVAorCisvKiBVc2UgbG9vcGVyL3NvYWtlciBwcm9jZXNzZXMgdG8gbWVhc3VyZSBDUFUgdXRpbC4gKi8KKyN1bmRlZiBVU0VfTE9PUEVSCisKKy8qIFVzZSBNYWNPUyBYJ3MgaG9zdF9pbmZvIGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLiAqLworI3VuZGVmIFVTRV9PU1gKKworLyogVXNlIEFJWCdzIHBlcmZzdGF0IGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLiAqLworI3VuZGVmIFVTRV9QRVJGU1RBVAorCisvKiBVc2UgTGludXgncyBwcm9jc3RhdCBpbnRlcmZhY2UgdG8gbWVhc3VyZSBDUFUgdXRpbC4gKi8KKyN1bmRlZiBVU0VfUFJPQ19TVEFUCisKKy8qIFVzZSBIUC1VWCdzIHBzdGF0IGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLiAqLworI3VuZGVmIFVTRV9QU1RBVAorCisvKiBVc2UgTXVtYmxlQlNEJ3Mgc3lzY3RsIGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLiAqLworI3VuZGVmIFVTRV9TWVNDVEwKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI3VuZGVmIFZFUlNJT04KKworLyogRGVmaW5lIHRvIG9uZSB0byBpbmNsdWRlIERDQ1AgdGVzdHMuICovCisjdW5kZWYgV0FOVF9EQ0NQCisKKy8qIERlZmluZSB0byBvbmUgdG8gZW5hYmxlIGRlbW8gc3VwcG9ydC4gTWF5IGFmZmVjdCByZXN1bHRzLiAqLworI3VuZGVmIFdBTlRfREVNTworCisvKiBEZWZpbmUgdG8gb25lIHRvIGluY2x1ZGUgRExQSSB0ZXN0cy4gKi8KKyN1bmRlZiBXQU5UX0RMUEkKKworLyogRGVmaW5lIHRvIG9uZSB0byBlbmFibGUgaW5pdGlhbCBfUlIgYnVyc3Qgc3VwcG9ydC4gTWF5IGFmZmVjdCByZXN1bHRzLiAqLworI3VuZGVmIFdBTlRfRklSU1RfQlVSU1QKKworLyogRGVmaW5lIHRvIG9uZSB0byBlbmFibGUgaGlzdG9ncmFtIHN1cHBvcnQuIE1heSBhZmZlY3QgcmVzdWx0cy4gKi8KKyN1bmRlZiBXQU5UX0hJU1RPR1JBTQorCisvKiBEZWZpbmUgdG8gb25lIHRvIGVuYWJsZSBwYWNlZCBvcGVyYXRpb24gc3VwcG9ydC4gTWF5IGFmZmVjdCByZXN1bHRzLiAqLworI3VuZGVmIFdBTlRfSU5URVJWQUxTCisKKy8qIERlZmluZSB0byBvbmUgdG8gaW5jbHVkZSBPTU5JIHRlc3RzLiAqLworI3VuZGVmIFdBTlRfT01OSQorCisvKiBEZWZpbmUgdG8gb25lIHRvIGluY2x1ZGUgU0NUUCB0ZXN0cy4gKi8KKyN1bmRlZiBXQU5UX1NDVFAKKworLyogRGVmaW5lIHRvIG9uZSB0byBpbmNsdWRlIFNEUCB0ZXN0cy4gKi8KKyN1bmRlZiBXQU5UX1NEUAorCisvKiBEZWZpbmUgdG8gb25lIHRvIHNwaW4gd2FpdGluZyBvbiBwYWNlZCBvcGVyYXRpb24uIFdJTEwgQUZGRUZDVCBDUFUKKyAgIFVUSUxJWkFUSU9OICovCisjdW5kZWYgV0FOVF9TUElOCisKKy8qIERlZmluZSB0byBvbmUgdG8gaW5jbHVkZSBVbml4IERvbWFpbiBzb2NrZXQgdGVzdHMuICovCisjdW5kZWYgV0FOVF9VTklYCisKKy8qIERlZmluZSB0byBvbmUgdG8gaW5jbHVkZSBYVEkgdGVzdHMuICovCisjdW5kZWYgV0FOVF9YVEkKKworLyogTnVtYmVyIG9mIGJpdHMgaW4gYSBmaWxlIG9mZnNldCwgb24gaG9zdHMgd2hlcmUgdGhpcyBpcyBzZXR0YWJsZS4gKi8KKyN1bmRlZiBfRklMRV9PRkZTRVRfQklUUworCisvKiBEZWZpbmUgZm9yIGxhcmdlIGZpbGVzLCBvbiBBSVgtc3R5bGUgaG9zdHMuICovCisjdW5kZWYgX0xBUkdFX0ZJTEVTCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZCAqLworI3VuZGVmIG5ldHBlcmZfc29ja2xlbl90CisKKy8qIERlZmluZSB0byBgbG9uZyBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIG9mZl90CisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBwaWRfdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc2l6ZV90CisKKy8qIERlZmluZSBhcyBgZm9yaycgaWYgYHZmb3JrJyBkb2VzIG5vdCB3b3JrLiAqLworI3VuZGVmIHZmb3JrCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2NvbmZpZy5zdWIgYi9uZXRwZXJmLTIuNC41L2NvbmZpZy5zdWIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWMzNjZkZgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvY29uZmlnLnN1YgpAQCAtMCwwICsxLDE1NzkgQEAKKyMhIC9iaW4vc2gKKyMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgorIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDUtMDctMDgnCisKKyMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgorIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCisjIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwgXAorICBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgb3M9LSRtYXliZV9vcworICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgOzsKKyAgKikKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzLy1bXi1dKiQvLydgCisgICAgaWYgWyAkYmFzaWNfbWFjaGluZSAhPSAkMSBdCisgICAgdGhlbiBvcz1gZWNobyAkMSB8IHNlZCAncy8uKi0vLS8nYAorICAgIGVsc2Ugb3M9OyBmaQorICAgIDs7Citlc2FjCisKKyMjIyBMZXQncyByZWNvZ25pemUgY29tbW9uIG1hY2hpbmVzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcyBzbworIyMjIHRoYXQgdGhpbmdzIGxpa2UgY29uZmlnLnN1YiBkZWNzdGF0aW9uLTMxMDAgd29yay4gIFdlIGFsc28KKyMjIyByZWNvZ25pemUgc29tZSBtYW51ZmFjdHVyZXJzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcywgc28gd2UKKyMjIyBjYW4gcHJvdmlkZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIGJlbG93LgorY2FzZSAkb3MgaW4KKwktc3VuKm9zKikKKwkJIyBQcmV2ZW50IGZvbGxvd2luZyBjbGF1c2UgZnJvbSBoYW5kbGluZyB0aGlzIGludmFsaWQgaW5wdXQuCisJCTs7CisJLWRlYyogfCAtbWlwcyogfCAtc2VxdWVudCogfCAtZW5jb3JlKiB8IC1wYzUzMiogfCAtc2dpKiB8IC1zb255KiB8IFwKKwktYXR0KiB8IC03MzAwKiB8IC0zMzAwKiB8IC1kZWx0YSogfCAtbW90b3JvbGEqIHwgLXN1blsyMzRdKiB8IFwKKwktdW5pY29tKiB8IC1pYm0qIHwgLW5leHQgfCAtaHAgfCAtaXNpKiB8IC1hcG9sbG8gfCAtYWx0b3MqIHwgXAorCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCisJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKKwktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5KQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zY291dCkKKwkJOzsKKwktd3JzKQorCQlvcz0tdnh3b3JrcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c29zKikKKwkJb3M9LWNob3J1c29zCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKyAJLWNob3J1c3JkYikKKyAJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorIAkJOzsKKwktaGl1eCopCisJCW9zPS1oaXV4d2UyCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbyopCisJCW9zPS1zY28zLjJ2MgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXVkayopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktaXNjKQorCQlvcz0taXNjMi4yCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktY2xpeCopCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCisJCTs7CisJLWlzYyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktbHlueCopCisJCW9zPS1seW54b3MKKwkJOzsKKwktcHR4KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCisJCTs7CisJLXdpbmRvd3NudCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKKwkJOzsKKwktcHNvcyopCisJCW9zPS1wc29zCisJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7Citlc2FjCisKKyMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzIzNDVdIHwgYXJtdlszNDVdW2xiXSB8IGF2ciBcCisJfCBiZmluIFwKKwl8IGM0eCB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgfCBtYXhxIHwgbWNvcmUgXAorCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJfCBtaXBzMTYgXAorCXwgbWlwczY0IHwgbWlwczY0ZWwgXAorCXwgbWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKKwl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTY0IHwgbWlwc2lzYTY0ZWwgXAorCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRyMmVsIFwKKwl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCisJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbXMxIFwKKwl8IG1zcDQzMCBcCisJfCBuczE2ayB8IG5zMzJrIFwKKwl8IG9yMzIgXAorCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKKwl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSB8IHBwY2JlIFwKKwl8IHB5cmFtaWQgXAorCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAorCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiBcCisJfCBzdHJvbmdhcm0gXAorCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljODAgfCB0cm9uIFwKKwl8IHY4NTAgfCB2ODUwZSBcCisJfCB3ZTMyayBcCisJfCB4ODYgfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGspCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCW0zMmMpCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMikKKwkJIyBNb3Rvcm9sYSA2OEhDMTEvMTIuCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAorCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAorCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCisJfCBhdnItKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiB8IGM1NHgtKiB8IGM1NXgtKiB8IGM2eC0qIFwKKwl8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisJfCBlbHhzaS0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGg4MzAwLSogfCBoODUwMC0qIFwKKwl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAorCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiBcCisJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCisJfCBtaXBzMTYtKiBcCisJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAorCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCisJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAorCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKKwl8IG1taXgtKiBcCisJfCBtczEtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKKwl8IG9yaW9uLSogXAorCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCisJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiB8IHBwY2JlLSogXAorCXwgcHlyYW1pZC0qIFwKKwl8IHJvbXAtKiB8IHJzNjAwMC0qIFwKKwl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoYmUtKiBcCisJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKKwl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM4NngtKiB8IHNwYXJjbGV0LSogXAorCXwgc3BhcmNsaXRlLSogXAorCXwgc3BhcmN2OC0qIHwgc3BhcmN2OS0qIHwgc3BhcmN2OWItKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIHwgdGh1bWItKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0cm9uLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKKwl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhLSogXAorCXwgeW1wLSogXAorCXwgejhrLSopCisJCTs7CisJbTMyYy0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisgICAgCWFiYWN1cykKKwkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgorCQk7OworCWFkb2JlNjhrKQorCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQorCQlvcz0tc2NvdXQKKwkJOzsKKwlhbGxpYW50IHwgZng4MCkKKwkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKKwkJOzsKKwlhbHRvcyB8IGFsdG9zMzA2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCisJCTs7CisJYW0yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCisJCW9zPS1ic2QKKwkJOzsKKwlhbWQ2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJOzsKKwlhbWQ2NC0qKQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWFtZGFobCkKKwkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCisJCW9zPS1zeXN2CisJCTs7CisJYW1pZ2EgfCBhbWlnYS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQk7OworCWFtaWdhb3MgfCBhbWlnYWRvcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwlhbWlnYXVuaXggfCBhbWl4KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tc3lzdjQKKwkJOzsKKwlhcG9sbG82OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tc3lzdgorCQk7OworCWFwb2xsbzY4YnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1ic2QKKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWM5MCkKKwkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTZjKQorCQliYXNpY19tYWNoaW5lPWNyMTZjLXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWNyZHMgfCB1bm9zKQorCQliYXNpY19tYWNoaW5lPW02OGstY3JkcworCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJZGEzMCB8IGRhMzAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJOzsKKwlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKKwlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAorCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQorCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKKwkJOzsKKwlkZWx0YTg4KQorCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKKwkJb3M9LXN5c3YzCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworIyBJJ20gbm90IHN1cmUgd2hhdCAiU3lzdjMyIiBtZWFucy4gIFNob3VsZCB0aGlzIGJlIHN5c3YzLjI/CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXZzKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCW9zPS1tdnMKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGJkKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXR0aQorCQk7OworCXBiYikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXR0aQorCQk7OworCXBjNTMyIHwgcGM1MzItKikKKwkJYmFzaWNfbWFjaGluZT1uczMyay1wYzUzMgorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKikJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcm9tNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJcm1bNDZdMDApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zaWVtZW5zCisJCTs7CisJcnRwYyB8IHJ0cGMtKikKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCXMzOTAgfCBzMzkwLSopCisJCWJhc2ljX21hY2hpbmU9czM5MC1pYm0KKwkJOzsKKwlzMzkweCB8IHMzOTB4LSopCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCTs7CisJc2EyOTIwMCkKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJc2IxKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMS11bmtub3duCisJCTs7CisJc2IxZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgorCQk7OworCXNlaSkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNlaQorCQlvcz0tc2VpdXgKKwkJOzsKKwlzZXF1ZW50KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQk7OworCXNoKQorCQliYXNpY19tYWNoaW5lPXNoLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWM1NHggfCBjNTR4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eCB8IGM1NXgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNnggfCBjNngqKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0eDM5KQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KKwkJOzsKKwl0eDM5ZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCisJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CisJdWRpMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwl1bHRyYTMpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ueXUKKwkJb3M9LXN5bTEKKwkJOzsKKwl2ODEwIHwgbmVjdjgxMCkKKwkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQlvcz0tbm9uZQorCQk7OworCXZheHYpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tc3lzdgorCQk7OworCXZtcykKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS12bXMKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CisJdnh3b3Jrczk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3M2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3MyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl3NjUqKQorCQliYXNpY19tYWNoaW5lPXc2NS13ZGMKKwkJb3M9LW5vbmUKKwkJOzsKKwl3ODlrLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCW9zPS1wcm9lbGYKKwkJOzsKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwl4cHMgfCB4cHMxMDApCisJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAorCQk7OworCXltcCkKKwkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJejhrLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJbm9uZSkKKwkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKKwkJb3M9LW5vbmUKKwkJOzsKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCXJvbXApCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKKwlyczYwMDApCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCQk7OworCXZheCkKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CisJcGRwMTEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCisJCTs7CisJd2UzMmspCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorICAgICAgICAjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworICAgICAgICAjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgorCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLXNvbGFyaXMqIHwgLXN5bSogXAorCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAorCSAgICAgIHwgLWFvcyogXAorCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCisJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogfCAtb3BlbmJzZCogXAorCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAorCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKKwkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCisJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisJICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LXVjbGliYyogfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorCSAgICAgIHwgLWludGVyaXgqIHwgLXV3aW4qIHwgLW1rcyogfCAtcmhhcHNvZHkqIHwgLWRhcndpbiogfCAtb3BlbmVkKiBcCisJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCisJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCisJICAgICAgfCAtb3MyKiB8IC12b3MqIHwgLXBhbG1vcyogfCAtdWNsaW51eCogfCAtbnVjbGV1cyogXAorCSAgICAgIHwgLW1vcnBob3MqIHwgLXN1cGVydXgqIHwgLXJ0bWsqIHwgLXJ0bWstbm92YSogfCAtd2luZGlzcyogXAorCSAgICAgIHwgLXBvd2VybWF4KiB8IC1kbml4KiB8IC1ueDYgfCAtbng3IHwgLXNlaSogfCAtZHJhZ29uZmx5KiBcCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworICAgICAgICAtb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKKwktd2luY2UqKQorCQlvcz0td2luY2UKKwkJOzsKKwktb3Nmcm9zZSopCisJCW9zPS1vc2Zyb3NlCisJCTs7CisJLW9zZiopCisJCW9zPS1vc2YKKwkJOzsKKwktdXRlayopCisJCW9zPS1ic2QKKwkJOzsKKwktZHluaXgqKQorCQlvcz0tYnNkCisJCTs7CisJLWFjaXMqKQorCQlvcz0tYW9zCisJCTs7CisJLWF0aGVvcyopCisJCW9zPS1hdGhlb3MKKwkJOzsKKwktc3lsbGFibGUqKQorCQlvcz0tc3lsbGFibGUKKwkJOzsKKwktMzg2YnNkKQorCQlvcz0tYnNkCisJCTs7CisJLWN0aXgqIHwgLXV0cyopCisJCW9zPS1zeXN2CisJCTs7CisJLW5vdmEqKQorCQlvcz0tcnRtay1ub3ZhCisJCTs7CisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKKwkJb3M9LW5zaworCQk7OworCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwktc2luaXg1LiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCisJCTs7CisJLXNpbml4KikKKwkJb3M9LXN5c3Y0CisJCTs7CisgICAgICAgIC10cGYqKQorCQlvcz0tdHBmCisJCTs7CisJLXRyaXRvbiopCisJCW9zPS1zeXN2MworCQk7OworCS1vc3MqKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXN2cjMpCisJCW9zPS1zeXN2MworCQk7OworCS1zeXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KKwktc3lzdiopCisJCTs7CisJLW9zZSopCisJCW9zPS1vc2UKKwkJOzsKKwktZXMxODAwKikKKwkJb3M9LW9zZQorCQk7OworCS14ZW5peCkKKwkJb3M9LXhlbml4CisJCTs7CisJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJb3M9LW1pbnQKKwkJOzsKKwktYXJvcyopCisJCW9zPS1hcm9zCisJCTs7CisJLWthb3MqKQorCQlvcz0ta2FvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLW5vbmUpCisJCTs7CisJKikKKwkJIyBHZXQgcmlkIG9mIHRoZSBgLScgYXQgdGhlIGJlZ2lubmluZyBvZiAkb3MuCisJCW9zPWBlY2hvICRvcyB8IHNlZCAncy9bXi1dKi0vLydgCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogc3lzdGVtIFxgJG9zXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKK2Vsc2UKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgorIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKKyMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KKworIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAorIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAorIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCisjIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKKyMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCisKK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWFjb3JuKQorCQlvcz0tcmlzY2l4MS4yCisJCTs7CisJYXJtKi1yZWJlbCkKKwkJb3M9LWxpbnV4CisJCTs7CisJYXJtKi1zZW1pKQorCQlvcz0tYW91dAorCQk7OworICAgIGM0eC0qIHwgdGljNHgtKikKKyAgICAgICAgb3M9LWNvZmYKKyAgICAgICAgOzsKKwkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCisJcGRwMTAtKikKKwkJb3M9LXRvcHMyMAorCQk7OworCXBkcDExLSopCisJCW9zPS1ub25lCisJCTs7CisJKi1kZWMgfCB2YXgtKikKKwkJb3M9LXVsdHJpeDQuMgorCQk7OworCW02OCotYXBvbGxvKQorCQlvcz0tZG9tYWluCisJCTs7CisJaTM4Ni1zdW4pCisJCW9zPS1zdW5vczQuMC4yCisJCTs7CisJbTY4MDAwLXN1bikKKwkJb3M9LXN1bm9zMworCQkjIFRoaXMgYWxzbyBleGlzdHMgaW4gdGhlIGNvbmZpZ3VyZSBwcm9ncmFtLCBidXQgd2FzIG5vdCB0aGUKKwkJIyBkZWZhdWx0LgorCQkjIG9zPS1zdW5vczQKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz0tc3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPS1zdW5vczQuMS4xCisJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKKwkqLWlibSkKKwkJb3M9LWFpeAorCQk7OworICAgIAkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKKwkqLXdlYykKKwkJb3M9LXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9LXByb2VsZgorCQk7OworCSotb2tpKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1ocCkKKwkJb3M9LWhwdXgKKwkJOzsKKwkqLWhpdGFjaGkpCisJCW9zPS1oaXV4CisJCTs7CisJaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAqLW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQorCQlvcz0tc3lzdgorCQk7OworCSotY2JtKQorCQlvcz0tYW1pZ2FvcworCQk7OworCSotZGcpCisJCW9zPS1kZ3V4CisJCTs7CisJKi1kb2xwaGluKQorCQlvcz0tc3lzdjMKKwkJOzsKKwltNjhrLWNjdXIpCisJCW9zPS1ydHUKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJb3M9LWx1bmEKKwkJOzsKKwkqLW5leHQgKQorCQlvcz0tbmV4dHN0ZXAKKwkJOzsKKwkqLXNlcXVlbnQpCisJCW9zPS1wdHgKKwkJOzsKKwkqLWNyZHMpCisJCW9zPS11bm9zCisJCTs7CisJKi1ucykKKwkJb3M9LWdlbml4CisJCTs7CisJaTM3MC0qKQorCQlvcz0tbXZzCisJCTs7CisJKi1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJKi1nb3VsZCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWhpZ2hsZXZlbCkKKwkJb3M9LWJzZAorCQk7OworCSotZW5jb3JlKQorCQlvcz0tYnNkCisJCTs7CisJKi1zZ2kpCisJCW9zPS1pcml4CisJCTs7CisJKi1zaWVtZW5zKQorCQlvcz0tc3lzdjQKKwkJOzsKKwkqLW1hc3Njb21wKQorCQlvcz0tcnR1CisJCTs7CisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQorCQlvcz0tdXhwdgorCQk7OworCSotcm9tNjhrKQorCQlvcz0tY29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz0tbWFjb3MKKwkJOzsKKwkqLWF0YXJpKikKKwkJb3M9LW1pbnQKKwkJOzsKKwkqKQorCQlvcz0tbm9uZQorCQk7OworZXNhYworZmkKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCit2ZW5kb3I9dW5rbm93bgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotdW5rbm93bikKKwkJY2FzZSAkb3MgaW4KKwkJCS1yaXNjaXgqKQorCQkJCXZlbmRvcj1hY29ybgorCQkJCTs7CisJCQktc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJLWFpeCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktYmVvcyopCisJCQkJdmVuZG9yPWJlCisJCQkJOzsKKwkJCS1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLW1wZWl4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLWhpdXgqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQktZGd1eCopCisJCQkJdmVuZG9yPWRnCisJCQkJOzsKKwkJCS1sdW5hKikKKwkJCQl2ZW5kb3I9b21yb24KKwkJCQk7OworCQkJLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJLW12cyogfCAtb3BlbmVkKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1vczQwMCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktcHR4KikKKwkJCQl2ZW5kb3I9c2VxdWVudAorCQkJCTs7CisJCQktdHBmKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS12eHNpbSogfCAtdnh3b3JrcyogfCAtd2luZGlzcyopCisJCQkJdmVuZG9yPXdycworCQkJCTs7CisJCQktYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLWhtcyopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLW1wdyogfCAtbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQkJCXZlbmRvcj1hdGFyaQorCQkJCTs7CisJCQktdm9zKikKKwkJCQl2ZW5kb3I9c3RyYXR1cworCQkJCTs7CisJCWVzYWMKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAicy91bmtub3duLyR2ZW5kb3IvImAKKwkJOzsKK2VzYWMKKworZWNobyAkYmFzaWNfbWFjaGluZSRvcworZXhpdAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2NvbmZpZ3VyZSBiL25ldHBlcmYtMi40LjUvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmMDc2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2NvbmZpZ3VyZQpAQCAtMCwwICsxLDEyMTU0IEBACisjISAvYmluL3NoCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MSBmb3IgbmV0cGVyZiAyLjQuNS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKK2VzYWMKKworZmkKKworCisKKworIyBQQVRIIG5lZWRzIENSCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKyAgY2htb2QgK3ggY29uZiQkLnNoCisgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIGVsc2UKKyAgICBQQVRIX1NFUEFSQVRPUj06CisgIGZpCisgIHJtIC1mIGNvbmYkJC5zaAorZmkKKworIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgYXNfdW5zZXQ9ZmFsc2UKK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorYXNfbmw9JworJworSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorY2FzZSAkMCBpbgorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICB7IChleGl0IDEpOyBleGl0IDE7IH0KK2ZpCisKKyMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgorZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAorZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorZm9yIGFzX3ZhciBpbiBcCisgIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCisgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgIExDX1RFTEVQSE9ORSBMQ19USU1FCitkbworICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICBlbHNlCisgICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKyAgZmkKK2RvbmUKKworIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKKworIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKK2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQ0RQQVRILgorJGFzX3Vuc2V0IENEUEFUSAorCisKK2lmIHRlc3QgIngkQ09ORklHX1NIRUxMIiA9IHg7IHRoZW4KKyAgaWYgKGV2YWwgIjoiKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorCisgIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSB5ZXMgJiYgCSAoZXZhbCAiOgorKGFzX2Z1bmNfcmV0dXJuICgpIHsKKyAgKGV4aXQgXCQxKQorfQorYXNfZnVuY19zdWNjZXNzICgpIHsKKyAgYXNfZnVuY19yZXR1cm4gMAorfQorYXNfZnVuY19mYWlsdXJlICgpIHsKKyAgYXNfZnVuY19yZXR1cm4gMQorfQorYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisgIHJldHVybiAwCit9Cithc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKyAgcmV0dXJuIDEKK30KKworZXhpdGNvZGU9MAoraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCitmaQorCitpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCitmaQorCitpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorZmkKKworaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorICBleGl0Y29kZT0xCisgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCitmaQorCitpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCisKK3Rlc3QgXCRleGl0Y29kZSA9IDApIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorCisoCisgIGFzX2xpbmVub18xPVwkTElORU5PCisgIGFzX2xpbmVub18yPVwkTElORU5PCisgIHRlc3QgXCJ4XCRhc19saW5lbm9fMVwiICE9IFwieFwkYXNfbGluZW5vXzJcIiAmJgorICB0ZXN0IFwieFxgZXhwciBcJGFzX2xpbmVub18xICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yXCIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorIikgMj4gL2Rldi9udWxsOyB0aGVuCisgIDoKK2Vsc2UKKyAgYXNfY2FuZGlkYXRlX3NoZWxscz0KKyAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGNhc2UgJGFzX2RpciBpbgorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICBhc19jYW5kaWRhdGVfc2hlbGxzPSIkYXNfY2FuZGlkYXRlX3NoZWxscyAkYXNfZGlyLyRhc19iYXNlIgorCSAgIGRvbmU7OworICAgICAgIGVzYWMKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworCisgICAgICBmb3IgYXNfc2hlbGwgaW4gJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJFNIRUxMOyBkbworCSAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJIGlmIHsgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgorCQl7ICgiJGFzX3NoZWxsIikgMj4gL2Rldi9udWxsIDw8XF9BU0VPRgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgorICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKK2VzYWMKKworZmkKKworCis6CitfQVNFT0YKK307IHRoZW4KKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbAorCSAgICAgICBhc19oYXZlX3JlcXVpcmVkPXllcworCSAgICAgICBpZiB7ICIkYXNfc2hlbGwiIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KKyAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Citlc2FjCisKK2ZpCisKKworOgorKGFzX2Z1bmNfcmV0dXJuICgpIHsKKyAgKGV4aXQgJDEpCit9Cithc19mdW5jX3N1Y2Nlc3MgKCkgeworICBhc19mdW5jX3JldHVybiAwCit9Cithc19mdW5jX2ZhaWx1cmUgKCkgeworICBhc19mdW5jX3JldHVybiAxCit9Cithc19mdW5jX3JldF9zdWNjZXNzICgpIHsKKyAgcmV0dXJuIDAKK30KK2FzX2Z1bmNfcmV0X2ZhaWx1cmUgKCkgeworICByZXR1cm4gMQorfQorCitleGl0Y29kZT0wCitpZiBhc19mdW5jX3N1Y2Nlc3M7IHRoZW4KKyAgOgorZWxzZQorICBleGl0Y29kZT0xCisgIGVjaG8gYXNfZnVuY19zdWNjZXNzIGZhaWxlZC4KK2ZpCisKK2lmIGFzX2Z1bmNfZmFpbHVyZTsgdGhlbgorICBleGl0Y29kZT0xCisgIGVjaG8gYXNfZnVuY19mYWlsdXJlIHN1Y2NlZWRlZC4KK2ZpCisKK2lmIGFzX2Z1bmNfcmV0X3N1Y2Nlc3M7IHRoZW4KKyAgOgorZWxzZQorICBleGl0Y29kZT0xCisgIGVjaG8gYXNfZnVuY19yZXRfc3VjY2VzcyBmYWlsZWQuCitmaQorCitpZiBhc19mdW5jX3JldF9mYWlsdXJlOyB0aGVuCisgIGV4aXRjb2RlPTEKKyAgZWNobyBhc19mdW5jX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC4KK2ZpCisKK2lmICggc2V0IHg7IGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSAiJDEiICk7IHRoZW4KKyAgOgorZWxzZQorICBleGl0Y29kZT0xCisgIGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKKwordGVzdCAkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKworKAorICBhc19saW5lbm9fMT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8KKyAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCisgIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIpIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorCitfQVNFT0YKK307IHRoZW4KKyAgYnJlYWsKK2ZpCisKK2ZpCisKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4KKyAgZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYKKyAgICAgICAgZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKyAgICAgICAgZG9uZQorICAgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkYXNfbXlzZWxmIiAkezErIiRAIn0KK2ZpCisKKworICAgIGlmIHRlc3QgJGFzX2hhdmVfcmVxdWlyZWQgPSBubzsgdGhlbgorICBlY2hvIFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwgdGhlCisgICAgICBlY2hvIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uICBQbGVhc2UgaW5zdGFsbCBhCisgICAgICBlY2hvIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuIHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhCisgICAgICBlY2hvIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4KKyAgICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorZmkKKworCitmaQorCitmaQorCisKKworKGV2YWwgImFzX2Z1bmNfcmV0dXJuICgpIHsKKyAgKGV4aXQgXCQxKQorfQorYXNfZnVuY19zdWNjZXNzICgpIHsKKyAgYXNfZnVuY19yZXR1cm4gMAorfQorYXNfZnVuY19mYWlsdXJlICgpIHsKKyAgYXNfZnVuY19yZXR1cm4gMQorfQorYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7CisgIHJldHVybiAwCit9Cithc19mdW5jX3JldF9mYWlsdXJlICgpIHsKKyAgcmV0dXJuIDEKK30KKworZXhpdGNvZGU9MAoraWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCitmaQorCitpZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCitmaQorCitpZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgorZmkKKworaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgorICBleGl0Y29kZT0xCisgIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCitmaQorCitpZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuCisgIDoKK2Vsc2UKKyAgZXhpdGNvZGU9MQorICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCisKK3Rlc3QgXCRleGl0Y29kZSA9IDAiKSB8fCB7CisgIGVjaG8gTm8gc2hlbGwgZm91bmQgdGhhdCBzdXBwb3J0cyBzaGVsbCBmdW5jdGlvbnMuCisgIGVjaG8gUGxlYXNlIHRlbGwgYXV0b2NvbmZAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwKKyAgZWNobyBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworICBlY2hvIG1lc3NhZ2UKK30KKworCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PCisgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiIHx8IHsKKworICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKyAgIyBsaW5lLW51bWJlciBsaW5lIGFmdGVyIGVhY2ggbGluZSB1c2luZyAkTElORU5POyB0aGUgc2Vjb25kICdzZWQnCisgICMgZG9lcyB0aGUgcmVhbCB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoCisgICMgbGluZS1udW1iZXIgbGluZSB3aXRoIHRoZSBsaW5lIGNvbnRhaW5pbmcgJExJTkVOTywgYW5kIGFwcGVuZHMKKyAgIyB0cmFpbGluZyAnLScgZHVyaW5nIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbAorICAjIGNhc2UgYXQgbGluZSBlbmQuCisgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorICAjIHNjcmlwdHMgd2l0aCBvcHRpbWl6YXRpb24gaGVscCBmcm9tIFBhb2xvIEJvbnppbmkuICBCbGFtZSBMZWUKKyAgIyBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAorICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KKyAgICAgIE4KKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KKyAgICAgIHQgbG9vcAorICAgICAgcy8tXG4uKi8vCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbgorLW4qKQorICBjYXNlIGBlY2hvICd4XGMnYCBpbgorICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KKyAgKikgICBFQ0hPX0M9J1xjJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgorICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KKyAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQorZWxzZQorICBybSAtZiBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIKK2ZpCitlY2hvID5jb25mJCQuZmlsZQoraWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2xuX3M9J2xuIC1zJworICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgIGFzX2xuX3M9J2NwIC1wJworZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbG5fcz1sbgorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD06CitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdGVzdF94PSd0ZXN0IC14JworZWxzZQorICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBhc19sc19MX29wdGlvbj1MCisgIGVsc2UKKyAgICBhc19sc19MX29wdGlvbj0KKyAgZmkKKyAgYXNfdGVzdF94PScKKyAgICBldmFsIHNoIC1jICdcJycKKyAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgorICAgICAgICB0ZXN0IC1kICIkMS8uIjsKKyAgICAgIGVsc2UKKwljYXNlICQxIGluCisgICAgICAgIC0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKwk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCisgICAgJ1wnJyBzaAorICAnCitmaQorYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisKKworZXhlYyA3PCYwIDwvZGV2L251bGwgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCithY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKworIworIyBJbml0aWFsaXphdGlvbnMuCisjCithY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCithY19jbGVhbl9maWxlcz0KK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KK0xJQk9CSlM9Citjcm9zc19jb21waWxpbmc9bm8KK3N1YmRpcnM9CitNRkxBR1M9CitNQUtFRkxBR1M9CitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK1BBQ0tBR0VfTkFNRT0nbmV0cGVyZicKK1BBQ0tBR0VfVEFSTkFNRT0nbmV0cGVyZicKK1BBQ0tBR0VfVkVSU0lPTj0nMi40LjUnCitQQUNLQUdFX1NUUklORz0nbmV0cGVyZiAyLjQuNScKK1BBQ0tBR0VfQlVHUkVQT1JUPScnCisKK2FjX3VuaXF1ZV9maWxlPSJzcmMvaGlzdC5oIgorYWNfY29uZmlnX2xpYm9ial9kaXI9c3JjL21pc3NpbmcKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmIGRlZmluZWQgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NURElOVF9ICisjIGluY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworYWNfc3Vic3RfdmFycz0nU0hFTEwKK1BBVEhfU0VQQVJBVE9SCitQQUNLQUdFX05BTUUKK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9WRVJTSU9OCitQQUNLQUdFX1NUUklORworUEFDS0FHRV9CVUdSRVBPUlQKK2V4ZWNfcHJlZml4CitwcmVmaXgKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK2JpbmRpcgorc2JpbmRpcgorbGliZXhlY2RpcgorZGF0YXJvb3RkaXIKK2RhdGFkaXIKK3N5c2NvbmZkaXIKK3NoYXJlZHN0YXRlZGlyCitsb2NhbHN0YXRlZGlyCitpbmNsdWRlZGlyCitvbGRpbmNsdWRlZGlyCitkb2NkaXIKK2luZm9kaXIKK2h0bWxkaXIKK2R2aWRpcgorcGRmZGlyCitwc2RpcgorbGliZGlyCitsb2NhbGVkaXIKK21hbmRpcgorREVGUworRUNIT19DCitFQ0hPX04KK0VDSE9fVAorTElCUworYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworYnVpbGQKK2J1aWxkX2NwdQorYnVpbGRfdmVuZG9yCitidWlsZF9vcworaG9zdAoraG9zdF9jcHUKK2hvc3RfdmVuZG9yCitob3N0X29zCit0YXJnZXQKK3RhcmdldF9jcHUKK3RhcmdldF92ZW5kb3IKK3RhcmdldF9vcworSU5TVEFMTF9QUk9HUkFNCitJTlNUQUxMX1NDUklQVAorSU5TVEFMTF9EQVRBCitDWUdQQVRIX1cKK1BBQ0tBR0UKK1ZFUlNJT04KK0FDTE9DQUwKK0FVVE9DT05GCitBVVRPTUFLRQorQVVUT0hFQURFUgorTUFLRUlORk8KK0FNVEFSCitpbnN0YWxsX3NoCitTVFJJUAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNCitBV0sKK1NFVF9NQUtFCithbV9fbGVhZGluZ19kb3QKK0NDCitDRkxBR1MKK0xERkxBR1MKK0NQUEZMQUdTCithY19jdF9DQworRVhFRVhUCitPQkpFWFQKK0RFUERJUgorYW1fX2luY2x1ZGUKK2FtX19xdW90ZQorQU1ERVBfVFJVRQorQU1ERVBfRkFMU0UKK0FNREVQQkFDS1NMQVNICitDQ0RFUE1PREUKK2FtX19mYXN0ZGVwQ0NfVFJVRQorYW1fX2Zhc3RkZXBDQ19GQUxTRQorUkFOTElCCitDUFAKK0dSRVAKK0VHUkVQCitMSUJPQkpTCitORUVEX0xJQkNPTVBBVF9UUlVFCitORUVEX0xJQkNPTVBBVF9GQUxTRQorTkVUQ1BVX1NPVVJDRQorTkVUUlRMS1VQX1NPVVJDRQorTkVUU0xPVExLVVBfU09VUkNFCitORVRTRUNMS1VQX1NPVVJDRQorTkVURFJWTEtVUF9TT1VSQ0UKK05FVFNZU0xLVVBfU09VUkNFCitMVExJQk9CSlMnCithY19zdWJzdF9maWxlcz0nJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUCcKKworCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCithY19pbml0X2hlbHA9CithY19pbml0X3ZlcnNpb249ZmFsc2UKKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitjYWNoZV9maWxlPS9kZXYvbnVsbAorZXhlY19wcmVmaXg9Tk9ORQorbm9fY3JlYXRlPQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKyMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgorIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKyMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCisjIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKK2RhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2luY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJworb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJworZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJworCithY19wcmV2PQorYWNfZGFzaGRhc2g9Citmb3IgYWNfb3B0aW9uCitkbworICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgorICAgIGFjX3ByZXY9CisgICAgY29udGludWUKKyAgZmkKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworICAqKQlhY19vcHRhcmc9eWVzIDs7CisgIGVzYWMKKworICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgorCisgIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgorICAtLSkKKyAgICBhY19kYXNoZGFzaD15ZXMgOzsKKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KikKKyAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKKyAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCisgICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OworICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCisgIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQorICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKKworICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCisgICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy9bLS5dL18vZydgCisgICAgZXZhbCBlbmFibGVfJGFjX2ZlYXR1cmU9bm8gOzsKKworICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQorICAgIGFjX3ByZXY9ZG9jZGlyIDs7CisgIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwgLS1kbz0qKQorICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWR2aWRpciB8IC0tZHZpZGlyIHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikKKyAgICBhY19wcmV2PWR2aWRpciA7OworICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2aT0qIHwgLS1kdj0qKQorICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWVuYWJsZS0qIHwgLS1lbmFibGUtKikKKyAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAorICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPVwkYWNfb3B0YXJnIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAorICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQorICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OworICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAorICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCisgICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKKyAgICBhY19wcmV2PWluZm9kaXIgOzsKKyAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKKyAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQorICAgIGFjX3ByZXY9bGliZGlyIDs7CisgIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKKyAgICBsaWJkaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKKyAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCisgICAgYWNfcHJldj1saWJleGVjZGlyIDs7CisgIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCisgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQorICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OworCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQorICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OworICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCisgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKKyAgICBhY19wcmV2PW1hbmRpciA7OworICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCisgICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKKworICAtbmZwIHwgLS1uZnAgfCAtLW5mKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCisgICAgd2l0aF9mcD1ubyA7OworCisgIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCisgIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQorICAgIG5vX2NyZWF0ZT15ZXMgOzsKKworICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKKyAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCisgICAgbm9fcmVjdXJzaW9uPXllcyA7OworCisgIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKKyAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCisgIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKKyAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKKyAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCisgIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKKyAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKKyAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQorICAgIGFjX3ByZXY9cHJlZml4IDs7CisgIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKKyAgICBwcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCisgIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKKyAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCisgIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKKyAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKKyAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCisgICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OworICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKKyAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQorICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKKyAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCisgIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKKyAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAorICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCisgICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7CisKKyAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKKyAgICBhY19wcmV2PXBkZmRpciA7OworICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQorICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKKyAgICBhY19wcmV2PXBzZGlyIDs7CisgIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQorICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKKworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICBzaWxlbnQ9eWVzIDs7CisKKyAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCisgICAgYWNfcHJldj1zYmluZGlyIDs7CisgIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCisgIHwgLS1zYmk9KiB8IC0tc2I9KikKKyAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKKyAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCisgIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCisgIHwgLS1zaGEgfCAtLXNoKQorICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKKyAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCisgIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCisgIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAorICB8IC0tc2hhPSogfCAtLXNoPSopCisgICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCisgICAgYWNfcHJldj1zaXRlIDs7CisgIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCisgICAgc2l0ZT0kYWNfb3B0YXJnIDs7CisKKyAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKKyAgICBhY19wcmV2PXNyY2RpciA7OworICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQorICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAorICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKKyAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKKyAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKKyAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQorICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OworCisgIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCisgICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKKyAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQorICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKKyAgICB2ZXJib3NlPXllcyA7OworCisgIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCisgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKKworICAtd2l0aC0qIHwgLS13aXRoLSopCisgICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3BhY2thZ2UiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYWNfcGFja2FnZT1gZWNobyAkYWNfcGFja2FnZSB8IHNlZCAncy9bLS5dL18vZydgCisgICAgZXZhbCB3aXRoXyRhY19wYWNrYWdlPVwkYWNfb3B0YXJnIDs7CisKKyAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQorICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCisgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgorICAgIGV4cHIgIngkYWNfcGFja2FnZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvWy0uXS9fL2cnYAorICAgIGV2YWwgd2l0aF8kYWNfcGFja2FnZT1ubyA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgOzsKKworICAqPSopCisgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKKyAgICBleHBvcnQgJGFjX2VudnZhciA7OworCisgICopCisgICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgorICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259CisgICAgOzsKKworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogbWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorZm9yIGFjX3ZhciBpbglleGVjX3ByZWZpeCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcCisJCWRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXAorCQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2RpciBcCisJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyCitkbworICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgY2FzZSAkYWNfdmFsIGluCisgICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsKKyAgICBOT05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7CisgIGVzYWMKKyAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZG9uZQorCisjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2J1aWxkPSRidWlsZF9hbGlhcworaG9zdD0kaG9zdF9hbGlhcwordGFyZ2V0PSR0YXJnZXRfYWxpYXMKKworIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgoraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPXllcworICBmaQorZmkKKworYWNfdG9vbF9wcmVmaXg9Cit0ZXN0IC1uICIkaG9zdF9hbGlhcyIgJiYgYWNfdG9vbF9wcmVmaXg9JGhvc3RfYWxpYXMtCisKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKworCithY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKK2FjX2xzX2RpPWBscyAtZGkgLmAgJiYKK2FjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAorICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IFdvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogcHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5IiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiQwIiB8fAorJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJDAiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICBzcmNkaXI9JGFjX2NvbmZkaXIKKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgICBzcmNkaXI9Li4KKyAgZmkKK2Vsc2UKKyAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubworZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCithY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCithY19hYnNfY29uZmRpcj1gKAorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgeyBlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfbXNnIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCXB3ZClgCisjIFdoZW4gYnVpbGRpbmcgaW4gcGxhY2UsIHNldCBzcmNkaXI9LgoraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorICBzcmNkaXI9LgorZmkKKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisjIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KKyMgbWVzcyB1cCBNLXggZ2RiIGluIEVtYWNzLgorY2FzZSAkc3JjZGlyIGluCisqLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKK2VzYWMKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Citkb25lCisKKyMKKyMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKyMKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gImxvbmciOyB0aGVuCisgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCisgIGNhdCA8PF9BQ0VPRgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgbmV0cGVyZiAyLjQuNSB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgorCitUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCitWQVI9VkFMVUUuICBTZWUgYmVsb3cgZm9yIGRlc2NyaXB0aW9ucyBvZiBzb21lIG9mIHRoZSB1c2VmdWwgdmFyaWFibGVzLgorCitEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKworQ29uZmlndXJhdGlvbjoKKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgICAgIC0taGVscD1zaG9ydCAgICAgICAgZGlzcGxheSBvcHRpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZQorICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nLi4uJyBtZXNzYWdlcworICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCisgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorCitJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorCQkJICBbUFJFRklYXQorCitCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CithbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KKworRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisKK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tYmluZGlyPURJUiAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvbmV0cGVyZl0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KKyAgLS1kdmlkaXI9RElSICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRgorCitQcm9ncmFtIG5hbWVzOgorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworCitTeXN0ZW0gdHlwZXM6CisgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCisgIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXQorX0FDRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorICBjYXNlICRhY19pbml0X2hlbHAgaW4KKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIG5ldHBlcmYgMi40LjU6Ijs7CisgICBlc2FjCisgIGNhdCA8PFxfQUNFT0YKKworT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKKyAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQorICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBTcGVlZHMgdXAgb25lLXRpbWUgYnVpbGRzCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIERvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcworICAtLWVuYWJsZS1oaXN0b2dyYW0gICAgICBpbmNsdWRlIGluZGl2aWR1YWwgb3AgdGltaW5nLCBtYXkgYWZmZWN0IHJlc3VsdAorICAtLWVuYWJsZS1kaXJ0eSAgICAgICAgICB3cml0ZSB0byBidWZmZXJzIGVhY2ggdGltZSwgbWF5IGFmZmVjdCByZXN1bHQKKyAgLS1lbmFibGUtZGVtbyAgICAgICAgICAgZW1pdCBpbnRlcmltIHJlc3VsdHMgZHVyaW5nIHRoZSBydW4uIE1heSBhZmZlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy4KKyAgLS1lbmFibGUtdW5peGRvbWFpbiAgICAgaW5jbHVkZSBVbml4IERvbWFpbiBzb2NrZXQgdGVzdHMKKyAgLS1lbmFibGUtZGxwaSAgICAgICAgICAgaW5jbHVkZSBETFBJIChsaW5rLWxheWVyKSB0ZXN0cworICAtLWVuYWJsZS1kY2NwICAgICAgICAgICBpbmNsdWRlIERDQ1AgdGVzdHMKKyAgLS1lbmFibGUtb21uaSAgICAgICAgICAgaW5jbHVkZSBPTU5JIHRlc3RzCisgIC0tZW5hYmxlLXh0aSAgICAgICAgICAgIGluY2x1ZGUgWFRJIHNvY2tldCB0ZXN0cworICAtLWVuYWJsZS1zZHAgICAgICAgICAgICBpbmNsdWRlIFNEUCBzb2NrZXQgdGVzdHMKKyAgLS1lbmFibGUtZXhzICAgICAgICAgICAgaW5jbHVkZSBJQ1NDIGFzeW5jIHNvY2tldHMgdGVzdHMKKyAgLS1lbmFibGUtc2N0cCAgICAgICAgICAgaW5jbHVkZSB0ZXN0cyB0byBtZWFzdXJlIFNDVFAgcGVyZm9ybWFuY2UKKyAgLS1lbmFibGUtaW50ZXJ2YWxzICAgICAgaW5jbHVkZSBhYmlsaXR5IHRvIHBhY2Ugb3BlcmF0aW9ucywgbWF5IGFmZmVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQKKyAgLS1lbmFibGUtc3BpbiAgICAgICAgICAgcGFjZWQgb3BlcmF0aW9ucyAoLS1lbmFibGUtaW50ZXJ2YWxzKSBzaG91bGQgc2l0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluIC0gV0lMTCBhZmZlY3QgcmVzdWx0CisgIC0tZW5hYmxlLWJ1cnN0ICAgICAgICAgIGluY2x1ZGUgaW50aWFsIHJlcXVlc3QgYnVyc3QgYWJpbGl0eSBpbiBfUlIgdGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBhZmZlY3QgcmVzdWx0CisgIC0tZW5hYmxlLWNwdXV0aWwgICAgICAgIGluY2x1ZGUgY29kZSB0byBtZWFzdXJlIENQVSB1dGlsaXphdGlvbiB1c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgbWVjaGFuaXNtCisgIC0tZW5hYmxlLXJ0bG9va3VwICAgICAgIGluY2x1ZGUgY29kZSB0byBmaW5kIHRoZSBwcm9iYWJsZSBlZ3Jlc3MgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHNwZWNpZmllZCBtZWNoYW5pc20KKyAgLS1lbmFibGUtc2xvdGxvb2t1cCAgICAgaW5jbHVkZSBjb2RlIHRvIGZpbmQgdGhlIHByb2JhYmxlIGVncmVzcyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgc3BlY2lmaWVkIG1lY2hhbmlzbQorICAtLWVuYWJsZS1zZWNsb29rdXAgICAgICBpbmNsdWRlIGNvZGUgdG8gZmluZCB0aGUgc3lzdGVtIHNlY3VyaXR5IG1lY2hhbmlzbQorICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXRzIHN0YXRlCisgIC0tZW5hYmxlLWRydmxvb2t1cCAgICAgIGluY2x1ZGUgY29kZSB0byBmaW5kIHRoZSBkcml2ZXIgaW5mb3JtYXRpb24gZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iYWJsZSBlZ3Jlc3MgaW50ZXJmYWNlCisgIC0tZW5hYmxlLXN5c2xvb2t1cCAgICAgIGluY2x1ZGUgY29kZSB0byBmaW5kIHNvbWUgcnVkaW1lbnRhcnkgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uCisKK1NvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncworICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKKyAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgorICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CisgIENQUEZMQUdTICAgIEMvQysrL09iamVjdGl2ZSBDIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKKyAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK19BQ0VPRgorYWNfc3RhdHVzPSQ/CitmaQorCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCisgIGZvciBhY19kaXIgaW4gOiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlCisgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwgY29udGludWUKKyAgICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCisgICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7CisgIGVzYWMgOzsKK2VzYWMKK2FjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAorYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKK2FjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKK2VzYWMKK2FjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKworICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCisgICAgICBlY2hvICYmCisgICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxzZQorICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgIGZpIHx8IGFjX3N0YXR1cz0kPworICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KKyAgZG9uZQorZmkKKwordGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCitpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgIGNhdCA8PFxfQUNFT0YKK25ldHBlcmYgY29uZmlndXJlIDIuNC41CitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEKKworQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCitfQUNFT0YKKyAgZXhpdAorZmkKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgorVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKK3J1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCisKK0l0IHdhcyBjcmVhdGVkIGJ5IG5ldHBlcmYgJGFzX21lIDIuNC41LCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKK2NhdCA8PF9BU1VOQU1FCisjIyAtLS0tLS0tLS0gIyMKKyMjIFBsYXRmb3JtLiAjIworIyMgLS0tLS0tLS0tICMjCisKK2hvc3RuYW1lID0gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGwgICAgIHx8IGVjaG8gdW5rbm93bmAKKworL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9IGAoL3Vzci9iaW4vYXJjaCAtaykgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vaG9zdGluZm8gICAgICA9IGAoL3Vzci9iaW4vaG9zdGluZm8pIDI+L2Rldi9udWxsICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi9tYWNoaW5lICAgICAgICAgICA9IGAoL2Jpbi9tYWNoaW5lKSAyPi9kZXYvbnVsbCAgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorL3Vzci9iaW4vb3NsZXZlbCAgICAgICA9IGAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwgICAgICAgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGwgICAgICAgICAgfHwgZWNobyB1bmtub3duYAorCitfQVNVTkFNRQorCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGVjaG8gIlBBVEg6ICRhc19kaXIiCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK30gPiY1CisKK2NhdCA+JjUgPDxfQUNFT0YKKworCisjIyAtLS0tLS0tLS0tLSAjIworIyMgQ29yZSB0ZXN0cy4gIyMKKyMjIC0tLS0tLS0tLS0tICMjCisKK19BQ0VPRgorCisKKyMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCisjIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KKyMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgorIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgorIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCithY19jb25maWd1cmVfYXJncz0KK2FjX2NvbmZpZ3VyZV9hcmdzMD0KK2FjX2NvbmZpZ3VyZV9hcmdzMT0KK2FjX211c3Rfa2VlcF9uZXh0PWZhbHNlCitmb3IgYWNfcGFzcyBpbiAxIDIKK2RvCisgIGZvciBhY19hcmcKKyAgZG8KKyAgICBjYXNlICRhY19hcmcgaW4KKyAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7CisgICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKKyAgICAgIGNvbnRpbnVlIDs7CisgICAgKlwnKikKKyAgICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgY2FzZSAkYWNfcGFzcyBpbgorICAgIDEpIGFjX2NvbmZpZ3VyZV9hcmdzMD0iJGFjX2NvbmZpZ3VyZV9hcmdzMCAnJGFjX2FyZyciIDs7CisgICAgMikKKyAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzMT0iJGFjX2NvbmZpZ3VyZV9hcmdzMSAnJGFjX2FyZyciCisgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICBlbHNlCisJY2FzZSAkYWNfYXJnIGluCisJICAqPSogfCAtLWNvbmZpZy1jYWNoZSB8IC1DIHwgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qIFwKKwkgIHwgLWVuYWJsZS0qIHwgLS1lbmFibGUtKiB8IC1nYXMgfCAtLWcqIHwgLW5mcCB8IC0tbmYqIFwKKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKwkgIHwgLXdpdGgtKiB8IC0td2l0aC0qIHwgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qIHwgLS14KQorCSAgICBjYXNlICIkYWNfY29uZmlndXJlX2FyZ3MwICIgaW4KKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorZG9uZQorJGFzX3Vuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMCB8fCB0ZXN0ICIke2FjX2NvbmZpZ3VyZV9hcmdzMCtzZXR9IiAhPSBzZXQgfHwgeyBhY19jb25maWd1cmVfYXJnczA9OyBleHBvcnQgYWNfY29uZmlndXJlX2FyZ3MwOyB9CiskYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MxIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MxK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMT07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczE7IH0KKworIyBXaGVuIGludGVycnVwdGVkIG9yIGV4aXQnZCwgY2xlYW51cCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCBjb21wbGV0ZQorIyBjb25maWcubG9nLiAgV2UgcmVtb3ZlIGNvbW1lbnRzIGJlY2F1c2UgYW55d2F5IHRoZSBxdW90ZXMgaW4gdGhlcmUKKyMgd291bGQgY2F1c2UgcHJvYmxlbXMgb3IgbG9vayB1Z2x5LgorIyBXQVJOSU5HOiBVc2UgJ1wnJyB0byByZXByZXNlbnQgYW4gYXBvc3Ryb3BoZSB3aXRoaW4gdGhlIHRyYXAuCisjIFdBUk5JTkc6IERvIG5vdCBzdGFydCB0aGUgdHJhcCBjb2RlIHdpdGggYSBuZXdsaW5lLCBkdWUgdG8gYSBGcmVlQlNEIDQuMCBidWcuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdcJydzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ1wnJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZS4iID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgICopICRhc191bnNldCAkYWNfdmFyIDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICBzZWQgLW4gXAorCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKQorICAgIGVjaG8KKworICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgIGVjaG8KKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgZG8KKyAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgICAgY2FzZSAkYWNfdmFsIGluCisgICAgICAqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKyAgICAgIGVzYWMKKyAgICAgIGVjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgIGRvbmUgfCBzb3J0CisgICAgZWNobworCisgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICBlY2hvCisgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgZG8KKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YGVjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKKwllc2FjCisJZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCisgICAgICBkb25lIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisKKyAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KKyAgICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBjb25mZGVmcy5oLiAjIworIyMgLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICAgZWNobworICAgICAgY2F0IGNvbmZkZWZzLmgKKyAgICAgIGVjaG8KKyAgICBmaQorICAgIHRlc3QgIiRhY19zaWduYWwiICE9IDAgJiYKKyAgICAgIGVjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgIGVjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCisgIH0gPiY1CisgIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgorICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICBleGl0ICRleGl0X3N0YXR1cworJyAwCitmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KKyAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCitkb25lCithY19zaWduYWw9MAorCisjIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgorcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKKworIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKK19BQ0VPRgorCisKKyMgTGV0IHRoZSBzaXRlIGZpbGUgc2VsZWN0IGFuIGFsdGVybmF0ZSBjYWNoZSBmaWxlIGlmIGl0IHdhbnRzIHRvLgorIyBQcmVmZXIgZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgc2V0IHggIiRDT05GSUdfU0lURSIKK2VsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCisgIHNldCB4ICIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiAiJHByZWZpeC9ldGMvY29uZmlnLnNpdGUiCitlbHNlCisgIHNldCB4ICIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUiIFwKKwkiJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKK2ZpCitzaGlmdAorZm9yIGFjX3NpdGVfZmlsZQorZG8KKyAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1CisgICAgLiAiJGFjX3NpdGVfZmlsZSIKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsCisgICMgZmlsZXMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LgorICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CisgICAgZXNhYworICBmaQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICA+JGNhY2hlX2ZpbGUKK2ZpCisKKyMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKKyMgdmFsdWUuCithY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUKKyAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQorICBjYXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluCisgICAgc2V0LCkKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLHNldCkKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsKTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQorZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjI7fQorCWFjX2NhY2hlX2NvcnJ1cHRlZD06CisgICAgICBmaTs7CisgIGVzYWMKKyAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgorICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KKyAgICBjYXNlICRhY19uZXdfdmFsIGluCisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisjIHVzZSB0aGUgdGFyZ2V0IHZlcnNpb24gcmF0aGVyIHRoYW4gaG9zdCAtIG9uZSBkYXkgd2UgbWF5IHdhbnQgY3Jvc3MtY29tcGlsZQorYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKworCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAordGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2FjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfYnVpbGQiID4mNjsgfQorY2FzZSAkYWNfY3ZfYnVpbGQgaW4KKyotKi0qKSA7OworKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworZXNhYworYnVpbGQ9JGFjX2N2X2J1aWxkCithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfYnVpbGQKK3NoaWZ0CitidWlsZF9jcHU9JDEKK2J1aWxkX3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2J1aWxkX29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNjsgfQorY2FzZSAkYWNfY3ZfaG9zdCBpbgorKi0qLSopIDs7CisqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworZXNhYworaG9zdD0kYWNfY3ZfaG9zdAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2hvc3QKK3NoaWZ0Citob3N0X2NwdT0kMQoraG9zdF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Citob3N0X29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfdGFyZ2V0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIngkdGFyZ2V0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0CitlbHNlCisgIGFjX2N2X3RhcmdldD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkdGFyZ2V0X2FsaWFzYCB8fAorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90YXJnZXQiID4mNjsgfQorY2FzZSAkYWNfY3ZfdGFyZ2V0IGluCisqLSotKikgOzsKKyopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIHRhcmdldCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworZXNhYwordGFyZ2V0PSRhY19jdl90YXJnZXQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl90YXJnZXQKK3NoaWZ0Cit0YXJnZXRfY3B1PSQxCit0YXJnZXRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgordGFyZ2V0X29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICR0YXJnZXRfb3MgaW4gKlwgKikgdGFyZ2V0X29zPWBlY2hvICIkdGFyZ2V0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKKyMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KKyMgd2lsbCBnZXQgY2Fub25pY2FsaXplZC4KK3Rlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCisgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKyAgICBOT05FTk9ORXMseCx4LCAmJgorICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisKK2FtX19hcGlfdmVyc2lvbj0iMS43IgorIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluCisgIC4vIHwgLi8vIHwgL2NDLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OlxcL29zMlxcL2luc3RhbGxcXC8qIHwgPzpcXC9PUzJcXC9JTlNUQUxMXFwvKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCisJICAgIGJyZWFrIDMKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CitlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAkRUNIT19DIiA+JjY7IH0KKyMgSnVzdCBpbiBjYXNlCitzbGVlcCAxCitlY2hvIHRpbWVzdGFtcCA+IGNvbmZ0ZXN0LmZpbGUKKyMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKKyMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQorIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcworIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKKyMgZGlyZWN0b3J5KS4KK2lmICgKKyAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKyAgICAgICMgLUwgZGlkbid0IHdvcmsuCisgICAgICBzZXQgWCBgbHMgLXQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZWAKKyAgIGZpCisgICBybSAtZiBjb25mdGVzdC5maWxlCisgICBpZiB0ZXN0ICIkKiIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisKKyAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KKyAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKyAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKyAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KKyAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgZmkKKworICAgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9Cit0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KK3Rlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisjIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgorY2F0IDw8XF9BQ0VPRiA+Y29uZnRlc3Quc2VkCitzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vCitfQUNFT0YKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YGVjaG8gJHByb2dyYW1fdHJhbnNmb3JtX25hbWUgfCBzZWQgLWYgY29uZnRlc3Quc2VkYAorcm0gLWYgY29uZnRlc3Quc2VkCisKKworIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorCit0ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KK2ZpCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVdLPSIkYWNfcHJvZyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FXSz0kYWNfY3ZfcHJvZ19BV0sKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFXSyIgPiY1CitlY2hvICIke0VDSE9fVH0kQVdLIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiB7IGFzX3Zhcj1hY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgorU0hFTEwgPSAvYmluL3NoCithbGw6CisJQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitjYXNlIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbGAgaW4KKyAgKkBAQCUlJT0/Kj1AQEAlJSUqKQorICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllczs7CisgICopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm87OworZXNhYworcm0gLWYgY29uZnRlc3QubWFrZQorZmkKK2lmIGV2YWwgdGVzdCBcJGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCA9IHllczsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorICBTRVRfTUFLRT0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKK2ZpCisKK3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCisKKyAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKK2lmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCIgJiYKKyAgIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KKyBQQUNLQUdFPSduZXRwZXJmJworIFZFUlNJT049JzIuNC41JworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRSAiJFBBQ0tBR0UiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFZFUlNJT04gIiRWRVJTSU9OIgorX0FDRU9GCisKKyMgU29tZSB0b29scyBBdXRvbWFrZSBuZWVkcy4KKworQUNMT0NBTD0ke0FDTE9DQUwtIiR7YW1fbWlzc2luZ19ydW59YWNsb2NhbC0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9DT05GPSR7QVVUT0NPTkYtIiR7YW1fbWlzc2luZ19ydW59YXV0b2NvbmYifQorCisKK0FVVE9NQUtFPSR7QVVUT01BS0UtIiR7YW1fbWlzc2luZ19ydW59YXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259In0KKworCitBVVRPSEVBREVSPSR7QVVUT0hFQURFUi0iJHthbV9taXNzaW5nX3J1bn1hdXRvaGVhZGVyIn0KKworCitNQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KKworCitBTVRBUj0ke0FNVEFSLSIke2FtX21pc3NpbmdfcnVufXRhciJ9CisKK2luc3RhbGxfc2g9JHtpbnN0YWxsX3NoLSIkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIn0KKworIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCisjIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0CisjIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCisjIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJHtTSEVMTH0gXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uCisjIHNvbWUgcGxhdGZvcm1zLgorCisKKworYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBjb25maWcuaCIKKworIyBBQ19DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorCisKKworIyBtYWtlIHN1cmUgd2UgYnVpbGQgbmV0cGVyZl92ZXJzaW9uLmgKK3RvdWNoIHNyYy9uZXRwZXJmX3ZlcnNpb24uaC5pbgorCisjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgorICAgIENDPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgIHNoaWZ0CisgIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBzaGlmdAorICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICBmaQorZmkKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKK3dob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKK2NvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZmkKKworZmkKKworCit0ZXN0IC16ICIkQ0MiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK2FjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3sgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChhY190cnk9IiRhY19jb21waWxlciAtViA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5leGUgYi5vdXQiCisjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisjIG9mIGV4ZWV4dC4KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAkRUNIT19DIiA+JjY7IH0KK2FjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKyMKKyMgTGlzdCBvZiBwb3NzaWJsZSBvdXRwdXQgZmlsZXMsIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbGlrZWx5LgorIyBUaGUgYWxnb3JpdGhtIGlzIG5vdCByb2J1c3QgdG8ganVuayBpbiBgLicsIGhlbmNlIGdvIHRvIHdpbGRjYXJkcyAoYS4qKQorIyBvbmx5IGFzIGEgbGFzdCByZXNvcnQuICBiLm91dCBpcyBjcmVhdGVkIGJ5IGk5NjAgY29tcGlsZXJzLgorYWNfZmlsZXM9J2Ffb3V0LmV4ZSBhLmV4ZSBjb25mdGVzdC5leGUgYS5vdXQgY29uZnRlc3QgYS4qIGNvbmZ0ZXN0LiogYi5vdXQnCisjCisjIFRoZSBJUklYIDYgbGlua2VyIHdyaXRlcyBpbnRvIGV4aXN0aW5nIGZpbGVzIHdoaWNoIG1heSBub3QgYmUKKyMgZXhlY3V0YWJsZSwgcmV0YWluaW5nIHRoZWlyIHBlcm1pc3Npb25zLiAgUmVtb3ZlIHRoZW0gZmlyc3Qgc28gYQorIyBzdWJzZXF1ZW50IGV4ZWN1dGlvbiB0ZXN0IHdvcmtzLgorYWNfcm1maWxlcz0KK2ZvciBhY19maWxlIGluICRhY19maWxlcworZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKyAgZXNhYworZG9uZQorcm0gLWYgJGFjX3JtZmlsZXMKKworaWYgeyAoYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisjIEF1dG9jb25mLgorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCitkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkKKwk7OworICAgIFthYl0ub3V0ICkKKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorCSMgY2VydGFpbmx5IHJpZ2h0LgorCWJyZWFrOzsKKyAgICAqLiogKQorICAgICAgICBpZiB0ZXN0ICIke2FjX2N2X2V4ZWV4dCtzZXR9IiA9IHNldCAmJiB0ZXN0ICIkYWNfY3ZfZXhlZXh0IiAhPSBubzsKKwl0aGVuIDo7IGVsc2UKKwkgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwlmaQorCSMgV2Ugc2V0IGFjX2N2X2V4ZWV4dCBoZXJlIGJlY2F1c2UgdGhlIGxhdGVyIHRlc3QgZm9yIGl0IGlzIG5vdAorCSMgc2FmZTogY3Jvc3MgY29tcGlsZXJzIG1heSBub3QgYWRkIHRoZSBzdWZmaXggaWYgZ2l2ZW4gYW4gYC1vJworCSMgYXJndW1lbnQsIHNvIHdlIG1heSBuZWVkIHRvIGtub3cgaXQgYXQgdGhhdCBwb2ludCBhbHJlYWR5LgorCSMgRXZlbiBpZiB0aGlzIHNlY3Rpb24gbG9va3MgY3J1ZnR5OiBpdCBoYXMgdGhlIGFkdmFudGFnZSBvZgorCSMgYWN0dWFsbHkgd29ya2luZy4KKwlicmVhazs7CisgICAgKiApCisJYnJlYWs7OworICBlc2FjCitkb25lCit0ZXN0ICIkYWNfY3ZfZXhlZXh0IiA9IG5vICYmIGFjX2N2X2V4ZWV4dD0KKworZWxzZQorICBhY19maWxlPScnCitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbgorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorZmkKKworYWNfZXhlZXh0PSRhY19jdl9leGVleHQKKworIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQorIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAorIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGZpCisgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KKworcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAkRUNIT19DIiA+JjY7IH0KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CitlY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjY7IH0KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouKiApIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCSAgYnJlYWs7OworICAgICogKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29tcGlsZSBhbmQgbGluaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9leGVleHQiID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mICkgOzsKKyAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9vYmpleHQiID4mNjsgfQorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kT0JKRVhUCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jb21waWxlcl9nbnU9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK0dDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlDRkxBR1M9IiIKKyAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX2M4OT1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CisKKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKKyAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLworaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKworLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCitkbworICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhaworZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorQ0M9JGFjX3NhdmVfQ0MKKworZmkKKyMgQUNfQ0FDSEVfVkFMCitjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgorICB4KQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNjsgfSA7OworICB4bm8pCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CitlY2hvICIke0VDSE9fVH11bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICopCisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKK2VzYWMKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitERVBESVI9IiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiCisKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKKworCithbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gZG9uZQorLlBIT05ZOiBhbV9fZG9pdAorRU5ECisjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAkRUNIT19DIiA+JjY7IH0KK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBXZSBncmVwIG91dCBgRW50ZXJpbmcgZGlyZWN0b3J5JyBhbmQgYExlYXZpbmcgZGlyZWN0b3J5JworIyBtZXNzYWdlcyB3aGljaCBjYW4gb2NjdXIgaWYgYHcnIGVuZHMgdXAgaW4gTUFLRUZMQUdTLgorIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAorIyBiZSBpbnZva2VkIHVuZGVyIHNvbWUgb3RoZXIgbmFtZSAodXN1YWxseSAiZ21ha2UiKSwgaW4gd2hpY2gKKyMgY2FzZSBpdCBwcmludHMgaXRzIG5ldyBuYW1lIGluc3RlYWQgb2YgYG1ha2UnLgoraWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCisgICBhbV9faW5jbHVkZT1pbmNsdWRlCisgICBhbV9fcXVvdGU9CisgICBfYW1fcmVzdWx0PUdOVQorZmkKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIiA9ICJkb25lIjsgdGhlbgorICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgIGFtX19xdW90ZT0iXCIiCisgICAgICBfYW1fcmVzdWx0PUJTRAorICAgZmkKK2ZpCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CitlY2hvICIke0VDSE9fVH0kX2FtX3Jlc3VsdCIgPiY2OyB9CitybSAtZiBjb25maW5jIGNvbmZtZgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKKworCitkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCcuCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgOiA+IHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgorICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZC4KKyAgICAgIGlmIGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKworCitpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNjsgfQorZWxzZQorICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCit3aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCitjb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scword2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcworY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorICBmaQorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2NfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworLyogRklYTUU6IEluY2x1ZGUgdGhlIGNvbW1lbnRzIHN1Z2dlc3RlZCBieSBQYXVsLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IGNzOworICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworICBjaGFyIGNvbnN0ICpjb25zdCAqcGNwY2M7CisgIGNoYXIgKipwcGM7CisgIC8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHN0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsKKyAgc3RhdGljIHN0cnVjdCBwb2ludCBjb25zdCB6ZXJvID0gezAsMH07CisgIC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKyAgICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9tIGFub3RoZXIgaW4KKyAgICAgYW4gYXJtIG9mIGFuIGlmLWV4cHJlc3Npb24gd2hvc2UgaWYtcGFydCBpcyBub3QgYSBjb25zdGFudAorICAgICBleHByZXNzaW9uICovCisgIGNvbnN0IGNoYXIgKmcgPSAic3RyaW5nIjsKKyAgcGNwY2MgPSAmZyArIChnID8gZy1nIDogMCk7CisgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisgICsrcGNwY2M7CisgIHBwYyA9IChjaGFyKiopIHBjcGNjOworICBwY3BjYyA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwcGM7CisgIHsgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCisgICAgY2hhciAqdDsKKyAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworCisgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgICAgc3RydWN0IHMgKmI7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICAgIGlmICghZm9vKSByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9jX2NvbnN0PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBjb25zdAorX0FDRU9GCisKK2ZpCisKKworIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxtIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxtLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfbV9tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBtYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX21fbWFpbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9tX21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX21haW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9tX21haW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX21fbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCTSAxCitfQUNFT0YKKworICBMSUJTPSItbG0gJExJQlMiCisKK2ZpCithY19jdl9saWJfbT1hY19jdl9saWJfbV9tYWluCisKKworIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KKyAgYnJlYWsKK2ZpCisKKyAgICBkb25lCisgICAgYWNfY3ZfcHJvZ19DUFA9JENQUAorCitmaQorICBDUFA9JGFjX2N2X3Byb2dfQ1BQCitlbHNlCisgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDUFAiID4mNQorZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2OyB9CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIDoKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJncmVwIGdncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAoraWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCitzZXQgZHVtbXkgZ3JlcCBnZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKK2Nhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgIGVjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhY19jb3VudD1gZXhwciAkYWNfY291bnQgKyAxYAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworCisgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisgIGRvbmUKK2RvbmUKKworZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisKK2ZpCisKK0dSRVA9IiRhY19jdl9wYXRoX0dSRVAiCitpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wYXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImVncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAoraWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgorc2V0IGR1bW15IGVncmVwOyBhY19wcm9nX25hbWU9JDIKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCisjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCisgICAgIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYWNfY291bnQ9YGV4cHIgJGFjX2NvdW50ICsgMWAKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisKKyAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgIGRvbmUKK2RvbmUKKworZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisKK2ZpCisKK0VHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKK2lmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlICRhY19wcm9nX25hbWUgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisKKyAgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisgRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICA6CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBTVERDX0hFQURFUlMgMQorX0FDRU9GCisKK2ZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvd2FpdC5oIHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfd2FpdF9oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaWZuZGVmIFdFWElUU1RBVFVTCisjIGRlZmluZSBXRVhJVFNUQVRVUyhzdGF0X3ZhbCkgKCh1bnNpZ25lZCBpbnQpIChzdGF0X3ZhbCkgPj4gOCkKKyNlbmRpZgorI2lmbmRlZiBXSUZFWElURUQKKyMgZGVmaW5lIFdJRkVYSVRFRChzdGF0X3ZhbCkgKCgoc3RhdF92YWwpICYgMjU1KSA9PSAwKQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworICBpbnQgczsKKyAgd2FpdCAoJnMpOworICBzID0gV0lGRVhJVEVEIChzKSA/IFdFWElUU1RBVFVTIChzKSA6IDE7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oZWFkZXJfc3lzX3dhaXRfaD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCitfQUNFT0YKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KKworCisKKworCisKKworCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2ZvciBhY19oZWFkZXIgaW4gYXJwYS9pbmV0LmggZW5kaWFuLmggZXJybm8uaCBmY250bC5oIGxpbWl0cy5oIG1hbGxvYy5oIG5ldGRiLmggbmV0aW5ldC9pbi5oIHNpZ25hbC5oIHN0ZGxpYi5oIHN0cmluZy5oIHN0cmluZ3MuaCBzeXMvaW9jdGwuaCBzeXMvbW1hbi5oIHN5cy9wYXJhbS5oIHN5cy9zb2NrZXQuaCBzeXMvdGltZS5oIHVuaXN0ZC5oIGlmYWRkcnMuaCBzeXMvc29ja2lvLmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgoraWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuCisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisgIHllczpubzogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorCisgICAgOzsKK2VzYWMKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIFNvbWUgcGxhdGZvcm1zIHJlcXVpcmUgdGhlc2UuICBUaGVyZSBtYXkgYmUgYSBiZXR0ZXIgd2F5LgorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbHNvY2tldCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYWluIGluIC1sc29ja2V0Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfc29ja2V0X21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50CittYWluICgpCit7CityZXR1cm4gbWFpbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9zb2NrZXRfbWFpbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9zb2NrZXRfbWFpbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NvY2tldF9tYWluIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc29ja2V0X21haW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX3NvY2tldF9tYWluID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJTT0NLRVQgMQorX0FDRU9GCisKKyAgTElCUz0iLWxzb2NrZXQgJExJQlMiCisKK2ZpCithY19jdl9saWJfc29ja2V0PWFjX2N2X2xpYl9zb2NrZXRfbWFpbgorCitpZiB0ZXN0ICIkYWNfY3ZfbGliX3NvY2tldF9tYWluIiA9IHllcyA7IHRoZW4KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxuc2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbG5zbC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX25zbF9tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbnNsICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfbnNsX21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfbnNsX21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX25zbF9tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9uc2xfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCTlNMIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sbnNsICRMSUJTIgorCitmaQorYWNfY3ZfbGliX25zbD1hY19jdl9saWJfbnNsX21haW4KKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbHNlbmRmaWxlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxzZW5kZmlsZS4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NlbmRmaWxlX21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzZW5kZmlsZSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBtYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3NlbmRmaWxlX21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfc2VuZGZpbGVfbWFpbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NlbmRmaWxlX21haW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zZW5kZmlsZV9tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9zZW5kZmlsZV9tYWluID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJTRU5ERklMRSAxCitfQUNFT0YKKworICBMSUJTPSItbHNlbmRmaWxlICRMSUJTIgorCitmaQorYWNfY3ZfbGliX3NlbmRmaWxlPWFjX2N2X2xpYl9zZW5kZmlsZV9tYWluCisKKyAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9sYXJnZWZpbGU7CitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KKworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zeXNfbGFyZ2VmaWxlX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KKyAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICAgYWNfc2F2ZV9DQz0kQ0MKKyAgICAgICB3aGlsZSA6OyBkbworCSAjIElSSVggNi4yIGFuZCBsYXRlciBkbyBub3Qgc3VwcG9ydCBsYXJnZSBmaWxlcyBieSBkZWZhdWx0LAorCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKwkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgQ0M9IiRDQyAtbjMyIgorCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisJIGJyZWFrCisgICAgICAgZG9uZQorICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgPiY2OyB9CisgIGlmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiAhPSBubzsgdGhlbgorICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCisgIGZpCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz02NDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9dW5rbm93bgorICBicmVhaworZG9uZQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY2OyB9CitjYXNlICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyBpbiAjKAorICBubyB8IHVua25vd24pIDs7CisgICopCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTICRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cworX0FDRU9GCis7OworZXNhYworcm0gLWYgY29uZnRlc3QqCisgIGlmIHRlc3QgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfTEFSR0VfRklMRVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc3lzX2xhcmdlX2ZpbGVzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIHdoaWxlIDo7IGRvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPW5vOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNkZWZpbmUgX0xBUkdFX0ZJTEVTIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZV9maWxlcz0xOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9dW5rbm93bgorICBicmVhaworZG9uZQorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZV9maWxlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X3N5c19sYXJnZV9maWxlcyBpbiAjKAorICBubyB8IHVua25vd24pIDs7CisgICopCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIF9MQVJHRV9GSUxFUyAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzCitfQUNFT0YKKzs7Citlc2FjCitybSAtZiBjb25mdGVzdCoKKyAgZmkKK2ZpCisKK2ZpCisKKyMgdGhpcyBvbmUgaXMgZm9yIFRydTY0IGFuZCBiaW5kX3RvX2NwdV9pZAorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbG1hY2giID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbG1hY2guLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9tYWNoX21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxtYWNoICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfbWFjaF9tYWluPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX21hY2hfbWFpbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX21hY2hfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX21hY2hfbWFpbiIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfbWFjaF9tYWluID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJNQUNIIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sbWFjaCAkTElCUyIKKworZmkKK2FjX2N2X2xpYl9tYWNoPWFjX2N2X2xpYl9tYWNoX21haW4KKworCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2NfY29uc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworLyogRklYTUU6IEluY2x1ZGUgdGhlIGNvbW1lbnRzIHN1Z2dlc3RlZCBieSBQYXVsLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IGNzOworICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworICBjaGFyIGNvbnN0ICpjb25zdCAqcGNwY2M7CisgIGNoYXIgKipwcGM7CisgIC8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHN0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsKKyAgc3RhdGljIHN0cnVjdCBwb2ludCBjb25zdCB6ZXJvID0gezAsMH07CisgIC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKyAgICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9tIGFub3RoZXIgaW4KKyAgICAgYW4gYXJtIG9mIGFuIGlmLWV4cHJlc3Npb24gd2hvc2UgaWYtcGFydCBpcyBub3QgYSBjb25zdGFudAorICAgICBleHByZXNzaW9uICovCisgIGNvbnN0IGNoYXIgKmcgPSAic3RyaW5nIjsKKyAgcGNwY2MgPSAmZyArIChnID8gZy1nIDogMCk7CisgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisgICsrcGNwY2M7CisgIHBwYyA9IChjaGFyKiopIHBjcGNjOworICBwY3BjYyA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwcGM7CisgIHsgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCisgICAgY2hhciAqdDsKKyAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworCisgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgICAgc3RydWN0IHMgKmI7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICAgIGlmICghZm9vKSByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9jX2NvbnN0PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBjb25zdAorX0FDRU9GCisKK2ZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvZmZfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvZmZfdC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9vZmZfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Cit0eXBlZGVmIG9mZl90IGFjX190eXBlX25ld187CitpbnQKK21haW4gKCkKK3sKK2lmICgoYWNfX3R5cGVfbmV3XyAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKGFjX190eXBlX25ld18pKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl90eXBlX29mZl90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfdHlwZV9vZmZfdD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9vZmZfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmZfdCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl90eXBlX29mZl90ID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBvZmZfdCBsb25nIGludAorX0FDRU9GCisKK2ZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaXplX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2l6ZV90Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl90eXBlX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Cit0eXBlZGVmIHNpemVfdCBhY19fdHlwZV9uZXdfOworaW50CittYWluICgpCit7CitpZiAoKGFjX190eXBlX25ld18gKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfdHlwZV9zaXplX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl90eXBlX3NpemVfdD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaXplX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2l6ZV90IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X3R5cGVfc2l6ZV90ID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBzaXplX3QgdW5zaWduZWQgaW50CitfQUNFT0YKKworZmkKKworIyBBQ19UWVBFX1NPQ0tMRU5fVAorCisKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrbGVuX3QgZXF1aXZhbGVudCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzb2NrbGVuX3QgZXF1aXZhbGVudC4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgIGlmIHRlc3QgIiR7Y3VybF9jdl9zb2NrbGVuX3RfZXF1aXYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKworICAgICAgICAgIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKyAgICAgICAgICMgInZvaWQgKiIgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBnZXRwZWVybmFtZQorICAgICAgICAgY3VybF9jdl9zb2NrbGVuX3RfZXF1aXY9CisgICAgICAgICBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworICAgICAgICAgICAgZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIiBzb2NrbGVuX3Q7IGRvCisgICAgICAgICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICAgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CisKK2ludAorbWFpbiAoKQoreworCisgICAgICAgICAgICAgICAgICAkdCBsZW47CisgICAgICAgICAgICAgICAgICBnZXRwZWVybmFtZSgwLDAsJmxlbik7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorCisgICAgICAgICAgICAgICAgICBjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCisgICAgICAgICAgICAgICAgICBicmVhayAyCisKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgIGRvbmUKKworICAgICAgICAgaWYgdGVzdCAieCRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisgICAgICAgICMgdGFrZSBhIHdpbGQgZ3Vlc3MKKyAgICAgICAgICAgIGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2PSJzb2NrbGVuX3QiCisgICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYW5ub3QgZmluZCBhIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCwgZ3Vlc3Npbmcgc29ja2xlbl90IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QsIGd1ZXNzaW5nIHNvY2tsZW5fdCIgPiYyO30KKyAgICAgICAgIGZpCisKK2ZpCisKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdiIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgbmV0cGVyZl9zb2NrbGVuX3QgJGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2CitfQUNFT0YKKworCisKKyMgQUNfVFlQRV9JTl9QT1JUX1QKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBoX2Vycm5vIGRlY2xhcmF0aW9uIGluIG5ldGRiLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaF9lcnJubyBkZWNsYXJhdGlvbiBpbiBuZXRkYi5oLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9kZWNsX2hfZXJybm8rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxuZXRkYi5oPgoraW50CittYWluICgpCit7CisKK2hfZXJybm8gPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfZGVjbF9oX2Vycm5vPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfZGVjbF9oX2Vycm5vPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9kZWNsX2hfZXJybm8iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2RlY2xfaF9lcnJubyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfZGVjbF9oX2Vycm5vIiA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIX0VSUk5PX0RFQ0xBUkVEIDEKK19BQ0VPRgorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CitpbnQKK21haW4gKCkKK3sKKworc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UiID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMQorX0FDRU9GCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGltZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworaW50CittYWluICgpCit7CitpZiAoKHN0cnVjdCB0bSAqKSAwKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX3RpbWU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9oZWFkZXJfdGltZT1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RpbWUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCitfQUNFT0YKKworZmkKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRib29sX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaWZuZGVmIGJvb2wKKyAiZXJyb3I6IGJvb2wgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZm5kZWYgZmFsc2UKKyAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisjaWYgZmFsc2UKKyAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIgorI2VuZGlmCisjaWZuZGVmIHRydWUKKyAiZXJyb3I6IHRydWUgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZiB0cnVlICE9IDEKKyAiZXJyb3I6IHRydWUgaXMgbm90IDEiCisjZW5kaWYKKyNpZm5kZWYgX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQKKyAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisKKwlzdHJ1Y3QgcyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKKworCWNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworCWNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKwljaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisJY2hhciBkWyhib29sKSAwLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisJYm9vbCBlID0gJnM7CisJY2hhciBmWyhfQm9vbCkgMC4wID09IGZhbHNlID8gMSA6IC0xXTsKKwljaGFyIGdbdHJ1ZV07CisJY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsKKwljaGFyIGlbc2l6ZW9mIHMudF07CisJZW51bSB7IGogPSBmYWxzZSwgayA9IHRydWUsIGwgPSBmYWxzZSAqIHRydWUsIG0gPSB0cnVlICogMjU2IH07CisJX0Jvb2wgblttXTsKKwljaGFyIG9bc2l6ZW9mIG4gPT0gbSAqIHNpemVvZiBuWzBdID8gMSA6IC0xXTsKKwljaGFyIHBbLTEgLSAoX0Jvb2wpIDAgPCAwICYmIC0xIC0gKGJvb2wpIDAgPCAwID8gMSA6IC0xXTsKKyMJaWYgZGVmaW5lZCBfX3hsY19fIHx8IGRlZmluZWQgX19HTlVDX18KKwkgLyogQ2F0Y2ggYSBidWcgaW4gSUJNIEFJWCB4bGMgY29tcGlsZXIgdmVyc2lvbiA2LjAuMC4wCisJICAgIHJlcG9ydGVkIGJ5IEphbWVzIExlbWxleSBvbiAyMDA1LTEwLTA1OyBzZWUKKwkgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMC9tc2cwMDA4Ni5odG1sCisJICAgIFRoaXMgdGVzdCBpcyBub3QgcXVpdGUgcmlnaHQsIHNpbmNlIHhsYyBpcyBhbGxvd2VkIHRvCisJICAgIHJlamVjdCB0aGlzIHByb2dyYW0sIGFzIHRoZSBpbml0aWFsaXplciBmb3IgeGxjYnVnIGlzCisJICAgIG5vdCBvbmUgb2YgdGhlIGZvcm1zIHRoYXQgQyByZXF1aXJlcyBzdXBwb3J0IGZvci4KKwkgICAgSG93ZXZlciwgZG9pbmcgdGhlIHRlc3QgcmlnaHQgd291bGQgcmVxdWlyZSBhIHJ1bnRpbWUKKwkgICAgdGVzdCwgYW5kIHRoYXQgd291bGQgbWFrZSBjcm9zcy1jb21waWxhdGlvbiBoYXJkZXIuCisJICAgIExldCB1cyBob3BlIHRoYXQgSUJNIGZpeGVzIHRoZSB4bGMgYnVnLCBhbmQgYWxzbyBhZGRzCisJICAgIHN1cHBvcnQgZm9yIHRoaXMga2luZCBvZiBjb25zdGFudCBleHByZXNzaW9uLiAgSW4gdGhlCisJICAgIG1lYW50aW1lLCB0aGlzIHRlc3Qgd2lsbCByZWplY3QgeGxjLCB3aGljaCBpcyBPSywgc2luY2UKKwkgICAgb3VyIHN0ZGJvb2wuaCBzdWJzdGl0dXRlIHNob3VsZCBzdWZmaWNlLiAgV2UgYWxzbyB0ZXN0CisJICAgIHRoaXMgd2l0aCBHQ0MsIHdoZXJlIGl0IHNob3VsZCB3b3JrLCB0byBkZXRlY3QgbW9yZQorCSAgICBxdWlja2x5IHdoZXRoZXIgc29tZW9uZSBtZXNzZXMgdXAgdGhlIHRlc3QgaW4gdGhlCisJICAgIGZ1dHVyZS4gICovCisJIGNoYXIgZGlnc1tdID0gIjAxMjM0NTY3ODkiOworCSBpbnQgeGxjYnVnID0gMSAvICgmKGRpZ3MgKyA1KVstMiArIChib29sKSAxXSA9PSAmZGlnc1s0XSA/IDEgOiAtMSk7CisjCWVuZGlmCisJLyogQ2F0Y2ggYSBidWcgaW4gYW4gSFAtVVggQyBjb21waWxlci4gIFNlZQorCSAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDAzLTEyL21zZzAyMzAzLmh0bWwKKwkgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNvcmV1dGlscy8yMDA1LTExL21zZzAwMTYxLmh0bWwKKwkgKi8KKwlfQm9vbCBxID0gdHJ1ZTsKKwlfQm9vbCAqcHEgPSAmcTsKKworaW50CittYWluICgpCit7CisKKwkqcHEgfD0gcTsKKwkqcHEgfD0gISBxOworCS8qIFJlZmVyIHRvIGV2ZXJ5IGRlY2xhcmVkIHZhbHVlLCB0byBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zLiAgKi8KKwlyZXR1cm4gKCFhICsgIWIgKyAhYyArICFkICsgIWUgKyAhZiArICFnICsgIWggKyAhaSArICEhaiArICFrICsgISFsCisJCSsgIW0gKyAhbiArICFvICsgIXAgKyAhcSArICFwcSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY2OyB9Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0Jvb2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0Jvb2wuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfX0Jvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAordHlwZWRlZiBfQm9vbCBhY19fdHlwZV9uZXdfOworaW50CittYWluICgpCit7CitpZiAoKGFjX190eXBlX25ld18gKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfdHlwZV9fQm9vbD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X3R5cGVfX0Jvb2w9bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX0Jvb2wiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfdHlwZV9fQm9vbCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfX0JPT0wgMQorX0FDRU9GCisKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCitfQUNFT0YKKworZmkKKworCisgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHNvY2thZGRyIHN0cnVjdCBoYXMgc2FfbGVuIG1lbWJlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHNvY2thZGRyIHN0cnVjdCBoYXMgc2FfbGVuIG1lbWJlci4uLiAkRUNIT19DIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCAiJHthY19jdl9zb2NrYWRkcl9oYXNfc2FfbGVuK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjICAgICAgICAgICAgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjICAgICAgICAgICAgICAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgoraW50CittYWluICgpCit7Cit1X2ludCBpID0gc2l6ZW9mKCgoc3RydWN0IHNvY2thZGRyICopMCktPnNhX2xlbikKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl9zb2NrYWRkcl9oYXNfc2FfbGVuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3Zfc29ja2FkZHJfaGFzX3NhX2xlbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NvY2thZGRyX2hhc19zYV9sZW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NvY2thZGRyX2hhc19zYV9sZW4iID4mNjsgfQorICAgICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X3NvY2thZGRyX2hhc19zYV9sZW4gPSB5ZXMgOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfU09DS0FERFJfU0FfTEVOIDEKK19BQ0VPRgorCisgICAgICAgIGZpCisKKworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorIyBBQ19GVU5DX0VSUk9SX0FUX0xJTkUKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwaWRfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwaWRfdC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9waWRfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Cit0eXBlZGVmIHBpZF90IGFjX190eXBlX25ld187CitpbnQKK21haW4gKCkKK3sKK2lmICgoYWNfX3R5cGVfbmV3XyAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKGFjX190eXBlX25ld18pKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBhY19jdl90eXBlX3BpZF90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfdHlwZV9waWRfdD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9waWRfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9waWRfdCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl90eXBlX3BpZF90ID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBwaWRfdCBpbnQKK19BQ0VPRgorCitmaQorCisKK2ZvciBhY19oZWFkZXIgaW4gdmZvcmsuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisKKyAgICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworZm9yIGFjX2Z1bmMgaW4gZm9yayB2Zm9yaworZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworaWYgdGVzdCAieCRhY19jdl9mdW5jX2ZvcmsiID0geHllczsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBmb3JrIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgZm9yay4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19mb3JrX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1jcm9zcworZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKworCSAgLyogQnkgUnVlZGlnZXIgS3VobG1hbm4uICovCisJICByZXR1cm4gZm9yayAoKSA8IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfZnVuY19mb3JrX3dvcmtzPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPiY2OyB9CisKK2Vsc2UKKyAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPSRhY19jdl9mdW5jX2ZvcmsKK2ZpCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPSB4Y3Jvc3M7IHRoZW4KKyAgY2FzZSAkaG9zdCBpbgorICAgICotKi1hbWlnYW9zKiB8ICotKi1tc2Rvc2RqZ3BwKikKKyAgICAgICMgT3ZlcnJpZGUsIGFzIHRoZXNlIHN5c3RlbXMgaGF2ZSBvbmx5IGEgZHVtbXkgZm9yaygpIHN0dWIKKyAgICAgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1ubworICAgICAgOzsKKyAgICAqKQorICAgICAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPXllcworICAgICAgOzsKKyAgZXNhYworICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfZm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfZm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mMjt9CitmaQorYWNfY3ZfZnVuY192Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yaworaWYgdGVzdCAieCRhY19jdl9mdW5jX3Zmb3JrIiA9IHh5ZXM7IHRoZW4KKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgdmZvcmsiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyB2Zm9yay4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY192Zm9ya193b3JrcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBhY19jdl9mdW5jX3Zmb3JrX3dvcmtzPWNyb3NzCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogVGhhbmtzIHRvIFBhdWwgRWdnZXJ0IGZvciB0aGlzIHRlc3QuICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2lmZGVmIEhBVkVfVkZPUktfSAorIyBpbmNsdWRlIDx2Zm9yay5oPgorI2VuZGlmCisvKiBPbiBzb21lIHNwYXJjIHN5c3RlbXMsIGNoYW5nZXMgYnkgdGhlIGNoaWxkIHRvIGxvY2FsIGFuZCBpbmNvbWluZworICAgYXJndW1lbnQgcmVnaXN0ZXJzIGFyZSBwcm9wYWdhdGVkIGJhY2sgdG8gdGhlIHBhcmVudC4gIFRoZSBjb21waWxlcgorICAgaXMgdG9sZCBhYm91dCB0aGlzIHdpdGggI2luY2x1ZGUgPHZmb3JrLmg+LCBidXQgc29tZSBjb21waWxlcnMKKyAgIChlLmcuIGdjYyAtTykgZG9uJ3QgZ3JvayA8dmZvcmsuaD4uICBUZXN0IGZvciB0aGlzIGJ5IHVzaW5nIGEKKyAgIHN0YXRpYyB2YXJpYWJsZSB3aG9zZSBhZGRyZXNzIGlzIHB1dCBpbnRvIGEgcmVnaXN0ZXIgdGhhdCBpcworICAgY2xvYmJlcmVkIGJ5IHRoZSB2Zm9yay4gICovCitzdGF0aWMgdm9pZAorI2lmZGVmIF9fY3BsdXNwbHVzCitzcGFyY19hZGRyZXNzX3Rlc3QgKGludCBhcmcpCisjIGVsc2UKK3NwYXJjX2FkZHJlc3NfdGVzdCAoYXJnKSBpbnQgYXJnOworI2VuZGlmCit7CisgIHN0YXRpYyBwaWRfdCBjaGlsZDsKKyAgaWYgKCFjaGlsZCkgeworICAgIGNoaWxkID0gdmZvcmsgKCk7CisgICAgaWYgKGNoaWxkIDwgMCkgeworICAgICAgcGVycm9yICgidmZvcmsiKTsKKyAgICAgIF9leGl0KDIpOworICAgIH0KKyAgICBpZiAoIWNoaWxkKSB7CisgICAgICBhcmcgPSBnZXRwaWQoKTsKKyAgICAgIHdyaXRlKC0xLCAiIiwgMCk7CisgICAgICBfZXhpdCAoYXJnKTsKKyAgICB9CisgIH0KK30KKworaW50CittYWluICgpCit7CisgIHBpZF90IHBhcmVudCA9IGdldHBpZCAoKTsKKyAgcGlkX3QgY2hpbGQ7CisKKyAgc3BhcmNfYWRkcmVzc190ZXN0ICgwKTsKKworICBjaGlsZCA9IHZmb3JrICgpOworCisgIGlmIChjaGlsZCA9PSAwKSB7CisgICAgLyogSGVyZSBpcyBhbm90aGVyIHRlc3QgZm9yIHNwYXJjIHZmb3JrIHJlZ2lzdGVyIHByb2JsZW1zLiAgVGhpcworICAgICAgIHRlc3QgdXNlcyBsb3RzIG9mIGxvY2FsIHZhcmlhYmxlcywgYXQgbGVhc3QgYXMgbWFueSBsb2NhbAorICAgICAgIHZhcmlhYmxlcyBhcyBtYWluIGhhcyBhbGxvY2F0ZWQgc28gZmFyIGluY2x1ZGluZyBjb21waWxlcgorICAgICAgIHRlbXBvcmFyaWVzLiAgNCBsb2NhbHMgYXJlIGVub3VnaCBmb3IgZ2NjIDEuNDAuMyBvbiBhIFNvbGFyaXMKKyAgICAgICA0LjEuMyBzcGFyYywgYnV0IHdlIHVzZSA4IHRvIGJlIHNhZmUuICBBIGJ1Z2d5IGNvbXBpbGVyIHNob3VsZAorICAgICAgIHJldXNlIHRoZSByZWdpc3RlciBvZiBwYXJlbnQgZm9yIG9uZSBvZiB0aGUgbG9jYWwgdmFyaWFibGVzLAorICAgICAgIHNpbmNlIGl0IHdpbGwgdGhpbmsgdGhhdCBwYXJlbnQgY2FuJ3QgcG9zc2libHkgYmUgdXNlZCBhbnkgbW9yZQorICAgICAgIGluIHRoaXMgcm91dGluZS4gIEFzc2lnbmluZyB0byB0aGUgbG9jYWwgdmFyaWFibGUgd2lsbCB0aHVzCisgICAgICAgbXVuZ2UgcGFyZW50IGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gICovCisgICAgcGlkX3QKKyAgICAgIHAgPSBnZXRwaWQoKSwgcDEgPSBnZXRwaWQoKSwgcDIgPSBnZXRwaWQoKSwgcDMgPSBnZXRwaWQoKSwKKyAgICAgIHA0ID0gZ2V0cGlkKCksIHA1ID0gZ2V0cGlkKCksIHA2ID0gZ2V0cGlkKCksIHA3ID0gZ2V0cGlkKCk7CisgICAgLyogQ29udmluY2UgdGhlIGNvbXBpbGVyIHRoYXQgcC4ucDcgYXJlIGxpdmU7IG90aGVyd2lzZSwgaXQgbWlnaHQKKyAgICAgICB1c2UgdGhlIHNhbWUgaGFyZHdhcmUgcmVnaXN0ZXIgZm9yIGFsbCA4IGxvY2FsIHZhcmlhYmxlcy4gICovCisgICAgaWYgKHAgIT0gcDEgfHwgcCAhPSBwMiB8fCBwICE9IHAzIHx8IHAgIT0gcDQKKwl8fCBwICE9IHA1IHx8IHAgIT0gcDYgfHwgcCAhPSBwNykKKyAgICAgIF9leGl0KDEpOworCisgICAgLyogT24gc29tZSBzeXN0ZW1zIChlLmcuIElSSVggMy4zKSwgdmZvcmsgZG9lc24ndCBzZXBhcmF0ZSBwYXJlbnQKKyAgICAgICBmcm9tIGNoaWxkIGZpbGUgZGVzY3JpcHRvcnMuICBJZiB0aGUgY2hpbGQgY2xvc2VzIGEgZGVzY3JpcHRvcgorICAgICAgIGJlZm9yZSBpdCBleGVjcyBvciBleGl0cywgdGhpcyBtdW5nZXMgdGhlIHBhcmVudCdzIGRlc2NyaXB0b3IKKyAgICAgICBhcyB3ZWxsLiAgVGVzdCBmb3IgdGhpcyBieSBjbG9zaW5nIHN0ZG91dCBpbiB0aGUgY2hpbGQuICAqLworICAgIF9leGl0KGNsb3NlKGZpbGVubyhzdGRvdXQpKSAhPSAwKTsKKyAgfSBlbHNlIHsKKyAgICBpbnQgc3RhdHVzOworICAgIHN0cnVjdCBzdGF0IHN0OworCisgICAgd2hpbGUgKHdhaXQoJnN0YXR1cykgIT0gY2hpbGQpCisgICAgICA7CisgICAgcmV0dXJuICgKKwkgLyogV2FzIHRoZXJlIHNvbWUgcHJvYmxlbSB3aXRoIHZmb3JraW5nPyAgKi8KKwkgY2hpbGQgPCAwCisKKwkgLyogRGlkIHRoZSBjaGlsZCBmYWlsPyAgKFRoaXMgc2hvdWxkbid0IGhhcHBlbi4pICAqLworCSB8fCBzdGF0dXMKKworCSAvKiBEaWQgdGhlIHZmb3JrL2NvbXBpbGVyIGJ1ZyBvY2N1cj8gICovCisJIHx8IHBhcmVudCAhPSBnZXRwaWQoKQorCisJIC8qIERpZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGJ1ZyBvY2N1cj8gICovCisJIHx8IGZzdGF0KGZpbGVubyhzdGRvdXQpLCAmc3QpICE9IDAKKwkgKTsKKyAgfQorfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX3Zmb3JrX3dvcmtzPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfZnVuY192Zm9ya193b3Jrcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY192Zm9ya193b3JrcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY192Zm9ya193b3JrcyIgPiY2OyB9CisKK2ZpOworaWYgdGVzdCAieCRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID0geGNyb3NzOyB0aGVuCisgIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9JGFjX2N2X2Z1bmNfdmZvcmsKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJlc3VsdCAkYWNfY3ZfZnVuY192Zm9ya193b3JrcyBndWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mMjt9CitmaQorCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID0geHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX1dPUktJTkdfVkZPUksgMQorX0FDRU9GCisKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgdmZvcmsgZm9yaworX0FDRU9GCisKK2ZpCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPSB4eWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfV09SS0lOR19GT1JLIDEKK19BQ0VPRgorCitmaQorCisjIEFDX0ZVTkNfTUFMTE9DCisKKworZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaCB1bmlzdGQuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisKKyAgICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2ZvciBhY19mdW5jIGluIGdldHBhZ2VzaXplCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJGFjX2Z1bmMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY192YXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBtbWFwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbW1hcC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKy8qIG1hbGxvYyBtaWdodCBoYXZlIGJlZW4gcmVuYW1lZCBhcyBycGxfbWFsbG9jLiAqLworI3VuZGVmIG1hbGxvYworCisvKiBUaGFua3MgdG8gTWlrZSBIYWVydGVsIGFuZCBKaW0gQXZlcmEgZm9yIHRoaXMgdGVzdC4KKyAgIEhlcmUgaXMgYSBtYXRyaXggb2YgbW1hcCBwb3NzaWJpbGl0aWVzOgorCW1tYXAgcHJpdmF0ZSBub3QgZml4ZWQKKwltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJlbnRseSB1bm1hcHBlZAorCW1tYXAgcHJpdmF0ZSBmaXhlZCBhdCBzb21ld2hlcmUgYWxyZWFkeSBtYXBwZWQKKwltbWFwIHNoYXJlZCBub3QgZml4ZWQKKwltbWFwIHNoYXJlZCBmaXhlZCBhdCBzb21ld2hlcmUgY3VycmVudGx5IHVubWFwcGVkCisJbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGFscmVhZHkgbWFwcGVkCisgICBGb3IgcHJpdmF0ZSBtYXBwaW5ncywgd2Ugc2hvdWxkIHZlcmlmeSB0aGF0IGNoYW5nZXMgY2Fubm90IGJlIHJlYWQoKQorICAgYmFjayBmcm9tIHRoZSBmaWxlLCBub3IgbW1hcCdzIGJhY2sgZnJvbSB0aGUgZmlsZSBhdCBhIGRpZmZlcmVudAorICAgYWRkcmVzcy4gIChUaGVyZSBoYXZlIGJlZW4gc3lzdGVtcyB3aGVyZSBwcml2YXRlIHdhcyBub3QgY29ycmVjdGx5CisgICBpbXBsZW1lbnRlZCBsaWtlIHRoZSBpbmZhbW91cyBpMzg2IHN2cjQuMCwgYW5kIHN5c3RlbXMgd2hlcmUgdGhlCisgICBWTSBwYWdlIGNhY2hlIHdhcyBub3QgY29oZXJlbnQgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gYnVmZmVyIGNhY2hlCisgICBsaWtlIGVhcmx5IHZlcnNpb25zIG9mIEZyZWVCU0QgYW5kIHBvc3NpYmx5IGNvbnRlbXBvcmFyeSBOZXRCU0QuKQorICAgRm9yIHNoYXJlZCBtYXBwaW5ncywgd2Ugc2hvdWxkIGNvbnZlcnNlbHkgdmVyaWZ5IHRoYXQgY2hhbmdlcyBnZXQKKyAgIHByb3BhZ2F0ZWQgYmFjayB0byBhbGwgdGhlIHBsYWNlcyB0aGV5J3JlIHN1cHBvc2VkIHRvIGJlLgorCisgICBHcmVwIHdhbnRzIHByaXZhdGUgZml4ZWQgYWxyZWFkeSBtYXBwZWQuCisgICBUaGUgbWFpbiB0aGluZ3MgZ3JlcCBuZWVkcyB0byBrbm93IGFib3V0IG1tYXAgYXJlOgorICAgKiBkb2VzIGl0IGV4aXN0IGFuZCBpcyBpdCBzYWZlIHRvIHdyaXRlIGludG8gdGhlIG1tYXAnZCBhcmVhCisgICAqIGhvdyB0byB1c2UgaXQgKEJTRCB2YXJpYW50cykgICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgIWRlZmluZWQgSEFWRV9TVERMSUJfSAorY2hhciAqbWFsbG9jICgpOworI2VuZGlmCisKKy8qIFRoaXMgbWVzcyB3YXMgY29waWVkIGZyb20gdGhlIEdOVSBnZXRwYWdlc2l6ZS5oLiAgKi8KKyNpZm5kZWYgSEFWRV9HRVRQQUdFU0laRQorLyogQXNzdW1lIHRoYXQgYWxsIHN5c3RlbXMgdGhhdCBjYW4gcnVuIGNvbmZpZ3VyZSBoYXZlIHN5cy9wYXJhbS5oLiAgKi8KKyMgaWZuZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyMgIGRlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKyMgZW5kaWYKKworIyBpZmRlZiBfU0NfUEFHRVNJWkUKKyMgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIHN5c2NvbmYoX1NDX1BBR0VTSVpFKQorIyBlbHNlIC8qIG5vIF9TQ19QQUdFU0laRSAqLworIyAgaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorIyAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKyMgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgRVhFQ19QQUdFU0laRQorIyAgIGVsc2UgLyogbm8gRVhFQ19QQUdFU0laRSAqLworIyAgICBpZmRlZiBOQlBHCisjICAgICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBOQlBHICogQ0xTSVpFCisjICAgICBpZm5kZWYgQ0xTSVpFCisjICAgICAgZGVmaW5lIENMU0laRSAxCisjICAgICBlbmRpZiAvKiBubyBDTFNJWkUgKi8KKyMgICAgZWxzZSAvKiBubyBOQlBHICovCisjICAgICBpZmRlZiBOQlBDCisjICAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgTkJQQworIyAgICAgZWxzZSAvKiBubyBOQlBDICovCisjICAgICAgaWZkZWYgUEFHRVNJWkUKKyMgICAgICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgUEFHRVNJWkUKKyMgICAgICBlbmRpZiAvKiBQQUdFU0laRSAqLworIyAgICAgZW5kaWYgLyogbm8gTkJQQyAqLworIyAgICBlbmRpZiAvKiBubyBOQlBHICovCisjICAgZW5kaWYgLyogbm8gRVhFQ19QQUdFU0laRSAqLworIyAgZWxzZSAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCisjICAgZGVmaW5lIGdldHBhZ2VzaXplKCkgODE5MgkvKiBwdW50IHRvdGFsbHkgKi8KKyMgIGVuZGlmIC8qIG5vIEhBVkVfU1lTX1BBUkFNX0ggKi8KKyMgZW5kaWYgLyogbm8gX1NDX1BBR0VTSVpFICovCisKKyNlbmRpZiAvKiBubyBIQVZFX0dFVFBBR0VTSVpFICovCisKK2ludAorbWFpbiAoKQoreworICBjaGFyICpkYXRhLCAqZGF0YTIsICpkYXRhMzsKKyAgaW50IGksIHBhZ2VzaXplOworICBpbnQgZmQ7CisKKyAgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSAoKTsKKworICAvKiBGaXJzdCwgbWFrZSBhIGZpbGUgd2l0aCBzb21lIGtub3duIGdhcmJhZ2UgaW4gaXQuICovCisgIGRhdGEgPSAoY2hhciAqKSBtYWxsb2MgKHBhZ2VzaXplKTsKKyAgaWYgKCFkYXRhKQorICAgIHJldHVybiAxOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICAqKGRhdGEgKyBpKSA9IHJhbmQgKCk7CisgIHVtYXNrICgwKTsKKyAgZmQgPSBjcmVhdCAoImNvbmZ0ZXN0Lm1tYXAiLCAwNjAwKTsKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHdyaXRlIChmZCwgZGF0YSwgcGFnZXNpemUpICE9IHBhZ2VzaXplKQorICAgIHJldHVybiAxOworICBjbG9zZSAoZmQpOworCisgIC8qIE5leHQsIHRyeSB0byBtbWFwIHRoZSBmaWxlIGF0IGEgZml4ZWQgYWRkcmVzcyB3aGljaCBhbHJlYWR5IGhhcworICAgICBzb21ldGhpbmcgZWxzZSBhbGxvY2F0ZWQgYXQgaXQuICBJZiB3ZSBjYW4sIGFsc28gbWFrZSBzdXJlIHRoYXQKKyAgICAgd2Ugc2VlIHRoZSBzYW1lIGdhcmJhZ2UuICAqLworICBmZCA9IG9wZW4gKCJjb25mdGVzdC5tbWFwIiwgT19SRFdSKTsKKyAgaWYgKGZkIDwgMCkKKyAgICByZXR1cm4gMTsKKyAgZGF0YTIgPSAoY2hhciAqKSBtYWxsb2MgKDIgKiBwYWdlc2l6ZSk7CisgIGlmICghZGF0YTIpCisgICAgcmV0dXJuIDE7CisgIGRhdGEyICs9IChwYWdlc2l6ZSAtICgobG9uZyBpbnQpIGRhdGEyICYgKHBhZ2VzaXplIC0gMSkpKSAmIChwYWdlc2l6ZSAtIDEpOworICBpZiAoZGF0YTIgIT0gbW1hcCAoZGF0YTIsIHBhZ2VzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkgICAgIE1BUF9QUklWQVRFIHwgTUFQX0ZJWEVELCBmZCwgMEwpKQorICAgIHJldHVybiAxOworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICBpZiAoKihkYXRhICsgaSkgIT0gKihkYXRhMiArIGkpKQorICAgICAgcmV0dXJuIDE7CisKKyAgLyogRmluYWxseSwgbWFrZSBzdXJlIHRoYXQgY2hhbmdlcyB0byB0aGUgbWFwcGVkIGFyZWEgZG8gbm90CisgICAgIHBlcmNvbGF0ZSBiYWNrIHRvIHRoZSBmaWxlIGFzIHNlZW4gYnkgcmVhZCgpLiAgKFRoaXMgaXMgYSBidWcgb24KKyAgICAgc29tZSB2YXJpYW50cyBvZiBpMzg2IHN2cjQuMC4pICAqLworICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKKyAgICAqKGRhdGEyICsgaSkgPSAqKGRhdGEyICsgaSkgKyAxOworICBkYXRhMyA9IChjaGFyICopIG1hbGxvYyAocGFnZXNpemUpOworICBpZiAoIWRhdGEzKQorICAgIHJldHVybiAxOworICBpZiAocmVhZCAoZmQsIGRhdGEzLCBwYWdlc2l6ZSkgIT0gcGFnZXNpemUpCisgICAgcmV0dXJuIDE7CisgIGZvciAoaSA9IDA7IGkgPCBwYWdlc2l6ZTsgKytpKQorICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEzICsgaSkpCisgICAgICByZXR1cm4gMTsKKyAgY2xvc2UgKGZkKTsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9NTUFQIDEKK19BQ0VPRgorCitmaQorcm0gLWYgY29uZnRlc3QubW1hcAorCisKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvc2VsZWN0Lmggc3lzL3NvY2tldC5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKworICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHR5cGVzIG9mIGFyZ3VtZW50cyBmb3Igc2VsZWN0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdHlwZXMgb2YgYXJndW1lbnRzIGZvciBzZWxlY3QuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfc2VsZWN0X2FyZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZm9yIGFjX2FyZzIzNCBpbiAnZmRfc2V0IConICdpbnQgKicgJ3ZvaWQgKic7IGRvCisgZm9yIGFjX2FyZzEgaW4gJ2ludCcgJ3NpemVfdCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyAndW5zaWduZWQgaW50JzsgZG8KKyAgZm9yIGFjX2FyZzUgaW4gJ3N0cnVjdCB0aW1ldmFsIConICdjb25zdCBzdHJ1Y3QgdGltZXZhbCAqJzsgZG8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorIyBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitleHRlcm4gaW50IHNlbGVjdCAoJGFjX2FyZzEsCisJCQkJCSAgICAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LAorCQkJCQkgICAgJGFjX2FyZzUpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9IiRhY19hcmcxLCRhY19hcmcyMzQsJGFjX2FyZzUiOyBicmVhayAzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKKyBkb25lCitkb25lCisjIFByb3ZpZGUgYSBzYWZlIGRlZmF1bHQgdmFsdWUuCis6ICR7YWNfY3ZfZnVuY19zZWxlY3RfYXJncz0naW50LGludCAqLHN0cnVjdCB0aW1ldmFsIConfQorCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19zZWxlY3RfYXJncyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zZWxlY3RfYXJncyIgPiY2OyB9CithY19zYXZlX0lGUz0kSUZTOyBJRlM9JywnCitzZXQgZHVtbXkgYGVjaG8gIiRhY19jdl9mdW5jX3NlbGVjdF9hcmdzIiB8IHNlZCAncy9cKi9cKi9nJ2AKK0lGUz0kYWNfc2F2ZV9JRlMKK3NoaWZ0CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMSAkMQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcyMzQgKCQyKQorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkc1ICgkMykKK19BQ0VPRgorCitybSAtZiBjb25mdGVzdCoKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBzZXRwZ3JwIHRha2VzIG5vIGFyZ3VtZW50IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBzZXRwZ3JwIHRha2VzIG5vIGFyZ3VtZW50Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX3NldHBncnBfdm9pZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY2hlY2sgc2V0cGdycCB3aGVuIGNyb3NzIGNvbXBpbGluZyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY2hlY2sgc2V0cGdycCB3aGVuIGNyb3NzIGNvbXBpbGluZyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKKy8qIElmIHRoaXMgc3lzdGVtIGhhcyBhIEJTRC1zdHlsZSBzZXRwZ3JwIHdoaWNoIHRha2VzIGFyZ3VtZW50cywKKyAgc2V0cGdycCgxLCAxKSB3aWxsIGZhaWwgd2l0aCBFU1JDSCBhbmQgcmV0dXJuIC0xLCBpbiB0aGF0IGNhc2UKKyAgZXhpdCBzdWNjZXNzZnVsbHkuICovCisgIHJldHVybiBzZXRwZ3JwICgxLDEpICE9IC0xOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9mdW5jX3NldHBncnBfdm9pZD1ubworZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQorYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NldHBncnBfdm9pZCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgU0VUUEdSUF9WT0lEIDEKK19BQ0VPRgorCitmaQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc2lnbmFsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAqKHNpZ25hbCAoMCwgMCkpICgwKSA9PSAxOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2N2X3R5cGVfc2lnbmFsPWludAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2lnbmFsIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRVRTSUdUWVBFICRhY19jdl90eXBlX3NpZ25hbAorX0FDRU9GCisKKworIyBBQ19GVU5DX1NUQVQKKyMgcmVtb3ZlIHBzdGF0X2dldGR5bmFtaWMgKGF0IGxlYXN0IGZvciBub3cpIHNpbmNlIHdlIGRvbid0IGRvCisjIGFueXRoaW5nIGNvbmRpdGlvbmFsIHdpdGggdGhlIGNoZWNrIGFueXdheS4uLgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2ZvciBhY19mdW5jIGluIGFsYXJtIGJ6ZXJvIGdldGhvc3RieW5hbWUgZ2V0aHJ0aW1lIGdldHRpbWVvZmRheSBpbmV0X250b2EgbWVtc2V0IG1lbWNweSBtdW5tYXAgc2VsZWN0IHNvY2tldCBzcXJ0IHN0cmNhc2VjbXAgc3RyY2hyIHN0cnN0ciBzdHJ0b3VsIHVuYW1lCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJGFjX2Z1bmMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY192YXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyNBQ19DT05GSUdfU1VCRElSUyhzcmMvbWlzc2luZykKKworIyBkb2VzIHRoaXMgcGxhdGZvcm0gbmVlZCB0aGUgcmVwbGFjZW1lbnQgZ2V0YWRkcmluZm8KKworCisKKworZm9yIGFjX2Z1bmMgaW4gZ2V0bmFtZWluZm8gZ2V0YWRkcmluZm8gaW5ldF9udG9wIGdldGlmYWRkcnMKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX3ZhcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCBfX3N0dWJfJGFjX2Z1bmMgfHwgZGVmaW5lZCBfX3N0dWJfX18kYWNfZnVuYworY2hva2UgbWUKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAkYWNfZnVuYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyMgQUNfUkVQTEFDRV9GVU5DUyhbZ2V0YWRkcmluZm9dKQorCisKK2lmIHRlc3QgIiRhY19jdl9mdW5jX2dldGFkZHJpbmZvJGFjX2N2X2Z1bmNfZ2V0bmFtZWluZm8iICE9IHllc3llcyA7IHRoZW4KKyAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFJlcXVlc3RpbmcgcmVwbGFjZW1lbnQgZ2V0YWRkcmluZm8vZ2V0bmFtZWluZm8iID4mNQorZWNobyAiJGFzX21lOiBSZXF1ZXN0aW5nIHJlcGxhY2VtZW50IGdldGFkZHJpbmZvL2dldG5hbWVpbmZvIiA+JjY7fQorICAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgZ2V0YWRkcmluZm8uJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIGdldGFkZHJpbmZvLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworICAgSEFWRV9NSVNTSU5HPXllcworZmkKK2lmIHRlc3QgIiRhY19jdl9mdW5jX2luZXRfbnRvcCIgIT0geWVzIDsgdGhlbgorICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogUmVxdWVzdGluZyByZXBsYWNlbWVudCBpbmV0X250b3AiID4mNQorZWNobyAiJGFzX21lOiBSZXF1ZXN0aW5nIHJlcGxhY2VtZW50IGluZXRfbnRvcCIgPiY2O30KKyAgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIGluZXRfbnRvcC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgaW5ldF9udG9wLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworICAgSEFWRV9NSVNTSU5HPXllcworZmkKKworCitpZiB0ZXN0ICIkSEFWRV9NSVNTSU5HIiA9ICJ5ZXMiOyB0aGVuCisgIE5FRURfTElCQ09NUEFUX1RSVUU9CisgIE5FRURfTElCQ09NUEFUX0ZBTFNFPScjJworZWxzZQorICBORUVEX0xJQkNPTVBBVF9UUlVFPScjJworICBORUVEX0xJQkNPTVBBVF9GQUxTRT0KK2ZpCisKKworCitmb3IgYWNfZnVuYyBpbiBzZW5kZmlsZQorZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisKK2ZvciBhY19mdW5jIGluIHVuYW1lCitkbworYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKK2Nob2tlIG1lCisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gJGFjX2Z1bmMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY192YXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyMgY2hlY2sgZm9yIHRoZSB2YXJpb3VzIENQVSBiaW5kaW5nIGNhbGxzCisKKworCisKKworZm9yIGFjX2Z1bmMgaW4gbXBjdGwgcHJvY2Vzc29yX2JpbmQgc2NoZWRfc2V0YWZmaW5pdHkgYmluZF90b19jcHVfaWQgYmluZHByb2Nlc3NvcgorZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfdmFyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICRhY19mdW5jCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJGFjX2Z1bmMgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kYWNfZnVuYyB8fCBkZWZpbmVkIF9fc3R1Yl9fXyRhY19mdW5jCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICRhY19mdW5jICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgaGlzdG9ncmFtIHN1cHBvcnQKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIGhpc3RvZ3JhbSBzdXBwb3J0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIGhpc3RvZ3JhbSBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaGlzdG9ncmFtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2hpc3RvZ3JhbStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9oaXN0b2dyYW07CitmaQorCisKK2Nhc2UgIiRlbmFibGVfaGlzdG9ncmFtIiBpbgorCXllcykKKwkJdXNlX2hpc3RvZ3JhbT10cnVlCisJCTs7CisJbm8pCisJCXVzZV9oaXN0b2dyYW09ZmFsc2UKKwkJOzsKKwknJykKKwkJIyB3aGF0ZXZlcgorCQl1c2VfaGlzdG9ncmFtPWZhbHNlCisJCTs7CisJKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtaGlzdG9ncmFtIHRha2VzIHllcyBvciBubyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS1oaXN0b2dyYW0gdGFrZXMgeWVzIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKK2lmICR1c2VfaGlzdG9ncmFtCit0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKK2lmICR1c2VfaGlzdG9ncmFtCit0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFdBTlRfSElTVE9HUkFNCitfQUNFT0YKKworZmkKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBlbmFibGluZyBoaXN0b2dyYW0gc3VwcG9ydAorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGluY2x1ZGUgZGlydHkgc3VwcG9ydCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBkaXJ0eSBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGlydHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGlydHkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZGlydHk7CitmaQorCisKK2Nhc2UgIiRlbmFibGVfZGlydHkiIGluCisJeWVzKQorCQl1c2VfZGlydHk9dHJ1ZQorCQk7OworCW5vKQorCQl1c2VfZGlydHk9ZmFsc2UKKwkJOzsKKwknJykKKwkJIyB3aGF0ZXZlcgorCQl1c2VfZGlydHk9ZmFsc2UKKwkJOzsKKwkqKQorCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAtLWVuYWJsZS1kaXJ0eSB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtZGlydHkgdGFrZXMgeWVzIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKK2lmICR1c2VfZGlydHkKK3RoZW4KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorZWxzZQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworaWYgJHVzZV9kaXJ0eQordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVJUWQorX0FDRU9GCisKK2ZpCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBlbmFibGluZyBkZW1vIHN1cHBvcnQKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIGRlbW8gc3VwcG9ydCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBkZW1vIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZW1vIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlbW8rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZGVtbzsKK2ZpCisKKworY2FzZSAiJGVuYWJsZV9kZW1vIiBpbgorCXllcykKKwkJdXNlX2RlbW89dHJ1ZQorCQk7OworCW5vKQorCQl1c2VfZGVtbz1mYWxzZQorCQk7OworCScnKQorCQkjIHdoYXRldmVyCisJCXVzZV9kZW1vPWZhbHNlCisJCTs7CisJKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtZGVtbyB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtZGVtbyB0YWtlcyB5ZXMgb3Igbm8iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJOzsKK2VzYWMKKworaWYgJHVzZV9kZW1vCit0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKK2lmICR1c2VfZGVtbwordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBXQU5UX0RFTU8KK19BQ0VPRgorCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgaW5jbHVkaW5nIHRoZSBBRl9VTklYIHRlc3RzCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBVbml4LWRvbWFpbiBzb2NrZXQgdGVzdHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGluY2x1ZGUgVW5peC1kb21haW4gc29ja2V0IHRlc3RzLi4uICRFQ0hPX0MiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdW5peGRvbWFpbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV91bml4ZG9tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX3VuaXhkb21haW47CitmaQorCisKK2Nhc2UgIiRlbmFibGVfdW5peGRvbWFpbiIgaW4KKyAgICAgeWVzKQorCQl1c2VfdW5peGRvbWFpbj10cnVlCisJCTs7CisgICAgIG5vKQorCQl1c2VfdW5peGRvbWFpbj1mYWxzZQorCQk7OworICAgICAnJykKKwkJdXNlX3VuaXhkb21haW49ZmFsc2UKKwkJOzsKKyAgICAgKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtdW5peGRvbWFpbiB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtdW5peGRvbWFpbiB0YWtlcyB5ZXMgb3Igbm8iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJOzsKK2VzYWMKKworaWYgJHVzZV91bml4ZG9tYWluCit0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKK2lmICR1c2VfdW5peGRvbWFpbgordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBXQU5UX1VOSVgKK19BQ0VPRgorCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgaW5jbHVkaW5nIHRoZSBETFBJIHRlc3RzCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBETFBJIHRlc3RzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIERMUEkgdGVzdHMuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kbHBpIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RscGkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZGxwaTsKK2ZpCisKKworY2FzZSAiJGVuYWJsZV9kbHBpIiBpbgorICAgICB5ZXMpCisJCXVzZV9kbHBpPXRydWUKKwkJOzsKKyAgICAgbm8pCisJCXVzZV9kbHBpPWZhbHNlCisJCTs7CisgICAgICcnKQorCQl1c2VfZGxwaT1mYWxzZQorCQk7OworICAgICAqKQorCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAtLWVuYWJsZS1kbHBpIHRha2VzIHllcyBvciBubyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS1kbHBpIHRha2VzIHllcyBvciBubyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworZXNhYworCitpZiAkdXNlX2RscGkKK3RoZW4KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorZWxzZQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworaWYgJHVzZV9kbHBpCit0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFdBTlRfRExQSQorX0FDRU9GCisKK2ZpCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBpbmNsdWRpbmcgdGhlIERDQ1AgdGVzdHMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIERDQ1AgdGVzdHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGluY2x1ZGUgRENDUCB0ZXN0cy4uLiAkRUNIT19DIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRjY3Agd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGNjcCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9kY2NwOworZmkKKworCitjYXNlICIkZW5hYmxlX2RjY3AiIGluCisgICAgIHllcykKKwkJdXNlX2RjY3A9dHJ1ZQorCQk7OworICAgICBubykKKwkJdXNlX2RjY3A9ZmFsc2UKKwkJOzsKKyAgICAgJycpCisJCXVzZV9kY2NwPWZhbHNlCisJCTs7CisgICAgICopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLWRjY3AgdGFrZXMgeWVzIG9yIG5vIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IC0tZW5hYmxlLWRjY3AgdGFrZXMgeWVzIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKK2lmICR1c2VfZGNjcAordGhlbgorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CitlbHNlCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCitpZiAkdXNlX2RjY3AKK3RoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgV0FOVF9EQ0NQCitfQUNFT0YKKworZmkKKworIyBzZWUgaWYgd2Ugc2hvdWxkIGJlIGluY2x1ZGluZyB0aGUgT01OSSB0ZXN0cworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGluY2x1ZGUgT01OSSB0ZXN0cyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBPTU5JIHRlc3RzLi4uICRFQ0hPX0MiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb21uaSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vbW5pK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX29tbmk7CitmaQorCisKK2Nhc2UgIiRlbmFibGVfb21uaSIgaW4KKyAgICAgeWVzKQorCQl1c2Vfb21uaT10cnVlCisJCTs7CisgICAgIG5vKQorCQl1c2Vfb21uaT1mYWxzZQorCQk7OworICAgICAnJykKKwkJdXNlX29tbmk9ZmFsc2UKKwkJOzsKKyAgICAgKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtb21uaSB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtb21uaSB0YWtlcyB5ZXMgb3Igbm8iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJOzsKK2VzYWMKKworaWYgJHVzZV9vbW5pCit0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKK2lmICR1c2Vfb21uaQordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBXQU5UX09NTkkKK19BQ0VPRgorCitmaQorCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBpbmNsdWRpbmcgdGhlIFhUSSB0ZXN0cworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGluY2x1ZGUgWFRJIHRlc3RzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIFhUSSB0ZXN0cy4uLiAkRUNIT19DIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXh0aSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV94dGkrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfeHRpOworZmkKKworCitjYXNlICIkZW5hYmxlX3h0aSIgaW4KKyAgICAgeWVzKQorCQl1c2VfeHRpPXRydWUKKwkJOzsKKyAgICAgbm8pCisJCXVzZV94dGk9ZmFsc2UKKwkJOzsKKyAgICAgJycpCisJCXVzZV94dGk9ZmFsc2UKKwkJOzsKKyAgICAgKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUteHRpIHRha2VzIHllcyBvciBubyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS14dGkgdGFrZXMgeWVzIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKK2lmICR1c2VfeHRpCit0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKK2lmICR1c2VfeHRpCit0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFdBTlRfWFRJCitfQUNFT0YKKworZmkKKworIyBzZWUgaWYgd2Ugc2hvdWxkIGJlIGluY2x1ZGluZyB0aGUgU0RQIHRlc3RzCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBTRFAgdGVzdHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGluY2x1ZGUgU0RQIHRlc3RzLi4uICRFQ0hPX0MiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2RwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NkcCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9zZHA7CitmaQorCisKK2Nhc2UgIiRlbmFibGVfc2RwIiBpbgorICAgICB5ZXMpCisJCSMgcHJvYmFibHkgbmVlZCB0byBiZSBhIGJpdCBtb3JlIHNvcGhpc3RpY2F0ZWQgaGVyZQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdF9vcGVuIGluIC1sc2RwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRfb3BlbiBpbiAtbHNkcC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NkcF90X29wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzZHAgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgdF9vcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gdF9vcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3NkcF90X29wZW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfc2RwX3Rfb3Blbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NkcF90X29wZW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zZHBfdF9vcGVuIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9zZHBfdF9vcGVuID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJTRFAgMQorX0FDRU9GCisKKyAgTElCUz0iLWxzZHAgJExJQlMiCisKK2ZpCisKKwkJdXNlX3NkcD10cnVlCisJCTs7CisgICAgIG5vKQorCQl1c2Vfc2RwPWZhbHNlCisJCTs7CisgICAgICcnKQorCQl1c2Vfc2RwPWZhbHNlCisJCTs7CisgICAgICopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLXNkcCB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtc2RwIHRha2VzIHllcyBvciBubyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworZXNhYworCitpZiAkdXNlX3NkcAordGhlbgorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CitlbHNlCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCitpZiAkdXNlX3NkcAordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBXQU5UX1NEUAorX0FDRU9GCisKK2ZpCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBpbmNsdWRpbmcgdGhlIElDU0MtRVhTIHRlc3RzCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBJQ1NDLUVYUyB0ZXN0cyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBJQ1NDLUVYUyB0ZXN0cy4uLiAkRUNIT19DIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWV4cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9leHMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfZXhzOworZmkKKworCitjYXNlICIkZW5hYmxlX2V4cyIgaW4KKyAgICAgeWVzKQorCQl1c2VfZXhzPXRydWUKKwkJaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3lzX2V4c19oK3NldH0iID0gc2V0OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvZXhzLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3lzL2V4cy5oLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3lzX2V4c19oK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c19leHNfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N5c19leHNfaCIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc3lzL2V4cy5oIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHN5cy9leHMuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8c3lzL2V4cy5oPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc3lzL2V4cy5oIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc3lzL2V4cy5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL2V4cy5oPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL2V4cy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogc3lzL2V4cy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9leHMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9leHMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL2V4cy5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvZXhzLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvZXhzLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvZXhzLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL2V4cy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvZXhzLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvZXhzLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvZXhzLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL2V4cy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9leHMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL2V4cy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvZXhzLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKworICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3lzL2V4cy5oIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy9leHMuaC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N5c19leHNfaCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9oZWFkZXJfc3lzX2V4c19oPSRhY19oZWFkZXJfcHJlcHJvYworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zeXNfZXhzX2giID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zeXNfZXhzX2giID4mNjsgfQorCitmaQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19leHNfaCA9IHllczsgdGhlbgorICA6CitlbHNlCisgIHVzZV9leHM9ZmFsc2UKK2ZpCisKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZXhzX2luaXQgaW4gLWxleHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZXhzX2luaXQgaW4gLWxleHMuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9leHNfZXhzX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxleHMgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZXhzX2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBleHNfaW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9leHNfZXhzX2luaXQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZXhzX2V4c19pbml0PW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZXhzX2V4c19pbml0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZXhzX2V4c19pbml0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9leHNfZXhzX2luaXQgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQkVYUyAxCitfQUNFT0YKKworICBMSUJTPSItbGV4cyAkTElCUyIKKworZWxzZQorICB1c2VfZXhzPWZhbHNlCitmaQorCisJCTs7CisgICAgIG5vKQorCQl1c2VfZXhzPWZhbHNlCisJCTs7CisgICAgICcnKQorCQl1c2VfZXhzPWZhbHNlCisJCTs7CisgICAgICopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLWV4cyB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtZXhzIHRha2VzIHllcyBvciBubyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworZXNhYworCitpZiAkdXNlX2V4cwordGhlbgorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CitlbHNlCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCitpZiAkdXNlX2V4cwordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX0lDU0NfRVhTCitfQUNFT0YKKworZmkKKworIyBzZWUgaWYgd2Ugc2hvdWxkIGJlIGVuYWJsaW5nIFNDVFAgc3VwcG9ydAorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zY3RwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NjdHArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfc2N0cDsKK2ZpCisKKworY2FzZSAiJGVuYWJsZV9zY3RwIiBpbgorCXllcykKKwkJdXNlX3NjdHA9dHJ1ZQorCitmb3IgYWNfaGVhZGVyIGluIG5ldGluZXQvc2N0cC5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCithY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKKwkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2Vsc2UKKyAgdXNlX3NjdHA9ZmFsc2UKK2ZpCisKK2RvbmUKKworCQljYXNlICIkaG9zdCIgaW4KKwkJKi0qLWZyZWVic2Q3LiopCisJCQkjIEZyZWVCU0QgNy54IFNDVFAgc3VwcG9ydCBkb2Vzbid0IG5lZWQgLWxzY3RwLgorCQkJOzsKKwkJKikKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxzY3RwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxzY3RwLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfc2N0cF9tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc2N0cCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBtYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3NjdHBfbWFpbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9zY3RwX21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zY3RwX21haW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zY3RwX21haW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX3NjdHBfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCU0NUUCAxCitfQUNFT0YKKworICBMSUJTPSItbHNjdHAgJExJQlMiCisKK2Vsc2UKKyAgdXNlX3NjdHA9ZmFsc2UKK2ZpCithY19jdl9saWJfc2N0cD1hY19jdl9saWJfc2N0cF9tYWluCisKKwkJCTs7CisJCWVzYWMKKwkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZS5zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlLnNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbWVtYmVyX3N0cnVjdF9zY3RwX2V2ZW50X3N1YnNjcmliZV9zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSBhY19hZ2dyOworaWYgKGFjX2FnZ3Iuc2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zY3RwX2V2ZW50X3N1YnNjcmliZV9zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlIGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3Iuc2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zY3RwX2V2ZW50X3N1YnNjcmliZV9zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9tZW1iZXJfc3RydWN0X3NjdHBfZXZlbnRfc3Vic2NyaWJlX3NjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudD1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3NjdHBfZXZlbnRfc3Vic2NyaWJlX3NjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF9zY3RwX2V2ZW50X3N1YnNjcmliZV9zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQiID4mNjsgfQorCisJCWlmIHRlc3QgIiRhY19jdl9tZW1iZXJfc3RydWN0X3NjdHBfZXZlbnRfc3Vic2NyaWJlX3NjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudCIgPSAieWVzIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX1NDVFBfQURBUFRBVElPTl9MQVlFUl9FVkVOVCAxCitfQUNFT0YKKworCQlmaQorCQk7OworCW5vKQorCQl1c2Vfc2N0cD1mYWxzZQorCQk7OworCScnKQorCQkjIHdoYXRldmVyCisJCXVzZV9zY3RwPWZhbHNlCisJCTs7CisJKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtc2N0cCB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtc2N0cCB0YWtlcyB5ZXMgb3Igbm8iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJOzsKK2VzYWMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIFNDVFAgdGVzdHMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGluY2x1ZGUgU0NUUCB0ZXN0cy4uLiAkRUNIT19DIiA+JjY7IH0KKworaWYgJHVzZV9zY3RwCit0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKK2lmICR1c2Vfc2N0cAordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBXQU5UX1NDVFAKK19BQ0VPRgorCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgcGFjZWQgc2VuZHMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIHBhY2VkIHNlbmQgKGludGVydmFscykgc3VwcG9ydCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBwYWNlZCBzZW5kIChpbnRlcnZhbHMpIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pbnRlcnZhbHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaW50ZXJ2YWxzK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX2ludGVydmFsczsKK2ZpCisKKworY2FzZSAiJGVuYWJsZV9pbnRlcnZhbHMiIGluCisJeWVzKQorCQl1c2VfaW50ZXJ2YWxzPXRydWUKKwkJOzsKKwlubykKKwkJdXNlX2ludGVydmFscz1mYWxzZQorCQk7OworCScnKQorCQl1c2VfaW50ZXJ2YWxzPWZhbHNlCisJCTs7CisJKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtaW50ZXJ2YWxzIHRha2VzIHllcyBvciBubyIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS1pbnRlcnZhbHMgdGFrZXMgeWVzIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKK2lmICR1c2VfaW50ZXJ2YWxzCit0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK2Vsc2UKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KK2ZpCisKK2lmICR1c2VfaW50ZXJ2YWxzCit0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFdBTlRfSU5URVJWQUxTCitfQUNFT0YKKworZmkKKworIyBzZWUgaWYgcGFjZWQgc2VuZHMgc2hvdWxkIHdhaXQgYW5kIHNwaW4KKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBwYWNlZCBzZW5kcyBzaG91bGQgc3BpbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgcGFjZWQgc2VuZHMgc2hvdWxkIHNwaW4uLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zcGluIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NwaW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSRlbmFibGVfc3BpbjsKK2ZpCisKKworY2FzZSAiJGVuYWJsZV9zcGluIiBpbgorCXllcykKKwkJdXNlX3NwaW49dHJ1ZQorCQk7OworCW5vKQorCQl1c2Vfc3Bpbj1mYWxzZQorCQk7OworCScnKQorCQl1c2Vfc3Bpbj1mYWxzZQorCQk7OworCSopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLXNwaW4gdGFrZXMgeWVzIG9yIG5vIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IC0tZW5hYmxlLXNwaW4gdGFrZXMgeWVzIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKK2lmICR1c2Vfc3BpbgordGhlbgorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CitlbHNlCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CitmaQorCitpZiAkdXNlX3NwaW4KK3RoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgV0FOVF9JTlRFUlZBTFMKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFdBTlRfU1BJTgorX0FDRU9GCisKK2ZpCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBlbmFibGluZyBpbml0aWFsIHJlcXVlc3QgYnVyc3RzCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gaW5jbHVkZSBpbml0aWFsIGJ1cnN0IHN1cHBvcnQgaW4gX1JSIHRlc3RzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBpbmNsdWRlIGluaXRpYWwgYnVyc3Qgc3VwcG9ydCBpbiBfUlIgdGVzdHMuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1idXJzdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9idXJzdCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9idXJzdDsKK2ZpCisKKworY2FzZSAiJGVuYWJsZV9idXJzdCIgaW4KKwl5ZXMpCisJCXVzZV9idXJzdD10cnVlCisJCTs7CisJbm8pCisJCXVzZV9idXJzdD1mYWxzZQorCQk7OworCScnKQorCQl1c2VfYnVyc3Q9ZmFsc2UKKwkJOzsKKwkqKQorCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAtLWVuYWJsZS1idXJzdCB0YWtlcyB5ZXMgb3Igbm8iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtYnVyc3QgdGFrZXMgeWVzIG9yIG5vIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKK2lmICR1c2VfYnVyc3QKK3RoZW4KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorZWxzZQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorZmkKKworaWYgJHVzZV9idXJzdAordGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBXQU5UX0ZJUlNUX0JVUlNUCitfQUNFT0YKKworZmkKKworIyB0aW1lIHRvIHNlZSBhYm91dCBDUFUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoaWNoIENQVSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudCB0eXBlIHRvIHVzZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoaWNoIENQVSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudCB0eXBlIHRvIHVzZS4uLiAkRUNIT19DIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNwdXV0aWwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY3B1dXRpbCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9jcHV1dGlsOworZmkKKworCitORVRDUFVfU09VUkNFPSIkZW5hYmxlX2NwdXV0aWwiCitjYXNlICIkZW5hYmxlX2NwdXV0aWwiIGluCisJcHN0YXQpCisJCXVzZV9jcHV1dGlsPXRydWUKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgVVNFX1BTVEFUCitfQUNFT0YKKworCQk7OworCXBzdGF0bmV3KQorCQl1c2VfY3B1dXRpbD10cnVlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFVTRV9QU1RBVAorX0FDRU9GCisKKwkJOzsKKyAgICAgICAgcGVyZnN0YXQpCisgICAgICAgICAgICAgICAgdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfUEVSRlNUQVQKK19BQ0VPRgorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYWluIGluIC1scGVyZnN0YXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbHBlcmZzdGF0Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfcGVyZnN0YXRfbWFpbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBlcmZzdGF0ICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfcGVyZnN0YXRfbWFpbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9wZXJmc3RhdF9tYWluPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcGVyZnN0YXRfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3BlcmZzdGF0X21haW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX3BlcmZzdGF0X21haW4gPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlBFUkZTVEFUIDEKK19BQ0VPRgorCisgIExJQlM9Ii1scGVyZnN0YXQgJExJQlMiCisKK2ZpCithY19jdl9saWJfcGVyZnN0YXQ9YWNfY3ZfbGliX3BlcmZzdGF0X21haW4KKworICAgICAgICAgICAgICAgIDs7CisKKwlsb29wZXIpCisJCXVzZV9jcHV1dGlsPXRydWUKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgVVNFX0xPT1BFUgorX0FDRU9GCisKKwkJOzsKKwlwcm9jc3RhdCkKKwkJdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfUFJPQ19TVEFUCitfQUNFT0YKKworCQk7OworCWtzdGF0KQorCQl1c2VfY3B1dXRpbD10cnVlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFVTRV9LU1RBVAorX0FDRU9GCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxrc3RhdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYWluIGluIC1sa3N0YXQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9rc3RhdF9tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sa3N0YXQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50CittYWluICgpCit7CityZXR1cm4gbWFpbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9rc3RhdF9tYWluPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX2tzdGF0X21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rc3RhdF9tYWluIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3N0YXRfbWFpbiIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfa3N0YXRfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCS1NUQVQgMQorX0FDRU9GCisKKyAgTElCUz0iLWxrc3RhdCAkTElCUyIKKworZmkKK2FjX2N2X2xpYl9rc3RhdD1hY19jdl9saWJfa3N0YXRfbWFpbgorCisJCTs7CisJa3N0YXQxMCkKKwkJdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfS1NUQVQKK19BQ0VPRgorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYWluIGluIC1sa3N0YXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbGtzdGF0Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfa3N0YXRfbWFpbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGtzdGF0ICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfa3N0YXRfbWFpbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9rc3RhdF9tYWluPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3N0YXRfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2tzdGF0X21haW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX2tzdGF0X21haW4gPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQktTVEFUIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sa3N0YXQgJExJQlMiCisKK2ZpCithY19jdl9saWJfa3N0YXQ9YWNfY3ZfbGliX2tzdGF0X21haW4KKworCQk7OworCW9zeCkKKwkJdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfT1NYCitfQUNFT0YKKworCQk7OworCScnKQorIyBpYTY0LWhwLWhwdXgxMS4yMworIyBpMzg2LXBjLXNvbGFyaXMyLjEwCisjIGd1ZXNzIGl0IGF1dG9tYWdpY2FsbHkgaW4gYSBuaWNlIGJpZyBjYXNlIHN0YXRlbWVudAorCQljYXNlICR0YXJnZXQgaW4KKwkJICAgICAqLSotbGludXgqKQorCQkJdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfUFJPQ19TVEFUCitfQUNFT0YKKworCQkJZW5hYmxlX2NwdXV0aWw9InByb2NzdGF0IC0gYXV0byIKKwkJCU5FVENQVV9TT1VSQ0U9InByb2NzdGF0IgorCQkJOzsKKwkJICAgICAqLSotaHB1eDExLjIzIHwgKi0qLWhwdXgxMS4zMSkKKwkJCXVzZV9jcHV1dGlsPXRydWUKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgVVNFX1BTVEFUCitfQUNFT0YKKworCQkJZW5hYmxlX2NwdXV0aWw9InBzdGF0bmV3IC0gYXV0byIKKwkJCU5FVENQVV9TT1VSQ0U9InBzdGF0bmV3IgorCQkJOzsKKwkJICAgICAqLSotaHB1eDExKiB8ICotKi1ocHV4MTAqKQorCQkJdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfUFNUQVQKK19BQ0VPRgorCisJCQllbmFibGVfY3B1dXRpbD0icHN0YXQgLSBhdXRvIgorCQkJTkVUQ1BVX1NPVVJDRT0icHN0YXQiCisJCQk7OworCQkgICAgICotKi1haXg1LiopCisJCQl1c2VfcHV1dGlsPXRydWUKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgVVNFX1BFUkZTVEFUCitfQUNFT0YKKworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbHBlcmZzdGF0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxwZXJmc3RhdC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3BlcmZzdGF0X21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwZXJmc3RhdCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBtYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3BlcmZzdGF0X21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfcGVyZnN0YXRfbWFpbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3BlcmZzdGF0X21haW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9wZXJmc3RhdF9tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9wZXJmc3RhdF9tYWluID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJQRVJGU1RBVCAxCitfQUNFT0YKKworICBMSUJTPSItbHBlcmZzdGF0ICRMSUJTIgorCitmaQorYWNfY3ZfbGliX3BlcmZzdGF0PWFjX2N2X2xpYl9wZXJmc3RhdF9tYWluCisKKwkJCWVuYWJsZV9jcHV1dGlsPSJwZXJmc3RhdCAtIGF1dG8iCisJCQlORVRDUFVfU09VUkNFPSJwZXJmc3RhdCIKKwkJCTs7CisJCSAgICAgKi0qLXNvbGFyaXMyLjEqKQorCQkJdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfS1NUQVQKK19BQ0VPRgorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYWluIGluIC1sa3N0YXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbGtzdGF0Li4uICRFQ0hPX0MiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfa3N0YXRfbWFpbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGtzdGF0ICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfa3N0YXRfbWFpbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2N2X2xpYl9rc3RhdF9tYWluPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3N0YXRfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2tzdGF0X21haW4iID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfbGliX2tzdGF0X21haW4gPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQktTVEFUIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sa3N0YXQgJExJQlMiCisKK2ZpCithY19jdl9saWJfa3N0YXQ9YWNfY3ZfbGliX2tzdGF0X21haW4KKworCQkJZW5hYmxlX2NwdXV0aWw9ImtzdGF0MTAgLSBhdXRvIgorCQkJTkVUQ1BVX1NPVVJDRT0ia3N0YXQxMCIKKwkJCTs7CisJCSAgICAgKi0qLXNvbGFyaXMyLiopCisJCQl1c2VfY3B1dXRpbD10cnVlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFVTRV9LU1RBVAorX0FDRU9GCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxrc3RhdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYWluIGluIC1sa3N0YXQuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9rc3RhdF9tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sa3N0YXQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50CittYWluICgpCit7CityZXR1cm4gbWFpbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9rc3RhdF9tYWluPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX2tzdGF0X21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rc3RhdF9tYWluIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3N0YXRfbWFpbiIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfa3N0YXRfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCS1NUQVQgMQorX0FDRU9GCisKKyAgTElCUz0iLWxrc3RhdCAkTElCUyIKKworZmkKK2FjX2N2X2xpYl9rc3RhdD1hY19jdl9saWJfa3N0YXRfbWFpbgorCisJCQllbmFibGVfY3B1dXRpbD0ia3N0YXQgLSBhdXRvIgorCQkJTkVUQ1BVX1NPVVJDRT0ia3N0YXQiCisJCQk7OworICAgICAgICAgICAgICAgICAgICAgKi0qLWZyZWVic2RbNC03XS4qIHwgKi0qLW5ldGJzZFsxLTldLiogKQorCQkJdXNlX2NwdXV0aWw9dHJ1ZQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBVU0VfU1lTQ1RMCitfQUNFT0YKKworCQkJZW5hYmxlX2NwdXV0aWw9InN5c2N0bCAtIGF1dG8iCisJCQlORVRDUFVfU09VUkNFPSJzeXNjdGwiCisJCQk7OworCQkgICAgKi0qLWRhcndpbiopCisJCQl1c2VfY3B1dXRpbD10cnVlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFVTRV9PU1gKK19BQ0VPRgorCisJCQllbmFibGVfY3B1dXRpbD0ib3N4IC0gYXV0byIKKwkJCU5FVENQVV9TT1VSQ0U9Im9zeCIKKwkJCTs7CisJCSAgICAgKikKKwkJCXVzZV9jcHV1dGlsPWZhbHNlCisJCQlORVRDUFVfU09VUkNFPSJub25lIgorCQkJZW5hYmxlX2NwdXV0aWw9Im5vbmUuIENvbnNpZGVyIHRlYWNoaW5nIGNvbmZpZ3VyZSBhYm91dCB5b3VyIHBsYXRmb3JtLiIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlub25lKQorCQl1c2VfY3B1dXRpbD1mYWxzZQorCQk7OworCSopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLWNwdXV0aWwgdGFrZXMga3N0YXQsIGtzdGF0MTAsIGxvb3Blciwgb3N4LCBwZXJmc3RhdCwgcHJvY3N0YXQsIHBzdGF0LCBwc3RhdG5ldywgc3lzY3RsIG9yIG5vbmUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtY3B1dXRpbCB0YWtlcyBrc3RhdCwga3N0YXQxMCwgbG9vcGVyLCBvc3gsIHBlcmZzdGF0LCBwcm9jc3RhdCwgcHN0YXQsIHBzdGF0bmV3LCBzeXNjdGwgb3Igbm9uZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworZXNhYworCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIiRlbmFibGVfY3B1dXRpbFwiIiA+JjUKK2VjaG8gIiR7RUNIT19UfVwiJGVuYWJsZV9jcHV1dGlsXCIiID4mNjsgfQorCisKKworIyB0aW1lIHRvIHNlZSBhYm91dCByb3V0ZSBsb29rdXAgbWVjaGFuaXNtcworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGljaCByb3V0ZSBsb29rdXAgdHlwZSB0byB1c2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGljaCByb3V0ZSBsb29rdXAgdHlwZSB0byB1c2UuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ydGxvb2t1cCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ydGxvb2t1cCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9ydGxvb2t1cDsKK2ZpCisKKworTkVUUlRMS1VQX1NPVVJDRT0iJGVuYWJsZV9ydGxvb2t1cCIKK2Nhc2UgIiRlbmFibGVfcnRsb29rdXAiIGluCisJcnRtZ2V0KQorCQl1c2VfcnRsb29rdXA9dHJ1ZQorCQk7OworCisJcnRuZXRsaW5rKQorCQl1c2VfcnRsb29rdXA9dHJ1ZQorCQk7OworCScnKQorIyBndWVzcyBpdCBhdXRvbWFnaWNhbGx5IGluIGEgbmljZSBiaWcgY2FzZSBzdGF0ZW1lbnQKKwkJY2FzZSAkdGFyZ2V0IGluCisJCSAgICAgKi0qLWxpbnV4KikKKwkJCXVzZV9ydGxvb2t1cD10cnVlCisJCQllbmFibGVfcnRsb29rdXA9InJ0bmV0bGluayAtIGF1dG8iCisJCQlORVRSVExLVVBfU09VUkNFPSJydG5ldGxpbmsiCisJCQk7OworCQkgICAgICotKi1ocHV4MTEuMzEgfCAqLSotc29sYXJpcyogfCAqLSotYWl4NSopCisJCQl1c2VfcnRsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX3J0bG9va3VwPSJydG1nZXQgLSBhdXRvIgorCQkJTkVUUlRMS1VQX1NPVVJDRT0icnRtZ2V0IgorCQkJOzsKKyAgICAgICAgICAgICAgICAgICAgICotKi1mcmVlYnNkWzQtN10uKiB8ICotKi1kYXJ3aW4qKQorCQkJdXNlX3J0bG9va3VwPXRydWUKKwkJCWVuYWJsZV9ydGxvb2t1cD0icnRtZ2V0IC0gYXV0byIKKwkJCU5FVFJUTEtVUF9TT1VSQ0U9InJ0bWdldCIKKwkJCTs7CisJCSAgICAgKikKKwkJCXVzZV9ydGxvb2t1cD1mYWxzZQorCQkJTkVUUlRMS1VQX1NPVVJDRT0ibm9uZSIKKwkJCWVuYWJsZV9ydGxvb2t1cD0ibm9uZS4gQ29uc2lkZXIgdGVhY2hpbmcgY29uZmlndXJlIGFib3V0IHlvdXIgcGxhdGZvcm0uIgorCQkJOzsKKwkJZXNhYworCQk7OworCW5vbmUpCisJCXVzZV9ydGxvb2t1cD1mYWxzZQorCQk7OworCSopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLXJ0bG9va3VwIHRha2VzIHJ0bWdldCwgcnRuZXRsaW5rIG9yIG5vbmUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogLS1lbmFibGUtcnRsb29rdXAgdGFrZXMgcnRtZ2V0LCBydG5ldGxpbmsgb3Igbm9uZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworZXNhYworCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIiRlbmFibGVfcnRsb29rdXBcIiIgPiY1CitlY2hvICIke0VDSE9fVH1cIiRlbmFibGVfcnRsb29rdXBcIiIgPiY2OyB9CisKKworCisjIHRpbWUgdG8gc2VlIGFib3V0IHNsb3QgbG9va3VwIG1lY2hhbmlzbXMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hpY2ggc2xvdCBsb29rdXAgdHlwZSB0byB1c2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGljaCBzbG90IGxvb2t1cCB0eXBlIHRvIHVzZS4uLiAkRUNIT19DIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNsb3Rsb29rdXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2xvdGxvb2t1cCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9zbG90bG9va3VwOworZmkKKworCitORVRTTE9UTEtVUF9TT1VSQ0U9IiRlbmFibGVfc2xvdGxvb2t1cCIKK2Nhc2UgIiRlbmFibGVfc2xvdGxvb2t1cCIgaW4KKworCWxpbnV4KQorCQl1c2Vfc2xvdGxvb2t1cD10cnVlCisJCTs7CisJc29sYXJpcykKKwkJdXNlX3Nsb3Rsb29rdXA9dHJ1ZQorCQk7OworCScnKQorIyBndWVzcyBpdCBhdXRvbWFnaWNhbGx5IGluIGEgbmljZSBiaWcgY2FzZSBzdGF0ZW1lbnQKKwkJY2FzZSAkdGFyZ2V0IGluCisJCSAgICAgKi0qLWxpbnV4KikKKwkJCXVzZV9zbG90bG9va3VwPXRydWUKKwkJCWVuYWJsZV9zbG90bG9va3VwPSJsaW51eCAtIGF1dG8iCisJCQlORVRTTE9UTEtVUF9TT1VSQ0U9ImxpbnV4IgorCQkJOzsKKwkJICAgICAqLSotc29sYXJpcyopCisJCQl1c2Vfc2xvdGxvb2t1cD10cnVlCisJCQllbmFibGVfc2xvdGxvb2t1cD0ic29sYXJpcyAtIGF1dG8iCisJCQlORVRTTE9UTEtVUF9TT1VSQ0U9InNvbGFyaXMiCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYWluIGluIC1sZGV2aW5mbyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYWluIGluIC1sZGV2aW5mby4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RldmluZm9fbWFpbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRldmluZm8gICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50CittYWluICgpCit7CityZXR1cm4gbWFpbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgorICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgIGFjX2N2X2xpYl9kZXZpbmZvX21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZGV2aW5mb19tYWluPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGV2aW5mb19tYWluIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGV2aW5mb19tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9kZXZpbmZvX21haW4gPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQkRFVklORk8gMQorX0FDRU9GCisKKyAgTElCUz0iLWxkZXZpbmZvICRMSUJTIgorCitmaQorYWNfY3ZfbGliX2RldmluZm89YWNfY3ZfbGliX2RldmluZm9fbWFpbgorCisJCQk7OworCQkgICAgICopCisJCQl1c2Vfc2xvdGxvb2t1cD1mYWxzZQorCQkJTkVUU0xPVExLVVBfU09VUkNFPSJub25lIgorCQkJZW5hYmxlX3Nsb3Rsb29rdXA9Im5vbmUuIENvbnNpZGVyIHRlYWNoaW5nIGNvbmZpZ3VyZSBhYm91dCB5b3VyIHBsYXRmb3JtLiIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlub25lKQorCQl1c2Vfc2xvdGxvb2t1cD1mYWxzZQorCQk7OworCSopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLXNsb3Rsb29rdXAgdGFrZXMgbGludXggb3Igbm9uZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS1zbG90bG9va3VwIHRha2VzIGxpbnV4IG9yIG5vbmUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkJOzsKK2VzYWMKKworCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogXCIkZW5hYmxlX3Nsb3Rsb29rdXBcIiIgPiY1CitlY2hvICIke0VDSE9fVH1cIiRlbmFibGVfc2xvdGxvb2t1cFwiIiA+JjY7IH0KKworCisKKworIyB0aW1lIHRvIHNlZSBhYm91dCBzZWMgbG9va3VwIG1lY2hhbmlzbXMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hpY2ggc2VjIGxvb2t1cCB0eXBlIHRvIHVzZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoaWNoIHNlYyBsb29rdXAgdHlwZSB0byB1c2UuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZWNsb29rdXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2VjbG9va3VwK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX3NlY2xvb2t1cDsKK2ZpCisKKworTkVUU0VDTEtVUF9TT1VSQ0U9IiRlbmFibGVfc2VjbG9va3VwIgorY2FzZSAiJGVuYWJsZV9zZWNsb29rdXAiIGluCisKKwlsaW51eCkKKwkJdXNlX3NlY2xvb2t1cD10cnVlCisJCTs7CisJJycpCisjIGd1ZXNzIGl0IGF1dG9tYWdpY2FsbHkgaW4gYSBuaWNlIGJpZyBjYXNlIHN0YXRlbWVudAorCQljYXNlICR0YXJnZXQgaW4KKwkJICAgICAqLSotbGludXgqKQorCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbGRsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX21haW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBtYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX2RsX21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfZGxfbWFpbj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX21haW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9kbF9tYWluID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJETCAxCitfQUNFT0YKKworICBMSUJTPSItbGRsICRMSUJTIgorCitmaQorYWNfY3ZfbGliX2RsPWFjX2N2X2xpYl9kbF9tYWluCisKKwkJCXVzZV9zZWNsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX3NlY2xvb2t1cD0ibGludXggLSBhdXRvIgorCQkJTkVUU0VDTEtVUF9TT1VSQ0U9ImxpbnV4IgorCQkJOzsKKwkJICAgICAqKQorCQkJdXNlX3NlY2xvb2t1cD1mYWxzZQorCQkJTkVUU0VDTEtVUF9TT1VSQ0U9Im5vbmUiCisJCQllbmFibGVfc2VjbG9va3VwPSJub25lLiBDb25zaWRlciB0ZWFjaGluZyBjb25maWd1cmUgYWJvdXQgeW91ciBwbGF0Zm9ybS4iCisJCQk7OworCQllc2FjCisJCTs7CisJbm9uZSkKKwkJdXNlX3NlY2xvb2t1cD1mYWxzZQorCQk7OworCSopCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0tZW5hYmxlLXNlY2xvb2t1cCB0YWtlcyBsaW51eCBvciBub25lIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IC0tZW5hYmxlLXNlY2xvb2t1cCB0YWtlcyBsaW51eCBvciBub25lIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFwiJGVuYWJsZV9zZWNsb29rdXBcIiIgPiY1CitlY2hvICIke0VDSE9fVH1cIiRlbmFibGVfc2VjbG9va3VwXCIiID4mNjsgfQorCisKKworCisjIHRpbWUgdG8gc2VlIGFib3V0IGRyaXZlciBsb29rdXAgbWVjaGFuaXNtcworCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGljaCBkcml2ZXIgaW5mbyBsb29rdXAgdHlwZSB0byB1c2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGljaCBkcml2ZXIgaW5mbyBsb29rdXAgdHlwZSB0byB1c2UuLi4gJEVDSE9fQyIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kcnZsb29rdXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZHJ2bG9va3VwK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0kZW5hYmxlX2Rydmxvb2t1cDsKK2ZpCisKKworTkVURFJWTEtVUF9TT1VSQ0U9IiRlbmFibGVfZHJ2bG9va3VwIgorY2FzZSAiJGVuYWJsZV9kcnZsb29rdXAiIGluCisJZXRodG9vbCkKKwkJdXNlX2Rydmxvb2t1cD10cnVlCisJCTs7CisKKwlzb2xhcmlzKQorCQl1c2VfZHJ2bG9va3VwPXRydWUKKwkJOzsKKwknJykKKyMgZ3Vlc3MgaXQgYXV0b21hZ2ljYWxseSBpbiBhIG5pY2UgYmlnIGNhc2Ugc3RhdGVtZW50CisJCWNhc2UgJHRhcmdldCBpbgorCQkgICAgICotKi1saW51eCopCisJCQl1c2VfZHJ2bG9va3VwPXRydWUKKwkJCWVuYWJsZV9kcnZsb29rdXA9ImV0aHRvb2wgLSBhdXRvIgorCQkJTkVURFJWTEtVUF9TT1VSQ0U9ImV0aHRvb2wiCisJCQk7OworCQkgICAgICotKi1zb2xhcmlzKikKKwkJICAgICAgICB1c2VfZHJ2bG9va3VwPXRydWUKKwkJCWVuYWJsZV9kcnZsb29rdXA9InNvbGFyaXMgLSBhdXRvIgorCQkJTkVURFJWTEtVUF9TT1VSQ0U9InNvbGFyaXMiCisJCQk7OworCQkgICAgICopCisJCQl1c2VfZHJ2bG9va3VwPWZhbHNlCisJCQlORVREUlZMS1VQX1NPVVJDRT0ibm9uZSIKKwkJCWVuYWJsZV9kcnZsb29rdXA9Im5vbmUuIENvbnNpZGVyIHRlYWNoaW5nIGNvbmZpZ3VyZSBhYm91dCB5b3VyIHBsYXRmb3JtLiIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlub25lKQorCQl1c2VfZHJ2bG9va3VwPWZhbHNlCisJCTs7CisJKikKKwkJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtZHJ2bG9va3VwIHRha2VzIGV0aHRvb2wgb3Igbm9uZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS1kcnZsb29rdXAgdGFrZXMgZXRodG9vbCBvciBub25lIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJCTs7Citlc2FjCisKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFwiJGVuYWJsZV9kcnZsb29rdXBcIiIgPiY1CitlY2hvICIke0VDSE9fVH1cIiRlbmFibGVfZHJ2bG9va3VwXCIiID4mNjsgfQorCisKKworIyB0aW1lIHRvIHNlZSBhYm91dCBzeXN0ZW0gbG9va3VwIG1lY2hhbmlzbXMKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hpY2ggc3lzdGVtIGluZm8gbG9va3VwIHR5cGUgdG8gdXNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hpY2ggc3lzdGVtIGluZm8gbG9va3VwIHR5cGUgdG8gdXNlLi4uICRFQ0hPX0MiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3lzbG9va3VwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N5c2xvb2t1cCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9JGVuYWJsZV9zeXNsb29rdXA7CitmaQorCisKK05FVFNZU0xLVVBfU09VUkNFPSIkZW5hYmxlX3N5c2xvb2t1cCIKK2Nhc2UgIiRlbmFibGVfc3lzbG9va3VwIiBpbgorCWhwdXgxMWkpCisJCXVzZV9zeXNsb29rdXA9dHJ1ZQorCQk7OworCisJbGludXgpCisJCXVzZV9zeXNsb29rdXA9dHJ1ZTsKKworZm9yIGFjX2hlYWRlciBpbiBzbWJpb3MvU3lzdGVtSW5mby5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKworICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxzbWJpb3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbHNtYmlvcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NtYmlvc19tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc21iaW9zICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfc21iaW9zX21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfc21iaW9zX21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zbWJpb3NfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3NtYmlvc19tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9zbWJpb3NfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCU01CSU9TIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sc21iaW9zICRMSUJTIgorCitmaQorYWNfY3ZfbGliX3NtYmlvcz1hY19jdl9saWJfc21iaW9zX21haW4KKworCQk7OworICAgICAgICBzb2xhcmlzKQorCQl1c2Vfc3lzbG9va3VwPXRydWU7CisJCSMgdGhpcyB3aWxsIGJhc2ljYWxseSB0ZWxsIHVzIGlmIHdlIGNhbiB1c2UgbGlic21iaW9zCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3NibWlvcy5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKworICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxzbWJpb3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbHNtYmlvcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NtYmlvc19tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc21iaW9zICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfc21iaW9zX21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfc21iaW9zX21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zbWJpb3NfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3NtYmlvc19tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9zbWJpb3NfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCU01CSU9TIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sc21iaW9zICRMSUJTIgorCitmaQorYWNfY3ZfbGliX3NtYmlvcz1hY19jdl9saWJfc21iaW9zX21haW4KKworCQk7OworCScnKQorIyBndWVzcyBpdCBhdXRvbWFnaWNhbGx5IGluIGEgbmljZSBiaWcgY2FzZSBzdGF0ZW1lbnQKKwkJY2FzZSAkdGFyZ2V0IGluCisJCSAgICAgKi0qLWhwdXgxMSopCisJCQl1c2Vfc3lzbG9va3VwPXRydWUKKwkJCWVuYWJsZV9zeXNsb29rdXA9ImhwdXgxMWkgLSBhdXRvIgorCQkJTkVUU1lTTEtVUF9TT1VSQ0U9ImhwdXgxMWkiCisJCQk7OworCQkgICAgICotKi1saW51eCopCisJCQl1c2Vfc3lzbG9va3VwPXRydWUKKwkJCWVuYWJsZV9zeXNsb29rdXA9ImxpbnV4IC0gYXV0byIKKworZm9yIGFjX2hlYWRlciBpbiBzbWJpb3MvU3lzdGVtSW5mby5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kYXNfYWNfSGVhZGVyOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKKworcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKworICAgIDs7Citlc2FjCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCisJICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxzbWJpb3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbHNtYmlvcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NtYmlvc19tYWluK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sc21iaW9zICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG1haW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKKyAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICBhY19jdl9saWJfc21iaW9zX21haW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19jdl9saWJfc21iaW9zX21haW49bm8KK2ZpCisKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zbWJpb3NfbWFpbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3NtYmlvc19tYWluIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2xpYl9zbWJpb3NfbWFpbiA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCU01CSU9TIDEKK19BQ0VPRgorCisgIExJQlM9Ii1sc21iaW9zICRMSUJTIgorCitmaQorYWNfY3ZfbGliX3NtYmlvcz1hY19jdl9saWJfc21iaW9zX21haW4KKworCQkJTkVUU1lTTEtVUF9TT1VSQ0U9ImxpbnV4IgorCQkJOzsKKwkJICAgICAqLSotc29sYXJpcyopCisJCSAgICAgICAgdXNlX3N5c2xvb2t1cD10cnVlCisJCQllbmFibGVfc3lzbG9va3VwPSJzb2xhcmlzIC0gYXV0byIKKwkJCU5FVFNZU0xLVVBfU09VUkNFPSJzb2xhcmlzIgorCitmb3IgYWNfaGVhZGVyIGluIHN5cy9zbWJpb3MuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQoraWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKKworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Cit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisKKyAgICA7OworZXNhYworeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorZmkKK2FjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAorCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYWluIGluIC1sc21iaW9zIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG1haW4gaW4gLWxzbWJpb3MuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zbWJpb3NfbWFpbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNtYmlvcyAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBtYWluICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCisgICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgYWNfY3ZfbGliX3NtYmlvc19tYWluPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfY3ZfbGliX3NtYmlvc19tYWluPW5vCitmaQorCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfc21iaW9zX21haW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zbWJpb3NfbWFpbiIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9saWJfc21iaW9zX21haW4gPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlNNQklPUyAxCitfQUNFT0YKKworICBMSUJTPSItbHNtYmlvcyAkTElCUyIKKworZmkKK2FjX2N2X2xpYl9zbWJpb3M9YWNfY3ZfbGliX3NtYmlvc19tYWluCisKKwkJCTs7CisJCSAgICAgKikKKwkJCXVzZV9zeXNsb29rdXA9ZmFsc2UKKwkJCU5FVFNZU0xLVVBfU09VUkNFPSJub25lIgorCQkJZW5hYmxlX3N5c2xvb2t1cD0ibm9uZS4gQ29uc2lkZXIgdGVhY2hpbmcgY29uZmlndXJlIGFib3V0IHlvdXIgcGxhdGZvcm0uIgorCQkJOzsKKwkJZXNhYworCQk7OworCW5vbmUpCisJCXVzZV9zeXNsb29rdXA9ZmFsc2UKKwkJOzsKKwkqKQorCQl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAtLWVuYWJsZS1zeXNsb29rdXAgdGFrZXMgaHB1eDExaSwgbGludXggb3Igbm9uZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS1zeXNsb29rdXAgdGFrZXMgaHB1eDExaSwgbGludXggb3Igbm9uZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQk7OworZXNhYworCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIiRlbmFibGVfc3lzbG9va3VwXCIiID4mNQorZWNobyAiJHtFQ0hPX1R9XCIkZW5hYmxlX3N5c2xvb2t1cFwiIiA+JjY7IH0KKworCisKKyMgbm93IHNwaXQgaXQgYWxsIG91dAorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIHNyYy9uZXRwZXJmX3ZlcnNpb24uaCBzcmMvTWFrZWZpbGUgc3JjL21pc3NpbmcvTWFrZWZpbGUgc3JjL21pc3NpbmcvbTQvTWFrZWZpbGUgZG9jL01ha2VmaWxlIGRvYy9leGFtcGxlcy9NYWtlZmlsZSBuZXRwZXJmLnNwZWMiCisKKworY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lLiIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgKikgJGFzX3Vuc2V0ICRhY192YXIgOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgZWxzZQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCitERUZTPS1ESEFWRV9DT05GSUdfSAorCithY19saWJvYmpzPQorYWNfbHRsaWJvYmpzPQorZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCisgIGFjX2k9YGVjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFjX2xpYm9ianM9IiRhY19saWJvYmpzIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKK2RvbmUKK0xJQk9CSlM9JGFjX2xpYm9ianMKKworTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKworCitpZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitpZiB0ZXN0IC16ICIke05FRURfTElCQ09NUEFUX1RSVUV9IiAmJiB0ZXN0IC16ICIke05FRURfTElCQ09NUEFUX0ZBTFNFfSI7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJORUVEX0xJQkNPTVBBVFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTkVFRF9MSUJDT01QQVRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCit7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorY2F0ID4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KKworZGVidWc9ZmFsc2UKK2FjX2NzX3JlY2hlY2s9ZmFsc2UKK2FjX2NzX3NpbGVudD1mYWxzZQorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCisgICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OworZXNhYworCitmaQorCisKKworCisjIFBBVEggbmVlZHMgQ1IKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc191bnNldD11bnNldAorZWxzZQorICBhc191bnNldD1mYWxzZQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCithc19ubD0nCisnCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCitjYXNlICQwIGluCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorZmkKKworIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCitmb3IgYXNfdmFyIGluIEVOViBNQUlMIE1BSUxQQVRICitkbyAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorZG9uZQorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitmb3IgYXNfdmFyIGluIFwKKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKyAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgTENfVEVMRVBIT05FIExDX1RJTUUKK2RvCisgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgIGVsc2UKKyAgICAoJGFzX3Vuc2V0ICRhc192YXIpID4vZGV2L251bGwgMj4mMSAmJiAkYXNfdW5zZXQgJGFzX3ZhcgorICBmaQorZG9uZQorCisjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworCisjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKworIyBDRFBBVEguCiskYXNfdW5zZXQgQ0RQQVRICisKKworCisgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTworICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7CisKKyAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisgICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJworICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAorICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCisgICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKKyAgIyBjYXNlIGF0IGxpbmUgZW5kLgorICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKyAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCisgICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAtbiAnCisgICAgcAorICAgIC9bJF1MSU5FTk8vPQorICAnIDwkYXNfbXlzZWxmIHwKKyAgICBzZWQgJworICAgICAgcy9bJF1MSU5FTk8uKi8mLS8KKyAgICAgIHQgbGluZW5vCisgICAgICBiCisgICAgICA6bGluZW5vCisgICAgICBOCisgICAgICA6bG9vcAorICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXS4qXG5cKVwoLipcKS9cMlwxXDIvCisgICAgICB0IGxvb3AKKyAgICAgIHMvLVxuLiovLworICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8CisgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KKyAgLiAiLi8kYXNfbWUubGluZW5vIgorICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCisKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKKworRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KK2Nhc2UgYGVjaG8gLW4geGAgaW4KKy1uKikKKyAgY2FzZSBgZWNobyAneFxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgICopICAgRUNIT19DPSdcYyc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyCitmaQorZWNobyA+Y29uZiQkLmZpbGUKK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19sbl9zPSdsbiAtcycKKyAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICBhc19sbl9zPSdjcCAtcCcKK2VsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2xuX3M9bG4KK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmRpci9jb25mJCQuZmlsZSBjb25mJCQuZmlsZQorcm1kaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9OgorZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCitpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Rlc3RfeD0ndGVzdCAteCcKK2Vsc2UKKyAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYXNfbHNfTF9vcHRpb249TAorICBlbHNlCisgICAgYXNfbHNfTF9vcHRpb249CisgIGZpCisgIGFzX3Rlc3RfeD0nCisgICAgZXZhbCBzaCAtYyAnXCcnCisgICAgICBpZiB0ZXN0IC1kICIkMSI7IHRoZW4KKyAgICAgICAgdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbgorICAgICAgICAtKilzZXQgIi4vJDEiOzsKKwllc2FjOworCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCitleGVjIDY+JjEKKworIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KK2FjX2xvZz0iCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IG5ldHBlcmYgJGFzX21lIDIuNC41LCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAkICQwICRACisKK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIgorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KK2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyIKK2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMiCitjb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMiCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGZyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUKK2N1cnJlbnQgY29uZmlndXJhdGlvbi4KKworVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCisJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK0NvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiskY29uZmlnX2NvbW1hbmRzCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCithY19jc192ZXJzaW9uPSJcXAorbmV0cGVyZiBjb25maWcuc3RhdHVzIDIuNC41Citjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEsCisgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCisKK0NvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAorIyB2YWx1ZS4gIEJ5IHdlIG5lZWQgdG8ga25vdyBpZiBmaWxlcyB3ZXJlIHNwZWNpZmllZCBieSB0aGUgdXNlci4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgIGVjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7OworICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgJGFjX29wdGFyZyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgJGFjX29wdGFyZyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgeyBlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisKKyAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIGVjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCAkU0hFTEwgJDAgIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgorICBDT05GSUdfU0hFTEw9JFNIRUxMCisgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgZXhlYyAkU0hFTEwgIiQwIiRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorZXhlYyA1Pj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworX0FTQk9YCisgIGVjaG8gIiRhY19sb2ciCit9ID4mNQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjCisjIElOSVQtQ09NTUFORFMKKyMKK0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorCisjIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworZG8KKyAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgorICAgICJjb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgY29uZmlnLmgiIDs7CisgICAgImRlcGZpbGVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlcGZpbGVzIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKyAgICAic3JjL25ldHBlcmZfdmVyc2lvbi5oIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNyYy9uZXRwZXJmX3ZlcnNpb24uaCIgOzsKKyAgICAic3JjL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNyYy9NYWtlZmlsZSIgOzsKKyAgICAic3JjL21pc3NpbmcvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc3JjL21pc3NpbmcvTWFrZWZpbGUiIDs7CisgICAgInNyYy9taXNzaW5nL200L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNyYy9taXNzaW5nL200L01ha2VmaWxlIiA7OworICAgICJkb2MvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL01ha2VmaWxlIiA7OworICAgICJkb2MvZXhhbXBsZXMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZG9jL2V4YW1wbGVzL01ha2VmaWxlIiA7OworICAgICJuZXRwZXJmLnNwZWMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbmV0cGVyZi5zcGVjIiA7OworCisgICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0KKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KKyAgeyB0ZXN0IC16ICIkdG1wIiB8fCB0ZXN0ICEgLWQgIiR0bXAiIHx8IHJtIC1mciAiJHRtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorfQorIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mJCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikKK30gfHwKK3sKKyAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH0KK30KKworIworIyBTZXQgdXAgdGhlIHNlZCBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMKKworIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKK2lmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCisKK19BQ0VPRgorCisKKworYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworICBjYXQgPmNvbmYkJHN1YnMuc2VkIDw8X0FDRU9GCitTSEVMTCEkU0hFTEwkYWNfZGVsaW0KK1BBVEhfU0VQQVJBVE9SISRQQVRIX1NFUEFSQVRPUiRhY19kZWxpbQorUEFDS0FHRV9OQU1FISRQQUNLQUdFX05BTUUkYWNfZGVsaW0KK1BBQ0tBR0VfVEFSTkFNRSEkUEFDS0FHRV9UQVJOQU1FJGFjX2RlbGltCitQQUNLQUdFX1ZFUlNJT04hJFBBQ0tBR0VfVkVSU0lPTiRhY19kZWxpbQorUEFDS0FHRV9TVFJJTkchJFBBQ0tBR0VfU1RSSU5HJGFjX2RlbGltCitQQUNLQUdFX0JVR1JFUE9SVCEkUEFDS0FHRV9CVUdSRVBPUlQkYWNfZGVsaW0KK2V4ZWNfcHJlZml4ISRleGVjX3ByZWZpeCRhY19kZWxpbQorcHJlZml4ISRwcmVmaXgkYWNfZGVsaW0KK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUhJHByb2dyYW1fdHJhbnNmb3JtX25hbWUkYWNfZGVsaW0KK2JpbmRpciEkYmluZGlyJGFjX2RlbGltCitzYmluZGlyISRzYmluZGlyJGFjX2RlbGltCitsaWJleGVjZGlyISRsaWJleGVjZGlyJGFjX2RlbGltCitkYXRhcm9vdGRpciEkZGF0YXJvb3RkaXIkYWNfZGVsaW0KK2RhdGFkaXIhJGRhdGFkaXIkYWNfZGVsaW0KK3N5c2NvbmZkaXIhJHN5c2NvbmZkaXIkYWNfZGVsaW0KK3NoYXJlZHN0YXRlZGlyISRzaGFyZWRzdGF0ZWRpciRhY19kZWxpbQorbG9jYWxzdGF0ZWRpciEkbG9jYWxzdGF0ZWRpciRhY19kZWxpbQoraW5jbHVkZWRpciEkaW5jbHVkZWRpciRhY19kZWxpbQorb2xkaW5jbHVkZWRpciEkb2xkaW5jbHVkZWRpciRhY19kZWxpbQorZG9jZGlyISRkb2NkaXIkYWNfZGVsaW0KK2luZm9kaXIhJGluZm9kaXIkYWNfZGVsaW0KK2h0bWxkaXIhJGh0bWxkaXIkYWNfZGVsaW0KK2R2aWRpciEkZHZpZGlyJGFjX2RlbGltCitwZGZkaXIhJHBkZmRpciRhY19kZWxpbQorcHNkaXIhJHBzZGlyJGFjX2RlbGltCitsaWJkaXIhJGxpYmRpciRhY19kZWxpbQorbG9jYWxlZGlyISRsb2NhbGVkaXIkYWNfZGVsaW0KK21hbmRpciEkbWFuZGlyJGFjX2RlbGltCitERUZTISRERUZTJGFjX2RlbGltCitFQ0hPX0MhJEVDSE9fQyRhY19kZWxpbQorRUNIT19OISRFQ0hPX04kYWNfZGVsaW0KK0VDSE9fVCEkRUNIT19UJGFjX2RlbGltCitMSUJTISRMSUJTJGFjX2RlbGltCitidWlsZF9hbGlhcyEkYnVpbGRfYWxpYXMkYWNfZGVsaW0KK2hvc3RfYWxpYXMhJGhvc3RfYWxpYXMkYWNfZGVsaW0KK3RhcmdldF9hbGlhcyEkdGFyZ2V0X2FsaWFzJGFjX2RlbGltCitidWlsZCEkYnVpbGQkYWNfZGVsaW0KK2J1aWxkX2NwdSEkYnVpbGRfY3B1JGFjX2RlbGltCitidWlsZF92ZW5kb3IhJGJ1aWxkX3ZlbmRvciRhY19kZWxpbQorYnVpbGRfb3MhJGJ1aWxkX29zJGFjX2RlbGltCitob3N0ISRob3N0JGFjX2RlbGltCitob3N0X2NwdSEkaG9zdF9jcHUkYWNfZGVsaW0KK2hvc3RfdmVuZG9yISRob3N0X3ZlbmRvciRhY19kZWxpbQoraG9zdF9vcyEkaG9zdF9vcyRhY19kZWxpbQordGFyZ2V0ISR0YXJnZXQkYWNfZGVsaW0KK3RhcmdldF9jcHUhJHRhcmdldF9jcHUkYWNfZGVsaW0KK3RhcmdldF92ZW5kb3IhJHRhcmdldF92ZW5kb3IkYWNfZGVsaW0KK3RhcmdldF9vcyEkdGFyZ2V0X29zJGFjX2RlbGltCitJTlNUQUxMX1BST0dSQU0hJElOU1RBTExfUFJPR1JBTSRhY19kZWxpbQorSU5TVEFMTF9TQ1JJUFQhJElOU1RBTExfU0NSSVBUJGFjX2RlbGltCitJTlNUQUxMX0RBVEEhJElOU1RBTExfREFUQSRhY19kZWxpbQorQ1lHUEFUSF9XISRDWUdQQVRIX1ckYWNfZGVsaW0KK1BBQ0tBR0UhJFBBQ0tBR0UkYWNfZGVsaW0KK1ZFUlNJT04hJFZFUlNJT04kYWNfZGVsaW0KK0FDTE9DQUwhJEFDTE9DQUwkYWNfZGVsaW0KK0FVVE9DT05GISRBVVRPQ09ORiRhY19kZWxpbQorQVVUT01BS0UhJEFVVE9NQUtFJGFjX2RlbGltCitBVVRPSEVBREVSISRBVVRPSEVBREVSJGFjX2RlbGltCitNQUtFSU5GTyEkTUFLRUlORk8kYWNfZGVsaW0KK0FNVEFSISRBTVRBUiRhY19kZWxpbQoraW5zdGFsbF9zaCEkaW5zdGFsbF9zaCRhY19kZWxpbQorU1RSSVAhJFNUUklQJGFjX2RlbGltCitJTlNUQUxMX1NUUklQX1BST0dSQU0hJElOU1RBTExfU1RSSVBfUFJPR1JBTSRhY19kZWxpbQorQVdLISRBV0skYWNfZGVsaW0KK1NFVF9NQUtFISRTRVRfTUFLRSRhY19kZWxpbQorYW1fX2xlYWRpbmdfZG90ISRhbV9fbGVhZGluZ19kb3QkYWNfZGVsaW0KK0NDISRDQyRhY19kZWxpbQorQ0ZMQUdTISRDRkxBR1MkYWNfZGVsaW0KK0xERkxBR1MhJExERkxBR1MkYWNfZGVsaW0KK0NQUEZMQUdTISRDUFBGTEFHUyRhY19kZWxpbQorYWNfY3RfQ0MhJGFjX2N0X0NDJGFjX2RlbGltCitFWEVFWFQhJEVYRUVYVCRhY19kZWxpbQorT0JKRVhUISRPQkpFWFQkYWNfZGVsaW0KK0RFUERJUiEkREVQRElSJGFjX2RlbGltCithbV9faW5jbHVkZSEkYW1fX2luY2x1ZGUkYWNfZGVsaW0KK2FtX19xdW90ZSEkYW1fX3F1b3RlJGFjX2RlbGltCitBTURFUF9UUlVFISRBTURFUF9UUlVFJGFjX2RlbGltCitBTURFUF9GQUxTRSEkQU1ERVBfRkFMU0UkYWNfZGVsaW0KK0FNREVQQkFDS1NMQVNIISRBTURFUEJBQ0tTTEFTSCRhY19kZWxpbQorQ0NERVBNT0RFISRDQ0RFUE1PREUkYWNfZGVsaW0KK2FtX19mYXN0ZGVwQ0NfVFJVRSEkYW1fX2Zhc3RkZXBDQ19UUlVFJGFjX2RlbGltCithbV9fZmFzdGRlcENDX0ZBTFNFISRhbV9fZmFzdGRlcENDX0ZBTFNFJGFjX2RlbGltCitSQU5MSUIhJFJBTkxJQiRhY19kZWxpbQorQ1BQISRDUFAkYWNfZGVsaW0KK0dSRVAhJEdSRVAkYWNfZGVsaW0KK0VHUkVQISRFR1JFUCRhY19kZWxpbQorTElCT0JKUyEkTElCT0JKUyRhY19kZWxpbQorTkVFRF9MSUJDT01QQVRfVFJVRSEkTkVFRF9MSUJDT01QQVRfVFJVRSRhY19kZWxpbQorTkVFRF9MSUJDT01QQVRfRkFMU0UhJE5FRURfTElCQ09NUEFUX0ZBTFNFJGFjX2RlbGltCitORVRDUFVfU09VUkNFISRORVRDUFVfU09VUkNFJGFjX2RlbGltCitORVRSVExLVVBfU09VUkNFISRORVRSVExLVVBfU09VUkNFJGFjX2RlbGltCitORVRTTE9UTEtVUF9TT1VSQ0UhJE5FVFNMT1RMS1VQX1NPVVJDRSRhY19kZWxpbQorTkVUU0VDTEtVUF9TT1VSQ0UhJE5FVFNFQ0xLVVBfU09VUkNFJGFjX2RlbGltCitORVREUlZMS1VQX1NPVVJDRSEkTkVURFJWTEtVUF9TT1VSQ0UkYWNfZGVsaW0KK05FVFNZU0xLVVBfU09VUkNFISRORVRTWVNMS1VQX1NPVVJDRSRhY19kZWxpbQorTFRMSUJPQkpTISRMVExJQk9CSlMkYWNfZGVsaW0KK19BQ0VPRgorCisgIGlmIHRlc3QgYHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5zZWQgfCBncmVwIC1jIFhgID0gOTc7IHRoZW4KKyAgICBicmVhaworICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorCithY19lb2Y9YHNlZCAtbiAnL15DRU9GWzAtOV0qJC9zL0NFT0YvMC9wJyBjb25mJCRzdWJzLnNlZGAKK2lmIHRlc3QgLW4gIiRhY19lb2YiOyB0aGVuCisgIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCisgIGFjX2VvZj1gZXhwciAkYWNfZW9mICsgMWAKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPiJcJHRtcC9zdWJzLTEuc2VkIiA8PFxDRU9GJGFjX2VvZgorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorX0FDRU9GCitzZWQgJworcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZworcy9eL3MsQC87IHMvIS9ALHwjXyEhXyN8LworOm4KK3Qgbgorcy8nIiRhY19kZWxpbSInJC8sZy87IHQKK3MvJC9cXC87IHAKK047IHMvXi4qXG4vLzsgcy9bLFxcJl0vXFwmL2c7IHMvQC9AfCNfISFfI3wvZzsgYiBuCisnID4+JENPTkZJR19TVEFUVVMgPGNvbmYkJHN1YnMuc2VkCitybSAtZiBjb25mJCRzdWJzLnNlZAorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK0NFT0YkYWNfZW9mCitfQUNFT0YKKworCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97CitzLzoqXCQoc3JjZGlyKToqLzovCitzLzoqXCR7c3JjZGlyfToqLzovCitzLzoqQHNyY2RpckA6Ki86Lworcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvCitzLzoqJC8vCitzL15bXj1dKj1bCSBdKiQvLworfScKK2ZpCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorCisKK2ZvciBhY190YWcgaW4gIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgICA6QyAkQ09ORklHX0NPTU1BTkRTCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBJbnZhbGlkIHRhZyAkYWNfdGFnLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIDpbRkhdLSkgYWNfdGFnPS06LTs7CisgIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7CisgIGVzYWMKKyAgYWNfc2F2ZV9JRlM9JElGUworICBJRlM9OgorICBzZXQgeCAkYWNfdGFnCisgIElGUz0kYWNfc2F2ZV9JRlMKKyAgc2hpZnQKKyAgYWNfZmlsZT0kMQorICBzaGlmdAorCisgIGNhc2UgJGFjX21vZGUgaW4KKyAgOkwpIGFjX3NvdXJjZT0kMTs7CisgIDpbRkhdKQorICAgIGFjX2ZpbGVfaW5wdXRzPQorICAgIGZvciBhY19mCisgICAgZG8KKyAgICAgIGNhc2UgJGFjX2YgaW4KKyAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKyAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCisJICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAorCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgorCSB0ZXN0IC1mICIkYWNfZiIgfHwKKwkgICBjYXNlICRhY19mIGluCisJICAgW1xcLyRdKikgZmFsc2U7OworCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKKwkgICBlc2FjIHx8CisJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICAgICAgZXNhYworICAgICAgYWNfZmlsZV9pbnB1dHM9IiRhY19maWxlX2lucHV0cyAkYWNfZiIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0iR2VuZXJhdGVkIGZyb20gImBJRlM9OgorCSAgZWNobyAkKiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnYCIgYnkgY29uZmlndXJlLiIKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIjs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKworICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKKyRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgeyBhc19kaXI9IiRhY19kaXIiCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKyAgYWNfYnVpbGRkaXI9LgorCitjYXNlICIkYWNfZGlyIiBpbgorLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisqKQorICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC8uLixnO3MsLywsJ2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKworICBjYXNlICRhY19tb2RlIGluCisgIDpGKQorICAjCisgICMgQ09ORklHX0ZJTEUKKyAgIworCisgIGNhc2UgJElOU1RBTEwgaW4KKyAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfSU5TVEFMTD0kSU5TVEFMTCA7OworICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRfcHJlZml4JElOU1RBTEwgOzsKKyAgZXNhYworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qga25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgorIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCithY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KKworY2FzZSBgc2VkIC1uICcvZGF0YXJvb3RkaXIvIHsKKyAgcAorICBxCit9CisvQGRhdGFkaXJAL3AKKy9AZG9jZGlyQC9wCisvQGluZm9kaXJAL3AKKy9AbG9jYWxlZGlyQC9wCisvQG1hbmRpckAvcAorJyAkYWNfZmlsZV9pbnB1dHNgIGluCisqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CisqQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorICBhY19kYXRhcm9vdGRpcl9oYWNrPScKKyAgcyZAZGF0YWRpckAmJGRhdGFkaXImZworICBzJkBkb2NkaXJAJiRkb2NkaXImZworICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCisgIHMmQGxvY2FsZWRpckAmJGxvY2FsZWRpciZnCisgIHMmQG1hbmRpckAmJG1hbmRpciZnCisgICAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgIHNlZCAiJGFjX3Zwc3ViCiskZXh0cmFzdWIKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorcyZAY29uZmlndXJlX2lucHV0QCYkY29uZmlndXJlX2lucHV0Jjt0IHQKK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKK3MmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKK3MmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0CitzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAorJGFjX2RhdGFyb290ZGlyX2hhY2sKKyIgJGFjX2ZpbGVfaW5wdXRzIHwgc2VkIC1mICIkdG1wL3N1YnMtMS5zZWQiIHwgc2VkICdzL3wjXyEhXyN8Ly9nJyA+JHRtcC9vdXQKKwordGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKKyAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiYyO30KKworICBybSAtZiAiJHRtcC9zdGRpbiIKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtKSBjYXQgIiR0bXAvb3V0Ijsgcm0gLWYgIiR0bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSI7IG12ICIkdG1wL291dCIgJGFjX2ZpbGU7OworICBlc2FjCisgOzsKKyAgOkgpCisgICMKKyAgIyBDT05GSUdfSEVBREVSCisgICMKK19BQ0VPRgorCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYSBzZWQgc2NyaXB0IGBjb25mdGVzdC5kZWZpbmVzJywgdGhhdAorIyBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCitybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnRhaWwKKyMgRmlyc3QsIGFwcGVuZCBhIHNwYWNlIHRvIGV2ZXJ5IHVuZGVmL2RlZmluZSBsaW5lLCB0byBlYXNlIG1hdGNoaW5nLgorZWNobyAncy8kLyAvJyA+Y29uZnRlc3QuZGVmaW5lcworIyBUaGVuLCBwcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QsIG9yIGluCisjIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQsIGluIGNvbmZpZy5zdGF0dXMuICBJZiBzb21lIG1hY3JvcyB3ZXJlCisjIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgI2RlZmluZXMgZm9yIHRoZSBzYW1lCisjIHN5bWJvbCwgd2hpY2ggaXMgdXNlbGVzcy4gIEJ1dCBkbyBub3Qgc29ydCB0aGVtLCBzaW5jZSB0aGUgbGFzdAorIyBBQ19ERUZJTkUgbXVzdCBiZSBob25vcmVkLgorYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKKyMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBQQVJBTVMgQyBWQUxVRSBEIiwgd2hlcmUKKyMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQsIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KKyMgUEFSQU1TIGlzIHRoZSBwYXJhbWV0ZXIgbGlzdCBpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi0taW4gbW9zdCBjYXNlcywgaXQncworIyBqdXN0IGFuIGVtcHR5IHN0cmluZy4KK2FjX2RBPSdzLF5cXChbCSAjXSpcXClbXgkgXSpcXChbCSBdKicKK2FjX2RCPSdcXClbCSAoXS4qLFxcMWRlZmluZVxcMicKK2FjX2RDPScgJworYWNfZEQ9JyAsJworCit1bmlxIGNvbmZkZWZzLmggfAorICBzZWQgLW4gJworCXQgcnNldAorCTpyc2V0CisJcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovLworCXQgb2sKKwlkCisJOm9rCisJcy9bXFwmLF0vXFwmL2cKKwlzL15cKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvICciJGFjX2RBIidcMSciJGFjX2RCIidcMiciJHthY19kQ30iJ1wzJyIkYWNfZEQiJy9wCisJcy9eXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpLyciJGFjX2RBIidcMSciJGFjX2RCJGFjX2RDIidcMiciJGFjX2REIicvcAorICAnID4+Y29uZnRlc3QuZGVmaW5lcworCisjIFJlbW92ZSB0aGUgc3BhY2UgdGhhdCB3YXMgYXBwZW5kZWQgdG8gZWFzZSBtYXRjaGluZy4KKyMgVGhlbiByZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgorIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCisjIChUaGUgcmVnZXhwIGNhbiBiZSBzaG9ydCwgc2luY2UgdGhlIGxpbmUgY29udGFpbnMgZWl0aGVyICNkZWZpbmUgb3IgI3VuZGVmLikKK2VjaG8gJ3MvICQvLworcyxeWwkgI10qdS4qLC8qICYgKi8sJyA+PmNvbmZ0ZXN0LmRlZmluZXMKKworIyBCcmVhayB1cCBjb25mdGVzdC5kZWZpbmVzOgorYWNfbWF4X3NlZF9saW5lcz01MAorCisjIEZpcnN0IHNlZCBjb21tYW5kIGlzOgkgc2VkIC1mIGRlZmluZXMuc2VkICRhY19maWxlX2lucHV0cyA+IiR0bXAvb3V0MSIKKyMgU2Vjb25kIG9uZSBpczoJIHNlZCAtZiBkZWZpbmVzLnNlZCAiJHRtcC9vdXQxIiA+IiR0bXAvb3V0MiIKKyMgVGhpcmQgb25lIHdpbGwgYmU6CSBzZWQgLWYgZGVmaW5lcy5zZWQgIiR0bXAvb3V0MiIgPiIkdG1wL291dDEiCisjIGV0IGNldGVyYS4KK2FjX2luPSckYWNfZmlsZV9pbnB1dHMnCithY19vdXQ9JyIkdG1wL291dDEiJworYWNfbnh0PSciJHRtcC9vdXQyIicKKword2hpbGUgOgorZG8KKyAgIyBXcml0ZSBhIGhlcmUgZG9jdW1lbnQ6CisgICAgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyAgICAjIEZpcnN0LCBjaGVjayB0aGUgZm9ybWF0IG9mIHRoZSBsaW5lOgorICAgIGNhdCA+IlwkdG1wL2RlZmluZXMuc2VkIiA8PFxcQ0VPRgorL15bCSBdKiNbCSBdKnVuZGVmWwkgXVsJIF0qJGFjX3dvcmRfcmVbCSBdKlwkL2IgZGVmCisvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qJGFjX3dvcmRfcmVbKAkgXS9iIGRlZgorYgorOmRlZgorX0FDRU9GCisgIHNlZCAke2FjX21heF9zZWRfbGluZXN9cSBjb25mdGVzdC5kZWZpbmVzID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnQ0VPRgorICAgIHNlZCAtZiAiJHRtcC9kZWZpbmVzLnNlZCInICIkYWNfaW4gPiRhY19vdXQiID4+JENPTkZJR19TVEFUVVMKKyAgYWNfaW49JGFjX291dDsgYWNfb3V0PSRhY19ueHQ7IGFjX254dD0kYWNfaW4KKyAgc2VkIDEsJHthY19tYXhfc2VkX2xpbmVzfWQgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudGFpbAorICBncmVwIC4gY29uZnRlc3QudGFpbCA+L2Rldi9udWxsIHx8IGJyZWFrCisgIHJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKKyAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC5kZWZpbmVzCitkb25lCitybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnRhaWwKKworZWNobyAiYWNfcmVzdWx0PSRhY19pbiIgPj4kQ09ORklHX1NUQVRVUworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICBlY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgPiIkdG1wL2NvbmZpZy5oIgorICAgIGNhdCAiJGFjX3Jlc3VsdCIgPj4iJHRtcC9jb25maWcuaCIKKyAgICBpZiBkaWZmICRhY19maWxlICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CitlY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBybSAtZiAkYWNfZmlsZQorICAgICAgbXYgIiR0bXAvY29uZmlnLmgiICRhY19maWxlCisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIgorICAgIGNhdCAiJGFjX3Jlc3VsdCIKKyAgZmkKKyAgcm0gLWYgIiR0bXAvb3V0MTIiCisjIENvbXB1dGUgJGFjX2ZpbGUncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkYWNfZmlsZSB8ICRhY19maWxlOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkYWNfZmlsZSIgPmAkYXNfZGlybmFtZSAtLSAkYWNfZmlsZSB8fAorJGFzX2V4cHIgWCRhY19maWxlIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgkYWNfZmlsZSA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYJGFjX2ZpbGUgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCRhY19maWxlIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorZWNobyBYJGFjX2ZpbGUgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgL3N0YW1wLWgkX2FtX3N0YW1wX2NvdW50CisgOzsKKworICA6QykgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CitlY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyA7OworICBlc2FjCisKKworICBjYXNlICRhY19maWxlJGFjX21vZGUgaW4KKyAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IGZvciBtZiBpbiAkQ09ORklHX0ZJTEVTOyBkbworICAjIFN0cmlwIE1GIHNvIHdlIGVuZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgorICBtZj1gZWNobyAiJG1mIiB8IHNlZCAtZSAncy86LiokLy8nYAorICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0CisgICMgc29tZSBwZW9wbGUgcmVuYW1lIHRoZW07IHNvIGluc3RlYWQgd2UgbG9vayBhdCB0aGUgZmlsZSBjb250ZW50LgorICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBvZiBlYWNoIGZpbGUgdG8gc2F5IHNvLgorICAjIFNvIGxldCdzIGdyZXAgd2hvbGUgZmlsZS4KKyAgaWYgZ3JlcCAnXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZScgJG1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAorJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRtZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgIGVsc2UKKyAgICBjb250aW51ZQorICBmaQorICBncmVwICdeREVQX0ZJTEVTICo9ICpbXiAjXScgPCAiJG1mIiA+IC9kZXYvbnVsbCB8fCBjb250aW51ZQorICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQX0ZJTEVTIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQKKyAgIyBydW5uaW5nIGBtYWtlJy4KKyAgREVQRElSPWBzZWQgLW4gLWUgJy9eREVQRElSID0gLyBzLy8vcCcgPCAiJG1mImAKKyAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKKyAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgVT1gc2VkIC1uIC1lICcvXlUgPSAvIHMvLy9wJyA8ICIkbWYiYAorICB0ZXN0IC1kICIkZGlycGFydC8kREVQRElSIiB8fCBta2RpciAiJGRpcnBhcnQvJERFUERJUiIKKyAgIyBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlIHNpbXBsZXN0IGFwcHJvYWNoIHRvCisgICMgY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlIGV4cGFuc2lvbi4KKyAgZm9yIGZpbGUgaW4gYHNlZCAtbiAtZSAnCisgICAgL15ERVBfRklMRVMgPSAuKlxcXFwkLyB7CisgICAgICBzL15ERVBfRklMRVMgPSAvLworICAgICAgOmxvb3AKKwlzL1xcXFwkLy8KKwlwCisJbgorCS9cXFxcJC8gYiBsb29wCisgICAgICBwCisgICAgfQorICAgIC9eREVQX0ZJTEVTID0gLyBzL15ERVBfRklMRVMgPSAvL3AnIDwgIiRtZiIgfCBcCisgICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAorJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgIHsgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKyAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICBkb25lCitkb25lCisgOzsKKworICBlc2FjCitkb25lICMgZm9yIGFjX3RhZworCisKK3sgKGV4aXQgMCk7IGV4aXQgMDsgfQorX0FDRU9GCitjaG1vZCAreCAkQ09ORklHX1NUQVRVUworYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKworCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKyAgZXhlYyA1Pi9kZXYvbnVsbAorICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitmaQorCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2NvbmZpZ3VyZS5hYyBiL25ldHBlcmYtMi40LjUvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYmEzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDk5MyBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCitGVUxMLVBBQ0tBR0UtTkFNRT1uZXRwZXJmCitWRVJTSU9OPTIuNC41CitCVUctUkVQT1JULUFERFJFU1M9bmV0cGVyZi1mZWVkYmFja0BuZXRwZXJmLm9yZworCitBQ19QUkVSRVEoMi41OSkKK0FDX0lOSVQobmV0cGVyZiwgMi40LjUpCisjIHVzZSB0aGUgdGFyZ2V0IHZlcnNpb24gcmF0aGVyIHRoYW4gaG9zdCAtIG9uZSBkYXkgd2UgbWF5IHdhbnQgY3Jvc3MtY29tcGlsZQorQUNfQ0FOT05JQ0FMX1RBUkdFVAorQUNfQ09ORklHX1NSQ0RJUihbc3JjL2hpc3QuaF0pCitBTV9JTklUX0FVVE9NQUtFKFtkaXN0LXppcF0pCitBTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorIyBBQ19DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorCitBQ19DT05GSUdfTElCT0JKX0RJUihzcmMvbWlzc2luZykKKworIyBtYWtlIHN1cmUgd2UgYnVpbGQgbmV0cGVyZl92ZXJzaW9uLmgKK3RvdWNoIHNyYy9uZXRwZXJmX3ZlcnNpb24uaC5pbgorCisjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCitBQ19QUk9HX0NDCitBQ19QUk9HX1JBTkxJQgorCitBQ19DX0NPTlNUCisKKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitBQ19IQVZFX0xJQlJBUlkobSkKKworIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX0hFQURFUl9TVERDCitBQ19IRUFERVJfU1lTX1dBSVQKK0FDX0NIRUNLX0hFQURFUlMoW2FycGEvaW5ldC5oIGVuZGlhbi5oIGVycm5vLmggZmNudGwuaCBsaW1pdHMuaCBtYWxsb2MuaCBuZXRkYi5oIG5ldGluZXQvaW4uaCBzaWduYWwuaCBzdGRsaWIuaCBzdHJpbmcuaCBzdHJpbmdzLmggc3lzL2lvY3RsLmggc3lzL21tYW4uaCBzeXMvcGFyYW0uaCBzeXMvc29ja2V0Lmggc3lzL3RpbWUuaCB1bmlzdGQuaCBpZmFkZHJzLmggc3lzL3NvY2tpby5oXSkKKworIyBTb21lIHBsYXRmb3JtcyByZXF1aXJlIHRoZXNlLiAgVGhlcmUgbWF5IGJlIGEgYmV0dGVyIHdheS4KK0FDX0hBVkVfTElCUkFSWShzb2NrZXQpCitpZiB0ZXN0ICIkYWNfY3ZfbGliX3NvY2tldF9tYWluIiA9IHllcyA7IHRoZW4KKyAgICBBQ19IQVZFX0xJQlJBUlkobnNsKQorICAgIEFDX0hBVkVfTElCUkFSWShzZW5kZmlsZSkKKyAgICBBQ19TWVNfTEFSR0VGSUxFCitmaQorCisjIHRoaXMgb25lIGlzIGZvciBUcnU2NCBhbmQgYmluZF90b19jcHVfaWQKK0FDX0hBVkVfTElCUkFSWShtYWNoKQorCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitBQ19DX0NPTlNUCitBQ19UWVBFX09GRl9UCitBQ19UWVBFX1NJWkVfVAorIyBBQ19UWVBFX1NPQ0tMRU5fVAorCitPTERfVFlQRV9TT0NLTEVOX1QKKworIyBBQ19UWVBFX0lOX1BPUlRfVAorQUNfREVDTF9IX0VSUk5PCitBQ19TVFJVQ1RfU09DS0FERFJfU1RPUkFHRQorQUNfSEVBREVSX1RJTUUKK0FDX0hFQURFUl9TVERCT09MCitBQ19DSEVDS19TQV9MRU4oYWNfY3Zfc29ja2FkZHJfaGFzX3NhX2xlbikKKworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorIyBBQ19GVU5DX0VSUk9SX0FUX0xJTkUKK0FDX0ZVTkNfRk9SSworIyBBQ19GVU5DX01BTExPQworQUNfRlVOQ19NTUFQCitBQ19GVU5DX1NFTEVDVF9BUkdUWVBFUworQUNfRlVOQ19TRVRQR1JQCitBQ19UWVBFX1NJR05BTAorIyBBQ19GVU5DX1NUQVQKKyMgcmVtb3ZlIHBzdGF0X2dldGR5bmFtaWMgKGF0IGxlYXN0IGZvciBub3cpIHNpbmNlIHdlIGRvbid0IGRvCisjIGFueXRoaW5nIGNvbmRpdGlvbmFsIHdpdGggdGhlIGNoZWNrIGFueXdheS4uLgorQUNfQ0hFQ0tfRlVOQ1MoW2FsYXJtIGJ6ZXJvIGdldGhvc3RieW5hbWUgZ2V0aHJ0aW1lIGdldHRpbWVvZmRheSBpbmV0X250b2EgbWVtc2V0IG1lbWNweSBtdW5tYXAgc2VsZWN0IHNvY2tldCBzcXJ0IHN0cmNhc2VjbXAgc3RyY2hyIHN0cnN0ciBzdHJ0b3VsIHVuYW1lXSkKKworI0FDX0NPTkZJR19TVUJESVJTKHNyYy9taXNzaW5nKQorCisjIGRvZXMgdGhpcyBwbGF0Zm9ybSBuZWVkIHRoZSByZXBsYWNlbWVudCBnZXRhZGRyaW5mbworQUNfQ0hFQ0tfRlVOQ1MoW2dldG5hbWVpbmZvIGdldGFkZHJpbmZvIGluZXRfbnRvcCBnZXRpZmFkZHJzXSkKKyMgQUNfUkVQTEFDRV9GVU5DUyhbZ2V0YWRkcmluZm9dKQorCisKK2lmIHRlc3QgIiRhY19jdl9mdW5jX2dldGFkZHJpbmZvJGFjX2N2X2Z1bmNfZ2V0bmFtZWluZm8iICE9IHllc3llcyA7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1JlcXVlc3RpbmcgcmVwbGFjZW1lbnQgZ2V0YWRkcmluZm8vZ2V0bmFtZWluZm9dKQorICAgQUNfTElCT0JKKGdldGFkZHJpbmZvKQorICAgSEFWRV9NSVNTSU5HPXllcworZmkKK2lmIHRlc3QgIiRhY19jdl9mdW5jX2luZXRfbnRvcCIgIT0geWVzIDsgdGhlbgorICAgQUNfTVNHX05PVElDRShbUmVxdWVzdGluZyByZXBsYWNlbWVudCBpbmV0X250b3BdKQorICAgQUNfTElCT0JKKGluZXRfbnRvcCkKKyAgIEhBVkVfTUlTU0lORz15ZXMKK2ZpCitBTV9DT05ESVRJT05BTChORUVEX0xJQkNPTVBBVCwgdGVzdCAiJEhBVkVfTUlTU0lORyIgPSAieWVzIikKKworQUNfQ0hFQ0tfRlVOQ1Moc2VuZGZpbGUpCisKK0FDX0NIRUNLX0ZVTkNTKHVuYW1lKQorCisjIGNoZWNrIGZvciB0aGUgdmFyaW91cyBDUFUgYmluZGluZyBjYWxscworQUNfQ0hFQ0tfRlVOQ1MobXBjdGwgcHJvY2Vzc29yX2JpbmQgc2NoZWRfc2V0YWZmaW5pdHkgYmluZF90b19jcHVfaWQgYmluZHByb2Nlc3NvcikKKworIyBzZWUgaWYgd2Ugc2hvdWxkIGJlIGVuYWJsaW5nIGhpc3RvZ3JhbSBzdXBwb3J0CisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGluY2x1ZGUgaGlzdG9ncmFtIHN1cHBvcnQpCisKK0FDX0FSR19FTkFCTEUoaGlzdG9ncmFtLAorCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtaGlzdG9ncmFtXSxbaW5jbHVkZSBpbmRpdmlkdWFsIG9wIHRpbWluZywgbWF5IGFmZmVjdCByZXN1bHRdKSBdKQorCitjYXNlICIkZW5hYmxlX2hpc3RvZ3JhbSIgaW4KKwl5ZXMpCisJCXVzZV9oaXN0b2dyYW09dHJ1ZQorCQk7OworCW5vKQorCQl1c2VfaGlzdG9ncmFtPWZhbHNlCisJCTs7CisJJycpCisJCSMgd2hhdGV2ZXIKKwkJdXNlX2hpc3RvZ3JhbT1mYWxzZQorCQk7OworCSopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUtaGlzdG9ncmFtIHRha2VzIHllcyBvciBub10pCisJCTs7Citlc2FjCisKK2lmICR1c2VfaGlzdG9ncmFtCit0aGVuCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2lmICR1c2VfaGlzdG9ncmFtCit0aGVuCisJQUNfREVGSU5FKFtXQU5UX0hJU1RPR1JBTV0sLFtEZWZpbmUgdG8gb25lIHRvIGVuYWJsZSBoaXN0b2dyYW0gc3VwcG9ydC4gTWF5IGFmZmVjdCByZXN1bHRzLl0pCitmaQorIyBzZWUgaWYgd2Ugc2hvdWxkIGJlIGVuYWJsaW5nIGhpc3RvZ3JhbSBzdXBwb3J0CisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGluY2x1ZGUgZGlydHkgc3VwcG9ydCkKKworQUNfQVJHX0VOQUJMRShkaXJ0eSwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRpcnR5XSxbd3JpdGUgdG8gYnVmZmVycyBlYWNoIHRpbWUsIG1heSBhZmZlY3QgcmVzdWx0XSkgXSkKKworY2FzZSAiJGVuYWJsZV9kaXJ0eSIgaW4KKwl5ZXMpCisJCXVzZV9kaXJ0eT10cnVlCisJCTs7CisJbm8pCisJCXVzZV9kaXJ0eT1mYWxzZQorCQk7OworCScnKQorCQkjIHdoYXRldmVyCisJCXVzZV9kaXJ0eT1mYWxzZQorCQk7OworCSopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUtZGlydHkgdGFrZXMgeWVzIG9yIG5vXSkKKwkJOzsKK2VzYWMKKworaWYgJHVzZV9kaXJ0eQordGhlbgorCUFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQorCitpZiAkdXNlX2RpcnR5Cit0aGVuCisJQUNfREVGSU5FKFtESVJUWV0sLFtEZWZpbmUgdG8gb25lIHRvIGVuYWJsZSBkaXJ0eSBidWZmZXIgc3VwcG9ydC4gTWF5IGFmZmVjdCByZXN1bHRzLl0pCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgZGVtbyBzdXBwb3J0CisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGluY2x1ZGUgZGVtbyBzdXBwb3J0KQorCitBQ19BUkdfRU5BQkxFKGRlbW8sCisJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kZW1vXSxbZW1pdCBpbnRlcmltIHJlc3VsdHMgZHVyaW5nIHRoZSBydW4uIE1heSBhZmZlY3QgcmVzdWx0cy5dKV0pCisKK2Nhc2UgIiRlbmFibGVfZGVtbyIgaW4KKwl5ZXMpCisJCXVzZV9kZW1vPXRydWUKKwkJOzsKKwlubykKKwkJdXNlX2RlbW89ZmFsc2UKKwkJOzsKKwknJykKKwkJIyB3aGF0ZXZlcgorCQl1c2VfZGVtbz1mYWxzZQorCQk7OworCSopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUtZGVtbyB0YWtlcyB5ZXMgb3Igbm9dKQorCQk7OworZXNhYworCitpZiAkdXNlX2RlbW8KK3RoZW4KKwlBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKKworaWYgJHVzZV9kZW1vCit0aGVuCisJQUNfREVGSU5FKFtXQU5UX0RFTU9dLCxbRGVmaW5lIHRvIG9uZSB0byBlbmFibGUgZGVtbyBzdXBwb3J0LiBNYXkgYWZmZWN0IHJlc3VsdHMuXSkKK2ZpCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBpbmNsdWRpbmcgdGhlIEFGX1VOSVggdGVzdHMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gaW5jbHVkZSBVbml4LWRvbWFpbiBzb2NrZXQgdGVzdHMpCisKK0FDX0FSR19FTkFCTEUodW5peGRvbWFpbiwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXVuaXhkb21haW5dLFtpbmNsdWRlIFVuaXggRG9tYWluIHNvY2tldCB0ZXN0c10pXSkKKworY2FzZSAiJGVuYWJsZV91bml4ZG9tYWluIiBpbgorICAgICB5ZXMpCisJCXVzZV91bml4ZG9tYWluPXRydWUKKwkJOzsKKyAgICAgbm8pCQorCQl1c2VfdW5peGRvbWFpbj1mYWxzZQorCQk7OworICAgICAnJykKKwkJdXNlX3VuaXhkb21haW49ZmFsc2UKKwkJOzsKKyAgICAgKikKKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS11bml4ZG9tYWluIHRha2VzIHllcyBvciBub10pCisJCTs7Citlc2FjCisKK2lmICR1c2VfdW5peGRvbWFpbgordGhlbgorCUFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQorCitpZiAkdXNlX3VuaXhkb21haW4KK3RoZW4KKwlBQ19ERUZJTkUoW1dBTlRfVU5JWF0sLFtEZWZpbmUgdG8gb25lIHRvIGluY2x1ZGUgVW5peCBEb21haW4gc29ja2V0IHRlc3RzLl0pCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgaW5jbHVkaW5nIHRoZSBETFBJIHRlc3RzCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGluY2x1ZGUgRExQSSB0ZXN0cykKKworQUNfQVJHX0VOQUJMRShkbHBpLAorCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZGxwaV0sW2luY2x1ZGUgRExQSSAobGluay1sYXllcikgdGVzdHNdKV0pCisKK2Nhc2UgIiRlbmFibGVfZGxwaSIgaW4KKyAgICAgeWVzKQorCQl1c2VfZGxwaT10cnVlCisJCTs7CisgICAgIG5vKQkKKwkJdXNlX2RscGk9ZmFsc2UKKwkJOzsKKyAgICAgJycpCisJCXVzZV9kbHBpPWZhbHNlCisJCTs7CisgICAgICopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUtZGxwaSB0YWtlcyB5ZXMgb3Igbm9dKQorCQk7OworZXNhYworCitpZiAkdXNlX2RscGkKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKKworaWYgJHVzZV9kbHBpCit0aGVuCisJQUNfREVGSU5FKFtXQU5UX0RMUEldLCxbRGVmaW5lIHRvIG9uZSB0byBpbmNsdWRlIERMUEkgdGVzdHMuXSkKK2ZpCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBpbmNsdWRpbmcgdGhlIERDQ1AgdGVzdHMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gaW5jbHVkZSBEQ0NQIHRlc3RzKQorCitBQ19BUkdfRU5BQkxFKGRjY3AsCisJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kY2NwXSxbaW5jbHVkZSBEQ0NQIHRlc3RzXSldKQorCitjYXNlICIkZW5hYmxlX2RjY3AiIGluCisgICAgIHllcykKKwkJdXNlX2RjY3A9dHJ1ZQorCQk7OworICAgICBubykJCisJCXVzZV9kY2NwPWZhbHNlCisJCTs7CisgICAgICcnKQorCQl1c2VfZGNjcD1mYWxzZQorCQk7OworICAgICAqKQorCQlBQ19NU0dfRVJST1IoWy0tZW5hYmxlLWRjY3AgdGFrZXMgeWVzIG9yIG5vXSkKKwkJOzsKK2VzYWMKKworaWYgJHVzZV9kY2NwCit0aGVuCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2lmICR1c2VfZGNjcAordGhlbgorCUFDX0RFRklORShbV0FOVF9EQ0NQXSwsW0RlZmluZSB0byBvbmUgdG8gaW5jbHVkZSBEQ0NQIHRlc3RzLl0pCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgaW5jbHVkaW5nIHRoZSBPTU5JIHRlc3RzCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGluY2x1ZGUgT01OSSB0ZXN0cykKKworQUNfQVJHX0VOQUJMRShvbW5pLAorCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtb21uaV0sW2luY2x1ZGUgT01OSSB0ZXN0c10pXSkKKworY2FzZSAiJGVuYWJsZV9vbW5pIiBpbgorICAgICB5ZXMpCisJCXVzZV9vbW5pPXRydWUKKwkJOzsKKyAgICAgbm8pCQorCQl1c2Vfb21uaT1mYWxzZQorCQk7OworICAgICAnJykKKwkJdXNlX29tbmk9ZmFsc2UKKwkJOzsKKyAgICAgKikKKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1vbW5pIHRha2VzIHllcyBvciBub10pCisJCTs7Citlc2FjCisKK2lmICR1c2Vfb21uaQordGhlbgorCUFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQorCitpZiAkdXNlX29tbmkKK3RoZW4KKwlBQ19ERUZJTkUoW1dBTlRfT01OSV0sLFtEZWZpbmUgdG8gb25lIHRvIGluY2x1ZGUgT01OSSB0ZXN0cy5dKQorZmkKKworCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgaW5jbHVkaW5nIHRoZSBYVEkgdGVzdHMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gaW5jbHVkZSBYVEkgdGVzdHMpCisKK0FDX0FSR19FTkFCTEUoeHRpLAorCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUteHRpXSxbaW5jbHVkZSBYVEkgc29ja2V0IHRlc3RzXSldKQorCitjYXNlICIkZW5hYmxlX3h0aSIgaW4KKyAgICAgeWVzKQorCQl1c2VfeHRpPXRydWUKKwkJOzsKKyAgICAgbm8pCQorCQl1c2VfeHRpPWZhbHNlCisJCTs7CisgICAgICcnKQorCQl1c2VfeHRpPWZhbHNlCisJCTs7CisgICAgICopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUteHRpIHRha2VzIHllcyBvciBub10pCisJCTs7Citlc2FjCisKK2lmICR1c2VfeHRpCit0aGVuCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2lmICR1c2VfeHRpCit0aGVuCisJQUNfREVGSU5FKFtXQU5UX1hUSV0sLFtEZWZpbmUgdG8gb25lIHRvIGluY2x1ZGUgWFRJIHRlc3RzLl0pCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgaW5jbHVkaW5nIHRoZSBTRFAgdGVzdHMKKworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gaW5jbHVkZSBTRFAgdGVzdHMpCisKK0FDX0FSR19FTkFCTEUoc2RwLAorCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2RwXSxbaW5jbHVkZSBTRFAgc29ja2V0IHRlc3RzXSldKQorCitjYXNlICIkZW5hYmxlX3NkcCIgaW4KKyAgICAgeWVzKQorCQkjIHByb2JhYmx5IG5lZWQgdG8gYmUgYSBiaXQgbW9yZSBzb3BoaXN0aWNhdGVkIGhlcmUKKwkJQUNfQ0hFQ0tfTElCKHNkcCx0X29wZW4pCisJCXVzZV9zZHA9dHJ1ZQorCQk7OworICAgICBubykJCisJCXVzZV9zZHA9ZmFsc2UKKwkJOzsKKyAgICAgJycpCisJCXVzZV9zZHA9ZmFsc2UKKwkJOzsKKyAgICAgKikKKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1zZHAgdGFrZXMgeWVzIG9yIG5vXSkKKwkJOzsKK2VzYWMKKworaWYgJHVzZV9zZHAKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKKworaWYgJHVzZV9zZHAKK3RoZW4KKwlBQ19ERUZJTkUoW1dBTlRfU0RQXSwsW0RlZmluZSB0byBvbmUgdG8gaW5jbHVkZSBTRFAgdGVzdHMuXSkKK2ZpCisKKyMgc2VlIGlmIHdlIHNob3VsZCBiZSBpbmNsdWRpbmcgdGhlIElDU0MtRVhTIHRlc3RzCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGluY2x1ZGUgSUNTQy1FWFMgdGVzdHMpCisKK0FDX0FSR19FTkFCTEUoZXhzLAorCVtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZXhzXSxbaW5jbHVkZSBJQ1NDIGFzeW5jIHNvY2tldHMgdGVzdHNdKV0pCisKK2Nhc2UgIiRlbmFibGVfZXhzIiBpbgorICAgICB5ZXMpCisJCXVzZV9leHM9dHJ1ZQorCQlBQ19DSEVDS19IRUFERVIoc3lzL2V4cy5oLCxbdXNlX2V4cz1mYWxzZV0pCisJCUFDX0NIRUNLX0xJQihleHMsZXhzX2luaXQsLFt1c2VfZXhzPWZhbHNlXSkKKwkJOzsKKyAgICAgbm8pCQorCQl1c2VfZXhzPWZhbHNlCisJCTs7CisgICAgICcnKQorCQl1c2VfZXhzPWZhbHNlCisJCTs7CisgICAgICopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUtZXhzIHRha2VzIHllcyBvciBub10pCisJCTs7Citlc2FjCisKK2lmICR1c2VfZXhzCit0aGVuCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2lmICR1c2VfZXhzCit0aGVuCisJQUNfREVGSU5FKFtIQVZFX0lDU0NfRVhTXSwsW0RlZmluZSB0byBvbmUgdG8gaW5jbHVkZSBJQ1NDLUVYUyB0ZXN0cy5dKQorZmkKKworIyBzZWUgaWYgd2Ugc2hvdWxkIGJlIGVuYWJsaW5nIFNDVFAgc3VwcG9ydAorCisKK0FDX0FSR19FTkFCTEUoc2N0cCwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNjdHBdLFtpbmNsdWRlIHRlc3RzIHRvIG1lYXN1cmUgU0NUUCBwZXJmb3JtYW5jZSBdKV0pCisKK2Nhc2UgIiRlbmFibGVfc2N0cCIgaW4KKwl5ZXMpCisJCXVzZV9zY3RwPXRydWUKKwkJQUNfQ0hFQ0tfSEVBREVSUyhuZXRpbmV0L3NjdHAuaCwsdXNlX3NjdHA9ZmFsc2UsCitbWworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KK11dKQorCQljYXNlICIkaG9zdCIgaW4KKwkJKi0qLWZyZWVic2Q3LiopCisJCQkjIEZyZWVCU0QgNy54IFNDVFAgc3VwcG9ydCBkb2Vzbid0IG5lZWQgLWxzY3RwLgorCQkJOzsKKwkJKikKKwkJCUFDX0hBVkVfTElCUkFSWShzY3RwLCx1c2Vfc2N0cD1mYWxzZSkKKwkJCTs7CisJCWVzYWMKKwkJQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZS5zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQsCisJCQkJLCAsIFsjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+XSkKKwkJaWYgdGVzdCAiJGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2N0cF9ldmVudF9zdWJzY3JpYmVfc2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50IiA9ICJ5ZXMiOyB0aGVuCisJCQlBQ19ERUZJTkUoW0hBVkVfU0NUUF9BREFQVEFUSU9OX0xBWUVSX0VWRU5UXSwgMSwKKwkJCQkgIFtEZWZpbmUgdG8gMSBpZiBgc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlJyBoYXMgYSBgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50JyBtZW1iZXJdKQorCQlmaQorCQk7OworCW5vKQorCQl1c2Vfc2N0cD1mYWxzZQorCQk7OworCScnKQorCQkjIHdoYXRldmVyCisJCXVzZV9zY3RwPWZhbHNlCisJCTs7CisJKikKKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1zY3RwIHRha2VzIHllcyBvciBub10pCisJCTs7Citlc2FjCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGluY2x1ZGUgU0NUUCB0ZXN0cykKKworaWYgJHVzZV9zY3RwCit0aGVuCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2lmICR1c2Vfc2N0cAordGhlbgorCUFDX0RFRklORShbV0FOVF9TQ1RQXSwsW0RlZmluZSB0byBvbmUgdG8gaW5jbHVkZSBTQ1RQIHRlc3RzLl0pCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgcGFjZWQgc2VuZHMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgcGFjZWQgc2VuZCAoaW50ZXJ2YWxzKSBzdXBwb3J0XSkKKworQUNfQVJHX0VOQUJMRShpbnRlcnZhbHMsCisJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnRlcnZhbHNdLFtpbmNsdWRlIGFiaWxpdHkgdG8gcGFjZSBvcGVyYXRpb25zLCBtYXkgYWZmZWN0IHJlc3VsdF0pXSkKKworY2FzZSAiJGVuYWJsZV9pbnRlcnZhbHMiIGluCisJeWVzKQorCQl1c2VfaW50ZXJ2YWxzPXRydWUKKwkJOzsKKwlubykKKwkJdXNlX2ludGVydmFscz1mYWxzZQorCQk7OworCScnKQorCQl1c2VfaW50ZXJ2YWxzPWZhbHNlCisJCTs7CisJKikKKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1pbnRlcnZhbHMgdGFrZXMgeWVzIG9yIG5vXSkKKwkJOzsKK2VzYWMKKworaWYgJHVzZV9pbnRlcnZhbHMKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKHllcykKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKKworaWYgJHVzZV9pbnRlcnZhbHMKK3RoZW4KKwlBQ19ERUZJTkUoW1dBTlRfSU5URVJWQUxTXSwsW0RlZmluZSB0byBvbmUgdG8gZW5hYmxlIHBhY2VkIG9wZXJhdGlvbiBzdXBwb3J0LiBNYXkgYWZmZWN0IHJlc3VsdHMuXSkKK2ZpCisKKyMgc2VlIGlmIHBhY2VkIHNlbmRzIHNob3VsZCB3YWl0IGFuZCBzcGluCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBwYWNlZCBzZW5kcyBzaG91bGQgc3Bpbl0pCisKK0FDX0FSR19FTkFCTEUoc3BpbiwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNwaW5dLFtwYWNlZCBvcGVyYXRpb25zICgtLWVuYWJsZS1pbnRlcnZhbHMpIHNob3VsZCBzaXQgYW5kIHNwaW4gLSBXSUxMIGFmZmVjdCByZXN1bHRdKV0pCisKK2Nhc2UgIiRlbmFibGVfc3BpbiIgaW4KKwl5ZXMpCisJCXVzZV9zcGluPXRydWUKKwkJOzsKKwlubykKKwkJdXNlX3NwaW49ZmFsc2UKKwkJOzsKKwknJykKKwkJdXNlX3NwaW49ZmFsc2UKKwkJOzsKKwkqKQorCQlBQ19NU0dfRVJST1IoWy0tZW5hYmxlLXNwaW4gdGFrZXMgeWVzIG9yIG5vXSkKKwkJOzsKK2VzYWMKKworaWYgJHVzZV9zcGluCit0aGVuCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2lmICR1c2Vfc3BpbgordGhlbgorCUFDX0RFRklORShbV0FOVF9JTlRFUlZBTFNdLCxbRGVmaW5lIHRvIG9uZSB0byBlbmFibGUgcGFjZWQgb3BlcmF0aW9uIHN1cHBvcnQuIE1heSBhZmZlY3QgcmVzdWx0cy5dKQorCUFDX0RFRklORShbV0FOVF9TUElOXSwsW0RlZmluZSB0byBvbmUgdG8gc3BpbiB3YWl0aW5nIG9uIHBhY2VkIG9wZXJhdGlvbi4gV0lMTCBBRkZFRkNUIENQVSBVVElMSVpBVElPTl0pCitmaQorCisjIHNlZSBpZiB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgaW5pdGlhbCByZXF1ZXN0IGJ1cnN0cworCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gaW5jbHVkZSBpbml0aWFsIGJ1cnN0IHN1cHBvcnQgaW4gX1JSIHRlc3RzXSkKKworQUNfQVJHX0VOQUJMRShidXJzdCwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWJ1cnN0XSxbaW5jbHVkZSBpbnRpYWwgcmVxdWVzdCBidXJzdCBhYmlsaXR5IGluIF9SUiB0ZXN0cywgbWF5IGFmZmVjdCByZXN1bHRdKV0pCisKK2Nhc2UgIiRlbmFibGVfYnVyc3QiIGluCisJeWVzKQorCQl1c2VfYnVyc3Q9dHJ1ZQorCQk7OworCW5vKQorCQl1c2VfYnVyc3Q9ZmFsc2UKKwkJOzsKKwknJykKKwkJdXNlX2J1cnN0PWZhbHNlCisJCTs7CisJKikKKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1idXJzdCB0YWtlcyB5ZXMgb3Igbm9dKQorCQk7OworZXNhYworCitpZiAkdXNlX2J1cnN0Cit0aGVuCisJQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisJQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK2lmICR1c2VfYnVyc3QKK3RoZW4KKwlBQ19ERUZJTkUoW1dBTlRfRklSU1RfQlVSU1RdLCxbRGVmaW5lIHRvIG9uZSB0byBlbmFibGUgaW5pdGlhbCBfUlIgYnVyc3Qgc3VwcG9ydC4gTWF5IGFmZmVjdCByZXN1bHRzLl0pCitmaQorCisjIHRpbWUgdG8gc2VlIGFib3V0IENQVSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudHMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGljaCBDUFUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnQgdHlwZSB0byB1c2VdKQorCitBQ19BUkdfRU5BQkxFKGNwdXV0aWwsCisJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1jcHV1dGlsXSxbaW5jbHVkZSBjb2RlIHRvIG1lYXN1cmUgQ1BVIHV0aWxpemF0aW9uIHVzaW5nIHNwZWNpZmllZCBtZWNoYW5pc21dKV0pCisKK05FVENQVV9TT1VSQ0U9IiRlbmFibGVfY3B1dXRpbCIKK2Nhc2UgIiRlbmFibGVfY3B1dXRpbCIgaW4KKwlwc3RhdCkKKwkJdXNlX2NwdXV0aWw9dHJ1ZQorCQlBQ19ERUZJTkUoW1VTRV9QU1RBVF0sLFtVc2UgSFAtVVgncyBwc3RhdCBpbnRlcmZhY2UgdG8gbWVhc3VyZSBDUFUgdXRpbC5dKQorCQk7OworCXBzdGF0bmV3KQorCQl1c2VfY3B1dXRpbD10cnVlCisJCUFDX0RFRklORShbVVNFX1BTVEFUXSwsW1VzZSBIUC1VWCdzIHBzdGF0IGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLl0pCisJCTs7CisgICAgICAgIHBlcmZzdGF0KQorICAgICAgICAgICAgICAgIHVzZV9jcHV1dGlsPXRydWUKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW1VTRV9QRVJGU1RBVF0sLFtVc2UgQUlYJ3MgcGVyZnN0YXQgaW50ZXJmYWNlIHRvIG1lYXN1cmUgQ1BVIHV0aWwuXSkKKwkJQUNfSEFWRV9MSUJSQVJZKHBlcmZzdGF0KQorICAgICAgICAgICAgICAgIDs7CisKKwlsb29wZXIpCisJCXVzZV9jcHV1dGlsPXRydWUKKwkJQUNfREVGSU5FKFtVU0VfTE9PUEVSXSwsW1VzZSBsb29wZXIvc29ha2VyIHByb2Nlc3NlcyB0byBtZWFzdXJlIENQVSB1dGlsLl0pCisJCTs7CQkKKwlwcm9jc3RhdCkKKwkJdXNlX2NwdXV0aWw9dHJ1ZQorCQlBQ19ERUZJTkUoW1VTRV9QUk9DX1NUQVRdLCxbVXNlIExpbnV4J3MgcHJvY3N0YXQgaW50ZXJmYWNlIHRvIG1lYXN1cmUgQ1BVIHV0aWwuXSkKKwkJOzsKKwlrc3RhdCkKKwkJdXNlX2NwdXV0aWw9dHJ1ZQorCQlBQ19ERUZJTkUoW1VTRV9LU1RBVF0sLFtVc2UgU29sYXJpcydzIGtzdGF0IGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLl0pCisJCUFDX0hBVkVfTElCUkFSWShrc3RhdCkKKwkJOzsKKwlrc3RhdDEwKQorCQl1c2VfY3B1dXRpbD10cnVlCisJCUFDX0RFRklORShbVVNFX0tTVEFUXSwsW1VzZSBTb2xhcmlzJ3Mga3N0YXQgaW50ZXJmYWNlIHRvIG1lYXN1cmUgQ1BVIHV0aWwuXSkKKwkJQUNfSEFWRV9MSUJSQVJZKGtzdGF0KQorCQk7OworCW9zeCkKKwkJdXNlX2NwdXV0aWw9dHJ1ZQorCQlBQ19ERUZJTkUoW1VTRV9PU1hdLCxbVXNlIE1hY09TIFgncyBob3N0X2luZm8gaW50ZXJmYWNlIHRvIG1lYXN1cmUgQ1BVIHV0aWwuXSkKKwkJOzsKKwknJykKKyMgaWE2NC1ocC1ocHV4MTEuMjMKKyMgaTM4Ni1wYy1zb2xhcmlzMi4xMAorIyBndWVzcyBpdCBhdXRvbWFnaWNhbGx5IGluIGEgbmljZSBiaWcgY2FzZSBzdGF0ZW1lbnQKKwkJY2FzZSAkdGFyZ2V0IGluCisJCSAgICAgKi0qLWxpbnV4KikKKwkJCXVzZV9jcHV1dGlsPXRydWUKKwkJCUFDX0RFRklORShbVVNFX1BST0NfU1RBVF0sLFtVc2UgTGludXgncyBwcm9jc3RhdCBpbnRlcmZhY2UgdG8gbWVhc3VyZSBDUFUgdXRpbC5dKQorCQkJZW5hYmxlX2NwdXV0aWw9InByb2NzdGF0IC0gYXV0byIKKwkJCU5FVENQVV9TT1VSQ0U9InByb2NzdGF0IgorCQkJOzsKKwkJICAgICAqLSotaHB1eDExLjIzIHwgKi0qLWhwdXgxMS4zMSkKKwkJCXVzZV9jcHV1dGlsPXRydWUKKwkJCUFDX0RFRklORShbVVNFX1BTVEFUXSwsW1VzZSBIUC1VWCdzIHBzdGF0IGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLl0pCisJCQllbmFibGVfY3B1dXRpbD0icHN0YXRuZXcgLSBhdXRvIgorCQkJTkVUQ1BVX1NPVVJDRT0icHN0YXRuZXciCisJCQk7OworCQkgICAgICotKi1ocHV4MTEqIHwgKi0qLWhwdXgxMCopCisJCQl1c2VfY3B1dXRpbD10cnVlCisJCQlBQ19ERUZJTkUoW1VTRV9QU1RBVF0sLFtVc2UgSFAtVVgncyBwc3RhdCBpbnRlcmZhY2UgdG8gbWVhc3VyZSBDUFUgdXRpbC5dKQorCQkJZW5hYmxlX2NwdXV0aWw9InBzdGF0IC0gYXV0byIKKwkJCU5FVENQVV9TT1VSQ0U9InBzdGF0IgorCQkJOzsKKwkJICAgICAqLSotYWl4NS4qKQorCQkJdXNlX3B1dXRpbD10cnVlCisJCQlBQ19ERUZJTkUoW1VTRV9QRVJGU1RBVF0sLFtVc2UgQUlYJ3MgcGVyZnN0YXQgaW50ZXJmYWNlIHRvIG1lYXN1cmUgQ1BVIHV0aWwuXSkKKwkJCUFDX0hBVkVfTElCUkFSWShwZXJmc3RhdCkKKwkJCWVuYWJsZV9jcHV1dGlsPSJwZXJmc3RhdCAtIGF1dG8iCisJCQlORVRDUFVfU09VUkNFPSJwZXJmc3RhdCIKKwkJCTs7CisJCSAgICAgKi0qLXNvbGFyaXMyLjEqKQorCQkJdXNlX2NwdXV0aWw9dHJ1ZQorCQkJQUNfREVGSU5FKFtVU0VfS1NUQVRdLCxbVXNlIFNvbGFyaXMncyBrc3RhdCBpbnRlcmZhY2UgdG8gbWVhc3VyZSBDUFUgdXRpbC5dKQorCQkJQUNfSEFWRV9MSUJSQVJZKGtzdGF0KQorCQkJZW5hYmxlX2NwdXV0aWw9ImtzdGF0MTAgLSBhdXRvIgorCQkJTkVUQ1BVX1NPVVJDRT0ia3N0YXQxMCIKKwkJCTs7CisJCSAgICAgKi0qLXNvbGFyaXMyLiopCisJCQl1c2VfY3B1dXRpbD10cnVlCisJCQlBQ19ERUZJTkUoW1VTRV9LU1RBVF0sLFtVc2UgU29sYXJpcydzIGtzdGF0IGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLl0pCisJCQlBQ19IQVZFX0xJQlJBUlkoa3N0YXQpCisJCQllbmFibGVfY3B1dXRpbD0ia3N0YXQgLSBhdXRvIgorCQkJTkVUQ1BVX1NPVVJDRT0ia3N0YXQiCisJCQk7OworICAgICAgICAgICAgICAgICAgICAgKi0qLWZyZWVic2RbWzQtN11dLiogfCAqLSotbmV0YnNkW1sxLTldXS4qICkKKwkJCXVzZV9jcHV1dGlsPXRydWUKKwkJCUFDX0RFRklORShbVVNFX1NZU0NUTF0sLFtVc2UgTXVtYmxlQlNEJ3Mgc3lzY3RsIGludGVyZmFjZSB0byBtZWFzdXJlIENQVSB1dGlsLl0pCisJCQllbmFibGVfY3B1dXRpbD0ic3lzY3RsIC0gYXV0byIKKwkJCU5FVENQVV9TT1VSQ0U9InN5c2N0bCIKKwkJCTs7CisJCSAgICAqLSotZGFyd2luKikKKwkJCXVzZV9jcHV1dGlsPXRydWUKKwkJCUFDX0RFRklORShbVVNFX09TWF0sLFtVc2UgTWFjT1MgWCdzIGhvc3RfaW5mbyBpbnRlcmZhY2UgdG8gbWVhc3VyZSBDUFUgdXRpbC5dKQorCQkJZW5hYmxlX2NwdXV0aWw9Im9zeCAtIGF1dG8iCisJCQlORVRDUFVfU09VUkNFPSJvc3giCisJCQk7OworCQkgICAgICopCisJCQl1c2VfY3B1dXRpbD1mYWxzZQorCQkJTkVUQ1BVX1NPVVJDRT0ibm9uZSIKKwkJCWVuYWJsZV9jcHV1dGlsPSJub25lLiBDb25zaWRlciB0ZWFjaGluZyBjb25maWd1cmUgYWJvdXQgeW91ciBwbGF0Zm9ybS4iCisJCQk7OworCQllc2FjCisJCTs7CisJbm9uZSkKKwkJdXNlX2NwdXV0aWw9ZmFsc2UKKwkJOzsKKwkqKQorCQlBQ19NU0dfRVJST1IoWy0tZW5hYmxlLWNwdXV0aWwgdGFrZXMga3N0YXQsIGtzdGF0MTAsIGxvb3Blciwgb3N4LCBwZXJmc3RhdCwgcHJvY3N0YXQsIHBzdGF0LCBwc3RhdG5ldywgc3lzY3RsIG9yIG5vbmVdKQorCQk7OworZXNhYworCisJQUNfTVNHX1JFU1VMVCgiJGVuYWJsZV9jcHV1dGlsIikKKworQUNfU1VCU1QoTkVUQ1BVX1NPVVJDRSkKKworIyB0aW1lIHRvIHNlZSBhYm91dCByb3V0ZSBsb29rdXAgbWVjaGFuaXNtcworCitBQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIHJvdXRlIGxvb2t1cCB0eXBlIHRvIHVzZV0pCisKK0FDX0FSR19FTkFCTEUocnRsb29rdXAsCisJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ydGxvb2t1cF0sW2luY2x1ZGUgY29kZSB0byBmaW5kIHRoZSBwcm9iYWJsZSBlZ3Jlc3MgaW50ZXJmYWNlIHVzaW5nIHNwZWNpZmllZCBtZWNoYW5pc21dKV0pCisKK05FVFJUTEtVUF9TT1VSQ0U9IiRlbmFibGVfcnRsb29rdXAiCitjYXNlICIkZW5hYmxlX3J0bG9va3VwIiBpbgorCXJ0bWdldCkKKwkJdXNlX3J0bG9va3VwPXRydWUKKwkJOzsKKworCXJ0bmV0bGluaykKKwkJdXNlX3J0bG9va3VwPXRydWUKKwkJOzsKKwknJykKKyMgZ3Vlc3MgaXQgYXV0b21hZ2ljYWxseSBpbiBhIG5pY2UgYmlnIGNhc2Ugc3RhdGVtZW50CisJCWNhc2UgJHRhcmdldCBpbgorCQkgICAgICotKi1saW51eCopCisJCQl1c2VfcnRsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX3J0bG9va3VwPSJydG5ldGxpbmsgLSBhdXRvIgorCQkJTkVUUlRMS1VQX1NPVVJDRT0icnRuZXRsaW5rIgorCQkJOzsKKwkJICAgICAqLSotaHB1eDExLjMxIHwgKi0qLXNvbGFyaXMqIHwgKi0qLWFpeDUqKQorCQkJdXNlX3J0bG9va3VwPXRydWUKKwkJCWVuYWJsZV9ydGxvb2t1cD0icnRtZ2V0IC0gYXV0byIKKwkJCU5FVFJUTEtVUF9TT1VSQ0U9InJ0bWdldCIKKwkJCTs7CisgICAgICAgICAgICAgICAgICAgICAqLSotZnJlZWJzZFtbNC03XV0uKiB8ICotKi1kYXJ3aW4qKQorCQkJdXNlX3J0bG9va3VwPXRydWUKKwkJCWVuYWJsZV9ydGxvb2t1cD0icnRtZ2V0IC0gYXV0byIKKwkJCU5FVFJUTEtVUF9TT1VSQ0U9InJ0bWdldCIKKwkJCTs7CisJCSAgICAgKikKKwkJCXVzZV9ydGxvb2t1cD1mYWxzZQorCQkJTkVUUlRMS1VQX1NPVVJDRT0ibm9uZSIKKwkJCWVuYWJsZV9ydGxvb2t1cD0ibm9uZS4gQ29uc2lkZXIgdGVhY2hpbmcgY29uZmlndXJlIGFib3V0IHlvdXIgcGxhdGZvcm0uIgorCQkJOzsKKwkJZXNhYworCQk7OworCW5vbmUpCisJCXVzZV9ydGxvb2t1cD1mYWxzZQorCQk7OworCSopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUtcnRsb29rdXAgdGFrZXMgcnRtZ2V0LCBydG5ldGxpbmsgb3Igbm9uZV0pCisJCTs7Citlc2FjCisKKwlBQ19NU0dfUkVTVUxUKCIkZW5hYmxlX3J0bG9va3VwIikKKworQUNfU1VCU1QoTkVUUlRMS1VQX1NPVVJDRSkKKworIyB0aW1lIHRvIHNlZSBhYm91dCBzbG90IGxvb2t1cCBtZWNoYW5pc21zCisKK0FDX01TR19DSEVDS0lORyhbd2hpY2ggc2xvdCBsb29rdXAgdHlwZSB0byB1c2VdKQorCitBQ19BUkdfRU5BQkxFKHNsb3Rsb29rdXAsCisJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zbG90bG9va3VwXSxbaW5jbHVkZSBjb2RlIHRvIGZpbmQgdGhlIHByb2JhYmxlIGVncmVzcyBpbnRlcmZhY2UgdXNpbmcgc3BlY2lmaWVkIG1lY2hhbmlzbV0pXSkKKworTkVUU0xPVExLVVBfU09VUkNFPSIkZW5hYmxlX3Nsb3Rsb29rdXAiCitjYXNlICIkZW5hYmxlX3Nsb3Rsb29rdXAiIGluCisKKwlsaW51eCkKKwkJdXNlX3Nsb3Rsb29rdXA9dHJ1ZQorCQk7OworCXNvbGFyaXMpCisJCXVzZV9zbG90bG9va3VwPXRydWUKKwkJOzsKKwknJykKKyMgZ3Vlc3MgaXQgYXV0b21hZ2ljYWxseSBpbiBhIG5pY2UgYmlnIGNhc2Ugc3RhdGVtZW50CisJCWNhc2UgJHRhcmdldCBpbgorCQkgICAgICotKi1saW51eCopCisJCQl1c2Vfc2xvdGxvb2t1cD10cnVlCisJCQllbmFibGVfc2xvdGxvb2t1cD0ibGludXggLSBhdXRvIgorCQkJTkVUU0xPVExLVVBfU09VUkNFPSJsaW51eCIKKwkJCTs7CisJCSAgICAgKi0qLXNvbGFyaXMqKQorCQkJdXNlX3Nsb3Rsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX3Nsb3Rsb29rdXA9InNvbGFyaXMgLSBhdXRvIgorCQkJTkVUU0xPVExLVVBfU09VUkNFPSJzb2xhcmlzIgorCQkJQUNfSEFWRV9MSUJSQVJZKGRldmluZm8pCisJCQk7OworCQkgICAgICopCisJCQl1c2Vfc2xvdGxvb2t1cD1mYWxzZQorCQkJTkVUU0xPVExLVVBfU09VUkNFPSJub25lIgorCQkJZW5hYmxlX3Nsb3Rsb29rdXA9Im5vbmUuIENvbnNpZGVyIHRlYWNoaW5nIGNvbmZpZ3VyZSBhYm91dCB5b3VyIHBsYXRmb3JtLiIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlub25lKQorCQl1c2Vfc2xvdGxvb2t1cD1mYWxzZQorCQk7OworCSopCisJCUFDX01TR19FUlJPUihbLS1lbmFibGUtc2xvdGxvb2t1cCB0YWtlcyBsaW51eCBvciBub25lXSkKKwkJOzsKK2VzYWMKKworCUFDX01TR19SRVNVTFQoIiRlbmFibGVfc2xvdGxvb2t1cCIpCisKK0FDX1NVQlNUKE5FVFNMT1RMS1VQX1NPVVJDRSkKKworCisjIHRpbWUgdG8gc2VlIGFib3V0IHNlYyBsb29rdXAgbWVjaGFuaXNtcworCitBQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIHNlYyBsb29rdXAgdHlwZSB0byB1c2VdKQorCitBQ19BUkdfRU5BQkxFKHNlY2xvb2t1cCwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNlY2xvb2t1cF0sW2luY2x1ZGUgY29kZSB0byBmaW5kIHRoZSBzeXN0ZW0gc2VjdXJpdHkgbWVjaGFuaXNtIGFuZCBpdHMgc3RhdGVdKV0pCisKK05FVFNFQ0xLVVBfU09VUkNFPSIkZW5hYmxlX3NlY2xvb2t1cCIKK2Nhc2UgIiRlbmFibGVfc2VjbG9va3VwIiBpbgorCisJbGludXgpCisJCXVzZV9zZWNsb29rdXA9dHJ1ZQorCQk7OworCScnKQorIyBndWVzcyBpdCBhdXRvbWFnaWNhbGx5IGluIGEgbmljZSBiaWcgY2FzZSBzdGF0ZW1lbnQKKwkJY2FzZSAkdGFyZ2V0IGluCisJCSAgICAgKi0qLWxpbnV4KikKKwkJICAgICAgICBBQ19IQVZFX0xJQlJBUlkoZGwpCisJCQl1c2Vfc2VjbG9va3VwPXRydWUKKwkJCWVuYWJsZV9zZWNsb29rdXA9ImxpbnV4IC0gYXV0byIKKwkJCU5FVFNFQ0xLVVBfU09VUkNFPSJsaW51eCIKKwkJCTs7CisJCSAgICAgKikKKwkJCXVzZV9zZWNsb29rdXA9ZmFsc2UKKwkJCU5FVFNFQ0xLVVBfU09VUkNFPSJub25lIgorCQkJZW5hYmxlX3NlY2xvb2t1cD0ibm9uZS4gQ29uc2lkZXIgdGVhY2hpbmcgY29uZmlndXJlIGFib3V0IHlvdXIgcGxhdGZvcm0uIgorCQkJOzsKKwkJZXNhYworCQk7OworCW5vbmUpCisJCXVzZV9zZWNsb29rdXA9ZmFsc2UKKwkJOzsKKwkqKQorCQlBQ19NU0dfRVJST1IoWy0tZW5hYmxlLXNlY2xvb2t1cCB0YWtlcyBsaW51eCBvciBub25lXSkKKwkJOzsKK2VzYWMKKworCUFDX01TR19SRVNVTFQoIiRlbmFibGVfc2VjbG9va3VwIikKKworQUNfU1VCU1QoTkVUU0VDTEtVUF9TT1VSQ0UpCisKKworIyB0aW1lIHRvIHNlZSBhYm91dCBkcml2ZXIgbG9va3VwIG1lY2hhbmlzbXMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGljaCBkcml2ZXIgaW5mbyBsb29rdXAgdHlwZSB0byB1c2VdKQorCitBQ19BUkdfRU5BQkxFKGRydmxvb2t1cCwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRydmxvb2t1cF0sW2luY2x1ZGUgY29kZSB0byBmaW5kIHRoZSBkcml2ZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBwcm9iYWJsZSBlZ3Jlc3MgaW50ZXJmYWNlXSldKQorCitORVREUlZMS1VQX1NPVVJDRT0iJGVuYWJsZV9kcnZsb29rdXAiCitjYXNlICIkZW5hYmxlX2Rydmxvb2t1cCIgaW4KKwlldGh0b29sKQorCQl1c2VfZHJ2bG9va3VwPXRydWUKKwkJOzsKKworCXNvbGFyaXMpCisJCXVzZV9kcnZsb29rdXA9dHJ1ZQorCQk7OworCScnKQorIyBndWVzcyBpdCBhdXRvbWFnaWNhbGx5IGluIGEgbmljZSBiaWcgY2FzZSBzdGF0ZW1lbnQKKwkJY2FzZSAkdGFyZ2V0IGluCisJCSAgICAgKi0qLWxpbnV4KikKKwkJCXVzZV9kcnZsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX2Rydmxvb2t1cD0iZXRodG9vbCAtIGF1dG8iCisJCQlORVREUlZMS1VQX1NPVVJDRT0iZXRodG9vbCIKKwkJCTs7CisJCSAgICAgKi0qLXNvbGFyaXMqKQorCQkgICAgICAgIHVzZV9kcnZsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX2Rydmxvb2t1cD0ic29sYXJpcyAtIGF1dG8iCisJCQlORVREUlZMS1VQX1NPVVJDRT0ic29sYXJpcyIKKwkJCTs7CisJCSAgICAgKikKKwkJCXVzZV9kcnZsb29rdXA9ZmFsc2UKKwkJCU5FVERSVkxLVVBfU09VUkNFPSJub25lIgorCQkJZW5hYmxlX2Rydmxvb2t1cD0ibm9uZS4gQ29uc2lkZXIgdGVhY2hpbmcgY29uZmlndXJlIGFib3V0IHlvdXIgcGxhdGZvcm0uIgorCQkJOzsKKwkJZXNhYworCQk7OworCW5vbmUpCisJCXVzZV9kcnZsb29rdXA9ZmFsc2UKKwkJOzsKKwkqKQorCQlBQ19NU0dfRVJST1IoWy0tZW5hYmxlLWRydmxvb2t1cCB0YWtlcyBldGh0b29sIG9yIG5vbmVdKQorCQk7OworZXNhYworCisJQUNfTVNHX1JFU1VMVCgiJGVuYWJsZV9kcnZsb29rdXAiKQorCitBQ19TVUJTVChORVREUlZMS1VQX1NPVVJDRSkKKworIyB0aW1lIHRvIHNlZSBhYm91dCBzeXN0ZW0gbG9va3VwIG1lY2hhbmlzbXMKKworQUNfTVNHX0NIRUNLSU5HKFt3aGljaCBzeXN0ZW0gaW5mbyBsb29rdXAgdHlwZSB0byB1c2VdKQorCitBQ19BUkdfRU5BQkxFKHN5c2xvb2t1cCwKKwlbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN5c2xvb2t1cF0sW2luY2x1ZGUgY29kZSB0byBmaW5kIHNvbWUgcnVkaW1lbnRhcnkgc3lzdGVtIGluZm9ybWF0aW9uXSldKQorCitORVRTWVNMS1VQX1NPVVJDRT0iJGVuYWJsZV9zeXNsb29rdXAiCitjYXNlICIkZW5hYmxlX3N5c2xvb2t1cCIgaW4KKwlocHV4MTFpKQorCQl1c2Vfc3lzbG9va3VwPXRydWUKKwkJOzsKKworCWxpbnV4KQorCQl1c2Vfc3lzbG9va3VwPXRydWU7CisJCUFDX0NIRUNLX0hFQURFUlMoW3NtYmlvcy9TeXN0ZW1JbmZvLmhdKQorCQlBQ19IQVZFX0xJQlJBUlkoc21iaW9zKQorCQk7OworICAgICAgICBzb2xhcmlzKQorCQl1c2Vfc3lzbG9va3VwPXRydWU7CisJCSMgdGhpcyB3aWxsIGJhc2ljYWxseSB0ZWxsIHVzIGlmIHdlIGNhbiB1c2UgbGlic21iaW9zCisJCUFDX0NIRUNLX0hFQURFUlMoW3N5cy9zYm1pb3MuaF0pCisJCUFDX0hBVkVfTElCUkFSWShzbWJpb3MpCisJCTs7CisJJycpCisjIGd1ZXNzIGl0IGF1dG9tYWdpY2FsbHkgaW4gYSBuaWNlIGJpZyBjYXNlIHN0YXRlbWVudAorCQljYXNlICR0YXJnZXQgaW4KKwkJICAgICAqLSotaHB1eDExKikKKwkJCXVzZV9zeXNsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX3N5c2xvb2t1cD0iaHB1eDExaSAtIGF1dG8iCisJCQlORVRTWVNMS1VQX1NPVVJDRT0iaHB1eDExaSIKKwkJCTs7CisJCSAgICAgKi0qLWxpbnV4KikKKwkJCXVzZV9zeXNsb29rdXA9dHJ1ZQorCQkJZW5hYmxlX3N5c2xvb2t1cD0ibGludXggLSBhdXRvIgorCQkJQUNfQ0hFQ0tfSEVBREVSUyhbc21iaW9zL1N5c3RlbUluZm8uaF0pCisJCQlBQ19IQVZFX0xJQlJBUlkoc21iaW9zKQorCQkJTkVUU1lTTEtVUF9TT1VSQ0U9ImxpbnV4IgorCQkJOzsKKwkJICAgICAqLSotc29sYXJpcyopCisJCSAgICAgICAgdXNlX3N5c2xvb2t1cD10cnVlCisJCQllbmFibGVfc3lzbG9va3VwPSJzb2xhcmlzIC0gYXV0byIKKwkJCU5FVFNZU0xLVVBfU09VUkNFPSJzb2xhcmlzIgorCQkJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3NtYmlvcy5oXSkKKwkJCUFDX0hBVkVfTElCUkFSWShzbWJpb3MpCisJCQk7OworCQkgICAgICopCisJCQl1c2Vfc3lzbG9va3VwPWZhbHNlCisJCQlORVRTWVNMS1VQX1NPVVJDRT0ibm9uZSIKKwkJCWVuYWJsZV9zeXNsb29rdXA9Im5vbmUuIENvbnNpZGVyIHRlYWNoaW5nIGNvbmZpZ3VyZSBhYm91dCB5b3VyIHBsYXRmb3JtLiIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlub25lKQorCQl1c2Vfc3lzbG9va3VwPWZhbHNlCisJCTs7CisJKikKKwkJQUNfTVNHX0VSUk9SKFstLWVuYWJsZS1zeXNsb29rdXAgdGFrZXMgaHB1eDExaSwgbGludXggb3Igbm9uZV0pCisJCTs7Citlc2FjCisKKwlBQ19NU0dfUkVTVUxUKCIkZW5hYmxlX3N5c2xvb2t1cCIpCisKK0FDX1NVQlNUKE5FVFNZU0xLVVBfU09VUkNFKQorCisjIG5vdyBzcGl0IGl0IGFsbCBvdXQKK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgc3JjL25ldHBlcmZfdmVyc2lvbi5oCisgICAgICAgICAgICAgICAgIHNyYy9NYWtlZmlsZQorCQkgc3JjL21pc3NpbmcvTWFrZWZpbGUKKwkJIHNyYy9taXNzaW5nL200L01ha2VmaWxlCisJCSBkb2MvTWFrZWZpbGUKKwkJIGRvYy9leGFtcGxlcy9NYWtlZmlsZQorICAgICAgICAgICAgICAgICBuZXRwZXJmLnNwZWNdKQorCitBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZGVwY29tcCBiL25ldHBlcmYtMi40LjUvZGVwY29tcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZGI1ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9kZXBjb21wCkBAIC0wLDAgKzEsNDc5IEBACisjISAvYmluL3NoCisKKyMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cworIyBDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFsZXhhbmRyZSBPbGl2YSA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+LgorCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKyMgYGxpYnRvb2wnIGNhbiBhbHNvIGJlIHNldCB0byBgeWVzJyBvciBgbm8nLgorCitpZiB0ZXN0IC16ICIkZGVwZmlsZSI7IHRoZW4KKyAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzLF4uKi8sLCcgLWUgJ3MsXC5cKFteLl0qXCkkLC5QXDEsJ2AKKyAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgJ3MsLy4qJCwvLCdgCisgICBpZiB0ZXN0ICIkZGlyIiA9ICIkb2JqZWN0IjsgdGhlbgorICAgICAgZGlyPQorICAgZmkKKyAgICMgRklYTUU6IHNob3VsZCBiZSBfZGVwcyBvbiBET1MuCisgICBkZXBmaWxlPSIkZGlyLmRlcHMvJGJhc2UiCitmaQorCit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQorIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKKyMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKKyMgaGVyZSwgYmVjYXVzZSB0aGlzIGZpbGUgY2FuIG9ubHkgY29udGFpbiBvbmUgY2FzZSBzdGF0ZW1lbnQuCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBocDsgdGhlbgorICAjIEhQIGNvbXBpbGVyIHVzZXMgLU0gYW5kIG5vIGV4dHJhIGFyZy4KKyAgZ2NjZmxhZz0tTQorICBkZXBtb2RlPWdjYworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgICBkYXNobWZsYWc9LXhNCisgICBkZXBtb2RlPWRhc2htc3Rkb3V0CitmaQorCitjYXNlICIkZGVwbW9kZSIgaW4KK2djYzMpCisjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAorIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKKyMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KKyAgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIG12ICIkdG1wZGVwZmlsZSIgIiRkZXBmaWxlIgorICA7OworCitnY2MpCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4KKyMjIC0gVXNpbmcgLU0gZGlyZWN0bHkgbWVhbnMgcnVubmluZyB0aGUgY29tcGlsZXIgdHdpY2UgKGV2ZW4gd29yc2UKKyMjICAgdGhhbiByZW5hbWluZykuCisgIGlmIHRlc3QgLXogIiRnY2NmbGFnIjsgdGhlbgorICAgIGdjY2ZsYWc9LU1ELAorICBmaQorICAiJEAiIC1XcCwiJGdjY2ZsYWckdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgYWxwaGE9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorIyMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZSBsZXR0ZXJzLgorICBzZWQgLWUgJ3MvXlteOl0qOiAvIC8nIFwKKyAgICAgIC1lICdzL15bJyRhbHBoYSddOlwvW146XSo6IC8gLycgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyMjIFRoaXMgbmV4dCBwaWVjZSBvZiBtYWdpYyBhdm9pZHMgdGhlIGBkZWxldGVkIGhlYWRlciBmaWxlJyBwcm9ibGVtLgorIyMgVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIGEgaGVhZGVyIGZpbGUgd2hpY2ggYXBwZWFycyBpbiBhIC5QIGZpbGUKKyMjIGlzIGRlbGV0ZWQsIHRoZSBkZXBlbmRlbmN5IGNhdXNlcyBtYWtlIHRvIGRpZSAoYmVjYXVzZSB0aGVyZSBpcworIyMgdHlwaWNhbGx5IG5vIHdheSB0byByZWJ1aWxkIHRoZSBoZWFkZXIpLiAgV2UgYXZvaWQgdGhpcyBieSBhZGRpbmcKKyMjIGR1bW15IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBoZWFkZXIgZmlsZS4gIFRvbyBiYWQgZ2NjIGRvZXNuJ3QgZG8KKyMjIHRoaXMgZm9yIHVzIGRpcmVjdGx5LgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfAorIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSBgOicuICBPbiB0aGUgdGhlb3J5CisjIyB0aGF0IHRoZSBzcGFjZSBtZWFucyBzb21ldGhpbmcsIHdlIGFkZCBhIHNwYWNlIHRvIHRoZSBvdXRwdXQgYXMKKyMjIHdlbGwuCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocCkKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK3NnaSkKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAiLVdwLC1NRHVwZGF0ZSwkdG1wZGVwZmlsZSIKKyAgZWxzZQorICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gICMgeWVzLCB0aGUgc291cmNlZmlsZSBkZXBlbmQgb24gb3RoZXIgZmlsZXMKKyAgICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorCisgICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQorICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCisgICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCisgICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSBgIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgIyBkZXBlbmRlbmN5IGxpbmUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCisgICAgdHIgJworJyAnICcgPj4gJGRlcGZpbGUKKyAgICBlY2hvID4+ICRkZXBmaWxlCisKKyAgICAjIFRoZSBzZWNvbmQgcGFzcyBnZW5lcmF0ZXMgYSBkdW1teSBlbnRyeSBmb3IgZWFjaCBoZWFkZXIgZmlsZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgID4+ICRkZXBmaWxlCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCithaXgpCisgICMgVGhlIEMgZm9yIEFJWCBDb21waWxlciB1c2VzIC1NIGFuZCBvdXRwdXRzIHRoZSBkZXBlbmRlbmNpZXMKKyAgIyBpbiBhIC51IGZpbGUuICBJbiBvbGRlciB2ZXJzaW9ucywgdGhpcyBmaWxlIGFsd2F5cyBsaXZlcyBpbiB0aGUKKyAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyBgJG9iamVjdDonIGF0IHRoZQorICAjIHN0YXJ0IG9mIGVhY2ggbGluZTsgJG9iamVjdCBkb2Vzbid0IGhhdmUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAjIFZlcnNpb24gNiB1c2VzIHRoZSBkaXJlY3RvcnkgaW4gYm90aCBjYXNlcy4KKyAgc3RyaXBwZWQ9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL1woLipcKVwuLiokL1wxLydgCisgIHRtcGRlcGZpbGU9IiRzdHJpcHBlZC51IgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuIDoKKyAgZWxzZQorICAgIHN0cmlwcGVkPWBlY2hvICIkc3RyaXBwZWQiIHwgc2VkICdzLF4uKi8sLCdgCisgICAgdG1wZGVwZmlsZT0iJHN0cmlwcGVkLnUiCisgIGZpCisKKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgIG91dG5hbWU9IiRzdHJpcHBlZC5vIgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLgorICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICAgIHNlZCAtZSAicyxeJG91dG5hbWU6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICBzZWQgLWUgInMsXiRvdXRuYW1lOiBcKC4qXCkkLFwxOiwiIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitpY2MpCisgICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgorICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKKyAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCisgICMgICAgZm9vLm86IHN1Yi9mb28uYworICAjICAgIGZvby5vOiBzdWIvZm9vLmgKKyAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6CisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAorICAjICAgIHN1Yi9mb28uYzoKKyAgIyAgICBzdWIvZm9vLmg6CisgICMgSUNDIDcuMSB3aWxsIG91dHB1dAorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCisgICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgorICAjICAgIGZvby5vOiBzdWIvZm9vLmMgLi4uIFwKKyAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCisgICMgICAgIC4uLgorCisgICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLAorICAjIG9yIGBmb28ubzogZGVwMS5oIGRlcDIuaCBcJywgb3IgYCBkZXAzLmggZGVwNC5oIFwnLgorICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAorICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK3RydTY0KQorICAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgorICAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorICAgIyBkZXBlbmRlbmNpZXMgaW4gYGZvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisgICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisKKyAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICAgdG1wZGVwZmlsZTE9IiRkaXIubGlicy8kYmFzZS5sby5kIgorICAgICAgdG1wZGVwZmlsZTI9IiRkaXIubGlicy8kYmFzZS5kIgorICAgICAgIiRAIiAtV2MsLU1ECisgICBlbHNlCisgICAgICB0bXBkZXBmaWxlMT0iJGRpciRiYXNlLm8uZCIKKyAgICAgIHRtcGRlcGZpbGUyPSIkZGlyJGJhc2UuZCIKKyAgICAgICIkQCIgLU1ECisgICBmaQorCisgICBzdGF0PSQ/CisgICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgICAgICBleGl0ICRzdGF0CisgICBmaQorCisgICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZTEiOyB0aGVuCisgICAgICB0bXBkZXBmaWxlPSIkdG1wZGVwZmlsZTEiCisgICBlbHNlCisgICAgICB0bXBkZXBmaWxlPSIkdG1wZGVwZmlsZTIiCisgICBmaQorICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgICBlbHNlCisgICAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgZmkKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgIDs7CisKKyNub3NpZGVlZmZlY3QpCisgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAorICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgorCitkYXNobXN0ZG91dCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciBgOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2Rhc2hYbXN0ZG91dCkKKyAgIyBUaGlzIGNhc2Ugb25seSBleGlzdHMgdG8gc2F0aXNmeSBkZXBlbmQubTQuICBJdCBpcyBuZXZlciBhY3R1YWxseQorICAjIHJ1biwgYXMgdGhpcyBtb2RlIGlzIHNwZWNpYWxseSByZWNvZ25pemVkIGluIHRoZSBwcmVhbWJsZS4KKyAgZXhpdCAxCisgIDs7CisKK21ha2VkZXBlbmQpCisgICIkQCIgfHwgZXhpdCAkPworICAjIFJlbW92ZSBhbnkgTGlidG9vbCBjYWxsCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisgICMgWCBtYWtlZGVwZW5kCisgIHNoaWZ0CisgIGNsZWFyZWQ9bm8KKyAgZm9yIGFyZyBpbiAiJEAiOyBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGNhc2UgIiRhcmciIGluCisgICAgLUQqfC1JKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQorICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KKyAgICAtKnwkb2JqZWN0KQorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgIGVzYWMKKyAgZG9uZQorICBvYmpfc3VmZml4PSJgZWNobyAkb2JqZWN0IHwgc2VkICdzL14uKlwuLy4vJ2AiCisgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCisnIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgOzsKKworY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIHwKKyAgICBzZWQgLW4gJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgfAorICAgIHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2aXN1YWxjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LCByZWdhcmRsZXNzIG9mIC1vLAorICAjIGJlY2F1c2Ugd2UgbXVzdCB1c2UgLW8gd2hlbiBydW5uaW5nIGxpYnRvb2wuCisgICIkQCIgfHwgZXhpdCAkPworICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICIkYXJnIiBpbgorICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorCXNldCBmbm9yZCAiJEAiCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgKikKKwlzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIiRAIiAtRSB8CisgIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6ZWNobyAiYGN5Z3BhdGggLXUgXFwiXDFcXCJgIjpwJyB8IHNvcnQgfCB1bmlxID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIC4gIiR0bXBkZXBmaWxlIiB8IHNlZCAncyUgJVxcICVnJyB8IHNlZCAtbiAnL15cKC4qXCkkLyBzOjoJXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgorICBlY2hvICIJIiA+PiAiJGRlcGZpbGUiCisgIC4gIiR0bXBkZXBmaWxlIiB8IHNlZCAncyUgJVxcICVnJyB8IHNlZCAtbiAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitub25lKQorICBleGVjICIkQCIKKyAgOzsKKworKikKKyAgZWNobyAiVW5rbm93biBkZXBtb2RlICRkZXBtb2RlIiAxPiYyCisgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZG9jL01ha2VmaWxlLmFtIGIvbmV0cGVyZi0yLjQuNS9kb2MvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAxNjdhNgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjIgQEAKKyMgd2hhdCBpcyB5b3VyIHBoaWxvc29waHkgLSBkaXN0cmlidXRlIHByZS1tYWRlIC5wZGYgZXQgYWwgaW4gYSBtYWtlIGRpc3QKKyMgb3Igbm90PyAgY2hvb3NlIHlvdXIgRVhUUkFfRElTVCBsaW5lIGFjY29yZGluZ2x5CisjIEVYVFJBX0RJU1QgPSBuZXRwZXJmLm1hbiBuZXRzZXJ2ZXIubWFuIG5ldHBlcmYudHh0IG5ldHBlcmYuaHRtbCBuZXRwZXJmLnhtbCBuZXRwZXJmX29sZC5wcyBuZXRwZXJmLnBkZiBuZXRwZXJmLnBzIG5ldHBlcmYudGV4aSBleGFtcGxlcworCitTVUJESVJTID0gZXhhbXBsZXMKKworRVhUUkFfRElTVCA9IG5ldHBlcmYubWFuIG5ldHNlcnZlci5tYW4gbmV0cGVyZl9vbGQucHMgbmV0cGVyZi50ZXhpIAorbWFuMV9NQU5TID0gbmV0cGVyZi5tYW4gbmV0c2VydmVyLm1hbgoraW5mb19URVhJTkZPUyA9IG5ldHBlcmYudGV4aQorQ0xFQU5GSUxFUyA9IG5ldHBlcmYudHh0IG5ldHBlcmYueG1sIG5ldHBlcmYuaHRtbAorCituZXRwZXJmLmh0bWw6ICQoaW5mb19URVhJTkZPUykKKwkkKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLS1odG1sIC0tbm8tc3BsaXQgLUkgJChzcmNkaXIpIFwKKyAgICAgICAgIC1vICRAIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworbmV0cGVyZi50eHQ6ICQoaW5mb19URVhJTkZPUykKKwkkKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLS1wbGFpbnRleHQgLUkgJChzcmNkaXIpIFwKKyAgICAgICAgIC1vICRAIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworbmV0cGVyZi54bWw6ICQoaW5mb19URVhJTkZPUykKKwkkKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLS14bWwgLUkgJChzcmNkaXIpIFwKKyAgICAgICAgIC1vICRAIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZG9jL01ha2VmaWxlLmluIGIvbmV0cGVyZi0yLjQuNS9kb2MvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3MDIzNQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjA2IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjcuOSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzCisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjIHdoYXQgaXMgeW91ciBwaGlsb3NvcGh5IC0gZGlzdHJpYnV0ZSBwcmUtbWFkZSAucGRmIGV0IGFsIGluIGEgbWFrZSBkaXN0CisjIG9yIG5vdD8gIGNob29zZSB5b3VyIEVYVFJBX0RJU1QgbGluZSBhY2NvcmRpbmdseQorIyBFWFRSQV9ESVNUID0gbmV0cGVyZi5tYW4gbmV0c2VydmVyLm1hbiBuZXRwZXJmLnR4dCBuZXRwZXJmLmh0bWwgbmV0cGVyZi54bWwgbmV0cGVyZl9vbGQucHMgbmV0cGVyZi5wZGYgbmV0cGVyZi5wcyBuZXRwZXJmLnRleGkgZXhhbXBsZXMKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6Citob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTkVFRF9MSUJDT01QQVRfRkFMU0UgPSBATkVFRF9MSUJDT01QQVRfRkFMU0VACitORUVEX0xJQkNPTVBBVF9UUlVFID0gQE5FRURfTElCQ09NUEFUX1RSVUVACitORVRDUFVfU09VUkNFID0gQE5FVENQVV9TT1VSQ0VACitORVREUlZMS1VQX1NPVVJDRSA9IEBORVREUlZMS1VQX1NPVVJDRUAKK05FVFJUTEtVUF9TT1VSQ0UgPSBATkVUUlRMS1VQX1NPVVJDRUAKK05FVFNFQ0xLVVBfU09VUkNFID0gQE5FVFNFQ0xLVVBfU09VUkNFQAorTkVUU0xPVExLVVBfU09VUkNFID0gQE5FVFNMT1RMS1VQX1NPVVJDRUAKK05FVFNZU0xLVVBfU09VUkNFID0gQE5FVFNZU0xLVVBfU09VUkNFQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitWRVJTSU9OID0gQFZFUlNJT05ACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKKworU1VCRElSUyA9IGV4YW1wbGVzCisKK0VYVFJBX0RJU1QgPSBuZXRwZXJmLm1hbiBuZXRzZXJ2ZXIubWFuIG5ldHBlcmZfb2xkLnBzIG5ldHBlcmYudGV4aSAKK21hbjFfTUFOUyA9IG5ldHBlcmYubWFuIG5ldHNlcnZlci5tYW4KK2luZm9fVEVYSU5GT1MgPSBuZXRwZXJmLnRleGkKK0NMRUFORklMRVMgPSBuZXRwZXJmLnR4dCBuZXRwZXJmLnhtbCBuZXRwZXJmLmh0bWwKK3N1YmRpciA9IGRvYworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0RJU1RfU09VUkNFUyA9CithbV9fVEVYSU5GT19URVhfRElSID0gJChzcmNkaXIpCitJTkZPX0RFUFMgPSBuZXRwZXJmLmluZm8KK0RWSVMgPSBuZXRwZXJmLmR2aQorUERGUyA9IG5ldHBlcmYucGRmCitQU1MgPSBuZXRwZXJmLnBzCitURVhJTkZPUyA9IG5ldHBlcmYudGV4aQorCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChtYW4xX01BTlMpCisKK1JFQ1VSU0lWRV9UQVJHRVRTID0gaW5mby1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIFwKKwlwcy1yZWN1cnNpdmUgaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWFsbC1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsZGlycy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZSBcCisJY2hlY2stcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluIE1ha2VmaWxlLmFtIHRleGluZm8udGV4CitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuZHZpIC5pbmZvIC5wZGYgLnBzIC50ZXhpCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICBNYWtlZmlsZS5hbSAgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChBQ0xPQ0FMX000KQorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIGRvYy9NYWtlZmlsZQorTWFrZWZpbGU6ICAkKHNyY2RpcikvTWFrZWZpbGUuaW4gICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpCisKKy50ZXhpLmluZm86CisJQHJtIC1mICRAICRALVswLTldICRALVswLTldWzAtOV0gJChAOi5pbmZvPSkuaVswLTldICQoQDouaW5mbz0pLmlbMC05XVswLTldCisJJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKSBcCisJIC1vICRAIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworLnRleGkuZHZpOgorCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKwlNQUtFSU5GTz0nJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKScgXAorCSQoVEVYSTJEVkkpIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworLnRleGkucGRmOgorCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKwlNQUtFSU5GTz0nJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JICQoc3JjZGlyKScgXAorCSQoVEVYSTJQREYpIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKK25ldHBlcmYuaW5mbzogbmV0cGVyZi50ZXhpIAorbmV0cGVyZi5kdmk6IG5ldHBlcmYudGV4aSAKK25ldHBlcmYucGRmOiBuZXRwZXJmLnRleGkgCitURVhJMkRWSSA9IHRleGkyZHZpCisKK1RFWEkyUERGID0gJChURVhJMkRWSSkgLS1wZGYgLS1iYXRjaAorRFZJUFMgPSBkdmlwcworLmR2aS5wczoKKwkkKERWSVBTKSAtbyAkQCAkPAorCit1bmluc3RhbGwtaW5mby1hbToKKwkkKFBSRV9VTklOU1RBTEwpCisJQGlmIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uICYmIFwKKwkgICAgIGluc3RhbGwtaW5mbyAtLXZlcnNpb24gMj4mMSB8IHNlZCAxcSB8IGdyZXAgLWkgLXYgZGViaWFuKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCSAgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICAgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKKwkgICAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSQoREVTVERJUikkKGluZm9kaXIpIC0tcmVtb3ZlICQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgLS1yZW1vdmUgJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSA6OyBmaQorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoSU5GT19ERVBTKSc7IFwKKwlmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKKwkgIHJlbGZpbGVfaT1gZWNobyAiJCRyZWxmaWxlIiB8IHNlZCAnc3xcLmluZm8kJHx8O3N8JCR8Lml8J2A7IFwKKwkgIChpZiBjZCAkKERFU1RESVIpJChpbmZvZGlyKTsgdGhlbiBcCisJICAgICBlY2hvICIgcm0gLWYgJCRyZWxmaWxlICQkcmVsZmlsZS1bMC05XSAkJHJlbGZpbGUtWzAtOV1bMC05XSAkJHJlbGZpbGVfaVswLTldICQkcmVsZmlsZV9pWzAtOV1bMC05XSkiOyBcCisJICAgICBybSAtZiAkJHJlbGZpbGUgJCRyZWxmaWxlLVswLTldICQkcmVsZmlsZS1bMC05XVswLTldICQkcmVsZmlsZV9pWzAtOV0gJCRyZWxmaWxlX2lbMC05XVswLTldOyBcCisJICAgZWxzZSA6OyBmaSk7IFwKKwlkb25lCisKK2Rpc3QtaW5mbzogJChJTkZPX0RFUFMpCisJbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCWZvciBiYXNlIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGJhc2U7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZm9yIGZpbGUgaW4gJCRkLyQkYmFzZSo7IGRvIFwKKwkgICAgcmVsZmlsZT1gZXhwciAiJCRmaWxlIiA6ICIkJGQvXCguKlwpImA7IFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkcmVsZmlsZSB8fCBcCisJICAgICAgY3AgLXAgJCRmaWxlICQoZGlzdGRpcikvJCRyZWxmaWxlOyBcCisJICBkb25lOyBcCisJZG9uZQorCittb3N0bHljbGVhbi1hbWluZm86CisJLXJtIC1mIG5ldHBlcmYuYXV4IG5ldHBlcmYuY3AgbmV0cGVyZi5jcHMgbmV0cGVyZi5mbiBuZXRwZXJmLmZucyBuZXRwZXJmLmt5IFwKKwkgIG5ldHBlcmYua3lzIG5ldHBlcmYubG9nIG5ldHBlcmYucGcgbmV0cGVyZi5wZ3MgbmV0cGVyZi50bXAgXAorCSAgbmV0cGVyZi50b2MgbmV0cGVyZi50cCBuZXRwZXJmLnRwcyBuZXRwZXJmLnZyIG5ldHBlcmYudnJzIFwKKwkgIG5ldHBlcmYuZHZpIG5ldHBlcmYucGRmIG5ldHBlcmYucHMKKworbWFpbnRhaW5lci1jbGVhbi1hbWluZm86CisJQGxpc3Q9JyQoSU5GT19ERVBTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgaV9pPWBlY2hvICIkJGkiIHwgc2VkICdzfFwuaW5mbyQkfHw7c3wkJHwuaXwnYDsgXAorCSAgZWNobyAiIHJtIC1mICQkaSAkJGktWzAtOV0gJCRpLVswLTldWzAtOV0gJCRpX2lbMC05XSAkJGlfaVswLTldWzAtOV0iOyBcCisJICBybSAtZiAkJGkgJCRpLVswLTldICQkaS1bMC05XVswLTldICQkaV9pWzAtOV0gJCRpX2lbMC05XVswLTldOyBcCisJZG9uZQorCittYW4xZGlyID0gJChtYW5kaXIpL21hbjEKK2luc3RhbGwtbWFuMTogJChtYW4xX01BTlMpICQobWFuX01BTlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChtYW4xZGlyKQorCUBsaXN0PSckKG1hbjFfTUFOUykgJChkaXN0X21hbjFfTUFOUykgJChub2Rpc3RfbWFuMV9NQU5TKSc7IFwKKwlsMj0nJChtYW5fTUFOUykgJChkaXN0X21hbl9NQU5TKSAkKG5vZGlzdF9tYW5fTUFOUyknOyBcCisJZm9yIGkgaW4gJCRsMjsgZG8gXAorCSAgY2FzZSAiJCRpIiBpbiBcCisJICAgICouMSopIGxpc3Q9IiQkbGlzdCAkJGkiIDs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kJGk7IHRoZW4gZmlsZT0kKHNyY2RpcikvJCRpOyBcCisJICBlbHNlIGZpbGU9JCRpOyBmaTsgXAorCSAgZXh0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9eLipcXC4vLydgOyBcCisJICBjYXNlICIkJGV4dCIgaW4gXAorCSAgICAxKikgOzsgXAorCSAgICAqKSBleHQ9JzEnIDs7IFwKKwkgIGVzYWM7IFwKKwkgIGluc3Q9YGVjaG8gJCRpIHwgc2VkIC1lICdzL1xcLlswLTlhLXpdKiQkLy8nYDsgXAorCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgLWUgJ3MvXi4qXC8vLydgOyBcCisJICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AuJCRleHQ7IFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlICQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0OyBcCisJZG9uZQordW5pbnN0YWxsLW1hbjE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChtYW4xX01BTlMpICQoZGlzdF9tYW4xX01BTlMpICQobm9kaXN0X21hbjFfTUFOUyknOyBcCisJbDI9JyQobWFuX01BTlMpICQoZGlzdF9tYW5fTUFOUykgJChub2Rpc3RfbWFuX01BTlMpJzsgXAorCWZvciBpIGluICQkbDI7IGRvIFwKKwkgIGNhc2UgIiQkaSIgaW4gXAorCSAgICAqLjEqKSBsaXN0PSIkJGxpc3QgJCRpIiA7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgZXh0PWBlY2hvICQkaSB8IHNlZCAtZSAncy9eLipcXC4vLydgOyBcCisJICBjYXNlICIkJGV4dCIgaW4gXAorCSAgICAxKikgOzsgXAorCSAgICAqKSBleHQ9JzEnIDs7IFwKKwkgIGVzYWM7IFwKKwkgIGluc3Q9YGVjaG8gJCRpIHwgc2VkIC1lICdzL1xcLlswLTlhLXpdKiQkLy8nYDsgXAorCSAgaW5zdD1gZWNobyAkJGluc3QgfCBzZWQgLWUgJ3MvXi4qXC8vLydgOyBcCisJICBpbnN0PWBlY2hvICQkaW5zdCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AuJCRleHQ7IFwKKwkgIGVjaG8gIiBybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QiOyBcCisJICBybSAtZiAkKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3Q7IFwKKwlkb25lCisKKyMgVGhpcyBkaXJlY3RvcnkncyBzdWJkaXJlY3RvcmllcyBhcmUgbW9zdGx5IGluZGVwZW5kZW50OyB5b3UgY2FuIGNkCisjIGludG8gdGhlbSBhbmQgcnVuIGBtYWtlJyB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhpcyBNYWtlZmlsZS4KKyMgVG8gY2hhbmdlIHRoZSB2YWx1ZXMgb2YgYG1ha2UnIHZhcmlhYmxlczogaW5zdGVhZCBvZiBlZGl0aW5nIE1ha2VmaWxlcywKKyMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gYGNvbmZpZy5zdGF0dXMnLCBlZGl0IGBjb25maWcuc3RhdHVzJworIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gYG1ha2UnKTsKKyMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlIGBtYWtlJyBjb21tYW5kIGxpbmUuCiskKFJFQ1VSU0lWRV9UQVJHRVRTKToKKwlAc2V0IGZub3JkICQkTUFLRUZMQUdTOyBhbWY9JCQyOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgIHx8IGNhc2UgIiQkYW1mIiBpbiAqPSopIGV4aXQgMTs7ICprKikgZmFpbD15ZXM7OyAqKSBleGl0IDE7OyBlc2FjOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKK21vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBcCittYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZToKKwlAc2V0IGZub3JkICQkTUFLRUZMQUdTOyBhbWY9JCQyOyBcCisJZG90X3NlZW49bm87IFwKKwljYXNlICIkQCIgaW4gXAorCSAgZGlzdGNsZWFuLSogfCBtYWludGFpbmVyLWNsZWFuLSopIGxpc3Q9JyQoRElTVF9TVUJESVJTKScgOzsgXAorCSAgKikgbGlzdD0nJChTVUJESVJTKScgOzsgXAorCWVzYWM7IFwKKwlyZXY9Jyc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gOjsgZWxzZSBcCisJICAgIHJldj0iJCRzdWJkaXIgJCRyZXYiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlyZXY9IiQkcmV2IC4iOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWZvciBzdWJkaXIgaW4gJCRyZXY7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgICB8fCBjYXNlICIkJGFtZiIgaW4gKj0qKSBleGl0IDE7OyAqayopIGZhaWw9eWVzOzsgKikgZXhpdCAxOzsgZXNhYzsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworRVRBR1MgPSBldGFncworRVRBR1NGTEFHUyA9CisKK0NUQUdTID0gY3RhZ3MKK0NUQUdTRkxBR1MgPQorCit0YWdzOiBUQUdTCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWlmIChldGFncyAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZiAkJHN1YmRpci9UQUdTICYmIFwKKwkgICAgICB0YWdzPSIkJHRhZ3MgJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisKK3RvcF9kaXN0ZGlyID0gLi4KK2Rpc3RkaXIgPSAkKHRvcF9kaXN0ZGlyKS8kKFBBQ0tBR0UpLSQoVkVSU0lPTikKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1raW5zdGFsbGRpcnMpICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAkKGRpc3RkaXIpLyQkc3ViZGlyIFwKKwkgICAgfHwgbWtkaXIgJChkaXN0ZGlyKS8kJHN1YmRpciBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgXAorCSAgICAgICAgZGlzdGRpcj0uLi8kKGRpc3RkaXIpLyQkc3ViZGlyIFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAorCSAgZGlzdC1pbmZvCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoSU5GT19ERVBTKSAkKE1BTlMpCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKKwkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluZm9kaXIpICQoREVTVERJUikkKG1hbjFkaXIpCisKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06ICQoRFZJUykKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbTogJChJTkZPX0RFUFMpCisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtaW5mby1hbTogJChJTkZPX0RFUFMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChpbmZvZGlyKQorCUBsaXN0PSckKElORk9fREVQUyknOyBcCisJZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBmaWxlX2k9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCisJICBmb3IgaWZpbGUgaW4gJCRkLyQkZmlsZSAkJGQvJCRmaWxlLVswLTldICQkZC8kJGZpbGUtWzAtOV1bMC05XSBcCisgICAgICAgICAgICAgICAgICAgICAgICQkZC8kJGZpbGVfaVswLTldICQkZC8kJGZpbGVfaVswLTldWzAtOV0gOyBkbyBcCisJICAgIGlmIHRlc3QgLWYgJCRpZmlsZTsgdGhlbiBcCisJICAgICAgcmVsZmlsZT1gZWNobyAiJCRpZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKKwkgICAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkaWZpbGUgJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlIjsgXAorCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJGlmaWxlICQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZTsgXAorCSAgICBlbHNlIDogOyBmaTsgXAorCSAgZG9uZTsgXAorCWRvbmUKKwlAJChQT1NUX0lOU1RBTEwpCisJQGlmIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uICYmIFwKKwkgICAgIGluc3RhbGwtaW5mbyAtLXZlcnNpb24gMj4mMSB8IHNlZCAxcSB8IGdyZXAgLWkgLXYgZGViaWFuKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCSAgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICAgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKKwkgICAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSQoREVTVERJUikkKGluZm9kaXIpICQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7XAorCSAgICBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0kKERFU1RESVIpJChpbmZvZGlyKSAkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUgfHwgOjtcCisJICBkb25lOyBcCisJZWxzZSA6IDsgZmkKK2luc3RhbGwtbWFuOiBpbnN0YWxsLW1hbjEKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tYW1pbmZvIG1vc3RseWNsZWFuLWdlbmVyaWMKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbTogJChQREZTKQorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOiAkKFBTUykKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtbWFuCisKK3VuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKKwordW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjEKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdC1pbmZvIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tdGFncyBcCisJZGlzdGRpciBkdmkgZHZpLWFtIGR2aS1yZWN1cnNpdmUgaW5mbyBpbmZvLWFtIGluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBcCisJaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1tYW4gaW5zdGFsbC1tYW4xIFwKKwlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAorCWluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWFtaW5mbyBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1hbWluZm8gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1yZWN1cnNpdmUgXAorCXBkZiBwZGYtYW0gcGRmLXJlY3Vyc2l2ZSBwcyBwcy1hbSBwcy1yZWN1cnNpdmUgdGFncyBcCisJdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCisJdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjEgXAorCXVuaW5zdGFsbC1yZWN1cnNpdmUKKworCituZXRwZXJmLmh0bWw6ICQoaW5mb19URVhJTkZPUykKKwkkKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLS1odG1sIC0tbm8tc3BsaXQgLUkgJChzcmNkaXIpIFwKKyAgICAgICAgIC1vICRAIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworbmV0cGVyZi50eHQ6ICQoaW5mb19URVhJTkZPUykKKwkkKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLS1wbGFpbnRleHQgLUkgJChzcmNkaXIpIFwKKyAgICAgICAgIC1vICRAIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKworbmV0cGVyZi54bWw6ICQoaW5mb19URVhJTkZPUykKKwkkKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLS14bWwgLUkgJChzcmNkaXIpIFwKKyAgICAgICAgIC1vICRAIGB0ZXN0IC1mICckPCcgfHwgZWNobyAnJChzcmNkaXIpLydgJDwKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyYTBiZQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTEgQEAKK0VYVFJBX0RJU1QgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIGFycl9zY3JpcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcGFja2V0X2J5dGVfc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBzY3RwX3N0cmVhbV9zY3JpcHQgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHNuYXBzaG90X3NjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdGNwX3JhbmdlX3NjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB0Y3BfcnJfc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHRjcF9zdHJlYW1fc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdWRwX3JyX3NjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1ZHBfc3RyZWFtX3NjcmlwdAorCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy9NYWtlZmlsZS5pbiBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNmU2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI4NCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS43LjkgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLgorCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6Citob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTkVFRF9MSUJDT01QQVRfRkFMU0UgPSBATkVFRF9MSUJDT01QQVRfRkFMU0VACitORUVEX0xJQkNPTVBBVF9UUlVFID0gQE5FRURfTElCQ09NUEFUX1RSVUVACitORVRDUFVfU09VUkNFID0gQE5FVENQVV9TT1VSQ0VACitORVREUlZMS1VQX1NPVVJDRSA9IEBORVREUlZMS1VQX1NPVVJDRUAKK05FVFJUTEtVUF9TT1VSQ0UgPSBATkVUUlRMS1VQX1NPVVJDRUAKK05FVFNFQ0xLVVBfU09VUkNFID0gQE5FVFNFQ0xLVVBfU09VUkNFQAorTkVUU0xPVExLVVBfU09VUkNFID0gQE5FVFNMT1RMS1VQX1NPVVJDRUAKK05FVFNZU0xLVVBfU09VUkNFID0gQE5FVFNZU0xLVVBfU09VUkNFQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitWRVJTSU9OID0gQFZFUlNJT05ACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK0VYVFJBX0RJU1QgPSBcCisgICAgICAgYXJyX3NjcmlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBwYWNrZXRfYnl0ZV9zY3JpcHQgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHNjdHBfc3RyZWFtX3NjcmlwdCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgc25hcHNob3Rfc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB0Y3BfcmFuZ2Vfc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHRjcF9ycl9zY3JpcHQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgdGNwX3N0cmVhbV9zY3JpcHQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB1ZHBfcnJfc2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHVkcF9zdHJlYW1fc2NyaXB0CisKK3N1YmRpciA9IGRvYy9leGFtcGxlcworQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0RJU1RfU09VUkNFUyA9CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBNYWtlZmlsZS5hbQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgTWFrZWZpbGUuYW0gICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjICQoQUNMT0NBTF9NNCkKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBkb2MvZXhhbXBsZXMvTWFrZWZpbGUKK01ha2VmaWxlOiAgJChzcmNkaXIpL01ha2VmaWxlLmluICAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKQordW5pbnN0YWxsLWluZm8tYW06Cit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorCit0b3BfZGlzdGRpciA9IC4uLy4uCitkaXN0ZGlyID0gJCh0b3BfZGlzdGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2luc3RhbGxkaXJzKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQorCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0ZGlyIGR2aSBkdmktYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgXAorCWluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIHBkZiBwZGYtYW0gcHMgcHMtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvYXJyX3NjcmlwdCBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL2Fycl9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmJjZjNmNgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL2Fycl9zY3JpcHQKQEAgLTAsMCArMSwzODYgQEAKKyMgdGhpcyBpcyByZXRhaW5lZCBtb3N0bHkgZm9yIGhpc3RvcmljYWwgcHVycG9zZXMgYW5kIG1heSBub3QgYmUKKyMgdXAgdG8gZGF0ZSBmb3IgY29udGVtcG9yYXJ5IG5ldHBlcmYgdmVyc2lvbnMKKyMKKyMgYSBzY3JpcHQgdGhhdCBjYW4gYmUgdXNlZCB0byBtZWFzdXJlIGFnZ3JlZ2F0ZSBuZXRwZXJmIHBlcmZvcm1hbmNlLAorIyBvcmlnaW5hbCBhdXRob3IgaXMgTWlrZSBUcmF5bm9yLiBNb2RpZmljYXRpb25zIHRvIGNyZWF0ZSB0aGUKKyMgIm5ldHBlcmYgVENQX0FSUiB0ZXN0IiBieSByaWNrIGpvbmVzCisjCisKK2luaXRfcGFybXMoKSB7CisgIFRFU1RfVElNRT02MAorICBOVEVTVD0zCisgIFRPTEVSQU5DRT0xNQorICBNQVhfUkVUUklFUz0zCisKKyAgTkVUUEVSRj0iL3Vzci9sb2NhbC9uZXRwZXJmL25ldHBlcmYiCisgIE5FVFBFUkY9Ii4vbmV0cGVyZiIKKworICBOUFJPQ19MSVNUPSIiCisgIFJSX1NJWkVTPSIiCisgIFJFTV9IT1NUX0xJU1Q9IiIKKyAgREVWRklMRUxJU1Q9IiIKKyAgTExBPTAKKyAgVENQPTEKKyAgVURQPTAKKyAgR1BST0Y9MAorfQorCitzZXRfZGVmYXVsdF9wYXJtcygpIHsKKyAgaWYgWyAiWCROUFJPQ19MSVNUIiA9ICJYIiBdCisgIHRoZW4KKyAgICBOUFJPQ19MSVNUPSIxIgorICBmaQorICAKKyAgaWYgWyAiWCRSRU1fSE9TVF9MSVNUIiA9ICJYIiBdCisgIHRoZW4KKyAgICBSRU1fSE9TVF9MSVNUPSIxMjcuMC4wLjEiCisgIGZpCisKKyAgaWYgWyAiWCRSUl9TSVpFUyIgPSAiWCIgXQorICB0aGVuCisgICAgUlJfU0laRVM9IjEsMSIKKyAgZmkKKworICBOSE9TVFM9YGVjaG8gJFJFTV9IT1NUX0xJU1QgfCBhd2sgJ3twcmludGYgIiVkIixORn0nYAorICBHUFJPRl9SVU5fVElNRT1gZXhwciAkVEVTVF9USU1FIC0gMjBgCit9CisKK3VzYWdlKCkgeworbW9yZSA8PCBARU9GCisKKyQqCisKKyAgICBVU0FHRTogc2NhbGVfc2NyaXB0IHt0ZXN0X29wdGlvbnN9IHtob3N0bGlzdH0KKworICAgIE1lYXN1cmUgbWF4aW11bSBzeXN0ZW0gbmV0d29yayB0aHJvdWdocHV0LgorCisgICAgVGhlIGZvbGxvd2luZyBhcmUgb3B0aW9uYWwgcGFyYW1ldGVyczoKKworICAgICAgICAtdCBuc2VjCQk6IENhdXNlcyBlYWNoIHRlc3QgdG8gYmUgcnVuIGZvciBuc2VjIHNlY29uZHMuCisgICAgICAgIC1ncHJvZiBzeXN0ZW0JOiBUYWtlIGEgZ3Byb2Ygc2FtcGxlIGR1cmluZyB0aGUgdGVzdC4gIHN5c3RlbQorICAgICAgICAgICAgICAgICAgCSAgaXMgdGhlIG5hbWUgb2YgdGhlIGtlcm5lbCB0aGUgc3lzdGVtIHdhcyBib290ZWQKKyAgICAgICAgICAgICAgICAgIAkgIHdpdGguCisgICAgICAgIC1uICJucHJvY2xpc3QiCTogT25lIHNlcmllcyBvZiB0ZXN0cyBpcyBydW4gZm9yIGVhY2ggc3BhY2Utc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgICAJICB2YWx1ZSBpbiBucHJvY2xpc3QuCisgICAgICAgIC1yICJzaXplbGlzdCIJOiBPbmUgc2VyaWVzIG9mIHRlc3RzIGlzIHJ1biBmb3IgZWFjaCBzcGFjZS1zZXBhcmF0ZWQKKyAgICAgICAgICAgICAgICAJICByZXF1ZXN0LHJlcGx5IHBhaXIgaW4gc2l6ZWxpc3QuCisJaG9zdGxpc3QJOiBBIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGhvc3RzIHRvIHRlc3QgYWdhaW5zdC4KKworICAgICAgICArfC10Y3AJCTogUnVuL0Rvbid0IHJ1biBUQ1AgdGVzdHMuCisgICAgICAgICt8LXVkcAkJOiBSdW4vRG9uJ3QgcnVuIFVEUCB0ZXN0cy4KKyAgICAgICAgK3wtbGxhIAkJOiBSdW4vRG9uJ3QgcnVuIExMQSB0ZXN0czsgdGhpcyBvcHRpb24gYWxzbyByZXF1aXJlcyAKKwkJCSAgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIGxpc3Qgb2YgbmV0d29yayBkZXZpY2UgZmlsZXMKKyAgICAgICAgCSAgICAJICB1c2luZyB0aGUgLWQgb3B0aW9uIGRlc2NyaWJlZCBiZWxvdy4KKworICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9uIG11c3QgYmUgcHJvdmlkZWQgd2hlbiB1c2luZyB0aGUgLWxsYSBvcHRpb24KKyAgICBkZXNjcmliZWQgYWJvdmU6CisKKyAgICAgICAgLWQgImRldmZpbGVsc3QiIDogV2hlcmUgZGV2ZmlsZWxzdCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0CisgICAgICAgICAgICAgICAgICAgICAJICBvZiBuZXR3b3JrIGRldmljZSBmaWxlIHBhaXJzLiAgRWFjaCBwYWlyIGluCisgICAgICAgICAgICAgICAgICAJICB0aGUgbGlzdCBjb250YWlucyB0d28gZGV2aWNlIGZpbGUgbmFtZXMsCisgICAgICAgICAgICAgIAkgIAkgIHNlcGFyYXRlZCBieSBhIGNvbW1hIChlZy4gL2Rldi9sYW4wLC9kZXYvbGFuMSksCisgICAgICAgICAgICAgICAgIAkgIHdoZXJlIHRoZSBkZXZpY2UgZmlsZSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZQorICAgICAgICAgICAgICAgIAkgIGNvbW1hIGlzIGZvciB0aGUgbG9jYWwgc3lzdGVtIGFuZCB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgCSAgZmlsZSBvbiB0aGUgcmlnaHQgc2lkZSBpcyBmb3IgdGhlIHJlbW90ZSBzeXN0ZW0uCisgICAgICAgICAgICAgICAgIAkgIEEgZGV2aWNlIGZpbGUgcGFpciBtdXN0IGJlIHNwZWNpZmllZCBmb3IgZWFjaAorICAgICAgICAgICAgICAgICAgIAkgIHJlbW90ZSBob3N0IHdoaWNoIGlzIHNwZWNpZmllZC4KKworICAgIEV4YW1wbGVzOgorCisgICAgICAgIHNjYWxlX3NjcmlwdCAtbiAiOCAxNiIgLXVkcCBMR3MzN1UxIExHczM3VTIgLXIgIjEsMSAxMDAsMTAwIgorCisgICAgICAgIHNjYWxlX3NjcmlwdCAtdCAxMDAwIC1uICIxNiIgLXRjcCAtZ3Byb2YgL3N0YW5kL3ZtdW5peCBMR3MzN1UxIExHczM3VTIKKworICAgICAgICBzY2FsZV9zY3JpcHQgLW4gNCAtbGxhIC1kIC9kZXYvbGFuMCwvZGV2L2xhbjAgL2Rldi9sYW4xLC9kZXYvbGFuMCBcXAorICAgICAgICAgIExHczM3VTEgTEdzMzdVMgorICAgICAgICAKK0BFT0YKK30KKworY2hlY2tfdXNhZ2UoKSB7CisgIGlmIFsgYGV4cHIgJFRDUCArICRVRFAgKyAkTExBYCAtZXEgMCBdCisgIHRoZW4KKyAgICB1c2FnZSAkMDogRVJST1I6IE11c3Qgc3BlY2lmeSBhIHRlc3QKKyAgICBleGl0CisgIGZpCisKKyAgaWYgWyAkTExBIC1lcSAxIF0KKyAgdGhlbiAgCisgICAgTkRFVj1gZWNobyAkREVWRklMRUxJU1QgfCBhd2sgJ3twcmludGYgIiVkIixORn0nYAorICAgIGlmIFsgJE5ERVYgLW5lICROSE9TVFMgXQorICAgIHRoZW4KKyAgICAgIHVzYWdlICQwOiBFUlJPUjogTnVtYmVyIG9mIGRldmljZSBmaWxlcyBkb2VzIG5vdCBtYXRjaCBudW1iZXIgb2YgaG9zdHMKKyAgICAgIGV4aXQKKyAgICBmaQorICBmaQorCisgIGZvciBIT1NUIGluICRSRU1fSE9TVF9MSVNUCisgIGRvCisgICAgaWYgWyBgL2V0Yy9waW5nICRIT1NUIDEwMCAxIHwgYXdrICcvdHJhbnNtaXR0ZWQve3ByaW50ICQ0fSdgMCAtbmUgMTAgXSAKKyAgICB0aGVuCisgICAgICB1c2FnZSAkMDogRVJST1I6IENhbm5vdCBwaW5nIGhvc3Q6ICRIT1NUCisgICAgICBleGl0CisgICAgZmkKKyAgZG9uZQorCisgIGlmIFsgJEdQUk9GIC1lcSAxIF0KKyAgdGhlbgorICAgIGlmIFsgISAtciAkR1BST0ZfS0VSTkVMIF0KKyAgICB0aGVuCisgICAgICB1c2FnZSAkMDogRVJST1I6IENhbm5vdCBmaW5kIHN5c3RlbSBmaWxlOiAkR1BST0ZfS0VSTkVMCisgICAgICBleGl0CisgICAgZmkKKyAgICBpZiBbICRHUFJPRl9SVU5fVElNRSAtbGUgODAwIF0KKyAgICB0aGVuCisgICAgICBlY2hvICJcbldBUk5JTkc6IEdQUk9GIFJVTiBUSU1FIExFU1MgVEhBTiA4MDAgU0VDT05EU1xuIgorICAgIGZpCisgIGZpCit9CisKK2Rpc3BsYXlfaGVhZHN0b25lKCkgeworY2F0IDw8IEBFT0YKKworJFRFU1ROQU1FIEFnZ3JlZ2F0ZSBSRVFVRVNUL1JFU1BPTlNFIFRFU1QgdG8gJFJFTV9IT1NUX0xJU1QKK0xvY2FsIC9SZW1vdGUKK1NvY2tldCBTaXplICAgUmVxdWVzdCAgUmVzcC4gICBFbGFwc2VkICBUcmFucy4gICAgIE51bS4KK1NlbmQgICBSZWN2ICAgU2l6ZSAgICAgU2l6ZSAgICBUaW1lICAgICBSYXRlICAgICAgIENvbmN1cnJlbnQKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgIE5ldHBlcmZzCisKK0BFT0YKK30KKworZGlzcGxheV90ZXN0X2Jhbm5lcigpIHsKK2NhdCA8PCBARU9GCitARU9GCit9CisKK2J1aWxkX3NhcF9saXN0KCkgeworICAgICAgTFNBUD00CisgICAgICBTQVBMSVNUPSIiCisgICAgICBQUk9DPTAKKyAgICAgIHdoaWxlIFsgJFBST0MgLWx0ICROUFJPQ1MgXQorICAgICAgZG8KKyAgICAgICAgUFJPQz1gZXhwciAkUFJPQyArIDFgCisgICAgICAgIExTQVA9YGV4cHIgJExTQVAgKyA0YAorICAgICAgICBSU0FQPWBleHByICRMU0FQICsgMmAKKyAgICAgICAgU0FQTElTVD0iJFNBUExJU1QgJExTQVAsJFJTQVAiCisgICAgICBkb25lCit9CisKK3N0YXJ0X2dwcm9mKCkgeworICBpZiBbICRHUFJPRiAtZXEgMSBdCisgIHRoZW4KKyAgICAoIGtnbW9uIC1oOyBrZ21vbiAtcjsgc2xlZXAgMTA7IGtnbW9uIC1iOyBzbGVlcCAkR1BST0ZfUlVOX1RJTUU7IGtnbW9uIC1oOyBrZ21vbiAtcCAkR1BST0ZfS0VSTkVMOyBtdiBnbW9uLm91dCBnbW9uLm91dC4kVEVTVC4kTlBST0NTICkmCisgIGZpCit9CisKK3N0YXJ0XzFfcHJvY19wZXJfaG9zdCgpIHsKKyAgSE9TVE5VTT0wCisgIGZvciBIT1NUIGluICRSRU1fSE9TVF9MSVNUCisgIGRvCisgICAgaWYgWyAiJFRFU1QiID0gIkhJUFBJX1JSIiBdCisgICAgdGhlbgorICAgICAgUFJPQ05VTT1gZXhwciAkUFJPQ05VTSArIDFgCisgICAgICBTQVA9YGVjaG8gJFNBUExJU1QgfCBhd2sgIntwcmludCBcXCQkUFJPQ05VTX0iYAorICAgICAgU0FQPSItcyAkU0FQIgorICAgICAgSE9TVE5VTT1gZXhwciAkSE9TVE5VTSArIDFgCisgICAgICBERVZGSUxFPWBlY2hvICRERVZGSUxFTElTVCB8IGF3ayAie3ByaW50IFxcJCRIT1NUTlVNfSJgCisgICAgICBERVZGSUxFPSItRCAkREVWRklMRSIKKyAgICBmaQorICAgICRORVRQRVJGIC10ICRURVNUIC1sICRURVNUX1RJTUUgLUggJEhPU1QgLVAwIC12MCAtLSBcCisgICAgICAkQ09XICRERVZGSUxFICRTQVAgJFJSX1NJWkUgJFNFTkRfU0laRSAkU09DS0VUX1NJWkUgJgorICBkb25lCit9CisKK3N0YXJ0X25fcHJvY3NfcGVyX2hvc3QoKSB7CisgIFBST0M9MAorICB3aGlsZSBbICRQUk9DIC1sdCAkMSBdCisgIGRvCisgICAgUFJPQ05VTT1gZXhwciAkUFJPQyBcKiAke05IT1NUU31gCisgICAgc3RhcnRfMV9wcm9jX3Blcl9ob3N0ICYKKyAgICBQUk9DPWBleHByICRQUk9DICsgMWAKKyAgZG9uZQorICB3YWl0Cit9CisKK3J1bl8xX3Rlc3QoKSB7CisJc3RhcnRfbl9wcm9jc19wZXJfaG9zdCAkUFJPQ1NfUEVSX0hPU1QgfFwKKyAgICAgICAgICBhd2sgJ0JFR0lOIHttYXg9MDttaW49OTk5OTk7c3VtPTA7bj0wfQkJCQlcCisgICAgICAgICAgICAge3N1bSArPSAkMTtuKys7YXZlPXN1bS9ufSAJCQkJCVwKKyAgICAgICAgICAgICAkMTxtaW4ge21pbj0kMX0gCQkJCQkJXAorICAgICAgICAgICAgICQxPm1heCB7bWF4PSQxfSAJCQkJCQlcCisgICAgICAgICAgICAge2Vycmw9KGF2ZS1taW4pL2F2ZTtlcnJtPShtYXgtYXZlKS9hdmU7ZXJyPWVycmx9CQlcCisgICAgICAgICAgICAgZXJybT5lcnJsIHtlcnI9ZXJybX0JCQkJCVwKKyAgICAgICAgICAgICBFTkQge3ByaW50ZiAiQWdncmVnYXRlIHRocm91Z2hwdXQ6ICUyLjJmIFRQUyAgKy8tICUyLjJmICUlXG4iLHN1bSxlcnIqMTAwfScKK30KKworcnVuX3Rlc3Rfbl90aW1lcygpIHsKKyAgUkVUUlk9MAorICBURVNUX0NPVU5UPTAKKyAgd2hpbGUgWyAkVEVTVF9DT1VOVCAtbHQgJDEgXQorICBkbworICAgIFRFU1RfQ09VTlQ9YGV4cHIgJFRFU1RfQ09VTlQgKyAxYAorICAgIHN0YXJ0X2dwcm9mCisgICAgcnVuXzFfdGVzdCA+IC5ydW5fdGVzdF9uX2ZpbGUKKyAgICBjYXQgLnJ1bl90ZXN0X25fZmlsZQorICAgIEVSUk9SX0xWTD1gYXdrICd7cHJpbnQgaW50KCQ2KzAuOTkpfScgLnJ1bl90ZXN0X25fZmlsZWAKKyAgICBpZiBbICRFUlJPUl9MVkwgLWd0ICRUT0xFUkFOQ0UgXQorICAgIHRoZW4KKyAgICAgIFJFVFJZPWBleHByICRSRVRSWSArIDFgCisgICAgICBpZiBbICRSRVRSWSAtbGUgJE1BWF9SRVRSSUVTIF0KKyAgICAgIHRoZW4KKyAgICAgICAgVEVTVF9DT1VOVD1gZXhwciAkVEVTVF9DT1VOVCAtIDFgCisgICAgICAgIFRFU1RfVElNRT1gZXhwciAkVEVTVF9USU1FIFwqIDJgCisgICAgICBlbHNlCisJZWNobyAiISEhVGhpcyBpcyBhbiBJTlZBTElEIFJVTiBvZiB0aGUgYXJyX3NjcmlwdCEhISIgPiYyCisJZWNobyAiISEhVU5BQkxFIHRvIGhpdCBUT0xFUkFOQ0Ugb2YgIiAkVE9MRVJBTkNFICIhISEiID4mMgorCWVjaG8gIlBsZWFzZSBzZWxlY3QgYSBsb25nZXIgaW5pdGlhbCB0aW1lIGFuZCB0cnkgYWdhaW4uIiA+JjIKKyAgICAgICBleGl0CisgICAgICBmaQorICAgIGZpCisgIGRvbmUKK30KKworZG9fcmVxX3JyX3NpemVzKCkgeworICBmb3IgUzIgaW4gJFJSX1NJWkVTCisgICAgZG8KKyAgICAgIFJSX1NJWkU9Ii1yICRTMiIKKyAgICAgIGRpc3BsYXlfdGVzdF9iYW5uZXIgJE5QUk9DUyAkVEVTVCAkUzIKKyAgICAgIHJ1bl90ZXN0X25fdGltZXMgJE5URVNUID4gLmRvX3Nlcmllc19maWxlCisgICAgICBUUFM9YGF3ayAiaW50KFwkNiswLjk5KTw9JFRPTEVSQU5DRSB7cHJpbnR9IiAuZG9fc2VyaWVzX2ZpbGUgfFwKKyAgICAgICAgYXdrICdCRUdJTiB7c3VtPTA7bj0xfQlcCisgICAgICAgICAgICAgc3VtPjAge24rK30JXAorICAgICAgICAgICAgIHtzdW0rPSQzfQkJXAorICAgICAgICAgICAgIEVORCB7cHJpbnRmICIlMi4yZlxuIiwoc3VtKS8obil9J2AKKyAgICBTT0NLX1NFTkQ9YGVjaG8gJFNPQ0tFVF9TSVpFIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAgICBTT0NLX1JFQ1Y9YGVjaG8gJFNPQ0tFVF9TSVpFIHwgYXdrICd7cHJpbnQgJDR9J2AKKyAgICBSRVFfU0laRT1gZWNobyAkUzIgfCBhd2sgLUYiLCIgJ3twcmludCAkMX0nYAorICAgIFJTUF9TSVpFPWBlY2hvICRTMiB8IGF3ayAtRiIsIiAne3ByaW50ICQyfSdgCisgICAgZWNobyAgJFNPQ0tfU0VORCAkU09DS19SRUNWICRSRVFfU0laRSAkUlNQX1NJWkUgJFRFU1RfVElNRSAkVFBTICRQUk9DUyB8XAorICAgIGF3ayAne3ByaW50ZiAiJTVkICAlNWQgICU1ZCAgICAlNWQgICAlNWQgICAgJTguMmYgICAlNWQiLCQxLCQyLCQzLCQ0LCQ1LCQ2LCQ3fScKKyAgICBkb25lCit9CisKK3RjcF90ZXN0KCkgeworICAgICNSdW4gdGhlIFRDUCBSUiB0ZXN0cworICAgIFRFU1Q9IlRDUF9SUiIKKyAgICBTRU5EX1NJWkU9IiIKKyAgICBTT0NLRVRfU0laRT0iLXMgODE5MiAtUyA4MTkyIgorICAgIENPVz0iLVYiCisgICAgZG9fcmVxX3JyX3NpemVzCisgICAgZWNobworfQorCit1ZHBfdGVzdCgpIHsgIAorICAgICNSdW4gdGhlIFVEUCBSUiB0ZXN0cworICAgIFRFU1Q9IlVEUF9SUiIKKyAgICBTRU5EX1NJWkU9IiIKKyAgICBTT0NLRVRfU0laRT0iLXMgOTIxNiAtUyA5MjE2IgorICAgIENPVz0iLVYiCisgICAgZG9fcmVxX3JyX3NpemVzCisgICAgZWNobworfQorCitsbGFfdGVzdCgpIHsgIAorICAgICNSdW4gdGhlIFVEUCBSUiB0ZXN0cworICAgIFRFU1Q9IkhJUFBJX1JSIgorICAgIFNFTkRfU0laRT0iIgorICAgIFNPQ0tFVF9TSVpFPSIiCisgICAgQ09XPSIiCisgICAgYnVpbGRfc2FwX2xpc3QKKyAgICBkb19yZXFfcnJfc2l6ZXMKKyAgICBlY2hvCit9CisKK2RvX3JlcV9wcm9jcygpIHsKKyAgaWYgWyAkVENQIC1lcSAxIF0KKyAgdGhlbgorICAgIFRFU1ROQU1FPSJUQ1AiCisgICAgZGlzcGxheV9oZWFkc3RvbmUKKyAgICBmb3IgUFJPQ1MgaW4gJE5QUk9DX0xJU1QgIAorICAgICAgZG8KKyAgICAgICAgI0RldGVybWluZSBudW1iZXIgb2YgcHJvY3MgcGVyIGhvc3QKKyAgICAgICAgUFJPQ1NfUEVSX0hPU1Q9YGVjaG8gJFBST0NTICRSRU1fSE9TVF9MSVNUIHwgYXdrICd7cHJpbnRmICIlZCIsKCQxK05GLTIpLyhORi0xKX0nYAorICAgICAgICBOUFJPQ1M9YGV4cHIgJFBST0NTX1BFUl9IT1NUIFwqICROSE9TVFNgCisgICAgICAgIHRjcF90ZXN0CisgICAgICBkb25lCisgIGZpCisKKyAgaWYgWyAkVURQIC1lcSAxIF0KKyAgdGhlbgorICAgIFRFU1ROQU1FPSJVRFAiCisgICAgZGlzcGxheV9oZWFkc3RvbmUKKyAgICBmb3IgUFJPQ1MgaW4gJE5QUk9DX0xJU1QgIAorICAgICAgZG8KKyAgICAgICAgI0RldGVybWluZSBudW1iZXIgb2YgcHJvY3MgcGVyIGhvc3QKKyAgICAgICAgUFJPQ1NfUEVSX0hPU1Q9YGVjaG8gJFBST0NTICRSRU1fSE9TVF9MSVNUIHwgYXdrICd7cHJpbnRmICIlZCIsKCQxK05GLTIpLyhORi0xKX0nYAorICAgICAgICBOUFJPQ1M9YGV4cHIgJFBST0NTX1BFUl9IT1NUIFwqICROSE9TVFNgCisgICAgICAgIHVkcF90ZXN0CisgICAgICBkb25lCisgIGZpCisKKyAgaWYgWyAkTExBIC1lcSAxIF0KKyAgdGhlbgorICAgIFRFU1ROQU1FPSJMTEEiCisgICAgZGlzcGxheV9oZWFkc3RvbmUKKyAgICBmb3IgUFJPQ1MgaW4gJE5QUk9DX0xJU1QgIAorICAgICAgZG8KKyAgICAgICAgI0RldGVybWluZSBudW1iZXIgb2YgcHJvY3MgcGVyIGhvc3QKKyAgICAgICAgUFJPQ1NfUEVSX0hPU1Q9YGVjaG8gJFBST0NTICRSRU1fSE9TVF9MSVNUIHwgYXdrICd7cHJpbnRmICIlZCIsKCQxK05GLTIpLyhORi0xKX0nYAorICAgICAgICBOUFJPQ1M9YGV4cHIgJFBST0NTX1BFUl9IT1NUIFwqICROSE9TVFNgCisgICAgICAgIGxsYV90ZXN0CisgICAgICBkb25lCisgIGZpCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5pdF9wYXJtcworCitQQVJNUz0iJHswIyMqL30gJHtAfSIKKworIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lCit3aGlsZSBbICQjICE9IDAgXQorZG8KKyAgY2FzZSAkMSBpbgorICAgIFwtZ3Byb2YpIEdQUk9GPTEKKyAgICAgICAgICAgICBHUFJPRl9LRVJORUw9JDIKKyAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgIDs7CisgICAgXC10KSAgICAgVEVTVF9USU1FPSQyCisgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgOzsKKyAgICBcLW4pICAgICBOUFJPQ19MSVNUPSIkTlBST0NfTElTVCAkMiIKKyAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgIDs7CisgICAgXCtsbGEpICAgTExBPTEKKyAgICAgICAgICAgICA7OworICAgIFwrdGNwKSAgIFRDUD0xCisgICAgICAgICAgICAgOzsKKyAgICBcK3VkcCkgICBVRFA9MQorICAgICAgICAgICAgIDs7CisgICAgXC1sbGEpICAgTExBPTAKKyAgICAgICAgICAgICA7OworICAgIFwtdGNwKSAgIFRDUD0wCisgICAgICAgICAgICAgOzsKKyAgICBcLXVkcCkgICBVRFA9MAorICAgICAgICAgICAgIDs7CisgICAgXC1kKSAgICAgREVWRklMRUxJU1Q9IiRERVZGSUxFTElTVCAkMiIKKyAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgIDs7CisgICAgXC1yKSAgICAgUlJfU0laRVM9IiRSUl9TSVpFUyAkMiIKKyAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgIDs7CisgICAgXC0qKSAgICAgdXNhZ2UgJDA6IEVSUk9SOiBVbmV4cGVjdGVkIHBhcmFtdGVyOiAkMQorICAgICAgICAgICAgIGV4aXQKKyAgICAgICAgICAgICA7OworICAgICopICAgICAgIFJFTV9IT1NUX0xJU1Q9IiRSRU1fSE9TVF9MSVNUICQxIgorICAgICAgICAgICAgIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworc2V0X2RlZmF1bHRfcGFybXMKK2NoZWNrX3VzYWdlCitkb19yZXFfcHJvY3MKKwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvcGFja2V0X2J5dGVfc2NyaXB0IGIvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvcGFja2V0X2J5dGVfc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3NmI0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy9wYWNrZXRfYnl0ZV9zY3JpcHQKQEAgLTAsMCArMSwyMDIgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHNjcmlwdCBydW5zIGEgc2VyaWVzIG9mIG5ldHBlcmYgdGVzdHMgaW50ZW5kZWQgdG8gZ2F0aGVyIHRoZSAKKyMgcmF3IG1hdGVyaWFsIG5lY2Vzc2FyeSB0byBhcnJpdmUgYXQgZXN0aW1hdGVzIGZvciB0aGUgY29zdCBvZgorIyBzZW5kaW5nIGFuZCByZWNlaXZpbmcgYSBUQ1Agc2VnbWVudCwgdGhlIGNvc3Qgb2YgZWFjaCBhZGRpdGlvbmFsIGJ5dGUKKyMgYW5kIHRoZSBjb3N0IG9mIGVhY2ggaW5jcmVtZW50YWwgc2VnbWVudC4KKyMgCisjIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkYXRhIHBvaW50cyBnYXRoZXJlZCBieSB0aGlzIHNjcmlwdCAtIGl0IG1pZ2h0CisjIHJ1biBmb3IgYSBjb25zaWRlcmFibGUgbGVuZ3RoIG9mIHRpbWUuCisjCisjIHJpY2sgam9uZXMgNC85OQorIworIyB0ZWFjaCBpdCBhYm91dCBwcm9jZXNzb3IgYWZmaW5pdHkgYW5kIHRoZSBUQ1BfTVNTIHRlc3QKKyMgcmljayBqb25lcyAyMDA3LTExLTA4CisjCisKK2lmIFsgJCMgLWd0IDIgXTsgdGhlbgorICBlY2hvICJ0cnkgYWdhaW4sIGNvcnJlY3RseSAtPiBwYWNrZXRfYnl0ZV9zY3JpcHQgaG9zdG5hbWUgW0NQVV0iCisgIGV4aXQgMQorZmkKKworaWYgWyAkIyAtZXEgMCBdOyB0aGVuCisgIGVjaG8gInRyeSBhZ2FpbiwgY29ycmVjdGx5IC0+IHBhY2tldF9ieXRlX3NjcmlwdCBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCisjIHdoZXJlIGlzIG5ldHBlcmYKK05FVFBFUkZfRElSPSR7TkVUUEVSRl9ESVI6PS9vcHQvbmV0cGVyZjIvYmlufQorCisKKyMgYXQgd2hhdCBwb3J0IHdpbGwgbmV0c2VydmVyIGJlIHdhaXRpbmc/IElmIHlvdSBkZWNpZGUgdG8gcnVuCisjIG5ldHNlcnZlciBhdCBhIGRpZmZlcm5ldCBwb3J0IHRoYW4gdGhlIGRlZmF1bHQgb2YgMTI4NjUsIHRoZW4gc2V0CisjIHRoZSB2YWx1ZSBvZiBORVRQRVJGX1BPUlQgYXByb3ByaWF0ZWx5CisjIE5FVFBFUkZfUE9SVD0iLXAgc29tZV9vdGhlcl9wb3J0bnVtIgorTkVUUEVSRl9QT1JUPSR7TkVUUEVSRl9QT1JUOj0iIn0KKworCisjIFRoZSB0ZXN0IGxlbmd0aCBpbiBzZWNvbmRzCitORVRQRVJGX1RJTUU9JHtORVRQRVJGX1RJTUU6PTMwfQorCisjIEhvdyBhY2N1cmF0ZSB3ZSB3YW50IHRoZSBlc3RpbWF0ZSBvZiBwZXJmb3JtYW5jZTogCisjICAgICAgbWF4aW11bSBhbmQgbWluaW11bSB0ZXN0IGl0ZXJhdGlvbnMgKC1pKQorIyAgICAgIGNvbmZpZGVuY2UgbGV2ZWwgKDk5IG9yIDk1KSBhbmQgaW50ZXJ2YWwgKHBlcmNlbnQpCitORVRQRVJGX1NUQVRTPSR7TkVUUEVSRl9TVEFUUzo9Ii1pIDMwLDMgLUkgOTksNSJ9CisKKyMgVGhlIHNvY2tldCBzaXplcyB0aGF0IHdlIHdpbGwgYmUgdGVzdGluZyAtIHVzaW5nIC0xIHdpbGwgbGV0IGl0IAorIyBiZSB0aGUgc3lzdGVtIGRlZmF1bHQuCitORVRQRVJGX1NLVFM9JHtORVRQRVJGX1NLVFM6PSItMSJ9CisKKyMgVGhlIENQVSBhZmZpbml0eSB0byBiZSBhcHBsaWVkCitORVRQRVJGX0FGRklOSVRZPSR7TkVUUEVSRl9BRkZJTklUWTo9IiJ9CisKKyMgTkVUUEVSRl9DTUQgaXMgYW4gYW1hbGdhbSBvZiBwcmV2aW91cyB2YXJpYWJsZXMKK05FVFBFUkZfQ01EPSIke05FVFBFUkZfRElSfS9uZXRwZXJmICR7TkVUUEVSRl9BRkZJTklUWX0iCisKKyMgaWYgdGhlcmUgYXJlIHR3byBwYXJtcywgcGFybSBvbmUgaXQgdGhlIGhvc3RuYW1lIGFuZCBwYXJtIHR3byB3aWxsCisjIGJlIGEgQ1BVIGluZGljYXRvci4gYWN0dWFsbHksIGFueXRoaW5nIGFzIGEgc2Vjb25kIHBhcm0gd2lsbCBjYXVzZQorIyB0aGUgQ1BVIHRvIGJlIG1lYXN1cmVkLCBidXQgd2Ugd2lsbCAiYWR2ZXJ0aXNlIiBpdCBzaG91bGQgYmUgIkNQVSIKKworaWYgWyAkIyAtZXEgMiBdOyB0aGVuCisgIFJFTV9IT1NUPSQxCisgIExPQ19DUFU9Ii1jIgorICBSRU1fQ1BVPSItQyIKK2ZpCisKK2lmIFsgJCMgLWVxIDEgXTsgdGhlbgorICBSRU1fSE9TVD0kMQorZmkKKworTVNTPWAkTkVUUEVSRl9DTUQgLUggJFJFTV9IT1NUIC10IFRDUF9NU1MgLVAgMCAtdiAwYAorCisjIFRoZSByZXF1ZXN0LHJlc3BvbnNlIHNpemVzIHRoYXQgd2Ugd2lsbCBiZSB1c2luZy4gVGhlIG5ldHBlcmYKKyMgY29tbWFuZCBwYXJzZXIgd2lsbCB0cmVhdCAiMSIgdGhlIHNhbWUgYXMgIjEsMSIgLSBJIHVzZSAxLDEgdG8KKyMgcmVtZW1iZXIgdGhhdCBpdCBpcyAicmVxdWVzdCxyZXNwb25zZSIKKworIyBzdGFydCBhdCBvbmUgYW5kIG11bHRpcGx5IGJ5IHR3byBvbiBvdXIgd2F5IHRvIHRoZSBNU1MKK2Jhcj0xCit3aGlsZSBbICRiYXIgLWx0ICRNU1MgXQorZG8KKyBORVRQRVJGX1JFUVM9IiR7TkVUUEVSRl9SRVFTfSAkYmFyIgorIGJhcj1gZXhwciAkYmFyIFwqIDJgCitkb25lCisKKyMgYW5kIG5vdyBtdWx0aXBsZXMgb2YgdGhlIG1zcyBhbmQgdGhhdCBwbHVzIG9uZQorZm9yIGkgaW4gMSAyIDMKK2RvCisgYmFyPWBleHByICRNU1MgXCogJGlgCisgTkVUUEVSRl9SRVFTPSIke05FVFBFUkZfUkVRU30gJGJhciIKKyBORVRQRVJGX1JFUVM9IiR7TkVUUEVSRl9SRVFTfSBgZXhwciAkYmFyICsgMWAiCitkb25lCisKK2Jhcj0xCit3aGlsZSBbICRiYXIgLWx0ICRNU1MgXQorZG8KKyAgTkVUUEVSRl9SRVNQPSIke05FVFBFUkZfUkVTUH0gJGJhciIKKyAgYmFyPWBleHByICRiYXIgXCogMmAKK2RvbmUKKworZm9yIGkgaW4gMSAyIDMKK2RvCisgYmFyPWBleHByICRNU1MgXCogJGlgCisgTkVUUEVSRl9SRVNQPSIke05FVFBFUkZfUkVTUH0gJGJhciIKKyBORVRQRVJGX1JFU1A9IiR7TkVUUEVSRl9SRVNQfSBgZXhwciAkYmFyICsgMWAiCitkb25lCisKKworCisjIElmIHdlIGFyZSBtZWFzdXJpbmcgQ1BVIHV0aWxpemF0aW9uLCB0aGVuIHdlIGNhbiBzYXZlIGJlYXVjb3VwCisjIHRpbWUgYnkgc2F2aW5nIHRoZSByZXN1bHRzIG9mIHRoZSBDUFUgY2FsaWJyYXRpb24gYW5kIHBhc3NpbmcKKyMgdGhlbSBpbiBkdXJpbmcgdGhlIHJlYWwgdGVzdHMuIFNvLCB3ZSBleGVjdXRlIHRoZSBuZXcgQ1BVICJ0ZXN0cyIKKyMgb2YgbmV0cGVyZiBhbmQgcHV0IHRoZSB2YWx1ZXMgaW50byBzaGVsbCB2YXJzLgorY2FzZSAkTE9DX0NQVSBpbgorXC1jKSBMT0NfUkFURT1gJE5FVFBFUkZfQ01EICRQT1JUIC10IExPQ19DUFVgOzsKKyopIExPQ19SQVRFPSIiCitlc2FjCisKK2Nhc2UgJFJFTV9DUFUgaW4KK1wtQykgUkVNX1JBVEU9YCRORVRQRVJGX0NNRCAkUE9SVCAtdCBSRU1fQ1BVIC1IICRSRU1fSE9TVGA7OworKikgUkVNX1JBVEU9IiIKK2VzYWMKKworIyBUaGlzIGRpc2FibGVzIGhlYWRlciBkaXNwbGF5CitOT19IRFI9Ii1QIDAiCitOT19IRFI9IiIKKworZm9yIFNPQ0tFVF9TSVpFIGluICRORVRQRVJGX1NLVFMKKyBkbworICBlY2hvCisgIGVjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIGVjaG8gVGVzdGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lOgorICAjIHdlIGVjaG8gdGhlIGNvbW1hbmQgbGluZSBmb3IgY3V0IGFuZCBwYXN0ZSB0byB0aCBkYXRhYmFzZQorICBlY2hvICRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUIC10IFRDUF9SUiBcCisgICAgICAgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkTkVUUEVSRl9TVEFUUyAtLVwKKyAgICAgICAtcyAkU09DS0VUX1NJWkUgLVMgJFNPQ0tFVF9TSVpFCisgIGVjaG8KKyAgZWNobyBhbmQgdGhlc2Ugc2V0dGluZ3MgZm9yIHNlbmQgc2l6ZXMgJE5FVFBFUkZfUkVRUworICBlY2hvCisKKyAgZm9yIFJFUSBpbiAkTkVUUEVSRl9SRVFTCisgIGRvCisgICAjIHNpbmNlIHdlIGhhdmUgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgc3R1ZmYsIHdlIGRvIG5vdAorICAgIyBuZWVkIHRvIHJlcGVhdCBhIHRlc3QgbXVsdGlwbGUgdGltZXMgZnJvbSB0aGUgc2hlbGwKKyAgICRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUICROT19IRFIgXAorICAgLXQgVENQX1JSICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJE5FVFBFUkZfU1RBVFMgLS1cCisgICAtciAke1JFUX0sMSAtcyAkU09DS0VUX1NJWkUgLVMgJFNPQ0tFVF9TSVpFCisgICBOT19IRFI9Ii1QIDAiCisgIGRvbmUKKyAgZWNobworICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBOT19IRFI9IiIKKyAgZWNobyBUZXN0aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmU6CisgICMgd2UgZWNobyB0aGUgY29tbWFuZCBsaW5lIGZvciBjdXQgYW5kIHBhc3RlIHRvIHRoIGRhdGFiYXNlCisgIGVjaG8gJE5FVFBFUkZfQ01EICRORVRQRVJGX1BPUlQgLWwgJE5FVFBFUkZfVElNRSAtSCAkUkVNX0hPU1QgLXQgVENQX1JSIFwKKyAgICAgICAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFICRORVRQRVJGX1NUQVRTIC0tXAorICAgICAgIC1zICRTT0NLRVRfU0laRSAtUyAkU09DS0VUX1NJWkUKKyAgZWNobyBhbmQgdGhlc2Ugc2V0dGluZ3MgZm9yIHJlc3BvbnNlIHNpemVzICRORVRQRVJGX1JFU1AKKyAgZWNobworICBmb3IgUkVTUCBpbiAkTkVUUEVSRl9SRVNQCisgICBkbworICAgIyBzaW5jZSB3ZSBoYXZlIHRoZSBjb25maWRlbmNlIGludGVydmFsIHN0dWZmLCB3ZSBkbyBub3QKKyAgICMgbmVlZCB0byByZXBlYXQgYSB0ZXN0IG11bHRpcGxlIHRpbWVzIGZyb20gdGhlIHNoZWxsCisgICAkTkVUUEVSRl9DTUQgJFBPUlQgLWwgJE5FVFBFUkZfVElNRSAtSCAkUkVNX0hPU1QgJE5PX0hEUiBcCisgICAtdCBUQ1BfUlIgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkTkVUUEVSRl9TVEFUUyAtLVwKKyAgIC1yIDEsJHtSRVNQfSAtcyAkU09DS0VUX1NJWkUgLVMgJFNPQ0tFVF9TSVpFCisgICBOT19IRFI9Ii1QIDAiCisgZG9uZQorICBlY2hvCisgIGVjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIE5PX0hEUj0iIgorICBlY2hvIFRlc3Rpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToKKyAgIyB3ZSBlY2hvIHRoZSBjb21tYW5kIGxpbmUgZm9yIGN1dCBhbmQgcGFzdGUgdG8gdGggZGF0YWJhc2UKKyAgZWNobyAkTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtbCAkTkVUUEVSRl9USU1FIC1IICRSRU1fSE9TVCAtdCBUQ1BfU1RSRUFNXAorICAgICAgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJE5FVFBFUkZfU1RBVFMgLS1cCisgICAgICAgLXMgJFNPQ0tFVF9TSVpFIC1TICRTT0NLRVRfU0laRQorICBlY2hvIGFuZCB0aGVzZSBzZXR0aW5ncyBmb3IgcmVzcG9uc2Ugc2l6ZXMgJE5FVFBFUkZfUkVTUAorICBlY2hvCisgIGZvciBSRVEgaW4gJE5FVFBFUkZfUkVRUworICAgZG8KKyAgICMgc2luY2Ugd2UgaGF2ZSB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBzdHVmZiwgd2UgZG8gbm90CisgICAjIG5lZWQgdG8gcmVwZWF0IGEgdGVzdCBtdWx0aXBsZSB0aW1lcyBmcm9tIHRoZSBzaGVsbAorICAgJE5FVFBFUkZfQ01EICRQT1JUIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUICROT19IRFIgXAorICAgLXQgVENQX1NUUkVBTSAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFICRORVRQRVJGX1NUQVRTIC0tXAorICAgLW0gJHtSRVF9IC1zICRTT0NLRVRfU0laRSAtUyAkU09DS0VUX1NJWkUgLUQKKyAgIE5PX0hEUj0iLVAgMCIKKyBkb25lCitkb25lCisKKyMgVGhlIHRlc3QgbGVuZ3RoIGluIHNlY29uZHMgZm9yIHRoZSBDUlIgdGVzdCwgd2hpY2ggbmVlZHMgdG8gYmUKKyMgICAgbG9uZ2VyIGZvciBhIGNvbm5lY3QvcmVxdWVzdC9yZXNwb25zZSB0ZXN0CisKK05FVFBFUkZfQ1JSX1RJTUU9JHtORVRQRVJGX0NSUl9USU1FOj0xMjB9CisKKyMgbm93IHdlIGRvIHRoZSBUQ1BfQ1JSIHRlc3QKK2VjaG8KK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC1sICRORVRQRVJGX0NSUl9USU1FIC1IICRSRU1fSE9TVCAtdCBUQ1BfQ1JSXAorICAgICAgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJE5FVFBFUkZfU1RBVFMgLS1cCisgICAgICAgLXMgJFNPQ0tFVF9TSVpFIC1TICRTT0NLRVRfU0laRQorZWNobworJE5FVFBFUkZfQ01EICRORVRQRVJGX1BPUlQgLWwgJE5FVFBFUkZfQ1JSX1RJTUUgLUggJFJFTV9IT1NUIC10IFRDUF9DUlJcCisgICAgICAgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkTkVUUEVSRl9TVEFUUyAtLVwKKyAgICAgICAtcyAkU09DS0VUX1NJWkUgLVMgJFNPQ0tFVF9TSVpFCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy9zY3RwX3N0cmVhbV9zY3JpcHQgYi9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy9zY3RwX3N0cmVhbV9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkODUwYgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3NjdHBfc3RyZWFtX3NjcmlwdApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBzY3JpcHQgZm9yIHVzaW5nIG5ldHBlcmYuIEZlZWwgZnJlZSB0byBtb2RpZnkgaXQgCisjIGFzIG5lY2Vzc2FyeSwgYnV0IEkgd291bGQgc3VnZ2VzdCB0aGF0IHlvdSBjb3B5IHRoaXMgb25lIGZpcnN0LgorIyAKKyMgVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBjb25maWRlbmNlCisjIGludGVydmFsIHN1cHBvcnQgaW4gcmV2aXNpb24gMi4wIG9mIG5ldHBlcmYuIGl0IGhhcyBhbHNvIGJlZW4gYWx0ZXJlZAorIyB0byBtYWtlIHN1Ym1pdHRpbmcgaXRzIHJlc3V0bHMgdG8gdGhlIG5ldHBlcmYgZGF0YWJhc2UgZWFzaWVyCisjIHJhaiAxMS85NAorIworIyB1c2FnZTogdGNwX3N0cmVhbV9zY3JpcHQgaG9zdG5hbWUgW0NQVV0KKyMKKworaWYgWyAkIyAtZ3QgMiBdOyB0aGVuCisgIGVjaG8gInRyeSBhZ2FpbiwgY29ycmVjdGx5IC0+IHNjdHBfc3RyZWFtX3NjcmlwdCBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKyAgZWNobyAidHJ5IGFnYWluLCBjb3JyZWN0bHkgLT4gc2N0cF9zdHJlYW1fc2NyaXB0IGhvc3RuYW1lIFtDUFVdIgorICBleGl0IDEKK2ZpCisKKyMgd2hlcmUgdGhlIHByb2dyYW1zIGFyZQorI05FVEhPTUU9L3Vzci9sb2NhbC9uZXRwZXJmCisjTkVUSE9NRT0iL29wdC9uZXRwZXJmIgorTkVUSE9NRT0uCisKKyMgYXQgd2hhdCBwb3J0IHdpbGwgbmV0c2VydmVyIGJlIHdhaXRpbmc/IElmIHlvdSBkZWNpZGUgdG8gcnVuCisjIG5ldHNlcnZlciBhdCBhIGRpZmZlcm5ldCBwb3J0IHRoYW4gdGhlIGRlZmF1bHQgb2YgMTI4NjUsIHRoZW4gc2V0CisjIHRoZSB2YWx1ZSBvZiBQT1JUIGFwcm9wcmlhdGVseQorI1BPUlQ9Ii1wIHNvbWVfb3RoZXJfcG9ydG51bSIKK1BPUlQ9IiIKKworIyBUaGUgdGVzdCBsZW5ndGggaW4gc2Vjb25kcworVEVTVF9USU1FPTYwCisKKyMgSG93IGFjY3VyYXRlIHdlIHdhbnQgdGhlIGVzdGltYXRlIG9mIHBlcmZvcm1hbmNlOiAKKyMgICAgICBtYXhpbXVtIGFuZCBtaW5pbXVtIHRlc3QgaXRlcmF0aW9ucyAoLWkpCisjICAgICAgY29uZmlkZW5jZSBsZXZlbCAoOTkgb3IgOTUpIGFuZCBpbnRlcnZhbCAocGVyY2VudCkKK1NUQVRTX1NUVUZGPSItaSAxMCwyIC1JIDk5LDUiCisKKyMgVGhlIHNvY2tldCBzaXplcyB0aGF0IHdlIHdpbGwgYmUgdGVzdGluZworU09DS0VUX1NJWkVTPSI1NzM0NCAzMjc2OCA4MTkyIgorCisjIFRoZSBzZW5kIHNpemVzIHRoYXQgd2Ugd2lsbCBiZSB1c2luZworU0VORF9TSVpFUz0iNDA5NiA4MTkyIDMyNzY4IgorCisjIGlmIHRoZXJlIGFyZSB0d28gcGFybXMsIHBhcm0gb25lIGl0IHRoZSBob3N0bmFtZSBhbmQgcGFybSB0d28gd2lsbAorIyBiZSBhIENQVSBpbmRpY2F0b3IuIGFjdHVhbGx5LCBhbnl0aGluZyBhcyBhIHNlY29uZCBwYXJtIHdpbGwgY2F1c2UKKyMgdGhlIENQVSB0byBiZSBtZWFzdXJlZCwgYnV0IHdlIHdpbGwgImFkdmVydGlzZSIgaXQgc2hvdWxkIGJlICJDUFUiCisKK2lmIFsgJCMgLWVxIDIgXTsgdGhlbgorICBSRU1fSE9TVD0kMQorICBMT0NfQ1BVPSItYyIKKyAgUkVNX0NQVT0iLUMiCitmaQorCitpZiBbICQjIC1lcSAxIF07IHRoZW4KKyAgUkVNX0hPU1Q9JDEKK2ZpCisKKyMgSWYgd2UgYXJlIG1lYXN1cmluZyBDUFUgdXRpbGl6YXRpb24sIHRoZW4gd2UgY2FuIHNhdmUgYmVhdWNvdXAKKyMgdGltZSBieSBzYXZpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIENQVSBjYWxpYnJhdGlvbiBhbmQgcGFzc2luZworIyB0aGVtIGluIGR1cmluZyB0aGUgcmVhbCB0ZXN0cy4gU28sIHdlIGV4ZWN1dGUgdGhlIG5ldyBDUFUgInRlc3RzIgorIyBvZiBuZXRwZXJmIGFuZCBwdXQgdGhlIHZhbHVlcyBpbnRvIHNoZWxsIHZhcnMuCitjYXNlICRMT0NfQ1BVIGluCitcLWMpIExPQ19SQVRFPWAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC10IExPQ19DUFVgOzsKKyopIExPQ19SQVRFPSIiCitlc2FjCisKK2Nhc2UgJFJFTV9DUFUgaW4KK1wtQykgUkVNX1JBVEU9YCRORVRIT01FL25ldHBlcmYgJFBPUlQgLXQgUkVNX0NQVSAtSCAkUkVNX0hPU1RgOzsKKyopIFJFTV9SQVRFPSIiCitlc2FjCisKKyMgdGhpcyB3aWxsIGRpc2FibGUgaGVhZGVycworTk9fSERSPSItUCAwIgorCitmb3IgU09DS0VUX1NJWkUgaW4gJFNPQ0tFVF9TSVpFUworICBkbworICBmb3IgU0VORF9TSVpFIGluICRTRU5EX1NJWkVTCisgICAgZG8KKyAgICBlY2hvCisgICAgZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBlY2hvCisgICAgIyB3ZSBlY2hvIHRoZSBjb21tYW5kIGxpbmUgZm9yIGN1dCBhbmQgcGFzdGUgCisgICAgZWNobyAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC1sICRURVNUX1RJTUUgLUggJFJFTV9IT1NUIC10IFNDVFBfU1RSRUFNXAorICAgICAgICAgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS1cCisgICAgICAgICAtbSAkU0VORF9TSVpFIC1zICRTT0NLRVRfU0laRSAtUyAkU09DS0VUX1NJWkUKKworICAgIGVjaG8KKyAgICAjIHNpbmNlIHdlIGhhdmUgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgc3R1ZmYsIHdlIGRvIG5vdAorICAgICMgbmVlZCB0byByZXBlYXQgYSB0ZXN0IG11bHRpcGxlIHRpbWVzIGZyb20gdGhlIHNoZWxsCisgICAgJE5FVEhPTUUvbmV0cGVyZiAkUE9SVCAtbCAkVEVTVF9USU1FIC1IICRSRU1fSE9TVCAtdCBTQ1RQX1NUUkVBTVwKKyAgICAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFICRTVEFUU19TVFVGRiAtLVwKKyAgICAtbSAkU0VORF9TSVpFIC1zICRTT0NLRVRfU0laRSAtUyAkU09DS0VUX1NJWkUKKworICAgIGRvbmUKKyAgZG9uZQorZWNobyBJZiB5b3Ugd2lzaCB0byBzdWJtaXQgdGhlc2UgcmVzdWx0cyB0byB0aGUgbmV0cGVyZiBkYXRhYmFzZSBhdAorZWNobyBodHRwOi8vd3d3LmN1cC5ocC5jb20vbmV0cGVyZi9OZXRwZXJmUGFnZS5odG1sLCBwbGVhc2Ugc3VibWl0IGVhY2gKK2VjaG8gZGF0YXBvaW50IGluZGl2aWR1YWxseS4gSW5kaXZpZHVhbCBkYXRhcG9pbnRzIGFyZSBzZXBhcmF0ZWQgYnkKK2VjaG8gbGluZXMgb2YgZGFzaGVzLiAKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3NuYXBzaG90X3NjcmlwdCBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3NuYXBzaG90X3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmU2MzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvc25hcHNob3Rfc2NyaXB0CkBAIC0wLDAgKzEsMjI2IEBACisjIS9iaW4vc2gKKyNzZXQgLXgKKyMKKyMgVGhpcyBpcyBhIHNjcmlwdCB0byBnZW5lcmF0ZSBhIHF1aWNrICJzbmFwc2hvdCIgb2YgcGVyZm9ybWFuY2UgZm9yIGEKKyMgcGFpciBvZiBub2Rlcy4gQXQgZmlyc3QsIGl0IHdpbGwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHRlc3RzOgorIworIyBUQ1AgU3RyZWFtIHRlc3Qgd2l0aCA1NktCIHNvY2tldCBidWZmZXJzIGFuZCA0S0Igc2VuZHMKKyMgVENQIFN0cmVhbSB0ZXN0IHdpdGggMzJLQiBzb2NrZXQgYnVmZmVycyBhbmQgNEtCIHNlbmRzCisjIFRDUCBSZXF1ZXN0L1Jlc3BvbnNlIHRlc3Qgd2l0aCAxIGJ5dGUgcmVxdWVzdHMgYW5kIDEgYnl0ZSByZXNwb25zZXMKKyMgVURQIFJlcXVlc3QvUmVzcG9uc2UgdGVzdCB3aXRoIDEgYnl0ZSByZXF1ZXN0cyBhbmQgMSBieXRlIHJlc3BvbnNlcworIyBVRFAgUmVxdWVzdC9SZXNwb25zZSB0ZXN0IHdpdGggNTE2IGJ5dGUgcmVxdWVzdHMgYW5kIDQgYnl0ZSByZXNwb25zZXMKKyMgVURQIFN0cmVhbSB0ZXN0IHdpdGggMzJLQiBzb2NrZXQgYnVmZmVycyBhbmQgNEtCIHNlbmRzCisjIFVEUCBTdHJlYW0gdGVzdCB3aXRoIDMyS0Igc29ja2V0IGJ1ZmZlcnMgYW5kIDFLQiBzZW5kcworIworIyBBbGwgdGVzdHMgd2lsbCBydW4gZm9yIHNpeHR5IHNlY29uZHMuIENvbmZpZGVuY2UgaW50ZXJ2YWxzIGFyZSB1c2VkCisjIHRvIGluc3VyZSB0aGUgcmVwZWF0YWJpbGl0eSBvZiB0aGUgdGVzdC4gVGhpcyBtZWFucyB0aGF0IHRoZSBzb29uZXN0CisjIHRoZSBzY3JpcHQgd2lsbCBiZSBmaW5pc2hlZCBpcyAyMSBtaW51dGVzLgorIworIyBUaGlzIHNjcmlwdCB0YWtlcyB0d28gcGFyYW1ldGVycy4gVGhlIGZpcnN0IHBhcm0gaXMgdGhlIG5hbWUgb2YgdGhlCisjIHJlbW90ZSBob3N0LiBJdCBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlci4gVGhlIHNlY29uZCB3aWxsIGVpdGhlcgorIyBlbmFibGUgb3IgZGlzYWJsZSBDUFUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLiBJdCBpcyBhbiBvcHRpb25hbAorIyBwYXJhbWV0ZXIgd2hpY2ggZGVmYXVsdHMgdG8gbm8gQ1BVIHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cy4KKyMKKyMgdXNhZ2U6IHNuYXBzaG90X3NjcmlwdCBob3N0bmFtZSBbQ1BVXQorIworIyBtb2QgNi8yOS85NSAtIGVjaG8gcHJvZ3Jlc3MgaW5mb3JtYXRpb24gdG8gc3RkZXJyIHNvIHRoYXQgd2UgY2FuIAorIyAgICAgICAgICAgICAgIHNlZSBmb3J3YXJkIHByb2dyZXNzIGV2ZW4gd2hlbiB0aGUgcmVzdWx0cyBhcmUgCisjICAgICAgICAgICAgICAgcmUtZGlyZWN0ZWQgdG8gYSBmaWxlCisjCisjIG1vZCA1LzI3Lzk2IC0gc3dpdGNoIGZyb20gTkVUSE9NRSB0byBORVRQRVJGIGFuZCB0YWtlIHRoZSB1c2VyJ3MgdmFsdWUKKyMgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHNldAorIworIyBtb2QgOC8xMi85NiAtIGZpeCB0aGUgZGVmYXVsdCBuZXRwZXJmIGNvbW1hbmQgdmFyaWFibGUgc28gaXQgZmluZHMgdGhlCisjICAgICAgICAgICAgICAgZXhlY3V0YWJsZSBhbmQgbm90IHRoZSBkaXJlY3RvcnkuLi4KKyMKKyMgRmlyc3QsIGxldCB1cyBzZXQtdXAgc29tZSBvZiB0aGUgZGVmYXVsdHMKKyMKKyMgd2hlcmUgaXMgbmV0cGVyZiBpbnN0YWxsZWQsIHRoZXJlIGFyZSBhIGZldyBwb3NzaWJsZSBwbGFjZXM6CisKK05FVFBFUkZfQ01EPSR7TkVUUEVSRl9DTUQ6PS9vcHQvbmV0cGVyZi9uZXRwZXJmfQorCisKKyMgdGhlcmUgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiB0d28gcGFybXMgcGFzc2VkCisKK2lmIFsgJCMgLWd0IDIgXTsgdGhlbgorICBlY2hvICJ0cnkgYWdhaW4sIGNvcnJlY3RseSAtPiBzbmFwc2hvdF9zY3JpcHQgaG9zdG5hbWUgW0NQVV0iCisgIGV4aXQgMQorZmkKKworaWYgWyAkIyAtZXEgMCBdOyB0aGVuCisgIGVjaG8gInRyeSBhZ2FpbiwgY29ycmVjdGx5IC0+IHNuYXBzaG90X3NjcmlwdCBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCisjIGlmIHRoZXJlIGFyZSB0d28gcGFybXMsIHBhcm0gb25lIGl0IHRoZSBob3N0bmFtZSBhbmQgcGFybSB0d28gd2lsbAorIyBiZSBhIENQVSBpbmRpY2F0b3IuIGFjdHVhbGwsIGFueXRoaW5nIGFzIGEgc2Vjb25kIHBhcm0gd2lsbCBjYXVzZQorIyB0aGUgQ1BVIHRvIGJlIG1lYXN1cmVkLCBidXQgd2Ugd2lsbCAiYWR2ZXJ0aXNlIiBpdCBzaG91bGQgYmUgIkNQVSIKKworaWYgWyAkIyAtZXEgMiBdOyB0aGVuCisgIFJFTV9IT1NUPSQxCisgIExPQ19DUFU9Ii1jIgorICBSRU1fQ1BVPSItQyIKK2ZpCisKK2lmIFsgJCMgLWVxIDEgXTsgdGhlbgorICBSRU1fSE9TVD0kMQorZmkKKworIyBhdCB3aGF0IHBvcnQgd2lsbCBuZXRzZXJ2ZXIgYmUgd2FpdGluZz8gSWYgeW91IGRlY2lkZSB0byBydW4KKyMgbmV0c2VydmVyIGF0IGEgZGlmZmVybmV0IHBvcnQgdGhhbiB0aGUgZGVmYXVsdCBvZiAxMjg2NSwgdGhlbiBzZXQKKyMgdGhlIHZhbHVlIG9mIFBPUlQgYXByb3ByaWF0ZWx5CisjTkVUUEVSRl9QT1JUPSItcCBzb21lX290aGVyX3BvcnRudW0iCitORVRQRVJGX1BPUlQ9JHtORVRQRVJGX1BPUlQ6PSIifQorCisjIEhvdyBhY2N1cmF0ZSB3ZSB3YW50IHRoZSBlc3RpbWF0ZSBvZiBwZXJmb3JtYW5jZTogCisjICAgICAgbWF4aW11bSBhbmQgbWluaW11bSB0ZXN0IGl0ZXJhdGlvbnMgKC1pKQorIyAgICAgIGNvbmZpZGVuY2UgbGV2ZWwgKDk5IG9yIDk1KSBhbmQgaW50ZXJ2YWwgKHBlcmNlbnQpCitTVEFUU19TVFVGRj0iLWkgMTAsMyAtSSA5OSw1IgorCisjIGxlbmd0aCBpbiB0aW1lIG9mIHRoZSB0ZXN0IC0gc2hvdWxkIGJlIDYwIHNlY29uZHMKK05FVFBFUkZfVElNRT0ke05FVFBFUkZfVElNRTo9NjB9CisKKyMgd2hlcmUgaXMgdGhlIGJpdGJ1Y2tldD8KK0JJVEJVQ0tFVD0iL2Rldi9udWxsIgorCisjIGFubm91bmNlIHN0YXJ0IG9mIHRlc3QKK2VjaG8gTmV0cGVyZiBzbmFwc2hvdCBzY3JpcHQgc3RhcnRlZCBhdCBgZGF0ZWAgPiYyCisKKyMgSWYgd2UgYXJlIG1lYXN1cmluZyBDUFUgdXRpbGl6YXRpb24sIHRoZW4gd2UgY2FuIHNhdmUgYmVhdWNvdXAgdGltZQorIyBieSBzYXZpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIENQVSBjYWxpYnJhdGlvbiBhbmQgcGFzc2luZyB0aGVtIGluCisjIGR1cmluZyB0aGUgcmVhbCB0ZXN0cy4gU28sIHdlIGV4ZWN1dGUgdGhlIG5ldyBDUFUgInRlc3RzIiBvZiBuZXRwZXJmCisjIGFuZCBwdXQgdGhlIHZhbHVlcyBpbnRvIHNoZWxsIHZhcnMuCisKK2Nhc2UgJExPQ19DUFUgaW4KK1wtYykgTE9DX1JBVEU9YCRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC10IExPQ19DUFVgOzsKKyopIExPQ19SQVRFPSIiCitlc2FjCisKK2Nhc2UgJFJFTV9DUFUgaW4KK1wtQykgUkVNX1JBVEU9YCRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC10IFJFTV9DUFUgLUggJFJFTV9IT1NUYDs7CisqKSBSRU1fUkFURT0iIgorZXNhYworCisjIFdlIHdpbGwgcGVyZm9ybSB0aHJlZSB0d2VudHkgc2Vjb25kIHdhcm0tdXAgdGVzdHMgYXQgdGhpcyBwb2ludCwgYnV0CisjIHdlIHdpbGwgbm90IGRpc3BsYXkgdGhlIHJlc3VsdHMgb2YgdGhvc2UgdGVzdHMuIFRoaXMgaXMgdW5saWtlbHkgdG8KKyMgbWFrZSBhbnkgZGlmZmVyZW5jZSBpbiB0aGUgcmVzdWx0cyBleGNlcHQgcmlnaHQgYWZ0ZXIgYSBzeXN0ZW0KKyMgcmVib290LCBidXQgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSByYXRoZXIgImdlbmVyYWwuIiBXZSB3aWxsIGRvIGEKKyMgVENQIHN0cmVhbSBhbmQgYSBUQ1AgcmVxL3Jlc3AgdGVzdAorCitXQVJNX1RJTUU9IjEwIgorCiskTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtbCAkV0FSTV9USU1FIC10IFRDUF9TVFJFQU0gLUggJFJFTV9IT1NUIC0tIFwKKyAgLXMgMzI3NjggLVMgMzI3NjggLW0gNDA5NiA+ICR7QklUQlVDS0VUfQorJE5FVFBFUkZfQ01EICRORVRQRVJGX1BPUlQgLWwgJFdBUk1fVElNRSAtdCBUQ1BfU1RSRUFNIC1IICRSRU1fSE9TVCAtLSBcCisgIC1zIDMyNzY4IC1TIDMyNzY4IC1tIDk2ID4gJHtCSVRCVUNLRVR9CiskTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtbCAkV0FSTV9USU1FIC10IFRDUF9SUiAtSCAkUkVNX0hPU1QgLS0gXAorICAtciAxLDEgPiAke0JJVEJVQ0tFVH0KKworIyBUaGUgd2FybS11cHMgYXJlIGNvbXBsZXRlLCBzbyBwZXJmb3JtIHRoZSByZWFsIHRlc3RzIGZpcnN0LCB0aGUKKyMgc3RyZWFtIHRlc3RzLCB0aGVuIHRoZSByZXF1ZXN0L3Jlc3BvbnNlCisKK2VjaG8gU3RhcnRpbmcgNTZ4NCAgVENQX1NUUkVBTSB0ZXN0cyBhdCBgZGF0ZWAgPiYyCisKKyMgYSA1Nng0IFRDUF9TVFJFQU0gdGVzdAorZWNobworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gVGVzdGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lOgorZWNobyAkTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtdCBUQ1BfU1RSRUFNIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUIFwKKyAgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS0gXAorICAtcyA1NzM0NCAtUyA1NzM0NCAtbSA0MDk2CitlY2hvCiskTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtdCBUQ1BfU1RSRUFNIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUIFwKKyAgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS0gXAorICAtcyA1NzM0NCAtUyA1NzM0NCAtbSA0MDk2CitlY2hvCitlY2hvCisjIGEgMzJ4NCBUQ1BfU1RSRUFNIHRlc3QKK2VjaG8gU3RhcnRpbmcgMzJ4NCAgVENQX1NUUkVBTSB0ZXN0cyBhdCBgZGF0ZWAgPiYyCitlY2hvCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyBUZXN0aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmU6CitlY2hvICRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC10IFRDUF9TVFJFQU0gLWwgJE5FVFBFUkZfVElNRSAtSCAkUkVNX0hPU1QgXAorICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tIFwKKyAtcyAzMjc2OCAtUyAzMjc2OCAtbSA0MDk2IAorZWNobworJE5FVFBFUkZfQ01EICRORVRQRVJGX1BPUlQgLXQgVENQX1NUUkVBTSAtbCAkTkVUUEVSRl9USU1FIC1IICRSRU1fSE9TVCBcCisgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS0gXAorIC1zIDMyNzY4IC1TIDMyNzY4IC1tIDQwOTYgCitlY2hvCitlY2hvCisjIGEgc2luZ2xlLWJ5dGUgVENQX1JSCitlY2hvIFN0YXJ0aW5nIDEsMSAgIFRDUF9SUiAgICAgdGVzdHMgYXQgYGRhdGVgID4mMgorZWNobworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VjaG8gVGVzdGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBsaW5lOgorZWNobyAkTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtdCBUQ1BfUlIgLWwgJE5FVFBFUkZfVElNRSAtSCAkUkVNX0hPU1QgXAorICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tIFwKKyAtciAxLDEKK2VjaG8KKyRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC10IFRDUF9SUiAtbCAkTkVUUEVSRl9USU1FIC1IICRSRU1fSE9TVCBcCisgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS0gXAorIC1yIDEsMQorZWNobworZWNobworZWNobyBTdGFydGluZyAxLDEgICBVRFBfUlIgICAgIHRlc3RzIGF0IGBkYXRlYCA+JjIKK2VjaG8KK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvIFRlc3Rpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToKKyMgYSBzaW5nbGUtYnl0ZSBVRFBfUlIKK2VjaG8gJE5FVFBFUkZfQ01EICRORVRQRVJGX1BPUlQgLXQgVURQX1JSIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUIFwKKyAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFICRTVEFUU19TVFVGRiAtLSBcCisgLXIgMSwxCitlY2hvCiskTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtdCBVRFBfUlIgLWwgJE5FVFBFUkZfVElNRSAtSCAkUkVNX0hPU1QgXAorICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tIFwKKyAtciAxLDEKK2VjaG8KK2VjaG8KKyMgYSBVRFBfUlIgdGVzdCBtdWNoIGxpa2UgdGZ0cAorZWNobyBTdGFydGluZyA1MTIsNCBVRFBfUlIgICAgIHRlc3RzIGF0IGBkYXRlYCA+JjIKK2VjaG8KK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvIFRlc3Rpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToKK2VjaG8gJE5FVFBFUkZfQ01EICRORVRQRVJGX1BPUlQgLXQgVURQX1JSIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUIFwKKyAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFICRTVEFUU19TVFVGRiAtLSBcCisgLXIgNTE2LDQKK2VjaG8KKyRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC10IFVEUF9SUiAtbCAkTkVUUEVSRl9USU1FIC1IICRSRU1fSE9TVCBcCisgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS0gLXIgNTE2LDQKKyMgYSAzMng0IFVEUF9TVFJFQU0gdGVzdAorZWNobyBTdGFydGluZyAzMng0ICBVRFBfU1RSRUFNIHRlc3RzIGF0IGBkYXRlYCA+JjIKK2VjaG8KK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvIFRlc3Rpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToKK2VjaG8gJE5FVFBFUkZfQ01EICRORVRQRVJGX1BPUlQgLXQgVURQX1NUUkVBTSAtbCAkTkVUUEVSRl9USU1FIC1IICRSRU1fSE9TVCBcCisgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS0gXAorIC1zIDMyNzY4IC1TIDMyNzY4IC1tIDQwOTYKK2VjaG8KKyRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC10IFVEUF9TVFJFQU0gLWwgJE5FVFBFUkZfVElNRSAtSCAkUkVNX0hPU1QgXAorICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tIFwKKyAtcyAzMjc2OCAtUyAzMjc2OCAtbSA0MDk2CitlY2hvCitlY2hvCisjIGEgMzJ4MSBVRFBfU1RSRUFNIHRlc3QKK2VjaG8gU3RhcnRpbmcgMzJ4MSAgVURQX1NUUkVBTSB0ZXN0cyBhdCBgZGF0ZWAgPiYyCitlY2hvCitlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZWNobyBUZXN0aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmU6CitlY2hvICRORVRQRVJGX0NNRCAkTkVUUEVSRl9QT1JUIC10IFVEUF9TVFJFQU0gLWwgJE5FVFBFUkZfVElNRSAtSCAkUkVNX0hPU1QgXAorICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tIFwKKyAtcyAzMjc2OCAtUyAzMjc2OCAtbSAxMDI0CitlY2hvCiskTkVUUEVSRl9DTUQgJE5FVFBFUkZfUE9SVCAtdCBVRFBfU1RSRUFNIC1sICRORVRQRVJGX1RJTUUgLUggJFJFTV9IT1NUIFwKKyAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFICRTVEFUU19TVFVGRiAtLSBcCisgLXMgMzI3NjggLVMgMzI3NjggLW0gMTAyNAorZWNobworZWNobworCisjIGFuZCB0aGF0J3MgdGhhdAorZWNobyBUZXN0cyBjb21wbGV0ZWQgYXQgYGRhdGVgID4mMgorCitlY2hvCitlY2hvIElmIHlvdSB3aXNoIHRvIHN1Ym1pdCB0aGVzZSByZXN1bHRzIHRvIHRoZSBuZXRwZXJmIGRhdGFiYXNlIGF0CitlY2hvIGh0dHA6Ly93d3cuY3VwLmhwLmNvbS9uZXRwZXJmL05ldHBlcmZQYWdlLmh0bWwsIHBsZWFzZSBzdWJtaXQgZWFjaAorZWNobyBkYXRhcG9pbnQgaW5kaXZpZHVhbGx5LiBJbmRpdmlkdWFsIGRhdGFwb2ludHMgYXJlIHNlcGFyYXRlZCBieQorZWNobyBsaW5lcyBvZiBkYXNoZXMuIApkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvdGNwX3JhbmdlX3NjcmlwdCBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3RjcF9yYW5nZV9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjRlYzE0MAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3RjcF9yYW5nZV9zY3JpcHQKQEAgLTAsMCArMSwxMTMgQEAKKyMhL2Jpbi9zaAorIworIyBzdHJlYW1fcmFuZ2UKKyMKKyMgZ2VuZXJhdGUgYSB3aG9sZSBsb3Qgb2YgbnVtYmVycyBmcm9tIG5ldHBlcmYgdG8gc2VlIHRoZSBlZmZlY3RzCisjIG9mIHNlbmQgc2l6ZSBvbiB0aHJ1cHV0CisjCisKKyMKKyMgdXNhZ2UgOiB0Y3Bfc3RyZWFtX3JhbmdlIGhvc3RuYW1lIFtDUFVdCisjCisKK2lmIFsgJCMgLWd0IDIgXTsgdGhlbgorCWVjaG8gInRyeSBhZ2FpbiwgY29ycmVjdGx5IC0+IHRjcF9zdHJlYW1fcmFuZ2UgaG9zdG5hbWUgW0NQVV0iCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKyAgZWNobyAidHJ5IGFnYWluLCBjb3JyZWN0bHkgLT4gdGNwX3N0cmVhbV9yYW5nZSBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCisjIGlmIHRoZXJlIGFyZSB0d28gcGFybXMsIHBhcm0gb25lIGl0IHRoZSBob3N0bmFtZSBhbmQgcGFybSB0d28gd2lsbAorIyBiZSBhIENQVSBpbmRpY2F0b3IuIGFjdHVhbGx5LCBhbnl0aGluZyBhcyBhIHNlY29uZCBwYXJtIHdpbGwgY2F1c2UKKyMgdGhlIENQVSB0byBiZSBtZWFzdXJlZCwgYnV0IHdlIHdpbGwgImFkdmVydGlzZSIgaXQgc2hvdWxkIGJlICJDUFUiCisKK2lmIFsgJCMgLWVxIDIgXTsgdGhlbgorICBSRU1fSE9TVD0kMQorICBMT0NfQ1BVPSItYyIKKyAgUkVNX0NQVT0iLUMiCitmaQorCitpZiBbICQjIC1lcSAxIF07IHRoZW4KKyAgUkVNX0hPU1Q9JDEKK2ZpCisKKyMgYXQgd2hhdCBwb3J0IHdpbGwgbmV0c2VydmVyIGJlIHdhaXRpbmc/IElmIHlvdSBkZWNpZGUgdG8gcnVuCisjIG5ldHNlcnZlciBhdCBhIGRpZmZlcm5ldCBwb3J0IHRoYW4gdGhlIGRlZmF1bHQgb2YgMTI4NjUsIHRoZW4gc2V0CisjIHRoZSB2YWx1ZSBvZiBQT1JUIGFwcm9wcmlhdGVseQorI1BPUlQ9Ii1wIHNvbWVfb3RoZXJfcG9ydG51bSIKK1BPUlQ9IiIKKworIyB3aGVyZSBpcyBuZXRwZXJmLCBhbmQgYXJlIHRoZXJlIGFueSAiY29uc3RhbnQiIG9wdGlvbnMgc3VjaCBhcyAKKyMgdGhlIG5ldHNlcnZlciBwb3J0IG51bWJlcgorI05FVEhPTUU9L3Vzci9ldGMvbmV0X3BlcmYKK05FVEhPTUU9Ii4iCitORVRQRVJGPSRORVRIT01FL25ldHBlcmYgJFBPUlQKKworIyBIb3cgYWNjdXJhdGUgd2Ugd2FudCB0aGUgZXN0aW1hdGUgb2YgcGVyZm9ybWFuY2U6IAorIyAgICAgIG1heGltdW0gYW5kIG1pbmltdW0gdGVzdCBpdGVyYXRpb25zICgtaSkKKyMgICAgICBjb25maWRlbmNlIGxldmVsICg5OSBvciA5NSkgYW5kIGludGVydmFsIChwZXJjZW50KQorU1RBVFNfU1RVRkY9Ii1pIDEwLDIgLUkgOTksMyIKKworIworIyBzb21lIHN0dWZmIGZvciB0aGUgYXJpdGhtZXRpYyAKKyMKKyMgd2Ugc3RhcnQgYXQgc3RhcnQsIGFuZCB0aGVuIG11bHRpcGx5IGJ5IE1VTFQgYW5kIGFkZCBBREQuIGJ5IGNoYW5naW5nCisjIHRoZXNlIG51bWJlcnMsIHdlIGNhbiBkb3VibGUgZWFjaCB0aW1lLCBvciBpbmNyZWFzZSBieSBhIGZpeGVkCisjIGFtb3VudCwgb3IgZ28gdXAgYnkgNHgsIHdoYXRldmVyIHdlIGxpa2UuLi4KKyMKK1NUQVJUPTEKKworRU5EPTY1NTM2CisKK01VTFQ9NAorCitBREQ9MAorCisjIElmIHdlIGFyZSBtZWFzdXJpbmcgQ1BVIHV0aWxpemF0aW9uLCB0aGVuIHdlIGNhbiBzYXZlIGJlYXVjb3VwCisjIHRpbWUgYnkgc2F2aW5nIHRoZSByZXN1bHRzIG9mIHRoZSBDUFUgY2FsaWJyYXRpb24gYW5kIHBhc3NpbmcKKyMgdGhlbSBpbiBkdXJpbmcgdGhlIHJlYWwgdGVzdHMuIFNvLCB3ZSBleGVjdXRlIHRoZSBuZXcgQ1BVICJ0ZXN0cyIKKyMgb2YgbmV0cGVyZiBhbmQgcHV0IHRoZSB2YWx1ZXMgaW50byBzaGVsbCB2YXJzLgorY2FzZSAkTE9DX0NQVSBpbgorXC1jKSBMT0NfUkFURT1gJE5FVFBFUkYgLXQgTE9DX0NQVWA7OworKikgTE9DX1JBVEU9IiIKK2VzYWMKKworY2FzZSAkUkVNX0NQVSBpbgorXC1DKSBSRU1fUkFURT1gJE5FVFBFUkYgLXQgUkVNX0NQVSAtSCAkUkVNX0hPU1RgOzsKKyopIFJFTV9SQVRFPSIiCitlc2FjCisKK1RJTUU9IjYwIgorCisjCisjIHRoZSBtYXhpbXVtIHNvY2tldCBidWZmZXIgc2l6ZSBpcyBzeXN0ZW0gZGVwZW5kZW50LiBmb3IgdGhlCisjICJjYW5ub25pY2FsIiB0ZXN0cyB3ZSB1c2UgMzJLQiwgYnV0IHRoaXMgY2FuIGJlIGFsdGVyZWQKKyMKK1NPQ0tFVF9TSVpFPSItcyAzMjc2OCAtUyAzMjc2OCIKKworTUVTU0FHRT0kU1RBUlQKK3doaWxlIFsgJE1FU1NBR0UgLWxlICRFTkQgXTsgZG8KKyAgZWNobworICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBlY2hvIFRlc3Rpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToKKyAgZWNobyAgJE5FVFBFUkYgLWwgJFRJTUUgLUggJFJFTV9IT1NUIC10IFRDUF9TVFJFQU1cCisgICAgICAgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tXAorICAgICAgICAtbSAkTUVTU0FHRSAkU09DS0VUX1NJWkUgCisgIGVjaG8KKyAgJE5FVFBFUkYgLWwgJFRJTUUgLUggJFJFTV9IT1NUIC10IFRDUF9TVFJFQU1cCisgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tXAorICAtbSAkTUVTU0FHRSAkU09DS0VUX1NJWkUKKworICBNRVNTQUdFPWBleHByICRNRVNTQUdFICsgJEFERGAKKyAgTUVTU0FHRT1gZXhwciAkTUVTU0FHRSBcKiAkTVVMVGAKKworZG9uZQorZWNobworZWNobyBJZiB5b3Ugd2lzaCB0byBzdWJtaXQgdGhlc2UgcmVzdWx0cyB0byB0aGUgbmV0cGVyZiBkYXRhYmFzZSBhdAorZWNobyBodHRwOi8vd3d3LmN1cC5ocC5jb20vbmV0cGVyZi9OZXRwZXJmUGFnZS5odG1sLCBwbGVhc2Ugc3VibWl0IGVhY2gKK2VjaG8gZGF0YXBvaW50IGluZGl2aWR1YWxseS4gSW5kaXZpZHVhbCBkYXRhcG9pbnRzIGFyZSBzZXBhcmF0ZWQgYnkKK2VjaG8gbGluZXMgb2YgZGFzaGVzLiAKKwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvdGNwX3JyX3NjcmlwdCBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3RjcF9ycl9zY3JpcHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWIxMmE2ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3RjcF9ycl9zY3JpcHQKQEAgLTAsMCArMSwxMDcgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGlzIGFuIGV4YW1wbGUgc2NyaXB0IGZvciB1c2luZyBuZXRwZXJmLiBGZWVsIGZyZWUgdG8gbW9kaWZ5IGl0IAorIyBhcyBuZWNlc3NhcnksIGJ1dCBJIHdvdWxkIHN1Z2dlc3QgdGhhdCB5b3UgY29weSB0aGlzIG9uZSBmaXJzdC4KKyMKKyMgCisjIFRoaXMgdmVyc2lvbiBoYXMgYmVlbiBtb2RpZmllZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgY29uZmlkZW5jZQorIyBpbnRlcnZhbCBzdXBwb3J0IGluIHJldmlzaW9uIDIuMCBvZiBuZXRwZXJmLiBpdCBoYXMgYWxzbyBiZWVuIGFsdGVyZWQKKyMgdG8gbWFrZSBzdWJtaXR0aW5nIGl0cyByZXN1dGxzIHRvIHRoZSBuZXRwZXJmIGRhdGFiYXNlIGVhc2llcgorIyByYWogMTEvOTQKKyMKKyMgdXNhZ2U6IHRjcF9ycl9zY3JpcHQgaG9zdG5hbWUgW0NQVV0KKyMKKworaWYgWyAkIyAtZ3QgMiBdOyB0aGVuCisgIGVjaG8gInRyeSBhZ2FpbiwgY29ycmVjdGx5IC0+IHRjcF9ycl9zY3JpcHQgaG9zdG5hbWUgW0NQVV0iCisgIGV4aXQgMQorZmkKKworaWYgWyAkIyAtZXEgMCBdOyB0aGVuCisgIGVjaG8gInRyeSBhZ2FpbiwgY29ycmVjdGx5IC0+IHRjcF9ycl9zY3JpcHQgaG9zdG5hbWUgW0NQVV0iCisgIGV4aXQgMQorZmkKKworIyB3aGVyZSB0aGUgcHJvZ3JhbXMgYXJlCisjTkVUSE9NRT0vdXNyL2xvY2FsL25ldHBlcmYKKyNORVRIT01FPSIvb3B0L25ldHBlcmYiCitORVRIT01FPS4KKworIyBhdCB3aGF0IHBvcnQgd2lsbCBuZXRzZXJ2ZXIgYmUgd2FpdGluZz8gSWYgeW91IGRlY2lkZSB0byBydW4KKyMgbmV0c2VydmVyIGF0IGEgZGlmZmVybmV0IHBvcnQgdGhhbiB0aGUgZGVmYXVsdCBvZiAxMjg2NSwgdGhlbiBzZXQKKyMgdGhlIHZhbHVlIG9mIFBPUlQgYXByb3ByaWF0ZWx5CisjUE9SVD0iLXAgc29tZV9vdGhlcl9wb3J0bnVtIgorUE9SVD0iIgorCisjIFRoZSB0ZXN0IGxlbmd0aCBpbiBzZWNvbmRzCitURVNUX1RJTUU9NjAKKworIyBIb3cgYWNjdXJhdGUgd2Ugd2FudCB0aGUgZXN0aW1hdGUgb2YgcGVyZm9ybWFuY2U6IAorIyAgICAgIG1heGltdW0gYW5kIG1pbmltdW0gdGVzdCBpdGVyYXRpb25zICgtaSkKKyMgICAgICBjb25maWRlbmNlIGxldmVsICg5OSBvciA5NSkgYW5kIGludGVydmFsIChwZXJjZW50KQorU1RBVFNfU1RVRkY9Ii1pIDEwLDMgLUkgOTksNSIKKworIyBUaGUgc29ja2V0IHNpemVzIHRoYXQgd2Ugd2lsbCBiZSB0ZXN0aW5nIC0gdXNpbmcgemVybyB3aWxsIGxldCBpdCAKKyMgYmUgdGhlIHN5c3RlbSBkZWZhdWx0LgorU09DS0VUX1NJWkVTPSIwIgorCisjIFRoZSByZXF1ZXN0LHJlc3BvbnNlIHNpemVzIHRoYXQgd2Ugd2lsbCBiZSB1c2luZy4gVGhlIG5ldHBlcmYKKyMgY29tbWFuZCBwYXJzZXIgd2lsbCB0cmVhdCAiMSIgdGhlIHNhbWUgYXMgIjEsMSIgLSBJIHVzZSAxLDEgdG8KKyMgcmVtZW1iZXIgdGhhdCBpdCBpcyAicmVxdWVzdCxyZXNwb25zZSIKK1JSX1NJWkVTPSIxLDEgNjQsNjQgMTAwLDIwMCAxMjgsODE5MiIKKworIyBpZiB0aGVyZSBhcmUgdHdvIHBhcm1zLCBwYXJtIG9uZSBpdCB0aGUgaG9zdG5hbWUgYW5kIHBhcm0gdHdvIHdpbGwKKyMgYmUgYSBDUFUgaW5kaWNhdG9yLiBhY3R1YWxseSwgYW55dGhpbmcgYXMgYSBzZWNvbmQgcGFybSB3aWxsIGNhdXNlCisjIHRoZSBDUFUgdG8gYmUgbWVhc3VyZWQsIGJ1dCB3ZSB3aWxsICJhZHZlcnRpc2UiIGl0IHNob3VsZCBiZSAiQ1BVIgorCitpZiBbICQjIC1lcSAyIF07IHRoZW4KKyAgUkVNX0hPU1Q9JDEKKyAgTE9DX0NQVT0iLWMiCisgIFJFTV9DUFU9Ii1DIgorZmkKKworaWYgWyAkIyAtZXEgMSBdOyB0aGVuCisgIFJFTV9IT1NUPSQxCitmaQorCisjIElmIHdlIGFyZSBtZWFzdXJpbmcgQ1BVIHV0aWxpemF0aW9uLCB0aGVuIHdlIGNhbiBzYXZlIGJlYXVjb3VwCisjIHRpbWUgYnkgc2F2aW5nIHRoZSByZXN1bHRzIG9mIHRoZSBDUFUgY2FsaWJyYXRpb24gYW5kIHBhc3NpbmcKKyMgdGhlbSBpbiBkdXJpbmcgdGhlIHJlYWwgdGVzdHMuIFNvLCB3ZSBleGVjdXRlIHRoZSBuZXcgQ1BVICJ0ZXN0cyIKKyMgb2YgbmV0cGVyZiBhbmQgcHV0IHRoZSB2YWx1ZXMgaW50byBzaGVsbCB2YXJzLgorY2FzZSAkTE9DX0NQVSBpbgorXC1jKSBMT0NfUkFURT1gJE5FVEhPTUUvbmV0cGVyZiAkUE9SVCAtdCBMT0NfQ1BVYDs7CisqKSBMT0NfUkFURT0iIgorZXNhYworCitjYXNlICRSRU1fQ1BVIGluCitcLUMpIFJFTV9SQVRFPWAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC10IFJFTV9DUFUgLUggJFJFTV9IT1NUYDs7CisqKSBSRU1fUkFURT0iIgorZXNhYworCisjIFRoaXMgZGlzYWJsZXMgaGVhZGVyIGRpc3BsYXkKK05PX0hEUj0iLVAgMCIKKworZm9yIFNPQ0tFVF9TSVpFIGluICRTT0NLRVRfU0laRVMKKyBkbworICBmb3IgUlJfU0laRSBpbiAkUlJfU0laRVMKKyAgIGRvCisgICBlY2hvCisgICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZWNobyBUZXN0aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmU6CisgICAjIHdlIGVjaG8gdGhlIGNvbW1hbmQgbGluZSBmb3IgY3V0IGFuZCBwYXN0ZSB0byB0aCBkYXRhYmFzZQorICAgZWNobyAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC1sICRURVNUX1RJTUUgLUggJFJFTV9IT1NUIC10IFRDUF9SUiBcCisgICAgICAgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tXAorICAgICAgICAtciAkUlJfU0laRSAtcyAkU09DS0VUX1NJWkUgLVMgJFNPQ0tFVF9TSVpFCisgICBlY2hvCisgICAjIHNpbmNlIHdlIGhhdmUgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgc3R1ZmYsIHdlIGRvIG5vdAorICAgIyBuZWVkIHRvIHJlcGVhdCBhIHRlc3QgbXVsdGlwbGUgdGltZXMgZnJvbSB0aGUgc2hlbGwKKyAgICRORVRIT01FL25ldHBlcmYgJFBPUlQgLWwgJFRFU1RfVElNRSAtSCAkUkVNX0hPU1QgLXQgVENQX1JSIFwKKyAgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgJFNUQVRTX1NUVUZGIC0tXAorICAgLXIgJFJSX1NJWkUgLXMgJFNPQ0tFVF9TSVpFIC1TICRTT0NLRVRfU0laRQorIGRvbmUKK2RvbmUKK2VjaG8KK2VjaG8gSWYgeW91IHdpc2ggdG8gc3VibWl0IHRoZXNlIHJlc3VsdHMgdG8gdGhlIG5ldHBlcmYgZGF0YWJhc2UgYXQKK2VjaG8gaHR0cDovL3d3dy5jdXAuaHAuY29tL25ldHBlcmYvTmV0cGVyZlBhZ2UuaHRtbCwgcGxlYXNlIHN1Ym1pdCBlYWNoCitlY2hvIGRhdGFwb2ludCBpbmRpdmlkdWFsbHkuIEluZGl2aWR1YWwgZGF0YXBvaW50cyBhcmUgc2VwYXJhdGVkIGJ5CitlY2hvIGxpbmVzIG9mIGRhc2hlcy4gCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy90Y3Bfc3RyZWFtX3NjcmlwdCBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3RjcF9zdHJlYW1fc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MjhjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy90Y3Bfc3RyZWFtX3NjcmlwdApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBzY3JpcHQgZm9yIHVzaW5nIG5ldHBlcmYuIEZlZWwgZnJlZSB0byBtb2RpZnkgaXQgCisjIGFzIG5lY2Vzc2FyeSwgYnV0IEkgd291bGQgc3VnZ2VzdCB0aGF0IHlvdSBjb3B5IHRoaXMgb25lIGZpcnN0LgorIyAKKyMgVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBjb25maWRlbmNlCisjIGludGVydmFsIHN1cHBvcnQgaW4gcmV2aXNpb24gMi4wIG9mIG5ldHBlcmYuIGl0IGhhcyBhbHNvIGJlZW4gYWx0ZXJlZAorIyB0byBtYWtlIHN1Ym1pdHRpbmcgaXRzIHJlc3V0bHMgdG8gdGhlIG5ldHBlcmYgZGF0YWJhc2UgZWFzaWVyCisjIHJhaiAxMS85NAorIworIyB1c2FnZTogdGNwX3N0cmVhbV9zY3JpcHQgaG9zdG5hbWUgW0NQVV0KKyMKKworaWYgWyAkIyAtZ3QgMiBdOyB0aGVuCisgIGVjaG8gInRyeSBhZ2FpbiwgY29ycmVjdGx5IC0+IHRjcF9zdHJlYW1fc2NyaXB0IGhvc3RuYW1lIFtDUFVdIgorICBleGl0IDEKK2ZpCisKK2lmIFsgJCMgLWVxIDAgXTsgdGhlbgorICBlY2hvICJ0cnkgYWdhaW4sIGNvcnJlY3RseSAtPiB0Y3Bfc3RyZWFtX3NjcmlwdCBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCisjIHdoZXJlIHRoZSBwcm9ncmFtcyBhcmUKKyNORVRIT01FPS91c3IvbG9jYWwvbmV0cGVyZgorI05FVEhPTUU9Ii9vcHQvbmV0cGVyZiIKK05FVEhPTUU9LgorCisjIGF0IHdoYXQgcG9ydCB3aWxsIG5ldHNlcnZlciBiZSB3YWl0aW5nPyBJZiB5b3UgZGVjaWRlIHRvIHJ1bgorIyBuZXRzZXJ2ZXIgYXQgYSBkaWZmZXJlbnQgcG9ydCB0aGFuIHRoZSBkZWZhdWx0IG9mIDEyODY1LCB0aGVuIHNldAorIyB0aGUgdmFsdWUgb2YgUE9SVCBhcHJvcHJpYXRlbHkKKyNQT1JUPSItcCBzb21lX290aGVyX3BvcnRudW0iCitQT1JUPSIiCisKKyMgVGhlIHRlc3QgbGVuZ3RoIGluIHNlY29uZHMKK1RFU1RfVElNRT02MAorCisjIEhvdyBhY2N1cmF0ZSB3ZSB3YW50IHRoZSBlc3RpbWF0ZSBvZiBwZXJmb3JtYW5jZTogCisjICAgICAgbWF4aW11bSBhbmQgbWluaW11bSB0ZXN0IGl0ZXJhdGlvbnMgKC1pKQorIyAgICAgIGNvbmZpZGVuY2UgbGV2ZWwgKDk5IG9yIDk1KSBhbmQgaW50ZXJ2YWwgKHBlcmNlbnQpCitTVEFUU19TVFVGRj0iLWkgMTAsMiAtSSA5OSw1IgorCisjIFRoZSBzb2NrZXQgc2l6ZXMgdGhhdCB3ZSB3aWxsIGJlIHRlc3RpbmcKK1NPQ0tFVF9TSVpFUz0iMTI4SyA1NzM0NCAzMjc2OCA4MTkyIgorCisjIFRoZSBzZW5kIHNpemVzIHRoYXQgd2Ugd2lsbCBiZSB1c2luZworU0VORF9TSVpFUz0iNDA5NiA4MTkyIDMyNzY4IgorCisjIGlmIHRoZXJlIGFyZSB0d28gcGFybXMsIHBhcm0gb25lIGl0IHRoZSBob3N0bmFtZSBhbmQgcGFybSB0d28gd2lsbAorIyBiZSBhIENQVSBpbmRpY2F0b3IuIGFjdHVhbGx5LCBhbnl0aGluZyBhcyBhIHNlY29uZCBwYXJtIHdpbGwgY2F1c2UKKyMgdGhlIENQVSB0byBiZSBtZWFzdXJlZCwgYnV0IHdlIHdpbGwgImFkdmVydGlzZSIgaXQgc2hvdWxkIGJlICJDUFUiCisKK2lmIFsgJCMgLWVxIDIgXTsgdGhlbgorICBSRU1fSE9TVD0kMQorICBMT0NfQ1BVPSItYyIKKyAgUkVNX0NQVT0iLUMiCitmaQorCitpZiBbICQjIC1lcSAxIF07IHRoZW4KKyAgUkVNX0hPU1Q9JDEKK2ZpCisKKyMgSWYgd2UgYXJlIG1lYXN1cmluZyBDUFUgdXRpbGl6YXRpb24sIHRoZW4gd2UgY2FuIHNhdmUgYmVhdWNvdXAKKyMgdGltZSBieSBzYXZpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIENQVSBjYWxpYnJhdGlvbiBhbmQgcGFzc2luZworIyB0aGVtIGluIGR1cmluZyB0aGUgcmVhbCB0ZXN0cy4gU28sIHdlIGV4ZWN1dGUgdGhlIG5ldyBDUFUgInRlc3RzIgorIyBvZiBuZXRwZXJmIGFuZCBwdXQgdGhlIHZhbHVlcyBpbnRvIHNoZWxsIHZhcnMuCitjYXNlICRMT0NfQ1BVIGluCitcLWMpIExPQ19SQVRFPWAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC10IExPQ19DUFVgOzsKKyopIExPQ19SQVRFPSIiCitlc2FjCisKK2Nhc2UgJFJFTV9DUFUgaW4KK1wtQykgUkVNX1JBVEU9YCRORVRIT01FL25ldHBlcmYgJFBPUlQgLXQgUkVNX0NQVSAtSCAkUkVNX0hPU1RgOzsKKyopIFJFTV9SQVRFPSIiCitlc2FjCisKKyMgdGhpcyB3aWxsIGRpc2FibGUgaGVhZGVycworTk9fSERSPSItUCAwIgorCitmb3IgU09DS0VUX1NJWkUgaW4gJFNPQ0tFVF9TSVpFUworICBkbworICBmb3IgU0VORF9TSVpFIGluICRTRU5EX1NJWkVTCisgICAgZG8KKyAgICBlY2hvCisgICAgZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBlY2hvCisgICAgIyB3ZSBlY2hvIHRoZSBjb21tYW5kIGxpbmUgZm9yIGN1dCBhbmQgcGFzdGUgCisgICAgZWNobyAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC1sICRURVNUX1RJTUUgLUggJFJFTV9IT1NUIC10IFRDUF9TVFJFQU1cCisgICAgICAgICAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFICRTVEFUU19TVFVGRiAtLVwKKyAgICAgICAgIC1tICRTRU5EX1NJWkUgLXMgJFNPQ0tFVF9TSVpFIC1TICRTT0NLRVRfU0laRQorCisgICAgZWNobworICAgICMgc2luY2Ugd2UgaGF2ZSB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBzdHVmZiwgd2UgZG8gbm90CisgICAgIyBuZWVkIHRvIHJlcGVhdCBhIHRlc3QgbXVsdGlwbGUgdGltZXMgZnJvbSB0aGUgc2hlbGwKKyAgICAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC1sICRURVNUX1RJTUUgLUggJFJFTV9IT1NUIC10IFRDUF9TVFJFQU1cCisgICAgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAkU1RBVFNfU1RVRkYgLS1cCisgICAgLW0gJFNFTkRfU0laRSAtcyAkU09DS0VUX1NJWkUgLVMgJFNPQ0tFVF9TSVpFCisKKyAgICBkb25lCisgIGRvbmUKK2VjaG8gSWYgeW91IHdpc2ggdG8gc3VibWl0IHRoZXNlIHJlc3VsdHMgdG8gdGhlIG5ldHBlcmYgZGF0YWJhc2UgYXQKK2VjaG8gaHR0cDovL3d3dy5jdXAuaHAuY29tL25ldHBlcmYvTmV0cGVyZlBhZ2UuaHRtbCwgcGxlYXNlIHN1Ym1pdCBlYWNoCitlY2hvIGRhdGFwb2ludCBpbmRpdmlkdWFsbHkuIEluZGl2aWR1YWwgZGF0YXBvaW50cyBhcmUgc2VwYXJhdGVkIGJ5CitlY2hvIGxpbmVzIG9mIGRhc2hlcy4gCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy91ZHBfcnJfc2NyaXB0IGIvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvdWRwX3JyX3NjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMjQ4Njc3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9kb2MvZXhhbXBsZXMvdWRwX3JyX3NjcmlwdApAQCAtMCwwICsxLDEwNyBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBzY3JpcHQgZm9yIHVzaW5nIG5ldHBlcmYuIEZlZWwgZnJlZSB0byBtb2RpZnkgaXQgCisjIGFzIG5lY2Vzc2FyeSwgYnV0IEkgd291bGQgc3VnZ2VzdCB0aGF0IHlvdSBjb3B5IHRoaXMgb25lIGZpcnN0LgorIworIworIyB1bmNvbW1lbnQgdGhlIG5leHQgbGluZSBpZiB5b3UgdGhpbmsgdGhlIHNjcmlwdCBpcyBicm9rZW4KKyNzZXQgLXgKKworCitpZiBbICQjIC1ndCAyIF07IHRoZW4KKyAgZWNobyAidHJ5IGFnYWluLCBjb3JyZWN0bHkgLT4gdWRwX3JyX3NjcmlwdCBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKyAgZWNobyAidHJ5IGFnYWluLCBjb3JyZWN0bHkgLT4gdWRwX3JyX3NjcmlwdCBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCisjIHdoZXJlIHRoZSBwcm9ncmFtcyBhcmUKKworI05FVEhPTUU9L3Vzci9sb2NhbC9uZXRwZXJmCisjTkVUSE9NRT0iL29wdC9uZXRwZXJmIgorTkVUSE9NRT0iLiIKKworIyBhdCB3aGF0IHBvcnQgd2lsbCBuZXRzZXJ2ZXIgYmUgd2FpdGluZz8gSWYgeW91IGRlY2lkZSB0byBydW4KKyMgbmV0c2VydmVyIGF0IGEgZGlmZmVybmV0IHBvcnQgdGhhbiB0aGUgZGVmYXVsdCBvZiAxMjg2NSwgdGhlbiBzZXQKKyMgdGhlIHZhbHVlIG9mIFBPUlQgYXByb3ByaWF0ZWx5CisjUE9SVD0iLXAgc29tZV9vdGhlcl9wb3J0bnVtIgorUE9SVD0iIgorCisKKyMgVGhlIHRlc3QgbGVuZ3RoIGluIHNlY29uZHMKKworVEVTVF9USU1FPTYwCisKKyMgSG93IGFjY3VyYXRlIHdlIHdhbnQgdGhlIGVzdGltYXRlIG9mIHBlcmZvcm1hbmNlOiAKKyMgICAgICBtYXhpbXVtIGFuZCBtaW5pbXVtIHRlc3QgaXRlcmF0aW9ucyAoLWkpCisjICAgICAgY29uZmlkZW5jZSBsZXZlbCAoOTkgb3IgOTUpIGFuZCBpbnRlcnZhbCAocGVyY2VudCkKKworU1RBVFNfU1RVRkY9Ii1pIDEwLDIgLUkgOTksMTAiCisKKyMgVGhlIHNvY2tldCBzaXplcyB0aGF0IHdlIHdpbGwgYmUgdGVzdGluZyAtIC0xIG1lYW5zIHVzZSBkZWZhdWx0CisjIG5vdCBtdWNoIHBvaW50IGluIGNoYW5naW5nIHRoZSBzb2NrZXQgYnVmZmVyIGZvciBhIFVEUCByZXF1ZXN0LworIyByZXNwb25zZSB0ZXN0IC0gdW5sZXNzIHlvdSB3YW50IHRvIGhhdmUgcmVxdWVzdHMvcmVzcG9uc2VzIHdoaWNoIAorIyBhcmUgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQKKworU09DS0VUX1NJWkVTPSItMSIKKworIyBUaGUgc2VuZCBzaXplcyB0aGF0IHdlIHdpbGwgYmUgdXNpbmcKKworUlJfU0laRVM9IjEsMSA2NCw2NCAxMDAsMjAwIDEwMjQsMTAyNCIKKworIyBpZiB0aGVyZSBhcmUgdHdvIHBhcm1zLCBwYXJtIG9uZSBpdCB0aGUgaG9zdG5hbWUgYW5kIHBhcm0gdHdvIHdpbGwKKyMgYmUgYSBDUFUgaW5kaWNhdG9yLiBhY3R1YWxseSwgYW55dGhpbmcgYXMgYSBzZWNvbmQgcGFybSB3aWxsIGNhdXNlCisjIHRoZSBDUFUgdG8gYmUgbWVhc3VyZWQsIGJ1dCB3ZSB3aWxsICJhZHZlcnRpc2UiIGl0IHNob3VsZCBiZSAiQ1BVIgorCitpZiBbICQjIC1lcSAyIF07IHRoZW4KKyAgUkVNX0hPU1Q9JDEKKyAgTE9DX0NQVT0iLWMiCisgIFJFTV9DUFU9Ii1DIgorZmkKKworaWYgWyAkIyAtZXEgMSBdOyB0aGVuCisgIExPQ19DUFU9IiIKKyAgUkVNX0NQVT0iIgorICBSRU1fSE9TVD0kMQorZmkKKworIyBJZiB3ZSBhcmUgbWVhc3VyaW5nIENQVSB1dGlsaXphdGlvbiwgdGhlbiB3ZSBjYW4gc2F2ZSBiZWF1Y291cAorIyB0aW1lIGJ5IHNhdmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgQ1BVIGNhbGlicmF0aW9uIGFuZCBwYXNzaW5nCisjIHRoZW0gaW4gZHVyaW5nIHRoZSByZWFsIHRlc3RzLiBTbywgd2UgZXhlY3V0ZSB0aGUgbmV3IENQVSAidGVzdHMiCisjIG9mIG5ldHBlcmYgYW5kIHB1dCB0aGUgdmFsdWVzIGludG8gc2hlbGwgdmFycy4KK2Nhc2UgJExPQ19DUFUgaW4KK1wtYykgTE9DX1JBVEU9YCRORVRIT01FL25ldHBlcmYgJFBPUlQgLXQgTE9DX0NQVWA7OworKikgTE9DX1JBVEU9IiIKK2VzYWMKKworY2FzZSAkUkVNX0NQVSBpbgorXC1DKSBSRU1fUkFURT1gJE5FVEhPTUUvbmV0cGVyZiAkUE9SVCAtdCBSRU1fQ1BVIC1IICRSRU1fSE9TVGA7OworKikgUkVNX1JBVEU9IiIKK2VzYWMKKworIyBUaGlzIHR1cm5zLW9mZiB0aGUgZGlzcGxheSBoZWFkZXJzCitOT19IRFI9Ii1QIDAiCisKK2ZvciBTT0NLRVRfU0laRSBpbiAkU09DS0VUX1NJWkVTCitkbworICBmb3IgUlJfU0laRSBpbiAkUlJfU0laRVMKKyAgZG8KKyAgZWNobworICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBlY2hvIFRlc3Rpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToKKyAgZWNobyAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC1sICRURVNUX1RJTUUgLUggJFJFTV9IT1NUICRTVEFUU19TVFVGRiBcCisgICAgICAgICAgICAgICAgICAkTE9DX0NQVSAkTE9DX1JBVEUgJFJFTV9DUFUgJFJFTV9SQVRFIC10IFVEUF9SUiAtLVwKKyAgICAgICAgICAgICAgICAgIC1yICRSUl9TSVpFIC1zICRTT0NLRVRfU0laRSAtUyAkU09DS0VUX1NJWkUKKyAgJE5FVEhPTUUvbmV0cGVyZiAkUE9SVCAtbCAkVEVTVF9USU1FIC1IICRSRU1fSE9TVCAkU1RBVFNfU1RVRkYgXAorICAgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgLXQgVURQX1JSICROT19IRFIgLS1cCisgICAgICAgICAgICAgICAgICAtciAkUlJfU0laRSAtcyAkU09DS0VUX1NJWkUgLVMgJFNPQ0tFVF9TSVpFCisgIGRvbmUKK2RvbmUKK2VjaG8KK2VjaG8gSWYgeW91IHdpc2ggdG8gc3VibWl0IHRoZXNlIHJlc3VsdHMgdG8gdGhlIG5ldHBlcmYgZGF0YWJhc2UgYXQKK2VjaG8gaHR0cDovL3d3dy5jdXAuaHAuY29tL25ldHBlcmYvTmV0cGVyZlBhZ2UuaHRtbCwgcGxlYXNlIHN1Ym1pdCBlYWNoCitlY2hvIGRhdGFwb2ludCBpbmRpdmlkdWFsbHkuIEluZGl2aWR1YWwgZGF0YXBvaW50cyBhcmUgc2VwYXJhdGVkIGJ5CitlY2hvIGxpbmVzIG9mIGRhc2hlcy4gCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy91ZHBfc3RyZWFtX3NjcmlwdCBiL25ldHBlcmYtMi40LjUvZG9jL2V4YW1wbGVzL3VkcF9zdHJlYW1fc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWU5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2RvYy9leGFtcGxlcy91ZHBfc3RyZWFtX3NjcmlwdApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBzY3JpcHQgZm9yIHVzaW5nIG5ldHBlcmYuIEZlZWwgZnJlZSB0byBtb2RpZnkgaXQgCisjIGFzIG5lY2Vzc2FyeSwgYnV0IEkgd291bGQgc3VnZ2VzdCB0aGF0IHlvdSBjb3B5IHRoaXMgb25lIGZpcnN0LgorIyBUaGlzIHNjcmlwdCBwZXJmb3JtcyB2YXJpb3VzIFVEUCB1bmlkaXJlY3Rpb25hbCBzdHJlYW0gdGVzdHMuCisjCisKK2lmIFsgJCMgLWd0IDIgXTsgdGhlbgorICBlY2hvICJ0cnkgYWdhaW4sIGNvcnJlY3RseSAtPiB1ZHBfc3RyZWFtX3NjcmlwdCBob3N0bmFtZSBbQ1BVXSIKKyAgZXhpdCAxCitmaQorCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKyAgZWNobyAidHJ5IGFnYWluLCBjb3JyZWN0bHkgLT4gdWRwX3N0cmVhbV9zY3JpcHQgaG9zdG5hbWUgW0NQVV0iCisgIGV4aXQgMQorZmkKKworIyB3aGVyZSB0aGUgcHJvZ3JhbXMgYXJlCisKKyNORVRIT01FPS91c3IvbG9jYWwvbmV0cGVyZgorI05FVEhPTUU9Ii9vcHQvbmV0cGVyZiIKK05FVEhPTUU9Ii4iCisKKyMgYXQgd2hhdCBwb3J0IHdpbGwgbmV0c2VydmVyIGJlIHdhaXRpbmc/IElmIHlvdSBkZWNpZGUgdG8gcnVuCisjIG5ldHNlcnZlciBhdCBhIGRpZmZlcm5ldCBwb3J0IHRoYW4gdGhlIGRlZmF1bHQgb2YgMTI4NjUsIHRoZW4gc2V0CisjIHRoZSB2YWx1ZSBvZiBQT1JUIGFwcm9wcmlhdGVseQorI1BPUlQ9Ii1wIHNvbWVfb3RoZXJfcG9ydG51bSIKK1BPUlQ9IiIKKworIyBUaGUgdGVzdCBsZW5ndGggaW4gc2Vjb25kcworVEVTVF9USU1FPTYwCisKKyMgSG93IGFjY3VyYXRlIHdlIHdhbnQgdGhlIGVzdGltYXRlIG9mIHBlcmZvcm1hbmNlOiAKKyMgICAgICBtYXhpbXVtIGFuZCBtaW5pbXVtIHRlc3QgaXRlcmF0aW9ucyAoLWkpCisjICAgICAgY29uZmlkZW5jZSBsZXZlbCAoOTkgb3IgOTUpIGFuZCBpbnRlcnZhbCAocGVyY2VudCkKKworU1RBVFNfU1RVRkY9Ii1pIDEwLDIgLUkgOTksMTAiCisKKyMgVGhlIHNvY2tldCBzaXplcyB0aGF0IHdlIHdpbGwgYmUgdGVzdGluZy4gVGhpcyBzaG91bGQgYmUgYSBsaXN0IG9mCisjIGludGVnZXJzIHNlcGFyYXRlZCBieSBzcGFjZXMKKworU09DS0VUX1NJWkVTPSIzMjc2OCIKKworIyBUaGUgc2VuZCBzaXplcyB0aGF0IHdlIHdpbGwgYmUgdXNpbmcuIFVzaW5nIHNlbmQgc2l6ZXMgdGhhdCByZXN1bHQKKyMgaW4gVURQIHBhY2tldHMgd2hpY2ggYXJlIGxhcmdlciB0aGFuIGxpbmsgc2l6ZSBjYW4gYmUgYSBiYWQgdGhpbmcgdG8gZG8uCisjIGZvciBGRERJLCB5b3UgY2FuIHRhY2stb24gYSA0MDk2IGRhdGEgcG9pbnQKKworU0VORF9TSVpFUz0iNjQgMTAyNCAxNDcyIgorCisjIGlmIHRoZXJlIGFyZSB0d28gcGFybXMsIHBhcm0gb25lIGl0IHRoZSBob3N0bmFtZSBhbmQgcGFybSB0d28gd2lsbAorIyBiZSBhIENQVSBpbmRpY2F0b3IuIGFjdHVhbGx5LCBhbnl0aGluZyBhcyBhIHNlY29uZCBwYXJtIHdpbGwgY2F1c2UKKyMgdGhlIENQVSB0byBiZSBtZWFzdXJlZCwgYnV0IHdlIHdpbGwgImFkdmVydGlzZSIgaXQgc2hvdWxkIGJlICJDUFUiCisKK2lmIFsgJCMgLWVxIDIgXTsgdGhlbgorICBSRU1fSE9TVD0kMQorICBMT0NfQ1BVPSItYyIKKyAgUkVNX0NQVT0iLUMiCitmaQorCitpZiBbICQjIC1lcSAxIF07IHRoZW4KKyAgTE9DX0NQVT0iIgorICBSRU1fQ1BVPSIiCisgIFJFTV9IT1NUPSQxCitmaQorCisjIElmIHdlIGFyZSBtZWFzdXJpbmcgQ1BVIHV0aWxpemF0aW9uLCB0aGVuIHdlIGNhbiBzYXZlIGJlYXVjb3VwCisjIHRpbWUgYnkgc2F2aW5nIHRoZSByZXN1bHRzIG9mIHRoZSBDUFUgY2FsaWJyYXRpb24gYW5kIHBhc3NpbmcKKyMgdGhlbSBpbiBkdXJpbmcgdGhlIHJlYWwgdGVzdHMuIFNvLCB3ZSBleGVjdXRlIHRoZSBuZXcgQ1BVICJ0ZXN0cyIKKyMgb2YgbmV0cGVyZiBhbmQgcHV0IHRoZSB2YWx1ZXMgaW50byBzaGVsbCB2YXJzLgorY2FzZSAkTE9DX0NQVSBpbgorXC1jKSBMT0NfUkFURT1gJE5FVEhPTUUvbmV0cGVyZiAkUE9SVCAtdCBMT0NfQ1BVYDs7CisqKSBMT0NfUkFURT0iIgorZXNhYworCitjYXNlICRSRU1fQ1BVIGluCitcLUMpIFJFTV9SQVRFPWAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC10IFJFTV9DUFUgLUggJFJFTV9IT1NUYDs7CisqKSBSRU1fUkFURT0iIgorZXNhYworCisjIFRoaXMgd2lsbCB0ZWxsIG5ldHBlcmYgdGhhdCBoZWFkZXJzIGFyZSBub3QgdG8gYmUgZGlzcGxheWVkCitOT19IRFI9Ii1QIDAiCisKK2ZvciBTT0NLRVRfU0laRSBpbiAkU09DS0VUX1NJWkVTCitkbworICBmb3IgU0VORF9TSVpFIGluICRTRU5EX1NJWkVTCisgIGRvCisgICAgZWNobworICAgIGVjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgZWNobyBUZXN0aW5nIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmU6CisgICAgZWNobyAkTkVUSE9NRS9uZXRwZXJmICRQT1JUIC1sICRURVNUX1RJTUUgLUggJFJFTV9IT1NUICRTVEFUU19TVFVGRiBcCisgICAgICAgICAgICRMT0NfQ1BVICRMT0NfUkFURSAkUkVNX0NQVSAkUkVNX1JBVEUgLXQgVURQX1NUUkVBTSAtLSBcCisgICAgICAgICAgIC1tICRTRU5EX1NJWkUgLXMgJFNPQ0tFVF9TSVpFIC1TICRTT0NLRVRfU0laRQorCisgICAgJE5FVEhPTUUvbmV0cGVyZiAkUE9SVCAtbCAkVEVTVF9USU1FIC1IICRSRU1fSE9TVCAkU1RBVFNfU1RVRkYgXAorICAgICAgJExPQ19DUFUgJExPQ19SQVRFICRSRU1fQ1BVICRSRU1fUkFURSAtdCBVRFBfU1RSRUFNIC0tIFwKKyAgICAgIC1tICRTRU5EX1NJWkUgLXMgJFNPQ0tFVF9TSVpFIC1TICRTT0NLRVRfU0laRQorCisgIGRvbmUKK2RvbmUKK2VjaG8KK2VjaG8gSWYgeW91IHdpc2ggdG8gc3VibWl0IHRoZXNlIHJlc3VsdHMgdG8gdGhlIG5ldHBlcmYgZGF0YWJhc2UgYXQKK2VjaG8gaHR0cDovL3d3dy5jdXAuaHAuY29tL25ldHBlcmYvTmV0cGVyZlBhZ2UuaHRtbCwgcGxlYXNlIHN1Ym1pdCBlYWNoCitlY2hvIGRhdGFwb2ludCBpbmRpdmlkdWFsbHkuIEluZGl2aWR1YWwgZGF0YXBvaW50cyBhcmUgc2VwYXJhdGVkIGJ5CitlY2hvIGxpbmVzIG9mIGRhc2hlcy4gCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2RvYy9uZXRwZXJmLmluZm8gYi9uZXRwZXJmLTIuNC41L2RvYy9uZXRwZXJmLmluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0YzBjZAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL25ldHBlcmYuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L2RvYy9uZXRwZXJmLm1hbiBiL25ldHBlcmYtMi40LjUvZG9jL25ldHBlcmYubWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMDAyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2RvYy9uZXRwZXJmLm1hbgpAQCAtMCwwICsxLDIxNCBAQAorLlRIIG5ldHBlcmYgMSAiIgorLlNIIE5BTUUKKworbmV0cGVyZiBcLSBhIG5ldHdvcmsgcGVyZm9ybWFuY2UgYmVuY2htYXJrCisKKy5TSCBTWU5PUFNJUworCisuQiBuZXRwZXJmCitbZ2xvYmFsIG9wdGlvbnNdIC0tIFt0ZXN0IHNwZWNpZmljIG9wdGlvbnNdCisKKy5TSCBERVNDUklQVElPTgorLkIgTmV0cGVyZgoraXMgYSBiZW5jaG1hcmsgdGhhdCBjYW4gYmUgdXNlZCB0byBtZWFzdXJlIHZhcmlvdXMgYXNwZWN0cyBvZgorbmV0d29ya2luZyBwZXJmb3JtYW5jZS4KK0N1cnJlbnRseSwgaXRzIGZvY3VzIGlzIG9uIGJ1bGsgZGF0YSB0cmFuc2ZlciBhbmQgcmVxdWVzdC9yZXNwb25zZQorcGVyZm9ybWFuY2UgdXNpbmcgZWl0aGVyIFRDUCBvciBVRFAsIGFuZCB0aGUgQmVya2VsZXkgU29ja2V0cworaW50ZXJmYWNlLiBJbiBhZGRpdGlvbiwgdGVzdHMgZm9yIERMUEksIGFuZCBVbml4IERvbWFpbgorU29ja2V0cywgdGVzdHMgZm9yIElQdjYgbWF5IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQtaW4uCisKKy5TUyBHTE9CQUwgT1BUSU9OUworCisuVFAKKy5CIFwtNAorVXNlIEFGX0lORVQgKGFrYSBJUHY0KSBhZGRyZXNzaW5nIGZvciB0aGUgY29udHJvbCBhbmQgcG9zc2libHkgZGF0YQorY29ubmVjdGlvbnMuIAorLlRQCisuQiBcLTYKK1VzZSBBRl9JTkVUNiAoYWthIElQdjYpIGFkZHJlc3NpbmcgZm9yIHRoZSBjb250cm9sIGFuZCBwb3NzaWJseSBkYXRhCitjb25uZWN0aW9ucy4KKy5UUAorLkIgXC1hIHNpemVzcGVjCitBbHRlciB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgYWxpZ25tZW50cyBvbiB0aGUgbG9jYWwgc3lzdGVtLgorVGhpcyBkZWZhdWx0cyB0byA4IGJ5dGVzLgorLlRQCisuQiBcLUEgc2l6ZXNwZWMKK0FzIC1hLCBidXQgZm9yIHRoZSByZW1vdGUgc3lzdGVtLgorLlRQCisuQiBcLUIgYnJhbmRzdHIKK0FkZCBicmFuZHN0ciB0byB0aGUgb3V0cHV0IG9mIGEgdGVzdCB3aXRoIGJhbm5lcnMgZGlzYWJsZWQuCisuVFAKKy5CIFwtYyBbcmF0ZV0KK1JlcXVlc3QgQ1BVIHV0aWxpemF0aW9uIGFuZCBzZXJ2aWNlIGRlbWFuZCBjYWxjdWxhdGlvbnMgZm9yIHRoZQorbG9jYWwgc3lzdGVtLiBJZiB0aGUgb3B0aW9uYWwgcmF0ZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLAorLkIgbmV0cGVyZgord2lsbCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGNhbGN1bGF0aW5nIHRoZSByYXRlIGl0c2VsZi4KKy5UUAorLkIgXC1DIFtyYXRlXQorQXMgLWMsIGJ1dCBmb3IgdGhlIHJlbW90ZSBzeXN0ZW0uCisuVFAKKy5CIFwtZAorSW5jcmVhc2UgdGhlIHF1YW50aXR5IG9mIGRlYnVnZ2luZyBvdXRwdXQgZGlzcGxheWVkIGR1cmluZworYSB0ZXN0IChwb3NzaWJseSBhdCB0aGUgZXhwZW5zZSBvZiBwZXJmb3JtYW5jZSkuCisuVFAKKy5CIFwtRCBbc2Vjcyx1bml0c10gKCopCitEaXNwbGF5IGludGVyaW0gcmVzdWx0cyBhdCBsZWFzdCBldmVyeSBzZWNzIHNlY29uZHMgdW5pbmcgdW5pdHMgYXMgdGhlCitpbml0aWFsIGd1ZXNzIGZvciB1bml0cyBwZXIgc2Vjb25kLiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4KK25ldHBlcmYgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLWRlbW8uCisuVFAKKy5CIFwtZiBHTUtnbWsKK0NoYW5nZSB0aGUgdW5pdHMgb2YgbWVhc3VyZSBmb3IgKl9TVFJFQU0gdGVzdHMuIENhcGl0YWwgbGV0dGVycyBhcmUKK3Bvd2VycyBvZiB0d28sIGxvd2VyY2FzZSBhcmUgcG93ZXJzIG9mIHRlbi4KKy5UUAorLkIgXC1GIGZpbGxfZmlsZQorUHJlLWZpbGwgdGhlIHNlbmQgYnVmZmVycyB3aXRoIGRhdGEgZnJvbSB0aGUgbmFtZWQgZmlsZS4gVGhpcyBpcworaW50ZW5kZWQgdG8gcHJvdmlkZSBhIG1lYW5zIGZvciBhdm9pZGluZyBidWZmZXJzIHRoYXQgYXJlIGZpbGxlZCB3aXRoCitkYXRhIHdoaWNoIGlzIHRyaXZpYWxseSBlYXN5IHRvIGNvbXByZXNzLiBBIGdvb2QgY2hvaWNlIGZvciBhIGZpbGUKK3RoYXQgc2hvdWxkIGJlIHByZXNlbnQgb24gYW55IHN5c3RlbSBpcyB0aGlzIG1hbnBhZ2UgLSBuZXRwZXJmLm1hbi4KK090aGVyIGZpbGVzIG1heSBiZSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24uCisuVFAKKy5CIFwtaAorRGlzcGxheSBhIHVzYWdlIHN0cmluZywgYW5kIGV4aXQuCisuVFAKKy5CIFwtSCBuYW1lfGlwLGZhbWlseSAoKikKK1NldCB0aGUgaG9zdG5hbWUgKG9yIElQIGFkZHJlc3MpIGFuZCBhZGRyZXNzIGZhbWlseSB0byB1c2UgdG8KK2VzdGFibGlzaCB0aGUgY29udHJvbCBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgc3lzdGVtLiBQYXNzaW5nIGEKK3NpbmdsZSBuYW1lIHdpdGggbm8gY29tbWEgd2lsbCBvbmx5IHNldCByZW1vdGVfaG9zdCBhbmQgd2lsbCBsZWF2ZQorc2VsZWN0aW9uIG9mIGFkZHJlc3MgZmFtaWx5IGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uIHRvIHRoZSBzdGFjayBvcgorYnkgYSAtNCAtciAtNiBjb21tYW5kIGxpbmUgb3B0aW9uLgorLlRQCisuQiBcLWkgbWF4LG1pbgorU2V0IHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIHdoZW4gdHJ5aW5nIHRvIHJlYWNoCitjZXJ0YWluIGNvbmZpZGVuY2UgbGV2ZWxzLgorLlRQCisuQiBcLUkgbHZsLFssaW50dmxdCitTcGVjaWZ5IHRoZSBjb25maWRlbmNlIGxldmVsIChlaXRoZXIgOTUgb3IgOTkgLSA5OSBpcyB0aGUgZGVmYXVsdCkgYW5kCit0aGUgd2lkdGggb2YgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgYXMgYSBwZXJjZW50YWdlIChkZWZhdWx0IDEwKQorLlRQCisuQiBcLWwgdGVzdGxlbgorU3BlY2lmeSB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXN0IChkZWZhdWx0IDEwIHNlY29uZHMpLgorQSBuZWdhdGl2ZSB2YWx1ZSBzZXRzIHRoZSBudW1iZXIgb2YgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbnMsCitvciB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZvciBhIHN0cmVhbSB0ZXN0LgorLlRQCisuQiBcLUwgbmFtZXxpcCxmYW0gKCopCitTZXQgdGhlIGxvY2FsIG5hbWV8SVAgYW5kL29yIGFkZHJlc3MgZmFtaWx5IGZvciB0aGUgc29ja2V0IHVzZWQgZm9yCit0aGUgY29udHJvbCBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgbmV0c2VydmVyLgorLlRQCisuQiBcLW4gbnVtY3B1cworU3BlY2lmeSB0aGUgbnVtYmVyIG9mIENQVSdzIGluIHRoZSBzeXN0ZW0gb24gdGhvc2Ugc3lzdGVtcyBmb3Igd2hpY2gKK25ldHBlcmYgaGFzIG5vIHdheSB0byBmaW5kIHRoZSBudW1iZXIgb2YgQ1BVJ3MgcHJvZ3JhbWF0aWNhbGx5LiAKKy5UUAorLkIgXC1OCitUaGlzIG9wdGlvbiB3aWxsIHRlbGwgbmV0cGVyZiB0byBub3QgZXN0YWJsaXNoIGEgY29udHJvbCBjb25uZWN0aW9uIHRvCithIHJlbW90ZSAgbmV0c2VydmVyLiAgSW5zdGVhZCBpdCB3aWxsIHRyeSB0byBlc3RhYmxpc2ggYSBkYXRhCitjb25uZWN0aW9uIGRpcmVjdGx5LCB1c2luZyBvbmx5IHRoZSBpbmZvcm1hdGlvbiBzdXBwbGllZCBieSB0aGUKK2NvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGFuZC9vciBpbnRlcm5hbCBkZWZhdWx0cy4gIFVubGVzcyBvdGhlciBwb3J0cworYXJlIHByb3ZpZGVkIGJ5IHRoZSBjb21tYW5kIGxpbmUsIGJ5IGRlZmF1bHQgdGhlIGRhdGEgY29ubmVjdGlvbiB3aWxsCitiZSB0byB0aGUgImRpc2NhcmQiIHBvcnQgZm9yIGEgIlNUUkVBTSIgb3IgIlNFTkRGSUxFIiB0ZXN0LCB0aGUgImVjaG8iCitwb3J0IGZvciBhbiAiUlIiIHRlc3Qgb3IgdGhlICJjaGFyZ2VuIiBwb3J0IGZvciBhICJNQUVSVFMiIHRlc3QuCisuVFAKKy5CIFwtbyBzaXplc3BlYworU2V0IGFuIG9mZnNldCBmcm9tIHRoZSBhbGlnbm1lbnQgc3BlY2lmaWVkIHdpdGggLWEuCisuVFAKKy5CIFwtTyBzaXplc3BlYworQXMgLW8sIGJ1dCBmb3IgdGhlIHJlbW90ZSBzeXN0ZW0uCisuVFAKKy5CIFwtcCBwb3J0bnVtLGxvY3BvcnQgKCopCitEaXJlY3QgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiB0byBhIG5ldHNlcnZlciBsaXN0ZW5pbmcgb24gdGhlCitzcGVjaWZpZWQgcG9ydCwgcmF0aGVyIHRoYW4gdXNpbmcgYSAibmV0cGVyZiIgZW50cnkgaW4KKy9ldGMvc2VydmljZXMgb3IgdGhlIGludGVybmFsIGRlZmF1bHQgKHBvcnQgMTI4NjUpLiBJZiAiLGxvY3BvcnQiIGlzCitzcGVjaWZpZWQgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkIGZyb20gdGhhdCBsb2NhbAorcG9ydCBudW1iZXIuICBTcGVjaWZ5aW5nIGEgc2luZ2xlIHBvcnQgbnVtYmVyIHdpdGggbm8gY29tbWEgd2lsbAorc3BlY2lmeSBvbmx5IHRoZSByZW1vdGUgbmV0c2VydmVyIHBvcnQgbnVtYmVyIGFuZCB3aWxsIGxlYXZlIGxvY2FsCitwb3J0IG51bWJlciBzZWxlY3Rpb24gdG8gdGhlIHN0YWNrLiAgCisuVFAKKy5CIFwtUCAwfDEKK1Nob3cgKDEpIG9yIHN1cHByZXNzICgwKSB0aGUgdGVzdCBiYW5uZXIuCisuVFAKKy5CIFwtdCB0ZXN0bmFtZQorU3BlY2lmeSB0aGUgdGVzdCB0byBwZXJmb3JtLgorVmFsaWQgdGVzdG5hbWVzIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIG5vciBhbHdheXMgY29tcGlsZWQtaW46CisuUlMKKy5SUworLm5mCisuSSBUQ1BfU1RSRUFNCisuSSBUQ1BfU0VOREZJTEUKKy5JIFRDUF9NQUVSVFMKKy5JIFRDUF9SUgorLkkgVENQX0NSUgorLkkgVURQX1NUUkVBTQorLkkgVURQX1JSCisuSSBETENPX1NUUkVBTQorLkkgRExDT19SUgorLkkgRExDTF9TVFJFQU0KKy5JIERMQ0xfUlIKKy5JIFNUUkVBTV9TVFJFQU0KKy5JIFNUUkVBTV9SUgorLkkgREdfU1RSRUFNCisuSSBER19SUgorLkkgTE9DX0NQVQorLkkgUkVNX0NQVQorLmZpCisuUkUKKy5SRQorLlRQCisuQiBcLVQgbGNwdSxyZW1jcHUKK1JlcXVlc3QgdGhhdCBuZXRwZXJmIGJlIGJvdW5kIHRvIENQVSBsY3B1IGFuZC9vciBuZXRzZXJ2ZXIgYmUgYm91bmQgdG8KK0NQVSByY3B1LgorLlRQCisuQiBcLXYgdmVyYm9zaXR5CitTZXQgdGhlIHZlcmJvc2l0eSBsZXZlbCBmb3IgdGhlIHRlc3QgKG9ubHkgd2l0aCAtUCkuCisKKworLlNTIFRFU1QgU1BFQ0lGSUMgT1BUSU9OUworCisuVFAKKy5CIFwtaAorRGlzcGxheSBhIHVzYWdlIHN0cmluZyBiYXNlZCBvbiB0aGUgdGVzdCBuYW1lIHNldCB3aXRoIC10LCBhbmQgZXhpdC4KKworUGxlYXNlIGNvbnN1bHQgdGhlIG5ldHBlcmYgbWFudWFsCisuSSAKK05ldHBlcmY6IEEgTmV0d29yayBQZXJmb3JtYW5jZSBCZW5jaG1hcmsgCisobmV0cGVyZi5wcykgZm9yIG1vcmUgaW5mb3JtYXRpb24uIE9yIHlvdSBjYW4gam9pbiBhbmQgbWFpbCB0byAKK25ldHBlcmYtdGFsa0BuZXRwZXJmLm9yZy4KKworLlNIIE5PVEUKK0ZvciB0aG9zZSBvcHRpb25zIHRha2luZyB0d28gcGFybXMsIGF0IGxlYXN0IG9uZSBtdXN0IGJlIHNwZWNpZmllZDsKK3NwZWNpZnlpbmcgb25lIHZhbHVlIHdpdGhvdXQgYSBjb21tYSB3aWxsIHNldCBib3RoIHBhcm1zIHRvIHRoYXQKK3ZhbHVlLCBzcGVjaWZ5aW5nIGEgdmFsdWUgd2l0aCBhIGxlYWRpbmcgY29tbWEgd2lsbCBzZXQganVzdCB0aGUKK3NlY29uZCBwYXJtLCBhIHZhbHVlIHdpdGggYSB0cmFpbGluZyBjb21tYSB3aWxsIHNldCBqdXN0IHRoZSBmaXJzdC4gVG8KK3NldCBlYWNoIHBhcm0gdG8gdW5pcXVlIHZhbHVlcywgc3BlY2lmeSBib3RoIGFuZCBzZXBhcmF0ZSB0aGVtIHdpdGggYQorY29tbWEuCisKKyogRm9yIHRoZXNlIG9wdGlvbnMgdGFraW5nIHR3byBwYXJtcywgc3BlY2lmeWluZyBvbmUgdmFsdWUgd2l0aCBubworY29tbWEgd2lsbCBvbmx5IHNldCB0aGUgZmlyc3QgcGFybXMgYW5kIHdpbGwgbGVhdmUgdGhlIHNlY29uZCBhdCB0aGUKK2RlZmF1bHQgdmFsdWUuIFRvIHNldCB0aGUgc2Vjb25kIHZhbHVlIGl0IG11c3QgYmUgcHJlY2VkZWQgd2l0aCBhCitjb21tYSBvciBiZSBhIGNvbW1hLXNlcGFyYXRlZCBwYWlyLiBUaGlzIGlzIHRvIHJldGFpbiBwcmV2aW91cyBuZXRwZXJmCitiZWhhdmlvdXIuCisKKworLlNIIEJVR1MgCitUaGVyZSBhcmUgYm91bmQgdG8gYmUgYnVncy4gSWYgeW91IHRoaW5rIHlvdSBoYXZlIGZvdW5kIGEgYnVnLCBwbGVhc2UKK21lbnRpb24gaXQgaW4gbmV0cGVyZi10YWxrQG5ldHBlcmYub3JnLiAgTGlzdCBtZW1iZXJzaGlwIGlzIHJlcXVpcmVkCit0byBzZW5kIGVtYWlsIHRvIHRoZSBsaXN0LiAgU2VlCitodHRwOi8vd3d3Lm5ldHBlcmYub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9uZXRwZXJmLXRhbGsgLiBJZiBhbGwKK2Vsc2UgZmFpbHMgc2VuZCBlbWFpbCB0byBSaWNrIEpvbmVzIDxyYWpAY3VwLmhwLmNvbT4uCisKKy5TSCBTRUUgQUxTTworLkMgbmV0c2VydmVyCisuYnIKKy5JCitOZXRwZXJmOiBBIE5ldHdvcmsgUGVyZm9ybWFuY2UgQmVuY2htYXJrCisuYnIKK2h0dHA6Ly93d3cubmV0cGVyZi5vcmcvCisKKy5TSCBBVVRIT1JTCitIUCBJbmZvcm1hdGlvbiBOZXR3b3JrcyBEaXZpc2lvbiAtIE5ldHdvcmtpbmcgUGVyZm9ybWFuY2UgVGVhbS4KKy5icgorUmljayBKb25lcwk8cmFqQGN1cC5ocC5jb20+CisuYnIKK0thcmVuIENob3kJSFAgSU5ECisuYnIKK0RhdmUgU2hpZWxkCTxkYXZlc0Bjc2MubGl2LmFjLnVrPgkobWFuIHBhZ2VzKQorLmJyCitPdGhlcnMgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24gaGVyZSAtIHNlZSB0aGUgQUNLTldMREdNTlRTIGZpbGUKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZG9jL25ldHBlcmYudGV4aSBiL25ldHBlcmYtMi40LjUvZG9jL25ldHBlcmYudGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDcyN2NmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9kb2MvbmV0cGVyZi50ZXhpCkBAIC0wLDAgKzEsMjgyMiBAQAorXGlucHV0IHRleGluZm8gICBAYyAtKi10ZXhpbmZvLSotCitAYyAlKipzdGFydCBvZiBoZWFkZXIKK0BzZXRmaWxlbmFtZSBuZXRwZXJmLmluZm8KK0BzZXR0aXRsZSBDYXJlIGFuZCBGZWVkaW5nIG9mIE5ldHBlcmYgMi40LlgKK0BjICUqKmVuZCBvZiBoZWFkZXIKKworQGNvcHlpbmcKK1RoaXMgaXMgUmljayBKb25lcycgZmVlYmxlIGF0dGVtcHQgYXQgYSBUZXhpbmZvLWJhc2VkIG1hbnVhbCBmb3IgdGhlCituZXRwZXJmIGJlbmNobWFyay4gCisKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAwNS0yMDA3IEhld2xldHQtUGFja2FyZCBDb21wYW55CitAcXVvdGF0aW9uCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKK3BlciB0aGUgdGVybXMgb2YgdGhlIG5ldHBlcmYgc291cmNlIGxpY2VuY2UsIGEgY29weSBvZiB3aGljaCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBmaWxlIEBmaWxle0NPUFlJTkd9IG9mIHRoZSBiYXNpYyBuZXRwZXJmIGRpc3RyaWJ1dGlvbi4KK0BlbmQgcXVvdGF0aW9uCitAZW5kIGNvcHlpbmcKKworQHRpdGxlcGFnZQorQHRpdGxlIENhcmUgYW5kIEZlZWRpbmcgb2YgTmV0cGVyZgorQHN1YnRpdGxlIFZlcnNpb25zIDIuNC4zIGFuZCBMYXRlcgorQGF1dGhvciBSaWNrIEpvbmVzIEBlbWFpbHtyaWNrLmpvbmVzMkBAaHAuY29tfQorQGMgdGhpcyBpcyBoZXJlIHRvIHN0YXJ0IHRoZSBjb3B5cmlnaHQgcGFnZQorQHBhZ2UKK0B2c2tpcCAwcHQgcGx1cyAxZmlsbGwKK0BpbnNlcnRjb3B5aW5nCitAZW5kIHRpdGxlcGFnZQorCitAYyBiZWdpbiB3aXRoIGEgdGFibGUgb2YgY29udGVudHMKK0Bjb250ZW50cworCitAaWZub3R0ZXgKK0Bub2RlIFRvcCwgSW50cm9kdWN0aW9uLCAoZGlyKSwgKGRpcikKK0B0b3AgTmV0cGVyZiBNYW51YWwKKworQGluc2VydGNvcHlpbmcKK0BlbmQgaWZub3R0ZXgKKworQG1lbnUKKyogSW50cm9kdWN0aW9uOjogICAgICAgICAgICAgICAgQW4gaW50cm9kdWN0aW9uIHRvIG5ldHBlcmYgLSB3aGF0IGl0IGlzIGFuZCB3aGF0aXQgaXMgbm90LgorKiBJbnN0YWxsaW5nIE5ldHBlcmY6OiAgICAgICAgICBIb3cgdG8gZ28gYWJvdXQgaW5zdGFsbGluZyBuZXRwZXJmLgorKiBUaGUgRGVzaWduIG9mIE5ldHBlcmY6OiAgICAgICAKKyogR2xvYmFsIENvbW1hbmQtbGluZSBPcHRpb25zOjogIAorKiBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgQnVsayBEYXRhIFRyYW5zZmVyOjogIAorKiBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgUmVxdWVzdC9SZXNwb25zZSA6OiAgCisqIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBBZ2dyZWdhdGUgUGVyZm9ybWFuY2U6OiAgCisqIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyOjogIAorKiBPdGhlciBOZXRwZXJmIFRlc3RzOjogICAgICAgICAKKyogQWRkcmVzcyBSZXNvbHV0aW9uOjogICAgICAgICAgCisqIEVuaGFuY2luZyBOZXRwZXJmOjogICAgICAgICAgIAorKiBOZXRwZXJmNDo6ICAgICAgICAgICAgICAgICAgICAKKyogQ29uY2VwdCBJbmRleDo6ICAgICAgICAgICAgICAgCisqIE9wdGlvbiBJbmRleDo6ICAgICAgICAgICAgICAgIAorCitAZGV0YWlsbWVudQorIC0tLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tLQorCitJbnRyb2R1Y3Rpb24KKworKiBDb252ZW50aW9uczo6ICAgICAgICAgICAgICAgICAKKworSW5zdGFsbGluZyBOZXRwZXJmCisKKyogR2V0dGluZyBOZXRwZXJmIEJpdHM6OiAgICAgICAgCisqIEluc3RhbGxpbmcgTmV0cGVyZiBCaXRzOjogICAgIAorKiBWZXJpZnlpbmcgSW5zdGFsbGF0aW9uOjogICAgICAKKworVGhlIERlc2lnbiBvZiBOZXRwZXJmCisKKyogQ1BVIFV0aWxpemF0aW9uOjogICAgICAgICAgICAgCisKK0dsb2JhbCBDb21tYW5kLWxpbmUgT3B0aW9ucworCisqIENvbW1hbmQtbGluZSBPcHRpb25zIFN5bnRheDo6ICAKKyogR2xvYmFsIE9wdGlvbnM6OiAgICAgICAgICAgICAgCisKK1VzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBCdWxrIERhdGEgVHJhbnNmZXIKKworKiBJc3N1ZXMgaW4gQnVsayBUcmFuc2Zlcjo6ICAgICAKKyogT3B0aW9ucyBjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0czo6ICAKKworT3B0aW9ucyBjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0cworCisqIFRDUF9TVFJFQU06OiAgICAgICAgICAgICAgICAgIAorKiBUQ1BfTUFFUlRTOjogICAgICAgICAgICAgICAgICAKKyogVENQX1NFTkRGSUxFOjogICAgICAgICAgICAgICAgCisqIFVEUF9TVFJFQU06OiAgICAgICAgICAgICAgICAgIAorKiBYVElfVENQX1NUUkVBTTo6ICAgICAgICAgICAgICAKKyogWFRJX1VEUF9TVFJFQU06OiAgICAgICAgICAgICAgCisqIFNDVFBfU1RSRUFNOjogICAgICAgICAgICAgICAgIAorKiBETENPX1NUUkVBTTo6ICAgICAgICAgICAgICAgICAKKyogRExDTF9TVFJFQU06OiAgICAgICAgICAgICAgICAgCisqIFNUUkVBTV9TVFJFQU06OiAgICAgICAgICAgICAgIAorKiBER19TVFJFQU06OiAgICAgICAgICAgICAgICAgICAKKworVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIFJlcXVlc3QvUmVzcG9uc2UgCisKKyogSXNzdWVzIGluIFJlcXVlc3QvUmVzcG9uc2U6OiAgCisqIE9wdGlvbnMgQ29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgX1JSIHRlc3RzOjogIAorCitPcHRpb25zIENvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIF9SUiB0ZXN0cworCisqIFRDUF9SUjo6ICAgICAgICAgICAgICAgICAgICAgIAorKiBUQ1BfQ0M6OiAgICAgICAgICAgICAgICAgICAgICAKKyogVENQX0NSUjo6ICAgICAgICAgICAgICAgICAgICAgCisqIFVEUF9SUjo6ICAgICAgICAgICAgICAgICAgICAgIAorKiBYVElfVENQX1JSOjogICAgICAgICAgICAgICAgICAKKyogWFRJX1RDUF9DQzo6ICAgICAgICAgICAgICAgICAgCisqIFhUSV9UQ1BfQ1JSOjogICAgICAgICAgICAgICAgIAorKiBYVElfVURQX1JSOjogICAgICAgICAgICAgICAgICAKKyogRExDTF9SUjo6ICAgICAgICAgICAgICAgICAgICAgCisqIERMQ09fUlI6OiAgICAgICAgICAgICAgICAgICAgIAorKiBTQ1RQX1JSOjogICAgICAgICAgICAgICAgICAgICAKKworVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEFnZ3JlZ2F0ZSBQZXJmb3JtYW5jZQorCisqIFJ1bm5pbmcgQ29uY3VycmVudCBOZXRwZXJmIFRlc3RzOjogIAorKiBVc2luZyAtLWVuYWJsZS1idXJzdDo6ICAgICAgICAKKworVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJpZGlyZWN0aW9uYWwgVHJhbnNmZXIKKworKiBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyIHdpdGggQ29uY3VycmVudCBUZXN0czo6ICAKKyogQmlkaXJlY3Rpb25hbCBUcmFuc2ZlciB3aXRoIFRDUF9SUjo6ICAKKworT3RoZXIgTmV0cGVyZiBUZXN0cworCisqIENQVSByYXRlIGNhbGlicmF0aW9uOjogICAgICAgIAorCitAZW5kIGRldGFpbG1lbnUKK0BlbmQgbWVudQorCitAbm9kZSBJbnRyb2R1Y3Rpb24sIEluc3RhbGxpbmcgTmV0cGVyZiwgVG9wLCBUb3AKK0BjaGFwdGVyIEludHJvZHVjdGlvbgorCitAY2luZGV4IEludHJvZHVjdGlvbgorCitOZXRwZXJmIGlzIGEgYmVuY2htYXJrIHRoYXQgY2FuIGJlIHVzZSB0byBtZWFzdXJlIHZhcmlvdXMgYXNwZWN0IG9mCituZXR3b3JraW5nIHBlcmZvcm1hbmNlLiAgVGhlIHByaW1hcnkgZm9jaSBhcmUgYnVsayAoYWthCit1bmlkaXJlY3Rpb25hbCkgZGF0YSB0cmFuc2ZlciBhbmQgcmVxdWVzdC9yZXNwb25zZSBwZXJmb3JtYW5jZSB1c2luZworZWl0aGVyIFRDUCBvciBVRFAgYW5kIHRoZSBCZXJrZWxleSBTb2NrZXRzIGludGVyZmFjZS4gIEFzIG9mIHRoaXMKK3dyaXRpbmcsIHRoZSB0ZXN0cyBhdmFpbGFibGUgZWl0aGVyIHVuY29uZGl0aW9uYWxseSBvciBjb25kaXRpb25hbGx5CitpbmNsdWRlOgorCitAaXRlbWl6ZSBAYnVsbGV0CitAaXRlbQorVENQIGFuZCBVRFAgdW5pZGlyZWN0aW9uYWwgdHJhbnNmZXIgYW5kIHJlcXVlc3QvcmVzcG9uc2Ugb3ZlciBJUHY0IGFuZAorSVB2NiB1c2luZyB0aGUgU29ja2V0cyBpbnRlcmZhY2UuCitAaXRlbQorVENQIGFuZCBVRFAgdW5pZGlyZWN0aW9uYWwgdHJhbnNmZXIgYW5kIHJlcXVlc3QvcmVzcG9uc2Ugb3ZlciBJUHY0Cit1c2luZyB0aGUgWFRJIGludGVyZmFjZS4KK0BpdGVtCitMaW5rLWxldmVsIHVuaWRpcmVjdGlvbmFsIHRyYW5zZmVyIGFuZCByZXF1ZXN0L3Jlc3BvbnNlIHVzaW5nIHRoZSBETFBJCitpbnRlcmZhY2UuIAorQGl0ZW0KK1VuaXggZG9tYWluIHNvY2tldHMKK0BpdGVtCitTQ1RQIHVuaWRpcmVjdGlvbmFsIHRyYW5zZmVyIGFuZCByZXF1ZXN0L3Jlc3BvbnNlIG92ZXIgSVB2NCBhbmQgSVB2NgordXNpbmcgdGhlIHNvY2tldHMgaW50ZXJmYWNlLgorQGVuZCBpdGVtaXplCisKK1doaWxlIG5vdCBldmVyeSByZXZpc2lvbiBvZiBuZXRwZXJmIHdpbGwgd29yayBvbiBldmVyeSBwbGF0Zm9ybQorbGlzdGVkLCB0aGUgaW50ZW50aW9uIGlzIHRoYXQgYXQgbGVhc3Qgc29tZSB2ZXJzaW9uIG9mIG5ldHBlcmYgd2lsbAord29yayBvbiB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczoKKworQGl0ZW1pemUgQGJ1bGxldAorQGl0ZW0KK1VuaXggLSBhdCBsZWFzdCBhbGwgdGhlIG1ham9yIHZhcmlhbnRzLgorQGl0ZW0KK0xpbnV4CitAaXRlbQorV2luZG93cworQGl0ZW0KK09wZW5WTVMKK0BpdGVtCitPdGhlcnMKK0BlbmQgaXRlbWl6ZQorCitOZXRwZXJmIGlzIG1haW50YWluZWQgYW5kIGluZm9ybWFsbHkgc3VwcG9ydGVkIHByaW1hcmlseSBieSBSaWNrCitKb25lcywgd2hvIGNhbiBwZXJoYXBzIGJlIGJlc3QgZGVzY3JpYmVkIGFzIE5ldHBlcmYgQ29udHJpYnV0aW5nCitFZGl0b3IuICBOb24tdHJpdmlhbCBhbmQgdmVyeSBhcHByZWNpYXRlZCBhc3Npc3RhbmNlIGNvbWVzIGZyb20gb3RoZXJzCitpbiB0aGUgbmV0d29yayBwZXJmb3JtYW5jZSBjb21tdW5pdHksIHdobyBhcmUgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24KK2hlcmUuIFdoaWxlIGl0IGlzIG9mdGVuIHVzZWQgYnkgdGhlbSwgbmV0cGVyZiBpcyBOT1Qgc3VwcG9ydGVkIHZpYSBhbnkKK29mIHRoZSBmb3JtYWwgSGV3bGV0dC1QYWNrYXJkIHN1cHBvcnQgY2hhbm5lbHMuICBZb3Ugc2hvdWxkIGZlZWwgZnJlZQordG8gbWFrZSBlbmhhbmNlbWVudHMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gbmV0cGVyZiB0byBzdWl0IHlvdXIKK25lZmFyaW91cyBwb3Jwb2lzZXMsIHNvIGxvbmcgYXMgeW91IHN0YXkgd2l0aGluIHRoZSBndWlkZWxpbmVzIG9mIHRoZQorbmV0cGVyZiBjb3B5cmlnaHQuICBJZiB5b3UgZmVlbCBzbyBpbmNsaW5lZCwgeW91IGNhbiBzZW5kIHlvdXIgY2hhbmdlcwordG8KK0BlbWFpbHtuZXRwZXJmLWZlZWRiYWNrQEBuZXRwZXJmLm9yZyxuZXRwZXJmLWZlZWRiYWNrfSBmb3IgcG9zc2libGUKK2luY2x1c2lvbiBpbnRvIHN1YnNlcXVlbnQgdmVyc2lvbnMgb2YgbmV0cGVyZi4KKworSWYgeW91IHdvdWxkIHByZWZlciB0byBtYWtlIGNvbnRyaWJ1dGlvbnMgdG8gbmV0d29ya2luZyBiZW5jaG1hcmsKK3VzaW5nIGNlcnRpZmllZCBgYG9wZW4gc291cmNlJycgbGljZW5zZSwgcGxlYXNlIGNvbnNpZHVlciBuZXRwZXJmNCwKK3doaWNoIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMLgorCitUaGUgQGVtYWlse25ldHBlcmYtdGFsa0BAbmV0cGVyZi5vcmcsbmV0cGVyZi10YWxrfSBtYWlsaW5nIGxpc3QgaXMKK2F2YWlsYWJsZSB0byBkaXNjdXNzIHRoZSBjYXJlIGFuZCBmZWVkaW5nIG9mIG5ldHBlcmYgd2l0aCBvdGhlcnMgd2hvCitzaGFyZSB5b3VyIGludGVyZXN0IGluIG5ldHdvcmsgcGVyZm9ybWFuY2UgYmVuY2htYXJraW5nLiBUaGUKK25ldHBlcmYtdGFsayBtYWlsaW5nIGxpc3QgaXMgYSBjbG9zZWQgbGlzdCBhbmQgeW91IG11c3QgZmlyc3QKK3N1YnNjcmliZSBieSBzZW5kaW5nIGVtYWlsIHRvCitAZW1haWx7bmV0cGVyZi10YWxrLXJlcXVlc3RAQG5ldHBlcmYub3JnLG5ldHBlcmYtdGFsay1yZXF1ZXN0fS4KKworCitAbWVudQorKiBDb252ZW50aW9uczo6ICAgICAgICAgICAgICAgICAKK0BlbmQgbWVudQorCitAbm9kZSBDb252ZW50aW9ucywgICwgSW50cm9kdWN0aW9uLCBJbnRyb2R1Y3Rpb24KK0BzZWN0aW9uIENvbnZlbnRpb25zCisKK0EgQGRmbntzaXplc3BlY30gaXMgYSBvbmUgb3IgdHdvIGl0ZW0sIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHVzZWQgYXMgYW4KK2FyZ3VtZW50IHRvIGEgY29tbWFuZC1saW5lIG9wdGlvbiB0aGF0IGNhbiBzZXQgb25lIG9yIHR3bywgcmVsYXRlZAorbmV0cGVyZiBwYXJhbWV0ZXJzLiAgSWYgeW91IHdpc2ggdG8gc2V0IGJvdGggcGFyYW1ldGVycyB0byBzZXBhcmF0ZQordmFsdWVzLCBpdGVtcyBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5IGEgY29tbWE6CisKK0BleGFtcGxlCitwYXJhbWV0ZXIxLHBhcmFtZXRlcjIKK0BlbmQgZXhhbXBsZQorCitJZiB5b3Ugd2lzaCB0byBzZXQgdGhlIGZpcnN0IHBhcmFtZXRlciB3aXRob3V0IGFsdGVyaW5nIHRoZSB2YWx1ZSBvZgordGhlIHNlY29uZCBmcm9tIGl0cyBkZWZhdWx0LCB5b3Ugc2hvdWxkIGZvbGxvdyB0aGUgZmlyc3QgaXRlbSB3aXRoIGEKK2NvbW1hOgorCitAZXhhbXBsZQorcGFyYW1ldGVyMSwKK0BlbmQgZXhhbXBsZQorCisKK0xpa2V3aXNlLCBwcmVjZWRlIHRoZSBpdGVtIHdpdGggYSBjb21tYSBpZiB5b3Ugd2lzaCB0byBzZXQgb25seSB0aGUKK3NlY29uZCBwYXJhbWV0ZXI6CisKK0BleGFtcGxlCisscGFyYW1ldGVyMgorQGVuZCBleGFtcGxlCisKK0FuIGl0ZW0gd2l0aCBubyBjb21tYXM6CisKK0BleGFtcGxlCitwYXJhbWV0ZXIxYW5kMgorQGVuZCBleGFtcGxlCisKK3dpbGwgc2V0IGJvdGggcGFyYW1ldGVycyB0byB0aGUgc2FtZSB2YWx1ZS4gIFRoaXMgbGFzdCBtb2RlIGlzIG9uZSBvZgordGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkLgorCitUaGVyZSBpcyBhbm90aGVyIHZhcmlhbnQgb2YgdGhlIGNvbW1hLXNlcGFyYXRlZCwgdHdvLWl0ZW0gbGlzdCBjYWxsZWQKK2EgQGRmbntvcHRpb25zcGVjfSB3aGljaCBpcyBsaWtlIGEgc2l6ZXNwZWMgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgYQorc2luZ2xlIGl0ZW0gd2l0aCBubyBjb21tYToKKworQGV4YW1wbGUKK3BhcmFtZXRlcjEKK0BlbmQgZXhhbXBsZQorCit3aWxsIG9ubHkgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGFuZCB3aWxsIGxlYXZlIHRoZQorc2Vjb25kIHBhcmFtZXRlciBhdCBpdHMgZGVmYXVsdCB2YWx1ZS4KKworTmV0cGVyZiBoYXMgdHdvIHR5cGVzIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgVGhlIGZpcnN0IGFyZSBnbG9iYWwKK2NvbW1hbmQgbGluZSBvcHRpb25zLiAgVGhleSBhcmUgZXNzZW50aWFsbHkgYW55IG9wdGlvbiBub3QgdGllZCB0byBhCitwYXJ0aWN1bGFyIHRlc3Qgb3IgZ3JvdXAgb2YgdGVzdHMuICBBbiBleGFtcGxlIG9mIGEgZ2xvYmFsCitjb21tYW5kLWxpbmUgb3B0aW9uIGlzIHRoZSBvbmUgd2hpY2ggc2V0cyB0aGUgdGVzdCB0eXBlIC0gQG9wdGlvbnstdH0uCisKK1RoZSBzZWNvbmQgdHlwZSBvZiBvcHRpb25zIGFyZSB0ZXN0LXNwZWNpZmljIG9wdGlvbnMuICBUaGVzZSBhcmUKK29wdGlvbnMgd2hpY2ggYXJlIG9ubHkgYXBwbGljYWJsZSB0byBhIHBhcnRpY3VsYXIgdGVzdCBvciBzZXQgb2YKK3Rlc3RzLiAgQW4gZXhhbXBsZSBvZiBhIHRlc3Qtc3BlY2lmaWMgb3B0aW9uIHdvdWxkIGJlIHRoZSBzZW5kIHNvY2tldAorYnVmZmVyIHNpemUgZm9yIGEgVENQX1NUUkVBTSB0ZXN0LgorCitHbG9iYWwgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBmaXJzdCB3aXRoIHRlc3Qtc3BlY2lmaWMKK29wdGlvbnMgZm9sbG93aW5nIGFmdGVyIGEgQGNvZGV7LS19IGFzIGluOgorCitAZXhhbXBsZQorbmV0cGVyZiA8Z2xvYmFsPiAtLSA8dGVzdC1zcGVjaWZpYz4KK0BlbmQgZXhhbXBsZQorCisKK0Bub2RlIEluc3RhbGxpbmcgTmV0cGVyZiwgVGhlIERlc2lnbiBvZiBOZXRwZXJmLCBJbnRyb2R1Y3Rpb24sIFRvcAorQGNoYXB0ZXIgSW5zdGFsbGluZyBOZXRwZXJmCisKK0BjaW5kZXggSW5zdGFsbGF0aW9uCisKK05ldHBlcmYncyBwcmltYXJ5IGZvcm0gb2YgZGlzdHJpYnV0aW9uIGlzIHNvdXJjZSBjb2RlLiAgVGhpcyBhbGxvd3MKK2luc3RhbGxhdGlvbiBvbiBzeXN0ZW1zIG90aGVyIHRoYW4gdGhvc2UgdG8gd2hpY2ggdGhlIGF1dGhvcnMgaGF2ZQorcmVhZHkgYWNjZXNzIGFuZCB0aHVzIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBiaW5hcmllcy4gIFRoZXJlIGFyZSB0d28KK3N0eWxlcyBvZiBuZXRwZXJmIGluc3RhbGxhdGlvbi4gIFRoZSBmaXJzdCBydW5zIHRoZSBuZXRwZXJmIHNlcnZlcgorcHJvZ3JhbSAtIG5ldHNlcnZlciAtIGFzIGEgY2hpbGQgb2YgaW5ldGQuICBUaGlzIHJlcXVpcmVzIHRoZQoraW5zdGFsbGVyIHRvIGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGZpbGVzCitAZmlsZXsvZXRjL3NlcnZpY2VzfSBhbmQgQGZpbGV7L2V0Yy9pbmV0ZC5jb25mfSBvciB0aGVpcgorcGxhdGZvcm0tc3BlY2lmaWMgZXF1aXZhbGVudHMuCisKK1RoZSBzZWNvbmQgc3R5bGUgaXMgdG8gcnVuIG5ldHNlcnZlciBhcyBhIHN0YW5kYWxvbmUgZGFlbW9uLiAgVGhpcworc2Vjb25kIG1ldGhvZCBkb2VzIG5vdCByZXF1aXJlIGVkaXQgcHJpdmlsZWdlcyBvbiBAZmlsZXsvZXRjL3NlcnZpY2VzfQorYW5kIEBmaWxley9ldGMvaW5ldGQuY29uZn0gYnV0IGRvZXMgbWVhbiB5b3UgbXVzdCByZW1lbWJlciB0byBydW4gdGhlCituZXRzZXJ2ZXIgcHJvZ3JhbSBleHBsaWNpdGx5IGFmdGVyIGV2ZXJ5IHN5c3RlbSByZWJvb3QuCisKK1RoaXMgbWFudWFsIGFzc3VtZXMgdGhhdCB0aG9zZSB3aXNoaW5nIHRvIG1lYXN1cmUgbmV0d29ya2luZworcGVyZm9ybWFuY2UgYWxyZWFkeSBrbm93IGhvdyB0byB1c2UgYW5vbnltb3VzIEZUUCBhbmQvb3IgYSB3ZWIKK2Jyb3dzZXIuIEl0IGlzIGFsc28gZXhwZWN0ZWQgdGhhdCB5b3UgaGF2ZSBhdCBsZWFzdCBhIHBhc3NpbmcKK2ZhbWlsaWFyaXR5IHdpdGggdGhlIG5ldHdvcmtpbmcgcHJvdG9jb2xzIGFuZCBpbnRlcmZhY2VzIGludm9sdmVkLiBJbgorYWxsIGhvbmVzdHksIGlmIHlvdSBkbyBub3QgaGF2ZSBzdWNoIGZhbWlsaWFyaXR5LCBsaWtlbHkgYXMgbm90IHlvdQoraGF2ZSBzb21lIGV4cGVyaWVuY2UgdG8gZ2FpbiBiZWZvcmUgYXR0ZW1wdGluZyBuZXR3b3JrIHBlcmZvcm1hbmNlCittZWFzdXJlbWVudHMuICBUaGUgZXhjZWxsZW50IHRleHRzIGJ5IGF1dGhvcnMgc3VjaCBhcyBTdGV2ZW5zLCBGZW5uZXIKK2FuZCBSdWRvZmYgYW5kL29yIFN0YWxsaW5ncyB3b3VsZCBiZSBnb29kIHN0YXJ0aW5nIHBvaW50cy4gVGhlcmUgYXJlCitsaWtlbHkgb3RoZXIgZXhjZWxsZW50IHNvdXJjZXMgb3V0IHRoZXJlIGFzIHdlbGwuCisKK0BtZW51CisqIEdldHRpbmcgTmV0cGVyZiBCaXRzOjogICAgICAgIAorKiBJbnN0YWxsaW5nIE5ldHBlcmYgQml0czo6ICAgICAKKyogVmVyaWZ5aW5nIEluc3RhbGxhdGlvbjo6ICAgICAgCitAZW5kIG1lbnUKKworQG5vZGUgR2V0dGluZyBOZXRwZXJmIEJpdHMsIEluc3RhbGxpbmcgTmV0cGVyZiBCaXRzLCBJbnN0YWxsaW5nIE5ldHBlcmYsIEluc3RhbGxpbmcgTmV0cGVyZgorQHNlY3Rpb24gR2V0dGluZyBOZXRwZXJmIEJpdHMKKworR3ppcHBlZCB0YXIgZmlsZXMgb2YgbmV0cGVyZiBzb3VyY2VzIGNhbiBiZSByZXRyaWV2ZWQgdmlhIAorQHVyZWZ7ZnRwOi8vZnRwLm5ldHBlcmYub3JnL25ldHBlcmYsYW5vbnltb3VzIEZUUH0KK2ZvciBgYHJlbGVhc2VkJycgdmVyc2lvbnMgb2YgdGhlIGJpdHMuICBQcmUtcmVsZWFzZSB2ZXJzaW9ucyBvZiB0aGUKK2JpdHMgY2FuIGJlIHJldHJpZXZlZCB2aWEgYW5vbnltb3VzIEZUUCBmcm9tIHRoZQorQHVyZWZ7ZnRwOi8vZnRwLm5ldHBlcmYub3JnL25ldHBlcmYvZXhwZXJpbWVudGFsLGV4cGVyaW1lbnRhbH0gc3ViZGlyZWN0b3J5LgorCitGb3IgY29udmVuaWVuY2UgYW5kIGVhc2Ugb2YgcmVtZW1iZXJpbmcsIGEgbGluayB0byB0aGUgZG93bmxvYWQgc2l0ZQoraXMgcHJvdmlkZWQgdmlhIHRoZSAKK0B1cmVme2h0dHA6Ly93d3cubmV0cGVyZi5vcmcvLCBOZXRwZXJmUGFnZX0KKworVGhlIGJpdHMgY29ycmVzcG9uZGluZyB0byBlYWNoIGRpc2NyZXRlIHJlbGVhc2Ugb2YgbmV0cGVyZiBhcmUKK0B1cmVme2h0dHA6Ly93d3cubmV0cGVyZi5vcmcvc3ZuL25ldHBlcmYyL3RhZ3MsdGFnZ2VkfSBmb3IgcmV0cmlldmFsCit2aWEgc3VidmVyc2lvbi4gIEZvciBleGFtcGxlLCB0aGVyZSBpcyBhIHRhZyBmb3IgdGhlIGZpcnN0IHZlcnNpb24KK2NvcnJlc3BvbmRpbmcgdG8gdGhpcyB2ZXJzaW9uIG9mIHRoZSBtYW51YWwgLSAKK0B1cmVme2h0dHA6Ly93d3cubmV0cGVyZi5vcmcvc3ZuL25ldHBlcmYyL3RhZ3MvbmV0cGVyZi0yLjQuMyxuZXRwZXJmCisyLjQuM30uICBUaG9zZSB3aXNoaW5nIHRvIGJlIG9uIHRoZSBibGVlZGluZyBlZGdlIG9mIG5ldHBlcmYKK2RldmVsb3BtZW50IGNhbiB1c2Ugc3VidmVyc2lvbiB0byBncmFiIHRoZQorQHVyZWZ7aHR0cDovL3d3dy5uZXRwZXJmLm9yZy9zdm4vbmV0cGVyZjIvdHJ1bmssdG9wIG9mIHRydW5rfS4KKworVGhlcmUgYXJlIGxpa2VseSBvdGhlciBwbGFjZXMgYXJvdW5kIHRoZSBJbnRlcm5ldCBmcm9tIHdoaWNoIG9uZSBjYW4KK2Rvd25sb2FkIG5ldHBlcmYgYml0cy4gIFRoZXNlIG1heSBiZSBzaW1wbGUgbWlycm9ycyBvZiB0aGUgbWFpbgorbmV0cGVyZiBzaXRlLCBvciB0aGV5IG1heSBiZSBsb2NhbCB2YXJpYW50cyBvbiBuZXRwZXJmLiAgQXMgd2l0aAorYW55dGhpbmcgb25lIGRvd25sb2FkcyBmcm9tIHRoZSBJbnRlcm5ldCwgdGFrZSBjYXJlIHRvIG1ha2Ugc3VyZSBpdCBpcword2hhdCB5b3UgcmVhbGx5IHdhbnRlZCBhbmQgaXNuJ3Qgc29tZSBtYWxpY2lvdXMgVHJvamFuIG9yIHdoYXRub3QuCitDYXZlYXQgZG93bmxvYWRlci4KKworQXMgYSBnZW5lcmFsIHJ1bGUsIGJpbmFyaWVzIG9mIG5ldHBlcmYgYW5kIG5ldHNlcnZlciBhcmUgbm90CitkaXN0cmlidXRlZCBmcm9tIGZ0cC5uZXRwZXJmLm9yZy4gIEZyb20gdGltZSB0byB0aW1lIGEga2luZCBzb3VsIG9yCitzb3VscyBoYXMgcGFja2FnZWQgbmV0cGVyZiBhcyBhIERlYmlhbiBwYWNrYWdlIGF2YWlsYWJsZSB2aWEgdGhlCithcHQtZ2V0IG1lY2hhbmlzbSBvciBhcyBhbiBSUE0uICBJIHdvdWxkIGJlIG1vc3QgaW50ZXJlc3RlZCBpbgorbGVhcm5pbmcgaG93IHRvIGVuaGFuY2UgdGhlIG1ha2VmaWxlcyB0byBtYWtlIHRoYXQgZWFzaWVyIGZvciBwZW9wbGUsCithbmQgcGVyaGFwcyB0byBnZW5lcmF0ZSBIUC1VWCBzd2luc3RhbGxgYGRlcG90cy4nJworCitAbm9kZSBJbnN0YWxsaW5nIE5ldHBlcmYgQml0cywgVmVyaWZ5aW5nIEluc3RhbGxhdGlvbiwgR2V0dGluZyBOZXRwZXJmIEJpdHMsIEluc3RhbGxpbmcgTmV0cGVyZgorQHNlY3Rpb24gSW5zdGFsbGluZyBOZXRwZXJmCisKK09uY2UgeW91IGhhdmUgZG93bmxvYWRlZCB0aGUgdGFyIGZpbGUgb2YgbmV0cGVyZiBzb3VyY2VzIG9udG8geW91cgorc3lzdGVtKHMpLCBpdCBpcyBuZWNlc3NhcnkgdG8gdW5wYWNrIHRoZSB0YXIgZmlsZSwgY2QgdG8gdGhlIG5ldHBlcmYKK2RpcmVjdG9yeSwgcnVuIGNvbmZpZ3VyZSBhbmQgdGhlbiBtYWtlLiAgTW9zdCBvZiB0aGUgdGltZSBpdCBzaG91bGQgYmUKK3N1ZmZpY2llbnQgdG8ganVzdDoKKworQGV4YW1wbGUKK2d6Y2F0IDxuZXRwZXJmLXZlcnNpb24+LnRhci5neiB8IHRhciB4ZiAtCitjZCA8bmV0cGVyZi12ZXJzaW9uPgorLi9jb25maWd1cmUKK21ha2UKK21ha2UgaW5zdGFsbAorQGVuZCBleGFtcGxlCisKK01vc3Qgb2YgdGhlIGBgdXN1YWwnJyBjb25maWd1cmUgc2NyaXB0IG9wdGlvbnMgc2hvdWxkIGJlIHByZXNlbnQKK2RlYWxpbmcgd2l0aCB3aGVyZSB0byBpbnN0YWxsIGJpbmFyaWVzIGFuZCB3aGF0bm90LiAgCitAZXhhbXBsZQorLi9jb25maWd1cmUgLS1oZWxwCitAZW5kIGV4YW1wbGUKK3Nob3VsZCBsaXN0IGFsbCBvZiB0aG9zZSBhbmQgbW9yZS4KKworQHZpbmRleCAtLWVuYWJsZS1jcHV1dGlsLCBDb25maWd1cmUKK0lmIHRoZSBuZXRwZXJmIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBub3Qga25vdyBob3cgdG8gYXV0b21hZ2ljYWxseQorZGV0ZWN0IHdoaWNoIENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc20gdG8gdXNlIG9uIHlvdXIgcGxhdGZvcm0geW91IG1heQord2FudCB0byBhZGQgYSBAY29kZXstLWVuYWJsZS1jcHV1dGlsPW11bWJsZX0gb3B0aW9uIHRvIHRoZSBjb25maWd1cmUKK2NvbW1hbmQuICAgSWYgeW91IGhhdmUga25vd2xlZGdlIGFuZC9vciBleHBlcmllbmNlIHRvIGNvbnRyaWJ1dGUgdG8KK3RoYXQgYXJlYSwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgQGVtYWlse25ldHBlcmYtZmVlZGJhY2tAQG5ldHBlcmYub3JnfS4KKworQHZpbmRleCAtLWVuYWJsZS14dGksIENvbmZpZ3VyZQorQHZpbmRleCAtLWVuYWJsZS11bml4LCBDb25maWd1cmUKK0B2aW5kZXggLS1lbmFibGUtZGxwaSwgQ29uZmlndXJlCitAdmluZGV4IC0tZW5hYmxlLXNjdHAsIENvbmZpZ3VyZQorU2ltaWxhcmx5LCBpZiB5b3Ugd2FudCB0ZXN0cyB1c2luZyB0aGUgWFRJIGludGVyZmFjZSwgVW5peCBEb21haW4KK1NvY2tldHMsIERMUEkgb3IgU0NUUCBpdCB3aWxsIGJlIG5lY2Vzc2FyeSB0byBhZGQgb25lIG9yIG1vcmUKK0Bjb2Rley0tZW5hYmxlLVt4dGl8dW5peHxkbHBpfHNjdHBdPXllc30gb3B0aW9ucyB0byB0aGUgY29uZmlndXJlCitjb21tYW5kLiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIG5vdCBpbmNsdWRlCit0aG9zZSB0ZXN0cyBhdXRvbWFnaWNhbGx5LgorCitPbiBzb21lIHBsYXRmb3JtcywgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBwcmVjZWRlIHRoZSBjb25maWd1cmUKK2NvbW1hbmQgd2l0aCBhIENGTEFHUyBhbmQvb3IgTElCUyB2YXJpYWJsZSBhcyB0aGUgbmV0cGVyZiBjb25maWd1cmUKK3NjcmlwdCBpcyBub3QgeWV0IHNtYXJ0IGVub3VnaCB0byBzZXQgdGhlbSBpdHNlbGYuICBXaGVuZXZlciBwb3NzaWJsZSwKK3RoZXNlIHJlcXVpcmVtZW50cyB3aWxsIGJlIGZvdW5kIGluIEBmaWxle1JFQURNRS5AdmFye3BsYXRmb3JtfX0gZmlsZXMuCitFeHBlcnRpc2UgYW5kIGFzc2lzdGFuY2UgaW4gbWFraW5nIHRoYXQgbW9yZSBhdXRvbWFnaWNhbCBpbiB0aGUKK2NvbmZpZ3VyZSBzY3JpcHQgd291bGQgYmUgbW9zdCB3ZWxjb21lLgorCitAY2luZGV4IExpbWl0aW5nIEJhbmR3aWR0aAorQGNpbmRleCBCYW5kd2lkdGggTGltaXRhdGlvbgorQHZpbmRleCAtLWVuYWJsZS1pbnRlcnZhbHMsIENvbmZpZ3VyZQorQHZpbmRleCAtLWVuYWJsZS1oaXN0b2dyYW0sIENvbmZpZ3VyZQorT3RoZXIgb3B0aW9uYWwgY29uZmlndXJlLXRpbWUgc2V0dGluZ3MgaW5jbHVkZQorQGNvZGV7LS1lbmFibGUtaW50ZXJ2YWxzPXllc30gdG8gZ2l2ZSBuZXRwZXJmIHRoZSBhYmlsaXR5IHRvIGBgcGFjZScnCitpdHMgX1NUUkVBTSB0ZXN0cyBhbmQgQGNvZGV7LS1lbmFibGUtaGlzdG9ncmFtPXllc30gdG8gaGF2ZSBuZXRwZXJmCitrZWVwIGEgaGlzdG9ncmFtIG9mIGludGVyZXN0aW5nIHRpbWVzLiAgRWFjaCBvZiB0aGVzZSB3aWxsIGhhdmUgc29tZQorZWZmZWN0IG9uIHRoZSBtZWFzdXJlZCByZXN1bHQuICBJZiB5b3VyIHN5c3RlbSBzdXBwb3J0cworQGNvZGV7Z2V0aHJ0aW1lKCl9IHRoZSBlZmZlY3Qgb2YgdGhlIGhpc3RvZ3JhbSBtZWFzdXJlbWVudCBzaG91bGQgYmUKK21pbmltaXplZCBidXQgcHJvYmFibHkgc3RpbGwgbWVhc3VyYWJsZS4gIEZvciBleGFtcGxlLCB0aGUgaGlzdG9ncmFtCitvZiBhIG5ldHBlcmYgVENQX1JSIHRlc3Qgd2lsbCBiZSBvZiB0aGUgaW5kaXZpZHVhbCB0cmFuc2FjdGlvbiB0aW1lczoKK0BleGFtcGxlCituZXRwZXJmIC10IFRDUF9SUiAtSCBsYWcgLXYgMgorVENQIFJFUVVFU1QvUkVTUE9OU0UgVEVTVCBmcm9tIDAuMC4wLjAgKDAuMC4wLjApIHBvcnQgMCBBRl9JTkVUIHRvIGxhZy5ocGwuaHAuY29tICgxNS40Ljg5LjIxNCkgcG9ydCAwIEFGX0lORVQgOiBoaXN0b2dyYW0KK0xvY2FsIC9SZW1vdGUKK1NvY2tldCBTaXplICAgUmVxdWVzdCAgUmVzcC4gICBFbGFwc2VkICBUcmFucy4KK1NlbmQgICBSZWN2ICAgU2l6ZSAgICAgU2l6ZSAgICBUaW1lICAgICBSYXRlICAgICAgICAgCitieXRlcyAgQnl0ZXMgIGJ5dGVzICAgIGJ5dGVzICAgc2Vjcy4gICAgcGVyIHNlYyAgIAorCisxNjM4NCAgODczODAgIDEgICAgICAgIDEgICAgICAgMTAuMDAgICAgMzUzOC44MiAgIAorMzI3NjggIDMyNzY4IAorQWxpZ25tZW50ICAgICAgT2Zmc2V0CitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdgorICAgIDggICAgICAwICAgICAgIDAgICAgICAwCitIaXN0b2dyYW0gb2YgcmVxdWVzdC9yZXNwb25zZSB0aW1lcworVU5JVF9VU0VDICAgICA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDAKK1RFTl9VU0VDICAgICAgOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwCitIVU5EUkVEX1VTRUMgIDogICAgMDogMzQ0ODA6ICAxMTE6ICAgMTM6ICAgMTI6ICAgIDY6ICAgIDk6ICAgIDM6ICAgIDQ6ICAgIDcKK1VOSVRfTVNFQyAgICAgOiAgICAwOiAgIDYwOiAgIDUwOiAgIDUxOiAgIDQ0OiAgIDQ0OiAgIDcyOiAgMTE5OiAgMTAwOiAgMTAxCitURU5fTVNFQyAgICAgIDogICAgMDogIDEwNTogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMAorSFVORFJFRF9NU0VDICA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDA6ICAgIDAKK1VOSVRfU0VDICAgICAgOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwOiAgICAwCitURU5fU0VDICAgICAgIDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMDogICAgMAorPjEwMF9TRUNTOiAwCitISVNUX1RPVEFMOiAgICAgIDM1MzkxCitAZW5kIGV4YW1wbGUKKworTG9uZy10aW1lIHVzZXJzIG9mIG5ldHBlcmYgd2lsbCBub3RpY2UgdGhlIGV4cGFuc2lvbiBvZiB0aGUgbWFpbiB0ZXN0CitoZWFkZXIuICBUaGlzIHN0ZW1zIGZyb20gdGhlIG1lcmdpbmctaW4gb2YgSVB2NiB3aXRoIHRoZSBzdGFuZGFyZCBJUHY0Cit0ZXN0cyBhbmQgdGhlIGFkZGl0aW9uIG9mIGNvZGUgdG8gc3BlY2lmeSBhZGRyZXNzaW5nIGluZm9ybWF0aW9uIGZvcgorYm90aCBzaWRlcyBvZiB0aGUgZGF0YSBjb25uZWN0aW9uLgorCitUaGUgaGlzdG9ncmFtIHlvdSBzZWUgYWJvdmUgaXMgYmFzaWNhbGx5IGEgYmFzZS0xMCBsb2cgaGlzdG9ncmFtIHdoZXJlCit3ZSBjYW4gc2VlIHRoYXQgbW9zdCBvZiB0aGUgdHJhbnNhY3Rpb24gdGltZXMgd2VyZSBvbiB0aGUgb3JkZXIgb2Ygb25lCitodW5kcmVkIHRvIG9uZS1odW5kcmVkLCBuaW5ldHktbmluZSBtaWNyb3NlY29uZHMsIGJ1dCB0aGV5IHdlcmUKK29jY2FzaW9uYWxseSBhcyBsb25nIGFzIHRlbiB0byBuaW5ldGVlbiBtaWxsaXNlY29uZHMKKworVGhlIEBvcHRpb257LS1lbmFibGUtZGVtbz15ZXN9IGNvbmZpZ3VyZSBvcHRpb24gd2lsbCBjYXVzZSBjb2RlIHRvIGJlCitpbmNsdWRlZCB0byByZXBvcnQgaW50ZXJpbSByZXN1bHRzIGR1cmluZyBhIHRlc3QgcnVuLiAgVGhlIHJhdGUgYXQKK3doaWNoIGludGVyaW0gcmVzdWx0cyBhcmUgcmVwb3J0ZWQgY2FuIHRoZW4gYmUgY29udHJvbGxlZCB2aWEgdGhlCitnbG9iYWwgQG9wdGlvbnstRH0gb3B0aW9uLiAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIC0tZW5hYmxlLWRlbW8gbW9kZQorb3V0cHV0OgorCitAZXhhbXBsZQorc3JjL25ldHBlcmYgLUQgMS4zNSAtSCBsYWcgLWYgTQorVENQIFNUUkVBTSBURVNUIGZyb20gMC4wLjAuMCAoMC4wLjAuMCkgcG9ydCAwIEFGX0lORVQgdG8gbGFnLmhwbC5ocC5jb20gKDE1LjQuODkuMjE0KSBwb3J0IDAgQUZfSU5FVCA6IGRlbW8KK0ludGVyaW0gcmVzdWx0OiAgICA5LjY2IE1CeXRlcy9zIG92ZXIgMS42NyBzZWNvbmRzCitJbnRlcmltIHJlc3VsdDogICAgOS42NCBNQnl0ZXMvcyBvdmVyIDEuMzUgc2Vjb25kcworSW50ZXJpbSByZXN1bHQ6ICAgIDkuNTggTUJ5dGVzL3Mgb3ZlciAxLjM2IHNlY29uZHMKK0ludGVyaW0gcmVzdWx0OiAgICA5LjUxIE1CeXRlcy9zIG92ZXIgMS4zNiBzZWNvbmRzCitJbnRlcmltIHJlc3VsdDogICAgOS43MSBNQnl0ZXMvcyBvdmVyIDEuMzUgc2Vjb25kcworSW50ZXJpbSByZXN1bHQ6ICAgIDkuNjYgTUJ5dGVzL3Mgb3ZlciAxLjM2IHNlY29uZHMKK0ludGVyaW0gcmVzdWx0OiAgICA5LjYxIE1CeXRlcy9zIG92ZXIgMS4zNiBzZWNvbmRzCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAKK1NvY2tldCBTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICAgICAgICAgIAorU2l6ZSAgIFNpemUgICAgU2l6ZSAgICAgVGltZSAgICAgVGhyb3VnaHB1dCAgCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICBNQnl0ZXMvc2VjICAKKworIDMyNzY4ICAxNjM4NCAgMTYzODQgICAgMTAuMDAgICAgICAgOS42MSAgCitAZW5kIGV4YW1wbGUKKworTm90aWNlIGhvdyB0aGUgdW5pdHMgb2YgdGhlIGludGVyaW0gcmVzdWx0IHRyYWNrIHRoYXQgcmVxdWVzdGVkIGJ5IHRoZQorQG9wdGlvbnstZn0gb3B0aW9uLiAgQWxzbyBub3RpY2UgdGhhdCBzb21ldGltZXMgdGhlIGludGVydmFsIHdpbGwgYmUKK2xvbmdlciB0aGFuIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIEBvcHRpb257LUR9IG9wdGlvbi4gIFRoaXMgaXMKK25vcm1hbCBhbmQgc3RlbXMgZnJvbSBob3cgZGVtbyBtb2RlIGlzIGltcGxlbWVudGVkIHdpdGhvdXQgcmVseWluZyBvbgoraW50ZXJ2YWwgdGltZXJzLCBidXQgYnkgY2FsY3VsYXRpbmcgaG93IG1hbnkgdW5pdHMgb2Ygd29yayBtdXN0IGJlCitwZXJmb3JtZWQgdG8gdGFrZSBhdCBsZWFzdCB0aGUgZGVzaXJlZCBpbnRlcnZhbC4KKworQXMgb2YgdGhpcyB3cml0aW5nLCBhIEBjb2Rle21ha2UgaW5zdGFsbH0gd2lsbCBub3QgYWN0dWFsbHkgdXBkYXRlIHRoZQorZmlsZXMgQGZpbGV7L2V0Yy9zZXJ2aWNlc30gYW5kL29yIEBmaWxley9ldGMvaW5ldGQuY29uZn0gb3IgdGhlaXIKK3BsYXRmb3JtLXNwZWNpZmljIGVxdWl2YWxlbnRzLiAgSXQgcmVtYWlucyBuZWNlc3NhcnkgdG8gcGVyZm9ybSB0aGF0CitiaXQgb2YgaW5zdGFsbGF0aW9uIG1hZ2ljIGJ5IGhhbmQuICBQYXRjaGVzIHRvIHRoZSBtYWtlZmlsZSBzb3VyY2VzIHRvCitlZmZlY3QgYW4gYXV0b21hZ2ljIGVkaXRpbmcgb2YgdGhlIG5lY2Vzc2FyeSBmaWxlcyB0byBoYXZlIG5ldHBlcmYKK2luc3RhbGxlZCBhcyBhIGNoaWxkIG9mIGluZXRkIHdvdWxkIGJlIG1vc3Qgd2VsY29tZS4KKworU3RhcnRpbmcgdGhlIG5ldHNlcnZlciBhcyBhIHN0YW5kYWxvbmUgZGFlbW9uIHNob3VsZCBiZSBhcyBlYXN5IGFzOgorQGV4YW1wbGUKKyQgbmV0c2VydmVyCitTdGFydGluZyBuZXRzZXJ2ZXIgYXQgcG9ydCAxMjg2NQorU3RhcnRpbmcgbmV0c2VydmVyIGF0IGhvc3RuYW1lIDAuMC4wLjAgcG9ydCAxMjg2NSBhbmQgZmFtaWx5IDAKK0BlbmQgZXhhbXBsZQorCitPdmVyIHRpbWUgdGhlIHNwZWNpZmljcyBvZiB0aGUgbWVzc2FnZXMgbmV0c2VydmVyIHByaW50cyB0byB0aGUgc2NyZWVuCittYXkgY2hhbmdlIGJ1dCB0aGUgZ2lzdCB3aWxsIHJlbWFpbiB0aGUgc2FtZS4KKworSWYgdGhlIGNvbXBpbGF0aW9uIG9mIG5ldHBlcmYgb3IgbmV0c2VydmVyIGhhcHBlbnMgdG8gZmFpbCwgZmVlbCBmcmVlCit0byBjb250YWN0IEBlbWFpbHtuZXRwZXJmLWZlZWRiYWNrQEBuZXRwZXJmLm9yZ30gb3Igam9pbiBhbmQgYXNrIGluCitAZW1haWx7bmV0cGVyZi10YWxrQEBuZXRwZXJmLm9yZ30uICBIb3dldmVyLCBpdCBpcyBxdWl0ZSBpbXBvcnRhbnQKK3RoYXQgeW91IGluY2x1ZGUgdGhlIGFjdHVhbCBjb21waWxhdGlvbiBlcnJvcnMgYW5kIHBlcmhhcHMgZXZlbiB0aGUKK2NvbmZpZ3VyZSBsb2cgaW4geW91ciBlbWFpbC4gIE90aGVyd2lzZSwgaXQgd2lsbCBiZSB0aGF0IG11Y2ggbW9yZQorZGlmZmljdWx0IGZvciBzb21lb25lIHRvIGFzc2lzdCB5b3UuCisKK0Bub2RlIFZlcmlmeWluZyBJbnN0YWxsYXRpb24sICAsIEluc3RhbGxpbmcgTmV0cGVyZiBCaXRzLCBJbnN0YWxsaW5nIE5ldHBlcmYKK0BzZWN0aW9uIFZlcmlmeWluZyBJbnN0YWxsYXRpb24KKworQmFzaWNhbGx5LCBvbmNlIG5ldHBlcmYgaXMgaW5zdGFsbGVkIGFuZCBuZXRzZXJ2ZXIgaXMgY29uZmlndXJlZCBhcyBhCitjaGlsZCBvZiBpbmV0ZCwgb3IgbGF1bmNoZWQgYXMgYSBzdGFuZGFsb25lIGRhZW1vbiwgc2ltcGx5IHR5cGluZzoKK0BleGFtcGxlCituZXRwZXJmCitAZW5kIGV4YW1wbGUKK3Nob3VsZCByZXN1bHQgaW4gb3V0cHV0IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKK0BleGFtcGxlCiskIG5ldHBlcmYKK1RDUCBTVFJFQU0gVEVTVCBmcm9tIDAuMC4wLjAgKDAuMC4wLjApIHBvcnQgMCBBRl9JTkVUIHRvIGxvY2FsaG9zdC5sb2NhbGRvbWFpbiAoMTI3LjAuMC4xKSBwb3J0IDAgQUZfSU5FVAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICAKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgMTBeNmJpdHMvc2VjICAKKworIDg3MzgwICAxNjM4NCAgMTYzODQgICAgMTAuMDAgICAgMjk5Ny44NCAgIAorQGVuZCBleGFtcGxlCisKKworQG5vZGUgVGhlIERlc2lnbiBvZiBOZXRwZXJmLCBHbG9iYWwgQ29tbWFuZC1saW5lIE9wdGlvbnMsIEluc3RhbGxpbmcgTmV0cGVyZiwgVG9wCitAY2hhcHRlciBUaGUgRGVzaWduIG9mIE5ldHBlcmYKKworQGNpbmRleCBEZXNpZ24gb2YgTmV0cGVyZgorCitOZXRwZXJmIGlzIGRlc2lnbmVkIGFyb3VuZCBhIGJhc2ljIGNsaWVudC1zZXJ2ZXIgbW9kZWwuICBUaGVyZSBhcmUKK3R3byBleGVjdXRhYmxlcyAtIG5ldHBlcmYgYW5kIG5ldHNlcnZlci4gIEdlbmVyYWxseSB5b3Ugd2lsbCBvbmx5CitleGVjdXRlIHRoZSBuZXRwZXJmIHByb2dyYW0sIHdpdGggdGhlIG5ldHNlcnZlciBwcm9ncmFtIGJlaW5nIGludm9rZWQKK2J5IHRoZSByZW1vdGUgc3lzdGVtJ3MgaW5ldGQgb3IgZXF1aXZhbGVudC4KK1doZW4geW91IGV4ZWN1dGUgbmV0cGVyZiwgdGhlIGZpcnN0IHRoYXQgdGhhdCB3aWxsIGhhcHBlbiBpcyB0aGUKK2VzdGFibGlzaG1lbnQgb2YgYSBjb250cm9sIGNvbm5lY3Rpb24gdG8gdGhlIHJlbW90ZSBzeXN0ZW0uICBUaGlzCitjb25uZWN0aW9uIHdpbGwgYmUgdXNlZCB0byBwYXNzIHRlc3QgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQKK3Jlc3VsdHMgdG8gYW5kIGZyb20gdGhlIHJlbW90ZSBzeXN0ZW0uICBSZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHRlc3QKK3RvIGJlIHJ1biwgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiB3aWxsIGJlIGEgVENQIGNvbm5lY3Rpb24gdXNpbmcgQlNECitzb2NrZXRzLiAgVGhlIGNvbnRyb2wgY29ubmVjdGlvbiBjYW4gdXNlIGVpdGhlciBJUHY0IG9yIElQdjYuCisKK09uY2UgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBpcyB1cCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KK2hhcyBiZWVuIHBhc3NlZCwgYSBzZXBhcmF0ZSBgYGRhdGEnJyBjb25uZWN0aW9uIHdpbGwgYmUgb3BlbmVkIGZvciB0aGUKK21lYXN1cmVtZW50IGl0c2VsZiB1c2luZyB0aGUgQVBJJ3MgYW5kIHByb3RvY29scyBhcHByb3ByaWF0ZSBmb3IgdGhlCitzcGVjaWZpZWQgdGVzdC4gIFdoZW4gdGhlIHRlc3QgaXMgY29tcGxldGVkLCB0aGUgZGF0YSBjb25uZWN0aW9uIHdpbGwKK2JlIHRvcm4tZG93biBhbmQgcmVzdWx0cyBmcm9tIHRoZSBuZXRzZXJ2ZXIgd2lsbCBiZSBwYXNzZWQtYmFjayB2aWEgdGhlCitjb250cm9sIGNvbm5lY3Rpb24gYW5kIGNvbWJpbmVkIHdpdGggbmV0cGVyZidzIHJlc3VsdCBmb3IgZGlzcGxheSB0bwordGhlIHVzZXIuCisKK05ldHBlcmYgcGxhY2VzIG5vIHRyYWZmaWMgb24gdGhlIGNvbnRyb2wgY29ubmVjdGlvbiB3aGlsZSBhIHRlc3QgaXMgaW4KK3Byb2dyZXNzLiAgQ2VydGFpbiBUQ1Agb3B0aW9ucywgc3VjaCBhcyBTT19LRUVQQUxJVkUsIGlmIHNldCBhcyB5b3VyCitzeXN0ZW1zJyBkZWZhdWx0LCBtYXkgcHV0IHBhY2tldHMgb3V0IG9uIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gd2hpbGUKK2EgdGVzdCBpcyBpbiBwcm9ncmVzcy4gIEdlbmVyYWxseSBzcGVha2luZyB0aGlzIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24KK3RoZSByZXN1bHRzLgorCitAbWVudQorKiBDUFUgVXRpbGl6YXRpb246OiAgICAgICAgICAgICAKK0BlbmQgbWVudQorCitAY2luZGV4IENQVSBVdGlsaXphdGlvbgorQG5vZGUgQ1BVIFV0aWxpemF0aW9uLCAgLCBUaGUgRGVzaWduIG9mIE5ldHBlcmYsIFRoZSBEZXNpZ24gb2YgTmV0cGVyZgorQHNlY3Rpb24gQ1BVIFV0aWxpemF0aW9uCisKK0NQVSB1dGlsaXphdGlvbiBpcyBhbiBpbXBvcnRhbnQsIGFuZCBhbGFzIGFsbC10b28gaW5mcmVxdWVudGx5CityZXBvcnRlZCBjb21wb25lbnQgb2YgbmV0d29ya2luZyBwZXJmb3JtYW5jZS4gIFVuZm9ydHVuYXRlbHksIGl0IGNhbgorYmUgb25lIG9mIHRoZSBtb3N0IGRpZmZpY3VsdCBtZXRyaWNzIHRvIG1lYXN1cmUgYWNjdXJhdGVseSBhcyBtYW55CitzeXN0ZW1zIG9mZmVyIG1lY2hhbmlzbXMgdGhhdCBhcmUgYXQgYmVzdCBpbC1zdWl0ZWQgdG8gbWVhc3VyaW5nIENQVQordXRpbGl6YXRpb24gaW4gaGlnaCBpbnRlcnJ1cHQgcmF0ZSAoZWcgbmV0d29ya2luZykgc2l0dWF0aW9ucy4gIAorCitDUFUgdXRpbGl6YXRpb24gaW4gbmV0cGVyZiBpcyByZXBvcnRlZCBhcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwJQorcmVnYXJkbGVzcyBvZiB0aGUgbnVtYmVyIG9mIENQVXMgaW52b2x2ZWQuICBJbiBhZGRpdGlvbiB0byBDUFUKK3V0aWxpemF0aW9uLCBuZXRwZXJmIHdpbGwgcmVwb3J0IGEgbWV0cmljIGNhbGxlZCBhIEBkZm57c2VydmljZQorZGVtYW5kfS4gIFRoZSBzZXJ2aWNlIGRlbWFuZCBpcyB0aGUgbm9ybWFsaXphdGlvbiBvZiBDUFUgdXRpbGl6YXRpb24KK2FuZCB3b3JrIHBlcmZvcm1lZC4gIEZvciBhIF9TVFJFQU0gdGVzdCBpdCBpcyB0aGUgbWljcm9zZWNvbmRzIG9mIENQVQordGltZSBjb25zdW1lZCB0byB0cmFuc2ZlciBvbiBLQiAoSyA9PSAxMDI0KSBvZiBkYXRhLiAgRm9yIGEgX1JSIHRlc3QKK2l0IGlzIHRoZSBtaWNyb3NlY29uZHMgb2YgQ1BVIHRpbWUgY29uc3VtZWQgcHJvY2Vzc2luZyBhIHNpbmdsZQordHJhbnNhY3Rpb24uICAgRm9yIGJvdGggQ1BVIHV0aWxpemF0aW9uIGFuZCBzZXJ2aWNlIGRlbWFuZCwgbG93ZXIgaXMKK2JldHRlci4gCisKK1NlcnZpY2UgZGVtYW5kIGNhbiBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIGdhdWdlIHRoZQorZWZmZWN0IG9mIGEgcGVyZm9ybWFuY2UgY2hhbmdlLiAgSXQgaXMgZXNzZW50aWFsbHkgYSBtZWFzdXJlIG9mCitlZmZpY2llbmN5LCB3aXRoIHNtYWxsZXIgdmFsdWVzIGJlaW5nIG1vcmUgZWZmaWNpZW50LgorCitOZXRwZXJmIGlzIGNvZGVkIHRvIGJlIGFibGUgdG8gdXNlIG9uZSBvZiBzZXZlcmFsLCBnZW5lcmFsbHkKK3BsYXRmb3JtLXNwZWNpZmljIENQVSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudCBtZWNoYW5pc21zLiAgU2luZ2xlCitsZXR0ZXIgY29kZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgQ1BVIHBvcnRpb24gb2YgdGhlIHRlc3QgYmFubmVyIHRvCitpbmRpY2F0ZSB3aGljaCBtZWNoYW5pc20gd2FzIHVzZWQgb24gZWFjaCBvZiB0aGUgbG9jYWwgKG5ldHBlcmYpIGFuZAorcmVtb3RlIChuZXRzZXJ2ZXIpIHN5c3RlbS4KKworQXMgb2YgdGhpcyB3cml0aW5nIHRob3NlIGNvZGVzIGFyZToKKworQHRhYmxlIEBjb2RlCitAaXRlbSBVCitUaGUgQ1BVIHV0aWxpemF0aW9uIG1lYXN1cmVtZW50IG1lY2hhbmlzbSB3YXMgdW5rbm93biB0byBuZXRwZXJmIG9yCituZXRwZXJmL25ldHNlcnZlciB3YXMgbm90IGNvbXBpbGVkIHRvIGluY2x1ZGUgQ1BVIHV0aWxpemF0aW9uCittZWFzdXJlbWVudHMuIFRoZSBjb2RlIGZvciB0aGUgbnVsbCBDUFUgdXRpbGl6YXRpb24gbWVjaGFuaXNtIGNhbiBiZQorZm91bmQgaW4gQGZpbGV7c3JjL25ldGNwdV9ub25lLmN9LgorQGl0ZW0gSQorQW4gSFAtVVgtc3BlY2lmaWMgQ1BVIHV0aWxpemF0aW9uIG1lY2hhbmlzbSB3aGVyZWJ5IHRoZSBrZXJuZWwKK2luY3JlbWVudGVkIGEgcGVyLUNQVSBjb3VudGVyIGJ5IG9uZSBmb3IgZWFjaCB0cmlwIHRocm91Z2ggdGhlIGlkbGUKK2xvb3AuIFRoaXMgbWVjaGFuaXNtIHdhcyBvbmx5IGF2YWlsYWJsZSBvbiBzcGVjaWFsbHktY29tcGlsZWQgSFAtVVgKK2tlcm5lbHMgcHJpb3IgdG8gSFAtVVggMTAgYW5kIGlzIG1lbnRpb25lZCBoZXJlIG9ubHkgZm9yIHRoZSBzYWtlIG9mCitoaXN0b3JpY2FsIGNvbXBsZXRlbmVzcyBhbmQgcGVyaGFwcyBhcyBhIHN1Z2dlc3Rpb24gdG8gdGhvc2Ugd2hvIG1pZ2h0CitiZSBhbHRlcmluZyBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gV2hpbGUgcmF0aGVyIHNpbXBsZSwgcGVyaGFwcyBldmVuCitzaW1wbGlzdGljLCB0aGlzIG1lY2hhbmlzbSB3YXMgcXVpdGUgcm9idXN0IGFuZCB3YXMgbm90IGFmZmVjdGVkIGJ5Cit0aGUgY29uY2VybnMgb2Ygc3RhdGlzdGljYWwgbWV0aG9kcywgb3IgbWV0aG9kcyBhdHRlbXB0aW5nIHRvIHRyYWNrCit0aW1lIGluIGVhY2ggb2YgdXNlciwga2VybmVsLCBpbnRlcnJ1cHQgYW5kIGlkbGUgbW9kZXMgd2hpY2ggcmVxdWlyZQorcXVpdGUgY2FyZWZ1bCBhY2NvdW50aW5nLiAgSXQgY2FuIGJlIHRob3VnaHQtb2YgYXMgdGhlIGluLWtlcm5lbAordmVyc2lvbiBvZiB0aGUgbG9vcGVyIEBjb2Rle0x9IG1lY2hhbmlzbSB3aXRob3V0IHRoZSBjb250ZXh0IHN3aXRjaAorb3ZlcmhlYWQuIFRoaXMgbWVjaGFuaXNtIHJlcXVpcmVkIGNhbGlicmF0aW9uLgorQGl0ZW0gUAorQW4gSFAtVVgtc3BlY2lmaWMgQ1BVIHV0aWxpemF0aW9uIG1lY2hhbmlzbSB3aGVyZWJ5IHRoZSBrZXJuZWwKK2tlZXBzLXRyYWNrIG9mIHRpbWUgKGluIHRoZSBmb3JtIG9mIENQVSBjeWNsZXMpIHNwZW50IGluIHRoZSBrZXJuZWwKK2lkbGUgbG9vcCAoSFAtVVggMTAuMCB0byAxMS4yMyBpbmNsdXNpdmUpLCBvciB3aGVyZSB0aGUga2VybmVsIGtlZXBzCit0cmFjayBvZiB0aW1lIHNwZW50IGluIGlkbGUsIHVzZXIsIGtlcm5lbCBhbmQgaW50ZXJydXB0IHByb2Nlc3NpbmcKKyhIUC1VWCAxMS4yMyBhbmQgbGF0ZXIpLiAgVGhlIGZvcm1lciByZXF1aXJlcyBjYWxpYnJhdGlvbiwgdGhlIGxhdHRlcgorZG9lcyBub3QuICBWYWx1ZXMgaW4gZWl0aGVyIGNhc2UgYXJlIHJldHJpZXZlZCB2aWEgb25lIG9mIHRoZSBwc3RhdCgyKQorZmFtaWx5IG9mIGNhbGxzLCBoZW5jZSB0aGUgdXNlIG9mIHRoZSBsZXR0ZXIgQGNvZGV7UH0uICBUaGUgY29kZSBmb3IKK3RoZXNlIG1lY2hhbmlzbXMgaXMgZm91bmQgaW4gQGZpbGV7c3JjL25ldGNwdV9wc3RhdC5jfSBhbmQKK0BmaWxle3NyYy9uZXRjcHVfcHN0YXRuZXcuY30gcmVzcGVjdGl2ZWx5LgorQGl0ZW0gSworQSBTb2xhcmlzLXNwZWNpZmljIENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc20gd2hlcmUgYnkgdGhlIGtlcm5lbAora2VlcHMgdHJhY2sgb2YgdGlja3MgKGVnIEhaKSBzcGVudCBpbiB0aGUgaWRsZSBsb29wLiAgVGhpcyBtZXRob2QgaXMKK3N0YXRpc3RpY2FsIGFuZCBpcyBrbm93biB0byBiZSBpbmFjY3VyYXRlIHdoZW4gdGhlIGludGVycnVwdCByYXRlIGlzCithYm92ZSBlcHNpbG9uIGFzIHRpbWUgc3BlbnQgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzIGlzIG5vdCBzdWJ0cmFjdGVkCitmcm9tIGlkbGUuICBUaGUgdmFsdWUgaXMgcmV0cmlldmVkIHZpYSBhIGtzdGF0KCkgY2FsbCAtIGhlbmNlIHRoZSB1c2UKK29mIHRoZSBsZXR0ZXIgQGNvZGV7S30uICBTaW5jZSB0aGlzIG1lY2hhbmlzbSB1c2VzIHVuaXRzIG9mIHRpY2tzIChIWikKK3RoZSBjYWxpYnJhdGlvbiB2YWx1ZSBzaG91bGQgaW52YXJpYWJseSBtYXRjaCBIWi4gKEVnIDEwMCkgIFRoZSBjb2RlCitmb3IgdGhpcyBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgaW4gQGZpbGV7c3JjL25ldGNwdV9rc3RhdC5jfS4KK0BpdGVtIE0KK0EgU29sYXJpcy1zcGVjaWZpYyBtZWNoYW5pc20gYXZhaWxhYmxlIG9uIFNvbGFyaXMgMTAgYW5kIGxhdHRlciB3aGljaAordXNlcyB0aGUgbmV3IG1pY3Jvc3RhdGUgYWNjb3VudGluZyBtZWNoYW5pc21zLiAgVGhlcmUgYXJlIHR3bywgYWxhcywKK292ZXJsYXBwaW5nLCBtZWNoYW5pc21zLiAgVGhlIGZpcnN0IHRyYWNrcyBuYW5vc2Vjb25kcyBzcGVudCBpbiB1c2VyLAora2VybmVsLCBhbmQgaWRsZSBtb2Rlcy4gVGhlIHNlY29uZCBtZWNoYW5pc20gdHJhY2tzIG5hbm9zZWNvbmRzIHNwZW50CitpbiBpbnRlcnJ1cHQuICBTaW5jZSB0aGUgbWVjaGFuaXNtcyBvdmVybGFwLCBuZXRwZXJmIGdvZXMgdGhyb3VnaCBzb21lCitoYW5kLXdhdmluZyB0byB0cnkgdG8gYGBmaXgnJyB0aGUgcHJvYmxlbS4gIFNpbmNlIHRoZSBhY2N1cmFjeSBvZiB0aGUKK2hhbmR3YXZpbmcgY2Fubm90IGJlIGNvbXBsZXRlbHkgZGV0ZXJtaW5lZCwgb25lIG11c3QgcHJlc3VtZSB0aGF0Cit3aGlsZSBiZXR0ZXIgdGhhbiB0aGUgQGNvZGV7S30gbWVjaGFuaXNtLCB0aGlzIG1lY2hhbmlzbSB0b28gaXMgbm90Cit3aXRob3V0IGlzc3Vlcy4gIFRoZSB2YWx1ZXMgYXJlIHJldHJpZXZlZCB2aWEga3N0YXQoKSBjYWxscywgYnV0IHRoZQorbGV0dGVyIGNvZGUgaXMgc2V0IHRvIEBjb2Rle019IHRvIGRpc3Rpbmd1aXNoIHRoaXMgbWVjaGFuaXNtIGZyb20gdGhlCitldmVuIGxlc3MgYWNjdXJhdGUgQGNvZGV7S30gbWVjaGFuaXNtLiAgVGhlIGNvZGUgZm9yIHRoaXMgbWVjaGFuaXNtIGlzCitpbXBsZW1lbnRlZCBpbiBAZmlsZXtzcmMvbmV0Y3B1X2tzdGF0MTAuY30uCitAaXRlbSBMCitBIG1lY2hhbmlzbSBiYXNlZCBvbiBgYGxvb3Blcicnb3IgYGBzb2FrZXInJyBwcm9jZXNzZXMgd2hpY2ggc2l0IGluCit0aWdodCBsb29wcyBjb3VudGluZyBhcyBmYXN0IGFzIHRoZXkgcG9zc2libHkgY2FuLiBUaGlzIG1lY2hhbmlzbQorc3RhcnRzIGEgbG9vcGVyIHByb2Nlc3MgZm9yIGVhY2gga25vd24gQ1BVIG9uIHRoZSBzeXN0ZW0uICBUaGUgZWZmZWN0CitvZiBwcm9jZXNzb3IgaHlwZXJ0aHJlYWRpbmcgb24gdGhlIG1lY2hhbmlzbSBpcyBub3QgeWV0IGtub3duLiAgVGhpcworbWVjaGFuaXNtIGRlZmluaXRlbHkgcmVxdWlyZXMgY2FsaWJyYXRpb24uICBUaGUgY29kZSBmb3IgdGhlCitgYGxvb3BlcicnbWVjaGFuaXNtIGNhbiBiZSBmb3VuZCBpbiBAZmlsZXtzcmMvbmV0Y3B1X2xvb3Blci5jfQorQGl0ZW0gTgorQSBNaWNyb3NvZnQgV2luZG93cy1zcGVjaWZpYyBtZWNoYW5pc20sIHRoZSBjb2RlIGZvciB3aGljaCBjYW4gYmUKK2ZvdW5kIGluIEBmaWxle3NyYy9uZXRjcHVfbnRwZXJmLmN9LiAgVGhpcyBtZWNoYW5pc20gdG9vIGlzIGJhc2VkIG9uCit3aGF0IGFwcGVhcnMgdG8gYmUgYSBmb3JtIG9mIG1pY3JvLXN0YXRlIGFjY291bnRpbmcgYW5kIHJlcXVpcmVzIG5vCitjYWxpYnJhdGlvbi4gIE9uIGxhcHRvcHMsIG9yIG90aGVyIHN5c3RlbXMgd2hpY2ggbWF5IGR5bmFtaWNhbGx5IGFsdGVyCit0aGUgQ1BVIGZyZXF1ZW5jeSB0byBtaW5pbWl6ZSBwb3dlciBjb25zdW10aW9uLCBpdCBoYXMgYmVlbiBzdWdnZXN0ZWQKK3RoYXQgdGhpcyBtZWNoYW5pc20gbWF5IGJlY29tZSBzbGlnaHRseSBjb25mc2VkLCBpbiB3aGljaCBjYXNlIHVzaW5nCitCSU9TIHNldHRpbmdzIHRvIGRpc2FibGUgdGhlIHBvd2VyIHNhdmluZyB3b3VsZCBiZSBpbmRpY2F0ZWQuCisKK0BpdGVtIFMKK1RoaXMgbWVjaGFuaXNtIHVzZXMgQGZpbGV7L3Byb2Mvc3RhdH0gb24gTGludXggdG8gcmV0cmlldmUgdGltZQorKHRpY2tzKSBzcGVudCBpbiBpZGxlIG1vZGUuICBJdCBpcyB0aG91Z2h0IGJ1dCBub3Qga25vd24gdG8gYmUKK3JlYXNvbmFibHkgYWNjdXJhdGUuICBUaGUgY29kZSBmb3IgdGhpcyBtZWNoYW5pc20gY2FuIGJlIGZvdW5kIGluCitAZmlsZXtzcmMvbmV0Y3B1X3Byb2NzdGF0LmN9LgorQGl0ZW0gQworQSBtZWNoYW5pc20gc29tZXdoYXQgc2ltaWxhciB0byBAY29kZXtTfSBidXQgdXNpbmcgdGhlIHN5c2N0bCgpIGNhbGwKK29uIEJTRC1saWtlIE9wZXJhdGluZyBzeXN0ZW1zICgqQlNEIGFuZCBNYWNPUyBYKS4gIFRoZSBjb2RlIGZvciB0aGlzCittZWNoYW5pc20gY2FuIGJlIGZvdW5kIGluIEBmaWxle3NyYy9uZXRjcHVfc3lzY3RsLmN9LgorQGl0ZW0gT3RoZXJzCitPdGhlciBtZWNoYW5pc21zIGluY2x1ZGVkIGluIG5ldHBlcmYgaW4gdGhlIHBhc3QgaGF2ZSBpbmNsdWRlZCB1c2luZwordGhlIHRpbWVzKCkgYW5kIGdldHJ1c2FnZSgpIGNhbGxzLiAgVGhlc2UgY2FsbHMgYXJlIGFjdHVhbGx5IHJhdGhlcgorcG9vcmx5IHN1aXRlZCB0byB0aGUgdGFzayBvZiBtZWFzdXJpbmcgQ1BVIG92ZXJoZWFkIGZvciBuZXR3b3JraW5nIGFzCit0aGV5IHRlbmQgdG8gYmUgcHJvY2Vzcy1zcGVjaWZpYyBhbmQgbXVjaCBuZXR3b3JrLXJlbGF0ZWQgIHByb2Nlc3NpbmcKK2NhbiBoYXBwZW4gb3V0c2lkZSB0aGUgY29udGV4dCBvZiBhIHByb2Nlc3MsIGluIHBsYWNlcyB3aGVyZSBpdCBpcyBub3QKK2EgZ2l2ZW4gaXQgd2lsbCBiZSBjaGFyZ2VkIHRvIHRoZSBjb3JyZWN0LCBvciBldmVuIGEgcHJvY2Vzcy4gIFRoZXkKK2FyZSBtZW50aW9uZWQgaGVyZSBhcyBhIHdhcm5pbmcgdG8gYW55b25lIHNlZWluZyB0aG9zZSBtZWNoYW5pc21zIHVzZWQKK2luIG90aGVyIG5ldHdvcmtpbmcgYmVuY2htYXJrcy4gIFRoZXNlIG1lY2hhbmlzbXMgYXJlIG5vdCBhdmFpbGFibGUgaW4KK25ldHBlcmYgMi40LjAgYW5kIGxhdGVyLgorQGVuZCB0YWJsZQorCisKKworRm9yIG1hbnkgcGxhdGZvcm1zLCB0aGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIGNob3NlIHRoZSBiZXN0IGF2YWlsYWJsZQorQ1BVIHV0aWxpemF0aW9uIG1lY2hhbmlzbS4gIEhvd2V2ZXIsIHNvbWUgcGxhdGZvcm1zIGhhdmUgbm8KK3BhcnRpY3VsYXJseSBnb29kIG1lY2hhbmlzbXMuICBPbiB0aG9zZSBwbGF0Zm9ybXMsIGl0IGlzIHByb2JhYmx5IGJlc3QKK3RvIHVzZSB0aGUgYGBMT09QRVInJyBtZWNoYW5pc20gd2hpY2ggaXMgYmFzaWNhbGx5IHNvbWUgbnVtYmVyIG9mCitwcm9jZXNzZXMgKGFzIG1hbnkgYXMgdGhlcmUgYXJlIHByb2Nlc3NvcnMpIHNpdHRpbmcgaW4gdGlnaHQgbGl0dGxlCitsb29wcyBjb3VudGluZyBhcyBmYXN0IGFzIHRoZXkgY2FuLiAgVGhlIHJhdGUgYXQgd2hpY2ggdGhlIGxvb3BlcnMKK2NvdW50IHdoZW4gdGhlIHN5c3RlbSBpcyBiZWxpZXZlZCB0byBiZSBpZGxlIGlzIGNvbXBhcmVkIHdpdGggdGhlIHJhdGUKK3doZW4gdGhlIHN5c3RlbSBpcyBydW5uaW5nIG5ldHBlcmYgYW5kIHRoZSByYXRpbyBpcyB1c2VkIHRvIGNvbXB1dGUKK0NQVSB1dGlsaXphdGlvbi4KKworSW4gdGhlIHBhc3QsIG5ldHBlcmYgaW5jbHVkZWQgc29tZSBtZWNoYW5pc21zIHRoYXQgb25seSByZXBvcnRlZCBDUFUKK3RpbWUgY2hhcmdlZCB0byB0aGUgY2FsbGluZyBwcm9jZXNzLiAgVGhvc2UgbWVjaGFuaXNtcyBoYXZlIGJlZW4KK3JlbW92ZWQgZnJvbSBuZXRwZXJmIHZlcnNpb25zIDIuNC4wIGFuZCBsYXRlciBiZWNhdXNlIHRoZXkgYXJlCitob3BlbGVzc2x5IGluYWNjdXJhdGUuICBOZXR3b3JraW5nIGNhbiBhbmQgb2Z0ZW4gcmVzdWx0cyBpbiBDUFUgdGltZQorYmVpbmcgc3BlbnQgaW4gcGxhY2VzIC0gc3VjaCBhcyBpbnRlcnJ1cHQgY29udGV4dHMgLSB0aGF0IGRvIG5vdCBnZXQKK2NoYXJnZWQgdG8gYSBvciB0aGUgY29ycmVjdCBwcm9jZXNzLgorCitJbiBmYWN0LCB0aW1lIHNwZW50IGluIHRoZSBwcm9jZXNzaW5nIG9mIGludGVycnVwdHMgaXMgYSBjb21tb24gaXNzdWUKK2ZvciBtYW55IENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc21zLiAgSW4gcGFydGljdWxhciwgdGhlIGBgUFNUQVQnJworbWVjaGFuaXNtIHdhcyBldmVudHVhbGx5IGtub3duIHRvIGhhdmUgcHJvYmxlbXMgYWNjb3VudGluZyBmb3IgY2VydGFpbgoraW50ZXJydXB0IHRpbWUgcHJpb3IgdG8gSFAtVVggMTEuMTEgKDExaXYxKS4gIEhQLVVYIDExaXYxIGFuZCBsYXRlcgorYXJlIGtub3duIHRvIGJlIGdvb2QuIFRoZSBgYEtTVEFUJycgbWVjaGFuaXNtIGlzIGtub3duIHRvIGhhdmUKK3Byb2JsZW1zIG9uIGFsbCB2ZXJzaW9ucyBvZiBTb2xhcmlzIHVwIHRvIGFuZCBpbmNsdWRpbmcgU29sYXJpcyAxMC4KK0V2ZW4gdGhlIG1pY3Jvc3RhdGUgYWNjb3VudGluZyBhdmFpbGFibGUgdmlhIGtzdGF0IGluIFNvbGFyaXMgMTAgaGFzCitpc3N1ZXMsIHRob3VnaCBwZXJoYXBzIG5vdCBhcyBiYWQgYXMgdGhvc2Ugb2YgcHJpb3IgdmVyc2lvbnMuCisKK1RoZSAvcHJvYy9zdGF0IG1lY2hhbmlzbSB1bmRlciBMaW51eCBpcyBpbiB3aGF0IHRoZSBhdXRob3Igd291bGQKK2NvbnNpZGVyIGFuIGBgdW5jZXJ0YWluJycgY2F0ZWdvcnkgYXMgaXQgYXBwZWFycyB0byBiZSBzdGF0aXN0aWNhbCwKK3doaWNoIG1heSBhbHNvIGhhdmUgaXNzdWVzIHdpdGggdGltZSBzcGVudCBwcm9jZXNzaW5nIGludGVycnVwdHMuCisKK0luIHN1bW1hcnksIGJlIHN1cmUgdG8gYGBzYW5pdHktY2hlY2snJyB0aGUgQ1BVIHV0aWxpemF0aW9uIGZpZ3VyZXMKK3dpdGggb3RoZXIgbWVjaGFuaXNtcy4gIEhvd2V2ZXIsIHBsYXRmb3JtIHRvb2xzIHN1Y2ggYXMgdG9wLCB2bXN0YXQgb3IKK21wc3RhdCBhcmUgb2Z0ZW4gYmFzZWQgb24gdGhlIHNhbWUgbWVjaGFuaXNtcyB1c2VkIGJ5IG5ldHBlcmYuCisKK0Bub2RlIEdsb2JhbCBDb21tYW5kLWxpbmUgT3B0aW9ucywgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJ1bGsgRGF0YSBUcmFuc2ZlciwgVGhlIERlc2lnbiBvZiBOZXRwZXJmLCBUb3AKK0BjaGFwdGVyIEdsb2JhbCBDb21tYW5kLWxpbmUgT3B0aW9ucworCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGVhY2ggb2YgdGhlIGdsb2JhbCBjb21tYW5kLWxpbmUgb3B0aW9ucworYXZhaWxhYmxlIGluIHRoZSBuZXRwZXJmIGFuZCBuZXRzZXJ2ZXIgYmluYXJpZXMuICBFc3NlbnRpYWxseSwgaXQgaXMKK2FuIGV4cGFuZGVkIHZlcnNpb24gb2YgdGhlIHVzYWdlIGluZm9ybWF0aW9uIGRpc3BsYXllZCBieSBuZXRwZXJmIG9yCituZXRzZXJ2ZXIgd2hlbiBpbnZva2VkIHdpdGggdGhlIEBvcHRpb257LWh9IGdsb2JhbCBjb21tYW5kLWxpbmUKK29wdGlvbi4KKworQG1lbnUKKyogQ29tbWFuZC1saW5lIE9wdGlvbnMgU3ludGF4OjogIAorKiBHbG9iYWwgT3B0aW9uczo6ICAgICAgICAgICAgICAKK0BlbmQgbWVudQorCitAbm9kZSBDb21tYW5kLWxpbmUgT3B0aW9ucyBTeW50YXgsIEdsb2JhbCBPcHRpb25zLCBHbG9iYWwgQ29tbWFuZC1saW5lIE9wdGlvbnMsIEdsb2JhbCBDb21tYW5kLWxpbmUgT3B0aW9ucworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBDb21tYW5kLWxpbmUgT3B0aW9ucyBTeW50YXgKKworUmV2aXNpb24gMS44IG9mIG5ldHBlcmYgaW50cm9kdWNlZCBlbm91Z2ggbmV3IGZ1bmN0aW9uYWxpdHkgdG8gb3ZlcnJ1bgordGhlIEVuZ2xpc2ggYWxwaGFiZXQgZm9yIG1uZW1vbmljIGNvbW1hbmQtbGluZSBvcHRpb24gbmFtZXMsIGFuZCB0aGUKK2F1dGhvciB3YXMgbm90IGFuZCBpcyBub3QgcXVpdGUgcmVhZHkgdG8gc3dpdGNoIHRvIHRoZSBjb250ZW1wb3JhcnkKK0BvcHRpb257LS1tdW1ibGV9IHN0eWxlIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zLiAoQ2FsbCBoaW0gYSBMdWRkaXRlKS4KKworRm9yIHRoaXMgcmVhc29uLCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgd2VyZSBzcGxpdCBpbnRvIHR3byBwYXJ0cyAtCit0aGUgZmlyc3QgYXJlIHRoZSBnbG9iYWwgY29tbWFuZC1saW5lIG9wdGlvbnMuICBUaGV5IGFyZSBvcHRpb25zIHRoYXQKK2FmZmVjdCBuZWFybHkgYW55IGFuZCBldmVyeSB0ZXN0IHR5cGUgb2YgbmV0cGVyZi4gIFRoZSBzZWNvbmQgdHlwZSBhcmUKK3RoZSB0ZXN0LXNwZWNpZmljIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgQm90aCBhcmUgZW50ZXJlZCBvbiB0aGUgc2FtZQorY29tbWFuZCBsaW5lLCBidXQgdGhleSBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIG9uZSBhbm90aGVyIGJ5IGEgQGNvZGV7LS19Citmb3IgY29ycmVjdCBwYXJzaW5nLiAgR2xvYmFsIGNvbW1hbmQtbGluZSBvcHRpb25zIGNvbWUgZmlyc3QsIGZvbGxvd2VkCitieSB0aGUgQGNvZGV7LS19IGFuZCB0aGVuIHRlc3Qtc3BlY2lmaWMgY29tbWFuZC1saW5lIG9wdGlvbnMuICBJZiB0aGVyZQorYXJlIG5vIHRlc3Qtc3BlY2lmaWMgb3B0aW9ucyB0byBiZSBzZXQsIHRoZSBAY29kZXstLX0gbWF5IGJlIG9taXR0ZWQuICBJZgordGhlcmUgYXJlIG5vIGdsb2JhbCBjb21tYW5kLWxpbmUgb3B0aW9ucyB0byBiZSBzZXQsIHRlc3Qtc3BlY2lmaWMKK29wdGlvbnMgbXVzdCBzdGlsbCBiZSBwcmVjZWRlZCBieSBhIEBjb2Rley0tfS4gIEZvciBleGFtcGxlOgorQGV4YW1wbGUKK25ldHBlcmYgPGdsb2JhbD4gLS0gPHRlc3Qtc3BlY2lmaWM+CitAZW5kIGV4YW1wbGUKK3NldHMgYm90aCBnbG9iYWwgYW5kIHRlc3Qtc3BlY2lmaWMgb3B0aW9uczoKK0BleGFtcGxlCituZXRwZXJmIDxnbG9iYWw+CitAZW5kIGV4YW1wbGUKK3NldHMganVzdCBnbG9iYWwgb3B0aW9ucyBhbmQ6CitAZXhhbXBsZQorbmV0cGVyZiAtLSA8dGVzdC1zcGVjaWZpYz4KK0BlbmQgZXhhbXBsZQorc2V0cyBqdXN0IHRlc3Qtc3BlY2lmaWMgb3B0aW9ucy4KKworQG5vZGUgR2xvYmFsIE9wdGlvbnMsICAsIENvbW1hbmQtbGluZSBPcHRpb25zIFN5bnRheCwgR2xvYmFsIENvbW1hbmQtbGluZSBPcHRpb25zCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIEdsb2JhbCBPcHRpb25zCisKK0B0YWJsZSBAY29kZQorQHZpbmRleCAtYSwgR2xvYmFsCitAaXRlbSAtYSA8c2l6ZXNwZWM+CitUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGFsdGVyIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGJ1ZmZlcnMgdXNlZCBpbgordGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBjYWxscyBvbiB0aGUgbG9jYWwgc3lzdGVtLi4gQ2hhbmdpbmcgdGhlCithbGlnbm1lbnQgb2YgdGhlIGJ1ZmZlcnMgY2FuIGZvcmNlIHRoZSBzeXN0ZW0gdG8gdXNlIGRpZmZlcmVudCBjb3B5CitzY2hlbWVzLCB3aGljaCBjYW4gaGF2ZSBhIG1lYXN1cmFibGUgZWZmZWN0IG9uIHBlcmZvcm1hbmNlLiAgSWYgdGhlCitwYWdlIHNpemUgZm9yIHRoZSBzeXN0ZW0gd2VyZSA0MDk2IGJ5dGVzLCBhbmQgeW91IHdhbnQgdG8gcGFzcworcGFnZS1hbGlnbmVkIGJ1ZmZlcnMgYmVnaW5uaW5nIG9uIHBhZ2UgYm91bmRhcmllcywgeW91IGNvdWxkIHVzZQorQHNhbXB7LWEgNDA5Nn0uICBCeSBkZWZhdWx0IHRoZSB1bml0cyBhcmUgYnl0ZXMsIGJ1dCBzdWZmaXggb2YgYGBHLCcnCitgYE0sJycgb3IgYGBLJycgd2lsbCBzcGVjaWZ5IHRoZSB1bml0cyB0byBiZSAyXjMwIChHQiksIDJeMjAgKE1CKSBvcgorMl4xMCAoS0IpIHJlc3BlY3RpdmVseS4gQSBzdWZmaXggb2YgYGBnLCcnIGBgbScnIG9yIGBgaycnIHdpbGwgc3BlY2lmeQordW5pdHMgb2YgMTBeOSwgMTBeNiBvciAxMF4zIGJ5dGVzIHJlc3BlY3RpdmVseS4gW0RlZmF1bHQ6IDggYnl0ZXNdCisKK0B2aW5kZXggLUEsIEdsb2JhbAorQGl0ZW0gLUEgPHNpemVzcGVjPgorVGhpcyBvcHRpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBAb3B0aW9uey1hfSBvcHRpb24gd2l0aCB0aGUgZGlmZmVyZW5jZQorYmVpbmcgaXQgYWZmZWN0cyBhbGlnbm1lbnRzIGZvciB0aGUgcmVtb3RlIHN5c3RlbS4KKworQHZpbmRleCAtYiwgR2xvYmFsCitAaXRlbSAtYiA8c2l6ZT4KK1RoaXMgb3B0aW9uIGlzIG9ubHkgcHJlc2VudCB3aGVuIG5ldHBlcmYgaGFzIGJlZW4gY29uZmlndXJlIHdpdGgKKy0tZW5hYmxlLWludGVydmFscz15ZXMgcHJpb3IgdG8gY29tcGlsYXRpb24uICBJdCBzZXRzIHRoZSBzaXplIG9mIHRoZQorYnVyc3Qgb2Ygc2VuZCBjYWxscyBpbiBhIF9TVFJFQU0gdGVzdC4gIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCit0aGUgQG9wdGlvbnstd30gb3B0aW9uIGl0IGNhbiBjYXVzZSB0aGUgcmF0ZSBhdCB3aGljaCBkYXRhIGlzIHNlbnQgdG8KK2JlIGBgcGFjZWQuJycKKworQHZpbmRleCAtQiwgR2xvYmFsCitAaXRlbSAtQiA8c3RyaW5nPgorVGhpcyBvcHRpb24gd2lsbCBjYXVzZSBAb3B0aW9uezxzdHJpbmc+fSB0byBiZSBhcHBlbmRlZCB0byB0aGUgYnJpZWYKKyhzZWUgLVApIG91dHB1dCBvZiBuZXRwZXJmLgorCitAdmluZGV4IC1jLCBHbG9iYWwKK0BpdGVtIC1jIFtyYXRlXQorVGhpcyBvcHRpb24gd2lsbCBhc2sgdGhhdCBDUFUgdXRpbGl6YXRpb24gYW5kIHNlcnZpY2UgZGVtYW5kIGJlCitjYWxjdWxhdGVkIGZvciB0aGUgbG9jYWwgc3lzdGVtLiAgRm9yIHRob3NlIENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc21zCityZXF1aXJpbmcgY2FsaWJyYXRpb24sIHRoZSBvcHRpb25zIHJhdGUgcGFyYW1ldGVyIG1heSBiZSBzcGVjaWZpZWQgdG8KK3ByZWNsdWRlIHJ1bm5pbmcgYW5vdGhlciBjYWxpYnJhdGlvbiBzdGVwLCBzYXZpbmcgNDAgc2Vjb25kcyBvZiB0aW1lLgorRm9yIHRob3NlIENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc21zIHJlcXVpcmluZyBubyBjYWxpYnJhdGlvbiwgdGhlCitvcHRpb25hbCByYXRlIHBhcmFtZXRlciB3aWxsIGJlIHV0dGVybHkgYW5kIGNvbXBsZXRlbHkgaWdub3JlZC4KK1tEZWZhdWx0OiBubyBDUFUgbWVhc3VyZW1lbnRzXQorCitAdmluZGV4IC1DLCBHbG9iYWwKK0BpdGVtIC1DIFtyYXRlXQorVGhpcyBvcHRpb24gcmVxdWVzdHMgQ1BVIHV0aWxpemF0aW9uIGFuZCBzZXJ2aWNlIGRlbWFuZCBjYWxjdWxhdGlvbnMKK2ZvciB0aGUgcmVtb3RlIHN5c3RlbS4gIEl0IGlzIG90aGVyd2lzZSBpZGVudGljYWwgdG8gdGhlIEBvcHRpb257LWN9CitvcHRpb24uCisKK0B2aW5kZXggLWQsIEdsb2JhbAorQGl0ZW0gLWQKK0VhY2ggaW5zdGFuY2Ugb2YgdGhpcyBvcHRpb24gd2lsbCBpbmNyZWFzZSB0aGUgcXVhbnRpdHkgb2YgZGVidWdnaW5nCitvdXRwdXQgZGlzcGxheWVkIGR1cmluZyBhIHRlc3QuICBJZiB0aGUgZGVidWdnaW5nIG91dHB1dCBsZXZlbCBpcyBzZXQKK2hpZ2ggZW5vdWdoLCBpdCBtYXkgaGF2ZSBhIG1lYXN1cmFibGUgZWZmZWN0IG9uIHBlcmZvcm1hbmNlLgorRGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgbG9jYWwgc3lzdGVtIGlzIHByaW50ZWQgdG8gc3Rkb3V0LgorRGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgcmVtb3RlIHN5c3RlbSBpcyBzZW50IGJ5IGRlZmF1bHQgdG8gdGhlCitmaWxlIEBmaWxley90bXAvbmV0cGVyZi5kZWJ1Z30uIFtEZWZhdWx0OiBubyBkZWJ1Z2dpbmcgb3V0cHV0XQorCitAdmluZGV4IC1ELCBHbG9iYWwKK0BpdGVtIC1EIFtpbnRlcnZhbCx1bml0c10KK1RoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gbmV0cGVyZiBpcyBjb25maWd1cmVkIHdpdGgKKy0tZW5hYmxlLWRlbW89eWVzLiAgV2hlbiBzZXQsIGl0IHdpbGwgY2F1c2UgbmV0cGVyZiB0byBlbWl0IHBlcmlvZGljCityZXBvcnRzIG9mIHBlcmZvcm1hbmNlIGR1cmluZyB0aGUgcnVuLiAgW0B2YXJ7aW50ZXJ2YWx9LEB2YXJ7dW5pdHN9XQorZm9sbG93IHRoZSBzZW1hbnRpY3Mgb2YgYW4gb3B0aW9uc3BlYy4gSWYgc3BlY2lmaWVkLAorQHZhcntpbnRlcnZhbH0gZ2l2ZXMgdGhlIG1pbmltdW0gaW50ZXJ2YWwgaW4gcmVhbCBzZWNvbmRzLCBpdCBkb2VzIG5vdAoraGF2ZSB0byBiZSB3aG9sZSBzZWNvbmRzLiAgVGhlIEB2YXJ7dW5pdHN9IHZhbHVlIGNhbiBiZSB1c2VkIGZvciB0aGUKK2ZpcnN0IGd1ZXNzIGFzIHRvIGhvdyBtYW55IHVuaXRzIG9mIHdvcmsgKGJ5dGVzIG9yIHRyYW5zYWN0aW9ucykgbXVzdAorYmUgZG9uZSB0byB0YWtlIGF0IGxlYXN0IEB2YXJ7aW50ZXJ2YWx9IHNlY29uZHMuIElmIG9taXR0ZWQsCitAdmFye2ludGVydmFsfSBkZWZhdWx0cyB0byBvbmUgc2Vjb25kIGFuZCBAdmFye3VuaXRzfSB0byB2YWx1ZXMKK3NwZWNpZmljIHRvIGVhY2ggdGVzdCB0eXBlLgorCitAdmluZGV4IC1mLCBHbG9iYWwKK0BpdGVtIC1mIEd8TXxLfGd8bXxrCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHJlcG9ydGluZyB1bml0cyBmb3IgX1NUUkVBTQordGVzdHMuICBBcmd1bWVudHMgb2YgYGBHLCcnIGBgTSwnJyBvciBgYEsnJyB3aWxsIHNldCB0aGUgdW5pdHMgdG8KKzJeMzAsIDJeMjAgb3IgMl4xMCBieXRlcy9zIHJlc3BlY3RpdmVseSAoRUcgcG93ZXIgb2YgdHdvIEdCLCBNQiBvcgorS0IpLiAgQXJndW1lbnRzIG9mIGBgZywnJyBgYCxtJycgb3IgYGBrJycgd2lsbCBzZXQgdGhlIHVuaXRzIHRvIDEwXjksCisxMF42IG9yIDEwXjMgYml0cy9zIHJlc3BlY3RpdmVseS4gIFtEZWZhdWx0OiAnbScgb3IgMTBeNiBiaXRzL3NdCisKK0B2aW5kZXggLUYsIEdsb2JhbAorQGl0ZW0gLUYgPGZpbGxmaWxlPgorVGhpcyBvcHRpb24gc3BlY2lmaWVkIHRoZSBmaWxlIGZyb20gd2hpY2ggc2VuZCB3aGljaCBidWZmZXJzIHdpbGwgYmUKK3ByZS1maWxsZWQgLiAgV2hpbGUgdGhlIGJ1ZmZlcnMgd2lsbCBjb250YWluIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkCitmaWxlLCB0aGUgZmlsZSBpcyBub3QgZnVsbHkgdHJhbnNmZXJlZCB0byB0aGUgcmVtb3RlIHN5c3RlbSBhcyB0aGUKK3JlY2VpdmluZyBlbmQgb2YgdGhlIHRlc3Qgd2lsbCBub3Qgd3JpdGUgdGhlIGNvbnRlbnRzIG9mIHdoYXQgaXQKK3JlY2VpdmVzIHRvIGEgZmlsZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJlLWZpbGwgdGhlIHNlbmQgYnVmZmVycword2l0aCBkYXRhIGhhdmluZyBkaWZmZXJlbnQgY29tcHJlc3NpYmlsaXR5IGFuZCBzbyBpcyB1c2VmdWwgd2hlbgorbWVhc3VyaW5nIHBlcmZvcm1hbmNlIG92ZXIgbWVjaGFuaXNtcyB3aGljaCBwZXJmb3JtIGNvbXByZXNzaW9uLiAKKworV2hpbGUgb3B0aW9uYWwgZm9yIG1vc3QgdGVzdHMsIHRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIGZvciBhIHRlc3QKK3V0aWxpemluZyB0aGUgc2VuZGZpbGUoKSBvciByZWxhdGVkIGNhbGxzIGJlY2F1c2Ugc2VuZGZpbGUgdGVzdHMgbmVlZAorYSBuYW1lIG9mIGEgZmlsZSB0byByZWZlcmVuY2UuCisKK0B2aW5kZXggLWgsIEdsb2JhbAorQGl0ZW0gLWgKK1RoaXMgb3B0aW9uIGNhdXNlcyBuZXRwZXJmIHRvIGRpc3BsYXkgaXRzIHVzYWdlIHN0cmluZyBhbmQgZXhpdCB0byB0aGUKK2V4Y2x1c2lvbiBvZiBhbGwgZWxzZS4KKworQHZpbmRleCAtSCwgR2xvYmFsCitAaXRlbSAtSCA8b3B0aW9uc3BlYz4KK1RoaXMgb3B0aW9uIHdpbGwgc2V0IHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgc3lzdGVtIGFuZCBvciB0aGUgYWRkcmVzcworZmFtaWx5IHVzZWQgZm9yIHRoZSBjb250cm9sIGNvbm5lY3Rpb24uICBGb3IgZXhhbXBsZToKK0BleGFtcGxlCistSCBsaW5nZXIsNAorQGVuZCBleGFtcGxlCit3aWxsIHNldCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIHN5c3RlbSB0byBgYHRhcmR5JycgYW5kIHRlbGxzIG5ldHBlcmYgdG8KK3VzZSBJUHY0IGFkZHJlc3Npbmcgb25seS4KK0BleGFtcGxlCistSCAsNgorQGVuZCBleGFtcGxlCit3aWxsIGxlYXZlIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgc3lzdGVtIGF0IGl0cyBkZWZhdWx0LCBhbmQgcmVxdWVzdAordGhhdCBvbmx5IElQdjYgYWRkcmVzc2VzIGJlIHVzZWQgZm9yIHRoZSBjb250cm9sIGNvbm5lY3Rpb24uCitAZXhhbXBsZQorLUggbGFnCitAZW5kIGV4YW1wbGUKK3dpbGwgc2V0IHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgc3lzdGVtIHRvIGBgbGFnJycgYW5kIGxlYXZlIHRoZQorYWRkcmVzcyBmYW1pbHkgdG8gQUZfVU5TUEVDIHdoaWNoIG1lYW5zIHNlbGVjdGlvbiBvZiBJUHY0IHZzIElQdjYgaXMKK2xlZnQgdG8gdGhlIHN5c3RlbSdzIGFkZHJlc3MgcmVzb2x1dGlvbi4gIAorCitBIHZhbHVlIG9mIGBgaW5ldCcnIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIGBgNCcnIHRvIHJlcXVlc3QgSVB2NCBvbmx5CithZGRyZXNzaW5nLiAgU2ltaWxhcmx5LCBhIHZhbHVlIG9mIGBgaW5ldDYnJyBjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZgorYGA2JycgdG8gcmVxdWVzdCBJUHY2IG9ubHkgYWRkcmVzc2luZy4gIEEgdmFsdWUgb2YgYGAwJycgY2FuIGJlIHVzZWQKK3RvIHJlcXVlc3QgZWl0aGVyIElQdjQgb3IgSVB2NiBhZGRyZXNzaW5nIGFzIG5hbWUgcmVzb2x1dGlvbiBkaWN0YXRlcy4KKworQnkgZGVmYXVsdCwgdGhlIG9wdGlvbnMgc2V0IHdpdGggdGhlIGdsb2JhbCBAb3B0aW9uey1IfSBvcHRpb24gYXJlCitpbmhlcml0ZWQgYnkgdGhlIHRlc3QgZm9yIGl0cyBkYXRhIGNvbm5lY3Rpb24sIHVubGVzcyBhIHRlc3Qtc3BlY2lmaWMKK0BvcHRpb257LUh9IG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKK0lmIGEgQG9wdGlvbnstSH0gb3B0aW9uIGZvbGxvd3MgZWl0aGVyIHRoZSBAb3B0aW9uey00fSBvciBAb3B0aW9uey02fQorb3B0aW9ucywgdGhlIGZhbWlseSBzZXR0aW5nIHNwZWNpZmllZCB3aXRoIHRoZSAtSCBvcHRpb24gd2lsbCBvdmVycmlkZQordGhlIEBvcHRpb257LTR9IG9yIEBvcHRpb257LTZ9IG9wdGlvbnMgZm9yIHRoZSByZW1vdGUgYWRkcmVzcworZmFtaWx5LiBJZiBubyBhZGRyZXNzIGZhbWlseSBpcyBzcGVjaWZpZWQsIHNldHRpbmdzIGZyb20gYSBwcmV2aW91cworQG9wdGlvbnstNH0gb3IgQG9wdGlvbnstNn0gb3B0aW9uIHdpbGwgcmVtYWluLiAgSW4gYSBudXRzaGVsbCwgdGhlCitsYXN0IGV4cGxpY2l0IGdsb2JhbCBjb21tYW5kLWxpbmUgb3B0aW9uIHdpbnMuCisKK1tEZWZhdWx0OiAgYGBsb2NhbGhvc3QnJyBmb3IgdGhlIHJlbW90ZSBuYW1lL0lQIGFkZHJlc3MgYW5kIGBgMCcnIChlZworQUZfVU5TUEVDKSBmb3IgdGhlIHJlbW90ZSBhZGRyZXNzIGZhbWlseS5dCisKK0B2aW5kZXggLUksIEdsb2JhbAorQGl0ZW0gLUkgPG9wdGlvbnNwZWM+CitUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBjYWxjdWxhdGlvbiBvZiBjb25maWRlbmNlIGludGVydmFscyBhbmQgc2V0cwordGhlIGNvbmZpZGVuY2UgYW5kIHdpZHRoIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgaGF2ZSBvZiB0aGUKK29wdGlvbnNwZWMgYmVpbmcgZWl0aGVyIDk5IG9yIDk1IGZvciA5OSUgb3IgOTUlIGNvbmZpZGVuY2UKK3Jlc3BlY3RpdmVseS4gIFRoZSBzZWNvbmQgdmFsdWUgb2YgdGhlIG9wdGlvbnNwZWMgc3BlY2lmaWVzIHRoZSB3aWR0aAorb2YgdGhlIGRlc2lyZWQgY29uZmlkZW5jZSBpbnRlcnZhbC4gIEZvciBleGFtcGxlCitAZXhhbXBsZQorLUkgOTksNQorQGVuZCBleGFtcGxlCithc2tzIG5ldHBlcmYgdG8gYmUgOTklIGNvbmZpZGVudCB0aGF0IHRoZSBtZWFzdXJlZCBtZWFuIHZhbHVlcyBmb3IKK3Rocm91Z2hwdXQgYW5kIENQVSB1dGlsaXphdGlvbiBhcmUgd2l0aGluICsvLSAyLjUlIG9mIHRoZSBgYHJlYWwnJworbWVhbiB2YWx1ZXMuICBJZiB0aGUgQG9wdGlvbnstaX0gb3B0aW9uIGlzIHNwZWNpZmllZCBhbmQgdGhlCitAb3B0aW9uey1JfSBvcHRpb24gaXMgb21pdHRlZCwgdGhlIGNvbmZpZGVuY2UgZGVmYXVsdHMgdG8gOTklIGFuZCB0aGUKK3dpZHRoIHRvIDUlIChnaXZpbmcgKy8tIDIuNSUpCisKK0lmIG5ldHBlcmYgY2FsY3VsYXRlcyB0aGF0IHRoZSBkZXNpcmVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGhhdmUgbm90CitiZWVuIG1ldCwgaXQgZW1pdHMgYSBub3RpY2VhYmxlIHdhcm5pbmcgdGhhdCBjYW5ub3QgYmUgc3VwcHJlc3NlZCB3aXRoCit0aGUgQG9wdGlvbnstUH0gb3IgQG9wdGlvbnstdn0gb3B0aW9uczoKKworQGV4YW1wbGUKK25ldHBlcmYgLUggdGFyZHkuY3VwIC1pIDMgLUkgOTksNQorVENQIFNUUkVBTSBURVNUIGZyb20gMC4wLjAuMCAoMC4wLjAuMCkgcG9ydCAwIEFGX0lORVQgdG8gdGFyZHkuY3VwLmhwLmNvbSAoMTUuMjQ0LjQ0LjU4KSBwb3J0IDAgQUZfSU5FVCA6ICsvLTIuNSUgQCA5OSUgY29uZi4KKyEhISBXQVJOSU5HCishISEgRGVzaXJlZCBjb25maWRlbmNlIHdhcyBub3QgYWNoaWV2ZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQgaXRlcmF0aW9ucy4KKyEhISBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSB3YXMgdmFyaWFiaWxpdHkgaW4gdGhlIHRlc3QgZW52aXJvbm1lbnQgdGhhdAorISEhIG11c3QgYmUgaW52ZXN0aWdhdGVkIGJlZm9yZSBnb2luZyBmdXJ0aGVyLgorISEhIENvbmZpZGVuY2UgaW50ZXJ2YWxzOiBUaHJvdWdocHV0ICAgICAgOiAgNi44JQorISEhICAgICAgICAgICAgICAgICAgICAgICBMb2NhbCBDUFUgdXRpbCAgOiAgMC4wJQorISEhICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgQ1BVIHV0aWwgOiAgMC4wJQorCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAKK1NvY2tldCBTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICAgICAgICAgIAorU2l6ZSAgIFNpemUgICAgU2l6ZSAgICAgVGltZSAgICAgVGhyb3VnaHB1dCAgCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAxMF42Yml0cy9zZWMgIAorCisgMzI3NjggIDE2Mzg0ICAxNjM4NCAgICAxMC4wMSAgICAgIDQwLjIzICAgCitAZW5kIGV4YW1wbGUKKworV2hlcmUgd2Ugc2VlIHRoYXQgbmV0cGVyZiBkaWQgbm90IG1lZXQgdGhlIGRlc2lyZWQgY29udmlkZW5jZQoraW50ZXJ2YWxzLiAgSW5zdGVhZCBvZiBiZWluZyA5OSUgY29uZmlkZW50IGl0IHdhcyB3aXRoaW4gKy8tIDIuNSUgb2YKK3RoZSByZWFsIG1lYW4gdmFsdWUgb2YgdGhyb3VnaHB1dCBpdCBpcyBvbmx5IGNvbmZpZGVudCBpdCB3YXMgd2l0aGluCisrLy0zLjQlLiAgSW4gdGhpcyBleGFtcGxlLCBpbmNyZWFzaW5nIHRoZSBAb3B0aW9uey1pfSBvcHRpb24KKyhkZXNjcmliZWQgYmVsb3cpIGFuZC9vciBpbmNyZWFzaW5nIHRoZSBpdGVyYXRpb24gbGVuZ3RoIHdpdGggdGhlCitAb3B0aW9uey1sfSBvcHRpb24gbWlnaHQgcmVzb2x2ZSB0aGUgc2l0dWF0aW9uLgorCitAdmluZGV4IC1pLCBHbG9iYWwKK0BpdGVtIC1pIDxzaXplc3BlYz4KK1RoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGNhbGN1bGF0aW9uIG9mIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGFuZCBzZXRzCit0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0byBydW4gaW4gYXR0ZW1wdGluZyB0bworYWNoaWV2ZSB0aGUgZGVzaXJlZCBjb25maWRlbmNlIGludGVydmFsLiAgVGhlIGZpcnN0IHZhbHVlIHNldHMgdGhlCittYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIHRvIHJ1biwgdGhlIHNlY29uZCwgdGhlIG1pbmltdW0uICBUaGUKK21heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgc2lsZW50bHkgY2FwcGVkIGF0IDMwIGFuZCB0aGUgbWluaW11bQoraXMgc2lsZW50bHkgZmxvb3JlZCBhdCAzLiAgTmV0cGVyZiByZXBlYXRzIHRoZSBtZWFzdXJlbWVudCB0aGUgbWluaW11bQorbnVtYmVyIG9mIGl0ZXJhdGlvbnMgYW5kIGNvbnRpbnVlcyB1bnRpbCBpdCByZWFjaGVzIGVpdGhlciB0aGUKK2Rlc2lyZWQgY29uZmlkZW5jZSBpbnRlcnZhbCwgb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMsCit3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisKK0lmIHRoZSBAb3B0aW9uey1JfSBvcHRpb24gaXMgc3BlY2lmaWVkIGFuZCB0aGUgQG9wdGlvbnstaX0gb3B0aW9uCitvbWl0dGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIGlzIHNldCB0byAxMCBhbmQgdGhlIG1pbmltdW0KK3RvIHRocmVlLgorCitJZiBuZXRwZXJmIGRldGVybWluZXMgdGhhdCB0aGUgZGVzaXJlZCBjb25maWRlbmNlIGludGVydmFscyBoYXZlIG5vdAorYmVlbiBtZXQsIGl0IGVtaXRzIGEgbm90aWNlYWJsZSB3YXJuaW5nLgorCitUaGUgdG90YWwgdGVzdCB0aW1lIHdpbGwgYmUgc29tZXdoZXJlIGJldHdlZW4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0KK251bWJlciBvZiBpdGVyYXRpb25zIG11bHRpcGxpZWQgYnkgdGhlIHRlc3QgbGVuZ3RoIHN1cHBsaWVkIGJ5IHRoZQorQG9wdGlvbnstbH0gb3B0aW9uLgorCitAdmluZGV4IC1sLCBHbG9iYWwKK0BpdGVtIC1sIHRlc3RsZW4KK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBsZW5ndGggb2YgYW55IEBie29uZX0gaXRlcmF0aW9uIG9mIHRoZSByZXF1ZXN0ZWQKK3Rlc3QuICBBIHBvc2l0aXZlIHZhbHVlIGZvciBAdmFye3Rlc3RsZW59IHdpbGwgcnVuIGVhY2ggaXRlcmF0aW9uIG9mCit0aGUgdGVzdCBmb3IgYXQgbGVhc3QgQHZhcnt0ZXN0bGVufSBzZWNvbmRzLiAgQSBuZWdhdGl2ZSB2YWx1ZSBmb3IKK0B2YXJ7dGVzdGxlbn0gd2lsbCBydW4gZWFjaCBpdGVyYXRpb24gZm9yIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZgorQHZhcnt0ZXN0bGVufSB0cmFuc2FjdGlvbnMgZm9yIGEgX1JSIHRlc3Qgb3IgYnl0ZXMgZm9yIGEgX1NUUkVBTSB0ZXN0LgorQ2VydGFpbiB0ZXN0cywgbm90YWJseSB0aG9zZSB1c2luZyBVRFAgY2FuIG9ubHkgYmUgdGltZWQsIHRoZXkgY2Fubm90CitiZSBsaW1pdGVkIGJ5IHRyYW5zYWN0aW9uIG9yIGJ5dGUgY291bnQuCisKK0luIHNvbWUgc2l0dWF0aW9ucywgaW5kaXZpZHVhbCBpdGVyYXRpb25zIG9mIGEgdGVzdCBtYXkgcnVuIGZvciBsb25nZXIKK2ZvciB0aGUgbnVtYmVyIG9mIHNlY29uZHMgc3BlY2lmaWVkIGJ5IHRoZSBAb3B0aW9uey1sfSBvcHRpb24uICBJbgorcGFydGljdWxhciwgdGhpcyBtYXkgb2NjdXIgZm9yIHRob3NlIHRlc3RzIHdoZXJlIHRoZSBzb2NrZXQgYnVmZmVyCitzaXplKHMpIGFyZSBzaWduaWZpY2FudGx5IGxvbmdlciB0aGFuIHRoZSBiYW5kd2lkdGhYZGVsYXkgcHJvZHVjdCBvZgordGhlIGxpbmsocykgb3ZlciB3aGljaCB0aGUgZGF0YSBjb25uZWN0aW9uIHBhc3Nlcywgb3IgdGhvc2UgdGVzdHMKK3doZXJlIHRoZXJlIG1heSBiZSBub24tdHJpdmlhbCBudW1iZXJzIG9mIHJldHJhbnNtaXNzaW9ucy4KKworSWYgY29uZmlkZW5jZSBpbnRlcnZhbHMgYXJlIGVuYWJsZWQgdmlhIGVpdGhlciBAb3B0aW9uey1JfSBvcgorQG9wdGlvbnstaX0gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgbmV0cGVyZiB0ZXN0IHdpbGwgYmUgc29tZXdoZXJlCitiZXR3ZWVuIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGl0ZXJhdGlvbiBjb3VudCBtdWx0aXBsaWVkIGJ5CitAdmFye3Rlc3RsZW59LgorCitAdmluZGV4IC1MLCBHbG9iYWwKK0BpdGVtIC1MIDxvcHRpb25zcGVjPgorVGhpcyBvcHRpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBAb3B0aW9uey1IfSBvcHRpb24gd2l0aCB0aGUgZGlmZmVyZW5jZQorYmVpbmcgaXQgc2V0cyB0aGUgX2xvY2FsXyBob3N0bmFtZS9JUCBhbmQvb3IgYWRkcmVzcyBmYW1pbHkKK2luZm9ybWF0aW9uLiAgVGhpcyBvcHRpb24gaXMgZ2VuZXJhbGx5IHVubmVjZXNzYXJ5LCBidXQgY2FuIGJlIHVzZWZ1bAord2hlbiB5b3Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbmV0cGVyZiBjb250cm9sIGFuZCBkYXRhCitjb25uZWN0aW9ucyBnbyB2aWEgZGlmZmVyZW50IHBhdGhzLiAgSXQgY2FuIGFsc28gY29tZS1pbiBoYW5keSBpZiBvbmUKK2lzIHRyeWluZyB0byBydW4gbmV0cGVyZiB0aHJvdWdoIHRob3NlIGV2aWwsIGVuZC10by1lbmQgYnJlYWtpbmcKK3RoaW5ncyBrbm93biBhcyBmaXJld2FsbHMuCisKK1tEZWZhdWx0OiAwLjAuMC4wIChlZyBJTkFERFJfQU5ZKSBmb3IgSVB2NCBhbmQgOjowIGZvciBJUHY2IGZvciB0aGUKK2xvY2FsIG5hbWUuICBBRl9VTlNQRUMgZm9yIHRoZSBsb2NhbCBhZGRyZXNzIGZhbWlseS5dCisKK0B2aW5kZXggLW4sIEdsb2JhbAorQGl0ZW0gLW4gbnVtY3B1cworVGhpcyBvcHRpb24gdGVsbHMgbmV0cGVyZiBob3cgbWFueSBDUFVzIGl0IHNob3VsZCBhc3MtdS1tZSBhcmUgYWN0aXZlCitvbiB0aGUgc3lzdGVtIHJ1bm5pbmcgbmV0cGVyZi4gIEluIHBhcnRpY3VsYXIsIHRoaXMgaXMgdXNlZCBmb3IgdGhlCitAcmVme0NQVSBVdGlsaXphdGlvbixDUFUgdXRpbGl6YXRpb259IGFuZCBzZXJ2aWNlIGRlbWFuZCBjYWxjdWxhdGlvbnMuCitPbiBjZXJ0YWluIHN5c3RlbXMsIG5ldHBlcmYgaXMgYWJsZSB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBDUFUncworYXV0b21hZ2ljYWxseS4gVGhpcyBvcHRpb24gd2lsbCBvdmVycmlkZSBhbnkgbnVtYmVyIG5ldHBlcmYgbWlnaHQgYmUKK2FibGUgdG8gZGV0ZXJtaW5lIG9uIGl0cyBvd24uCisKK05vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIF9ub3RfIHNldCB0aGUgbnVtYmVyIG9mIENQVXMgb24gdGhlIHN5c3RlbQorcnVubmluZyBuZXRzZXJ2ZXIuICBXaGVuIG5ldHBlcmYvbmV0c2VydmVyIGNhbm5vdCBhdXRvbWFnaWNhbGx5CitkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBDUFVzIHRoYXQgY2FuIG9ubHkgYmUgc2V0IGZvciBuZXRzZXJ2ZXIgdmlhIGEKK25ldHNlcnZlciBAb3B0aW9uey1ufSBjb21tYW5kLWxpbmUgb3B0aW9uLgorCitAdmluZGV4IC1OLCBHbG9iYWwKK0BpdGVtIC1OCitUaGlzIG9wdGlvbiB0ZWxscyBuZXRwZXJmIHRvIGZvcmVnbyBlc3RhYmxpc2hpbmcgYSBjb250cm9sCitjb25uZWN0aW9uLiBUaGlzIG1ha2VzIGl0IGlzIHBvc3NpYmxlIHRvIHJ1biBzb21lIGxpbWl0ZWQgbmV0cGVyZgordGVzdHMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgbmV0c2VydmVyIG9uIHRoZSByZW1vdGUgc3lzdGVtLgorCitXaXRoIHRoaXMgb3B0aW9uIHNldCwgdGhlIHRlc3QgdG8gYmUgcnVuIGlzIHRvIGdldCBhbGwgdGhlIGFkZHJlc3NpbmcKK2luZm9ybWF0aW9uIGl0IG5lZWRzIHRvIGVzdGFibGlzaCBpdHMgZGF0YSBjb25uZWN0aW9uIGZyb20gdGhlIGNvbW1hbmQKK2xpbmUgb3IgaW50ZXJuYWwgZGVmYXVsdHMuICBJZiBub3Qgb3RoZXJ3aXNlIHNwZWNpZmllZCBieQordGVzdC1zcGVjaWZpYyBjb21tYW5kIGxpbmUgb3B0aW9ucywgdGhlIGRhdGEgY29ubmVjdGlvbiBmb3IgYQorYGBTVFJFQU0nJyBvciBgYFNFTkRGSUxFJycgdGVzdCB3aWxsIGJlIHRvIHRoZSBgYGRpc2NhcmQnJyBwb3J0LCBhbgorYGBSUicnIHRlc3Qgd2lsbCBiZSB0byB0aGUgYGBlY2hvJycgcG9ydCwgYW5kIGEgYGBNRUFSVFMnJyB0ZXN0IHdpbGwKK2JlIHRvIHRoZSBjaGFyZ2VuIHBvcnQuICAKKworVGhlIHJlc3BvbnNlIHNpemUgb2YgYW4gYGBSUicnIHRlc3Qgd2lsbCBiZSBzaWxlbnRseSBzZXQgdG8gYmUgdGhlCitzYW1lIGFzIHRoZSByZXF1ZXN0IHNpemUuICBPdGhlcndpc2UgdGhlIHRlc3Qgd291bGQgaGFuZyBpZiB0aGUKK3Jlc3BvbnNlIHNpemUgd2FzIGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0IHNpemUsIG9yIHdvdWxkIHJlcG9ydCBhbgoraW5jb3JyZWN0LCBpbmZsYXRlZCB0cmFuc2FjdGlvbiByYXRlIGlmIHRoZSByZXNwb25zZSBzaXplIHdhcyBsZXNzCit0aGFuIHRoZSByZXF1ZXN0IHNpemUuCisKK1NpbmNlIHRoZXJlIGlzIG5vIGNvbnRyb2wgY29ubmVjdGlvbiB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgaXQKK2lzIG5vdCBwb3NzaWJsZSB0byBzZXQgYGByZW1vdGUnJyBwcm9wZXJ0aWVzIHN1Y2ggYXMgc29ja2V0IGJ1ZmZlcgorc2l6ZSBhbmQgdGhlIGxpa2UgdmlhIHRoZSBuZXRwZXJmIGNvbW1hbmQgbGluZS4gTm9yIGlzIGl0IHBvc3NpYmxlIHRvCityZXRyaWV2ZSBzdWNoIGludGVyZXN0aW5nIHJlbW90ZSBpbmZvcm1hdGlvbiBhcyBDUFUgdXRpbGl6YXRpb24uCitUaGVzZSBpdGVtcyB3aWxsIGJlIHNldCB0byB2YWx1ZXMgd2hpY2ggd2hlbiBkaXNwbGF5ZWQgc2hvdWxkIG1ha2UgaXQKK2ltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCB3YXMgdGhlIGNhc2UuCisKK1RoZSBvbmx5IHdheSB0byBjaGFuZ2UgcmVtb3RlIGNoYXJhY3RlcmlzdGljcyBzdWNoIGFzIHNvY2tldCBidWZmZXIKK3NpemUgb3IgdG8gb2J0YWluIGluZm9ybWF0aW9uIHN1Y2ggYXMgQ1BVIHV0aWxpemF0aW9uIGlzIHRvIGVtcGxveQorcGxhdGZvcm0tc3BlY2lmaWMgbWV0aG9kcyBvbiB0aGUgcmVtb3RlIHN5c3RlbS4gIEZyYW5rbHksIGlmIG9uZSBoYXMKK2FjY2VzcyB0byB0aGUgcmVtb3RlIHN5c3RlbSB0byBlbXBsb3kgdGhvc2UgbWV0aG9kcyBvbmUgYXVnaHQgdG8gYmUKK2FibGUgdG8gcnVuIGEgbmV0c2VydmVyIHRoZXJlLiAgSG93ZXZlciwgdGhhdCBhYmlsaXR5IG1heSBub3QgYmUKK3ByZXNlbnQgaW4gY2VydGFpbiBgYHN1cHBvcnQnJyBzaXR1YXRpb25zLCBoZW5jZSB0aGUgYWRkaXRpb24gb2YgdGhpcworb3B0aW9uLgorCitBZGRlZCBpbiBuZXRwZXJmIDIuNC4zLgorCitAdmluZGV4IC1vLCBHbG9iYWwKK0BpdGVtIC1vIDxzaXplc3BlYz4KK1RoZSB2YWx1ZShzKSBwYXNzZWQtaW4gd2l0aCB0aGlzIG9wdGlvbiB3aWxsIGJlIHVzZWQgYXMgYW4gb2Zmc2V0CithZGRlZCB0byB0aGUgYWxpZ25tZW50IHNwZWNpZmllZCB3aXRoIHRoZSBAb3B0aW9uey1hfSBvcHRpb24uICBGb3IKK2V4YW1wbGU6CitAZXhhbXBsZQorLW8gMyAtYSA0MDk2CitAZW5kIGV4YW1wbGUKK3dpbGwgY2F1c2UgdGhlIGJ1ZmZlcnMgcGFzc2VkIHRvIHRoZSBsb2NhbCBzZW5kIGFuZCByZWNlaXZlIGNhbGxzIHRvCitiZWdpbiB0aHJlZSBieXRlcyBwYXN0IGFuIGFkZHJlc3MgYWxpZ25lZCB0byA0MDk2IGJ5dGVzLiBbRGVmYXVsdDogMAorYnl0ZXNdCisKK0B2aW5kZXggLU8sIEdsb2JhbAorQGl0ZW0gLU8gPHNpemVzcGVjPgorVGhpcyBvcHRpb24gYmVoYXZlcyBqdXN0IGFzIHRoZSBAb3B0aW9uey1vfSBvcHRpb24gYnV0IG9uIHRoZSByZW1vdGUKK3N5c3RlbSBhbmQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgQG9wdGlvbnstQX0gb3B0aW9uLiBbRGVmYXVsdDogMAorYnl0ZXNdCisKK0B2aW5kZXggLXAsIEdsb2JhbAorQGl0ZW0gLXAgPG9wdGlvbnNwZWM+CitUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIG9wdGlvbnNwZWMgcGFzc2VkLWluIHdpdGggdGhpcyBvcHRpb24gdGVsbHMKK25ldHBlcmYgdGhlIHBvcnQgbnVtYmVyIGF0IHdoaWNoIGl0IHNob3VsZCBleHBlY3QgdGhlIHJlbW90ZSBuZXRzZXJ2ZXIKK3RvIGJlIGxpc3RlbmluZyBmb3IgY29udHJvbCBjb25uZWN0aW9ucy4gIFRoZSBzZWNvbmQgdmFsdWUgb2YgdGhlCitvcHRpb25zcGVjIHdpbGwgcmVxdWVzdCBuZXRwZXJmIHRvIGJpbmQgdG8gdGhhdCBsb2NhbCBwb3J0IG51bWJlcgorYmVmb3JlIGVzdGFibGlzaGluZyB0aGUgY29udHJvbCBjb25uZWN0aW9uLiAgRm9yIGV4YW1wbGUKK0BleGFtcGxlCistcCAxMjM0NQorQGVuZCBleGFtcGxlCit0ZWxscyBuZXRwZXJmIHRoYXQgdGhlIHJlbW90ZSBuZXRzZXJ2ZXIgaXMgbGlzdGVuaW5nIG9uIHBvcnQgMTIzNDUgYW5kCitsZWF2ZXMgc2VsZWN0aW9uIG9mIHRoZSBsb2NhbCBwb3J0IG51bWJlciBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbgordXAgdG8gdGhlIGxvY2FsIFRDUC9JUCBzdGFjayB3aGVyZWFzCitAZXhhbXBsZQorLXAgLDMyMTA5CitAZW5kIGV4YW1wbGUKK2xlYXZlcyB0aGUgcmVtb3RlIG5ldHNlcnZlciBwb3J0IGF0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIDEyODY1IGFuZAorY2F1c2VzIG5ldHBlcmYgdG8gYmluZCB0byB0aGUgbG9jYWwgcG9ydCBudW1iZXIgMzIxMDkgYmVmb3JlCitjb25uZWN0aW5nIHRvIHRoZSByZW1vdGUgbmV0c2VydmVyLgorCitJbiBnZW5lcmFsLCBzZXR0aW5nIHRoZSBsb2NhbCBwb3J0IG51bWJlciBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIG9uZQoraXMgbG9va2luZyB0byBydW4gbmV0cGVyZiB0aHJvdWdoIHRob3NlIGV2aWwsIGVuZC10by1lbmQgYnJlYWtpbmcKK3RoaW5ncyBrbm93biBhcyBmaXJld2FsbHMuCisKK0B2aW5kZXggLVAsIEdsb2JhbAorQGl0ZW0gLVAgMHwxCitBIHZhbHVlIG9mIGBgMScnIGZvciB0aGUgQG9wdGlvbnstUH0gb3B0aW9uIHdpbGwgZW5hYmxlIGRpc3BsYXkgb2YKK3RoZSB0ZXN0IGJhbm5lci4gIEEgdmFsdWUgb2YgYGAwJycgd2lsbCBkaXNhYmxlIGRpc3BsYXkgb2YgdGhlIHRlc3QKK2Jhbm5lci4gT25lIG1pZ2h0IHdhbnQgdG8gZGlzYWJsZSBkaXNwbGF5IG9mIHRoZSB0ZXN0IGJhbm5lciB3aGVuCitydW5uaW5nIHRoZSBzYW1lIGJhc2ljIHRlc3QgdHlwZSAoZWcgVENQX1NUUkVBTSkgbXVsdGlwbGUgdGltZXMgaW4KK3N1Y2Nlc3Npb24gd2hlcmUgdGhlIHRlc3QgYmFubmVycyB3b3VsZCB0aGVuIHNpbXBseSBiZSByZWR1bmRhbnQgYW5kCit1bm5lY2Vzc2FyaWx5IGNsdXR0ZXIgdGhlIG91dHB1dC4gW0RlZmF1bHQ6IDEgLSBkaXNwbGF5IHRlc3QgYmFubmVyc10KKworQHZpbmRleCAtdCwgR2xvYmFsCitAaXRlbSAtdCB0ZXN0bmFtZQorVGhpcyBvcHRpb24gaXMgdXNlZCB0byB0ZWxsIG5ldHBlcmYgd2hpY2ggdGVzdCB5b3Ugd2lzaCB0byBydW4uICBBcyBvZgordGhpcyB3cml0aW5nLCB2YWxpZCB2YWx1ZXMgZm9yIEB2YXJ7dGVzdG5hbWV9IGluY2x1ZGU6CitAaXRlbWl6ZQorQGl0ZW0KK0ByZWZ7VENQX1NUUkVBTX0sIEByZWZ7VENQX01BRVJUU30sIEByZWZ7VENQX1NFTkRGSUxFfSwgQHJlZntUQ1BfUlJ9LCBAcmVme1RDUF9DUlJ9LCBAcmVme1RDUF9DQ30KK0BpdGVtCitAcmVme1VEUF9TVFJFQU19LCBAcmVme1VEUF9SUn0KK0BpdGVtCitAcmVme1hUSV9UQ1BfU1RSRUFNfSwgIEByZWZ7WFRJX1RDUF9SUn0sIEByZWZ7WFRJX1RDUF9DUlJ9LCBAcmVme1hUSV9UQ1BfQ0N9CitAaXRlbQorQHJlZntYVElfVURQX1NUUkVBTX0sIEByZWZ7WFRJX1VEUF9SUn0KK0BpdGVtCitAcmVme1NDVFBfU1RSRUFNfSwgQHJlZntTQ1RQX1JSfQorQGl0ZW0KK0ByZWZ7RExDT19TVFJFQU19LCBAcmVme0RMQ09fUlJ9LCAgQHJlZntETENMX1NUUkVBTX0sIEByZWZ7RExDTF9SUn0KK0BpdGVtCitAcmVme090aGVyIE5ldHBlcmYgVGVzdHMsTE9DX0NQVX0sIEByZWZ7T3RoZXIgTmV0cGVyZiBUZXN0cyxSRU1fQ1BVfQorQGVuZCBpdGVtaXplCitOb3QgYWxsIHRlc3RzIGFyZSBhbHdheXMgY29tcGlsZWQgaW50byBuZXRwZXJmLiAgSW4gcGFydGljdWxhciwgdGhlCitgYFhUSSwnJyBgYFNDVFAsJycgYGBVTklYLCcnIGFuZCBgYERMKicnIHRlc3RzIGFyZSBvbmx5IGluY2x1ZGVkIGluCituZXRwZXJmIHdoZW4gY29uZmlndXJlZCB3aXRoCitAb3B0aW9uey0tZW5hYmxlLVt4dGl8c2N0cHx1bml4fGRscGldPXllc30uCisKK05ldHBlcmYgb25seSBydW5zIG9uZSB0eXBlIG9mIHRlc3Qgbm8gbWF0dGVyIGhvdyBtYW55IEBvcHRpb257LXR9CitvcHRpb25zIG1heSBiZSBwcmVzZW50IG9uIHRoZSBjb21tYW5kLWxpbmUuICBUaGUgbGFzdCBAb3B0aW9uey10fQorZ2xvYmFsIGNvbW1hbmQtbGluZSBvcHRpb24gd2lsbCBkZXRlcm1pbmUgdGhlIHRlc3QgdG8gYmUKK3J1bi4gW0RlZmF1bHQ6IFRDUF9TVFJFQU1dCisKK0B2aW5kZXggLXYsIEdsb2JhbAorQGl0ZW0gLXYgdmVyYm9zaXR5CitUaGlzIG9wdGlvbiBjb250cm9scyBob3cgdmVyYm9zZSBuZXRwZXJmIHdpbGwgYmUgaW4gaXRzIG91dHB1dCwgYW5kIGlzCitvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEBvcHRpb257LVB9IG9wdGlvbi4gSWYgdGhlCit2ZXJib3NpdHkgaXMgc2V0IHRvIGEgdmFsdWUgb2YgYGAwJycgdGhlbiBvbmx5IHRoZSB0ZXN0J3MgU0ZNIChTaW5nbGUKK0ZpZ3VyZSBvZiBNZXJpdCkgaXMgZGlzcGxheWVkLiAgSWYgbG9jYWwgQHJlZntDUFUgVXRpbGl6YXRpb24sQ1BVCit1dGlsaXphdGlvbn0gaXMgcmVxdWVzdGVkIHZpYSB0aGUgQG9wdGlvbnstY30gb3B0aW9uIHRoZW4gdGhlIFNGTSBpcwordGhlIGxvY2FsIHNlcnZpY2UgZGVtYW5kLiAgT3RoZXJzaXNlLCBpZiByZW1vdGUgQ1BVIHV0aWxpemF0aW9uIGlzCityZXF1ZXN0ZWQgdmlhIHRoZSBAb3B0aW9uey1DfSBvcHRpb24gdGhlbiB0aGUgU0ZNIGlzIHRoZSByZW1vdGUKK3NlcnZpY2UgZGVtYW5kLiAgSWYgbmVpdGhlciBsb2NhbCBub3IgcmVtb3RlIENQVSB1dGlsaXphdGlvbiBhcmUKK3JlcXVlc3RlZCB0aGUgU0ZNIHdpbGwgYmUgdGhlIG1lYXN1cmVkIHRocm91Z2hwdXQgb3IgdHJhbnNhY3Rpb24gcmF0ZQorYXMgaW1wbGllZCBieSB0aGUgdGVzdCBzcGVjaWZpZWQgd2l0aCB0aGUgQG9wdGlvbnstdH0gb3B0aW9uLgorCitJZiB0aGUgdmVyYm9zaXR5IGxldmVsIGlzIHNldCB0byBgYDEnJyB0aGVuIHRoZSBgYG5vcm1hbCcnIG5ldHBlcmYKK3Jlc3VsdCBvdXRwdXQgZm9yIGVhY2ggdGVzdCBpcyBkaXNwbGF5ZWQuCisKK0lmIHRoZSB2ZXJib3NpdHkgbGV2ZWwgaXMgc2V0IHRvIGBgMicnIHRoZW4gYGBleHRyYScnIGluZm9ybWF0aW9uIHdpbGwKK2JlIGRpc3BsYXllZC4gIFRoaXMgbWF5IGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0byB0aGUgbnVtYmVyIG9mCitzZW5kIG9yIHJlY3YgY2FsbHMgbWFkZSBhbmQgdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIGJ5dGVzIHBlciBzZW5kIG9yCityZWN2IGNhbGwsIG9yIGEgaGlzdG9ncmFtIG9mIHRoZSB0aW1lIHNwZW50IGluIGVhY2ggc2VuZCgpIGNhbGwgb3IgZm9yCitlYWNoIHRyYW5zYWN0aW9uIGlmIG5ldHBlcmYgd2FzIGNvbmZpZ3VyZWQgd2l0aAorQG9wdGlvbnstLWVuYWJsZS1oaXN0b2dyYW09eWVzfS4gW0RlZmF1bHQ6IDEgLSBub3JtYWwgdmVyYm9zaXR5XQorCitAdmluZGV4IC13LCBHbG9iYWwKK0BpdGVtIC13IHRpbWUKK0lmIG5ldHBlcmYgd2FzIGNvbmZpZ3VyZWQgd2l0aCBAb3B0aW9uey0tZW5hYmxlLWludGVydmFscz15ZXN9IHRoZW4KK3RoaXMgdmFsdWUgd2lsbCBzZXQgdGhlIGludGVyLWJ1cnN0IHRpbWUgdG8gdGltZSBtaWxsaXNlY29uZHMsIGFuZCB0aGUKK0BvcHRpb257LWJ9IG9wdGlvbiB3aWxsIHNldCB0aGUgbnVtYmVyIG9mIHNlbmRzIHBlciBidXJzdC4gIFRoZSBhY3R1YWwKK2ludGVyLWJ1cnN0IHRpbWUgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0ncyB0aW1lciByZXNvbHV0aW9uLgorCitAdmluZGV4IC1XLCBHbG9iYWwKK0BpdGVtIC1XIDxzaXplc3BlYz4KK1RoaXMgb3B0aW9uIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgc2VuZCAoZmlyc3Qgb3Igb25seQordmFsdWUpIGFuZCBvciByZWNlaXZlIChzZWNvbmQgb3Igb25seSB2YWx1ZSkgYnVmZmVyIHJpbmdzLiAgVW5saWtlCitzb21lIGJlbmNobWFya3MsIG5ldHBlcmYgZG9lcyBub3QgY29udGludW91c2x5IHNlbmQgb3IgcmVjZWl2ZSBmcm9tIGEKK3NpbmdsZSBidWZmZXIuICBJbnN0ZWFkIGl0IHJvdGF0ZXMgdGhyb3VnaCBhIHJpbmcgb2YKK2J1ZmZlcnMuIFtEZWZhdWx0OiBPbmUgbW9yZSB0aGFuIHRoZSBzaXplIG9mIHRoZSBzZW5kIG9yIHJlY2VpdmUKK3NvY2tldCBidWZmZXIgc2l6ZXMgKEBvcHRpb257LXN9IGFuZC9vciBAb3B0aW9uey1TfSBvcHRpb25zKSBkaXZpZGVkCitieSB0aGUgc2VuZCBAb3B0aW9uey1tfSBvciByZWNlaXZlIEBvcHRpb257LU19IGJ1ZmZlciBzaXplCityZXNwZWN0aXZlbHldCisKK0B2aW5kZXggLTQsIEdsb2JhbAorQGl0ZW0gLTQKK1NwZWNpZnlpbmcgdGhpcyBvcHRpb24gd2lsbCBzZXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzCitmYW1pbGllcyB0byBBRl9JTkVUIC0gdGhhdCBpcyB1c2Ugb25seSBJUHY0IGFkZHJlc3NlcyBvbiB0aGUgY29udHJvbAorY29ubmVjdGlvbi4gIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBzdWJzZXF1ZW50IEBvcHRpb257LTZ9LAorQG9wdGlvbnstSH0gb3IgQG9wdGlvbnstTH0gb3B0aW9uLiAgQmFzaWNhbGx5LCB0aGUgbGFzdCBvcHRpb24KK2V4cGxpY2l0bHkgc3BlY2lmeWluZyBhbiBhZGRyZXNzIGZhbWlseSB3aW5zLiAgVW5sZXNzIG92ZXJyaWRkZW4gYnkgYQordGVzdC1zcGVjaWZpYyBvcHRpb24sIHRoaXMgd2lsbCBiZSBpbmhlcml0ZWQgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24KK2FzIHdlbGwuCisKK0B2aW5kZXggLTYsIEdsb2JhbAorQGl0ZW0gLTYKK1NwZWNpZnlpbmcgdGhpcyBvcHRpb24gd2lsbCBzZXQgYm90aCBsb2NhbCBhbmQgYW5kIHJlbW90ZSBhZGRyZXNzCitmYW1pbGllcyB0byBBRl9JTkVUNiAtIHRoYXQgaXMgdXNlIG9ubHkgSVB2NiBhZGRyZXNzZXMgb24gdGhlIGNvbnRyb2wKK2Nvbm5lY3Rpb24uICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc3Vic2VxdWVudCBAb3B0aW9uey00fSwKK0BvcHRpb257LUh9IG9yIEBvcHRpb257LUx9IG9wdGlvbi4gIEJhc2ljYWxseSwgdGhlIGxhc3QgYWRkcmVzcyBmYW1pbHkKK2V4cGxpY2l0bHkgc3BlY2lmaWVkIHdpbnMuICBVbmxlc3Mgb3ZlcnJpZGRlbiBieSBhIHRlc3Qtc3BlY2lmaWMKK29wdGlvbiwgdGhpcyB3aWxsIGJlIGluaGVyaXRlZCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiBhcyB3ZWxsLgorCitAZW5kIHRhYmxlCisKKworQG5vZGUgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJ1bGsgRGF0YSBUcmFuc2ZlciwgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIFJlcXVlc3QvUmVzcG9uc2UgLCBHbG9iYWwgQ29tbWFuZC1saW5lIE9wdGlvbnMsIFRvcAorQGNoYXB0ZXIgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJ1bGsgRGF0YSBUcmFuc2ZlcgorCitUaGUgbW9zdCBjb21tb25seSBtZWFzdXJlZCBhc3BlY3Qgb2YgbmV0d29ya2VkIHN5c3RlbSBwZXJmb3JtYW5jZSBpcwordGhhdCBvZiBidWxrIG9yIHVuaWRpcmVjdGlvbmFsIHRyYW5zZmVyIHBlcmZvcm1hbmNlLiAgRXZlcnlvbmUgd2FudHMKK3RvIGtub3cgaG93IG1hbnkgYml0cyBvciBieXRlcyBwZXIgc2Vjb25kIHRoZXkgY2FuIHB1c2ggYWNyb3NzIHRoZQorbmV0d29yay4gVGhlIG5ldHBlcmYgY29udmVudGlvbiBmb3IgYSBidWxrIGRhdGEgdHJhbnNmZXIgdGVzdCBuYW1lIGlzCit0byB0YWNrIGEgYGBfU1RSRUFNJycgc3VmZml4IHRvIGEgdGVzdCBuYW1lLgorCitAbWVudQorKiBJc3N1ZXMgaW4gQnVsayBUcmFuc2Zlcjo6ICAgICAKKyogT3B0aW9ucyBjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0czo6ICAKK0BlbmQgbWVudQorCitAbm9kZSBJc3N1ZXMgaW4gQnVsayBUcmFuc2ZlciwgT3B0aW9ucyBjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0cywgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJ1bGsgRGF0YSBUcmFuc2ZlciwgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJ1bGsgRGF0YSBUcmFuc2ZlcgorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBJc3N1ZXMgaW4gQnVsayBUcmFuc2ZlcgorCitUaGVyZSBhcmUgYW55IG51bWJlciBvZiB0aGluZ3Mgd2hpY2ggY2FuIGFmZmVjdCB0aGUgcGVyZm9ybWFuY2Ugb2YgYQorYnVsayB0cmFuc2ZlciB0ZXN0LiAgCisKK0NlcnRhaW5seSwgYWJzZW50IGNvbXByZXNzaW9uLCBidWxrLXRyYW5zZmVyIHRlc3RzIGNhbiBiZSBsaW1pdGVkIGJ5Cit0aGUgc3BlZWQgb2YgdGhlIHNsb3dlc3QgbGluayBpbiB0aGUgcGF0aCBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlCitkZXN0aW5hdGlvbi4gIElmIHRlc3Rpbmcgb3ZlciBhIGdpZ2FiaXQgbGluaywgeW91IHdpbGwgbm90IHNlZSBtb3JlCit0aGFuIGEgZ2lnYWJpdCA6KSBTdWNoIHNpdHVhdGlvbnMgY2FuIGJlIGRlc2NyaWJlZCBhcyBiZWluZworQGRmbntuZXR3b3JrLWxpbWl0ZWR9IG9yIEBkZm57TklDLWxpbWl0ZWR9LgorCitDUFUgdXRpbGl6YXRpb24gY2FuIGFsc28gYWZmZWN0IHRoZSByZXN1bHRzIG9mIGEgYnVsay10cmFuc2ZlciB0ZXN0LgorSWYgdGhlIG5ldHdvcmtpbmcgc3RhY2sgcmVxdWlyZXMgYSBjZXJ0YWluIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgb3IKK0NQVSBjeWNsZXMgcGVyIEtCIG9mIGRhdGEgdHJhbnNmZXJyZWQsIGFuZCB0aGUgQ1BVIGlzIGxpbWl0ZWQgaW4gdGhlCitudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIG9yIGN5Y2xlcyBpdCBjYW4gcHJvdmlkZSwgdGhlbiB0aGUgdHJhbnNmZXIgY2FuCitiZSBkZXNjcmliZWQgYXMgYmVpbmcgQGRmbntDUFUtYm91bmR9LiAgCisKK0EgYnVsay10cmFuc2ZlciB0ZXN0IGNhbiBiZSBDUFUgYm91bmQgZXZlbiB3aGVuIG5ldHBlcmYgcmVwb3J0cyBsZXNzCit0aGFuIDEwMCUgQ1BVIHV0aWxpemF0aW9uLiAgVGhpcyBjYW4gaGFwcGVuIG9uIGFuIE1QIHN5c3RlbSB3aGVyZSBvbmUKK29yIG1vcmUgb2YgdGhlIENQVXMgc2F0dXJhdGUgYXQgMTAwJSBidXQgb3RoZXIgQ1BVJ3MgcmVtYWluIGlkbGUuCitUeXBpY2FsbHksIGEgc2luZ2xlIGZsb3cgb2YgZGF0YSwgc3VjaCBhcyB0aGF0IGZyb20gYSBzaW5nbGUgaW5zdGFuY2UKK29mIGEgbmV0cGVyZiBfU1RSRUFNIHRlc3QgY2Fubm90IG1ha2UgdXNlIG9mIG11Y2ggbW9yZSB0aGFuIHRoZSBwb3dlcgorb2Ygb25lIENQVS4gRXhjZXB0aW9ucyB0byB0aGlzIGdlbmVyYWxseSBvY2N1ciB3aGVuIG5ldHBlcmYgYW5kL29yCituZXRzZXJ2ZXIgcnVuIG9uIENQVShzKSBvdGhlciB0aGFuIHRoZSBDUFUocykgdGFraW5nIGludGVycnVwdHMgZnJvbQordGhlIE5JQyhzKS4KKworRGlzdGFuY2UgYW5kIHRoZSBzcGVlZC1vZi1saWdodCBjYW4gYWZmZWN0IHBlcmZvcm1hbmNlIGZvciBhCitidWxrLXRyYW5zZmVyOyBvZnRlbiB0aGlzIGNhbiBiZSBtaXRpZ2F0ZWQgYnkgdXNpbmcgbGFyZ2VyIHdpbmRvd3MuCitPbmUgY29tbW9uIGxpbWl0IHRvIHRoZSBwZXJmb3JtYW5jZSBvZiBhIHRyYW5zcG9ydCB1c2luZyB3aW5kb3ctYmFzZWQKK2Zsb3ctY29udHJvbCBpczoKK0BleGFtcGxlCitUaHJvdWdocHV0IDw9IFdpbmRvd1NpemUvUm91bmRUcmlwVGltZQorQGVuZCBleGFtcGxlCitBcyB0aGUgc2VuZGVyIGNhbiBvbmx5IGhhdmUgYSB3aW5kb3cncy13b3J0aCBvZiBkYXRhIG91dHN0YW5kaW5nIG9uCit0aGUgbmV0d29yayBhdCBhbnkgb25lIHRpbWUsIGFuZCB0aGUgc29vbmVzdCB0aGUgc2VuZGVyIGNhbiByZWNlaXZlIGEKK3dpbmRvdyB1cGRhdGUgZnJvbSB0aGUgcmVjZWl2ZXIgaXMgb25lIFJvdW5kVHJpcFRpbWUgKFJUVCkuICBUQ1AgYW5kCitTQ1RQIGFyZSBleGFtcGxlcyBvZiBzdWNoIHByb3RvY29scy4KKworUGFja2V0IGxvc3NlcyBhbmQgdGhlaXIgZWZmZWN0cyBjYW4gYmUgcGFydGljdWxhcmx5IGJhZCBmb3IKK3BlcmZvcm1hbmNlLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgaWYgdGhlIHBhY2tldCBsb3NzZXMgcmVzdWx0IGluCityZXRyYW5zbWlzc2lvbiB0aW1lb3V0cyBmb3IgdGhlIHByb3RvY29sKHMpIGludm9sdmVkLiAgQnkgdGhlIHRpbWUgYQorcmV0cmFuc21pc3Npb24gdGltZW91dCBoYXMgaGFwcGVuZWQsIHRoZSBmbG93IG9yIGNvbm5lY3Rpb24gaGFzIHNhdAoraWRsZSBmb3IgYSBjb25zaWRlcmFibGUgbGVuZ3RoIG9mIHRpbWUuCisKK09uIG1hbnkgcGxhdGZvcm1zLCBzb21lIHZhcmlhbnQgb24gdGhlIEBjb21tYW5ke25ldHN0YXR9IGNvbW1hbmQgY2FuCitiZSB1c2VkIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgYWJvdXQgcGFja2V0IGxvc3MgYW5kCityZXRyYW5zbWlzc2lvbi4gRm9yIGV4YW1wbGU6CitAZXhhbXBsZQorbmV0c3RhdCAtcCB0Y3AKK0BlbmQgZXhhbXBsZQord2lsbCByZXRyaWV2ZSBUQ1Agc3RhdGlzdGljcyBvbiB0aGUgSFAtVVggT3BlcmF0aW5nIFN5c3RlbS4gIE9uIG90aGVyCitwbGF0Zm9ybXMsIGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBmb3IgYQorc3BlY2lmaWMgcHJvdG9jb2wgYW5kIHNvbWV0aGluZyBsaWtlOgorQGV4YW1wbGUKK25ldHN0YXQgLXMKK0BlbmQgZXhhbXBsZQord291bGQgYmUgdXNlZCBpbnN0ZWFkLgorCitNYW55IHRpbWVzLCBzdWNoIG5ldHdvcmsgc3RhdGlzdGljcyBhcmUga2VlcCBzaW5jZSB0aGUgdGltZSB0aGUgc3RhY2sKK3N0YXJ0ZWQsIGFuZCB3ZSBhcmUgb25seSByZWFsbHkgaW50ZXJlc3RlZCBpbiBzdGF0aXN0aWNzIGZyb20gd2hlbgorbmV0cGVyZiB3YXMgcnVubmluZy4gIEluIHN1Y2ggc2l0dWF0aW9ucyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mOgorQGV4YW1wbGUKK25ldHN0YXQgLXAgdGNwID4gYmVmb3JlCituZXRwZXJmIC10IFRDUF9tdW1ibGUuLi4KK25ldHN0YXQgLXAgdGNwID4gYWZ0ZXIKK0BlbmQgZXhhbXBsZQoraXMgaW5kaWNhdGVkLiAgVGhlCitAdXJlZntmdHA6Ly9mdHAuY3VwLmhwLmNvbS9kaXN0L25ldHdvcmtpbmcvdG9vbHMvLGJlZm9yZWFmdGVyfSB1dGlsaXR5CitjYW4gYmUgdXNlZCB0byBzdWJ0cmFjdCB0aGUgc3RhdGlzdGljcyBpbiBAZmlsZXtiZWZvcmV9IGZyb20gdGhlCitzdGF0aXN0aWNzIGluIEBmaWxle2FmdGVyfQorQGV4YW1wbGUKK2JlZm9yZWFmdGVyIGJlZm9yZSBhZnRlciA+IGRlbHRhCitAZW5kIGV4YW1wbGUKK2FuZCB0aGVuIG9uZSBjYW4gbG9vayBhdCB0aGUgc3RhdGlzdGljcyBpbiBAZmlsZXtkZWx0YX0uICBCZWZvcmVhZnRlcgoraXMgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGZvcm0gc28gb25lIGNhbiBjb21waWxlIGl0IG9uIHRoZSBwbGF0b2ZybShzKQorb2YgaW50ZXJlc3QuIAorCitXaGlsZSBpdCB3YXMgd3JpdHRlbiB3aXRoIEhQLVVYJ3MgbmV0c3RhdCBpbiBtaW5kLCB0aGUKK0B1cmVme2Z0cDovL2Z0cC5jdXAuaHAuY29tL2Rpc3QvbmV0d29ya2luZy9icmllZnMvYW5ub3RhdGVkX25ldHN0YXQudHh0LGFubm90YXRlZAorbmV0c3RhdH0gd3JpdGV1cCBtYXkgYmUgaGVscGZ1bCB3aXRoIG90aGVyIHBsYXRmb3JtcyBhcyB3ZWxsLgorCitAbm9kZSBPcHRpb25zIGNvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIHRlc3RzLCAgLCBJc3N1ZXMgaW4gQnVsayBUcmFuc2ZlciwgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJ1bGsgRGF0YSBUcmFuc2ZlcgorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBPcHRpb25zIGNvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIHRlc3RzCisKK01hbnkgYGB0ZXN0LXNwZWNpZmljJycgb3B0aW9ucyBhcmUgYWN0dWFsbHkgY29tbW9uIGFjcm9zcyB0aGUKK2RpZmZlcmVudCB0ZXN0cy4gIEZvciB0aG9zZSB0ZXN0cyBpbnZvbHZpbmcgVENQLCBVRFAgYW5kIFNDVFAsIHdoZXRoZXIKK3VzaW5nIHRoZSBCU0QgU29ja2V0cyBvciB0aGUgWFRJIGludGVyZmFjZSB0aG9zZSBjb21tb24gb3B0aW9ucworaW5jbHVkZToKKworQHRhYmxlIEBjb2RlCitAdmluZGV4IC1oLCBUZXN0LXNwZWNpZmljCitAaXRlbSAtaAorRGlzcGxheSB0aGUgdGVzdC1zdWl0ZS1zcGVjaWZpYyB1c2FnZSBzdHJpbmcgYW5kIGV4aXQuICBGb3IgYSBUQ1BfIG9yCitVRFBfIHRlc3QgdGhpcyB3aWxsIGJlIHRoZSB1c2FnZSBzdHJpbmcgZnJvbSB0aGUgc291cmNlIGZpbGUKK25ldHRlc3RfYnNkLmMuICBGb3IgYW4gWFRJXyB0ZXN0LCB0aGlzIHdpbGwgYmUgdGhlIHVzYWdlIHN0cmluZyBmcm9tCit0aGUgc291cmNlIGZpbGUgbmV0dGVzdF94dGkuYy4gIEZvciBhbiBTQ1RQIHRlc3QsIHRoaXMgd2lsbCBiZSB0aGUKK3VzYWdlIHN0cmluZyBmcm9tIHRoZSBzb3VyY2UgZmlsZSBuZXR0ZXN0X3NjdHAuYy4KKworQGl0ZW0gLUggPG9wdGlvbnNwZWM+CitOb3JtYWxseSwgdGhlIHJlbW90ZSBob3N0bmFtZXxJUCBhbmQgYWRkcmVzcyBmYW1pbHkgaW5mb3JtYXRpb24gaXMKK2luaGVyaXRlZCBmcm9tIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiAoZWcgZ2xvYmFsCitjb21tYW5kLWxpbmUgQG9wdGlvbnstSH0sIEBvcHRpb257LTR9IGFuZC9vciBAb3B0aW9uey02fSBvcHRpb25zKS4KK1RoZSB0ZXN0LXNwZWNpZmljIEBvcHRpb257LUh9IHdpbGwgb3ZlcnJpZGUgdGhvc2Ugc2V0dGluZ3MgZm9yIHRoZQorZGF0YSAoYWthIHRlc3QpIGNvbm5lY3Rpb24gb25seS4gIFNldHRpbmdzIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uCithcmUgbGVmdCB1bmNoYW5nZWQuCisKK0B2aW5kZXggLUwsIFRlc3Qtc3BlY2lmaWMKK0BpdGVtIC1MIDxvcHRpb25zcGVjPgorVGhlIHRlc3Qtc3BlY2lmaWMgQG9wdGlvbnstTH0gb3B0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgdGVzdC1zcGVjaWZpYworQG9wdGlvbnstSH0gb3B0aW9uIGV4Y2VwdCBpdCBhZmZlY3RzIHRoZSBsb2NhbCBob3N0bmFtZXxJUCBhbmQgYWRkcmVzcworZmFtaWx5IGluZm9ybWF0aW9uLiAgQXMgd2l0aCBpdHMgZ2xvYmFsIGNvbW1hbmQtbGluZSBjb3VudGVycGFydCwgdGhpcworaXMgZ2VuZXJhbGx5IG9ubHkgdXNlZnVsIHdoZW4gbWVhc3VyaW5nIHRob3VnaCB0aG9zZSBldmlsLCBlbmQtdG8tZW5kCiticmVha2luZyB0aGluZ3MgY2FsbGVkIGZpcmV3YWxscy4KKworQHZpbmRleCAtbSwgVGVzdC1zcGVjaWZpYworQGl0ZW0gLW0gYnl0ZXMKK1NldCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBhc3NlZC1pbiB0byB0aGUgYGBzZW5kJycgY2FsbHMgb2YgYQorX1NUUkVBTSB0ZXN0LiAgTm90ZSB0aGF0IHRoaXMgbWF5IGhhdmUgb25seSBhbiBpbmRpcmVjdCBlZmZlY3Qgb24gdGhlCitzaXplIG9mIHRoZSBwYWNrZXRzIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgYW5kIGNlcnRhaW4gTGF5ZXIgNAorcHJvdG9jb2xzIGRvIF9ub3RfIHByZXNlcnZlIG9yIGVuZm9yY2UgbWVzc2FnZSBib3VuZGFyaWVzLCBzbyBzZXR0aW5nCitAb3B0aW9uey1tfSBmb3IgdGhlIHNlbmQgc2l6ZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoZSByZWNlaXZlcgord2lsbCByZWNlaXZlIHRoYXQgbWFueSBieXRlcyBhdCBhbnkgb25lIHRpbWUuIEJ5IGRlZmF1bHQgdGhlIHVuaXRzIGFyZQorYnl0ZXMsIGJ1dCBzdWZmaXggb2YgYGBHLCcnIGBgTSwnJyBvciBgYEsnJyB3aWxsIHNwZWNpZnkgdGhlIHVuaXRzIHRvCitiZSAyXjMwIChHQiksIDJeMjAgKE1CKSBvciAyXjEwIChLQikgcmVzcGVjdGl2ZWx5LiBBIHN1ZmZpeCBvZiBgYGcsJycKK2BgbScnIG9yIGBgaycnIHdpbGwgc3BlY2lmeSB1bml0cyBvZiAxMF45LCAxMF42IG9yIDEwXjMgYnl0ZXMKK3Jlc3BlY3RpdmVseS4gRm9yIGV4YW1wbGU6CitAZXhhbXBsZQorQGNvZGV7LW0gMzJLfQorQGVuZCBleGFtcGxlCit3aWxsIHNldCB0aGUgc2l6ZSB0byAzMktCIG9yIDMyNzY4IGJ5dGVzLiBbRGVmYXVsdDogdGhlIGxvY2FsIHNlbmQKK3NvY2tldCBidWZmZXIgc2l6ZSBmb3IgdGhlIGNvbm5lY3Rpb24gLSBlaXRoZXIgdGhlIHN5c3RlbSdzIGRlZmF1bHQgb3IKK3RoZSB2YWx1ZSBzZXQgdmlhIHRoZSBAb3B0aW9uey1zfSBvcHRpb24uXQorCitAdmluZGV4IC1NLCBUZXN0LXNwZWNpZmljCitAaXRlbSAtTSBieXRlcworU2V0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcGFzc2VkLWluIHRvIHRoZSBgYHJlY3YnJyBjYWxscyBvZiBhCitfU1RSRUFNIHRlc3QuICBUaGlzIHdpbGwgYmUgYW4gdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBieXRlcworcmVjZWl2ZWQgcGVyIHJlY2VpdmUgY2FsbC4gQnkgZGVmYXVsdCB0aGUgdW5pdHMgYXJlIGJ5dGVzLCBidXQgc3VmZml4CitvZiBgYEcsJycgYGBNLCcnIG9yIGBgSycnIHdpbGwgc3BlY2lmeSB0aGUgdW5pdHMgdG8gYmUgMl4zMCAoR0IpLCAyXjIwCisoTUIpIG9yIDJeMTAgKEtCKSByZXNwZWN0aXZlbHkuICBBIHN1ZmZpeCBvZiBgYGcsJycgYGBtJycgb3IgYGBrJycKK3dpbGwgc3BlY2lmeSB1bml0cyBvZiAxMF45LCAxMF42IG9yIDEwXjMgYnl0ZXMgcmVzcGVjdGl2ZWx5LiBGb3IKK2V4YW1wbGU6CitAZXhhbXBsZQorQGNvZGV7LU0gMzJLfQorQGVuZCBleGFtcGxlCit3aWxsIHNldCB0aGUgc2l6ZSB0byAzMktCIG9yIDMyNzY4IGJ5dGVzLiBbRGVmYXVsdDogdGhlIHJlbW90ZSByZWNlaXZlCitzb2NrZXQgYnVmZmVyIHNpemUgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24gLSBlaXRoZXIgdGhlIHN5c3RlbSdzCitkZWZhdWx0IG9yIHRoZSB2YWx1ZSBzZXQgdmlhIHRoZSBAb3B0aW9uey1TfSBvcHRpb24uXQorCitAdmluZGV4IC1QLCBUZXN0LXNwZWNpZmljCitAaXRlbSAtUCA8b3B0aW9uc3BlYz4KK1NldCB0aGUgbG9jYWwgYW5kL29yIHJlbW90ZSBwb3J0IG51bWJlcnMgZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24uCisKK0B2aW5kZXggLXMsIFRlc3Qtc3BlY2lmaWMKK0BpdGVtIC1zIDxzaXplc3BlYz4KK1RoaXMgb3B0aW9uIHNldHMgdGhlIGxvY2FsIHNlbmQgYW5kIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplcyBmb3IKK3RoZSBkYXRhIGNvbm5lY3Rpb24gdG8gdGhlIHZhbHVlKHMpIHNwZWNpZmllZC4gIE9mdGVuLCB0aGlzIHdpbGwKK2FmZmVjdCB0aGUgYWR2ZXJ0aXNlZCBhbmQvb3IgZWZmZWN0aXZlIFRDUCBvciBvdGhlciB3aW5kb3csIGJ1dCBvbgorc29tZSBwbGF0Zm9ybXMgaXQgbWF5IG5vdC4gQnkgZGVmYXVsdCB0aGUgdW5pdHMgYXJlIGJ5dGVzLCBidXQgc3VmZml4CitvZiBgYEcsJycgYGBNLCcnIG9yIGBgSycnIHdpbGwgc3BlY2lmeSB0aGUgdW5pdHMgdG8gYmUgMl4zMCAoR0IpLCAyXjIwCisoTUIpIG9yIDJeMTAgKEtCKSByZXNwZWN0aXZlbHkuICBBIHN1ZmZpeCBvZiBgYGcsJycgYGBtJycgb3IgYGBrJycKK3dpbGwgc3BlY2lmeSB1bml0cyBvZiAxMF45LCAxMF42IG9yIDEwXjMgYnl0ZXMgcmVzcGVjdGl2ZWx5LiBGb3IKK2V4YW1wbGU6CitAZXhhbXBsZQorQGNvZGV7LXMgMTI4S30KK0BlbmQgZXhhbXBsZQorV2lsbCByZXF1ZXN0IHRoZSBsb2NhbCBzZW5kIGFuZCByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZXMgdG8gYmUKKzEyOEtCIG9yIDEzMTA3MiBieXRlcy4gCisKK1doaWxlIHRoZSBoaXN0b3JpYyBleHBlY3RhdGlvbiBpcyB0aGF0IHNldHRpbmcgdGhlIHNvY2tldCBidWZmZXIgc2l6ZQoraGFzIGEgZGlyZWN0IGVmZmVjdCBvbiBzYXkgdGhlIFRDUCB3aW5kb3csIHRvZGF5IHRoYXQgbWF5IG5vdCBob2xkCit0cnVlIGZvciBhbGwgc3RhY2tzLiBGdXJ0aGVyLCB3aGlsZSB0aGUgaGlzdG9yaWMgZXhwZWN0YXRpb24gaXMgdGhhdAordGhlIHZhbHVlIHNwZWNpZmllZCBpbiBhIHNldHNvY2tvcHQoKSBjYWxsIHdpbGwgYmUgdGhlIHZhbHVlIHJldHVybmVkCit2aWEgYSBnZXRzb2Nrb3B0KCkgY2FsbCwgYXQgbGVhc3Qgb25lIHN0YWNrIGlzIGtub3duIHRvIGRlbGliZXJhdGVseQoraWdub3JlIGhpc3RvcnkuICBXaGVuIHJ1bm5pbmcgdW5kZXIgV2luZG93cyBhIHZhbHVlIG9mIDAgbWF5IGJlIHVzZWQKK3doaWNoIHdpbGwgYmUgYW4gaW5kaWNhdGlvbiB0byB0aGUgc3RhY2sgdGhlIHVzZXIgd2FudHMgdG8gZW5hYmxlIGEKK2Zvcm0gb2YgY29weSBhdm9pZGFuY2UuIFtEZWZhdWx0OiAtMSAtIHVzZSB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzb2NrZXQKK2J1ZmZlciBzaXplc10KKworQHZpbmRleCAtUyBUZXN0LXNwZWNpZmljCitAaXRlbSAtUyA8c2l6ZXNwZWM+CitUaGlzIG9wdGlvbiBzZXRzIHRoZSByZW1vdGUgc2VuZCBhbmQvb3IgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemVzCitmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiB0byB0aGUgdmFsdWUocykgc3BlY2lmaWVkLiAgT2Z0ZW4sIHRoaXMKK3dpbGwgYWZmZWN0IHRoZSBhZHZlcnRpc2VkIGFuZC9vciBlZmZlY3RpdmUgVENQIG9yIG90aGVyIHdpbmRvdywgYnV0CitvbiBzb21lIHBsYXRmb3JtcyBpdCBtYXkgbm90LiBCeSBkZWZhdWx0IHRoZSB1bml0cyBhcmUgYnl0ZXMsIGJ1dAorc3VmZml4IG9mIGBgRywnJyBgYE0sJycgb3IgYGBLJycgd2lsbCBzcGVjaWZ5IHRoZSB1bml0cyB0byBiZSAyXjMwCisoR0IpLCAyXjIwIChNQikgb3IgMl4xMCAoS0IpIHJlc3BlY3RpdmVseS4gIEEgc3VmZml4IG9mIGBgZywnJyBgYG0nJworb3IgYGBrJycgd2lsbCBzcGVjaWZ5IHVuaXRzIG9mIDEwXjksIDEwXjYgb3IgMTBeMyBieXRlcyByZXNwZWN0aXZlbHkuCitGb3IgZXhhbXBsZToKK0BleGFtcGxlCitAY29kZXstcyAxMjhLfQorQGVuZCBleGFtcGxlCitXaWxsIHJlcXVlc3QgdGhlIGxvY2FsIHNlbmQgYW5kIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplcyB0byBiZQorMTI4S0Igb3IgMTMxMDcyIGJ5dGVzLiAKKworV2hpbGUgdGhlIGhpc3RvcmljIGV4cGVjdGF0aW9uIGlzIHRoYXQgc2V0dGluZyB0aGUgc29ja2V0IGJ1ZmZlciBzaXplCitoYXMgYSBkaXJlY3QgZWZmZWN0IG9uIHNheSB0aGUgVENQIHdpbmRvdywgdG9kYXkgdGhhdCBtYXkgbm90IGhvbGQKK3RydWUgZm9yIGFsbCBzdGFja3MuICBGdXJ0aGVyLCB3aGlsZSB0aGUgaGlzdG9yaWMgZXhwZWN0YXRpb24gaXMgdGhhdAordGhlIHZhbHVlIHNwZWNpZmllZCBpbiBhIHNldHNvY2tvcHQoKSBjYWxsIHdpbGwgYmUgdGhlIHZhbHVlIHJldHVybmVkCit2aWEgYSBnZXRzb2Nrb3B0KCkgY2FsbCwgYXQgbGVhc3Qgb25lIHN0YWNrIGlzIGtub3duIHRvIGRlbGliZXJhdGVseQoraWdub3JlIGhpc3RvcnkuICBXaGVuIHJ1bm5pbmcgdW5kZXIgV2luZG93cyBhIHZhbHVlIG9mIDAgbWF5IGJlIHVzZWQKK3doaWNoIHdpbGwgYmUgYW4gaW5kaWNhdGlvbiB0byB0aGUgc3RhY2sgdGhlIHVzZXIgd2FudHMgdG8gZW5hYmxlIGEKK2Zvcm0gb2YgY29weSBhdm9pZGFuY2UuIFtEZWZhdWx0OiAtMSAtIHVzZSB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzb2NrZXQKK2J1ZmZlciBzaXplc10KKworQHZpbmRleCAtNCwgVGVzdC1zcGVjaWZpYworQGl0ZW0gLTQKK1NldCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzIGZhbWlseSBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiB0bworQUZfSU5FVCAtIGllIHVzZSBJUHY0IGFkZHJlc3Npbmcgb25seS4gIEp1c3QgYXMgd2l0aCB0aGVpciBnbG9iYWwKK2NvbW1hbmQtbGluZSBjb3VudGVycGFydHMgdGhlIGxhc3Qgb2YgdGhlIEBvcHRpb257LTR9LCBAb3B0aW9uey02fSwKK0BvcHRpb257LUh9IG9yIEBvcHRpb257LUx9IG9wdGlvbiB3aW5zIGZvciB0aGVpciByZXNwZWN0aXZlIGFkZHJlc3MKK2ZhbWlsaWVzLgorCitAdmluZGV4IC02LCBUZXN0LXNwZWNpZmljCitAaXRlbSAtNgorVGhpcyBvcHRpb24gaXMgaWRlbnRpY2FsIHRvIGl0cyBAb3B0aW9uey00fSBjb3VzaW4sIGJ1dCByZXF1ZXN0cyBJUHY2CithZGRyZXNzZXMgZm9yIHRoZSBsb2NhbCBhbmQgcmVtb3RlIGVuZHMgb2YgdGhlIGRhdGEgY29ubmVjdGlvbi4KKworQGVuZCB0YWJsZQorCisKK0BtZW51CisqIFRDUF9TVFJFQU06OiAgICAgICAgICAgICAgICAgIAorKiBUQ1BfTUFFUlRTOjogICAgICAgICAgICAgICAgICAKKyogVENQX1NFTkRGSUxFOjogICAgICAgICAgICAgICAgCisqIFVEUF9TVFJFQU06OiAgICAgICAgICAgICAgICAgIAorKiBYVElfVENQX1NUUkVBTTo6ICAgICAgICAgICAgICAKKyogWFRJX1VEUF9TVFJFQU06OiAgICAgICAgICAgICAgCisqIFNDVFBfU1RSRUFNOjogICAgICAgICAgICAgICAgIAorKiBETENPX1NUUkVBTTo6ICAgICAgICAgICAgICAgICAKKyogRExDTF9TVFJFQU06OiAgICAgICAgICAgICAgICAgCisqIFNUUkVBTV9TVFJFQU06OiAgICAgICAgICAgICAgIAorKiBER19TVFJFQU06OiAgICAgICAgICAgICAgICAgICAKK0BlbmQgbWVudQorCitAbm9kZSBUQ1BfU1RSRUFNLCBUQ1BfTUFFUlRTLCBPcHRpb25zIGNvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIHRlc3RzLCBPcHRpb25zIGNvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIHRlc3RzCitAc3Vic2VjdGlvbiBUQ1BfU1RSRUFNCisKK1RoZSBUQ1BfU1RSRUFNIHRlc3QgaXMgdGhlIGRlZmF1bHQgdGVzdCBpbiBuZXRwZXJmLiAgSXQgaXMgcXVpdGUKK3NpbXBsZSwgdHJhbnNmZXJyaW5nIHNvbWUgcXVhbnRpdHkgb2YgZGF0YSBmcm9tIHRoZSBzeXN0ZW0gcnVubmluZworbmV0cGVyZiB0byB0aGUgc3lzdGVtIHJ1bm5pbmcgbmV0c2VydmVyLiAgV2hpbGUgdGltZSBzcGVudAorZXN0YWJsaXNoaW5nIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgdGhyb3VnaHB1dAorY2FsY3VsYXRpb24sIHRpbWUgc3BlbnQgZmx1c2hpbmcgdGhlIGxhc3Qgb2YgdGhlIGRhdGEgdG8gdGhlIHJlbW90ZSBhdAordGhlIGVuZCBvZiB0aGUgdGVzdCBpcy4gIFRoaXMgaXMgaG93IG5ldHBlcmYga25vd3MgdGhhdCBhbGwgdGhlIGRhdGEKK2l0IHNlbnQgd2FzIHJlY2VpdmVkIGJ5IHRoZSByZW1vdGUuICBJbiBhZGRpdGlvbiB0byB0aGUgQHJlZntPcHRpb25zCitjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0cyxvcHRpb25zIGNvbW1vbiB0byBTVFJFQU0gdGVzdHN9LCB0aGUKK2ZvbGxvd2luZyB0ZXN0LXNwZWNpZmljIG9wdGlvbnMgY2FuIGJlIGluY2x1ZGVkIHRvIHBvc3NpYmx5IGFsdGVyIHRoZQorYmVoYXZpb3Igb2YgdGhlIHRlc3Q6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gLUMKK1RoaXMgb3B0aW9uIHdpbGwgc2V0IFRDUF9DT1JLIG1vZGUgb24gdGhlIGRhdGEgY29ubmVjdGlvbiBvbiB0aG9zZQorc3lzdGVtcyB3aGVyZSBUQ1BfQ09SSyBpcyBkZWZpbmVkICh0eXBpY2FsbHkgTGludXgpLiAgQSBmdWxsCitkZXNjcmlwdGlvbiBvZiBUQ1BfQ09SSyBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLCBidXQgaW4gYQorbnV0c2hlbGwgaXQgZm9yY2VzIHN1Yi1NU1Mgc2VuZHMgdG8gYmUgYnVmZmVyZWQgc28gZXZlcnkgc2VnbWVudCBzZW50CitpcyBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSB1bmxlc3MgdGhlIGFwcGxpY2F0aW9uIHBlcmZvcm1zIGFuCitleHBsaWNpdCBmbHVzaCBvcGVyYXRpb24gb3IgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLiAgQXQgcHJlc2VudAorbmV0cGVyZiBkb2VzIG5vdCBwZXJmb3JtIGFueSBleHBsaWNpdCBmbHVzaCBvcGVyYXRpb25zLiAgU2V0dGluZworVENQX0NPUksgbWF5IGltcHJvdmUgdGhlIGJpdHJhdGUgb2YgdGVzdHMgd2hlcmUgdGhlIGBgc2VuZCBzaXplJycKKyhAb3B0aW9uey1tfSBvcHRpb24pIGlzIHNtYWxsZXIgdGhhbiB0aGUgTVNTLiAgSXQgc2hvdWxkIGFsc28gaW1wcm92ZQorKG1ha2Ugc21hbGxlcikgdGhlIHNlcnZpY2UgZGVtYW5kLgorCitUaGUgTGludXggdGNwKDcpIG1hbnBhZ2Ugc3RhdGVzIHRoYXQgVENQX0NPUksgY2Fubm90IGJlIHVzZWQgaW4KK2Nvbmp1bmN0aW9uIHdpdGggVENQX05PREVMQVkgKHNldCB2aWEgdGhlIEBvcHRpb257LWR9IG9wdGlvbiksIGhvd2V2ZXIKK25ldHBlcmYgZG9lcyBub3QgdmFsaWRhdGUgY29tbWFuZC1saW5lIG9wdGlvbnMgdG8gZW5mb3JjZSB0aGF0LgorCitAaXRlbSAtRAorVGhpcyBvcHRpb24gd2lsbCBzZXQgVENQX05PREVMQVkgb24gdGhlIGRhdGEgY29ubmVjdGlvbiBvbiB0aG9zZQorc3lzdGVtcyB3aGVyZSBUQ1BfTk9ERUxBWSBpcyBkZWZpbmVkLiAgVGhpcyBkaXNhYmxlcyBzb21ldGhpbmcga25vd24KK2FzIHRoZSBOYWdsZSBBbGdvcml0aG0sIHdoaWNoIGlzIGludGVuZGVkIHRvIG1ha2UgdGhlIHNlZ21lbnRzIFRDUAorc2VuZHMgYXMgbGFyZ2UgYXMgcmVhc29uYWJseSBwb3NzaWJsZS4gIFNldHRpbmcgVENQX05PREVMQVkgZm9yIGEKK1RDUF9TVFJFQU0gdGVzdCBzaG91bGQgZWl0aGVyIGhhdmUgbm8gZWZmZWN0IHdoZW4gdGhlIHNlbmQgc2l6ZQorKEBvcHRpb257LW19IG9wdGlvbikgaXMgbGFyZ2VyIHRoYW4gdGhlIE1TUyBvciB3aWxsIGRlY3JlYXNlIHJlcG9ydGVkCitiaXRyYXRlIGFuZCBpbmNyZWFzZSBzZXJ2aWNlIGRlbWFuZCB3aGVuIHRoZSBzZW5kIHNpemUgaXMgc21hbGxlciB0aGFuCit0aGUgTVNTLiAgVGhpcyBzdGVtcyBmcm9tIFRDUF9OT0RFTEFZIGNhdXNpbmcgZWFjaCBzdWItTVNTIHNlbmQgdG8gYmUKK2l0cyBvd24gVENQIHNlZ21lbnQgcmF0aGVyIHRoYW4gYmVpbmcgYWdncmVnYXRlZCB3aXRoIG90aGVyIHNtYWxsCitzZW5kcy4gIFRoaXMgbWVhbnMgbW9yZSB0cmlwcyB1cCBhbmQgZG93biB0aGUgcHJvdG9jb2wgc3RhY2sgcGVyIEtCIG9mCitkYXRhIHRyYW5zZmVycmVkLCB3aGljaCBtZWFucyBncmVhdGVyIENQVSB1dGlsaXphdGlvbi4KKworSWYgc2V0dGluZyBUQ1BfTk9ERUxBWSB3aXRoIEBvcHRpb257LUR9IGFmZmVjdHMgdGhyb3VnaHB1dCBhbmQvb3IKK3NlcnZpY2UgZGVtYW5kIGZvciB0ZXN0cyB3aGVyZSB0aGUgc2VuZCBzaXplIChAb3B0aW9uey1tfSkgaXMgbGFyZ2VyCit0aGFuIHRoZSBNU1MgaXQgc3VnZ2VzdHMgdGhlIFRDUC9JUCBzdGFjaydzIGltcGxlbWVudGF0aW9uIG9mIHRoZQorTmFnbGUgQWxnb3JpdGhtIF9tYXlfIGJlIGJyb2tlbiwgcGVyaGFwcyBpbnRlcnByZXRpbmcgdGhlIE5hZ2xlCitBbGdvcml0aG0gb24gYSBzZWdtZW50IGJ5IHNlZ21lbnQgYmFzaXMgcmF0aGVyIHRoYW4gdGhlIHByb3BlciB1c2VyCitzZW5kIGJ5IHVzZXIgc2VuZCBiYXNpcy4gIEhvd2V2ZXIsIGEgYmV0dGVyIHRlc3Qgb2YgdGhpcyBjYW4gYmUKK2FjaGlldmVkIHdpdGggdGhlIEByZWZ7VENQX1JSfSB0ZXN0LgorCitAZW5kIHRhYmxlCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIGJhc2ljIFRDUF9TVFJFQU0gdGVzdCwgaW4gdGhpcyBjYXNlIGZyb20gYQorRGViaWFuIExpbnV4ICgyLjYga2VybmVsKSBzeXN0ZW0gdG8gYW4gSFAtVVggMTFpdjIgKEhQLVVYIDExLjIzKQorc3lzdGVtOgorCitAZXhhbXBsZQorJCBuZXRwZXJmIC1IIGxhZworVENQIFNUUkVBTSBURVNUIGZyb20gMC4wLjAuMCAoMC4wLjAuMCkgcG9ydCAwIEFGX0lORVQgdG8gbGFnLmhwbC5ocC5jb20gKDE1LjQuODkuMjE0KSBwb3J0IDAgQUZfSU5FVAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICAKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgMTBeNmJpdHMvc2VjICAKKworIDMyNzY4ICAxNjM4NCAgMTYzODQgICAgMTAuMDAgICAgICA4MC40MiAgIAorQGVuZCBleGFtcGxlCisKK1dlIHNlZSB0aGF0IHRoZSBkZWZhdWx0IHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplIGZvciB0aGUgcmVjZWl2ZXIKKyhsYWcgLSBIUC1VWCAxMS4yMykgaXMgMzI3NjggYnl0ZXMsIGFuZCB0aGUgZGVmYXVsdCBzb2NrZXQgc2VuZCBidWZmZXIKK3NpemUgZm9yIHRoZSBzZW5kZXIgKERlYmlhbiAyLjYga2VybmVsKSBpcyAxNjM4NCBieXRlcy4gIFRocm91Z3B1dCBpcworZXhwcmVzc2VkIGFzIDEwXjYgKGFrYSBNZWdhKSBiaXRzIHBlciBzZWNvbmQsIGFuZCB0aGUgdGVzdCByYW4gZm9yIDEwCitzZWNvbmRzLiAgSVB2NCBhZGRyZXNzZXMgKEFGX0lORVQpIHdlcmUgdXNlZC4KKworQG5vZGUgVENQX01BRVJUUywgVENQX1NFTkRGSUxFLCBUQ1BfU1RSRUFNLCBPcHRpb25zIGNvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIHRlc3RzCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzdWJzZWN0aW9uIFRDUF9NQUVSVFMKKworQSBUQ1BfTUFFUlRTIChNQUVSVFMgaXMgU1RSRUFNIGJhY2t3YXJkcykgdGVzdCBpcyBgYGp1c3QgbGlrZScnIGEKK0ByZWZ7VENQX1NUUkVBTX0gdGVzdCBleGNlcHQgdGhlIGRhdGEgZmxvd3MgZnJvbSB0aGUgbmV0c2VydmVyIHRvIHRoZQorbmV0cGVyZi4gVGhlIGdsb2JhbCBjb21tYW5kLWxpbmUgQG9wdGlvbnstRn0gb3B0aW9uIGlzIGlnbm9yZWQgZm9yCit0aGlzIHRlc3QgdHlwZS4gIFRoZSB0ZXN0LXNwZWNpZmljIGNvbW1hbmQtbGluZSBAb3B0aW9uey1DfSBvcHRpb24gaXMKK2lnbm9yZWQgZm9yIHRoaXMgdGVzdCB0eXBlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBUQ1BfTUFFUlRTIHRlc3QgYmV0d2VlbiB0aGUgc2FtZSB0d28gc3lzdGVtcworYXMgaW4gdGhlIGV4YW1wbGUgZm9yIHRoZSBAcmVme1RDUF9TVFJFQU19IHRlc3QuICBUaGlzIHRpbWUgd2UgcmVxdWVzdAorbGFyZ2VyIHNvY2tldCBidWZmZXJzIHdpdGggQG9wdGlvbnstc30gYW5kIEBvcHRpb257LVN9IG9wdGlvbnM6CisKK0BleGFtcGxlCiskIG5ldHBlcmYgLUggbGFnIC10IFRDUF9NQUVSVFMgLS0gLXMgMTI4SyAtUyAxMjhLCitUQ1AgTUFFUlRTIFRFU1QgZnJvbSAwLjAuMC4wICgwLjAuMC4wKSBwb3J0IDAgQUZfSU5FVCB0byBsYWcuaHBsLmhwLmNvbSAoMTUuNC44OS4yMTQpIHBvcnQgMCBBRl9JTkVUCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAKK1NvY2tldCBTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICAgICAgICAgIAorU2l6ZSAgIFNpemUgICAgU2l6ZSAgICAgVGltZSAgICAgVGhyb3VnaHB1dCAgCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAxMF42Yml0cy9zZWMgIAorCisyMjExODQgMTMxMDcyIDEzMTA3MiAgICAxMC4wMyAgICAgIDgxLjE0ICAgCitAZW5kIGV4YW1wbGUKKworV2hlcmUgd2Ugc2VlIHRoYXQgTGludXgsIHVubGlrZSBIUC1VWCwgbWF5IG5vdCByZXR1cm4gdGhlIHNhbWUgdmFsdWUKK2luIGEgZ2V0c29ja29wdCgpIGFzIHdhcyByZXF1ZXN0ZWQgaW4gdGhlIHByaW9yIHNldHNvY2tvcHQoKS4KKworVGhpcyB0ZXN0IGlzIGluY2x1ZGVkIG1vcmUgZm9yIGJlbmNobWFya2luZyBjb252ZW5pZW5jZSB0aGFuIGFueXRoaW5nCitlbHNlLgorCitAbm9kZSBUQ1BfU0VOREZJTEUsIFVEUF9TVFJFQU0sIFRDUF9NQUVSVFMsIE9wdGlvbnMgY29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgdGVzdHMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gVENQX1NFTkRGSUxFCisKK1RoZSBUQ1BfU0VOREZJTEUgdGVzdCBpcyBgYGp1c3QgbGlrZScnIGEgQHJlZntUQ1BfU1RSRUFNfSB0ZXN0IGV4Y2VwdAorbmV0cGVyZiB0aGUgcGxhdGZvcm0ncyBAY29kZXtzZW5kZmlsZSgpfSBjYWxsIGluc3RlYWQgb2YgY2FsbGluZworQGNvZGV7c2VuZCgpfS4gIE9mdGVuIHRoaXMgcmVzdWx0cyBpbiBhIEBkZm57emVyby1jb3B5fSBvcGVyYXRpb24KK3doZXJlIGRhdGEgaXMgc2VudCBkaXJlY3RseSBmcm9tIHRoZSBmaWxlc3lzdGVtIGJ1ZmZlciBjYWNoZS4gIFRoaXMKK19zaG91bGRfIHJlc3VsdCBpbiBsb3dlciBDUFUgdXRpbGl6YXRpb24gYW5kIHBvc3NpYmx5IGhpZ2hlcgordGhyb3VnaHB1dC4gIElmIGl0IGRvZXMgbm90LCB0aGVuIHlvdSBtYXkgd2FudCB0byBjb250YWN0IHlvdXIKK3ZlbmRvcihzKSBiZWNhdXNlIHRoZXkgaGF2ZSBhIHByb2JsZW0gb24gdGhlaXIgaGFuZHMuCisKK1plcm8tY29weSBtZWNoYW5pc21zIG1heSBhbHNvIGFsdGVyIHRoZSBjaGFyYWN0ZXJpc3RpY3MgKHNpemUgYW5kCitudW1iZXIgb2YgYnVmZmVycyBwZXIpIG9mIHBhY2tldHMgcGFzc2VkIHRvIHRoZSBOSUMuICBJbiBtYW55IHN0YWNrcywKK3doZW4gYSBjb3B5IGlzIHBlcmZvcm1lZCwgdGhlIHN0YWNrIGNhbiBgYHJlc2VydmUnJyBzcGFjZSBhdCB0aGUKK2JlZ2lubmluZyBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGZvciB0aGluZ3MgbGlrZSBUQ1AsIElQIGFuZCBMaW5rCitoZWFkZXJzLiAgVGhpcyB0aGVuIGhhcyB0aGUgcGFja2V0IGNvbnRhaW5lZCBpbiBhIHNpbmdsZSBidWZmZXIgd2hpY2gKK2NhbiBiZSBlYXNpZXIgdG8gRE1BIHRvIHRoZSBOSUMuICBXaGVuIG5vIGNvcHkgaXMgcGVyZm9ybWVkLCB0aGVyZSBpcworbm8gb3Bwb3J0dW5pdHkgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycyBhbmQgc28gYSBwYWNrZXQgd2lsbCBiZQorY29udGFpbmVkIGluIHR3byBvciBtb3JlIGJ1ZmZlcnMuCisKK1RoZSBAcmVme0dsb2JhbCBPcHRpb25zLGdsb2JhbCBAb3B0aW9uey1GfSBvcHRpb259IGlzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QgYW5kIGl0IG11c3QKK3NwZWNpZnkgYSBmaWxlIG9mIGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBzZW5kIHJpbmcgKEB4cmVme0dsb2JhbAorT3B0aW9ucyx0aGUgZ2xvYmFsIEBvcHRpb257LVd9IG9wdGlvbn0uKSBtdWx0aXBsaWVkIGJ5IHRoZSBzZW5kIHNpemUKKyhAeHJlZntPcHRpb25zIGNvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIHRlc3RzLHRoZSB0ZXN0LXNwZWNpZmljCitAb3B0aW9uey1tfSBvcHRpb259LikuICBBbGwgb3RoZXIgVENQLXNwZWNpZmljIG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorYW5kIG9wdGlvbmFsLgorCitJbiB0aGlzIGZpcnN0IGV4YW1wbGU6CitAZXhhbXBsZQorJCBuZXRwZXJmIC1IIGxhZyAtRiAuLi9zcmMvbmV0cGVyZiAtdCBUQ1BfU0VOREZJTEUgLS0gLXMgMTI4SyAtUyAxMjhLCitUQ1AgU0VOREZJTEUgVEVTVCBmcm9tIDAuMC4wLjAgKDAuMC4wLjApIHBvcnQgMCBBRl9JTkVUIHRvIGxhZy5ocGwuaHAuY29tICgxNS40Ljg5LjIxNCkgcG9ydCAwIEFGX0lORVQKK2FsbG9jX3NlbmRmaWxlX2J1Zl9yaW5nOiBzcGVjaWZpZWQgZmlsZSB0b28gc21hbGwuCitmaWxlIG11c3QgYmUgbGFyZ2VyIHRoYW4gc2VuZF93aWR0aCAqIHNlbmRfc2l6ZQorQGVuZCBleGFtcGxlCisKK3dlIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZmlsZSBpcyB0b28gc21hbGwuICBIZXJlOgorCitAZXhhbXBsZQorJCAuLi9zcmMvbmV0cGVyZiAtSCBsYWcgLUYgL2Jvb3Qvdm1saW51ei0yLjYuOC0xLTY4NiAtdCBUQ1BfU0VOREZJTEUgLS0gLXMgMTI4SyAtUyAxMjhLCitUQ1AgU0VOREZJTEUgVEVTVCBmcm9tIDAuMC4wLjAgKDAuMC4wLjApIHBvcnQgMCBBRl9JTkVUIHRvIGxhZy5ocGwuaHAuY29tICgxNS40Ljg5LjIxNCkgcG9ydCAwIEFGX0lORVQKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICAKK2J5dGVzICBieXRlcyAgIGJ5dGVzICAgIHNlY3MuICAgIDEwXjZiaXRzL3NlYyAgCisKKzEzMTA3MiAyMjExODQgMjIxMTg0ICAgIDEwLjAyICAgICAgODEuODMgICAKK0BlbmQgZXhhbXBsZQorCit3ZSByZXNvbHZlIHRoYXQgaXNzdWUgYnkgc2VsZWN0aW5nIGEgbGFyZ2VyIGZpbGUuCisKKworQG5vZGUgVURQX1NUUkVBTSwgWFRJX1RDUF9TVFJFQU0sIFRDUF9TRU5ERklMRSwgT3B0aW9ucyBjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0cworQHN1YnNlY3Rpb24gVURQX1NUUkVBTQorCitBIFVEUF9TVFJFQU0gdGVzdCBpcyBzaW1pbGFyIHRvIGEgQHJlZntUQ1BfU1RSRUFNfSB0ZXN0IGV4Y2VwdCBVRFAgaXMKK3VzZWQgYXMgdGhlIHRyYW5zcG9ydCByYXRoZXIgdGhhbiBUQ1AuCisKK0BjaW5kZXggTGltaXRpbmcgQmFuZHdpZHRoCitBIFVEUF9TVFJFQU0gdGVzdCBoYXMgbm8gZW5kLXRvLWVuZCBmbG93IGNvbnRyb2wgLSBVRFAgcHJvdmlkZXMgbm9uZQorYW5kIG5laXRoZXIgZG9lcyBuZXRwZXJmLiAgSG93ZXZlciwgaWYgeW91IHdpc2gsIHlvdSBjYW4gY29uZmlndXJlCituZXRwZXJmIHdpdGggQGNvZGV7LS1lbmFibGUtaW50ZXJ2YWxzPXllc30gdG8gZW5hYmxlIHRoZSBnbG9iYWwKK2NvbW1hbmQtbGluZSBAb3B0aW9uey1ifSBhbmQgQG9wdGlvbnstd30gb3B0aW9ucyB0byBwYWNlIGJ1cnN0cyBvZgordHJhZmZpYyBvbnRvIHRoZSBuZXR3b3JrLgorCitUaGlzIGhhcyBhIG51bWJlciBvZiBpbXBsaWNhdGlvbnMuCisKK1RoZSBiaWdnZXN0IG9mIHRoZXNlIGltcGxpY2F0aW9ucyBpcyB0aGUgZGF0YSB3aGljaCBpcyBzZW50IG1pZ2h0IG5vdAorYmUgcmVjZWl2ZWQgYnkgdGhlIHJlbW90ZS4gIEZvciB0aGlzIHJlYXNvbiwgdGhlIG91dHB1dCBvZiBhCitVRFBfU1RSRUFNIHRlc3Qgc2hvd3MgYm90aCB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHRocm91Z2hwdXQuICBPbgorc29tZSBwbGF0Zm9ybXMsIGl0IG1heSBiZSBwb3NzaWJsZSBmb3IgdGhlIHNlbmRpbmcgdGhyb3VnaHB1dCB0byBiZQorcmVwb3J0ZWQgYXMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmF0ZSBvZiB0aGUgbGluay4gIFRoaXMKK2lzIGNvbW1vbiB3aGVuIHRoZSBDUFUocykgYXJlIGZhc3RlciB0aGFuIHRoZSBuZXR3b3JrIGFuZCB0aGVyZSBpcyBubworQGRmbntpbnRyYS1zdGFja30gZmxvdy1jb250cm9sLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBVRFBfU1RSRUFNIHRlc3QgYmV0d2VlbiB0d28gc3lzdGVtcyBjb25uZWN0ZWQKK2J5IGEgMTAgR2lnYWJpdCBFdGhlcm5ldCBsaW5rOgorQGV4YW1wbGUKKyQgbmV0cGVyZiAtdCBVRFBfU1RSRUFNIC1IIDE5Mi4xNjguMi4xMjUgLS0gLW0gMzI3NjgKK1VEUCBVTklESVJFQ1RJT05BTCBTRU5EIFRFU1QgZnJvbSAwLjAuMC4wICgwLjAuMC4wKSBwb3J0IDAgQUZfSU5FVCB0byAxOTIuMTY4LjIuMTI1ICgxOTIuMTY4LjIuMTI1KSBwb3J0IDAgQUZfSU5FVAorU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgTWVzc2FnZXMgICAgICAgICAgICAgICAgCitTaXplICAgIFNpemUgICAgIFRpbWUgICAgICAgICBPa2F5IEVycm9ycyAgIFRocm91Z2hwdXQKK2J5dGVzICAgYnl0ZXMgICAgc2VjcyAgICAgICAgICAgICMgICAgICAjICAgMTBeNmJpdHMvc2VjCisKKzEyNDkyOCAgIDMyNzY4ICAgMTAuMDAgICAgICAxMDU2NzIgICAgICAwICAgIDI3NzAuMjAKKzEzNTE2OCAgICAgICAgICAgMTAuMDAgICAgICAxMDQ4NDQgICAgICAgICAgIDI3NDguNTAKKworQGVuZCBleGFtcGxlCisKK1RoZSBmaXJzdCBsaW5lIG9mIG51bWJlcnMgYXJlIHN0YXRpc3RpY3MgZnJvbSB0aGUgc2VuZGluZyAobmV0cGVyZikKK3NpZGUuIFRoZSBzZWNvbmQgbGluZSBvZiBudW1iZXJzIGFyZSBmcm9tIHRoZSByZWNlaXZpbmcgKG5ldHNlcnZlcikKK3NpZGUuICBJbiB0aGlzIGNhc2UsIDEwNTY3MiAtIDEwNDg0NCBvciA4MjggbWVzc2FnZXMgZGlkIG5vdCBtYWtlIGl0CithbGwgdGhlIHdheSB0byB0aGUgcmVtb3RlIG5ldHNlcnZlciBwcm9jZXNzLgorCitJZiB0aGUgdmFsdWUgb2YgdGhlIEBvcHRpb257LW19IG9wdGlvbiBpcyBsYXJnZXIgdGhhbiB0aGUgbG9jYWwgc2VuZAorc29ja2V0IGJ1ZmZlciBzaXplIChAb3B0aW9uey1zfSBvcHRpb24pIG5ldHBlcmYgd2lsbCBsaWtlbHkgYWJvcnQgd2l0aAorYW4gZXJyb3IgbWVzc2FnZSBhYm91dCBob3cgdGhlIHNlbmQgY2FsbCBmYWlsZWQ6CisKK0BleGFtcGxlCituZXRwZXJmIC10IFVEUF9TVFJFQU0gLUggMTkyLjE2OC4yLjEyNQorVURQIFVOSURJUkVDVElPTkFMIFNFTkQgVEVTVCBmcm9tIDAuMC4wLjAgKDAuMC4wLjApIHBvcnQgMCBBRl9JTkVUIHRvIDE5Mi4xNjguMi4xMjUgKDE5Mi4xNjguMi4xMjUpIHBvcnQgMCBBRl9JTkVUCit1ZHBfc2VuZDogZGF0YSBzZW5kIGVycm9yOiBNZXNzYWdlIHRvbyBsb25nCitAZW5kIGV4YW1wbGUKKworSWYgdGhlIHZhbHVlIG9mIHRoZSBAb3B0aW9uey1tfSBvcHRpb24gaXMgbGFyZ2VyIHRoYW4gdGhlIHJlbW90ZQorc29ja2V0IHJlY2VpdmUgYnVmZmVyLCB0aGUgcmVwb3J0ZWQgcmVjZWl2ZSB0aHJvdWdocHV0IHdpbGwgbGlrZWx5IGJlCit6ZXJvIGFzIHRoZSByZW1vdGUgVURQIHdpbGwgZGlzY2FyZCB0aGUgbWVzc2FnZXMgYXMgYmVpbmcgdG9vIGxhcmdlIHRvCitmaXQgaW50byB0aGUgc29ja2V0IGJ1ZmZlci4KKworQGV4YW1wbGUKKyQgbmV0cGVyZiAtdCBVRFBfU1RSRUFNIC1IIDE5Mi4xNjguMi4xMjUgLS0gLW0gNjUwMDAgLVMgMzI3NjgKK1VEUCBVTklESVJFQ1RJT05BTCBTRU5EIFRFU1QgZnJvbSAwLjAuMC4wICgwLjAuMC4wKSBwb3J0IDAgQUZfSU5FVCB0byAxOTIuMTY4LjIuMTI1ICgxOTIuMTY4LjIuMTI1KSBwb3J0IDAgQUZfSU5FVAorU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgTWVzc2FnZXMgICAgICAgICAgICAgICAgCitTaXplICAgIFNpemUgICAgIFRpbWUgICAgICAgICBPa2F5IEVycm9ycyAgIFRocm91Z2hwdXQKK2J5dGVzICAgYnl0ZXMgICAgc2VjcyAgICAgICAgICAgICMgICAgICAjICAgMTBeNmJpdHMvc2VjCisKKzEyNDkyOCAgIDY1MDAwICAgMTAuMDAgICAgICAgNTM1OTUgICAgICAwICAgIDI3ODYuOTkKKyA2NTUzNiAgICAgICAgICAgMTAuMDAgICAgICAgICAgIDAgICAgICAgICAgICAgIDAuMDAKK0BlbmQgZXhhbXBsZQorCitUaGUgZXhhbXBsZSBhYm92ZSB3YXMgYmV0d2VlbiBhIHBhaXIgb2Ygc3lzdGVtcyBydW5uaW5nIGEgYGBMaW51eCcnCitrZXJuZWwuIE5vdGljZSB0aGF0IHRoZSByZW1vdGUgTGludXggc3lzdGVtIHJldHVybmVkIGEgdmFsdWUgbGFyZ2VyCit0aGFuIHRoYXQgcGFzc2VkLWluIHRvIHRoZSBAb3B0aW9uey1TfSBvcHRpb24uICBJbiBmYWN0LCB0aGlzIHZhbHVlCit3YXMgbGFyZ2VyIHRoYW4gdGhlIG1lc3NhZ2Ugc2l6ZSBzZXQgd2l0aCB0aGUgQG9wdGlvbnstbX0gb3B0aW9uLgorVGhhdCB0aGUgcmVtb3RlIHNvY2tldCBidWZmZXIgc2l6ZSBpcyByZXBvcnRlZCBhcyA2NTUzNiBieXRlcyB3b3VsZAorc3VnZ2VzdCB0byBhbnkgc2FuZSBwZXJzb24gdGhhdCBhIG1lc3NhZ2Ugb2YgNjUwMDAgYnl0ZXMgd291bGQgZml0LAorYnV0IHRoZSBzb2NrZXQgaXNuJ3QgX3JlYWxseV8gNjU1MzYgYnl0ZXMsIGV2ZW4gdGhvdWdoIExpbnV4IGlzCit0ZWxsaW5nIHVzIHNvLiAgR28gZmlndXJlLgorCitAbm9kZSBYVElfVENQX1NUUkVBTSwgWFRJX1VEUF9TVFJFQU0sIFVEUF9TVFJFQU0sIE9wdGlvbnMgY29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgdGVzdHMKK0BzdWJzZWN0aW9uIFhUSV9UQ1BfU1RSRUFNCisKK0FuIFhUSV9UQ1BfU1RSRUFNIHRlc3QgaXMgc2ltcGx5IGEgQHJlZntUQ1BfU1RSRUFNfSB0ZXN0IHVzaW5nIHRoZSBYVEkKK3JhdGhlciB0aGFuIEJTRCBTb2NrZXRzIGludGVyZmFjZS4gIFRoZSB0ZXN0LXNwZWNpZmljIEBvcHRpb257LVgKKzxkZXZzcGVjPn0gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGxvY2FsIGFuZC9vcgorcmVtb3RlIFhUSSBkZXZpY2UgZmlsZXMsIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBAY29kZXt0X29wZW4oKX0gY2FsbAorbWFkZSBieSBuZXRwZXJmIFhUSSB0ZXN0cy4KKworVGhlIFhUSV9UQ1BfU1RSRUFNIHRlc3QgaXMgb25seSBwcmVzZW50IGlmIG5ldHBlcmYgd2FzIGNvbmZpZ3VyZWQgd2l0aAorQGNvZGV7LS1lbmFibGUteHRpPXllc30uICBUaGUgcmVtb3RlIG5ldHNlcnZlciBtdXN0IGhhdmUgYWxzbyBiZWVuCitjb25maWd1cmVkIHdpdGggQGNvZGV7LS1lbmFibGUteHRpPXllc30uCisKK0Bub2RlIFhUSV9VRFBfU1RSRUFNLCBTQ1RQX1NUUkVBTSwgWFRJX1RDUF9TVFJFQU0sIE9wdGlvbnMgY29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgdGVzdHMKK0BzdWJzZWN0aW9uIFhUSV9VRFBfU1RSRUFNCisKK0FuIFhUSV9VRFBfU1RSRUFNIHRlc3QgaXMgc2ltcGx5IGEgQHJlZntVRFBfU1RSRUFNfSB0ZXN0IHVzaW5nIHRoZSBYVEkKK3JhdGhlciB0aGFuIEJTRCBTb2NrZXRzIEludGVyZmFjZS4gIFRoZSB0ZXN0LXNwZWNpZmljIEBvcHRpb257LVgKKzxkZXZzcGVjPn0gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGxvY2FsIGFuZC9vcgorcmVtb3RlIFhUSSBkZXZpY2UgZmlsZXMsIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBAY29kZXt0X29wZW4oKX0gY2FsbAorbWFkZSBieSBuZXRwZXJmIFhUSSB0ZXN0cy4KKworVGhlIFhUSV9VRFBfU1RSRUFNIHRlc3QgaXMgb25seSBwcmVzZW50IGlmIG5ldHBlcmYgd2FzIGNvbmZpZ3VyZWQgd2l0aAorQGNvZGV7LS1lbmFibGUteHRpPXllc30uIFRoZSByZW1vdGUgbmV0c2VydmVyIG11c3QgaGF2ZSBhbHNvIGJlZW4KK2NvbmZpZ3VyZWQgd2l0aCBAY29kZXstLWVuYWJsZS14dGk9eWVzfS4KKworQG5vZGUgU0NUUF9TVFJFQU0sIERMQ09fU1RSRUFNLCBYVElfVURQX1NUUkVBTSwgT3B0aW9ucyBjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0cworQHN1YnNlY3Rpb24gU0NUUF9TVFJFQU0KKworQW4gU0NUUF9TVFJFQU0gdGVzdCBpcyBlc3NlbnRpYWxseSBhIEByZWZ7VENQX1NUUkVBTX0gdGVzdCB1c2luZyB0aGUgU0NUUAorcmF0aGVyIHRoYW4gVENQLiAgVGhlIEBvcHRpb257LUR9IG9wdGlvbiB3aWxsIHNldCBTQ1RQX05PREVMQVksIHdoaWNoCitpcyBtdWNoIGxpa2UgdGhlIFRDUF9OT0RFTEFZIG9wdGlvbiBmb3IgVENQLiAgVGhlIEBvcHRpb257LUN9IG9wdGlvbgoraXMgbm90IGFwcGxpY2FibGUgdG8gYW4gU0NUUCB0ZXN0IGFzIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcKK1NDVFBfQ09SSyBvcHRpb24uICBUaGUgYXV0aG9yIGlzIHN0aWxsIGZpZ3VyaW5nLW91dCB3aGF0IHRoZQordGVzdC1zcGVjaWZpYyBAb3B0aW9uey1OfSBvcHRpb24gZG9lcyA6KQorCitUaGUgU0NUUF9TVFJFQU0gdGVzdCBpcyBvbmx5IHByZXNlbnQgaWYgbmV0cGVyZiB3YXMgY29uZmlndXJlZCB3aXRoCitAY29kZXstLWVuYWJsZS1zY3RwPXllc30uIFRoZSByZW1vdGUgbmV0c2VydmVyIG11c3QgaGF2ZSBhbHNvIGJlZW4KK2NvbmZpZ3VyZWQgd2l0aCBAY29kZXstLWVuYWJsZS1zY3RwPXllc30uCisKK0Bub2RlIERMQ09fU1RSRUFNLCBETENMX1NUUkVBTSwgU0NUUF9TVFJFQU0sIE9wdGlvbnMgY29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgdGVzdHMKK0BzdWJzZWN0aW9uIERMQ09fU1RSRUFNCisKK0EgRExQSSBDb25uZWN0aW9uIE9yaWVudGVkIFN0cmVhbSAoRExDT19TVFJFQU0pIHRlc3QgaXMgdmVyeSBzaW1pbGFyCitpbiBjb25jZXB0IHRvIGEgQHJlZntUQ1BfU1RSRUFNfSB0ZXN0LiAgQm90aCB1c2UgcmVsaWFibGUsCitjb25uZWN0aW9uLW9yaWVudGVkIHByb3RvY29scy4gIFRoZSBETFBJIHRlc3QgZGlmZmVycyBmcm9tIHRoZSBUQ1AKK3Rlc3QgaW4gdGhhdCBpdHMgcHJvdG9jb2wgb3BlcmF0ZXMgb25seSBhdCB0aGUgbGluay1sZXZlbCBhbmQgZG9lcyBub3QKK2luY2x1ZGUgVENQLXN0eWxlIHNlZ21lbnRhdGlvbiBhbmQgcmVhc3NlbWJseS4gIFRoaXMgbGFzdCBkaWZmZXJlbmNlCittZWFucyB0aGF0IHRoZSB2YWx1ZSAgcGFzc2VkLWluICB3aXRoIHRoZSBAb3B0aW9uey1tfSBvcHRpb24gbXVzdCBiZQorbGVzcyB0aGFuIHRoZSBpbnRlcmZhY2UgTVRVLiAgT3RoZXJ3aXNlLCB0aGUgQG9wdGlvbnstbX0gYW5kCitAb3B0aW9uey1NfSBvcHRpb25zIGFyZSBqdXN0IGxpa2UgdGhlaXIgVENQL1VEUC9TQ1RQIGNvdW50ZXJwYXJ0cy4KKworT3RoZXIgRExQSS1zcGVjaWZpYyBvcHRpb25zIGluY2x1ZGU6CisKK0B0YWJsZSBAY29kZQorQGl0ZW0gLUQgPGRldnNwZWM+CitUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lcyBmb3IgdGhlIGxvY2FsCithbmQvb3IgcmVtb3RlIERQTEkgZGV2aWNlIGZpbGVzLiAgVGhlIHN5bnRheCBpcyBvdGhlcndpc2UgaWRlbnRpY2FsIHRvCit0aGF0IG9mIGEgQGRmbntzaXplc3BlY30uCitAaXRlbSAtcCA8cHBhc3BlYz4KK1RoaXMgb3B0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbG9jYWwgYW5kL29yIHJlbW90ZSBETFBJIFBQQShzKS4KK1RoZSBQUEEgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgaW50ZXJmYWNlIG92ZXIgd2hpY2ggdHJhZmZpYyBpcyB0byBiZQorc2VudC9yZWNlaXZlZC4gVGhlIHN5bnRheCBvZiBhIEBkZm57cHBhc3BlY30gaXMgb3RoZXJ3aXNlIHRoZSBzYW1lIGFzCithIEBkZm57c2l6ZXNwZWN9LgorQGl0ZW0gLXMgc2FwIAorVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSA4MDIuMiBTQVAgZm9yIHRoZSB0ZXN0LiAgQSBTQVAgaXMgc29tZXdoYXQKK2xpa2UgZWl0aGVyIHRoZSBwb3J0IGZpZWxkIG9mIGEgVENQIG9yIFVEUCBoZWFkZXIgb3IgdGhlIHByb3RvY29sCitmaWVsZCBvZiBhbiBJUCBoZWFkZXIuICBUaGUgc3BlY2lmaWVkIFNBUCBzaG91bGQgbm90IGNvbmZsaWN0IHdpdGggYW55CitvdGhlciBhY3RpdmUgU0FQcyBvbiB0aGUgc3BlY2lmaWVkIFBQQSdzIChAb3B0aW9uey1wfSBvcHRpb24pLgorQGl0ZW0gLXcgPHNpemVzcGVjPgorVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBsb2NhbCBzZW5kIGFuZCByZWNlaXZlIHdpbmRvdyBzaXplcyBpbiB1bml0cworb2YgZnJhbWVzIG9uIHRob3NlIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHNldHRpbmcgc3VjaCB0aGluZ3MuCitAaXRlbSAtVyA8c2l6ZXNwZWM+CitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIHJlbW90ZSBzZW5kIGFuZCByZWNlaXZlIHdpbmRvdyBzaXplcyBpbgordW5pdHMgb2YgZnJhbWVzIG9uIHRob3NlIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IHNldHRpbmcgc3VjaCB0aGluZ3MuCitAZW5kIHRhYmxlCisKK1RoZSBETENPX1NUUkVBTSB0ZXN0IGlzIG9ubHkgcHJlc2VudCBpZiBuZXRwZXJmIHdhcyBjb25maWd1cmVkIHdpdGgKK0Bjb2Rley0tZW5hYmxlLWRscGk9eWVzfS4gVGhlIHJlbW90ZSBuZXRzZXJ2ZXIgbXVzdCBoYXZlIGFsc28gYmVlbgorY29uZmlndXJlZCB3aXRoIEBjb2Rley0tZW5hYmxlLWRscGk9eWVzfS4KKworCitAbm9kZSBETENMX1NUUkVBTSwgU1RSRUFNX1NUUkVBTSwgRExDT19TVFJFQU0sIE9wdGlvbnMgY29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgdGVzdHMKK0BzdWJzZWN0aW9uIERMQ0xfU1RSRUFNCisKK0EgRExQSSBDb25uZWN0aW9uTGVzcyBTdHJlYW0gKERMQ0xfU1RSRUFNKSB0ZXN0IGlzIGFuYWxvZ291cyB0byBhCitAcmVme1VEUF9TVFJFQU19IHRlc3QgaW4gdGhhdCBib3RoIG1ha2UgdXNlIG9mIHVucmVsaWFibGUvYmVzdC1lZmZvcnQsCitjb25uZWN0aW9uLWxlc3MgdHJhbnNwb3J0cy4gIFRoZSBETENMX1NUUkVBTSB0ZXN0IGRpZmZlcnMgZnJvbSB0aGUKK0ByZWZ7VURQX1NUUkVBTX0gdGVzdCBpbiB0aGF0IHRoZSBtZXNzYWdlIHNpemUgKEBvcHRpb257LW19IG9wdGlvbikgbXVzdAorYWx3YXlzIGJlIGxlc3MgdGhhbiB0aGUgbGluayBNVFUgYXMgdGhlcmUgaXMgbm8gSVAtbGlrZSBmcmFnbWVudGF0aW9uCithbmQgcmVhc3NlbWJseSBhdmFpbGFibGUgYW5kIG5ldHBlcmYgZG9lcyBub3QgcHJlc3VtZSB0byBwcm92aWRlIG9uZS4KKworVGhlIHRlc3Qtc3BlY2lmaWMgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGEgRExDTF9TVFJFQU0gdGVzdCBhcmUgdGhlCitzYW1lIGFzIHRob3NlIGZvciBhIEByZWZ7RExDT19TVFJFQU19IHRlc3QuCisKK1RoZSBETENMX1NUUkVBTSB0ZXN0IGlzIG9ubHkgcHJlc2VudCBpZiBuZXRwZXJmIHdhcyBjb25maWd1cmVkIHdpdGgKK0Bjb2Rley0tZW5hYmxlLWRscGk9eWVzfS4gVGhlIHJlbW90ZSBuZXRzZXJ2ZXIgbXVzdCBoYXZlIGFsc28gYmVlbgorY29uZmlndXJlZCB3aXRoIEBjb2Rley0tZW5hYmxlLWRscGk9eWVzfS4KKworQG5vZGUgU1RSRUFNX1NUUkVBTSwgREdfU1RSRUFNLCBETENMX1NUUkVBTSwgT3B0aW9ucyBjb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCB0ZXN0cworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc3Vic2VjdGlvbiBTVFJFQU1fU1RSRUFNCisKK0EgVW5peCBEb21haW4gU3RyZWFtIFNvY2tldCBTdHJlYW0gdGVzdCAoU1RSRUFNX1NUUkVBTSkgaXMgc2ltaWxhciBpbgorY29uY2VwdCB0byBhIEByZWZ7VENQX1NUUkVBTX0gdGVzdCwgYnV0IHVzaW5nIFVuaXggRG9tYWluIHNvY2tldHMuICBJdCBpcywKK25hdHVyYWxseSwgbGltaXRlZCB0byBpbnRyYS1tYWNoaW5lIHRyYWZmaWMuICBBIFNUUkVBTV9TVFJFQU0gdGVzdAorc2hhcmVzIHRoZSBAb3B0aW9uey1tfSwgQG9wdGlvbnstTX0sIEBvcHRpb257LXN9IGFuZCBAb3B0aW9uey1TfQorb3B0aW9ucyBvZiB0aGUgb3RoZXIgX1NUUkVBTSB0ZXN0cy4gIEluIGEgU1RSRUFNX1NUUkVBTSB0ZXN0IHRoZQorQG9wdGlvbnstcH0gb3B0aW9uIHNldHMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcGlwZXMgd2lsbCBiZQorY3JlYXRlZCByYXRoZXIgdGhhbiBzZXR0aW5nIGEgcG9ydCBudW1iZXIuICBUaGUgZGVmYXVsdCBpcyB0byBjcmVhdGUKK3RoZSBwaXBlcyBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgZm9yIHRoZSBAY29kZXt0ZW1wbmFtKCl9IGNhbGwuCisKK1RoZSBTVFJFQU1fU1RSRUFNIHRlc3QgaXMgb25seSBwcmVzZW50IGlmIG5ldHBlcmYgd2FzIGNvbmZpZ3VyZWQgd2l0aAorQGNvZGV7LS1lbmFibGUtdW5peD15ZXN9LiBUaGUgcmVtb3RlIG5ldHNlcnZlciBtdXN0IGhhdmUgYWxzbyBiZWVuCitjb25maWd1cmVkIHdpdGggQGNvZGV7LS1lbmFibGUtdW5peD15ZXN9LgorCitAbm9kZSBER19TVFJFQU0sICAsIFNUUkVBTV9TVFJFQU0sIE9wdGlvbnMgY29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgdGVzdHMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHN1YnNlY3Rpb24gREdfU1RSRUFNCisKK0EgVW5peCBEb21haW4gRGF0YWdyYW0gU29ja2V0IFN0cmVhbSB0ZXN0IChTR19TVFJFQU0pIGlzIHZlcnkgbXVjaAorbGlrZSBhIEByZWZ7VENQX1NUUkVBTX0gdGVzdCBleGNlcHQgdGhhdCBtZXNzYWdlIGJvdW5kYXJpZXMgYXJlIHByZXNlcnZlZC4KK0luIHRoaXMgd2F5LCBpdCBtYXkgYWxzbyBiZSBjb25zaWRlcmVkIHNpbWlsYXIgdG8gY2VydGFpbiBmbGF2b3JzIG9mCitTQ1RQIHRlc3Qgd2hpY2ggY2FuIGFsc28gcHJlc2VydmUgbWVzc2FnZSBib3VuZGFyaWVzLgorCitBbGwgdGhlIG9wdGlvbnMgb2YgYSBAcmVme1NUUkVBTV9TVFJFQU19IHRlc3QgYXJlIGFwcGxpY2FibGUgdG8gYSBER19TVFJFQU0KK3Rlc3QuIAorCitUaGUgREdfU1RSRUFNIHRlc3QgaXMgb25seSBwcmVzZW50IGlmIG5ldHBlcmYgd2FzIGNvbmZpZ3VyZWQgd2l0aAorQGNvZGV7LS1lbmFibGUtdW5peD15ZXN9LiBUaGUgcmVtb3RlIG5ldHNlcnZlciBtdXN0IGhhdmUgYWxzbyBiZWVuCitjb25maWd1cmVkIHdpdGggQGNvZGV7LS1lbmFibGUtdW5peD15ZXN9LgorCisKK0Bub2RlIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBSZXF1ZXN0L1Jlc3BvbnNlICwgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEFnZ3JlZ2F0ZSBQZXJmb3JtYW5jZSwgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJ1bGsgRGF0YSBUcmFuc2ZlciwgVG9wCitAY2hhcHRlciBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgUmVxdWVzdC9SZXNwb25zZSAKKworUmVxdWVzdC9yZXNwb25zZSBwZXJmb3JtYW5jZSBpcyBvZnRlbiBvdmVybG9va2VkLCB5ZXQgaXQgaXMganVzdCBhcworaW1wb3J0YW50IGFzIGJ1bGstdHJhbnNmZXIgcGVyZm9ybWFuY2UuICBXaGlsZSB0aGluZ3MgbGlrZSBsYXJnZXIKK3NvY2tldCBidWZmZXJzIGFuZCBUQ1Agd2luZG93cyBjYW4gY292ZXIgYSBtdWx0aXR1ZGUgb2YgbGF0ZW5jeSBhbmQKK2V2ZW4gcGF0aC1sZW5ndGggc2lucywgdGhleSBjYW5ub3QgZWFzaWx5IGhpZGUgZnJvbSBhIHJlcXVlc3QvcmVzcG9uc2UKK3Rlc3QuICBUaGUgY29udmVudGlvbiBmb3IgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QgaXMgdG8gaGF2ZSBhIF9SUgorc3VmZml4LiAgVGhlcmUgYXJlIGhvd2V2ZXIgYSBmZXcgYGByZXF1ZXN0L3Jlc3BvbnNlJycgdGVzdHMgdGhhdCBoYXZlCitvdGhlciBzdWZmaXhlcy4KKworQSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIHBhcnRpY3VsYXJseSBzeW5jaHJvbm91cywgb25lIHRyYW5zYWN0aW9uIGF0CithdCB0aW1lIHRlc3Qgc3VjaCBhcyB0aG9zZSBmb3VuZCBpbiBuZXRwZXJmLCBpcyBwYXJ0aWN1bGFybHkgc2Vuc2l0aXZlCit0byB0aGUgcGF0aC1sZW5ndGggb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suICBBbiBfUlIgdGVzdCBjYW4gYWxzbwordW5jb3ZlciB0aG9zZSBwbGF0Zm9ybXMgd2hlcmUgdGhlIE5JQydzIGFyZSBzdHJhcHBlZCBieSBkZWZhdWx0IHdpdGgKK292ZXJiZWFyaW5nIGludGVycnVwdCBhdm9pZGFuY2Ugc2V0dGluZ3MgaW4gYW4gYXR0ZW1wdCB0byBpbmNyZWFzZSB0aGUKK2J1bGstdHJhbnNmZXIgcGVyZm9ybWFuY2UgKG9yIHJhdGhlciwgZGVjcmVhc2UgdGhlIENQVSB1dGlsaXphdGlvbiBvZgorYSBidWxrLXRyYW5zZmVyIHRlc3QpLiAgVGhpcyBzZW5zaXRpdml0eSBpcyBtb3N0IGFjdXRlIGZvciBzbWFsbAorcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc2l6ZXMsIHN1Y2ggYXMgdGhlIHNpbmdsZS1ieXRlIGRlZmF1bHQgZm9yIGEKK25ldHBlcmYgX1JSIHRlc3QuCisKK1doaWxlIGEgYnVsay10cmFuc2ZlciB0ZXN0IHJlcG9ydHMgaXRzIHJlc3VsdHMgaW4gdW5pdHMgb2YgYml0cyBvcgorYnl0ZXMgdHJhbnNmZXJlZCBwZXIgc2Vjb25kLCBhIG11bWJsZV9SUiB0ZXN0IHJlcG9ydHMgdHJhbnNhY3Rpb25zIHBlcgorc2Vjb25kIHdoZXJlIGEgdHJhbnNhY3Rpb24gaXMgZGVmaW5lZCBhcyB0aGUgY29tcGxldGVkIGV4Y2hhbmdlIG9mIGEKK3JlcXVlc3QgYW5kIGEgcmVzcG9uc2UuICBPbmUgY2FuIGludmVydCB0aGUgdHJhbnNhY3Rpb24gcmF0ZSB0byBhcnJpdmUKK2F0IHRoZSBhdmVyYWdlIHJvdW5kLXRyaXAgbGF0ZW5jeS4gIElmIG9uZSBpcyBjb25maWRlbnQgYWJvdXQgdGhlCitzeW1tZXRyeSBvZiB0aGUgY29ubmVjdGlvbiwgdGhlIGF2ZXJhZ2Ugb25lLXdheSBsYXRlbmN5IGNhbiBiZSB0YWtlbgorYXMgb25lLWhhbGYgdGhlIGF2ZXJhZ2Ugcm91bmQtdHJpcCBsYXRlbmN5LiAgTmV0cGVyZiBkb2VzIG5vdCBkbworZWl0aGVyIG9mIHRoZXNlIG9uIGl0cyBvd24gYnV0IGxlYXZlcyB0aGVtIGFzIGV4ZXJjaXNlcyB0byB0aGUKK2JlbmNobWFya2VyLgorCitAbWVudQorKiBJc3N1ZXMgaW4gUmVxdWVzdC9SZXNwb25zZTo6ICAKKyogT3B0aW9ucyBDb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCBfUlIgdGVzdHM6OiAgCitAZW5kIG1lbnUKKworQG5vZGUgSXNzdWVzIGluIFJlcXVlc3QvUmVzcG9uc2UsIE9wdGlvbnMgQ29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgX1JSIHRlc3RzLCBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgUmVxdWVzdC9SZXNwb25zZSAsIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBSZXF1ZXN0L1Jlc3BvbnNlCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIElzc3VlcyBpbiBSZXFldXN0L1Jlc3BvbnNlCisKK01vc3QgaWYgbm90IGFsbCB0aGUgQHJlZntJc3N1ZXMgaW4gQnVsayBUcmFuc2Zlcn0gYXBwbHkgdG8KK3JlcXVlc3QvcmVzcG9uc2UuICBUaGUgaXNzdWUgb2Ygcm91bmQtdHJpcCBsYXRlbmN5IGlzIGV2ZW4gbW9yZQoraW1wb3J0YW50IGFzIG5ldHBlcmYgZ2VuZXJhbGx5IG9ubHkgaGFzIG9uZSB0cmFuc2FjdGlvbiBvdXRzdGFuZGluZyBhdAorYSB0aW1lLgorCitBIHNpbmdsZSBpbnN0YW5jZSBvZiBhIG9uZSB0cmFuc2FjdGlvbiBvdXRzdGFuZGluZyBfUlIgdGVzdCBzaG91bGQKK19uZXZlcl8gY29tcGxldGVseSBzYXR1cmF0ZSB0aGUgQ1BVIG9mIGEgc3lzdGVtLiAgSWYgdGVzdGluZyBiZXR3ZWVuCitvdGhlcndpc2UgZXZlbmx5IG1hdGNoZWQgc3lzdGVtcywgdGhlIHN5bW1ldHJpYyBuYXR1cmUgb2YgYSBfUlIgdGVzdAord2l0aCBlcXVhbCByZXF1ZXN0IGFuZCByZXNwb25zZSBzaXplcyBzaG91bGQgcmVzdWx0IGluIGVxdWFsIENQVQorbG9hZGluZyBvbiBib3RoIHN5c3RlbXMuIEhvd2V2ZXIsIHRoaXMgbWF5IG5vdCBob2xkIHRydWUgb24gTVAKK3N5c3RlbXMsIHBhcnRpY3VsYXJseSBpZiBvbmUgQ1BVIGJpbmRzIHRoZSBuZXRwZXJmIGFuZCBuZXRzZXJ2ZXIKK2RpZmZlcmVudGx5IHZpYSB0aGUgZ2xvYmFsIEBvcHRpb257LVR9IG9wdGlvbi4KKworRm9yIHNtYWxsZXIgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc2l6ZXMgcGFja2V0IGxvc3MgaXMgYSBiaWdnZXIgaXNzdWUKK2FzIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IGZvciBhIEBkZm57ZmFzdCByZXRyYW5zbWl0fSBvcgorcmV0cmFuc21pc3Npb24gcHJpb3IgdG8gYSByZXRyYW5zbWlzc2lvbiB0aW1lciBleHBpcmluZy4KKworQ2VydGFpbiBOSUNzIGhhdmUgd2F5cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgc2VudCB0bwordGhlIGhvc3QuICBJZiB0aGVzZSBhcmUgc3RyYXBwZWQgYmFkbHkgdGhleSBjYW4gc2lnbmlmaWNhbnRseSByZWR1Y2UKK3RoZSBwZXJmb3JtYW5jZSBvZiBzb21ldGhpbmcgbGlrZSBhIHNpbmdsZS1ieXRlIHJlcXVlc3QvcmVzcG9uc2UgdGVzdC4KK1N1Y2ggc2V0dXBzIGFyZSBkaXN0aW5ndWlzZWQgYnkgc2VyaW91c2x5IGxvdyByZXBvcnRlZCBDUFUgdXRpbGl6YXRpb24KK2FuZCB3aGF0IHNlZW1zIGxpa2UgYSBsb3cgKGV2ZW4gaWYgaW4gdGhlIHRob3VzYW5kcykgdHJhbnNhY3Rpb24gcGVyCitzZWNvbmQgcmF0ZS4gIEFsc28sIGlmIHlvdSBydW4gc3VjaCBhbiBPUy9kcml2ZXIgY29tYmluYXRpb24gb24gZmFzdGVyCitvciBzbG93ZXIgaGFyZHdhcmUgYW5kIGRvIG5vdCBzZWUgYSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiB0aGUKK3RyYW5zYWN0aW9uIHJhdGUsIGNoYW5jZXMgYXJlIGdvb2QgdGhhdCB0aGUgZHJ2aWVyIGlzIHN0cmFwcGluZyB0aGUKK05JQyB3aXRoIGFnZ3Jlc3NpdmUgaW50ZXJydXB0IGF2b2lkYW5jZSBzZXR0aW5ncy4gIEdvb2QgZm9yIGJ1bGsKK3Rocm91Z2hwdXQsIGJ1dCBiYWQgZm9yIGxhdGVuY3kuCisKK1NvbWUgZHJpdmVycyBtYXkgdHJ5IHRvIGF1dG9tYWdpY2FsbHkgYWRqdXN0IHRoZSBpbnRlcnJ1cHQgYXZvaWRhbmNlCitzZXR0aW5ncy4gIElmIHRoZXkgYXJlIG5vdCB0ZXJyaWJseSBnb29kIGF0IGl0LCB5b3Ugd2lsbCBzZWUKK2NvbnNpZGVyYWJsZSBydW4tdG8tcnVuIHZhcmlhdGlvbiBpbiByZXBvcnRlZCB0cmFuc2FjdGlvbiByYXRlcy4KK1BhcnRpY3VsYXJseSBpZiB5b3UgYGBtaXgtdXAnJyBfU1RSRUFNIGFuZCBfUlIgdGVzdHMuCisKKworQG5vZGUgT3B0aW9ucyBDb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCBfUlIgdGVzdHMsICAsIElzc3VlcyBpbiBSZXF1ZXN0L1Jlc3BvbnNlLCBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgUmVxdWVzdC9SZXNwb25zZQorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBPcHRpb25zIENvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIF9SUiB0ZXN0cworCitNYW55IGBgdGVzdC1zcGVjaWZpYycnIG9wdGlvbnMgYXJlIGFjdHVhbGx5IGNvbW1vbiBhY3Jvc3MgdGhlCitkaWZmZXJlbnQgdGVzdHMuICBGb3IgdGhvc2UgdGVzdHMgaW52b2x2aW5nIFRDUCwgVURQIGFuZCBTQ1RQLCB3aGV0aGVyCit1c2luZyB0aGUgQlNEIFNvY2tldHMgb3IgdGhlIFhUSSBpbnRlcmZhY2UgdGhvc2UgY29tbW9uIG9wdGlvbnMKK2luY2x1ZGU6CisKK0B0YWJsZSBAY29kZQorQHZpbmRleCAtaCwgVGVzdC1zcGVjaWZpYworQGl0ZW0gLWgKK0Rpc3BsYXkgdGhlIHRlc3Qtc3VpdGUtc3BlY2lmaWMgdXNhZ2Ugc3RyaW5nIGFuZCBleGl0LiAgRm9yIGEgVENQXyBvcgorVURQXyB0ZXN0IHRoaXMgd2lsbCBiZSB0aGUgdXNhZ2Ugc3RyaW5nIGZyb20gdGhlIHNvdXJjZSBmaWxlCitAZmlsZXtuZXR0ZXN0X2JzZC5jfS4gIEZvciBhbiBYVElfIHRlc3QsIHRoaXMgd2lsbCBiZSB0aGUgdXNhZ2Ugc3RyaW5nCitmcm9tIHRoZSBzb3VyY2UgZmlsZSBAZmlsZXtzcmMvbmV0dGVzdF94dGkuY30uICBGb3IgYW4gU0NUUCB0ZXN0LCB0aGlzCit3aWxsIGJlIHRoZSB1c2FnZSBzdHJpbmcgZnJvbSB0aGUgc291cmNlIGZpbGUKK0BmaWxle3NyYy9uZXR0ZXN0X3NjdHAuY30uCisKK0B2aW5kZXggLUgsIFRlc3Qtc3BlY2lmaWMKK0BpdGVtIC1IIDxvcHRpb25zcGVjPgorTm9ybWFsbHksIHRoZSByZW1vdGUgaG9zdG5hbWV8SVAgYW5kIGFkZHJlc3MgZmFtaWx5IGluZm9ybWF0aW9uIGlzCitpbmhlcml0ZWQgZnJvbSB0aGUgc2V0dGluZ3MgZm9yIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gKGVnIGdsb2JhbAorY29tbWFuZC1saW5lIEBvcHRpb257LUh9LCBAb3B0aW9uey00fSBhbmQvb3IgQG9wdGlvbnstNn0gb3B0aW9ucy4KK1RoZSB0ZXN0LXNwZWNpZmljIEBvcHRpb257LUh9IHdpbGwgb3ZlcnJpZGUgdGhvc2Ugc2V0dGluZ3MgZm9yIHRoZQorZGF0YSAoYWthIHRlc3QpIGNvbm5lY3Rpb24gb25seS4gIFNldHRpbmdzIGZvciB0aGUgY29udHJvbCBjb25uZWN0aW9uCithcmUgbGVmdCB1bmNoYW5nZWQuICBUaGlzIG1pZ2h0IGJlIHVzZWQgdG8gY2F1c2UgdGhlIGNvbnRyb2wgYW5kIGRhdGEKK2Nvbm5lY3Rpb25zIHRvIHRha2UgZGlmZmVyZW50IHBhdGhzIHRocm91Z2ggdGhlIG5ldHdvcmsuCisKK0B2aW5kZXggLUwsIFRlc3Qtc3BlY2lmaWMKK0BpdGVtIC1MIDxvcHRpb25zcGVjPgorVGhlIHRlc3Qtc3BlY2lmaWMgQG9wdGlvbnstTH0gb3B0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgdGVzdC1zcGVjaWZpYworQG9wdGlvbnstSH0gb3B0aW9uIGV4Y2VwdCBpdCBhZmZlY3RzIHRoZSBsb2NhbCBob3N0bmFtZXxJUCBhbmQgYWRkcmVzcworZmFtaWx5IGluZm9ybWF0aW9uLiAgQXMgd2l0aCBpdHMgZ2xvYmFsIGNvbW1hbmQtbGluZSBjb3VudGVycGFydCwgdGhpcworaXMgZ2VuZXJhbGx5IG9ubHkgdXNlZnVsIHdoZW4gbWVhc3VyaW5nIHRob3VnaCB0aG9zZSBldmlsLCBlbmQtdG8tZW5kCiticmVha2luZyB0aGluZ3MgY2FsbGVkIGZpcmV3YWxscy4KKworQHZpbmRleCAtUCwgVGVzdC1zcGVjaWZpYworQGl0ZW0gLVAgPG9wdGlvbnNwZWM+CitTZXQgdGhlIGxvY2FsIGFuZC9vciByZW1vdGUgcG9ydCBudW1iZXJzIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uLgorCitAdmluZGV4IC1yLCBUZXN0LXNwZWNpZmljCitAaXRlbSAtciA8c2l6ZXNwZWM+CitUaGlzIG9wdGlvbiBzZXRzIHRoZSByZXF1ZXN0IChmaXJzdCB2YWx1ZSkgYW5kL29yIHJlc3BvbnNlIChzZWNvbmQKK3ZhbHVlKSBzaXplcyBmb3IgYW4gX1JSIHRlc3QuIEJ5IGRlZmF1bHQgdGhlIHVuaXRzIGFyZSBieXRlcywgYnV0IGEKK3N1ZmZpeCBvZiBgYEcsJycgYGBNLCcnIG9yIGBgSycnIHdpbGwgc3BlY2lmeSB0aGUgdW5pdHMgdG8gYmUgMl4zMAorKEdCKSwgMl4yMCAoTUIpIG9yIDJeMTAgKEtCKSByZXNwZWN0aXZlbHkuICBBIHN1ZmZpeCBvZiBgYGcsJycgYGBtJycKK29yIGBgaycnIHdpbGwgc3BlY2lmeSB1bml0cyBvZiAxMF45LCAxMF42IG9yIDEwXjMgYnl0ZXMKK3Jlc3BlY3RpdmVseS4gRm9yIGV4YW1wbGU6CitAZXhhbXBsZQorQGNvZGV7LXIgMTI4LDE2S30KK0BlbmQgZXhhbXBsZQorV2lsbCBzZXQgdGhlIHJlcXVlc3Qgc2l6ZSB0byAxMjggYnl0ZXMgYW5kIHRoZSByZXNwb25zZSBzaXplIHRvIDE2IEtCCitvciAxNjM4NCBieXRlcy4gW0RlZmF1bHQ6IDEgLSBhIHNpbmdsZS1ieXRlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIF0KKworQHZpbmRleCAtcywgVGVzdC1zcGVjaWZpYworQGl0ZW0gLXMgPHNpemVzcGVjPgorVGhpcyBvcHRpb24gc2V0cyB0aGUgbG9jYWwgc2VuZCBhbmQgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemVzIGZvcgordGhlIGRhdGEgY29ubmVjdGlvbiB0byB0aGUgdmFsdWUocykgc3BlY2lmaWVkLiAgT2Z0ZW4sIHRoaXMgd2lsbAorYWZmZWN0IHRoZSBhZHZlcnRpc2VkIGFuZC9vciBlZmZlY3RpdmUgVENQIG9yIG90aGVyIHdpbmRvdywgYnV0IG9uCitzb21lIHBsYXRmb3JtcyBpdCBtYXkgbm90LiBCeSBkZWZhdWx0IHRoZSB1bml0cyBhcmUgYnl0ZXMsIGJ1dCBhCitzdWZmaXggb2YgYGBHLCcnIGBgTSwnJyBvciBgYEsnJyB3aWxsIHNwZWNpZnkgdGhlIHVuaXRzIHRvIGJlIDJeMzAKKyhHQiksIDJeMjAgKE1CKSBvciAyXjEwIChLQikgcmVzcGVjdGl2ZWx5LiAgQSBzdWZmaXggb2YgYGBnLCcnIGBgbScnCitvciBgYGsnJyB3aWxsIHNwZWNpZnkgdW5pdHMgb2YgMTBeOSwgMTBeNiBvciAxMF4zIGJ5dGVzCityZXNwZWN0aXZlbHkuIEZvciBleGFtcGxlOgorQGV4YW1wbGUKK0Bjb2Rley1zIDEyOEt9CitAZW5kIGV4YW1wbGUKK1dpbGwgcmVxdWVzdCB0aGUgbG9jYWwgc2VuZCBhbmQgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemVzIHRvIGJlCisxMjhLQiBvciAxMzEwNzIgYnl0ZXMuIAorCitXaGlsZSB0aGUgaGlzdG9yaWMgZXhwZWN0YXRpb24gaXMgdGhhdCBzZXR0aW5nIHRoZSBzb2NrZXQgYnVmZmVyIHNpemUKK2hhcyBhIGRpcmVjdCBlZmZlY3Qgb24gc2F5IHRoZSBUQ1Agd2luZG93LCB0b2RheSB0aGF0IG1heSBub3QgaG9sZAordHJ1ZSBmb3IgYWxsIHN0YWNrcy4gIFdoZW4gcnVubmluZyB1bmRlciBXaW5kb3dzIGEgdmFsdWUgb2YgMCBtYXkgYmUKK3VzZWQgd2hpY2ggd2lsbCBiZSBhbiBpbmRpY2F0aW9uIHRvIHRoZSBzdGFjayB0aGUgdXNlciB3YW50cyB0byBlbmFibGUKK2EgZm9ybSBvZiBjb3B5IGF2b2lkYW5jZS4gW0RlZmF1bHQ6IC0xIC0gdXNlIHRoZSBzeXN0ZW0ncyBkZWZhdWx0Citzb2NrZXQgYnVmZmVyIHNpemVzXQorCitAdmluZGV4IC1TLCBUZXN0LXNwZWNpZmljCitAaXRlbSAtUyA8c2l6ZXNwZWM+CitUaGlzIG9wdGlvbiBzZXRzIHRoZSByZW1vdGUgc2VuZCBhbmQvb3IgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemVzCitmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiB0byB0aGUgdmFsdWUocykgc3BlY2lmaWVkLiAgT2Z0ZW4sIHRoaXMKK3dpbGwgYWZmZWN0IHRoZSBhZHZlcnRpc2VkIGFuZC9vciBlZmZlY3RpdmUgVENQIG9yIG90aGVyIHdpbmRvdywgYnV0CitvbiBzb21lIHBsYXRmb3JtcyBpdCBtYXkgbm90LiBCeSBkZWZhdWx0IHRoZSB1bml0cyBhcmUgYnl0ZXMsIGJ1dCBhCitzdWZmaXggb2YgYGBHLCcnIGBgTSwnJyBvciBgYEsnJyB3aWxsIHNwZWNpZnkgdGhlIHVuaXRzIHRvIGJlIDJeMzAKKyhHQiksIDJeMjAgKE1CKSBvciAyXjEwIChLQikgcmVzcGVjdGl2ZWx5LiAgQSBzdWZmaXggb2YgYGBnLCcnIGBgbScnCitvciBgYGsnJyB3aWxsIHNwZWNpZnkgdW5pdHMgb2YgMTBeOSwgMTBeNiBvciAxMF4zIGJ5dGVzIHJlc3BlY3RpdmVseS4KK0ZvciBleGFtcGxlOgorQGV4YW1wbGUKK0Bjb2Rley1zIDEyOEt9CitAZW5kIGV4YW1wbGUKK1dpbGwgcmVxdWVzdCB0aGUgbG9jYWwgc2VuZCBhbmQgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemVzIHRvIGJlCisxMjhLQiBvciAxMzEwNzIgYnl0ZXMuIAorCitXaGlsZSB0aGUgaGlzdG9yaWMgZXhwZWN0YXRpb24gaXMgdGhhdCBzZXR0aW5nIHRoZSBzb2NrZXQgYnVmZmVyIHNpemUKK2hhcyBhIGRpcmVjdCBlZmZlY3Qgb24gc2F5IHRoZSBUQ1Agd2luZG93LCB0b2RheSB0aGF0IG1heSBub3QgaG9sZAordHJ1ZSBmb3IgYWxsIHN0YWNrcy4gIFdoZW4gcnVubmluZyB1bmRlciBXaW5kb3dzIGEgdmFsdWUgb2YgMCBtYXkgYmUKK3VzZWQgd2hpY2ggd2lsbCBiZSBhbiBpbmRpY2F0aW9uIHRvIHRoZSBzdGFjayB0aGUgdXNlciB3YW50cyB0byBlbmFibGUKK2EgZm9ybSBvZiBjb3B5IGF2b2lkYW5jZS4gIFtEZWZhdWx0OiAtMSAtIHVzZSB0aGUgc3lzdGVtJ3MgZGVmYXVsdAorc29ja2V0IGJ1ZmZlciBzaXplc10KKworQHZpbmRleCAtNCwgVGVzdC1zcGVjaWZpYworQGl0ZW0gLTQKK1NldCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzIGZhbWlseSBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiB0bworQUZfSU5FVCAtIGllIHVzZSBJUHY0IGFkZHJlc3Npbmcgb25seS4gIEp1c3QgYXMgd2l0aCB0aGVpciBnbG9iYWwKK2NvbW1hbmQtbGluZSBjb3VudGVycGFydHMgdGhlIGxhc3Qgb2YgdGhlIEBvcHRpb257LTR9LCBAb3B0aW9uey02fSwKK0BvcHRpb257LUh9IG9yIEBvcHRpb257LUx9IG9wdGlvbiB3aW5zIGZvciB0aGVpciByZXNwZWN0aXZlIGFkZHJlc3MKK2ZhbWlsaWVzLgorCitAdmluZGV4IC02IFRlc3Qtc3BlY2lmaWMKK0BpdGVtIC02CitUaGlzIG9wdGlvbiBpcyBpZGVudGljYWwgdG8gaXRzIEBvcHRpb257LTR9IGNvdXNpbiwgYnV0IHJlcXVlc3RzIElQdjYKK2FkZHJlc3NlcyBmb3IgdGhlIGxvY2FsIGFuZCByZW1vdGUgZW5kcyBvZiB0aGUgZGF0YSBjb25uZWN0aW9uLgorCitAZW5kIHRhYmxlCisKK0BtZW51CisqIFRDUF9SUjo6ICAgICAgICAgICAgICAgICAgICAgIAorKiBUQ1BfQ0M6OiAgICAgICAgICAgICAgICAgICAgICAKKyogVENQX0NSUjo6ICAgICAgICAgICAgICAgICAgICAgCisqIFVEUF9SUjo6ICAgICAgICAgICAgICAgICAgICAgIAorKiBYVElfVENQX1JSOjogICAgICAgICAgICAgICAgICAKKyogWFRJX1RDUF9DQzo6ICAgICAgICAgICAgICAgICAgCisqIFhUSV9UQ1BfQ1JSOjogICAgICAgICAgICAgICAgIAorKiBYVElfVURQX1JSOjogICAgICAgICAgICAgICAgICAKKyogRExDTF9SUjo6ICAgICAgICAgICAgICAgICAgICAgCisqIERMQ09fUlI6OiAgICAgICAgICAgICAgICAgICAgIAorKiBTQ1RQX1JSOjogICAgICAgICAgICAgICAgICAgICAKK0BlbmQgbWVudQorCitAbm9kZSBUQ1BfUlIsIFRDUF9DQywgT3B0aW9ucyBDb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCBfUlIgdGVzdHMsIE9wdGlvbnMgQ29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgX1JSIHRlc3RzCitAY2luZGV4IE1lYXN1cmluZyBMYXRlbmN5CitAY2luZGV4IExhdGVuY3ksIFJlcXVlc3QtUmVzcG9uc2UKK0BzdWJzZWN0aW9uIFRDUF9SUgorCitBIFRDUF9SUiAoVENQIFJlcXVlc3QvUmVzcG9uc2UpIHRlc3QgaXMgcmVxdWVzdGVkIGJ5IHBhc3NpbmcgYSB2YWx1ZQorb2YgYGBUQ1BfUlInJyB0byB0aGUgZ2xvYmFsIEBvcHRpb257LXR9IGNvbW1hbmQtbGluZSBvcHRpb24uICBBIFRDUF9SUgordGVzdCBjYW4gYmUgdGhvdWdoLW9mIGFzIGEgdXNlci1zcGFjZSB0byB1c2VyLXNwYWNlIEBjb2Rle3Bpbmd9IHdpdGgKK25vIHRoaW5rIHRpbWUgLSBpdCBpcyBhIHN5bmNocm9ub3VzLCBvbmUgdHJhbnNhY3Rpb24gYXQgYSB0aW1lLAorcmVxdWVzdC9yZXNwb25zZSB0ZXN0LgorCitUaGUgdHJhbnNhY3Rpb24gcmF0ZSBpcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlIHRyYW5zYWN0aW9ucyBleGNoYW5nZWQKK2RpdmlkZWQgYnkgdGhlIGxlbmd0aCBvZiB0aW1lIGl0IHRvb2sgdG8gcGVyZm9ybSB0aG9zZSB0cmFuc2FjdGlvbnMuCisKK0lmIHRoZSB0d28gU3lzdGVtcyBVbmRlciBUZXN0IGFyZSBvdGhlcndpc2UgaWRlbnRpY2FsLCBhIFRDUF9SUiB0ZXN0Cit3aXRoIHRoZSBzYW1lIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHNpemUgc2hvdWxkIGJlIHN5bW1ldHJpYyAtIGl0CitzaG91bGQgbm90IG1hdHRlciB3aGljaCB3YXkgdGhlIHRlc3QgaXMgcnVuLCBhbmQgdGhlIENQVSB1dGlsaXphdGlvbgorbWVhc3VyZWQgc2hvdWxkIGJlIHZpcnR1YWxseSB0aGUgc2FtZSBvbiBlYWNoIHN5c3RlbS4gIElmIG5vdCwgaXQKK3N1Z2dlc3RzIHRoYXQgdGhlIENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc20gYmVpbmcgdXNlZCBtYXkgaGF2ZSBzb21lLAord2VsbCwgaXNzdWVzIG1lYXN1cmluZyBDUFUgdXRpbGl6YXRpb24gY29tcGxldGVseSBhbmQgYWNjdXJhdGVseS4KKworVGltZSB0byBlc3RhYmxpc2ggdGhlIFRDUCBjb25uZWN0aW9uIGlzIG5vdCBjb3VudGVkIGluIHRoZSByZXN1bHQuICBJZgoreW91IHdhbnQgY29ubmVjdGlvbiBzZXR1cCBvdmVyaGVhZHMgaW5jbHVkZWQsIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlCitUQ1BfQ0Mgb3IgVENQX0NSUiB0ZXN0cy4KKworSWYgc3BlY2lmeWluZyB0aGUgQG9wdGlvbnstRH0gb3B0aW9uIHRvIHNldCBUQ1BfTk9ERUxBWSBhbmQgZGlzYWJsZQordGhlIE5hZ2xlIEFsZ29yaXRobSBpbmNyZWFzZXMgdGhlIHRyYW5zYWN0aW9uIHJhdGUgcmVwb3J0ZWQgYnkgYQorVENQX1JSIHRlc3QsIGl0IGltcGxpZXMgdGhlIHN0YWNrKHMpIG92ZXIgd2hpY2ggdGhlIFRDUF9SUiB0ZXN0IGlzCitydW5uaW5nIGhhdmUgYSBicm9rZW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIE5hZ2xlIEFsZ29yaXRobS4gIExpa2VseQorYXMgbm90IHRoZXkgYXJlIGludGVycHJldGluZyBOYWdsZSBvbiBhIHNlZ21lbnQgYnkgc2VnbWVudCBiYXNpcworcmF0aGVyIHRoYW4gYSB1c2VyIHNlbmQgYnkgdXNlciBzZW5kIGJhc2lzLiAgWW91IHNob3VsZCBjb250YWN0IHlvdXIKK3N0YWNrIHZlbmRvcihzKSB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8gdGhlbS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHR3byBzeXN0ZW1zIHJ1bm5pbmcgYSBiYXNpYyBUQ1BfUlIgdGVzdCBvdmVyIGEKKzEwIEdpZ2FiaXQgRXRoZXJuZXQgbGluazoKKworQGV4YW1wbGUKK25ldHBlcmYgLXQgVENQX1JSIC1IIDE5Mi4xNjguMi4xMjUKK1RDUCBSRVFVRVNUL1JFU1BPTlNFIFRFU1QgZnJvbSAwLjAuMC4wICgwLjAuMC4wKSBwb3J0IDAgQUZfSU5FVCB0byAxOTIuMTY4LjIuMTI1ICgxOTIuMTY4LjIuMTI1KSBwb3J0IDAgQUZfSU5FVAorTG9jYWwgL1JlbW90ZQorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLgorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICAKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgCisKKzE2Mzg0ICA4NzM4MCAgMSAgICAgICAgMSAgICAgICAxMC4wMCAgICAyOTE1MC4xNSAgIAorMTYzODQgIDg3MzgwIAorQGVuZCBleGFtcGxlCisKK0luIHRoaXMgZXhhbXBsZSB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc2l6ZXMgd2VyZSBvbmUgYnl0ZSwgdGhlCitzb2NrZXQgYnVmZmVycyB3ZXJlIGxlZnQgYXQgdGhlaXIgZGVmYXVsdHMsIGFuZCB0aGUgdGVzdCByYW4gZm9yIGFsbAorb2YgMTAgc2Vjb25kcy4gIFRoZSB0cmFuc2FjdGlvbiBwZXIgc2Vjb25kIHJhdGUgd2FzIHJhdGhlciBnb29kIDopCisKK0Bub2RlIFRDUF9DQywgVENQX0NSUiwgVENQX1JSLCBPcHRpb25zIENvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIF9SUiB0ZXN0cworQGNpbmRleCBDb25uZWN0aW9uIExhdGVuY3kKK0BjaW5kZXggTGF0ZW5jeSwgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50CitAc3Vic2VjdGlvbiBUQ1BfQ0MKKworQSBUQ1BfQ0MgKFRDUCBDb25uZWN0L0Nsb3NlKSB0ZXN0IGlzIHJlcXVlc3RlZCBieSBwYXNzaW5nIGEgdmFsdWUgb2YKK2BgVENQX0NDJycgdG8gdGhlIGdsb2JhbCBAb3B0aW9uey10fSBvcHRpb24uICBBIFRDUF9DQyB0ZXN0IHNpbXBseQorbWVhc3VyZXMgaG93IGZhc3QgdGhlIHBhaXIgb2Ygc3lzdGVtcyBjYW4gb3BlbiBhbmQgY2xvc2UgY29ubmVjdGlvbnMKK2JldHdlZW4gb25lIGFub3RoZXIgaW4gYSBzeW5jaHJvbm91cyAob25lIGF0IGEgdGltZSkgbWFubmVyLiAgV2hpbGUKK3RoaXMgaXMgY29uc2lkZXJlZCBhbiBfUlIgdGVzdCwgbm8gcmVxdWVzdCBvciByZXNwb25zZSBpcyBleGNoYW5nZWQKK292ZXIgdGhlIGNvbm5lY3Rpb24uCisKK0BjaW5kZXggUG9ydCBSZXVzZQorQGNpbmRleCBUSU1FX1dBSVQKK1RoZSBpc3N1ZSBvZiBUSU1FX1dBSVQgcmV1c2UgaXMgYW4gaW1wb3J0YW50IG9uZSBmb3IgYSBUQ1BfQ0MgdGVzdC4KK0Jhc2ljYWxseSwgVElNRV9XQUlUIHJldXNlIGlzIHdoZW4gYSBwYWlyIG9mIHN5c3RlbXMgY2h1cm4gdGhyb3VnaAorY29ubmVjdGlvbnMgZmFzdCBlbm91Z2ggdGhhdCB0aGV5IHdyYXAgdGhlIDE2LWJpdCBwb3J0IG51bWJlciBzcGFjZSBpbgorbGVzcyB0aW1lIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgVElNRV9XQUlUIHN0YXRlLiAgV2hpbGUgaXQgaXMgaW5kZWVkCit0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRvIGBgcmV1c2UnJyBhIGNvbm5lY3Rpb24gaW4gVElNRV9XQUlULCB0aGUKK2NvbmRpdGlvbnMgdW5kZXIgd2hpY2ggc3VjaCByZXVzZSBpcyBwb3NzaWJsZSBhcmUgcmF0aGVyIHJhcmUuICBBbgorYXR0ZW1wdCB0byByZXVzZSBhIGNvbm5lY3Rpb24gaW4gVElNRV9XQUlUIGNhbiByZXN1bHQgaW4gYSBub24tdHJpdmlhbAorZGVsYXkgaW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LgorCitCYXNpY2FsbHksIGFueSB0aW1lIHRoZSBjb25uZWN0aW9uIGNodXJuIHJhdGUgYXBwcm9hY2hlczoKKworU2l6ZW9mKGNsaWVudHBvcnRzcGFjZSkgLyBMZW5ndGhvZihUSU1FX1dBSVQpCisKK3RoZXJlIGlzIHRoZSByaXNrIG9mIFRJTUVfV0FJVCByZXVzZS4gIFRvIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIHRoaXMKK2hhcHBlbmluZywgbmV0cGVyZiB3aWxsIGJ5IGRlZmF1bHQgc2VsZWN0IGl0cyBvd24gY2xpZW50IHBvcnQgbnVtYmVycworZnJvbSB0aGUgcmFuZ2Ugb2YgNTAwMCB0byA2NTUzNS4gIE9uIHN5c3RlbXMgd2l0aCBhIDYwIHNlY29uZAorVElNRV9XQUlUIHN0YXRlLCB0aGlzIHNob3VsZCBhbGxvdyByb3VnaGx5IDEwMDAgdHJhbnNhY3Rpb25zIHBlcgorc2Vjb25kLiAgVGhlIHNpemUgb2YgdGhlIGNsaWVudCBwb3J0IHNwYWNlIHVzZWQgYnkgbmV0cGVyZiBjYW4gYmUKK2NvbnRyb2xsZWQgdmlhIHRoZSB0ZXN0LXNwZWNpZmljIEBvcHRpb257LXB9IG9wdGlvbiwgd2hpY2ggdGFrZXMgYQorQGRmbntzaXplc3BlY30gYXMgYSB2YWx1ZSBzZXR0aW5nIHRoZSBtaW5pbXVtIChmaXJzdCB2YWx1ZSkgYW5kCittYXhpbXVtIChzZWNvbmQgdmFsdWUpIHBvcnQgbnVtYmVycyB1c2VkIGJ5IG5ldHBlcmYgYXQgdGhlIGNsaWVudCBlbmQuCisKK1NpbmNlIG5vIHJlcXVlc3RzIG9yIHJlc3BvbnNlcyBhcmUgZXhjaGFuZ2VkIGR1cmluZyBhIFRDUF9DQyB0ZXN0LAorb25seSB0aGUgQG9wdGlvbnstSH0sIEBvcHRpb257LUx9LCBAb3B0aW9uey00fSBhbmQgQG9wdGlvbnstNn0gb2YgdGhlCitgYGNvbW1vbicnIHRlc3Qtc3BlY2lmaWMgb3B0aW9ucyBhcmUgbGlrZWx5IHRvIGhhdmUgYW4gZWZmZWN0LCBpZiBhbnksCitvbiB0aGUgcmVzdWx0cy4gIFRoZSBAb3B0aW9uey1zfSBhbmQgQG9wdGlvbnstU30gb3B0aW9ucyBfbWF5XyBoYXZlCitzb21lIGVmZmVjdCBpZiB0aGV5IGFsdGVyIHRoZSBudW1iZXIgYW5kL29yIHR5cGUgb2Ygb3B0aW9ucyBjYXJyaWVkIGluCit0aGUgVENQIFNZTmNocm9uaXplIHNlZ21lbnRzLiAgVGhlIEBvcHRpb257LVB9ICBhbmQgQG9wdGlvbnstcn0KK29wdGlvbnMgYXJlIHV0dGVybHkgaWdub3JlZC4KKworU2luY2UgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCB0ZWFyLWRvd24gZm9yIFRDUCBpcyBub3Qgc3ltbWV0cmljLAorYSBUQ1BfQ0MgdGVzdCBpcyBub3Qgc3ltbWV0cmljIGluIGl0cyBsb2FkaW5nIG9mIHRoZSB0d28gc3lzdGVtcyB1bmRlcgordGVzdC4KKworQG5vZGUgVENQX0NSUiwgVURQX1JSLCBUQ1BfQ0MsIE9wdGlvbnMgQ29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgX1JSIHRlc3RzCitAY2luZGV4IExhdGVuY3ksIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudAorQGNpbmRleCBMYXRlbmN5LCBSZXF1ZXN0LVJlc3BvbnNlCitAc3Vic2VjdGlvbiBUQ1BfQ1JSCisKK1RoZSBUQ1AgQ29ubmVjdC9SZXF1ZXN0L1Jlc3BvbnNlIChUQ1BfQ1JSKSB0ZXN0IGlzIHJlcXVlc3RlZCBieQorcGFzc2luZyBhIHZhbHVlIG9mIGBgVENQX0NSUicnIHRvIHRoZSBnbG9iYWwgQG9wdGlvbnstdH0gY29tbWFuZC1saW5lCitvcHRpb24uICBBIFRDUF9SUiB0ZXN0IGlzIGxpa2UgYSBtZXJnZXIgb2YgYSBUQ1BfUlIgYW5kIFRDUF9DQyB0ZXN0Cit3aGljaCBtZWFzdXJlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiwgZXhjaGFuZ2luZworYSBzaW5nbGUgcmVxdWVzdC9yZXNwb25zZSB0cmFuc2FjdGlvbiwgYW5kIHRlYXJpbmctZG93biB0aGF0Citjb25uZWN0aW9uLiAgVGhpcyBpcyB2ZXJ5IG11Y2ggbGlrZSB3aGF0IGhhcHBlbnMgaW4gYW4gSFRUUCAxLjAgb3IKK0hUVFAgMS4xIGNvbm5lY3Rpb24gd2hlbiBIVFRQIEtlZXBhbGl2ZXMgYXJlIG5vdCB1c2VkLiAgSW4gZmFjdCwgdGhlCitUQ1BfQ1JSIHRlc3Qgd2FzIGFkZGVkIHRvIG5ldHBlcmYgdG8gc2ltdWxhdGUganVzdCB0aGF0LgorCitTaW5jZSBhIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGFyZSBleGNoYW5nZWQgdGhlIEBvcHRpb257LXJ9LAorQG9wdGlvbnstc30gYW5kIEBvcHRpb257LVN9IG9wdGlvbnMgY2FuIGhhdmUgYW4gZWZmZWN0IG9uIHRoZQorcGVyZm9ybWFuY2UuCisKK1RoZSBpc3N1ZSBvZiBUSU1FX1dBSVQgcmV1c2UgZXhpc3RzIGZvciB0aGUgVENQX0NSUiB0ZXN0IGp1c3QgYXMgaXQKK2RvZXMgZm9yIHRoZSBUQ1BfQ0MgdGVzdC4gIFNpbWlsYXJseSwgc2luY2UgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50CithbmQgdGVhci1kb3duIGlzIG5vdCBzeW1tZXRyaWMsIGEgVENQX0NSUiB0ZXN0IGlzIG5vdCBzeW1tZXRyaWMgZXZlbgord2hlbiB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc2l6ZXMgYXJlIHRoZSBzYW1lLgorCitAbm9kZSBVRFBfUlIsIFhUSV9UQ1BfUlIsIFRDUF9DUlIsIE9wdGlvbnMgQ29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgX1JSIHRlc3RzCitAY2luZGV4IExhdGVuY3ksIFJlcXVlc3QtUmVzcG9uc2UKK0BjaW5kZXggUGFja2V0IExvc3MKK0BzdWJzZWN0aW9uIFVEUF9SUgorCitBIFVEUCBSZXF1ZXN0L1Jlc3BvbnNlIChVRFBfUlIpIHRlc3QgaXMgcmVxdWVzdGVkIGJ5IHBhc3NpbmcgYSB2YWx1ZQorb2YgYGBVRFBfUlInJyB0byBhIGdsb2JhbCBAb3B0aW9uey10fSBvcHRpb24uICBJdCBpcyB2ZXJ5IG11Y2ggdGhlCitzYW1lIGFzIGEgVENQX1JSIHRlc3QgZXhjZXB0IFVEUCBpcyB1c2VkIHJhdGhlciB0aGFuIFRDUC4KKworVURQIGRvZXMgbm90IHByb3ZpZGUgZm9yIHJldHJhbnNtaXNzaW9uIG9mIGxvc3QgVURQIGRhdGFncmFtcywgYW5kCituZXRwZXJmIGRvZXMgbm90IGFkZCBhbnl0aGluZyBmb3IgdGhhdCBlaXRoZXIuICBUaGlzIG1lYW5zIHRoYXQgaWYKK19hbnlfIHJlcXVlc3Qgb3IgcmVzcG9uc2UgaXMgbG9zdCwgdGhlIGV4Y2hhbmdlIG9mIHJlcXVlc3RzIGFuZAorcmVzcG9uc2VzIHdpbGwgc3RvcCBmcm9tIHRoYXQgcG9pbnQgdW50aWwgdGhlIHRlc3QgdGltZXIgZXhwaXJlcy4KK05ldHBlcmYgd2lsbCBub3QgcmVhbGx5IGBga25vdycnIHRoaXMgaGFzIGhhcHBlbmVkIC0gdGhlIG9ubHkgc3ltcHRvbQord2lsbCBiZSBhIGxvdyB0cmFuc2FjdGlvbiBwZXIgc2Vjb25kIHJhdGUuCisKK1RoZSBuZXRwZXJmIHNpZGUgb2YgYSBVRFBfUlIgdGVzdCB3aWxsIGNhbGwgQGNvZGV7Y29ubmVjdCgpfSBvbiBpdHMKK2RhdGEgc29ja2V0IGFuZCB0aGVuY2Vmb3J0aCB1c2UgdGhlIEBjb2Rle3NlbmQoKX0gYW5kIEBjb2Rle3JlY3YoKX0KK3NvY2tldCBjYWxscy4gIFRoZSBuZXRzZXJ2ZXIgc2lkZSBvZiBhIFVEUF9SUiB0ZXN0IHdpbGwgbm90IGNhbGwKK0Bjb2Rle2Nvbm5lY3QoKX0gYW5kIHdpbGwgdXNlIEBjb2Rle3JlY3Zmcm9tKCl9IGFuZCBAY29kZXtzZW5kdG8oKX0KK2NhbGxzLiAgVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgdGhlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHNpemVzIGFyZSB0aGUKK3NhbWUsIGEgVURQX1JSIHRlc3QgaXMgX25vdF8gc3ltbWV0cmljIGluIGl0cyBsb2FkaW5nIG9mIHRoZSB0d28KK3N5c3RlbXMgdW5kZXIgdGVzdC4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgVURQX1JSIHRlc3QgYmV0d2VlbiB0d28gb3RoZXJ3aXNlCitpZGVudGljYWwgdHdvLUNQVSBzeXN0ZW1zIGpvaW5lZCB2aWEgYSAxIEdpZ2FiaXQgRXRoZXJuZXQgbmV0d29yazoKKworQGV4YW1wbGUKKyQgbmV0cGVyZiAtVCAxIC1IIDE5Mi4xNjguMS4yMTMgLXQgVURQX1JSIC1jIC1DCitVRFAgUkVRVUVTVC9SRVNQT05TRSBURVNUIGZyb20gMC4wLjAuMCAoMC4wLjAuMCkgcG9ydCAwIEFGX0lORVQgdG8gMTkyLjE2OC4xLjIxMyAoMTkyLjE2OC4xLjIxMykgcG9ydCAwIEFGX0lORVQKK0xvY2FsIC9SZW1vdGUKK1NvY2tldCBTaXplICAgUmVxdWVzdCBSZXNwLiAgRWxhcHNlZCBUcmFucy4gICBDUFUgICAgQ1BVICAgIFMuZGVtICAgUy5kZW0KK1NlbmQgICBSZWN2ICAgU2l6ZSAgICBTaXplICAgVGltZSAgICBSYXRlICAgICBsb2NhbCAgcmVtb3RlIGxvY2FsICAgcmVtb3RlCitieXRlcyAgYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgIHNlY3MuICAgcGVyIHNlYyAgJSBJICAgICUgSSAgICB1cy9UciAgIHVzL1RyCisKKzY1NTM1ICA2NTUzNSAgMSAgICAgICAxICAgICAgMTAuMDEgICAxNTI2Mi40OCAgIDEzLjkwICAxNi4xMSAgMTguMjIxICAyMS4xMTYKKzY1NTM1ICA2NTUzNSAKK0BlbmQgZXhhbXBsZQorCitUaGlzIGV4YW1wbGUgaW5jbHVkZXMgdGhlIEBvcHRpb257LWN9IGFuZCBAb3B0aW9uey1DfSBvcHRpb25zIHRvCitlbmFibGUgQ1BVIHV0aWxpemF0aW9uIHJlcG9ydGluZyBhbmQgc2hvd3MgdGhlIGFzeW1tZXRyeSBpbiBDUFUKK2xvYWRpbmcuICBUaGUgQG9wdGlvbnstVH0gb3B0aW9uIHdhcyB1c2VkIHRvIG1ha2Ugc3VyZSBuZXRwZXJmIGFuZAorbmV0c2VydmVyIHJhbiBvbiBhIGdpdmVuIENQVSBhbmQgZGlkIG5vdCBtb3ZlIGFyb3VuZCBkdXJpbmcgdGhlIHRlc3QuCisKK0Bub2RlIFhUSV9UQ1BfUlIsIFhUSV9UQ1BfQ0MsIFVEUF9SUiwgT3B0aW9ucyBDb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCBfUlIgdGVzdHMKK0BjaW5kZXggTGF0ZW5jeSwgUmVxdWVzdC1SZXNwb25zZQorQHN1YnNlY3Rpb24gWFRJX1RDUF9SUgorCitBbiBYVElfVENQX1JSIHRlc3QgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgYSBAcmVme1RDUF9SUn0gdGVzdCBvbmx5Cit1c2luZyB0aGUgWFRJIHJhdGhlciB0aGFuIEJTRCBTb2NrZXRzIGludGVyZmFjZS4gSXQgaXMgcmVxdWVzdGVkIGJ5CitwYXNzaW5nIGEgdmFsdWUgb2YgYGBYVElfVENQX1JSJycgdG8gdGhlIEBvcHRpb257LXR9IGdsb2JhbAorY29tbWFuZC1saW5lIG9wdGlvbi4KKworVGhlIHRlc3Qtc3BlY2lmaWMgb3B0aW9ucyBmb3IgYW4gWFRJX1RDUF9SUiB0ZXN0IGFyZSB0aGUgc2FtZSBhcyB0aG9zZQorZm9yIGEgVENQX1JSIHRlc3Qgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIEBvcHRpb257LVggPGRldnNwZWM+fSBvcHRpb24gdG8KK3NwZWNpZnkgdGhlIG5hbWVzIG9mIHRoZSBsb2NhbCBhbmQvb3IgcmVtb3RlIFhUSSBkZXZpY2UgZmlsZShzKS4KKworQG5vZGUgWFRJX1RDUF9DQywgWFRJX1RDUF9DUlIsIFhUSV9UQ1BfUlIsIE9wdGlvbnMgQ29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgX1JSIHRlc3RzCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BjaW5kZXggTGF0ZW5jeSwgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50CitAc3Vic2VjdGlvbiBYVElfVENQX0NDCisKK0Bub2RlIFhUSV9UQ1BfQ1JSLCBYVElfVURQX1JSLCBYVElfVENQX0NDLCBPcHRpb25zIENvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIF9SUiB0ZXN0cworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAY2luZGV4IExhdGVuY3ksIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudAorQGNpbmRleCBMYXRlbmN5LCBSZXF1ZXN0LVJlc3BvbnNlCitAc3Vic2VjdGlvbiBYVElfVENQX0NSUgorCitAbm9kZSBYVElfVURQX1JSLCBETENMX1JSLCBYVElfVENQX0NSUiwgT3B0aW9ucyBDb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCBfUlIgdGVzdHMKK0BjaW5kZXggTGF0ZW5jeSwgUmVxdWVzdC1SZXNwb25zZQorQHN1YnNlY3Rpb24gWFRJX1VEUF9SUgorCitBbiBYVElfVURQX1JSIHRlc3QgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgYSBVRFBfUlIgdGVzdCBvbmx5IHVzaW5nCit0aGUgWFRJIHJhdGhlciB0aGFuIEJTRCBTb2NrZXRzIGludGVyZmFjZS4gIEl0IGlzIHJlcXVlc3RlZCBieSBwYXNzaW5nCithIHZhbHVlIG9mIGBgWFRJX1VEUF9SUicnIHRvIHRoZSBAb3B0aW9uey10fSBnbG9iYWwgY29tbWFuZC1saW5lCitvcHRpb24uCisKK1RoZSB0ZXN0LXNwZWNpZmljIG9wdGlvbnMgZm9yIGFuIFhUSV9VRFBfUlIgdGVzdCBhcmUgdGhlIHNhbWUgYXMgdGhvc2UKK2ZvciBhIFVEUF9SUiB0ZXN0IHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBAb3B0aW9uey1YIDxkZXZzcGVjPn0KK29wdGlvbiB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBsb2NhbCBhbmQvb3IgcmVtb3RlIFhUSSBkZXZpY2UKK2ZpbGUocykuCisKK0Bub2RlIERMQ0xfUlIsIERMQ09fUlIsIFhUSV9VRFBfUlIsIE9wdGlvbnMgQ29tbW9uIHRvIFRDUCBVRFAgYW5kIFNDVFAgX1JSIHRlc3RzCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BjaW5kZXggTGF0ZW5jeSwgUmVxdWVzdC1SZXNwb25zZQorQHN1YnNlY3Rpb24gRExDTF9SUgorCitAbm9kZSBETENPX1JSLCBTQ1RQX1JSLCBETENMX1JSLCBPcHRpb25zIENvbW1vbiB0byBUQ1AgVURQIGFuZCBTQ1RQIF9SUiB0ZXN0cworQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAY2luZGV4IExhdGVuY3ksIFJlcXVlc3QtUmVzcG9uc2UKK0BzdWJzZWN0aW9uIERMQ09fUlIKKworQG5vZGUgU0NUUF9SUiwgICwgRExDT19SUiwgT3B0aW9ucyBDb21tb24gdG8gVENQIFVEUCBhbmQgU0NUUCBfUlIgdGVzdHMKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQGNpbmRleCBMYXRlbmN5LCBSZXF1ZXN0LVJlc3BvbnNlCitAc3Vic2VjdGlvbiBTQ1RQX1JSCisKK0Bub2RlIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBBZ2dyZWdhdGUgUGVyZm9ybWFuY2UsIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyLCBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgUmVxdWVzdC9SZXNwb25zZSAsIFRvcAorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAY2luZGV4IEFnZ3JlZ2F0ZSBQZXJmb3JtYW5jZQorQHZpbmRleCAtLWVuYWJsZS1idXJzdCwgQ29uZmlndXJlCitAY2hhcHRlciBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgQWdncmVnYXRlIFBlcmZvcm1hbmNlCisKK0ByZWZ7TmV0cGVyZjQsTmV0cGVyZjR9IGlzIHRoZSBwcmVmZXJyZWQgYmVuY2htYXJrIHRvIHVzZSB3aGVuIG9uZQord2FudHMgdG8gbWVhc3VyZSBhZ2dyZWdhdGUgcGVyZm9ybWFuY2UgYmVjYXVzZSBuZXRwZXJmIGhhcyBubyBzdXBwb3J0Citmb3IgZXhwbGljaXQgc3luY2hyb25pemF0aW9uIG9mIGNvbmN1cnJlbnQgdGVzdHMuCisKK0Jhc2ljYWxseSwgdGhlcmUgYXJlIHR3byB3YXlzIHRvIG1lYXN1cmUgYWdncmVnYXRlIHBlcmZvcm1hbmNlIHdpdGgKK25ldHBlcmYuICBUaGUgZmlyc3QgaXMgdG8gcnVuIG11bHRpcGxlLCBjb25jdXJyZW50IG5ldHBlcmYgdGVzdHMgYW5kCitjYW4gYmUgYXBwbGllZCB0byBhbnkgb2YgdGhlIG5ldHBlcmYgdGVzdHMuICBUaGUgc2Vjb25kIGlzIHRvCitjb25maWd1cmUgbmV0cGVyZiB3aXRoIEBjb2Rley0tZW5hYmxlLWJ1cnN0fSBhbmQgaXMgYXBwbGljYWJsZSB0byB0aGUKK1RDUF9SUiB0ZXN0LgorCitAbWVudQorKiBSdW5uaW5nIENvbmN1cnJlbnQgTmV0cGVyZiBUZXN0czo6ICAKKyogVXNpbmcgLS1lbmFibGUtYnVyc3Q6OiAgICAgICAgCitAZW5kIG1lbnUKKworQG5vZGUgIFJ1bm5pbmcgQ29uY3VycmVudCBOZXRwZXJmIFRlc3RzLCBVc2luZyAtLWVuYWJsZS1idXJzdCwgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEFnZ3JlZ2F0ZSBQZXJmb3JtYW5jZSwgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEFnZ3JlZ2F0ZSBQZXJmb3JtYW5jZQorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBSdW5uaW5nIENvbmN1cnJlbnQgTmV0cGVyZiBUZXN0cworCitAcmVme05ldHBlcmY0LE5ldHBlcmY0fSBpcyB0aGUgcHJlZmVycmVkIGJlbmNobWFyayB0byB1c2Ugd2hlbiBvbmUKK3dhbnRzIHRvIG1lYXN1cmUgYWdncmVnYXRlIHBlcmZvcm1hbmNlIGJlY2F1c2UgbmV0cGVyZiBoYXMgbm8gc3VwcG9ydAorZm9yIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiBvZiBjb25jdXJyZW50IHRlc3RzLiAgVGhpcyBsZWF2ZXMKK25ldHBlcmYyIHJlc3VsdHMgdnVsbmVyYWJsZSB0byBAZGZue3NrZXd9IGVycm9ycy4KKworSG93ZXZlciwgc2luY2UgdGhlcmUgYXJlIHRpbWVzIHdoZW4gbmV0cGVyZjQgaXMgdW5hdmFpbGFibGUgaXQgbWF5IGJlCituZWNlc3NhcnkgdG8gcnVuIG5ldHBlcmYuIFRoZSBza2V3IGVycm9yIGNhbiBiZSBtaW5pbWl6ZWQgYnkgbWFraW5nCit1c2Ugb2YgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZnVuY3Rpb25hbGl0eS4gIFRoZW4gb25lIHNpbXBseQorbGF1bmNoZXMgbXVsdGlwbGUgdGVzdHMgZnJvbSB0aGUgc2hlbGwgdXNpbmcgYSBAY29kZXtmb3J9IGxvb3Agb3IgdGhlCitsaWtlOgorCitAZXhhbXBsZQorZm9yIGkgaW4gMSAyIDMgNAorZG8KK25ldHBlcmYgLXQgVENQX1NUUkVBTSAtSCB0YXJkeS5jdXAuaHAuY29tIC1pIDEwIC1QIDAgJgorZG9uZQorQGVuZCBleGFtcGxlCisKK3doaWNoIHdpbGwgcnVuIGZvdXIsIGNvbmN1cnJlbnQgQHJlZntUQ1BfU1RSRUFNLFRDUF9TVFJFQU19IHRlc3RzIGZyb20KK3RoZSBzeXN0ZW0gb24gd2hpY2ggaXQgaXMgZXhlY3V0ZWQgdG8gdGFyZHkuY3VwLmhwLmNvbS4gIEVhY2gKK2NvbmN1cnJlbnQgbmV0cGVyZiB3aWxsIGl0ZXJhdGUgMTAgdGltZXMgdGhhbmtzIHRvIHRoZSBAb3B0aW9uey1pfQorb3B0aW9uIGFuZCB3aWxsIG9taXQgdGhlIHRlc3QgYmFubmVycyAob3B0aW9uIEBvcHRpb257LVB9KSBmb3IKK2JyZXZpdHkuICBUaGUgb3V0cHV0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKK0BleGFtcGxlCisgODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgMjM1LjE1ICAgCisgODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgMjM1LjA5ICAgCisgODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgMjM1LjM4ICAgCisgODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgMjMzLjk2CitAZW5kIGV4YW1wbGUKKworV2UgY2FuIHRha2UgdGhlIHN1bSBvZiB0aGUgcmVzdWx0cyBhbmQgYmUgcmVhc29uYWJseSBjb25maWRlbnQgdGhhdAordGhlIGFnZ3JlZ2F0ZSBwZXJmb3JtYW5jZSB3YXMgOTQwIE1iaXRzL3MuCisKK0lmIHlvdSBzZWUgd2FybmluZ3MgYWJvdXQgbmV0cGVyZiBub3QgYWNoaWV2aW5nIHRoZSBjb25maWRlbmNlCitpbnRlcnZhbHMsIHRoZSBiZXN0IHRoaW5nIHRvIGRvIGlzIHRvIGluY3JlYXNlIHRoZSBudW1iZXIgb2YKK2l0ZXJhdGlvbnMgd2l0aCBAb3B0aW9uey1pfSBhbmQvb3IgaW5jcmVhc2UgdGhlIHJ1biBsZW5ndGggb2YgZWFjaAoraXRlcmF0aW9uIHdpdGggQG9wdGlvbnstbH0uCisKK1lvdSBjYW4gYWxzbyBlbmFibGUgbG9jYWwgKEBvcHRpb257LWN9KSBhbmQvb3IgcmVtb3RlIChAb3B0aW9uey1DfSkKK0NQVSB1dGlsaXphdGlvbjoKKworQGV4YW1wbGUKK2ZvciBpIGluIDEgMiAzIDQKK2RvCituZXRwZXJmIC10IFRDUF9TVFJFQU0gLUggdGFyZHkuY3VwLmhwLmNvbSAtaSAxMCAtUCAwIC1jIC1DICYKK2RvbmUKKworODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgICAyMzUuNDcgICAzLjY3ICAgICA1LjA5ICAgICAxMC4yMjYgIDE0LjE4MCAKKzg3MzgwICAxNjM4NCAgMTYzODQgICAgMTAuMDMgICAgICAgMjM0LjczICAgMy42NyAgICAgNS4wOSAgICAgMTAuMjYwICAxNC4yMjUgCis4NzM4MCAgMTYzODQgIDE2Mzg0ICAgIDEwLjAzICAgICAgIDIzNC42NCAgIDMuNjcgICAgIDUuMTAgICAgIDEwLjI2MyAgMTQuMjMxIAorODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgICAyMzQuODcgICAzLjY3ICAgICA1LjA5ICAgICAxMC4yNTMgIDE0LjIxNQorQGVuZCBleGFtcGxlCisKK0lmIHRoZSBDUFUgdXRpbGl6YXRpb25zIHJlcG9ydGVkIGZvciB0aGUgc2FtZSBzeXN0ZW0gYXJlIHRoZSBzYW1lIG9yCit2ZXJ5IHZlcnkgY2xvc2UgeW91IGNhbiBiZSByZWFzb25hYmx5IGNvbmZpZGVudCB0aGF0IHNrZXcgZXJyb3IgaXMKK21pbmltaXplZC4gIFByZXN1bWVhYmx5IG9uZSBjb3VsZCB0aGVuIG9taXQgQG9wdGlvbnstaX0gYnV0IHRoYXQgaXMKK25vdCBhZHZpc2VkLCBwYXJ0aWN1bGFybHkgd2hlbi9pZiB0aGUgQ1BVIHV0aWxpemF0aW9uIGFwcHJvYWNoZXMgMTAwCitwZXJjZW50LiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUgd2Ugc2VlIHRoYXQgdGhlIENQVSB1dGlsaXphdGlvbiBvbiB0aGUKK2xvY2FsIHN5c3RlbSByZW1haW5zIHRoZSBzYW1lIGZvciBhbGwgZm91ciB0ZXN0cywgYW5kIGlzIG9ubHkgb2ZmIGJ5CiswLjAxIG91dCBvZiA1LjA5IG9uIHRoZSByZW1vdGUgc3lzdGVtLgorCitAcXVvdGF0aW9uCitAYntOT1RFOiBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0byByZW1lbWViZXIgdGhhdCBuZXRwZXJmIGlzIGNhbGN1bGF0aW5nCitzeXN0ZW0td2lkZSBDUFUgdXRpbGl6YXRpb24uICBXaGVuIGNhbGN1bGF0aW5nIHRoZSBzZXJ2aWNlIGRlbWFuZAorKHRob3NlIGxhc3QgdHdvIGNvbHVtbnMgaW4gdGhlIG91dHB1dCBhYm92ZSkgZWFjaCBuZXRwZXJmIGFzc3VtZXMgaXQKK2lzIHRoZSBvbmx5IHRoaW5nIHJ1bm5pbmcgb24gdGhlIHN5c3RlbS4gIFRoaXMgbWVhbnMgdGhhdCBmb3IKK2NvbmN1cnJlbnQgdGVzdHMgdGhlIHNlcnZpY2UgZGVtYW5kcyByZXBvcnRlZCBieSBuZXRwZXJmIHdpbGwgYmUKK3dyb25nLiAgT25lIGhhcyB0byBjb21wdXRlIHNlcnZpY2UgZGVtYW5kcyBmb3IgY29uY3VycmVudCB0ZXN0cyBieQoraGFuZC59CitAZW5kIHF1b3RhdGlvbgorCitJZiB5b3Ugd2lzaCB5b3UgY2FuIGFkZCBhIHVuaXF1ZSwgZ2xvYmFsIEBvcHRpb257LUJ9IG9wdGlvbiB0byBlYWNoCitjb21tYW5kIGxpbmUgdG8gYXBwZW5kIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIG91dHB1dDoKKworQGV4YW1wbGUKK2ZvciBpIGluIDEgMiAzIDQKK2RvCituZXRwZXJmIC10IFRDUF9TVFJFQU0gLUggdGFyZHkuY3VwLmhwLmNvbSAtQiAidGhpcyBpcyB0ZXN0ICRpIiAtaSAxMCAtUCAwICYKK2RvbmUKKworODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgMjM0LjkwICAgdGhpcyBpcyB0ZXN0IDQKKzg3MzgwICAxNjM4NCAgMTYzODQgICAgMTAuMDMgICAgIDIzNC40MSAgIHRoaXMgaXMgdGVzdCAyCis4NzM4MCAgMTYzODQgIDE2Mzg0ICAgIDEwLjAzICAgICAyMzUuMjYgICB0aGlzIGlzIHRlc3QgMQorODczODAgIDE2Mzg0ICAxNjM4NCAgICAxMC4wMyAgICAgMjM1LjA5ICAgdGhpcyBpcyB0ZXN0IDMKK0BlbmQgZXhhbXBsZQorCitZb3Ugd2lsbCBub3RpY2UgdGhhdCB0aGUgdGVzdHMgY29tcGxldGVkIGluIGFuIG9yZGVyIG90aGVyIHRoYW4gdGhleQord2VyZSBzdGFydGVkIGZyb20gdGhlIHNoZWxsLiAgVGhpcyB1bmRlcnNjb3JlcyB3aHkgdGhlcmUgaXMgYSB0aHJlYXQKK29mIHNrZXcgZXJyb3IgYW5kIHdoeSBuZXRwZXJmNCBpcyB0aGUgcHJlZmVycmVkIHRvb2wgZm9yIGFnZ3JlZ2F0ZQordGVzdHMuICBFdmVuIGlmIHlvdSBzZWUgdGhlIE5ldHBlcmYgQ29udHJpYnV0aW5nIEVkaXRvciBhY3RpbmcgdG8gdGhlCitjb250cmFyeSEtKQorCitAbm9kZSAgVXNpbmcgLS1lbmFibGUtYnVyc3QsICAsIFJ1bm5pbmcgQ29uY3VycmVudCBOZXRwZXJmIFRlc3RzLCBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgQWdncmVnYXRlIFBlcmZvcm1hbmNlCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0BzZWN0aW9uIFVzaW5nIC0tZW5hYmxlLWJ1cnN0CisKK0lmIG9uZSBjb25maWd1cmVzIG5ldHBlcmYgd2l0aCBAY29kZXstLWVuYWJsZS1idXJzdH06CisKK0BleGFtcGxlCitjb25maWd1cmUgLS1lbmFibGUtYnVyc3QKK0BlbmQgZXhhbXBsZQorCitUaGVuIGEgdGVzdC1zcGVjaWZpYyBAb3B0aW9uey1iIG51bX0gb3B0aW9uIGlzIGFkZGVkIHRvIHRoZQorQHJlZntUQ1BfUlIsVENQX1JSfSBhbmQgQHJlZntVRFBfUlIsVURQX1JSfSB0ZXN0cy4gVGhpcyBvcHRpb24gY2F1c2VzCitUQ1BfUlIgYW5kIFVEUF9SUiB0byBxdWlja2x5IHdvcmsgdGhlaXIgd2F5IHVwIHRvIGhhdmluZyBhdCBsZWFzdAorQG9wdGlvbntudW19IHRyYW5zYWN0aW9ucyBpbiBmbGlnaHQgYXQgb25lIHRpbWUuCisKK1RoaXMgaXMgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBvciBldmVuIGluIGNvbmp1bmN0aW9uIHdpdGgKK211bHRpcGxlLWNvbmN1cnJlbnQgX1JSIHRlc3RzLiAgV2hlbiBydW4gd2l0aCBqdXN0IGEgc2luZ2xlIGluc3RhbmNlCitvZiBuZXRwZXJmLCBpbmNyZWFzaW5nIHRoZSBidXJzdCBzaXplIGNhbiBkZXRlcm1pbmUgdGhlIG1heGltdW0gbnVtYmVyCitvZiB0cmFuc2FjdGlvbnMgcGVyIHNlY29uZCBjYW4gYmUgc2VydmljZWQgYnkgYSBzaW5nbGUgcHJvY2VzczoKKworQGV4YW1wbGUKK2ZvciBiIGluIDAgMSAyIDQgOCAxNiAzMgorZG8gCisgbmV0cGVyZiAtdiAwIC10IFRDUF9SUiAtQiAiLWIgJGIiIC1IIGhwY3BjMTA4IC1QIDAgLS0gLWIgJGIKK2RvbmUKKworOTQ1Ny41OSAtYiAwCis5OTc1LjM3IC1iIDEKKzEwMDAwLjYxIC1iIDIKKzIwMDg0LjQ3IC1iIDQKKzI5OTY1LjMxIC1iIDgKKzcxOTI5LjI3IC1iIDE2CisxMDk3MTguMTcgLWIgMzIKK0BlbmQgZXhhbXBsZQorCitUaGUgZ2xvYmFsIEBvcHRpb257LXZ9IGFuZCBAb3B0aW9uey1QfSBvcHRpb25zIHdlcmUgdXNlZCB0byBtaW5pbWl6ZQordGhlIG91dHB1dCB0byB0aGUgc2luZ2xlIGZpZ3VyZSBvZiBtZXJpdCB3aGljaCBpbiB0aGlzIGNhc2UgdGhlCit0cmFuc2FjdGlvbiByYXRlLiAgVGhlIGdsb2JhbCBAY29kZXstQn0gb3B0aW9uIHdhcyB1c2VkIHRvIG1vcmUKK2NsZWFybHkgbGFiZWwgdGhlIG91dHB1dCwgYW5kIHRoZSB0ZXN0LXNwZWNpZmljIEBvcHRpb257LWJ9IG9wdGlvbgorZW5hYmxlZCBieSBAY29kZXstLWVuYWJsZS1idXJzdH0gc2V0IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGluCitmbGlnaHQgYXQgb25lIHRpbWUuCisKK05vdywgc2luY2UgdGhlIHRlc3Qtc3BlY2lmaWMgQG9wdGlvbnstRH0gb3B0aW9uIHdhcyBub3Qgc3BlY2lmaWVkIHRvCitzZXQgVENQX05PREVMQVksIHRoZSBzdGFjayB3YXMgZnJlZSB0byBgYGJ1bmRsZScnIHJlcXVlc3RzIGFuZC9vcgorcmVzcG9uc2VzIGludG8gVENQIHNlZ21lbnRzIGFzIGl0IHNhdyBmaXQsIGFuZCBzaW5jZSB0aGUgZGVmYXVsdAorcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc2l6ZSBpcyBvbmUgYnl0ZSwgdGhlcmUgY291bGQgaGF2ZSBiZWVuIHNvbWUKK2NvbnNpZGVyYWJsZSBidW5kbGluZy4gIElmIG9uZSB3YW50cyB0byB0cnkgdG8gYWNoaWV2ZSBhIGNsb3NlciB0bworb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGEgcmVxdWVzdCBhbmQgcmVzcG9uc2UgYW5kIGEgVENQCitzZWdtZW50LCBhZGQgdGhlIHRlc3Qtc3BlY2lmaWMgQG9wdGlvbnstRH0gb3B0aW9uOgorCitAZXhhbXBsZQorZm9yIGIgaW4gMCAxIDIgNCA4IDE2IDMyCitkbworIG5ldHBlcmYgLXYgMCAtdCBUQ1BfUlIgLUIgIi1iICRiIC1EIiAtSCBocGNwYzEwOCAtUCAwIC0tIC1iICRiIC1ECitkb25lCisKKyA4Njk1LjEyIC1iIDAgLUQKKyAxOTk2Ni40OCAtYiAxIC1ECisgMjA2OTEuMDcgLWIgMiAtRAorIDQ5ODkzLjU4IC1iIDQgLUQKKyA2MjA1Ny4zMSAtYiA4IC1ECisgMTA4NDE2Ljg4IC1iIDE2IC1ECisgMTE0NDExLjY2IC1iIDMyIC1ECitAZW5kIGV4YW1wbGUKKworWW91IGNhbiBzZWUgdGhhdCB0aGlzIGhhcyBhIHJhdGhlciBsYXJnZSBlZmZlY3Qgb24gdGhlIHJlcG9ydGVkCit0cmFuc2FjdGlvbiByYXRlLiAgSW4gdGhpcyBwYXJ0aWN1bGFyIGluc3RhbmNlLCB0aGUgYXV0aG9yIGJlbGlldmVzIGl0CityZWxhdGVzIHRvIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSB0ZXN0IGFuZCBpbnRlcnJ1cHQgY29hbGVzY2luZworc2V0dGluZ3MgaW4gdGhlIGRyaXZlciBmb3IgdGhlIE5JQ3MgdXNlZC4KKworQHF1b3RhdGlvbgorQGJ7Tk9URTogRXZlbiBpZiB5b3Ugc2V0IHRoZSBAb3B0aW9uey1EfSBvcHRpb24gdGhhdCBpcyBzdGlsbCBub3QgYQorZ3VhcmFudGVlIHRoYXQgZWFjaCB0cmFuc2FjdGlvbiBpcyBpbiBpdHMgb3duIFRDUCBzZWdtZW50cy4gIFlvdQorc2hvdWxkIGdldCBpbnRvIHRoZSBoYWJpdCBvZiB2ZXJpZnlpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZQordHJhbnNhY3Rpb24gcmF0ZSBhbmQgdGhlIHBhY2tldCByYXRlIHZpYSBvdGhlciBtZWFuc30KK0BlbmQgcXVvdGF0aW9uCisKK1lvdSBjYW4gYWxzbyBjb21iaW5lIEBjb2Rley0tZW5hYmxlLWJ1cnN0fSBmdW5jdGlvbmFsaXR5IHdpdGgKK2NvbmN1cnJlbnQgbmV0cGVyZiB0ZXN0cy4gIFRoaXMgd291bGQgdGhlbiBiZSBhbiBgYGFnZ3JlZ2F0ZSBvZgorYWdncmVnYXRlcycnIGlmIHlvdSBsaWtlOgorCitAZXhhbXBsZQorCitmb3IgaSBpbiAxIDIgMyA0CitkbworIG5ldHBlcmYgLUggaHBjcGMxMDggLXYgMCAtUCAwIC1pIDEwIC1CICJhZ2dyZWdhdGUgJGkgLWIgOCAtRCIgLXQgVENQX1JSIC0tIC1iIDggLUQgJgorZG9uZQorCisgNDY2NjguMzggYWdncmVnYXRlIDQgLWIgOCAtRAorIDQ0ODkwLjY0IGFnZ3JlZ2F0ZSAyIC1iIDggLUQKKyA0NTcwMi4wNCBhZ2dyZWdhdGUgMSAtYiA4IC1ECisgNDYzNTIuNDggYWdncmVnYXRlIDMgLWIgOCAtRAorCitAZW5kIGV4YW1wbGUKKworU2luY2UgZWFjaCBuZXRwZXJmIGRpZCBoaXQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLCB3ZSBjYW4gYmUKK3JlYXNvbmFibHkgY2VydGFpbiB0aGF0IHRoZSBhZ2dyZWdhdGUgdHJhbnNhY3Rpb24gcGVyIHNlY29uZCByYXRlIHdhcwordGhlIHN1bSBvZiBhbGwgZm91ciBjb25jdXJyZW50IHRlc3RzLCBvciBzb21ldGhpbmcganVzdCBzaHkgb2YgMTg0LDAwMAordHJhbnNhY3Rpb25zIHBlciBzZWNvbmQuICBUbyBnZXQgc29tZSBpZGVhIGlmIHRoYXQgd2FzIGFsc28gdGhlIHBhY2tldAorcGVyIHNlY29uZCByYXRlLCB3ZSBjb3VsZCBicmFja2V0IHRoYXQgQGNvZGV7Zm9yfSBsb29wIHdpdGggc29tZXRoaW5nCit0byBnYXRoZXIgc3RhdGlzdGljcyBhbmQgcnVuIHRoZSByZXN1bHRzIHRocm91Z2gKK0B1cmVme2Z0cDovL2Z0cC5jdXAuaHAuY29tL2Rpc3QvbmV0d29ya2luZy90b29scyxiZWZvcmVhZnRlcn06CisKK0BleGFtcGxlCisvdXNyL3NiaW4vZXRodG9vbCAtUyBldGgyID4gYmVmb3JlCitmb3IgaSBpbiAxIDIgMyA0CitkbworIG5ldHBlcmYgLUggMTkyLjE2OC4yLjEwOCAtbCA2MCAtdiAwIC1QIDAgLUIgImFnZ3JlZ2F0ZSAkaSAtYiA4IC1EIiAtdCBUQ1BfUlIgLS0gLWIgOCAtRCAmCitkb25lCit3YWl0CisvdXNyL3NiaW4vZXRodG9vbCAtUyBldGgyID4gYWZ0ZXIKKworIDUyMzEyLjYyIGFnZ3JlZ2F0ZSAyIC1iIDggLUQKKyA1MDEwNS42NSBhZ2dyZWdhdGUgNCAtYiA4IC1ECisgNTA4OTAuODIgYWdncmVnYXRlIDEgLWIgOCAtRAorIDUwODY5LjIwIGFnZ3JlZ2F0ZSAzIC1iIDggLUQKKworYmVmb3JlYWZ0ZXIgYmVmb3JlIGFmdGVyID4gZGVsdGEKKworZ3JlcCBwYWNrZXRzIGRlbHRhCisgICAgIHJ4X3BhY2tldHM6IDEyMjUxNTQ0CisgICAgIHR4X3BhY2tldHM6IDEyMjUxNTUwCisKK0BlbmQgZXhhbXBsZQorCitUaGlzIGV4YW1wbGUgdXNlcyBAY29kZXtldGh0b29sfSBiZWNhdXNlIHRoZSBzeXN0ZW0gYmVpbmcgdXNlZCBpcworcnVubmluZyBMaW51eC4gIE90aGVyIHBsYXRmb3JtcyBoYXZlIG90aGVyIHRvb2xzIC0gZm9yIGV4YW1wbGUgSFAtVVgKK2hhcyBsYW5hZG1pbjoKKworQGV4YW1wbGUKK2xhbmFkbWluIC1nIG1pYnN0YXRzIDxwcGE+CitAZW5kIGV4YW1wbGUKKworYW5kIG9mIGNvdXJzZSBvbmUgY291bGQgaW5zdGVhZCB1c2UgQGNvZGV7bmV0c3RhdH0uCisKK1RoZSBAY29kZXt3YWl0fSBpcyBpbXBvcnRhbnQgYmVjYXVzZSB3ZSBhcmUgbGF1bmNoaW5nIGNvbmN1cnJlbnQKK25ldHBlcmZzIGluIHRoZSBiYWNrZ3JvdW5kLiAgV2l0aG91dCBpdCwgdGhlIHNlY29uZCBldGh0b29sIGNvbW1hbmQKK3dvdWxkIGJlIHJ1biBiZWZvcmUgdGhlIHRlc3RzIGZpbmlzaGVkIGFuZCBwZXJoYXBzIGV2ZW4gYmVmb3JlIHRoZQorbGFzdCBvZiB0aGVtIGdvdCBzdGFydGVkIQorCitUaGUgc3VtIG9mIHRoZSByZXBvcnRlZCB0cmFuc2FjdGlvbiByYXRlcyBpcyAyMDQxNzggb3ZlciA2MCBzZWNvbmRzLAord2hpY2ggaXMgYSB0b3RhbCBvZiAxMjI1MDY4MCB0cmFuc2FjdGlvbnMuICBFYWNoIHRyYW5zYWN0aW9uIGlzIHRoZQorZXhjaGFuZ2Ugb2YgYSByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlLCBzbyB3ZSBtdWx0aXBseSB0aGF0IGJ5IDIgdG8KK2Fycml2ZSBhdCAyNDUwMTM2MC4KKworVGhlIHN1bSBvZiB0aGUgZXRodG9vbCBzdGF0cyBpcyAyNDUwMzA5NCBwYWNrZXRzIHdoaWNoIG1hdGNoZXMgd2hhdAorbmV0cGVyZiB3YXMgcmVwb3J0aW5nIHZlcnkgd2VsbC4gCisKK0hhZCB0aGUgcmVxdWVzdCBvciByZXNwb25zZSBzaXplIGRpZmZlcmVkLCB3ZSB3b3VsZCBuZWVkIHRvIGtub3cgaG93CitpdCBjb21wYXJlZCB3aXRoIHRoZSBAZGZue01TU30gZm9yIHRoZSBjb25uZWN0aW9uLgorCitKdXN0IGZvciBncmlucywgaGVyZSBpcyB0aGUgZXhjZXJjaXNlIHJlcGVhdGVkLCB1c2luZyBAY29kZXtuZXRzdGF0fQoraW5zdGVhZCBvZiBAY29kZXtldGh0b29sfQorCitAZXhhbXBsZQorbmV0c3RhdCAtcyAtdCA+IGJlZm9yZQorZm9yIGkgaW4gMSAyIDMgNAorZG8KKyBuZXRwZXJmIC1sIDYwIC1IIDE5Mi4xNjguMi4xMDggLXYgMCAtUCAwIC1CICJhZ2dyZWdhdGUgJGkgLWIgOCAtRCIgLXQgVENQX1JSIC0tIC1iIDggLUQgJiBkb25lCit3YWl0CituZXRzdGF0IC1zIC10ID4gYWZ0ZXIKKworIDUxMzA1Ljg4IGFnZ3JlZ2F0ZSA0IC1iIDggLUQKKyA1MTg0Ny43MyBhZ2dyZWdhdGUgMiAtYiA4IC1ECisgNTA2NDguMTkgYWdncmVnYXRlIDMgLWIgOCAtRAorIDUzNjA1Ljg2IGFnZ3JlZ2F0ZSAxIC1iIDggLUQKKworYmVmb3JlYWZ0ZXIgYmVmb3JlIGFmdGVyID4gZGVsdGEKKworZ3JlcCBzZWdtZW50cyBkZWx0YQorICAgIDEyNDQ1NzA4IHNlZ21lbnRzIHJlY2VpdmVkCisgICAgMTI0NDU3MzAgc2VnbWVudHMgc2VuZCBvdXQKKyAgICAxIHNlZ21lbnRzIHJldHJhbnNtaXRlZAorICAgIDAgYmFkIHNlZ21lbnRzIHJlY2VpdmVkLgorQGVuZCBleGFtcGxlCisKK1RoZSBzdW1zIGFyZSBsZWZ0IGFzIGFuIGV4Y2VyY2lzZSB0byB0aGUgcmVhZGVyIDopCisKK1RoaW5ncyBiZWNvbWUgY29uc2lkZXJhYmx5IG1vcmUgY29tcGxpY2F0ZWQgaWYgdGhlcmUgYXJlIG5vbi10cnZpYWwKK3BhY2tldCBsb3NzZXMgYW5kL29yIHJldHJhbnNtaXNzaW9ucy4KKworT2YgY291cnNlIGFsbCB0aGlzIGNoZWNraW5nIGlzIHVubmVjZXNzYXJ5IGlmIHRoZSB0ZXN0IGlzIGEgVURQX1JSCit0ZXN0IGJlY2F1c2UgVURQIGBgbmV2ZXInJyBhZ2dyZWdhdGVzIG11bHRpcGxlIHNlbmRzIGludG8gdGhlIHNhbWUgVURQCitkYXRhZ3JhbSwgYW5kIHRoZXJlIGFyZSBubyBBQ0tub3dsZWRnZW1lbnRzIGluIFVEUC4gIFRoZSBsb3NzIG9mIGEKK3NpbmdsZSByZXF1ZXN0IG9yIHJlc3BvbnNlIHdpbGwgbm90IGJyaW5nIGEgYGBidXJzdCcnIFVEUF9SUiB0ZXN0IHRvIGEKK3NjcmVlY2hpbmcgaGFsdCwgYnV0IGl0IHdpbGwgcmVkdWNlIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zCitvdXRzdGFuZGluZyBhdCBhbnkgb25lIHRpbWUuICBBIGBgYnVyc3QnJyBVRFBfUlIgdGVzdCBAYnt3aWxsfSBjb21lIHRvIGEKK2hhbHQgaWYgdGhlIHN1bSBvZiB0aGUgbG9zdCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIHJlYWNoZXMgdGhlIHZhbHVlCitzcGVjaWZpZWQgaW4gdGhlIHRlc3Qtc3BlY2lmaWMgQG9wdGlvbnstYn0gb3B0aW9uLgorCisKK0Bub2RlIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyLCBPdGhlciBOZXRwZXJmIFRlc3RzLCBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgQWdncmVnYXRlIFBlcmZvcm1hbmNlLCBUb3AKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQGNoYXB0ZXIgVXNpbmcgTmV0cGVyZiB0byBNZWFzdXJlIEJpZGlyZWN0aW9uYWwgVHJhbnNmZXIKKworVGhlcmUgYXJlIHR3byB3YXlzIHRvIHVzZSBuZXRwZXJmIHRvIG1lYXN1cmUgdGhlIHBlcmZvbWFuY2Ugb2YKK2JpZGlyZWN0aW9uYWwgdHJhbnNmZXIuICBUaGUgZmlyc3QgaXMgdG8gcnVuIGNvbmN1cnJlbnQgbmV0cGVyZiB0ZXN0cworZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIHNlY29uZCBpcyB0byBjb25maWd1cmUgbmV0cGVyZiB3aXRoCitAY29kZXstLWVuYWJsZS1idXJzdH0gYW5kIHVzZSBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUKK0ByZWZ7VENQX1JSLFRDUF9SUn0gdGVzdC4KKworV2hpbGUgbmVpdGhlciBtZXRob2QgaXMgbW9yZSBgYGNvcnJlY3QnJyB0aGFuIHRoZSBvdGhlciwgZWFjaCBpcyBkb2luZworc28gaW4gZGlmZmVyZW50IHdheXMsIGFuZCB0aGF0IGhhcyBwb3NzaWJsZSBpbXBsaWNhdGlvbnMuICBGb3IKK2luc3RhbmNlLCB1c2luZyB0aGUgY29uY3VycmVudCBuZXRwZXJmIHRlc3QgbWVjaGFuaXNtIG1lYW5zIHRoYXQKK211bHRpcGxlIFRDUCBjb25uZWN0aW9ucyBhbmQgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSBpbnZvbHZlZCwgd2hlcmVhcwordXNpbmcgdGhlIHNpbmdsZSBpbnN0YW5jZSBvZiBUQ1BfUlIgdGhlcmUgaXMgb25seSBvbmUgVENQIGNvbm5lY3Rpb24KK2FuZCBvbmUgcHJvY2VzcyBvbiBlYWNoIGVuZC4gIFRoZXkgbWF5IGJlaGF2ZSBkaWZmZXJlbnRseSwgZXNwZWNpYWxseQorb24gYW4gTVAgc3lzdGVtLgorCitAbWVudQorKiBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyIHdpdGggQ29uY3VycmVudCBUZXN0czo6ICAKKyogQmlkaXJlY3Rpb25hbCBUcmFuc2ZlciB3aXRoIFRDUF9SUjo6ICAKK0BlbmQgbWVudQorCitAbm9kZSAgQmlkaXJlY3Rpb25hbCBUcmFuc2ZlciB3aXRoIENvbmN1cnJlbnQgVGVzdHMsIEJpZGlyZWN0aW9uYWwgVHJhbnNmZXIgd2l0aCBUQ1BfUlIsIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyLCBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgQmlkaXJlY3Rpb25hbCBUcmFuc2ZlcgorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyIHdpdGggQ29uY3VycmVudCBUZXN0cworCitJZiB3ZSBoYWQgdHdvIGhvc3RzIEZyZWQgYW5kIEV0aGVsLCB3ZSBjb3VsZCBzaW1wbHkgcnVuIGEgbmV0cGVyZgorQHJlZntUQ1BfU1RSRUFNLFRDUF9TVFJFQU19IHRlc3Qgb24gRnJlZCBwb2ludGluZyBhdCBFdGhlbCwgYW5kIGEKK2NvbmN1cnJlbnQgbmV0cGVyZiBUQ1BfU1RSRUFNIHRlc3Qgb24gRXRoZWwgcG9pbnRpbmcgYXQgRnJlZCwgYnV0CitzaW5jZSB0aGVyZSBhcmUgbm8gbWVjaGFuaXNtcyB0byBzeW5jaHJvbml6ZSBuZXRwZXJmIHRlc3RzIGFuZCB3ZQord291bGQgYmUgc3RhcnRpbmcgdGVzdHMgZnJvbSB0d28gZGlmZmVyZW50IHN5c3RlbXMsIHRoZXJlIGlzIGEKK2NvbnNpZGVyYWJsZSByaXNrIG9mIHNrZXcgZXJyb3IuCisKK0ZhciBiZXR0ZXIgd291bGQgYmUgdG8gcnVuIHNpbXVsdGFuZW91cyBUQ1BfU1RSRUFNIGFuZAorQHJlZntUQ1BfTUFFUlRTLFRDUF9NQUVSVFN9IHRlc3RzIGZyb20ganVzdCBAYntvbmV9IHN5c3RlbSwgdXNpbmcgdGhlCitjb25jZXB0cyBhbmQgcHJvY2VkdXJlcyBvdXRsaW5lZCBpbiBAcmVme1J1bm5pbmcgQ29uY3VycmVudCBOZXRwZXJmCitUZXN0cyxSdW5uaW5nIENvbmN1cnJlbnQgTmV0cGVyZiBUZXN0c30uIEhlcmUgdGhlbiBpcyBhbiBleGFtcGxlOgorCitAZXhhbXBsZQorZm9yIGkgaW4gMQorZG8KKyBuZXRwZXJmIC1IIDE5Mi4xNjguMi4xMDggLXQgVENQX1NUUkVBTSAtQiAib3V0Ym91bmQiIC1pIDEwIC1QIDAgLXYgMCAtLSAtcyAyNTZLIC1TIDI1NksgJgorIG5ldHBlcmYgLUggMTkyLjE2OC4yLjEwOCAtdCBUQ1BfTUFFUlRTIC1CICJpbmJvdW5kIiAgLWkgMTAgLVAgMCAtdiAwIC0tIC1zIDI1NksgLVMgMjU2SyAmCitkb25lCisKKyA4OTIuNjYgb3V0Ym91bmQKKyA4OTEuMzQgaW5ib3VuZAorCitAZW5kIGV4YW1wbGUKKworV2UgaGF2ZSB1c2VkIGEgQGNvZGV7Zm9yfSBsb29wIGluIHRoZSBzaGVsbCB3aXRoIGp1c3Qgb25lIGl0ZXJhdGlvbgorYmVjYXVzZSB0aGF0IHdpbGwgYmUgQGJ7bXVjaH0gZWFzaWVyIHRvIGdldCBib3RoIHRlc3RzIHN0YXJ0ZWQgYXQgbW9yZSBvcgorbGVzcyB0aGUgc2FtZSB0aW1lIHRoYW4gZG9pbmcgaXQgYnkgaGFuZC4gIFRoZSBnbG9iYWwgQG9wdGlvbnstUH0gYW5kCitAb3B0aW9uey12fSBvcHRpb25zIGFyZSB1c2VkIGJlY2F1c2Ugd2UgYXJlbid0IGludGVyZXN0ZWQgaW4gYW55dGhpbmcKK290aGVyIHRoYW4gdGhlIHRocm91Z2hwdXQsIGFuZCB0aGUgZ2xvYmFsIEBvcHRpb257LUJ9IG9wdGlvbiBpcyB1c2VkCit0byB0YWcgZWFjaCBvdXRwdXQgc28gd2Uga25vdyB3aGljaCB3YXMgaW5ib3VuZCBhbmQgd2hpY2ggb3V0Ym91bmQKK3JlbGF0aXZlIHRvIHRoZSBzeXN0ZW0gb24gd2hpY2ggd2Ugd2VyZSBydW5uaW5nIG5ldHBlcmYuICBPZiBjb3Vyc2UKK3RoYXQgc2Vuc2UgaXMgc3dpdGNoZWQgb24gdGhlIHN5c3RlbSBydW5uaW5nIG5ldHNlcnZlciA6KSAgVGhlIHVzZSBvZgordGhlIGdsb2JhbCBAb3B0aW9uey1pfSBvcHRpb24gaXMgZXhwbGFpbmVkIGluIEByZWZ7UnVubmluZyBDb25jdXJyZW50CitOZXRwZXJmIFRlc3RzLFJ1bm5pbmcgQ29uY3VycmVudCBOZXRwZXJmIFRlc3RzfS4KKworQG5vZGUgIEJpZGlyZWN0aW9uYWwgVHJhbnNmZXIgd2l0aCBUQ1BfUlIsICAsIEJpZGlyZWN0aW9uYWwgVHJhbnNmZXIgd2l0aCBDb25jdXJyZW50IFRlc3RzLCBVc2luZyBOZXRwZXJmIHRvIE1lYXN1cmUgQmlkaXJlY3Rpb25hbCBUcmFuc2ZlcgorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAc2VjdGlvbiBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyIHdpdGggVENQX1JSCisKK0lmIG9uZSBjb25maWd1cmVzIG5ldHBlcmYgd2l0aCBAY29kZXstLWVuYWJsZS1idXJzdH0gdGhlbiBvbmUgY2FuIHVzZQordGhlIHRlc3Qtc3BlY2lmaWMgQG9wdGlvbnstYn0gb3B0aW9uIHRvIGluY3JlYXNlIHRoZSBudW1iZXIgb2YKK3RyYW5zYWN0aW9ucyBpbiBmbGlnaHQgYXQgb25lIHRpbWUuICBJZiBvbmUgYWxzbyB1c2VzIHRoZSAtciBvcHRpb24gdG8KK21ha2UgdGhvc2UgdHJhbnNhY3Rpb25zIGxhcmdlciB0aGUgdGVzdCBzdGFydHMgdG8gbG9vayBtb3JlIGFuZCBtb3JlCitsaWtlIGEgYmlkaXJlY3Rpb25hbCB0cmFuc2ZlciB0aGFuIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LgorCitOb3csIHRoZSBsb2dpYyBiZWhpbmcgQGNvZGV7LS1lbmFibGUtYnVyc3R9IGlzIHZlcnkgc2ltcGxlLCBhbmQgdGhlcmUKK2FyZSBubyBjYWxscyB0byBAY29kZXtwb2xsKCl9IG9yIEBjb2Rle3NlbGVjdCgpfSB3aGljaCBtZWFucyB3ZSB3YW50Cit0byBtYWtlIHN1cmUgdGhhdCB0aGUgQGNvZGV7c2VuZCgpfSBjYWxscyB3aWxsIG5ldmVyIGJsb2NrLCBvciB3ZSBydW4KK3RoZSByaXNrIG9mIGRlYWRsb2NrIHdpdGggZWFjaCBzaWRlIHN0dWNrIHRyeWluZyB0byBjYWxsIEBjb2Rle3NlbmQoKX0KK2FuZCBuZWl0aGVyIGNhbGxpbmcgQGNvZGV7cmVjdigpfS4gIAorCitGb3J0dW5hdGVseSwgdGhpcyBpcyBlYXNpbHkgYWNjb21wbGlzaGVkIGJ5IHNldHRpbmcgYSBgYGxhcmdlIGVub3VnaCcnCitzb2NrZXQgYnVmZmVyIHNpemUgd2l0aCB0aGUgdGVzdC1zcGVjaWZpYyBAb3B0aW9uey1zfSBhbmQgQG9wdGlvbnstU30KK29wdGlvbnMuICBQcmVzZW50bHkgdGhpcyBtdXN0IGJlIHBlcmZvcm1lZCBieSB0aGUgdXNlci4gIEZ1dHVyZQordmVyc2lvbnMgb2YgbmV0cGVyZiBtaWdodCBhdHRlbXB0IHRvIGRvIHRoaXMgYXV0b21hZ2ljYWxseSwgYnV0IHRoZXJlCithcmUgc29tZSBpc3N1ZXMgdG8gYmUgd29ya2VkLW91dC4gCisKK0hlcmUgdGhlbiBpcyBhbiBleGFtcGxlIG9mIGEgYmlkaXJlY3Rpb25hbCB0cmFuc2ZlciB0ZXN0IHVzaW5nCitAY29kZXstLWVuYWJsZS1idXJzdH0gYW5kIHRoZSBAcmVme1RDUF9SUixUQ1BfUlJ9IHRlc3Q6CisKK0BleGFtcGxlCituZXRwZXJmIC10IFRDUF9SUiAtSCBocGNwYzEwOCAtLSAtYiA2IC1yIDMySyAtcyAyNTZLIC1TIDI1NksKK1RDUCBSRVFVRVNUL1JFU1BPTlNFIFRFU1QgZnJvbSAwLjAuMC4wICgwLjAuMC4wKSBwb3J0IDAgQUZfSU5FVCB0byBocGNwYzEwOC5jdXAuaHAuY29tICgxNi44OS44NC4xMDgpIHBvcnQgMCBBRl9JTkVUIDogZmlyc3QgYnVyc3QgNgorTG9jYWwgL1JlbW90ZQorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLgorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICAKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgCisKKzUyNDI4OCA1MjQyODggMzI3NjggICAgMzI3NjggICAxMC4wMSAgICAzNTI1Ljk3ICAgCis1MjQyODggNTI0Mjg4CisKK0BlbmQgZXhhbXBsZQorCitOb3csIGF0IHByZXNlbnQgbmV0cGVyZiBkb2VzIG5vdCBpbmNsdWRlIGEgYml0IG9yIGJ5dGUgcmF0ZSBpbiB0aGUKK291dHB1dCBvZiBhbiBfUlIgdGVzdCB3aGljaCBtZWFucyB3ZSBtdXN0IGNhbGN1bGF0ZSBpdCBvdXJzZWx2ZXMuIEVhY2gKK3RyYW5zYWN0aW9uIGlzIHRoZSBleGNoYW5nZSBvZiAzMjc2OCBieXRlcyBvZiByZXF1ZXN0IGFuZCAzMjc2OCBieXRlcworb2YgcmVzcG9uc2UsIG9yIDY1NTM2IGJ5dGVzLiAgTXVsdGlwbHkgdGhhdCBieSA4IGFuZCB3ZSBhcnJpdmUgYXQKKzUyNDI4OCBiaXRzIHBlciB0cmFuc2FjdGlvbi4gIE11bHRpcGx5IHRoYXQgYnkgMzUyNS45NyBhbmQgd2UgYXJyaXZlCithdCAxODQ4NjIzNzU5IGJpdHMgcGVyIHNlY29uZC4gIFNpbmNlIHRoaW5ncyB3ZXJlIHVuaWZvcm0sIHdlIGNhbgorZGl2aWRlIHRoYXQgYnkgdHdvIGFuZCBhcnJpdmUgYXQgcm91Z2hseSA5MjQzMTE4NzkgYml0cyBwZXIgc2Vjb25kCitlYWNoIHdheS4gIFRoYXQgY29ycmVzcG9uZHMgdG8gYGBsaW5rLXJhdGUnJyBmb3IgYSAxIEdpZ2lhYml0IEV0aGVybmV0Cit3aGljaCBoYXBwZW5zIHRvIGJlIHRoZSB0eXBlIG9mIG5ldHB3cmsgdXNlZCBpbiB0aGUgZXhhbXBsZS4KKworQSBmdXR1cmUgdmVyc2lvbiBvZiBuZXRwZXJmIG1heSBwZXJmb3JtIHRoZSBjYWxjdWxhdGlvbiBvbiBiZWhhbGYgb2YKK3RoZSB1c2VyLCBidXQgaXQgd291bGQgbGlrZWx5IG5vdCBlbWl0IGl0IHVubGVzcyB0aGUgdXNlciBzcGVjaWZpZWQgYQordmVyYm9zaXR5IG9mIDIgb3IgbW9yZSB3aXRoIHRoZSBnbG9iYWwgQG9wdGlvbnstdn0gb3B0aW9uLgorCitAbm9kZSBPdGhlciBOZXRwZXJmIFRlc3RzLCBBZGRyZXNzIFJlc29sdXRpb24sIFVzaW5nIE5ldHBlcmYgdG8gTWVhc3VyZSBCaWRpcmVjdGlvbmFsIFRyYW5zZmVyLCBUb3AKK0BjaGFwdGVyIE90aGVyIE5ldHBlcmYgVGVzdHMKKworQXBhcnQgZnJvbSB0aGUgdHlwaWNhbCBwZXJmb3JtYW5jZSB0ZXN0cywgbmV0cGVyZiBjb250YWlucyBzb21lIHRlc3RzCit3aGljaCBjYW4gYmUgdXNlZCB0byBzdHJlYW1saW5lIG1lYXN1cmVtZW50cyBhbmQgcmVwb3J0aW5nLiAgVGhlc2UKK2luY2x1ZGUgQ1BVIHJhdGUgY2FsaWJyYXRpb24gKHByZXNlbnQpIGFuZCBob3N0IGlkZW50aWZpY2F0aW9uIChmdXR1cmUKK2VuaGFuY2VtZW50KS4KKworQG1lbnUKKyogQ1BVIHJhdGUgY2FsaWJyYXRpb246OiAgICAgICAgCitAZW5kIG1lbnUKKworQG5vZGUgQ1BVIHJhdGUgY2FsaWJyYXRpb24sICAsIE90aGVyIE5ldHBlcmYgVGVzdHMsIE90aGVyIE5ldHBlcmYgVGVzdHMKK0BzZWN0aW9uIENQVSByYXRlIGNhbGlicmF0aW9uCisKK1NvbWUgb2YgdGhlIENQVSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudCBtZWNoYW5pc21zIG9mIG5ldHBlcmYgd29yayBieQorY29tcGFyaW5nIHRoZSByYXRlIGF0IHdoaWNoIHNvbWUgY291bnRlciBpbmNyZW1lbnRzIHdoZW4gdGhlIHN5c3RlbSBpcworaWRsZSB3aXRoIHRoZSByYXRlIGF0IHdoaWNoIHRoYXQgc2FtZSBjb3VudGVyIGluY3JlbWVudHMgd2hlbiB0aGUKK3N5c3RlbSBpcyBydW5uaW5nIGEgbmV0cGVyZiB0ZXN0LiAgVGhlIHJhdGlvIG9mIHRob3NlIHJhdGVzIGlzIHVzZWQgdG8KK2Fycml2ZSBhdCBhIENQVSB1dGlsaXphdGlvbiBwZXJjZW50YWdlLgorCitUaGlzIG1lYW5zIHRoYXQgbmV0cGVyZiBtdXN0IGtub3cgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGNvdW50ZXIKK2luY3JlbWVudHMgd2hlbiB0aGUgc3lzdGVtIGlzIHByZXN1bWVkIHRvIGJlIGBgaWRsZS4nJyAgSWYgaXQgZG9lcyBub3QKK2tub3cgdGhlIHJhdGUsIG5ldHBlcmYgd2lsbCBtZWFzdXJlIGl0IGJlZm9yZSBzdGFydGluZyBhIGRhdGEgdHJhbnNmZXIKK3Rlc3QuICBUaGlzIGNhbGlicmF0aW9uIHN0ZXAgdGFrZXMgNDAgc2Vjb25kcyBmb3IgZWFjaCBvZiB0aGUgbG9jYWwgb3IKK3JlbW90ZSB5c3RlbXMsIGFuZCBpZiByZXBlYXRlZCBmb3IgZWFjaCBuZXRwZXJmIHRlc3Qgd291bGQgbWFrZSB0YWtpbmcKK3JlcGVhdGVkIG1lYXN1cmVtZW50cyByYXRoZXIgc2xvdy4KKworVGh1cywgdGhlIG5ldHBlcmYgQ1BVIHV0aWxpemF0aW9uIG9wdGlvbnMgQG9wdGlvbnstY30gYW5kIGFuZAorQG9wdGlvbnstQ30gY2FuIHRha2UgYW4gb3B0aW9uYWwgY2FsaWJyYXRpb24gdmFsdWUuICBUaGlzIHZhbHVlIGlzCit1c2VkIGFzIHRoZSBgYGlkbGUgcmF0ZScnIGFuZCB0aGUgY2FsaWJyYXRpb24gc3RlcCBpcyBub3QKK3BlcmZvcm1lZC4gVG8gZGV0ZXJtaW5lIHRoZSBpZGxlIHJhdGUsIG5ldHBlcmYgY2FuIGJlIHVzZWQgdG8gcnVuCitzcGVjaWFsIHRlc3RzIHdoaWNoIG9ubHkgcmVwb3J0IHRoZSB2YWx1ZSBvZiB0aGUgY2FsaWJyYXRpb24gLSB0aGV5CithcmUgdGhlIExPQ19DUFUgYW5kIFJFTV9DUFUgdGVzdHMuICBUaGVzZSByZXR1cm4gdGhlIGNhbGlicmF0aW9uIHZhbHVlCitmb3IgdGhlIGxvY2FsIGFuZCByZW1vdGUgc3lzdGVtIHJlc3BlY3RpdmVseS4gIEEgY29tbW9uIHdheSB0byB1c2UKK3RoZXNlIHRlc3RzIGlzIHRvIHN0b3JlIHRoZWlyIHJlc3VsdHMgaW50byBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQKK3VzZSB0aGF0IGluIHN1YnNlcXVlbnQgbmV0cGVyZiBjb21tYW5kczoKKworQGV4YW1wbGUKK0xPQ19SQVRFPWBuZXRwZXJmIC10IExPQ19DUFVgCitSRU1fUkFURT1gbmV0cGVyZiAtSCA8cmVtb3RlPiAtdCBSRU1fQ1BVYAorbmV0cGVyZiAtSCA8cmVtb3RlPiAtYyAkTE9DX1JBVEUgLUMgJFJFTV9SQVRFIC4uLiAtLSAuLi4KKy4uLgorbmV0cGVyZiAtSCA8cmVtb3RlPiAtYyAkTE9DX1JBVEUgLUMgJFJFTV9SQVRFIC4uLiAtLSAuLi4KK0BlbmQgZXhhbXBsZQorCitJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSBuZXRwZXJmIHRvIG1lYXN1cmUgYWdncmVnYXRlIHJlc3VsdHMsIGl0IGlzCitpbXBvcnRhbnQgdG8gdXNlIHRoZSBMT0NfQ1BVIGFuZCBSRU1fQ1BVIHRlc3RzIHRvIGdldCB0aGUgY2FsaWJyYXRpb24KK3ZhbHVlcyBmaXJzdCB0byBhdm9pZCBpc3N1ZXMgd2l0aCBzb21lIG9mIHRoZSBhZ2dyZWdhdGUgbmV0cGVyZiB0ZXN0cwordHJhbnNmZXJyaW5nIGRhdGEgd2hpbGUgb3RoZXJzIGFyZSBgYGlkbGUnJyBhbmQgZ2V0dGluZyBib2d1cworY2FsaWJyYXRpb24gdmFsdWVzLiAgV2hlbiBydW5uaW5nIGFnZ3JlZ2F0ZSB0ZXN0cywgaXQgaXMgdmVyeQoraW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgYW55IG9uZSBpbnN0YW5jZSBvZiBuZXRwZXJmIGRvZXMgbm90IGtub3cKK2Fib3V0IHRoZSBvdGhlciBpbnN0YW5jZXMgb2YgbmV0cGVyZi4gIEl0IHdpbGwgcmVwb3J0IGdsb2JhbCBDUFUKK3V0aWxpemF0aW9uIGFuZCB3aWxsIGNhbGN1bGF0ZSBzZXJ2aWNlIGRlbWFuZCBiZWxpZXZpbmcgaXQgd2FzIHRoZQorb25seSB0aGluZyBjYXVzaW5nIHRoYXQgQ1BVIHV0aWxpemF0aW9uLiAgU28sIHlvdSBjYW4gdXNlIHRoZSBDUFUKK3V0aWxpemF0aW9uIHJlcG9ydGVkIGJ5IG5ldHBlcmYgaW4gYW4gYWdncmVnYXRlIHRlc3QsIGJ1dCB5b3UgaGF2ZSB0bworY2FsY3VsYXRlIHNlcnZpY2UgZGVtYW5kcyBieSBoYW5kLgorCitAbm9kZSBBZGRyZXNzIFJlc29sdXRpb24sIEVuaGFuY2luZyBOZXRwZXJmLCBPdGhlciBOZXRwZXJmIFRlc3RzLCBUb3AKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQGNoYXB0ZXIgQWRkcmVzcyBSZXNvbHV0aW9uCisKK05ldHBlcmYgdmVyc2lvbnMgMi40LjAgYW5kIGxhdGVyIGhhdmUgbWVyZ2VkIElQdjQgYW5kIElQdjYgdGVzdHMgc28KK3RoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0ZXN0cyBpbiBAZmlsZXtzcmMvbmV0dGVzdF9pcHY2LmN9IGhhcyBiZWVuCitzdWJzdW1lZCBpbnRvIHRoZSB0ZXN0cyBpbiBAZmlsZXtzcmMvbmV0dGVzdF9ic2QuY30gIFRoaXMgaGFzIGJlZW4KK2FjY29tcGxpc2hlZCBpbiBwYXJ0IGJ5IHN3aXRjaGluZyBmcm9tIEBjb2Rle2dldGhvc3RieW5hbWUoKX10bworQGNvZGV7Z2V0YWRkcmluZm8oKX0gZXhjbHVzaXZlbHkuICBXaGlsZSBpdCB3YXMgdGhlb3JldGljYWxseSBwb3NzaWJsZQordG8gZ2V0IG11bHRpcGxlIHJlc3VsdHMgZm9yIGEgaG9zdG5hbWUgZnJvbSBAY29kZXtnZXRob3N0YnluYW1lKCl9IGl0Cit3YXMgZ2VuZXJhbGx5IHVubGlrZWx5IGFuZCBuZXRwZXJmJ3MgaWdub3Jpbmcgb2YgdGhlIHNlY29uZCBhbmQgbGF0ZXIKK3Jlc3VsdHMgd2FzIG5vdCBtdWNoIG9mIGFuIGlzc3VlLgorCitOb3cgd2l0aCBAY29kZXtnZXRhZGRyaW5mb30gYW5kIHBhcnRpY3VsYXJseSB3aXRoIEFGX1VOU1BFQyBpdCBpcworaW5jcmVhc2luZ2x5IGxpa2VseSB0aGF0IGEgZ2l2ZW4gaG9zdG5hbWUgd2lsbCBoYXZlIG11bHRpcGxlCithc3NvY2lhdGVkIGFkZHJlc3Nlcy4gIFRoZSBAY29kZXtlc3RhYmxpc2hfY29udHJvbCgpfSByb3V0aW5lIG9mCitAZmlsZXtzcmMvbmV0bGliLmN9IHdpbGwgaW5kZWVkIGF0dGVtcHQgdG8gY2hvc2UgZnJvbSBhbW9uZyBhbGwgdGhlCittYXRjaGluZyBJUCBhZGRyZXNzZXMgd2hlbiBlc3RhYmxpc2hpbmcgdGhlIGNvbnRyb2wgY29ubmVjdGlvbi4KK05ldHBlcmYgZG9lcyBub3QgX3JlYWxseV8gY2FyZSBpZiB0aGUgY29udHJvbCBjb25uZWN0aW9uIGlzIElQdjQgb3IKK0lQdjYgb3IgZXZlbiBtaXhlZCBvbiBlaXRoZXIgZW5kLgorCitIb3dldmVyLCB0aGUgaW5kaXZpZHVhbCB0ZXN0cyBzdGlsbCBhc3MtdS1tZSB0aGF0IHRoZSBmaXJzdCByZXN1bHQgaW4KK3RoZSBhZGRyZXNzIGxpc3QgaXMgdGhlIG9uZSB0byBiZSB1c2VkLiAgV2hldGhlciBvciBub3QgdGhpcyB3aWxsCit0dXJuLW91dCB0byBiZSBhbiBpc3N1ZSBoYXMgeWV0IHRvIGJlIGRldGVybWluZWQuCisKK0lmIHlvdSBkbyBydW4gaW50byBwcm9ibGVtcyB3aXRoIHRoaXMsIHRoZSBlYXNpZXN0IHdvcmthcm91bmQgaXMgdG8KK3NwZWNpZnkgSVAgYWRkcmVzc2VzIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uIGV4cGxpY2l0bHkgaW4gdGhlCit0ZXN0LXNwZWNpZmljIEBvcHRpb257LUh9IGFuZCBAb3B0aW9uey1MfSBvcHRpb25zLiAgQXQgc29tZSBwb2ludCwgdGhlCituZXRwZXJmIHRlc3RzIF9tYXlfIHRyeSB0byBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQgaW4gdGhlaXIgcGFyc2luZyBvZgorcmV0dXJucyBmcm9tIEBjb2Rle2dldGFkZHJpbmZvKCl9IC0gc3RyYXctbWFuIHBhdGNoZXMgdG8KK0BlbWFpbHtuZXRwZXJmLWZlZWRiYWNrQEBuZXRwZXJmLm9yZ30gd291bGQgb2YgY291cnNlIGJlIG1vc3Qgd2VsY29tZQorOikKKworTmV0cGVyZiBoYXMgbGV2ZXJhZ2VkIGNvZGUgZnJvbSBvdGhlciBvcGVuLXNvdXJjZSBwcm9qZWN0cyB3aXRoCithbWVuYWJsZSBsaWNlbnNpbmcgdG8gcHJvdmlkZSBhIHJlcGxhY2VtZW50IEBjb2Rle2dldGFkZHJpbmZvKCl9IGNhbGwKK29uIHRob3NlIHBsYXRmb3JtcyB3aGVyZSB0aGUgQGNvbW1hbmR7Y29uZmlndXJlfSBzY3JpcHQgYmVsaWV2ZXMgdGhlcmUKK2lzIG5vIG5hdGl2ZSBnZXRhZGRyaW5mbyBjYWxsLiAgQXMgb2YgdGhpcyB3cml0aW5nLCB0aGUgcmVwbGFjZW1lbnQKK0Bjb2Rle2dldGFkZHJpbmZvKCl9IGFzIGJlZW4gdGVzdGVkIG9uIEhQLVVYIDExLjAgYW5kIHRoZW4gcHJlc3VtZWQgdG8KK3J1biBlbHNld2hlcmUuCisKK0Bub2RlIEVuaGFuY2luZyBOZXRwZXJmLCBOZXRwZXJmNCwgQWRkcmVzcyBSZXNvbHV0aW9uLCBUb3AKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQGNoYXB0ZXIgRW5oYW5jaW5nIE5ldHBlcmYKKworTmV0cGVyZiBpcyBjb25zdGFudGx5IGV2b2x2aW5nLiAgSWYgeW91IGZpbmQgeW91IHdhbnQgdG8gbWFrZQorZW5oYW5jZW1lbnRzIHRvIG5ldHBlcmYsIGJ5IGFsbCBtZWFucyBkbyBzby4gIElmIHlvdSB3aXNoIHRvIGFkZCBhIG5ldworYGBzdWl0ZScnIG9mIHRlc3RzIHRvIG5ldHBlcmYgdGhlIGdlbmVyYWwgaWRlYSBpcyB0bworCitAZW51bWVyYXRlCitAaXRlbQorQWRkIGZpbGVzIEBmaWxle3NyYy9uZXR0ZXN0X211bWJsZS5jfSBhbmQgQGZpbGV7c3JjL25ldHRlc3RfbXVtYmxlLmh9Cit3aGVyZSBtdW1ibGUgaXMgcmVwbGFjZWQgd2l0aCBzb21ldGhpbmcgbWVhbmluZ2Z1bCBmb3IgdGhlIHRlc3Qtc3VpdGUuCitAaXRlbQorQWRkIHN1cHBvcnQgZm9yIGFuIGFwcm9wcmlhdGUgQG9wdGlvbnstLWVuYWJsZS1tdW1ibGV9IG9wdGlvbiBpbgorQGZpbGV7Y29uZmlndXJlLmFjfS4KK0BpdGVtCitFZGl0IEBmaWxle3NyYy9uZXRwZXJmLmN9LCBAZmlsZXtuZXRzaC5jfSwgYW5kIEBmaWxle25ldHNlcnZlci5jfSBhcworcmVxdWlyZWQsIHVzaW5nICNpZmRlZiBXQU5UX01VTUJMRS4KK0BpdGVtCitDb21waWxlIGFuZCB0ZXN0CitAZW5kIGVudW1lcmF0ZQorCitJZiB5b3Ugd2lzaCB0byBzdWJtaXQgeW91ciBjaGFuZ2VzIGZvciBwb3NzaWJsZSBpbmNsdXNpb24gaW50byB0aGUKK21haW5saW5lIHNvdXJjZXMsIHBsZWFzZSB0cnkgdG8gYmFzZSB5b3VyIGNoYW5nZXMgb24gdGhlIGxhdGVzdAorYXZhaWxhYmxlIHNvdXJjZXMuIChAeHJlZntHZXR0aW5nIE5ldHBlcmYgQml0c30uKSBhbmQgdGhlbiBzZW5kIGVtYWlsCitkZXNjcmliaW5nIHRoZSBjaGFuZ2VzIGF0IGEgaGlnaCBsZXZlbCB0bworQGVtYWlse25ldHBlcmYtZmVlZGJhY2tAQG5ldHBlcmYub3JnfSBvciBwZXJoYXBzCitAZW1haWx7bmV0cGVyZi10YWxrQEBuZXRwZXJmLm9yZ30uICBJZiB0aGUgY29uY2Vuc3VzIGlzIHBvc2l0aXZlLCB0aGVuCitzZW5kaW5nIGNvbnRleHQgQGNvbW1hbmR7ZGlmZn0gcmVzdWx0cyB0bworQGVtYWlse25ldHBlcmYtZmVlZGJhY2tAQG5ldHBlcmYub3JnfSBpcyB0aGUgbmV4dCBzdGVwLiAgRnJvbSB0aGF0Citwb2ludCwgaXQgaXMgYSBtYXR0ZXIgb2YgcGVzdGVyaW5nIHRoZSBOZXRwZXJmIENvbnRyaWJ1dGluZyBFZGl0b3IKK3VudGlsIGhlIGdldHMgdGhlIGNoYW5nZXMgaW5jb3Jwb3JhdGVkIDopCisKK0Bub2RlICBOZXRwZXJmNCwgQ29uY2VwdCBJbmRleCwgRW5oYW5jaW5nIE5ldHBlcmYsIFRvcAorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAY2hhcHRlciBOZXRwZXJmNAorCitOZXRwZXJmNCBpcyB0aGUgc2hvcnRoYW5kIG5hbWUgZ2l2ZW4gdG8gdmVyc2lvbiA0LlguWCBvZiBuZXRwZXJmLgorVGhpcyBpcyByZWFsbHkgYSBzZXBhcmF0ZSBiZW5jaG1hcmsgbW9yZSB0aGFuIGEgbmV3ZXIgdmVyc2lvbiBvZgorbmV0cGVyZiwgYnV0IGl0IGlzIGEgZGVjZW5kYW50IG9mIG5ldHBlcmYgc28gdGhlIG5ldHBlcmYgbmFtZSBpcwora2VwdC4gIFRoZSBmYWNldGlvdXMgd2F5IHRvIGRlc2NyaWJlIG5ldHBlcmY0IGlzIHRvIHNheSBpdCBpcyB0aGUKK2VnZy1sYXlpbmctd29vbGx5LW1pbGstcGlnIHZlcnNpb24gb2YgbmV0cGVyZiA6KSAgVGhlIG1vcmUgcmVzcGVjdGZ1bAord2F5IHRvIGRlc2NyaWJlIGl0IGlzIHRvIHNheSBpdCBpcyB0aGUgdmVyc2lvbiBvZiBuZXRwZXJmIHdpdGggc3VwcG9ydAorZm9yIHN5bmNocm9uaXplZCwgbXVsdGlwbGUtdGhyZWFkLCBtdWx0aXBsZS10ZXN0LCBtdWx0aXBsZS1zeXN0ZW0sCituZXR3b3JrLW9yaWVudGVkIGJlbmNobWFya2luZy4KKworTmV0cGVyZjQgaXMgc3RpbGwgdW5kZXJnb2luZyByYXBpZCBldm9sdXRpb24uIFRob3NlIHdpc2hpbmcgdG8gd29yaword2l0aCBvciBvbiBuZXRwZXJmNCBhcmUgZW5jb3VyYWdlZCB0byBqb2luIHRoZQorQHVyZWZ7aHR0cDovL3d3dy5uZXRwZXJmLm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vbmV0cGVyZi1kZXYsbmV0cGVyZi1kZXZ9CittYWlsaW5nIGxpc3QgYW5kL29yIHBlcnVzZSB0aGUKK0B1cmVme2h0dHA6Ly93d3cubmV0cGVyZi5vcmcvc3ZuL25ldHBlcmY0L3RydW5rLGN1cnJlbnQgc291cmNlc30uCisKK0Bub2RlIENvbmNlcHQgSW5kZXgsIE9wdGlvbiBJbmRleCwgTmV0cGVyZjQsIFRvcAorQHVubnVtYmVyZWQgQ29uY2VwdCBJbmRleAorCitAcHJpbnRpbmRleCBjcAorCitAbm9kZSBPcHRpb24gSW5kZXgsICAsIENvbmNlcHQgSW5kZXgsIFRvcAorQGNvbW1lbnQgIG5vZGUtbmFtZSwgIG5leHQsICBwcmV2aW91cywgIHVwCitAdW5udW1iZXJlZCBPcHRpb24gSW5kZXgKKworQHByaW50aW5kZXggdnIKK0BieWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitAYyAgTG9jYWxXb3JkczogIHRleGluZm8gc2V0ZmlsZW5hbWUgc2V0dGl0bGUgdGl0bGVwYWdlIHZza2lwIHB0IGZpbGxsIGlmbm90dGV4CitAYyAgTG9jYWxXb3JkczogIGluc2VydGNvcHlpbmcgY2luZGV4IGRmbiB1cmVmIHByaW50aW5kZXggY3AKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZG9jL25ldHBlcmZfb2xkLnBzIGIvbmV0cGVyZi0yLjQuNS9kb2MvbmV0cGVyZl9vbGQucHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkYjQyMAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL25ldHBlcmZfb2xkLnBzCkBAIC0wLDAgKzEsMjQwMTQgQEAKKyUhUFMtQWRvYmUtMy4wCislJUNyZWF0b3I6IChJbnRlcmxlYWYsIEluYy4pCislJUNvcHlyaWdodDogKENvcHlyaWdodChjKSAxOTkzIEludGVybGVhZiwgSW5jLikKKyUlVmVyc2lvbjogNi4wIDAKKyUlQm91bmRpbmdCb3g6IDAgMCA2MTIgNzkyCislJUZvcjogKHJhaikKKyUlQ3JlYXRpb25EYXRlOiAoVHVlLCBGZWIgMjcsIDE5OTYgMTY6NTM6MzkpCislJVRpdGxlOiAoTmV0cGVyZikKKyUlUGFnZXM6IChhdGVuZCkKKyUlRG9jdW1lbnROZWVkZWRSZXNvdXJjZXM6IChhdGVuZCkKKyUlRG9jdW1lbnRTdXBwbGllZFJlc291cmNlczogKGF0ZW5kKQorJSVEb2N1bWVudFByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlRG9jdW1lbnRDdXN0b21Db2xvcnM6IChhdGVuZCkKKyVJTEVBRkpvYiBUaWNrZXQgU3RhcnQKKyVJTEVBRlByaW50VG86ICJkZXZpY2UiCislSUxFQUZDb2xsYXRlOiAiVHJ1ZSIKKyVJTEVBRkNvcGllczogIjEiCislSUxFQUZDb3ZlclBhZ2U6ICJGYWxzZSIKKyVJTEVBRkNyb3BNYXJrczogIk9mZiIKKyVJTEVBRkR1cGxleDogIk5vbmUiCislSUxFQUZGYWNlOiAiRG93biIKKyVJTEVBRk1hbnVhbEZlZWQ6ICJUcnVlIgorJUlMRUFGUGFnZVNpemU6ICJMZXR0ZXIiCislSUxFQUZDZW50ZXI6ICJOb25lIgorJUlMRUFGU2NhbGU6ICIxMDAiCislSUxFQUZBdXRvU2NhbGU6ICJGYWxzZSIKKyVJTEVBRkF1dG9QYWdlU2l6ZTogIlRydWUiCislSUxFQUZGaWx0QXJnczogIi1ubXNnIC1kZWYgJyMtcHBkI0dFTkVSSUMuUFBEIy1lIy1kcHMjQTMjJyAiCislSUxFQUZGaWx0ZXI6ICJwbDJwcyIKKyVJTEVBRlNwb29sOiAibiIKKyVJTEVBRk1vZGVsOiAiR2VuZXJpYyBQb3N0U2NyaXB0IgorJUlMRUFGUFBERmlsZTogIkdFTkVSSUMuUFBEIgorJUlMRUFGRmlsdGVyTG9jOiAiZGVza3RvcCIKKyVJTEVBRkpvYiBUaWNrZXQgRW5kCislJUVuZENvbW1lbnRzCislJUJlZ2luUHJvbG9nCit1c2VyZGljdCAvSWxlYWZfNi4wLjAgNDAwIGRpY3QgZHVwIGJlZ2luIHB1dAorL01BSk9SIDYgZGVmL01JTk9SIDAgZGVmL1NVQiAwIGRlZgorL2JkZiB7YmluZCBkZWZ9IGJpbmQgZGVmCisvaWxwdXQge0lsZWFmXzYuMC4wIDMgMSByb2xsIGR1cCBiZWdpbiBwdXR9IGJkZgorL2lsZGVmIHtiaW5kIGVuZCBkZWZ9IGJkZgorL2xkZntsb2FkIGRlZn1iZGYKKy94ZGZ7ZXhjaCBkZWZ9YmRmCisvc2Rme3N0cmluZyBkZWZ9YmRmCisvaW1hdHJpeFsxLjAgMC4wIDAuMCAtMS4wIDAuMCAwLjBdZGVmCisvTUFYQ0hBUlMgMTI4IGRlZgorL1ZNSEVBRCAxMDAwIGRlZgorL0JPR1VTV0lEVEggLTEgZGVmCisvbWVzZyA2NCBzZGYKKy9jaGFyc3RyIDEyIHNkZgorL2lzdHIgMyBzZGYKKy9JTEVuY29kaW5nIDI1NiBhcnJheSBkZWYKKy9JTFN5bUJFbmMgMjU2IGFycmF5IGRlZgorL0lMRGluZ2JhdHMgMjU2IGFycmF5IGRlZgorL3RyYXNoaGVhcCAxMDI0IHNkZgorL2Vtc2cxIDI1NiBzZGYKKy9lbXNnMiAyNTYgc2RmCisvaW5jaHs3MiBtdWx9YmRmCisvcGdzdGF0ZSAwIGRlZi9EUEl4IDAgZGVmL0RQSXkgMCBkZWYKKy9QU2ZvbnRvYmogMTAyNCBkaWN0IGRlZgorL0JpbmFyeU1vZGUgZmFsc2UgZGVmCisvTCAvbGluZXRvIGxkZgorL00gL21vdmV0byBsZGYKKy9DIC9jbG9zZXBhdGggbGRmCisvTiAvbmV3cGF0aCBsZGYKKy9MVyAvc2V0bGluZXdpZHRoIGxkZgorL0dTIC9nc2F2ZSBsZGYKKy9HUiAvZ3Jlc3RvcmUgbGRmCisvU0YgL3NldGZvbnQgbGRmCisvU0QgL3NldGRhc2ggbGRmCisvQ0QgL2NvdW50ZGljdHN0YWNrIGxkZgorJSBVc2VyIGRlZmluYWJsZSBtYWNyb3MgZm9yIGN1c3RvbSBwcm9sb2d1ZXMKKy9CT0oge30gZGVmCisvRU9KIHt9IGRlZgorL0JPUyB7fSBkZWYKKy9FT1Mge30gZGVmCislCisvaW5pdGlhbGl6ZSB7SWxlYWZfNi4wLjAgYmVnaW59IGJkZgorL3Rlcm1pbmF0ZSAvZW5kIGxkZgorL25wb3AgeworCXtwb3B9IHJlcGVhdAorfSBiZGYKKyUKKwkvaGxpbmUgMCBkZWYgL3kgMTEgZGVmIC9qaXNoZHIgMCBkZWYKKwkvbmwgey95IHkgLjMzIHN1YiBkZWYgMSBpbmNoIHkgaW5jaCBNfSBiZGYKKy9oZWFkZXJwYWdleworCS8jY29waWVzIDEgZGVmCisJL2ppc2hkciB4ZGYKKwlqaXNoZHIgeworCQkvR290aGljQkJCLU1lZGl1bS04M3B2LVJLU0otSCBmaW5kZm9udCAxNCBzY2FsZWZvbnQgc2V0Zm9udAorCX0geworCQkvSGVsdmV0aWNhLUJvbGQvSUxoZWx2YiBJTEVuY29kaW5nIDAgUmVFbmNvZGUKKwkJL0lMaGVsdmIgZmluZGZvbnQgMTggc2NhbGVmb250IHNldGZvbnQKKwl9IGlmZWxzZQorCW5sIG5sIG5sCisgICAgICAgIGhsaW5lIGxlbmd0aCBkdXAgZHVwCisJMjUgZ3R7MjYgc3ViIGR1cCBobGluZSBleGNoKCggIC4uLikpcHV0fSB7cG9wIDB9aWZlbHNlCisJZXhjaCAxIHN1YiAtMSAzIC0xIHJvbGx7aGxpbmUgZXhjaCBnZXQgc2hvdyBubH1mb3IKKwlqaXNoZHIgeworCQkvR290aGljQkJCLU1lZGl1bS04M3B2LVJLU0otSCBmaW5kZm9udCA4IHNjYWxlZm9udCBzZXRmb250CisJfSB7CisJCS9IZWx2ZXRpY2EgZmluZGZvbnQgOCBzY2FsZWZvbnQgc2V0Zm9udAorCX0gaWZlbHNlCisJMSBpbmNoIGR1cCBNCisJZW1zZzEgMCBnZXQgMCBuZXsxIGluY2ggLjc1IGluY2ggTSBlbXNnMSBzaG93fWlmCisJZW1zZzIgMCBnZXQgMCBuZXsxIGluY2ggLjUgaW5jaCBNIGVtc2cyIHNob3d9aWYKK30gYmRmCislCisvbGxpbmUgMCBkZWYKKy9sb2dtZXsKKwkoXHRJbnRlcmxlYWY6OnBsMnBzIDUuNi4wXG4pcHJpbnQKKwlsbGluZSBsZW5ndGggZHVwIGR1cCAKKwk1IGd0IHs1IHN1Yn17cG9wIDB9aWZlbHNlCisJZXhjaCAxIHN1YiAtMSAzIC0xIHJvbGx7KFx0SW50ZXJsZWFmOjopcHJpbnQgbGxpbmUgZXhjaCBnZXQgcHJpbnQoXG4pcHJpbnR9Zm9yCisJZmx1c2gKK31iZGYKKyUKKwkvbXNnIC9wcmludCBsb2FkIGRlZgorL3Zja3sJJSBzdGFjayA9PiBtYWpvciBtaW5vciBzdWIKKwkzIGNvcHkKKwlNQUpPUiBuZSBleGNoIE1JTk9SIG5lIG9yIGV4Y2ggU1VCIG5lIG9yIHsKKwkJaGVhZGVycGFnZQorCQk0IHtubH0gcmVwZWF0CisJCShJbnRlcmxlYWY6OiBGQVRBTCBFUlJPUjogcHNwcm8ucHMgYW5kIHBsMnBzIHZlcnNpb25zIGRvIG5vdCBhZ3JlZS5cbikKKwkJZHVwIG1zZyBzaG93IG5sCisJCShJbnRlcmxlYWY6OiBwc3Byby5wcyBWZXJzaW9uIDUuNi4wXG4pIGR1cCBtc2cgc2hvdyBubAorCQkoSW50ZXJsZWFmOjogcGwycHMgVmVyc2lvbiApIGR1cCBtc2cgc2hvdworCQkzIHttZXNnIGN2cyBkdXAgbXNnIHNob3cgKC4pIGR1cCBtc2cgc2hvd30gcmVwZWF0CisJCXNob3dwYWdlCisJCXF1aXQgCisJfSB7MyBucG9wfSBpZmVsc2UKK31iZGYKKyUKKy9lbHsKKwltYXRyaXggY3VycmVudG1hdHJpeCA4IDEgcm9sbAorCXRyYW5zbGF0ZSByb3RhdGUgc2NhbGUgMCAwIDEgNSAtMiByb2xsIGFyYyBzZXRtYXRyaXgKK31iZGYKKy9hZGRjb25pY3sKKwltYXRyaXggY3VycmVudG1hdHJpeCA5IDEgcm9sbAorCXRyYW5zbGF0ZSByb3RhdGUgc2NhbGUKKwkwIDAgMSA2IC0zIHJvbGwgMSBlcXthcmN9e2FyY259aWZlbHNlCisJc2V0bWF0cml4Cit9YmRmCisvZHB7MSBzZXRsaW5lam9pbiAxIHNldGxpbmVjYXAgc3Ryb2tlfWJkZgorL0FMSUdOX05PTkUgMCBkZWYvQUxJR05fT1BFTiAxIGRlZi9BTElHTl9DTE9TRSAyIGRlZgorL1BQV0FESiBbMCAwIDQgOCAxMiAxNiAyMF1kZWYKKy9NSU5TQ0FMRSAuMSBkZWYKKyUKKy9wbERpY3QgNyBkaWN0IGlscHV0CisJL2Rpc3QgMCBkZWYgL3kxIDAgZGVmIC94MSAwIGRlZiAveW1vdmV0byAwIGRlZiAveG1vdmV0byAwIGRlZgorCS95MiAwIGRlZiAveDIgMCBkZWYKKy9wbGVueworCXBsRGljdCBiZWdpbgorCS9kaXN0IDAgZGVmCisJZmxhdHRlbnBhdGgKKwl7CisJCS95MSB4ZGYveDEgeGRmCisJCS95bW92ZXRvIHkxIGRlZi94bW92ZXRvIHgxIGRlZgorCX0KKwl7CisJCS95MiB4ZGYveDIgeGRmCisJCS9kaXN0IGRpc3QgeTIgeTEgc3ViIGR1cCBtdWwKKwkJeDIgeDEgc3ViIGR1cCBtdWwgYWRkIHNxcnQgYWRkIGRlZgorCQkveTEgeTIgZGVmL3gxIHgyIGRlZgorCX0KKwl7fQorCXsKKwkJL3kyIHltb3ZldG8gZGVmL3gyIHhtb3ZldG8gZGVmCisJCS9kaXN0IGRpc3QgeTIgeTEgc3ViIGR1cCBtdWwKKwkJeDIgeDEgc3ViIGR1cCBtdWwgYWRkIHNxcnQgYWRkIGRlZgorCQkveTEgeTIgZGVmL3gxIHgyIGRlZgorCX0KKwlwYXRoZm9yYWxsIGRpc3QKKwllbmQKK31pbGRlZgorJQorL3NwRGljdCAyMSBkaWN0IGlscHV0CisJL3N0eWxlIDAgZGVmL3dpZHRoIDAgZGVmL3BhdHRlcm4gMCBkZWYKKwkvc2NhbGV1cCAwIGRlZi9pbmR4IDAgZGVmL2FkaiAwIGRlZgorCS92YWwgMCBkZWYvaXN6ZXJvIDAgZGVmL29mZnNldCAwIGRlZgorCS9wYXR0ZXJubGVuIDAgZGVmL24gMCBkZWYvZXh0cmFsZW4gMCBkZWYKKwkvaGFsZnBhdGxlbiAwIGRlZi9zY2FsZTEgMCBkZWYvc2NhbGUyIDAgZGVmCisJL29mZnNldCAwIGRlZi9maXJzdGRhc2ggMCBkZWYvZGFzaHBjdCAwIGRlZgorCS9wYXRobGVuIDAgZGVmL3ggMCBkZWYveSAwIGRlZgorL3NldHBlbnBhdHsKKwlzcERpY3QgYmVnaW4KKwklCisJL3BhdHRlcm5sZW4gMCBkZWYvaXN6ZXJvIDAgZGVmCisJL3N0eWxlIHhkZi93aWR0aCB4ZGYvcGF0dGVybiB4ZGYKKwkvc2NhbGV1cCBEUEl4IDMwMCBkaXYgZGVmCisJL2luZHggd2lkdGggMSBhZGQgc2NhbGV1cCBkaXYgNCBkaXYgY3ZpIGRlZgorCWluZHggMSBndCBpbmR4IDcgbHQgYW5kIHsKKwkJL2FkaiBQUFdBREogaW5keCBnZXQgc2NhbGV1cCBtdWwgZGVmCisJCS9pbmR4IDAgZGVmCisJCXBhdHRlcm4geworCQkJL2lzemVybyBpbmR4IDIgbW9kIGRlZiBpc3plcm8KKwkJCTAgbmUge2FkaiBhZGQvdmFsIHhkZn0gey92YWwgeGRmfSBpZmVsc2UKKwkJCXBhdHRlcm4gaW5keCB2YWwgcHV0IC9pbmR4IGluZHggMSBhZGQgZGVmCisJCX0gZm9yYWxsCisJfWlmCisJJQorCS9wYXRobGVuIHBsZW4gZGVmCisJcGF0dGVybntwYXR0ZXJubGVuIGFkZC9wYXR0ZXJubGVuIHhkZn1mb3JhbGwKKwlzdHlsZSBBTElHTl9OT05FIGVxe31pZgorCSUKKwlzdHlsZSBBTElHTl9DTE9TRSBlcXsKKwkJL24gcGF0aGxlbiBwYXR0ZXJubGVuIGRpdiBjdmkgZGVmCisJCS9leHRyYWxlbiBwYXRobGVuIGN2aSBwYXR0ZXJubGVuIGN2aSBtb2QgZGVmCisJCS9oYWxmcGF0bGVuIHBhdHRlcm5sZW4gMiBkaXYgZGVmCisJCWV4dHJhbGVuIGhhbGZwYXRsZW4gZ3Qgey9uIG4gMSBhZGQgZGVmfSBpZgorCQluIDAgZXEgey9uIDEgZGVmfSBpZgorCQkvc2NhbGUxIHBhdGhsZW4gbiBwYXR0ZXJubGVuIG11bCBkaXYgZGVmCisJCXNjYWxlMSBNSU5TQ0FMRSBndHsKKwkJCS9pbmR4IDAgZGVmCisJCQlwYXR0ZXJueworCQkJCXNjYWxlMSBtdWwvdmFsIHhkZgorCQkJCXZhbCAwIGVxey92YWwgMSBkZWZ9aWYKKwkJCQlwYXR0ZXJuIGluZHggdmFsIGN2aSBwdXQKKwkJCQkvaW5keCBpbmR4IDEgYWRkIGRlZgorCQkJfWZvcmFsbAorCQl9aWYKKwkJL29mZnNldCBwYXR0ZXJuIDAgZ2V0IDIgZGl2IHJvdW5kIGRlZgorCX1pZgorCSUKKwlzdHlsZSBBTElHTl9PUEVOIGVxeworCQkvZmlyc3RkYXNoIHBhdHRlcm4gMCBnZXQgZGVmCisJCS9kYXNocGN0IGZpcnN0ZGFzaCBwYXR0ZXJubGVuIGRpdiBkZWYKKwkJL24gcGF0aGxlbiBwYXR0ZXJubGVuIGRpdiBkYXNocGN0IHN1YiBjdmkgZGVmCisJCS9zY2FsZTEgcGF0aGxlbiBuIGRhc2hwY3QgYWRkIHBhdHRlcm5sZW4gbXVsIGRpdiBkZWYKKwkJL3NjYWxlMiBwYXRobGVuIG4gZGFzaHBjdCBhZGQgMSBhZGQgcGF0dGVybmxlbiBtdWwgZGl2IGRlZgorCQkveCBzY2FsZTIgMSBzdWIgYWJzIGRlZgorCQkveSBzY2FsZTEgMSBzdWIgYWJzIGRlZgorCQl4IHkgbHR7L3NjYWxlMSBzY2FsZTIgZGVmfWlmCisJCXNjYWxlMSBNSU5TQ0FMRSBndHsKKwkJCS9pbmR4IDAgZGVmCisJCQlwYXR0ZXJueworCQkJCXNjYWxlMSBtdWwvdmFsIHhkZgorCQkJCXZhbCAwIGVxey92YWwgMSBkZWZ9aWYKKwkJCQlwYXR0ZXJuIGluZHggdmFsIGN2aSBwdXQKKwkJCQkvaW5keCBpbmR4IDEgYWRkIGRlZgorCQkJfWZvcmFsbAorCQkJL29mZnNldCAwIGRlZgorCQl9aWYKKwl9aWYKKwlwYXR0ZXJuIG9mZnNldCBzZXRkYXNoCisJZW5kCit9aWxkZWYKKyUKKy9ocG9zIDAgZGVmIC92cG9zIDAgZGVmIC9zRW5kIDAgZGVmCisvbXNwIDAgZGVmIC9uc3AgMCBkZWYgL3N0ciAwIGRlZgorL3N7CisJL21zcCB4ZGYvc0VuZCB4ZGYvbnNwIHhkZi92cG9zIHhkZi9ocG9zIHhkZi9zdHIgeGRmCisJaHBvcyB2cG9zIG1vdmV0bworCW1zcCAtMSBuZQorCXtzRW5kIGhwb3Mgc3ViIHN0ciBzdHJpbmd3aWR0aCBwb3Agc3ViIG5zcCBkaXYgMCBtc3Agc3RyIHdpZHRoc2hvd30KKwl7c3RyIHNob3d9CisJaWZlbHNlCit9YmRmCislCisvUkwgL3JsaW5ldG8gbGRmCisvUk0gL3Jtb3ZldG8gbGRmCisvUkMgL3JjdXJ2ZXRvIGxkZgorL3B0c3ogMCBkZWYKKy9lY3sKKwkvcHRzeiB4ZGYvdnBvcyB4ZGYvaHBvcyB4ZGYKKwlnc2F2ZQorCW5ld3BhdGggaHBvcyB2cG9zIG1vdmV0bworCXB0c3ogRFBJeCA3MiBkaXYgbXVsIDEwMDAgZGl2IGR1cCBuZWcgc2NhbGUKKwkzMCAtMTEwIFJNIDU3MyAwIFJMIDAgODczIFJMIC01NzMgMCBSTCAwIC04NzMgUkwKKwk0MCA4MzMgUk0gNDkzIDAgUkwgMCAtNzkzIFJMIC00OTMgMCBSTCAwIDc5MyBSTAorCTE5NCAtMTM3IFJNIDk0IDAgUkwgMCA5NCBSTCAtOTQgMCBSTCAwIC05NCBSTAorCTEwIC0xNzYgUk0gMCAtODMgLTE2MiAtOTUgLTE2MiAtMjU3IFJDCisJMCAtMTE5IDEwOSAtMTc0IDIwOCAtMTc0IFJDIDExNiAwIDIwMSA2OSAyMDEgMTcyIFJDCisJMCAzNCBSTCAtODMgMCBSTCA0IC02MyAtNiAtMTQ4IC0xMTkgLTE0OCBSQworCS03NCAwIC0xMjggNDggLTEyOCAxMjEgUkMgMCAxMzMgMTU4IDEzNiAxNTggMjUyIFJDCisJMCA0NSAwIDk1IDAgOTUgUkMgLTc1IDAgUkwgMCAwIDAgLTUyIDAgLTk1IFJDCisJY2xvc2VwYXRoIGZpbGwKKwlncmVzdG9yZQorfWJkZgorJQorL2lscntCaW5hcnlNb2Rle3JlYWRzdHJpbmd9e3JlYWRoZXhzdHJpbmd9aWZlbHNlfWJkZgorJQorL2Ric2l6ZSAwIGRlZi9jZiAwIGRlZgorL2NjZFsKKyAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCisgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAorIDB7MX17Mn17M317NH17NX17Nn17N317OH17OX17MTB9ezExfXsxMn17MTN9ezE0fXsxNX0KKyB7MTZ9ezE3fXsxOH17MTl9ezIwfXsyMX17MjJ9ezIzfXsyNH17MjV9ezI2fXsyN317Mjh9ezI5fXszMH17MzF9CisgezMyfXszM317MzR9ezM1fXszNn17Mzd9ezM4fXszOX17NDB9ezQxfXs0Mn17NDN9ezQ0fXs0NX17NDZ9ezQ3fQorIHs0OH17NDl9ezUwfXs1MX17NTJ9ezUzfXs1NH17NTV9ezU2fXs1N317NTh9ezU5fXs2MH17NjF9ezYyfXs2M30KKyB7dDFfMX17dDFfMn17MyB0MX17NCB0MX17NSB0MX17NiB0MX17NyB0MX17OCB0MX0KKyB7OSB0MX17MTAgdDF9ezExIHQxfXsxMiB0MX17MTMgdDF9ezE0IHQxfXsxNSB0MX17MTYgdDF9Cisge3QyXzF9e3QyXzJ9ezMgdDJ9ezQgdDJ9ezUgdDJ9ezYgdDJ9ezcgdDJ9ezggdDJ9CisgezkgdDJ9ezEwIHQyfXsxMSB0Mn17MTIgdDJ9e2RpdHRvfXtybn17cmF3fQorXWRlZgorL3QxdGFiWworIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKKyAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCisgMTYjMDAgMTYjMDEgMTYjMDIgMTYjMDQgMTYjMDggMTYjMTAgMTYjMjAgMTYjNDAKKyAxNiM4MCAxNiMwMyAxNiMwNiAxNiMwYyAxNiMxOCAxNiMzMCAxNiM2MCAxNiNjMAorIDE2IzA3IDE2IzBlIDE2IzFjIDE2IzM4IDE2IzcwIDE2I2UwIDE2IzBmIDE2IzFlCisgMTYjM2MgMTYjNzggMTYjZjAgMTYjMWYgMTYjM2UgMTYjN2MgMTYjZjggMTYjM2YKKyAxNiM3ZSAxNiNmYyAxNiM3ZiAxNiNmZSAxNiNmZiAxNiNhMCAxNiM5MCAxNiM4OAorIDE2Izg0IDE2IzgyIDE2IzgxIDE2IzUwIDE2IzQ4IDE2IzQ0IDE2IzQyIDE2IzQxCisgMTYjMjggMTYjMjQgMTYjMjIgMTYjMjEgMTYjMTQgMTYjMTIgMTYjMTEgMTYjMGEKKyAxNiMwOSAxNiMwNSAxNiMwMCAxNiMwMCAxNiMwMCAxNiMwMCAxNiMwMCAxNiMwMCAKK11kZWYKKy9ybnsKKwljZiByZWFkIHBvcCAzMiBzdWIgNiBiaXRzaGlmdCBjZiByZWFkIHBvcCAzMiBzdWIgb3IKK31iZGYKKy90MV8xeworCTIgY29weSAyIGNvcHkKKwlnZXQgY2YgcmVhZCBwb3AgdDF0YWIgZXhjaCBnZXQgeG9yIHB1dCAxCit9YmRmCisvdDFfMnsKKwkyIGNvcHkgMiBjb3B5CisJZ2V0IGNmIHJlYWQgcG9wIHQxdGFiIGV4Y2ggZ2V0IHhvciBwdXQgMSBhZGQKKwkyIGNvcHkgMiBjb3B5CisJZ2V0IGNmIHJlYWQgcG9wIHQxdGFiIGV4Y2ggZ2V0IHhvciBwdXQgMQorfWJkZgorL3QxeworCXsyIGNvcHkgMiBjb3B5IGdldCBjZiByZWFkIHBvcCB0MXRhYiBleGNoIGdldCB4b3IgcHV0IDEgYWRkfXJlcGVhdAorCTAKK31iZGYKKy9zMSAxIHNkZgorL3QyXzF7CisJMiBjb3B5IDIgY29weQorCWdldCBjZiBzMSByZWFkaGV4c3RyaW5nIHBvcCAwIGdldCB4b3IgcHV0IDEKK31iZGYKKy90Ml8yeworCTIgY29weSAyIGNvcHkKKwlnZXQgY2YgczEgcmVhZGhleHN0cmluZyBwb3AgMCBnZXQgeG9yIHB1dCAxIGFkZAorCTIgY29weSAyIGNvcHkKKwlnZXQgY2YgczEgcmVhZGhleHN0cmluZyBwb3AgMCBnZXQgeG9yIHB1dCAxCit9YmRmCisvdDJ7CisJezIgY29weSAyIGNvcHkgZ2V0IGNmIHMxIHJlYWRoZXhzdHJpbmcgcG9wIDAgZ2V0IHhvciBwdXQgMSBhZGR9cmVwZWF0CisJMAorfWJkZgorL2RpdHRveworCWRic2l6ZQorfWJkZgorL3Jhd3sKKwkyIGNvcHkgcG9wCisJY2YgZXhjaCByZWFkaGV4c3RyaW5nIHBvcCBwb3AKKwlkYnNpemUKK31iZGYKKy9kbHsKKwlkbGluZSAwIGNmIGVzIHJlYWRsaW5lIHBvcAorCXtjY2QgZXhjaCBnZXQgZXhlYyBhZGR9Zm9yYWxsIHBvcAorCTAgZGJzaXplIGdldGludGVydmFsCit9YmRmCisvcmhleCB7Y3VycmVudGZpbGUgZXhjaCByZWFkaGV4c3RyaW5nIHBvcH0gYmRmCisvbmVnMVNldHsKKyAJMCAxIDIgaW5kZXggbGVuZ3RoIDEgc3ViIHsxIGluZGV4IGV4Y2ggMjU1IHB1dH0gZm9yCisJcG9wCit9YmRmCisvc2NyZWVuU2V0eworCWN1cnJlbnRzY3JlZW4KKwkzIGluZGV4IGR1cCBsZW5ndGggMCBlcSB7cG9wfSB7ZXhjaCBwb3B9IGlmZWxzZQorCWV4Y2gKKwk0IGluZGV4IGR1cCAtMSBlcSB7cG9wfSB7ZXhjaCBwb3B9IGlmZWxzZQorCWV4Y2gKKwkzIC0xIHJvbGwKKwk1IGluZGV4IGR1cCAtMSBlcSB7cG9wfSB7ZXhjaCBwb3B9IGlmZWxzZQorCTMgMSByb2xsCisJc2V0c2NyZWVuCisJMyBucG9wCit9YmRmCisvdERpY3QgOSBkaWN0IGlscHV0CisJL21hcHN6IDAgZGVmL3RmIDAgZGVmCisJL3dtYXAgMCBkZWYvYm1hcCAwIGRlZi9nbWFwIDAgZGVmL3JtYXAgMCBkZWYvY2xyIDAgZGVmCisvdHJhbnMgeworCXREaWN0IGJlZ2luCisJL21hcHN6IHhkZi93bWFwIHhkZi9ibWFwIHhkZi9nbWFwIHhkZi9ybWFwIHhkZi9jbHIgeGRmCisJL3RmIHtleGNoIG1hcHN6IG11bCByb3VuZCBjdmkgZ2V0fSBiZGYKKwlzeXN0ZW1kaWN0IC9zZXRjb2xvcnRyYW5zZmVyIGtub3duIGNsciBhbmR7CisJCXJtYXAgbGVuZ3RoIDAgbmUge3tybWFwIHRmfX0ge3t9fSBpZmVsc2UKKwkJZ21hcCBsZW5ndGggMCBuZSB7e2dtYXAgdGZ9fSB7e319IGlmZWxzZQorCQlibWFwIGxlbmd0aCAwIG5lIHt7Ym1hcCB0Zn19IHt7fX0gaWZlbHNlCisJCXt9IHNldGNvbG9ydHJhbnNmZXIKKwl9eworCQl3bWFwIGxlbmd0aCAwIG5lIHsKKwkJIFtjdXJyZW50dHJhbnNmZXIgL2V4ZWMgbG9hZCB3bWFwIC90ZiBsb2FkIC9leGVjIGxvYWRdCisJCSBjdnggc2V0dHJhbnNmZXIKKwkJfSBpZgorCX0gaWZlbHNlCisJZW5kCit9aWxkZWYKKy9jRGljdCA2IGRpY3QgaWxwdXQKKwkvc2wgMCBkZWYvciAwIGRlZi9nIDAgZGVmL2IgMCBkZWYvdyAwIGRlZgorL2NscmltZ3sKKwljRGljdCBiZWdpbgorCS9zbCB4ZGYKKwkvciBzbCBzZGYvZyBzbCBzZGYvYiBzbCBzZGYvdyBzbCBzZGYKKworCXN5c3RlbWRpY3QgL2NvbG9yaW1hZ2Uga25vd24geworCQl7ciByaGV4fSB7ZyByaGV4fSB7YiByaGV4IHcgcmhleCBwb3B9IHRydWUgMyBjb2xvcmltYWdlCisJfXsKKwkJe3IgcmhleCBwb3AgZyByaGV4IHBvcCBiIHJoZXggcG9wIHcgcmhleH0gaW1hZ2UKKwl9IGlmZWxzZQorCWVuZAorfWlsZGVmCisvaURpY3QgOSBkaWN0IGlscHV0CisJL2Ric2l6ZSAwIGRlZi9jZiAwIGRlZi9tc2sgMCBkZWYvY21wcnMgMCBkZWYKKwkvZXMgMCBkZWYvZGxpbmUgMCBkZWYKKy9pbGltZ3sKKwlpRGljdCBiZWdpbgorCS9jbXBycyB4ZGYvbXNrIHhkZi9kYnNpemUgeGRmCisJL2RsaW5lIGRic2l6ZSBzZGYgZGxpbmUgbmVnMVNldAorCisJbXNrIDEgZXEgeworCQljbXBycyAxIGVxIHsKKwkJCS9jZiBjdXJyZW50ZmlsZSBkZWYvZXMgZGJzaXplIHNkZgorCQkJe2RsfWltYWdlbWFzaworCQl9CisJCXt7ZGxpbmUgcmhleH0gaW1hZ2VtYXNrfSBpZmVsc2UKKyAJfQorIAl7e2RsaW5lIHJoZXh9IGltYWdlfSBpZmVsc2UKKwllbmQKK31pbGRlZgorL2JsYW5rSW1neworCS9kYnNpemUgeGRmCisJL3NjYW5saW5lIGRic2l6ZSBzZGYgc2NhbmxpbmUgbmVnMVNldAorCXtzY2FubGluZX1pbWFnZQorfWRlZgorJQorL3dtb2RlIDAgZGVmL25ld2VuY29kaW5nIDAgZGVmL25ld25hbWUgMCBkZWYKKy9SZUVuY29kZXsKKwkvd21vZGUgeGRmL25ld2VuY29kaW5nIHhkZi9uZXduYW1lIHhkZgorCWZpbmRmb250IGR1cCBtYXhsZW5ndGggMSBhZGQgZGljdCBiZWdpbgorCXsgMSBpbmRleCAvRklEIG5lCisJCXtkZWZ9IHtwb3AgcG9wfSBpZmVsc2UKKwl9IGZvcmFsbAorCWN1cnJlbnRkaWN0IGVuZAorCWR1cCAvRm9udE5hbWUgbmV3bmFtZSBwdXQKKwluZXdlbmNvZGluZyAtMSBuZSB7ZHVwIC9FbmNvZGluZyBuZXdlbmNvZGluZyBwdXR9IGlmCisgICAgICAgIHdtb2RlIDEgZXEgd21vZGUgMiBlcSBvcntkdXAgL1dNb2RlIDEgcHV0fWlmCisgICAgICAgIHdtb2RlIDIgZXF7ZHVwIC9DRGV2UHJvYyB7cG9wIHBvcCBwb3AgcG9wIDAgZXhjaCAtMTAwMCBleGNoIDIgZGl2IDEwMDB9IHB1dH1pZgorCW5ld25hbWUgZXhjaCBkZWZpbmVmb250IHBvcAorfSBiZGYKKy9jaGFyc3RyIDAgZGVmL2VuY29kaW5nIDAgZGVmL2kgMCBkZWYKKy9pbnNlcnRjaGFybnVteworCS9jaGFyc3RyIDEyIHNkZgorCSUKKwkvZW5jb2RpbmcgeGRmL2kgeGRmCisJKGNoYXIpY2hhcnN0ciBjb3B5IHBvcAorCWkgaXN0ciBjdnMgcG9wCisJY2hhcnN0ciA0IDMgc3RyaW5nIHB1dGludGVydmFsCisJZW5jb2RpbmcgaSBjaGFyc3RyIGN2biBwdXQKK31iZGYKK0lMRW5jb2RpbmcgMFsKKy9BYWN1dGUvQWNpcmN1bWZsZXgvQWRpZXJlc2lzL0FncmF2ZS9BcmluZy9BdGlsZGUvQ2NlZGlsbGEvRWFjdXRlCisvRWNpcmN1bWZsZXgvRWRpZXJlc2lzL0VncmF2ZS9JYWN1dGUvSWNpcmN1bWZsZXgvSWRpZXJlc2lzL0lncmF2ZS9OdGlsZGUKKy9PYWN1dGUvT2NpcmN1bWZsZXgvT2RpZXJlc2lzL09ncmF2ZS9PdGlsZGUvU2Nhcm9uL1VhY3V0ZS9VY2lyY3VtZmxleAorL1VkaWVyZXNpcy9VZ3JhdmUvWWRpZXJlc2lzL1pjYXJvbi9jaGFyMjgvY2hhcjI5L2NoYXIzMC9jaGFyMzEKKy9zcGFjZS9leGNsYW0vcXVvdGVkYmwvbnVtYmVyc2lnbi9kb2xsYXIvcGVyY2VudC9hbXBlcnNhbmQvcXVvdGVyaWdodAorL3BhcmVubGVmdC9wYXJlbnJpZ2h0L2FzdGVyaXNrL3BsdXMvY29tbWEvaHlwaGVuL3BlcmlvZC9zbGFzaAorL3plcm8vb25lL3R3by90aHJlZS9mb3VyL2ZpdmUvc2l4L3NldmVuCisvZWlnaHQvbmluZS9jb2xvbi9zZW1pY29sb24vbGVzcy9lcXVhbC9ncmVhdGVyL3F1ZXN0aW9uCisvYXQvQS9CL0MvRC9FL0YvRworL0gvSS9KL0svTC9NL04vTworL1AvUS9SL1MvVC9VL1YvVworL1gvWS9aL2JyYWNrZXRsZWZ0L2JhY2tzbGFzaC9icmFja2V0cmlnaHQvYXNjaWljaXJjdW0vdW5kZXJzY29yZQorL3F1b3RlbGVmdC9hL2IvYy9kL2UvZi9nCisvaC9pL2ovay9sL20vbi9vCisvcC9xL3Ivcy90L3Uvdi93CisveC95L3ovYnJhY2VsZWZ0L2Jhci9icmFjZXJpZ2h0L2FzY2lpdGlsZGUvcXVvdGVkYmxsZWZ0CisvYWFjdXRlL2FjaXJjdW1mbGV4L2FkaWVyZXNpcy9hZ3JhdmUvYXJpbmcvYXRpbGRlL2NjZWRpbGxhL2VhY3V0ZQorL2VjaXJjdW1mbGV4L2VkaWVyZXNpcy9lZ3JhdmUvaWFjdXRlL2ljaXJjdW1mbGV4L2lkaWVyZXNpcy9pZ3JhdmUvbnRpbGRlCisvb2FjdXRlL29jaXJjdW1mbGV4L29kaWVyZXNpcy9vZ3JhdmUvb3RpbGRlL3NjYXJvbi91YWN1dGUvdWNpcmN1bWZsZXgKKy91ZGllcmVzaXMvdWdyYXZlL3lkaWVyZXNpcy96Y2Fyb24vY2hhcjE1Ni9jaGFyMTU3L2NoYXIxNTgvY2hhcjE1OQorL2NoYXIxNjAvZXhjbGFtZG93bi9jZW50L3N0ZXJsaW5nL2ZyYWN0aW9uL3llbi9mbG9yaW4vc2VjdGlvbgorL2N1cnJlbmN5L3F1b3Rlc2luZ2xlL3F1b3RlZGJsbGVmdC9ndWlsbGVtb3RsZWZ0L2d1aWxzaW5nbGxlZnQvZ3VpbHNpbmdscmlnaHQvZmkvZmwKKy9jaGFyMTc2L2VuZGFzaC9kYWdnZXIvZGFnZ2VyZGJsL3BlcmlvZGNlbnRlcmVkL2NoYXIxODEvcGFyYWdyYXBoL2J1bGxldAorL3F1b3Rlc2luZ2xiYXNlL3F1b3RlZGJsYmFzZS9xdW90ZWRibHJpZ2h0L2d1aWxsZW1vdHJpZ2h0L2VsbGlwc2lzL3BlcnRob3VzYW5kL2NoYXIxOTAvcXVlc3Rpb25kb3duCisvY2hhcjE5Mi9ncmF2ZS9hY3V0ZS9jaXJjdW1mbGV4L3RpbGRlL21hY3Jvbi9icmV2ZS9kb3RhY2NlbnQKKy9kaWVyZXNpcy9jaGFyMjAxL3JpbmcvY2VkaWxsYS9jaGFyMjA0L2h1bmdhcnVtbGF1dC9vZ29uZWsvY2Fyb24KKy9lbWRhc2gvY2hhcjIwOS9jaGFyMjEwL2NoYXIyMTEvY2hhcjIxMi9jaGFyMjEzL2NoYXIyMTQvY2hhcjIxNQorL2NoYXIyMTYvY2hhcjIxNy9jaGFyMjE4L2NoYXIyMTkvY2hhcjIyMC9jaGFyMjIxL2NoYXIyMjIvY2hhcjIyMworL2NoYXIyMjQvQUUvY2hhcjIyNi9vcmRmZW1pbmluZS9jaGFyMjI4L2NoYXIyMjkvY2hhcjIzMC9jaGFyMjMxCisvTHNsYXNoL09zbGFzaC9PRS9vcmRtYXNjdWxpbmUvY2hhcjIzNi9jaGFyMjM3L2NoYXIyMzgvY2hhcjIzOQorL2NoYXIyNDAvYWUvY2hhcjI0Mi9jaGFyMjQzL2NoYXIyNDQvZG90bGVzc2kvY2hhcjI0Ni9jaGFyMjQ3CisvbHNsYXNoL29zbGFzaC9vZS9nZXJtYW5kYmxzL2NoYXIyNTIvY2hhcjI1My9jaGFyMjU0L2NoYXIyNTUKK11wdXRpbnRlcnZhbAorSUxTeW1CRW5jIDMyWworL3NwYWNlL2xvZ2ljYWxvci9hcnJvd3JpZ2h0L2Fycm93ZGJsbGVmdC9hcnJvd2RibHVwCisvYXJyb3dkYmxyaWdodC9sb3plbmdlL2Fycm93aG9yaXpleC9hbmdsZWxlZnQvcmVnaXN0ZXJzYW5zCisvVXBzaWxvbjEvcGx1c21pbnVzL3NlY29uZC9hbmdsZS9ncmVhdGVyZXF1YWwKKy9yYWRpY2FsL2VsbGlwc2lzL0lmcmFrdHVyL3NwYWRlL2xlc3NlcXVhbAorL21pbnV0ZS9kZWdyZWUvZnJhY3Rpb24vZmxvcmluL2luZmluaXR5CisvYXBwcm94ZXF1YWwvaW50ZWdyYWwvcHJvcGVyc3VwZXJzZXQvcGFyZW5yaWdodGJ0L2Fycm93dXAKKy9icmFja2V0cmlnaHR0cC9hbGVwaC9hcnJvd2RibGJvdGgvYnJhY2VyaWdodGJ0L2ludGVncmFsYnQKKy9ub3RzdWJzZXQvYnJhY2tldGxlZnRidC90cmFkZW1hcmtzYW5zL2JyYWNlbGVmdHRwL2JyYWNlbGVmdG1pZAorL2JyYWNlbGVmdGJ0L2JyYWNrZXRsZWZ0dHAvYnJhY2VleC9hcHBsZS9hbmdsZXJpZ2h0CisvcGFyZW5yaWdodGV4L3BhcmVucmlnaHR0cC9hcnJvd2Rvd24vZGl2aWRlL2VsZW1lbnQKKy9zdW1tYXRpb24vYnJhY2tldGxlZnRleC9wYXJlbmxlZnR0cC9wYXJlbmxlZnRidC9kb3RtYXRoCisvY29weXJpZ2h0c2Fucy9pbnRlZ3JhbGV4L3BhcmVubGVmdGV4L2ludGVncmFsdHAvcmVnaXN0ZXJzZXJpZgorL2ludGVyc2VjdGlvbi90cmFkZW1hcmtzZXJpZi9hcnJvd2RibGRvd24vZ3JhZGllbnQvbG9naWNhbG5vdAorL3JlZmxleHN1YnNldC9lcXVpdmFsZW5jZS9wcm9wZXJzdWJzZXQvcGFydGlhbGRpZmYvYXJyb3dib3RoCisvY2lyY2xlbXVsdGlwbHkvaGVhcnQvYnJhY2tldHJpZ2h0ZXgvYnJhY2VyaWdodG1pZC9lbXB0eXNldAorL2JyYWNrZXRyaWdodGJ0L1JmcmFrdHVyL3Byb3BvcnRpb25hbC9yZWZsZXhzdXBlcnNldC9jYXJyaWFnZXJldHVybgorL25vdGVxdWFsL25vdGVsZW1lbnQvZGlhbW9uZC9jbHViL2JyYWNlcmlnaHR0cAorL2Fycm93bGVmdC93ZWllcnN0cmFzcy9idWxsZXQvY2lyY2xlcGx1cy9tdWx0aXBseQorL2Fycm93dmVydGV4L2NvcHlyaWdodHNlcmlmL3VuaW9uL3Byb2R1Y3QvbG9naWNhbGFuZAorXXB1dGludGVydmFsCiswIDEgMzJ7SUxTeW1CRW5jIGluc2VydGNoYXJudW19Zm9yCisxMjcgMSAyNTV7SUxTeW1CRW5jIGluc2VydGNoYXJudW19Zm9yCitJTERpbmdiYXRzIDBbCisvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCisvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCisvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCisvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmCisvc3BhY2UvYTEvYTIvYTIwMi9hMy9hNC9hNS9hMTE5CisvYTExOC9hMTE3L2ExMS9hMTIvYTEzL2ExNC9hMTUvYTE2CisvYTEwNS9hMTcvYTE4L2ExOS9hMjAvYTIxL2EyMi9hMjMKKy9hMjQvYTI1L2EyNi9hMjcvYTI4L2E2L2E3L2E4CisvYTkvYTEwL2EyOS9hMzAvYTMxL2EzMi9hMzMvYTM0CisvYTM1L2EzNi9hMzcvYTM4L2EzOS9hNDAvYTQxL2E0MgorL2E0My9hNDQvYTQ1L2E0Ni9hNDcvYTQ4L2E0OS9hNTAKKy9hNTEvYTUyL2E1My9hNTQvYTU1L2E1Ni9hNTcvYTU4CisvYTU5L2E2MC9hNjEvYTYyL2E2My9hNjQvYTY1L2E2NgorL2E2Ny9hNjgvYTY5L2E3MC9hNzEvYTcyL2E3My9hNzQKKy9hMjAzL2E3NS9hMjA0L2E3Ni9hNzcvYTc4L2E3OS9hODEKKy9hODIvYTgzL2E4NC9hOTcvYTk4L2E5OS9hMTAwLy5ub3RkZWYKKy8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKKy8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi8ubm90ZGVmLy5ub3RkZWYKKy8ubm90ZGVmLy5ub3RkZWYvLm5vdGRlZi9hMjA1L2EyMDYvYTg1L2E4Ni9hODcKKy9hODgvYTg5L2E5MC9hOTEvYTkyL2E5My9hOTQvYTk1CisvYTk2L2ExMDEvYTEwMi9hMTAzL2ExMDQvYTEwNi9hMTA3L2ExMDgKKy9hMTEyL2ExMTEvYTExMC9hMTA5L2ExMjAvYTEyMS9hMTIyL2ExMjMKKy9hMTI0L2ExMjUvYTEyNi9hMTI3L2ExMjgvYTEyOS9hMTMwL2ExMzEKKy9hMTMyL2ExMzMvYTEzNC9hMTM1L2ExMzYvYTEzNy9hMTM4L2ExMzkKKy9hMTQwL2ExNDEvYTE0Mi9hMTQzL2ExNDQvYTE0NS9hMTQ2L2ExNDcKKy9hMTQ4L2ExNDkvYTE1MC9hMTUxL2ExNTIvYTE1My9hMTU0L2ExNTUKKy9hMTU2L2ExNTcvYTE1OC9hMTU5L2ExNjAvYTE2MS9hMTYzL2ExNjQKKy9hMTk2L2ExNjUvYTE5Mi9hMTY2L2ExNjcvYTE2OC9hMTY5L2ExNzAKKy9hMTcxL2ExNzIvYTE3My9hMTYyL2ExNzQvYTE3NS9hMTc2L2ExNzcKKy9hMTc4L2ExNzkvYTE5My9hMTgwL2ExOTkvYTE4MS9hMjAwL2ExODIKKy8ubm90ZGVmL2EyMDEvYTE4My9hMTg0L2ExOTcvYTE4NS9hMTk0L2ExOTgKKy9hMTg2L2ExOTUvYTE4Ny9hMTg4L2ExODkvYTE5MC9hMTkxLy5ub3RkZWZdcHV0aW50ZXJ2YWwKKyUKKy9uZXdGb250Cit7CisJZmluZGZvbnQgaW1hdHJpeCBtYWtlZm9udAorCWV4Y2ggRFBJeCA3MiBkaXYgbXVsIHNjYWxlZm9udAorfSBiZGYKKy93bW9kZSAwIGRlZi9lbmNvZGluZyAwIGRlZi9JTGZvbnQgMCBkZWYvUFNmb250IDAgZGVmL3B0c2l6ZSAwIGRlZgorL2RlY2xhcmVORm9udHsKKwkvd21vZGUgeGRmL2VuY29kaW5nIHhkZi9JTGZvbnQgeGRmL1BTZm9udCB4ZGYvcHRzaXplIHhkZgorCUZvbnREaXJlY3RvcnkgSUxmb250IGtub3duIGZhbHNlIGVxe1BTZm9udCBJTGZvbnQgZW5jb2Rpbmcgd21vZGUgUmVFbmNvZGV9aWYKKwlwdHNpemUgSUxmb250IG5ld0ZvbnQKK31iZGYKKy9kZWNsYXJlUkZvbnR7CSUgc3RhY2sgPT4gUHJpbnRlcmxlYWYgRm9udCBOYW1lCisJUFNmb250b2JqIGV4Y2ggMiBjb3B5IGR1cCAxMCBkaWN0IGR1cCBiZWdpbgorCS9Gb250VHlwZSAzIGRlZgorCS9Gb250TWF0cml4W0RQSXggMzAwIGRpdiAwIDAgRFBJeSAzMDAgZGl2IDAgMF1kZWYKKwkvRm9udEJCb3hbMCAwIDAgMF1kZWYKKwkvRW5jb2RpbmcgSUxFbmNvZGluZyBkZWYKKwkvQnVpbGRDaGFyeworCQkwIGJlZ2luCisJCS9jaGFyIHhkZgorCQkvZm9udGRpY3QgeGRmCisJCS9jaGFybmFtZSBmb250ZGljdC9FbmNvZGluZyBnZXQgY2hhciBnZXQgZGVmCisJCS9jaGFyaW5mbyBmb250ZGljdC9DaGFyRGF0YSBnZXQgY2hhcm5hbWUgZ2V0IGRlZgorCQkvd3ggY2hhcmluZm8gMCBnZXQgZGVmCisJCWNoYXJpbmZvIDAgZ2V0IEJPR1VTV0lEVEggZXEKKwkJe3B1dGVycmNoYXJ9CisJCXsKKwkJCS9jaGFyYmJveCBjaGFyaW5mbyAxIDQgZ2V0aW50ZXJ2YWwgZGVmCisJCQl3eCAwIGNoYXJiYm94IGFsb2FkIHBvcCBzZXRjYWNoZWRldmljZQkKKwkJCWNoYXJpbmZvIDUgZ2V0IGNoYXJpbmZvIDYgZ2V0IHRydWUKKwkJCWZvbnRkaWN0L2ltYWdlbWFza21hdHJpeCBnZXQKKwkJCWR1cCA1IGNoYXJpbmZvIDggZ2V0IHB1dAorCQkJZHVwIDQgY2hhcmluZm8gNyBnZXQgcHV0CisJCQljaGFyaW5mbyA5IGdldAorCQkJaW1hZ2VtYXNrCisJCX0KKyAgCQlpZmVsc2UKKwkJZW5kCisgCX1kZWYKKyAJL0J1aWxkQ2hhciBsb2FkIDAgNyBkaWN0IHB1dAorIAkvaW1hZ2VtYXNrbWF0cml4WzEgMCAwIDEgMCAwXWRlZgorIAkvQ2hhckRhdGEgTUFYQ0hBUlMgZGljdCBkZWYKKyAJZW5kCisgCWRlZmluZWZvbnQgcHV0IGdldAorIAkvQ2hhckRhdGEgZ2V0L3NwYWNlWzE2IDAgMCAxIDEgMTYgMSAwIDBbPDAwPl1jdnhdcHV0Cit9ZGVmCislCisvZWdEaWN0IDMgZGljdCBpbHB1dAorCS9jaG51bSAwIGRlZi9mb250IDAgZGVmL3cgMCBkZWYKKy9udW1Mb2FkRW1wdHlHbHlwaHsKKwllZ0RpY3QgYmVnaW4KKwkvY2hudW0geGRmL2ZvbnQgeGRmL3cgeGRmCisJdyBmb250IFBTZm9udG9iaiBmb250IGdldC9FbmNvZGluZyBnZXQgY2hudW0gZ2V0CisJTG9hZEVtcHR5R2x5cGgKKwllbmQKK31pbGRlZgorL3B1dGVycmNoYXJ7CisJUFNmb250b2JqIGVycmZvbnRuYW1lIGdldCBkdXAKKwkvQnVpbGRDaGFyIGdldCBlcnJjaGFybm8gZXhjaCBleGVjCisJKFx0SW50ZXJsZWFmOjpvdXQgb2YgVk0gbG9hZGluZyBiaXRtYXAoPykuIFRyeSBicmVha2luZyB1cCBkb2N1bWVudFxuKQorCWR1cCBwcmludCBmbHVzaAorCWVtc2cxIGNvcHkgcG9wCit9ZGVmCisvUVVJVHsKKwkoXHRJbnRlcmxlYWY6OmNvbXBsZXRlbHkgb3V0IG9mIG1lbW9yeS4gXG5cdFRyeSBicmVha2luZyB1cCB0aGUgZG9jdW1lbnQgXG4pCisJZHVwIHByaW50IGZsdXNoCisJZW1zZzIgY29weSBwb3Agc3RvcAorfWRlZgorL2xnRGljdCAxNSBkaWN0IGlscHV0CisJL2NoYXJubyAwIGRlZi9mb250bmFtZSAwIGRlZi9oZWlnaHQgMCBkZWYvd2lkdGggMCBkZWYKKwkvaHNpemUgMCBkZWYvbmJ5dGVzIDAgZGVmL2dseXBoIDAgZGVmL3R4IDAgZGVmL3R5IDAgZGVmL2xseSAwIGRlZgorCS9sbHggMCBkZWYvdXJ4IDAgZGVmL2xzYiAwIGRlZi9nbHlwaCAwIGRlZi9Ob1ZNSGVhZCAwIGRlZgorL0xvYWRHbHlwaHsKKwlsZ0RpY3QgYmVnaW4KKwklCisJL2NoYXJubyB4ZGYvZm9udG5hbWUgeGRmL2hlaWdodCB4ZGYvdmFkaiB4ZGYvd2lkdGggeGRmL2hzaXplIHhkZi9sc2IgeGRmCisJL05vVk1IZWFkIHZtc3RhdHVzIGV4Y2ggc3ViIGV4Y2ggcG9wIGR1cAorCSBWTUhFQUQgMiBpZGl2IGx0e1FVSVR9aWYKKwkgVk1IRUFEIGx0e3RydWV9e2ZhbHNlfWlmZWxzZSBkZWYKKwkvbmJ5dGVzIGhzaXplIDE1IGFkZCAxNiBpZGl2IDIgbXVsIGhlaWdodCBtdWwgZGVmCQorCU5vVk1IZWFkIG5vdHsvZ2x5cGggbmJ5dGVzIHNkZn1pZgorCWN1cnJlbnRmaWxlIE5vVk1IZWFkIHt0cmFzaGhlYXAgMCBuYnl0ZXMgZ2V0aW50ZXJ2YWx9e2dseXBofWlmZWxzZQorCXJlYWRoZXhzdHJpbmcgMiBucG9wCisJL2hzaXplIGhzaXplIDE1IGFkZCAxNiBpZGl2IDE2IG11bCBkZWYKKwkvbGx5IGhlaWdodCB2YWRqIGFkZCBkZWYKKwkvdXJ4IGhzaXplIGxzYiBhZGQgZGVmCisJL3R4IGxzYiBuZWcgZGVmCisJL3R5IHZhZGogbmVnIGRlZgorCVBTZm9udG9iaiBmb250bmFtZSBnZXQgZHVwIC9FbmNvZGluZyBnZXQgY2hhcm5vIGdldAorCWV4Y2ggL0NoYXJEYXRhIGdldCBleGNoCisJTm9WTUhlYWQge1tCT0dVU1dJRFRIXX0KKwl7W3dpZHRoIGxzYiBsbHkgdXJ4IHZhZGogaHNpemUgaGVpZ2h0IHR4IHR5W2dseXBoXWN2eF19aWZlbHNlCisJcHV0IGVuZAorfWlsZGVmCislCisJL3NjZnJxIDAgZGVmL3NjYW5nIDAgZGVmCisvc29saWRGaWxseworCS9zY2ZycSB4ZGYvc2NhbmcgeGRmL3NjcHJvYyB4ZGYKKwlnc2F2ZQorIAlzY2ZycSAtMSBuZSBzY2FuZyAtMSBuZSBvciAvc2Nwcm9jIGxvYWQgbGVuZ3RoIDAgbmUgb3J7CisJCXNjZnJxIHNjYW5nIC9zY3Byb2MgbG9hZCBzY3JlZW5TZXQKKyAJfWlmCisJZW9maWxsCisJZ3Jlc3RvcmUKK31iZGYKKwkvcGF0Y2hhciAwIGRlZi9wZmZvbnRuYW1lIDAgZGVmCisJL2ZpbGxwYXRzZXQgey9wYXRjaGFyIHhkZi9wZmZvbnRuYW1lIHhkZn0gZGVmCisJL3BhdHN0ciAxIHNkZgorL3BhdHRlcm5GaWxseworCS9zY2ZycSB4ZGYvc2NhbmcgeGRmL3NjcHJvYyB4ZGYKKwlnc2F2ZSAKKyAJc2NmcnEgLTEgbmUgc2NhbmcgLTEgbmUgb3IgL3NjcHJvYyBsb2FkIGxlbmd0aCAwIG5lIG9yeworCQlzY2ZycSBzY2FuZyAvc2Nwcm9jIGxvYWQgc2NyZWVuU2V0CisgCX1pZgorCWN1cnJlbnRmb250IFBTZm9udG9iaiBwZmZvbnRuYW1lIGdldCBzZXRmb250IHBGaWxsCisJZHVwIG51bGwgbmV7c2V0Zm9udH17cG9wfWlmZWxzZQorCWdyZXN0b3JlCit9YmRmCisvcGZEaWN0IDcgZGljdCBpbHB1dAorCS9wYXR5IDAgZGVmL3BhdHggMCBkZWYvI2NoYXJzIDAgZGVmCisJL3J5IDAgZGVmL3J4IDAgZGVmL2x5IDAgZGVmL2x4IDAgZGVmCisvcEZpbGx7CisJcGZEaWN0IGJlZ2luCisJZ3NhdmUgMSAxIDEgc2V0cmdiY29sb3IgZW9maWxsIGdyZXN0b3JlCisJJSBzZXR1cCBmYWN0b3JzCisJcGF0c3RyIDAgcGF0Y2hhciBwdXQKKwlwYXRzdHIgc3RyaW5nd2lkdGggcG9wCisJL3BhdHkgZXhjaCBkZWYvcGF0eCBwYXR5IGRlZgorCSUgc2V0dXAgcmVnaW9uCisJZW9jbGlwCQorCXBhdGhiYm94CisJL3J5IGV4Y2ggZmxvb3IgZGVmCisJL3J4IGV4Y2ggZmxvb3IgZGVmCisJL2x5IGV4Y2ggY2VpbGluZyBjdmkKKwlkdXAgMCBsdHtwYXR5IHN1Yn1pZiBjdmkKKwlkdXAgcGF0eSBjZWlsaW5nIGN2aSBtb2Qgc3ViIGRlZgorCS9seCBleGNoIGNlaWxpbmcgY3ZpCisJZHVwIDAgbHR7cGF0eCBzdWJ9aWYgY3ZpCisJZHVwIHBhdHggY2VpbGluZyBjdmkgbW9kIHN1YiBkZWYKKwkvcnkgcnkgcGF0eSBhZGQgZGVmCisJL2x5IGx5IHBhdHkgc3ViIGRlZgorCW5ld3BhdGgKKwklIGJsYXN0Y2hhcnMKKwkvI2NoYXJzIHJ4IGx4IHN1YiBwYXR4IGRpdiBjZWlsaW5nIGN2aSBkZWYKKwlseSBwYXR5IHJ5e2x4IGV4Y2ggTSAjY2hhcnN7cGF0c3RyIHNob3d9cmVwZWF0fWZvcgorCW5ld3BhdGgKKwllbmQKK31pbGRlZgorJQorL0JlZ2luRXBzZnsKKwkvSUxCNEVwc2Ygc2F2ZSBkZWYKKwkvY2xwe25ld3BhdGggbW92ZXRvIGxpbmV0byBsaW5ldG8gbGluZXRvIGNsb3NlcGF0aCBjbGlwfSBkZWYKKwkvSUxEaWN0Q250IGNvdW50ZGljdHN0YWNrIGRlZgorCS9JTE9wQ250IGNvdW50IDEgc3ViIGRlZgorCTAgc2V0Z3JheSAwIHNldGxpbmVjYXAKKwkxIHNldGxpbmV3aWR0aCAwIHNldGxpbmVqb2luCisJMTAgc2V0bWl0ZXJsaW1pdCBbXSAwIHNldGRhc2ggbmV3cGF0aAorCS9zaG93cGFnZSB7fSBkZWYKK31kZWYKKy9FbmRFcHNmeworCWNvdW50IElMT3BDbnQgc3ViIHtwb3B9IHJlcGVhdAorCWNvdW50ZGljdHN0YWNrIElMRGljdENudCBzdWIge2VuZH0gcmVwZWF0CisJSUxCNEVwc2YgcmVzdG9yZQorfWRlZgorJQorL2NscHtuZXdwYXRoIE0gTCBMIEwgY2xvc2VwYXRoIGNsaXB9YmRmCislCisJL2NtIDAgZGVmL3BndyAwIGRlZi9wZ2wgMCBkZWYvY24gMCBkZWYvcHcgMCBkZWYKKwkvcHcyIDAgZGVmL2xueCAwIGRlZi9sbnkgMCBkZWYKKy9jcm9wZGVmc1sKK3t9ICUgMAoreyAlIDEKKwkwIDAgTSBsbnggbmVnIDAgTAorCTAgMCBNIDAgbG55IG5lZyBMCit9Cit7ICUgMgorCTAgMCBNIGxueCAwIEwKKwkwIDAgTSAwIGxueSBMCit9Cit7ICUgMworCWxueCAuMjUgbXVsIG5lZyAwIE0gbG54IG5lZyAwIEwKKwkwIGxueSAuMjUgbXVsIG5lZyBNIDAgbG55IG5lZyBMCit9Cit7ICUgNAorCWxueCAuMjUgbXVsIDAgTSBsbnggMCBMCisJMCBsbnkgLjI1IG11bCBNIDAgbG55IEwKK30KK3sgJSA1CisJbG54IG5lZyAwIE0gbG54IDAgTAorCTAgbG55IG5lZyBNIDAgbG55IEwKK30KK3sgICUgNgorCVtsbnggLjc1IG11bCBsbnggLjUwIG11bF0wIHNldGRhc2gKKwlsbnggbmVnIDAgTSBsbnggMCBMIDAgbG55IG5lZyBNIDAgbG55IEwKK30KK3sgJSA3CisJY24gMSBlcSBjbiAzIGVxIG9yIHs5MCByb3RhdGV9aWYKKwkwIDAgTSBsbnggbmVnIDAgTAorCTAgbG55IE0gMCBsbnkgbmVnIEwKKwljbiAxIGVxIGNuIDMgZXEgb3IgezkwIG5lZyByb3RhdGV9aWYKKwkvY24gY24gMSBhZGQgZGVmCit9CitdZGVmCisvY3V0bWFya3N7CSVzdGFjazogcGdsZW4gcGd3aWQgY210eXBlID0+IC0tLSAgCisJMCBTU0cgW10gMCBzZXRkYXNoCisJL2NtIHhkZi9wZ3dpZCB4ZGYvcGdsZW4geGRmCisJL3B3IERQSXggODAgZGl2IGRlZi9wdzIgcHcgMiBkaXYgZGVmCisJL2xueCBEUEl4IDQgZGl2IGRlZi9sbnkgRFBJeSA0IGRpdiBkZWYKKwlwdyBMVworCS9jbiAwIGRlZiBuZXdwYXRoCisJJSB1cHBlciBsZWZ0IGNvcm5lcgorCXB3MiBuZWcgcHcyIG5lZyB0cmFuc2xhdGUKKwljcm9wZGVmcyBjbSBnZXQgZXhlYworCSUgdXBwZXIgcmlnaHQgY29ybmVyCisJcGd3aWQgcHcgYWRkIDAgdHJhbnNsYXRlCisJOTAgcm90YXRlIGNyb3BkZWZzIGNtIGdldCBleGVjIDkwIG5lZyByb3RhdGUKKwklIGxvd2VyIHJpZ2h0IGNvcm5lcgorCTAgcGdsZW4gcHcgYWRkIHRyYW5zbGF0ZQorCTE4MCByb3RhdGUgY3JvcGRlZnMgY20gZ2V0IGV4ZWMgMTgwIG5lZyByb3RhdGUKKwklIGxvd2VyIGxlZnQgY29ybmVyCisJcGd3aWQgcHcgYWRkIG5lZyAwIHRyYW5zbGF0ZQorCTI3MCByb3RhdGUgY3JvcGRlZnMgY20gZ2V0IGV4ZWMgMjcwIG5lZyByb3RhdGUKKwlkcAorfWJkZgorL2JvcCB7L3Bnc3RhdGUgc2F2ZSBkZWZ9IGJkZgorL2VvcCB7cGdzdGF0ZSByZXN0b3JlIHNob3dwYWdlfSBiZGYKKy9uZGYKK3sKKwkxIGluZGV4IHdoZXJlIHtwb3AgcG9wIHBvcH0ge2R1cCB4Y2hlY2sge2JpbmR9IGlmIGRlZn0gaWZlbHNlCit9IGJkZgorL3NldGNteWtjb2xvcgoreworCTQgY29weSBwb3AgYWRkIGFkZAorCTAgZXEKKwkJezEgc3ViIG5lZyBzZXRncmF5IDMgbnBvcH0KKwkJeworCQkJMSBzdWIgNCAxIHJvbGwKKyAgICAgICAgCQkzIHsKKyAgICAgICAgICAgICAgICAJCTMgaW5kZXggYWRkIG5lZyBkdXAgMCBsdCB7cG9wIDB9IGlmCisgICAgICAgICAgICAgICAgCQkzIDEgcm9sbAorICAgICAgICAJCX0gcmVwZWF0CisJCQlzZXRyZ2Jjb2xvciBwb3AKKwkJfQorCWlmZWxzZQorfSBuZGYKKy9wYWNrZWRhcnJheQoreworCWFycmF5IGFzdG9yZSByZWFkb25seQorfSBuZGYKKy9maW5kY215a2N1c3RvbWNvbG9yCit7CisJNSBwYWNrZWRhcnJheQorfSBuZGYKKy9zZXRjdXN0b21jb2xvcgoreworCWV4Y2gKKwlhbG9hZCBwb3AgcG9wCisJNCB7NCBpbmRleCBtdWwgNCAxIHJvbGx9IHJlcGVhdAorCTUgLTEgcm9sbCBwb3AKKwlzZXRjbXlrY29sb3IKK30gbmRmCisvc2V0c2VwYXJhdGlvbmdyYXkge3NldGdyYXl9IG5kZgorL1NTRyB7c2V0c2VwYXJhdGlvbmdyYXl9IGRlZgorL0ZDIHtmaW5kY215a2N1c3RvbWNvbG9yIGRlZn0gYmRmCisvQ0Mge3NldGN1c3RvbWNvbG9yfSBkZWYKKy9pbGZlYXRlbmR7CisJc3RvcHBlZCBjbGVhcnRvbWFyayBDRCBleGNoIHN1YiBkdXAKKwkwIGd0IHt7ZW5kfSByZXBlYXR9IHtwb3B9IGlmZWxzZQorfWJkZgorZW5kIAorJSVFbmRQcm9sb2cKKyUlQmVnaW5TZXR1cAorSWxlYWZfNi4wLjAgL2luaXRpYWxpemUgZ2V0IGV4ZWMKKzAgMCA2IHZjaworJSVJbmNsdWRlRmVhdHVyZTogKk1hbnVhbEZlZWQgVHJ1ZQorJSVJbmNsdWRlRmVhdHVyZTogKlBhZ2VSZWdpb24gTGV0dGVyCislJUluY2x1ZGVGZWF0dXJlOiAqRHVwbGV4IE5vbmUKKyUlRW5kU2V0dXAKKyUlUGFnZTogKDEpIDEKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoYgorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGIKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hiIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NCBwdXQKK2R1cCAzIC9DMDA0NSBwdXQKK2R1cCA0IC9DMDA0NiBwdXQKK2R1cCA1IC9DMDA0OSBwdXQKK2R1cCA2IC9DMDA1MCBwdXQKK2R1cCA3IC9DMDA1MyBwdXQKK2R1cCA4IC9DMDA1NCBwdXQKK2R1cCA5IC9DMDA1NyBwdXQKK2R1cCAxMCAvQzAwNTggcHV0CitkdXAgMTEgL0MwMDY1IHB1dAorZHVwIDEyIC9DMDA2NiBwdXQKK2R1cCAxMyAvQzAwNjcgcHV0CitkdXAgMTQgL0MwMDY4IHB1dAorZHVwIDE1IC9DMDA3MCBwdXQKK2R1cCAxNiAvQzAwNzIgcHV0CitkdXAgMTcgL0MwMDczIHB1dAorZHVwIDE4IC9DMDA3OCBwdXQKK2R1cCAxOSAvQzAwODAgcHV0CitkdXAgMjAgL0MwMDgyIHB1dAorZHVwIDIxIC9DMDA5NyBwdXQKK2R1cCAyMiAvQzAwOTggcHV0CitkdXAgMjMgL0MwMDk5IHB1dAorZHVwIDI0IC9DMDEwMCBwdXQKK2R1cCAyNSAvQzAxMDEgcHV0CitkdXAgMjYgL0MwMTAyIHB1dAorZHVwIDI3IC9DMDEwNCBwdXQKK2R1cCAyOCAvQzAxMDUgcHV0CitkdXAgMjkgL0MwMTA3IHB1dAorZHVwIDMwIC9DMDEwOCBwdXQKK2R1cCAzMSAvQzAxMDkgcHV0CitkdXAgMzIgL0MwMTEwIHB1dAorZHVwIDMzIC9DMDExMSBwdXQKK2R1cCAzNCAvQzAxMTIgcHV0CitkdXAgMzUgL0MwMTE0IHB1dAorZHVwIDM2IC9DMDExNSBwdXQKK2R1cCAzNyAvQzAxMTYgcHV0CitkdXAgMzggL0MwMTE3IHB1dAorZHVwIDM5IC9DMDExOCBwdXQKK2R1cCA0MCAvQzAxMTkgcHV0CitkdXAgNDEgL0MwMTIxIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xNiAtMjA5IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMEVBMTU3QzYyNTgzRkFBMDE4RjM2OUYxMEMyNjdFNUE2ODkKKzE0QjNDRjA1RDdFM0U3MzAxQTFEMTEzQworQjg3OTY5QjBCN0EzM0RGREU1Cis2MTA0MUM4QQorNzlFMEM1NUYwNzUxOTkwMzEzNzA2MTA0MzAKKzBEMTk5OTNDNjZBOTA0RTBBMzkzMDk3QzMzRTJCNTMzQzc1MUIwM0RCMjkyRDNGMTZBMzdBRUU2NDBCM0NCOEY3RDQ3RjJFNDRCMkFCRkI0QzgzQ0ZFMTc5NjIyODkwNTE2QkVDOUVDNDFFMjg3RkFCMThGCis0Njc1MkE5OAorQjUyNDE5N0Y3OTc0OTQ5OEYxQjgxQjQ5OUUKKzVCMTczNzg0REY4REE5RTQ1M0NEMDgzOUIzM0JBMEQ2N0U2MTNGQ0I0MTZFRUUKKzlBNTFEQTQ5Cis0NjQ2NjIyRjIyQjEzNDczRUJERjk2QTBEQQorOEEzNDkzMjJFOEQ5NENEMEU5MUM5OUVBMEMzQkMwOTQ2Mjg5OUM2QkRERTYxODc0QkNEQjUwMTAxQzQ5RjEKK0UxNzQzRERCCitBQTI4RUE3NUJENTc4NTBFQTlEOTM3MTUwQgorODVBQ0Y0MjZFMzRCMzE4MzEzMUJDOTc5REI0NThFMEVCQUFCNjZEN0Y1Q0VDODIwMDVGM0VFNERCNEJBQkNCQTIwN0VFMkY0NjY5MjU1NjJGREJDQTExMjk0MkNEMzZGQTUzOTAwOTFFODcyNTAyMzY0RTE5QkY3CitFQjI0MkFBRgorMzlEOEY0QkZBRTZFQTI3RjhBQzdBMUFFRTAKK0E1NkJFODA4QzEwRjE3RUI2QjVEOTFCNTY5NURFQjZFRDIyREQxNkYyNTc0RDcyOTM1RTVFQzdDNzU3NUM2QjE4MjI2NTk2OERBOEVCNkRBNjhDMEJBQkZGRDZGNDhGMzM0NzkyQUNFNjJFQzM1M0ExRDRFNkREMzdCQkVGMkFFQzJFNzlGMzFFMUY5QkNDOUYxQTMzQUUzOUVBRjI2REI0OUQ1QTYwMQorNEFDMjFBNjEKKzMwQUUzOTFGMkJFODBDQkNGRTM4M0ExRkY4Cis4QTY5MkZEMDlGNDQ4QzlDNUY0QjAzQjYwNjVFMDZBRDBGRkRBNjhGRkRDNjE5QUZBQTNCMEY5Q0MxMENBMDg1NzA5RjhCQjJFMEQyMUQyMDQxMzkyOTAwM0Q4NDc3MTQzNTYyQUJBNERGQkY2QTMzM0EzNEU4NzAwMTdERUFCRUIwNzY2Q0YwRjFGNzkwMzEyMDMwMTIxQjc1QjA5NzFBQzY1M0I1QjBGMDU4Cis0RUIxNjg2QworNDQyQUU1OEM1OTgzMUU3NTNGQTg1QUEwNDY4MworMjMwNTJEMTJBM0MyNDEwRjU4OEQ1MTMxMUQ2MTU3NzRFRkJDODI2QUZENTJERUNGQjJGOTAzREQ5MEVFMjhFNDNEODcwMDJCM0JEQjM2QzQ3QTZCMEM1NENFRTlBOEQ3QzQ1Q0REQjUwRDhGRDRGNjM1NkIwNkY1Mjg4MTU4MzhEMjMwNkRDRDAzNUFDNDk2ODc2ODVBQjY0QTJGNzk1RDY3Rjg1ODYyRDcxNkRDNDRBOUFGQkI5REMxQ0JCQTAyOUFCNjAzMTgKKzk4MkE4QjFCCitEMkZGQkIwMkZEMDExNzNFNUNEODBFMzc1NzBBCisxQ0NGMTY4Njk5MTg4RjRDNkVCNTk4QTRFMUMxQkM4ODA2MjIyNzY3MkEwODlCQjZFNzU3Njk4RDQ0Mzg5RjlBNjJGOEE3QTg4NDM0OEEzQzk5MTRGNTc3OEQxQzFEOEM0NTJBMzI2MDkzQTkwRkI0RDNCMUM0RDM1ODMzRjU0QjVGQjBFQ0M2Q0Q4MkRGN0Y0REJDOTdCQjg4MkJDRjIxMzY4RkM5QjRCN0QyQ0ZFREE5QTA4RDdCMjhFMDcxN0VDQTNCMjIzMAorNDJDRTlDREEKK0EyQkU0N0JCRkM0RkNGMzdFRThGRTZEMkRDCisxOEVCNEMwMjc1RjM1OTI5QzJENTA3NjlGQjYzMDJDQTczNjFEQjRFQjc5Mzc2REE5MjMyQzJGREFBQTNBRDkwMjEzQzIzRUE1QkU3RENCNTE5OThBQUQwMjJEOUI1RjFENTE3OTYwRjk0NzEKKzFCREIzRDRGCis1QTFFN0VDMzQyOTRFQjU3M0NDREVGQjE0OUNCCis2NzQxMEMzMEI0MkZFRTg2RjZGQUNCMDM2NzcyNTIxMjczQTgzOUQ4ODAyRDJENzVGOUUzM0Y5RjRBMENDMjRDMzRFNzI1MzE3MEU0Mjg4MjhCQjU1MUVBOUEyNTEzNDcwMkE0N0Y4NDlFMkEwQjRBM0Q0MzkyNTJFRjUxNDFGNDI3MDI3Qjc5Q0QyNDhCN0VFNDFBOEMxMDZFRUY1REUzQkU1OTZDQ0JCOTBCM0IxODlBQjM1RERFQjM1NDJBQzZBNzUzRUZCNTM4RkU3OUQ3NDVFMzQyCitCMTIxNTBDNgorODhFQzkyMDhGMkU0MENFNjVCMTQzMDMxRDk2NAorREE4MDkzNEI1MEVCODY5NzVGMEZCNTE3MTYxRjNDNkZCNjM3MUU5QzdCQ0JDMDkxQkI0MTdERkI1REMyRTJDNTYxMTMxNDAxNDMwREVCODM3MkUzREM3NjgxNzY1QzUwMzk1NjM2MDYwRTI4NzIyOTM1RDZERTgzNzZGOTM1NzU3RkY1Qjg4Q0UyNTA1MjhDQTNEREUxOTdFNDlCQkREM0ExOTk3QTk4MEIwQThEMDRGQ0VFMTRBOTc4NjU2REM3NzFGMDQ0MTUyNTg5RTA0RTAwNzYxMTQ2ODk2RDBDM0ZCMjg4MkRCODFDNjJFMDA5MDNEMAorNDg2NjVDOTkKK0RENzlBMkFDODk0RkZENDdCNzNBOERERTE4MTMKK0E4NEUzMjZFOEQ2OTk3RTRCNzVCQTAwODE1QTk4OEI3QzA2N0I5NDVFMEVFOEI4OUE1MzA4MDEzRUJENTFCNURGOEM5OTc2RkZCMjUzQTQ4RUQ0MkUwM0IyM0RENDk1NTA4OTg2MTc2QUVGNDEzODFDMzk4QjcwQTYwNjQyQ0IzN0RBOEY5NkEwRDdDMUMyQjQxNzQ2Q0FFMjQzOTM3NzgzMjM0QzJEMDQ5N0U3Qzk1QTBBNEQ5QUZBNzMyQTI4RUY0NEIyMDgxNTE0Njk0NTgKK0M0MTA5NEZCCitGNjM5RjI2NjU5RjU2RUIyRTAyNDRCODAwRQorQTE1QUY4QzFDMTYxNTBCRTZDRTdEQkMwQkVCRDY3NzY3NDgwNzQ4QUNBMTUwQTdCQkY4MjJENzdDNDkxN0U1NUVCNUM5QTc0OTdBOTIyMDM5NDZGMUUyOEE1NTRDMEE3MjJGMTMyMTlDMjdFOEQzMEZFQkZGMjREOEU1NDY3RDFDMzZGMDhGMUEzOTMyNkNERDkzMzU2REI2RUEzODBDNDJDMkM1MkQwRkU2MDIxCiswMTIzREVDOQorQjhFREY5NDNGNzI1MTNBRjkyQTAxNUFDNUQ2QgorNUY4QjVBMTRBOUNFNjNFRkIwRUUxQkZFRDkxREIyMUFDOUM2OUI0NEQzRDBEQ0FFNkJDODgwNTIzNDQ0OTE5MUVDNjQzQTM0MDEwMkI0MDQzMTExMTlCRUVDNTI2MzcxN0E1MDU3RDU4MzY3QTc0MEJBMTg4REMwQUIyRUE5NkM0NjQwQUZGREJEM0E2QzU5QTRBRDc4MDQ1RTFDQkNDQzdEODY3QTBBMDU5Nzk2OEEyMTExODlDRDVDMTQ5QUNGQ0YyODFERUUKKzA4NTA0NzJCCis4MUM1RkExQUVFRjcyMzkyN0I1NzE3OUM1QzNGCisyRkE4QTlEOEVENDgwQTIzODgzNTc5MTk4REVDODNGQjQ5QzExMEYzQUMxNTdCNjFGRUM4NkUzMTFFNkUwNTM5OTMxNTE4NDM0QTU0RDA3MzZEOUNBRkQ0QTA3QTA0QUJGRTQ3QjU3QkY1MzM0RDYxNjdFOEJDNkJENkUxMzc3NURDRkEyRDFEQ0EzNzY5RjdCRDRENTUzODc5MzMzOEUwMDBFQjQ5N0VDRjgzREVEMUM3NjRBRUE5ODg0MTM1RDkwMjAzQkYxQzQxRTc0QUYyODczQTZCNzIzNDU1MjE0RjNGREFGQUU4QjQ3OTg1Cis1RTkwQ0FFMgorODk3NTNDQUIyQjNENkFCRURFNjA4NUNGMkQKKzg1QjFDRTZGODY1NTFERjYzMDZGMDVGQjg3MkJGODQyQTQzOEMwM0YxNkE4QjdENUU4QzY0MUIxNjM5REM0MTE1QkVENDBEREUwREUxM0ZBOUQxQkE4Rjk1NTg5RUQ5NTgxQ0EwQ0Y5MUREOTlEMzhBMDI2NEFEQkM2QTcKK0Q3ODhDMzg5CitFMDExM0QzQjJCRTIyOUQ2RUY1MTk4NUU4NgorOUUxMTg3RTc2M0RBNEE3Rjc2MEE4QzlGMDJDQjA2MDI5QTgwNUIyQTJGQkFBQzY2MEU5NDZCQ0VFQjE3MzQ1MTc1RDMwMzc1MDlDMzgxRkIyMzI0MDQ2MzZDNjk4OTMxQjI5MjIzM0I4NTlGNzM2NDEyMzI4NDM4MjdCMzQxQTZBNTcxMDVGQjZCNzk3N0QzQjNCQkQ3RDg3NjMzNEI1NzExNTk5MzQ1Rjc3MUUwNkRCOUUyNTVEQzEzNDNDMworRkFDMDYzQ0UKKzVGMzMwMEJCNTk1REVBQjgwQzQ4NDI4NzA2MDMKK0QyQUQ5NjEyNjMzMkUxQjQ3NEIzQjZFNjMxNDcyNDkyNEUyQTE4MkFFMUJGQzY1N0MzQTc2MzEyNTMwQUI3NTU4RTQwNTg2MzQwQTFDQkFDOUJGMUIyMkI4MjkzRjg4OTA0MUVENTY1MzJCNkVCMTEyRDBDQTQ5RkU3NERGRUU3NUQ0OUUwOEE5QUI0OEM3QUM5NkQ0QzM2MUFBNzgyMkY3RUFGMTI1NTYxQzgxMDg3MTBEREM3QkU1MDU3NkZGMkJCMDQ0ODA5CitFNDc2NjgyRgorMzU0OTQ3RDhFMzI3RjgwMDk5RTVENTNBQjA1NgorQjlFQUU2NjlDNDMzRTk2MjA1MUNGNDAxQTk3MjBFNjRCQUIzMkM1MjZEMEZBMjkwOTU5NTUxQThCNzczNkRDMkQxNjJBODJFQkVEQjE4NDYwRTI5RUM2QUU1MkI2MDAyODQzNzcyMzZBQzZCRTFCNDI3MDY4QUUyMzQ0MjAxOUQ1MjI3OTQyQTE0RUM5OUUxQzA5NDI5NjVGMjRDQTA2MTcyOTYyQkVERjZCMEJENTFGRkU1M0RDQzJDMjZGRDgxNzg1NUEzQjUxODMyNDk1QjkxNEJDQUJCNTYzRTUyNkRDMDAwMkFFMkUyCisxNEQ0MDY2RgorQkMwMjAwNDg4RjdEMzcxNENFQkM3NDBGQzRFQgorQTFDODQ5OUQ5M0E2QkRCRkREMzVEQkU4RTBDRjk2RERBQThDNjAyRUM2N0Y2OUZDRjdBQUE3ODI3NkYxMjA1RTRDM0JDRDRBNTk2Q0VCNDFFQzA2RjE3MEMyMDM2NENBQkYyNjlGMTkzMzI2RUZBQkQwNUU4Qjc1RURDNEY3NkYxRkNBRTk5QUVGRkU0MjgzMDBCRUY2MTk0QzBGNTFCM0Y1MzIxMTI3OTZFMzI5NDJGMEJFNTM4RTlBM0ZDMTZBMDM2RTdDMzFGRDI4MzIyQjNFMEU5RjBDNjA5QURDMDBDQzZEMDE1NTRBODI0OEZGNkZCN0MyQTMxREY2Cis4NzE3CitCMTUwQTAyRgorNEI2MzNFODUKKzkxQjdBMjAzQUIxNzVERkJBMUE4MTVCNzM5Cis4OEU2NDk5ODk0MjM1NzYzMjQ3Mjc5Qzc5NEQwQzMyNTNERjQ2RDEzMDREMzZGNUEzRDcyNzkzRDNGN0ExRkQ2RDU3QjAzOEQ3NTEyRTZBMDFFQjYyNURCREJCODQ2RkU4MTIwNTZFNTRDRUI0Mjg5NzIxOUJDODdDN0JCREM5RDRGQjdBMTY4NzA0RjNGN0M1MzkyMDlCQzhBNjBGODVCNzhDRkNDOTc1NDMwNjM1OTUzMDhDRUM4NjE0MAorNzQyRTIzOTcKKzI1MDQyNzcxMDU4MDhBMUZDNEU1NkEzQUE0CisyNTg0MTgxRDc5ODJCMDBFMDRFMEQzMEZBMUFDRThEQjFEOEYyMTFGRjA2QzZBNkYzNDQxOTVBRDg3NEIzMkFCRERDNjMyNUVERTM2ODBFNEJERjRDQzE3Nzc5OTNFQzI3NjgzNTVEODkxMjg0NTJGNUNGREREMDdDOURDQ0RDRjNEMTIzQTgyRThBMzZGQUM2QUNDQTY1MUJDN0Y5Q0JFMTBCNAorMEZBQzk4MzAKKzg0ODczNjFBRDNBRTJCODZCOEFFQjQ3RTExOTQKKzEzREQ5NTU2NUMzQjZENzc1NURDMDM5MDVEOURDNTg5MzVCMkQxQUE0QjE4MjkyRTkxNURBRkE0NzFFMTU4MDNGNTgzNjQ2QjAwRTQwMUVCMTQ3RjE5NUFGQzlFRTM3RURENTQ3MkQ2Q0QwMEUzNzgzNENGQjgyNkFEMEFEOUZENzlFRTJGOEE3OUNGNjI2NkY5MzM4MTg0RTFCNjRFNUZCRkE0NjlEN0ZGQ0RGNEQwMzhBRTI1NDlCQzE3MEM3MjZCNzQxQkZCQUIxM0VEQ0E1MTE2NjdENworRUY3OUIyOTYKKzVGNEY5QzNERDQ2MURGQjUyMTcwMkE3RkY5CitFRTYxQjA2RUYyRjVDOTU3MUY2RDI5NjAxOUQyRjg4QjhDMDY0RjM2QTcyNzU4RkJFMEI1NzJEREQ0RDBEMEY3M0MxQjJEMzY3M0M5MEFBM0Y5QzE5RjIwMTMwNjBCQjYxRTEyNDJGRkIwOEVFOUVGRkQ2QkZEOThERUJERkE0REZDQ0Q0Q0NGN0I1QUFFMjQ3QkYyMTVBNkM0NEI0N0NCNkFDNjE4MEEzMjJCRTBGMTA5MjNFQjZGCis4N0Y3Mjk1QgorNjVBODlDOTJCNjYxRTMxRjUwRDREMzI0OTcKKzEyNDcxRTg1MEFGRUQ4NjYwRTVDRjRFMjRGREU2RTk0QzEwMzUyQUZFOEFBMUIwNkQ5ODY2QTU0RTFFN0FBRTcwNjNBM0EwMTVGQjM3RDI4MjY2MzRCM0NDQjBDQTJEQjhDRkUzRjdCRjQ3RENEMTgxQTExNzBFMzQ0RTFCQkUzNENFRjk3Nzc5NDBDMUVGNUJDNEExQTQ4ODM0NERCQjBBQkM3OUE2MDRBNTIwMDBBQjA1RUYwNzVGRQorM0I1Qjc3RjkKK0Q3QjNBNDhCN0JGMThBQjRGQTRDM0QyQTY4QjIKKzM2NjEwMkFCMDAzQ0U0RThDNDI3NTcxODM3MjdFMTE0Qzg1ODI1RTFFQjc5Mzk3RTFGREE4NEZFRTU5MTVCMTQ4Q0U5RUU1Rjk3RERFOTNCNDBCMzhDM0IyNjMwRkE3QkIwMTZCRDBCNTNDNUE2QjI2MjFCRDM0RjJFMjI3MzlERjIyQ0I3OEJBMzQ3NUExNjcyMDc0RTlBNzc2MjREOEMyRkQ1QUFEMjRDRTExMDU3MUQ4NkMzOTg1RDFCQ0MzMzBDMDVCQjk3NjNBNDA4QkQKKzhBREQwMzExCisyQUVCQkZBN0FERUM4NTMxNTRFODU3NkU3MgorQTgxODY1NzA1REVGMzgwQzk0MTlGMTFENzUxM0EzNUY3OTEzMkJGMkJEQ0UxOENGRUY1MjMyQjI0QTRBQ0M4MEZDNDNFQTZFNDRFQzAzRTdBRkVDQzQ3NDc4MUNEMTI3RUI3QTg3REJDNTNDMkQ4MUMyOUE4RDhDMDIyNDI1NzYwQjJCRjExQzlFQUU4NkU5MzhBQzhENDVFMDJDCitEQzZGOTE5MworMzVDNjI5MDMyQUJGODlDQjIyMzQ5RUI5OTk3MAorN0EyMjlFMkU2OEY5MkRDNTVEMjdDN0I0NUU2MUI1MDA3NDBBMTRDQTFENzEyMDRFQkNGQUY5MThFNTFGMEE3OEVBOUNEOTBCODg0REQ1MjUzMEMzNkQyREUzRTMyMEFDNzA0NEFGODU3OEUwMEMzMkVFMEQ3QTU2ODMzMkI1QkNCNTdENTQxRTQzRDFDRDU4OTQ0MDEwREY4OUMxMEY5RDg2OTM5N0FDRDFFNDY2N0U3OTkwN0Q3OENCNzk5NEY3MTE3Q0ZEQTJCOEM0MTQxMDI1MTEyRkYyODAyREJBMzEyMEVGOUQwREJGRjc0NDdERTJENTg0NTU3RDQ5CitGMkE0CiswRTNECis2OUU0Nzg0OQorQkE5NDU3MzU2MTNDQkZGMUU2OTE2RTZCNTUKKzVCMzE2NzBDRERFNDVBQTdGN0Q0RTM5RDE5MTk0ODA3MTk3MjlDRUE2QkMzQUM2ODJBNTgxMTVGQTJFNzdCQTZCQUQxRTkwMDQ1OTczMTNBRTlFN0RGNkU5MjE3NzE0NTk5MTNCMEFBCis5RjRGOTJGNAorOTk2QzVFRTc2NkYxMUQwNEIxQTE5NUQ4MDg2NgorMkI3Rjc3MUJBNUMyQTdCMkQ5NURDMjlENzk0MTZBNkU5Q0VEQjBBMjJCRjQ1MTVDMjNBQkZCMEY4NzYwNzFBODYyQkMyQkQ4ODdDNUNFRUQxMkRDMTlFQkNFQTBCQjAwNEIyOUI4OTNFQkJFQ0VBNkE5NUREMEU1NTc3QTQ1OTNBQ0IwQUEzMEE2NjFFNzA1NEYyODI4OTIzNUYwRTc5MkI3RDIwRTk2RjJDQkZFMTMwMDJGRUVDRTU2N0E2ODNDQjk2QkRDQzU2MTM3MDNDQkZDN0IzQkNGMTc0RjExQjQxM0I0REE3Q0JFNUY4OUIyMTBBMjIxM0NDNEVCCiszMDBDCitEQkU0MEJGMTZGRjFBMjU1QTdENTY2NDIwQzY1MzI5MUE0Qzc2RTFGQzlGOTIzQjVGQzg2QURFQworMkYzQTcxMjIKKzFCMjlBNDAwQkFBMjQzQzk0Mjg1QUIxRDJEMUEKKzYyNEY1OEIzMkY1NzIwNEEyOTgyQjFBQjM3NkQwNjdFRDZBMEYxM0NGRDJCQ0MwNkU1QkIyNTRBRDlCNkEyOTQ4NDQ4MUY1NzYyNjc3NDM1QTdCQUIwMDIxNkFENDYxQTYwRTE0NDVBNUUzQzQ0N0E3OTQxNDBFMTZDMTUyNUQwM0YyNzIyNTE4Njk2MjYzOUU4MzNCQkE3RTMzMjY4MTM3OEE0M0EzNDEyOTE1RjQ2NkI0OURERTg3QzMzNTdGRjIzQzA5QTU5N0Q4RjAwCisyODlDQ0NCNworNjBDM0FGNjJBODAwMUE4NDRCMEVDQURGQUUKK0Y4MEVDMkI2QkI4RDE2QkVDMUQ5NTdCRUY4QjhBMjAwRUU5QzlCODIxQUMxMkY1ODk0M0IwMkM1NEM5RUZDQTZBNkY2RjkzNUQxNUU2MDYyOEQyNzFCOTg4ODVBNDRCNzlEMkNCNDMyNUQxNkZERDMyNUJFREFBOURCNkE0NjJBQzFDNkE1MzAyNjk1CisxNUU2QTE1NgorODlGMUQwRTM1NUIxN0IzRjY1MkM4OTc5NEZENQorMzdEN0FDODcwQkI5QzA5OTc4RDQyRDUzM0U1OTRDQjBGMTIzRjI1MUQxRTI1ODYzNDVBQkQ0QzAxMEM2QzU5MzE5OTYwQzhFMTJEMjc0MDUyRTUzOThEMzk2NTMyREY5MjIyQTkwQUY4QzlFMjlDRTg4MUM3MTY0RDRCMzhCMzZDNTJEMUY1RDA4NjlBOTlCMTAzREQxQ0EzNjE0N0Q2OTdBNzdBREMwRTlDOUY5MTlERUExODBBODg0OURGM0Y3MEE5NkMxMDc3RDgzMjI0QjM4QzEyODU3RUUzOTcwQzNGNworMDZERTRFRjMKK0Y0NjVFRUQ0MEMwQzBDQ0VFQkMxNTlBOEFECis4NTU4RjA0OTJCMUFDODRDRTIxQjA5MUU3RTMyOTA0RjAwQjgxQjM2NkU5N0U3RkM2RTkxMDE2QzZEM0NEMjZFNDgxRjMxQTgyRDlBMEVCRDhCMkEzQUJERTk5NERDNkEyMzA5OEM5MUREMUMxODYzNkM3RTk1Mzk5RUY3RUZEMTBBNTNEMDRFODBCNTkwMkMxQTU3M0FBQjVFOUJERUI1QjhCN0Q5REFENTJDMjIzMDI2Cis5QkZCNzQzQQorQkEzQ0EyMzQwMDNDOTdCRDJEQjVFNjg0MDBDNgorNzA2RDI5REZDMEQ1MjM4NEMyOTFCRDE2ODk3QTQ4NEIxRTZDMTA4NTRDMkQ4MjNBODZFRjAzMUJBNDAwOEM3RTY1QkFCNkEyQzcwNjYyNjIyRTgyMDU4ODYxOUY0OTdBNURDNUNGMDAyQkNCNzFEM0ExRDg3NTcxNjU0NUU0N0FCNjQ5OTQwMkQxODdFRjA4MUY1NEVBMkIyMzA0OUFGQ0MxN0NCOUUwMzE1NjJCMDE0RTJDNDlCODkyMTRGNUY2NDY1RDRFMTBCMDg4RDNENDVCMzJBQ0EzQjM5NzE3RDkwQjNDRjQ3MTAxNkEzNkYzREMKKzlDN0U3RjdCCitFNEYzNzhGN0ZFREJBQUM1RjUwNEUyNEM1OAorMjkyN0U2RjQyM0FENzA2NjAxNUE3MzE2RURGMEFFRDU3MjYxNjdCNjZENUNGRDE2M0Y5MjM5NEZBODdFRjM3N0YzQzI5NjY0MjY4QzNBNUM1NTgxRTgxRTY2MzRFRUVFNjY0QTg0NzVBREJFNTk4NEI4Q0VDQTY5QTE3ODY2OTcxNDgwMUVDRAorNDJDQzY3REIKK0VFRDEzODkxQzc5RTQ5N0I5QzQ2Q0QzODNECiszODU3RjExQzU5QTE0REJFQUQzNzYzNzQ5OTA0RjRBQzkxQzVFNURENDdDMTJFREVCRUUyMTQ4OTZFOTAzOTkwRDNFMTVGOTFDMUJCRTEwREJGQzQyNDdFNEIwREJCMDEzNDAyNkU3NEM4MkE3MjQ3MzlBQzE1QTk1QTRBM0RBNzZCNzZCMjJCMTFCMDE0RTNDQzVGMzlCRDMyRjA5RDAyQzBDOUFGNEI0MDU1QUMxNEMyMkI0OQorM0FCMjQ1M0UKKzEwNjFBMTFCQUQ4NjUyMTQ0NkM3REU1RjI2CitBQjhGQzAxOURENjgxMzA2RUU1QjNEOTQ0NzRGNTM3NEM2OEExMkQwMTc2N0UxMzJDQkQ4Njk3NzdCMzdERkNFNDU0MkIwRTg5NEI5QUQ3MjI2NDIxMDczQ0FCQzlDQkNBNTYyNDUxREJBOUE4NzhGODgxMERBRTNDN0FBQkUxREQ1RDA0ODAwM0QxQ0RFQ0JEQjFCQzFGNDA0ODU5QTAyQjU0OEYzQzUwOENCMzg5MUNBMUU5Q0UwCitBQzlCM0M5QworOUFEMDFBRkQzQURCMkU0NTI3NTVEMzQwOTAwMgorQ0FFMUM5MDQyOTA2MDE0QTRBNTdGMUY0ODgwNDMwMTYyOENFMTY3RjAyODVCMEI1OTRCMjA1RDQ3NjU5ODQ2ODQwNkM1QTQ1MTBGMDQ3OEYwNzUzMzZGRUJFODVCOTgwNkIzMkRGMzVGMkIxMUNFQkYwNzI5NjM4QkVENDE1MzAyQjU0NjQ1N0U1QkIyQTRCM0JGNTUxMkU2MTMzQTI2MjA2QzM4RERFRUE2RTJFMDVGMUM2QjU2NEREMDIzNjAzRjJBMTMxODIzOTJFODkwNTVEOTAzMjZFNENBMEJBRjA4OUEwNDZGNzJCOUVENzY4MTYzOEFGQUY0RkU5Cis0QTEyCis5MkZFNDJBRkI3MzUxQzExOURDMDY0Cis4REQwRjE2RAorMjM5MkVCQjE5MjBGRjQxNzc4RTI5NjVERDc2MworMTI3NkQ1MTZEODM1RDlBRUFCRjk4RjQ4RUQ3QTU4QTYyNzlDQkIwRDYzMTgyMDUzN0JBMTJCRENENzNGNDgxQTM1QTFERTEzNEM0OEM3RDdBNzJBRTI0MEFDRTk4OThFNzYyMzhEOEQ0Mjk0OTMyMTUyQjlGNzE3NEQ3NkQ1MTVERjY1OTA0ODg3ODM0N0U4MEZFODI2RkU4QzFGRDkwQjI0RjlCM0VBQzRERUNEMUY3NDQyMjdGQ0VBMTNBREE3RjM5NkY1NzhDRUI4ODMxRURCNzgxQkNBMjIyMjk1OTRFQzRDMEMxODFDNDdBOEU1MzFENDc4MTE1RDE3Cis0NEIyCis4OQorNjY5RUJEOUIKKzEyQjhCNzU1RjcwRkQ3MUYzOTU2Nzk2M0U2RUMKKzkxN0JDNkZFQTdDRUU5NjQKKzVEQzdDRTJECitFQ0YyQjVCNTYwMzMxNjdDQkREMTNDODhFQTYwM0U2Qjg0REEyNEQ5RDIwQ0FEQzhFNjBBQTRCQThDRUFDQzI5OEVDMAorNEJBOEEzMzhFOEI1M0FENkM5N0YzNzM4RUY5NUI4NEM5M0YzMjM3MEQzNUZEQjE4MTM0QzBDRDhBOEY5QTdDNTE3RjMwMDVFRDRFOAorRDU0NDMyQTc5Q0M0QzBFMzkzRTJFN0MzQjk5RkI5MURCNjlBODRDNjNEQzRBQUZFQTE5M0M0CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiaQorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGJpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYmkgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDYzIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzg0IC0xMyA0NzEgNjgzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0IzRkJBRUM4MjZBQzdFMUUyMAorMjUwRTNBQUJEREE5QUREMzBGODZFMDc0MTdENDE1QTVDNUYzQzc1QjJEMDgyNkJFQjZGMzAxMzYwN0VEOEE2NjMwMjA4MzlDOTA0MUY0RjdDNzk3OEVBMzQ1MUMwRjgzQTIyQTU5QTE4M0QzQUIwQUI5REMxRERGMzc1MjE3QTg5Qjc1NTZBNTU2RTdDOEJENkVENjREM0U5QjE5RkVGQTZEQkYyQThCMUQ3QTRBRDFBQjdBNkRGODgwRjdFRkIzRTVERjRDMTNBNjZCQUMxMQorNTZEQzU5Q0MKK0VFQzg0QTQ1RDgxNjE0QUMxQjk3QjhBMkY4MUQKKzlBOUQzQkFBRjFGQjIxMTgKK0VDMEQyQzdFCisxQTFENjA3QjgyOEZBMTJCNkVGNjhDN0VCNTYxNUY5MzQ3MDdDQTVCNDYxOUZFOERGRjBEMzdFMzU1MENFQ0ZDOEEyQworRjhGMjIzRTQ2RTExQzhBMTRENThBRDEzOTA2RTg5ODU2MTZDMEJEOTExRDZCMjNERTZEQzI5RDRENURCRDRCNkE2MTk1NjU4NkU4NAorNUQ1RTI1QTJGNjgxMTg3MkRDODZDMjM4QzkyQTdFRkYxOTA1RDZERDZCNTVGOTgwRjk1NTczCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gyNGIgMjQuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE4YiAxOC4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoNzJiaSA3Mi4wMCAvUFNPd3N0ZHV0Y2hiaSBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMjRiIFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDEyMTkyNTIyMTkyMzFhMGE+IDQ2MzkgMjk2NSAwIDYxMzkgLTEgcword3N0OmR1dGNoMThiIFNGCis8MGIwMTEyMTkyNTI4MjEyMzFkMDExMz4gMjkyMiAzNDczIDAgNDY0MiAtMSBzCis8MTkyMzFhMjEyMzFmMTUyMDE3MTkwMTBjMTkyMDE3MWIxZjE1MjMxZD4gNDYzMSAzNDczIDAgNzg1MyAtMSBzCis8MTEyMDFhMjEyMzFmMTUyNTFjMjEyMDAxMTIxOTI1MjgyMTIzMWQyNDAxMGUxYzI3MWMyNDFjMjEyMD4gMzI2MSA1NjI1IDAgNzUxNCAtMSBzCis8MTAxOTI4MWUxOTI1MjUwMzEzPiAzNDczIDU5MzAgMCA0OTg0IC0xIHMKKzwxNTE3MWQxNTIzMTgwMTBkMjExZjIyMTUyMDI5PiA0OTczIDU5MzAgMCA3MzAzIC0xIHMKKzwwZj4gNDE2NiA2MjM1IDAgNDM1NyAtMSBzCis8MTkxNjIzPiA0MzQzIDYyMzUgMCA0NzkyIC0xIHMKKzwyNjE1MjMyOTAxMDUwNzAyMDEwNTA5MDkwOD4gNDc5OCA2MjM1IDAgNjYxMCAtMSBzCitOCis1MyBMVworW10gMCBTRAorMC4wMCAwLjAwIDAuMDAgMC4wMCBzZXRjbXlrY29sb3IKKzEyMi4wMzQwIC0zOS44MTI2IDAgNTMxLjYwODUgNTMxLjYxMjAgMzkuODQ3NiA2NDcxLjI1MTAgOTcxNy42NzcwIGFkZGNvbmljCisxNDcuNzUxMiAtMzIuMjg4NyAwIDUzMS45NDc2IDUzMS45NTI1IC0yNy43NDU3IDcyNjkuMDE2MiA5MjU3LjM0MjcgYWRkY29uaWMKKzY5LjkwNDkgLTExMC4wNzYwIDAgNTMxLjk1MDQgNTMxLjk0MzggLTkuODk5NCA3MjY5LjA2OTUgODMzNS4yOTg0IGFkZGNvbmljCistNzEuODE1NiAxMzkuMDczNiAwIDUzMi4wNDg0IDUzMi4wNTI3IDQwLjkzNDkgNjU0Ni4zNzMxIDgxNDcuMDc3NyBhZGRjb25pYworLTExOC40NTc3IDk5LjcyODQgMCA1MzEuNTgxNCA1MzEuNTc1OCA0NS4wMDAwIDU4NjIuNjQ5NSA4NjU2LjU3NTUgYWRkY29uaWMKKy0xNjEuNjk3NCAxNy43MTY5IDAgNTMyLjA0ODkgNTMyLjA0NDYgNDEuNjQ1MSA1Njk0LjQ0NTkgOTQyNC41MjM4IGFkZGNvbmljCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorTgorMTcgTFcKKzAuMDAgMC4wMCAwLjAwIDAuMDAgc2V0Y215a2NvbG9yCistNDEuMTE2OCAxMzguODgyNyAwIDUzMi4wNDY1IDUzMi4wNTMxIDQxLjExNzQgNjU0NS45NTA2IDgxNDcuOTk3NyBhZGRjb25pYworNTk2NSA5ODgzIE0KKzQwLjA2MzUgLTEzOS4zMjExIDEgNTMyLjA0OTcgNTMyLjA0NDkgMTkuMzI5OSA1Njk0LjExMDcgOTQyNS4wNzY3IGFkZGNvbmljCis1NTk3IDkxMTkgTQorMTE5Ljk5OTcgLTYwLjAyODggMSA1MzIuMDQ1MSA1MzIuMDQ5OSAwLjAwMDAgNTg2My4wMjAyIDg2NTguMjI5OSBhZGRjb25pYworNzAwMyA3ODc0IE0KKy0xMjAuMDAwMCA2MC4wMzAwIDEgNTMyLjA1MDkgNTMyLjA0NjYgMC4wMDAwIDcyNjkuMDI1NyA4MzM0Ljc2NTggYWRkY29uaWMKKy0yOC45NDg4IDE1MS4wMjI0IDEgNTMyLjA0ODcgNTMyLjA1MzUgLTMxLjA1MTQgNzI2OC45NzgyIDkyNTYuNzcwNSBhZGRjb25pYworNDQuOTk5OCAtMTM0Ljk5OTQgMSA1MzIuMDQ5NyA1MzIuMDQ2MiAtNDUuMDAwMCA2NDcwLjk1MjAgOTcxOC4wMDM1IGFkZGNvbmljCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorTgorLTQxLjExNjggMTM4Ljg4MjcgMCA1MzIuMDQ2NSA1MzIuMDUzMSA0MS4xMTc0IDY1NDUuOTUwNiA4MTQ3Ljk5NzcgYWRkY29uaWMKKzU5NjUgOTg4MyBNCis0MC4wNjM1IC0xMzkuMzIxMSAxIDUzMi4wNDk3IDUzMi4wNDQ5IDE5LjMyOTkgNTY5NC4xMTA3IDk0MjUuMDc2NyBhZGRjb25pYworNTU5NyA5MTE5IE0KKzExOS45OTk3IC02MC4wMjg4IDEgNTMyLjA0NTEgNTMyLjA0OTkgMC4wMDAwIDU4NjMuMDIwMiA4NjU4LjIyOTkgYWRkY29uaWMKKzcwMDMgNzg3NCBNCistMTIwLjAwMDAgNjAuMDMwMCAxIDUzMi4wNTA5IDUzMi4wNDY2IDAuMDAwMCA3MjY5LjAyNTcgODMzNC43NjU4IGFkZGNvbmljCistMjguOTQ4OCAxNTEuMDIyNCAxIDUzMi4wNDg3IDUzMi4wNTM1IC0zMS4wNTE0IDcyNjguOTc4MiA5MjU2Ljc3MDUgYWRkY29uaWMKKzQ0Ljk5OTggLTEzNC45OTk0IDEgNTMyLjA0OTcgNTMyLjA0NjIgLTQ1LjAwMDAgNjQ3MC45NTIwIDk3MTguMDAzNSBhZGRjb25pYworZHAKKzAgTFcKK04KKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis3NzMwIDgwNjkgTQorQworTgorNzczMCA5NTIzIE0KK0MKK04KKzY0NzEgMTAyNTEgTQorQworTgorNTIzMyA5NjkxIE0KK0MKK04KKzU0MDIgODM5MSBNCitDCitOCis2NTQ2IDc2MTUgTQorQworTgorMC4wMCAwLjAwIDAuMDAgMC4wMCBzZXRjbXlrY29sb3IKKzU5MTYgODY2OCBNCis3MDI2IDg2NjggTAorNzAyNiA4NjY4IEwKKzcwMjYgODkxNyBMCis1OTE2IDg5MTcgTAorQwore30gLTEuMCAtMS4wIHNvbGlkRmlsbAorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKK04KKzU5MTYgODY2OCBNCis3MDI2IDg2NjggTAorNzAyNiA4NjY4IEwKKzcwMjYgODkxNyBMCis1OTE2IDg5MTcgTAorQworMTcgTFcKK04KKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis1NzcwIDc4MDMgTQorMzkwNiA3ODAzIEwKK2RwCitOCis1MjYxIDgxNDIgTQorMzM5OCA4MTQyIEwKK2RwCitOCis1MDA3IDg0ODEgTQorMzE0NCA4NDgxIEwKK2RwCitOCis1MDA3IDg4MjAgTQorMzE0NCA4ODIwIEwKK2RwCitOCis0OTIzIDkxNTkgTQorMzA1OSA5MTU5IEwKK2RwCitOCis0ODM4IDk0OTcgTQorMjk3NCA5NDk3IEwKK2RwCitOCis1MDkyIDk4MzYgTQorMzIyOCA5ODM2IEwKK2RwCitOCis1NzcwIDEwMTc1IE0KKzM5MDYgMTAxNzUgTAorZHAKK3dzdDpkdXRjaDcyYmkgU0YKKzwwMT4gNjM1NCA5MzE5IDAgNjk3NiAtMSBzCit3c3Q6ZHV0Y2gyNGIgU0YKKzwxND4gNDI5MyA0NDkwIDAgNDU5MSAtMSBzCis8MTkyNzFjMjQxYzIxMjAwMTA2MDQwNT4gNDU4MyA0NDkwIDAgNjQ4NSAtMSBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6CislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMikgMgorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDUwIHB1dAorZHVwIDMgL0MwMDU4IHB1dAorZHVwIDQgL0MwMDY1IHB1dAorZHVwIDUgL0MwMDY2IHB1dAorZHVwIDYgL0MwMDc3IHB1dAorZHVwIDcgL0MwMDc4IHB1dAorZHVwIDggL0MwMDgwIHB1dAorZHVwIDkgL0MwMDk3IHB1dAorZHVwIDEwIC9DMDA5OSBwdXQKK2R1cCAxMSAvQzAxMDEgcHV0CitkdXAgMTIgL0MwMTAyIHB1dAorZHVwIDEzIC9DMDEwMyBwdXQKK2R1cCAxNCAvQzAxMDQgcHV0CitkdXAgMTUgL0MwMTA1IHB1dAorZHVwIDE2IC9DMDEwNyBwdXQKK2R1cCAxNyAvQzAxMDkgcHV0CitkdXAgMTggL0MwMTEwIHB1dAorZHVwIDE5IC9DMDExMSBwdXQKK2R1cCAyMCAvQzAxMTIgcHV0CitkdXAgMjEgL0MwMTE0IHB1dAorZHVwIDIyIC9DMDExNSBwdXQKK2R1cCAyMyAvQzAxMTYgcHV0CitkdXAgMjQgL0MwMTE3IHB1dAorZHVwIDI1IC9DMDExOSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTIzOCA5MjAgNzIyXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY5OUEzNEUzNjQ5ODQyQjE5NEY0OUQ4NDUwNjlERjg1NDkzCisxNTM5MDI1RDhCN0U1RjhCMUM1RDJDOTEKK0FDMzlBMThEOEJGMEM5MEQ5NQorNkRCMjU0MEQKK0FFQTcwNEYxMkI2QUNCQjdDMkU1Njg4RDBFCitCRUFDRkY0OTg2QzAyNUQ4N0YyMzE0QzlGODgxNDMyOEMyOUEzNTg0RDQ2MDZCRkJBMTE4RjZEREFDNkVCNjhERjkzNTBDNjc3QTA2NEFBQjFCNUJFMjBDQkU5QjI4Q0RCMjg4MkRBRDEwQkFGRUIyRDFEMTQ3RTcwRTkwNEQwQ0RBREUwNzU2Qjg1M0QzMTBGQjkyRkY5Q0Q5MzZFRUY3MUI3MjlGMDcyNjY0RDY5MjBGOTQKKzE1NzU1NTlBCiswNTZGMTEyQTRFOEZCNUM4QjY2NThERjY4NworQzlBNzc1RDkzNzk3NkQ0QTNFNDQzNkExOEExNEEwNzRFOTg5MUNGMUExM0M2QkEwNTk1MTk3ODE2OEQzMUMxMDM1QjU3MjdGRUQ1RDA5M0EyRTY1OUM0NTE5QkI4Mjk5MDEzQTRDN0YyNTlDCis2QTRCRTc4QworMDc3NjU2M0QyMEE1OTk3QjQ4M0U3NkVGRjAyMgorM0RCOUFDQTY4QUVDNURGRDUyQjc4NEVCQjBGRkYyODlDQ0I4QjhCQzBDOTU0NjI5REQwMjA3QjlBMzFBOTk4RDZFMTlENjIwQjE1ODNCNDY4QTlGODY1MUI0NzZDNkRCREIwQ0ZEMTA2NDE4QzFGQzE2MTY0NDI4QTc1MjQ5NEY5RkVDMTE2MjQ0OUUzQzA3OTAxMjNDMzYyMEVCNkRFMzM3QkE4QkQwMDdBNDgxMzhEMjA3Q0E2NjIwNkU2RDczNzdGM0Y3MEY4MjY3Q0FENUUxOUFFMjQwRjQ1MUNBMkFFQjYzNjEKK0RBMThEMkQyCis5RDc3NUM3RTc5RUE1NDJBQkM2MDJDM0I1RTE2CitGREFDQjlBNzVFMDExRDdCRUNCMDk4RjZFQjhGQ0UwOUQ0Q0VERkU3MDBGQ0IxRUVCREY0RkUzQjk5QzA0NTlCNzUxODA2RTY4RUU4OTMwMjExNjM3OTE1MzJFRjZBMkVGMzk0NkU0QkEzMEU4OUUxQkE2MEFEMjQxQ0ZFMjQ3MjNDMzczNDZFREI5Rjc4RkUxNTc5RTg2OUY3NUU1MjhBRDkxRDkxNUZENTJDQzI0QTMzMkU3RTM1MTY2MjVFNEJERUM4MjIyMjAzQ0UyNzdENTlGOTVDMzI5OTEzNTRBOThGNjlCNTAzNTIwODVFMkM2MzkzNDk2QTIxMTAKKzk1MzUKKzRBCitFMzM0RjQ1QQorNjNBQTlFRUIyRTg2RTg1RTM1Q0U1MkNCNjU4MworRkE0QzZGNjQxQTA5MjNDOTI1QjIwRTk5MTEyQUY5RDc4OUY3RTlBQUNBNTM0MEU1QTdBQkUyRDA3Qjg2RTJFODVDMkYyMDk2RDc1NzI3QjYyQjI5QzNBNjk2MTk2NjMyOTEwODg2QUNFRDg4N0EzMTg3Njc2MUZFODk1RDNDMDAxMjlBOTQwRUQ5QUE3NDg3MDlEQkMwQjYzQzlDRTdEOUMzMEEyMEIxNkMxNTFEN0QxNUQ2ODhGODdEREU0RkM5NzEzOEY2NDJGRTU2MzIyNURFNEY1MDU1QjNBMEM3CitFOUE4NDEyRgorNDY0MzI3MTVGQzc4NUJBMTkxN0ZEMjU3MTEKKzBBQjYzRkZFODVEM0RBMzRFNjI3QzAxQjUyQjA3OTlENDg2NDkyRUY5MEVCREVCQ0MyRURDNEVFQTkyNzI5NzQwMkZFNzFEQkREQTY0N0NEMzFBRkU0MTcxNkIxMTFFNDgyMkMxMTU2QzI4NzdEN0ZGQkVFNzdFNDUzMUFGOTNDREI5RTVBOUFFMTZCRUNCOEEzRDA5RkIwM0MyMjMyM0I5RUZCRDNCMTE5ODFFNjI5OTVDNDBBRTcKK0U2REVERTcyCis0Q0MzQzg2QjZDRUI3N0Y2Qzc2Q0Y2MzE5QUM1CiszNEQyNTc5OEMxQUNERDE0NkU2MUE3QTk4MTcyMTgyQ0JGRTU4QTREODUzNEIzOEFGMDBDN0I0MDM2MjVFQzAxQUEyMTBDOTI3ODdGNEVDMjc4MEJFNUMzRjAxMzA3RkEzMEVEMjAyMEFCNzhBMjc5Q0M0QzMzNjYwRUJFMDI4MjkzNDNGQjczOEE4RkM2NDM0OTJCQkJCQjJDODk5NDk4M0VCQUUwMzUxRkQzMjg2MTAwNDgyNDJEM0IxQTZFN0ZBRTM3OTdBMDI3QTEzNzQ0MDYzQgorRjFCMkEzNTMKKzJBMjAwQzIzMUY0RTBFQUIwNEExMTVBQzVENkIKKzVGOEI1QTE0QjE0Q0UzQTJGMjgxQ0I2MjdDOEZDQjgwMTJFMkE0MkEzQ0VBRUU1MzgzNTJERTA4MzkzOUZCRDM3MkVGOTc1QkIxNzNGODc1OTFFOUIwRDFEMjg1MzQxRDgzMTQ0OEZGRTFGRjFFMkRDRDM4MUEyRDgyRTAwQjI4MDMyMUFEMDIwNTVBRUUzOTdERjlENTQ4OTdEN0JFNkRGQ0U2NzM2MjFGMEIyREFBRTk3OEQxN0FEMzdCNUUyMEI1Njg2RTQ3MzEwRTRFOEVCQzNBNzYxNDMzNUQzMzU0NDE5NTU1MDEwQjEzREE0NDQ5QUEyQUZDMkEyMAorQjcyNAorMDlGOEU5CisxOUZDN0I5QgorNzYzOUQ5OTdCOTNDNkJDRjk3NjJBNkYwRTMKKzU4QkI5NkM4QjkxOEI5MUJBQzMxMUQ4RTI2MkEzNzhDQjIyMjE3N0NCQTZFRjFGMEUxMkY5MjI0MzZERjIwMEVGMjlEM0ZFRTBFQTUxNzUwMDEyQjQ4Mjk0ODcxNTg4OTVGNkNBOUY0QTlBRTNGRkY5N0EwN0IxNjREMzZFM0JDNUUxQjhFRjYzRkEwRDVBQkU4MTQ5NDAwMTZGRkNDNzBGNTcyCis2QjA5OUMxOAorQTNBOUE5RDMyRDUxQzAxRDQ2MDVFNzY4NkQKK0YwM0Y4MEIyODU4ODY2NEQ1OTYwMDY3NDgwOTJBOEUxMENCNzIyQzlGRUIwMDExRTg2QUYyNDQ2NzIwOERCM0Y5NDY1NDA0MEY0RTAyRDUzMkQ4QTYyMTREQ0FGNTBBOEFFMEUwQkNDOTdFMTk4NDM1MDVERjU1NzlBMDY2OTAyNjI1Qjc0RTUzNkUwQTMzOTEzOUI2OEZBNDcwQTUwQTkzMTM0REU2OUQ3Q0ZFQzRCNTAKK0NCMDNCRTI5Cis2M0NCNTdERjcxRUE2ODdBNDRDRUI1QzRCRAorQTVBMDkzRjQwNjYwNjk3QjZERjU3Q0VBRDYzQ0Q2NTI0RjBCNzNFNDYzQjAxMzcxMDk0RTg0N0Y3MkQ5MEUxRjUyQTI0RTM4QkIyOTNGQUZFNTREOUZCOUQwMUMwOTIzM0VBMUQzRjI2MkNDRDdFNzBGMTFGQzIzNjFDM0VFQUVCN0JCN0I1MkZFMjVENUExQjJGQjI2QkFDRDE5MTEzQjBGNkE2REJCOUJCMzRBNDg2N0U1NEI3MworQUIzNEUwQTAKK0EyMDg5QTczOTZFQTk1QzRDQ0MyNDFCM0IyMDYKKzVBMTU2MEIxNTY5ODQ5MDcxNTQ1RDJENzA1QjE2MTFGN0I2RDAxRTM5NDgxMkFFQUM3QTg5RTA0QzA2MjkyOUM3QkRERjBEODI0NDQxRjAzREVBODYyQzA1REQ5OUM0RDIzQUUxNURGNjQ2N0RBRDNDOEIxMjM1QkU5M0M0RTZEODlFMDIzQjgxOUZEODg0NUIxNTAyNTJBOTUwRDJGQzA5NkY3REZFQ0MxNTgwN0UzNEYzOThENTQzOTM3NEI4QzU3RDhCQkU0MEYwNkNGMzUwMzlEMUJENENBQUNBM0E0MDU0NzgyRTU3QUE5OEZBMEE1NzVCNzVFNkExMAorODlCRgorMkZFNkRDNkNEMTEyOEZCOUNDQTYwMzg1MzgyMTEwQTY0NzA1MjYxMEQyRjJBOEYxMTlBQkQyNDU4MEYwNzIwRjUzMkJFMUNEQTkxNjRFNDcyN0Q2QTU2MkU0NDNDNAorRUI1QjJFOTIKK0NDODUyMDNBN0NDMTlGOUJCQkUwQkUxNEE2MkYKKzlGNTgyM0I3OTNDMDQ3RTUwRTU2QjBFRDlENjI5NUQ4RTA5MTFBQTU4REM3MTEwQkExOTI3MUVCMzJBQjYyMzNGRTg2REVDNUQ2RkQwREJBNzYzREVBNDRBMUI2RUM0M0FGMjI0NjRDNDUzRkQyOUZERkFENTUyNDYxNUFDOEI2MzgzN0RGRkREMTAxQzQzRTIwRkM5NzI5RjkyNjQyMDAyODI4MzQzMTU0NzM1REJGRDI4RkVBMDJFNTE0N0U2QkU5ODc3RTZENTIwQTQ3RTc2NEFCNDM1QTEzCisxM0U4QUQ4NworRERDODVFNzkxOUFEMUMzMDU5NkQxREVBNjMKKzE5NjdENjYzRjlFQ0RDOEE5NzY0NjZCRUMzRDYwRTdGQUMxRTJGNThDMEM1NDUzMkZEOUI4NjQyRDA2MThBNjJGRkVFQjAyRjkxMjcyMEMyRjcwOERCMDY3NjAxRkFFMDk3QzZFMzg2MUVDNDJGMUY5MzJGM0VGNjZCNjAyMUU3MzkzMEM4RjcyODc4REVCNDU3MDNBOTM4NTFERTQ4MzUKK0Q5RjEzREFECis5MDM4Qjc4Q0MxOENGODNCRjY0NDQzNkQzQjZECitCNkVEMjEyRTA5M0IzNTdDMzU1NzFFNDc5RDlGRDRGRUVCMTEzOTZFRjYyMUUzQjlCMjcwNEE5MDFBRTUxQ0QyMzBERDM0MTQwMUI1NkQxQjZEOTI2QjUxMEY2NTQ5QkYwQUYzQjhDMjNFRjUwRUMxMzcxOUVFMjM0REVGQkM0MTgyMzQzRTRGMkQ5NzBFMEJBNkJGOTY5QTZCQkM0REI4Q0E1RkMxMjkwRTEzRDhBODkwOTM3RDI3QkVFODgxRUUxQUY1RDMzOTU2NDdGRDRDNkUyRDhGMzY2MUE3MERCQUM3MEIxMjlGQTE3OUFDMEM3OUE0NDk1RjgzNUQKKzAyNTMKKzhGMTY2QUQ1QjFBMzZEMkYzNDIwQkE1MUFCNzBEOEMwMjA5QzlGMkM0RkMxN0NENzQ1MThENTlDNEY2ODA4MjU0OURDODAKKzVBRjFEQjMxCisyNTMwRUE3MTRGNTQ2MENDQzI1OTgwNTZFRkRFCis4NzU3QkQ0MDQxQzJBMDI0RTAxMkEzNUM0NEQ4NTFGRkExMDg3MjJFREY0QjMyQzFBRTYyQjY1NjE5QzMxRjkxRDc4QzcyRDg3MDJDMDQ3NkQwMTMwNDk5NDIyOTdBQTQxNzExMDA1REQ3MjZDRjEzMEQ2Njg3OTQyMkQ0QzBENEUyRjAzNDRDQzBEQTYwNkNDMEFFNzk0MTUwQ0FGOTNERUI5Q0YxQzk4QjRCN0ZDNkE3Nzc5QTNBMTFBMjRDOTlDREFGRTVGMUQ3Q0ZBMkVGNTk2MTg5REZBRUZCQUVBMjNCQTI1RjFDQzQ0RTBFM0Y5RDYzNTI3RDRCOTYKK0JBQTEKKzZFMUUxQTA3QUU0QzUzQzIxREFEMkQ5NDIxMzkyMTREQjgzRTk5QjEyQzQxQ0I3Nzg4M0Q0QTM4QzZGRkIxCitGMEY2RjA1OQorNEQwREUyMjQ4RTlCMDYwMzQ3QTIyRTA4NzlDNQorODUxNkFDMTQ1OTU0NzdFMDgyQURCNzY5MzkwMkM5NDU0NDlFRjVERTIwREI1MjFEMDE4MDNGMUY1QkEwREUyQUEzNENDMTNENUE2NDg3MEJCRDA2MUMyODFCRUExMDYzNDI3Qzg3ODUwMEZGRTBGQkVGRkE2MTg1NUVENUQ0MDA4MThCMTkwNUU1Qjk5NEVFRkNDQjRBRjdDRjY5ODk4MDExRDdGNEIwRDM5NzBFMDNCNzlEQkQ2MkE0MDQ5RjBBRENFMjFCQzhBMzhDN0RFN0MwNUIwMTdBCitGOUJCMjhGOAorQjU5NDI3NDQ3MTUxQjQ1QjkyRURCODU5QTkKK0Y5QTI1N0EzQzZDMjI1QUQzMzREN0RGN0IzQjE0Nzg4MjFDNzNBRjhFRjg2OURFNzgxQzRFRkVERTMzOUY0OUFFNUIwNUM4MEQwMjQyOEMxMjdENTExRjQ1QTVDNTE0NkE0MjA3MjhCMTk0RDA5N0FBNzc2MTBFQzdBQTc2MDU2QkE2NDIyRDM5QjhCCitFMEUxODg4MworNTE5NDIxQjNEN0IwNDUxMDY5REZDMTQ0NzIzRgorNTQwMzQ1M0UwNTE3NUY3QjE2MTkxRDdFNDVFQzlGMjRCMThERUQ1OTIwRTZBMkZEN0I3RUU5RUU5OTQ4Mzg0REY1NzEyMTMzN0U5Qjc1RkJBQjYxQjhCNjY4Nzk3ODI5QzE4QkZGNUM5MzlGRjVFMTM5MzM1MjRENThBMkVBNDAxOUMxRjI1Qzg5NTdGQkRGNkE5OTRDQkRCQzcwQzBEMzg4OURDNDRCMTNFQjhFMEI5NTM3REVBNTkwNUY2NTY1QjNCRTU2QzQzREJGOEMyRjQ0Q0NFRUU4NENFRjMyRjY4QzJFRTE0QkRFNDYwMAorQkZCMjkzNjAKKzU0MTUzNDE5RDBBRUY4M0VDMDUwMzUzODMyCiswMUNERTQzRUQ3MzczRkIzQzQxREM3MkY0QkMwRkZCOEQ3QkNGNDg5MEQwMzJDRkMyNTA2RkU0RDc2RENFNEE4REUwNURFQjRDOTk2RjRGMkUxQUU3RjE3NTQwMkIxMkIzQUZDRkZCREZBODA4NTEwRkU2MEVFQUMyNTlBQjhDNzEwMTIxQzc2NzIwQjc2RDZFRUI0OUUyQTE1N0ZFMEU4RDZGQkYyMUI3MzcxMTMKKzNGNzc0RDEwCiswMUI4QTZBQzNCNjQ0QjM1MzM2QTQ4NUMyNTc2Cis5MTI4MTQ1NEZBM0EwQzE2M0FCNzJENUFBNzg4ODMyRTI0RUY2OTIyOEJEN0U2RTBDODhEREU3MDFCNjY3RjE4RjJCMzlFQUFCNUM4NEE5RUJBNzIxNDM1N0Q2QkI0OEM4RTA2MkUxMzJFMUREMUFFMTc3MkFEQTQ2NzFFNDlFODRCMzRENjQwMjU2MkJEQjE4NjhCMzNBNTFFOERGQTk3NjQ4MTc2QjQyNUExNDZEQkY0QUIxMUYxNDhBMjM4MUQ2NDgzMzcxRkVDMkE0NUQxMUNBRUMzNEM1OUVGQ0VCNTUxNDlCM0NGOERGNjgwMjQ5MjhFQzNBNgorNEU5OUZBQjMKKzhFNTM0ODMxREVEODAyRDdBODQzQUJDQUNFCitGRjhGODM3MDI4M0JCN0MzNkI4NTgzRjI0NjY4NzIxQkMzMTExNkQ4M0NGRDBCRjlDQkU2NUZDQThGQjVENTVDOTQ4NTFGNzFCRTdCRkE4RkMxRjE4NjkwRDVBNUZGM0Q4REJFNTNEOTA3MjIzOEQwMERGMDgwMUM0M0NEQUIxREY3QkM4RjVBNzUKKzNFODk0M0Y5CitCOUNEMDg4ODExNjYzMkM1OUQzNTQ2QkU0NQorNUQwN0U5ODQxMzM4MzM1REExMjMyRDEwMEMzMEMyOUQ3OTA5RThDMjg1MTQ4N0Q1RDkwM0Y4RTkyMThCOTNBRTcwNkMzNUE4M0JDRUM3REM1QkFBQjJFNjNFM0JGQjUwQ0ZGQkIyMzEyMTQ0MjhFRkU0ODBFRTgwNkEwNjE4MUFGQURFRTBCNDhFOUM1MUFBMEZDRURCNTJDQkREQzYzQzRCMzc2QTMxNUU0MUUwMzE2NDk3MkUwRTU0NjJGQjRFQjBBQgorMUI0NDM2NkUKKzEzRkIwRTNFMkE1NzA1OTkxMjFEMTlDQTAzRUIKK0UyRjFFRUU1RTNENkE5NTlGQkZGNTM3REE2N0Y4RTFEOTQ3MDVBNzc0OTg1MTVDMjYwOUM4QUZBRkQzOEQ0M0VBQTVGRUJEOUY2NzU1ODlENzkzOUQ4OTRCNTZCRkRGQzVCNjMzOUY1RjEyOTU0RDQxN0QwN0REMkNCM0M1MDIwNjUwMEY3RkU5MEJBN0I0MzFDQTExOEY0NzI5RjE0MDVCNDY4ODc1QTVGODRFOTdDM0YwQzBCOTdFRTExMkVDOEY0REFCN0YwNjQ4OUYxMjUzMDk0MTFDQTBFNzZCQjM2NERBMzlEQjFDQjczMzE2RkIwMDFBRDQ5NDkzNgorRUY5MgorNjI1NTBCNkYxQjlEMzU2QzNFRDFBOERCQzI4RgorQjFCM0QyMUMKK0YzRDk1QkUxNDI4NzY0NEQyNjJFMEMxMzhDNTQKKzAxMkM2RTAwQ0NDNDYxM0MKK0RCMTZEN0EwCisxQUVFM0FBRDNBRUI2RkE0Q0E0N0E1MDc5QkI2MkY0OEE2RDIwNTVDOTZCNEJDMjI2NkQ5OUU1MTRDNTdBRDgwRkU1NworMkIyNjAxNTQ2MURERTRFMjk1NjkwMEU0ODI2MTI0MEFCNDMxM0EyNEUzNzAwOEUwN0E4QkI5OTI3RjM0MzBENjY4NjRENDUzQ0Y3MAorNzk1QjY1RkZFRDIzODU5NjM5OTU0NzRFOTU2QTI4RURGNjE1NTYxMTU2MzE1QzNCRDcxMDI2CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ2IHB1dAorZHVwIDMgL0MwMDQ4IHB1dAorZHVwIDQgL0MwMDc2IHB1dAorZHVwIDUgL0MwMDgzIHB1dAorZHVwIDYgL0MwMDg0IHB1dAorZHVwIDcgL0MwMDk3IHB1dAorZHVwIDggL0MwMDk5IHB1dAorZHVwIDkgL0MwMTAxIHB1dAorZHVwIDEwIC9DMDEwMiBwdXQKK2R1cCAxMSAvQzAxMDMgcHV0CitkdXAgMTIgL0MwMTA0IHB1dAorZHVwIDEzIC9DMDEwNSBwdXQKK2R1cCAxNCAvQzAxMDggcHV0CitkdXAgMTUgL0MwMTEwIHB1dAorZHVwIDE2IC9DMDExMSBwdXQKK2R1cCAxNyAvQzAxMTYgcHV0CitkdXAgMTggL0MwMTE3IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzAgLTIwOSA2MzYgNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjVEOUE0MzI3REEzOUNCMkRGRDc0ODhEQzMwQTgzQkQ2NTM2Cis1NDAwMTUxREFDMTA0MjY2QkU0RUJDQUUKKzRCMDgzMjEwMTZFMjhBQjRDOAorRDU2NEREMzcKKzM1NTA1RDg0MTE0Njk3NkVERkI0QkQ3MjlBCisyRjQ5RENDRDZCNEVDRTFEQUMzMkVBNTY3OTYxM0I3ODk0RUU2MUM3MjA1MEI2RENBMDgzMzQwMDBDNEExNgorNjgwQTM3ODEKKzI4MzJFRjI5OTJCMTEwNEVFMzZBMkJFQzA2Cis5MTg3RjU0REJCRDE0Q0I0OEZCRTgxOTUyMEVBOUUwNTdBRkExNTlENjIyRDc0QzVDNENCNEM0RTJGNzBENDhDMjhDNThBQzI1OUU0MUYzNkQ2QTE5M0YxRjEwMTM3RjhGNTY0MkUwREEzMjBFOTNFMUEwNzc0Q0Y5QTA2QTE1QThFNEEyQjM4MTYzQ0Q0MTBDOTk3RjEzMTIyOUY2QQorRDMzMkZCNkIKKzJGQkY0NTY0NTlCNjA4NjNCQThDMUY5MEZGCiszMEJEQzk3MUFFN0VCRDYyNzYxQjAyMzg0MEQ2OTFEOEIwOUExRjEwQzJCQjJBNjJFMEUwQTk4NjgwRjcwQUExOUMyRTFBNUQ2NDdGN0U5MDA2MkU5RERDQ0M1MThCNDdFREE5OUJFMzNBNkYwNjBBMDY1Q0JCREZCQ0REQzU0MzhCNDEwRDY5NzNDRDkzNkI0OQorQ0U1MTFCMEQKKzY1QzYxQkJCOEFGOEFBMEZGOUI3Rjc2REJGQjUKKzc4M0RCM0MwMzY0OUNBMDlDQjU5Mzk0Q0JFOEI5MjcwNkJENEE5MkY0N0JCQ0RDMDkwRDVGQzQzQkVDMEJBMkQzQjlERTY4QkFFNTBFMkM2RjI3NTRCQTdEMzc3MUMxMEI3RTVGREYyNkY1MjhCOTBGODFDQ0JCMkRDNDA0MjEzMEE4MkQ2NDdGMEYwMDg5REIyNTE2MUVGOUE2OTEyMjRCNDY5RUU3MjYyRDJEMTM4OTA5QkY1RDU1M0FCOTJGODNBMzg4RjA5MjEyRkY4RjZGNzI3NEIyNTRFOTdCQjREODBERjU1NDYwQ0I5OThCQzhEMDI2NEE5RjAxNworQjg5MgorOTk1RDgxOTEKKzkzMTc0MjQ3M0VCQ0M1OTlFNTA2QzY3NkRFCis3Q0IxQURDNzFBRTc1NjNBMkQ1QjlFOUI5QkU4NkU5MDI4MzJEQzQ2RTYyNzkwRTBDRDBBMDkwMzBCQzY2NjNEMkFEQ0Y5ODI1QTk2MkI5MTEzNDU1MzQ1QUExMEUyODBGRkM3RTNDMjBFQzMzQzM3OTQ5RDI2ODUwMTJBQjk3RkIxOUUxNjQ4REMxNzE0REY0OQorNEM4QUYzNUIKKzRDOEQ1MTU0MEVENzZFRDUwRjk2QjA5RkVGMUUKKzg4MDFCMjlCNjc0Rjk1NTFBOUI5MzAyOEIwRjY2Qjk1OEY5MzQ3MURCQTAzMUZFMDA0MjFDODQzRUU0NDcxRUQ4QUUzODM2QjEwMTI4NDREMDYzRkRGQjZDRDZGQzA0OTFCMUE1MzY5RDQ1OTBEMTc3Q0ZGREREQzI1QTMxREM2Qzc1MzM3RDg5QjBFQjA4OTdBNEMwNEZGMkM2NjEzQUU2NzMzRUY5Q0Q2QkQyQTY5RTBGQzZGRjAxREY3Rjc3MzMyOEI0N0ZFNDVENkNFRTAyMTA1Q0E4NUU5RDdBNDBCNTJFMzNCQzU4QTkyMDU1MEM0NDVGRkJDQjU2OAorRTZGOAorNkU4NzZFMUYKKzQ4QTI2Q0NGCitBNDQ1QjYxN0Y2QTQ3NUVERTUwNDBFNDI5QgorNTkwMDBCQTBCMTBEOTk3M0YwNkZDQUE0NTRBNjhGRDA0QjMzRDlFQjk1OUYxMjA0Njg3NzRENkUwQ0RGNTkzQjFGQkRENzY4QjU4NUYyQTZBMkJBQUM2QTM4Rjc4NTM4NjU4RTA1OTVFNTRDRTREMUE2N0JGOTBGN0U5QTAwMTkyNjBGODFGQzg5OTI2RUM0OEEwQTVEMDExN0FGN0ZEMTA1MDEKKzkxMzUzNTE5CitGOEE2NDdCMzM0QjhEQTFGNDI1REIzQjkxNAorQTBDNzc0M0JGNTc2QTZFRDhBREQ3OUE0NzdFRURBMUU1MDBERUI1NkQ2NkM1ODE1MDNDQzY5MEE0NTREQ0ZGRUM0NDExOTU0OTM2MkY0NkZGMDQyMzE0MjZFMjg3RkM0NDNFQUFENThENjYyRDIyQ0E1MTBCRjg0RDQ5MDkyN0M2OTE0QjNGQkQxMkIwMUM0NTY1NzREQzM3QkZDREQ1RTdGNjFEN0I0QjlGNUZDMUNFNzY2NTcxNgorMjY4RDQwNUYKK0M2QUM3NjlFQUI5QkY4NUI1RDM3RDk5M0NDCitDMjk5MkU0NDlFMTE2Q0IxMzg4QUE3MzI4MEZFNEExQ0MwNTdBNTk3NDVEMkY5OTUzRTIwMDY2OTU3MzFFNTBBMjUyNDFCOEY5RTlDREQyRkE0MEZDRTdFQjFDODVBRDc2NDdCMkE2NEMyNTJFRDlFOUQ1NzAwQzNGRTIyRUJDQUMzOEJCRTk4Q0IxQjZBMjBFMkY0OUZENUVCMTZBRjNCNjlBNkI0OTdGM0E3NDk5OTEzOTExQTcxQjgKKzJEQTE1RjdFCis5QjFDODk2MjkyNEJCRjBFOTcxMkVEOTI1QzU1CitFNEIwREYwRUYwQjZCOUFBMURGMTYwODQ3NkE4RDg4RjQ3QzU4NkFGQTNFRkM2OTBCNzhBQ0E5RkU4QjlFOTE0RUM4RDVFRDc5NTAzNzFEQjM3NTJGODY0MDJFRDUyRTUwMzQ0ODIyNDBBQkM2QTZCMjQ2NDBCODZDRTU2MzI3QjNFNkJFQ0M1QkM0MDgyOTVGOTMwRjNCN0NEODFEQkNCRjcwQTAwNjE1RDE1QjUwOEIwMzdGMERGQUExREM5OTVCMjk0M0NBRTc4MEI1RTEyODQ4MkEzMkFEMzY1MEIyNjM2NzhDRkQ3NzRBNDZBOEE4MTVEOUVFOEQyRkYKKzU1OTIKKzlBNjVBNDg3RENDNTQ2OTgyNDUzMTgyNDdDMkY2MkIzOTY5RkJCNDU5NDBCNEUyNDY2Njk3OUFGNDFBRTRERkY4NkE5QjU3QkMxCitERjZGOTZCMworRDU2Q0U5NUMxOEQ2MkNERTdDREI2RDc2MzI5NAorN0M0QUIzQUY4Q0Y4N0FGNEM5MDFDNzEyRjZBQ0Q5Q0Y1MTk1OEVFNzA4MERDNTdBRTAyNzM1NUFERDE2ODBFNEIwMEVERTMyMDc2RTQ4RjNGNTEwMUIwNThBNDI1MjREN0E1RTNGQ0JEMzlCQ0I2QURDQjc0RjRGMUNEM0JBNjE4RUU2MDYxMUM0RkEyMjBCREQ1MjIyN0YyRTk3M0U4MEIzMUFCNUYxQUEyNzVDNEVBMTA3OEZBM0Y4RDlENTY1MThGMzA2QTQ1NUU2RUFCRQorNkNGQUQxRUEKKzNFRDMxMTBCMEY2NThEQ0YyQjBGQjE3NThCCitBQzY3RTE0Mjk5Q0VFMEQ2RDQ1QjNBMTdGM0VDM0UyMTZCQUM3N0MyNEIyQzI1N0JCREVFRjA2QTkwODFDODc0QTFDNjlBRkRGRDQ2MERBMjU5M0M2QjQ5QUIzMDE5QjY2RjA2RDg3ODVCMkIxRDVGMEJCRkEzM0U4QjJGRkQ2ODQxQjg0NkQxQUQ3QUNGMjY1ODU2RDc5RDVBRjQKKzFERkQ0RkMzCis3NTQ2QzY5QzdGRUY0MEY3NjQwMDI4MzE3QworNkZGRTNBMkQxRUE0QjExMDBEQkU5MjU1OTg4NTM1RkFDRjIwQzFEQzdBNjZCODkwQUJEMkU0QTVCNjY5RjlDNTRDODk2OEQ3NzMyNkVCNDI0QTQ0MUIxNDQwNUY5NkY2NkNDRTlCMzAKKzQ2NzFGMzcxCitBRDlEMzc3RjdBMTg1QTQ1RDJBRjYwNUQ1RDg2CitDQzA2RTgwMjMwMjlDRkY5RDM4MUFFOTUzQjNGRTY0REU4RTMwNEVDNEJFRUVEQzNFREE2RjIzNjk5NUY2Q0RBNTFBQjk2OTJCNTM1M0ZGMTI0RjdFRjZFNUNFMTQ5MkMzMjU5OTk2OTg5MERDRTQ2NEEyNkY5NUFBOEFBOUFBNTFFMTEzMTVGMUYyQTU4OTE1QzAyRTkyMDQ2M0MxRTQzNENCMjNGQUFCNDEzOUIyNTFBMjFDQTFENzVGRTk1NENGQUY3MkFBMEVGMUI3QQorREQzMEYyQzcKKzdFRTUwNjBDN0M2MkYzMjJFNEZDRDI3OEMxCitDQkIyRDg3QjUxQTMyMjA1Q0NFNkUwRUI1RDUwRTZERTk5NzhCRTk4Mzc1MzYxQTdBN0JFMkJCODk2OEE2Mjc0NTA2NzA3NERFNEU1RDJGNjg5MERFQUQ4QTExODlCNUM4QUE1RjE2QTNERjFGMTBFM0E0MzE2MzFGODc2MTFBOTBBRTNGMjY5MEI3NgorRkZFNTdFNzUKKzRERUNCNjgxMEVDRDBDMEM1NEFBNDlEMzE2CiswNTVGMTJDODM4QzQ4NjkyRERENkNBODkwRUIxRTVBMTEzRDA1NTY2REEzNTI1NjY3QUM4MjEyNzRDNEYwRDI4NDk2MDI1QTlCMjk4OTk5RjFFMzUxODRGOTg3NUVGMzZCMTIxNzUxNDMxQTc2QzY0Njk3MjY5QTFFMUUxNzdBMURCNzhEOTFBCis0N0I5QUFCMgorQjgxMzMzNkYxMDlENkE1MUM2NDk1OTg1NzgKK0NDMUM0MzdFMTYxOTdENEI2M0E4RjEzREQ5MEVCNjQwM0I1Qzc4REYxOUNEM0Y3RTM2MDZDODA5NTU3RTA1Q0YzRjQ3QTA1MDAxMkExNEExODE0ODdCREVENkQzMDNGQUM2MjgwRUZBMjFBNEFDNTcwMzI5QjIzNDE2NTcwQjgyRUM5RkJGMUZCOEY3MjlEN0U2NENEQjlBMzU4OTdFNTU5NjREREREMTU0QzhFMjAyQUVGNUM4CitFRjE5MTQ2QworRkRDQTVBNzU3NUM0MEQ4MDgxQ0RDNDQwM0M3MQorQTM2RkVFQ0IzMjVDMEU1NworRjQxRDQxRjgKK0FGMTBCRDI4QjE3RkY5NkJBQjEwODJEMEY1RDk5QkZENTE3Njc0QjIzMTYwQjc3OENGQjYyNENBNzZFRTU3RjFBMkI2CisyRTE1RTJCQ0RCQTJDNzcxNjVGMDA3NDAyMTY2RUE1Q0I3ODRGMUMxRUE1QkZBREVDNTdERTZFQjc5OEZCODg5REI4NzU4NTQ2Nzc0CisyODlFMDUzQTdCRDM4OEQyNzBERkJBNDg1OTkzQTE3MkFGMTgzNjRDREJDODY2MDRGQjVBRTQKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTRiIDE0LjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IENvdXJpZXIKKy93c3Q6Y291cnBzMTAgMTAuMDAgL0NvdXJpZXIgL3dzdDpjb3VycHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MDcwYjE3MTQwYjE1MGMwMzAxMDQwMTA1MGIxMjBhMGUxMTA5MTUxMDAxMGMxMzE1MDEwNjBiMDkxNjE4MTUwZjEyMGQwMTA3MGIxNzE5MTMxNTEwMDEwOD4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwwYjE1MGMxMzE1MTEwOTEyMGEwYj4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MDI+IDk0MzQgMTMzMDAgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2EyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTMyMiAxMzI4MCA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjgwIDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI4MCAzIDcxMzMgMzIgcword3N0OmR1dGNoMTRiIFNGCis8MDUwOTA4MTEwZDEwMGY+IDEyNzEgMTQ1OCAwIDIwNTUgLTEgcworPDAwMDMwMjAwMDYwYzA5MDAwNDA5MGIwNzBlMDAwNTExMTIwYTBhPiAyMDU1IDE0NTggNCA0MDA3IDAgcword3N0OmNvdXJwczEwIFNGCis8MjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDQzNmY3MDc5NzI2OTY3Njg3NDIwMjg0MzI5MjAzMTM5MzkzMzJjMzEzOTM5MzQyYzMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiAxMjcxIDIyNjMgMTggODI2NyAzMiBzCis8MjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjA0MTRjNGMyMDUyNDk0NzQ4NTQ1MzIwNTI0NTUzNDU1MjU2NDU0NDJlPiAxMjcxIDI0NjcgMjcgNjA0MSAzMiBzCis8MjAyMDU0Njg2NTIwNjU2ZTYzNmM2ZjczNjU2NDIwNzM2ZjY2NzQ3NzYxNzI2NTIwNjE2ZTY0MjA2NDZmNjM3NTZkNjU2ZTc0Njk2ZjZlMjA2OTZlNjM2Yzc1NjQ2NTczMjA2MzZmNzA3OTcyNjk2NzY4NzQ2NTY0MjA3NzZmNzI2YjczMjA2ZjY2PiAxMjcxIDI4NzUgMTAgODU4NSAzMiBzCis8MjAyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjJlMjA0NjZmNzIyMDYxNzMyMDZjNmY2ZTY3MjA2MTczMjA3OTZmNzUyMDYzNmY2ZDcwNmM3OTIwNzc2OTc0NjgyMDc0Njg2NTIwNjY2ZjZjNmM2Zjc3Njk2ZTY3PiAxMjcxIDMwODAgMTIgODI2NyAzMiBzCis8MjAyMDZjNjk2ZDY5NzQ2MTc0Njk2ZjZlNzMyYzIwNzk2Zjc1MjA2MTcyNjUyMDY4NjU3MjY1NjI3OTIwNjE3NTc0Njg2ZjcyNjk3YTY1NjQyMDc0NmYyMDI4NjkyOTIwNzU3MzY1MmMyMDcyNjU3MDcyNmY2NDc1NjM2NTJjMjA2MTZlNjQ+IDEyNzEgMzI4NCAxMSA4MzczIDMyIHMKKzwyMDIwNmQ2ZjY0Njk2Njc5MjA3NDY4NjUyMDczNmY2Njc0Nzc2MTcyNjUyMDYxNmU2NDIwNjQ2ZjYzNzU2ZDY1NmU3NDYxNzQ2OTZmNmUyYzIwNjE2ZTY0MjA3NDZmMjAyODY5NjkyOTIwNjQ2OTczNzQ3MjY5NjI3NTc0NjUyMDc0Njg2NT4gMTI3MSAzNDg4IDExIDgzNzMgMzIgcworPDIwMjA3MzZmNjY3NDc3NjE3MjY1MjA2MTZlNjQyMDY0NmY2Mzc1NmQ2NTZlNzQ2MTc0Njk2ZjZlMmMyMDY5NmU2MzZjNzU2NDY5NmU2NzIwNmQ2ZjY0Njk2NjY5NjM2MTc0Njk2ZjZlNzMyYzIwNjY2ZjcyPiAxMjcxIDM2OTIgNyA3NDE5IDMyIHMKKzwyMDIwNmU2ZjZlYjE2MzZmNmQ2ZDY1NzI2MzY5NjE2YzIwNzA3NTcyNzA2ZjczNjU3MzIwNmY2ZTZjNzkyZT4gMTI3MSAzODk2IDQgNDU1NyAzMiBzCis8MjAyMDMxMmUyMDIwNTQ2ODY1MjA2NTZlNjM2YzZmNzM2NTY0MjA3MzZmNjY3NDc3NjE3MjY1MjA2MTZlNjQyMDY0NmY2Mzc1NmQ2NTZlNzQ2MTc0Njk2ZjZlMjA2OTczMjA2ZDYxNjQ2NTIwNjE3NjYxNjk2YzYxNjI2YzY1MjA2MTc0MjA2ZTZmPiAxMjcxIDQzMDQgMTMgODU4NSAzMiBzCis8MjAyMDIwMjAyMDIwNjM2ODYxNzI2NzY1MjA2OTZlMjA2ZjcyNjQ2NTcyMjA3NDZmMjA2MTY0NzY2MTZlNjM2NTIwNzQ2ODY1MjA2NzY1NmU2NTcyNjE2YzIwNjQ2NTc2NjU2YzZmNzA2ZDY1NmU3NDIwNmY2Nj4gMTI3MSA0NTA4IDE0IDc1MjUgMzIgcworPDIwMjAyMDIwMjAyMDY4Njk2NzY4YjE3MDY1NzI2NjZmNzI2ZDYxNmU2MzY1MjA2ZTY1NzQ3NzZmNzI2YjY5NmU2NzIwNzA3MjZmNjQ3NTYzNzQ3MzJlPiAxMjcxIDQ3MTIgOCA1ODI5IDMyIHMKKzwyMDIwMzIyZTIwMjA1OTZmNzUyMDZkNjE3OTIwNmU2Zjc0MjA2NDY1NmM2NTc0NjUyMDYxNmU3OTIwNjM2ZjcwNzk3MjY5Njc2ODc0MjA2ZTZmNzQ2OTYzNjU3MzIwNjM2ZjZlNzQ2MTY5NmU2NTY0MjA2OTZlMjA3NDY4NjU+IDEyNzEgNTEyMCAxMyA3OTQ5IDMyIHMKKzwyMDIwMjAyMDIwMjA3MzZmNjY3NDc3NjE3MjY1MjA2ZjcyMjA2NDZmNjM3NTZkNjU2ZTc0NjE3NDY5NmY2ZTJlMjA0MTZjNmMyMDY4NjE3MjY0MjA2MzZmNzA2OTY1NzMyYzIwNjE2ZTY0MjA2MzZmNzA2OTY1NzMyMDY5NmU+IDEyNzEgNTMyNCAxNCA3OTQ5IDMyIHMKKzwyMDIwMjAyMDIwMjA3MzZmNzU3MjYzNjUyMDYzNmY2NDY1MjA2ZjcyMjA2ZjYyNmE2NTYzNzQyMDYzNmY2NDY1MjA2NjZmNzI2ZDJjMjA2ZjY2MjA3NDY4NjUyMDczNmY2Njc0Nzc2MTcyNjUyMDZmNzI+IDEyNzEgNTUyOCAxNSA3MzEzIDMyIHMKKzwyMDIwMjAyMDIwMjA2NDZmNjM3NTZkNjU2ZTc0NjE3NDY5NmY2ZTIwMjg2OTZlNjM2Yzc1NjQ2OTZlNjcyMDZkNmY2NDY5NjY2OTYzNjE3NDY5NmY2ZTczMjkyMDZkNzU3Mzc0MjA2MzZmNmU3NDYxNjk2ZTIwNjE3NDIwNmM2NTYxNzM3ND4gMTI3MSA1NzMyIDEyIDgzNzMgMzIgcworPDIwMjAyMDIwMjAyMDZmNmU2NTIwNmY2NjIwNzQ2ODY1MjA2MzZmNzA3OTcyNjk2NzY4NzQyMDZlNmY3NDY5NjM2NTczMmU+IDEyNzEgNTkzNyAxMCA0OTgxIDMyIHMKKzwyMDIwMzMyZTIwMjA1NDY4NjUyMDY1NmU2MzZjNmY3MzY1NjQyMDczNmY2Njc0Nzc2MTcyNjUyMDYxNmU2NDIwNjQ2ZjYzNzU2ZDY1NmU3NDYxNzQ2OTZmNmUyMDY4NjE3MzIwNmU2Zjc0MjA2MjY1NjU2ZTIwNzM3NTYyNmE2NTYzNzQ2NTY0PiAxMjcxIDYzNDUgMTIgODQ3OSAzMiBzCis8MjAyMDIwMjAyMDIwNzQ2ZjIwNzQ2NTczNzQ2OTZlNjcyMDYxNmU2NDIwNzE3NTYxNmM2OTc0NzkyMDYzNmY2ZTc0NzI2ZjZjMjA2MTZlNjQyMDY5NzMyMDZlNmY3NDIwNjEyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjJlPiAxMjcxIDY1NDkgMTYgODU4NSAzMiBzCis8MjAyMDIwMjAyMDIwNzA3MjZmNjQ3NTYzNzQyZTIwNDE3NDIwNjEyMDY2NzU3NDc1NzI2NTIwNzQ2OTZkNjUyYzIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmMmUyMDZkNjE3OTIwNmY3MjIwNmQ2MTc5MjA2ZTZmNzQ+IDEyNzEgNjc1MyAxNiA4MzczIDMyIHMKKzwyMDIwMjAyMDIwMjA2ZjY2NjY2NTcyMjA2MTIwNzY2NTcyNzM2OTZmNmUyMDZmNjYyMDc0Njg2NTIwNzM2ZjY2NzQ3NzYxNzI2NTIwNjE2ZTY0MjA2NDZmNjM3NTZkNjU2ZTc0NjE3NDY5NmY2ZTIwNjE3MzIwNjEyMDcwNzI2ZjY0NzU2Mzc0MmU+IDEyNzEgNjk1NyAxNiA4NTg1IDMyIHMKKzwyMDIwMzQyZTIwMjA1NDQ4NDUyMDUzNGY0NjU0NTc0MTUyNDUyMDQxNGU0NDIwNDQ0ZjQzNTU0ZDQ1NGU1NDQxNTQ0OTRmNGUyMDQ5NTMyMDUwNTI0ZjU2NDk0NDQ1NDQyMGJhNDE1MzIwNDk1M2JhMmU+IDEyNzEgNzM2NSAxMSA3MzEzIDMyIHMKKzwyMDIwMjAyMDIwMjA0ODQ1NTc0YzQ1NTQ1NGIxNTA0MTQzNGI0MTUyNDQyMDQzNGY0ZDUwNDE0ZTU5MjA0NDRmNDU1MzIwNGU0ZjU0MjA1NzQxNTI1MjQxNGU1NDIwNTQ0ODQxNTQyMDU0NDg0NTIwNTU1MzQ1MmM+IDEyNzEgNzU2OSAxMyA3NjMxIDMyIHMKKzwyMDIwMjAyMDIwMjA1MjQ1NTA1MjRmNDQ1NTQzNTQ0OTRmNGUyYzIwNGQ0ZjQ0NDk0NjQ5NDM0MTU0NDk0ZjRlMjA0ZjUyMjA0NDQ5NTM1NDUyNDk0MjU1NTQ0OTRmNGUyMDRmNDYyMDU0NDg0NTIwNTM0ZjQ2NTQ1NzQxNTI0NTIwNGY1Mj4gMTI3MSA3NzczIDEzIDgzNzMgMzIgcworPDIwMjAyMDIwMjAyMDQ0NGY0MzU1NGQ0NTRlNTQ0MTU0NDk0ZjRlMjA1NzQ5NGM0YzIwNGU0ZjU0MjA0OTRlNDY1MjQ5NGU0NzQ1MjA0MTIwNTQ0ODQ5NTI0NDIwNTA0MTUyNTQ1OTI3NTMyMDQ5NGU1NDQ1NGM0YzQ1NDM1NDU1NDE0Yz4gMTI3MSA3OTc3IDEzIDgyNjcgMzIgcworPDIwMjAyMDIwMjAyMDUwNTI0ZjUwNDU1MjU0NTkyMDUyNDk0NzQ4NTQ1MzJlMjA0ODUwMjA0NDRmNDU1MzIwNGU0ZjU0MjA1NzQxNTI1MjQxNGU1NDIwNTQ0ODQxNTQyMDU0NDg0NTIwNTM0ZjQ2NTQ1NzQxNTI0NTIwNGY1Mj4gMTI3MSA4MTgxIDE1IDc5NDkgMzIgcworPDIwMjAyMDIwMjAyMDQ0NGY0MzU1NGQ0NTRlNTQ0MTU0NDk0ZjRlMjA0OTUzMjA0NTUyNTI0ZjUyMjA0NjUyNDU0NTJlMjA0ODUwMjA0NDQ5NTM0MzRjNDE0OTRkNTMyMDQxNGM0YzIwNTc0MTUyNTI0MTRlNTQ0OTQ1NTMyYz4gMTI3MSA4Mzg1IDEzIDc5NDkgMzIgcworPDIwMjAyMDIwMjAyMDQ1NTg1MDUyNDU1MzUzMjA0MTRlNDQyMDQ5NGQ1MDRjNDk0NTQ0MmMyMDU3NDk1NDQ4MjA1MjQ1NDc0MTUyNDQyMDU0NGYyMDU0NDg0NTIwNTM0ZjQ2NTQ1NzQxNTI0NTIwNDE0ZTQ0MjA1NDQ4NDU+IDEyNzEgODU4OSAxNSA3ODQzIDMyIHMKKzwyMDIwMjAyMDIwMjA0NDRmNDM1NTRkNDU0ZTU0NDE1NDQ5NGY0ZTJlMjA0ODUwMjA1MzUwNDU0MzQ5NDY0OTQzNDE0YzRjNTkyMDQ0NDk1MzQzNGM0MTQ5NGQ1MzIwNDE0YzRjMjA1NzQxNTI1MjQxNGU1NDQ5NDU1MzIwNGY0Nj4gMTI3MSA4NzkzIDEyIDgwNTUgMzIgcworPDIwMjAyMDIwMjAyMDRkNDU1MjQzNDg0MTRlNTQ0MTQyNDk0YzQ5NTQ1OTIwNDE0ZTQ0MjA0NjQ5NTQ0ZTQ1NTM1MzIwNDY0ZjUyMjA0MTIwNTA0MTUyNTQ0OTQzNTU0YzQxNTIyMDUwNTU1MjUwNGY1MzQ1MmU+IDEyNzEgODk5OCAxMiA3NTI1IDMyIHMKKzwyMDIwMzUyZTIwMjA0ODQ1NTc0YzQ1NTQ1NGIxNTA0MTQzNGI0MTUyNDQyMDQzNGY0ZDUwNDE0ZTU5MjA1NzQ5NGM0YzIwNGU0ZjU0MjA0OTRlMjA0MTRlNTkyMDQ1NTY0NTRlNTQyMDQyNDUyMDRjNDk0MTQyNGM0NTIwNDY0ZjUyMjA0MTRlNTk+IDEyNzEgOTQwNiAxNCA4NTg1IDMyIHMKKzwyMDIwMjAyMDIwMjA0NDQ5NTI0NTQzNTQyYzIwNDk0ZTQ0NDk1MjQ1NDM1NDJjMjA1MzUwNDU0MzQ5NDE0YzJjMjA0OTRlNDM0OTQ0NDU0ZTU0NDE0YzIwNGY1MjIwNDM0ZjRlNTM0NTUxNTU0NTRlNTQ0OTQxNGMyMDQ0NDE0ZDQxNDc0NTUzPiAxMjcxIDk2MTAgMTIgODQ3OSAzMiBzCis8MjAyMDIwMjAyMDIwMjg0OTRlNDM0YzU1NDQ0OTRlNDcyMDRjNGY1MzU0MjA1MDUyNGY0NjQ5NTQ1MzI5MjA1MjQ1NGM0MTU0NDU0NDIwNTQ0ZjIwNDE0ZTU5MjA1NTUzNDUyYzIwNTI0NTUwNTI0ZjQ0NTU0MzU0NDk0ZjRlMmM+IDEyNzEgOTgxNCAxMyA4MDU1IDMyIHMKKzwyMDIwMjAyMDIwMjA0ZDRmNDQ0OTQ2NDk0MzQxNTQ0OTRmNGUyYzIwNGY1MjIwNDQ0OTUzNTQ1MjQ5NDI1NTU0NDk0ZjRlMjA0ZjQ2MjA1NDQ4NDUyMDUzNGY0NjU0NTc0MTUyNDUyMDRmNTIyMDQ0NGY0MzU1NGQ0NTRlNTQ0MTU0NDk0ZjRlMmU+IDEyNzEgMTAwMTggMTMgODU4NSAzMiBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgQ291cmllcgorJSUrIGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMykgMworJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM0IHB1dAorZHVwIDMgL0MwMDM5IHB1dAorZHVwIDQgL0MwMDQwIHB1dAorZHVwIDUgL0MwMDQxIHB1dAorZHVwIDYgL0MwMDQ0IHB1dAorZHVwIDcgL0MwMDQ1IHB1dAorZHVwIDggL0MwMDQ2IHB1dAorZHVwIDkgL0MwMDQ3IHB1dAorZHVwIDEwIC9DMDA0OCBwdXQKK2R1cCAxMSAvQzAwNDkgcHV0CitkdXAgMTIgL0MwMDUwIHB1dAorZHVwIDEzIC9DMDA1MSBwdXQKK2R1cCAxNCAvQzAwNTIgcHV0CitkdXAgMTUgL0MwMDUzIHB1dAorZHVwIDE2IC9DMDA1NCBwdXQKK2R1cCAxNyAvQzAwNTUgcHV0CitkdXAgMTggL0MwMDU2IHB1dAorZHVwIDE5IC9DMDA1NyBwdXQKK2R1cCAyMCAvQzAwNTggcHV0CitkdXAgMjEgL0MwMDU5IHB1dAorZHVwIDIyIC9DMDA2MyBwdXQKK2R1cCAyMyAvQzAwNjUgcHV0CitkdXAgMjQgL0MwMDY2IHB1dAorZHVwIDI1IC9DMDA2NyBwdXQKK2R1cCAyNiAvQzAwNjggcHV0CitkdXAgMjcgL0MwMDY5IHB1dAorZHVwIDI4IC9DMDA3MCBwdXQKK2R1cCAyOSAvQzAwNzEgcHV0CitkdXAgMzAgL0MwMDcyIHB1dAorZHVwIDMxIC9DMDA3MyBwdXQKK2R1cCAzMiAvQzAwNzYgcHV0CitkdXAgMzMgL0MwMDc3IHB1dAorZHVwIDM0IC9DMDA3OCBwdXQKK2R1cCAzNSAvQzAwODAgcHV0CitkdXAgMzYgL0MwMDgzIHB1dAorZHVwIDM3IC9DMDA4NCBwdXQKK2R1cCAzOCAvQzAwODUgcHV0CitkdXAgMzkgL0MwMDg3IHB1dAorZHVwIDQwIC9DMDA4OSBwdXQKK2R1cCA0MSAvQzAwOTYgcHV0CitkdXAgNDIgL0MwMDk3IHB1dAorZHVwIDQzIC9DMDA5OCBwdXQKK2R1cCA0NCAvQzAwOTkgcHV0CitkdXAgNDUgL0MwMTAwIHB1dAorZHVwIDQ2IC9DMDEwMSBwdXQKK2R1cCA0NyAvQzAxMDIgcHV0CitkdXAgNDggL0MwMTAzIHB1dAorZHVwIDQ5IC9DMDEwNCBwdXQKK2R1cCA1MCAvQzAxMDUgcHV0CitkdXAgNTEgL0MwMTA3IHB1dAorZHVwIDUyIC9DMDEwOCBwdXQKK2R1cCA1MyAvQzAxMDkgcHV0CitkdXAgNTQgL0MwMTEwIHB1dAorZHVwIDU1IC9DMDExMSBwdXQKK2R1cCA1NiAvQzAxMTIgcHV0CitkdXAgNTcgL0MwMTEzIHB1dAorZHVwIDU4IC9DMDExNCBwdXQKK2R1cCA1OSAvQzAxMTUgcHV0CitkdXAgNjAgL0MwMTE2IHB1dAorZHVwIDYxIC9DMDExNyBwdXQKK2R1cCA2MiAvQzAxMTggcHV0CitkdXAgNjMgL0MwMTE5IHB1dAorZHVwIDY0IC9DMDEyMCBwdXQKK2R1cCA2NSAvQzAxMjEgcHV0CitkdXAgNjYgL0MwMTIyIHB1dAorZHVwIDY3IC9DMDEyNyBwdXQKK2R1cCA2OCAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yNTYgOTc4IDczOV0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIyNEMyMkE1MTFCRDVDQTI1RDQ2NTQyNDUzOTIwQTY3ODE0NworQUZDMjFGQTdGNEY1ODYyQ0YxNzA5RjZDCitCRjhDM0VDQ0JGRTQ1MDdEQjUKKzYxMkU0OTFGCiswODdBMTJEMEFEQjgyRjI4REE5M0ZDMjNGNTJDCitDRUFGNTI0OTQwQzc3NjI1OTQ3QUJDMTcyMjAzODQ2NjNCNjQ3ODE1Rjk0Qzk3MzIyRUUzQUEyNjVCRjE4MENBQjNCNzE4Mjc5QUZFMjJGOUNBREU4Q0NEMDk4NThGNzBCQTY0NEYxNDEyQ0RDNkRBRjZGODEwRDJFQTZDNTAyMENEM0Q2NkQxRTBERDQ1Qjc2QTMwMUMwNkIxQ0Y5NjAyODI5RjU0OTEzQkY3ODdBMEEzRjkzMTA5MjREODlGNUMyMkNBNkJCNTczREJFQQorNTcyQzIyOEEKKzlDN0REMDk0NEMxQkFCMkI3QkVFMTMxMkZCCis5QUJGNEQ1RjdCNkY2N0E2MDMwODgyODlEOTgyNjQzMDY1RkM4MTYyOEY3QTM5ODVEMTRGOTBGMzEwOUFCODM2MzYxMTA4MTc4NDAxOTk1OEY2NjdDMEJFQjAzRkY4RjdCRUU1MjM0MDg5RjM5RjYzCitEREY2OENFNworQTYyRkY5NjUzNkVFMTE2Rjg2RUYyRTVCRDMKKzU5OEVDNTI4NTI3NzMwQUY3RDY0NzRBMzQ4MzUwMkVGQkZBNTg2NjQ1MENDNDEyQ0Q1NEIwNTlERURCQUY2MTlFMzkxRTg3NEEyRTgxMkNENTQzMjQ4RTE0RDc1ODY0NEExRkRBOTg1RTY4NTM4MDcwNjc2QUU4RjcyN0Y5QTcyCis4RkE5NUQ0OAorRUExNEQ5QzIwQzIyN0ExMUE0OEYxOEJDQ0UKK0FGMkFEMjlDMjdEMzMyMEQ4NUQ2Nzk4MjdDQzZDNDZCNEE3NENEODAwNzFCMjUwQTZCQjVDRkEwRTVEQTM3NUY2QkU1QzJCMDREQzg4Rjc2MzY5OTYwMkUzMkRFODczQTdGMTE2QkI3QjI1ODQ1RDg1QzI5N0RGNTRCM0FCQworMEU1QTY3NTgKKzNDMUExMzMwNjgwNUY0NEU3OUQwRThGRkY0CisxMDc5MkEyNTY5QzM5QTk3RDhCMTc0NkMxMTE1RDNCREE5RjRGQkI1MkM2NzBBOUU0MDk4RTMzQUZEQTZCNjExQTQ1OEI2N0YwODUzRUU4OEI0RDFCNjAxMTg4OEExOTdBQTQ5RjM5MzBGNTA3MDI5QTQKK0VBOTM4N0MzCisxMEUzMTJDRTFFRTE1QkY4MUM2NTRCNzU0QworNzkzN0Y2NzhGOTUwNkY5MjJFNEQyQTdBNDhDQTdFNzNCRTQwQkI1QzQ3NzZEQgorMUUxMDAwQjEKKzVBQzlGN0U1RDRGNjM0ODJFRTk3ODk4NDBBCis1NjIwQzhERDhGNjhFMTJCOTY1RTQyMEM4NkM1Q0FFRDY0NUE3Q0IzNjdERUEyMkRDNEQ3NTQzQ0I2OEU4MgorM0REQ0VDRUEKKzQ1MjFFRDA4RkJDOEZBOTk3QTZBMTg5RDBDCis5NTRGRjNFRTgzMTY3RENCRDY2Q0U5N0EwMTVDRUIzRERDNUU1NzUyMkMzMTlEQjgyQjQ2NDAzOAorQ0EzRERCMkUKKzAxMTk5OUZGMzc0OEJGQTY5QzdGN0RFOTUxCis3OTg3NUYyMURGQzhFMjA0MzlFRjc0QjgzNTVCM0JFNjA4Q0I3RjcwQzY2MEZBNjk0QTQ0NEI0NjlGN0NEMTMwRTIzQkU5MEY2NEVGRDcwQ0E2QUU3ODc2QjBFMDNEOTUwQTlDNjAyODgwRjEyMUUxOTEzNUU4QzdCNzJDRUYxNTU2N0IzRUVGMDMyQ0YyOUU0MDhECis4RUEyRDU1RAorOTg2MDBBNUZBOTAzRDQ1RDI2MUUzQTRBRkQKK0I3NTA5QTE5QUIzQUUzNDIwNEY2Qzk4QkVFN0M4NEQxRjk0RTE1OTM0OEQzOENFMTgzRTYyNUU0ODA2NjQ0QkM3OUY4QzQxOERGRjlDNjAwMDE1NDczOTI1ODRGMDk4N0RDNzgzNDY0NUM5MjE3NjZEQUExMUNEOTVDNTZBRQorODVCRDU3QTcKKzFDODJBRTY2M0M1QTk1MTAxM0NFNzNGNjMyCiswRTdGQkNFOTUwOTdBNEI1NTM0OENBQjZEMjZGNTY4ODM3QzU3NzkxRjVGRjdFRjY0MUIzQUNGMEQ3REYxM0VFMjhBQUE3MUE2QjdFMDNFN0E4Nzk4MjZGNDkxNjM2Rjg0Q0QyMTg3NDI1QkYyNTFDQ0ZDMzQzNDlBMzBBQzY5RjlBQUJBQUUyQTFGQzhEQUE0N0I0OERDQTQ0MEVGODYxOEI4MEVCQ0U4RUU2MTE5NDJBRUYKKzkyM0RBNEUxCitGQ0M1MUY3NjVDNDJFRjNFQUQ4NjlDMUQzRTY1CisyMjkyOTM5MUEyMTMyMEMxQ0NDQTEyNDY5N0IzMkJBMjY0QzBCNkZFMjIxOEFGOTg2NUFDQzFBMkFEOThFMkM4MEQyRUY3QkNDREQ3QjY1RUU0MzRCMUM1MzM2MDU2OEM1RDVEODcxMERCM0Q3NDlFMUYwNzVFQjUzQTZFQ0NEMTc4RTBGMDlEQTAyREY4MUYzNTdGMjAxNUI2MUJBOUQ0NERBNjVBOEE2MEU2QUEzNTlFMTE5NjQzQjQ1NDE5RDZDQTQwOEEwQjQ5OTBCMURDN0QzRjU4NjM5ODI0MDIKK0E1MzFFMkQ3CitDQTZFQjMwOTFDOUFEMjg2QzVFRkM3Q0VBNgorMDc1RkU0NkFBOEQ3NURDMEI4N0QwOERCRUI1OTg0MzQ0RUNEOEIwRjI3NDZBNjJENTM4NzhEMjE1QTYxMTI1OTcyMEJEREY1QkNEMUMzMjZCMTkzRUY0NjUzOUREMTlBNkY1MTdFQzc5OTBGNkFCNTlGQzIKKzhGQUQ1OUQwCitBQTg4RTlBQTk2NTRBQTU1MjhFNkU1RkNBMworQzZBRDgyMEExQTEwMERBMjMzM0M3QjM5QTk1RDY3QjY0QTQ3QkE4NUM0MzI3OUEzNjkxQkFCQjUwQTc2OUQ2OTc5NDI3QTU3NzRBMzFGQjkwRUU3RkQyNjVENzA1QTJDNkM1MTg1OTQxQUIxRTFBQTUxOUQ5NEUxRkEzNUQ0RjUyRDZFREY2NEVDRkMyN0NDQjJBM0REMENEOTBCMjU0RDhCQjMxREUyQzgwMEI1RUZBRjlBNDIxODNBRDA5MTU3MTgKKzFFNkEyOTJBCis4MDQ2NUQ2ODFBMUY2RUNERTVERjJERTc2MEE5Cis4ODY4QUNCNEU0NjYyM0VCNjIyM0Y3RTk5NjI4MEEyN0YxQzEwRTE1NDdCNjczNUY4MDA0MTc4QkQyMzg2RDBGODQzRUQ2MkJEMkMwOTdDRTVFNzBEMTcxQTA2NEY0RUREOTExRUUyREY2MDMyMTc5MEUyOTI5MjUzN0U2MzQzOTE1MTRCNzJDOUQwQjMzMjlFQzJBREE4Qjk4NzNFMEU1MkRCQ0M4NzY1MTk1NDEyMTgxRUY1NDU1NzA1MTVGNEEyN0RBMjM3QgorN0M4OTg2NUMKKzgzMEE1M0Y2M0Q1QzI1ODEwNTM4QkE3REYyCitFMjEwNjQwQTUxMjlBODBDNzNCNDdFMzAwMDRDQzA0RkMwRTZCMUVBMkFEMjM4QTdBNTQ4N0JBMTcwODk4RTI5QTY3N0I4MjE4RDdEOEY1RDFDOEQ2NAorNEMzNTEyOTMKK0RDRjZEN0VGQTY5OEFFNzNBREM5MzU4QTNBMzMKKzY4NzQ2QTAyQ0E1QTk2NDlEQ0NFODYyMUIxRDZGNkRCODE5REQ0NDcyQjI1RTE4NTNBQTJBMUJFREMwNzI5OEQ5QTM3NTUyMUY1RjE3RjFBMzk2RDI1MDlFOUU0OTJFMjhGMjIwN0E4MkQ0OTkyNzBDRTY0RUM4MEY0RDgyNUIyOUI2NEQ1RTczRjg1MDE4REY4OTdFOEVCQzc1QTYwODEwQkYzNzQ4Q0ZDMzExNENENEZDMkMzQkQ4QUQ2Qjc4NTgzNDEyOTM0NzBDMEU0NzA3NTZCMzNCOUVDMTNCRDYyMzUyM0ZFMDdCMDIzNkZFMTU5NEEKKzY5MkY2MDFCCitFRDNFQzUzQUNEREVGNzgyM0FCQzQ1RDI1NEIwCitGOUMxNzg3M0JGRUZCNDcyNDgzQjY5NjYyRTdDQTdCRjNDMzk0N0ZBRDBGRjI3NDU0NTI0OTQwMkZCNzdDQ0RCRTU2RUZCNjk3ODVDODE5RDUxRERCOUIyOTQ3RDhENjRBQUIyNTlGMTkyQkFEQjU4NkJBRENERDhCNkZDMUU3Mzg2NDdERUNEMEZEMDkzODNGMzA4NTg1MEJFMUVDODA4NDgxOUM2MTgyNTA4RDhGMEEwNEUyQUIxQ0E4NzA2NzI5OUE3MUM4RDEwCitERjlDOUYzRAorREQ1Nzc4QTk2MTUyMkRENTdCOEM4RkMxNzUKK0RDNkZEOUEwMDA3NjgzM0JEQjUzRDJCOEZFQjkwNjNFOTM2Q0EzNUYwMUI2RjU3MjNDNjUwRDY3REI3MTgzQjBDQzMyOUFCMzZBQTJENjE0REU5RjU3QURBN0FFRjQ3OTA3RTVDNjY4QjIyNAorRkI0NkYyNTkKKzRFOTNFMzY2MjJBQUQ1QzM4NUU0MzFDMTBCCitCNEQ5NEEzODJDQjJCRjMyQzlGNTNEQTQxNDYwRDNBMzg2NjdENkQxODg3Q0U4MEJEN0U5NDQ1NEVEMjJEMzBFMzVENkVGOTM0RDJBREMyMzRDRkIzQ0NERDlBMDM0NUJEQzNGQjQ2ODM5QkI2QTIyMzc5NzdFMTQ5NzRERkI1NDExN0I2RkQxNzA2QjhFMjc4NkUxRkNERkMzMzk5NjI4Cis3MDlBRTRERgorOEExREVFOTRCNzM3RDU0ODc2QjY3RjJFRTU1QgorQUJFMUM1QzkyMjhGODFFNUE5MEUyNDc2Rjg2QzgwQjc1OEIyODJBQjE5RTI1OUZBMDU0MzE4OTNERjM5QkM2NUY0OEZDNjEyRjg5NDcwNUQ5OTMyRjhDREVBRUE1NzMzMDYxMEUwRkJFQkREQTExREU5OERDRjIyNEI0MDYyMjRGRjdGRDc3OUExNUMwRUJERURDNzQ1QUUxRjAwQzQ5QjU5Njc0MEJBMDZCNzNBODUwMzM0MzIxOUUwRURFODZDN0JDQzBEODBCRTg3MjMzQgorMDBDQzJFNkYKK0Q4QUQxMzAxQjk3MzAxMEE4RkE3NUExMTlGMjIKKzgyQjBGRDIxREQ3QkM0OTEwNkE5MjhDMkJEQUU3RTlDNzhFNzgzMjczNzU1N0YyMDMxQUEyMzU3OTczMzcxQUU0QzhDREVGQkFCNDQwODY4NkIwRUFCQTFFOUU5OTYwRDYxMTYyMUNCQThBQTBGQzNDOTI1NzFGRDI4RUY1NjNDNDEyODM3QUM0NzNBRjBBMUQ0MUJCRTBDODE5NTk1RjgzNTA4MTYwRjc2MjAzREExMTZDMEE5RjAxQTJEODVGQThCNkQzQzc5M0VBRUY0M0FEMkQzODMyODVBQTUxMzg3QkI4OTk4CitEN0Q1RTU3NQorMUNFQzE3MDI5RUVGOUMzNUZBODE4RkFEMUIyMworOTUzMkE0OTYyM0JEQjk4QjAyQ0I2N0Q5QTg1MTRDMkQ3MUI4RUMyMjhDRjIzMzYzOTdDNkI1QTQyRkQwNkJCMEM4OUMyQkJCMEQ4OURFRUI0RDRDNTFDQjAxNUM5REI4NEREOUUyODJBQTkzNzFBMEFEQTg0NDY1OTM0MzUwQTlBNkNGODU0MDQ4RDNGMjAwQjg5MEUxQThCNkQ3RkI1REU2NjVGMUY4MEVEMjNERUNDRTYyNDUxRkVCMzMzMjlGMERDRDU5MDhGNzA5QzhGMThERERBM0EzODY3RkEzODIzNEY5OENENEI5MkRFNUU0MTJBOURGNEQ4MTgyCisxNTI1CiszMQorNDhFMzQ4QzgKK0Q3OUM4MzA5QkVBNUYwREI2Njc3QTc2M0MzCisxNzhGMzhCQjg0NkIyNjRDNERBOTQyRThCMDE4MTkyOTJBQTc1RDA5RTI3RUFBM0NCRjU3MUE3QjQ5NkRFRDgyMjdFQUM1QzQyODZERUIyNzEwOTcwRUNEOUI0Qjk3NzA5MTFBQjkyQjVDMDNCNTdBOEU3QjI0NDM5RkFCQzI2Q0FEOTBFNERBQjE2NTY4RTQ0QjlFMzczQUZGMEFEOEU0Nzc4NEEzNDZCNDhFNkUyNkE0NEE0NDQxOTNEMkZFMTIzOQorOEE4NEZDODUKKzAzNjk5RjUzRDM3RDdBMEUwQTMxODk3MDBBCitEMTFCMDZBOTlDNEY4MEI3Mjc2ODlBNzhDQTdFQzUzRkZFOTY2Q0EyQ0QyOUU3NjI5NjdGRTE4QUZFMjk2MDIyMUU1NTM5Njg1NDFCRTY0QUYwQUYwNDU5QkNGNzQyNjU3NEEzMUMyNUVDQjQ3MTlCODIyMDU1OEY5RjU2QjRFMzBFQjJERjQ3NzEyMzU3REQ5MDgyMUIzRTFGMDZBMTQ1MzQ1NDQ1OUREQTY5NTg1QTBFREVEOTI0RjNFMjNBRjAwMzM3QTEKKzk5OERBODc4CitDQkEzQTlCMzMwRDBDOUJEMDJENkYyN0Q2RTQ3CitGNEZCOTYwMjA3MDZFMDYzODY0NDk4QUI3Q0VDNjJDMDU0N0Q4OEUwNENCMTlBRDIxNzM2NDBCOUJCQTQ5OEJFMkUyOUNDMzQ3QTY0QzNENzNEOUNCQzM5NTM5Mzg0MzlCNjNGMEU0RkExQTVDN0ZBNjI5NUU2NDg4REJCOTZCQjFFODE4RkU0RDUyQkFERERBOTQ2MEE1MTMxMjZERUJBNjI3QkU1QUIxNzExMTBFMUMzQkFBNDAzRkQ5ODRGMDI0OTYxQ0E4RkMxRTRGRkQ1Mzk4MTY3OEFCRjNBQ0ZGRTQ1RDdDODBCMjAxQTAxM0IzN0JFM0I4RUY0MzYKKzVEQjdCMTE5Cis4MjFFM0Q1OTdFRkZCM0ZFRUUxNDlDM0VFMDZECisxQkI2ODMzRTRDRjY2QzBGRDQ4MkMwOTI5REU5QzA2MkQ3QUVGRDJDMTJBRDQ5QUY2RDhDRTFEQjFDNkQwNTgxOTRFM0ZENDM3RjE5OUM2OTkxRTA4MTJEMkU1RTk3RjQ3ODYwRUQzQzIzRjk1RjlGN0ZCQjI0RTZFQUJGRTUzQkIxQzlGMDZBQTg3Mzk0QzAwNTYwRjYwQzYxQzgwRTU0MTg0QUNFMDczQzQxRDJBNzk2Njc4Q0NDQTQzQjU3OUMxMjg2QUZGMUEwMjg1NjlDRkMKKzIwRDFEMzA3CitCNDFFODM1MTY5OEM2MUQwOTE0QjE4QzdFMzcwCis0Q0RBRDM3RUJGMzAyRTMwNjkyODc3REI2NEEwN0M1NDc3QUY4MDlCRjM2QUMyREJDMjUzMTU4M0FDNzM1OTNDOUQ2Q0U1QzZERDVERjE1NDA5Q0RBNzNENDQ0RTg1ODdFQzcyMDNEMjYwMkE5MTQ2OTRCMTFFNkExMjZDNTMwM0JENEREMUFEN0ZGREFEOTlBOTU2QTlGNDU0Q0UyMDhFM0I3OTBFQzBERUIxQjE3RjYzOTg5ODJGMkM4Nzg3MjhFRkVBMzE5NDg5RjQyRTQwMjAzNzJCOEU1NTM2QkU3MDM3MzZDQjU3QUU1MTg4MDYzQjY5Cis1MzM0REY4MAorNjAzM0Y3RkU2NUY4RUMwMzMxNTczRDk5RkEyRQorRDAzQzQ3NjQxQzkxM0Y4NjRGQUU2RUVFMzVGMUYyNEJDMjQ2Nzc4N0EzN0I3QTNFRDYyNkQyNEQ2OThCQ0UzNzkwMDhDRUQ4NTkwNkQ4MzMxNUZEMTAwNjQ5NzQ4QjlGODk5MDJBNTE3MTVDQTdBNTFBMzlBQUFDODREMTBDQzc5RTQzNThBMEM3RjgxMDA5NjYyNjQzREI4ODBFQkIyODA0NzJDQUUzMDc0RTBBMjI2RDkzOUUxNjdEODNBNkY3MjExQUUwQjAxN0JERjMzNERCMTcwQjA0M0I4NjJFQTFBMzE2OEYzNTQ5QUUyQUVDRjEzOTE1NzNEMDJECiswOEZFCis3MTExMERDNTg2OEREMkM5MkZGM0U3Cis5MjlENjkyQgorM0VCRUFDQkVGODZCOUMxRTNBNkZFNjYyMkUKK0NFQjE1NENFOUYxN0Y4RURGQzBBQjkxQjYyRkM0Qjc2NDIzNzE0RTE5Q0VDMzg4RTIzQzcwQUQ5QjM5OUM0OUJEQUQ2RUQ3Rjc2QzgwRDM3QUUwQjc3RTlFQzlBNEMwOUQ5QUFBMzM1RDM5OTI0RTc3ODg5NkQKK0NEN0QyMTU4Cis1MTU0Nzk4MzYxM0QwMTQ5NzcyMDc4MjE4NQorOUJCMTkxRDU5QzZDNDFEQUUyNkJFMDAyRUEwMTU2NDAxRDlDNzdCMzU5NDYyMEVBMENBRjY3QTExRDkyOEQzNjkyNDBBNEQxMjg4Mzc1NDhERjY4MEVBMjAyMjNCRThERjY5NjcxN0IwNTJBMzQzOEI2OEVDRkM0QzUxQUYxRDgxNzU5OTgxRTNEM0VERgorOURDQkVCMTUKK0JFOUYyOEJERUExODM3MkY2ODg1QkIxMjZGRkUKKzZCRTIzOTEwNDBCODZGMTlENkRGOEFERUUxODA3MzdBNUZDODZBNTFCODA3MEUwODMwQUI5MzBDQUMyODVDNkNBNDk5QzJDN0FFMjEzRDE4MTcyMzU1MzJEQUVGMkZGNjZDMkE0M0Q2QzY2QzUxOTU0N0Q5Qjk5NUM4RUREMDhDRjQyMEJGQkY2NEY0QUY2MTk5QzFFNTE0RkE4QTcxQjVGQjUwRkRFQ0ZCRkM4OEFDMkUyRDAyQzkwN0QxQzc4QkIwQjlCODc3MTdBNEZEMzhFNDg2ODY1Q0EyRjBCNgorOTc4Nzc3MjMKKzdGRDhCMkFDODUyNUZDQTNDRTlCQ0U5RTdBCis3ODdBNUM2QzA4QThCODdBQjc4NUM5NzdFNjhGOUQ2MTUyRjgxRDI0MEVERjZGMjYzMzFDNjA5MUNDMkYwMjVCMTBBREE0Q0QwMUJCMTFFNEI4OTREMjAxNTMxQzI3QkJFMjJFRTg2NkYzMUE2QUI5OTEwODBDMEIzMUMwQjkyN0REQzBDRjA0QTVBMzNGNUU5M0Q0Q0M2QUYwNDlFMTAxODE4NjZFMTk3QjI1NzIxNUE4M0U0ODQzCis5NzAxQUQxMgorMDNCRDExMzc4MkI1NjExMDk0REEyQ0JCRURFMAorNTlEMDI2QTUwRERCMThFNjhFNUMxRkJBMUE0NTE3OURCMEUxMjIwQkM0ODZGQzUyM0NEMkIzNkVDODBGNDkyQjQ2MTFDOUZGRjQxMkE5ODhBODQ4QjI3NTUxRkVENDc5Nzc3M0MzMzhBNDY2MjNGRDVGMzdCOUIyQ0Y0RjVDQjE2MTE0N0RFNkMzRjI4NjFFM0VEQzYzRDlDMzk0MkU4MzgxREQyNUE3RkZFOEU3Mzk1MjQzQkVGOUZFRDRDRDc1QjgyOEE2MTJCOEY1MEU1QTJDMUUKKzI3NDY1Q0Q3Cis0RDk3QkY5QTk0NDVGQUU2QzNGNTAzQ0IxRDQzCis5NzhCMUIwNjc3RDI4RUUwNDY5RUQ1RUZEQjQwMjVFOTUxOUYyNEIzQjY5RTU1QjRDRkE2NjE3NzI2NkRFQkUwQjAzMDNBQkQyMjVCNjhFQUZGRkJENkRCNzg2NDRDQzQyQ0FDRjIxMzM0NDI0NkU5NkJFQkREQUFDNjdDMEYxODYyNzhCRDhFOTZDOUMyRUE5OTFGQ0IyRDU0QTVEMkQ1NTE0Mjc4NDA3NTYzMDJDMUE1NTE2QjgzODc2NTg3MTBCQ0NDNUNFRjM1MkM0QjU3MkFFRTE3M0M3NUExRTI0REE4NzYzN0E1M0NGQUM5RkY0RTEyMkRDQjBBOTMKK0RFMDkKKzJCNzA1MworQTM0MEMyQzUKK0E1Nzc4QjQ1RDA1Qzk0MzdDMTE1NzM1RjE3CisxOEUwQkI1Njk2QjA1RjY0ODA2MTNCMzc0NzNEODEyNDg5M0I2N0JCMTAzNjlBOEY3Q0YzQjlEMjkyQThEMDg0RjU0MUEwQTZEQ0Q0QTc0RjQxMDM5MTA2MTNERTc3QkM4RDk1N0FBRTM5QTQ3M0MyMzZDMTAwN0VFQzIxN0M2MTcyRjc1NkQ0QzIwMzU4ODQ4RjhCMjQ3NTJBNTVBMDU2QUUKK0Y0MzI0QzYzCis4NTE0RDJENDk4REREOTFGNDU1NTdFRkJDMTY2CitFOTM4NENGM0NGRTgxRENERUVBMEFCMjk4NkIzMUY5NTYxMzI1NzBBNjNFMkIzRjA3MDEyRUNBQTBDNkY1QjNCNjVENUMyOUFFMzlBQUE4RUFGNzYzRUY0Q0E5NzcxQUU5Mjc0RkJDQ0E5MzU2RTNBNEFGRUE4NUNCRUM4N0RENjVBMzg1RjBCNzc1QTA5N0M1Q0Q3OEI5NkQ2MUIxQTNDRDgxODMxQjlGNjhCMkJCRjE1NTlBMDZFQTU2QUFFMDU3QTI3QjYyMQorQTBBNDc3RDQKKzY1MkQ2OUE4N0RBNkM2NDcwMDhGOEZBRjI1REIKKzNCNkQ2Nzk2NjE0OTQxOTA3NUE2REVEMjVCODA2MEE3RURFQ0U0ODVGQkE5Mjk5NjhBNUIwRUEyODA5NzQ3MEVFMzRDNDQzNEY2M0IyQkU1NjhDMzZGRTg2NjlCOTFFOTYzMDREQzkwQTA1RkVBRjBEOTM5MjUwODRBMTg4OEE0OTU1N0Y5NkI1MTk1MDI3MzY1MTM0MkNDMUE0M0M2ODI1ODMwRkZDOUMxQUIzMTg1QjAwOEFEMzgyNDc0ODVEN0U2MDg3NTU4RDAxNEE3QzE0MEFBNzMwQzBCRkFEMjQzRjMwMTFBRDI3Qjk1QTc3NDMxOEY4OTNBQjNBRgorNzMyQQorQUM5MDlGRkZGNzhCREQ2QTUwNjQ3NjkwOTcyNTBFMUEKKzdFRDczMTE5CitBODk2RjBBMjFCMEJDQzc3RkQyNDYxRjRCNzFCCis3MDI4NDE1QzVDMTkzODE4NkU3RDdDRjMyMjAzRkQwNEZFRUI2NTNEMkU1MUI0NTk4NEE1RUY1M0Q1MTRDMjA1RDcwRTNDQjcxOEUzREY4M0M4RkExMTg0NUQ4QkFGN0JDRjFGMTlGNzQ4MEFGMTdGRDA4N0MyRjE1ODk0RDVGODg5NUY2NTYzODFENkM2Q0QyRTFGRTRCQUNGRDgzQzI3NUE1MTZDMEFDOUNERUFDNUY5QUVDNEU2NTcyNjA2MEM1Njk1MkIyOUQzQTA0NThFQkI0NEFCNEQ1MTc4NTZBMThFRDczMworRDczMTY2MEYKK0JGMTZFREVCMTNCODVCOUJDODk3NjQyMEM3Cis2RkM3MDVCMUM0MzcxMzc1Nzg5OUJBNEM5RTI5QTVFMDY4Q0E2MjdBQTU3ODRBNkJFMDlDQzEwMjM3OEY5QTJCNTBCNDY3QUE3ODk0MTk2RDFGMkRDNjYwRDE4M0Q3OUMyNjBDOERCMzUzMkQwODhDNDhEMAorRUFEQ0E2RDIKK0U1MEMxMUZGMDlEODA5MEQxN0IwQTZFNTBGREUKKzY0MDgzQUE3N0VDNUY1QzdFOTMyQzc1MEFGNDE5NzUwNjg4NzY3QjEzRERGREUwQkM2RkJBOERCMDc0QTQwQzUyNkVCMEJFM0EwRjNBRTVBRjA1NDYyRUZDMURDOTlERTY3MzdFQTA5RkI5NDUyNDUxQUYzREE0MEIzMzc1Njc3NDIyNTNENjRENjgyMzNDMTAzNUJDRDA1MjgzNUY3NzJCNDkzQUI0QTdGREI0Nzk0NURGNEEwMEZEMkJEMDZBOTBBNDIxREY5OUM4NkE2RTg2M0IyRUFGMjkxMTA4MjhEMjY5QjlCRjZBQjU3OTRENERFN0IwQzZGMDJBMworMUNDMAorRjhDMTYzCis3MkU4MTdDNAorNEY2RTlEMUFFQTQ4NjA5NjE0QjZCMEEyMTYKK0NFQ0QyMzNCOTRCQjM3NjNDNTYxQjg0NDI1RDY4NjIwRTQwOUM4NUYzMTFFRTEwMzAzQ0VCMDBCNzQ2NDc5REZEMUYyQUNCQzAzQTI1NDYzQjFENEZEMUJBNDJDODgzRjkwMThBQTUzQjVGODQ5NTQ4QkUxQUVCMkFGQkI0QjY3NjY2QjQxREIyRTZFRjY5QzY2MjBDM0VBNUQwODdBNjY0QTRFNTdBMjY2N0JCN0NFCitDM0QxRDU4NAorNzFEMjU5MTA4MkUyMTRDMzQyM0E3ODI5RUYKKzcxNUIwN0I3MjBBMTk5OTg4NEU1OTUzMUREQTA3OEUxMDY3MzM3MDlCRjUxMDE0QjZENTQ1NDAyQjJGNjY2NDI1NDM3RDIxMTVENEVBM0IwODIyRUQxQThFOEVBQkE4RjZDQkIzQjczNTMxMzZENjZDN0ZERTZDMDdGREVERjQ4MkQwODMzMTJFMDEzQzAxRjczMEMyRjlGQjY3MzJENEQ4M0ZFCis5MjcwMjJDNgorNDExMURCRjYxOTQxREEyQ0FBNkJDMkE4RDI0NQorM0Q2NUE4QzlFQzBBQjczNTdFQ0QxNDNGQUZBRUZGRTNDMjE5NDY5MUIwQzk4MzFENDkxQkI0NTlDNkJCNzEzNUFCODA2NkU5OTk1NDAzNjRFRUE1RDZGMjg0NURDOEQyMzc0Q0YzREZFMjFBMDYzMzFERTBEMTlDNTI0RjJGQUE3OUM1NTVFNTFFQUM0MTAzNjg0MEIzQUU0REU1NkIxRTAxRDE5N0M1N0M0RDFDN0RCMjdBRTY4MEVBQkRGQTZCNjE4MDVGMEEyNjg1MjhCRDMyMEMwOTQyNjIwRAorRjc3MDhGNjkKKzg3MURCRjRDMDBENkE4MzU2RUI2QTQ4N0YxCis0QjlEOUE1QjlCRjhFREY3NTFCMUZDMDRCMDU0MUY2NUIwQUI1RTdGQURFNTMxRjEwMkU3Q0RCODY5ODMzRDk0QTIwOTUzMkNGNjVBMjlBRDAyQzlCQzdBRkM5NjdFRjYzQUZBNUM3MjcwQkREMkEwMTc4QTBDQzJDMzRDRjdEMjdEOTEwNTE4QTBDMUUzMkIyNzhCNzZFRjNEMTcyQkUwQkQxNjYxNTRBNUVEQkYyRDkyCitDNEM4QjE5RAorRDZCRkY2MDczRjBFQ0JCMEY5RDRDQ0QyRDIKKzQ5RUNGNEIyQkVDQUY3RTE4OUE0RjFDQkNEMDcwMDc3QTdDNEUzQkU1OUUxQjA3NzU4MUQ3NDkxQ0MxMjkwODJERkI1NjQ0RTdENTk1NzY5OUMyNkQ1M0U5QjkwRUE2NzE0RDM2NjlBMzY4NjAxRDU5RjU1RkIzN0JGMTcwRjRGNDQ3OURCQzBGNTkyQUZGMERGMThBQTQ5RDE5M0Q1QjY1OTA5NTgxMkZFNzQ1NDNBNzQwQjIxNDUKKzJBMjUwMTM5Cis3QjAxQzU3RjkzMDJBMzdFQzVGN0Y2NjE4QzM3Cis1RDFFQzM5RDlGODY0MDJFQTcwNEVCMzE2MzI5RjI0QjhGOTI5NkIzN0I3NEM3Q0M1QjM4RDM2NEY3RDlCMThFNUIwQjBGMURBRUU5QjVGNzdGNEQ4RTM2QkQyNUJGOTcxRDNFRUYzOUFBOTdCMEIwRUY0OTFBOUM0N0RBQzhDNUNFRkMzM0E3MzBBNDMyRkE4MDdEQzREOEI3MjJBNDM4NTc1QTM1M0U4ODcyNkNGNjdFQjY1ODdGNjFCMUFEMDk3NjY0NzVENDY4RjdEQjg2NDFGNjlEOUQ2QTgyQjAzMkIyQzc1OURGN0FGQTJGNjE4QzJFQzg2MkFCNDkKK0M2MTQKK0JFODQ4NkQxRjE3QzNENDgyRUUxRjc0REE0NDM4OTVFNTcyQTRCRjRERDI1MDI2OEUzRDNCQjgwQ0Q0NzMxMzczNDlEOEZDRkVBNzQ3ODU1MEM2MUM2RTRDMjk5NDEKKzk0MTYzRDgzCis5NjcyRUU3MjAzRkRGMERGMjA1NkQ5NTE4RUFBCis5Q0NGMzEzMkUwMUREOThEMERGNkNBRDJBNTVFREQ0NTJCQjZGNkRCNUZENkZGOTk3QjI4QUMzOEQ2QzRDQ0E5QTM2NDc0MTlGN0EwRjlGMTcwMzgyMEY4MjFGNTQzNUY2MjJBRERERTgyQUZDRDI2Q0U3RjU3OTk0QzVBNjA3Q0Y5MDU4MzdFMzBEOTczRkQ1MEVERUE1RUZGRjk1OURCQzMyNEY0ODdDN0EzRTI1RjQzMDM3MzNGMkQ0MTdDRTE1NEZEMzlFOUZBQ0Q1NTgyNjZGMzdGMjExMQorRDRGMThEMEUKK0QwMUY2NDU3RDA4RTNCNjYwNjAzMzcyM0JBCisxREU4QzczMTZFRTExODQ5RTQ0RTlEQzRGN0U1NTI1NTVCODlFN0Y5RUFFNjMxOEEzNzdGNEY4NzQzQkExMzdGMDUzRkM0MUEyMUNEN0UyQjRDMDMwOTkwNkJFQUJERkZGQTIwMjM1QkY2NzQyQUQyOTkwQjdGQjdCM0FERERFQzM0ODYwMjk3QzM2MzkxNkYyRTRGRjJCRjQ2RkRFNUFBCitCQ0NERUE1OAorQjdGMzA5QkJGMUEyNzg0QjVCMDU5MEMzNTNGNAorNjRFQUZCOThEQzY3NkEzRTYwOUQ1OUI2NzU3NzFERUIxRjJENkQ0NEZBOEI5REIxMTUzM0VFNjI2NjA3RkFFMDBGRDBEODJGNUY5N0FGQjNDNDI5NDNCQkU0QzlDOUZCNzRCMkNEQkZCNUEyMTMwMkMyMUEwREIzRjhERDJGNzg4RDY5RDI5RjVFM0QwQjYyRUVERkE1MjU0QjMyMjlDRTAzOUQ3RURDOTY2ODNDNUVGMTExREM5Q0RBRDREQUQ4QTUzQTVGNURCMjgyMTkyNTkwNjMyN0ZBQzE1NDMyNUFFMTMwMjlEODc3NkZCOEZFOEYxNUZEODA5MDM5Cis3RkEzCis4NDVGNTZDQzY3MjUxRDgwMUQ4OTJCMUU4NTlERTZBODI2OTBGNzBBRUY1QzVCQjIxQTg5MjQyODg3QjlEODIzMjM2RUVFCis0MTQxN0ZCNgorMzJGNTI2OTI2NjNFRjJENzIxOEYyMDc3NDUKKzQ5QTJENERBNjZEM0VFNjdGRUMxRUQ2NUI5QzhEMkQ1QzA2NUU0RjM0Rjc2NTM0MTM4NUMzMTNDQTJEQUM5RDU0ODE3NDc3MDM4Q0E1RUQ0MEFDQUM2QTJCNUVBRDY1QTZDRDEyQkJEOUFFNAorRkRGNTNDODQKKzc4M0MxNUFEM0UwNjhENjE3NDVDNjJENTc0M0QKKzAwQkUyRjcxMDkzNzU4MEU2MkIwRTU3OTQ3NUFGQkVBQzMxQjlFNzJDMzk1OUM0MjVFNUU5M0EyQzM5QUNFNDczMjk5NTAzNzQ1N0U0RjA1QTYwQkY3MUU1RDg2OTVCMzcxMDRBNDA5RjFGNDNFNjAyREM5NEVGREJENzQxNTcwMDA1NkI5NkJFNjEzRTUxQjgxMkJCRjNCOEI0MzUzNjMyNjE5NDI0Q0EwOUQ0N0I0NDIxRjRERjk3Nzk3Rjg4Q0Q1QjhDODE1MTNFMzI3RjA2QkM2NDA1NjBEMTdFMDA5QTA1RUYxQ0IzQ0U1OEY1ODY1NDYyNEZEQjE3OAorRTA5NworMDk5RUQ4NjdDNUE1REM4NEM3Q0Y1NzZGRjUyQUMzQ0E5RjJCRjg0QUNGM0I3N0YxODQ1NjNDMTE4MEIxOUQKKzdCRTgwOTZECisxM0Y2N0U1OTU5NDBERUVCQTNBQzlCMkQ2OTdDCis3NUNFMkI2MURBMzFBQ0JCQkU4QUI1RUJEQThGOEU5QUY4ODczRUM1RDU3N0VEOEQ5OEY2OEMxREQ0NzNFRjc3NTdDRkUwOUY5OTQ5NkM4RDlCN0Y4QTg3NTc5NjBBQThGNkU4NEQzMjEyOTY4RjM1Q0U0QTRFRkZFN0Q0NzI3NDdEOUI1Q0RDMkI2MEFGRDk5N0YxMjc1OUUzNzlGNzlCN0ZCQkEyNUVDRjQ4OTJFNkI1MjY0MUEzMTc2NEQ0NEQwMUUyNUZFMUQwNUY2OTcxQzNDQkEwQUEKKzgwQTZBODJGCis0RkIyMDE0RkY0RTZCODYzMzdFOTFDRkYyNgorODc1QkM3QjZDNjYwRUEzOUNEQ0Q2NzM3QkZEMDZCQTkyNEY3OTNENDY5RTE0NzQ3RDQ3NzIyRUJGMzVBNURDRDAyMTY2N0RGNzE2OEQwODE4N0E4Q0M1NUI1NjZEM0I4OTBFRTk1RDUyMzUzRjYwMEVCNUIyQjU0QjgxRDM1OTU4NUIwNTQ3QkU3QUUKKzA3NDY1Rjc2Cis2QTdCNkJGMDg0RDhDMzdBNkJGNDU1ODkxMTgwCis0OTMyMDVCRDBFMzcxREMyMjA2RTQ1NzJGRDdCQTNBQkYzMjM0NDU0RUE0RTU4RjExQUY5QUQxMEIzQTM1QzMyOERDRUUzMkI2MUJDMEI2NDAwRjYzQjRFQTI3MjRBOTI3OEE2NERDMDE2NTA4RUM5OUVFNzkwQjcyODFFMjExNkQyNTgxOTQ2RDQwQzJFQUU0OTYxQkZBREQwQzQ5NjA5MjZCRkEwMDRFM0NEQkQ2MjJBMEYyMTUxMTNGMzA3NDEwMjBGQkEwQjU5N0Q3Nzk5NjhDMkNFMkU1NEM3RjhCOEQ0OEE2RDhCNDA0MjNECiswMzY0QkQ1OQorRTMzNDE4QkU5MDc5RjM1NkI1NEQ0QTE5QkM4MAorRjYzODE1OEQ2NTg0RDlDODk0MzhFMUQ2NjQyRDk1RUE1MDk5QTM5OTE1RUUzNzYwRTBGQUZDNUI3NDkyMkFGQjU4QkY5MTBDNjc4OTdGRERCNTZDOTVCOTMzNDdFNEMyOTE5MTU1QkM5RDQ2MUNDQURFNzZEMTRBRkNBMDkzRjlBMTNFREY3MTgyQzUwRjM2QTRDQTQyM0UxMTZEMTQwNDI0MDZCRUQzRDI1MzIzMUJDMjE3NkVCM0UzMjYwMTk2NkIyQzA1M0VFNTZCQ0I4N0UyOEQKK0YyRTQ4NjVCCitFREE5OTc0RTQxMTc2MzBGQ0U0NUM5ODVGOQorQzRFRTk1QkM5ODVDM0IzODNBNUNBMkE0QkVFNDI1OUMxNTZGMzJBRUFEQzYyMTcyMzVBQzM0NUUzRDNFMzRGOEI4RDQxN0QyMDA0RDAzNzREM0Q4NkRCRkM4M0JDOTE5Q0E5QkU0NTg3QTM3QzFENDA4RjJGQ0Y0NDZFNTU1MzNDMzA1NkIwMEY0QUVCNTY1MUFGQTZCOEMxRDc4MjMxRTEwMjY2NUEwRjJFQUNCCitDNDVFODU1RgorNTE4QjUxODc0RTJDQ0ZBMTI4NjkyN0RENzM5MgorRDdBMTAxRTJENzcyRTQ5RkNCNzM1MUUyNjEwNDUyRDMyM0E4ODM4QjgzN0U1NDIwRjIyMjI1ODYxNkIwMDU2MkFDQjU5N0Y3ODREMDYxMjhGOTNGQzk1RTExODc2MEMzNjhDNTI4RjkyNDdBMUJDMDBEQ0JFRDc1QzU4NzA2QURDQjdEMTYyQ0NFMUU5RTVBOThGODhEQTJCOEY3RENBMTcxNjM2QTU5QkM4QkRDRjFEQUU2QzM1MUQwQ0ZBNTdFRjg4MUQzQUMxNDlFQUQ0QzhFNzkzNEQwNERFQ0I0QUY2OEFCQkQ3Mzg1QUIxQkY1RjMwNzNEODYKK0YwQkMxRDJDCiszRjZENTQxOTM1QTBFMTNERDZGOUI1NkMzNgorMTdGRUEyRTdEMTczRkY0QkFFMDlFMUEzNzJCRTg2RURBMEJDMDBDNzg1MjNDMjAyMjFFQUI1RDU1RTc5NzZBMDM4Nzg4NzlGMTVDQTVGREJFMTA4QUI3OEUxODM0OTNFOTY1N0MzQ0UwNDk3NEU4MUFBQjY0QUVGMDdCQ0Y4NjZEM0FGODFDNEMxCitBQUFGMjlCRgorMkE5NkQ4Q0YwQkJEN0RDQTRDREZBMUI3NzMKKzA0QzIxQzM2QTVCMEU1NDlGRTNBNzAxMUY4OEQyREFCNkM0QTgxMTZDMzVENEI3QjJFQjU4OUY0NzkwODZFQUZFMzU4NDU0RDQ1MTdGMTZDQTVEMTlBQUU3OUQ4NjExNzZBMkYxRDgwMEY3NzMzNTkyMzRDQkEzMzYyOEMxMDU3REUyRTdBRTc2NjJFMzA2NUVDMTc0RkRCMkNFNURBNTlFMThEMUU4OTFCQkY0REUyNUE3QTgwQUM3RDdEQzMzNjQ1MkIKK0ZBNTExMEU1CisyNDlBNjMxNzQzREVFQzAwMzlENkI2ODNFMAorMTEzNjQ3QjI4RDU0NTNCOTdCNEE5NTQ2NjIzRTIwM0I1QTQyMENGOTdDMkM2RUFGOURENDAzMEEzNzJDNkQ2MEVFNkIxNkU5MTI3MUI0QzgwNDFGRjAyRjlFNTU0NzdGQTU0RUQ3RkZGQzBDNzEwQkJBMTFCNEM5RDUyREVCNkE0OEY3NkI5MzJFQzcyQUNERTVDMUE5NzQ0MjNERDY3Q0JGMUE4NDMyQzQ2QTU1MUQ1MQorNkVCMDFGQjEKKzUxQTQzMDkxNzg4MUE4OUZCQzEwNzkzNTM2RjYKKzdDMTU4OEVEQTg3MjExNjNDRTkxRTUxNEUyM0QzRTk3MDQ4NTI1RjIyRTk3N0YzMTI0NTFEQzE3REJCMzVGRTIzM0YxOEZEMDcwRjcxOTZDNjA4QjA0NTA2NEY3MThDQTI2QkVCOUNGOEFDRjdENkU2MDc0NkM1RjUyRTI4Qjc5QkZFNjBFRjJFMkNFMTFDMDhCMzM4M0NDRjJGMkIxREFCMkM0RTIzRjIzMDY3RDRGRjE3NUU1MjU5NUQ5MkY1Q0MwMjQzNzRFOTJERjQ2Mzg2NzM0OUFFNzMzMzlCQzAyMEYwRkQ2MzRGMDBGQTFGMUREMDk1RDQyMzREMAorNUFBMgorNUNGMzI0ODlGQzkxQkQwNTBCNDEwN0RBNjlEMAorOTBGMDAwRDcKK0VDNzk0RjhGQ0UxMjA0NDRERjI4M0U3MEUyNEIKK0Q4RDM0NUY1RkFEQzVCOTJBMTAwNUU2OEQ3RTMyQzA0ODMzNkU0OTE2NzE5Qjk1RkQ0NEM4RTlFRDY2N0REMjM2NjhGNTBDNjY2RDUwMEFGMkJCNzE3NTU2RjU0RUZFQzVCQTQ3RDRGRDY5OEMwRDNDMzkxNTIyRTMzODU4QUJDM0RBNzJDOTlFNjM1RTM0NEYwRkIxQkFFMkRBMDc1MTg5REE1OUE4NDM1NTBGMkMwQjI3MTExOTg3RTk4M0Y0OEM2OTYwNDEwNkQ3NjZDODJDNDY0MDRGMzY4NTMyQUM4RjA0ODVCMkY5MjdGMzlCMzI5RkUwN0MyMzVGNgorMUU0OAorOEY3MjBBQzBCMDQ3NDMyM0U2MTVEQkU3RUNDMDREMTYyNTAzNEI1QzQ2OEM5NDNGNDYKK0JEQTc0RTY0CitENkE1OUE1RTdFODIxODM3NDRCODA2ODJFQjE3CisyQUY3ODUzMEU0RDBCN0M1QUZEMDRFOUQ2NEE0QjE5QUJCRjkxRUI4Njc1NTQwNjg3NDM0MThFQUE5NzM0QjQyQTkwOUQyNDI1NDdGQzE4QjBCNTg5NTZCOEY3NkUyNTEzNzQ4MDk4NjMzQUM3RkFGNjlBMjAwMDdFREUwNTdBNzRDNERBMzAwRjQwQjdDMDNGQ0NFQTI5RUM4REI2MzdGOTg3RUFBRUFCNTg2OTZDOTA0NTI2NzExMkI2NkYwRjY1RTM5M0FFQjU1NTAyNDM4NDcwMUM3NEZERjJBOUNCOEI2NTI2NTY5RkU4QTdBQjZGODU4QzhGQzA4NzMKK0IwOTAKK0Q5NjgwQUEwCiszOUQ0NjUwRTA5OTVEN0JEMEM4QzY2NEM2RgorNzMyRjZEMUVGRURDMDA4MDY0QUJCNkQ2NjFCODI1NkFDMzEyMkRCRTU4MTc1QUM1OTNCQjFBMzhCQTY1NUI4ODc3Mjg4NkI5QkQxNjU5NDEwODY0NjJDN0MxMTI5RkI2QzYyM0Q2MjAwNDgyQUY4ODQ3NDA2RTk3NURGRDdGCis3RTRCRUEyMAorODY1RDk0REY5RDYwRkExMEI1MjY3RDk1MkEzNworOUI2NjBGRTMxN0FBOEU1RDQxQkU3NzA0NDQ3MzZGNDk3NDMxQUEwRTZGODAyNzMyQjg2QjUwNDg3RDMyNkE0NEQ1RjA4RjdFMEY3QjQ2RTc3NUZDMjQ3RjY4MzI5RDBGQjY4NzQ2RjkwRUMxMUIwMkIyRjIyOTk5MjU1OEJEMzJFN0VBM0IwNDBDMDg4N0YzOUVGNEU4Mjk3QjcxOTExNUNCMzMwNkUyRUQ3NDA5MkM5RjI0RkNCNzc4NERCOEM1Mzc0MzVCNkI2NTJFRUQ0QjBDCitBMTZFQ0JCNgorQ0RFREQxMENFMzhDMjc4MEQ3NjdEN0E2NUMKKzUyNDgyRDZFOTE2Q0VDQkZCN0RCRkUzNkNFRTEyMkEzQzZBMDRGN0Y5MjJECitCQUZFNTI2NQorRUY4QUQ3Q0VERjkyMkY4QTM2QUZBMEQzQTE4QgorQjVFNDExNUMxNkQ4OTYwNworRDE0OTY4Q0QKK0UzNkNBMjA5QkMxQkE2N0VCQzJGRTlGQzBGQkY4NUQ3RjI2RkFEMTdDNzVDQTI5MzJGRUFENkRDMTUzQkVBREY4RkE1Cis0QzQ5RjZGMEFCRTZDNURDOUFGQjVFNDA4NUEzNUM5QjY2MDRBOUQ4QTQ5OTA2RkZGNzJFN0M0MTU2Mzg0ODgwOThDRTY0QTk1ODM1CitGN0I4NzQ1RkY3N0EzQ0YwQTZDRkJGNzZDNDZCREQ4MDRERDlBNzg5NzcwNzcyRTVCRjgwREYKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDYgcHV0CitkdXAgMyAvQzAwNDkgcHV0CitkdXAgNCAvQzAwNjcgcHV0CitkdXAgNSAvQzAwNjggcHV0CitkdXAgNiAvQzAwNzMgcHV0CitkdXAgNyAvQzAwNzggcHV0CitkdXAgOCAvQzAwNzkgcHV0CitkdXAgOSAvQzAwODMgcHV0CitkdXAgMTAgL0MwMDg0IHB1dAorZHVwIDExIC9DMDA5NyBwdXQKK2R1cCAxMiAvQzAwOTggcHV0CitkdXAgMTMgL0MwMDk5IHB1dAorZHVwIDE0IC9DMDEwMCBwdXQKK2R1cCAxNSAvQzAxMDEgcHV0CitkdXAgMTYgL0MwMTAyIHB1dAorZHVwIDE3IC9DMDEwNSBwdXQKK2R1cCAxOCAvQzAxMDggcHV0CitkdXAgMTkgL0MwMTEwIHB1dAorZHVwIDIwIC9DMDExMSBwdXQKK2R1cCAyMSAvQzAxMTQgcHV0CitkdXAgMjIgL0MwMTE1IHB1dAorZHVwIDIzIC9DMDExNiBwdXQKK2R1cCAyNCAvQzAxMTcgcHV0CitkdXAgMjUgL0MwMTE4IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy00IC0xNyA3NDIgNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY5OUEzNEUzNjQ5ODQyQjE5NEY0OUQ4NDUwNjlERjg1NDkzCisxNTM5MDI1RDhCN0U1RjhCMUM1RDJDOTEKK0FDMzlBMThEOEJGMEM5MEQ5NQorNkRCMjU0MEQKK0FFQTcwNEYxMkFCQUYzRTBBQUFGNTYxNTlCCis3MjRCNjdFQjk3RTJDMzIxNURERjJCMTVDNkVCREUxMTRFRkYwM0M5N0YzQTU4RDlBQkVEMTU1MzI1MEY3MAorMzk2M0YwOEIKK0NBRjkyMkQ0Q0I2OTVBRUU3MDkyMjZFNTNCCis0NkRCNTZDOUQ4OUMzMDNBNjMyOTIxQUQ4NkYzODRCQzk2RTZGNEMxMUM1MkEwQzFEQUZERjgyNzE1RjJENUEyOThGQTlDMkVCN0E5MUUzQzBEREIyNzFFRjNFMDY1MTcwQUIxRUUxQzJGQzUyNzNCOTQxRjIwQUIKKzRGOTk0RTZCCitFNDE2N0QxQTg2RTI0Q0M3QUE5RDA4RUEzOTYxCis2NDlDMDMwOTc2QjkxODEyRTJBNzY5RUQ2NTFGMDkzOTA2NEZBRDYwRDJEQkVDODQ4OEREOTI4RkJCQ0VDRkQ1OTYyREJDREREMzI2MUQ5QkMzOTRDM0JGQzMzMTM3MjI5MjRDRTdGNkU4MjZBMTA3RUJDMjkzQjU1RjgxMzlFRUUxN0M1MjdDMjkyREJBODc0NDVENDc4MjQ2Q0JBQTg1NDIzOUVDRDI3RjI3MUFBMDIxRkUzNUVGRDMwQUExODk5RDQxMDJEQTZEMDJDNDg0CitFMUNCMUJEMgorREM2MkM5NjNFQTFDNDZGNEIxNDE0NDE5RjUKK0U4NTI0NEFEQTQ1OUVDQ0VCOTlCNEY3ODg4MjNGMTg3QkU2ODQ2RkUwNDQxMURDN0VBQkVDQkUxMzlBMkI2OTZGNDA3QkQxRjc4ODVENkQxQjhGMUJEMTE4RERBRUFDMDc1Nzc0RTNFQzREMzRGQTIwNTA0MjYwOTE5NUUyMzhCQjE0M0NBMUVCRDJDODYwMTkwMjU5MDcxMDEwOEU5MUIyRjQ2OEVEQjA1MDI1NgorREZGQzc3MTUKKzQ3QzYwMEE0NDM3RjExRUY3MTQ4NUExRjQ4CiswMEE1MzAzQTQ0MzhDQ0I1NjI4RDlBQUE0RDZDMjNGQzgxM0ZEQjQ5MDBCRDlERDhFRUYwODlEOUY3QjcwRkU0N0JBREMyNUU4NDE4NjY4OTM3NDU1MTcwNzAyODBDOTVBNTY0ODA2Q0I4NjM0MjAxODkzQkVCNzkyOTgzCiszNTRDNkE5NgorMDAxMjgyRDg3RDEwOUFEQUYwOUQ0NkMxMzUKKzRFNUZDMUE2OTAwOTNEMDgyMjM4N0I5NTEzNUVBRUE5NjI3RkRFQjhDRTNFOUJENDIwM0Q2RDU5RUEzODI3OUVBMUJCQUI1QkE4NkNGRjY3MTg4MTcwOUJGQThDRUFCMUY1RjgxRjhBNjJFMzRDODQzNEQxM0JFNjE2ODlGRjMwNDFEQzgxQjYxQ0FDMUVBRjZCQkQxN0RGMERBMDFENDNBQzQyMEQ4RDM1NDEzREQ2NDIwNTRGRDlEODk3NjIKK0EwRTMyNTNFCis0RTVBMzEyOTZCNjExMDU5ODFCRENGMEUwMDlDCitDMzhGQ0JFOTlFMkI3MjUyNTI3QzJCMzAwQTVGMzExRDk2NUMzN0UzNjM1Nzk4NEI0MEEyOEM4RDMyQzk0NzBFMkY2NkU3QTVGNEEyQjcxRTk2Nzg4MDI4MERFNDM2OTZENEJFMEQ2NDM5RjA2NkVCOTEyNjY2QTgzRTBGMEE3NzBDQ0IwNTQyMjI0QzE0RDBFNTc0MkM2OEY3OTNDQTAxMTVDODE1NUZCRUU2REU4QkE1OEJCQzFCMjI3OUZBNzQzRjUyNDA3MDdBQTZGNzM4RDQKKzY4NDM3MTVDCiswNkUxMjZBNzM0QTRENTlBMkEyMUQyNjNDNzc3CisxNEU1RjQwMUM5QTcyRjI1NTQ5NjEwOUI3NjNBN0Q5MDI2MTlFMTEzNTM3RTBCQUY5NjQ5RjcyQTg4NjdDQUQ5QzAzMUQ0NUVBMTE0MzJBQzVBMkM5NTNCNDYyMjU4OUVEMUEyRkYxNEJERUFCNEY5RDg5QzY3OTU2QTY0Rjk1RkNBRjU4OUY4ODJGRDAxOTgyMkQ1QUM0NkJCNjMyNkYxNUMwOUMzREQ3NzYwNjIzNDVBOTMyQUZCQkJERkY5NzNCRDlCNkI5RjU3OEMzMDM0NjNDMkRGQTc0MTA4MjQzQkRGQkJFNjk4NDY3RThFRTEwNkNGRUM2RjI2RDEKK0RBMTQKKzY2MDY0RUQ1CisyQ0FFNjBFRTdGMDQ0MEIzQTYwM0RBOEI1NworNEZENTZCRjQzOTJDQjIxODkzRjVBNjQyQzJFMDBCNkY2RTAxMEJDMzU5NUQyMDVEQkI3MDMwQTRCM0JDQkJFQ0M4OTdGNjA3Rjc1MjI2NTc2NkFCMEVCQzY5NzU4RUI1MDBDQUM1QUZFMTA1QzA2MDY1MDc3QjA3QzkxNkFFRjdBQ0M1NkY4NDRDMjFCRDA1ODEKKzhBNUJGMTlFCiswOUQ3RDc0NjVDMzU5ODlBOUE1NkNFREZBMDFBCis4QkRFMzYyN0ZDQkFDNEIzRkU1MjNDMDEwQzc1MEE3QkNGRkEwMERFNDE3MTk0ODI2QzE0MkIyQkY4RDQ4MzkxMTdCMDA3NzREN0Q2RTdBRTIwOTU0RTQ5MERFNEE2Rjk0ODE5NTRBMzZDODYwQTJEM0E4NUIzMjhENjc0OUFBNzg2MjcxNUM1NThCOUJGMzE1OTQ3MzNDMTk3MjI2QzNBNUE1QzE0RUE4MTAwM0ZCODAxRUZDOEI2QzhCMjU5MTQ5NTdEMjI0MDEwOUZEMjgxRDJDMkZCRjc3ODY4MDY0Rjk5OEYyNEU4RjdBODExOUMyNkJBMjQ0N0RGNTEKK0MyNEMKK0I3QzhBQ0ZDCisxRTVBOEYwQQorNkREMDlFMjc2NkJENjExODIzODE1NEVDN0QKK0JCM0E1ODg0OUUxN0REMzE1QzQ3ODI1QUY5OEQzREFEMTg5QThEMEFDRTMyQjA1RDBGMjhGODI0OUM4OUY4OUM0QjdGOUI5RUE0M0QxNDYyOTM0MDAyREMxMjg0RTVDMzc1QzY5MDEzMzBDODIwNzJFRjcyNDQ5MTUxQUYxODM5OUJGRUI1RkJEOEIxODI5OTY4MzhDODc1Q0YzQjY0RkE2NzZFMzBEMzk4QzRDRjk1QTIyODQzNEYwRTgzCis5QzlFNjFGMworQ0VBOEVDQzA2RjI4NkVDRDJDMTg3MEU5RTcKKzQ1M0M5OUU4QUNGQ0U4RTVERTk1NTUyNEY5M0ExOUMyQ0UxQzYwODA0M0I4MjQ2NDA0Rjg1N0NCN0EwQUQ4NDZCQUJGMjk5QTMxOTAxREZFOUU0RUJFNDY0RjFFRTgxQzc4NjIzOTQ5OUIwMDdBM0E1RDNCRTc1MkU4NEVFMDBEM0M0NENFRTNFQjYxNTUwMkE5MDRFQ0IwOTBGNzZFMEJDN0E5CisyNzg0NkU5RgorOTNFNkI1RDkzNTQ2M0Q0OEM3QTlBODFCRjY1NgorMkVDRTg3NThDRDc0OEE4QkQyRjlCODFBNTFFOTNDQTUwM0E4MzE1ODYzMEI5QTg1N0M0QzNCRkI3MTE3NDY1NDg4RDM2OEI2MjUxQTQzRkEzQUZBNkQwN0VDNTlDMkZFOTdCRERCODUwN0ZCM0MxQjU1MDRDQzlFMjg0NDM3REZFNUEzRTlGNkQxRTcwNjIxMkU3QjU4QUJBQURFMEUyQjQwMjBBQTY5MTg5ODBGODlGNjNGRkJCMEMzRjMzQzRGREI2MEI1ODIyNjVERjdDRDBEMkVBRTlBCitBNTQ0Q0UwQQorRjkxOTAzRTI5OUNCRTRGNUY3Nzg4QTcyNDMKK0MzMDQ0NjIxNjg4MzgwMjc4RDNEODI3NjFCNzYxRkFBNDkxNDRENEM3QzIzMDkzNEI0RDM4NzBERjc3MkEzRjY2RkM2Q0U0NDQ1NEFGNDc2OURGNDM5QjMwMDhCMUNCREQ0OUY4M0M4QkQ1Mjg1MDJBMUQxMkVFODE3OUFBQkM2QzRGMzU2MEI5MTAzMTRFOUNCOEJDMUM2RjA1RTFFNDk2MkMwOEM5ODQ1OUU5MjQwNkE4RDYyN0MKK0RFODNBN0Y1CiswMDMxM0ZDOTlDMzI1RkQxQTY2MzUzRERGQQorOUM4NzEyNUVGNjkyQkZCNTMyQ0Y5QkYyOEUyQkZEOEY1NDlFOEZERjNFMDk2OUIxNkMwMDY1QTI2QThBMjcxOTFFRjhCNTkxQjVCMjI3QTNEM0E4N0UzQzY5NTMwM0EzRkQyNjI1Mjc5MUUwNDA2NDM4QzIyRjRDMTIzOENFNkFDOTdEMzc0NUFERURGN0M1OEQ2QTQwRDhDMkRGOTQ5QUU2RDE0RTBCMkU5NUE1NEI4MDFENEM0OUU0CisxMTFBMUQ0MgorNTc5QjY0QTFERDU5RTgzMjZEMTJCRDUxRTEKKzIzMDBEMjcyOTY1N0JCQTAwNEFCQjQ1ODRGNUM1N0M2QjUzNTlCRjhFOUY5RkZGQUVCRkQ2NTQyQTdCQTMyNzc0QzlGMzREOTkyQzM5QUJEQ0NFOEFENjRCQUMzQUNCMEVCMkNGQzQzQzRDOUExMzEzQ0NCMzFENkVENEMyNDQ5MkU4OEEzNjY3RDIwNjBBNzI1ODZBQkQ0NTk5MQorRDlFNzAwRDgKKzg5OUNEQzU2NzAwREUzNUJBRUQ2OTFBNTNCCitEMzNGOUFFRDk4Qjg0QTE2RkQ1NzhGMzc3QUZBMEQ5MjVENjZDNzQ2MjlDNzgxQ0Q2QUIwNDcwRjYxQzk5OEJFQzAyNUExQTcyMzM4MUI0QUU4RTlEOENENDY4NDc0N0YzQTQ0MEVDMgorRTZDRDFBQjcKKzE1NkRGNzI0MjU2RURCMUM1RUU0QTU0MDQzMkIKKzk3Q0Q3RjY5NUEwQ0FDRUE4MEYxRTVCNDVGODA0MzhCRTAyQzIxRjFENDJERkZBMkY0Q0ZGOTBCNkMwMEI0MDdFOTJCOUI2QzVEMzU1NTQ2NzFGMjIyMzdGMEIxRjk5M0ZBOUNBRDYyMEU1MDdDRDc0QzVEN0I1RTNGODREM0EzRENDMTgyODRFRDg3REZERERCNjU4OEZEQjVGMDA1RTIyQjE1MTI2QkY5NzUyQUUxRUY2MjY3MDZCRkMwMDM0OTlGOTg4RkEzRTMzOTkzCitCN0ZGQzVBMQorNkUwQ0FCMDg4MDk5OEJERUYwQkQ3MDg5MDEKKzAwMERFNjRGOUY3RTFGQzlENEQ1Rjg3MUJBOEEzOTI1RUZFODhEOUVEMjE4NTAwNzkxMkVERTI0Q0RDRjdDREE4QjlFQkIyMDE5RTBFQ0UwRjBEQ0RGMThGQ0NBM0Y1QjgxMzZFN0UzRkU4MjU4MEUxQkZENTA0MjZEMjM5NzE0NTBDQkQzNThDOEM5CitGQzNBNjA2MQorNEYxOTg5OTIwMEQyMjFFRDJCMERGRTUwMUEKK0JERUFCOTMyRDMzMTEwN0UzRDBDOUIzQjI5QjMyNzA5QjFFNEZGRTAzMDIyMzdEQUIyRDZDQkFBRDdFNEUwN0VBNzIxMTNDOTMwQUZBODJCMTBDRDg1NTEwOEQzQkFCRUVDN0NDMUIyRURCMTQzQzVENEQ5RDg5RjRBNUI0NTlBNjQ5QkJDQTIwRTkwRjlDMzBENTg4QUY0N0ZCRTRDQUZFRUIwQUZBRjk5QjBDOUU3NTkKK0M1RDcwRUQ0Cis3Qjg5NzlEOEY2MUZDMzg5RUU0RjkyQjBBOTY1CitCRUEzMUIxRTBDNTE2RjBBODk2NzU1RjNDMTc2RkRCRUE3MUY5NDA5NEE0QzJFNDVEMUFDMUFBQTUwN0RGOTJEQkZFOUVEQzMwNDE5NTFBMEY2M0MzNDE5MEVBREQ2RTlENTJBOEQwQzY3RDkwQzU5NEE2NUQ0RkY1RDQwQUZFQUNBMkRDNTU4OTgxQTdBMDU3RjZBOTQ3RjFFMkM0RjkyMDY2ODRCMjhCRkVFMEZDNEExMDlBQTVGQUZBNjIzMDg4QzVCNjEwMDlCMjg5ODAyMjNFODgwMzY3OUUxRkI2Njk3NDUyQUY3NjY3NjlGQ0ZBOAorODI1OTQwNkQKKzBEN0I5NjRCMDdDRTM5QTNEMTFBMTg4RkUxCiswQTgyNUMzODlCOEMxM0M1MDE3RTE1N0REMDhBRTNDQUFCRjJFM0E1QTY4RThCRjJFN0QyNTQ1QTgxNzUxNUE5MEE3NUVBRUZEMzI2RkFEQTJBNjhENUI4Q0E2MEY3N0Y5Q0UzM0ZFQzJFMTBCOUE2MEY3QkIzNDUyMDA2MTQxOEMzQTIzQTg2CiswRDBBRkUzNAorOUU5NjEzRUFGNzM2N0JEMTFFQjk2MTQ4QjgKKzcyMzJEMTRCRDU2Njc2OEIxQjhBMUMxNkYwMjY4OTI3M0U0QjJERDg2NTU5MzREMkRCMDg4REU4MTVBMDI4ODFFQzNFMzYzRUQ3MTlFRTcwNUFBOEJBRUUwOUI4Q0U0MkNFMjJBRTk4Q0U4NTk3QzExRjZCNzc4MzMwODM1QjAwOTNFRkNBQTI4RjQ1MTFCOTdFQzJCMjZCMDZCRkJCMjI5OTAzRUQ5ODkzQzRGQjkyOUJCRkVBCitEMkVEMTQ3NworMEQwMTAyOUU3MkVDNDI3MTM5MURGMjc4QzQKKzZBNEYyNkRFQTJCN0ZEQzFFQjM5ODFEOUI2RTEyOUMxMTA0MDMxQjA4NUI2RTA2RjgyQzg0NzkxRTE5QTVGMUY0M0QwODc3M0UyNkVCNzU2NURFNDBCQjQ3NEIyRTdCQTE1NDI3MEUyOUE0N0QxMTg5QzlENTFCRTM4QkM0MjY4QzE5QjYyNkQ3RjE4MDYyQzAzRTMyRDQ0NDNENDJDMTdGM0U3QzJCRjg5MzREQTFEQzg1NTlGODEKKzdEMDAxRDkzCitERTQ0Q0ZERUU1RTVBNjZFMUNCRTg4QjIwN0JECitFQUQ5QzAwNzNENDhCODRDCitBQkJEMUREMgorOTI5NkU3NDU0NUE5QjcwRjVCQUQzNEU0ODRERDFBQTI1RERGNjdBOEEwODQwOUJGMEYxMDE5Q0UwREUzRjhBOTBGM0EKK0M5RDYyQkQ0MEVBOTg4NTg2MTVFQjNBRkExMjcwNzRFOEMxNTc4MkIwQUQ5RUJBNURDMDQyQTkyRjI1NDJBRUE0MTNCRjhGMDZDN0YKK0EyOTZGNzgzN0ZGRjlFMTAzQzBFQjhCNDg0QTcxM0VCNDBDQjU5QjM2MDgwRTk0NjA5OUYyNworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoaQorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGkKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hpIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA5NyBwdXQKK2R1cCAyIC9DMDA5OSBwdXQKK2R1cCAzIC9DMDEwMCBwdXQKK2R1cCA0IC9DMDEwMSBwdXQKK2R1cCA1IC9DMDEwNSBwdXQKK2R1cCA2IC9DMDEwOCBwdXQKK2R1cCA3IC9DMDExMiBwdXQKK2R1cCA4IC9DMDExNSBwdXQKK2R1cCA5IC9DMDExNiBwdXQKK2R1cCAxMCAvQzAxMjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE0NCAtMjI3IDUxMyA3MjhdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNUQxMzA5RDE3RjMxQjFGOUMwMEMzNzJFRUU2MUJEQ0FBOTQKKzcyMkVEN0Y1RkExOUIxOERFNTMxNDRCM0IxOUQKKzM2RkYyOTBCQzFCNjVBRUIyOUQ4MTdBQjJEODQzNEYyRjkyQjMzRDAwQ0Y1MTBFNkQyMEUwMEExNTE0OTlBODA5QjgzMkYyNDFBNUFBNTE3MEMxQzkzRkY4NTUyMDVDQjlFMzZFMTAwN0EwNjZENzc3NTkyMTc2ODVGQkIwQzk1N0IyNzgzNUNCOEIzOTA2QTVGOUQ2OTExNEQ3Qzc0MUFDNUJEODI3OEQwRTVDMUQzN0Y3OTYzMDhCMDRGNTUxRjcwMEU5MUNBMkU1RDhBQ0ZFNjBGNjEyQjI1MkU5QjlDREEzOTUwNDA4MThBNTczNjE1QjFENDlEOTVGMgorQTU2RgorRkZENDk3NjM4OTFCNzFBREJFN0E2NThFRkMKKzZFMzcxN0IxCitGRkU4NzkwMjY1RUY5QzZBRjNENEJERTI4OAorODZFOUNDNzFENjk2MDIzNTRFQzU5NUI5MzBDOUU2OUQwNURFOTAxM0UxMEJEMUJGNEU3MEFBRUFFMTNBQzg1MDdBOUM4NjFCRjk0RDZGREQxNkE1RTU4RjRERTE5MDU1QTlBNjc1NkYyRkYwMjlBOTk2NjBBQ0Q0MzA2MThBMEJBMjczRjhBM0U4QzhBRkFEMTRBMDUwMkY1RDg5RkZERkE4RjA4NkY1NTU5MkQxOEM5MjRCNTlGRDFDNUE0QUVCCitGRDFCRUIwNAorQTlFNDQ1QTE5MzdGNTg2NUQ5Mjc0MUJCMkE1RgorNzdFMjgxRkY1MzdGNUZGNzM1NUVENjcwNTAwNjk4OTQyNTE3ODYzNkYxNjJBN0Q1MEZBMzg2MjhEMjdBREQ0QUY4REQzNjIwRjRGMzZDQzAzNEU3NkZDN0JDMDU1QkVFRDEwOUVGRjBEQzg2NjVGQzc5N0Q4RDQ4MkYzMjc5NDJGRDM5MzRDN0Q5OEY3MjM5MDExMTNEOERFRTEwMUQ3RjM4OEFCMjNCOUE4RjBGNEY5NDg2MUU4MjFBRDc2NDhFRDM4Njc3MTdBMkVEQTkzOEI4NkNCMzI4MDdENzRGMzNDRjU5NDc3RDRCOUJDMzFDOTUzQkRDNTc4NjYzCis3OTM5Cis5MkVERTNGMUIwMDdEMTg5OUM0NDRGNzc4MDhBQ0M5Q0Y0RTNDQkM4RDJDRjA2OEJDNzkzQzVGNDNGMkM4RTg2MkMyRDZEMjlGREU0OTNEOEMzNTMwQTkxQzYxN0EwMjIKKzgzMjI0QzA0Cis2NkY3MUMzN0ZCNUNFQjk1NzM3MjczOEVCMTJECitBMTkwRjdCN0RFOTk4OUU3NjExMTlGOUVFMTJGQjhDNjc0QUIzQzAzNjQzNzY3QkNEMEY4NzI0NkI1MkNDRDYxMEQ3NzRGMzA1N0FERDdGNkIxNEUwMDVDRDFCMEE3MDRFMEZDMjVBQzk3ODIyMjVDMzY4QzBEREUzODg0REY0MzQ3NURFRkU3RkRDMjJCODc4RjFBN0QxMzU1MTU4MTA5NEJBNzU5Q0FCODM5MUJGREVBN0EyNUJCMjY4NUNDQzAwOEM1MUMxOTQ3CisxMDc5NUQwMAorQzc0OTg0ODdBM0Q1MDQ4RDM2RDUwM0NDRUQ4OAorNTg0MUVDRTdFNUFBNTZCOUJEMEZDNzA5Mjg1N0JDN0UxNTVENjQ5NzZGRjFEQUFERDlFMEYyQjc0M0U0ODU1NTg3MDY0RTQyOUM2QTc1N0IxRTRGMzZBNDNFREE4NzlGMDlFMTc1MkI3Rjg2NEQ5RjEyMjcyMzRDQzJCNzUzRTEwRjdEMUZBOTIxOEI0NjdFOEUwQ0I1QThCNUJFMDkzNURCQTI0MTBEOUZGMzgzNEVDMThDRjMzQkJDODFBMkZCQkMyRUExMTM1N0E2QTZCNDFFQ0FCM0UxRDE5ODhBMjZFNjY0NTk4RUFCOTM4RDQ1NUYKKzBGRjU3QjM0CitBN0Y2NTUyOUQyMTE3M0U0QTc2MkNDQTkxQTE3CiszNkQ0NTk1MDJDNTBBMEQyOTUzMDNCMUNDNkE0NDAzQjU5OUM4MjFDNTExNzI4NURBQzcxMzMyNjQxQzEzM0MzQzk0Njg0ODI3RkU1NjM0Q0VENUExRDEzM0M0MTk1RTM0OEExQjQ2ODE2NEIwN0JBMDlEOUFGODJGRjdGMzYwRjU0RDA2RjcwREFCNjMzMzYzOTNCRDkwQkI1QTZBNEMwMDhEQkQyMEQ0MzA2OEI0Mjk1QTU4NUU5RTNEMURFMkMwRThBQTNEQzdGCitCMzBGRTg2OAorQTcyQUJEOTVCOTZBRjNGNTJBQzBFMzU2MUJERgorRjg5MTM2MzhBODRFOEFFRDJEQUU3NTAyQzhFNThGREJCNkVGODAwOTk1QzU2N0M1MkZCRTNBMEVGRTM0RDNFRkNGOUUwMTZBRkVEMTlFQUYzOTg4M0UwNUIwQzNDNTQ2QkU2MzI0MkU0RTY0ODkzNjIwNThBN0FDQURCM0E5MTRDQkFBOTk5REI5NzYxNUJDMUNENjdCNzlBRjNDRkNBNjBCNTJDRDA1NDgwNjkwN0RBQ0I5QTdDQzlBRjNDQTJDQUI0ODczNDRCQzhGN0RBRTNEMTEwNERBRjc1MjA5QzM2M0JBREU2RDVFMEMzRjUwODYzREFCMEIyMTdDCisyNkVGCisxMEJBMDE1Rjk4RjRDNEQzMzYzN0M5MDdEQkQyQzQwNjVGQTI2MDBDNURFN0VDRkEyNzA2ODFCMTJENzc2N0E0MDQ4NTk0OUY2RjRGRUNBMTFENzYKK0E2NEY4RDdBCisxREM0MTA0MzA2RkM5MkNCNDBGMzM1OTRBRkU4CiszQzYwNTEwMkExN0EzQjFBQkNFM0FEREFBMEE3NEM3RUZENTc1MzgwQkQxOEU4QUE1N0NENzE1NDUwRjk5M0I1RDlEQjQzNTc3MEQxNkFCQ0VGMjdFQjhCMjg1RTZFRDQxQ0Q3NzA3QzQwMDBGQ0ZBNUMxQTg1REZCMDA4MTlENjEyODY2RTNDOTM2RkYwMkU0MEI4ODA4Mjc0NjhBMzM1RkI3RkFDRUVENzcwMUFDMDZCNDUyMUI0QUEwRERDMDM5RjhBQzdDNzJBMDNEM0ZEMjBCNTI3OTZDNEZERUZENjkyRUVCNjZDRUI5OQorMkRFM0EyMkQKK0QzMDQ4OUE2RkEyOTk3QURFMDhGNTFGNTFGCis3MzU4Q0Y0QjBFRUQ5Mjk0NDM2QUFBNEM2MDlEMkFFMURENDMzNUM0Q0U3NkE0NkNBMEE5OEZFQjg2NEMzNTBENjdGNTE2OEQ0MDZENTM5N0JDN0M5RDI2QTNEQ0MzNUIzOTQ5MzE1Qjc4NjYzQ0ZEMDg1RjE2QTVDREM3NzFBNEVDRTNCRDZCNDA3NzE3QzhFODQwNDQ4MTJCRTU4OUE2NTVBQTA2QkNCN0NCMDgKKzNDOTIyQjM3Cis5N0Q5MTFENkVEQzQ4QUQyQzU0MTk4MjZEOUNDCitENzYzRjVCQUY0NEVEQUFEQ0IzMjAxMDEyMDEyRDYxODJFMzg0QTZDRTkxMEJBQ0JGOTlDRTUwODI1QjlBM0M2NjkwNjczN0RCMDFEQUI1MDczMUJBRUExMzAzNzUyNEIwMTIxNDQyNzM2Rjk1MDE0QkJBQUREMzMyNEM5QkREQThBRUQ4NkU4MDJBNTgxOTE5MEQ1QjI5MjYzOEFERTU3MUY3NTBEMEIwMDJDRTFGQzc3NjI3QTE2MjU2QTlCRDQzMjcwRjI4NUZENDcxRTIxMTBCQ0I0OEFFRjZBRjQ3OUY3NEE3MEUyMjQ5OUFDRkQ3MURGMjBBODM0OTIKK0MzREYKKzk4OTU0NzVEOTJGMDM3NDE1NAorOTYxQUE2NjEKKzZENEYyRDA4NkJCNDYxRkRBREY1MjU4NEY2REEKKzk5MjNBQjc0OTlGQjU0MzIKKzdFNjgyQTMxCis5RkE0RkYzRTJEQTVBOTU4MEVFQjAzMDQ4QUQ5NjMxMUNDNzY1RTFFMjk0QUZFMTU1NTRDMUZGQ0MwODBCQUUzN0Q0QQorN0IyN0UzN0I0Njg2MjQyMzk4NUZCOUQ5NTU1RUJBN0I5N0ZGMTlGM0MyRjY4RjlDOTYwMEZGMTJBOTczQUJCM0UxMEI4RjM4REU0OQorN0YwOERBMjM2MEZCNUYxRUQxODIyNjEzQ0I2OUI0MzQ4NkY4N0YxNzA4MEZERTUyOTAyOTU1CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorZHVwIDIgL0MwMDgzIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzUwIDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzVERDg5QTg3OTBFQUQxOEVGQzc3RDNGRkFFODREQTVECiszMTIwNzRDNEQ1NDJERDVCRUM3MDk2OEY3NURDCisyNTBDMzk1NEU4REZCOEY0ODU3QkZFRjA5MkVCQTQ5RDI0ODk1NUE4NThDNUE1RjU1RjdCOTg3RUEwNkVDODQyOEQ5MzkwODRDODhGNUIxNTdEODBBQjJENzA2QTdFQjkzNkMzNDI5MTczNTg4RDJBQkE2QTI3REM5NEMwQjQ4NEYzMTY2NjM1NTU3OTcwMDRDQkZBNzlFN0I4NTQ1QzgxMEJGOUNBOTJGNjFBQkQ5RTIwMkVEOUU5NTk0M0RGN0E1QUJCRjNDMjBCREUzQjZFRUM5QzBCOTVBNEM5QzFEMzhBQTdDNjc4NkFEQkJCNzlFRTE4M0JEREYxOTQKKzE5NTMKKzY0NDlEQkI3QUU0N0U5RkM2RjNBQkYxRENEN0ExRTI3NEU4N0RBRTkKK0EyMjczN0ZBCis2NDA0QjIxNUEyN0JGQUY2RDBCNTBFOTREMgorMDcxMjNBNUJCMzgwQzg2REI1MDMzRUU3NDMxODFCQkZDQzAzNTY1NzFGNzI5N0EyMDdDMjNGMUU1ODgyNTdGREVGNURGMjI5CitDQUJGM0IzQworOUUwOTg4QzYzQjM1OEFDQTRCNEZFQjAzM0RGQgorRTJFMzg3QTA2QTIzQ0FDQQorOEUxMDRCOTAKK0RGREJENDFGMDYzRThBOERGQTBBQkE0REQ3NDQzMDE1NTI2QUU1MjU1MzE1NTk3Nzc5RTA0RDg1ODQ5MzA1RUE0RjMxCis1Q0RBRDA2RTU4NDFFMUI4MDc0NzYwQzk5NzAyQjhDRjQ0M0Q3NTIxNzREOTk2Qzk0RTY5MDc5N0E5NTg3Q0Y1MDE3REVCMTFFNUZFCiswMjU3NkU5RTA4QjM5Njg4QkJFOTlBMTg2QUE4RkM3RTIyMkY1RTUyQjI5QTdGREYzNzlFRjUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3N5bTpjbGFzMTIgMTIuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyaSAxMi4wMCAvUFNPd3N0ZHV0Y2hpIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTRiIDE0LjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MjIyZTNjMzgyZTNhMmYxNDAxMTcwMTE4MmUzNjJjMzEzNTJhM2EzMzAxMmYzNzNhMDEyMTJlMmEzYjNkM2EzMjM2MzAwMTIyMmUzYzNmMzczYTMzMDEyMz4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyZTNhMmYzNzNhMzUyYTM2MmMyZT4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MGQ+IDk0MzQgMTMzODUgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyNjcgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI2NyA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjY3IDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI2NyAzIDcxMzMgMzIgcword3N0OmR1dGNoMTRiIFNGCis8MDkwZjBkMTcxMTE0MTM+IDEyNzEgMTQ1OCAwIDIwNTUgLTEgcworPDAwMDMwMjAwMDYxMzE3MTUxNDBlMTgwZDE3MTExNDEzPiAyMDU1IDE0NTggMiAzNzE4IDAgcword3N0OmR1dGNoMTIgU0YKKzwyMjJlM2MzODJlM2EyZjAwMzIzYjAwMmE+IDEyNzEgMjAyMSAyIDIzNTAgMCBzCis8MDAyYjJlMzYyYzMxMzUyYTNhMzM+IDIzNTAgMjAyMSAxIDM0MjcgMCBzCis8MDAzYzMxMmEzYzAwMmMyYTM2MDAyYjJlMDAzZDNiMmUyZDAwM2MzNzAwMzUyZTJhM2IzZDNhMmUwMDNlMmEzYTMyMzczZDNiMDAyYTNiMzgyZTJjM2MzYjAwMzcyZjAwMzYyZTNjM2YzNzNhMzMzMjM2MzAwMDM4MmUzYTJmMzczYT4gMzQyNyAyMDIxIDExIDk0NjEgMCBzCis8NDQ+IDk0NjEgMjAyMSAwIDk1MzEgLTEgcworPDM1MmEzNjJjMmUwOD4gMTI3MSAyMjY2IDAgMTkxNyAtMSBzCis8MDAxZjNjM2IwMDM4M2EzMjM1MmEzYTQxMDAyZjM3MmMzZDNiMDAzMjNiMDAzNzM2MDAyYjNkMzQzMzAwMmQyYTNjMmEwMDNjM2EyYTM2M2IyZjJlM2EwMDJhMzYyZDAwM2EyZTM5M2QyZTNiM2MwOTNhMmUzYjM4MzczNjNiMmUwMDM4MmUzYTJmMzczYTM1MmEzNjJjMmUwMDNkM2IzMjM2MzAwMDJlMzI+IDE5MTcgMjI2NiAxMyA5NDYxIDAgcworPDQ0PiA5NDYxIDIyNjYgMCA5NTMxIC0xIHMKKzwzYzMxMmUzYT4gMTI3MSAyNTEwIDAgMTY0MiAtMSBzCis8MDAyNTE5MjMwMDM3M2EwMDI2MWEyMzAwMmEzNjJkMDAzYzMxMmUwMDE4MmUzYTMzMmUzNDJlNDEwMDI0MzcyYzMzMmUzYzNiMDAzMjM2M2MyZTNhMmYyYTJjMmUwODAwMjUzMTJlM2EyZTAwMmEzYTJlMDAzNzM4M2MzMjM3MzYyYTM0MDAzYzJlM2IzYzNiMDAyYTNlMmEzMjM0MmEyYjM0MmUwMDNjMzc+IDE2NDIgMjUxMCAxNCA5NTMxIDAgcworPDM1MmUyYTNiM2QzYTJlPiAxMjcxIDI3NTUgMCAyMDM4IC0xIHMKKzwwMDNjMzEyZTAwMzgyZTNhMmYzNzNhMzUyYTM2MmMyZTAwMzcyZjAwMWEyMDIzMWYwNjAwMjYzNjMyNDAwMDFhMzczNTJhMzIzNjAwMjQzNzJjMzMyZTNjM2IwNjAwM2MzMTJlMDAxYz4gMjAzOCAyNzU1IDkgNjg1MiAwIHMKKzwzNzNhMmUwMDE3PiA2ODQ0IDI3NTUgMSA3MzM4IDAgcworPDI1MjE+IDczMTggMjc1NSAwIDc2NTggLTEgcworPDAwMTcyMzFmMDAyYTM2MmQwMDNjMzEyZTAwMWUyMzAwMWUzMjIzPiA3NjU4IDI3NTUgNSA5NDYxIDAgcworPDQ0PiA5NDYxIDI3NTUgMCA5NTMxIC0xIHMKKzwyMzFmPiAxMjcxIDMwMDAgMCAxNDgwIC0xIHMKKzwwMDIwMjAxNzAwMzIzNjNjMmUzYTJmMmEyYzJlMDg+IDE0ODAgMzAwMCAyIDI4NzYgMCBzCis8MjUzMTMyM2I+IDEyNzEgMzMyOSAwIDE2NjUgLTEgcworPDAwM2MzNzM3MzQ+IDE2NjUgMzMyOSAxIDIwNjQgMCBzCis8MDAzMjNiMDAzNTJhMzIzNjNjMmEzMjM2MmUyZDAwMmEzNjJkMDAzMjM2MmYzNzNhMzUyYTM0MzQ0MTAwM2IzZDM4MzgzNzNhM2MyZTJkMDAyYjQxMDAzYzMxMmUwMDFmMjIxYTAwMjIyZTNjM2YzNzNhMzMzMjM2MzAwMDIzPiAyMDY0IDMzMjkgMTAgNzkwOSAwIHMKKzwyZTNhMmYzNzNhMzUyYTM2MmMyZTAwMjU+IDc5MDEgMzMyOSAxIDkxMjUgMCBzCis8MmUyYTM1MDg+IDkwOTQgMzMyOSAwIDk1MzEgLTEgcworPDFmM2M+IDEyNzEgMzU3NCAwIDE0MjEgLTEgcworPDAwMzIzYjAwPiAxNDIxIDM1NzQgMiAxNjYyIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDcwODBhPiAxNjYyIDM1NzQgMCAyMTE4IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAzYjNkMzgzODM3M2EzYzJlMmQwMDNlMzIyYTAwMmEzNjQxMDAzNzJmMDAzYzMxMmU+IDIxMTggMzU3NCA1IDQzNDAgMCBzCis8MDAzNjM3M2EzNTJhMzQwMDFlMmUzZjM0MmUzYzNjMDcyMz4gNDM0MCAzNTc0IDIgNjExOSAwIHMKKzwyYTJjMzMyYTNhMmQwMDNiM2QzODM4MzczYTNjMDAyYzMxMmEzNjM2MmUzNDNiMDgwMDI4PiA2MTExIDM1NzQgMyA4NTcyIDAgcworPDM3M2QwMDJhM2EyZTAwMmYzYTJlMmU+IDg1NDYgMzU3NCAyIDk1MzEgMCBzCis8M2MzNz4gMTI3MSAzODE5IDAgMTQ1NiAtMSBzCis8MDAzNTJhMzMyZTAwMmUzNjMxMmEzNjJjMmUzNTJlMzYzYzNiMDAyYTM2MmQwMDM1MzcyZDMyMmYzMjJjMmEzYzMyMzczNjNiMDAzYzM3MDAzYzMxMzIzYjAwM2MzNzM3MzQwOD4gMTQ1NiAzODE5IDcgNjExMCAwIHMKKzwyNTMxMzIzYjAwMmQzNzJjM2QzNTJlMzYzYzAwMzIzYjAwMzczYTMwMmEzNjMyNDIyZTJkMDAwNDM0MzczNzNiMmUzNDQxMDUwMDMyMzYzYzM3MDAzYjJlM2UyZTNhMmEzNDAwM2IyZTJjM2MzMjM3MzYzYjAwMmEzYjAwMmYzNzM0MzQzNzNmM2IxND4gMTI3MSA0MTQ3IDkgNzQ2NCAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA0NDc2IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDI0MmUyYzNjMzIzNzM2MDAwYjA4MDAzMjNiMDAzZjMxMmEzYzAwNDEzNzNkMDAyYTNhMmUwMDNhMmUyYTJkMzIzNjMwMDAzYTMyMzAzMTNjMDAzNjM3M2YwOD4gMTU4OSA0NDc2IDggNTU3NCAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA0ODA1IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDI0MmUyYzNjMzIzNzM2PiAxNTg5IDQ4MDUgMCAyMjYyIC0xIHMKKzwwMDBjMDgwMDJkMmUzYjJjM2EzMjJiMmUzYjAwMzEzNzNmPiAyMjYyIDQ4MDUgMyAzNzc2IDAgcworPDAwM2MzNzAwMzAyZTNjMDAzYzMxMmUwMDM2MmUzYzM4MmUzYTJmMDAyYjMyM2MzYjAwMmEzNjJkMDAzMTM3M2YwMDNjMzcwMDNiMmUzYzA3M2QzODAwNDEzNzNkM2EwMDNiNDEzYjNjMmUzNTAwM2MzNzAwM2EzZDM2PiAzNzc2IDQ4MDUgMTMgOTIxMyAwIHMKKzwzNjJlM2MzODJlM2EyZjA4PiAxNTg5IDUwNTAgMCAyMzA0IC0xIHMKKzwwMDFmM2MwMDJhMzQzYjM3MDAyZDJlM2IyYzNhMzIyYjJlM2IwMDJhMDAzYjMyMzUzODM0MmUwMDNmMmE0MTAwM2MzNzAwM2UyZTNhMzIyZjQxMDAzYzMxMmEzYzAwM2MzMTJlMDAzMjM2M2IzYzJhMzQzNDJhM2MzMjM3MzYwMDMxMmEzYjAwMmIyZTJlMzYwMDNiM2QyYzJjMmUzYjNiMmYzZDM0MDg+IDIzMDQgNTA1MCAxNCA5MjEzIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDUzNzggMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjQyZTJjM2MzMjM3MzY+IDE1ODkgNTM3OCAwIDIyNjIgLTEgcworPDAwMGQwODAwMmQyZTNiMmMzYTMyMmIyZTNiMDAzYzMxMmUwMDJkMmUzYjMyMzAzNjAwMzcyZjAwMzYyZTNjMzgyZTNhMmYwOD4gMjI2MiA1Mzc4IDYgNTM0MiAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA1NzA3IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDI0MmUyYzNjMzIzNzM2PiAxNTg5IDU3MDcgMCAyMjYyIC0xIHMKKzwwMDBlMDgwMDJkMmUzYjJjM2EzMjJiMmUzYjAwMzYyZTNjMzgyZTNhMmY+IDIyNjIgNTcwNyAzIDQwNDggMCBzCis8MDMzYjAwMmIzZDM0MzMwMDJkMmEzYzJhPiA0MDYwIDU3MDcgMiA1MDc0IDAgcworPDAwM2MzYTJhMzYzYjJmMmUzYTAwM2MyZTNiM2MzYjAwMmEzNjJkMDAzYzMxMmUzMjNhMDAyYzM3MzUzNTJhMzYyZDAwMzQzMjM2MmUwMDM3MzgzYzMyMzczNjNiMDg+IDUwNzQgNTcwNyA3IDkyMTMgMCBzCitzeW06Y2xhczEyIFNGCis8MDI+IDEyNzEgNjAzNSAwIDEzNTkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyNDJlMmMzYzMyMzczNj4gMTU4OSA2MDM1IDAgMjI2MiAtMSBzCis8MDAwZjA4MDAyZDJlM2IyYzNhMzIyYjJlM2IwMDM2MmUzYzM4MmUzYTJmPiAyMjYyIDYwMzUgMyA0MDc1IDAgcworPDAzM2IwMDNhMmUzOTNkMmUzYjNjMDczYTJlM2IzODM3MzYzYjJlMDAzYzJlM2IzYzNiMDAyYTM2MmQwMDNjMzEyZTMyM2EwMDJjMzczNTM1MmEzNjJkMDAzNzM4M2MzMjM3MzYzYjA4PiA0MDg3IDYwMzUgNiA4OTc5IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDYzNjQgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjQyZTJjM2MzMjM3MzY+IDE1ODkgNjM2NCAwIDIyNjIgLTEgcworPDAwMTAwODAwMmQyZTNiMmMzYTMyMmIyZTNiMDAzYjM3MzUyZT4gMjI2MiA2MzY0IDMgMzgxNyAwIHMKKzwwMDM3MmYwMDNjMzEyZTAwM2IzZDM4MzgzNzNhM2MzMjM2MzAwMDNjMmUzYjNjMDAzYzQxMzgyZTNiMDAzNzJmMDAzNjJlM2MzODJlM2EyZjAwMmEzNjJkMDAzYzMxMmUzMjNhMDAyYzM3MzUzNTJhMzYyZDAwMzQzMjM2MmU+IDM4MTcgNjM2NCAxMSA5MjEzIDAgcworPDM3MzgzYzMyMzczNjNiMDg+IDE1ODkgNjYwOSAwIDIzMTQgLTEgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDY5MzggMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjQyZTJjM2MzMjM3MzY+IDE1ODkgNjkzOCAwIDIyNjIgLTEgcworPDAwMTEwODAwMzgzYTM3M2UzMjJkMmUzYjAwMmEwMDJkMmUzYjJjM2EzMjM4M2MzMjM3MzYwMDM3MmYwMDNjMzEyZTAwMzAzNDM3MmIyYTM0MDAyYzM3MzUzNTJhMzYyZDA3MzQzMjM2MmUwMDM3MzgzYzMyMzczNjNiMDAyZjM3M2EwMDM2MmUzYzM4MmUzYTJmMDg+IDIyNjIgNjkzOCAxMSA4OTc4IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDcyNjYgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjQyZTJjM2MzMjM3MzYwMDEyMDgwMDM4M2EzNzNlMzIyZDJlM2IwMDNiMzczNTJlMDAyZTQwMmEzNTM4MzQyZTNiMDAzNzJmMDAzNjJlM2MzODJlM2EyZjAwM2QzYjJhMzAyZTA4PiAxNTg5IDcyNjYgNyA2Mjg2IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDc1OTUgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjQyZTJjM2MzMjM3MzYwMDEzMDgwMDM0MzIzYjNjM2IwMDNjMzEyZTAwMmMzMTJhMzYzMDJlM2IwMDJhMzYyZDAwMmYzMjQwMmUzYjAwMzIzNjAwM2MzMTMyM2IwMDNhMmUzZTMyM2IzMjM3MzYwMDM3MmYwMDM2MmUzYzM4MmUzYTJmMDg+IDE1ODkgNzU5NSAxMSA3MjE1IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDc5MjQgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjQyZTJjM2MzMjM3MzYwMDBiMGEwODAwMzQzMjNiM2MzYjAwM2IyZTNlMmUzYTJhMzQwMDMzMzYzNzNmMzYwMDM4M2EzNzJiMzQyZTM1M2IwMDNmMzIzYzMxMDAzYzMxMzIzYjAwM2EyZTNlMzIzYjMyMzczNjAwMzcyZjAwMzYyZTNjMzgyZTNhMmYwOD4gMTU4OSA3OTI0IDEwIDc4MDIgMCBzCitzeW06Y2xhczEyIFNGCis8MDI+IDEyNzEgODI1MiAwIDEzNTkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyNDJlMmMzYzMyMzczNjAwMGIwYjA4MDAzODNhMzczZTMyMmQyZTNiMDAzYjM3MzUyZTAwM2MzYTM3M2QyYjM0MmUzYjMxMzczNzNjMzIzNjMwMDAyYTNiM2IzMjNiM2MyYTM2MmMyZTA4PiAxNTg5IDgyNTIgNSA2NDE3IDAgcworPDI3PiAxMjcxIDg1ODEgMCAxNDgwIC0xIHMKKzwyZTAwM2MzMTJhMzYzMzAwNDEzNzNkMDAzMjM2MDAyYTJkM2UyYTM2MmMyZTAwMmYzNzNhMDA0MTM3M2QzYTAwMmMzNzM1MzUyZTM2M2MzYjA2MDAyYTM2MmQwMDMxMzczODJlMDAzYzMxMmEzYzAwNDEzNzNkMDAyZjMyMzYyZDAwM2MzMTMyM2IwMDNjMzczNzM0MDAzZDNiMmUyZjNkMzQwOD4gMTQ2MyA4NTgxIDE1IDg4OTAgMCBzCis8MjUzMTJlMDAzNTJhMzIzNjNjMmEzMjM2MmUzYTNiMDAzNzJmMDAzNjJlM2MzODJlM2EyZjA4PiAxMjcxIDg5MTAgMyAzNzU5IDAgcworPDI5MjkxZTM3M2YwMDJmMmEzYjNjMDAzMjNiMDAzMjNjMTYwMDFmM2MwMzNiMDAzYjM3MDAyZjJhM2IzYzA2MDAzYzMxMmEzYzAwMDgwODA4MDIwMDE1MDcwNT4gMTI3MSA5MjM4IDkgNDc3NCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA0MTQxMzE5MGYxMzE3MTExNDEzMTYwMDBiMTMwZTAwMDUwZjEwMTExMzExMTcxMTE0MTMxNj4gMTI3MSA5NjgyIDIgMzg3NyAwIHMKK3dzdDpkdXRjaDEyIFNGCis8Mjg+IDEyNzEgMTAwNzQgMCAxNDMzIC0xIHMKKzwzNzNkPiAxNDA3IDEwMDc0IDAgMTYzOSAtMSBzCis8MDAzNTJhNDEwMDM2MzczYzAwMmIyZTAwMmYyYTM1MzIzNDMyMmEzYTAwM2YzMjNjMzEwMDNiMzczNTJlMDAzNzJmMDAzYzMxMmUwMDJjMzczNjNlMmUzNjNjMzIzNzM2M2IwMDJhMzYyZDAwMmQyZTJmMzIzNjMyM2MzMjM3MzYzYjAwM2QzYjJlMmQwMDJiNDEwMDNjMzEzMjNiMDAyZDM3MmMzZDM1MmUzNjNjMDg+IDE2MzkgMTAwNzQgMTUgOTUzMSAwIHMKKzwxZDJlMzYyZTNhMmEzNDM0NDEwNj4gMTI3MSAxMDMxOCAwIDIyMTkgLTEgcworPDAwMzIzYzJlMzUzYjAwMzcyZjAwMzgyYTNhM2MzMjJjM2QzNDJhM2EwMDMyMzUzODM3M2EzYzJhMzYyYzJlMDYwMDJjMzczNTM1MmEzNjJkMDAzNDMyMzYyZTAwMzczODNjMzIzNzM2M2IwNjAwMmEzNjJkMDAyYzM3MzUzNTJhMzYyZDNiPiAyMjE5IDEwMzE4IDkgODY1MCAwIHMKKzwwMDNmMzIzNDM0MDAyYjJlMDAzMjM2PiA4NjUwIDEwMzE4IDMgOTUzMSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBjMTQxMjBlMTAwYjBkMGY+IDEyNzEgMTA1NjMgMCAyMDM1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAzYzQxMzgyZTA4MDAxYzMyMzQyZTM2MmEzNTJlM2IwMDJhMzYyZDAwMmMzNzM1MzUyYTM2MmQwMDM0MzIzNjJlMDAzMjNjMmUzNTNiMDAzYTJlMzkzZDMyM2EzMjM2MzAwMDNkM2IyZTNhMDAzYjNkMmIzYjNjMzIzYzNkM2MzMjM3MzYwMDNmMzIzNDM0MDAyYTM4MzgyZTJhM2EwMDMyMzY+IDIwMzUgMTA1NjMgMTIgOTUzMSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA1MDkwMTA2MDUwMjA1MGEwNDAzPiAxMjcxIDEwODA4IDAgMjA0MSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwM2M0MTM4MmUwOD4gMjA0MSAxMDgwOCAxIDI1MzIgMCBzCis8MTcwMD4gMTI3MSAxMTEzNyAxIDE0ODggMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwODA1MGEwNDA4MDcwNDAyPiAxNDg4IDExMTM3IDAgMjE2NyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMzIzYjAwMmEwMDM3MzYyZTAwMzczYTAwM2MzZjM3MDAzMjNjMmUzNTAwMzQzMjNiM2MwMDM4MmEzYjNiMmUyZDAwM2YzMjNjMzEwMDJhMDAyYzM3MzUzNTJhMzYyZDAwMzQzMjM2MmUwMDM3MzgzYzMyMzczNjAwM2MzMTJhM2MwMDJjMmEzNjAwM2IyZTNjMDAzYzMxMmUwMDNlMmEzNDNkMmU+IDIxNjcgMTExMzcgMTggOTUzMSAwIHMKKzwzNzJmPiAxMjcxIDExMzgyIDAgMTQ1NyAtMSBzCis8MDAzNzM2MmUwMDM3M2EwMDNjM2YzNzAwMzYyZTNjMzgyZTNhMmYwMDM4MmEzYTJhMzUyZTNjMmUzYTNiMDgwMDAwMWYyZjAwNDEzNzNkMDAzZjMyM2IzMTAwM2MzNzAwM2IyZTNjMDAyYjM3M2MzMTAwMzgyYTNhMmEzNTJlM2MyZTNhM2IwMDNjMzcwMDNiMmUzODJhM2EyYTNjMmUwMDNlMmEzNDNkMmUzYjA2MDAzMjNjMmUzNTNiPiAxNDU3IDExMzgyIDE3IDk1MzEgMCBzCis8M2IzMTM3M2QzNDJkPiAxMjcxIDExNjI3IDAgMTg3NCAtMSBzCis8MDAyYjJlMDAzYjJlMzgyYTNhMmEzYzJlMmQwMDJiNDEwMDJhMDAyYzM3MzUzNTJhMDAwNzAwMWIzMDAwMjkyOTM4MmEzYTM1MGIwNjM4MmEzYTM1MGMwMjA4MDAxZjJmMDA0MTM3M2QwMDNmMzIzYjMxMDAzYzM3MDAzYjJlM2MwMDNjMzEyZTAwMmYzMjNhM2IzYzAwMzgyYTNhMmEzNTJlM2MyZTNhPiAxODc0IDExNjI3IDE2IDk1MzEgMCBzCis8M2YzMjNjMzEzNzNkM2MwMDJhMzQzYzJlM2EzMjM2MzAwMDNjMzEyZTAwM2UyYTM0M2QyZTAwMzcyZjAwM2MzMTJlMDAzYjJlMmMzNzM2MmQwNjAwNDEzNzNkMDAzYjMxMzczZDM0MmQwMDJmMzczNDM0MzczZjAwM2MzMTJlMDAyZjMyM2EzYjNjMDAzMjNjMmUzNTAwM2YzMjNjMzEwMDJhMDAyYzM3MzUzNTJhMDAwNzAwMWIzMD4gMTI3MSAxMTg3MSAxNyA5NTMxIDAgcworPDI5MjkzODJhM2EzNTBiMDYwMjA4PiAxMjcxIDEyMTE2IDAgMjE2NCAtMSBzCis8MDAyMDMyMzMyZTNmMzIzYjJlMDYwMDM4M2EyZTJjMmUyZDJlMDAzYzMxMmUwMDMyM2MyZTM1MDAzZjMyM2MzMTAwMmEwMDJjMzczNTM1MmEwMDMyMmYwMDQxMzczZDAwM2YzMjNiMzEwMDNjMzcwMDNiMmUzYzAwMzczNjM0NDEwMDNjMzEyZTAwM2IyZTJjMzczNjJkMDAzODJhM2EyYTM1MmU+IDIxNjQgMTIxMTYgMTYgOTQ2MSAwIHMKKzw0ND4gOTQ2MSAxMjExNiAwIDk1MzEgLTEgcworPDNjMmUzYT4gMTI3MSAxMjM2MSAwIDE1MjYgLTEgcworPDAwMDcwMDFiMzAwMDQzMDYzODJhM2EzNTBjMDIwODAwMTczNjAwMzIzYzJlMzUwMDNmMzIzYzMxMzczZDNjPiAxNTI2IDEyMzYxIDYgNDUxMiAwIHMKKzwwMDJhMDAyYzM3MzUzNTJhMDAzZjMyMzQzNDAwM2IyZTNjMDAyYjM3M2MzMTAwMzgyYTNhMmEzNTJlM2MyZTNhM2IwODAwMjUzMTMyM2IwMDM0MmEzYjNjMDAzNTM3MmQyZTAwMzIzYjAwM2MzMTJlPiA0NTEyIDEyMzYxIDExIDk1MzEgMCBzCis8MzczNjJlPiAxMjcxIDEyNjA2IDAgMTYwOCAtMSBzCis8MDAzNTM3M2IzYzAwMmYzYTJlMzkzZDJlMzYzYzM0NDEwMDNkM2IyZTJkMDg+IDE2MDggMTI2MDYgMyAzNjA4IDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDQpIDQKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNCBwdXQKK2R1cCAzIC9DMDA0MCBwdXQKK2R1cCA0IC9DMDA0MSBwdXQKK2R1cCA1IC9DMDA0NCBwdXQKK2R1cCA2IC9DMDA0NSBwdXQKK2R1cCA3IC9DMDA0NiBwdXQKK2R1cCA4IC9DMDA0NyBwdXQKK2R1cCA5IC9DMDA0OCBwdXQKK2R1cCAxMCAvQzAwNDkgcHV0CitkdXAgMTEgL0MwMDUwIHB1dAorZHVwIDEyIC9DMDA1MiBwdXQKK2R1cCAxMyAvQzAwNTggcHV0CitkdXAgMTQgL0MwMDY1IHB1dAorZHVwIDE1IC9DMDA2NiBwdXQKK2R1cCAxNiAvQzAwNjcgcHV0CitkdXAgMTcgL0MwMDY5IHB1dAorZHVwIDE4IC9DMDA3MSBwdXQKK2R1cCAxOSAvQzAwNzMgcHV0CitkdXAgMjAgL0MwMDc3IHB1dAorZHVwIDIxIC9DMDA3OCBwdXQKK2R1cCAyMiAvQzAwODAgcHV0CitkdXAgMjMgL0MwMDgyIHB1dAorZHVwIDI0IC9DMDA4MyBwdXQKK2R1cCAyNSAvQzAwODQgcHV0CitkdXAgMjYgL0MwMDk1IHB1dAorZHVwIDI3IC9DMDA5NiBwdXQKK2R1cCAyOCAvQzAwOTcgcHV0CitkdXAgMjkgL0MwMDk4IHB1dAorZHVwIDMwIC9DMDA5OSBwdXQKK2R1cCAzMSAvQzAxMDAgcHV0CitkdXAgMzIgL0MwMTAxIHB1dAorZHVwIDMzIC9DMDEwMiBwdXQKK2R1cCAzNCAvQzAxMDMgcHV0CitkdXAgMzUgL0MwMTA0IHB1dAorZHVwIDM2IC9DMDEwNSBwdXQKK2R1cCAzNyAvQzAxMDcgcHV0CitkdXAgMzggL0MwMTA4IHB1dAorZHVwIDM5IC9DMDEwOSBwdXQKK2R1cCA0MCAvQzAxMTAgcHV0CitkdXAgNDEgL0MwMTExIHB1dAorZHVwIDQyIC9DMDExMiBwdXQKK2R1cCA0MyAvQzAxMTQgcHV0CitkdXAgNDQgL0MwMTE1IHB1dAorZHVwIDQ1IC9DMDExNiBwdXQKK2R1cCA0NiAvQzAxMTcgcHV0CitkdXAgNDcgL0MwMTE4IHB1dAorZHVwIDQ4IC9DMDExOSBwdXQKK2R1cCA0OSAvQzAxMjAgcHV0CitkdXAgNTAgL0MwMTIxIHB1dAorZHVwIDUxIC9DMDEyMiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTI1NiA5MjAgNzM5XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjE5NTY1RjY2QUI3NENEN0RCQzg2MjExNzlCMjA5RTFCN0Q3CitEQkRFRkRFNDQ3QzExQzQyOUZEMjcyQ0UKKzZBMjNCQURFN0MzRTZFMjkxNworQ0RCQTE4MEUKKzFENDUyMUE0NDNGRjU2Nzc2MkVCNTE5OUM3MTcKK0M4QzA1Q0M0M0RBM0M4QTY3RURERTRCMDU5MTQ1MUE1NTI5QzlGN0Q4NzJGNzBGQkI0MUE5NURCRjc2QjQyQjUxNjY3NzVBQTM4NEY5RTRFREM3MUM3RjcyRkVBRDE1ODMyNTQwQUY1ODZGMTdFQkVENTIxNTc4OTkxODBEMUFBRTM5Nzc1QjRCNUJDMTE5OUE2NUJDNDNBNkYyNkM5RTAxMUVCNEM0OEY5NEM5RjQ1MTIwOUVFNjIxMUZCOEIyQkZGQjg5RTIzNkMyRTgzCis4NjJBMzIyQQorNzM4NTBCMjhDQTc0RjM4RjkwQzI5NDZENUIKKzlGRDhERUNGNTkwMzgxQkMzMThBNUYzMDg4QTZCMTYyMEIxOUE4NkNEMjBBREMyRENCRjgwOTFGMTJCREFBMDdBQTc5OTE2MDE0RjlFQTI5NUNBMEU2MEQ5MzdCMDg1N0E1MUIzQjQwRkIzMEY5REYzRjZDMjhBNEQyODFBQUYwCis0NjQyOTU0QworMzYwMjg5QUI2MkUwRjkxOTA2RTREOEVDMTMKK0MwQjU0MkRCRjVGMzE2NEE0NzdGNTNEOEFGODk1QkZCMTUxQUY5MzMxMjIzRjAxQUNDOTU4RjI2MzY2QUMzRTlBMkY3MEQ5ODkxNTZENjM1NEMyQTI4MDZEQzFGODk4QkRFRTk5NkIwQUIzMkIxQTk4RkZBRDlBMjc1RDNEQgorQjIwNTdGNzIKKzZGMzdFQTcwNTc5NEY1NTY4MjA5MkM5QUJFCis1M0M1NDRERUJGRTU5QkI4NEIwOUVBNTA1MkZBQzJDMjNENjNBODk4QTZCREY5OTA1MjAzRDc1Mzg2RTI4M0VGRDU4NTQxOEZCOUZEREM2QzE2MDBBODg0RDM5NDUwQjdCNzhBMkU4QzBCMzk5MzBBMzIKK0FFMTAxREZFCitEMDQyNDlGMDJCOUMxMDAyNUVBOEIxRTFDMgorRDZBQjkyMjc4M0FCRUVCRDhFNDlGM0EzQjk5ODAwRThDODcxODRFMjIwMTAxNAorMkVDNEFBRTAKKzRENzNEOUJERkU2OTA2NTQ5RTcwMDUxMkM1Cis4RTgzRjQxQ0RFMDlCRkU1NzhENUUxQ0Y4RUM3MzM4M0Q5MTI5QkU5MzAxMDY5REEyMjkzOUY0QjlFRTlERAorM0QwNkUzMzMKKzk0MjRFRjVEOTFEMTQwNTk5MkE1RTAzMTNCCitFNTA5NTQ4QzA2MjZDNkNFMUY2ODI0MzhCOTg2QTI3RjhGMEMwOEY2MTk1QTdGNjA2Qzg2MzdGQgorMTA5QUFFQjYKKzc5NTAxOUU3QjNDRTY2NDFCNTc1OUM1OUEyCitDQjU2NDVERUE2NEM0QUUyOTY3MjI4RDQzQTQ4QTc5NjlDQzkwMjE0NjM0QjBCRDZFQTYxMkZCRTAxNjkxQjZGRjNDMUJGRUIzNUVEMjM4OEU3QTY0NjA0RjRENUUzMTY4RjhGMzk1RUIwRkI3NzM4REJGRDY3OTBFOEQ2QUE4NUQ0NTRDOUE4N0UzMTk4MzRGOUZECis1MEJGNDM1RgorQzhFNzJCNUU0OTM2NDIzMzYxNzBCNDdEMDEKK0NFQTUwRTBEQkIyNDYyODI0REEyRkYzQUU5NEYyMjczRDVGOTREMUJGMjExMzA2REIwNzMzMUY0QjUyODQyN0QzQjFEQTFCM0M0NENDNURDNkZGRERFRjdFRENDN0Q5NjgxQjZEQzQ5NEJGMkRBM0JFQ0FGNTU4N0VCRjA1MQorNzdCRDBFNTgKKzU3Qzc4RkM5RDFCQkI2M0M2NTlGOUY0RTk0CitGQkQ2NkU3Q0JDREFEQjZFODdDNjQ5QzQyMDlDNDIxMzM5RkQwRkJCM0YxNUJCN0U3REZEMjE3MjhFRjcwQzUzQUIxMkMxODQ1MEU3REY5MDM1RkFDN0Q2RTJERTA2NDk5MThENzNERDkxM0YyQTM3NjhBMTkxMzNGMkUzNUU0OTkzMUY2MTE5RDNFNUFEODc0NzBGNTJEQzZFMjk5NkM0M0VFNEY1NUU4NzYxMDIwMzkwMzgKKzYzNEYxQjA4Cis1RDM1MDUyMEVEOTBERURGOTlERjAxOTZFQQorNEJDQjA5RjBCNkM0NzhBMDNGNzhBNkFCMjEyQjU4ODFENEE4MDQ0QTE3QjEyMDg1RDc1MTVEMUI3NDJFNjM1QUQ2MzEzRUY4NDhCRTRCMjQwMUU1QTYyNTRBQjYwNEQ1NDRDREEyODQyQUIyRjlBMzc5OUEKKzk2OTY0MzQ3CitBNkQzN0RBQTJBNEQ1Q0Y3Njg1NjI4QTg3OQorNDlDRDBENEQ0MkNCREExODIzNkFFOTA0REJCNUI5MEY4MTM0QzdBNzY3ODkzMDRCQzJFRjc3NTVDMTIxODZCMzlDMUEzMzEyNzA4RjdDQzhEQ0IwMTU3OUVFNjZGMjA3RDdDQzczNDU3RkE4Cis0QTc3NjU4QQorQjgwMDFDMEIwRUZGNEEyMjVCMDVCNkMwN0JGQgorMjM3OTFBNTk1QUNCREI1OUE0QjU2RERDNThEQTg3NjI1MkU2MkM1OTFEM0JBQTY1Q0M5Qzk5Q0MxREQyNEQ5QjYwMEJDQUNDRjczNTFGREJGQzA4MTM2MDkwQUVDMENDMzMyNzlFRDYxRDM4RUU1MkFDMTM4QUNGNDI4N0VERTZGQjlCMzNBNzBCRjBCMzAyMDhEMUE1NTQxNDcwRjEwQjc4RjRFQjY1NDEyNTIwNjE3MTRBNUE2RDNFNTE4NUI2RjlGNjI0OTE0RDcyMkFGQjUwRUE1QjBDNzExQTI0MEY3QkM5NEYKKzY4NEE3RjU3CitBOTJEMjZCOTE0QTQwRjNCQjZCMzQ1OUREMDVFCitFRUEyNDBGMENGOTA3MkQxOUMyMDg4MjgzM0U3RDdFMzQyNjNBRkFBN0NFRjdBRjMzNTA5Qjg4Q0FFQzhDQTlGRjhFQjJDRDM0RDgwREU5RTNFRDIwN0M1ODdFQzAxNjM5MUZGODFEMDVEMUQ4OTAyM0E2MUM2MTVGQzJEQjZCMDQxODYxNjEzQjVDMTIwQ0ZFRDJCOUJBRjYyNDI3ODk2NDc4RkIzRjNBNURCMTE4QjMxNjZDRDEzOTQ3NzlCRjlFQzQ5NUM2OUE3M0VDNThDRDM0MURERDkwNDRGMUE2NjVDREIzNDhDQjYyMTY2NDZBOTQyOTkzRkFBRkUKKzBDRTUKK0UyCitFQTRCMzhFNQorOTM1QTQ1M0Q0NDlCN0NCNUIxRDQ2NzdBNkQKKzJBRUQ3MzQwOEUyRTdDRTRGRjkxMjJDQzc0NzRFMDgxNjM0MDhFMTQzODNDMjJGRjEzMkUxOUEyN0JBRTMwNjg5REI5NEEwOUNENzU2RDU0QURBNTFFNENFRTQ3NDcxMjMwRjhEMzVCMUNBOUI5MzkwMTc3MzE1OUQwRUJDOTNBM0UzRUZFNzhDREUwM0U2RkQ2QjQ5MEJBRjMzMUZDMDQyNjVFRDY2MTE3NzBGOTI0NkNFNjQ3RTU0QzZCQUFBQTU0CitDQTBBMEI3NworNUYxNkVBMEI0N0U0NzJERTU1NDYwMjU0OEFBMworM0U0NUJDMjc3REM2RDZBRjc2MTI3OTEzQzlBQTFBOTc1M0ZCQjY5QTRDMDg0RTVCMkExMTBDOTRBOTg1RTJDMUM0Qzc1QTI2NTlGMEQzRjdFMkJEQjk1MzgxMjQ3Q0RBODdGNkI4NEIyRjc1NjBBMjdFMjE1NDBGMUFFM0I2MDAwODQ4QjU4QTcyMTE3MjczQTM4RDY1ODNBQkYxODBCOUQyNUM3MUQ4MjlCNjBCQzk5NDU5Q0I4OUY3RjhFRTVENDZEQUNFQ0Q1MDEyNUZGQThGNjMyNEJBRjJGNTJFMkExNTZFQzEyN0M1ODczNTc1Q0Q0QUI0OURERTBBCisyODExREIxMgorNEZEMDgyNjI5MTFEMEIwMUREMDM0OTQ0NEVFRQorMzRBOTIzNTY5QTc1MjMzRDYzQjcyNUQyQzNGMTYwRTI2MzFBMkU5NDVFNTlBQzdDNjU4NDBFODkwMkJDQkQ1OUJGNUEyMEFDMzI0ODgxODAxMkYyRUYxRTMzQ0M4OUU0Q0I5MDQ2N0M2REI5MTFFNUI4OEZGNTE5MkFCNzFCNjBBNTMyQTM5MUM5NjBDNTMxREQ1QTc2RDlBQkUxREZDNzE5NTFGRTlCM0ZBRkVEMzE2MThBREQ4MjEyQTkwQjcxQjc3NzU2QTEwMzQ5NkYwNjY5MEZGNUI4MEFCNDFBQUFEMkVFMzRFOTk1MjE5NEEzRDU5RgorMzExNEFEN0MKKzhENjcxMkU2NDc0MzM3QkVGRDU2QzUyNEUxCis1QzdFNUREMEJBQUYzNDI3NkM5NTYxNDg1Mzc3QjdBMUVFREUwMjIyRjJBN0NBNkNFMDExM0I2RDIxMTg4ODBBRTYwMEE0NDQyQUU2MjY3NDcyQjIyMTlBQzBGNjU5NzUzMzdCMENGNTRBREU5MzhFOEI0MDcxCitGMENBQTgwRQorOUJEMDQ4RTc3OEQ2MDJCMjNEQjAxMDlFNUIyOQorMUIyMEI4NTczNkVERUZCQUE2REM1OTYwMkM1Nzk4Q0VEMkEwODE5MUE3MTZCNDczMzBCRDdGMzQzMUU0RUNDODNENkE3NEM0NTVBNTBFRDk5OTdDRkM1MUNCQ0Q4OTJDNEMyNzExQkU2MkJBQUFFNTcwQTRBQjE2Q0IwQTgyNzNGNTVGQUM1NUJCNDAzRjM1MjNGQkUzRjFGNTZBNjBEQjkxMjlDNDIyQzA4MTg2RUNDNURDMDdCODhDRTU2RkZDMDNCQTc2MTg4MUVEMEU5QjkxMDlGRjY2RTc0MDUyCisxOUIzNjVDRQorNUJGQjdBOUFCOEQ3NUUxREYxN0U5RkRGNkYKK0YzQTA4NDJDMDdGNDVBNUZBMUJEMzFFRUI0REQ1NzE1QTQyQzgzOTFENEQ1REVCNzhCMkIwN0Q5RkFDNTRENzVGM0E1NDNCMTg5RjI1MzBDNkI3NUI5NkYyOTNDOTlEQ0NDREZDMkYzODFGOTBBOERFMDc4OEY0QzU0MDY1QjREMUJBNTUwNzYxNEIzOEM3QUEwQTVBMUZBQTNGQjE4RUU3MEIwRDYyOUVGQTZCMTQ0ODBGRjU1QzQKKzg5NDRCNDAwCisxOUJEQjBCNkE2NDM3RTM3RUJCODkzMEE4ODMzCis1MTAxRjEyNzY4NzBBNThGOEJFNzQyQkMzRDI1NEEyREIyQkE5REY3NzY2RUFGQzIzQzg3Q0Y2MzAxMzY0OTFDRkM0MEI0NzJDNzU2OTA4RDU2ODlGNkU0OTI3ODI1MEY1QkYyNjc2MTdDQzFBN0QxNjMwOUY3MDYxREM3RDREMkZCQzk3Q0MwM0M0NDg0RTkwM0JFRTVGQjVERkI0MUJCRUYyMjgyMjVEOTNEOEFGNzk5Nzg5ODAzQTVDRUE1MDBGRUI4MDNCMzcyMjg0QkNFNUNBNgorNUJDNTkzRTYKK0U2OUZFNzQwRjI5Rjg2RjE3QzQxNUMyNkE2MDEKKzc4QjhFOEY4Qjg1N0JDMTRCQkUxMTVGNUZBODlCQURFQTM1RkVFQTBCQzNCREI0NTJCMEI0OUM3M0UwRkRCOEJCMzY3Q0YzMEQ4NkY5RkUyNkQ5M0Q5RERCODQxOTc2MUY4QzA3NUUxRUZENDc1NzMzMDdFMEEyNDAxRjVFNzU4RUMwQUIzMDY4MEZCNDVBM0VDMDM4RDAwMEMyMkJBNEQxQTY1RUE3NDYxMEVGRkZDNUJGQzVFRDQ2REE1M0U3NDhFMjA2QTc2NDcyOUI3QUEzOUM2QUY0NzI0ODkzRDIxRjRBNDBGQzhBNkFDQkVFNTlEOUI5OTQ4MTdBMAorM0I2Q0ZGQUUKKzNFOTdGN0RFQUM0ODJCMzM5NDJENzY0QTY2QzcKK0Q2QUVFODk3QkFDQzQ1RTNFNjM1QzBDODRDNUUyRDc5NTUxQTg1NjcyMUYxQ0Q2NEVENUM2MkZDNDNDMkEzNTI2RjFDNUJGMDM5QTlCMzVGRDE4N0E3RTUwODExMDA0RUQ3QUMwOTNFMzJGMENCMUI0NkE0M0U3MTI2OEVDNzRFQTQxNEEwMTY0RkJGMDZDNTgxMzBCQjA3MTRGNjI5M0E2NEZFMzVEODM4NkJDMDI3NjY0MjY1OTE4QkM3REJFRjJBNUU2MTczQjQwREQ2QTk4OTFBRTdDQ0EwQUZCNUM2REYyNTc1NDAxQjk1MTc0Q0M5NENGODRBNEEyOQorOUM3MworQ0I0M0U0CitCODFFQTU5NQorNTFBM0Y4NTc5MEE5RDg3RjA5M0YxMTJDNTQKK0IxNUY2QjhGMDA5OTA0QTNFMkVFMkJDNDhENEY5RjAyM0U1NjdDMUNDODc0Q0FCNjI2NjJERUQ5NDRBRUE3NEE1QzVENzlEOUU5NzZGRkUxNzFCMkU3QTEzQTVDRkY2Q0ZEM0VDRjUyQzM3RUIyQUNCNTg4MTdEQTlBMUM0RkE4M0MxMDJGNTg4OTJDNkEyQTBEQkU2QzJDMDcwMzE3M0ZGQQorNDFFMEM4OTQKK0IxNEVCQUVFM0M1QUE3NEIwMEYxN0E0Qzg0CitFRDBCRjYxQTE5MDdERkZGMEEyQkUzMDBDMUIyNTkzRDhFNUJBQjYzRjc1MgorODA0Rjk2QkMKKzI4OTE5QTI2N0NEQ0JFOTU1OTU4RkM2RUFFCis3QkNCQTJENkNGM0M5MjNDQzc0RTlFN0MzRTFCQjg1NzVDM0JDRjI5QTY5QTcxRDc2OThGQTFFQjBCNjdDOUY2OEIyOTU1MzQ4RjA2NDgyRjc5N0IxNDJDRjJCMUM3RTFDOTcwRjM5NEFGN0ExMDM5NUIwNgorMzM4NkNGQkIKKzJFRDM0ODE2NkYyODRFQTU4MzA4OUIwQkQxNEUKK0QxN0VENkNCMENDNkM5QzFGMkNEOTZBQUMzQzVFNTdCQjYxNjU5RjhBQTMyQjFFMTlFMzZCMkMyM0JGOUZCOURFRjQxQzUwMjFGNzJFRDgyNUMzMzNBMjMzRUFDMjA3MzQ0MjRDRUFBQkU5OUMyRjBEQ0U1MjE0NzVBNzk4QTM2MURBRjZFQ0Q1QjA4MTNEOUEzOUI5MTY3RDlDMDI3NzFFNDQyOTUyRDA4OTE0RTRGMUZGMzkwQUNBOEI0RDU1MjlFNDIyMUUwRjU2MUVDMTExRDkzRjY2MjQ3NjI4OEU1MUFGNjFCMTUwNEVBNTg2NjdFNzUzQ0JDNTg2RAorMEU2NgorOERDMkRGCis4NjBFRDhDQgorNjUyQUUyMkQ4MTFGNzIzMDRBRjM5OUUwOUQKKzRFRDU2QTczMkU4NkI4QjlFNEVBNjg5OUIxNkMzQUVENEY2MEMxMTAyMzQ3NUVBQTFGMzk4NTkwMThBQzAxOTJCMTdFOUY2NjkwMjgzNDIyNTg1RjkyNjY3QUM4NkQ4NTc4QTg3NjE2ODFCNkFFNkZGNDlDNDM2ODBFOTU4RkIwNDY1Njg5RDlFRDUzMkFCREM5NkQzRkZCMUU2ODEyQTZCOUQxM0M4RTcxQjM2MUZBCisyRTU5OTcyMworMDI5NEE3NjFCQUE4MUVBOTk2MjdGOEI1OTQKK0YyOUNDRkRBNDYwRkMyOUQzNkIwMEZEMjQxNUVEMjEwRjBFOTkzNjJCMEYxM0EwM0U2OTVBREFEQ0EzMjM1RjE2NTIwNTQ2N0VGNjgwNTEyOTY5N0M0RThBRUE0RTZFRTJBNUE3ODg2QjRENjIzQUEzQkFDN0M4RjIxNkU5NENBOTE3RTU1QjA0NkU1MjlDQjE3RDNCQUUwNDFCNzk4MDI1RDQ4Cis0MjI2MTAwMworNTk2MzM1QjIzNjhGM0U5Rjg5MkI1OUZDNkQ1MgorRUM4NDVCRTQzRjhFN0ZCNzJDMDM1OUIzMzI4MDZCNTY4RDM5N0IxN0FDRUUzMUFDMzZGNTA4QzYwNUJCMEYxODg4NkM1MTZEMUZEOEYwNDBGMTJDOUY5NDBCOTEyOTIxOTNGNDA4MTJBOUQ1NTk1MjZDRkM1QjhFMTM0OUQ0NjdBNEUxMTRFMDg3QzgzOERBQjU2NDQyQzVFMzJFNDUzNkY0MkY3RkEwQkZBNEYwRDYwQTEyNEMwNDBFMTBGRkQzRTJFMTIzNDFDMzE0NTExNEY3QkI2QUE2RDg3OQorMEFFNUU1ODcKK0Y3OThCRTBENzM0MjQ5QkEzOUUyMTZEQzA5Cis2OTREMjQwNjlGODM0OUIxQkI5Q0JDRjlBRDI4QTNBMEQ1MkNGQ0U5NUZENTI2QjdCNTI2NzlEOEE4MEJCQTdBQ0VDQkNCRjJBQzQ0NDNBODA3OEQ3REI5NjFBOEM3MDZGNzhBRUFDNzE4MDNDRjMzNEM3NjI4Mjg1N0YyNzBCNEREQjc3MTVCRTczNDg0QjRGNUVGRUREOEE4REI2OTZCMURBNkM1OUM3NTA3NjI5MzU4Cis0Rjk3NENEMQorQjk3QjEyRDBEQzJBQTU0NjdBMjU1MjRCMDgKK0M3MDU5OUQ1MUJEOUY4RUQzMjQ3MUMzMDREM0JCOTJEMDVFMDlBN0VCQzc0RjMwREJBNjQyMjlGQjIyQjI0MDQwNDlBMTQ5RkU4M0EwQjcyOTEyQzc0QTIzN0M5QTI2NTlERkYxMTVEMDUxN0VDRUVGRUQ2NEI5NDNFNkY4MUVEMzlDMUY0NDkxNTQyRTY1M0E0NUM1RDhBRTA3RjkwM0IyNDgzRTBDMkYyMTAxNkQ2NTc1M0ZFQzYKKzlGOTEyNzcxCisyNTlDM0Q3MDNFRkY4MURDNzI0MzNFQzdFNDQ3Cis0RTE5MjU5MDM0MjNBRTY3NzU0MTdBQkYxRTQzQkQ3Mzk3MjNDNzBGRDYzMzg1MjEyM0M3N0M2OEMzNTI3RjgzQTJBNTY3RTRBRjYwQ0RBRURBREQ2RkQxNTVCNDlDN0E4MEFFNjcwNjU5OTYxREU3QzJFQkVBOTZENUQ0RjE5NTMyQkRCRTc5RDRCQTlFN0Y4OERENDREOEREQkEyNDExMjBGRTNEOEY0MzJDRTE5MzE5QkE4NjI3NUNFQTNBMjc0NTE1RjNEMzAzQzg5MTU0MjkyRkU4N0NBNkU3RUI3RURFRkU1MkE1N0FDNEZDOTE2MUJEMDUyNTE3QzYKKzQ3QzMKKzc0MDc5RjM5REMxQ0RGRjZGQ0UwNkEyRTQyOTA2OTVEQTY0REQ2MjM3QTUwM0Q2NkRCQTk2MTRFMTQwRUUwNkJFQkE0NTAxOTc0RjI3OUUwNzIyOEVGN0YzRjQwRTUKK0U0MjE2MDY0CisyRTY2MjI4MkY3MEM5MTZGNkI0REJFMjEwNUI4Cis2MUZBQzZDMzc4MEJFRTVDQjc1NTcyNUJFQjcxNjFEQURCRUM1M0Y3OUJCQjc2RjRFNDhGNDBFNTZDN0RGNTZFMkVDRUU4NDQwNTZGNjJENzU4QUExRDU3NDRDQ0FEQUQ1MjY1RUMyRTg3N0E1QzRFOTg2MUUyRjlBNUMyQzJEODlCMDE4MUY1MUVEQTQ3OEE1RDFERTYzMzE1QkFEODdGQUNBNDM1MjRCQkY3RTJENzYzQUU3QzA2MTNFOUY3OTdFQ0VFQTJCNkI3MkI0OTJCQzNDRDIwRTFBRAorNjM0Q0NBOTEKK0QzODE2QzlFQzI0RkE3MUQ4RDcxODI4NzNGCitENzg2NkY1RjJCNzFDNjlEQTY0Q0FGNjFFMDc3RTFGREY0NzdBMTVCQ0ZGNzQzQkREQjkyQkIzRURDRjUwQzlGMzg2MEM2M0RCRDUyNjU0RTQ1NTE1OEQ2QkFDRkNCODBBMzcwNkRFNDgyQjA5OERDRDk3M0ZBQjlENENDMjhDNzA5RjdBMDJDNTBGNDczMzZGQTM3OEIwOEIzOEU2MUY5Cis3RERFOEVDQgorNzExMDNGNzAzRDU0Rjg3Njc2M0JEODlCNDlDNAorMEJCMjY3MjYzRjhCNDJBRDc2QjIxNzU1OTZDMjBFREI1Nzk5NkVCNUMzNDYzMTk3RTUzODJENjkxOUMyMEEzM0M0OUE3RjFGN0JENUU1NkQ0NTJEQTZBMTQwNzI5ODgyRTUyQzI0QkRDQjVDOEFEN0JFM0Y2MEIxNjgxMDc5MUEyQjM1NEYxN0EzQzBDNzY0MDE3MDMwMDBBMjUyM0E4MjE4RTcwNTdCNDE2MzkzOTk0RTBEODVENTIzOTExMTgyNTAyMzQ5QjFDQjBEQUVGQUJBODUwNjBCRjUyNjhGODYwMkFEQjUwNkVEOTMwQTNENzE1RjFCNUFBN0FDCitBRUUxCiszNTE2NDE2NEIxNUFBQzVEMEQ0MTZDRjNBNjM1QTcyQ0U4NkQ0OUMzNjJGMjQyQTE3MkNGRTcyNjc5NUQ1QzA1NUMyMDAwCisxNzk2QTQwMAorMDZDODFGQzdFRUVCMDZBM0EwMkM3NDExOTgKK0FGNkEzNTZERENBNDk0MDUwN0M3MjlEMEU4M0JCOURERTEzOTNEMjdEQkJBRkVFMTY2MjYwRENCMTQ1MEI3RTMwRTA1REE2MTAzRjFDNTQ1RDhDOTJGMTI5N0E0ODkyRTY2RjlDOUZDQTc0OQorODIwNDNFOUYKK0ZFODc1QjU2NTg5QjMxOTY1NzFBNzFCRDg4RDYKK0M1Q0Q1NTEwRkMzQzhBNjg2QzVGQ0FGQjk5RDNGQzg1NTAzRUJBRDY5NDBENDQ1ODA1MDc1NEFCODY1NjBCNTg4NERCMkI5REYxRUU3MzA0MzJBMjYzQzlDMTM1M0UwNDY3ODU2REEyRjE2RTEwMDkzNDREMTk2N0NDQTc3MTc1ODVFRTRBRjNENzE4OUVDQUQyRTNENEEwMzk0OTY4MjVDQzg4NTUwOEY3MzU4Mzg4NzQ3Q0Y5QUYzMDk3M0Y5QzBBRTdDNjEyNUU2QjE4Qjg4RDNBNEYyMDIxMkRFM0NGMURFQ0VGM0VERDhDQ0U3QzYzQzZCMDk5ODY3OQorN0MxNgorOEM2NjFBQjQ2RjAzODlFQTg5RkJGMTE4RTExQUVDQ0IyMEVGRDgzMkU3Njc1ODFFMTVGOTcyRUVBQzhBODIKK0YzRkI3REM5CiswODMxNTFDMzAzODVBMzE3QjNCMzkzRkFBNEQ5Cis5MEI2MUNCQTNBRDdBQ0YzRTkzNUI5NkNGNUE0M0E5OTUzNDE0RjQ4NTcxM0E1NTg0RTNCQThEQjI3NUNDODg0RjhCMzkxM0JBQzVBNzYzQzVDQzcxMEVFNDE4NzFDMzdDMzUzNjA0NTU5ODFCOEMxNjA3MjE1MkE2MTBCNDNCQzZERkM5NTgyM0Q2MDRDRTM2QzkzQUY1RjFBRkZFMzA3NTY3OTM5NkM2NkFDQkRCRUUwMUI3Qzc1RDgxQUIyQ0JFNTUzRkFDMjBERkY2RTBCMkZENUUyQzEKKzMzQUU5QzRBCisyMTI5RDJDMUU1QzZDOURGQ0NDNzMyNjRFOQorNDYyMjY2MjczNkRDRTI4NkIyMDFGOUIwODI1ODlBMjUzQkNCOEJFRDhEOUI3QUQzN0U1ODk4NTQyMDUyNTRGODRGMEVEQUMyQ0QzNEFCMzRFRTc1NTE1MzVDOUM0OEFCRUFFOEFERjdDRUEwNjg0MEY0MEExMkRCOUY1N0ZENzBDOEVDNzhGODg0QzcKKzUzQzU2REI0CisyMTA2RkE4RUEyOEQ5ODcwN0IzOTIzMzA5M0FBCitGQTU0RkZBNTk0MzY2QUQxNDIxMTZERTM4MkFDNjI4MDRCMDRCMkJFMTkxREQ5NjA2MTZCREJERTI1MTk4ODZGRUQyNkUzRkFERTg5RkEwQTVCNzFBQkM0NzdCNUNDQ0Y3Nzg2REVGQTY1MDE2QzRGRTIwRTM2M0Y1NDA0QTM3ODQzOEIxMkE0QkY1NEMyNzcxQUU2MThENzcyOUIwN0U3M0ZEOEM4MjBCN0MyNTJGN0ZBRkJEM0U5NTA1QTlBQThFOEFCM0FDRTdFMjc1QTUxRkY0NjE2OTlGNDM5RjU1NTE2MTIyNTI4RjZGNkQwCitERDJFQjQ4QQorQUFFN0M5MUI4OEY3NDVCNUI3OEQ1QjlCQUMKKzBCMjg2NUQ1RTAwRDVCOTBCNjhEOTJDOTI0QjcyNTUyMEZDMzg2OENEMjU5NkIyNUI4NjNFQzFDN0Q0NDY2RkZFMUY1QTBFNDJCN0JDNjdEOURCRTA0NTgxMzU1NzM1RUJCRUQ2MjBFMkRDMkY4QjhENUYyNTYxRDVCMjlGNkZGQjY2Qjg5RDlCRDA4NTJBRTVFQkM5NDI1MTM4Njc3NkIyRDYxNTMwNDQ1MzY5OQorMjQ0QjdFRkUKK0Q0RkE2MEUxNkY2QTA3QjI4OURBOTA3QjJBMTkKKzE1MDEzNUI3MzhBNjMwN0M1RDdBQTAxQjQzMDU2MzA5RTI1NEZDNkMwOEZCOEU0NTgxQzhDRDY0OTdFMDAyQUM0RDdCNTRDODEwNTgwODExNzQ4QTQwM0U1M0JENEEwMzUxMTczQTMwQTM3QTQ1MDE3NzhCQkQ0NUU0Nzc0QjhFNzRCQjlCMEJFNTdFNjI3QUQzRTdEQzMwM0QwMTM3N0FEQUYzQzQ4MUFCRjc3QjlFOUIwNEU5RkI2OTM4Mjg4M0I5OEM0QzY5ODFCNjlCQTQxNDg0OUQzRjdGMkZCRDM0OUExMjUwQzI4MkVGNEQxNDMwQkU3Qjk1Cis5QTgwMTg1OAorRkQ5QjI1MEQyOUZBNjU3MzgzMkY3OTZFOTcKK0U0OTJENzdCMDE3QjVEQTZCRjVFRjY1QkIwN0UzQTI4OEU5QTBBNjc4RUQyQjRBNkE2QzdFNkQ2MjI3Qzk1RDdCRDgzRUUzOEMyMTU4OTA1NkU0RjM2RDE1NkM1OTZGQzgxRTZFMUEwRTIyMkY5RjlGRDQwODFDMEI5ODU0QURDOEVEMDM1QjMyNgorQzhBMTJDQTQKK0Y1Q0Q5MzYxQTVDRjc4RDEwOTY1NEE1MTA0CitEQTM2NTk1NjIzRTQyNEM3MTk5NTY4QkU4NDJDRjY2RjMzN0FBMUIwOTRGOEZGNzYyN0YzNDk0MTFFMjk2MUJCMTQ4NkMzQTVCNzE0N0U1NTBCRjkxQTdBRkI1MkZFOEQ2N0IzNjRCRDEyMUQzQ0VFOUE0MzUwRTQ0OEI5RjlCRUU0NTM0MEEyNjAyMUY2MDlDQkFEQ0Q2NzQwNzRDMDZGRDk4MDVDM0RDODNDNkU5MzA1QTdGMUJCMzU1MTI5Q0MwRkQ0Cis2ODdBRkZGNQorRTQ3MDA1OTc3QUE2OTY2QzM4MEUzQzI4M0UKK0Y5QkREQTk0MzYwNzA2RTg0QTdDMTBGRDhFQkZBRTFGQzQwMzg5NjBGNzMwQkI1RTg1RDY4OTBFNjg4REIzRkEwMjExRUJGQjdBQjI0QzkyQTkwQjZBNDdEODBCMUNCOEQ0QUVFOUQyQUVGNjA5QkFEQ0E2N0FCQ0JGREE3QURFMjBFOUQ0RjE2MzQ1QTUzMzBBQTQzNEExRDZFQkRCMTE4MDE5NDQ2Q0RDQ0RBOEE2N0QKKzQ5RjgwRkY1Cis2MkUzNEZBMTdFNjk2MjREQUU4QUIxMTNBM0UzCis0N0I1Nzk3OEEyQzAxMzFCOEMwRTZGNDA1ODMzQkJENjcyRDQzNjE5NzNCRjY3QTA0RDVCN0NDRDAzMkIwQUVGQzYwNUU3OEZFOTMxMTcwODQzQTg2N0JCRTA0MUY3QUExRDdGMDYwNzk3OUYzOTdDNTAzMjdFM0UwQTM5NUM1OThGNDRDQUFBMDQ1MkM3NkIzMzg1RjIwODk1NkNFQkRFQThEQURDRjU3QjYxNTU3QzZDMDAyQTBCMkJGQjMxMTAzN0E3MzUyQUVDNTQ5M0M0OTU1MzUxQUEyRDcyMkU2NzlFMUQxRDIzQTUxMjUzQTlCQTNBRkI1NEZCOUQKKzc0QjMKK0RFMzBDNDFGMzUwNEFBODIwQzc2RTE2RERFRkUKKzA0RDgxNTM2CitCODY0NzA0QUQxMjYyNEI2RjZCNTFCMTc5QjY5CisxREZDQkQ4MTg2RkRDRkFEMzYxMEIyRUZDQkY2QjAxQTMwNjMzRTU3MEJBMjZCNjM5NUUyQTQ5NUYzRTdBM0RFRjQwMkYzODdFNkE0QzFEQkYwMUUxMDdBMjYyQTI2MjExOThGOTcwNEEyNzkyQ0EyMDUyMjJFMUI5NTY3NTBEQUI0RjE5M0Y2OEVCMzQ2QjY1N0VDMURDQ0UyNjFFMTUyQjlFMTk5RDMwRkVGQ0Y2RDREM0U0MzY1OUE1N0RCMTk4RTcwNDkzQzE2OTY3NDQ3M0I2QTM2NTY2MjcwODQ3QzAyMkMyOTY4QTQwNEE1Qjk3NkFGN0I0NzI3QzUKK0FCMzcKK0UwNDY2REE5NjdCQUYyMkEwOEUzREJGNjMzNEY1MTFFMDIxNkI3MjVFOTkwQzhDNDk1Cis2OTFCMzkyQQorMjUyODgwNUIzQ0EzMjg4ODNDNjNDQkRDOENBQgorQjkxMjBDQjY4MEExOTlFNDQ3QzMyMEFERDQ3NDdFM0RGMTBBQjhCMzQ2NkE2MUU4RTFBQUNDMEQ4OTdGQzE1RjcwREJBOTUwRkFGMTlEMTA0QUREN0I3NkU1QkU0RkREMjQwNDgzRDUxMUE2OTdGMjkxNUIwNkRGRjM5Nzk5QjBENjhGNTZDNzA1RDcyOTNGRERCNDcyMzVCM0Y3RkYwNEVBQ0M3RDZENjY5MjE0REVFQkY5MEM2OTkyNjg4NjUzMTIwRTk0QjNBRDk1QkM1RUU0QzczOUYxMTk3OEFCNjdCNjFEMjYyMkU3MDcwMzVCRUQwMTc0OEVFMzFDCis4MzdCCis1Nzk5MkY0QworRDU0MkY5QjdCNDgyMkU1NUMwMzNGNEQ3NTMKK0Y2Q0MwRjAzOEIxNTk4NzkwODNBNzE3Q0RBMUQ4NkQwMjk5ODUzQzBFMTAzMDk5QjA3N0VCNDA1OThCN0E2RjMyODU4OTRDRUM0Q0IwMkE5RDI3QjhFM0I1Q0Q4REE1NDkzMDlCMTg5QTg1NDRFRTFERDgxOEM4MDkxMUI0NgorMTQzNjc0Q0IKKzUzQjYyQTY2OUIyMzM5MDA0NkJEODJGMzNDQTYKKzFCQzU4N0E1OTNGOEJGMDcKK0M5REUwQTczCitEMDc2NkFCNkI4RTUxREVCNzE1RERFRjE2MjkwQjg3MzE5OTU5MUUzN0UwNTUyRTExNDIwOTMzQTQzMEMzODIxNzMyMQorNUVGOTI5OTQ5QzBCMEVFODk4ODFCNDY2NkY5RkQyN0I0NkYwREFGMjhDM0M3ODZBMzU4RTE0MTM4NUZFMUM1Mzg4Rjg1OTA3RTcyQgorNDA0OThBOEMzRDk1RjUwRTQ5OUI3Qzk1OUI2RDMwREY2ODVEMjgyQUFENTc3RUMzMkQ4M0EyCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxNTIwMmQyYTIwMmIyMTBkMDEwZTAxMGYyMDI4MWUyMzI3MWMyYjI1MDEyMTI5MmIwMTE0MjAxYzJjMmUyYjI0MjgyMjAxMTUyMDJkMzAyOTJiMjUwMTE2PiAyMjA3IDU1OCAwIDczODQgLTEgcworPDIwMmIyMTI5MmIyNzFjMjgxZTIwPiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwYz4gOTQzNCAxMzMwMCAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI4MCAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjgwIDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyODAgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjgwIDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE1MjAyZDJhMjAyYjIxPiAxMjcxIDE0MzEgMCAxOTgwIC0xIHMKKzwwMDIzMWMyYzAwMmQzMDI5MDAyZDMyMmEyMDJjMDAyOTIxMDAxZTI5MjcyNzFjMjgxZjAwMjYyNDI4MjAwMDI5MmEyZDI0MjkyODJjMDc+IDE5ODAgMTQzMSA3IDU2MTcgMCBzCis8MDAxOTIzMjAwMDIxMjQyYjJjMmQwMDFjMmIyMDAwMjIyNjI5MWQxYzI2MDAxZTI5MjcyNzFjMjgxZjAwMjYyNDI4MjAwMDI5MmEyZDI0MjkyODJjMDc+IDU2MTcgMTQzMSA3IDk1MzEgMCBzCis8MTkyMzIwMzI+IDEyNzEgMTY3NiAwIDE3MjYgLTEgcworPDAwMWMyYjIwMDAyMDJjMmMyMDI4MmQyNDFjMjYyNjMyMDAxYzI4MzIwMDI5MmEyZDI0MjkyODAwMmQyMzFjMmQwMDI0MmMwMDI4MjkyZDAwMmQyNDIwMWYwMDJkMjk+IDE3MjYgMTY3NiA5IDU0NzUgMCBzCis8MDAxYzAwMmExYzJiMmQyNDFlMmUyNjFjMmIwMDJkMjAyYzJkMDUwMDI5MmIwMDIyMmIyOTJlMmEwMDI5MjEwMDJkMjAyYzJkMmMwNzAwMGUyODAwMjAzMTFjMjcyYTI2MjA+IDU0NzUgMTY3NiA5IDk1MzEgMCBzCis8MjkyMT4gMTI3MSAxOTIxIDAgMTQ1NyAtMSBzCis8MDAxYzAwMjIyNjI5MWQxYzI2MDAxZTI5MjcyNzFjMjgxZjAwMjYyNDI4MjAwMDI5MmEyZDI0MjkyOD4gMTQ1NyAxOTIxIDUgNDE2NyAwIHMKKzwwMDI0MmMwMDJkMjMyMDAwMmQyMDJjMmQwMDJkMzIyYTIwMDcwMDE5MjMyMDAwMmMyMDFlMjkyODFmMDAyOTJhMmQyNDI5MjgyYzAwMWMyYjIwMDAyZDIwMmMyZDAwMmMyYTIwMWUyNDIxMjQxZTAwMjkyYTJkMjQyOTI4MmMwNz4gNDE2NyAxOTIxIDExIDk1MzEgMCBzCis8MTkyMzIwMmMyMD4gMTI3MSAyMTY2IDAgMTgxNyAtMSBzCis8MDAxYzJiMjAwMDI5MmEyZDI0MjkyODJjMDAzMDIzMjQxZTIzMDAxYzJiMjAwMDI5MjgyNjMyMDAxYzJhMmEyNjI0MWUxYzFkMjYyMDAwMmQyOTAwMWMwMDJhMWMyYjJkMjQxZTJlMjYxYzJiPiAxODE3IDIxNjYgOSA2NTA0IDAgcworPDAwMmQyMDJjMmQwNzAwMGUyODAwMjAzMTFjMjcyYTI2MjAwMDI5MjEwMDFjMDAyZDIwMmMyZDAwMmMyYTIwMWUyNDIxMjQxZT4gNjUwNCAyMTY2IDcgOTUzMSAwIHMKKzwyOTJhMmQyNDI5Mjg+IDEyNzEgMjQxMSAwIDE4NjIgLTEgcworPDAwMzAyOTJlMjYxZjAwMWQyMDAwMmQyMzIwMDAyYzIwMjgxZjAwMmMyOTFlMjUyMDJkMDAxZDJlMjEyMTIwMmIwMDJjMjQzMzIwMDAyMTI5MmIwMDFjMDAxOTEwMTYxYTE4MTkxNzExMGUxNDAwMmQyMDJjMmQwNzAwMTIyNjI5MWQxYzI2MDAxZTI5MjcyNzFjMjgxZjAwMjYyNDI4MjA+IDE4NjIgMjQxMSAxNCA5NTMxIDAgcworPDI5MmEyZDI0MjkyODJjPiAxMjcxIDI2NTYgMCAxOTQzIC0xIHMKKzwwMDFjMmIyMDAwMmMyYTIwMWUyNDIxMjQyMDFmMDAyMTI0MmIyYzJkMDUwMDJkMjAyYzJkMDAyYzJhMjAxZTI0MjEyNDFlMDAyYzIwMWUyOTI4MWYwNzAwMTkyMzIwMzIwMDI3MmUyYzJkMDAxZDIwMDAyYzIwMmExYzJiMWMyZDIwMWYwMDIxMmIyOTI3MDAyMDFjMWUyMzAwMjkyZDIzMjAyYjAwMWQzMj4gMTk0MyAyNjU2IDE0IDkzNzcgMCBzCis8MDAxYz4gOTM3NyAyNjU2IDEgOTUzMSAwIHMKKzwxYjFiMDYwNjAyPiAxMjcxIDI5MDEgMCAxODMwIC0xIHMKKzwwMDAzMmQzMDI5MDAxZjFjMmMyMzIwMmMwNDA3MDAxMzIxMDAzMjI5MmUwMDMwMjQyYzIzMDAyZDI5MDAyMjI0MmYyMDAwMmQyMDJjMmQwMDJjMmEyMDFlMjQyMTI0MWUwMDI5MmEyZDI0MjkyODJjMDAyOTI4MjYzMjA1MDAyZDIzMjAzMjAwMjcyZTJjMmQwMDFkMjAwMDJhMmIyMDFlMjAxZjIwMWYwMDFkMzI+IDE4MzAgMjkwMSAxNiA5NTMxIDAgcworPDFiMWIwNjA2MDIwNz4gMTI3MSAzMTQ2IDAgMTg4MyAtMSBzCis8MDAwMzExMTIwMDA3MDgyODIwMmQyYTIwMmIyMTAwMDYwNjAwMDYyNzAwMGEwOTBiMGMwND4gMTg4MyAzMTQ2IDUgNDUzMiAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICg1KSA1CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzQgcHV0CitkdXAgMyAvQzAwNDAgcHV0CitkdXAgNCAvQzAwNDEgcHV0CitkdXAgNSAvQzAwNDQgcHV0CitkdXAgNiAvQzAwNDUgcHV0CitkdXAgNyAvQzAwNDYgcHV0CitkdXAgOCAvQzAwNDcgcHV0CitkdXAgOSAvQzAwNTMgcHV0CitkdXAgMTAgL0MwMDU4IHB1dAorZHVwIDExIC9DMDA2MCBwdXQKK2R1cCAxMiAvQzAwNjEgcHV0CitkdXAgMTMgL0MwMDYyIHB1dAorZHVwIDE0IC9DMDA2NCBwdXQKK2R1cCAxNSAvQzAwNjUgcHV0CitkdXAgMTYgL0MwMDY2IHB1dAorZHVwIDE3IC9DMDA2NyBwdXQKK2R1cCAxOCAvQzAwNzAgcHV0CitkdXAgMTkgL0MwMDcyIHB1dAorZHVwIDIwIC9DMDA3MyBwdXQKK2R1cCAyMSAvQzAwNzcgcHV0CitkdXAgMjIgL0MwMDc4IHB1dAorZHVwIDIzIC9DMDA3OSBwdXQKK2R1cCAyNCAvQzAwODAgcHV0CitkdXAgMjUgL0MwMDgyIHB1dAorZHVwIDI2IC9DMDA4NCBwdXQKK2R1cCAyNyAvQzAwODcgcHV0CitkdXAgMjggL0MwMDg5IHB1dAorZHVwIDI5IC9DMDA5NyBwdXQKK2R1cCAzMCAvQzAwOTggcHV0CitkdXAgMzEgL0MwMDk5IHB1dAorZHVwIDMyIC9DMDEwMCBwdXQKK2R1cCAzMyAvQzAxMDEgcHV0CitkdXAgMzQgL0MwMTAyIHB1dAorZHVwIDM1IC9DMDEwMyBwdXQKK2R1cCAzNiAvQzAxMDQgcHV0CitkdXAgMzcgL0MwMTA1IHB1dAorZHVwIDM4IC9DMDEwNyBwdXQKK2R1cCAzOSAvQzAxMDggcHV0CitkdXAgNDAgL0MwMTA5IHB1dAorZHVwIDQxIC9DMDExMCBwdXQKK2R1cCA0MiAvQzAxMTEgcHV0CitkdXAgNDMgL0MwMTEyIHB1dAorZHVwIDQ0IC9DMDExMyBwdXQKK2R1cCA0NSAvQzAxMTQgcHV0CitkdXAgNDYgL0MwMTE1IHB1dAorZHVwIDQ3IC9DMDExNiBwdXQKK2R1cCA0OCAvQzAxMTcgcHV0CitkdXAgNDkgL0MwMTE4IHB1dAorZHVwIDUwIC9DMDExOSBwdXQKK2R1cCA1MSAvQzAxMjAgcHV0CitkdXAgNTIgL0MwMTIxIHB1dAorZHVwIDUzIC9DMDEyMiBwdXQKK2R1cCA1NCAvQzAxMjcgcHV0CitkdXAgNTUgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yNSAtMjU2IDk3OCA3MzldIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMTkxMkIwMERFNUNGQkZBODQ5QkU3RDY3NjkyRDJCNDY2ODkKKzg3NTcxRkY5QUFDOTM5QUQ3Rjg1MDZGNQorRTIxMjY2OEZDMUNEOTNDQTRGCis5MEYwMDBENworRUM3OTRGOEUxRUE4OTMzM0QzQkI0MjYyNzA4MgorQ0EzQTRBM0RCQUZDMjU1NjBGMTFGRTFENjgyNTU2MjYxNUQ4OEVGMjA1NDZBRjIwQkJCNzUwMkE5NTU4RTI0MzA3MThERTc2QTU5QkI2MTVDMUFBRERFNzE4NkFBNjVFMzMzMUMwMDM2NkIxQzdCNURDRUUxRTYwMERGN0FCRTE0M0IzQkI2QkU1QUQ4NDM2MDA4NjBEOEM5M0RCNzIwOTQ1QTcwNzVGOUU3NDc4MjcyNkRDNjVBQjJBRkEwRTgxQjY1OUNGMkNBQkZEREEKK0UxNjNCNTg2CitGRTU0M0U1OTdEODM3NkNDMkUyMjFGRENGNgorQzEwQ0Q5NjhFOEIzMTU2RDIwQzAyQTMyNzkxNTJGNjg3Qzc0NTdFQTk3MTc4MENDRTE2MDVENjM5NUZGNjJDRUVDRjcyQ0MzNDE0QjUxREJGM0E1Qzk3OEM5MDlGNjEzMkE4QzBFMTJDNDhBQTZFODVCRkZBNDBCNEEwMzY5QUYKK0RENjcyMDgwCitBMDlDRDI4ODNBOEY1RjE4OTVERjUxM0QzMQorNTRFMDc3MzgwN0YxRTM2M0Q3RTg2RjgyREY5Qzc4MEVFQUJCQjc3QzA4NDVFNzNEMzVBNUQ5M0IwRDdCQzI1OTIyOTg2NzhDMUIyRUVCOEFEODREN0E5MzBFNTUyMDEwMzA5NkZGMTU2NkM4MDM0RDlGNDA0QTE1RkYyNDVECis5MUI0NzczMworMTA1QzYzQkZFNUFCQzBFQUVCNTZGMkJFQzgKK0RBNzQxMzkyN0ZERjFEQUYxQjFFM0M4QkUwMTAwN0ZCMTVCMDU4QTYyN0VGQkUyODA4MEE1RUMxNjhFMUY1RDAyOEEyMTI3M0ZFMzQ1MEJGNTVEQTBBNTU0MDU1NzExMkQzNDI1MzU1QUQwMzkzNDg0MgorOTdGQjNCQ0QKKzY0QTBCMUQ4MERCN0YwRTE4QUJDMEE4Nzg2CiswODQwN0I5MjlCMEQ1RDlGOUUxRkNCRTlBQ0E4QTI1QTU3OEZBNTU3RTBBMUI4CitDQkUyOEM0OQorRTJEODlBNjY4MEEyOEUwMzUyMUQ0NzgzRjEKKzFCNUYxODg5NUM0NTczNThBMkMxM0I4NjA1QzYyRkNCNDMwM0NDNkQ5MzJCMERFREY2OEZBMTJGMjA5NkNDCiswNTMxNzJFNQorN0NFNUQ3QjMyOTgyMkUyMTExNDQxNjYzOEMKKzNCQjQ1NzA5MzZFMjQ1MUFGOUFFOEI1Q0MyQkQyMjVCNkY1RDY3MDZFMjIwMDc0MTZCMDBCNzJDCis0MDcyMTBGRgorMzEwMzA3Qjc5NEU1RTgxOERDQTU0RjFEMUIKKzIyNzE4REZENjg1OTg0MURGRUM4MjE5NEVBMjZBMTFGMzgxRDAyQTQ5NzgyRUE3MEJDNjlGOUZENUI5NTBCQUExQjM0MTY5QTc3MDNCQUZBRjAyNTY1NDEwRUVDOTk5QkQ5QTIyMjUwNkRCN0FDNkFEQTU4MTZBQTk2Q0I2RTY2MTUwMzhBRDc3QTRCODg2MTY4Mzc1MjVGNTA0NEFGNkE3QTZFMEM2RjBDNkMxQzI5Q0ZBMzQ4ODA0NjE2QTNBOUNDCis5QTQ5NUFBMAorMkJFODY5MzY2ODE1MTg0QkQ4OUVDNjI1MEIKKzJFRTYzNTg0RkYwNEVGRTlDNDBBMEY0N0JFNzg5OTdDRjU3QkMxNzlEN0IxQzM1NTlDNzg0ODE3RTUxNjkyRDM3NEI3Q0IyQzIxNDk0QTg0NUY3NTJFRTYyMkI2NjdFRTcyMDFERkNGMkVCRgorMUE1QThBRUEKK0ZGNTNFNzRGNjZEOTY0RDZGNTU5QjhFMjhCCisyNzlDRjI1Q0Y4QUI3NDc5MUVCRjE1MDY0QkE4NjZGMTMzM0FCODhDQzFDODhCNTY4QTIzN0VGQkYzN0U3Qzc3NjZBRjJEMDE1NDAxQTUwQTUwCisyNDZEOEEzNgorRUZENjc3NjZBNTZCQzdFMTQzNzQwNzRDMjUKKzU2ODZCNzc1RjVDMDcxREY2N0MwNEM2MkEyOUQ0MDdDOTc2NTlEREU2Nzc0NUMyNUE2NzdBMUI5NzA4MkE2QjJCQUNGQzQ1OQorODY5OThFMjMKK0FGNTlCNDc4NTJBMDQxRjIzOTVDMTVEMjBGCitBQUM3OTU0MDMxOTBDMTg5Q0FERTI3NTZCODhGMkQ3ODdBMEY2ODZBRkNEMDczOUIyMTQxREVDN0FFNkQ3OUZENkZDRDgwMzQxMDUyRjgKKzBEMzNBMjFDCitERDUyM0IyQTEyRjBGRDczMkYwRjVENzM3MTQyCis3QkFDODFCM0MxQkFFRjE5OEVDQUU2OUQxN0ZEQTM5RUIxMjMyMDgzRjc0OTUxN0FCNDE2NTFEOEY2OTJDRTA0RjY5ODcyODAzMzZDRjY2QkI2REM2ODE3MUY5RjE4MkJCNTlBNDAyRDMzRkEyNTNGQjUxMjM5NTQ5NjI0OEU3RjU5NEE0MTcxNTdCNzRGOEQ3ODc1NENGQTZGNzM4M0VENTBDQ0VFMDEyNDFGRTUyQkJGOUM5Q0M1MUM4NTY4MjBBMzQzMTczNEIxRUM5NjUyMjkzNUU1M0YwNTYyMjUyOEU0N0JDQTVBNTgwNDY2NTZERjIwMjc4ODEwQTQKKzkwM0QKKzk5NDJFN0E2RjgyM0QxMTc5MUY3NkQzRjMyQzNGQkM5RkY2OTFCOTBBQ0Y2ODhCQUJDMTJDNzI2MUJFNTJGQzVDMDFEQzYyMzNCQkNERTg3QzY5RjFDODI1RTNBOTA3MDg0NTREQzAzN0NDNjNFRDk2MzYwQ0Q2QjM0NzIwNkVERDI0NzY2MThGMEVBNkU1NDcwMUM0QzNBOTBERTY0QkJDMTYwODY0RTAxNjI0MjZEQjIyMjk0NjU0RDVGOUVCNTk1RjAyRkY1MzIxRTUwQUI3MERFOUY4N0M1MzUzOUZFMEE4QjMzMEU5RkZGNzc0Q0NENjAzQ0REREI1QgorOUIKK0RGQUMzODgyCitCNDdBQUQ4MzJDN0U3NDk3MzBGQkQyNEE0NTFBCitCMTlFQTQ2Nzg2MzgzRDdGQUVGMjVEQzc5NDE4NThBNTRDMDQ0QjkzNjYxRUExNEZFMzY2OEUyNERGNjUzNUQyNzY0NEU2OEM1MEE2NkE5OEU1ODIzNjY2RThEOTc2QTMzRDM2MkZFOEJENzk4NjIyNUYzNEM4RUVCNDAxQzcwQ0M1QzFFRDYwRDgxRUYyMkYwNURCQUFGOUVGMUFGMDkxMzlBOUY2RjYyQTUwNUZCQjc0MTYyNDY3NDVFMzkyOEMwM0E0OEJBOTQ1Njg5MDg0QTI2MDk4NDE0ODg2MEI2NzMzOUMyRAorQkE0NEQxNTIKK0Y5OTM3RTVGQzA5Mzc2QUY2NDU1N0UwNUY2MDAKK0ZEMDNDQzUxRjI3RERCODk1QkIzOUYwQjQ4QTRFRDFDQjY1ODYyMURGNjAzNjZDNzlFQUM5QkI4RTNFOEJCNkRGRjE1NzNCMzExOEY0MDk1ODI3RTIxNjIwQzREMUFDRjkwNTNCNjFGRUI2NjhFNjU5NDA5QzM2MDY4RDRGOTVFMzQ1OEVDQ0ZFODE3NENCN0Q3MEQ2MEU1NDFEQjdGMzgwQTJEMjYzMzlGRkVDRERBNTkwM0VCMDZDMDk1MEVCRDcwOUY2NEVGQUZDRDJCMzlCNkZCMDg1NkYyMzI3QTc4OUMxMEZDOEFDNEQ0RjJFMjRCQzZENDc0RTQzQgorRjU1MgorMDEKK0FEQTJDQTRFCis5RUM3NEQ2Mzg1QTg1MENCMzVDRTNFRjAxQworRDEwRUJFMDQ5QjQxRkM2NkZDN0MzNEU3NjRCMjk0NDc1OEVEM0ZDRERGNThGRUQ4NjBFOUQxRjgzOTg4MTUxRjM0QzdDMDJCRDM3MDJBMTdFNDVEQjA4RTM4RTVDNjJGNDYwNjU3MzMwMDlDMzE1RDQ5M0JDMzQ1MEIzOUQxRkQwQkE1MTAzNEEyMTNCMTQyMEU5QkI0QUQxQjdDMkRCMEI5M0Q3MDY1NjI0NTcxMzVGRTg4MjRBRkZFQzJFRURCNjAKKzYwOUMwMzgzCis4NzUzNDMxOEU5RUIwQUNFMTVGN0M2RDVGOUE4CitCQjU5QTgxMzZFNUI0QTExMjYyRUNFMzUyQTM3MzBCRjdEOTkzMjE1Qjg1RDIyNTM2MDg1RThBQUIyOEVENEQ4MTVFMjVBN0JBQUI5Q0NDNTMzQkY0OTMwMTJDQzk2MUY3NzUyOTEzRkQyNkU2QzhDOURGRUQ5RUI4NjJBRjlDOTM4MDQzNzc2QjcxMDEzOUMzMDhCRTI2OTdCMjA5QTAzMjk5ODE3MzMwMzJFQ0FGNjZDMEI1OERCNTBGQ0I0Qzg2QjMzNjVENDY1RDg5QzhFRkEKK0NEN0QyMTU4Cis1MTU0Nzk4MzYxMzlDNzhEQTZEQkIzN0FERTg3CitDMDNBMkREMTY2ODdCMjM4MjM4RUM0MzFDMzM4QUREMzk1MkQyRjE5QTU4RjEyMTY4MjVBQTE3NTRCQTdFRUEwMUYwOTYyMEJBMjdDMThFMEM3N0U3RUQ5QjY5QkQyRDU3Q0RBOTJCNDM2RTNFNDY3NDFBN0UyOEJGNkZBQjM0MUI0OUEyMDdGOTk1QkYwNUI4NTI3MEU3MDczNjdFM0I4NkY5QTc1MTNBRERCRERERkYyQ0JEOUZBMkE0QzZENzI2RDAzMTZFNERFOTMzNjU2MDA0Nzc2MDhDREE2MUQ0QkU1NDU0RjJCOEIxQjlBNjFCQUQ1MzkwRTQ1Q0MKK0JCREUKKzY0RDEwNEIzQUQ2NUE1RjFGMUMwQTMKK0U5QjMxMTVGCitEMTE0OTg1ODM5MUIwQTIyMEEyRTZFMTBENQorNTA1NTIyMzMyQkVBMDNDNzhDODkxMTUxNUU2Mzc3QzRFRjg2RUU5ODlCMUFFRjlCOUZGMzNFNTcxNTY5RTUxRTFCQzREMkMzQ0VCRkU4MDNFRDAxRTE3MUJFQUVFNjVGMDQwQUZENzY5Q0VBREFCRTIxRDg2RgorMTkyOEI3QzUKKzc3MkE0QzAxMzM5MEMyRjRDOTc3MEE0OTMwRUYKKzFFM0U3MzMyMzU3QjY4MDdBRTMyQzA0MzY4QjA1OUVEM0FDNTMwQTMwRkI5RkYxODZCNjlFNTE5N0E4NkU1MkZFNEM2RDc1NDE0RDkxRkE1NzA4MEMzRjY2M0IxMTA5QjgxNzU5MENDNzBDMUU0Qzc0OUNFODczMEU3MjdDMzVENzY1MTI1NDBDMUEzNzE1MUI4Q0UzMTU1QURCNjM1MUI3MUEwNjE3MkVEMDdERTRCQjNFNDBEMjJBNzM5OUNDRjE0MjRBMDUxOTQ3Q0U1RjNGQUE2NUUxMDdFRUUyRAorMTlEMkFCQTQKKzRFQjU1QjQ3NkZCOUFBMUY5NzgxREI1NTg2CiszRTExQTIxNEMxREUwQzk5OTQ4OUI0N0IzRDhDRkIyQkY1MEY3ODlDRjlDRkQ4NzlDNzA4RjMzMzQ5NzI0Nzc1NTQ0OUMyN0ZCMjAzNDI4Q0E1NkRCNjRBNThBNDk2NDA4NEI5QTNCOTk5NjM3MTY1RTY1NzUzRTQ4N0FFMDk4QThDMjdERDU1RDNFOEQ0Qzc4N0QwRUE1MEFDQzVGMzgyNDQzMzYxQURDN0M1QTRERDQ3Q0ZGOTgzCisyMDVDODE5NgorM0RFNTRCRTEzQTQwMDlGQTMxODI0NUEwRTAKKzE3QzMzNTJCMkQ0MjVFMUY1NUI0QTVBRDZBMjU4QjhGMDlCRkYwNjExNTFBMTAzQTVCNzc4QjgzNTRBMjhCMkNEQzc4NTE3Mjg5OEExQjE0NEMwRjVBQjEwODU0QjRFRkU1NDVEREE2Mzg0RUQ0MzlCMDE4OTFBMzg4ODJENTgwRTA2NDFDMUNEQzA2NTMzQkE2NjZFQTY0MkI5OTYzM0Q5NzM0MDQKKzdBN0U1RTdECiszMzhEQzlCRDFEODlCNUNDNUZENzg3NkE4MzE4Cis0RjBGOTNDOTBGREYxMjhDMjMxMzkyRjhEQTM5MTVCNjdDMUJEQzI2N0QwQUU2QTc0NEI4QjJEMTc5MzgxNzNGMDIzQUQ1NzI3MTYwQjM3QURDQzBCQUMwNjUzNjdERTZDQzE4MjBDMTBERjIyQjVDQTQ2QzdBMTIyNkFBNTJDRjVCRDM2RjQzRUUyQkEyRUU1MTY1NzgzMTcwMzgxRkVENEIzMDQ1NEM1RTgwQzBGMDMxRURGNUJGNjU2RTMxNDU3REJEQTU1RDQxQzdDNEM4RTk5MgorRjhBQzVDMjAKKzU2REM5MTQ0NDA5RkZGOERBODc4Rjg2RUQ3ODQKKzkyQzMxQ0U0NENBNkYwNzZDODc1OTlFQjREN0JEMDYwRkY1MjhCNEU4MjEzNDQxNzQxNUVDQzY3QjczNTJBNUExM0QzQ0I3MDFEN0M0ODJFNjFENzAzODg1NkM4NjU2NTM3QTY4RjNDODI5RTg1ODAzNEEzODNEMDU0OTIyNUQ3NDQ4NjBFMTIyRUI4QzRFNDBCQ0Y3QTlBOTE0MDQzN0Y1QjBBRDg1REVDNzE5QjZFQjVCOTU2M0Y2MTQ1M0IyRDdEQkIzMEVFMkU5REVGODAxNjAwMTA4ODA3Q0I5NTNFODAyMTYxRjQ4NDBCMjI3OTkxNzZGRTMxMEQ5QworM0NCOEZFMkQKK0I0NTQ3RUU4MzA3QzU1NkI0ODk4NzdFOUU0CisxMjFENjhGQkM0NzA3NzMwQjU1Rjc3NkMzRDc4NUVGRDU4NDRFQzAxMzE3RTBDRDcwMjYyMDUxQkEyNjMwRDA4RUFBNkVEODM5MzVBRDMwMTcyQTQ5QjlGNjNFNUFFOUFFOUZCNzg5MjU3ODEzRDZEOTkwMjc4QTdGOTAyREQxRjA0NEY1Rjg2NkM1QTZCN0M0MjYwRDlGOEIxQkEwNzFBMzYKKzg1QjgwNDVFCitBNTQ5NzJDQTFEMEUyRDJEMUM2MTFBNEJDMTMyCitBREFEQzkyQzQ2MzhCM0M2Q0RCRUYxODQzRDI2NkYzQTczMUE2MENFOEMzRENFRUFFNTk2RTVDRTEzNTJDNjVGQTYyOEYxQTEzQjkxREZEOTJEQ0JBODM5NkQ2NzcyMkVEM0UxQzg4NTM2NUI1RjVEOTMyNzIyNkI5MTU4NEU0QjU2NzAwNjkxMDgxNEQ2OTg3QzNEQUUwMDkxRTE1MEQxQkQ3MUQ0MDYzQjlGRDgzODc0Mzc2QTgxNURGMUNCMzRERTEyQ0MwNjM3NDMyOEVDOEJERDJBNDVFNzUyRDAzRkZENENGMjA1MTc4Qjg3MjQ3NzYyNkJFRjBFOTgKK0RBNjcKKzU0NTI5NTNEREI3NEFCQUM5OTBGNjZGRUM5MjIyN0U1CitFQjg2MzRDQgorQzZGRTgyNTg4MkNDM0U1RUY4MDI3MjMxNEM0MQorMkM1REI0QTYyOTQ0ODYwNzhCNTMxMTg2QTlCQkY3NzIwNEE4N0E5MDlCRjk1RDZDREI0MEQ2MkMzRUUwM0M2REU5NDUwOUY4QUUxRjM2NzY1NDIyQ0M2QTIwQzEyMEIzRDNGQ0NBMTBFMEYwODhFQzRDNzNEQjM4OUQ3NkM4OTkyODNEMTNGQjI2Qjk1RThBNzE0NjA5QTY0QUNBRkUyN0E1MjhFMzYzQzgzRTk0MjBGRDhENzI0OUVGNTBBNDhBQ0UxMENCOEFDOTNEM0U1NDczQUFERDg5MjU3NDBDMEZGN0JGQjcKKzlDNUYzRDY0CitFQUZBQkZDMDA2QzJDNDIzMjU3OTQ3Qzk4NDlECis3NEM4OUY1RDhCNTY0MENGOTk0ODVDN0RFNEUxRUZCRDM5MDFEQ0RGNTMxOEJFQjNBRjdCQkM1QjcyMEVCODVGNjhDOEZFQ0JDNUU4ODc0NTA1MjMwQ0NCMDY0MEE4Q0QxMEU5RjQ5NkRGOTE1NzE1OThDNTZFOERDRjNCMTVGQzM1RTY3NzRBMTRBMTI1RTVCQjdCNDY5RjAxNEY2QzZCMzcwMzE0NzM2ODAwMUIyMzNGMUYyQ0YzMDk1MzdFQzk3MEIxN0Y4OEY0MDRGQTc3RDc5OTk4NUE3RTNCMkQ0NzMzMzE0NkJDMTJGRjI2NUNFRjA0M0RDMzUyRkIKK0JCRjMKKzM4NzY3MgorMzdGQ0NFMzcKKzkxNkUyRUE0MjMzRERCNTMzOTI1QjdDODdFCisxRDI0QzM0RTFFRTU1MDRDM0I3NDk4Qzg5NjEzODQ3NThEMjZEQUU2RTk4MzI3RjQ0NUMxMTZFOEREQzM3RDU5NzdCOUJDNTkwNEMzMUE0MjYzRTJEQ0E3QjQwMzI0NDcyMjVEODg3RjM3M0JFNUM0NkQ5NDQxQjg3MTYzN0NFNkI1MzFGNTAwMDQ4MUYwNkRBRjYyRkE3RkREQUI4OEFEM0I1OTM1MzEzMzc1NDREMAorMEM3NjBFQjEKKzVFMDI0Q0ZEMjZDN0E3QzMwNDQ1NThCMTAwCis0ODI3QkY5RDRBRDg1MTJFOEZCQTA3MzY4QzBDRjgyMjdERjE5NzI3OTc2REYyNzMyNTFFNTVDNDQ0QkZCQkRERjJGMDdCOTYyNjMxQTFCQTk5ODJERTEyMDk2MEE3OTlEMjgzMEQ4QTM2N0JGNjA1MUIyMTZCNkIwNkE0NUU0OEMzMjU4OThFOUY0REIwNDU5QUU1RDREMkEzQUNGOTg0NDY0OAorMzAyMDY1NDgKKzA5OEQ5NUJFRjk4Q0UyRUJFNjkyQkM1MzFGOTkKKzk5OTA1MzAxOEYzNzg4RUUyQ0JERUNDOTJFNTMwQjdDNzYzMEMzRDcyQTk0RTRDQzdENDk4OTkyRkQzMTAxNDdCQzM1REM1QkIyMDA5QjZCQjI5RkJFOUI3NEY2NjZBNjZCRDYzM0YyRkE1QThEMTdCMzJDOTBGQzY4M0ZEODM1MDg4Mjk2MUE4OTFFM0Y5RkQ2Q0E2OEUwRDY4NTFCQUVGMjkxQ0NBQkQ3M0VEMDczNUZENEZBN0E4RjY0ODJDRUM4QzQwNkQ2NThGNTVFMkQ5N0EzQTg2MzUwRUYKKzJFQjk2ODY2Cis5RUFCMzEzOURERDc3MTBCQTAyODQ4MTNCMgorOThERDFEN0U0RDBERUYyMEQyRjBBQTg0MTVEMENDMTYzRkI3MTMwQUY0RjcxMzU3QUIzNjMwRDhFOEQyNjc0M0M5N0Y1QzcxQ0MwRDhCRUNGNENENDEwOTlCQkU5RjZERjg4MzVBMzdBNjU0QUVBRDE2MDA4RjZFOTc3Mjc1ODJFRjU4M0NFNTFDNDJCMjA0RUYzQkNCQjg0MEMzRUM1NDhDQUVEMDIzNDFDNUEwQkFBNgorOUNDN0JDNTEKKzcyNDE4Nzk4MTYyOEFFMjlCQzhFRDMwMTFECis0RTJFMUExODI2NkI1NjEyNDZFQzNBRTVEODE5RkU1QjQxMDkzQkVFNTJBMTJBQTVERDE2MTgzODVBRjQyNTlCNzM3MkY3NzlDOUUzNDIwM0UwNDYzQzhEMjE1NjUwMjAwODI4Rjg3OERBQkU2NEQ3RENENTJGRUJEMkJCMzc4MUY0NkQzMzgyRTA1MzA4NThERjk3QTBFMTJEMkI4N0VBNUUyRDJCMjNEOERFNUQ4QzM5OTk1N0E0Cis4NDA2NkJERQorOTA5RjQ4QzBCNEFCMzMwMzVDMzcyMzMyOURBMworOUM3RDY2N0FEODc2RkI3NkMwNjM5QzVGMjUyMzc3M0M3MDIwMjc0RkEyOUExNEQ1Q0FCRDg1OEEzODg2RDcyRDYyNkREQUUyNDgyM0JGRDM5NTYyMjA2RDM5NEM0QzA2REZFRUFBNTNFQjk0OTc0MzM2OTRDRDkyMUNEMjEwQUNBMDdGNUU0QzQ2Q0YxMjU0QTE1NEM1NTNGRDI5NTdDOURFQTdENzUxQzQ4Njc5QTc0NTgwN0U5NDQxRDg2MjQ3NzFEQzJFOTczMjM5QTdBM0ZDMjFDREM0QzYwODBDMDkwRjI3MUE0RjE0OTQ2MUQ3NUE5RDUyMTcwMzUyCis4MjM1CitBRjEzNzk1QTIwRTRDNTJEOEU2RjZDQzEyM0ZGNjY5M0MwRUY4NDFBNzNFREUwRjg0NzlGQTY1N0VGRUJENUVBOUI5QzI1RjI2REE1RkIzM0U2NEYyNTBFRTJBMzcyCis4NzU0QTU5QgorMUJDNDJFMzlDMzNGNkY1MzE3NTFCMDBDOTUyRAorRUUxRjZDRTYwQjc1NEM3OUQwM0UwRDgwMDMyNjdEQjc0Nzg4MTlDRTE1NzQ5MUMxNzI0NDEyRTU3OTk2NDJDREM3OTY0NzExM0Q4ODUzMThFM0M3MENBQUQzRTU1QkU2OTRGRUU4MUU4NDgzMkREQ0QwRTI3QjAxNTBFMDVEOEQ4ODk3OTIxREVBNjUxNTZERTVCOTM2MDU4RjQyMzk5RjJBQTkzMkQwNTAzQkVGOUY3OEMyMjc3MjhCQThDNkRCOTdGQjE1M0U0OTdCNzFFRkI0NjQyNDk2OEMKKzVFRkI4NUVBCis1Q0IxMzlFRkNCMkFCODU3N0U2REM3RjZBRQorRTIyRDE4OTI2MDhDMjRBMDlBMUU3MzA5M0VCOUM3N0Y4QTJGODdERURDOThFRjQxNzMwQzYyRUIyNzk1MTY5OTQ2Mzg3MURBRjg1MjQ2MkQ3RUJERDg1MjdBQTkzNTE1NDczMjU1NzYxQzQ5RkEzODM0NjQzMkFBRDIyMDAyMUY1MDNDRTNCRjY2NTE1NEQ1QjY3NkU1RDhENzFDNTU3NworODJGMEEzRTEKK0FFNjg5NEE5NDlEODYyNjg1RUZDRkYyMzI2QjQKKzBFMjdFMDM0NEVDQkU2QTY4OENFNDBDRUQxMTIwREMwNDQzNTdERTdGQjZCQUE0NzE5OEE2NzE5OTE4MUIyODgxNTk2ODdDQ0E5RTA0RDkzQzcyRjgwMkY2MEI0NEZDQjU4QzA4QkQyOEY1RTM1RDBFNjJDMjIwMUE3MkIxNEYyMjREQUE3MDI5RDI3RkJFOEY4MjcwODExN0I2NTM4NjU5MjQ1M0JCRDhDRkM0OTA4OENENDM5NjQ0QTM4QTRGMjlGNkNBQjIyRkI5NzAwRkRDQTRCNzUzRkFDRDE5M0U1QUFEQkI5N0MwMTc5M0M3RTI1QTA3Q0JERUIzQworMkJBOAorOTlGM0FBN0Y3MTE0MkI3QTk0Q0QxNUE1RTc3Qjk1OEQ4NkE0MTQ1OEYyQ0E1M0VGOEVGM0IxNEY2MkZEOTc0RjcwMjMxQQorRjQwNjA0MTEKKzc4NDAwQTVERkM5MDRGQjYzQjM5Q0QyMkNFCis5QzJGM0Q1Qjk2MEVDMTlBOTUzRDM4MTc0MDU0RTQxNDRFRjM2NzlBOEUyNjQxNkE3QjQ3RTQ5NjAzQTUxOEE3RkQwMDI3QkNEMDAwODRGODIzMTkxQkM3NDkwRTFGRTM0QUI5MTQzRkY4M0YKKzNBRTlCOTdDCitENTUxMDc0NUY0MTI5NkU5QzAxMTMxMkZFMkZGCitEMENGM0U1QkMxOUMxRTE3NjQ4QzJCODc0MzQ3Q0E5RTU5OEMxQTA1N0Q2OEE2QzdCMUIzQUJCNEFFRDQ5NTcyRTk3MzlGQ0QyMkY0MUJBOThEMkExRUI2Rjk1NDhEODIzNDMxQzY4NkY4MjhCODVGQzY0QzNGN0ZERUQ4MTg5NTRDNEJDOTZDMjZDRTJCMDUyQjhCODlERjVGQjIzNEFEOTFFQTM4NDY2Mzk0REFEQzNBQ0VDQTMyOEQzQzk3MjgwMjg2RkI4QUU0Q0ZCNUMyNjM2NDJFNjAxQ0YxMTlFRDgxQUUzQ0U0MzYyM0RENEJDRjJGQjY3NjU4RjgKK0EwREYKK0MzODdEQzVFNjQ2N0QxMDE0MjUzODEwMkUxNDY5QkQyNDFCQkNGMzNDMjFFNzYxMzZCMDU0QkJGQzZENkJDCitDMTZCNTJFMAorRTk1MEM1REY0N0QyQkFCNUMwQUMwREQ3OUU3MQorQzUyNzg2N0IxMzU3RUVDRDZCNDEyQkYwNkQ4MTgyMTQyOEY3MzI2OUJDQzU0OTRFRDhBREJERUU5RDU3QTU1MTczRTU4QUVBMjcxODA4RDJDRTY4QzNEMDM1RjdFQjQ4MDFDQkMzMDY5MDQzNjhEMzg0MUVFMUVENENBRjk3NDIxODIxN0NEMDAzNkYxNDBFRDJCOTcyMTJBODhEQjREODU2RUE4MUE2OTE3OTI3Nzc4NjQwNkQxNjQ3MDU4RjFCMEMxOUQwQThEQzlEOUNDNTREQzU4ODg4Cis4OThBMzc2RQorMTQ3QTFEQzk1NUQ5NzBGRkU4QTBCRkE1MTEKKzFBNTc4QUZGRDM0NDA3REVCNEEzMUEzMzM4RTI1N0ZBMEU4N0JDMkJDMzhFQkIxM0VCREE1NTEzQkY5QTI1QUY0NTlFMjVCQzQ4NzZEMTBGMjFCRUE3M0ZBMUZGQzEwNjQ4ODhCOUFDMTk0QjRGN0E4MEYxRTlBMEMyQ0MxQTRGMTY2MEE4RkIxNTQzCitEODU5M0ZBQgorMkJCRDQwMUZERTMzMjVENERFQTBCREVGOEJBNQorNzUzODdERDA0OUM1Mjk0NTg2NDM3MEIwQTVBODYzNUMxRjZGNTVDNUQyRkJDRERFQkUxODU4QkYwNTE4QTk1Nzk0REUwQTFCRTFBRjAzM0VDMjhFNkZCNkUwNTkzNjYzMTc2MDA4QUQ3MEYzMzFFMTVEQkE5NzIyMkRCQUIwOURDQjhBQzg2QkFGQ0EzNEQ5ODBCQ0MzQ0RERjVCMEM4ODMyMDVFQzJCNjYzOEFDQzQ3QjBBQkYxQkEwQ0NGNTI0NTVBQzVFRTI0NEQyMkM1Q0QwOTU5M0Q3QTM2MzkwOUM4OTFBMTZFNkE5MEYxMAorQUE5NEI1Q0MKKzgyMDUxNTFBQUIwQkYwNUYwMzFBNjM2M0RDRUYKK0QyRjNCMjUxMzk0RDQ5NjMzMjBFQ0E0RkIxMjZBMEY5MUNCNzZEMDJEMDkwNUFEMUFFOEI1RTA0QkUzRjM4NUMzQUJFRDE1NDRBODRCNzM2RTZFRjlCODhBRkJGRjMwRERDMzkwNjkxQzQ2ODk5OTlEQkQ4RjIyNEI0OTUwNjVDMDNGQkQzRTc5MjVCQThEMzU0MDlDNEJBMTZGQTYxNTBDRTc1RTNBQkJFQ0I4QUFBQUY4RkU4NDRDQTk0NjJFNDU2ODQ3REFERkNDNTgyN0RFM0VCCis4NTM0QkNGNQorQTgzRjVEQjVFQzJBQjNBMEE3MEVGMUJFQkEKKzUwOTUwNDVBMTAzMTk3M0M1NTAwREM4NEM0MDYzQTcyQzIzNzVCNzZEQUUwODIwRDcxMTFGQkZERkU1QkVDNkU1QzFDNDU5NjgwRDhDMENFRjJGNzI4RDBDQUM1RDA1RDk5MkQwMkNGQkE0OUU0OTQ4OUVBNjJFMDZGRjc2Q0JEQkIwNzgwOUI3QzQxNTVCM0QwRkU1QTVDM0ZCMUE0MUE0NENBN0UxNjdGNDM5NAorQUE5Nzg1OUYKK0MzNjY4OUQzRTJENDdDN0MzOEU1RUEwRUQ1MDMKK0M3QjU1RTFGNERCQURGOEYxN0YzNDczQjlBMjgyQkIzNDZBQjExRUY2REMxMDk4NEIyOURGODdEQTNDRTlEQTZGRkFDRjRDQTc3NDkwMDRGRjY3MzhBNDAwNTRFMEMwMzE2MDc3OTIzMUMxQ0E2RjZDOEE3MzBDNUFBRkE4QTY3MjI4RjdDRjY0M0REQzZFMDAzQTRGMEU4MjVFQkI4MTYxODQ4ODFENDZCNUY4OUQ5QjI4MkI2ODM4QzUzNTNBMUM0Q0VFM0RBMjU2NzQyRTY4MkI5MDVBRjkyNjMwMThERUM5NzY5NzBEMTRDMzAyQTZFMzVCNjdDCitFRjRGQTcwNAorQkE4QTA3M0MwNzFDNjQ3ODJERkQwNDM0NjQKK0E3NUQ5RTBCQzc1OTg1MkNFNTM2QjA1Mjc2NjRCOTQ0MTMzRjBENUI5RkQ2NEY3NTE4MUUxMDc0RjlCQUVEQkI0M0JGM0RDMUQzRkY4QTlEOTg3OEE2QUI4MjY1N0QzRkJFRkQ4RDJFMzdFMTczREZCMTg2NDY0RDVGOTNEQUY2RDRBQUE0OTM2NQorMTI3Rjk1RjMKKzMzRTUxODkxQ0I1MzZBQzY1MDMwOUNGNzk1Cis1MjBBODEyMjY2NjAyRDEzM0E4QkVCOEQ2ODI5MzVEQkM0NzgwQjhGQ0FENEY2OEFDNEYzREI0RTM1RTgxMTVFOTJGRjkwMDkwRTcxNDhGRkIxREMzQkM5N0NGN0E0QTI4NTU5RTg4MzdBN0E1NTM3NjcyNzFDRTVDNTc5RUYzMkNGQ0VFMjU4RkJERjQ2MjdDRjQ0MUYzRTJGMTFDMUNFNUU4MDY0NDdGNEMwNERBQkIzRTIyRkI0QkVEMzI1MTVCNzI4Cis4NUFFNEYyMworMTYzRDkxOEY4MDQ1NjA2MDkwNjE4N0M4MjMKK0Y1MzMwODc4RkQ2MjlGNTQ2OTRBOTg4NkUwNDkxRUVBNTQzRDExODAxMzAxOTg4QzJFQTBBMEQyMDVFM0MyMkJERUUzQUIwMDkxMEM0M0QxNDc0MDZBRjc0MjdBMEQzOTBBQ0E5Mjk4ODMzRTk3QjZFQ0NEMzQxNjBGRERBRDAwRTZBNDRCOEM3ODhGNThCMTMxOUFFRkNBRjU0MTk1MTcwNEVFMjExMDQzQTA2OUM3NTAKK0IwRUQ2QjRDCitBNDZGQTA4QkFBMDAxRDMxMDY0RjA5OTI3QUYzCitBREU4MUZFOTY4REVFMzYyQ0YzOTQ4MjhGMTM2QzUwMjhDNTIyOTk1MjA3OTI2QkQyMDc0NThBQzM3NzhEQzIzREY3MUFBOTU2OUUwNkE3QkY2NzY4MzAxOUE1Nzk0MEQ4M0UzQTM4ODY4NEVBOEYxRUYzOERCNEMyOTlENjJCODc4Qjk5OUNEOEZCMTc0M0Y4RDNBNkZDMDMzREFGNkFDRjdBMDc0ODRDQjE3RDAzMUJEQ0ZCNDA1QTUxMjJFOUVBNTE2Qjg5OEQ3ODRCNzZENEI0RkMyMzNFN0VFNEQyOEVCRUNCREM3RkE2REY5REVDQzdDQTM0RjM2QUUKKzgxOTIKKzE3QjRCNENCQTU3RjQ5M0QzOENBNjA0RUVDREEKK0RFQTUzMzFBCis0MkIzNkRFRjQxNEJFMTYzRTVBNTk5MTRBRDNECitFNjNDQjU5N0JBMDg5M0FBREIwN0E2MDU5NzI5MjQzNzRDRkVEMjRFNzJCMTEwRTM5RDdGQTAxOEUwRkZBMjY3RkU2MTlDNDZCQkNGMDIwREJDQkQyMkY2QTE0RUM5RjAxMkYxOTdDMjVDNjQzMzIxMDk0NTRCMzcyMUUzNDBGREU3OEY1MkE2OUZEN0JFM0I3NEZDNDhDQzg0MzY2M0EzOUM1MkEzM0FEMTY0OUZDMjcxNDI0N0E0M0UxRTM2M0ZFQ0M5NjhFNkQzQjQzRjMzQURGNzI2MkFFMUNGM0IzODA0QzQ3NTFGNjQ1ODQxMDFGQUMyMDI5NzNDNjMKK0FCRDcKK0E5ODYxRENEQjAxQTRCM0U5NjgzRDg3Mjg1RjhFMDA1RjE2RjA3QTVGQjQ0NjNFRjA1CitEMTlBMzhENAorOURBMDYzRTNEMjQyREIwOTY3NTM1NUU4RDY0MworRThDRTdDNjRCMDNCRkM5RDRGMTlBMUU3N0EwQkRBNEM3NkZGOTlDMTNBQkM2MTYyRUQwMjYzQTc3MjI1RTI5NUM0QjZFRTZFNjhDNUNBMkFFMEJDMDUyMTA1MzI0QkM2REM5MkEwOEUwNjg2NUI1NzYwOUIwM0QwMTc5RjcxOTAyMUZGNjU2MUE0NTA0NEIwQTMwNEFEMTA3MDQzNDA0Njg5QTQ5QjM0MjQzODcxQTlDNTZEN0Q5NzEyQURBNjZEQUQwMjk5OURCMEE4RkM3MkQzRUZERjhBODU0QjA2OTgzOTEwMzM0QjIyQkZDQUJDQTU3OEEwQjhEQTdDCitEODEzCis0RjVFRDBFMQorOTM1RjgyRThGMTc3RUVEN0Y5M0RBM0VBRjIKKzBGRDA4NDUzNkJFN0E4OEI0RDlGMzEwMTFDREI0QTlFRjgxREIwNjg1QTUzRTY4Q0UxM0Q5RkM5QzQ4MUE2OTU3RUYxQjdEMkMzQTMyMkU5NTQyMkE4NkJFOTE1NTlDMDg1MkZCNjY3QkUxMjI1NTlGNjdEQzJDOUI0Qzk4RgorODYxM0M0MTIKKzczNUE2MjQ2QjM4MDBCODVCOEQwMUYyMEYxMjYKK0Y5NDY5NEE1OTk2MUEyODQ4QjA1MUY5NTNCRTUxQTMwRjkwMEQwNzU3REY2NUY3Qzk5NDI1MzIyRjI3RjQ5RUIyMDMyQ0Y1MjA5RDJBRUMzMTUyQUI1NEZCNUNFNzExRkNCNzc2OTZGNEUwMkFFNTFENzUwQkRBMjc2QjBGOEUzOUE1NDA4NTRFREVCOUY3Q0YwNDBGMjk3ODUxOTlFMjE1MkU2MkUyNUM1M0JFNjgzNDI3MUVDOTBBMEY3Njk3MTI2QUIxMDFBMkFGQTk4RjgzRQorNUI3Qjc3RkMKK0I3N0ZFQzg1OTFBQjM0QTlFREZFRTJBODM5CitGQjM2NURFNDNBNzI2REE3Nzc2MzczNzk2NUZBNjQzRUZERURDQzlBQjVBMQorQjEwQkIxMjEKK0YwRTI0MkRDNjBBQjcyMjdCMEMyNUE0NjVFOUYKKzAwMkZBNzlBNTQ4MEFFRjcKK0IxRkI4OUFCCisxOEYyNDM3MzQxMDY3REM5RUNERDFENzY1QzEyQzc0RjM3QkNFMDc1MzdEMDI3QjNFMkEwMUFGQkFFM0UxNjFDRkIzNworMEEwMjE2RkUxNjVFRTQwNjlENzc5QTdENzJEQUNFN0U3RjZFMjM0QkVBQzM3OTg5OTRFMkM2Rjk2OTMyNkY1NDEyMTVFQzU5QkIzQQorQUY1N0U2MzA4MTQwMTY0MjE3MjZBRUFERUI1M0EyODhCREUwNkM4RThEMzFCMzdBNDJEMDQ3CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ2IHB1dAorZHVwIDMgL0MwMDUwIHB1dAorZHVwIDQgL0MwMDU4IHB1dAorZHVwIDUgL0MwMDY5IHB1dAorZHVwIDYgL0MwMDcxIHB1dAorZHVwIDcgL0MwMDczIHB1dAorZHVwIDggL0MwMDc4IHB1dAorZHVwIDkgL0MwMDc5IHB1dAorZHVwIDEwIC9DMDA4MyBwdXQKK2R1cCAxMSAvQzAwODQgcHV0CitkdXAgMTIgL0MwMDk3IHB1dAorZHVwIDEzIC9DMDA5OCBwdXQKK2R1cCAxNCAvQzAwOTkgcHV0CitkdXAgMTUgL0MwMTAwIHB1dAorZHVwIDE2IC9DMDEwMSBwdXQKK2R1cCAxNyAvQzAxMDIgcHV0CitkdXAgMTggL0MwMTAzIHB1dAorZHVwIDE5IC9DMDEwNCBwdXQKK2R1cCAyMCAvQzAxMDUgcHV0CitkdXAgMjEgL0MwMTA4IHB1dAorZHVwIDIyIC9DMDEwOSBwdXQKK2R1cCAyMyAvQzAxMTAgcHV0CitkdXAgMjQgL0MwMTExIHB1dAorZHVwIDI1IC9DMDExMiBwdXQKK2R1cCAyNiAvQzAxMTQgcHV0CitkdXAgMjcgL0MwMTE1IHB1dAorZHVwIDI4IC9DMDExNiBwdXQKK2R1cCAyOSAvQzAxMTcgcHV0CitkdXAgMzAgL0MwMTIxIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xMCAtMjA5IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzRDMjY0RTVGNDVGMDI4NkJEMUIyM0QyNkMzNDYyNkUwN0EKKzVCMDM5REIzNkMxODAwNUVFMzJDRkE2NAorOTA2QjI4NUNCOEJEN0YwOTY4CitENDdGNTI0MgorMjJEQTI5QkI2M0U5MUFEODYyOTEzNjhBRDUKK0E4OEE4QjU3M0U2RUZCQUEzNDNENTRFODBGMTg4NkI2RTYzQURERTg0MTE5MjQwRTBCNDQyQkYyODI0OTk2CitGQTZGNUJDNworNDExMjVDNjQ0MTczMTJBRDgwNkZCOTFBRkMKKzE2RDgyREVDNEI4QUY5MjgwQTMxRjA3QkE2RTI2ODkzRDI4QTUwMUE5NTY2MEE2MkRDNzhGNjNCODc1MTk3MDc0RDdCNDQ2RkQyRjdEQ0Q0RUJBQjJDQ0M4OTE5MEZGRDBDMTZGOUIzN0E3ODMxMDk5OEU1ODRGQjY5NzhDQUIxNDg2MjY1NUYyNUYyRTBDQjBDRTIxMUQxRjY2RkMzNDg1MDMyQzQxMQorODJERjBCOUUKKzdCRjJBQjZCRDdEMTcwMjA1NEJFNDlFNkUyCitDMjdDMEU3ODYyMDYxMkQ5RTFFODkxREQ5OUQ1N0FDMDJFMzJBNkVERjQyMDY3NDIzMzRBREQ1NjlENTY5RDM3NzUzM0QzNDNFNkM4NjQ5N0U3NTcxQkY2QkUyQ0FFNzRBN0FFRUY1QTBDQ0MKKzM4REI1NjJBCitDMDY0ODZDNDU2QkMwNEE3RkY2RDU2MkI0RUQwCis0MEIwNTA3MkI4Njg5ODU0RkU4MkM3RjYyNEE0MTdDNEQ0Nzk3MTIxOURCNDEyQkZFNjU0QUM3MUFFN0QzN0VGRjk5Mjk5MjlBODc0NTM2REQ3QTAyMEY5M0M0MTEzQUNGMUExNzQ4QjE4QjM0MDgwRTU2NkE3QTUyRjI5NDFFNjNEQjEzNERENDMyODI4QkJBNTQxNjUxNkZBMTU2N0RBNEM4NTUyQjE3QTNCRjI2OTVDNTdEMjNGMTc4RTIyQzI4OEU2NzNDNDRFMDQ0MjhCNjgxMUU3QjgwMjBCCis1NTczOENDRQorRDBFMTgzRkFCQzZDMUQ1N0U2MUUxQjcwRUYyMworOEMwMjg0NEE3ODg5QjYwRkZDMkY1MEE1QTRFODVEOTVBMzRGQUQyRTlCMEU2MTA5Mzc3NTUzOTMzQ0NEOTFGODEwQUFBMjIzRkEyRURFMEI5NzM2NjIxNzA2QzQwQ0ExQjNBOTlFMDMxQTFDODhDRjFDNzRERThCRDBCQUU4OTMyNTEzNzc5N0M3MjE1OEYwMjIwOUNBMDBBQ0I5Q0NCMTg5RTA5RkY4NkI0RDlERkVCRjQwN0QzQkVFN0FBQjE1RDgyNUI2NTU3OEFFRjY3RTY0NEI2Mzk4MUJDREQ3RjU4RUVFRTYyMzcyMjIzNQorRkM5QTM1OEQKK0FGQzhDMTlCREVGMzI4RkFEODE5N0NBNEExCisxNEQwOUYwRkYyNzY4MEI1NDdCNjUzNUYxMTY4ODQ5Nzg1QTc0NTEyNjUwODU1QkE0RjZBOUNDMDhDOTRCQzkwRDNEMjM4MkVBNTQzMDg5RENFQjlDREUzQTNBNTJGNjFGRjUyMEJCNkQ4ODM3ODYyOEI1MTI1OTc2NjQzCitCMDY5REVBMgorQ0M2MkFFRjZGMzFCRDQyQ0FFQzc2QzdFOTIKKzY4RTNCRERDOTk3OTY1OEZGRDc0ODZBNDcyNzlGMzI0MzRFQjFFODIyODdCNTg0NDNDNEJBODZERUIyOEM3MEY2OUU4RkE3OTk1RjBDNUQxREY2MEIxODRGMjFGMTIxQUU2RjJENEJDQTBEN0RERDM4NTQ5NjIwM0E1NjFBQTAyRUU4ODNBOEJBMDQyNTVGRUI4OUNFMDlEOEVFNTc1NDFDNTY4NDE2Rjk1N0ZDMjQ0RkRBREM0QUQ4Q0EyMkMKK0ZBOUJDQTMwCitDRDk1ODI4RUQ4OTU4RTA4OEQ5RkU3MEE5QzRECiswMDc2NzE1NThDQkM1NDdDRTFGRUJCNkJGRUE1QTZFRjdDRjgwQUEzNzA0MDE3QkFEQTk3RDUyMEZEMzMyQzZBM0I4MUY5N0NBRDgzMDU2NzE5QkVCRDY3NjhEMUNCMDEzODY1MjZEMzBGMzY5ODRDNzM4QjNBRjVBNEFCQzI4RUYwNzFBMzBFRjY3NUMwMDgzM0NGQ0M4QTE5N0VGN0M1OTFFMDU2MDEzMzlCNkIyNDI5RTFDOUU2ODkwOTNGNzIwQkVCMEQ3NjRERkZCQUVEQzEKKzYwMEZERDlFCis0Mjg0MjVEMjQwNEEyODU1NzZBODE3NjRDRjVFCisxMzFDRTY5M0IzQkI5NDEyODNDM0VCNzJFODQ3NDdBQkU0MjY2RDg1N0QwNkE3QjY2NzMzM0I2MUM4NzAwQUFEMjlEOTRBQTk4QjU3QkYyRjYwREI3NkM3MjRFMkQ5MzJCOTM1Rjg5QjU4OUNGNEFGNkY1Mzk4ODg4OEIxMDMzOTFGNDA2RkVCRUEzRjlFQjIwNTUwQ0IxOTgxMTk0RTIxQzk2MkQ2MkUzMjRDMURFRDAwMjU5MkRDMkUxMTdEMkRFNTg0NkQyQUE5RUNCNkUxRDNENzU5OTlGOUY0NEVGNUEzNTU5ODI1NTk2Mzk1OTYyNkUwNEI2Q0NGMTAKKzE4MDQKKzAzOTlCNzQ3CisxRjk2N0E4MDhDMzc0QUU1QjQzNTBFRUU3OAorQzI0QkU1ODRBMEE4QzZCQkJCRkEwMzQ3NkJEQjZEMDZEQUY3NzZCREZFOEJDODA3NUU1MkM1MjQxMTc3NTA5MkY2RUZFREIzMjM5QUNGQjAzRTlDRjQzRUUwMzIzOUY1QzY5OEQ1NjcyM0MwNjlEREFBNDUyMDY3OEMxOTg2RjE4RjgzRUY0RjBDOEUyODI3MTQKK0Q5NzVFNTA1Cis2QUZBNTlCNDI4NTc3OUU1MjdCQzhCN0MxOEUyCitBN0I1NUE3MTIwNEQ4RjE1QzY5RkYxQUNFQzc3OEI4NThFODEyQkFFNjBFNjg1OTkzNDBERkE5M0UzNjAxMjM4QTE0QzU0NkUzMzA4NTU5QjMyRENBMUNCODZCRUQ1ODY4MEYxNTU1NUVGMUVBMzdDNTVBOTM1QUExMEM3ODA0QjFGOEMyNDk1REE5REJFRTIwQkZGMUQ3Rjg3RjlBQTE4MEFCN0I5MzZBNkE4QTBBMDc0OURERUJERTkwMjg2RDI3QkMyRDg4QzEyQUM3NTM5QjMzMTI2MzE5M0E1QzdGNDg0OTg1Q0VDRUY0MEEyN0YwN0QyMjEzQkU4N0UKKzk2NTIKKzA5QjEwQkIyCiswNzY5OEVGQgorRjI4MEU3NTgxOUM1QkNGQjc4NzRBMEQ4OEEKKzdGNTY2ODgzRTEyODJCNkY5MzQ2ODA1OTEzRjc5RjlGQTlGMjJBMDIzNjc0RTBERjkwMDVFMzdCQThENDJEMzFEM0YxN0Q0OEE5NTJBOEZDOTk4NTQ2MTgwNENFOThGNTUxMTAzQjUzQzA1N0M0MDMxNUQ3MjMzMEIyREFBQzY4NjAzNjE5RkMwNTM0OEIyOTkyNzU1NTFBMENFMkI5Q0E2MkFDNThDM0ExQkZGMTM4NzE2MjhDQzI0RDdECis1QzYzOTAyMgorM0VFODM0QUZFNDhCOEQyMTExODk4RTI4QkQKK0JCNEU5NzVEM0E2NkYxQUJCODI3Njk5RjcxNEFDQkVDNzVBRDIyOTMwNzcyRTBDRjlGOUE0OTZDNTc4RDVDNEU0OTRDRDlEMUEwQUEzMzg1MTU4NjM5OUNCMTUxQzgxOUY4RDRDRDQzQTEwOTc3NDc2QjA4NTFGNEQ1MTU1NzhENEZCOUVGQURBMzkwOTY2M0JERDZFOTA3QUU3NjE2QzI1MEZBCitEREZBM0JDMgorOTUyOTJDRkQ5RTEzNTdFNkZGMkUzRTIwQkJDRAorNDJGNzhDNDY3NTFFNUFFOTgxNzA2RUEzMDYyMEEzRTkxRTc2RUYyQkUzRTEwQ0E4MkFFRDQ0NEM0OTBDQjQ0MEQxQTJDQkVDQjY3NURBMjM1Mjk0QUFEMzU1RDdGNEI0RkQ1RjhEQ0I1RjVDQTE5MzMwNDIwNkJDNzE4QTcxMDA3NjREMzlCQTEyNzE3MjVCMTlEQkJGRUY5NDI1NTM4MkRDMjNDM0NFMDlFQTBCRUI0NzJCNTdERjZCOEU2NTdDQjIxODdFN0I3MjQzRDRBNDkwQzBFQzk0Cis3NzJEOEZDMworQzJGMTc4NDZFNTI4MENDQkQ3MjA1NTcwQUMKKzgzMEY4MUQzRkEwNkQ2QjY2REU3RTk1MDhBNTlCQkZEN0Y1MTY1NkY5QkE3MzZEREY1N0QxNEU1M0E2MUFCM0YyRTJDMzI5QTc5MDFFQjY2RDc2M0Y2MjMxMzA2REU2Q0NCRjlBRkZFOEU5NEJDMEY5RkI1NTZBNTlGODMxNjEwQzU2QUM2NEQzQjRBRDlENTEyRDBCRTc1NjM5MDY5RkZFRTZDNUFDODMwNjM1MEY4MUQ1Njc5ODIKKzFGMThGNzM2CisyOTlGQTNBMjZEOEIxRUNDQzYyNDRDMjZFRAorNkVFQTQ3QzM1N0E4RjI4NzhDODEyRUFEMzNGNDc0QUJDQUNBRjMzM0IxNUU1QjNGQzg5MkE2RTUxQ0ZBNjBDQjkzQzRDQjBFNUYwMDU0RjlENDUyRTQ0OTY1NEQwRDIyNThCMkQ2OTE2MDIzMUQzNkU4MzUzOEYyODJBM0M4NUI0QkI2MjE1NUQyMjEwRjNGMDcwQkY2NjkwRkJERTU1NzkxN0U0QTQ3OEVEQkQ1MjVGNkVCMUM0NTNBCis1NjQyNjhDRQorMzBFREFERDAyNURBODNFQ0UwNDgzMUE2QjQ5MgorNEVCNEYzRDQzMThCQzBBMDFDQjkwOEJGOTY1MzZDNDFBRUNGQ0ZBRENGQjA2NDVCQTZENkFDMTE5NzQwODc1QTJFOEFBM0I3QTcxRURFNjFDNzg3QkVERkRFRkYwNzY3MjZDM0M1NkQ3QzBGQjQxRkM1RTFGNEQwODMxNUEzREE2QkRDRUM0Mjc2RTMxQ0U4MkFFMzQ0MUFBRjg3RTgwMEIwMkMwOTlFNzUzODlGNjgzNDVBQjMzOUU5NDAyNjFEMDFGRkMyQkIzNTBDNEQ3MDU2OTgxQkMxMTM2RDJGQkFDN0NERjgzOTZDMzBGOENFQ0Y0MTU5RjAwQkEzCitGNDU2Cis4RDVBMDkyQkJBNjFBOTAyNDE3NjdENkQ0RTBGOUM1MkExMkEzQTMzODcxNTJDRDk1MkI3RUYxMzcwREQ2M0M3RjgwNDI0RDMyNAorNDlCMzc2QzQKKzg1NjlCOTRBQ0M1MzVEQjBDQjk5QzA2RTA1RjkKK0JFRjE0NDNDN0Q5QTJBQTk1MDM0MTlEMkYwN0VBNUE2MjM4RTc4MzZDMTExNjc3NDAwNTA0MDBFOThBODVFMTQ1RjdCNENDQ0I4RDdBRTg1NDM2OEM0N0I5NjEwOTJFNkU1OEY1OUJFQzc0OUM1OTk5OTJFNTA0RTM0OTU0NDI2OTY1MEIzMjgzNEFBMUE1QUIxMDMzODNENkZGM0VFN0Y2M0EyRkM3MDhCRUU4NTNDMzQ1QThDNDRBQTRCQ0NEMDk4Q0RFMUY5ODg0RjNFNjkKK0RCNTJFN0Q3CitDOUJBNERGQ0FEQUQ5OEVCMkEyRDM4QkZENworNDAwMkFDQ0MxREJENTc1NTNCOTUzM0YzNzE1Mjc1OERGRkI2OUY0OTE2QTQ3REM1NDlGQkMwQUNGNTMzODU2NUI5Q0IyNjVCRUVCMDJENTZEQzZGNDhBMDY2OThFNkZCMUY1MjU5QUE3NEQzNEIwODlFQTdDREM3RUZBN0Q1OEIxNkEwQUNFQjMyQzRBNjA2M0FFODIxMDJFRTk5Cis3MjU1N0NDRAorQ0M2NUJCMzNCMDBGNDdCQjkxOTNFM0UyQ0QKK0NENTA4ODc2NEYzQUZBRjRGQzE4MjE3QzlFMENDODFGMjY5RjVBRUI5QTdDRUY0RDE3QzhCODUxNDVCNjREOTk3NUNERUNCNDRCNTIzNjM5MTFBOThEOTdCQzJDNzc1MTc4RTFDNTYyCisyNzMwNTE0RQorMTY3QjgwNkE1QzhBNDJBMjc4QTY2NzkyMDdDNworNkM5OTk5MDMzQkY2Mzc2NkY5NTI2QUQ2QzhCODU0RTVFRDFBQUMyNEEzQ0FCOUEyM0NCQ0E5RDVDQjQ2MDFBMjUzRTQ5MzFGQUE0QTkzMEJGRERERUM2QUE0QTU2MzMzMTRGQTM1MDU1QzUwMERDODk2NTMzODcxNzY3NEQwNkJCOUZGOUYwNkJDREU4RUI4RjVBMUREMkZENDIzOEI1NDZFRkM5QTVDMDg1OEVBMDAzQUU2RTUzMTExQTNEMDBFNTBCRkEzMjVCQzFFMjFERURFQ0YwQzFDMTdCOTRGNDE3MjkyQzFEOTBDOENFMTAyOEE4QUI2QTVFQjVGCis1NjQxCisxNzFCOTFCNUUwMzk5NjRERjBGMzlCRjRCQTdEMUIzNTk5QkI3MjVDNzQzNUZGRTJFRDRGRkM3RgorMzA0MjQ5NDUKK0FEODk2QzZDMUE2ODMxQkYyOEY3RjY2MEU4MjYKKzJDRDEwQUE0RjFDRkFBMzc5NEVBNDY1MDlDRkJDMjNGMjY0MDJGMDM1RTE5RjBDRUJDMEIzQjZDQkMzNkYyNEQ4Rjc3RDBEQTM2MTFBNkIzNUMxMDc2RDgwMkJDRTc4QzUyOUVCMEM4MkJDQjM4MjAzQTBBNjYyNDZGNTg3MkJEMTEwNzA5QTFBMTYxQzVDMDE3NUI1OEI1MkFFN0UyODZBMDQzOEQ1RDg4N0RBM0M0N0VCNDM2RTc2NkYyMUQ5QjA1Qjg1M0EzOTg2QjI2CitFRkFBRjI5NAorMkU3NUIwNzQ3NzcwRUM5QkUwMjI2NjNCODIKK0UyNTQ0QTZGNDBDQzFEM0Y1MTA2NjQ5RjYyQTc5QzgxQjNDRkRBQkY0RDMyMDk0RkRCNzEzOTZEMjI3QkIzMEM0Qjk2OTdBRDYxRTgxMzg4NTdFRDc4NTlFMDgyQUJBRDA2QjRBQzU5NjJBNkFFOThENDNBQTU1NzkxNjVENzFEQzc0N0U3M0U1NkRECisyMTg5MEI1RgorMkRERjlCNDAzMkM1NUE1MjM5M0M5RTFCMzYzRQorRjVGQTQyNkE4QTc0NTkyOEQ0REQzMEU1NEM3NjNGMTcxMTRGMDRDOThFMjlBNjhBNTIzQ0VFMzNFMDM4NDc4ODBBNjY3NkYwRTA0OTkyNTY0MDI1MzM4QzIwMDUxNDcyREMzQTNFMTNDNURBMTEzMjQ3RDhBN0Y2NDQ0MTQ1NEZDNTdBNkNGNUI0QzdGNzIwM0E2RDVGQjBDNTlCNkFFQzQzMjkxQUZENTZEQTg1RDQyMDg2NzY4MEZERThGQzE0NTVDQUJENTRCRDgxMkNDQTFCNjFGMUZDRkZENjI5REY2NworQkNDNTdCMjcKKzk4ODIxN0JEREE4MjZBRkQ2RTVCRjM1N0M2Cis1RTQ2RjQ3MUJCQzUzMjBBNTE5ODY2OEI1OEI2NTQ4NEMxOTA0MzBGQzg3N0I5QjVCQTZGOTY4MzJENEQxNURGREMxNjQxNDg3MjFCQ0JFMDVDRDE0ODJEQkI3Q0YxMzEzMzM0MkU2NjBDMTg5QTE2QTI1MzAzRDk3NUZDMjUzMkIwQzA1RDAxRjdEOUI5OUMxQjZBQjFBODhGMzc0NEEyMjAyRDBDOUY2RDA4QTVBQzVECis3RDMzQjMyQgorN0ZBRTJBMkVCODM0MjI3NDJDMzE1QjdFNDQwQQorQTNBMDk1Q0JFRTI2NTc4RjVENjFEMkIwNjRCRUY2OTc4RkM3QTFFM0Q2MUZCOEIyMjMwRDcxMEY1MEE5QzcyRDkwMEYyMkE3Q0Q5NEY4QkRBNjRFNEEwODQ3MTI3ODE0ODg1RTExOTEyN0RGREI2RjgzQzhBQTM1RkE1NTM5RjRFMjk2N0E1QTI1MDFBOTY4NjkyOTkyNjU2RjI3NzEwMDg5RkM3QTk2NjAxN0IzMDNENTlGOUQwQUU1MjM5MDBFRTJEQzY3QTk4M0FCMUFDRTJDOUJBODI0NjQxRDJFRDE0MDE0N0MzNTNFODk5MkJBQ0IKKzhGQzYzQjZDCisxRTE4NDM3MEQxMTIyNjVFNkU5QzdFRkQzOQorMzg1NTNBRUExNDhCRjhDOEIxNjU4NkNDQkE5NDAxOEVCQjM4MzI1RTQ2NkIyRUVCMDc1NTFGOEFGM0E4NzZFMDI3NjU1OUQ2ODIwMjkzOEUwQTg5MjMyNTI3MkQ5NTg3NUMyMENGNTk2QTkxMTE1QTA2QzMxMjU1M0U0Mzk5NjM4QTlGN0Y4RQorMEMzNUQ4M0IKK0UzODFDRThCMkIxQ0FCRjIzMDE0MzM0Mjk4CitCOTdFQTA0OTAwMUY4OTA0RUJFRUE0Mjc2MThCM0YxODY2MDc1MEE4QTU2NURFNzcxMzA0Q0NCQzE3NkQxOUQ0RjQyNEUxRDI4MzE2OUUxOUJFOUNGQTJBMzhDQjJFQTQ0ODU3OEUzQjVFQTcwMzJDQzY1RjQ3MzdBRUEyRjk1NEMzQzU3RDc3NkRBRDZGRDhBRDBCRDNEODczODVBNjJDRURCOTUwQjA2ODkyNkNGNkM4NzI2QworOEVFQzM5M0QKK0UxRjhCNzQ2NzAxQTcyODk5QTREOTU4NzRDRkUKK0Q3QzA1MTcxQkNEMzQ5N0E2QzJBQTYyOTAwMTBBMTVGNjY0ODVCQzg1NjJFREM1QkVGRkNCQkYxRDI2MkMzRUM3ODhBRUQ5N0M2NEFFRjU5MTQ2NTlDRDY4OTM1QUNGRjMyOEJBQjY0OTRDQTk4NkVDNjVERTM0MUQ2OTZDNDY3N0EwN0FBQzZEQkM2M0U4NUJCMjkyNDBGRjUyRjcxQUQwMjFCMkU5MUI3NTI3RTQzRUREODlCNTVFOTlGRTIzMkEzNEVBNTk5RDNFMjU5Q0I0REYwMkVBMTlFNkZBQkMxOEY2QjY1NjBEQ0Y3QjUwODI4ODA5RDI4MzAxRAorRTU0QworM0EKKzYwODlGODJECis2M0E4Mjg5NTZDMDNEMEQ5OTVENkU4OEZDRjI5CitDOTg0ODc2QjZGMUI1QjhBCis0OUNCQUVGOQorQkJEQjcyMTlGNUNDOUNCNUM1QkZEMUUzMjlBOUVBREVDQzAzQUM4MTdBMDFFODgyQTNCNEYyQjg5NDEwRUREN0Y1MEUKK0ZDRkY3NjI4MUE3NDUxRTM5MkM1MzkyMzg2MUI2MkUzMDU5RDJBOERFMTJDQkJBNkE3MjU3Rjg1RDczNEUxODE1MkM1NEY0OUM4MUUKKzJBMDZGMkU1QTkwNDc0OUIwRjExOUM2REIzM0YzQTExQUQwQTAzRUY2RDQzNEREMTNFMjhBOAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoaQorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGkKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hpIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NiBwdXQKK2R1cCAzIC9DMDA0NyBwdXQKK2R1cCA0IC9DMDA5NSBwdXQKK2R1cCA1IC9DMDA5NyBwdXQKK2R1cCA2IC9DMDA5OCBwdXQKK2R1cCA3IC9DMDA5OSBwdXQKK2R1cCA4IC9DMDEwMCBwdXQKK2R1cCA5IC9DMDEwMSBwdXQKK2R1cCAxMCAvQzAxMDIgcHV0CitkdXAgMTEgL0MwMTAzIHB1dAorZHVwIDEyIC9DMDEwNCBwdXQKK2R1cCAxMyAvQzAxMDUgcHV0CitkdXAgMTQgL0MwMTA3IHB1dAorZHVwIDE1IC9DMDEwOSBwdXQKK2R1cCAxNiAvQzAxMTAgcHV0CitkdXAgMTcgL0MwMTExIHB1dAorZHVwIDE4IC9DMDExMiBwdXQKK2R1cCAxOSAvQzAxMTQgcHV0CitkdXAgMjAgL0MwMTE1IHB1dAorZHVwIDIxIC9DMDExNiBwdXQKK2R1cCAyMiAvQzAxMTcgcHV0CitkdXAgMjMgL0MwMTE4IHB1dAorZHVwIDI0IC9DMDExOSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTQ0IC0yMzYgNzU3IDcyNV0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OUE3MTE3NzNCMUYwNjJFRkRDRTkzMTk4QTc2NUY4RjU1QQorNkU5RjYwQjQzQUQyMTNCNkY5OTY3NUQ0CitBRTk3NkUyMzE5MDEyQzM3QjAKKzMwMkJFQTQ3CiszQjk4Q0VGMjE4MUY0ODdFNjBCQzY4MjIzQworQTVGODZFN0ExMTVDRkMyQUU5MTY1NDcwRUFFQzY3OENCMERCMjdDMkJDMzM4RjIxNDdFOENENTUyRDFFNDIKKzM4MTJBNjEyCitFM0Y5OERCMjY2QjY1MERGNjZDQTI1ODNEMworOTU4RTlFRTBBMEI2M0I3ODY3RjIyNjgzMjdENzlERDk4NjBEODA3MTNGREE0QjgyRUUKK0E3NEI1NURBCis2MzgxMTUzNzUzMjQ0REZDQkQ3REEyQkFEOQorOTU1RjkwNjEyNTREREM1QTQ4OTA3N0Q5NzAyNzI0NUMwNUQ5NDU5MUY0OEUKK0NFMjlCMkY2CiswRDVGRTIzNTU1QTBGRTc4MTI4RjFBNjRDREQ5CisxQTk3MTg2MzFCMENBOTlFNDY5OTU0RDE3MzZDNjNCQzEwNzYxNzFEMjc0QjM2RTRDOEUzQkVGNUZCOUVGRjM1QzZFNDdDM0QwQTQyQTcwQUJDRDkxRUE1OTIzREE0MzZDRDZCQUEyRTJFQkY5M0QxMzlENUI4QURCRjREM0VCMTZBN0Q0QTBBMEM5QTRFQ0YzQkY0QTY1OTNCQTYxNTEyOTFCMzQ2NzJEQ0FBQkM1OEU2QjBBNkEzRjAyQjUwMDFCM0JCRkNDNzYxOEQ1NzNFN0U3QjZCNTBDNDE3RTQwRkQxQkQzRTlCQ0Q5NEJGRjM3NTVCOUNGQzUzQjgKKzU4NjUKKzI0MzA3NEY5NTRFMjM0QTkxMDNCOEZBREZECiswMEFDQzRBQQorQjc4NTlBODk1MjQyMTg3OTI4RTlDM0JDQTc5NQorNDRCMUEyRjdEOEEwNkNFMTRGMjc5REExMDFBRDQxMkYyN0MyREQ5MTY2QzRBODU5RjJFODhENDJDODc0OUY3ODI2MzMyRjJCMzlEOTVBRkUwNDBGMEM3QTU5NzVCMTVBQTk3REVENUZCMUU2NjI5ODVGN0M5MUZFMzIyQjg4NDkxOTY5MTY1RTY0QTdGQUI4Q0UwMEY4OEY0NjE4NzBERDY4MTk5ODg3OUUwQzFGOTJDRDI5RkEyQTRDQzUwMjg3NkI3Q0JCOEUzQUM2OTgxMzAxRjNGRENBNEZDNUFBM0M0MkQwRDk4MURFQ0VCQ0QxNEM2RkU0NDMxREQzCis5NTdFCitCNkJBMUQ4ODFBRUUxQTgzRTVFRTJDOUY3MDY5QjFGMAorMEI2RDc2OEIKKzIzOUJFMzM0M0FBNzNERTRFQzhDNDY2RThFCis3MTkwODAzODUyNDE4QkJEOUE5MEI3NUIxRTU2MjhEMzgxNzI4OTVGQ0NCQjkyMzcyRUFFNzkyNjNDOTQ5MDZFQ0M0QjgwNjk3QTFGNjFDQThCNDY2NEUwRUJBMDcxMzQ4NzA4MEJFREQ1MDhCRTJDQjkyMUE1RTRFMjQ2N0UyNTBERTM4QUNEOUEyOEZFREQ5NUQ0NzQxRTA4RUFCOUEwQkUyNDcwRkU0RkU0RUJFRjhFODlGMkZBMDU0MzE3N0UKKzBFREI1RjBBCisyNUY2MEUyMTYzMDMwNEZFNjgzMUJFRjQ1MzBCCiszNTFCNjk3QjVDNzkzNDI1NEYxQjU1RkU3NDZCOTM4NzkyNUNERUJGM0RBQjE1QkUyREUyRTgzNTgwQjYzQzdFRjYzODNENjY4MUU5QjI1MjA1NDk4NUREQUE5MUI3MzFCMTM2RDJGRkY0Q0M3MzY2QjQ0RjExNzkzQjgwQzA0QThGMzJGMTBDQTgzNTYxMzgyM0Q4MkQ5QTlGNDM5M0MxQkNDNjM0N0UxNDZFNkNBN0EyOUU5MUVEMDM5OUNBREE5QjQ4ODhBNDFGNEYyOEI4Q0YyREFDRjAyMkUwNkUzM0I3OTg4NTcyQ0EzRENCMDM4MDIyM0MwOTE4RjUKKzlCRjYKK0Y5NjZFNUU5OUUwNjk4QkNBMEIzMzJFQ0NDQjA5Nzk1MENDNzMxRUY3RkFDNEQyM0M1NjkzNzFFMDZGNUI5MENBMEQ2NzI1Qzg3RjIyNUM2NkVFNkYxNDUzOUJEN0NFQgorRjhEMDUzM0EKK0Y1Rjc1MEM1ODg1OTE3MkVCRTk2MUVDOTE5OEIKK0MwM0NFMDRBODE3MzNCQTBEM0Y2NkFEQ0Q3MDI1NTZFRDc3REM2MEIzRUQ1NjNCMjE4RTdDQzY3QzNENzE2MTVFMjFCQ0ZEOUE0N0I3MDcwOTIxMTBENUU2N0EyRDVDMkE1MjEyMjI4MzNFM0I2MzE1QTlCRkQ4NzU2NzBGQkJFQTU2MTBBNzUzMjg5QzcyMTkxMEY3NjEyMzcyMkE3QzYzMjRDNjc4MEMwNkIyRUJDNjY5NTFBMEVBQzU2QzM0NkE0QkNEM0U3NjEKK0NBQjk4MDczCitDRTUxMUZGQTMyMkNCNjA5MDY0M0Q0Nzk5MjQxCiszQjREN0QxRTQ5OEQwRUU3MUNFMUVGQUZCQjNBQUI3MTk4NEY1ODk1N0MxRjAyREYyOERCRTZENEM5NjQwQTlDNjA3QUM2QUYyMDg5MDMzMkQ5MTZCMTU2QzM4MkQwRjRFQUZGNzk1QkZFRDdFNDIzREE2QUY2QzExQUY2NjE2NzExM0VCMDE2NEMyNjMzMENCODE0OTcwMDgyMDlBQ0RGNTE2RkQyQTY0QjkyODA3RkQ1RjBCRDU2NTdFQ0E2QzYyOTE1QjRERkI0QThCMTJFMzlGMzI2ODJBOTMwODkwNjUzQjMyRjMwMjJFNDBDMEVFQTdGRDFCMTAzQUYKK0I4MjUKK0ZBMkRBNEY2CitGODE2OUI1RgorQUNCQkEwQzgzM0E5MThDRjM0MjhEMjYwMjE3MworODEwNUJDRUQwQjcwOTE1NkFDQTQwM0Q0ODI5REM3MERBMDk2NEQyMUMzRUE3RTdBM0MxMTIzN0JGMUIwNThEOERBNTYwOTYxNDMxQjc5NTEwM0U3QTc2MDZBQUEwNzhEQjNCMjVEOTU2QkRCNTc4MUQ5N0VFQjJCNDQ3RkFCQzg1NDU0QkVDQkY2RTdFN0U5QjE1NEEzRjdCMjg0Q0U5NUY4RERDOEQ5OUREQjEyMUE2Q0JFMjBEODgxRTk4REVBRjgzODc0NjM3QUE1Q0ZCMDlFNDM3NjcyMjE5RkI4MjRBREFFQkNEOEM4NDdGNjIyRkFDNjAwNkFDRUMwCis0NkVDCis2MUYwMDdFNjI3QjlFQjAzNzI0NjhDODI4NzlDODg4QTAwMzkwMENBRUE3ODEwQjNGRTAzNzQ1NzA2MTA5RUNFREYxQkE3RERCODk0MEY0MzgyM0EKK0FDNzgzNDRBCisxMTBEMkU3QkE5MzE1NEZDOTdDMkNDREE0QUIzCis5QTI3QUUzMEQ4RTI1Qzg3QTkxN0FDNjY0MDRFOEQ3QUI5REIxRjM5QjMyRTRDNEI5QTcyMEVFMkUzMUI4ODNEODk2RTdEMEQ2MkFBOERGMTBGOTA0Q0NDMDdENjFCRkMwMTU4N0U0MTExMTNCMTIwODc4MzNDM0MzNzg4QTJGODQ3M0Q3QUEyNjNBRDE3MEUxRjFFMjg0Q0RDQkExODg5N0I5MzhGMDFENTFCOEQ5MERBNTNGQkREMENEQUI1MzYyNUNEN0IzODIzODcxQTI5Q0JGRTk0RkQ4NUJFMTMwNTVEQkZDQkZCNDkxQkRDNTBGOUIzMjVENDI4RUYKK0I3RUMKK0RDOEIxMTYxMjUzNjBDNDU4Rjk2Mjk0NEQ2RTBGMzAxMTY1MTA0MjQ2Rjc2RjNCNzFGODIyQworMzVFRkZFQkEKK0Q4NDU2M0I2QkIxMUUwNDJBMDhDNkZDQTE1Q0QKKzA5OEExQjA2OTY5OThFQTZCOTM4NUY4MzE5NjJBOTc2RUU5QzgwNTk4Mjg4NzBDRjNDMzkzRDlFMzlBRTYyNzgyNzY3Q0Q0MTBFNTE2Rjk2RjhDQUI4MUFCMzg3REZDNzNGRUE0MDgwMzYzODA3MkYyRTAwQzVCNTZCMDg5MDE1NjgxMUZENEFDRDUxMDU0NjJDNzQzNUQ4Q0M2NDAzNDE3MkVDMUY1RDgxMDJDRUE2MTNBRTk0RjgyREQzQjRBQTg0N0MxM0MzMUQ3MDYwRTlCRTIwRDk0OEJENzI1QUVDNUJEQkVCQzdFMUNGMTdFMjk1Cis4NDNEQzA2MAorOUE3MjFEN0JDNEU4NkI3NThERTVCQzMyRkU2NQorOEVERjA4ODM0Qjc4QUQzQTAzOTkyNkRCMDhEQ0E1MTdDRTY0RjNFOTMxMjdEMDI3NzZDRDlENDc2RjA1MDFBQkRCQjI3NjI3RUZFNUIyODU3N0YzNDc4NUZCNzgzNEU3RTI2NkVFMTcwRDZDNTExMjY3N0M2M0QzODEzM0JDQzRENTZGN0Y4QkM5OERFREM5N0VBM0IzN0QyQTVGMUM4QTg4N0JDOEU0N0NGQ0RCMTg4MUMyNUY3REE0NzVGNjM0MkFEQUYxMzYwNUNCQTc4QkEzQzY5MjZEMkE0Mjk5MUJBRTUxQUZDRUE4M0U5MjNDNEFENEZDOEU3MTM1CitGMjdECitGMTczN0ZGQTUyMTk1RDM2REE4RjExQUNERENFOUJDMTMyODUKKzZBNDVBQzlCCitDRERBODdFODQzMjIzQ0FGN0IzRUZERkEwN0ZFCis5NDAxMUEwQjg2QUMzMkJDNkMxRTUxMDA2MkIyREEyRjczNEI4QjMxOUQxRjI1RTUxRTBGNTJCQTdEQURFRjVDNUFGNTBFQTdGMkM0NDY4NTQwRENCQjA2MjJGMzBEODdCNjhDQjRENjNCRjUxOTdCODg0NDdCQjcwOUM1NkYzMEM3MDE3MzhERjZDOEQzQUMxOERDNEY3QkREMEUyRDRBODY1NjRGNTcwN0UwRjI5OEZEOEM0QzdDRUZBNUM4QUU5NkZFQTBCRjc3MTRCMTE3MEIwMUNCOTUwMkU0MDU4RjIwNTM3QkQxODFFQkJBMEE3OEQ5MUYxNDhDNjUKKzgxODcKKzRERkEwMDc1REY1NjUzM0QyNkQ3MjUxOEU1Qzg1ODY0RThEOTFDOEZBMjE5NkMyMThFMkZFMzQ3OUVEOTc5OEE5QTgyQzZEREU1Q0Q0RjdCRDJEN0IzRTBDOEYyMEVEMzE0OUNCODNFOTdEREQ2RTAzMzY0OUE5MEQ3NTExNDNBQzkyRDUzNzBBQUY1OTFCQjI0ODNERAorOTA2MDgxNUUKKzRGNDBEN0M3RjIyOTgwQUQwRDJEMDVDMTlBODkKKzYyMDNFNTk4RUZGN0E4QjYzOEFBMkI0OUVCQ0U4MjYwOUQzRkI4RjBGOUQ5MDlDRTlCODg2MzJBN0Y1NTZGMTUzRTM5OTczMzQ3MDlDQ0NERkFCQzAxQzkwM0U4NUQ1NDVBMUFGMjY5NzI0OTNBODQ5QkI3QTIzMzVFMTkyNjVCOEYwMUMyOUU0QzMzRTk4OEUwRUFFNThFQUQ2M0Y5RENEOTA3Njc3NkU2NkY0REQ2ODJCMEYzRTNBODg3NDk1MTlCMzNGNURFMDkxQkY0Njc4Njc4RDc1N0Q0OEFERUNDMjkwNkNFMjM5NTRFMkQwQUI5NDc5NzU1RjBGMQorOEVBQQorQTFERUZFRDgyQTg4NjY1NjBFODFBQjg5RUJCMUUzNDQwMzZCRUREQTREODRFQ0FGOEIKKzM1MDRCMzE4Cis2QzJGNTFDN0RFQzUxQUNGQzg4NENDOEE5MworRDU1OTkwQjA5RkRCMUZCQkFDNjQ0QzMyMjZFM0YwMTU1QjI3RTIzNDUwNTBGQzFDMjdCMjlBQzYwNDc5QTNDNUNDQjZCNjQ0RDYzREM0Nzk2MzQzNTUyRkY1MDQ2NjIzRjA0ODk2OEM4OTBCQTUxNzVGN0QwNTk1ODhFNjY3QkZDQzU3RjdDMDA4OUI1ODdEODIyMjdERjMwRjREMDhENzIxRkMxNkFDNUI5MDMzNDMzNUUwNjk1QkM1RjVDOAorOUIwQ0I2MEEKKzg4RkQyMzgxRjU1QTkxNUVDQzVGMEYwNDczRDUKKzk4M0M4NjcxNEMxQThFRDdGMjJCQ0ZENUJCMjAyMzRBNjRFNDY5MzM1N0I3Q0ZFNTcyNjdFNTgyNzg2MTc4NjM3MUQ1NzJERTU0QTZENkU5QTVFRUY3M0I0Mjc5Rjk0QTkwOTBGNjk3RDVEMkIyNTAyQ0U3NDdDMzNBOEI3MDgyMjQzNUJFNUQzNzdDOEQxRURFRDRBRkJBRTUyMURGMThGNjJGMDI3MURDRTExODYyNEJERTRENTlDMDQyQzc4RkEwQTRFNDA0QjcwRTFGNEEzNEFBOEU3RDI2M0M5N0JBNTMzQzU1RTMxRUI2OTZCQTVGRkI5ODhDMjMwMQorM0ZDQQorQTdCRDg4RkNDRUMwNjQ1REY2MUM0NTVFOTg2QUU4MTA5NDNFQUUxMTRCQTlBOEJDQTcyNENDRDREMjgwQjBFNTdDMDQzMDc5ODgxNUI3MENEQUJDCis4RUM5MTU5OQorOUUwRkFERjE2NTNDM0ZEREFGRjk3MjdBNjMKKzJFREQyNTA1NDg4MDdFMzRDN0E3MDEzRjAxREQzRjFFQUE1MkY4MTQ2QTc2REIyNDk1Q0EyRDYwRkIwQTg0RjY2QUFENEJBMTU3RDFFRUIzNjcwMTU3RDk3OEFEODc4MzdFQjI1NzlGRDY3MTA3ODA0NTE0RkFDMzlGNzVFMjU1OTIyQUE2QzRDQzQyMjZEQjBFOTc0Q0Q1MkRFMkM5NkEzOTJEQkVDQkVDQkU4RDQ4NjIyNEVCCitFRkYwQkZCNgorOUY3MjAwMkM2QTBDNUUwQzU2NkQ4MTI2MDM0NQorNzU2RTc5M0EwOTlEMEI1Q0I4MUUyOUU3NkRERDAzMzkzNDMyOUE3RDc3M0JGRjk3ODEzQTQzODdGQkI0RkQ1MkZGRjNGNEQ2MzUxRkVFRDZEN0Y4NEYwRkQ2NzYxODY2ODI5RDVDRUI4ODY0OEIxMTRBMEUzQzY0NTkxOUI5QURDRjIwRkJEODZCMUIwNEU3RjAzOUE3NUU3OTk4NDA5Rjg3RTNDQkQ3RUQ2NUNGQTY2QTRFRDVGQjc2RkRBNDA5Q0U3NEIzRDYyQTVFMDcxQThBQTc1MzFEODEyNDIwOTQzRTg2MTY0MzlCNEIKK0RFNDJGNzI5CisxRUIyMkZDMkEyRkJGODJFRkNDNEZENTdCMAorODkxRkJBMkVGMEE3NkI0OTY2NUI0NDZEOUQ3QjEwNUJDQjQ0NzkzRUZGNDlERUQ5QTE1RUQyMDNDRjc2NUUxRUU3QjhGNkY5OERBODE0RDRFM0Y4ODY1NjA2N0U5QTFBQjc4MTU4MjM0M0IwNUI0OEUzMzU1NDY4MEM2QTYwNkVGRTFFMEJCOTc5MUE5MTY1Qjc4Njk1MkZDNTM0RjA3QjIwNEUxM0VGQkM5RTQyCitBRkUyRTVEMworNTY5NDUxMjBCNzk2NTQ2RTVFMzE2NTU1REExQQorMjI3MDBBODc1QjU0NTEwN0RGREQ0OEE4RUUyRjNFQ0RDMzUyMEIzOEQ4QkQ3QUIyQ0E1QUUxQUM3NUI4NzAzMzc1Mzg2NkE4NzlFMjNBRTkwMUUyNDREN0FBQ0Y0MzUwQkFCRkVBQkMwMkE4QkJFNjUxMTc1MkY2MjMwMDBDNjk5RTJGQ0I5MEU5QjU0RDc0NjVFNUUwMjQ1MDA1MDIzNTY0MkRCOTMzRUNGN0JFMUJFRDI5QUM2NTgzMDcxOEM4MDJFQjE0QzcyREEwMkIwQkRGM0Q0NUVENzM0MjE1OTMxRDczNkRBODQzRDQ1QzEyMThERjRFNjNCQ0Q1CitCOTE4CisyOTg5QzBDMDY3OTE4NDRFNjY3QTFDQTY2RTQyNzYzNTgzMDBEMDNCQkU2RURGCiszNEU5NDU2NQorOUE2REMwMkNERjEwNjdDOTU3MkM0MUJDQzEKKzYwRkIxRDc5NDg2ODY3MTc1NTU1QTM3NjFDMUFBRUY4MzY3RjNCNjg4Qzc2NzM5MjcyNzg2M0Y5NUNDNkE2NTgyOEQ2MTZGODM4MTYxOUNDREUzMjYyRDBGMUU2MDBCQkFDRjJBMUZDOUExMUU1NTE0REMzODA5NzAyNTk2MURDOTE3MTU2OEVGNjI1NTQzMjYxMzc2QzEwRDRGNkJCODg5RjBBODU2Rjk4RjVGMjIyNERCNworNUJDNDJBNTEKK0Y3ODhBRjJGRDE1NkM3RUM3MTAxNjdDRjNGMDkKK0QxMUE4NzlBOTE0OEJCMjhCQzIyMjQ3NjI2RUU0REMwOUMwMzcwNzM2QjEyM0Q2MDJEQjY2MjYwNjM5MTkxQTMwQjM0NkEzQTA4Q0EyMDUyQ0YyOTdFQUYyQzNGMEVDNkRCNUU2MDk0ODlGRjk2QkQ3MDI4MkE4MDMxMjk1NTU2ODhDMjYwOEZEMTJGMDVCOUQzMzE2NkFFRDk5ODk0RkE0QjVCQkMzRjA2NzkzRDBEMTgzOENGMkMzQzAwMjBGMDk5NkU5NDE0NjAyNkEwQzc5RDMwNzRDNkU2NDFCNQorQTlBM0JEOUQKK0Q5NTE5RkZBRDgyNDZERjBEMjYxOERGN0Q1MUMKKzQ5MDVCMDFBM0NBRjIyMEYKKzEyNkUzRUVGCis1NTJGM0Q5QzRFMDQ3NTlENUVGQjVENDRGQUQwMDMzRDY1MDE2MjQyNEE4QzExRDE3N0M5MDIxNDQxMEZFQTc2NUJEQQorMzRERTEwRDk4ODQ5NzkzQzU2RjNCRUMwMjlCNkZGNEQ3NDBFMEI5MTU5MERCMjgxNUREQzQwRTlGMzUxOTg5RDc4QzAxMEQ1NDUxRgorQjUxNkQwNDFCQUZDNTExNEJBNUE5MTM5Rjc4QzdCQkYwMTBFMzE5QzJFNkFGQ0I5NUEzOTA2CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyYiAxMi4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJpIDEyLjAwIC9QU093c3RkdXRjaGkgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNGIgMTQuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxNjIxMmYyYjIxMmQyMjBhMDEwZjAxMTAyMTI5MWYyNDI4MWQyZDI2MDEyMjJhMmQwMTE1MjExZDJlMzAyZDI1MjkyMzAxMTYyMTJmMzIyYTJkMjYwMTE4PiAyMjA3IDU1OCAwIDczODQgLTEgcworPDIxMmQyMjJhMmQyODFkMjkxZjIxPiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwOT4gOTQzNCAxMzM4NSAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI2NyAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjY3IDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyNjcgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjY3IDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxNGIgU0YKKzwwYTEwMGUxYzE0MTgxNz4gMTI3MSAxNDU4IDAgMjA1NSAtMSBzCis8MDAwMzAyMDAwNzE3MWIxYzBjMTUxNTE0MTcxMjAwMDgxMDFjMTkxMDFhMTE+IDIwNTUgMTQ1OCAzIDQyNjggMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE2MjEyZjJiMjEyZDIyPiAxMjcxIDIwMzggMCAxOTgwIC0xIHMKKzwwMDJiMmQyNTI4MWQyZDM0MDAyMjJhMmQyODAwMmEyMjAwMjAyNTJlMmYyZDI1MWUzMDJmMjUyYTI5MDAyNTJlMDAyZTJhMzAyZDFmMjEwMDFmMmEyMDIxMDcwMDFhMjQyNTJlMDAyNTJlMDAyZjJhMDAxZDI3MjcyYTMyMDAyNTI5MmUyZjFkMjcyNzFkMmYyNTJhMjkwMDJhMjkwMDJlMzQyZTJmMjEyODJlMDAyYTJmMjQ+IDE5ODAgMjAzOCAxNSA5NDYxIDAgcworPDM3PiA5NDYxIDIwMzggMCA5NTMxIC0xIHMKKzwyMTJkPiAxMjcxIDIyODMgMCAxNDU3IC0xIHMKKzwwMDJmMjQxZDI5MDAyZjI0MmEyZTIxMDAyZjJhMDAzMjI0MjUxZjI0MDAyZjI0MjEwMDFkMzAyZjI0MmEyZDJlMDAyNDFkMzEyMTAwMWQxZjFmMjEyZTJlMDAxZDI5MjA+IDE0NTcgMjI4MyA5IDU4NTYgMCBzCis8MDAyZjI0MzAyZTAwMmYyNDIxMDAxZDFlMjUyNzI1MmYzNDAwMmYyYTAwMWYyZDIxMWQyZjIxMDAxZTI1MjkxZDJkMjUyMTJlMDcwMDFhMjQyMTJkMjE+IDU4NTYgMjI4MyA3IDk1MzEgMCBzCis8MWQyZDIxPiAxMjcxIDI1MjggMCAxNTYyIC0xIHMKKzwwMDJmMzIyYTAwMzIxZDM0MmUwMDJmMmEwMDI1MjkyZTJmMWQyNzI3MDAyOTIxMmYyYjIxMmQyMjA3MDAxYTI0MjEwMDIyMjUyZDJlMmYwMDJkMzAyOTJlMDAyZjI0MjEwMDI5MjEyZjJiMjEyZDIyMDAyZTIxMmQzMTIxMmQwMDJiMmQyYTIzMmQxZDI4MDUwMDI5MjEyZjJlMjEyZDMxMjEyZDA1MDAxZDJlMDAxZDAwMWYyNDI1MjcyMD4gMTU2MiAyNTI4IDE2IDk1MzEgMCBzCis8MmEyMj4gMTI3MSAyNzczIDAgMTQ1NyAtMSBzCis8MDAyNTI5MjEyZjIwMDUwMDMyMjQyNTFmMjQwMDJkMjEyYzMwMjUyZDIxMmUwMDJmMjQxZDJmMDAyZjI0MjEwMDI1MjkyZTJmMWQyNzI3MjEyZDAwMmEyMjAwMjkyMTJmMmIyMTJkMjIwMDFlMjEwMDFkMWUyNzIxMDAyZjJhMDAyMTIwMjUyZjAwMmYyNDIxMDAyMjI1MjcyMTJlMDA+IDE0NTcgMjc3MyAxNSA4MTI0IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDMwOTE1MDcwMzE0MDkxMzE3MGQwNzA5MTQ+IDgxMjQgMjc3MyAwIDkxMzcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDFkMjkyMD4gOTEzNyAyNzczIDEgOTUzMSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDkxNTA3MDMwZDEwMDkxNTA4MDIwNzExMTAwYT4gMTI3MSAzMDE4IDAgMjUwMCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMDMyYTJkMDAyZjI0MjEyNTJkMDAyMTJjMzAyNTMxMWQyNzIxMjkyZjA0MDcwMDFhMjQyMTAwMmUyMTFmMmEyOTIwMDAyNTJlMDAyZjJhMDAyZDMwMjkwMDI5MjEyZjJlMjEyZDMxMjEyZDAwMWQyZTAwMWQwMDJlMmYxZDI5MjAxZDI3MmEyOTIxMDAyMDFkMjEyODJhMjkwNz4gMjUwMCAzMDE4IDEzIDk1MzEgMCBzCis8MWEyNDI1MmU+IDEyNzEgMzI2MyAwIDE2NjUgLTEgcworPDAwMmUyMTFmMmEyOTIwMDAyODIxMmYyNDJhMjAwMDIwMmEyMTJlMDAyOTJhMmYwMDJkMjEyYzMwMjUyZDIxMDAyMTIwMjUyZjAwMWYxZDJiMWQxZTI1MjcyNTJmMjUyMTJlMDAyYTI5PiAxNjY1IDMyNjMgOCA2MzU5IDAgcworPDAwMDA+IDYzNTkgMzI2MyAyIDY0NTYgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzA5MTUwNzAzMTQwOTEzMTcwZDA3MDkxND4gNjQ1NiAzMjYzIDAgNzQ2OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMWQyOTIwMDA+IDc0NjkgMzI2MyAyIDc5MDMgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzA5MTUwNzAzMGQxMDA5MTUwODAyMDcxMTEwMGE+IDc5MDMgMzI2MyAwIDkxMzIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwNzAwMWUzMDJmPiA5MTMyIDMyNjMgMSA5NTMxIDAgcworPDIwMmEyMTJlPiAxMjcxIDM1MDcgMCAxNjg5IC0xIHMKKzwwMDI4MjExZDI5PiAxNjg5IDM1MDcgMSAyMjI1IDAgcworPDAwMmYyNDFkMmYwMDM0MmEzMDAwMjgzMDJlMmYwMDJkMjEyODIxMjgxZTIxMmQwMDJmMmEwMDJkMzAyOTAwMmYyNDIxMDAyOTIxMmYyZTIxMmQzMTIxMmQwMDJiMmQyYTIzMmQxZDI4MDAyMTMzMmIyNzI1MWYyNTJmMjczNDA3MDAxYTI0MjEwMDJlMjExZjJhMjkyMDAwMjgyMTJmMjQ+IDIyMjUgMzUwNyAxMyA5NDYxIDAgcworPDM3PiA5NDYxIDM1MDcgMCA5NTMxIC0xIHMKKzwyYTIwPiAxMjcxIDM3NTIgMCAxNTAzIC0xIHMKKzwwMDI1MmUwMDJkMjEyYzMwMjUyZDIxMjAwMDIyMmEyZDAwMWI+IDE1MDMgMzc1MiA0IDMxMDcgMCBzCis8MjUyOTIwMmEzMjJlMDAxNjFhPiAzMDk5IDM3NTIgMSA0MDg0IDAgcworPDA3PiA0MDUzIDM3NTIgMCA0MTA2IC0xIHMKKzwxYTI0MjUyZT4gMTI3MSA0MDg2IDAgMTY2NSAtMSBzCis8MDAyODFkMjkzMDFkMjcwMDFkMmUyZTMwMjgyMTJlMDAyZjI0MWQyZjAwMmYyNDJhMmUyMTAwMzIyNTJlMjQyNTI5MjMwMDJmMmEwMDI4MjExZDJlMzAyZDIxMDAyOTIxMmYzMjJhMmQyNjI1MjkyMz4gMTY2NSA0MDg2IDggNzA0NCAwIHMKKzwwMDJiMjEyZDIyMmEyZDI4MWQyOTFmMjEwMDFkMjcyZDIxMWQyMDM0MDAyNjI5MmEzMj4gNzA0NCA0MDg2IDMgOTUzMSAwIHMKKzwyNDJhMzI+IDEyNzEgNDMzMSAwIDE2NDYgLTEgcworPDAwMmYyYTAwMzAyZTIxMDAxZDI5MmEyOTM0MjgyYTMwMmUwMDEyMWExOD4gMTY0NiA0MzMxIDQgMzc3OCAwIHMKKzwwNz4gMzc0MyA0MzMxIDAgMzc5NiAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwNjEwMWMxYzE0MTcxMjAwMWMxMzEwMDAxNzEwMWMxOTEwMWExMTAwMGQxNDFjMWIwMDExMWExODE2MDAxYzEzMTAwMDA3MTcxYzEwMWExNzEwMWM+IDEyNzEgNDc4NiA2IDUwMzEgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDEyPiAxMjcxIDUxODYgMCAxNDAyIC0xIHMKKzwyYTJkPiAxMzk0IDUxODYgMCAxNTkxIC0xIHMKKzwwMDJmMjQyYTJlMjEwMDJiMjEyYTJiMjcyMTAwMWYyYTI5MjkyMTFmMmYyMTIwMDAyZjJhMDAyZjI0MjEwMDE0MjkyZjIxMmQyOTIxMmYwNTAwMjkyMTJmMmIyMTJkMjIwMDI1MmUwMDFkMzExZDI1MjcxZDFlMjcyMTAwMzEyNTFkMDAxYjFiMWI+IDE1OTEgNTE4NiAxMSA3ODM3IDAgcworPDA3MDAxNDIyMDAzNDJhMzAwMDFkMmQyMTAwMjkyYTJmMDAxZjJhMjk+IDc4MDYgNTE4NiA1IDk0NjEgMCBzCis8Mzc+IDk0NjEgNTE4NiAwIDk1MzEgLTEgcworPDI5MjExZjJmMjEyMD4gMTI3MSA1NDMxIDAgMTg3NSAtMSBzCis8MDAyZjJhMDAyZjI0MjEwMDE0MjkyZjIxMmQyOTIxMmYwMDJlMzAxZjI0MDAyZjI0MWQyZjAwMzQyYTMwMDAxZjFkMjkwMDMwMmUyMTAwMWIxYjFiPiAxODc1IDU0MzEgOSA1ODY4IDAgcworPDA1MDAyZjI0MjEyOT4gNTgzNyA1NDMxIDEgNjM0NSAwIHMKKzwwMDM0MmEzMDAwMjgxZDM0MDAxZTIxMDAxZDFlMjcyMTAwMmYyYTAwMmQyMTJmMmQyNTIxMzEyMTAwMjkyMTJmMmIyMTJkMjI+IDYzNDUgNTQzMSA3IDk1MzEgMCBzCis8MzEyNTFkPiAxMjcxIDU2NzYgMCAxNTMwIC0xIHMKKzwwMDEyMWExODAwMmEyZDAwMWQyOTAwMTIxYTE4MDAyODFkMjUyNzAwMmUyMTJkMzEyMTJkMDcwMDE0MjIwMDFkMjcyNzAwMjEyNzJlMjEwMDIyMWQyNTI3MmUwNTAwMzQyYTMwMDAxZjFkMjkwMDJlMjEyOTIwMDAyMTI4MWQyNTI3MDAyZjJhMDAxNjIxMmYyYjIxMmQyMjAwMTk+IDE1MzAgNTY3NiAxNyA4MzYxIDAgcworPDIxMmMzMDIxMmUyZjAwMGIyOTIxMmY+IDgzNTMgNTY3NiAxIDk0NjEgMCBzCis8Mzc+IDk0NjEgNTY3NiAwIDk1MzEgLTEgcworPDJiMjEyZDIyMDYyZDIxMmMzMDIxMmUyZjBlMjkyMTJmMmIyMTJkMjIwNzFmMzAyYjA3MjQyYjA3MWYyYTI4MGQwNz4gMTI3MSA1OTIxIDAgNDY5MiAtMSBzCis8MTQyMj4gMTI3MSA2MjU0IDAgMTQyMiAtMSBzCis8MDAzNDJhMzAwMDI0MWQzMTIxMDAxZDAwMWIxYjFiMDAxZTJkMmEzMjJlMjEyZDA1MDAzNDJhMzAwMDFmMWQyOTAwMmQyMTJmMmQyNTIxMzEyMTAwMjkyMTJmMmIyMTJkMjIwMDMxMjUxZDAwMmYyNDIxMDAxNjIxMmYyYjIxMmQyMjAwMTg+IDE0MjIgNjI1NCAxMyA3NTcyIDAgcworPDFkMjMyMTA3MDAxNDJmMDAyNTJlMDAyNzJhMWYxZDJmMjEyMDAwMWQyZj4gNzU2NCA2MjU0IDQgOTIxMSAwIHMKKzwwMDBiMWQ+IDkyMTEgNjI1NCAxIDk1MzEgMCBzCis8MjQyZDIxMjIwYzAyMjQyZjJmMmIwYTA4MDgzMjMyMzIwNzFmMzAyYjA3MjQyYjA3MWYyYTI4MDgyOTIxMmYyYjIxMmQyMjA4MTYyMTJmMmIyMTJkMjIxOD4gMTI3MSA2NDk5IDAgNTYwNiAtMSBzCis8MWQyMzIxMDcyNDJmMjgyNzAyMGQwMDFhMjQyMTAwMTYyMTJmMmIyMTJkMjI+IDU1OTggNjQ5OSAyIDc4MDIgMCBzCis8MDAxOD4gNzgwMiA2NDk5IDEgNzk2NyAwIHMKKzwxZDIzMjEwMDBiMDgxZDBkMDcwMDEyPiA3OTU5IDY0OTkgMiA5MDQ4IDAgcworPDJhMjcyNzJhMzI+IDkwNDAgNjQ5OSAwIDk1MzEgLTEgcworPDJmMjQyMT4gMTI3MSA2NzQ0IDAgMTU2MSAtMSBzCis8MDAyNzI1MjkyNjJlMDAyMjJkMmEyODAwMmYyNDFkMmYwMDJiMWQyMzIxMDc+IDE1NjEgNjc0NCA0IDM0NzggMCBzCis8MTYyMTJmMmIyMTJkMjI+IDEyNzEgNzA3NyAwIDE5ODAgLTEgcworPDAwMmUyYTMwMmQxZjIxMDAxZTI1MmYyZTAwMWQyZDIxMDAxZDI3MmUyYTAwMWQzMTFkMjUyNzFkMWUyNzIxMDAzMTI1MWQwMDFkMjkyYTI5MzQyODJhMzAyZTAwMTIxYTE4MDAyMjJkMmEyODAwPiAxOTgwIDcwNzcgMTAgNjgwMiAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDExMWMxOTAyMGUxZDE5MDIxMzE5MDIwZTE4MTY+IDY4MDIgNzA3NyAwIDgxNTYgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDI1MjkwMDJmMjQyMTAwMjAyNTJkMjExZjJmMmEyZDM0PiA4MTU2IDcwNzcgMyA5NTMxIDAgcword3N0OmR1dGNoMTJpIFNGCis8MDgwZDE0MTUwMzEwMDkxNTE4MTExMzBlMGQxMDBiMDMwNjA5MTAwNzBjMGYwNTEzMGUxND4gMTI3MSA3MzIyIDAgMzcwNyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA3MDAwMDFjPiAzNzA3IDczMjIgMiAzOTg2IDAgcworPDJhMzAwMDJlMjQyYTMwMjcyMDAwMzAyZTIxMDA+IDM5NjAgNzMyMiAzIDUxOTMgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwZDE0MTcwYzFhMWUwMDE2MTgwZjEwPiA1MTkzIDczMjIgMSA2MzEwIDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDJmMmQxZDI5MmUyMjIxMmQyZTAwMzIyNDIxMjkwMDFlMmQyNTI5MjMyNTI5MjMwMDJhMzEyMTJkMDAyZjI0MjEwMDFlMjUyZjJlPiA2MzEwIDczMjIgNiA5NTMxIDAgcworPDFkMmU+IDEyNzEgNzU2NyAwIDE0NTcgLTEgcworPDAwMzQyYTMwMDAzMjI1MjcyNzAwMWUyMTAwMjMyZDFkMWUxZTI1MjkyMzAwMmYyNDIxMDAyNzFkMmYyMTJlMmYwMDFmMmEyYjM0MDAyYTIyMDAyZjI0MjUyZTAwMjAyYTFmMzAyODIxMjkyZjAwMWQyNzJhMjkyMzAwMzIyNTJmMjQwMDJmMjQyMTAwMjkyMTJmMmIyMTJkMjIwMDExMDAyZTJhMzAyZDFmMjEwMDIyMjUyNzIxMmUwNz4gMTQ1NyA3NTY3IDE3IDk1MzEgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwODA5MGIwNT4gMTI3MSA3OTAxIDAgMTg2NiAtMSBzCis8MDQwMD4gMTg3MCA3OTAxIDEgMTk3NSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAxNzI3MjAyMTJkMDAzMTIxMmQyZTI1MmEyOTJlMDAyYTIyPiAxOTc1IDc5MDEgMyAzNTY4IDAgcworPDAwMjkyMTJmMmIyMTJkMjIwMDMyMjEyZDIxMDAxZDMxMWQyNTI3MWQxZTI3MjEwMDMxMjUxZDAwMWQyOTJhMjkzNDI4MmEzMDJlMDAxMjFhMTgwMDIyMmQyYTI4MDA+IDM1NjggNzkwMSA4IDc5NzIgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwZTE4MTUwMjEzMTkwMjBlMTgxNj4gNzk3MiA3OTAxIDAgODk1MSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMzAyOTIwMjEyZD4gODk1MSA3OTAxIDEgOTUzMSAwIHMKKzwyZjI0MjE+IDEyNzEgODE0NSAwIDE1NjEgLTEgcworPDAwMjAyNTJkMjExZjJmMmEyZDM0MDA+IDE1NjEgODE0NSAyIDI0NDcgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwODBkMTQxNTAzMTAwOTE1MTgxMTEzMGUwZDEwMGIwMzA2MDkxMDA3MGMwZjA1MTMwZTE0MDM+IDI0NDcgODE0NSAwIDQ5NDEgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwNzAwMTcyZjI0MjEyZDAwMmUyMTJkMzEyMTJkMmUwMDJhMjkwMDJmMjQyMTAwMTQyOTJmMjEyZDI5MjEyZjAwMjgxZDM0PiA0OTQxIDgxNDUgNiA4MDIxIDAgcworPDAwMjQxZDMxMjEwMDFmMmEyYjI1MjEyZTA3MDAxYTI0MjE+IDgwMjEgODE0NSAzIDk1MzEgMCBzCis8MzYyYjJkMjUyODFkMmQzNDAyPiAxMjcxIDgzOTAgMCAyMTc5IC0xIHMKKzwwMDJiMjcxZDFmMjEwMDJmMmEwMDIzMmEwMDIyMmEyZDAwMjkyMTJmMmIyMTJkMjIwMDFlMjUyZjJlMDAyNTJlMDAyMjJmMmIwNzFmMzAyYjA3MjQyYjA3MWYyYTI4MDc+IDIxNzkgODM5MCA4IDYyODAgMCBzCis8MWIyNDI1MjcyMT4gMTI3MSA4NzI0IDAgMTgxNyAtMSBzCis8MDAyZjI0MjEwMDI5MjEyZjJiMjEyZDIyMDAyZTJhMzAyZDFmMjEwMDFlMjUyZjJlMDAxZjFkMjkwMDFlMjEwMDJiMjcxZDFmMjEyMDAwMWQyOTM0MzIyNDIxMmQyMT4gMTgxNyA4NzI0IDggNjA0OSAwIHMKKzwwMDJhMjkwMDJmMjQyMTAwMmUzNDJlMmYyMTI4MDUwMDJmMjQyNTJlMDAyODFkMjkzMDFkMjcwMDMyMjUyNzI3MDAxZDJlMmUzMDI4MjE+IDYwNDkgODcyNCA3IDk1MzEgMCBzCis8MmYyNDFkMmY+IDEyNzEgODk2OSAwIDE2MzAgLTEgcworPDAwMmYyNDIxMDAyZTJhMzAyZDFmMjEwMDFlMjUyZjJlMDAxZDJkMjEwMDJiMjcxZDFmMjEyMDAwMjUyOTAwMmYyNDIxMDAyMDI1MmQyMTFmMmYyYTJkMzQ+IDE2MzAgODk2OSA4IDU0MzcgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMDAzMTExMjE1MDMxMDA5MTUxMjA5MTMwYTAzMTQxMzA3PiA1NDM3IDg5NjkgMSA2Nzg0IDAgcword3N0OmR1dGNoMTIgU0YKKzwwNzAwMDAxOD4gNjc4NCA4OTY5IDIgNzA3NiAwIHMKKzwyZDIxMzEyNTJhMzAyZTAwMmQyMTMxMjUyZTI1MmEyOTJlMDAyYTIyMDAyOTIxMmYyYjIxMmQyMj4gNzA3MiA4OTY5IDMgOTUzMSAwIHMKKzwzMjIxMmQyMT4gMTI3MSA5MjE0IDAgMTcwNSAtMSBzCis8MDAxZDJlMmUzMDI4MjEyMD4gMTcwNSA5MjE0IDEgMjUyNyAwIHMKKzwwMDJmMmEwMDFlMjEwMDJiMjcxZDFmMjEyMDAwMjUyOTAwPiAyNTI3IDkyMTQgNSAzOTE0IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDMxNjE0MTMwMzA5MTUwNzAzMTAwOTE1MDQxMjA5MTMwYTAzMTQxMzA3PiAzOTE0IDkyMTQgMCA1NjAwIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDUwMDFlMzAyZjAwMmYyNDI1MmUwMDI0MWQyZTAwMWUyMTIxMjkwMDFmMjQxZDI5MjMyMTIwMDAyZjJhMDAxZTIxMmYyZjIxMmQwMDIxMjgyYjI0MWQ+IDU2MDAgOTIxNCA4IDk0NjEgMCBzCis8Mzc+IDk0NjEgOTIxNCAwIDk1MzEgLTEgcworPDJlMjUzNTIxPiAxMjcxIDk0NTggMCAxNjA3IC0xIHMKKzwwMDJmMjQxZDJmMDAyOTIxMmYyYjIxMmQyMjAwMjUyZTAwMjkyYTJmMDAxZDI5MDAyYTIyMjIyNTFmMjUxZDI3MDAxMzIxMzIyNzIxMmYyZjA2MTg+IDE2MDcgOTQ1OCA3IDUzODYgMCBzCis8MWQxZjI2MWQyZDIwMDAyYjJkMmEyMDMwMWYyZjA3MDAxYz4gNTM3OCA5NDU4IDIgNzAzNiAwIHMKKzwyYTMwMDAxZDJkMjEwMDIyMmQyMTIxPiA3MDEwIDk0NTggMiA4MDIwIDAgcworPDAwMmYyYTAwMmIyNzFkMWYyMTAwMjkyMTJmMmIyMTJkMjI+IDgwMjAgOTQ1OCAzIDk1MzEgMCBzCis8MzIyNDIxMmQyMTMxMjEyZD4gMTI3MSA5NzAzIDAgMjEwMyAtMSBzCis8MDAzNDJhMzAwMDI3MjUyNjIxMDUwMDJiMmQyYTMxMjUyMDIxMjAwMDJmMjQxZDJmMDAzNDJhMzAwMDI4MWQyNjIxMDAyZjI0MjEwMDI5MjExZjIxMmUyZTFkMmQzNDAwMjgyYTIwMjUyMjI1MWYxZDJmMjUyYTI5MmUwMDJmMmEwMDJmMjQyMTAwMmUxZjJkMjUyYjJmMmUwNz4gMjEwMyA5NzAzIDEyIDg5MjMgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwNzE3MWIxYzBjMTUxNTE0MTcxMjAwMWMxMzEwMDAwZDE0MWMxYj4gMTI3MSAxMDE1OSAyIDI4OTAgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE3MjkxZjIxPiAxMjcxIDEwNTU4IDAgMTc1NyAtMSBzCis8MDAzNDJhMzAwMDI0MWQzMTIxMDAyYjI3MWQxZjIxMjAwMDJmMjQyMTAwMjkyMTJmMmIyMTJkMjIwMDJlMmEzMDJkMWYyMTAwMWUyNTJmMmUwMDJhMjkyZjJhMDAyZjI0MjEwMDJlMzQyZTJmMjEyODA1MDAyNTJmMDAyNTJlMDAyOTIxMWYyMTJlMmUxZDJkMzQwMDJmMmEwMDFmMmEyODJiMjUyNzIxMDAyZjI0MjEyOD4gMTc1NyAxMDU1OCAxNiA5NTMxIDAgcworPDFkMjkyMD4gMTI3MSAxMDgwMyAwIDE2MDggLTEgcworPDAwMmIyMTJkMjIyYTJkMjgwMDJlMmEyODIxMDAyMTIwMjUyZjI1MjkyMzAwMmYxZDJlMjYyZTA3MDAxYTI0MjUyZTAwMmUyMTFmMmYyNTJhMjkwMDFkMmUyZTMwMjgyMTJlMDAyZjI0MWQyZjAwMzQyYTMwMDAyNDFkMzEyMTAwMjEyNzIxMWYyZjIxMjAwMDJmMmEwMDI1MjkyZTJmMWQyNzI3MDAyZjI0MjE+IDE2MDggMTA4MDMgMTQgOTUzMSAwIHMKKzwxZTIxMjkxZjI0MjgxZDJkMjY+IDEyNzEgMTEwNDggMCAyMjg0IC0xIHMKKzwwMDJlMjEyZDMxMjEyZDA1MDAyOTIxMmYyZTIxMmQzMTIxMmQwNTAwMWQyZTAwMWQwMDFmMjQyNTI3MjAwMDJhMjIwMDI1MjkyMTJmMjAwNz4gMjI4NCAxMTA0OCA3IDU1ODQgMCBzCis8MWEyNDIxPiAxMjcxIDExMzgyIDAgMTYzMSAtMSBzCis8MDAyOTIxMmYyYjIxMmQyMjAwMjAyNTJlMmYyZDI1MWUzMDJmMjUyYTI5MDAyNTI5MWYyNzMwMjAyMTJlMDAxZDAwMjgxZDI2MjEyMjI1MjcyMTAwMzIyNDI1MWYyNDAwMWQyZTJlMzAyODIxMmUwMDJmMjQyMTAwMjEzMzI1MmUyZjIxMjkxZjIxMDAyYTIyMDAyZjI0MjEwMDIwMjUyZDIxMWYyZjJhMmQzNDAwPiAxNjMxIDExMzgyIDEzIDkxMzggMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzExMTIxNTAzPiA5MTM4IDExMzgyIDAgOTUzMSAtMSBzCis8MTAwOTE1MTIwOTEzMGE+IDEyNzEgMTE2MjcgMCAxODY4IC0xIHMKKzwwMj4gMTg2NCAxMTYyNyAwIDE5MTcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDE0MjIwMDM0MmEzMDAwMjAyYTAwMjkyYTJmMDAzMjI1MmUyNDAwMmYyYTAwMjQxZDMxMjEwMDI5MjEyZjJiMjEyZDIyMDAyNTI5MmUyZjFkMjcyNzIxMjAwMDJmMjQyMTJkMjEwNTAwMjUyZjAwMzIyNTI3MjcwMDFlMjEwMDI5MjExZjIxMmUyZTFkMmQzNDAwMjIyYTJkMDAzNDJhMzAwMDJmMmEwMDIxMjAyNTJmPiAxOTE3IDExNjI3IDE4IDk1MzEgMCBzCis8MmYyNDIxPiAxMjcxIDExODcxIDAgMTU2MSAtMSBzCis8MDAyODFkMjYyMTIyMjUyNzIxMDcwMDFhPiAxNTYxIDExODcxIDIgMjY1NiAwIHMKKzwyYTAwMWQyZTJlMjUyZTJmMDAyNTI5MDAyZjI0MjUyZTAwMmIyZDJhMWYyMTJlMmUwNTAwMmExZTMxMjUyYTMwMmUwMDI4MWQyZDI2MjEyZDJlMDAyNDFkMzEyMTAwMWUyMTIxMjkwMDJiMjcxZDFmMjEyMDAwMjUyOTAwMmYyNDIxMDAyODFkMjYyMTIyMjUyNzIxMDAyZjJhPiAyNjI1IDExODcxIDEzIDk1MzEgMCBzCis8MjUyOTIwMjUxZjFkMmYyMT4gMTI3MSAxMjExNiAwIDE5OTEgLTEgcworPDAwMzIyNDFkMmYwMDI4MzAyZTJmMDAxZTIxMDAxZjI0MWQyOTIzMjEyMDA3MDAwZjI3MmUyYTA1MDAyZTJhMjgyMTAwMmUzNDJlMmYyMTI4MmUwMDJkMjEyYzMwMjUyZDIxPiAxOTkxIDEyMTE2IDggNjUzNSAwIHMKKzwwMDIwMjUyMjIyMjEyZDIxMjkyZjAwMWYyYTI4MmIyNTI3MjEwMDJlMzIyNTJmMWYyNDIxMmUwMDFkMjkyMDAwMjcyNT4gNjUzNSAxMjExNiA1IDk0NjEgMCBzCis8Mzc+IDk0NjEgMTIxMTYgMCA5NTMxIC0xIHMKKzwxZTJkMWQyZDI1MjEyZTA3PiAxMjcxIDEyMzYxIDAgMTk0OCAtMSBzCis8MDAxMj4gMTk0OCAxMjM2MSAxIDIxMTMgMCBzCis8MmEyZDAwMmYyNDJhMmUyMTAwMmUzNDJlMmYyMTI4MmUwMDMyMjQyMTJkMjEwMDJmMjQyMTAwMmQyMTJjMzAyNTJkMjEyODIxMjkyZjJlMDAzMjIxMmQyMTAwMjYyOTJhMzIyOTAwMmYyYTAwMmYyNDIxMDAxZDMwMmYyNDJhMmQyZTA1MDAxZjJhMjgyODIxMjkyZjJlMDAyNDFkMzEyMT4gMjEwNSAxMjM2MSAxMiA5NTMxIDAgcworPDFlMjEyMTI5PiAxMjcxIDEyNjA2IDAgMTcxMCAtMSBzCis8MDAxZDIwMjAyMTIwMDAyZjJhMDAyZjI0MjEwMDI4MWQyNjIxMjIyNTI3MjEwNz4gMTcxMCAxMjYwNiA0IDM3OTMgMCBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoNikgNgorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM0IHB1dAorZHVwIDMgL0MwMDM2IHB1dAorZHVwIDQgL0MwMDQwIHB1dAorZHVwIDUgL0MwMDQxIHB1dAorZHVwIDYgL0MwMDQ0IHB1dAorZHVwIDcgL0MwMDQ1IHB1dAorZHVwIDggL0MwMDQ2IHB1dAorZHVwIDkgL0MwMDQ3IHB1dAorZHVwIDEwIC9DMDA0OCBwdXQKK2R1cCAxMSAvQzAwNDkgcHV0CitkdXAgMTIgL0MwMDUwIHB1dAorZHVwIDEzIC9DMDA1NCBwdXQKK2R1cCAxNCAvQzAwNTggcHV0CitkdXAgMTUgL0MwMDYwIHB1dAorZHVwIDE2IC9DMDA2MiBwdXQKK2R1cCAxNyAvQzAwNjUgcHV0CitkdXAgMTggL0MwMDY2IHB1dAorZHVwIDE5IC9DMDA2NyBwdXQKK2R1cCAyMCAvQzAwNjggcHV0CitkdXAgMjEgL0MwMDY5IHB1dAorZHVwIDIyIC9DMDA3MSBwdXQKK2R1cCAyMyAvQzAwNzIgcHV0CitkdXAgMjQgL0MwMDczIHB1dAorZHVwIDI1IC9DMDA3NyBwdXQKK2R1cCAyNiAvQzAwNzggcHV0CitkdXAgMjcgL0MwMDc5IHB1dAorZHVwIDI4IC9DMDA4MCBwdXQKK2R1cCAyOSAvQzAwODIgcHV0CitkdXAgMzAgL0MwMDgzIHB1dAorZHVwIDMxIC9DMDA4NCBwdXQKK2R1cCAzMiAvQzAwODUgcHV0CitkdXAgMzMgL0MwMDg4IHB1dAorZHVwIDM0IC9DMDA5NSBwdXQKK2R1cCAzNSAvQzAwOTcgcHV0CitkdXAgMzYgL0MwMDk4IHB1dAorZHVwIDM3IC9DMDA5OSBwdXQKK2R1cCAzOCAvQzAxMDAgcHV0CitkdXAgMzkgL0MwMTAxIHB1dAorZHVwIDQwIC9DMDEwMiBwdXQKK2R1cCA0MSAvQzAxMDMgcHV0CitkdXAgNDIgL0MwMTA0IHB1dAorZHVwIDQzIC9DMDEwNSBwdXQKK2R1cCA0NCAvQzAxMDcgcHV0CitkdXAgNDUgL0MwMTA4IHB1dAorZHVwIDQ2IC9DMDEwOSBwdXQKK2R1cCA0NyAvQzAxMTAgcHV0CitkdXAgNDggL0MwMTExIHB1dAorZHVwIDQ5IC9DMDExMiBwdXQKK2R1cCA1MCAvQzAxMTMgcHV0CitkdXAgNTEgL0MwMTE0IHB1dAorZHVwIDUyIC9DMDExNSBwdXQKK2R1cCA1MyAvQzAxMTYgcHV0CitkdXAgNTQgL0MwMTE3IHB1dAorZHVwIDU1IC9DMDExOCBwdXQKK2R1cCA1NiAvQzAxMTkgcHV0CitkdXAgNTcgL0MwMTIwIHB1dAorZHVwIDU4IC9DMDEyMSBwdXQKK2R1cCA1OSAvQzAxMjIgcHV0CitkdXAgNjAgL0MwMTI3IHB1dAorZHVwIDYxIC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTI1NiA5MjAgNzY2XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjI0N0RBN0ZDOTFCOUZFQkE4MjkyNUM3QjdBOUIwRDIyREQxCis3QzBFOUE3MDkzNjA4RjE0MTA1NDZGMDAKKzA5Rjk4NTMxQjU5NTlCNTg4QworNzlDQzMxMDMKKzA0OTUyQTI1OUI4MUU0NTIxMTFCMTYxODg5RjIKKzMzNDdENUI2MEJDQkVFOURFQTMyMEVDMzZGOEY4RTQ0ODVDMDNDRDZFRUIzRjg4MjE4MDA4NkNFMDQ3MUUxQ0ExQTRGMkVCMUQ3OTg1NEZBRUM5RTA5NUZFMjZDRkJDQTEzM0UzNjEyNENERUJCN0Q4QTg1MzAwQUQxRjBGOTE2RUU3MzBDQjlDMjEwMzYxQjgyN0ZGNjM3NTEwQTQ3QTIwQjQ3N0Q2Nzg4RDBDNEU0OEIxMTk1QzMyOTM3OEFBMUQ4NTc0QTZGRDZCRTg0Cis4QzFDN0M4QworODgwNTQ3OTVGRkU3RDgzODhCQTUzMjRBNDFBMgorQzJFOTg4NTQ5NTRDMkY5REEzQzcwRDEyRTJGOTBDQkI4RTdBMjZBRjYwNUIxMDRFNDI0NUJENTFFNTg1QzY5OTUzRDcyNkJEM0NBQjUxRUM1RjFBNDdGQTI4NzUzOTE5OEU4MTg1NEQ0Rjk2RTZDRUUyQTkzNkZBMjk2OEJGMzI3QzNBMTk4RDFBNTlGRkExNzMwOTJCNjc0RjYyMDhCRTcwQTlDM0Y4OEJDOUIzQjUzQzY3MEY5RDg5MjFFRTlBNTY1MEM5RTIxRThGRTNGMDdFNzg3MUY3NTlGODA3QTkxRTQ3RENDMEZCRkI3NjYwNTRDQTFCRTJDRDU4CitGREM3Cis3RjRCRTFEMUNCQkFDQTEyQzA0NDYzQzYKK0FEMzRFNkVGCitCQzU5RUUwOURFQTA2RjAxNkVDMDI1NUZEQworQ0UwQjIwOEY2QkRENjM1MTlDMzQxNzYxRDk0OTc3N0EzRUM0Qzg5OTg3M0RGRDJEQ0YzRjVGN0ZFRUIwNzA1RjhCMTFCQkU0NjMxQjlCNTlERDY5RjRDOEJCRUQzRTJERTJCQTQ2QURDMEQ2RjUxMjk0MjgzREVFMTUzQzhFQzUKKzM2NzBDMkVBCis5QUU4QTBEMUIyQjZCQTI3QUY3MzAzMEE5RgorMzA0MEM5MjE1NkM5MUFENDQwMDg4MDJCOUY3MEExRjVEQzJFODVCQ0MzMTc0QjAzM0Y0RjVBQzAwNzZBNzgzRTk5MEZEMkIyOTZDQTFBMTU3QTc4RjAyODQyRjU3NjY4N0MzODA2M0Q2Q0JBODRENjk4NzBCMTE1QTMxRjQ5CisyQTM5QTg1MAorQ0I5NDAwNkI1NTE2NUUwMTAwQTU2N0ZCNjYKK0E2N0FCMkU5RTg1MzUzNzUwOEZBMjQwQjFFREZENjEyMDU0OUY2RThGRjJDQzU5MTk5ODAzODYzMTdDNjZENjE4MkEzNDJDM0Y1NDkxNUVCMkU0REQzRUREMkNCMURCQUIxRTUwNTM2NkI5NDdBNTBENAorQjkzNDA5MEMKKzBEOEE1RTg3NDMwM0UwRkMzNEE4OTYyRUYwCitEQjYxOEVFRTQ1RkZENTc2N0FDRTkzQTBCMDZBQzBDQ0E3OUI3OUEyQ0I0MUMwCis1OENCRDdCNworRDRFRkFFN0IzODhGOTA1NDA1NDdDMkE2MDcKKzRCMjYzREZCQUYwMjE0QkU1NjU4NDJGRThDRjc0OEE4Nzg3OTIyODFBNTk3RUQyNkYwMjcxM0MyNzQ2MjdDCis2MUY5MTRERgorRjE3ODM2Njg2QkNENjhDQTAxMTBFMEY1MEEKK0ZBNzczRUQwQ0M4MDU4NjcyQ0NBMUI4M0I0MkNEMjMzREY0QTQyRTQwMTFEQURFODg5MkUzQUQxCis3NzJEOEZDMworQzJGMTc4NDc5N0Y2NTg0QzBCQTJDMkFEMTYKKzlGRjM0MjY2N0I0MDc3RTA1RTc4MjFCNzlBNDA4RjkzMzBENTcyODIwRjQ0M0UyRUIxQjdGRjJCNUM3QjkzNzFCRUJBRjI0NkVDQUMyQ0RFMkIxQzIwQTJFNzgyOUYzQTcyN0E2QzE2QzVBOTBGQ0IxNkM3ODBDRjBDMzc3ODVBMUUzMkZCRjM2MEY3MUQ0MEU3NzkKKzBBNTc5MzdBCitBMTFBN0RFQjlERDgxM0I4MUFBMjZCMzkzQQorOTg1NjlFNTkyMjc4MjZBNENDQ0REMUJGNTlBRDJGOUUwMkU2NDE2MzU4QjlFQjBCQkZDRUFGQjA3RTcwQzE3MTBFN0RGRUI0QzhEQTYwNEY5NTgxM0ZDMjhCMTRDMEE3N0EyMEE1MThBM0NENTcxQUI5RjFDQjkzMkNDQkNCCis0MzRCRUZGNworNUQzQTE1RERERTIyRDUxQTA2OTRBRDRBMkQKK0FBQ0ExOTJFMzBFRTVERjE3RTQ5NUU5MjRFQzgwODU0NkVFQkZDOTNFQUVCQjRCM0RDRUU1OTgxMDA5QUQzOTNFQTY5MkMyQkUxNkZDNUNBOTM1NkFCMTM2ODVFMUYyMDhFM0E2QTA3RUY1QTI4N0IwQ0NBQkEyODZGRDZGNDJGMDE4RjQ3RDcyMzI5QzY4NTdGQzVFMzE0NzBGMjEyMkVFNTkwQkRDRDdCOUI0RTkzNkIyQworNzBCOUQzODkKKzA1QzEwODNFMkFDNTM3NTJENzU2NjRFRjFGNkYKKzNBOEY0MEZDOTA5NEY5RkU5RjM5QTFGNjUwRjc5NUIwNjU0NjUwQjQ0RkFGRUQyNEJBOTlCMTQ4MTk0QThFMEFCQTVCMkJCNzVFMDdEMENDRjFDMkQ5QjUzOERCODIyQkE2MDcxQzQ1QkU1QkRGNEY1RUNEQkQ2RkQ4QjlCQUI5MEUxN0M0MjdEMDg3OTgyOTFFMjk2NjI0NjZGMjJDMDRCRkQwQ0ExMjk4N0MzREM0RURENzNFOEQ2RjMyRkY0RkQxOUUzOTRBCisxMzU4NUFCMworRUFDN0U2QTE2QTBGOTE5OTE4M0ZDQUI2RTQKKzBFNDg1OTgyRTBCNEEzMUNBQ0VCODhFODczRTNEQTcwQjQ5NDI0REQwMDQ3NjkyRkNGMjlDRjJBMjMzMjVBMDUwRDkxQTcyNjQ5N0YzOTVCMEFEQTU0NEIzMTI4NzNGMDYwQUYwOTY2RkNFQworMzNFNUQzNjAKKzIxOEZBRjJEQzBFRkNGRTYxQUYzRTMxOEI5Cis4M0U1NzY2OEYyN0NENTExQ0ZBNzUxNDBEQ0RFMzU4RTA5MDAxNjE1M0IwRUJGRUZGNDA0NjEzMEE3NDYwRTRGNERCMTU5RTBDMkM1OTYyNUVGCis0QzUxOTFFRAorOEZFMDNFRERBMjVFMkVDOTcxQ0QzRUYxNzgKKzIwRjAyOEQzQkI2RjFBMzExMjhBNDgwNjk0NTg1Q0UzRDlEMUZEMkYyREUwNTZDQzdEMDkxRDE5RkRGREZFNzlGODg3MjZEOEIxQ0NCMQorQjg4NzM4OEEKKzI1Q0Q4NEVBOUE2QjUyOENBODM1RkUzNDY4MTgKKzZFQ0Q5MEUyN0NGOTQwQjU3MkMxRUVDNjk2MDZGRkIwN0U4MjUyQjkxQ0M5NDE1OEMyREQ4NDM0QUE5MEUwRjkyOERGMDdCQzg5RUVFQTdCNDIzRjdCODQwNzQ5OEJFMDZENEQ3Q0VGMTZDN0U0QTFFREQ4NjY3REUyNzI5MEIwQzFGQzc0QjQ4REU5MzY0MTExMzQ3ODBDQUFBN0JEQzhDNjYyOUJCM0M4MjE2QzY3MENGNjMwODcwNkFFODY1RDNDN0Y1MTM0NEU4QjU4M0Q0MUZEREZGOUFDNDg3NUI3MDZCQUEwCitFQTRBMjQ4NAorQjQ3NkQxMjM1Mzk2NTEzRDQ2MDhEQjlGM0UzRgorQkUwODRBMkQ0NDA0RTgzNEU5REVCN0U5QjhDRENGMzcwNTlGMkQ5RUNFNzBFMzQwMUFDOTc5Q0M3MUI4NjRFNzMzN0YwMkZDMjhFMUQ1RTIwRkQ2MzVGMzk2OTMxMTk0OEZGQTMxOEM4QjAyNURCN0E3ODBFNkFCMzI0NkY3NDRBMjk4QzdEMzI3MTQ2RTI3NUI5MjQ5NENGRkEwMkQyMkQ5N0JFMkJDN0Y1NjBEQTYwRDdEQTkwMEJEMjNGRDRBNTFDNkExNjk4ODUxOThBNDcxNzk2MzdBMzg1M0IwNzdCNTQwNDhERTc5OTNBMDdEMzIzRjBCMENCQzk3Cis5NTVECitDMAorRTJDN0UzQUYKK0ZCREY3QUMyNkMxMEU4RDA0QzlDQjIwQTYxCis3Mjc1QjRCRTAwMTFGMEMxMTE4QjJFODdFNTY3OEVBMzFCOUU1MDkxMTZDRjg0MjVGNTBEQ0JDRjMyNjEzQUQ4MzBCOEIxRENGMENCMDdCQkI1MEE1RDQzQTQwRTI1NDAzRDUwNjIxQjY5NDNBNzNENDU4MzdGNzlBODg2NkMwOTYzMTdFMzI5NDkwMENBQThBNzRDOTlENjA1MDVGRTZCQ0E0RDI0NEJBMUYyMEU5NjIzQzQ0N0FFNjQ1Q0VEN0YzRgorN0Y2MEY1NUUKKzI4RjJCNDFCQkEwODI0Qjc3MTRDMjA1Mjk0Cis1OTdCMDkzOEUzNjQ0MURCQUZFRUI0MzIxMjVBOTQ5RjEwOEJFMUMxQUEyOTA2M0U0OEZFMjAzMUNFODhDNUFCMEJBNjZBQzY3Mjk2M0QzNUY5MjJGMDBDMTcyOTkwN0RFRkY4RkFFQzM3RUJFNUI4NjU0OEMxMkRCMEVFRjlFMTVFQkRGRDYxMUYyQzVEMUFFQjc5NTA1MTRGMzUyOTNBRUNCMTgzNkE1MUFEOTUzMUZENDEwMDVEQTgwRkM4N0JCNjY5QTEKK0RFNDc5N0M2CisxNDRBOUVBMjIxQkIyODIwRjY5MTYzNUNFQUY3Cis1MzNBQTg4NDVGQzNFQTA2RjY3Q0JGQkI0M0U3MUI0MEVFMDVCOTkyOTU1NDlEOUUzNUE0RkM2QTNCMUZEMENENTVGRkNFNzE4NjU2Nzc0RkEzRjdGNzM1MkYyQTU5RThBNTNDQUZBNEE1MEEyQjQ5RDA0NTBCMzcyOTI0NzJDMTY3QTc2RjM1MzFBNTU0NjQ1Qzc3MzBGMkFERTAyMkQ0Mzg2RjlFN0QxNzAzNzkzQzI5NEFFODNFRDQ2QTZEREE0MURCRTRFN0IzN0YyRjVCQkUzRjY1OEFCQzE4NzIxNjRENjk5MjNBNTM0QkUxMjAzQ0I5QTBFMDMxMEEKKzYzRTcxQTI5Cis0MjA5NDUyRTk4NTBCMkQ2OThCNjNBNjdCNTFBCitFOEIxMkU1QjRFNzc2NTYyREM3MUNCMzYyMEFDQTNCODc5RDQ1QzM3QTJGNkRBNUNGODQ3NDQ5OTM5REM5OTU3Rjk4MDdGQUY5MjdDMEZGNTc3NEQzMzZEMzg3QTFFNzFBMDkwQzc2MzczMjRDRDIyRkM3NDlDQUQ1Q0NEQkE0NTczMUVCODRDMUI1NDZGQzRBRjYwRUQxRTFFRDdFMDg5QUMyN0Y4QUQwMEQ2MEFEMUExQzJDN0M4QTlCRTU1MEEyOEE0MjZFN0EwMzZCOEM2QTA4QUY3RDYzN0M3NjIzNzBGNjE0MkZFMkIzMUJFMEM0RDIzCisyOTE3MURGRAorNDk2MDQzQjIwRjMyNzEwQjYzNThDMURGQzNFNAorNDAxMkY4ODJCNzk2QkU2QjlFODZBOTdDMjBDNjYzRTA3OTNDN0Y1RDE2MDU1MTg0RDAxMjkzREI5QzQxQkFFNzU5OTJDNjFGRjQ4MkRGMTQwMTVFMTM0MTVDQTkxN0IzOTMyNzAyRjE1ODJCODZDNDgwNDg0QzE0OUE1Q0YxRjRGMDNCMzRGM0NBNzQ2QkJFMzgwQjg5RTQ0MDFCNDM4NDFFRjMxMzRBN0IyMkRBNjJFOTU3RTQwMkM1RURGMjQ1NDY1OTdFQUI3QTZENkI0NDlFOUZCODFBMDVDNzlEOTE4RTgzQzdCRkM4MTUzNzg2NjE5OUI3NzRCNzBFCis4NjRGCis4NzhEMUVGMjNDNzE1RkZBNkVDRkM2CiswNUUyQzI2QQorRjc4QkU1RDBCMDBCNTYyMTdFMDNFREU2NkUKKzY1NTdFN0JEMUFBMjA4MDcyRDhDNjBDNTVGNDgzRkM1QUExN0YyMUQ3RDNGQjREQUEzNDc5MTJDNjNCOTA3MzhDMzAyRThBRjQwRjQ1RTZERDFFMTQwNEJBODlEMjc0RDdEOUZGQkMyNzEzNkJCNzZGREQ0QkMKK0ZENTk4NjE0CitFMDcxODM3QzA1RjFDRkZCMjdGQjVCNENDQTgyCis1RENDNkRDNURGMzA5QkIwRkFEQkU5RDEyNzRBMDczNENEODVCRjk5RTA0RTU2NjI2OEM2QzIyMTQ2MThDNkJGMTQ1QTU2NDQxMUY0OUYyMUU1ODcyQUE1OEE2NTgwRENCOUYzNzA4MDJDREJFRDA3RTYwNTM2RDE3QUUzQTlGNDUyMjk1MTJGQzZDMjc4QkUzOTNCRUUyMThGQTUyMDhGMTNCRDZCRUU3ODI3QTU1MUNFRTcwODM1N0Y0OUFEOUFDRTNDREJFMjZFQThEMzhERjY2QzhBMDU2ODM3QTMKKzZENDVBM0JGCisxRkU2MzFBRDkwMjhFOEFCNTIwOUU4M0UzMworNkJBMEE5MjZEMjk2MkVDRTYzMDI5MjNENDUxODBFNDQ1RDYxRDEyQjIzNTY2NEU2OTlEMUJERjJEOUVDRUVDRUY3MzFGODA5NzhEMDhFQTA2ODU4RkRGQjBFMTFGNkZFNDBEODE3MEVFRUYyQTk3M0VFMDk0RTc3NjQxRkQ0MDcxRkMwMEJFNUM0RDc4NjIyOUQ5NzBERDE3MDZERDQ3MzJCNjM0MUE3OEM0NjVFODkwMEVDOTBEQworQTdDOUE4QkYKKzAzOUY3NUI3Q0E0Q0Q5OEFBQjUzQzQwM0VDCis0QkNEMEI3NTZFRDY1ODYzNkE3NjAwNzA3NDIyMTgwQjVBREVGN0MzRTNFQzhGOTc2QkYzREEyOUVFODAzODBDQzcxMzFBRjQ4N0ZBMjcxOTE4MjBDQzFCRUIwN0Y4NDZDQ0YwRjdFQjlGMkIxN0QyOTFBOTVCNUIzMEI1QTlBREI1N0U2RkJDMkZFNjk5OUM2RjNGRDY1ODA2MTU5QzdBMjYxMzMxCis5MDc0NUI4MgorMDZGMTM1ODU0OEI4NUI4MzI5NzAxQjc0MjNGRgorNDNFQkE0NTc5MDAzODkwRDlBREExOUVGNzFGNEEzQURDQTJCQTFFRkQ3NjExRTNGRkM5MzA4NzQwOTIzQTE2NTY5RkRGQkQzOTJFRkI4RURGMTMzMjBCQzhCNkFBOTI1NEYxRkQ3OTg0OEIwQzk1QzQwQjc4RkVEMjc3MkZDMjI3OUU1N0RGMEEwNzBFMEQ5NjdGN0RGOTAzNDZGMUQwNjUxNkREMzA5QkNFQ0U2MUUwNUUyMEQ5M0VCQTBCQTdENTgyMjhBQjI2RjRDQkJBNjFDMTkKK0UwRTk3RkUxCis2ODQxNTAzQkRCNjk4RDY3MDFCMDkxMjZFNjE3Cis5RkY0QzVEREU0QUZCQTdEQUI1RDA5MUVGRkQxQjVEOUQwRDQ1QkZGMzhFNkUzQUNFQTRBNUUwOTdDRjYzM0VFODA5RjBBNkYwMTcxM0Y4MEI3Q0UyQjg1QjY2MUU0NTdFMjRCRjU4NzIzNzdEMEI3MjJBOTFEOTVBMTVDNDI0MDE1QTNBNkMwQzFBNkY0RDg2RTU2MjlGNTIxRjQ4MzlFNkU1OTI5MjYxRDREQ0ZCMzUzMTg5NDc2ODFFODYzNkVGM0M2MTRGMTA1NDQ2N0M4RjZGMTFFRkE3QjZGRkU3NEY4M0FCQjZGOUY1NTE4QjRGNzlCODBGNjU0OTQKKzFDQzJCQUQzCitCMTVCQzExRjJEMTU0NzAyOUM5NDlDMTA2RkZDCis1NEVGQzA2RkNEMjM5OTE2OUQ0OEJENkZCMkRERjRGOEY2M0FFOUIzNDdDRUVGRTg5OEYzQUVCMkFCQTUzRkY5NTM4MEI0MTU2QTkyRDlBRkRBREQ3MDg3RDZCNzIwRjY4RERDQkNERTlCREQ4NzQyM0NBRjY1MkQ0RDlGQ0UyRTY3NjdCOUM5RUZDNDQzQ0U0Nzk3QzE4RUY1ODkzMjVBNUYxNzM2ODg3NDYyQkEwQ0REMEI2RjBBMjMwMEQ4NjY5MENENkNCRDIyNkJFQzYzOEVDRjI3QTY1MjJDMDYxNEZFMDE3QUE5OTVCODg5ODkyMTlDNDY2Nzg4RDgKKzdFNEQKKzNBMUU0RQorQUQyOTk3MzQKKzk2MjU1MTc3QUQzOEYzOTVDNDZFQkM0NDRFCitDREE5OThFN0U0OTlCODlFNUQ4REE4QjFFQUNFRkY2QkU3Mjk5MEI4NEIzRjBCODFENDIyRUMxNEMzMUExM0Y4NjU2QkE3MzU5NDMwQjlBMzJCRTM2RTYzOEY5NzY4Nzg0NTc3MUU4QjY4NzdGQjAzMzkzODhCRjgxOTZBQzM3NjA2MDlGQ0E0RjVFNjY2MTU1RjhDMDk0OUU0RUVFNTA5NTIKKzRGQTdCM0U1CitCNjRFRUIwQ0I0ODE1MTI5QkRFREJBRDVCNjQ5Cis0QkVEQzlCOTZENzYwQ0Q5OEJFMzgyMEQwMDY5MkNBNkUzRjUwODM0OTA2QjJBRTg0Nzk4MUQ3MDNFODBBNjY3OTBFMTg2OUJGNzcxMUEwQUJFQkE2NTFDMUUzQkEwNzVFQTA3OUU0QTk1NzU0OEE5M0YwNDM0QkU3MDlFOTM2QjcyN0VEQ0ZBRkQ4NTNDNzNFRjQxMTQ0QTEwODcwOERGNzA0RkVCMDEwRkJDQkQxRUZBNjdERTM4NzBFNzMwMzZCMzFCMDUxMQorNDczQjU3OEYKKzNEREYzNkY3QzY3QTJGMzFFNERFNTE3NDYzRDQKKzAxMDZEOUI3M0IzMjVFMDJBMTdBRTNFMEFGNERDMkQwOTc3Qjc4RDY5RkNERjMzNDlBMkNDQzYwOTE1MDY0MjQxN0VGMzkyN0I2MjNCNzgxNjlGNzBGQjBGMkUwODIxMjk2MDlBOUI5RTkxMjRDQjhBRjA0MkVFRjI3QjM4NTQwNjVBM0RDMTJGRUQ3NDA0ODk0MEZFMTY2NkJEMjk5NkQxQkY1REI3RkM0ODBFRENGMjdFM0UyMThCODNDRTIyMEVFOEU4NjQzNTJDRERENTY5RDc4NzZFNjE0QkEyQzYyRDA5QjNENzgxQzE2RURENEE2MjBFNjU1MjU0NgorQ0ZCNQorOTVFMUZFODBEMUIyQ0IxRkIxMEY2NzgxM0ZDRjlGRDY2RjA3MjBCQjg4QjZGRjZCRDlBRkI3QjBGMDc3QUE0MjgzMDNGMERGMzNFRTIzCis4MzFDOUNCNworNEIyQjZBMzVDQUNBMEJGQzE2QzVEQzVERUQKKzc0M0E3RUQ0OUUxMzg0NTVCQzk5NUMzRjY5MDY1QjRGNDJCQ0U4MjA2NUJECis0M0ZERjlFMworMEVEMkNCMzg0OTJBMEJFNTg3NTBBRjE1RTZGNgorNkQ1ODg5QUE4QkFGNkY0NDI1NUI4QkZEQTBFMTJDQ0E2RDQ4NDhBNzAwQjdBREIwQ0VFQzY0NEYyQUQ3ODhGRDI3QjAxNTA5Qzk3Q0VGQUQ2MDdBREQ2QjFGNTVGOUQ5NjgzMTBCMjg4RUYxNzNGN0ZGOTRCNjU3OTUyRjcxRDg5NkFDM0ExNThDQ0E1NDY5REZCNDQzMkY5MzAxMkVCQUZCNEZEMjBERjEwRUY2NDVDNTU4RkIxREU3RTM3OUM4QzUyMzMxRTM1MzE2RDA4RDBCMkM3QjlBN0YwQTEwMTQ3QTVEMjMzNTY4REJBRDgzNDdFN0E2M0MwQjFCCitGMzBCCis3MjI1M0QKKzM1NTgyMjYyCis5Qzc2REE5NjVBRTVFNDJDMDM5Qzc0MDQ0NgorQzNEMzExRjc5QzU3MzA3OUVFNzkwQTIyQjk2QURBNjAwRTcwODEyNkZDNkNERDA4Q0JBOEQ3NDNDMzk0NENGODM0M0UwN0M1ODUzODVBQTU5MzQwMDAxRjMzQzg3NEYxOUUwQTEwMDMyMjk3ODI3RjFEMjE3NzcyRjBDN0VGMDM2NEFGMjhDNjU0MjI1OThGOTlERTFCMDA5QzY2RjgwOUU5RUYyQTI2MjJENUIzOUYKKzVDN0ZBRjQzCiszQjY5OTZFMDZERUYyRjA5QzVBRDEyOEE2MgorNDc1QTM5NDU4QTNBMDFDQzcyRUU0Q0Y3RDRGQUQ0NkFFRDVFREI5QkQ3NjA5RkI0MTcyQ0JENkNDRkI3QjhCOTJBMzU3OTQ5NkU5MTMzRDBCRjcwRjczMkJDODY4OUY2RDIyNkYwMzFBQjQ5N0I2QzAwNkU4OTUwQzBBNkQ1OUREQUZGMzg2REZBRTM3RkUzOTlDNjIxN0Q3MUZBNkFCRjhFQUQKKzAxMjcxNUQxCis5RkFCMzIxNTE2QTI2MzMyRDU0MUFGQkRDM0M2CitEQTcyMkVDRjM0NTQyRUJFMjA4NjFCOUU2RUM0Mjk2NjAyODQzOUE3REIzQjg1Nzk5NDcxQjE4NEQ2NjY4MjdDMDA5QjkxNDY3MjJBRDA0REU2ODZFMUI1OTU3MUYzQzlENjRBNUUzQ0JEREI5MDI4QjBEMzg5REMwMEI5MzI1RTE1NzlDQzk2MjFBMTNBQjRCQkFENDU0ODcxNjg1QTM5Qjc1MEFGNTFBRDdDN0MyNTkzM0NDMDNGNzMyOEU3NjI3QUU0Q0E2MDAzQjNFOTdENUVCOTEzOEIxQ0E2Cis2MEEwODZCMQorQjM1NjMzNjI4QjFEQTM2QkVDNzc0QTY1RUIKKzlENDc4MkIwMDMzRDE5RjM1QTZBMDQ1QzJFREI3RThCRjQ0NjQ5QTFCOTUxRTRBRTBCNkFDMTcwMDdDNjZCQUI2RjM2MzFBNDU1RDVCMzM1RjhENjQ1OTM1MkQ0QjYzNDIzNUQ2OEY1MEIyMjc4MEQxOEVDRUE5N0I1NjkyMjhDMTY4RkQ1M0U1RERCOEZFRDdEMEI1NzRBOTNERDlBQjRGRkEwRjg5OENCNThDODI4NEEKKzc1ODQwNDRBCitGMDk1MzE5RjgzMUFDOEU3QjYwODAwODlBMAorOUVGNzQ4N0NDRUZEMkU4OTU5QkZDNEZGNTNGMkNGRDFDN0M0MEI3QTREOEVDM0ZCMkQ4QTQwNTBCODM1OTI1MkI0ODVFMjgzMkI5NUY1RTIyRkUxNjRFOERCMjUxN0IyNUJCRkJBQ0Y1MjhFMkIzQkE4RTZEMzNEMTNGREExRkIxOEVGRUUwQjI1RTdDMDBEQTAxOTRFNTVCMDVFOTlCNTcxNjlDOEFBNUVFQTYxQUUyODJEMTRCMgorNEU3QTJBOUQKKzVEMTkyM0VGNkEwMjRBMDNENjI4NzkzODU2MkIKKzIyMDM1NjVGNDYwOEIyRTAwMEUwOTVBQzU0NDFGQUUyQTM1QjEzRkU3RUYyOTE4NTlBNDlGNDJGMEQzNUMxNzhGQUFGNjRCNzRGNzk4QjBBMjk4NTkyNTkwQzFCMEM2MkExQUQwMTc1ODlEM0RFNjgxQUIxMTlGMkI0MjdCQjQyNDdFRTY3OUQ1MUM4NzBFRkI5QjgyRUI0NjkxOTA0RUU0MUQ1QkIzMzA3NURERjRCNUMzOEY2ODdBMzg0Rjk1MjRGOUYyQzg3RDdFNjI0RDAxRUQxRUI2OUZEMkMzODIxMUQ4OTM5MzBGREExMjU5NDY2NTJGRjI0MTBFMAorRDNFNworQjAyQzE1RDI2Q0E1ODFCNjg3RjM1RDExMUM2QzcwMzA1MUU3NTk1NDFCRDNEQTAyMjhGREI4QkFCRDI3QjExQ0I5ODA4Qjc5RDYzMjIwRkQ2MDMzMkE4OEM2NzdCNAorMTk4MEM3M0YKKzUwRDM5MENEQUJGNDJEOTI5OUQwNTc0QjA1MDQKKzNDRURENzAxRjQ0MDJFQzIxOUIyNTI0N0Q3QzJBQjE4RTNGNTYzMTdBRDZFNjQ2MkNBNjdCNTdCOUNFQTgyRjkyRTExOTY2OTI4OUZCOTc0ODBCMjk3OERFQUY2OEUzNUM3OUE3RTE3MTM3MUYzQkM5MjJGRjg4NDQ2N0FBM0M3RTQ1NDVGOTAyMjY5MjI4NDZENjZCQ0YwNDhDNkM2RDhFMTUzN0IzRThGQjJFNjNFOEU0NDZGNzUyNkQ2MUU3QzgyQkQ4RDkwMUU3Q0E2QzYzMUMxOTE0MEI5CitGQkQ1REYzNQorMzk4QTNGOEE3MUZEQzBDREFGQTAyRTREQTUKKzMzNUVDRkZDMDI3MjNFQzk3REM0RDc0NzRBMUUwRTY0NTJGODhEQzBCQjhFODg5OTA5NjNCREU0OUNFMzBFQTlFODY5MEQ1NUJDNEU2MTlBQUM4N0M2Qzg1NUZBNERDRjJBMDk3M0E1OEI3Q0MzNDg2QkU4QUE3MDg2QzYxMDJDNzYwQjhDQkI4QTVCMDY2OTVBRDU1Q0MwNDg4NzA2MDEKK0JBNTA4ODVGCiswNkIzQzJENzdFNEVGRjlDNzNCODZFNEREM0M3Cis1MUUzRkQ2QTNBRjZFNUNDMkE3NENGQkY2RThGODAxRDZEREU3MzBFQjQwMTU3QUNGMjU5MTRFOTY1NkYxQzhGN0ZDRDcyRDdBRERDNDk4MjgyRDJDNURCQTUxMUU5ODVFMEM4QTc3NTBENTgyQTUyNTNCRUIxNDk4QjQwOTU1RDNENTM0QjYwNEJDNDRGRjQwOTYxQjFEQUYzMDMyRUYxQzU0QUEwN0QyMzRBRkQxNTk4MzU5MzQwNTYxOUQ3NzY4RkI5OUMwQTI0ODMwODJBMjVFRTNBNkJDRUNEMjU2MkQ0NUMxOTVFMEY4QTRFQjcwN0UxOEVFRTcxMkEKK0JFNEYKKzEzNjdGMDcwRUY3QjlGRTFDNDdENTNCMkJBRjM3RDcxQjg3MkVBRjQxQzcwOTk1QTcyN0Q0ODczODlCMUEyM0VDMTEwODgKK0MzQjFFMzE1CitDQ0Q4MzFDMUU4REJCOENBNUU2MkQxODVGMAorNTFFQzVFQTc2QUI0NEFCQjc2M0U4MzQ2NDlFQTA2QTA2QkE1MzdFMDZGRjJDMEM3MEYyNjA0NjhEMjQzNUY2MTVGMzI0MUNBOTZDMjExQkJEQTQ3RUY0NDBENEVCQUExOTEyQkJCMTNBQkE1CitDRUE4MkU4QworNDVFMjMzMTUxNTRGMzUzMzMzMTZGRTJCOUU4NworMkREOTlCNjY4QzExOERCRjM0NDVGRUFDRDk4MzI5RjkyNkU3QUYyRTlCNjE0OUE0MDY5QTQ0RkMxRThGRTlDQjg3RUVCNDk0RDQ3MDkwMjM3NjRBOTMwOUUyNERCMkZGRDUzNTM0MEE5MzNBNUE3NjVBNkJFMkZFMzlERkU5MDIyMTRBODFGQzIyREZBNUM0NTY2M0REQTAzRDhBMUE3NjYzREU0MkFFNDJERTUzMzBCNDczM0VBOTg4REU1RjJCRTQ1QTc3QjI4REEyNjNENDBFOTBDNDJCNjNGQzYxNzlDMTBGMkE3RTUyRjYyRDJDQjg3NEJCOERCNkMyCitGQjc2Cis0NzcxMTM1RDc3MTRGRjQxM0I3RjFFOEFCMzgyQjJCOTEzQUM5Mzg3OTI3Qzg2NUFFQzFCODFGMzk3RjA4NQorQTcyQzMwRTEKKzI5NTZFMzQyQUY2Q0RDN0JEMzlBNEM2NjBBMjcKK0Y2MTlBQkMwNEFEMzJCMTI2MThCOTBFMUM0M0IwQzNCNDAyNkFGNjMyQTNFQjQ5RDE0QzA2MjA2NjRCN0QxOUQ4Rjk4OUJDRkNEMjUwRDdCQTIwQUJFMEU4M0ZENDEwREU3NEE3RDFEREE5OENBNDhEODE2QzMyMTY3MTAzNEEzQzQxQUE3M0IwQ0JBRDQxRDJERUVBQjdBMkE1NkU4REMzRjNBRDc2NTNGQzYxNzY2QkM0MDdCMjAyQzg4QTFCQzE5MjA4MzEyRTYwQzVDNjI2RUE0MDdCNAorQzMwNTQ2NkMKKzk0ODQxQkM3MUY0NkVFOTM2NzAxQzdEQTlDCis4NDYyMDVFNTgyRkM4NEEwNzBENTNFNDg5ODU4OTJFMEJCQzE1OENBMkFBMTcxNUQwMTZBRjZFNzI0NUNCMkIzOTQ0QTMwMTMwODc1M0VDOEY5QTA5NUM0RDlCNDQ3QzlCMUREQzYwNDc2RTU4QjQwRjY4NjM5RkNBMjZFQjczOUEwODMyMTdENjBBMworQUIyRTMwRTEKKzdDRUI5NUVENjc3NzZGMkVBNkE3NkZDNkQxMEEKK0YzMDUzNzNFODU3NDdENUFGMjQ4NkREOTQ5Rjc2QzE3OUI4NThGMTY2OTY2MURBNjU4MjJENkIzNEJCQUYyQUYzRjQ5NTI5NEFCQTkxQ0Q0RTQ4OTg1QzI4N0I0QkM0OUM2OTg0ODdCNDZEMzM1OEMyM0I3MTAzOUE5MkNEMzFFMDAzN0U2N0MyOUQ4NzYyM0VBQjE5MzhDNkQwQTVFMzkzMTAwMkVEQTA3NDMxMzdFMzVGMzA3Nzc0RDlCRjhCRTdCN0UyODQyNUVEQ0MxRUFFMDZDQjFGRjY2Q0JENkUyRjVBOUUyOTU5RjM0MjUKK0IzMkY3ODdECitGRjAzMTA2NjREOTY2QTVBNUVBNDY3RUM3RUY4CitGMzREMDBERkJBQzk5RDQ4QjVERTM5NDMwRUREOUIzMzRCODE2OEQ3RUY1NUE1RjVDMTFCMzg4MTI2MjI0MTVDRjhGNjcwM0Y1NTA4ODI2QjkyRDREMUE3MDVBNTRENkEzRjhCNEMyMjQ1M0FENjFFNUFCREM5OEFDRjkwMjc3MkVBNDk0OTE3Q0Y5NTJDODEzOUZBRjkxOENBMDgxODkzOTQ3QzgwQjQ2NDc5Qjc2NzEyN0RCRDhFOTQ3MTU2ODk4RDhBODE4QzhFREFFQjI4OTYyRgorRUZBOEY3QjQKK0JDRjVBMDBFNzRFRTM5RTZGMDg4MUU0Qzc3CiszODFBRTQyRERBNTNGMkMxRjFCREM4Q0U2RUEwM0ExNDgwOUI3MDI0RUUyNUI0NDEyOTI4NDdFQzFFRkYxQUMzQjQ1NzdCRTM2RUJCNDZDMjg5QjlFRTMwNzZFNTE2MDE3NEMwMzMwNTk3OUFCMDZGQ0NCNTI5QjMxMDNFRjRENDFDQzY4OUU4NDMyMUIyNzhBRUMyREEyMDJBQTlGNTNEOUNFMjZFQjBBMTlCMjkKKzA1QUM2QjBCCis1MEMyNEQ5Mzk5QTk4QkJBOEVDNUQ1M0VFQjQ0CiswOTEwMzYxRThBQzJCNkVBNDVBMTY3RTI4QzNFRjhDNTU2NjEwMDY2RUMxNEEzRDA3NzhENDk0MEFCODFDQ0JCMkM0RTY2NUVBMTE2MjNBNEIxQ0I2REIzOTA5ODJFNUNFQjI5MTcyQ0M5MzM2OTgxMzRENkE2QUIyMEQ4OUU0OTc0N0VBNTk2NzdFMERDMUVGQTQ3QUE2RkQwNzAxMUZBNDhBQ0I4MDkxQzM3OEUzRjQyNUJGNTc5QUY1ODY1QURBODMzMEYzM0Q4MUQyOURGMkExNDcwQzZGMjdCMzI1Mjc4N0M5MjZBQUM0MDQ0ODI3M0RFNDAyMQorNDNBOTQ1MjMKK0EyMzEwM0VERTgxM0UwNDU4OTdBNTdFRkRECis2QkFCQkIyQkJFMTU3RDFBMkQ1MzAxOEMwNzQyQ0JCNkNBNjdGQjBFRjE4MjY2RUYzNEEwQUZBQkI0Njc2MTk1Nzg2ODE1QTY4RjVENjU0NEIxQUQxOEY1OENBNjgxMDg0REYzNjJGMDJBREFCRjRFQTFFMkNCQzJCMjhDODFBQjFDOTZDNzRERTIKKzYxNjRGNUFFCiszODJCNzQ5Mjg3MEZFMjNBNDcxRTY1RTY1QQorOEVEMTNFMEFGNjUwOEE1RDRDOTk4QkY5QTgyQUM5MkMzQjUwNjlCNUFGQjcyNDk1NjdBNkNERENCQjkyMTREMkJBODkyMTNENkQxRjA1QUY4RUI5QkEyRkUxQkYyMjRCOTJGNUI0NTJENDYxMkM5RjM3ODNGRjcxOURFMkQzQTA5NkI0NDQ2MTlGNjhBMjNBQTQxMjc3RDY4MDYzMTM2M0VDNDBEQjhFREE1RjNGODY5RDhEOUJBNEU0RUY5NUIyODhGMQorRDI0QzNFMjQKKzc5OUUxNzc0QjU0MTAzRjc4MjMzQjVBMzIxCiszMjUwRTRCNEUzMjVGNERGMDc0QTQ2Nzk5OUVFQjdFMjE3MzQxMTczNEFCRjMwRkVFQzY2MUEwQkYzRURDOTM4NDc2ODY4QzlBNEZCQUUwMkQ3RDA2QTcxNjk0NTJBMzcwQTFCODY3ODM4REYyQzk4ODZGRkM3MzVDQzg0QTMwRjc3NjNCMkUzQkVCOUVGQzQ0NDk4MTM4MkU5ODFCQ0RGMjAwOTVBRUE3QTEzRUVDREI5Cis4NEFDMTJCRAorRDZCQ0EwNjg0RjExQjgyRDk5QTQxNjQ0QkYxMgorM0RBNzhERDY2QzI3Njk0NDYzNEU2QURGQzY3RUU5Q0JFQkVDOEE2QTYyMjM5M0U0OTg5MjdFRDRGNzJFNTg3MkVFMUY2RTUwMTg1QkRDNzU5N0Q3RkJFNzI4NjY2NURDNjIwNTVENzRFODcyMDdDOUY0MkVGOUE4MkVFNkFEOEE0NURDOUYyN0I4QUI1NTk2RUY1Q0RCOTRERjdBRjlFMEM2RUU1N0I3QzQxNjAzMDU3QzJFRkVBQzc0NTlCQTI2MDg4NkYwRTcyQkZENkUzRTI5OUQ1MjMxQTkyRkE4RDlEN0JGMTA0OUNFQzMyN0FCQjdDQ0U4QzhGQkUxCitBMDA3Cis0RDYxODY1MkRERTQ4RjAwRjNGODNBMjZBNUI4Cis3ODk1Qjg2MAorQ0UyQTMyQ0MwRUVFQ0ZFMjBBMUE5QUM3M0IzMQorRTMzQUUwOUI4RkJCNDczRUE2QTE3RTE0QzZDMEUxQjYzNDUxOTMxMzAyRkE0RDcxMDcwMDY1RDlGNzYzRjFDMTc5OUQwQzI4RDA3NTg3MTAwOTZBRDM4MjdBRUExNDhGMDI2OTg2NUNDNjFDNDU2QzAwMkY4RkM0RjgxQjFFRUYwNzk0NTBGNkZCN0ZDRjIxQ0FEMTkyQUQ1QzdCNjYwN0FDNDhFM0E1RUM3Qjc0MTNBNThGRTY1Nzg0NTg0QTdDOTQ0NTNCMENCMEM5OUE5OTYwQ0ZCNDk5QTg1RjhBMTk0NTc5RDBCQzYxNEI4QkM2QUEyNDc4RUM2RDgxCis2NUM0CitBQTdDMTc4NkI5MkNEMjFBNjZGQzkwN0UxQzNENEE4QkE0MjRFRkJDNzM4QjcwRDM4RAorMUY1QTM5QkUKKzZBQjQwMDZFMzNFM0VEQ0Q5RDhDOTZGOTAxQkYKKzZEOTgxNkZGREVENTRFMzlCMEI2NTYxMjYyRkM0QTg2Mjc3M0I1Qzc5RDQ1QkJGMkYyOEM4NjcxMUEwN0JBMkM5MTRFQzE4QTBEREE5QjNGRkM3RkE1MTJCQUMyM0RGRDg5MjRGMzJEMEU4QzNCM0YwODY4QkY2NjdCOTBGNDNFNjVGMTY2RkY0RjU4NDIwNTUyNzgzNDNGMDQwQ0U0Nzk1NDIxM0JEOTZDNEFEQUVGMjJEMDQ3NzdCNzM0MEQwMDYxODJGNzhGMjY4MEY0NTA2NUNBOTc1RjEwMTIwMkU1M0QwNjBEMTVDNDhCMDEzRUI1QkYyMUMyOUUxMQorRkVBRQorQkQ3RERBNDQKK0I0M0ZGNUM1RTVFOUZGRjhFMkNFMDhDMzk1CiszRjk5QTM2MTY0QzlDNzc1RUI0QkU3N0M1NDI4MzVDQjgzREU2NEIxNDUzODVGMUQ0Rjc4MDZEMzE3MDgxQTRBOUE5RjM5RDIzRkNGQzREQzFBQzhCRjE1ODc3RTJDQ0VGNzk3RDJFM0UwMUQ0QTZCQzkwOTAzNDRCRTY2QUYKK0RBNjNFQkEwCisxNzlCRDdEMDFGMjgyQkExRTNERjFGNzAxODM3Cis2RjY4RDI3QTdERjIxRDRFQ0NBNDY4M0FFQUQwMDkzM0M1QkNFMjYzQTZERjkxQTY0Mjg2RjE1NEEzN0EzODc1RTUzMkUzQkNEOTg2OTM1RUE3RTM4NDYwRTUyODU5NjJFOTUwQUZGRjExRTcxQjFCMDQzMTk0RkRFMjc0OUQwQTM3QjgwM0VCM0Y2M0U4MDZEMzIxQzU5M0VBRDExMTg2Mzk3MkQwRjVFQTY2MUQ5RjZFMzcxRTRBRUZDQUQyNTY0ODU4MkRDNkY4MTVBRDJBRUMKKzQ4OTFFNDhBCis5MTA4OEI0RENDNEY0QUNFOThGQzRDRjVEOQorN0U1QzI1M0U3QkY1MkNDN0U5RUFBMUE2MkY0REMzOTMxN0EyNUE2RkU5ODMKKzFDMzQ5RkM4CitCNTU3ODVCQzlFNDY2M0ZGNjE0MkY0QjBFNUJBCitEQjZFNTZGNzM0RTZDMzlFCitDMDYzRTM4QQorN0IxRjg3OUU1MENBQjRGQTNFRkM5MzU5OTUwNTcwRDk3RTY4M0JGN0U0M0MzMzhGNzA0NTc4ODQ2QkJBMzU0NkJCQkUKKzZGRTM1OEMxQURCQkMyODBCNTFBRUMxMjMxOEVBMzJFMkY5OUVDNjVBNTI3QzlDRjEzRUZCOTQ3NTMxRjlGRjdCNzMzRTQ2NjczOUEKK0VDMDk4NEZEMzRGRkE3RUE4NEMyQjkzRTY2RjAxNTY1RkQ5RUQyNDVBOTBBOTZDMkM1NzVENworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoYgorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGIKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hiIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NSBwdXQKK2R1cCAzIC9DMDA0NyBwdXQKK2R1cCA0IC9DMDA0OSBwdXQKK2R1cCA1IC9DMDA1MCBwdXQKK2R1cCA2IC9DMDA1MyBwdXQKK2R1cCA3IC9DMDA1NCBwdXQKK2R1cCA4IC9DMDA1NiBwdXQKK2R1cCA5IC9DMDA2MCBwdXQKK2R1cCAxMCAvQzAwNjIgcHV0CitkdXAgMTEgL0MwMDY4IHB1dAorZHVwIDEyIC9DMDA3MiBwdXQKK2R1cCAxMyAvQzAwODAgcHV0CitkdXAgMTQgL0MwMDgyIHB1dAorZHVwIDE1IC9DMDA4NSBwdXQKK2R1cCAxNiAvQzAwODYgcHV0CitkdXAgMTcgL0MwMDk3IHB1dAorZHVwIDE4IC9DMDA5OCBwdXQKK2R1cCAxOSAvQzAwOTkgcHV0CitkdXAgMjAgL0MwMTAwIHB1dAorZHVwIDIxIC9DMDEwMSBwdXQKK2R1cCAyMiAvQzAxMDIgcHV0CitkdXAgMjMgL0MwMTAzIHB1dAorZHVwIDI0IC9DMDEwNCBwdXQKK2R1cCAyNSAvQzAxMDUgcHV0CitkdXAgMjYgL0MwMTA3IHB1dAorZHVwIDI3IC9DMDEwOCBwdXQKK2R1cCAyOCAvQzAxMDkgcHV0CitkdXAgMjkgL0MwMTEwIHB1dAorZHVwIDMwIC9DMDExMSBwdXQKK2R1cCAzMSAvQzAxMTIgcHV0CitkdXAgMzIgL0MwMTE0IHB1dAorZHVwIDMzIC9DMDExNSBwdXQKK2R1cCAzNCAvQzAxMTYgcHV0CitkdXAgMzUgL0MwMTE3IHB1dAorZHVwIDM2IC9DMDExOCBwdXQKK2R1cCAzNyAvQzAxMTkgcHV0CitkdXAgMzggL0MwMTIxIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yMSAtMjA5IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzQ0QjM2RDM1MTEyMTk4MTZBNUMyN0QzNTAyQzYxODdCQ0UKKzM5MTJDNzFEQkYwNTIyM0ZGQ0MzM0Q2NworQTc1RjgwNDM5RDlDOUFBOTUxCis4MDMyQkQxMAorRkQ1QUZDRDE3N0Q5RUYwODNFQTNDRThBOTQKKzNFQjQ1NTMyRDZFRjI5M0M2ODE4RkJEMUNFQjRFRjkzNTQxQUU0MDNBNEQ0RkQKK0IzNkE3NjM5CitENUU0MEU4NEYyQTI3NDM5REVCNTBFQzc0QworMjBFNDk3REZGRTI5NTc5MDQ0RUZEOEZFQkY4OTJDNUY4RDM0NjhGMTNGQ0ZDQjUyODE0NQorNTJFMzQxQjkKKzU5RUI2QTEzQ0IzMjVFMUM2RTI1NThDMEJBCiswMkRFMDUxQkE5QjcwRDFEMDY5REY5RjA2RDczQjMyRTA1QzMzRkFGMTU5RjIwNTMyQzZBMENDMDhERjk1QUIyMjc1MDIwRjI4RDNCMEZERUU1REEzQzVFMjVGNzZCNzQ3QTYxMDMxQTRBQzMwRjBCNDkwRUU3NzkKKzNFN0YzRDJFCitFNkQ4Q0FBOTA4MDQxNkNEMjEyOEMyRkFCRQorMkU5REMzQjVFM0YzQzkxN0Y4NjQ0OUIwOEY4NTZCNjlEMEZCREZFQzE2RDM4MEQ0Q0NFMTVGNjVCMzdEQjM0QjY1NDIzRUJBQjVEOEM4MTdBNURCRUMwNTU4ODM0RjRFNUFDMkJGNjVFQTY0Njk0NzMzMEUyMDIwQzRGNDA0RkVBNTdBNzFBRjkxNTU5NTRCRUVGOThDRjMzMjU3RjNDMDc5Qzg5MjFGCitCQUUwMEYwRQorRjcxNkM3RUVCMEFDQjc0MTRCMkFCNDVBODcKK0I3OTAyQjI4NEQxOTA2QThGOTE0RTc2OEEyNzhFREY4MkU1NjQyQzI1OTlGQzgyNjQ4QzYxQkZBNkRGRThBNUFEMTZDMjczQ0E5RDhBQkY2MDgzRkZDQUZDOTcwODhBNjFCRDkyMzA4N0VFOUFENjc1RERDOTY4ODgzM0Y3ODQyRjA4ODZEQzYyQURDRUZFRjY0QTNGNzJBMDY4QzMzNzk2RDdENUFFRTNGQkIKKzlCM0MzNTZDCitBOEQ5MjA5QUIwQTQ5NkM2MDE0QTFBOUU4RkM2CisyNEZGNDREMjRBOTA0QTM2NjlBM0Y4RkFCNzIyQkVGOUFEQTk5RjNBQzY0MkU2Rjg3NjQ1MjNDODE0NjdEQzY0NkJDNTI5NkY4QzVEREFBMkExRkEyM0Q4MkMzNkU3NDRGRUE3OEU5NzFCQ0M0RjBFMjg1MDg5MUZCNUFFOUY4QTQyMjFGRjAzOERBMTY5NjY3MjBDQjUzMjA3QjMxNTg1RkI4OEE4MzEwNTdCRUUxMDQ4QUFGNkRFMjEzNTAxMDlGMjBFQkI2NAorOEE0RjNBN0QKK0MwQTk4QTcwQ0U5QTQxRjk2RUM5OEJGQzdFMTAKKzczNjZFQjkwQjAwNUMyNzA4OTlGNTY0Q0NERkIzNTgzQjJFRDFCNkVDRkE1RTI0NjdCOEY1NUJBNUE2NDZCM0FBQjk4QkQ2MkI1RTkyMDQwMjM4MjExQjBCMEU0MTk1RTkwOTA0NjhEODEwQUFDRTdBQkJDN0FFOUZDRkJCNkExOTE4NDY3MTBFQ0YxMDBGMEQxRDg5QUE3NzJFM0I4NUQwRTY4Njk3MkRDNUY3NjhBRUNEOEIyQUVFNkQ2OTE0QzUzRTFCRTQ3RUQ0MjA2NDMyMjk4RDE2RDZEN0I1RUUwNjNBRkRBQ0YwMkM2Njg4NDdCQjMKKzdCQkZCOTg1CitCOTYzMzlDMUU1OTk4QzY1Rjk5NDYwQkNCOAorMUEwNzhBMERDMDU4MENBNjM1Qjc3NTNFQ0ZBM0I2MDI5RTU5MTIwRUYwOEEyNEIzQzNCNjA3M0I0MzY0QjQ5RjM5RTJENzIxNzcyRkQzRDA1OQorQjM4QTVGMTkKKzNDREQ2MDI1ODMxQ0JGNDAwNkVDRkNFNjg3Cis2RTRFNzcwQzJCNDhGMjU5OEREQzczNjBCQzI0NEJGMjIwMTczREUyNDRDQzg3MjA5NTZGRURERjQwRDI5NjhENzdBMTg2OUREN0ExQjIKKzMwRDZENTk4CisyRTlBOTcxNDA0N0VGQkQ5MjU5NENBMzQ4RgorRjU3OEEyMURBMTA2RjkyNDFFRDg3NDhDOURGQkYyMzI3NUQ4NUExMkNGNTUyRDEzNUExMkFDNjE0NjI4MDMwOUQ2MUZBNjFGMUFCNUU3Mzg5NEYwOThEQjlEOERDRURGOTJEODExNTg2NUY3QkNEMjk0OUY0NzMzMEMwMjdBODI2NzE1MjBCMzQ2NTc5NzlERUEwMTVDREMzQ0RDREYxNDAzOUQxQzE4QTdDQzEyCisxNkMxRjIyRAorQjIyMURDMEUyQTVBMDZGNkQ2NTM3QkVBQzkzOQorRDc4Mjk2MDc3QzZDNUQyQURCRjc2NDQyNkQ2RDJBNDcwQjg3M0M0NDI0OEEyQ0MwODEzNjY0MDkwMzM4MzgwMDAxRjdDMjlBQTEwNDc4RTU2MkU2OENDNjkxRjMwRENCNDg1NzRDQ0NCMjU4Njk5NkVDNDc5QTA0NjNEODlBRkFCNUI3RjhCRjkxNEYwRTMxQ0I1NUQxRTlDMThFNjlCNzdDNkQyMEFGMzk5Q0Q0MzBGMjczMUIyMEEwOUQ4RTA0NEM3NDZCNDY1OUFFNTg2NDkyMDFEQjhEOTQyQjg3QjI5NEUyOEQ2Nzc5NjAzRAorOTc4RkI0QTgKKzRFREIyMzdDNkU4NjczNjk3NDc3RkQ0QUIzMjEKKzZERjZBQzMwMEEzMjMzNzczQkJCMzhBRjBFRTU1RkNBOUE4RTUzQkJERTRCM0JCQTYyNDNFMDM0QTM4Q0EyMjY5RDJCQkFFNzY3OTI5RkZCQUJFNjI1RjMzNUZCQkIwRUJFQjJDMzNEMDAxRTZFNDNDQTMxMkI3NjI1OUJBNTU5QkU4REU1RTc2QkI5MTk3QjNCMkM5NkFCQTZENDVCQkI3M0M1NjRENTgxMDREQUIyMzk0MTk5MDA3MUQ1RkVDODA0RDcyODhBCisyNkQ4REUyQworRTZEOTFFMDYyQUIwNTlGRDExOUUzOTlGNzU4MQorMURCQTU5M0U1M0Y0N0RFMEE2MjBERDVCRDk0Qzk5RTZGMjlBQ0ZBREE3MEEyQTI3RjE0NTA4NjEwRUE2MDA2M0Q0QTJDMDI3QTRDQkNCMjE2NjMzOTRFNDMzQTUyRDNFQjNFRDdEOTgzQjQ5MEUyQzYxQzBEMzJGNDJCNEQ2REZCRUU4MjdCMEFFNjdEMDQwMzM2NjQ4MDkzNUUxMDJDRkFEQjVDRkY4MDQ5Q0MwNUM3RTM4M0MzOUU3QzA5QjlGRjE5RDNEREJFNUZCMkY5RDVCNzY5Nzk3QzIyRUM3NUI2MTA3Qzg0QTkwCiszNzE2REVCMworQzIxNDdERUJDRkVDMzlFRjY2NDZCNzQ1N0MzNgorQkY5QTA4NDYwQTg0RDQ0MjA4OUYxMzAwREVDMjRFRDlGQ0Y0QzlFQTVBQTlCN0MwOTVEMEEwNjM4MkEzNjA5NzFFRjc2QTRDNTAyNzE1NENGRDhBMUJCODNGMUI3QUNGQ0VFODA0MEFBMzMxRUY4MUY4M0E2OTcxQTg4NTFGNkQxMzJDQzVERUMxNjM4NTlEMzlDMUY2N0FCMjhEOUNCQzVGN0RCQjVGNjBDQURFRTQwOTVDREZCN0MzRjNDMTk5NUJCQzNCREIwMjBCQzIKK0M2QzhCMDI0CitBRTBBMzExQjhDMUJBNUIxNDM3N0Y2QkJEQworMzUyRERENkU0NzZDRUIzMDFFQTQzMDlERDYyRENGNzVFOUY5OTJCQjM2NzZDRjU2NTE3NEY1RUMyMzIwNzEwMTA4QzAxRUZGQzgxMjkyRUU4N0MzRUYwMERGMkY4MzRBMTk1MEI4NUY2RkJENEVBRDNEOUE3RUM5MzRFNjIyNEQwMzJFMkRCRTkwQzc0MzJGREZCNURFRTMxNEY1RTUwQ0IzRDE2NDFBMTVGQ0VFODIKKzFBNzU0QTc3Cis5OENCMDU1QUYwMjNENjBDQTFGRTg5Mzc3ODA4CitGQUE4RTM1NEJBMkFDQkI3OEMxRjAzOEQ1RjRCMkNGRTI4QjAzQkJFNTdDMkUyMDQxQzA2QThBQTAyNzE4OTg2N0FFQkRENEEwMkNDMkREOUMyMUFFNUUxMDYyNjgyRkFBOTY0MDgyRDY1NzBGODRBOENBRUNEOTQ5MzI3NDY0Rjg2RjlGN0IwQTVGRTg1QzRBNTg1RjAxREY0QThENkM2NDVDNDY3REQzMUM1MENGM0NFODg1QjdCOEFBQTUwQTc3M0VENEQ5RTNBN0ExNDYwNzQwMTM0Q0JGMEE2NENERjY1MTk0MDk4QTM4QjQxM0U4MkEwRjhDQTgwM0UKK0QxQjIKKzJGMjg4QTlDCis1MzkyQTExNAorQUM3QkY4MUFFMzBDQTlDQUUyMDMxMzVFMDAKK0FFMzQzODgyMzFERDRDRjI5MzE0Mzk3NDg0NkZCQkY1MTRFOUJFOUJGREVBNzk3ODNBNERCRUYwRTYyQjk0MjlFODAzNDhFOTIzOTU3NTI1OUM2NTcwOEQzN0I0QjhDMTEwQTFGQjE5NjUxQ0ZFMUM3OUUyRjUwMTUzMkUwOEY2MENDNDFGNEI1NDMyN0QzRDRFRkM5OTBERUFFMEY4MDIzQUI5NUZCQ0VFMkY1N0RBMjJCNzkwNTRBOEVBCiswNzg2QTBBMAorNjhENUFBQjY2MDI4NkM4NUJEMjNCNjYxMjQKKzIwMzUzNkNCQTc4MjVGMEE3NjZGOUY0RjAwRkNBRUI4MDNENEI5NTlDRjNBQTM2NERBQTg5MDRCOTk0MzlBQkFDRjBENUY0NUNCQTlGRkQ1ODdFNkVFNzM3RTRCOUY1NTkwMjY4NTcyMzdBODIxQ0UwQTlEMDREOEU4QzYxODAyNEI0NDhERUFGMEY4NENFMjMwQjQ4M0JDODc4QTgzNUUxQTY3CiszRTEyRDVEQworMDMwNkZFRjlFQjEwMTc4OTkyQUYyNEZFRjU1QgorMDZBNjAzNkE3RTEzQjVBNjU2ODA0NDhBQjQ1MzlEMEY3Njg0NDMwRjEwNkVCNDkwMUFCRjQ3QUE4NzE0NUVCMjAwNTk3REE4RTlBNjI2MEExQkZDQkY1RkUxNzIxQzM0M0Q4MkU0NEM2NENGOEM0RDYzNEVCQzhENjFDQzQyQzE2MDQwMjI5Rjg5QzhBODA3RkE2RUI0RTRGNjhBQUZFRDY0OUVDNDJDOUQ4Q0M5QkYxN0RBMEM0RDZFNEI5NjQ1NkY0NjZFMThCQzRDQjVDMkU1M0IxQzQ2CisxNUEzNzA4RQorODQ5RUFFNkM3OTJEQzRGREQ4QUIwQzY1MTQKKzA3QTU4MTAyNUJBNThDQzM0QTkyRThCODlGNDYyQzQ4NkVDMEIwMDNEM0IxNjdDMzFGMTY1NkUxMDMzMERDNjAzMTI1Q0MyQ0MzNjk0MkQ3OTVENUNCRDlFOTBBQjJFREI2QkZENUEzRjAzMjg4NTcxQzczMzc1MzJDQzA1M0UwNUZFNjg1RURFQ0EyRjA0NTJDNDM5QkMxNTE0MUFFMkZFQUVGNENDREVCNkUxOEZFQzkyMEI5Q0QKK0FEREM2MjUzCis1QzI4QjA2NUFCMDQ2MjRDMjZDQTVCREYyQworQzRERUY0NkY3RTUzN0VFOTVGODBCQTU4MEVGRjlCQzQwRjNBMERDOENDQ0Y4RDZGRDUyMTg5Q0Y2MjgyNjQzMzc0Rjg5RkIyMjdDMTYyRTRERUI2M0Y4RTU0NzE2NTk2RjRBNkQxOEQ5OTc1NUFEQjY4Q0Q1MjkwMzg4OEU5RjdCOEE5MEUzRjdEM0MyRUJGQjM0NDczOUUxODk1REE1Q0NCOTUxRjc1RjlENTI4QkMyRUVCNzY1MTFECitEQ0FEQTM1QgorNUFGOEY2NENDMEQ1OTJDRUNFNkQyOTQ1RjI4RgorMTE5MEJFM0ZENjMxNjlDMEYyNjIwQzM2MDRBOEM4NzBGRDFCRkY2MUM2QTQxQTMyOTkxMDg0NkUyNkYxRTUzOUFDQzNGRERBRjFCMjZGQ0REOEJENDA3NTlFMEUzQTdGREI4MTVDMTE1MTVCQ0I4QUVEN0U3OTQ1QkZGMzQwMUEwNUY0MTlDREI3NThCODRCOUE5RENFNUM5REE0NDBFQTk2MjU5MjFBMTQ0ODcxM0EwNTE2OEIyQ0Q5Nzc0Q0MyQUYxNDVGNjIzODY3RjJFQTgwRUJCQTU2Mjc0NjMwNkQxQjMzOTk1QjU1QTk1NzE3Rjg2QUQ3N0FDRkNBCis2NDMwCitDQjRDRTQwMTM5MkJGQjhGRTY2Qjc0ODc1N0NBNjc0RjFENDExMjQxQTcyNUNBRDEyMkQ1MjA4MzI4MTM1N0U3N0JGNTZENkZBRAorQjdGMDc4OTYKK0E0QjMyMzNGMEEyMzg5NEMwNzc3OTBCRjdCNkUKKzQ1QjRGODY3RTc0QUIwNUM5NTY2QTQ5NjYzODhFQzVCQzY5NTBBNzMzNTAxNUVCNEMwMjJGOUM0MUNFRUJENDE5QzgzMzlDNzFDNEI5OEI2OEY1MjU4QTgwQThFREFEN0QxQjE1NTI5OEFGRDI4QTM0QTA2NEFEOTVGMTM4MjA2N0I3QjZGNzE4MERBNUUwM0MwOTc5MTQ1MjgyQ0Y5MzEyNDM3QTc0NTQ1ODdGODZDN0I2NjFDOTE2RDg4QTUzQjAwRjI2NTY2OUFBQkFFQkMKKzk0MEYyNjg4CisyRkJDMEU0NjE5OUZDMkY1RTY3MDNCQzczNgorNkFCRURDMTg4ODg0MzkzRkREMDczNTNCQjAxQkE1NEI4REI5NEVGNTM3QTgwM0JDNDBGOUYyMEM0RkUwMUJEMEFFNTc4QjhENzYxNTVFMEI4NkVFMkFBMjI4OEU4RUYyRjdFQjc3MzJFODFCRjZERDZEMUQyQzlDODIxMTNCRjRBRTE4N0JEMDhFNjM3REIyRDYwRjY1MDM4ODJBCis3RUNDNjFFOAorQkU1QzJBMUU5QUJFN0NFOUIzQkNCMTdGMzcxNAorQ0VDQjNFNTgwRUYwRkRCMkMzQUVGQTUxQTRFM0UwRTlGMjQ3QzNDNjQ0RTc0NzMyQzUyQkZCODREMDQ0MUJFOEU3MkZDNzZGMjY0QTc4NTVFMTQ5NUM3NTZGMzI2NzU4RjM0RkZCMjNFMDM2OTc1MkQ2QzM1RDc4MTM5NzIwNjcyOTFDNDBFODgxNkNDOTkwQUI3MEY0OTZEMjFFNTQxQTdEOTU4NzlDODgzMDVFRjAzNjZBN0NFQjMwMEY0NEYyRkFDMzA1MDE0RDZDNjdENjM1QkYxQ0JGQTAzQjQ5NjIxODMzQkZDMzk1NkE4RDkwQjhBMjQ4NDEzMENBCisxNUFCCisxMkVECisyMEFGREU4NgorMjE3N0QwOUFGMDE3QjBBQTk0OEVEOERBMzEKK0JBRUVCRTczMzI1ODMwODUwRTAzQzVGNkJCQTZDODg4QThGOEQ4MjM3RUVBQjgwQjkxMUZEOTkyNjA3NjNFNDc3QjY2NDEwODNGQzZCMzQzQkIzMDA4Nzk4ODMxRkM2Q0U4MUY3RDJCCis2QjU1Q0U1MQorRjE1MjgzNzgyMjIzMEQ2QjIzRjMxOTI5REQ3MgorMjcxMDhFRkNCMzYyRjUxNTAwNDNGM0MzNjk3NzM4MzE3QTdGQTlDRUJBOTAxMzU2MTMwNTgzRjczQ0U3QzJDMzJGMDUzMUVGQzRDNDQ2MzBDNUYzQ0Y4QjNEMEJCODg3M0U0QjkxMTFFMDc1NUQ5MUFGMEFDMTYwM0FCNDAyMzRGOTQzRDYwNUVFQ0Y3RDY1RjU4Q0VFREJBNzY3RTE3MUU3NzUzQkQ4NTFCMDkyMzBEMTI5Njk5QkM5QzE5M0RCMzdDMzNCRUM4MkQ5NkVDQzk3NEM3NzNCRDA1NzkzRUI3MTQ0MDk5MzgzOEVFRTRDNzYxRUI5MUZCODVECis4RTI4CitDNTE4NzlBM0ZCQjlDNkVBQTBERTQ0ODdBRkEwMkMzMzJENzFENTg4REE2OTNBMDkyMEY1Qjg4RQorNDk0OTEzOEMKKzcyMjdDMDFBQkFEMzJFNDI2Q0E5REFEMjA0MDcKKzZGOENDRjIzQTQ5RjE1QjM5MzFBQURFRDRBQ0Y4MEJCODk5NDBFNzZBM0E4OTFBMzRCNkE2NTMxMjBFNkUzNDEwMTA1MDIwOEFGQ0NDNjhDMkQ3MEYwRjE4Njg1MDMxMDAyNERBODk4NTc0MEQwOUZCRkI3OThGNzMwNENDRkJFODZFODg0QzZGNzgxODlGN0E3ODBCODk5OTg4NjVBQkNEMDMzODQzRkVEQUNENTlCOUQ3N0RCQUIyOUQ5MDVDNUE0MzczQTNFMEFBN0VECisxMTUxOEY1NQorMjlEMzQ1QjdGMDI3M0QzRTc5NzcxNUE3MEEKK0JENDU4NTA3ODNCMTk1QjI3RjBGRUFCNzU4Nzc1NUE0NUIyN0Y0RjI2QUIwNjY1NkYzNjU4MDZFNDUwNjFCM0U5QjkwOUQyMzEzMjQ0MDNFNzNGQjA5OUVFRDBEMkZGRDNCNDFBNkVBNDNDODc2NDYxMUE1NzdEM0I4RjQ4QTAzNUNBOEExOUVDNzIwCis1QjBGMTNGRAorNDc2MjE4RkE2NTgxNDQyNjFCNDFEOTUwMjVEOQorQjcxNzQ5OEU1MjBFNjZDMUYwMjg4QzcyQzdCMjBEODk3QUREQUEyMEQxODlDN0U3ODYwNDk4MzU5N0Q2OTE0NUExNUMwNjhCMjRBMjEzRjU4RUI5NUZDODkwQkRENzdDOUUxNTk1RjEyRjA3RTM1QUFGOTAzNDcyOThBN0ZCQ0M5QkQ0MEQ0NEQyRDJDMUQ3NzM5Q0UyNDhDMzRGMkQzMDM2REMzMjg5NEZCRUQyQTY0MzdBNDgzRjIwQUQwRDUyMUVGMTQyOTEyN0UzQTVFMjREQjcwQjZCRDQyRENBNUNGOQorRDUyNjkwOTIKK0QwQ0QzODkzNEEzMTUwRkM5OEVCRTFCREY5Cis4Mzc4RkMxODcyN0ZFNDEwODE3NzdGNTEzMUYyOEQ3REU3M0UxRUFGQkQwNjA3MjEzNTJCRkYyMjY0NDMwRTJCRTA1OTA3NzMxMURFRkYyRkVEMDg4RkRGMTNFOTkyNDkxNDk1MkNDRjhGNjFCQUIyMUE2MDg1MTc2RDZGRTQyQkU0NzZENDU3NzlGOTgyMTY0MEYyMzk2ODI3N0U3RUFDRDAxOTU4MkVBN0JCNzAxQTlBCisxQzM1QjMyOQorNjE5MEExNTBFQjgwOThEM0U2NTkxRDQwQTk4NAorRTZFNzVBQkFFNDU1ODkyMzEwOUNFNTQyMDJGRkU0MEI1MTQ2MjAwMTEzOEQxNkU4RjAwNTcxQUVCNkJDNkZDMzYyODNDMjYzRUVFQ0UyMDlGQ0YzMDk0MkM1ODRBRDc0MUJFOEYwMjM0N0E5REZBMDIwOUVBNDU0OTI2QzdFNTU0NUIyRDY1NTI3RjYyOUVDRjY0ODNGNzkzQUYyODdCQjZDNzg3MThBRUYzRjU4MTVCQTdFQjA0MzVFNEEwNjk0RkM3ODQ1MDZGNDBERDc2QjA5NjhGOEJBRTI4OTM5RjBGQjQ1N0IzRDhCOTJENUE1OTQKK0VDRTAxRkY5Cis3MzI2OEQzQjM2RDQ0QkIzQjY3MjhCMTFDRgorNUQ4MjREOUIxQTA4NzU5NTVGNjlGMTMxQ0U2MkVBNDdCREVDNEE5MTEyOENEQzFENjU0RUYwQTNCQzJFNUJGNTk3NTRFMTcwQkY0M0JFMDE5RkVFNzAxMEQ0N0U2NjA3REVFREU3NzQ4RkFCOUE4MDA4NUJEMjA2RjlCRkYzMTA3NTBDMTc0OQorNUE4RTVDQzgKKzc5ODI2MjMwMzg1QjNFRDBDMzI3MjE1NjRCCis4NzA5QzU1RjBGRTZEREE3N0YxNTdBRTZCRTJCODcwNEY3QkYyOTA1Nzg0QUFBRDA0M0YyQkM0QzNBRTBFMDcyRjY0N0ZGOEJBQzA0MjNCMTJDNEY4QUREQjE3REYyQkZFMDUwNDNCRTE5MTdFQjkwMzgzNkYyOTA2MjQ0REExNUNCMjlDNkY1MENFRTJGNTk3ODFFNzRCMUY3RERFRUYwNDBERkUyQTRBMkY2NEM2RTIzMUNBRgorMTQzQ0Q5RTcKKzA4QzRGMjgzMDJGRkE1OEUxNzY1RThDNDFDCitFRkE0MTQ4QUE0MEE2QTAwRjE2MTZFMkQxN0RFNDM4QzdDOTk3MkYxMEI0ODQ1NTQxQ0U3QUM4QTI5RkM0MUZCOUU5MDAyOUYzRTE2NzMxNjI2QTJBQTc0RTUwNTZBMDA0NjFFREQ3MDQ2Qzc4RTU0RUU3MjczOEU2NzdDRUQ2NjRBNTI0NEZDRUE1NTNEODA0QUIzRjZGQTg4QTJGRURDNzlBNDNBRjU4QkQ0NDkxMEVFNjNGRjQ4CiswNkYzRDRENgorOTBDQTUxQ0ExODhCRTZEOEMzMjY5MkVDNEREMAorNDE5NDNGMzNGMUI4OUM0MDMxQ0NEODRGQzU5MjNBOUU4REE4QTk4ODk5N0QyMDY2NUJGMjM4QjFFNTEyQ0FBMUM4RDcyOEU1NERERjZCODRBRkY5NDExRDYwMTM2NEVFQTdDQzdCMDYxNURDMEY0NzRGQjJBN0FFN0FEMEJFRTY0RjgxNDA2MjEzQjc1MDAxNjc3Mzk5NTA0RkIwMEY4NEQzQkJERjRFRkNENTg4QTAzMUYyMEUwOEU2Q0VBQzBGQTM5QjJCNENFQjFDMjYyMjRFRjMwQzYxQjk0MTMzRENBNzRCQzk0QTRCNjdCQTZEMkIxNzdBOTgxNERFCis5NzlGCis4MzNCMDhDNDQ4Q0MyNTc0QThBMjI4CiswNzkzNzI2QQorM0UyOUQwODkxOUNDQ0Q2MzAzQjIzRUJGRkJGRgorRDkwOTM1Njk4NkJDN0VGMDJDOUIzRDlFQ0U3MjE5NjU0MzI2NUEwNDU2NDdBODg3NkMzNDRGNEI4QTE4RjBGODRFOTcwRTUwMUJBMTU4RTBDQTNGNzkyMjc2QTFBQkYxODkzQzU0MUY3RTQ3MTZDMzkxMTVERERBNjA0MDMwQTRCMzMyMUU3OEJEMDNDQjlGMkYxRDZCODUwMDJBQjgzQUQ5QUUyQjk2RjBCRDAwNkZEREVFOTAxMzBEODk3QTA4RTEzQUJCM0M4QjgxMEREQjU3RkY1OEEwOTgyQUU2MjJCMUVBN0JFNTZGRDI2Q0Y5MEM3QkZERkNBRjY3CitCODQ4CitDNworQTE2QzlFRTkKK0JCQzY2MUUwMjU0MzU5MDhGQjdFMzc3NTU4RkIKK0RDMUE1MDQzNjVCODFFNEQKKzEyRkFDQThFCis3QTgzMzgwNDgwODRFMUVEOTZGMjQ4MjI5MEIxRjE2RDYwRjg3MTEzQjAzMDRBOTFFOURDREJDMkM2MzQyMzNEQjVDMgorNDEwOEZDMEYyMTU2REU3RUI5MzUxOTg0N0I2MTM3RjEzNTIyRDcyNDI1NDQ1QjI0OUQyNDYxRjRDQjNBNjk0MDFCM0RCQjQ3NDk5NAorQjU5QzAwMTAwRkQ3MjJBQTc2NTJGQzVCMzRERUY0OUEyMzAxOUQyRUEzNjFGREU0NEEyQUNGCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hpCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoaQorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGkgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ2IHB1dAorZHVwIDMgL0MwMDQ3IHB1dAorZHVwIDQgL0MwMDk5IHB1dAorZHVwIDUgL0MwMTAwIHB1dAorZHVwIDYgL0MwMTAxIHB1dAorZHVwIDcgL0MwMTAyIHB1dAorZHVwIDggL0MwMTA1IHB1dAorZHVwIDkgL0MwMTEwIHB1dAorZHVwIDEwIC9DMDExMSBwdXQKK2R1cCAxMSAvQzAxMTIgcHV0CitkdXAgMTIgL0MwMTE0IHB1dAorZHVwIDEzIC9DMDExNSBwdXQKK2R1cCAxNCAvQzAxMTYgcHV0CitkdXAgMTUgL0MwMTE4IHB1dAorZHVwIDE2IC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTQ0IC0yMjggNTEzIDcyNF0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI1RDdDNzNFMEQ5RkJDMkM1MUZDNUQ3QTRDODQ2NkEwQUNGMworRUY2QTUxRTg1MkVEMDA3N0IyODk0ODAyCitGNkUwRTVCMzMwOTkzRjczRUUKKzA3NzdGMzc1CisxMUZGQzgyNzQzNkZFRURGNDY0Mjg0NjBBQworMjgzNzg2QzA2RkY0QkUzMTdBNzA2ODcwQkQ4RTRFMzFDNkQ3QTMyQUIxNUMyNEQ0QTM2NUQwQzU2OTZCNzkKKzUzQTE3RUUzCis2NThFQkRGNTM1QkE0ODEyNkQ0RTAwNzJGQworQjJBNjg3MTVGMTJBQ0QyM0NERjg3Mjk2NDAzMzRBODFFMkFFNTVDOTMxMjI4NTQwQzQKK0U0Nzg2QjczCitEMTQ4MENBRUI5OUMzREIyMjVBQjkwRUU1NworQkMxNzE5MUVGNUUxMTkwNkFCNjY3OTVBMUU1NUE5MjQ5M0JDNjk5RDM0QTlCMDQ3MjI3RTgwMzYzNTMzMTFEMjY3RTAyQkUxREQzMkQ2N0RGMTVDQTE3OTYxRjlGREI2NjkzODlENDgzNEI5QTQwMEIyMjczQTJBQjUzMjFFQzJGOThDNkIzNzUzNjE1N0QzQUQzRjlFREZFNDJGNEI3NDFBNThCOUQ5MTlFQkQ5NjQ0NkQ1M0FCMUFGNUMzN0JBCitBOENFNzgyNAorQzdGRDRGNzkwNzA1ODM3M0MwRTkzNzA0NkE0MgorQUMwMDU4MTVFQTBDRTc1NUYzMjgxNzg5ODlDQzJDMTI4MDRCQkI2OTc0QkFBODBBN0Q1OEFCQjM5NkEwMzk3OTYyQjQyRTVDQTBGOURDMTEwNzg1NUZCMTZENDU3Mzk1QzdFRUEyQkZEQUIyQkJCQzk3RTgyQzI0NkEwRUEwQTlGNkU4Mzk4QzMzNjlERjgyRTVENDhGMTE0NjE3RjI2Qjk0N0RENjc0Mjc5NURFNTYwMjhDMEVGQzYwNUY5Q0VERjExM0RCQUNCMThBMTYwQkYxNUU1RTJCQkU5MTc1RjBBMjZCRUU3ODM5MkRBMUNFMENFOTUxRjEzNTg4CitFMzk5CisyQUNDRTBGNDNDRTY3MzlENEFFMTBCREQwRDk4Q0Y0MEU4NjRDM0QyNzU1RjI1QTAwRjE0REQ2QjFGMjJGMUM0NUVFMDVBMDQwN0VGNEEzM0M1NTY5NTM3NUYyQTBGNzUKKzc3M0QyOUUzCis3NUY4M0M0MDE2NkFDN0I1MzdFQjYwOTg0REJCCisxNDdDN0UyRjRGOENCRjY5Q0U3RjAzRUY5MzU4MDZBRjNERjE3QzU2ODg5QzVBNTg5REIxNDQ3MjhFQUY0QzFFQkIxMTFGNjg2RDg3M0RGRkMxNEJDMkRGOTZFQzk2MkI1RUUyQzQwMjlEQTYxN0U2REU2QzQxQjI1OTNBQ0Y2REE2MzdERUJDOUNGMkY3Q0QzRjU2QTJERkEwNzMwNUIxQzBFOUY0M0MwQTdGNUVFRTNEMTZEQjI2QTZDMDUwNzIzMkRDM0FGRjk4CitFRjA1QjMxQgorNEUyN0RFNDU2RDMwMjJDNjc5Nzg2MkQyMUZDMAorNjY4OEFCOTNDNjgyODUwRTYyN0RFMEJEMkU2RURDRjI4NjMyQUE2QTVCQThBQTA0RDQ4NEY1QkE2MDdBMTgzQ0I5QTg5N0VCNTRDRUQ5RkUzNDRGQ0NFQjQ4NDFFMjEzRUE5OTBDQkI1RjM5MDhGRDYwMTlGNTc0RDM3NTAyNDhGRjczMzVBQjdBNkM5MzQyOTY0RjlEMzg5MTgxMkIxMEYwN0I5NDQxRjgzM0VDNjY2NTVGNkUyMEM2QTJCNjZFMzEzMDkwNTM0MTZGNUM4MkU2NTdCRjhDQjhCNjgwNEFENjM0RkRFNjA1MTMwRjU2M0RBRDdFMzNERDE0Cis3RkNECis3MjJFRDNDOAorMzY2MkRFNUQKKzRCMEE3OUYyRUZFQjdFRTIzOUYwQ0RDNDM1RUMKK0FFN0I4MzQyQjYzOTQwMEYzMjRDRkJDOENCOENFQzI4QzQ2MzA2QTkzNTdCODBDOTdFREMxMUNGMDk1NEU1Q0IwRDRCM0Q1RTRCMjBFODBCQjc5MEJEQjY2ODJDMjQwQkQxMENBOEM0RjA3MzlEMTlBNUExQjA2QkQ5RTU1M0RCQzFGODU5MUUxQTBFMjZERUNEQThGODc2NzA1MEVDM0I4ODdCNDFFRUQ2NTlFN0E3RUIwM0I1MTU3MjcwMUQyOTBBNzE5MkRFODI3OTlENDI0MjEyNkEzM0JBODc2QkYzRTk2NTlEMEM5QUE2OTZGMzNDCis3MzVERTMyMQorMzhBQzk2NTE1NzBFNjg1MkNENkQwNjNBNDE2QQorQ0I5NTUwNzk3M0U5NTQ1MkEzQ0IzNjJCREZFRjJGOTM4OTg3RUREQzMyRjg4MkI3QjgwODRCMTQ3QThERDNFQTY0NzNGQzA5OERBQzdENjU3QzQ0OUMwMjc3QUZCQTE5NTMzMUVBRkI3QjczRDlFRjlCQTJFQjAyNDBFQjNGMDM2RUE2MjJGMjVCQjYyOUI4NjMyMzIwQUUyM0EzNUU1MzcyMjA4NDZBQUVCQjk5OEFGNjYzQURBRTQ2OTA5NzE0RDQ3Mzc2NEFBQjBBQjMxRjk0Q0UxQkVBMDIyOUZGRkJDNUE2QUZDRTI1MTIzMDM1QjQ2NkMwNTRCOEExCitDQkNBCis2NzdCREMwQTFEQjU2MzRBQ0U1MkQxMEI3OUI0QkQyOTk4NDE1MTE2QzFDMjI5NjY1MQorMzk1NTgzNzUKK0M5QzQ2NUE3MUM3RjkwQTBENzc3MjdEMzhCCis5RUUyNTNGMzk1N0ZDNTE2ODUwN0JGOTQ0Nzc1MkFGRDQ3RUIxNkQ1QjdGODU0RUVEQjg3Q0IzNUUzMUMyM0RCQ0ZGRUQ2MTIxMzk5MUQ4NTFGOUE4OTkyMTJCN0YxODA4NUUwRTdCRjdERDA4MUEyMERGNzBFRDUxNTVDOEI2MkM1QTY1RUNGMDJFNUY0Qzg0NUZBM0E0MzEzRDU1NjlDODFCNDE2OThCMUM4RENGNjU5MjAxMThENjhGREJFCis0NTk1RTM2MQorQUEwRjBCREZFRTQwN0YxMDlFRkI2OENBRTc5OAorOTg3ODVGQTM5MDc0Rjc5Q0M3MEZFQjA3MzYwOURDRERBOUFERjc2ODVEQzE0NzU2RkU5MDZFNkRENjUwQkQxOEU2NjU1RkEzNEQ5N0JBNTE5NkMwQTcxMDNCM0YwQjZCNzM5Q0ZCMENGRDIxOTVBNDAyMDgxRkNERENDMEEzQTg3RDkxRDFGN0MwQTFFMUE0QzU4NjhEQjc0NUY2QUVGQ0Q4OUNDM0FBOEY5QUE2NzA3QTY1NjIxQ0Q2RjNEODQ4QkQ0NDVCRTA0QkI2RkJCNTgyQzZEN0Q3RkFCNDkzMjZEOTA2MThFREUyQzVCMjgwRjBDQTZCMUZGRjg0CitENjcxCitBQzQyQUI2NkZERThGMkE5NTIzMTFCQkQ3QkNFNThGQzVBODVBNkI3MjA4NkZCQjkxNzlDM0U5MEJCNEJFQkYzRDY1QkNFRjg2NDE3NTg1ODY4MTkKK0Y0NUFFQThDCitGQzI1NTg5MjJDRTNEMDc5Q0NENzFEQUQzOAorQzBFRjQ0OERCM0E3NUE1NzlFMDlBMDJEODlBNzIxNUNFN0Q1OTJCRTU2NkJENDZFQTc5QkExRUFGM0NENUNBM0FFMDUxOTY1NTAxOEUxNzNCQzIzREE1ODQ1NjcwNDMxOEMyQjkyMzNBRTIzMDNEQURDMjM2NzQ0NTYyN0RFRjQ2NEVDODc1NTk4MEU0RkIyQjA3NDA5RjAxRDVCMzk5MzBDMDVFMUQzMEE3NUFGN0E4RjNCNjQKKzhFRDE5NDU3Cis0NUM4RDdGODgxNjg0QTc3QzQxNzcyM0EyMzZBCitFREZGNTY3NkNENEQ2ODI3ODI3REJCQkVBMDE1MEM5NTBCRTFFOTY5Q0E5QTREMkYwNUE0RURBNTREMDZBRDFDRTQyRkZBRTRFRDAyQTY2RkI0MDc1Njg3QURDNjM1M0IxOUZFNjA4MkJGNzlDQzQ2QzQ0RTk0MEFFQzg1MDU2NzY1NzNGMzgwOTA0QzIwRjZBN0VDRDc4Nzg5RUIwMDk4NkE2RUVCMEU5QUY2OUI3OUFFNjIyRUJDQjY2OEREN0FDODFCNDI1MjAyMzE3Nzg4NEZGREQ3MDE3RTc5MTAwREExQzk3NTE4MjczRAorMTAzRUU2MzMKKzI0QjEwOEU4QTg4RkM3Q0U1RkU5MjI3OEYzCisxQjJFNTczRjVEN0I3QTAxNDIyMjNBREM2M0Q1QjVGOEE2QjMxMjkxNUFDNzU5NzMzNEUxMzFBNTYyNjIwOUYwQzNDMEU2Rjc2NDJGNDYwMjVBNDQ1NkEwRDE0N0JGRDdFQkI5MTc5NzQzOTkxNDgxNjdENkI3MUUwRjcyRjg0RDJBMEE4REZEMjBFNDUwOEVGOTkyQjQ5N0E5Njk4QTgwNzgwMDg3NDQyNDk5RTYKK0ZGNjFCNkZFCitDRUFEMkEyRjNCMTJGMkFGNEIwOEY3NERDNworMUI1NkI3NEQwRUFFMUM4ODEyNzQwMjMxRDVBQ0U4MEU3RjBDRDNBNTA2QzY1NENEM0U5RDMxMkE3OEREQjIzNzlDRkY0RDNCOEY4QzBFODdCQjUzRDk2NzI5RDFEQkM0ODM3NzYzRUI3MkNCODIxN0M5ODM2MTM1MkYyNEZERUJCRTBGRkQ4MkFCMTFDNTI0QTkwNDcxNjg0RkRDRjBCNkVGNTk3RDk1RjY0RkIwODQ3NjA2CitGOTY4RDNFOAorMjIzQTYyRDU1OEQ2MkU0MDQ1NkRBRTkzNEEKK0FFMUM4Qjg0QTdGRUU3RTBFQTg1NUQ4NUU1M0JGNDg3REFDMkJFOTRFQzg4OUE4MworQkNGRjc0NzUKKzk5MjZFRDI1MTRBNzBBRkYzMUMyODBCNjE1MjQKKzgyN0YzODcwODkwQTQ2MEUKKzE3Qjk5ODk4Cis3Q0E0MzUzODhBODA0OTdBNUNBMkI5RkVDMjExNTA5N0YwMjQzMjMzOTk1RkU0REM0MDdGMzQ2MjY1QzRCOEJGNzcwNQorRDE2MkQwM0YzQzBGRTU5NEMwRjM3MzVFN0M3OUREQzlBRjk4MjJGOUE4QzFBRTIxRDAzMUNBODQ3RjlFMzFBQjMwNjBFQTMyQTQ1MQorQzc4N0MwQTFFODE0Mjg2MjA2MjNGNjZCODY5REYxN0E4OEExMDk0MjkxN0RBMEZFNzI1RENGCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyYiAxMi4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJpIDEyLjAwIC9QU093c3RkdXRjaGkgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MWEyNzM1MzEyNzMzMjgwZTAxMTEwMTEyMjcyZjI1MmEyZTIzMzMyYzAxMjgzMDMzMDExOTI3MjMzNDM2MzMyYjJmMjkwMTFhMjczNTM4MzAzMzJjMDExYz4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyNzMzMjgzMDMzMmUyMzJmMjUyNz4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MGQ+IDk0MzQgMTMzMDAgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyODAgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI4MCA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjgwIDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI4MCAzIDcxMzMgMzIgcword3N0OmR1dGNoMTIgU0YKKzwxYjJmMjUyNz4gMTI3MSAxNDMxIDAgMTc1NyAtMSBzCis8MDAzNTJhMjcwMDJlMjMyYzI3MjgyYjJkMjcwMDJiMzQwMDI1MzYzNDM1MzAyZTJiM2IyNzI2MDAyMzM0MDAyZjI3MjcyNjI3MjYwNjAwMzQyYjJlMzEyZDNhMDAyNzJmMzUyNzMzMDAzNTJhMjcwMDI1MzAyZTJlMjMyZjI2MGU+IDE3NTcgMTQzMSAxMCA3NzIzIDAgcworPDAzPiAxMzk4IDE3NzggMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMWMxMTFhMTUwMDE5MWQyMTIyMTExYjFiPiAxNTA0IDE3NzggMiAyNjgzIDAgcword3N0OmR1dGNoMTIgU0YKKzwyODMzMzAyZT4gMTI3MSAyMTI0IDAgMTcxMiAtMSBzCis8MDAzODJiMzUyYTJiMmYwMDM1MmEyNzAwMmYyNzM1MzEyNzMzMjgwMDM0MzAzNjMzMjUyNzAwMjYyYjMzMjcyNTM1MzAzMzNhMDgwMDFmMmEyNzAwMmYyNzM1MzEyNzMzMjgwMDI3MzkyNzI1MzYzNTIzMjQyZDI3MzQwMDM4MmIyZDJkMDAyNDI3MDAyNTMwMmUzMTJiMmQyNzI2MDAyMzJmMjYwMDI1MzAzMTJiMjcyNj4gMTcxMiAyMTI0IDEzIDk1MzEgMCBzCis8MmIyZjM1MzAwMD4gMTI3MSAyMzY5IDEgMTY2NiAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMGEwYjBlMDMwOTA2MGUwYjA2MGMwNz4gMTY2NiAyMzY5IDAgMjY1NiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMzAzMzAwMzUyYTI3MDAyZDMwMjUyMzM1MmIzMDJmMDAzNDMxMjcyNTJiMjgyYjI3MjYwMDJiMmYwMDM1MmEyNzAwMmUyMzJjMjcyODJiMmQyNzA4MDAxOTIzMmMyNzAwMzgyYjJkMmQwMDIzMmQzNDMwMDAyNTMwMzEzYTAwMzUyYTI3MDAzNDIzMmUzMTJkMjcwMDM0MjUzMzJiMzEzNT4gMjY1NiAyMzY5IDE0IDk1MzEgMCBzCis8MjgyYjJkMjczND4gMTI3MSAyNjE0IDAgMTY0MyAtMSBzCis8MDAyYjJmMzUzMDAwMzUyYTI3MDAzNDIzMmUyNzAwMzEyZDIzMjUyNzAwMjMyZjI2MDAzNzI3MzMyYjI4M2EwMDM1MmEyMzM1MDAzNTJhMjczYTAwMjMzMzI3MDAzNDI3MzUwMDM1MzAwMDI0MjcwMDI3MzkyNzI1MzYzNTIzMjQyZDI3MDg+IDE2NDMgMjYxNCAxMyA3NDc0IDAgcworPDE4Mjg+IDEyNzEgMjk2MSAwIDE0MjIgLTEgcworPDAwM2EzMDM2MDAyNjMwMDAyZjMwMzUwMDJhMjMzNzI3MDAzMzMwMzAzNTAwMjMyNTI1MjczNDM0MDYwMDMwMzMwMDI2MzAwMDJmMzAzNTAwMzgyYjM0MmEwMDM1MzAwMDJiMmYzNDM1MjMyZDJkMDAyZjI3MzUzMTI3MzMyODAwMjMzNDAwMjMwMDI1MmEyYjJkMjYwMDMwMjgwMDJiMmYyNzM1MjYwNjAwMzQyYzJiMzEwMDM1MzAwMDM1MmEyNz4gMTQyMiAyOTYxIDIxIDk1MzEgMCBzCis8MzQzNjI0MzQyNzI1MzUyYjMwMmY+IDEyNzEgMzIwNiAwIDIyMTkgLTEgcworPDAwMzUyYjM1MmQyNzI2MDAzYzFkPiAyMjE5IDMyMDYgMiAzMDYyIDAgcworPDM2MmYyZjJiMmYyOTAwMmYyNzM1MzQyNzMzMzcyNzMzMDAyMzM0MDAyMzAwMzQzNTIzMmYyNjIzMmQzMDJmMjcwMDE0MjMyNzJlMzAyZjA4MDIwMD4gMzA1NCAzMjA2IDYgNzA1MyAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MWEzMDM4PiAxMjcxIDM1NTIgMCAxNjkzIC0xIHMKKzwwMDM1MmEyMzM1MDAzNTJhMjcwMDI3MzkyNzI1MzYzNTIzMjQyZDI3MzQwMDJhMjMzNzI3MDAyNDI3MjcyZjAwMjUzMzI3MjMzNTI3MjYwNj4gMTY5MyAzNTUyIDYgNTIzOCAwIHMKKzwwMDJiMzUwMDJiMzQwMDJmMjcyNTI3MzQzNDIzMzMzYTAwMzUzMDAwMjcyNjJiMzUwMDM1MmEyNz4gNTIzOCAzNTUyIDYgNzQ1MCAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAwMDMwNjBlMDQwMzBkMDYwYzBmMDgwNDA2MGQ+IDc0NTAgMzU1MiAxIDg1MDYgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMjMyZjI2MDA+IDg1MDYgMzU1MiAyIDg5MzAgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzA2MGUwNDAzMDgwOT4gODkzMCAzNTUyIDAgOTQ2MSAtMSBzCis8MTA+IDk0NjEgMzU1MiAwIDk1MzEgLTEgcworPDA2MGUwNTAyMDQwYTA5MDc+IDEyNzEgMzc5NyAwIDE5NjkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDI4MmIyZDI3MzQwODAwMTgyODAwM2EzMDM2MDAyYTIzMzcyNzAwMjYyNzI1MmIyNjI3MjYwMDM1MzAwMDJjMjcyNzMxMDAzNTJhMjcwMDJmMjczNTMxMjczMzI4MDAyNzM5MjcyNTM2MzUyMzI0MmQyNzM0MDAzNDMwMmUyNzMxMmQyMzI1MjcwMDMwMzUyYTI3MzMwMDM1MmEyMzJmMDA+IDE5NjkgMzc5NyAxNCA5MTM4IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDMwYTBiMGUwMz4gOTEzOCAzNzk3IDAgOTUzMSAtMSBzCis8MDkwNjBlMGIwNjBjMDc+IDEyNzEgNDA0MiAwIDE4NjggLTEgcword3N0OmR1dGNoMTIgU0YKKzwwNj4gMTg2OCA0MDQyIDAgMTkyMSAtMSBzCis8MDAyMzJkMzUyNzMzMDAzNTJhMjczNDI3MDAyZDJiMmYyNzM0MDAyMzI1MjUzMDMzMjYyYjJmMjkyZDNhMDgwMDFmMmEyYjM0MDAyNzI2MmIzNTJiMmYyOTAwMzQzNTI3MzEwMDI5MjcyZjI3MzMyMzJkMmQzYTAwMzMyNzMyMzYyYjMzMjczNDAwMzMzMDMwMzUwMDIzMjUyNTI3MzQzNDA4PiAxOTIxIDQwNDIgMTEgODg1NCAwIHMKKzwxMT4gMTI3MSA0Mzg4IDAgMTQzNCAtMSBzCis8MjYyNjAwMzUyYTJiMzQwMDJkMmIyZjI3MDAzNTMwMDAzNTJhMjcwMD4gMTQzMCA0Mzg4IDUgMzA2MyAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDYwZTA0MDMwZDA2MGMwZjA4MDQwNjBkPiAzMDYzIDQzODggMCA0MDc2IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAyODJiMmQyNzBlPiA0MDc2IDQzODggMSA0NDc4IDAgcword3N0OmR1dGNoMTJiIFNGCis8MWQxNTIyMWYxNTIwMTY+IDEzOTggNDczNSAwIDIwNTUgLTEgcworPDA0MDUwODA3MDYwMzIyMTMxZj4gMjY2OSA0NzM1IDAgMzUzOCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFmMmEyNzJmMDAyMzI2MjYwMDM1MmEyYjM0MDAyZDJiMmYyNzAwMzUzMDAwMzUyYTI3MDA+IDEyNzEgNTA4MiA2IDM1MzggMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzA2MGUwNDAzMDgwOTA2MGUwNTAyMDQwYTA5MDc+IDM1MzggNTA4MiAwIDQ3NjcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDI4MmIyZDI3MGU+IDQ3NjcgNTA4MiAxIDUxNjkgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwxZDE1MjIxZjE1MjAxNjAwMjEyMjIwMTUxMTFjMDAyMjEzMWYwMDFkMWUyNTExMTkyMjAwMjAxZTFlMjIwMDAzMWUxZjIyMDMxZDE1MjIxZjE1MjAxNjAzMWQxNTIyMjExNTIwMjQxNTIwMDAxZDE1MjIyMTE1MjAyNDE1MjA+IDEzOTggNTQyOCA2IDcwODcgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFkPiAxMjcxIDU3NzUgMCAxNDM0IC0xIHMKKzwzNjJmMmYyYjJmMjk+IDE0MjYgNTc3NSAwIDIwNTEgLTEgcworPDAwMjMzNDAwMzMzMDMwMzUwMDJiMzQwMDMxMzMzMDI0MjMyNDJkM2EwMDJmMzAwMDJkMzAyZjI5MjczMzAwMzMyNzMyMzYyYjMzMjcyNjAwMDQxODM1MDAzODIzMzQwMDM2MzQyNzI2MDAzMDJmMDAzMDJkMjYyNzMzMDAzNzI3MzMzNDJiMzAyZjM0MDAzMDI4MDAyZjI3MzUzMTI3MzMyODAwMzgyYTJiMjUyYT4gMjA1MSA1Nzc1IDE2IDk1MzEgMCBzCis8MzMyNzIzMjY+IDEyNzEgNjAyMCAwIDE2NzggLTEgcworPDAwMjgzMzMwMmUwMDA5MjYyNzM3MDkyYzJlMjcyZTA1MDAzNDMwPiAxNjc4IDYwMjAgMyAzNTgyIDAgcworPDAwMmIyODAwM2EzMDM2MDAyMzMzMjcwMDM2MmYyNTMwMmUyODMwMzMzNTIzMjQyZDI3MDAzMzM2MmYyZjJiMmYyOTAwMmYyNzM1MzQyNzMzMzcyNzMzMDAyMzM0MDAzMzMwMzAzNTA2MDAzYTMwMzYwMDI1MjMyZjAwMzEyYjI1MmM+IDM1ODIgNjAyMCAxMSA5NTMxIDAgcworPDIzMmYzMDM1MmEyNzMzPiAxMjcxIDYyNjQgMCAxOTc5IC0xIHMKKzwwMDJiMjYwODAwMWIyZjI1MjcwMDM1MmEyNzAwMjgyYjJkMjczNDAwMmEyMzM3MjcwMDI0MjcyNzJmMDAyNzI2MmIzNTI3MjYwNjAwMmIzNTAwMmIzNDAwMmYyNzI1MjczNDM0MjMzMzNhMDAzNTMwMDAyYTIzMzcyNzAwMmIyZjI3MzUyNjAwMzMyNzA3MjUzMDJmMjgyYjI5MzYzMzI3MDAyYjM1MzQyNzJkMjgwOD4gMTk3OSA2MjY0IDE1IDk1MzEgMCBzCis8MWIyZjAwMjMyZjAwMTcxYzA3MjAyMTAwMzQzYTM0MzUyNzJlMDYwMDM1MmEyYjM0MDAyYjM0MDAyMzI1MjUzMDJlMzEyZDJiMzQyYTI3MjYwMDM4MmIzNTJhMDAzNTJhMjcwMDI1MzAyZTJlMjMyZjI2MGU+IDEyNzEgNjUwOSA5IDcwNTMgMCBzCis8MDM+IDEzOTggNjg1NiAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzE1MjIxMzAzMTkxZDE1MjIxNDAwMDIxMz4gMTUwNCA2ODU2IDIgMjcyMSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MWIyZj4gMTI3MSA3MjAyIDAgMTU1OSAtMSBzCis8MDAzNDMwMmUyNzAwMzQzYTM0MzUyNzJlMzQwMDJiMzUwMDJiMzQwMDMxMzAzNDM0MmIyNDJkMjcwMDM1MzAwMDI5MjczNTAwMmIyZjI3MzUyNjAwMzUzMDAwMzMyNzA3MjUzMDJmMjgyYjI5MzYzMzI3MDAyYjM1MzQyNzJkMjgwMDI0M2E+IDE1NTkgNzIwMiAxMiA3MTc2IDAgcworPDAwMzQyNzJmMjYyYjJmMjkwMDJiMzUwMDIzMDAxZTE4MTYxNzIwMWMwMDM4MmIzNTJhPiA3MTc2IDcyMDIgNSA5NTMxIDAgcworPDM1MmEyNz4gMTI3MSA3NDQ3IDAgMTU2MSAtMSBzCis8MDAyYzJiMmQyZDA0MGMwNTAwMjUzMDJlMmUyMzJmMjYwZT4gMTU2MSA3NDQ3IDIgMzE3MSAwIHMKKzwwMz4gMTM5OCA3Nzk0IDAgMTUwNCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDFhMTkxYjFiMDAwMjBjMGYwZDAwMDkxZjE5MTQwMDFlMTYwMDE5MWQxNTIyMTQwYT4gMTUwNCA3Nzk0IDUgMzk5MSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MWIyZj4gMTI3MSA4MTQwIDAgMTU1OSAtMSBzCis8MDAzMDM1MmEyNzMzMDAzNDNhMzQzNTI3MmUzNDAwMmIzNTAwMmUyYjI5MmEzNTAwMjQyNzAwMmYyNzI1MjczNDM0MjMzMzNhMDAzNTMwMDAyYzJiMmQyZDAwMjMyZjI2MDAzMzI3MDczNDM1MjMzMzM1MDAzNTJhMjcwMDJiMmYyNzM1MDAyNjIzMjcyZTMwMmYwODAwMTE+IDE1NTkgODE0MCAxNCA4MTI0IDAgcworPDM1MDAzNTJhMmIzNDAwMzEzMDJiMmYzNTA2MDAzMzMwMzAzNT4gODExOSA4MTQwIDMgOTUzMSAwIHMKKzwyMzI1MjUyNzM0MzQ+IDEyNzEgODM4NSAwIDE4MjkgLTEgcworPDAwMmIzNDAwMmYzMDAwMmQzMDJmMjkyNzMzMDAyZjI3MjcyNjI3MjYwMDIzMmYyNjAwM2EzMDM2MDAyNTIzMmYwMDMxMzMzMDI1MjcyNzI2MDAzNTMwMDAzNTJhMjcwMDM3MjczMzJiMjgyYjI1MjMzNTJiMzAyZjAwMzQzNTI3MzEwOD4gMTgyOSA4Mzg1IDEyIDc3MTIgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwxMD4gMTI3MSA4ODcyIDAgMTQwNiAtMSBzCis8MTUyMDE5MTYyNjE5MWQxNzAwMjIxODE1MDAxMjE5MjIyMT4gMTM4OCA4ODcyIDIgMjgxOCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MWY+IDEyNzEgOTI5NCAwIDE0MTAgLTEgcworPDMwMDAzNzI3MzMyYjI4M2EwMDM1MmEyNzAwMmIyZjM0MzUyMzJkMmQyMzM1MmIzMDJmMDAzMDI4MDAyZjI3MzUzMTI3MzMyODA2MDAzNDJiMmUzMTJkM2EwMDI3MzkyNzI1MzYzNTI3MDAzNTJhMjcwMDI1MzAyZTJlMjMyZjI2PiAxMzc5IDkyOTQgOSA3MTMwIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzFlMWYyMjAzMWQxNTIyMWYxNTIwMTYwMzFkMTUyMjFmMTUyMDE2PiAxMzk4IDk2NDEgMSAzMjMxIDAgcword3N0OmR1dGNoMTIgU0YKKzwxMT4gMTI3MSA5OTg3IDAgMTQzNCAtMSBzCis8MDAxZjEzMWMyMjFlMWYxZDE1MTExOTAwMzUyNzM0MzUwMDMwMjgwMDBiMGEwMDM0MjcyNTMwMmYyNjM0MDAyNjM2MzMyMzM1MmIzMDJmMDAzNDJhMzAzNjJkMjYwMDI0MjcwMDMxMjczMzI4MzAzMzJlMjcyNjAwMzAzNzI3MzMwMDM1MmEyNzAwMmQzMDMwMzEyNDIzMjUyYzAwMmIyZjM1MjczMz4gMTQzNCA5OTg3IDEzIDk0NjEgMCBzCis8M2Q+IDk0NjEgOTk4NyAwIDk1MzEgLTEgcworPDI4MjMyNTI3MDg+IDEyNzEgMTAyMzIgMCAxNjk3IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBlPiAxMjcxIDEwNzE5IDAgMTQyMCAtMSBzCis8MjMxZDFkMTkxZDE3PiAxNDE2IDEwNzE5IDAgMjA2MCAtMSBzCis8MDAxZDE1MjIyMTE1MjAyNDE1MjAwMDExMjEwMDExMDAyMTIyMTExZDE0MTExYjFlMWQxNTAwMGIxMTE1MWMxZTFkPiAyMDYwIDEwNzE5IDUgNTI0NCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTgyOD4gMTI3MSAxMTE0MSAwIDE0MjIgLTEgcworPDAwM2EzMDM2MDAyNTIzMmYyZjMwMzUwMDJiMmYzNDM1MjMyZDJkMDAyZjI3MzUzMTI3MzMyODAwMjMzNDAwMjMwMDI1MmEyYjJkMjY+IDE0MjIgMTExNDEgNyA0NjA0IDAgcworPDAwMzAyODAwMmIyZjI3MzUyNjA2MDAzYTMwMzYwMDI1MjMyZjAwMzMzNjJmMDAzNTJhMjcwMDJmMjczNTM0MjczMzM3MjczMzAwMjMzNDAwMjMwMDM0MzUyMzJmMjYyMzJkMzAyZjI3MDAyNjIzMjc+IDQ2MDQgMTExNDEgMTEgOTQ2MSAwIHMKKzwzZD4gOTQ2MSAxMTE0MSAwIDk1MzEgLTEgcworPDJlMzAyZjA4PiAxMjcxIDExMzg2IDAgMTczMCAtMSBzCis8MDAxZTJiMmUzMTJkM2E+IDE3MzAgMTEzODYgMSAyMzkxIDAgcworPDAwMjczOTI3MjUzNjM1MjcwMDJmMjczNTM0MjczMzM3MjczMzAwMzgyYjM1MmEwMDM1MmEyNzAwM2MwNzMxMDAwZjMxMzAzMzM1MDAyZjM2MmUyNDI3MzMxMDAyMDAzMDMxMzUyYjMwMmYwMDIzMmYyNjAwMmIzNTAwMzgyYjJkMmQwMDJhMjMzMTMxMmIyZDNhMDAzNDM1MjMzMzM1PiAyMzkxIDExMzg2IDEzIDk1MzEgMCBzCis8MjMyNTI1MjczMTM1MmIyZjI5PiAxMjcxIDExNjMxIDAgMjEyOSAtMSBzCis8MDAzMzI3MzIzNjI3MzQzNTM0MDAzMDJmMDAzNTJhMjcwMDMxMzAzMzM1MDAyZjM2MmUyNDI3MzMwMDNhMzAzNjAwMzQzMTI3MjUyYjI4M2EwOD4gMjEyOSAxMTYzMSA3IDU3NDEgMCBzCis8MDAxODI4MDAzYTMwMzYwMDM0MzEyNzI1MmIyODNhMDAyMzAwMzEzMDMzMzUwMDJmMzYyZTI0MjczMzAwMzAzNTJhMjczMzAwMzUyYTIzMmYwMDM1MmEyNz4gNTc0MSAxMTYzMSA5IDk1MzEgMCBzCis8MmYzMDMzMmUyMzJkPiAxMjcxIDExODc2IDAgMTkyMSAtMSBzCis8MDAyZjI3MzUzMTI3MzMyODAwMzEzMDMzMzUwMDJmMzYyZTI0MjczMzA2MDAzYTMwMzY+IDE5MjEgMTE4NzYgNCA0MzE0IDAgcworPDAwMzQyYTMwMzYyZDI2MDAzMzI3MmUyNzJlMjQyNzMzMDAzNTMwMDAyMzJkMzQzMDAwMzQzMTI3MjUyYjI4M2EwMDNjMDczMTAwMGYzMTMwMzMzNTJmMzYyZTEwMDIwMDIzMzQwMDIzPiA0MzE0IDExODc2IDkgOTUzMSAwIHMKKzwyOTJkMzAyNDIzMmQ+IDEyNzEgMTIxMjEgMCAxODI0IC0xIHMKKzwwMDI1MzAyZTJlMjMyZjI2MDAyZDJiMmYyNzAwMzAzMTM1MmIzMDJmMDAzMDI4MDAyZjI3MzUzMTI3MzMyODA4PiAxODI0IDEyMTIxIDUgNDgxMiAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICg3KSA3CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDQgcHV0CitkdXAgMyAvQzAwNDYgcHV0CitkdXAgNCAvQzAwNTUgcHV0CitkdXAgNSAvQzAwNTggcHV0CitkdXAgNiAvQzAwNjUgcHV0CitkdXAgNyAvQzAwNjYgcHV0CitkdXAgOCAvQzAwNzMgcHV0CitkdXAgOSAvQzAwNzcgcHV0CitkdXAgMTAgL0MwMDc4IHB1dAorZHVwIDExIC9DMDA4MCBwdXQKK2R1cCAxMiAvQzAwODQgcHV0CitkdXAgMTMgL0MwMDk3IHB1dAorZHVwIDE0IC9DMDA5OCBwdXQKK2R1cCAxNSAvQzAwOTkgcHV0CitkdXAgMTYgL0MwMTAwIHB1dAorZHVwIDE3IC9DMDEwMSBwdXQKK2R1cCAxOCAvQzAxMDIgcHV0CitkdXAgMTkgL0MwMTAzIHB1dAorZHVwIDIwIC9DMDEwNCBwdXQKK2R1cCAyMSAvQzAxMDUgcHV0CitkdXAgMjIgL0MwMTA3IHB1dAorZHVwIDIzIC9DMDEwOCBwdXQKK2R1cCAyNCAvQzAxMDkgcHV0CitkdXAgMjUgL0MwMTEwIHB1dAorZHVwIDI2IC9DMDExMSBwdXQKK2R1cCAyNyAvQzAxMTIgcHV0CitkdXAgMjggL0MwMTE0IHB1dAorZHVwIDI5IC9DMDExNSBwdXQKK2R1cCAzMCAvQzAxMTYgcHV0CitkdXAgMzEgL0MwMTE3IHB1dAorZHVwIDMyIC9DMDExOCBwdXQKK2R1cCAzMyAvQzAxMTkgcHV0CitkdXAgMzQgL0MwMTIxIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yNSAtMjM4IDkyMCA3MjJdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzQ4RUQ1MzNBRUI5NkIyNjlEMTYxMkQwOTA3ODExRDAxODUKKzNDODQ5MUU4RkQxRTdEQkI1MTVBNENDRQorMEEyMTI4MURCMTZDQkJFNjg1CiszMDlDNzJCRgorRDdDMTE3RTFBMjM0MzIwMERGRTc0MUNBRDYKKzc3MzY3OTkzNEMwMzNFQkQzNEYxODRCODUzQzdCQjYyNDZCNkQ0OEZEMzkzNEJEODQ4NjY4N0EwMjI2QTMxOUI2ODAyNUUzN0FDNDRCOTc1MDkxM0E3NDMwOUQ2NEQ4OTgwODY3RTVCMjk2RjE3Q0IzMAorNjVFNjA0ODEKK0Q4RTIwOTFFMjA2ODA1Q0NFOEFENjk2MkMzCisxN0MxMzA2RDhBRkIwMkFCRDMyQjY1MDE3NDY4QjU4RDBEQTczNjExN0FBQUQxMkZBNkVCMjVGQzA1NjU4MAorODRBQjM0NzMKKzQ1MDc4RDY1OTFBNUNFREJFODM5OEYxNkUwCis5NjgxODg2QzdCMDQyOTRBNEI4OTRDQzlGNzU3RjVGN0QwMkRCNkQ2M0YwRUM2OTdDRUYzNDE0OERGMzBCOEI2OEZBQjQ4NUIwQUEyMUEyRDk4NjdEOQorOEM1QzA5M0MKKzdCMDNDN0UzOEYwNzk1MjBCNEVBQzc5RThDCis3MUMyQzc4NDVBQjY0ODNGNDIxQ0RDRTczQTMwQ0M3RTcyNDQ5NDNFQjAzMTcyN0M4MUExQjJFOUVEOUZEOUM1OEI0QzI3NzNBMkI0RDE0RjI2NjAxREFCQUM4NUU2RTlFQzEwNzk5MjQ2RDIKKzczODFFMkFGCitGQTU5Nzk4MUU3QzQ1RjBGMkUwOUFCNzcwOTYyCis2RjUyQ0M0Mjk0NDlGMEJEMkI1REEwODZDN0Q2NDZENEM2MDgzNTU1NjUzQUNFRjBFOTMxNTlENTY2OUNDREQ3MjlGNzIxQTJCN0Y2NTcxODYzOTA0MkQ1OTBFMENERjE0OTM1Rjg0MDRCRjk5RTM3QTdEMTcxNzFEMDUyQ0VCRDhDM0ExNDhDM0Q5QzhCOTEyODEwN0Y3NEEyQjRDMEZGNTIzMjM1MkUyNzE5NzhBQjgwRDc3RDFEQURBN0E5RTIwRDE5NDA3NjI0OEEyRUFGNUVFNzlCNzFDRjc4RDQxNTQxMDJGQworQzFGREQzNkMKK0MzODU0MDQwOUFCOTlEMzc3RUFDMUE4MDQwREUKKzFDQjBDNjg0NjE4RUY4RjhDNjNDRjk0RUNENkY1MEIxNEQzQjY3MkE5RkE2NkZDNTUzREJFNjYxQTEyQURGQ0VDMjM5NDQ4M0ZGRjM5QUI1NkE0RURFQkNENzk0RkI4RThDNjQ0QTJEQ0ZEQzc4NDlFMEIzRjBBQjlEN0RCNzc0RUJGMDNEQjIzRDNBQzQ2MEI4QUNERkM3QjVFRDYxQzREM0M4MThFMzk4NUQ5RjNEMEJGRTUxMEU0RkNEODg0MERFQ0I2QjRFQzgxQzMzQjMyMUE2QkJDRUNCNUUxNEYxN0Y4RjM5MjYxNDZEMjdDMDdGMjA2QjJBQUY4RAorMkZFQQorRTIKKzNEMDZFMzMzCis5NDI0RUY1RDkyODc2RkRFMEQ5MUZGNDJFRgorNTJEMDU4RUMxQkE5OTgyREYxQjE2QjdCMDVCMDUxODY0QUQxQkZCMUU0QjU1QTE4NEY3MDZBMTBGMDJCQ0ZCMEI5OTc3RDY1MUNEMkEzQjkyRTM2RTEwNjNBN0NCQUNFM0U5OTIyOUFCQkIzQkMzNDAyNUI2NQorNDUzMEMzNjMKK0FCOENBNTVEQkI1REQ4REEwNjcwNTFDOTI5NkMKKzIxMDAwMDlERjM4NjJFNDY2QjkwQTI1MkI0Mzg4MTY5OTI4MjBEOUY5Nzg1NTIwMzU0MjVBRTE1RjlCQzFCNjk5RDcxNTA4N0IwNUMyQkQ2MjFBRDAwQUFCMUE5RUFCMTBBRDlERUQ4NDUzNUE4MzRDOTI5RTY1RjkzRkUxNjUzQzRBRTcxQzYwRTdCODQ4RTJGMjZCOUYxMzk0RjBENUUwMDhGRDUyNzNCMzMwNEE0N0M2OUUyQkU4MzdEQkMxQzEyQzg1NTM3NkJBQzNGMDc3MUNENEVFQjZGQjREOQorNDkxRTk0NEQKK0FDRDhBMTkyMDQ4NDNFQzdCNTY1ODkwN0NECitBQ0ZDRjQ2QTNCRkNCRUFEOUE3RkI4QUNGMDU1QzZENkREQzY0QjU4Q0MzMjczQzUyMDBFN0VERjEzQzkyQTVBRTRENzlBOTQwNjU4NTQwNDUzQjRBOUEyRDVGOEE3NzhDN0U0NDU2OTIyRDk5REU0QTE5Q0QwRTMxMTFFRDM3QjQ0Q0NDQTFDMEMzMkNFRjhCMzU2NjJCNzM0NTg2MTQ5M0Y4RjAzNTUxQ0YyN0VEQzdCQUU1M0E0CitCQkJGMkRDMgorOUY5ODFBRDYwNzI3QjNEQkE5RDRDQzYyRkRFQQorNDM0MjhDNkZENkVGQTFFMTdBQUExN0UxNzczRDZDRUUzQUVFQjdCQjFEMTQ5QTQ2N0RFNjk2QjU5ODExRDUyNzZDREI0QkQwNzQ3QjU2M0YxMjMwN0Q1QUQzMkUxRTcxNzQ5NjgyQ0YzNDVGMzVBRkQzQzYwMDlCRkIzNjI2OTNFRjFDQTc0NTJCNTY3NzdGOTQ0MDFDMzZEQUVEODQxQ0I5OUIwNjQ2RjQ5MEEyQjcyRTczQ0JBQUE2RUQwNEQxNjIyMEM3MjY0RTE0NjBBOTVCQjcKK0I5NjcwMEE2CiswN0E0QjkyMDc3RTY2RUJGMkMzRTcyRUM0NAorN0JBREQ1QkRDODUwQzIwMDFBMDExQjQ1QTJEOUMyNDI2Q0YwODhGNzc5NDU0QTU5OTRDNjVFRkJGREJGRTc5MDQ1MjA3RkM0RDVCQTJGNUUyQzVGODFFNjBBMEJGMTM2NEY0OTBEMzJGNEExOTczMUQzQ0EyREUwNURFNUU5RkQyOUQyMDUyMkRBNkUwNTY5MDVDMjQ0REE3OTk1MDM2OTFGCis5M0I1MDkyNgorRDdFQzVBQzM0M0VFRkIyNTkzMEU3MzdGRkM5MAorNzgzNjc2NUFENzVBQjc3Q0UxMkNCQTEwNjcxNUI1Q0UxQzQ2NDVCMDZFRTE2MTg5MTdERkE1MTQ4RTMyOUNFRkExQjUxMkVBNzkxMDQ2QjExREZDRUEyQzNGRENFRUY1NDREMkNEMDkyNjE0RkE3NjBBM0VGRjZFQUQ0MUZBMTNERjIzRThDQzg1M0U2MDlEMkFBQzhBQTBGNUFENjM2MTZGRDUwMDU4NzI3NjMxQUQyMEREMzVDOTkxRkJCNTc2MTk2RTdGNEVBMjQ3NTIyMzJDMDYwM0I2OEI3Njc5QUIyODE3NkFCMEFERTNCQjUzRTMzNTlDRjU4NEJFCiszMDJDCis5MkEwMTYKKzNGNDQyRjVGCisyOEYzMzU4NzlFNUE2MTgzNjdDMUREQzExRQorMjM1NzJGOEFBRjdBNEE2RjQ5NTBFQTlEMjFBQTc4QkFCNjk4MENDNUMzNTZCQzE2MjIzMjAwMUM5NTVGN0E3Q0I4NEVBMzY4QUNCREUwRTZDNDM0OUE2MjZDODBFN0UxM0E3M0VEOUE3MDEzREFBQjdDNkMzNjdDQjFBQjgzNjlGRjNFRjVBNEREQjhGNTI3RjY0RjMyMDc1MUFGNDU2NjA3QjNBNzQwREVCMkM5NkYKKzA1MDk2MjRCCis2RTcwOUY2RDg2NkI2NUY2MzU3NzhFRTExNAorRkRBQUI0OTY0M0I1MkY2NzMyRjU0QTZFMTMwQzBDQzREMzMwODNEQ0IwNEM2NjQyM0YxQzQ4MjkzRDRFNEM4NTAzQjUyQ0UyQ0VDQUMzMTM2N0E4OThCQzY5QUM4MTBDOTM1QjE2OEREQzgzOUFDMzAwMDI2MjRFRTBERjhCMzcwRDE0Mjg0NzkyNUNCQkRGQTc3RDkxMDI5RUM1MTk5NkZCMjIKKzcxNENBRjNECitCNDMxRURBMkY0QTQ4Njg5NUYxQTQ2OUEzNUZECis2QkUxQjY0NzdEQTlBRjE3OTgwMEVGRUMwMzI0MDRCNDlCMjU0MUNGQjVBREExQzFCMTYwNTk3QzcyOURGREU5NjBBNzMyM0U2MkM3Qzg4OEM2MTI0MURBNjY1ODhBMEQ5NEIyQUU4NkUwMkI1MjQ3ODU0MDI4NDI2MTlERUQxODczODQ5RTNDQUZEMzBBREU3RTBGOTFGNjBGM0M1NzM5MDhFMTI0OTdBREI4QjcxRDI4MzcyNjMwNzc2RTZBM0MxQTkxRjY1MUQwNDRFQ0Y0MkYyMTk5MTEyNUMyCitFN0MzQTg2RQorOUNDNkNBQkVCRDY3NUMzMzRDNzUyMzk5RjkKKzlEMURFQzU0Q0Y5MTZDOEU4Q0VGNTkzMDQzRTYwRTU1MkI2QjE4RTZCREUwQTkxMTQ1NDBBQzU4MDE2RDkwNzdDMjE4QTY4NjI2MjUyNTVGRDRCODBCMjE0NzRFRDI0RkU5NjRGNzY4RkFBQTZDMDUzMTRCQUVBNjkyQjdDMzY5NzEyOEUzREQzMUNGQzREOUYyNTRBMkQwODNERkY4NkRBQ0NFRjlCQ0IyMkE0OUMwRjEKKzZCNDQzQjg3CiswQzVGRTFEOEFCNTU4QjQ0NDQ4QzEzQUFGMQorQUQxOTA2QThEREMxNDE1OEE0NTk3RkE1MEI3QTUzQUQwQUQ1QjIxOTZCOEFDRDUzMTA5QjdGQTRGODBDMjRCRTQ3MUY3RkZCOTcwQzY0NTA3M0M1Rjk1REYzNzA4Nzg2MDdFOUE0REI3Qjc0RUQyNEM0NENFM0UxOTAyMTZERDhEODc3MTYwM0E0ODY5MkQ0ODZERjU2QTlBQzQ3QkY2MkIyODY5RDgwQjgyQjIyNkU3NTlBRjBBNworNkZCMjRCMjEKK0M4Q0M0RTJCNUVGODNGNDREQTdEMUMxMjQzM0UKK0Q5Q0UwQUY1RDg0RDA5QkM4NzE3NkNGQjBDNjdDRTg4NjA5QzFBM0UyOEM4RkNCQUU3OTk4NEI1MkU3QTVFM0RCN0U1NzEwMzRDMEUwMTlFMkY0NTBGODRFMDNDN0ZDN0U5RTJGMkMxQTQzN0UxQkM1MzIxODBEQjc1QUYxNEZDOTlDREIzRDA1MDE0RTJGREVEOEMzOUY3NDdGM0YzOEVCNTJGNjc3NzQ3MEY0MzQ2RkZFMUIyRkQxMzY3MUJGMzM3RkJCOUQ5RTg2NUYxMUM5NDM4Qzc2N0VDMkI0NTVENjNBMkJERjEyRUIwNkI5NzIxMEY0NEY1MEZCQQorMDU0MworQUM4RkIzRDEzNkVCN0QwM0FFMzczRjFDMDg2RjgzNDJDQTNBNEM1QzRGQTFGNUU1ODhFNjA2QTBDNDZBQjQwMUU1MTQxNEJDRjI3OUYzMzZBRENENjVBQ0UxMTE0RgorQ0I3QkY1NDUKKzIwMDZGOTkyQkM3Mjc0QzdBMTJDRTc3NEFGQ0IKK0QyQkE2MUM2QTBGQjQ5NzhCRTNCMTMxOEUyMjVBRjJCODREOEQ2MTRCNTFGMjM3RUQ0MEJGQTA2RUZCMzlFOEJERThFOUZCRUM0ODRCRjRGMjE1RENFRDZDOTdFRjRCOTRBRkYzRDU1N0IyRUVBNURGQTgzQzJCQ0Q3ODdGOTEwQjZERDc5OEU2Q0Y0MjBBRUEwOTdCQTlCNTEzOTlGQTAyNEQwOTU2OEFGRTc2OTI1MkQ5NTI5NUQ5QTIxNTY2MTNFOTlGQjIzRkU1MTkzRjczOEZBREY4MDA4CitBREUwRTU4MQorNDg5N0JCMEFCQzQzMTk4QjVFOENDNkZFMjYKKzg4NDA0MDBCNzEwMzE4OTMyRUREQkJENDlCMUM2RDYyOEJCQkQ5QTVEMzg5MzFCNjM2QTA0QTc5NjY2Q0I4RkMwODE0QkZCNEQ2RDJCMzdBRDQ2RDAwODJGMTFCNzdGNEJBRTAzNEEzOTJBNjQxMjZDQUI5N0ZGMkRGMzUwMDJEQjc2RTE4NDgyREVCODM1MURCQzExRjBDMzU3QTYzNUQKKzhDNDRBQjI3CitDMDkyRTVCQzkzQTlCNjZGOTdFRDYwMjg2RkM4CitDQkI3MTA5NUIwNUIyQzNCQzFFNDE1OTRGNDlFODBCOTRBRjI5NTEzNTQ4MDg5QjA4MTI0MDI4Q0JGNkU4QjAwMTQ4NTI0MDk5N0M0QjlGNTlBNzE1Qzg1Mzg4QTFFQTA1MDE2NDQyQzVCQUJGQzQ3MDIzNUZCQjEwQjlENTEyNTA4M0IwNzU1RjE4OTVCNDM3QjdFNDU2RTcwN0VBOTVCQUZGQjcxMUREQzdEQkEwMUE0RDhDOTM2RTZCRkU1NUE0NThGMUQ2MDkxQTFCMEYyMjIwNzVEMzA1MEY4MzgxRThGQjI2RjcxOUM4QjFGOUQxQkY5RTAxNjU1NkMKKzkwRkUKKzQ5RTVEMjIyQkZBOTBDQzMxMzhFRkEyNzVEOTQ1RTI3RDUyODdFNENFODY5OTZEMEE4MTRGMzcxQ0Y2QkQ2OTVGNzE1REMKK0RDMDJBODRDCiswRjdCOTg4MDQ0RUI3NzJDQkZCMTdDMTE0NgorM0EzOTNFRjI2RDg5M0QxNkVGRTFDNjQxMzQ1OUMyM0MwMTg2NzYxMDY3Mjc0RjhGMjNFQkQzMDM2RjRBMUM4RTE0RTUyRjc4Qjk2MzU2RDEwQUM4RDhEREVBQ0RCQjdBQzQ2REEzQTgyMUVGCiswMjA1MzQ5MworRDRCQjNBOThEQzYwMTA1OTU2MEM4OTY3NjEzOQorQjk1QjYxNzAzNUY1MTVDMDI5OTM0MERCNERGMjQyMkJBMTM2NUVGMEZGOTQxMTg5QUI0MjQzQkI1QzY5NzUxNTlCMkJFOTFEQ0VFNEQ2RThDQjg4QTNGNkZBN0I5OEU5NjNBOTI5MkUwM0Y0MkI1NTQ4RkQ0ODgyRTk3MkZFQTBCMDBFQThFQzBFQzEzODIyMjRDREZFMUNBMzQzQTg5QUQ5NkU1RTQwNDM1ODBDMzdBMDdDOEQ1QTIxRUFGMjM1MzI1Mzg1MzRGMzU2QzFBQzYzQzZCMkNEN0JFQkFDNERCM0M5NzVCQUE0NjkyQTcxQzBENkM0OUZEQUVFCitGNEE0Cis5MTM1NzlCRkY3NjBCOTg5Qzc5QUVGRUY0NDUzOTk3MUFCOTQ1NkY1MTBGQUI3OTcwMjNEMzI4QjY1M0FCMAorRkZDNUVEOTEKKzJDQzA2Mjc3REQzNkFGMTA1RDI5MDYwMzdFMkIKKzg2Qzg4RjNFMjhDREQxMjc3RTMxRkRFM0FDOTdCQzA0QjQ1MkJBMjZCOTJCQkY3QkQ0MDkyMjc1NkFCNkEyNzQ0QTdDRjZFNkU2ODUxQkE5QTg2N0MwQTBFQkUwMjVDMUQ1N0ZEN0I3NDQxOURDNERDMzg1MTQxOTRCNjIwRTlDQ0QzNUU0MzIzNzRFMUI5NTA4RDY3OTM2QjZFM0Y4MEExREQ3MDRCOUU1MzBCODhGRTRCQzkyMzM2ODNEQzMwODdEODM4RTVGMEVERDdCQkZCOUREMUNBNAorOTQwQzAwQkUKK0E4MjA1MUE3QkIwMjM2ODQyNUE5RDhBRUQwCis4OUFGNzdGMDY1MTU0M0Q1Rjk0NDUyODU0NTdCQUJBRjI0ODY4REY4ODc2MTA0QjFCNTVBNjM2RTBBRjYzQzQ2QTQ3MjA5RDNCRTZBMDlBM0VDMkU1M0IxNEEyQjFDNEU0Q0Y1MDdBNDQ1NkE0QUI4QTA5NjMxMDgwRkE2OEZBN0EwRDQ5NEI5OUUzQQorNjNCNjVGMkIKKzJCOTQwNDI2MjhBQTU2MDc3OTI0RDE5N0U3MzkKK0MxQTFFQzcwRTg0RkU4OTMyREE4OUZBODIxN0JCMTc2OEM5MDcwODAyQTBBNjE4MUVGRkY2NTY3RTJEOEU0NzcwMzhBRTE0NEQ0NkFBMjg1N0EzQkM4OUY2N0FFMkY5NkIwRjdGRUM5MzYxQjdFNUM2RTBGMzg3OUU4RUY3QUU5ODQ3NDI3NkM1RDEzN0YxQ0NCMkY5RkQ1OUZFNTM1RkZDNTQwQjBCOTcwMEQzMkUyNzY2NERCQ0VENDM4N0I1RUY1MDY5M0EwRjJBQjcyQzA1REEzQ0U3OTlGMTYxQzRCNTBCMTBGQjdCRjVBREUKKzBBQ0M1MjU2Cis5NzEyQjYwRUE4RUM4N0IzNTA2ODJCRUU3RQorRDU5RDRCMkZDODgzMzdGNUUwRDM2RDJEMzQzRkExODQ1MENGODEwNThBQTNCRDVGQTE0OEZCQkZFOURENDQzQkY0REI3NEY1QkU4NkM3QUU2ODE5N0VBMjY3RkYxQUI5MzQxN0FGNTU0NjJBOTMwNkY1MkU1OTAzODg5RkFFQjI3M0ZGQzU1MUY0QkIwMEM4MEFBNjY1RjczNThENEU2RDk3MjdCRTM0QjFBMzA1Cis3QUMzNUI0NAorNUM0RTE4OEUzNDcxNDQ3QTAxRUUyREY4RTQ1MgorMzgxMjI5M0E2RUE0NUQ2NjE1NUI2NEFDNTQ1Q0EyRDExREY1QTIwMTJGMUY0RUM4NkM1QjVEODQ1Njg5NTgwNDBGOEYyQkUyNkUwOThEMTY3MEJGN0U3OUY5RjY2ODM5MjlGOUQ3MzVFMzI0NEIzMjI2NkMxOTUwRUUyMjY5ODhDMjVCMjA4QTJCNDQ4NUZFMjVGOTZDNEZFQUQzQTMyQzk3MzNGMjUzOEVBQzc1RTZDNzYyMDc2OERFNzc1MDE4NjM4NDQ4NENFM0VENjUzNkE2MTE2NjkzN0RFRkIxNkI0RDIxQTc0MjA1NjM2MjEzNTZDMENCRjkKK0I5RjhFRUMxCitBREIwRDNFRUY2NDgyMjU4QTcxOTQ0QkREQQorRTFGQjYwOUZDOTBEODRCQjJERTNDNEU2M0EyREJGNzRERDkwOUIzNDczRjIyNTBENDdGMTY2MkE1NUM5QTM5QkFGMEZFOTU4MDlEQ0E4RENFOTQwQUQ2Mjk2NjZCRkIzNjM3RTNCOTVCNEEwODVBNjE5OTY0MzQwRjE3RDAzQjhENjFEODZBQTNFCis1QkQ2NTYxNAorQjg2MTM2NjE4NzEyMUVGQTlGQUQyQUIzNTIKKzhFN0Y4NTFDRTY4NTUwODNGMkUxRTYwMzlGNDZBRjJENTExQzlBOEI0RUJDOEU1NjUyMTdFOTNGNjg5NjYyMDUwREMwOTU2RUYzOTlGQzQyRDZFODcyNjNGRDYwMkM0MDIxRjIzNDNFMkExQkY4N0QyRjM1RDhCOUNEQ0E5RkVCMUZCRTREMDZGMzQyQ0JDRkJFNjg2RjA2QTRDRURCN0E4MTY5NzM5QjQ4QTBCMzgyNUNBMjA0RDUzQ0FEMEJFN0U1OTIKKzIzMTJDRUNECitEODRDN0ExMDYwMDMwQTQ4M0E5OTk0ODJCRgorNDVBMDAzQjg2N0ZEQjVDRjg4NzE5QTQ5NjQwRjE3NENFOTlBNEQxRkFDN0Q2RTlFODA3QzEwOEVDNjA5QTYzOEQ4Q0VFNUExNzg4RTA1MUZGRTA2RTJGREM0QkEwMzVDNjBGRUY3MTg3QTY5RDZFNEZFQUZCNzM1QTExMUJERUUxMjdGMzdGQzM4RTJDOTVGQjVDNDNCNUJBQTk3NTUxQjI4NEQ2OEFFMUFEMDg3NTg5NgorOTc3ODk2Q0UKKzg0MEE4MUUwN0QzRkQ0NkRCQTFCNzBEMDQ2MDUKKzlERDIwN0VCNEMzMDA5NzUxQzVCRDA5QTA4QzhBNkE3MzBBMjIzMzZFQzM4NzQwNjdCNEU2Q0I0MDE2NkNCQTI3NEFFMDY4QzlDNDM1QzVCOUE3QjRCQTk2MEM0QzU1Mzg4NkE4M0RFNDBDNjYyQzdERUU5ODEwMUI5NkY4Q0M3QzA5NDZCODZCRkVERERGOTQ5OTE3REJGMTFDQTlGRTE1RkJFMTU2RkFCMDhGODQ3NTMxQzMxRjJCODFGMjZENUIyMzIzN0IzNEZENDkyNkY0NzAyOUZEMTYwNUVENDZGQkQzMjk2RkFDMDI4OUIxNzExQjU0MjMyMTkyNgorQzFGMQorODgzRkMwQTQ1RkI4REM5RENBN0NFQUM3RjA5NQorODFFQzY0M0UKKzZDOTBENTlDQzY2MTdCQ0Y4NDc4NTFDRTg2RDQKK0UyREI3NjA3OEVCRDc4NUQ1MDE3NDFFMjVCRjdDQTA5Mzg5NEUwRTUwQTdBMzQxRTEwRDJCODY3MDVBMTZBMDUxQTE0NUE4NzZFMjYxM0Q3NTgyMkQwNDA3NzFFRUYyM0UyREY1MTE2N0Q4OUJERkY3MTFBQjIyREQzMzY3NkYxMjZDNjcyODYyQ0JGNDQwQjk3OEUwRUQyREY0MTlCNTNCMzk2NUMzODIxRDc0QUYxRkNFNjY1NTg4RDQxMzE2Qjc0NTIyMEU4NTkyNDE2RjNBRERFREE0NUY2RjZERjdGOTBFQUEwQjIxRUJENEM2NDQzN0U4MTgyQzYzMworMkM4NgorOTRDMjMzRTcKKzVBQjQ4RkMyOUM1RDYwOEM5MDEzNUE3N0I2NjgKK0VERkUwMjhDMUM4NjlFMTIKKzRDQjdBQ0UwCiswMzY5MTFFNDIxNDZGMzQyRkU3NzNERjU5RTRFRTFFOEE2QjVDRDhFRDA5QkM2Q0FENjlDM0Q3NzkzNDkzRjZCMEQ2OQorODY4QzE5NzZDRDlBNEIyMjZBRTMyMUYxOEZERDhFNjFEN0NEQkI3RTIyMTI0RDg4ODRGM0M1ODBBNzMxMjJBNjYyN0ZERjYyNzVDRgorQkJGRjhDNzEyNjZCNEVGODlENkZENkQxRkZCODZFMTlEMjMxRkMyMEY3NzU0QzJGNDAyNDc3CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ3IHB1dAorZHVwIDMgL0MwMDYxIHB1dAorZHVwIDQgL0MwMDY3IHB1dAorZHVwIDUgL0MwMDY5IHB1dAorZHVwIDYgL0MwMDcwIHB1dAorZHVwIDcgL0MwMDcyIHB1dAorZHVwIDggL0MwMDc3IHB1dAorZHVwIDkgL0MwMDc4IHB1dAorZHVwIDEwIC9DMDA3OSBwdXQKK2R1cCAxMSAvQzAwODQgcHV0CitkdXAgMTIgL0MwMDk3IHB1dAorZHVwIDEzIC9DMDA5OSBwdXQKK2R1cCAxNCAvQzAxMDEgcHV0CitkdXAgMTUgL0MwMTAyIHB1dAorZHVwIDE2IC9DMDEwNSBwdXQKK2R1cCAxNyAvQzAxMDggcHV0CitkdXAgMTggL0MwMTA5IHB1dAorZHVwIDE5IC9DMDExMCBwdXQKK2R1cCAyMCAvQzAxMTEgcHV0CitkdXAgMjEgL0MwMTEyIHB1dAorZHVwIDIyIC9DMDExNCBwdXQKK2R1cCAyMyAvQzAxMTUgcHV0CitkdXAgMjQgL0MwMTE2IHB1dAorZHVwIDI1IC9DMDExNyBwdXQKK2R1cCAyNiAvQzAxMjEgcHV0CitkdXAgMjcgL0MwMTIyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xOCAtMjA5IDkxOSA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjk3QzY0QUExMzQxMzc2NTQ0QkM4M0NBQjNGMUQzREM1M0YKK0NDRTZEQTE0N0NENzUzOTQyNEU1MzA4RgorODU1NjNBOTg1REU5M0FEQjE3Cis5QTlBRjg4OQorRjJCNUE0NTlFNTBDNjVGN0IyQzdCNTk2REIKK0I4QUY2NEVDNjdFNzJFMkEzREE5NEU3Qzg0M0JFNDQ4RTIxNzAwNjFCRDZBRkUzQjRDOEIKK0ZEQjk1RTBDCiszRTAwNjZBNjI2RTA1MDMxRUE3REVCRTM5NgorMTE2MjMwRkU4RkJEQzg1MUFFRDI1MTNFODEzRERBMzMyRDBEMDU4RjYyOUY2NkNBOTUzNzhCMjA2RDk2Q0M0RDAxODQ5OTEyCiszNjY1RkNCQgorNEQzMTJFQ0UxQUI1QTkzODcwRjcxQUI3MEFEMQorQzY2MTVCNTEzMURCNjY0NjlGQUE4Q0EzQTdEQTNEMjMwM0U3NUFBRTBGMUIwNTE0QTJCNzFFQzc1NzNCODhEMzZEMTdDRThDRjY1RDJCM0Y2RERDMUEyODcyRUFDMEQ0NzY2NTMyRkZEQTZENzA3Q0IyNzA5QzVERjk2QTVENjM4ODkxMDg5QjFFREJGQThGNDcwMjlEMDFGNTAwNUI3RTFCMkY4MjA4QzBERjNGRDU0N0E4RTQxNzQxMEMzQTQ4RkUzNDRBNkRGMjFFMEFFNworQ0YxQjREMkEKK0EwODFCRkFEMUMyQzg4NTI1OTQzQkUyNkQyQjAKKzYwQzI2MzE2MjU3QTJFM0I1OEEzMDMyNEU0MzZERDZGRkE4M0Y2Q0Y2NDNEQkUxNDU5NURGQzc5MTcyRDg4RkFGMThDNEE3MUMzRkNBOTYxOTU0MjBCNTQ2MjZBRkE0N0E1MUZCQ0IxODhEMDE3RTk4MjJERjY1OEM1NjQxNTQ2NjQ3ODUzQTg3MEM2NUFDM0M5RTYwNjI1MThGMEI5OEZCRTIxNURDQUZGMUFGNDIyRDg5NUY0NDVGQjBEQjEyRTYwQjkxMDBBNjZDRDM1QTZGOTYxOUI3N0U4REYKK0I1MzkzNEYwCitGNDMxNzkxNzI0QUQyMTM4NUNEQ0NBRjcwOTQ4CitBNDQ5MkI5ODJEQzg0QjA3Q0E3NTIxNDEzMjhDRjU3MkM3MURBQkRCQTJCMTQyQzM3NEJDRkNBMkU1QkRCM0I0NjhDOTNEQ0U0Qzc2NDQ3OTE1RjcwRkEyRTg0Mjc3NzQxNjU2REZENUZBMDA4M0IzRDUxMjAzNDRDRDZFQjcwMUM0QTlEQkJBREQ3MDBDNjRDRERFREU5Q0E3ODQyQjYyRjA5MkFEMEYwOEFFRUVDM0Q5NjQ0RDExOUM1ODJFOEMzNkYzNENENworRTQ1NTQ2MEMKKzI2QTZCN0VBN0M3ODYxNTU2MUUwMEU1QjQyRDUKKzY4NzlBNEQ0NTM3QjNEQkNCOTAzNkEzMzFGNEE5RTE3MTc1RkY3MzVCMDU3RjgyQ0REQkU0NDg1MkJEQThBOEQ3OTM1REI3MDQzQzVFRTI4Q0Y0REFDQzQ0MjI0N0YyQzg2OTczRDg2NjU3MjcwMzk1MDQwNEY1RjA4Qjk5QTZEQjA3MkY5MjU2OUFFODY1NTg4QUJGNjdGQTk2Q0I3RjFGMjNBNjhFRjk3MzM0MjYyODM4OUEwN0UzRTBCNzNCMjg4OURCODhDRjRERTM3OTc2QzM0NzlDNjMzOTE4NDQxNzQ5RDUwNzU3MUIyMTEKK0IxMEUwMUQ4Cis3NkE1MkJFOTU1N0Q3M0JBNzdDRTA2MUJENDhFCis2RkI4MDE0QkQ2NUM2Mzg0NTI2OUVFNTE5Q0EwMzQ0ODk1RDIxOEQ1RjU0NTQxRkU4OUFERkRGNzk4MEQyNEY3M0ExQkFDNjlDMTI2RjczQjRERjU2RjlBMDhBOUUxNTNFNUY2RURGMzU0RkJBRjYzMkMwNjVGQzQzNDAwOTE3Q0NERjgwOENCNzFFRjNCREE3QjdDMDY4N0YxMDg3RDcwOENCODg1RjlGRjY3Q0QzRjFDMEY0NzAxNDkyRkFERjEwOTA5RjY0RjE2QjBERTJDMjZGNTBGMTkyNworMjM3OEQ4MUYKKzg2NTdEMTZERjg3RkE3MkMyRkY4N0Y5RjhBCitDQzA5NkQ1MEFDMDcyNTA3NTI3ODVFQTI1N0M5QzFGOEM5MEJGMzJDNEYyQjQwOThFN0JGOTNBRTEzMTcxQTMzQThFQ0Q1RTczNTczNDFCREE1QUZDRkUyOEY4RTREMkIxNUZDNUY0NTdGODcwQTFBNEMwOURCRDQ0RTZBOUY2QTkyMzlCNUY0QzE0MDZGQzVEQTQ2RTlFREREMEEwMjU0RDUzQkVERDc4NTYwMzU0Mzk0MUE3ODQ2MEVGQzRFCiswNzU1NjBBMgorOTkyOERCQjI4NTJGMTVFNTUwQzJBMTVFMkY3MworOUQ3M0Q0OTNBMTVERkZEMEZDNjQzMThFRDFBQ0FGQUY1MTI0MDNBNjIyNUMyNjM0OEYzOEJEMDE2MDdFNzRCM0I3MzdGMDBDOEVGQjg2RUY2NjI2RUE4MTVCQUI0OTMxMkE1Q0M5MkI2NkIzOENBRTQwMEFBNDU0RjJBN0UwODg2MjY0REZEMkM4MEU2QzVDQTI0QTFCREE3REI2NEFBQjg1OEI4NjI1OUUyQTA0MEQ3OUEzRUE5MTc2MzlGQzY2QzQ3MjFGQkYyRTFDMkZENjgzCisxRkJCN0JGNgorQTY4QjNEMDdGRENBNUVCNzM2NTQ5RkUxQUIKK0U1OEJDNjI5RUJDNUJGRkVGMzhCMTlGQ0REREE1MDg5QzMwMDA4QzRDNzk2MkZBMTNBMUZDRjkwRjYwRjBDNjcyNUI0REU3QUM4NTI0QjRDNUEzRjBFOTI4NTBDODRGRDMzOEZFQUNCMTRCMzQ4MEFBQTMyNjA1M0NBMzdENDIwNTRDNTNEN0YxQjExNkZCMjE0CitGREZCQTFCMAorQzcwMTQ0NjQ1NjU1RTg2OEMzRDk5QjEwNjhBNAorQUM5OTI0RjU1OTcyMzdFMTk5MEJEMUJCNjY0NDQ0NEFCNkMwREI3MEFBRTY0NzBBODI2NTE5REY3OTM0NDA4MTg2QTFCNjlDMzQ3M0VCNEJEODZCNkE2MDkzRTgzQkU0OTYwOTVFNkFCQkZFMzQ3N0EzNDMwREFENkNFQTUxOUQzRTVFQjk4NzYxRTc5NkQ3NDg0MkQxMDM2RTYzNkY5NjIzQkVFNUZBREJFREU5NDMyQjQ3NDhEMDQxMjA1RTVCNDYyRkQ1NDY0NjQ1Rjk4ODhBRjJBNTY0QUVDMjBGQUUyNjUwMTc4M0NEQzY5QzIzRUQ5RUJCMDgxRUEzCis2REI5Cis0NkFEMEQxQworOUE3RDEyNzUKKzMzM0ZBRTBBQTA1MTJEMTYwRDI4QTZCMjEyCis2RUM5REI5MDE5QTczNEUxOTdBRThEQzUwNzc2MEE2ODEzQUZCQTQ3MjVCN0E4RDJFRjE5N0U1Njc5NDA4REIzM0Q2Mzk5NURCNjQ3M0M5NzlBODBGOTlBNjg0RkE3MzM3NjZFNTQwMEFEOTI5NzNEMDZBRTZFODVERTMyQjI2REYwMjhERjYxRENGQ0I5ODRBNTc2RTFBRDRFRDM0NDMyNDlCOQorNUMwMTNEMjMKKzk2NEQyMDE3MzhCNDFDOTY0OUMxMTVGMUQxCitFNDU1Q0E4Q0ZGRDI1RTYxMUI0OTZFNjVFOUUzMTA3RDdBN0IyMkIyNDRBRjVGODZDQkFBNDYzNjZGMkRFRkZGMTZDMTUyMTk5NDA4RTA2N0I4MTUxMDdBNjVDODkzODM0MEIxQkUxMjEwMDVFMTFDQUNDRUFBMTU1MjM2Rjk3QTlDREI4NDk0ODA0NDY2QUEwRUU5NjBGQjU2NTRCRDk5QjhBRUNGNERBNjJDQjMwMTcwQzIyOTRDCiszMzUzNTEyQgorMjc2M0I2MUZDOTgyQUFCQ0I0REU2MjU2NkQKK0M4MzdBMjhGNzQzRThFOENDMTgwOTQ3M0REREM5MDRGRUJCQzg3OEEwQzA2MUJCNzFDRjhBNUI5NDY3Qzc5NkVBNkU1MTlDMDBBMTIxMDc2QzBFRjcwMEM4MTVERDlCRTU2MEE2OUYxN0E3Njg4QTEwQTY0OEYxMTNGNTg0Q0QxODk3NTVCQkYxNzA4M0U0N0NEODNGNTc4MkM0MDg3QTgyN0M0OTJGOTg5RkFFNUFGNUNEOTM3RkEzRAorNUI3QThFOTEKKzk2QzkwMTlDM0MyMDY0QzE1OEYzMjBBMjk4CitFMjRBMzg3RUZDNUNEOUJERjlENzE3NjdERUJDODEyNDc0MTg2M0UxMjA0NEMzNkYzQkIzNTlDRDQwNTRDMTcwQjgzQjAxOTZEOTYyRUUyNjlERDc1Qzg3RUM2MDg1NDNGQTMwQzY0QTFFNEM0RDc1MDFCQkU0N0EwNjQxOUM1MTE4OEVEODBDQzBDOUU0NkIwRDgwQkU1NDEzOTAKK0YyRTgzRDk1Cis0RUQ5NkVCMjRCMjQ5M0U5NEI4OUNEQTNDNworMTlEQTJEOUE1Njg0RTlCNDI4MDhCQzU3ODk1OTc4NkVERUIwRTU1RDZGNEU3REREMDBFNkY2RUNEOEQwNDI1NkQ0MEUwODYxMDNGMzEzOTFGRkEwQjE3NDY5QTk1NjBEMjhDMjBDMzIKK0NGRkZCMjFFCisyRDczNDlFMzc2Q0Y4ODZGQ0U4N0ZFMDJGMjlBCiswOEI1RUFDRDg2MTFFRkNFMjI1ODNCRTkzQUJEMTVGODgwNzBBNEFGOTRBMzZBNjA1REMyNjU2MTQ5QUQ5Q0ZFQzkyMTNFMUFDRTc1QTQzMDI5NzZCMEI1N0RDMjFBMTg4RUUxN0Y5QUFERDlDRjk1MjExREM5QkQzNUU1NzdCREVCOTAwQUM3QjE4NUNBOTIzQzVGN0VGNDNERjg2MzcxQkI2Njg1QkZBNzRCOURCMjk3Nzc1OUJCRjlBNEQzOEQxNTU5MkZEMzVCQkU4OUQwRUUxNTQ1NzlDNDkzNzU3MTdGN0MxMEMxMkRGNzMxNTJBQzI5MkYwMzU2REUKK0QzOTMKKzZEM0U1N0I0QTk1Q0EyRDZDQUQ3MTRBRDZBNjFGQUU1QjI2OTRFQjMwRTcwM0Q3QzRFQTVEOTk1Cis5Nzk5NjA4MQorMTEyNDg2OUZBQjZENDdDMjlENUZDNERFNThEQgorRDJERkRDRkNBRTBCQTc3NDBBMjRGOEQ2NEEwRjhFRTgxQUE2QTY0NEY5NzUxMTdDNjE4NjYxRUQ4RjMzRjhDMjlBNTQxN0M0RDkzRDU2N0Y4RUQ2RTI1NTU5MTA2Q0JEM0Y0QjIxMzVGRTIyNEIxRTIyRTQ4RkY2NzQ3OTdFOTc4RDVCNDc0OEJBMEU4NUM5QjFENTgyMDVERTUwNzAyQTIzRkUyMkZERDNCNjRCNDJDQTRBRDU2MzBFQzRDMUQ5RjY5MUU3MzY1MEIxRTUKKzM5NEYwRUE0CiswRDEwNjM2MDdBMTY2MzAyQTY3QjQ4NTg1RgorQjBEMEVCNjBBQUM3MzQ5MzIyODRBRjIxODRERDdENkVGNUFBRkEzMDgxNkI4QzVFNzJBOUIwMEQ3Q0Q0RTI1NUY1OUYwNUVBMzA3NjM0QThBOURCREQ1MzlDRUEzREVGODREMTZCODRDMDVCMUE4N0Q0NTA5RkRFREU3MkM1MkE1Rjg2NjczMTc2OUEKKzgyMDIzQzFBCiszMDNBOURDNUZFMzIxNDUwODc0QzVDM0NDNjg5Cis1QzA3MTdFMjg5N0NDQTVDQUVENDNGQzc2NDBGMEFGRjNGMTEzRTE5N0I4N0FDODFDM0JBMTM1NTgzOTA2ODc1RTMzMDUyMTJFNDgyMUVDMjI5QUUzMjYwOUY4RDgxNjQ1MThCQ0E5MkEyQzNCMjUwNUMwNTFCRUUzMTZENUIxNjk3QTIxNkIxRTExRDZCRTc3MkQ4QjZCMENEMjNBQTQ3NEUzOUNCQTFCOUJDODIwQTUwOTdCMEQ2NDJBOTRFQkM4OEVBRTcwODMzQ0FFMUFERjBDMzM1QTZFMkM2ODQ1N0U0Cis1RDFDNjJFNworODJCQkMzODFGMTk5MDNBOUE0Qzc2RjRGNkYKKzcyOTgxMTZFRDI2NjQ1OTlDNkM3RTU1MzI3N0U1RERGM0RFNjk5MERBNThEMzNFRjE3MTVEOTkxOUM0RTY3NjAxNDBDMUIyNjdBRTI5REZGNzJFOTEwMkFFRTM5NzNDOUU3M0JFOTgzQzkxRjU5NDdEQ0E0OUZBOTI4M0I3QTAyRUM1MTE5QTMzQUE1QTE4MTlCNDNBNjg5MzRBM0UzQTE1NkFBQzlGRUQ4MzZFQ0E1RjMKK0EwMzMxQTA1CiswNzRBNjQ5MEJDQTA4Q0M5QjkzNDE2QzRDRjgxCisyNDlBRjNERDlCRUNDQTRENDMxRTIyMDY3NjAyODRFMEYyMkRCMDc2N0ZCRDE1NTAxMkUwMkE4OTBCQ0M4MUQ4NzAzMzBCRTNFN0JDNzU2QjkwQ0YwODNDMTAwQzQ3QjRDRkQwNUQ1MDc0N0FCRDNCQjQ2NEJERTE2Q0M5MjY0Q0EwNThDRDIzRDA2OTEwOTJCQTA0OTQ4M0QwOTJFNkZBRkYxMzVCMDcyNjJBRTNEN0EwMkUxRkE4OTBCQTQ3MzFEMDBFQUZCMjVBMzFBN0UyNTZFOTM1NjVCNEUxMTE1ODI3REEwMEU5RDE4MjM1QjAzNAorODAzREMzQjcKK0IyRDE5MjAzOTE2RjVFNzYyREExOTc5QzFBCitFMDI5NDNDMTk0NjI0ODY0NjUzRjczNkY0N0MzM0VEOTAwNUU4OTQzODc3REQ3OTZCNTVDOUE4QUE4QkNBQUM3MzEzRTRFN0U4NThGMjkzMTNGMEEwRjU5OTIxNzY0RTA0NjAzMzA4QzhCNTUxMzQwQTVDNTRFMTI1RTI1QzkzQ0NENkVEMDk2CisxQjQ0NjA5MQorMDIxN0MwRTEwQjQwODI3QzEwODFFMDNGQTEKK0Y0RjQ4ODA4ODBBOUVBN0FCQjkxRUJGOTQ3NUQwRjM5QUQ3MjZEQzU4MEU1Mjk3NjRCNjIwN0I4MTk5MTUxN0M4RTBCM0E5ODM5NDNBRDFBRkY5M0YwQUQ5MkEwNEZCNjczOEI4NDY4NjZERDc5ODlCMTc4OTMwQjk4NEMxNURDOUJDQzRGNTMzNTZEMTkyODI0NUVDRDlGRkU0MDBFQjFBNTc1RkIzNTIzMTBERjE5NzFDMjlGCis5RDlGMDRFNAorQ0I0Qjg4RjBFQkJCQkQ1MEI3MjI1NUEwMTZFQQorOTI5MUQ5MzJEOUMzMkU1NTY3Qzg1RjFGNERGNkFCNENGOUQxNTJBMTM3MzZCMUI3NUVBQkYxNTVFNDg5MUJCRDkyQTYwN0U2M0YwRTE1RjNFNERGRTYwQUJFRDM1MzI5REMwNDY0QjIwMDQxRDZDMzJDOTY1QjI1MUFFQTcxQzIyNEFDNzRERUI5QTU2RURGODVCNEJBOTlCNjFDRUNGNDBENjVERURBQ0E4RDJEQ0U1RkEzRDRFREJGMTcxQkU0QkIwRDJDRDRCMjVEMjg2RkVBRkNEMjNBMDlGODVGQ0VEN0Y4MUI2QzdFNEEwRDYxOEUzQkVEMEU3NkIxCisyQUY2CitGRQorNDI5Rjg5NTAKK0NGQ0NFMDdCQjAwQUQ4MUUwQ0QxMjkzQUNFCis4NDg1MkFGMzE2NUU0MUM2QkUyNTkyOEMwMUZERDlFMUYyMTRBM0UxRERGQjlERUVBNkU2Q0E3RDZDQjAxNkI1OEFCRDYxNEI0M0MxQTAyNkEwM0NCQkM3Qzc2RjM4NTNERDY2ODVGRERBMDk3RkE4OTA3QzdCMzIzMworOEZERUQ0QzMKKzFGRDA0RDNGMjRGQTQ0NjIxMTg3RTAwNjJBNkUKKzc3RjMzRUI0MDlBQ0MzQkEKKzEzMjdFRjE0CisxRERFODVENENEM0Y0MjAwMUJDMUZDOEM5ODQ0QTYzMDJDN0UyQzgzMjYzQUFBQTgxQTc5QzFGNDIyMkUzMTg2OTNDRgorN0JBRjk4MzNENUI3MDlCNzVERUZBN0FGMDIwMjNEMzZDMjk3MURBN0RCMjNGMTg3ODQ1MENGMUMyOUJDMTg5RjlDODM1QkIxMTRDRgorOTdCRDE0MEJBODVBMDM1NzA2Rjg4NTREN0FDOTFCRkI3NERCQUE1OTVDMDQxNkQ2NDFCMUNFCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hpCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoaQorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGkgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDQ3IHB1dAorZHVwIDIgL0MwMTAxIHB1dAorZHVwIDMgL0MwMTAyIHB1dAorZHVwIDQgL0MwMTEwIHB1dAorZHVwIDUgL0MwMTExIHB1dAorZHVwIDYgL0MwMTEyIHB1dAorZHVwIDcgL0MwMTE0IHB1dAorZHVwIDggL0MwMTE2IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xNDQgLTIyOCA0ODAgNzI0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MkQ3NDgyOEZGNzNDN0VDNzBGNTM3MEIxQkI5OEVCRERBQworNEUwQkZDNzE0NEU0OTVDQjE3NUJCM0JBNzAKKzMwM0YyQzAwMUE2ODcwOUM5RjY3OTU1MkUxQjUxMUUzRjM0MDg1MUYyOTlEOTY0NjE3CiszRjY1NTMwOAorNzczQTVCN0VBRDhGOTM4NjIyRDZBMzY0RTY1QgorQUFGRDc2N0Y0NjRDRjIwMkE0RTMxNkZFRTFCRjM5RTA3NjQzRkRBMUU4QTRGMDA3MDE1NTcyQTI3NjFDMEEyOUM4QzJFNjgxMzVBMzVDNzBGMzM0N0EwQkY2Q0UzNTg5NjNFQkJDODdGRTIyQTAwNzNBQTREMDkyMTk2MjZDRERGQzEwRUQwQzJBMjZFQjlCQkFEMTgzN0U3RjMyNUIyRUE0MTlCMUY1QUM5MUYxOEEzQTk5MDI2NzFCRjNBQTQyREQ4ODM2NENBRgorQUUyNDQ0OTIKKzNCQjA1NDVCQzdEQTcwMjRENEQ2MTkyRDExMEQKKzA4MzgwNEVENUI1NTBGOEZFMzA2Mjc3OTY0RTVFQUNDMTM2NTYzOTQ5NkM1QjBENUQ0QjE0N0RBRThBOTY2MDE0QzkwN0M5OUVGNTE0MThCRTRDMEQzNDAwMkMwQjkwQUY0NDIyNDY4RDEzRjFFRTM2OTlGN0FBQkNCMzI1MUNCMjMyOTFDREQ4OEFFQTQ4RDU4MTFFNjkyNTM1MTlDOUNCNjY0QkU3RDM3MzRDRUMyN0ZFN0REMTM4ODkyMUM2QzI5QUQ1RDA4RjNBNEI1MzIyOTdERTQwNzE4MDRENjRGQTAzMjExNTQ4Q0RBNDY1REU1Qjk0MDgwNTMwRgorNUMwNQorRkZDMkExNzcKKzQyRkFFNDE0CiszNjlFNUI1RUQxMDY2OUIyNDRCODhGQkU5MzJGCisyMUVFMjdFRjU5MjgwRTk1NUY3REEwQUJEMTNFNTc0NjBBRkE2MjJCRTJCMUNFRDdDMzZBRjczQTgwRTlGOEFDODZGMDI1MDJEQTNGNkE5RjQzMjQ5NUMyQzUwRjQwRTUyN0ExQTYxMDJCOUM1Qjg5REU1OUE2QUQzOEFDOUI1MjIwNDc4QUExOTNENjVGMThEQjc0RTc1REQ4MEJCQjU0NDAyMUFCOEExMUQ3ODA4Mjg4NDQ4NzM3NDNCRDkwMTg2OUNGN0FGM0I4QUZERDJCM0UzRTNEQzFFMjcwQzUwQjY2RjMwQkRCQUExRDVEMERCNTkwQjQ1MUI3MDEKKzJERUQKK0E2OTMzOEE5ODkxMkY5QkI3RTYyNkU2NEJFM0U2RTI2QTlEODM0NDdFRkMxQzYzNjdGCitEMTA5Mjc5MworQjI5RDNFNkMyNDc1RDk5OEI4N0IzRkRBMkMKK0MzNDcyRDZEQ0VCM0YxOTQwM0Y5ODI3N0JEMjI5MjMzQUVCNzY4OURDRTZFQTI3RjMxMjBDQTYxMTlBQTZFQjYwRTcxODM1QzE3QzIxMzRCOTZFOUYyREI3RjlDMjU3RkRFRTJCNkI5NEM2OTFCMEY2MDBFNEFBQkE5RjkxRDc3MkY0Njc5QjI5OTgzNzUwNjNFMUU1Njk2QTFFNEE3OEM0RTZBNDBEQ0NDN0JBMkVDN0JFRTI1QkZBODlGMUEKK0EwMTM4QUYwCis2MkIyRTdGOUI5M0VERTM2MDE5NTQwRTM2QUE3CisxRDQxMTFDQkIxN0Q0MEQxNUZEMTFDQzdBNjZDMkREQzU5OEM3RTk0NjdFQTQ0NEY4NDM1OTAwQ0JCQ0RFRDc5ODBFOTU1OUM5NzMyRDU1QTVFQzg5NDIxMEQxM0FBMjNENEMxMzRBRjA0NUFDOUFCQjk4MkZBRjY4OEQzM0ExNzQ2RTVGNTg1RUREMzY1OTk3NUE3MkEwNzFFMDI5MjUxNENFNEI4REZEM0JEQUFCNzgyQzg4NTNENkI5QzlGOUFGREUzQzA5OTIyOEM3ODZGMzlDODg1M0FCMTkwQkU1MTFBRERDQTE4RDQ3NEE3MzU3M0Y4MTgxQ0ZCNDIKKzUzMzYKKzk2RkRDNzg3NjAxQzZFMkI2MURGQTE2MzBEM0U0QTYzRDFBM0FCNDc5NTFFMEQwMUU2QzQ0Q0ZFMkVCQkU0REE0RDBCQkYxRkU3MEM1NzhCRTYyQQorQTQ4NjExOUUKKzJDOTZEQTA3NDdDOTZEQjlFRjA3MEY2NEVDCitCOUE2ODA4MUZGQjZEREY3MDIxRkE0REQyNTExREU5MDJDREY0M0I0QjU4NDk3M0VBQjMyN0Y5ODM1MDBEQkQ1MTc0QThDQ0ExNDkxMDkzREFCRThFNDExMjk0QkI3N0Q3NzE3ODYyMjg2OEYwQTUxNzg4Q0E5MzczRjA1OTlGQkExQzk5RjdBNkEyMjdBMTQzNjQzQTY3NEYzMjAzRkEyQzRGREZCMThDM0IwNURFRkQwNjAzOQorOTZCMDZGNzgKKzdERjEyQkZCNDk1M0UwRTc4QzVFMzAwQTM5Cis0QTlFMUREMkQyQzNBQzhBMkU4RENEQzNDN0Q0ODM0RjAwQzU5ODI2QzM0RUFCRTg3NjEwNjUxNjEzMzgzODhFOUI3MkJBODg4NjVBOTRCM0ZFQTY5M0ZEQzk4REM2QUQwMDMyQzQ2QjMxQzJDQTE2NzY5RDM3RUQ0QzgxOTA3MzIwQzFCNzMzM0QzQTdFMjczNTA0QTEzOUNBOTFDNkRGNTE1Rjc5NDVCMkQzRTMKK0ZCNkQyRUZFCis3NTQ5RkMyRUQ4MUY2MDMwNzBBRUY1RTQwMjQ2CitERTEwREYyQjc0N0Y5NDJCCis0RkE2Q0E5RQorQTQ0NDZFODdGOTQwRkJBOEQ0MjU0OTM2Mzc5RDEwMkRFNDMxQUZFOTg0NDAyMjc5Mzg1QTczRTFDNjMwRThCMkZBOTgKKzM0ODU0RkYyOEZERjNCQUI5MTYwRTczNjdFRDVFNTFCMjQ5MUQxMjBFQTc5NDBBOUNDMEQxM0YxRUFGM0Y3REI4RjdBNkUyQzVFNTEKKzA2NkNERTI4NTdCODk5MTE2OTY0ODQ0QkZBNDU2MDIxNjM4RTgzNUIzNDRCREY4MUJEQjYwNgorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyaSAxMi4wMCAvUFNPd3N0ZHV0Y2hpIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDBhMTExZTFiMTExYzEyMDUwMTA2MDEwNzExMTkwZjE0MTgwZDFjMTYwMTEyMWExYzAxMDkxMTBkMWQxZjFjMTUxOTEzMDEwYTExMWUyMTFhMWMxNjAxMGI+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MTExYzEyMWExYzE4MGQxOTBmMTE+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDA0PiA5NDM0IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA2MTAxMzBjMTE+IDEyNzEgMTQzMSAwIDE3NTQgLTEgcworPDAwMDQxOTE3MTgxNDEyMTAxYjBjMTgxMDE0MTM+IDE3NTQgMTQzMSAxIDMxNDIgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDBjMTQxMT4gMTI3MSAxODU0IDAgMTYzMSAtMSBzCis8MDAxZDBmMWMxNTFiMWUxZDAwMWIxYzFhMjAxNTEwMTExMDAwMjExNTFlMTQwMDFlMTQxMTAwMTkxMTFlMWIxMTFjMTIwMDEwMTUxZDFlMWMxNTBlMWYxZTE1MWExOTAwMGQxYzExMDAyMTFjMTUxZTFlMTExOTAwMjExNTFlMTQwMDFlMTQxMTAwMGQxZDFkMWYxODFiMWUxNTFhMTkwMDFlMTQwZDFlPiAxNjMxIDE4NTQgMTIgODgzNCAwIHMKKzwwMDE5MTExZTFiMTExYzEyPiA4ODM0IDE4NTQgMSA5NTMxIDAgcworPDE1MWQ+IDEyNzEgMjA5OSAwIDE0MTAgLTEgcworPDAwMTUxOTFkMWUwZDE3MTcxMTEwMDAxNTE5MDA+IDE0MTAgMjA5OSAzIDI0NzAgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMTA1MDYwODAxMDQwMjA4MDYwMjA3MDM+IDI0NzAgMjA5OSAwIDM0NjAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMzAwMDgxMjAwMjIxYTFmMDAxNDBkMjAxMTAwMTAxMTBmMTUxMDExMTAwMDFlMWEwMDE1MTkxZDFlMGQxNzE3MDAxOTExMWUxYjExMWMxMjAwMTUxOTAwMGQwMDEwMTUxMjEyMTExYzExMTkxZTAwMTcxYTBmMGQxZTE1MWExOTAyMDAyMjFhMWYwMDIxMTUxNzE3PiAzNDYwIDIwOTkgMTMgOTUzMSAwIHMKKzwxOTExMTExMD4gMTI3MSAyMzQ0IDAgMTcxMyAtMSBzCis8MDAxZTFhMDAxMTEwMTUxZTAwMTEwZDBmMTQwMDFhMTIwMDFlMTQxMTAwMWQwZjFjMTUxYjFlMDAxMjE1MTcxMTFkMDAwZDE5MTAwMDBkMTcxZTExMWMwMDFlMTQxNTFkMDAxNzE1MTkxMTA1PiAxNzEzIDIzNDQgMTEgNjA2OCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA5MDUwYjA3MGEwODA1MDMwMjE0MTUxODAyMTMwZTE4MTUwZTE2MGY+IDEzOTggMjY5MCAwIDM3NDAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxYTFjMDAxYTE5MTEwMDE3MTUxNjExMDAxNTFlMDIwMDFlMWEwMDBlMTEwMDFkMWExODExMWUxNDE1MTkxMzAwMTcxNTE2MTEwNT4gMTI3MSAzMDM3IDcgNDQxNyAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA5MDUwYjA3MGEwODA1MDMwMjEyMWEwMjEzMGUxODE1MGUxNjBmMDIxMTE0MGQwYzE4MTAxNDEzPiAxMzk4IDMzODQgMCA0NTA0IC0xIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICg4KSA4CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzMgcHV0CitkdXAgMyAvQzAwMzQgcHV0CitkdXAgNCAvQzAwMzkgcHV0CitkdXAgNSAvQzAwNDAgcHV0CitkdXAgNiAvQzAwNDEgcHV0CitkdXAgNyAvQzAwNDIgcHV0CitkdXAgOCAvQzAwNDQgcHV0CitkdXAgOSAvQzAwNDUgcHV0CitkdXAgMTAgL0MwMDQ2IHB1dAorZHVwIDExIC9DMDA0OCBwdXQKK2R1cCAxMiAvQzAwNDkgcHV0CitkdXAgMTMgL0MwMDU2IHB1dAorZHVwIDE0IC9DMDA1OCBwdXQKK2R1cCAxNSAvQzAwNjMgcHV0CitkdXAgMTYgL0MwMDY1IHB1dAorZHVwIDE3IC9DMDA2NiBwdXQKK2R1cCAxOCAvQzAwNjcgcHV0CitkdXAgMTkgL0MwMDY4IHB1dAorZHVwIDIwIC9DMDA2OSBwdXQKK2R1cCAyMSAvQzAwNzAgcHV0CitkdXAgMjIgL0MwMDcxIHB1dAorZHVwIDIzIC9DMDA3MiBwdXQKK2R1cCAyNCAvQzAwNzMgcHV0CitkdXAgMjUgL0MwMDc1IHB1dAorZHVwIDI2IC9DMDA3NiBwdXQKK2R1cCAyNyAvQzAwNzcgcHV0CitkdXAgMjggL0MwMDc4IHB1dAorZHVwIDI5IC9DMDA3OSBwdXQKK2R1cCAzMCAvQzAwODAgcHV0CitkdXAgMzEgL0MwMDgyIHB1dAorZHVwIDMyIC9DMDA4MyBwdXQKK2R1cCAzMyAvQzAwODQgcHV0CitkdXAgMzQgL0MwMDg1IHB1dAorZHVwIDM1IC9DMDA4NiBwdXQKK2R1cCAzNiAvQzAwODcgcHV0CitkdXAgMzcgL0MwMDg4IHB1dAorZHVwIDM4IC9DMDA4OSBwdXQKK2R1cCAzOSAvQzAwOTUgcHV0CitkdXAgNDAgL0MwMDk3IHB1dAorZHVwIDQxIC9DMDA5OCBwdXQKK2R1cCA0MiAvQzAwOTkgcHV0CitkdXAgNDMgL0MwMTAwIHB1dAorZHVwIDQ0IC9DMDEwMSBwdXQKK2R1cCA0NSAvQzAxMDIgcHV0CitkdXAgNDYgL0MwMTAzIHB1dAorZHVwIDQ3IC9DMDEwNCBwdXQKK2R1cCA0OCAvQzAxMDUgcHV0CitkdXAgNDkgL0MwMTA3IHB1dAorZHVwIDUwIC9DMDEwOCBwdXQKK2R1cCA1MSAvQzAxMDkgcHV0CitkdXAgNTIgL0MwMTEwIHB1dAorZHVwIDUzIC9DMDExMSBwdXQKK2R1cCA1NCAvQzAxMTIgcHV0CitkdXAgNTUgL0MwMTEzIHB1dAorZHVwIDU2IC9DMDExNCBwdXQKK2R1cCA1NyAvQzAxMTUgcHV0CitkdXAgNTggL0MwMTE2IHB1dAorZHVwIDU5IC9DMDExNyBwdXQKK2R1cCA2MCAvQzAxMTggcHV0CitkdXAgNjEgL0MwMTE5IHB1dAorZHVwIDYyIC9DMDEyMCBwdXQKK2R1cCA2MyAvQzAxMjEgcHV0CitkdXAgNjQgL0MwMTIyIHB1dAorZHVwIDY1IC9DMDEyNyBwdXQKK2R1cCA2NiAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yNTYgOTc4IDczOV0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIyNDJEMkM3QzUyOTg4QTE2RDNBRDYzRkEwQTZBNTMxRjU5OAorODJDN0ZERkNGOUY3N0EyOTVGMTFDRkZCCis1QjEyRkQ0MDMzMjM1MjMyNTQKKzRFODZCQTlGCis4NzJENEU1NTM4NDcyMDBCNDg4QTVGQUVFNworMDFFNzQzODVDMzVENDlGQjNCNkRERUQxQTUyMkEwRkFEQTE4QzFBQTRFMjNCOEMwNzBDMEZBMjk3QjIzQUQ4MjI3OUQwOEY5OTFFRjEwNDA5MTU0NTJGRjIwMEJFNjJGNDM1MDE1RTRGOTA3MTlCOEM1OTlGN0MyMDk1RkRGNzA2MjAwNTlCQzZCCis1NEI0MzNCMworQTlBMkM0RjJCMzAxQTMzMTdFQjJBNjM4NjJENgorNUFGNEU4RDQyMzVGNTM2QUY5ODJBQ0E0N0UxNjgxMzJBNTEyOEI5RDRGQ0Q5MjYyOURDMEIwNzExMzg1ODg2Rjg5MTQ0NkQxMjA0NzVDMTEyQkRBOEYyOTBEMEI5QUUyQTUzNkM4ODY4QzEyREI3N0M5NDQxMzA4MUY3NDIxN0M4Q0I4MzVGNENBNjc4N0Y5Q0ZFRkU4MjU0RDYwRkMzNkJFRThCMkNBM0U5QTY4QjREMDlEMzUyRkU4RjIzMDYwNjA5QkM0M0E0NTBGNjgKK0VEM0E4RDk1Cis1OTEzN0VBNjgzRDMwQkYxNkZDNTFDODZGRQorQkIxNTQyNEJBMDYxNjJERDU1OTVFN0Q1Q0M1REI4MzU5RTZCNkQyOTRBMzA4N0E1MDYxQUMyMEE5QzM5QjlCODlDRDNCNTdCRkEzNjlFN0NBRUYwMUY2MkU1MzA0NDhBMjMxNTY1OEFGNzIzNkM2MAorNEQ3OTkwREUKK0I3OTdBQzFCQTE2OURDQUYyNjQ5NDAwQjRECis5QThCRUE1MEU5NjJDQjYxRkIyMkZCQ0E5QjVFMUFGNjEzRUVFQjNCN0E0NTRCRjQ0MDNDMkM1ODM0NkQ3MTM0NzcxMDdGODY1OERGMjA3MUZDMkZDMTFFMEQ4Qzk3NzJBQTczOTI2OEI2Rjg3NzgwRjhCRENFQTM3NzE2MEJBQgorNkJBRUQzNzMKK0UxNjQzMDNEQzNCQjc1NEEwOEI1ODc0MERDCitDNEJBOTg0Qzk1OTdEMDQ3N0U2MTY3MkZFM0U1Rjc3N0NEQkNFNjQwRjdBMDc1OEUxRDU4RkIwNUQxNzI5MjE1RUZCRTFEMjRBOTJDOUY4RTVCRjEyQ0Y2NzQ1NEMyN0U1OEE5NzUxQ0U1ODNBQTk2MUNCMTkxOUVEQUM2MDYKKzBFN0Q1QkQzCis4RDA2Q0IwRkExODA0Nzg5OEE0ODA4RjRBRkU0Cis2MUU1QTJFRkVEMUQ5RDBDNkI2RTRBQzZFMDY5NkIzMTRCREZBNzEzNzU1M0M0RTdDRkExRjMyNUI0REU0RDQ5Q0JGMDlCMUE4OEEwM0ZERTAyODZEQjhDRjdEQTJCM0E0RjMwMUQ3RkZFOEUzQTJFRTAzODUzQjk0MDIxNDVDNUJDNEMyQjc3NTRGMzMzMUMyNjdCODgyMDgzRDk2NDBEOTQxMUI4NURFMjUxMDBBNTlERDBFRDFBRTAyMDgzOUYwRTcwODZEQTIwNzFCOUI4QjlDNTdDRUFDRTE3RDIwOEVCNjc2MkFFMkM5NjA2RjhGQ0NCOThCMTNDQUQKKzkxREMKK0U3QjE4Q0VGQ0UxNDFENEJCOTE4OTk3OUMxNzJGNjBBNUNDRDZBQTgxRDZGMTZCOTVBNUIwNTVFOEQ0NDY4QzhFODJEMTZFNEMwNjkwQUFBNjIwQTM1MDQ3MjJEMUFCOUNGNzQxNDNGODYwQTAwOERFQjk1MkRBMTgyOTUwMQorNkZEQjk1MTMKK0EzREI0NDI4ODhBQTRENjc3MjY5N0U3OUE1CitGNEY2NUZEQzhDMTRFMjAxRTA4NzQ3REEyNzIxREMwMDM4RkEzNTkyRTJBMTkzREU5QkNCOUM5QkE5RUUwRUNDMzk3QUM4RUQzNzRGM0Q5MDFFRUEyQUQ3NTg2Njc0RDk5REZEOTc1ODJGN0VDRDVEQzYKKzc4RDgyNEM4Cis1RkZENjMyRjIxNUVDN0VEQzU1OUE5RDIzNworMkQ1QkUxRTBFNkE3OUMyRDU4NkUxOTdDNjkzMkRBQUI5QjhEMTZDNjBCOTRFNgorQTNDREUyRDEKKzA5QkYxNzc5M0E3NjY5NEU1NTlGN0I1MzIzCis3QTZCRjA5MEFBOEFFREU0ODZGMDIwMkZEQ0QxQkFFQzYyNDA2Rjk0MThENDZFRTg0QjE3RDgwN0UxRDg1RAorQzhEMzA3NzUKKzNGRTEzRURFODQ0NEY4NjcxRjI0OEQwMkVBCiszNTNFQTgzNDQyNkJERUVGQjg5M0E1Q0NDNkExQjVBRDI1MTcyNDdBNzc3MDI2NjI4QjA0RUY2MjJEOTU3MEY1N0QxRTAyOEJFM0JCRTA1NkQzMTM1MkFCQUQ1N0EyREYxNTk0MUQ2OTY5NENDREUyN0VGQURGOTYzNjJDQjZFNUFDNUMxQTVDQkNBODIzNzM0M0MxCis2RkRCOTUxMworQTNEQjQ0Mjg4OEE3MjJFMDAyNjY2NkFEMzAKK0I2NUMxMUMzQTkwMDQwNjYyQUFGMDU0RTUyM0RDQ0M4M0I5QjM4RkU5QTNFRkYyNjZCRDRDQUI2QjA4NkNBNkNGNDMyOTFCODU4MEU4QkUzNUQxNzE4MURFN0IzNkEzMzVCQkJEOTJCOTlBRDRCQUNBMTVDREMzNjMxMTk5MAorNDUzM0UxQzkKK0RBNTY0ODgwRkQ2ODJDNTc0QTUzMUQzNjE3NDMKKzlDMDA2OUI1RTVBNjk1RjU3NDI0MjU3NDM1OEI4MzY3NkJBODMxNDhEOTRBQzdERTFERThERUIwNDFDQjFDRTI1QUFGNkYwMTE3Nzk3RDkzQTYyRUU5MEY2OTAwN0Q4RTc0RTJGMUU2QTZGNjE0RDcyM0E4OThCQTkwQ0NGMDA3RThFQzAwRUFENDQ5NDE1NEY0Rjc0MEFCNTAwREM0Q0JFRjdENEM1RDQ5QjY1QjJCNDgyRkMxMTU4MzYyQjk3MDZENzE5RDA4NUFENjRBNDJFN0E3RTg5OUFDMzg5NDNBQTVEMUIwNTYxMDhCRjI0RjM2RTMKK0RENTJFNzg1CiswRTVFNjEzQzk2REM4NkY4RjJCRDgzQjJFQgorM0JDQjE2RDY5RjQzNEI4NEVBRDRDQzM3RDlFOTI4QTMyNDU5NEU5RDdGM0Q1MzZGNzlGRjYzMTU4NTlDM0RBNURCREYwNkMxQ0NFMzk3ODFCQkIwODY0Rjg1OEM4MjhEMzVGOTQ4MEVGOUI1Cis4NzI4ODRBNQorOTc1NDM3M0RDNEJBMUM5RDA5QjgxRUM2N0ZCMQorNzZGMkVEOTBBNDRERkYyRTUzMkRCQzgwQjAyNENCQjI0N0U4NjU4RTgyNTY2RTc5NTQ1NTRDRkIzRUUwOTQ1MUMyRjlDMzNFQjc1NjdCNDdFMDM3RTNDNTkyMDc1MDkwMjY5RUZFMjRCRUJBMEM3NTE0RkFBMDFDQkU0RjhCMkNCRUNDRjgxNTk5QjVGQkFCRjk1ODgzRTNGNzM0NzQwRDEwOEE1MDg1REIyQjcxQUU4MzFDRjIwRjQ5NDc0RTVCOTM1MEVDRjExNjBDMTQ0QworMzNCMUZEQjMKKzhCOUFCMTBDRkNDOUU0RkEwMkI3RjRERDYzRTMKKzAxMTc3OUVBN0ZBNDNCN0U2MzdCN0Y3MTI0OThFNTA1MzAyMDNGNzk4MUE0NTFFNzVDQjMzNTAxMjgzRTJEMDczRjM3ODg1QzMyMUY0QkNDNEQwOUIxQUFFMzA5NUVGOTUxRDA4RTU2OUJCOEE1Nzk4MDcxMkVGQjkxOTc5ODNGQzA5NDM4NDU1QUJGOTRFRUNCREY3MTIzNDNEQjNFODlCRkNEQkM5NjVFRTQ2RjQxREY3MjA4QjBCNTUwNDM4RTI1MTI3RDA3N0JGOTE4MkE5RkU1NjI2MTNEOURCQjU1QzRDQjY4Cis0NUUzMUZGRQorOUVGRjQ0NEYxOUY0RkFERTA5RTZFOUI4Mjk0MgorNjdDN0I3Q0ZDMzFCQ0NCMDNFNzI3NTU1RDJDRTE5RTU1NUU1MTc2NjM2MjlGNDVBNDI2QjFERjRCNTA4QkYwMTJGOTkxMEFCQkRFQkQwMUEwNjJGN0E5NDY5M0IxNzJGNjExNTE5RUFEODc4MDg0NTkxMDZBMzVCRDQ2QjdCMUIwNjIyRjc5QzQzMkYwRjQ4QjA3MDVBQzA1RDU3QkE1N0U5NkNGQzM1M0E2NDVBMDRGOTcwQUU4RTc3MUFDOTBFNkI0QUYzNjlGOEY5M0M3MEFDODc2Q0E5NjdDQ0QzMTY5QjJGNkJCMTRBN0NDQUVFMUI4Q0M0QkY3QkRCCisyNTg0Cis3NAorMjU1RDlBREEKKzEzQzZGRTA0NUM1MEIyREE1NjU3QzBDQzcwCitCNThBNTAxODQwNzg1QzBBMzE4QzQxMUU2OTBBMUY5RkE1NkE2OUM4NzBGOTdFRDg4OTY2OTRBQzdCQUZEOUJCQ0FDRUE0RjE1OUVFMUNFQjIzMTgzNEVCRjUwNEVDM0UzMzEzNkVDMzY3MDMxMUM2MThFQTM5RUJEMEYxQzI1MDhBOTFBRjEyNjEzRkNGMjY1QzI5NkZFOEQwRTgzRjQzODJEMEI0NTQwNjJBMzhGMUFCNEY1RDYwREQ0MUFDQ0U5MQorNTVBNkNFNDEKK0MwQ0JDNDdEOENDNzk0MDYwMTZDNzA0MkRECitGRjMzQTk1NDc1NTI1OEI4N0FDODQ2QkIzM0I0Mjc4NTU0NzdBMDRCMUU2MEE5NTdFMDRERDRDRTFBNUJCQjZCRUMyRUMxQTFCRDYyMUNCMUQxQzM3MUQ2REUwOTVCMzEwM0VGRjIwRjlDQzE5RDdBM0FEMUY2NEI3RDdBRDA0QTMzQkRBNUUyOERBNDg5RkI2RkI3QTlEMkZBODFENzU0MzNGNjRBMzg0RDY3MTc3ODQ3MEFCQzIxRkRFQ0IwMjU2NzYxNzgKKzQ3MjFGNjIzCis1OEUxRUYxOUZFNjFERUUwNTFDQkIwRERGOUEzCis5NjNEMEIxMUNCNTlCM0NGNzg3NzhCQUM1ODExRjczNTI4RURERTE2NjlDRUFFRkM3QTk5MzREMTZBQzZBQUVBODhEMDY2ODEzNDJFRjY3NjE0QTYwNTU5NTQ1MUJENDVBOENDQUM2QTc0QkUwRTAwMjFDRTY2OUFGQjg2RDMxRUFENEI3MDRCNjQzNDA4RTE5NjdDMEJEQzI3MjhFOUQ0RDQ5M0MwNzZFNEIwMzE0MTU1REIxMTY2NzY2Mzc1RDI4NDc3Q0E5NEQ1MkRGOUZBQUMyNDA5RDU0QzFDQTlDREU0ODQxN0QwRDI5NUE0OTM4NkYxMkREMjQ0NEYKK0ZFRTQ1QjU5Cis1MDBCQjQ2Q0MzNUI1ODZCMUVGQzI1OEEzNDNDCis3MkE4N0Q1MUU4Njk3MDk5RjhDMEEyRDZFODI3QThGODAzMjVBM0MwMEFERDhDRjgxOEVGMkNDNkZCNzc5RDEwQ0VEMTFDNUIzRjkwRDM0ODdERjVENjE3MTdGRDlFMDQ2QzQzQ0Y3QUVERkNBMjFEMDNENTE1NUM4MjYyOTJFRURBNDY0NDdDNTlDNTdFRkE1ODFFNjQ1MUJFM0UyRDUwQjdBOEU3MTc3QkFFNUZEMjMxOEQzMjk1NzVCRjM3RjM2OTgyMDU5ODQ0Rjg5MjJEQ0MKK0E4NENFRjBBCisxMDIyQ0M1MDZDNzBGNzQ3RUE2NDBBN0JBMzRECis3QzY1NjIyNzM4NEVBRjVCQzc5NzY2N0RBN0U5RTI0QUQ2RDhDNTZBNkE3MkQ3OEE0MDUzNERCQ0ExOTk3RUI4NjRDMEMyRjczRjEwOUFFNDc5QUQzNDQyNDA5Q0EyRTE1MUUwQzE5NDNDM0M0MzlBMTBBQUVGM0QzNTE4MjY4NTQwMTAzMTEwOUQwNDRERjQ0QzVGN0QxREI4RTUyQ0MxRjYwNkYxREMzREREOEQ1MDZCRTZGMDYyOEUxMzMzMkU4NDU2MkQ0NDJDMTc5MjVBM0E5M0M2QjA1OTI4QjU0MjdDOThBQzFDNEI5RkY0OTYyOEY1CiszQzk5QkMyRQorREYzMzY2QzZGNjU5RUNGM0Q5NjI5NkJCNzZFMworNjA4MDFFNjAyNjVFMjkwQjlFRjZCQkQzQ0I0RTVDRjcxMkI1NzEyRDkzOTQ3RkMxMkJFNUI0NTA3NjZBNjQwNzM1REIwRTBGNjIzQUY0NEI0NTJFOTNFNTZCMkVEMzJFRUFGMjQxMEYzMTMwQzE0MzAxQjgyRkM5MjJEMDA5MEQ0MDgyRDQwQTVDQ0IwOTEzNEE3NDIyRkZBODQ5NzlFNThGRjVFODU4MDBGNEY0NkMyNjc5MzhGM0Y2M0ZBQkI0MEU4RTUzMThDM0MzNUQzOTBCMTkzRDc1MTY5QUVCM0U0Q0RDQUM1OTNENkUyNTAwOEY4N0RFODFBQ0U5CitEOUMxCitDMjQwQUVEQzQ1NUVERkI0RDY1QUI2CisxNTlERjNBNworRUY1MTRBMDYxREY2REM1MjVCODQyM0I3MEUKK0Q0NEFDNkVGNDVGQUU5NzhERjY3N0Q3NTY1NDc1OTBBNkYyMTNBNTY1MkZBOEFCMUE1MjI1QkQ2MURCOUY5M0ZDMzA1QjM2NzM3RjFFOUY4MEY1NTM0REU3OUM4OTk2N0Y3RTUzODU1OTEwQ0REQTQ1NDBDRTQKKzJFOUE3MDc2Cis2MjhBRkY4QTBFMEJFQTFCNkY2QjA1RjA3NTFGCis5QTZCNDk2MjQzMjVGNTA5MDU4ODQ2QUEzNUM1OUI0RThFNTA5RDQ5MTgxMUE5ODYzODcxOTQ1QkFGMDQ1ODI1NkMyMEM4MjU4NTA5RUYzMjdDMTA3MkRBOTdDMEZCRkNERTQ2MThBM0MxQUEwRkNCMjEzNTFDMTdCQTQzNTNCOTc2RDdGOTk2M0E5MDY2OUMzMkZBMjlDQTE3NkZENjE1RDFEQTk4MUUwQjE2RUJGM0Q1NzFENDY2NTUyRkNCOTQyMkNGMEM1RUY1ODE4MjA3NEFDRjNDQjQ4MDlBNkRDRDY1MDgyNjM4RjhEMjVFREYzRTM2NEFGNzc4RjUKKzhDNDQKKzkzRUVERkRFQTdCQkU1OTRENzlDQkNDOEVBMjFGRjMzRUY4MTNGQUZBRjZDNUU5QzBDNTBBMzU2RTA4QkQ2CitENEEyRTlCMworNjhCMTk3NEE1MERCOUFFRjRBMzIwQ0IyNkUKKzJCRDI0MUI5M0NDNDYxQTkxOTlBRjhBREEzMzQ0Nzc5QjZENzQyQkY0NEZBNDA3MkI2QjNDMjdDNjRDMUJDMTMyRTg4QzMzOTVDRjMzMEExNTdEOUFBNzNGMEJFMzA2MjdFMDMyQTcyNzIxNTFDMTM5OUVDMjkzNEE4RTUwNEVGMzQxMUQ3ODM0N0JCMDUKK0QwQkQ2RjE5Cis5NDQyNkM1QTRENTMwNEEyRUVDRTJDQTc0QjVECitBRkE3MEMzODNDN0U3QzcyMDdDQ0U5NzYxQkNERTUzQzFDMUI5RjBCMjRBRDkxNjc2MDRBMTg3OUVDM0RDMEY4MzI5MkYyMUFDNkFDMzU3NzU0QUIyQUE4QjgwNkVGMkFCMDhBRkZDRUNBMTAzODJDQUUwRDkxMUNGMDJDMzA1MTdDMTQ5REU5MUQzNDYwMjNBQTA4NTY0RjQzMzUyQkEyRjVEQkRCQzRGNDcxNTYxRTM2OTFCMUY4Q0UyQUE5MEE5OTYwRDkwNEQ2N0REOTI4NTExNzlCNzI2REY3QTcKK0I3MzYxNTNECis0MkUxQjAyMzc0QTk4MDJEOTFGNjJFODlCNQorNDVDQzhDRTgyMzM1MTgzRkYyNzdBMjUwNDM0N0E4MUZGOEMyREEwRURBNDEzNDc0NjZEMEQwMzZGOTBEMUY3RTRCMjY5NUUxQzk3MkIwMjMzMzZCNkJBQTFBMTc1M0I3NjMyOEZGNjZGRUIxRjcyQTg3QkU0NEI3NDJDOEREQ0Q2MjcxOEFCQjVCRTI0ODc2OTBFQkIzNzk1MUE4QzdBRDNBMTNFREVCOUU4REVDMDg0NjU3RDYwNworNUM2QzlBMjYKKzAzNDlFMUEwNzAzQkE5MDgzNjhEQzAwREU3CisyNTREQzlENkUwRDhBN0IzODM1Mzc3REQ5MDUyRkEyMjUyRkY2RUU0MUYxRUJCNTkyNjA2NkQ2NUJCNkVDNDEyMkRGNkE3QkU2Q0YzQjY0M0M4NjIzNzdBQzg2NDA2N0MzOTZGOTdEMTUxRjJBQzVGRTY1NzkwMEQ5QjZCMzcwNzZEMUFFQTIwNjE4Nzc4RTk5OTIyMTY1RDE1ODBCOUM1QzkwRDg3Cis4M0YwRERCNgorQTE2MEU3RThFMzM4NEMzN0I1M0QxMjg0ODFGRgorRDU0NThDMURGNDhBOTBCQzVDMjc4MTA0NTcwNDdBMzRGOTZDQzk0OENCNzg1QzdCNUIwMUE2MjNFQ0Q1QTBENUJCNUQ3RjA3NUI4NTdGMjU5QTk4QkZCMkRFMEU2MDY5NjE2OEM3NTI1MjA1Qzk2MUE0QzNBNkYyODZBMUZDRTg2QjBGNEQyMjI1REFDNDM5NDg4ODczRjg1OEJBQTFGRTMzQUU4RkIwQjA4QkM3NUJBOTAwRDY1MjA4QjJFRTI4MzU5NUVFMzg0N0I5RkNDRkUyMzgKKzRERUExODM2Cis2Q0MyRjFEODlFRUE0ODA5MTE1NkI3NUUzMUFGCis4RjVFMTYwNEVFRDdFOTg3QjdEMTM5NUQyNjJBMjM4NEJENEJFMDlDNEUyNjE1Mjg0NzgzMjY3MEMyRDFBRTdEMjJGQkQwRDQzODQ3MjdCNDFDNDBENjY0QUFDOTk4MUY0QThGMzJCMTYxRjc0MUYwN0M5MUUyNEIwRkE2RTU4NzdGMkEwRjIzNzI0MjhDQjI3MzdCRDkxRkQ1NDJENDE5QzU2QkIyRTc1N0ZERTg2QzM1REI0MUE4QTVFMjM3RTA3NTdFOUNCNTREMURFRkU3OUU5NUQ5MkJCQ0MxQzNGQjg0N0Q4NkQzQTNERTFEMUI0MURFMDMyRjU5QUMKKzE1Q0M4NkU3CitBMkY2MjVCODNGNzg1MTc5RTkyMUM1NjdBNjk0CisyOUVBM0QxRUM0QTA0RDk5QjUxNzI1Q0UyRDY5MkE0QkNCMTIxOEU3N0IzMjAzM0E0RThCNTVBMUQ1MDFBRDkwNDRFOTFFNDQzQkIyMUUyNzM4NzlGRjRFOTg2OUQ1NEYxMDYwRTFBNUQ2OUI4RDQyMzhGNjc4RUFDQjZCOTRCQTBDNEIxODBDQzMxMTJCRjhBNThBNEVFRjlCNzcwOTI1QzdDOTYwQzlDNjNGNkZEQzc5RTEwMTdEQzFBQkZBQzc1QjA5NjA0RkU0NEE3MjcxMUFGMjc0MzBCRDgwNTEyQkNCNjE1MUM1Q0NEODNCRThBMUUxM0M4QzZFRDkKKzlFRTkKKzY5QzczOQorRjZBMTRBNkYKK0FCNUM1RkE2NUU5NzA3OTg5MTA1RUEzQjU4CitBMzhBM0FDMjczM0NCQzc4QkJDNUY3NjQ1NzE3QUEyQjZGMkFFMzNGMUQwODVDMkU3NkY3QTQxRkM1QkFGQUVDN0EyMDk4MjU1Q0FDRDdGOENDOTczRUYxRTdCN0QxRkI4REM4RURDMDgxNTA2MkEzMzU1RDkxRkY3QUFDOThEMTVBOTI2MjUzRjdDMEI0NzBEMzAzMEE2MDhDNzBENEM3NjMKKzA2QjczQjM4Cis4NzBFNUY5OUUyQjgzOUY2MEMwMzNDRjQwNEFDCisyRTc3RTVFMzYwRkFBODkzQjk4NzM1OEIyMkM3Mjk4M0YwRDQ5MEMxNTAzRkE5ODJEREY4QzlFRTZGRDBEMTQ4QzU0QTVBM0Q2QTNCQjQ1NkQ1RDY0QUJBODY2NDdCRjUzNzkyNzM5MjBFOURBNzhBNEY0MUU2MEYwQjAzQUE0OUQ2MzIwOTlBQzIyQkFBODVEMzdENEJGQjlFOUQwMTNDQzMyNEE5N0MyRkM2N0E1RDVDRTZDN0Q1QTYxMjBBNTQyMjQxRUFDQgorM0RGMDU2ODkKKzdCMTQyRUM3MjYyNTlFN0U2NzQ2REJFNjYxCitDOUY4RjQ2NzZCRkIyMDAwNjMxMzc0NzlFODVDMjc3QTQxMDRDQkIzMjQzRjVCQTEzMEU0OTA3RDFFMjM1QkM4NEQxRjg3NTYwQ0JDMjI1NTIyN0NBNEIzRUREODUwQTkwOTRFQUE5RkE2QzRFRjUxMzk0QTEwNTU4RkQzMTg0OUY5MDc2OTE4RTEwQkVGMEJGMzlGQ0E2OTcxMTE5MUU3MzMxNTIxNzhFOTJDOTRCMzU3CisxRkIyRjA3QQorRjU2Mjk0REM5MUI5NTE4MzU4MDhBNjFDMTVGNAorNkZEMzZBNzE0NDMwMURDM0NFMjFCRjFERUI3MTJEMUZENzhCNzlEODRFNzgwNjA1NkFDQzUzNEE5NTlFQURCQ0NFOEM3NDZBMzhBODFCMDY4MkMwN0U0QzEwMDNDOTE3Qzc2QTgxNTgyRDcyQjNCNzJFNkYwMThERjYwRTM2M0QxQzRBQTY2RUQ0QzcxRTQ2NkRDM0QwOTQ5NTFCQjJBOURDNzNGODk2MTJBQ0I4REFBQUM2REY3NzVBNzg0NzEzRTcyMEUwODQ2QzVFRkFGRjkyRDUxNTE0NUNFRDFEQjJEOTE2RTZENzkwNjAzRkM3MkE4QUM3REU3NkRDCisyNzg3CisyRDAxRTMwRDE2MDczQTY3ODI1Qzc3QzBGOUQ2QTc2NQorMzRDQTRFNDQKKzQ2MjA5QTdBNzc3QUY3NDdCRDUwNjgyQkVFN0UKK0Q1OUQ0QjJGRkU3NEE1MTNEQkY3RDMwOUJERURFRUE0NTk2MUY5NzQyOTUzOTNCNjBCRjZERDMzQzA0Q0RGQzJCNjRCREVBQjBDMEY2NzU1Q0RGOTU4QjBFQ0E5Q0I5OUNGNDM2RTMxNTdBN0Q4RjI5NzlERDkwOTE2QTU3OEUxREVGQTcyMEQ0NDZDRjlCREI1RTVFNTc3NDEzNDYzQTMwRkY5Q0UzNTU1NTQyODlGN0ZCQTE4NzM3NkY5NkI1RUM1MERBNzQ1NTAwMzA0QUVBM0VGNERFQUFCNUYzMUM3MDExRUM2QjNDQjQ1NUEyQjg3QjI5MTgzMDQ4NgorODZDNworQjdCNDYzRjIxMEM0NkQ5OTcyOEIyN0UwNDc2ODg2MkY5NDNCQkM1NTdDOUM2RjlFRUMzOEFFNDNEODVBMUFERDA4MTQwMEJGOUI1NUM2Cis1MEEyOTJGRQorRjQzNTM1Q0E1MTQ0MkFENzY2NDVEOTUwRUI2NworRDQ0MzM5NEUxOTBFNkQ5OTFCOTEyRjg4NTBDODJCNThERUVGOUI3RUZEOTcwQURFOTg2RjcyMEMzOEQ2MkI4RjJEQTRBMUZERTlDNDM4NERGNEJCODEwMzQ0RTFCNjRENzREOEU3RTI2MkNBQUQ4MUUzMTYwQ0NDNEEwNTE2Nzc5RDEwQkJCOTc3QUNEQTA2QUY4NTQ5QzkxMTZCNzhBOUQ4RTI5RUI0M0MzN0U3RDJFRjBCQzNGNDVFQzQ0M0Q5MUU4NTY1Rjg3OTJFNDRGNzM5MUEwNzIwMDZDNEIzQ0FFOTRDOTcKKzgxOEZERDY3CitCNUY3QzNBMkI5Q0ZCQUJGNjM1NEM1MjZEOAorOUI2QjQ2MjlEMEUxRDBDNDYxN0UwMTNFMTAzNzdCNDk0Qjk4NzVDRjVEOTMKK0VDMEYyRUYzCis2NEU1QjcyRjFEQTgxQkFCRDI4NTAyNzY1MDk0Cis1QTVGRDVDRDM1MkQyMjQxOTYzNjA1N0M2ODg3QjU0RTM5RDhBMDZCQjdEMUI0NUI3N0M4QThDOEZGQzk2QkZFQURBRkY2Njc4MDVBMEQyQkVGREJGNzI0RTE3QTBFQzZGRENENzMwRERERjdDNTZGMEI5M0VDQzZFNEU3Q0VENzcwODhGNzBDNkI5NTdCRDVEQTQ4QkMwOTVGOTlDNkU3NTlCMUFEQzVGNDE5Q0NEMzVFOUM5RThBNjg0NUQxRjg5MTg1Qzg3MDVBRTdBOUVFQzMzMzAzNzY2OTIyNDY1MDFGRUU2QTYzMzFBMjk4NkNBNUYwRTI3NERGMzMKKzg4NTUKK0Y3OUFCRAorRjJBNkVCNEEKKzg0MzA4NzE3RDlBODM2MUQwN0YyRjIyOTY5Cis4MDRENUE4OENDQ0Q0NUMwMjE4RDkzNzlFNzRFQTQ3MkRCODE5OUM4RjVDQTc5ODAzRENFRTQwQzhFRjU3RDE5MTA4MUFBMURDQjUwRDMwQkExNkI0NjUwMzJCNTYyQ0YzNzM2RDc3OTBDOEM5QUVENUNCODdGNUE4NEFFODFBNUNBNDc4RTFENDM3MTAyNzNCQTA4OTFBQTY1NTM3Q0RCQjdDMjI2MjY5NUM1MTBEMAorMzg2NjE0NTkKK0JGNURBQzc0OEI0Njg4MEE3M0ZGQkM3N0FFCiswODQ5MEEyQzE1RjhDNTRENjRERkNGQzhENzMxQkQxQzkxMUI5RUI0M0QxNUM5OTU4RjlFQkEyNzQ3RjY3NkE0QjNEM0JCQTM0QTJFNjBDMTYwRTBDMUU0RTZBQTBEQURGODA1QzhFRkY1OTc0QTdFQzQ2OTZDNkFENDBDNTc4QUE0MzE5RkJEOUU2MzJGMkU0Q0Q4NkJDMURCRUI1OTc5MTQwMgorOUQxRUQxQ0EKK0FGMEE3RUQ5QzgxQzAzODlBNzdEQjYxOEI0NTcKK0Q3MTBDMkI4NjU0N0Q3QzFDQUQ5QzVGQjkyOUVFQzA3MTdDNEZEM0I4RUNGMkMzMjI5OEQ5MUJFMzYxNkY3ODhEQzk3NjA1REM2OEUxNDdGMkVBREE4REFENjk4M0QzODVDMDk1RkY1RTlCNDE5QjYwMDVBNjJGQzc4MUNBQkM0MDQ5MkUxRjUwMkZFQUYxMTQ5QTFCOUExNjg5Njg4QTg2OUFGMTc4Q0NGRjg4RkFGODU5MDkzN0YwQTJEMUM0RUNDRTdFMDQwOUMxQTZGRUJGQzRGNjZCMUU0RjUKKzIwREVFMTExCis1OTNBMTJBQkU5MEE4M0M5MUU2MjRCNzZGNQorODZENTJCNjYxREQ5NTlCOEEwNkExRDdENjg1NDA1RkIyNTI1QzQzQTZEMTZBNEM0RUVENTJDRkREOEQwMkUyQzA2QzlDMUFENjhCQUQ0MDE5NTU4Q0UzODRDQjg0NEJEOURGRjA2NjQ3QzgyQkEyNjJBNkVBMTAxOTI5OTkzODdBQjY4NDRCNEJFMDgwQTA2RTU0OTNENTdBRDZCNUIyODQ5RkZDMEQ4RDJDRjlDMjY4NAorN0IxQzM1NjkKK0M4MEQ2QUNDQ0ZBMDYxRjU5Mjc1ODE5RERGCiswMjNGRjA2QUNBMjA1NTQ4RkJFMEYxMEY1RDRFNzE4QTJEOEUzQTQyOEVFODkxNjJEQzY5MUI2RTYxRjkyNzdCNUEzQjdBMTk1Njc3QkMxN0QyRUUzOTBFRUE0NjM1RDM4MTlFRTBBRUI0ODI2MzYzMzJBOEUxRDZDMzg3MTVCNEQ3RTZGMjk5MUEyMjJBM0VDMkMyMDI2NTU3REFDRTUzMDc4NDQwOERDRURDRkUxNEIzODhBNEIxCis5RURFQTg2OQorM0UyQTI0NjRBQUZGNTM5NDM3RUY1RjY3ODcxRgorQUQ5OTI0NDc2MzhFQ0FGQUIwQUNBMTlBOTlGRTdDQTEzNEE1RDQxNDhFOTNBMDM0MTVDMEU0REI5MDQxMjVEQTQxQkMyN0M2QjNBMEUwN0YwMTI1QzI3OUEyMkJDQUFDNkQ5MjUxMDhFQzM2QzY5NkU2RjBERjYwQUZGMkRBMUMwRDNBREVCODY1Qjk2NEI3MEJDMTlFMDNENjRDQUUxODA0Nzg3NkJCNzAzNzI2OEY0MkI1NUIxOUE2QzQzMjRBQUI4RDIxNzNFNEE0RTMzMUMxRkQyNDk3NEU1N0NENTdDN0VCQUMwQzdDRUFFRkM1NTg3ODhBMzFCMDJFCitGN0NBCitGQ0JGNEQ1RUY1QkE3QjJCNDMwRTEwNkMyMjE5NUZFOUVCNzQyRTIxRTAxNzFFRDIyNEVEOEFBOTY1NTI0RERCMTY2RkEyRTVDRDg2N0JGNjkyNDJENjJDMTY1RTY2CitEQ0VBRDUzNworNDM5MUZBNzM2Q0JERTU1QjI5MTUxNDkxMTQxMworNEJGQjEwRDE2NjE5RjhCMkIyQUJDRjg4MkFDRUY1NzBEOTM4QjdGMzgzQjU0MDNBRDE2MTVBMkZFRjYyQkU3RUJDQjVCMEZGM0RFOEY5QjJBQzFFMDRFNDEyNjYwQjZCQUNFNEVCNjk5RTVENDlGNzg5NkFDMjE5N0I4RTdGQTAxRkQ5NEQ0QjZFRUY1RThFQzdCMTJFODkyOEI5QUExRUE1Qzc3QUE3MjIzMDA2MkU5Qzg4NTMzMzQ0OUMwQTI0NEE1MEE3MTI0QzYwQzdDMjNGMTE0MjlDNDgKKzhCNjg3M0U5CisyOTI0QzcwOTY3NjY5OUU0MkZDOTFFMzBDMAorNkUxMEVCMEVDMUQ0MkNENkNGRTE4MzJGRTk1QTcwQjQ4QjdCMzg0MjE1NTQxOEMzMUE0RkU2NUQ1QjIxNzdCQTdCQjIxQTIxMDVBQTlENkQ1Q0U0MUJFOTgzM0Q5MDRFMkNFQjQ1REQ5RDFFQkFBNEM5REYyQ0Y4QTE2MDYwMTUxRjAwMkE0QThFNjkyREQ1ODJFMjFEMzRGMTM2NzgwMAorN0FCMkZFMjkKK0YwOTI0QUZCQUI4NzAxM0IxRjgwMTRDNUIxODQKK0I0MkVBNTE0QzA5NjcwQUFCREE3RDFCMURERTMxNkY4NTcyRjU3RUZCNUVCNTkzOEU3MTcwREUyMjVEQTA1NUU3RDQ5RDgwMzQ0RDg4MjhGQkVCNTZDQTA0MDREMDEzNzNFOUVDQTE1OTZDRTc2MEIyMjVBRTJBQzI1NzIzMURGQzY5QkVEMzM1OUIxNTMwNkQyQjREMkY5MUEwNDg0QTU0QzNDREE0MDQ5REEzRkQzNjk4NTZDMEQzNzE1M0Q0QzcwNEM5NTZFNDk4M0E3RDA0NjJGMjNCMkI5NjUxNjFCNEY5MjZBMDg2NDdEMzRGMTU1N0JGRkJBRjRFMgorREMwNAorMUZGMTk2REFGMzRDRTE0QTBGRUVDMEI3NjE2ODU0Qjg5QzYwOEE3MkMwNjExNjBEQUFFRDc5RjRFNkFEQUFCRDVFOEM3MgorMDEzQ0Q1MjcKKzUyQTYzMzcwNTJDNENDMEREMUI0QTY4MzNCCitBQ0U4RDA4QTc0NUNGODhGQ0VCRTE4M0E5MDM4NjkwNTBGQ0FBOEFCOURGOTU2MEMyODRCNjY0MEMxRjIyODNGQTdFM0FERDE4OTE4RkQwOEI5NDNFNUJBQzRBMTNGM0EzNTUyQzZDQTMzRTgKKzJCRDRENkE3CisyMjI4OUUzMDFFNkNFN0QxQ0MzQzU2NTYwQzU1Cis0Mzg3NTVEMkQ3NDZENjA4Q0RCQjRCNDU3MEUyOEI3RTcyQUNCMUI2ODU5RDcwREYzQjlFNDU3QUM1QTA2NUQ5QzM3MDgwRkJGMkNCREREMTcxOUVDRjMzNDA0Mzk3RjVGRkQ4QjI0QkY5RjczMzc0OUIzNTE3MjFENDgxNDJCQUI5N0JENzIwMTMzQkU1RUNDOUZGMkYzMjRDMTUxNURBODM5NzJGOEVFNEY1OEM4N0Q2QzU4ODhBNEY1NDAwMkVDQjNDRDA2OTYxMkQxQzYzM0YzMzM2MTFCMDhGNUREODE5NEUzQUZCODYyQ0ZBRDM2MzlEQTU0RDQ1Q0UKKzQ1OTMKK0QxRENGMTkxRDU4MUNFMTQzQTVFQzZCRDJCRjJDODg4RjEzMDBDRTYxQkM5Q0MwQURDRkRGNzI0OEE1OEE1Cis1NDgwMDRGQQorMTM3ODQ3Nzc2MERFM0E2Mzc1OEMxNEM0OUQ2MworMEU2RTFGQjQ3NTEzNjU3OUNBQzY4MjM5MDI5MDBERjJFMjgyRDZCNjY4NUU0MDQ0RTcwRTUyRUM2RjI5REI5OTcwNDQ2REJFNkIwNjVENEIyNjhBRjg3OEFCNEZFMTk1N0UzRjNCNDY0NEI3M0VDNTgxOEYwRkNFMEQ1RTkwQkNBRjMxNEU3MTZBMkNFNTBCNjc3MDAxMENEQ0M2Q0NFMTBBNEIyN0I0RjdDQTU2RDQ4MTc3OUUyMEI2MUM1NzRERUM4NzBDQ0ZDODc4QUQ4OEMxQzA1N0IzCisxODhENTA0RQorMTVGNDdEN0REMzM2MTA5NkNEQzgyOTk1MzIKK0M1OTQwMzU2RDM1ODc0NkI4RTgwMjgyQUJCN0I3RDQzNUE4RjBFQkVCMDNFNURGQURDODUwQTFEMjkxODM0MjJDNTZCMjM0RTlGMTcyM0ZCODhGMDQ1MDBFQkM0NTA1RkQyMkY3NTBENEZFQTJBQzY5M0E4NkJDNDYzNDhBNTJEOURCMUVFQzg3NEI4Cis4Njk4RUExRAorNjE2QjI5RjFGQjMxQ0E5RTE5MjU5QzNENEY3RgorNDExNkIwN0Y4OEE1QzJGMjZFQzFEMjFFMDI1RDc3MjQ3QTNGQzY2RjY3Q0Q5RTc1QTE4QzFCNDgxOUZBRTAzQjZGRTYwODUwMjQxMjg0OEFERTM3N0YwOEQ0NjkxM0I4Q0IyMTVFRkJDRDVCOUE0NEI0MENBMURBQjQ1Mzg5OTlEQ0RDRjM4Q0JCMDBFNjc1MEQzMDU0QUVCMEI3NEMyQkM4ODI3OTQ4MjkwNTU0MEExM0E2N0RFMUY0QTExNzk3QUE1Q0IzOUY4MzFCREI5MTU4RTUyRjFDQkE1RTMzNEM2RTBCRDg5RjY5QThDNQorN0U0OUU4QUYKK0FDNEVCM0IyRDAzREFEN0IyNzA4ODlCMDdCRDAKKzRFQzZDQ0M2NkNGODY2NkU3OTdBNTc4REM0MDY3Q0VDQTU4NTU0NzJCMkJBRDM3ODJGNjU0OEQwNkJFREExMjhDMTEzMDZBQjM0M0M5NTdDMEUzNUU5QjMxQUFCQjYyRkFCMDIyODMzOUVCQjBBNjAzQzkzRTNBQ0JDNDgwRjREREE2RjFEOTA2OUYyQ0ZDMDEzOUU1N0I4MTU0RTNDQjRDRTlCNkE5QTk4MTc0RTEzMTY2RkYyODk1REY1RTVDNjI3M0M3NTE0NkIyN0MyQjUzQ0JGCis3QUE1QURGQworNTFFMDY5NjlDM0U3RDdENENDQjdCRThBNUMKKzI3QUU5NTJGRTNFMEJEQTQzRDFDMzIxQ0M1REU3MDQ2N0VDQzEzRUE4NjgwQTAzODAwOTgyMEU4NTI2RkE3NTE3MDI3OTIxNzY0RDVCRjQxMTZERjc2QUU4MDhEOEM1MjUzRUIyMDNGRjFFRTQxMzRBOERFQjMxMDJCNjdEMjJGOTM1NjAzNDZBMUU4Q0M3Q0MzNzU5MjY0QzY4RDkzQjMxOTNFMUREMENGQTE1QworOTQ0NUZDRjEKKzcxMUQ0NkEzMTY2QkJDRDRFM0YyQkEyRjNEMUMKKzE0RUMzMENCNUMzMDg0MEY3OTlDRkU3ODRCQzg5MDM5QjcwODE0MDc2MzZCNzRBQTMyRjIwRDEzMUY4MkNCMERCOTk4MzY0ODM5N0E1QUEzMzFBRkY4NkY1NDVCQkMyMkEzNkQzOTRGN0FEQzNGM0VBNjhDMjVDODRCOEIyMUVBMEIwRDVBNTk2Mzk5OENBMUE4NjE4M0ZDOEEzMjIyNEJCNkIwREE5RURDMTFGQjlEQUVBMjdFMjU5RDg0NUE2MjFENjRDMUM3NkIwNTMxNEZBMzE1Nzk5RTNCMkNCM0IwMUUxMDVFMURDNDk5OThCRTExNzA0NTMwCitDNzk1M0ExQgorMTlFRjZCQkI0NDNGQUM0OTU4RDQ5RDUyMDYKKzExMTY1QUFGOUNFODFBRUExMDdCMjAzQjhCOTdEOThFQzY0MzJFNzlCMUEwMjY2RENDNzA1NUJEMDEzN0U5RDU2NjZCNkNDNUMzOTgwRjAzNjc0MTU5MjlCNTM3QzkxNTM1N0M2NTEwNjQ4NTJFRTA2Njg3RUQwMTZBQTcyQ0ZBNUZDRTg2OTFFNQorMzFFMjNFQkMKK0JFNDg1RjBGRjVEQkIxNjk5NTRCMjQ5NjExCitCRUFFRTE4MDM3NDAyNzkxMzA2QzQ0MTk1NjcwMTZDQzY5MDhBQ0YzMDIyM0ZBMTNBMjVGODcwMjE4N0Q3Q0Q1QTVBMENBMEU4NkIyMTk5MUNCODVCN0QxMzQwODU0NzJBREZFMzVDM0Q5NUVDRTgwQ0FFNjRDNTFDN0ZEMTJDNEM1NjQ0NkY2MTU1QUIyOTRFRTBFMzJFRkI0QTA3NkJEQTRCNDY1OTMwNzgyNUU0MTU1M0I4MjVGNTA3MkQ3NjRFOTA4CisxNzM0NkZFMgorRkQ0QjZFNjExQTk3RDBFNTcxMTQ5QjM4QTAKK0Q3RTRFNDM0NTIwMzBGNzUzQjNEMTk3MUQ3MTExRTRFNEFFMDRCQjg2RDU5NjRFOUI4NzQ5OEMzQkJERjdBMzU4MzcwMDREODUyNjBBMTk0M0VERjRGOEI1QzE2MDRGNTlFMjczNUU0QjlDRTU2QzdBODk5NTk2MDNENzgxNDNCMzFDRDJFQ0U3RTEwMTVFOTIwNzFCM0UzMjI3OUQyN0REOUZCRUMwNUFENDREMzlCNUEKKzE3Rjg3RjRECisyQkM5N0E3QkNCOTkyRERDRjM1REE0OEIyMjhDCitGNjhFRTAwMzUyODA5NDU1QzIyMzRCMjk1OTZBNkZDMThEQTZFMkVBNTczRDhDNkI4NEVCM0ZERDZEQjY3NkNFREEyMUJDNTMzREJGM0I2NzY2OUM0MEEzRjg2MzE0N0Y4QjZENUM1OTQzNDlCQkUxODE4Qzg2RDgyQkMzOTMzQUEwMDg1QTQyM0U3NEQ5MDAxRTlFQTRCRkE5MUY4OTlFMkY2MzFFQTkxRDg3RDEzMEEwQjE5NzAzQTBGMDkwQzYzNkI5Njk4NEEzNjNCMzFENjRFMjRCN0RCQzVERDcxNDA3QUM4OUYxMkEyMjI5RDg1N0IzRjI5MkUwNEQKK0I2MkYKKzEwMDM1QjcxOEM0REE0RDFDNUE3MzE4RERCMjMKKzYxOEUxRTNCCis0RkRGRkY2OEQ5RTgxNENDNzg2QzRBMTdCNUMzCitFOURBRjA2M0MzMTM1MkU0MDZEMjI0RDJFNTE2NzVCOTZENjE4RjdERkVBQjVBNjNDRDdGNEQ2NEE2MTUzM0MyN0ZCM0UxMjMxQkQ4REUyMTdFODIxMjBDNTJFNUZEMzMxREZEQkJCRDUzMkY2MjU1MDhBQjVGMjhBMzI1MEIzMjUwRjRGOTM4MDUyMEU3NTM1MDRCRUNBMDkxM0RFOTJGRkVCOUVGM0M1RkQ2NzkyMzI0NDU3MzI3QTE2NkRBRUQzMDFEQjlGMDBBMUZBQ0QxQjRENzNCRThCNjU1OTcxREJCNUYxRkMwRTgwOTJCN0RFQzlENDZGMENERDEKKzNGQTMKK0I2MURBOTU3NTQ2QTM2NzcyNUU3NEZFNDI4NjQ0RUVGNzhBOThGNTU1NEQwQ0QyQUMyCis0OUE3QkYxNAorQTI4NTdDQkQ2MzQ0REQ4QUQ0MUI4OThFMjhCRAorQkI0RTk3NURFN0FERTEzRUM0RDhCNUExMDRGQzU1MjkxNUEwNjcwNDgzMTRDMzJEQ0E1NzVDMTU5MjI0QkU5OUY5NUM4QTA0MkY3MzBBNUY3MEI4ODgzMEFGMEY4NjJFNDgzQTY5MTE3MkYxOUNBRTFFRDQxMjI4MDdFNkE2RDBBMDFGMjAxRjAwODI5NTc0OTg0REFBRDQyMjhGNzY5NkJENTQ2QjNBOTAzQzdCOEI5QjQ5RjgzQjI0NzBERTQzNDYxMkEzQUE5MkFEQjRCM0VCRDA2OEUxQzQzQUFDNkVDMTRBMjBDN0VBMUM2QTVEOTg1MzBGNUJGRkE4Cis4OTgwCitGODNFNjhFRQorRDIxODI2NEMzNzc2NENGNEE1MkY5NzFGREMKKzg4RUQ4MjQ0OUI5M0Q2QjdGQTVBNUVGNjFGNDAzODhBQTQ1RDY4NUZEMUNBMEZCN0JCNDEyOTVCQTg3NDQ4MkVGQzYzMDQwQ0EwRkJCRkRGQjMyMzIzODJCMzc5ODY2ODE2QjZDNTVFQzc4NzJBQzM0ODYzN0JENDk4ODk2RgorQTJCOENGMUIKK0JDM0VBNkYzMTg3NkJENzkwQkM1RjAwMTM3QzYKK0FGNTg0MDAyRDNFMjZFMEEwNjI1NDI0NTBCNkI2REJENDEyNjk0RUU0NDdFRDY1QjU1QkVDNkRCQkFCOUUwMjI1RTBCREI4RjhEN0FFMDkyOTA0MTlCNTUzNUEwNEVDNUVEQzRDMzMwNjYxOTc0NDJFNjVDNjZDQTFCQzQ2QURCQUU4QzdCNzREMzc2RTM1MTM0NUZEM0VFMzdCODJCOUJFNEJCNDUwRDQ4MzI1QTE1NzJFMjAyQ0Q1QTIwNzI2M0MzNUI1ODNGQjcyQ0M5OEYyQworREIyNUFEREEKK0M3MEY2RDYzNTUyMkE3NjdCMkM2NDk0RTVFCiszQjE0RkEwOTUyMzQ1OTU5REU5OEY0REREMTlFMUJGOTQzMUNGOTM3MTIxNQorNEIxMEUxMDYKK0YzNjVEMjM2MzUyMTg5MkREMDMyQTgyN0VDMDkKK0M0QTU3NDU3ODcyMjdFRTEKKzgxRTJFQUJGCisxNDg5QkExQzQxMzExMDNGQzBCM0IwMkZFOURFNTE2MzBBQ0EzQzY1RjRBQkQxMkU0RDYwOTRBODVDMUJCRkU5REY0QworRDBDRUQyMTBBRTAxNEFGNDEzM0Q3N0U0QUE1NjkxREU4MEE3MkE5Rjg1RUI2NjlFM0ZFRDBCQkI4Njc2MDYzNDU4ODc3NEU1QUQ0NAorNkE1QkNCNEU3MEU2RDI0RDY5MjkwRDI2NDk3QzRCNUE1MEFDNjY2MTg0RDk1RjI5RjlDMzNGCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ2IHB1dAorZHVwIDMgL0MwMDUxIHB1dAorZHVwIDQgL0MwMDU4IHB1dAorZHVwIDUgL0MwMDY2IHB1dAorZHVwIDYgL0MwMDY3IHB1dAorZHVwIDcgL0MwMDY4IHB1dAorZHVwIDggL0MwMDY5IHB1dAorZHVwIDkgL0MwMDc4IHB1dAorZHVwIDEwIC9DMDA3OSBwdXQKK2R1cCAxMSAvQzAwODAgcHV0CitkdXAgMTIgL0MwMDgzIHB1dAorZHVwIDEzIC9DMDA4NCBwdXQKK2R1cCAxNCAvQzAwODUgcHV0CitkdXAgMTUgL0MwMDk3IHB1dAorZHVwIDE2IC9DMDA5OSBwdXQKK2R1cCAxNyAvQzAxMDEgcHV0CitkdXAgMTggL0MwMTAyIHB1dAorZHVwIDE5IC9DMDEwMyBwdXQKK2R1cCAyMCAvQzAxMDQgcHV0CitkdXAgMjEgL0MwMTA1IHB1dAorZHVwIDIyIC9DMDEwOCBwdXQKK2R1cCAyMyAvQzAxMTAgcHV0CitkdXAgMjQgL0MwMTExIHB1dAorZHVwIDI1IC9DMDExMiBwdXQKK2R1cCAyNiAvQzAxMTQgcHV0CitkdXAgMjcgL0MwMTE1IHB1dAorZHVwIDI4IC9DMDExNiBwdXQKK2R1cCAyOSAvQzAxMjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMCAtMjA5IDc0MiA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzRERjVDQTIyMzVCNTA1NDUyRUY4MkMxOTM3OEE3ODZFMEIKKzMwMjg4QjA1NDkyRUU0QkI2MTIzQzA0QworM0ZCMzFFM0RBNTE1MURFQ0E0CisyMzgwMzJGQQorRDJGQTdGQjE4MjRENUI2NUI3MkIzM0U3RDkKKzAyM0IzQjhDNDVBOUQ4MEIyRkI2NUY5QkVFQTNDRjc0MzVCNzRGMkFBMjYxRUU3QThCOEU2Q0FGNEYxNkEzCis3N0QyQjAzRAorNjdEQjY4QTEwMkEyMTg3RUVBRUM0MDkyMEY3RQorQjI0RUM4MDNGRjg5OTMzNEQyMjQwNzk4MERGMTFDMDNGQkY0NTdGRjQ5MTVCQkFENzcyNDI4QjE1M0M1NzFGOEMxNUI1OEIzRUVEQTUwRjJGMEZBN0ZGQjk5OTlBQ0RBMjhGREEyOTRENzdDQTk5Q0UxNDZENjExRjkyMDIxQkIxRUUzNzk5QzhCQjhFNTlBNjUxQzlEM0ZENEQ0MEIzRkFENzNBNTM2NDVDOTUxREY5MTYzNEMyRDU5RTdGNUI3MURDQ0Q5NDIyRUUyN0VFMEM5OUM4RDJGNzIxOEFDNEE2RTlDMzgKKzdCRTBENEM0CitFMjJFNTU4MUUyNkJCQTM3MjE0NjIyNThENQorREZCRkQ3REE0MDBCQzc2ODgwQzFERUYyNDM2M0JBQjIyQzUzRjdCM0E4QjQxMTQ1NEFBOTY3MjJBNTFBRTZCNTk3OTU0REE1MUQ2RUQxNTRBQjY4QzU1MUZFOUQyNDdCNkMwRDQyODU2OTk5CitBOEFCMkQ2MQorRTVDMTI0NkRBNERCRUUyRkMwNkY1QTY3NTBFMQorMjQ2NEY3NzI1QUZCMDk2Qjc2M0I0M0U4M0M0QzhDNjRBQkYzQjM1OEMzMUNERTY5QTdCOUVGMTRDRDQwODM5M0Q3NjZCOEMzRjg2MDJBQTY2NjM5NjFCREQ3OTM5QTJCMkRCOTM4QTE2QUM0RDhFN0RDQTFGMkVDNDU4N0Q5QTlGNzg4MzQ4N0MwRUFEQTM2MEM5NzE1MDNBRjdDMkU5RTAwRjJCQ0ZBRDQ0RDFCREU4Q0NGMTRBQjgyQzUyQjJGRDMxQjAxOEQzRTE1NTg5QkE1NEFBRUVGRTg5OTIzNUEzMkU2RDVBRTg4MTc4OTk2MzZFNgorRDEwRjk0MzMKKzMxMUQzQUY5RDA3MURBOEQ5MTRERjY0ODAyQTgKKzIyMjdFRDg5MEU0MDQ3MENCRDVCMERFNzRFQkQ5QkM5OURDRUMxNEQ0N0NDMDk5ODNCRTNCMzcxQkY1MDQ0NTVGRDQ4OTgzMUVDNDY1Njk0Q0E0RUM5Qzg5MjcwMUQ4NDIxMDJERkU1REFEMUM2NTAyNzZFNTEzNEExOTdGRURGOTg0QzlDRTJEQjQ4MjU1MkEwOTY4RDQ0MUYyQzVDMTk0OTA3NDExQUM5QTkzNjA4NDFEM0MzOTBCNUMwMkQwQjNDRTk4RTQ4RTVBNjc0MDEKKzVDODNGQjIzCitGQUIxMUEwRDQ2RjhDNTU0MjUxQUZDRjgzRQorQTA5RUMxRkU3Qzg0QjBGQjRFREQxRDI4MDI4RUU4MzNDMjU4NkExQzFFOUU2QUE1NTc5RDhEN0NGMjAyN0I3QUQ2MEVBQ0FEOEFCMUExMDQzQzc4RkY5RkE0OTE0RDRFMjAxNzU5QTQ3QTVGMDlBQjhBMEMyNjdCQUVGNTY3RjNFODBERjY1Nzc5ODcxQzVGRjczMDZEQ0Y3NkUzQzM0REJEQzdEODg0N0E3NEIwCitERDE2RDY0QgorMjEyQTUzNENCNEJCMDM0QTFBMjAwQzE3QzAyQQorODQ0Q0Q5RjQ4MTdDM0IzMjgyNkExNEYwMDk2QUZGQzkwRDAyODQ2QjBFNUFGRDc3N0Q5OUVBOTUzNEVCNzQ3Mzc3NTU4QzZBQzVGQjc5NzY5RjExNTQwMUY2REI2OEQxNTVERDkxOTBCMEExRkFFNDBGOUIzNTFBOUEyMDc3MzRGQjNBOTgzRDNERjRGNzFCNkM5RkRGRkExQzE4RDREQTk0MzVCRUE0MDZFRjIxNjdCOEFFNkFCNzYyNDRCNTZBNTJBMEQxRjAyMjFFQ0M1M0I0QjdBNDk1MTk5NgorQzlGQTYzMjAKK0ZBQjI5QjA2MERERjA5QjYxODQ2OTQ0NDJBCitBRERCQjRERTAyNjI3NjI3NTkyODBCNTUzNERDMjNEQTJDMjVFMTU4NkYzNDM4RDEzOTFEN0VERDk1NUE5RjVFNzE0RDQyM0M2QTQzMTRFNTkwNTk1M0Y3MEZFNkRGOTU0QTYzQ0E0QTc0NkI5MzcwMjgzQjFFRDQ1MUFENTRBRjlCMkI3QjhFQThEOEI5MDk1MjdEOUQ5RTA4NjVBNzY2QTc2QzdGNkIwMUJBNjZFOTYzQkFEQjcwMUM3Mzg3Cis5OEQ0NUQyMQorQkI0MEM1RDAwQUQ1QzZEQjZFQUQ2QTVDMTgyQworNzc1RkQ4ODczMjUxMTRCMzk4MDFGNTQzQzc3MTIyNDNGN0Y2RTlBOTExREU3Mzc2MEZEQjFDQzlENjM1MDE1NEQ5NTUyQUQyMDExNkUwQkMxMjUyOEFFMzdBODQwNjBCMUNGMTJEQUNDMzU0RjFDQzg5NDg4QTU1REUwNDRCM0ZFRERCMzRENDQyMjI5MDA4OTEwNDY4RjRCMDc4RTUzMDBEMTlCQUMyQUYwNTM0ODVBRjA5MDI5RTM3OTUyRTEwNTMzMDM5OUVENTBFNERCQUIwCis4OUREMENBMAorNDg5Qjc3RjExMjg4NTZERDU1RTc2MzNFM0RDMQorODZBQkEwOEY3OTNGQzZDNDlFQkE1MzY5QTFCQjkwQkY4NUIwNUM3RDIwNEJCRjQ2QkI0QTc2RkVFMjRBMDAzM0I4NzNEODBEMjM3MTZGRENDNEFGRkY0NkM0QkMyQjM2QjNGOTg0NjJGQ0E1QTc2NTQ5OUZEQUE4NzhCMjE2RjBGMkQxRDREOTIzMkZCQ0VFRjY4QUQ1QkM4MkM0QjhENTU1NUZBMDIwQTMzOTZDMUU2NjZFOTc2RjMwNTY1QzRBN0JGMTVGRjEKKzBDMzdEQUJECiszQzNCQjIwNTgzMzI1NjM3MDM0QjcyODA0OUIxCisxNkYxMDk2QTE5OEIxMzVFQjFFQjgxOEJFNDhFN0NFNjg1MDA5MUY1NDhEOTYzMjE3NzEwREU1MzY3NEIxMTJCNDhBNDAxRjA5NTdGNDlDREQwQjJCNUYwNEZCNUFGMzZFNzU2MEExMEFBMkIyQTBCNTg3QjA2MkZDRkI5MEZCOEIxMDFFNEQ3OThBNUE1Nzk5NEE3NkM3OUNFMTdFMUY2ODMwNEU5NDkwQkUyQkZCNTYzOTBDM0VEMzA2MjkwOUIwMjVGQjU1NUYzNUVGQzdBODVDM0E1NjQ4Mzk5OTY2NTUwREY0NEExRDE3MkQxM0U0REZCQkEzQTg2NzEKKzBEQTUKKzI2NUZENjJECitDNTREMTE1MzVBMTE4QUMxMDI2QUJEMkY2RQorNzkzQzMxRUI2NTdBQkJGMjk5MTVCNEI4Q0Q5MkREOEY2RTI0NEE4NDFENDVERkUyRUNCNjgyOEQzMDFCNjMzNjU4RjI5MUJERjJGRTRERjBDQTFGRkJDOThCOEZERTM4Q0QxQjk2NUY0NDk3MkQ1MTNDNTFDQUY2RTMxMDU1N0VBODRGQTRERTlBMEI5NDM0MkYKK0M5MDdGN0Q1CitBMzk5OUFGNEQzRTVFNUI0RTE4QUNCRTNGNkIzCiswNkQxQjhCOTIxN0QzMjc3QTdEQzkxNzRFNzY1MDBDOEY2ODE1RjE5NjJDQzFCM0QwRjIxOURDN0Y2REVFOTc2NDY3NzAyQjY0RTYyRjM3NzhEQTBCRjA0NzcyMjM4MzA5OTQ3Nzk1OEQ0RjhFRjkyNzBEODU0QUM1MDg3RDk1QzdFNEIzRkE3RDczOUY2RTc1MDFGNzY1M0E3NTI3Q0E2MkUwOTVFMkNCQ0RFQkQ3RkI3NjI0RkY5OTRGNjdGOUNDNjQ0NDMzRjRGN0Q1NQorMTM0NUE0QzcKKzlCOTc2NTlFOTM4OTFBMDdCOEMwMDk2OEFFRkIKKzdGNDVDODUwOEM3RTYyMEIwRjdDQkVENjVBMUUzQUYxOEY1RTM4OTNDQ0NCNTZCMUM2RkMwQ0JCNzJDQUUyQzk1NDJGM0VEQjUyN0U5OTU3QjU5RDI2OTMzNkUwQzIwNEM1M0E1MURFRDdFQ0I0NDE1OUZGMjBGNkEyRjM2QzE3ODc1M0FBRjQ4NjFGMEQ2MjE0QjczRjdBRTZDNEZGN0JDOTQ5NEY0OUZDNUU4Mzc2ODlFNzM4QzY1MDZEMkM3MzU2OTgzREFDRTI5RjE4NTI5MEZFOUFCMjgzOURDNjJBOTNGNjA0MUZBNjA3OTYyMjdBQTI5MjM0RkRGRAorMkNCRgorNDZGMjU5MjIKK0I2ODgyMTNECitFOTY4M0U0NEFBMjMyNUQ2QkQ0MjhDRDg3MgorMjVDN0ZGMjg1RTdFRUM4NkNEQzI4RTk4MDFDRTcxNDY1M0VDRkQ3RjgzNzU3RDNGMEY3RTNGQzU1MTFBQjcyODMyOTI2MzNCOUJGMDhBOTU5QUYzRkQxQUU1Qzc0MUYwODVCRkM5N0MxNjY2QkVERTM0NzA5Nzk0RUI2QjM4QTJFNDI5RTQ4MkY3OTNBMUU5OTY0MEZBOTI0NTdCNUQyOEU2RUIKK0Q2QjJERTRGCis1NzlBMTE2NTQ4NUIyMjJDNzZFN0Q3NEMzNgorNDEyRjYxNEI2MDRBQUUxMDVBRUY3RjlFMUE2MUNENTUyMTc5NTk2N0IyNkMzOEQwQzYyRTFGMUI3Q0Q1QzkzNEY0NUEyMDA5NjA0MkM0QTU4QzcwRDBGRUJDOTJFQzA1NDIwNEFBMDMyNUM2NzZENEU5MTQwMkM3QkJEOEI0QTA3NjQ4OTI1OTA1MkJDRDQ5NEJEOEFBODU4QTAzRjg5QzU5M0IzOEI1MUQ0OTUzRkQzMzAyOUM2RQorQ0QyNjYyRkMKKzE0MjhGMUVGQTM3NjgyMEMyNDVCNjc1NzM4Cis5MTYzNkFCRDQ4OUQ5QTgxMkNEMjFGOTZEMTZGQkM4NTE1RTg5NDI1RDQ5OTk2QTY1NzBEMDMyNTNGMTcxMjJCQ0MwRDc1MTg1QTk5QzIwNzIwQkI3MDk0MzVDM0FBQzExNDY5MjQ4ODM1Qzg4MTlDMUU2REY2QUI3QzVBQjY5RkI2MTVDNjhDMTM0NDMxN0Y1RkZCN0VEMjA2QTVGMDUwOTY5QjFENUM3QTgxMTkyMzkyQUMyNTNCQ0QKKzQxNzk2RTFGCiswMjNDRjI2M0ZGNzM1MUFEMTBEMzAzQ0VFRjBECis5RTg5RTY2NkE2RTU1REVBQUU4NTk1REFDQkQ4RTY4ODQyODhGNDE0QTI3RDhCMjNBOUM5Qjc4NEJGOUUxODRBMjhGMjY4MDE5MUEyRUQxRjFEODZEM0E2MEIxMDA1RkFGMjk5RjYyNEE3MDQ4OUNGOURERkVEOEM1NTI3RjY4RUZDMDlCN0JEN0QzNjlGM0IwMjc3QjU3ODQ0NDQwOERGNEJGRUU5NUZCRDY0NzhGQ0VCMjFBQjBENzJDNkM3QTY2M0FEMUMwODU3NjEwMDkxRDgxOUM1NUM1RUI3RTMyNTkxRkE1RkZFMTk2M0NGNzQ0OEY0MjQ5ODY2MjMKKzlBNUMKKzNBQUFGQzk1MjVGMDlFMEVBMDJENEI1NjI1RjRCQzQ3RjM1NDg1MEM4RTNFMEM5RDNDMkRBQUEzMTIyODMxRDY4NTI2MkY1QkVFCitGNkVEMEUzNworMkExRUIzN0I4ODE4NUM5ODU4MzlGQjcxRTdBQgorRTZFRkVCMkFDQzM4MzNCQjlCOUVFQTgwNzdDQTQyRjc3RDVEQ0Q5RDAyNzAwNzE4RjQzMDgyMEY2RTU2NjA1QjQ1OUUzNzJEMURCNDc3QTJCNkQxNjU5NDhCQkQ0OEUzQUQzRDY4RTZGMTFFNjI5MUUxMUNGMEUxQTBEMkEzMkQ4MjFENUU5NUQyQjlENjU1MENFMTNDMTIxMjJBNDhBQzUzNERGNjI1RTA2Qzk5RjkxM0Q3MkRDMzdEMTlCN0Q3OUIwQjQyNUYyOTk1RDNBMgorQTI4MUZDODYKK0VBMzI0MzdBRUMyNjAwNkFFQUM0RjkxMzMzCitENkNEMzg5OURBRDczQUY3ODY1RTQ3RkE5Q0M2MzU1NUI0NDE2MTY4MEU1RkI4QkJCRDVENzI5RDBDRUM0MkY5Q0RFQzhENDkyQkY1RTgzQkM0MzlCMEYyMTM2QzhENzZENUE5NUVEN0NEQjIxQzVBQzJEQUEyRjUyRTdERkJBMDMwRkNFNzA4RjQyNjlENTVEOTVGNjNERDY3NzMKKzk3NkI0NTlECis4QjY3MTE1QzczMEZEOTcxOEEzQTE2NEEwQQorMUZBRUMyOTlEMEQzODBERDVDN0M0RDQzRDlDNTYwMjRCOTc0RDRCRDgyMTA0NTNGNEUyOEJERUVFRjNFMTgxOTVDOENGOUQxRTY1NjVGQjA5NjQyQzhEQTQyRUEzMzkzN0ZBODQxQzQKK0MxRURFRDVECitFRkQ4N0Q3NDA2NThCMTQ4NDNDQjRBNzQzREU2CiszQjdBODM5NTVCQUJGQTFBNTdFNzcwRjMzODJCREM1Q0QyRTNDNDU1OTRGRkU5NjI4MERFNUMwNkQ5OTU3Q0ZENkZDQzNCMzhCOERCMjEwNDkwMjk5NjVFMzE4NzAwREIyMTUzQjBFMzYyRDdFRTc0OTRGQzAxQTM1QUJGNkJFNzg5NEE0MkMwREI2NTM2RjNGMTVEQUY1RTBBRUJFNUJFN0RENEExRkExOEJGRDREQjBFODZDMDYzQTQyODVFM0U2QkJEM0EwMzM3ODQ0NQorNzEyNzI2RUMKKzk0QUQ1NzNGQ0U1RDJFQ0RCMUQyNTM5Njk2Cis3M0RGRjhBQjYyMTlFMUMyRTMzNkY5QUQ5MjEwREM4RTM1Nzc5QTBCQUMxMDM4NjBFM0YzNzlBNENDRDQ2MEI1NDNDMzQzODY1QzU4RkIwNDI1ODAxQzUyOEYyOUYzRTYwMEJCNzQ0RTRGQThDMUQ2NUE4QkZDOEE1MEZCNzI1NkMyODBBNDMzODFCOAorMDI2QTIzMjQKK0QyMzZERUZFNjA0NjZEQ0JBRTUyMDExMEJBRTAKKzFFNjdBNkYzRjQxNzBENzdENzZBQkM1QjJGNkRDNTQ4NDgyMjVGNkEwODc0NTA5QURDMTBGRDQ5ODZFQTgyRUJFODU1NUY4QTBCNzhEMEJCNEQzMjc3RDNDNDc3Njc5OUQ5RDNGMkVDRTk5QTQxMkQ4MUNCRTc4ODYzOTcxM0U3QTNGREFEN0E0NTlGMTk2NTAwMjBEQkY0NkMxNDQ2RjZEOTg5OTNFRjA5RjU3MTdFNDQ5MTlDMzZFMjdGODhDNUQwRTI3ODBFNTAzNzQzNzhENUUzREQzMkFFNTgzQjE4QkUKKzg2NEI4QzBGCiszMzEyOTZCMzI3ODRGRjgyMTg2MjM4NEQwQgorNkJDQTVDNzczOUEzMzlENEIxNTgyRTgxQUM2MjNGNEIzQTFGMTE1OUY2RDExQkM4OTRCNDk3QTRFRUFGNDJGNkM5QUVEMTVGMzZCNEE4MzNFMEE5QUQ3RDJFMzI0QkU5REVDQ0ExMkIwOEI5MjlBMzkyM0E3RkRCQTZCRDI0QkRCQTc5NTIzM0JERjMwRTI1NEM5NjdGRjhGMDkxODNGMUIyQURFMDRBRUYxRjg1RTlDNworRjRCQTEwODYKK0RDNDkyMjlDNjQ0RTA3QkI1NTYwNzdBNzYzQzMKKzE3OEYzOEJCRkQxNDAwODhDNzIzOTUxMERBQUI0Njg1RTkzNkI4NTlCOTJFOUUwMjBBOUJDQkJBQTJGQjY0Nzc2RDgwMDI2NEMxRTVCMzFERDgyMTk1N0JCNDJFMzMyNjU3QzcxNTAzRTMwMDRBOTZGOEM1NTQ0NThFQzc0NEI4MzA1RTA1NDhDRDUzQjczQzM0MDIwQTM0OUQ5NjY4QzA5MDNDMjg5NzI3OEY4NDUyRTAzRkU5QTlDMjNEMDAzOUNCNUJENUM2OEQwMDA0MzA0OTUwRTg3QjVBN0NEQ0JFMDY3RUFBRERFNkYzQUNCNTEyCis3Q0E2QzZERQorQUE1RkMyNzk4MzNGNjg2MjQ5QTIwMUVFRDgKK0I0RTk2QjVDQkI1NDU4RTYyRTdDQjk1NTVBNDdCOUEyM0FGNTU5REM4ODYxQzEzQkRDODhGNjk5RUNDMEEzMUI2NEYyRTI4RUM4MjM4QzY2MDBCQjNBRjc1MzdEMzgxRjVEREM2QzNFMEE5NUJBNjBFOEMzRjRDNEY2ODYyNTkyRDUwNjczMjEKKzkzRUEzQzhGCitDQjdBODc1ODg1MTlERTg4MDA4MTkzOTc0NQorRjlENUVFRUMxRDIyNDRDOTA1NDIzMzU3RjU2ODg1RjE1OTc2NTA5ODI1MDI3ODc0QTFGNDY0OENENjY1RUY2QkY4MzE3QjEzOTRGOTdEMEFCMjk3NDkwNUEzNjRERTg4M0UyRjdDQjE1QUExMzFBQjcxRTNGNEE4NjEKK0QyQzZEOEQxCitFOEFBNEE2N0NERDUzRDhCQUZGM0VEMUZDRDcwCitCNEE2ODU1RUExRTQ5MEE0CisxQzBCNzZFMworRjg3NjYxMjM3NEJGQjdGQjE3MUE3NkQ3NkU0N0Y4RjgzMjdEOTkwNzMzQTNEMzYxQTNCRUE2QkIwQ0NEMDlCRTczNUQKKzgxMEU3RTA1MThDNTA2RTc3NDFFOUU0RUI0NkZDMzgwQjcwQjNBMUI5Njc1NUI4MDc2MzZEQTQ1MUUzODJFRjNBN0M1MDk3MUMzODUKKzQyNERDMTI1RDMzOTczRkVFRENBRTQzRTUwQUExQjM3MUREODU1MTE1NUI2RTI5MURFMzAzNgorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0YiAxNC4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDFjMmMzYTM2MmMzODJkMGUwMTEwMDExMTJjMzQyYTJmMzMyODM4MzEwMTJkMzUzODAxMWIyYzI4MzkzYjM4MzAzNDJlMDExYzJjM2EzZDM1MzgzMTAxMWU+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MmMzODJkMzUzODMzMjgzNDJhMmM+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDBkPiA5NDM0IDEzMzAwIDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjgwIDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyODAgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI4MCAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyODAgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDE0YiBTRgorPDBjMTExMDFjMTUxODE3PiAxMjcxIDE0NTggMCAyMDU1IC0xIHMKKzwwMDAzMDIwMDBkMTQxMTAwMDcxMTFiMTUxMzE3MDAxODEyMDAwOTExMWMxOTExMWExMj4gMjA1NSAxNDU4IDUgNDcwMyAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA3MTExYjE1MTMxNz4gMTI3MSAyMDA3IDAgMTg5OSAtMSBzCis8MDAwNTBmMWIxNTEwMWI+IDE4OTkgMjAwNyAxIDI1MzkgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFjMmMzYTM2MmMzODJkPiAxMjcxIDIzNTMgMCAxOTgwIC0xIHMKKzwwMDMwMzkwMDJiMmMzOTMwMmUzNDJjMmIwMDI4MzgzNTNiMzQyYjAwM2EyZjJjMDAyOTI4MzkzMDJhMDAyYTMyMzAyYzM0M2EwOTM5MmMzODNjMmMzODAwMzMzNTJiMmMzMjBhMDAyMTJmMmMzODJjMDAyODM4MmMwMDNhM2QzNTAwMmMzZTJjMmEzYjNhMjgyOTMyMmMzOTAwMDkwMDM0MmMzYT4gMTk4MCAyMzUzIDEzIDk0NjEgMCBzCis8NDI+IDk0NjEgMjM1MyAwIDk1MzEgLTEgcworPDM2MmMzODJkPiAxMjcxIDI1OTggMCAxNjQzIC0xIHMKKzwwMDI4MzQyYjAwMzQyYzNhMzkyYzM4M2MyYzM4MGEwMDE2MmMzNDJjMzgyODMyMzIzZjAwM2YzNTNiMDAzZDMwMzIzMjAwMzUzNDMyM2YwMDJjM2UyYzJhM2IzYTJjMDAzYTJmMmMwMDM0MmMzYTM2MmMzODJkMDAzNjM4MzUyZTM4MjgzMzAwMDkwMDNhMmYyYzAwMzQyYzNhMzkyYzM4M2MyYzM4MDAzNjM4MzU+IDE2NDMgMjU5OCAxNCA5NDYxIDAgcworPDQyPiA5NDYxIDI1OTggMCA5NTMxIC0xIHMKKzwyZTM4MjgzMz4gMTI3MSAyODQzIDAgMTczNCAtMSBzCis8MDAzZDMwMzIzMjAwMjkyYzAwMzAzNDNjMzUzMTJjMmIwMDI5M2YwMDNhMmYyYzAwMzUzYTJmMmMzODAwMzkzZjM5M2EyYzMzMDQzOTAwMzAzNDJjM2EyYjBhPiAxNzM0IDI4NDMgOCA1NjUxIDAgcworPDI0MmYyYzM0PiAxMjcxIDMxNDYgMCAxODE3IC0xIHMKKzwwMDNmMzUzYjAwMmMzZTJjMmEzYjNhMmMwMDM0MmMzYTM2MmMzODJkMDgwMDNhMmYyYzAwMmQzMDM4MzkzYTAwM2EyZjMwMzQyZTAwM2EyZjI4M2EwMDNkMzAzMjMyMDAyZjI4MzYzNjJjMzQwMDMwMzkwMDNhMmYyYzAwMmMzOTNhMjgyOTMyMzAzOTJmMzMyYzM0M2EwMDM1MmQ+IDE4MTcgMzE0NiAxMyA4Mjg4IDAgcworPDAwMjgwMDJhMzUzNDNhMzgzNTMyMDAyYTM1MzQ+IDgyODggMzE0NiAzIDk0NjEgMCBzCis8NDI+IDk0NjEgMzE0NiAwIDk1MzEgLTEgcworPDM0MmMyYTNhMzAzNTM0PiAxMjcxIDMzOTEgMCAxOTQ0IC0xIHMKKzwwMDNhMzUwMDNhMmYyYzAwMzgyYzMzMzUzYTJjMDAzOTNmMzkzYTJjMzMwYTAwMjEyZjMwMzkwMDJhMzUzNDM0MmMyYTNhMzAzNTM0MDAzZDMwMzIzMjAwMjkyYzAwM2IzOTJjMmIwMDNhMzUwMDM2MjgzOTM5MDAzYTJjMzkzYTAwMmEzNTM0MmQzMDJlM2IzODI4M2EzMDM1MzQwMDMwMzQyZDM1MzgzMzI4PiAxOTQ0IDMzOTEgMTQgOTQ2MSAwIHMKKzw0Mj4gOTQ2MSAzMzkxIDAgOTUzMSAtMSBzCis8M2EzMDM1MzQ+IDEyNzEgMzYzNSAwIDE2MzAgLTEgcworPDAwMjgzNDJiMDAzODJjMzkzYjMyM2EzOTAwM2EzNTAwMjgzNDJiMDAyZDM4MzUzMzAwM2EyZjJjMDAzODJjMzMzNTNhMmMwMDM5M2YzOTNhMmMzMzBhMDAxZj4gMTYzMCAzNjM1IDkgNTc1OSAwIHMKKzwyYzJlMjgzODJiMzIyYzM5MzkwMDM1MmQwMDNhMmYyYzAwM2EzZjM2MmMwMDM1MmQwMDNhMmMzOTNhMDAyOTJjMzAzNDJlMDAzODNiMzQwOD4gNTc1MSAzNjM1IDcgOTE4OSAwIHMKKzwwMDNhMmYyYz4gOTE4OSAzNjM1IDEgOTUzMSAwIHMKKzwyYTM1MzQzYTM4MzUzMjAwMmEzNTM0MzQyYzJhM2EzMDM1MzQwMDNkMzAzMjMyMDAyOTJjMDAyODAwMjExMjFlMDAyYTM1MzQzNDJjMmEzYTMwMzUzNDAwM2IzOTMwMzQyZTAwMTEyMDEzMDAzOTM1MmEzMTJjM2EzOTBhPiAxMjcxIDM4ODAgOSA3MDY0IDAgcworPDFkMzQyYTJjPiAxMjcxIDQxODMgMCAxNzU3IC0xIHMKKzwwMDNhMmYyYzAwMmEzNTM0M2EzODM1MzIwMDJhMzUzNDM0MmMyYTNhMzAzNTM0MDAzMDM5MDAzYjM2MDAyODM0MmIwMDNhMmYyYzAwMmEzNTM0MmQzMDJlM2IzODI4M2EzMDM1MzQwMDMwMzQyZDM1MzgzMzI4M2EzMDM1MzQwMDJmMjgzOTAwMjkyYzJjMzQwMDM2MjgzOTM5MmMyYjA4MDAyODAwMzkyYzM2Mjg+IDE3NTcgNDE4MyAxNCA5NDYxIDAgcworPDQyPiA5NDYxIDQxODMgMCA5NTMxIC0xIHMKKzwzODI4M2EyYz4gMTI3MSA0NDI4IDAgMTYzMSAtMSBzCis8MDAyYTM1MzQzNDJjMmEzYTMwMzUzNDAwM2QzMDMyMzIwMDI5MmMwMDM1MzYyYzM0MmMyYjAwMmQzNTM4MDAzYTJmMmMwMDMzMmMyODM5M2IzODJjMzMyYzM0M2EwMDMwM2EzOTJjMzIyZDAwM2IzOTMwMzQyZTAwM2EyZjJjMDAxMDFlMTgzOTAwMjgzNDJiMDAzNjM4MzUzYTM1MmEzNTMyMzkwMDI4MzY+IDE2MzEgNDQyOCAxNCA5NDYxIDAgcworPDQyPiA5NDYxIDQ0MjggMCA5NTMxIC0xIHMKKzwzNjM4MzUzNjM4MzAyODNhMmM+IDEyNzEgNDY3MyAwIDIxMTggLTEgcworPDAwMmQzNTM4MDAzYTJmMmMwMDNhMmMzOTNhMGEwMDIxMmYyYzAwM2EyYzM5M2EwMDNkMzAzMjMyMDAyOTJjMDAzNjJjMzgyZDM1MzgzMzJjMmIwODAwMjgzNDJiMDAzYTJmMmMwMDM4MmMzOTNiMzIzYTM5MDAzZDMwMzIzMjAwMjkyYzAwMmIzMDM5MzYzMjI4M2YyYzJiMGE+IDIxMTggNDY3MyAxNCA4Njg2IDAgcworPDFjMmMzYTM2MmMzODJkPiAxMjcxIDQ5NzYgMCAxOTgwIC0xIHMKKzwwMDM2MzIyODJhMmMzOTAwMzQzNTAwM2EzODI4MmQyZDMwMmEwMDM1MzQwMDNhMmYyYzAwMmEzNTM0M2EzODM1MzIwMDJhMzUzNDM0MmMyYTNhMzAzNTM0MDAzZDJmMzAzMjJjMDAyOD4gMTk4MCA0OTc2IDkgNjQxMiAwIHMKKzwwMDNhMmMzOTNhMDAzMDM5MDAzMDM0MDAzNjM4MzUyZTM4MmMzOTM5MGEwMDEyMmMzODNhMjgzMDM0MDAyMTEyMWUwMDM1MzY+IDY0MTIgNDk3NiA3IDk0NjEgMCBzCis8NDI+IDk0NjEgNDk3NiAwIDk1MzEgLTEgcworPDNhMzAzNTM0MzkwOD4gMTI3MSA1MjIxIDAgMTc2NCAtMSBzCis8MDAzOTNiMmEyZj4gMTc2NCA1MjIxIDEgMjIwMiAwIHMKKzwwMDI4MzkwMDIwMWQyNzE5MTQxNDFlPiAyMjAyIDUyMjEgMiAzNDI2IDAgcworPDEwMWExODIzMTQwODAwMzAyZDAwMzkyYzNhMDAyODM5MDAzZjM1M2IzODAwMzkzZjM5M2EyYzMzMDQzOTAwMmIyYzJkMjgzYjMyM2EwODAwMzMyODNmMDAzNjNiM2EwMDM2MjgyYTMxMmMzYTM5MDAzNTNiM2EwMDM1MzQwMDNhMmYyYzAwMmEzNTM0PiAzMzk5IDUyMjEgMTMgOTQ2MSAwIHMKKzw0Mj4gOTQ2MSA1MjIxIDAgOTUzMSAtMSBzCis8M2EzODM1MzI+IDEyNzEgNTQ2NiAwIDE1OTUgLTEgcworPDAwMmEzNTM0MzQyYzJhM2EzMDM1MzQwYT4gMTU5NSA1NDY2IDEgMjY5OSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA2MGIwZTAwMGUxYzE1MTYxNTFkMGYxYzE1MTgxNz4gMTI3MSA1ODQ4IDEgMjczNyAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTIxZTIyPiAxMjcxIDYxOTQgMCAxNzIzIC0xIHMKKzwwMDNiM2EzMDMyMzA0MDI4M2EzMDM1MzQ+IDE3MjMgNjE5NCAxIDI2ODcgMCBzCis8MDAzMDM5MDAyODAwMmQzODJjMzczYjJjMzQzYTMyM2YwMDM4MmMzNzNiMmMzOTNhMmMyYjAwMzMyYzNhMzgzMDJhMDAzNTJkMDAzNDJjM2EzZDM1MzgzMTMwMzQyZTAwMzYyYzM4MmQzNTM4MzMyODM0MmEyYzBhMDAyMjM0MmQzNTM4M2EzYjM0MjgzYTJjMzIzZjA4PiAyNjg3IDYxOTQgOSA5NTMxIDAgcworPDMwM2E+IDEyNzEgNjQzOSAwIDEzOTggLTEgcworPDAwMmEyODM0MDAyODMyMzkzNTAwMjkyYzAwMzUzNDJjMDAzNTJkMDAzYTJmMmMwMDMzMzUzOTNhMDAyYjMwMmQyZDMwMmEzYjMyM2EwMDMzMmMzYTM4MzAyYTM5MDAzYTM1MDAzMzJjMjgzOTNiMzgyYz4gMTM5OCA2NDM5IDExIDY0NTggMCBzCis8MDAyODJhMmEzYjM4MjgzYTJjMzIzZjBhMDAxYzJjM2EzNjJjMzgyZDAwMzAzOTAwMmIyYzM5MzAyZTM0MmMyYjAwM2EzNT4gNjQ1OCA2NDM5IDUgOTUzMSAwIHMKKzwzYjM5MmM+IDEyNzEgNjY4NCAwIDE1NzMgLTEgcworPDAwMzUzNDJjMDAzNTJkMDAzOTJjM2MyYzM4MjgzMjAwMDUzNjJjMzgyZjI4MzYzOTAwMzYzMjI4M2EyZDM1MzgzMzAwMmIyYzM2MmMzNDJiMmMzNDNhMDYwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzNDAwMzMyYzI4MzkzYjM4MmMzMzJjMzQzYTAwMzkyYTJmMmMzMzJjMzkwYT4gMTU3MyA2Njg0IDEwIDkxNDggMCBzCis8MDAxMzJjPiA5MTQ4IDY2ODQgMSA5NDYxIDAgcworPDQyPiA5NDYxIDY2ODQgMCA5NTMxIC0xIHMKKzwzNjJjMzQyYjMwMzQyZT4gMTI3MSA2OTI5IDAgMjAwMSAtMSBzCis8MDAzNTM0MDAzYTJmMmMwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzNDAwMzMyYzI4MzkzYjM4MmMzMzJjMzQzYTAwM2EyYzJhMmYzNDMwMzczYjJjMDAzYjM5MmMyYjA4MDAyODAwM2IzNDMwMzczYjJjMDAzOTMwMzQyZTMyMmMwOTMyMmMzYTNhMmMzODAwMmEzNTJiMmM+IDIwMDEgNjkyOSAxMSA5MTgzIDAgcworPDAwM2QzMDMyMzI+IDkxODMgNjkyOSAxIDk1MzEgMCBzCis8MjkyYz4gMTI3MSA3MTc0IDAgMTQ4OSAtMSBzCis8MDAzMDM0MmEzMjNiMmIyYzJiMDAzMDM0MDAzYTJmMmMwMDEyMWUyMjAwMzYzNTM4M2EzMDM1MzQwMDM1MmQwMDNhMmYyYzAwM2EyYzM5M2EwMDI5MjgzNDM0MmMzODAwMmQzNTM4MDAyOTM1M2EyZjAwM2EyZjJjMDAzMjM1MmEyODMyMDAyODM0MmIwMDM4MmMzMzM1M2EyYzAwMzkzZjM5M2EyYzMzMzkwYT4gMTQ4OSA3MTc0IDE2IDkyNjYgMCBzCis8MjEyZjJjPiAxMjcxIDc0NzcgMCAxNjMxIC0xIHMKKzwwMDJiMmMyZDI4M2IzMjNhMDAxMjFlMjIwMDMzMmMyODM5M2IzODJjMzMyYzM0M2E+IDE2MzEgNzQ3NyAzIDQwNDkgMCBzCis8MDAzYTJjMmEyZjM0MzAzNzNiMmMwMDMwMzkwMDI5MjgzOTJjMmIwMDM1MzQwMDNhMmYyYzAwM2IzOTJjMDAzNTJkMDA0MTMyMzUzNTM2MmMzODM5MDMwMDNkMmYzMDJhMmYwMDNkMzAzMjMyMDAzOTMwM2EwMDMwMzQwMDNhMzAyZTJmM2E+IDQwNDkgNzQ3NyAxMyA5NTMxIDAgcworPDMyMzAzYTNhMzIyYzAwMzIzNTM1MzYzOTAwMmEzNTM0MzkzYjMzMzAzNDJlMDAyODM0M2YwMDEyMWUyMjAwMzIyYzJkM2EwMDM1M2MyYzM4MDAyOTNmMDAzYTJmMmMwMDM0MmMzYTNkMzUzODMxMzAzNDJlMGEwMDIxMmYzMDM5PiAxMjcxIDc3MjIgMTAgNjg5OCAwIHMKKzwwMDMzMmMzYTJmMzUyYj4gNjg5OCA3NzIyIDEgNzYyNyAwIHMKKzwwMDMwMzkwMDM0MzUzYTAwM2QzMDNhMmYzNTNiM2EwMDMwM2EzOTAwMjgyYjJiPiA3NjI3IDc3MjIgNSA5NDYxIDAgcworPDQyPiA5NDYxIDc3MjIgMCA5NTMxIC0xIHMKKzwyYzJiPiAxMjcxIDc5NjYgMCAxNDkyIC0xIHMKKzwwMDM1M2MyYzM4MmYyYzI4MmIwODAwMjkzYjNhMDAzZDJmMmMzODJjM2MyYzM4MDAzNjM1MzkzOTMwMjkzMjJjMDgwMDJhMjgzODJjMDAyZjI4MzkwMDI5MmMyYzM0MDAzYTI4MzEyYzM0MDAzYTM1MDAzMTJjMmMzNjAwM2EyZjI4M2EwMDM1M2MyYzM4MmYyYzI4MmIwMDNhMzUwMDI4MDAzMzMwMzQzMDMzM2IzMzBhPiAxNDkyIDc5NjYgMTUgOTUzMSAwIHMKKzwxODJkPiAxMjcxIDgyMTEgMCAxNDIyIC0xIHMKKzwwMDNmMzUzYjAwM2QzNTNiMzIyYjAwMzIzMDMxMmMwMDNhMzUwMDJlMmMzYTAwMjgzNDAwMmMzOTNhMzAzMzI4M2EyYzAwMzUyZDAwM2EyZjJjMDAzNTNjMmMzODJmMmMyODJiMDgwMDM4M2IzNDAwMzUzNDJjMDAzYTJjMzkzYTAwM2QzMDNhMmYwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzNDA4MDAyODM0MmIwMDM1MzQyYz4gMTQyMiA4MjExIDE4IDk1MzEgMCBzCis8M2EyYzM5M2E+IDEyNzEgODQ1NiAwIDE1OTUgLTEgcworPDAwM2QzMDNhMmYzNTNiM2EwODAwMjgzNDJiMDAyYTM1MzMzNjI4MzgyYzAwM2EyZjJjMDAzYTJmMzgzNTNiMmUyZjM2M2IzYTM5MGEwMDIyMzkyYzAwMzUyZDAwMzIzNTM1MzYyYzM4MzkwMDMwMzQwMDMzMmMyODM5M2IzODMwMzQyZTAwMTIxZTIyMDAzYjNhMzAzMjMwNDAyODNhMzAzNTM0MDAzMDM5PiAxNTk1IDg0NTYgMTMgOTI0OSAwIHMKKzwwMDMwMzQ+IDkyNDkgODQ1NiAxIDk0NjEgMCBzCis8NDI+IDk0NjEgODQ1NiAwIDk1MzEgLTEgcworPDJiMzAyYTI4M2EyYzJiPiAxMjcxIDg3MDEgMCAxOTMzIC0xIHMKKzwwMDI5M2YwMDNhMmYyYzAwMzIyYzNhM2EyYzM4MDAyYTM1MmIyYzAwNDExYTBhMDM+IDE5MzMgODcwMSA1IDQwMDAgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwOTBhMGQwOD4gMTI3MSA5MDA0IDAgMTg2NiAtMSBzCis8MDQ+IDE4NzAgOTAwNCAwIDE5MjggLTEgcworPDAwPiAxOTI4IDkwMDQgMSAxOTY2IDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDE1PiAxOTY2IDkwMDQgMSAyMTM1IDAgcworPDM1MzgwMDI4MmEyYTNiMzgyODNhMmMwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzNDAwMzUzNDAwMWIxZTAwMzkzZjM5M2EyYzMzMzkwODAwMzAzYTAwMzAzOTAwMDcyYTM4M2IyYTMwMjgzMjA3MDAzYTJmMjgzYTAwMzQyYzNhMzYyYzM4MmQwMDI4MzQyYjAwMzQyYzNhMzkyYzM4M2MyYzM4PiAyMTI3IDkwMDQgMTMgOTUzMSAwIHMKKzwzMTM0MzUzZD4gMTI3MSA5MjQ5IDAgMTc1NiAtMSBzCis8MDAzYTJmMmMwMDM0M2IzMzI5MmMzODAwMzUyZDAwMzYzODM1MmEyYzM5MzkzNTM4MzkwMDM1MzQwMDNhMmYyYzAwMzkzZjM5M2EyYzMzMGEwMDE1PiAxNzU2IDkyNDkgOCA1NTE5IDAgcworPDM1MzgwMDM5MzUzMzJjMDAzOTNmMzkzYTJjMzMzOTAwMDUxNzFlMDkyMjI1MDYwMDNhMmYzMDM5MDAyYTI4MzQwMDI5MmMwMDJiMmMzYTJjMzg+IDU1MTEgOTI0OSA3IDk0NjEgMCBzCis8NDI+IDk0NjEgOTI0OSAwIDk1MzEgLTEgcworPDMzMzAzNDJjMmI+IDEyNzEgOTQ5NCAwIDE4NDAgLTEgcworPDAwMzYzODM1MmUzODI4MzMzMzI4M2EzMDJhMjgzMjMyM2YwYTAwMWQzYTJmMmMzODAwMzkzZjM5M2EyYzMzMzkwMDM4MmMzNzNiMzAzODJjMDAzYTJmMmMwMDNiMzkyYzAwMzUyZDAwM2EyZjJjMDA0MTA5MzQwMzAwMmUzMjM1MjkyODMyMDAyYTM1MzMzMzI4MzQyYjAwMzIzMDM0MmM+IDE4NDAgOTQ5NCAxMiA5MjMzIDAgcworPDAwMjgzOD4gOTIzMyA5NDk0IDEgOTQ2MSAwIHMKKzw0Mj4gOTQ2MSA5NDk0IDAgOTUzMSAtMSBzCis8MmUzYjMzMmMzNDNhMGE+IDEyNzEgOTczOSAwIDIwMDcgLTEgcworPDE3MWUwOTIyMjU+IDEyNzEgMTAwNDEgMCAyMDg3IC0xIHMKKzwwMDBjMGIwYTI1MDAzNTJkMmQyYzM4MzkwMDI4MDA0MDJjMzgzNTAwMjgyYjJiMzAzYTMwMzUzNDI4MzIwMDM1M2MyYzM4MmYyYzI4MmIwODAwM2MyYzM4M2YwMDI4MmEyYTNiMzgyODNhMmMwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzNDAwMzMyYzJhMmYyODM0MzAzOTMzPiAyMDg3IDEwMDQxIDExIDk1MzEgMCBzCis8MjkyODM5MmMyYj4gMTI3MSAxMDI4NiAwIDE3OTEgLTEgcworPDAwMzUzNDAwM2EyZjJjMDAzNjM5M2EyODNhMDUwNjAwMzkzZjM5M2EyYzMzMDAyYTI4MzIzMjBhMDAxODJkMDAzZjM1M2IwMDI4MzgyYzAwMmEzNTMzMzYzMDMyMzAzNDJlMDAzNTM0MDAxNzFlMDkyMjI1MDAwYzBiMDgwMDNmMzUzYjAwMzkyZjM1M2IzMjJiMDAzODJjMzYzMjI4MmEyYzAwM2EyZjJjPiAxNzkxIDEwMjg2IDE2IDk1MzEgMCBzCis8NDEwOTEzMjIyMDE0MjcxYTFkMWQxZTE0MWY+IDEyNzEgMTA1MzEgMCAzMTgxIC0xIHMKKzwwMz4gMzE2OSAxMDUzMSAwIDMyNjggLTEgcworPDAwMzAzNDAwM2EyZjJjMDAzMzI4MzEyYzJkMzAzMjJjMDAzZDMwM2EyZjAwNDEwOTEzMjIyMDE0MjcxZTIwMjE+IDMyNjggMTA1MzEgNSA2Njc4IDAgcworPDEwPiA2NjU4IDEwNTMxIDAgNjgyMSAtMSBzCis8MjE+IDY4MDEgMTA1MzEgMCA2OTQwIC0xIHMKKzwwMzAwMjgzNDJiMDAzODJjMmEzNTMzMzYzMDMyMmMwYTAwMjQyZjJjMzQwMDNhMmYzMDM5PiA2OTQ0IDEwNTMxIDQgOTUzMSAwIHMKKzwzMzJjM2EyZjM1MmI+IDEyNzEgMTA3NzYgMCAxOTY3IC0xIHMKKzwwMDMwMzkwMDI5MmMzMDM0MmUwMDNiMzkyYzJiMDgwMDNhMmYyYzAwMzIyYzNhM2EyYzM4MDAyYTM1MmIyYzAwNDExODAzMDAzZDMwMzIzMjAwMjkyYzAwMmIzMDM5MzYzMjI4M2YyYzJiMGE+IDE5NjcgMTA3NzYgMTAgNjUyNiAwIHMKKzwxZDNhMmYyYzM4MDAyYTM1MmIyYzM5MDAzMzI4M2YwMDI5MmMwMDMwMzQyYTMyM2IyYjJjMmIwMDMwMzQwMDMyMjgzYTJjMzgwMDNjMmMzODM5MzAzNTM0MzkwMDM1MmQwMDM0MmMzYTM2MmMzODJkMGEwMDI0MmYyYzM0MDAzYTJmMmMwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzNDAwMzMyYzJhMmYyOD4gMTI3MSAxMTA3OSAxNCA5NDYxIDAgcworPDQyPiA5NDYxIDExMDc5IDAgOTUzMSAtMSBzCis8MzQzMDM5MzMwMDMwMzkwMDNiMzQzMTM0MzUzZDM0MDgwMDJjMzAzYTJmMmMzODAwMjgwMDQxMjIwMzAwMzUzODAwMjgwMDQxMGYwMzAwM2QzMDMyMzIwMDI5MmMwMDJiMzAzOTM2MzIyODNmMmMyYjBhPiAxMjcxIDExMzI0IDExIDYzNjEgMCBzCis8MTYzODJjMjgzYT4gMTI3MSAxMTYyNyAwIDE4MDMgLTEgcworPDAwMmEyODM4MmMwMDM5MmYzNTNiMzIyYjAwMjkyYzAwMmMzZTJjMzgyYTMwMzkyYzJiMDAzZDJmMmMzNDAwMzIzNTM1MzEzMDM0MmUwMDI4M2EwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzNDBhMDAxMTJjMDAyYTJjMzgzYTI4MzAzNDAwM2YzNTNiMDAyODM4MmMwMDJkMjgzMzMwMzIzMDI4Mzg+IDE4MDMgMTE2MjcgMTQgOTUzMSAwIHMKKzwzZDMwM2EyZj4gMTI3MSAxMTg3MSAwIDE2NTcgLTEgcworPDAwM2EyZjJjMDAzYTJjMmEyZjM0MzAzNzNiMmMwMDI5MmMzMDM0MmUwMDNiMzkyYzJiMDgwMDI4MzQyYjAwMzAzYTM5MDAwMDMwMzMzNjMyMzAyYTI4M2EzMDM1MzQzOTBhMDAxNT4gMTY1NyAxMTg3MSA5IDYwODcgMCBzCis8MzUzODAwMmMzZTI4MzMzNjMyMmMwODAwMjgwMDMzMmMyYTJmMjgzNDMwMzkzMzAwM2EyZjI4M2EwMDMwMzkwMDI5MjgzOTJjMmI+IDYwNzkgMTE4NzEgNiA5NTMxIDAgcworPDM5MzUzMjJjMzIzZjAwMzUzNDAwMTIxZTIyMDAyYTJmMjgzODJlMmMyYjAwM2EzNTAwM2EyZjJjMDAzNDJjM2EzNjJjMzgyZDAwMDUzNDJjM2EzOTJjMzgzYzJjMzgwNjAwMzYzODM1MmEyYzM5MzkwMDI4MzIzNTM0MmMwMDNkMzAzMjMyMDAzMjMwMzEyYzMyM2YwMDNiMzQyYjJjMzgwOTM4MmMzNjM1MzgzYTAwM2EyZjJjPiAxMjcxIDEyMTE2IDEzIDk1MzEgMCBzCis8MzgyYzI4MzI+IDEyNzEgMTIzNjEgMCAxNjIwIC0xIHMKKzwwMDEyMWUyMjAwM2IzYTMwMzIzMDQwMjgzYTMwMzUzND4gMTYyMCAxMjM2MSAyIDMwNjkgMCBzCis8MDAyMDE4MTYxYzE4MTUxODEyMTAxYzIxMWE+IDMwNjkgMTIzNjEgMSA0Njg1IDAgcworPDI2MGEwMDFiM2IyYTJmMDAzNDJjM2EzZDM1MzgzMTAwMzYzODM1MmEyYzM5MzkzMDM0MmUwMDNhMjgzMTJjMzkwMDM2MzIyODJhMmMwMDI4M2QyODNmMDAyZDM4MzUzMzAwM2EyZjJjPiA0NjUwIDEyMzYxIDggOTUzMSAwIHMKKzwzYjM5MmMzOD4gMTI3MSAxMjYwNiAwIDE2NTQgLTEgcworPDAwMzYzODM1MmEyYzM5MzkwMDJhMzUzNDNhMmMzZTNhMGEwMDEyMjgzYzJjMjgzYTAwMTEyYzM0MmEyZjMzMjgzODMxMmMzODAyPiAxNjU0IDEyNjA2IDQgNTE4NCAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICg5KSA5CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzQgcHV0CitkdXAgMyAvQzAwMzkgcHV0CitkdXAgNCAvQzAwNDAgcHV0CitkdXAgNSAvQzAwNDEgcHV0CitkdXAgNiAvQzAwNDQgcHV0CitkdXAgNyAvQzAwNDUgcHV0CitkdXAgOCAvQzAwNDYgcHV0CitkdXAgOSAvQzAwNDcgcHV0CitkdXAgMTAgL0MwMDQ4IHB1dAorZHVwIDExIC9DMDA0OSBwdXQKK2R1cCAxMiAvQzAwNTUgcHV0CitkdXAgMTMgL0MwMDU3IHB1dAorZHVwIDE0IC9DMDA1OCBwdXQKK2R1cCAxNSAvQzAwNjAgcHV0CitkdXAgMTYgL0MwMDYyIHB1dAorZHVwIDE3IC9DMDA2NSBwdXQKK2R1cCAxOCAvQzAwNjYgcHV0CitkdXAgMTkgL0MwMDY3IHB1dAorZHVwIDIwIC9DMDA2OCBwdXQKK2R1cCAyMSAvQzAwNjkgcHV0CitkdXAgMjIgL0MwMDczIHB1dAorZHVwIDIzIC9DMDA3NiBwdXQKK2R1cCAyNCAvQzAwNzcgcHV0CitkdXAgMjUgL0MwMDc4IHB1dAorZHVwIDI2IC9DMDA3OSBwdXQKK2R1cCAyNyAvQzAwODAgcHV0CitkdXAgMjggL0MwMDgzIHB1dAorZHVwIDI5IC9DMDA4NCBwdXQKK2R1cCAzMCAvQzAwODkgcHV0CitkdXAgMzEgL0MwMDkxIHB1dAorZHVwIDMyIC9DMDA5MyBwdXQKK2R1cCAzMyAvQzAwOTUgcHV0CitkdXAgMzQgL0MwMDk3IHB1dAorZHVwIDM1IC9DMDA5OCBwdXQKK2R1cCAzNiAvQzAwOTkgcHV0CitkdXAgMzcgL0MwMTAwIHB1dAorZHVwIDM4IC9DMDEwMSBwdXQKK2R1cCAzOSAvQzAxMDIgcHV0CitkdXAgNDAgL0MwMTAzIHB1dAorZHVwIDQxIC9DMDEwNCBwdXQKK2R1cCA0MiAvQzAxMDUgcHV0CitkdXAgNDMgL0MwMTA2IHB1dAorZHVwIDQ0IC9DMDEwNyBwdXQKK2R1cCA0NSAvQzAxMDggcHV0CitkdXAgNDYgL0MwMTA5IHB1dAorZHVwIDQ3IC9DMDExMCBwdXQKK2R1cCA0OCAvQzAxMTEgcHV0CitkdXAgNDkgL0MwMTEyIHB1dAorZHVwIDUwIC9DMDExNCBwdXQKK2R1cCA1MSAvQzAxMTUgcHV0CitkdXAgNTIgL0MwMTE2IHB1dAorZHVwIDUzIC9DMDExNyBwdXQKK2R1cCA1NCAvQzAxMTggcHV0CitkdXAgNTUgL0MwMTE5IHB1dAorZHVwIDU2IC9DMDEyMCBwdXQKK2R1cCA1NyAvQzAxMjEgcHV0CitkdXAgNTggL0MwMTIyIHB1dAorZHVwIDU5IC9DMDEyNCBwdXQKK2R1cCA2MCAvQzAxMjcgcHV0CitkdXAgNjEgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy01MCAtMjU2IDkyMCA3NjRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMjQ3REE3RkM5MUI5RkVCQTgyOTI1QzdCN0E5QjBEMjJERDEKKzdDMEU5QTcwOTM2MDhGMTQxMDU0NkYwMAorMDlGOTg1MzFCNTk1OUI1ODhDCis3OUNDMzEwMworMDQ5NTJBMjU5QjgxRTQ1MjExMUIxNjE4ODlGMgorMzM0N0Q1QjYwQkNCRUU5REVBMzIwRUMzNkY4RjhFNDQ4NUMwM0NENkVFQjNGODgyMTgwMDg2Q0UwNDcxRTFDQTFBNEYyRUIxRDc5ODU0RkFFQzlFMDk1RkUyNkNGQkNBMTMzRTM2MTI0Q0RFQkI3RDhBODUzMDBBRDFGMEY5MTZFRTczMENCOUMyMTAzNjFCODI3RkY2Mzc1MTBBNDdBMjBCNDc3RDY3ODhEMEM0RTQ4QjExOTVDMzI5Mzc4QUExRDg1NzRBNkZENkJFODQKKzhDMUM3QzhDCis4ODA1NDc5NUZGRThFNkQ4NDczMzlDMjAzNworQ0Y2ODM0RUJGNTdFNTU5QTU0MUJDNDFENDM1NUE3QjkwMUJENkJFQTEzODBFNDlGOTVGNTlFMDZDNTQwMjlEN0QzRTI1RjVDNzlDRjAyQkU1MDM4MDYwOUZCQ0VCQTcwMEIzNDEyMjczRUY4QzFEMAorQ0I1RjlDNUIKKzM2REM0RTQ1MTkxRTQ5MkYzN0FBMTlFQTY2Cis0QzA2MzEyQ0I4OTlGNzYyMjZFNUNENDg3MjYxOUQ4NzI0QjBBNjNCMzkzOTM5NEFGRDY1MDdFQ0RFQzhGODA5MzUzRjIxOUY4QjRDNTVCMEEwNjlCNzY2Qzg5QTY5MDFENDAxQTNDN0UyMTJGODUzMDBENUU5QTZCRENGOThCRgorN0Y3REE3REIKKzdBREQ4QzZGOTU3MUUxQTMxNTYwQjAyQjE5CisxNUNGNDhDREVENTQxOEVBQTZGMjE4QTFGQzIxRUFCQ0NENTRDNDhDODlEMDdDNUM2QzY3RjkzNTU2QURDQTYzNEY1MjJCQTU5RkM2MDM3OEU4QzZFQzQ1RDVCOUZBMjU0N0VBODVGQ0E2RDM2MzM5NTc4RTVBOUIxMjcyQjcKKzVCNkIwMEY2CisxN0REODY1RDc2NjE2MTI1MEE2QkU0MzcyNworODlBNUU0QTgwNjUwQ0M4NThDODBCMEYzMjIzNEEyQzE0NjQ3NDA0QTc3OTI5NEEwQUUwOEFEM0IzNTk3RDhDRTM5N0I0RjBFMEI3RTFCODFFNEEyRjhBMTQ0NUI0OUNFQjM1NzRDNTAyMTE2MDI4MENGCis1ODc2MjZERgorQzVENzFBRkIxNTA0NjlFNjA5QUI3NTBFNDEKK0I3Nzk5N0JCQUIyODg5OTRCRTk1MkM0NjJGMUY4NDI5Q0RDNTFDQjI4NzI5MTYKK0Q0M0U3NzZDCiszNkI0RkZGREQwNkRDNjVCMDU0NjI2OTNDMworMkZFNUIyMEVFRDhDOTA1NTlCMEY1RTRBMzU3MUJDRDZGMjMyNTQ2RkZBM0UzMkNGRUM3RUZGNUY2OTVEMDgKK0FDREQwNkJECitDMTk0RUNBNzdBNDA4RDZFN0ExNDlGN0NERAorRUZERjZBRDQzNjAwNTFCMzJEMEFCN0VFMkVDOUQyQkYyMkNCRTA4NDFERjI2MDA4QTk3RDA4QzYKKzRCODcyRDZFCitGMzgzNkJBNUM1QTlBQzMyRDFBMzY1RkFGQworNjYzODk3NjE1NkU0NDVGNTk3OEI3MjVBNTFCQjQ2NjFFQzEzMTY4MTFEM0Q0OTE4QjA4QkJFNTIyNDEyQjZEMjczQkU5M0M3QzMxQjA0RERGQjlCM0Y1Nzg5QzA3QTI2ODE3NThDODVDOTY0N0M3RTZGREQ0NUYyOTdGRkIxMzA4ODkzQTI5MzMxMkVDQzk3NTFGRAorQUVBQjIxMzEKK0I1QjJERUM4RUU2OUU3RDU1NDY0RUU3QjFECitCRjM1MUZEOTJFMEY1NzMwOTFBREJBMzA4RjI3OTA3OUU2RTNGMUEwRTFEMzM3MzBBNDY2NTBBQTBCOEExRkFCMjQ5RUQzMzcwQ0UyMEIwODVDRTIxODYwODZGQzY4ODVGQ0U4OUM5MzM1RUY5RDE3RUVEMzM1MjA2NkJFMEUKK0RBMDU0RkYzCitGNUU0MEE3NkYyNTY3ODgzMDBGQTNGODFFMgorOTdFN0FFQTNGRTFBQTZBOTRFRThFRkNCODJFRUNEOENFMTM0M0Q1NjlDNTdCRTI5OUM5NUQ5RUM5M0I4QjZCNTI4Q0E2N0RGQzM4MkFFOTk4QUQ4MTQKK0RBQjUyQzUzCitGMTIzM0Q1NzI3MTA4RTgxOTM2MzM4QkNCNjFCCiswM0U2REUxMkQ4QTA3RkY2OTcwM0I0NzI3M0RERTA1NDNCNjY3RkVGOUQ5MzQ5MTNBOTFEMDdFNTA1RDUzQUNCNkI3OUMyMTEwRjZEMzhDOTBCNjUwMkMwNjNBRjcwODM2RjFGNkU3OERGODVDQkM4MkQzQUNDMDkzRTAyRjQ3REExM0E4MUU0OUYwRDJEQ0M3QkRDMjY4MkZCNTMwRTg4QzUwQkZBRDYwNUE3Nzc2RTAxQzI1MjA0MDRGRjBBQTJCQzg0MTk5OUY4Cis3RTk1RUY5MQorOUEwMTU1N0Y4ODkzOTQ0RkY4Mzg0QUYwNTYKKzJDODU2OTRDMjY2REUzNjhERTc4NEYzMTMyMDIxQzhGN0RGOUFBQUUxMDVEMkMxRDkyQTExRUFCMjdBMDVCNzEwNkEzMDczMDI2QzJERThFOERFMzY0QzEzOTc2RURGQTNBNUQxN0U5Mjk5NgorMTM4RUJBOTAKKzcwRjkwQ0U2NDE2MDQ0QzJENUU3NDcwOUM3CiszODk4OUU5MzIzMTI5ODFGNjQ5NEZDNEZCQkJFNDQ1MDA4NUNBOTExOUNCQjYzQzIxRUVEQzI3MzQ2M0YzRDRENjhDRkMxQTZDMDg2REY5MzUxCitCODEzOTJCNQorNENEOEVCOEY4QTRCRDM4RTM3NzAyOUU2QzUKKzc4RjUyMzk3MDE4OTY1MzBFQjRBRTZBNTBFN0Q1RUU2N0M2OTVEQjBCQkY0Nzc2M0FEMEVDNzZERURDOEI3OTNEQTlENTdCOURCNEUyNworMTFENDAwMjMKK0Q3QkVBM0NCMzE0QkZCOTA1M0RCMkEzMUFBQTcKKzQzMkQ3RDNCREZFMzlDMkYzRUZERkE0QkNBMjJFRTc0QTM4MTVERDNDRjI0M0M5N0VEQkQ1RkI5NDc2M0M3M0EzNzI2OEQ3REEzOTJFOEMxMkZFQUIwRTRFOEYxMzBDNTg3MDY4MTZEQzZGOUM3ODZBNTk5OEExMTdCMEQ4RUVCQTk0QTEyRjdENzJGN0E1RkVCQzUyNjc0QzU1NUIzNDk5MTZERDQ0Q0YzNUQ1MDgzQkJGQjlFODkwRkEzQzI2NTE3RkNBMTg0MkY4Mzk4QjE1ODc0NUUxRkE4OTg2NzUxNzU1RjVFCisxM0IzNjEwNgorMkMwRDUxMEVBRjQ4RDBGRDdGQ0EzOUI0M0UwNworOUFBNzFGNUM5REI2OUREOTlDNzJFNEFBRjhCQThENzkxODU5ODI5OEI5NjlCMzZENjA3QzdENEE5MTg2QzI3NUY2N0Y0QjY0RjQ4N0NEMTMzNTQ0MDBDMzg5QTMwNTE1RjhFM0RDOEI3QTE5REQyQTAyODEwMTZGNTIyNjlDNUMyNDc1RkJBRjA2MUYyQzdCNTYzMTgyRTYxMzgxRDY0MTlCNEY2RkU0NTQ2ODE4RUU0RDU0QTQ3QUI3MjU4NDcyMDU0RkE2QjRFNUM3OTQzQkJCRTkzMEYzQ0Q0NjA5MzMxOEEwN0EwRjhDNTVBMUJCQTgxMTlFMDUwRUI4CiswQzQ4Cis3QQorQTVBMTAyNzkKKzVCQjJCOThDNjMzRkE5RTZFODYwMkIwRDJDCisxRTRGNzhGMDcxNDAxODI2M0QwQ0MyMkREMjFCOUQ2MkY0OTUyQUE1MEQzM0Q2NkZGNTY0QkNGQjMzRTU5NjFDOTJGNTAwM0FDQzNFNjBBNEEzOEVBRTU5NjQyRjkwMUVGQzZBOTcxQTg2MTBDOTIxOTVGQTMxRDY3RTY2RTlGRjVGNDE4RTAzMTgwOUFFMEU1RjExNDdFMzM3OUUwREY5MEEyQjIxNTQzNDQ3QzBFMzI2NjBDQjAyODYwQ0RCRUZDNgorQjA0OUY4OUUKK0ZCMDJBQzc2REY1NjY3MzJBMDc2MTI0QTU5Cis0MTBFRjUxODI4RTM3QUNDMkMyNjAzQzIxNzQyRkQyQUQyRjVGNUUwRDQxRjhDQUNDOUE1ODY0MUE3OEM5NUVCMEIzNUUyN0ZEQ0JDMEU0ODk1QkQ4QjBEODE3ODNFRTk1RDhFN0QyRTJDMDQwM0VGOTQ2OEIwNjkwRkUyM0FGMzU3NzVCMjlGQzA1RTY1N0MwMTkzNzUwRjRFODkzQUI2NjVCQ0EyNDMyNzZCQ0FCMTZDNzg2MkVEOTc2MTA3MUJDNzI2QUEKK0E4ODg0Qzg4CitBMzJCOEUxNDBERTNBRjhFRTQ4NDJEMTU4RTg4CitFRTNGNTkwOUE1RjgzODQ1NzYxQkM0QUQ5NzQ0MTQyNTE4RTEyQjY2QjI2NDQ2MEQ2QUU1NjlCREY3NTM2RjA4MEJERjg0MTYwRjU1MDA3NkUwOTE3NjZDMkUwMjg1MjIwMkM1ODFBM0FBNjQ0RUY1MTI0NDgyQ0FGRjA2NjZFOUY4NzQ2QTI0MjQwMTUxREQ3MEREMDVDMjIyRjREM0U4NzVCMEFFQjExM0JDRjQwQzVFQzA1Rjk2MTA4MUI2OTNBMUE2QkE4NEYxM0EzODI1Q0I3MUExNzE2MjBBODMyMUNGNzZDQzk0NEIxRTA1MkZCRUVGQzhEN0I0NjIKK0RCRkNDNzI1CiszMUJDQzZDRUZGMjJENDhGQ0MzRTNENjkyMQorMkU0OURGMDUwM0E5NzI5OTUyRjVEQjcwMjg2QUIxOTdENTVGMTEyMEU0N0U5RENFM0EyNzgzMEMyOTRBNkEwMTc2N0ZBNUM5MTg4NzJBRDMyRDQ0QTIzRUQxODMzQzlGMkU1NDlBOTcxMEY1ODlBMUMxQjc0OAorMjQyRURCQzAKKzk0QTQ4QjlCMUY3NEJDRTk2NkUyNUE4QUEzCitGMTE1MDI2QTc1NDU4QzYzN0Y5REQxNTNEOUU0NTlDMDJENzQwRUZENEQzQzc3QUIzRUFBNDJCRThFOTAwQjE2QzRFMzU0NTQwOUJGRDI4MDMyMjUwRjc1NTA3N0NCMDNENDZCMzY0QUFGMjNFQzgxQzE5RkI5MDczQUM1RTVCODdFNkVERjM4MEJBNDQ2CisxRjQwMkVFMAorMTFDOTM4OTUzN0VEQzJFNUFCRjNGQUJEREI2QworNTBERjI0ODUwQ0ZCOUVDQzc3Mzc5RTA1MDY2QTBDNDg1N0QwNDExMURDODFERDE5MjJBOUM4MEZEQTkwODIwNzkzNTk2QjlDODkzNTAzOEQyRDZBMkJEMzNDM0ZFRDE1OEI4RDExMkI5QUI0RjQ0NTU0OTQxRjhFMTUxNDczNkY1MzY1OEM2NTQ3NEFCQTgyQTM0NDMzODc2NzYwM0I0NTkzMTMzRTJEMEJBQkI3M0MyN0EyQUM1RjkzRDczM0ZCMEUwMDJBMzQ5Njg3NDRBNTZFQTQ1N0I5RTZGOUE5Cis5MzEyODU2NgorQ0RBNTkxRUNCREQzMzNDMURCNEI2MUJEMjAKKzAyM0ZGMDZBQ0I0QjRGMjQyOTJEMzg3QjE0RTg3MjBGMjA2Rjg5RTkwRTQwRDRBQzU3NEJFODBBQ0E5MjU2NzI1QzM2MDk4OTlGMjdCM0FCMzg4NjUyOUM5NDAwQ0MyN0Y5ODI0NjQ4NEMyQUQxN0UxQTRGRUJEREY4MjlGNDRFNjA4RUY0NjE4MjhEMDU1QTFDQjRBRDJFMjgzN0MzMzA0QzA5QkVFMzYyNDU1MTQwQThDNUQyRDQKKzhBODRGQzg1CiswMzY5OUY1M0QyNEY4OEJENjlDRUIzM0U1OAorQTY2OUU3MDRBMzUzQTMyMTBGQkI4OTgzQTkyRDQ1M0VFMUNCREFGMjdCREVFNjZBQ0UyOTNBQzk4QkVCQTBEODAzQTUwNDgwN0I2REQ1MUYwODgyQTQyRjVDNzkxMTBDOUFBQkM0MTExNUZBRDcxNzU3NjE3NjQ3RDdGREVDQTY5OUYwNjMxQTE0NDVGOTRBNDcwRDJENzc1RUUwRjNCMzc2Q0RGMAorODIyREQyM0MKKzQyRTBDRjJFMENDMzRDQ0FFNEUyQTU0NjgyNDkKK0VCQ0M3ODI3NDQyMUI0ODM0NzhCNkE5RDY0RDNGMDE1ODk2RTdDMTY4M0Y0MTA4QThDMjRDRENGMDJGMDlFMzVBREI0MDlERkQ4NjFCQ0NENjNDREQzNUE1QUE3MDI1NzYxQUQwQjI0NTAxQTIzMEQ4MjlCQUZGQkM3Q0JEQTdENzg1MkQ5QjVDQUJGRDA1MTcwNUQ3MkM1MkNGNzdGOUM5OUMzQTQ0NUZBNkM4NDY3MzVGQkRENTJBODE0MDQwMzM2MEVDQ0Q5QjdBRTI2NTMyQjQ0CiszMDE2QThBRQorRkE1OEY4MTU4REE5NEU4Q0RBRUVFM0ZCRTAyOAorRDUxNEM4N0FEMzVEMDczNjg4NDg0MTk1MjhBNUUwMENFRTBCMjgzMkMxNTA2QUQ0RTBCQ0U5NDY1OTIwODRFNUQ3QzdBODYyRDVFRTQxNTNDQUY2NEE4MUEyOUI0NjlEQzg3MDFCRjU3MDZDOURCQTE3ODM3MzFGOERFRDFGNzg3NTdFQTFCNDI0NjcwNzQ1QkY2MDA1NTQyMTJBNEU4OTIzRjFFRjFCNTY1QTdERjIzMzQ4MkI3Q0REQ0RBNTRGOEI2MkZBQ0MyOTM1NDQyRkQ5ODE3MjlDQzI1ODNFQzhCNDNGRUNBQkM1Mzc4RTc4QTQxMDY4MTkyMDA3CisxMzk0CisxNTcwM0UKK0U5MDA2MzUyCis3OTAzOTk0QkJBNkVEOEU1QzQ3RkFCRDU5NQorOUVCNTM5RUFGNzdFODUyNEZDMDlEMTNFMjY0RkI4NEM3OTU2MDgzQkQyNkMxNzIxNTIwMzY4QzVGMjIzRTREOERCOTI2NUFDMjUzRTY2NEE4RDE5NDZFQjk2MTQxREMxMDFEMTE4REM2MUUyQTE5QjY5OTQ1QURBNTlFQTFFNDBDQTExNEMxODQ2RjY4MDE5MDE0NkFCMzBCQjcxNTg5RDgyCisxNkQxMUNGRAorNDhFMUI0RkY2OEEzNTg1REI2QTYxOUVBOTM2RAorMEI2MjM5RjdCNzBDNTRDOEI3NjgyNzE1RTM2MkVDMzRBODM5NjhCNTFBQkVBMEZDQTQ3M0I2OTJCQjBGNzEzQzkwQjY5MjJEQ0FDNDhFQTJFQ0Y0ODlBQzYxMDc4MDVBNkNGRjQwREVCQzkyOTk4NzQ4QUI3QTAwMTEzMEMyNkVFNzA0QTNFREREQzdDRTQ3NTdBNzJCNjJCMjM0OTFEMkNBNUJCRUVENEQ3MUI1QTBBMjRBOTY5REU5QjBEQTlBMDBFOTVBMUIzODFGNzMwNzg2RENDQjY2Q0M4RUE1NzgyNkE5MjkKKzgzRjkzNjk3Cis5QTAyQThCQTVBRTdEODhDQUQ1NTlCQUMwNgorRkUzOEUzRDM3RTA0Mjg1NDQ4NUQ0MzkxNkMzMTYwRkNEMDNEM0NCMzM3QkVBNTdDQzFFQ0U5NTkxQzc4NTQ4REY1QTY2Rjc5NTRGNjAzNEY0RDc5Cis5N0IzQkY3RAorMzg0NEI5RjdCMUFBQUUwMzU3RDMzNzExNTMKKzY5QjVDRkQyQzI0NUM2MjlDRTJBNjNDQUZFQ0Q1MUZFRDRDMTRFRDNGRTcxRDc2NkRFQUNCMDZGQjcxOTc1REYwREY3MjA4QkY0Rjc4MURENjk1QUFFRjAKKzkzMDA1OUEzCiswQzYxQkFEOTNCMjIzQ0RGQkNEOTU1QzJGMworMzRBQzc5QzYzREE4NDMzRjhEMjlFRjI5NEUyQTg2RTNEREYzOTk4ODJCNzgKK0YwNDgxRTQ3Cis2MEY2NkFGRUVCNEFERDU5OTMzMjc2NDJFRUFFCis1NDM3MjU1ODQzMUQzOTk3REQzMjA2MDhBMUMxNjhBQUNERkVCNzUxODFENkQxMTEyNzUxMDQzMTgzOTQ4QTIxN0JCRTQwQzk4QjQ5QkM5RTdFOTRERTIxRTBBQkMxRDc0NTI5MzM4MUUyODAyNUY0MkQwNDBFNzZDOTFGQjhFNUZFNUNGQjgyNzA4QTU5RkVBQjBGQkNCNzZGQjM4NzgyQ0M4REEwN0I2OTUyQ0I3ODYwMzIwNjQ1NkU2Q0UzQjJGNTVBRUY5MTNBMTI0OTdCNENGOUVDQURBMzY1QkIxNjVDQTY1RkJDRTdFMjM2N0M1RTg5NjY5Qzg2RDIKKzQ5RTIKK0FFQzA2OQorMkRGRkVBNkYKKzNDRjE5RDMwREI1QTZDQkNGNDFDNDU4MTZCCis5QUMxMTQ2QjlCMDY2MENCNjg5QzVBN0RFOUNCRDFDNUZGOERGOEI1RkYwMDY0MTMxODJCRjkxRTU2MUI5MTBEOUY2MThCNjE1OTM5QzJENkFEMDJEOEVFNjlDNzM0RDYyQTMzRkU5NjdEQ0UwQTM1RkYzODdDMUVDRDM2RERCMjNBMzNDREIwMzBDQzMwNzE1Q0U4NjM3OTE5NTc2MkYyNEU2MEI3NDA3MUQ3M0ZENworRDcxRjJBOTcKKzk4Q0Y5M0FGODNCQTQxNURGNDQ5MTU3ODUwCitDMDdBQkFCMzI4RTY2REI3NTAxQTVGNEQyODgwQjg2M0RGREJEQ0IxMjgyRUFCNjlFNTcxRkZEMkZEMTZGOTZCNkZFRDM1MjI2QUMwNzBCOTQ1NDA5N0QwMzdEQTczNTY2MTExOUVFMjdCQTVERDFGRTAzNTY0OTNFQUVDRDZDOENBRjQwODg1ODE0MkVDMUI0RTg1M0Y3NkU4OUIxRDQ1MUIyNQorQjc1Q0IxMTEKKzExRDg0NTAwRTRBNDIxM0YxRkIwQjg4QzE4OEQKKzQ2MjgyMDM2NTYxQjRFMUNFMEJBQzNDNTVFRkRCNDMwMUIzQkZDOTRFQTVFN0M3NTM4RTJFMzFEQ0U2NzMwMTQzN0JFOThBQkE2OUM2QUZERjUwODZFMUNEOUQwODBCNEIzNEYwOUQ0MUQ3OTRCN0Y5NENFODNDNEM5OUIwN0U5NTgyRDg3NTVFOThCMzMzRENBQURBMTBCM0NERkQzQTI1QjA0RTdFRDRFMzAzRkZFQzI0NjIyRUEzMDMwQzJGOUY5RkRBM0Y3QTg3M0NFMTQ0ODE1REJDM0ZCN0MKKzQzNDNBQTFBCitCN0QxOTVFMzk3NDc1QTA1MkJERUU0MTg2OQorMjY1OTJFMDk2ODg1MDRENzA4NjZGRkM3ODE5NDM0NDNGRTFCRkU1ODExMTAxRkUxRkMxOEVEN0ZCOTk0OTVENzVERTI0MzU1NEIyNEI4NTkzREJBM0ZCQUNDQkYwOUZFRjhBNEUzMDI1MTUwNUNDQUVEMDQyQzU1MjZCQTZFRjgyMjQzNjUwREQ0NTRCRUM0RUNFRDM5N0JBQTRGRDg3RkNENTcwNjhGOUE1QzRCOTlCRQorRkFDOEQyRTMKKzkyREY3MjFDRTcwNTNBNTU5MEMzNjM2Q0MyCis4RTgxMjE3NUFGMkRDOTFFOTA1NEZFRkZFMkJGQUQ1RDRCQ0Y5NzIwQzVGRTBCOUVEM0U3OTFBQTcwQUYwMjk2QjU4N0UwODI5MUUxMjNENjNBQTI2MUZFQkM0ODg3OTIyRTdGQkI5ODNDQjU2RUQ3ODg4MDMxQUYzRTk3QzdBRjZGNDQwMENCNTlBMTE4NzBDRTJCQ0E5REFBQUYwODEwNkY4NUJFQTMyMUE1NDM0MDNDQkM2NTg1CitBRjI4MkU1NQorQ0JDNUU3QzgyRUI1NDE1NThGRUM4QzQ3MDJGOAorOUY2NjBBRDMxRUZFOTk3QkVDNUVBN0I3MkRBODY4ODJDRjlDRDQ1NDU2M0Y1M0ZBRkNBODAxN0ZEQjJCRDVEMzcwNDEwNDFGM0E4MzQ1NkFEMzIwMzlEQTk1NzczQTQ4MkVFNjA5QzQ1Mzc3NjUxNDk3MjA0RTRFQTdFRkNBNTJEQjFGRTUyNEU3MEY5NzEwQ0E3QzRCODIxMDBBM0RGRjZDOTlCQUMwRkI1Rjg0Mjc2NUJDRDAzRTg1QkQ3RTZEQkM2MUQ0QUZFQUMxMTcyMzUxMzVCRTU5ODVEOUYyN0QxQ0ZENDc2QzVGQUY2NDg1MTg4Q0NBNTFFMDA0Cis4QjRGCisxMzhEQjUwQzYzQ0NDOEFEQ0YzNjJFMTA0ODBBRDI3NkVCNUYxRTZEMDQ2Q0NBMzQxQTdBOEVERkFCOTY2OEYxMjA1OTBCRDc1M0M5RTRGNjA4OEQwMzc2Rjk2QTUyCitEQ0Q2NzM1NQorRkM0MjU1RDJCRURFNzVBRjk0MkQ3NEI0NzMwOQorNDc2Mzc3MDE0NEZEQjI5QTBCRDU1QUQ2MjJCMjdENTlFOUUyQ0VCRUFBMjhCMzk3QkExNzJBMjk0RTE5QzJCNTM3RDJCM0M3RDJBMkJGOTc3OTAzRUE1QTU5MzVGMzkzNjFDMjZCQUZGQzkyRTc4QkRCMDhCQjk5MzhEQ0UxNTIxQThFODg1Q0YwODA0RjA3OUVFQTRDRDcwNDUyRUVGQzUxMTZERDVBMkFGNjQ2QTA2QjMxRDg0OTcwODk3QUZGMkQyODNDNTgzQkY1MjVCMTU1MEY2RkU0RjYKKzJCNTc1QjE1Cis3Mzg0OEFCRDJFOERGMzBDRUFBNTQyNEQyNAorM0FBOEJDN0UyODlEMDk3OTQ1NTY4NTFFMkRCODA0QjU3QzVFRTEyRkQyNUU4MUNGNUM3QjUyN0YxRUU3MkVBNjlBRDI0RUQwRjU1NjlGMUVGNzlFNTFDQjQ2RjI5RTJFRDZBNUUyQjQ4MkFENzRCQzE1OTk1OTlBQ0ZDNEJFQUM0OUNEQjk1RUU4MjlBRjA3RkMyQTZDNEZGNjhGQTQyOAorRDREOUVDRDcKK0NDNkNGRkJEMThEMDk3QjA4NDBGNERBNDA1CiszNTQ5QTkzMDAxRjI1NTgyM0Y5QkNFQ0Y3ODFBQjlBRDJGOEVCQjYyQTQ4NkI3QzBBMzdDQUZFQURENThGOEU0QzY1NjVFMEMzMUUxRjVCREFGQzc5NEMzOEQ2RTg5QzkyNTNBNjJFMjhBMUVBODI5QzY3RjUzNzRBNjI3Q0ZBREJDOEQ2RjExNEUyQzNFMTk2Mjg1NUM4MjE3NkU3RTA3MDU1MDM5QjZBNDA0MzkzNTFENEUwMDhBQUY5RUQwODlGRjk1MTgKKzY5RDg0MDRCCitBNDNFRDhCODcwREQ0RkRGRDgxMDU4MTI4N0NBCis1MkM5MUM5NUVERDQ2OUZBQjlDQTI1NUMyODM4NTlDQ0YxQjU4NTVGMzU2RDVGQTRFRkYwMEVDMzg0QjdDNzkwRjc2MUU1MURDMzVBNTI1NDQzMDIzMzdGQTgzQUJCRjZFRDQ5QTg3QTRCNjU1QzY0NEIyODdBOEZFODNFNTg2RUMwMUQwRDQ0M0ZFOUVCOUI5QzYzMzQ2NTgwQTA2M0I2Q0NCMzdFMDQ0MzM4QzA1NERENDM1NUJCNTkyOEZCNjhFQ0QwMUJBMUM4RUM5QzQxRUY4NjY3Qjg1MUNCREIyNzVDMDE5REJFNzE2MEVERUZFMzNGMkRBNzdGNDYKKzMxMzIKKzRCQzBGMzVCQTY3MEYxODlDMjBCMDQ3Q0FDQTIxMURCNTlFRjRBNzgxNUZERUI1MzA3MkJCN0M1OURDMEJGNjYwMzk4MUEKKzg1MDcwRUMzCiszQThDMjdGNjBFNTMzRjMwNDhGNjRBMENBMQorQzQ2MzEwRjRGRkM2RDE2QzQzNTU0NUZGNTdERENDRUFFOEE4QkM0OTNDRUE1OUFEOEQyOUE4OUU4NTYxMTBBQTQ3REQ1MjE5RUU0N0NEODk1MkVDQzc1NkY3M0IyNDZEQkZERDYwNUVFQjc3CiszRDc1NENGNworQ0FBMDUzOTc5QkU5QjI4MzE3MkFFNDg2MEMzNgorMUI0MzE1MDdDRjIxN0UzN0JEOThBNzc0RUJCNUM0NEYxRTc1QzdGNTVDNjY3NTc4MTEyRUMwQzkyNzA1NEVFNjRDRkUxMjFGOUVDQzUwMTBERUVEMEM5OTExNjkyRjMxOTdCMDQxNkU4QUU3MjY3N0I0M0E2MTg1M0UzNkQwNkE5RjQ3MTNFQUM1RDRBODJBMjNBNUE2RjREOEJCNDFEMkQ4MjhENzhENjNEM0VCQzlGNzdCMUQyQUZCMTFFM0ExNzI5RTA4MUJGNEE0RjQyNTk4MTU3OERBOTAxMUZCQ0VEOEM2M0MzRUU0NjY5MTM3REVGMkUyN0NBNDBGCitFRjY0CiswMTY2RTA3MkMwOTIxNUMzOTk4MjY5NTRDQTY0NDZGODdDREQ5NjgxNTE3QzdBMzhGRjhDQTkyM0Y4QjUxMworNzNFOUZGNzAKKzRCRjM0OEJFODdFRkEyMkU5NjRBNDQwQ0Y5NTIKKzNEM0JGMjNGQzA2MTM3QUNBRTA5NkVCMzU2NkM1Nzg2QkQxOThFRjg2REJCMDlBMjM0NTlBMzM1RDM5OEI1QkRENEIwQkIzQkQzOTJCRkU2REY2M0YxRTVBRTA3QzFBQUE1OENBNzRBNzE2MzlFMkU2MThDMEQwNDI3NERFMDUyMUIwRDExMDNEMDE5MTI4RjlGNTUyM0ZDQzZDOTdENkIxMDFFQTQzQjJCM0E1REYwQUQxMjY3NUE5MDczRTZEMDk3RDIzOTdCN0VDMTZFMEFCNkNBOEE1NAorMjZFMzczNjAKK0IxMDg2MTVERTRBRURDODIzQUFDNjJEMjA1CisxQ0NDQzBBMzI5MTRBRTA0OUFCQTk1RTcyNjEwRjM4OTQxRUVEODQ3RjlBMzgwMTkzNTlCMUYzRUI5RjI0MDc0NzY1NjMzRUVFMDRCNEVGM0Q0NUVFQjY0NDBCRjhBQzIxOUZDMDk0QUEwNTRBMjYyQzMxMTNGNzBCNzBEQUM2QjNBNTZGQzdGMEQ4RQorQUYyQTI4NzgKKzkxQUNENDdCRUI5OTYyQzFDNkQ2RUQ1MzVBOEUKKzEzMEI0NkQzNTcyN0JFQ0I5NEVDRThBMDgwNEZDMTA1OEMwQzg1MUZDMTNDMjBEMjgzMjRGNzg0NzBEODJFRUJCNDUzQjA4NTFDQTIzMjY3RjE1MEEwQjUwREEzNkJCOUU2MTM4M0EyOEY2NEIzQ0QwNjhFMUI4MjVCQTZBRTg5NjlENjg1MDRERjRDMEM3NDM4RDk0Mjg4NzREQjFENTFEQjJGRjkxOTAyRkVBMERDRDc1QThGNEY2OEZEQzMxRDk1QjQ0M0U4NUNENUQyNEEyN0FBQ0Y0RUU5RkJBQ0M1RkI1MDJCRjg4NjYzQUUKKzg2QzA1Q0I4Cis0ODdBQkZGQjk3NEYyQURGMjA1OEM3NTAxMQorMEEwMzIwOEEyQkU3NTRBQjA2ODk2MUJBNTk2NENBNzkyREE0NEEyOTcxNzY3NkM0RUM1ODM4OTI5QzQzRjY2QUM5QjE4MUZBMDEyRERBQzZDRDUxNUFBQUFEMkNDMTJEM0M2NDMzNzA3Q0MwRTM3MTVFQ0YyQzQyM0U2NURDOENFQkE5OUM1MDg5NjNGRkQ4REE4OTZBMUY0REI3MDNGRDgwMjIyM0MxMzRFOEJCCis3RTQxQ0VCQQorQzlEQjA2RDFGNDczQzA1QUFDNzdBMTc3RTRDOQorNjI5Nzc2Nzg4OEY4RjNBQzZDNUFCQTAyOTg0RjYwNjk1Rjc4OTUyMjE4M0M4QjU3RTJEMzc1NzA2OUU3Q0RDQTU4RENDMUU3MzNDQzZFMDVERkQxQzA2RTE1Qjg0NjA3RjQ1MjU0MTgyMEMyMTU1MEVBNDg3QkU3RDQ3MEM4Q0Y3RUI3OENDNkYyNzI0MDkzODYxMzZCRjJGNkM0M0Q0N0YzMzhERTBENEU4OTE4OTM5MTY1NjNGQjVGRjk3NzY2QkE0MzU1Qjg2RDBGRjJGRDZEQTFEQ0Y1QkUxOEY4QjM2Qjk2OTVFQTRGOTAyRTM3OEY0NTE5RDQKKzNFMDU4NEEzCis5RUU3M0RFMDhFNzdCQzFBNTk4RkQ4RDlENQorQjc0NzhBOUFCMkU0RkQ3MUI3QkQzNTcyQ0MwNzFBQTc4N0RGQzlDMjBCMTQxQTM3QjRDRDc4N0VEQjZBMTM5RjlGMzg4QjlEMTk2Mzg1RjQ2NjNDRkJEMDQ2QjBCRjgzRDc2MjAzMUIwNzU4OEFBRTU5OEJBRTc2RDYzMUM1NDkwNDRBOUQzRjA1CiswNTQ4OTZCOQorNDg3QjIwQjkxN0I3QUY3MjE5QjIyOEI2OUYKK0JDQjBFNUREM0EyRDFFREZENkJCQ0E4RDc0MUQ1QUM0MDhCOTUwNjUwRTJDM0Y5NkI5NEE1QkUxMjBFNzA4MEY3NTI0ODA2NzA4OUE0QzUzQzY1MDBGNkRBOThDQUZERUUxREYwQTZFMzQ5MzhGQjRDM0I3NzBFOTE2OThBNkVENDE4M0UwMjNFMDI1OTBCMTAxQTZFODc3RkMwNUM4ODM2ODg4MUU5NkFDRTBGRDdCNTVGQjVBMUQ4MEVEQjNFQUM5NEYKKzU3OTBBNEIzCis3OTIxQjQ1Mjg1N0ZFRUFBNzgyQTdCNzQ4QgorQUQ0QzdBQzVBMERCRTIzMTUxNENBQzI4NTkwNjU2NTcyMEZGNkMzMzA3RThBOUM4MkZCMjhCNDlCN0JDMEJEMTg2QzU1QzQxNUU2NkRENkIyMEI4NTA5RkJCM0VEQzY2NTA1RUZENEQ5QjY0MjE0QkJCNkZCMDE2Nzg5Qzg0MERGQkQ5NEZGQzJDQUY0Q0U4QkMwODI2MkZFQjk5QTQwMjU2MjRCQzYxNTA2NDdDQTE1MQorQTJDOUFCNUMKK0VGREYwRjQwMDRBQjBFOTAxQzE5NUNGODVBMTgKK0M0N0NDMTZERDg5QkEzMDBGQUE3NzZDNDgzQzAxQkU5QjY0NUQ3MEUwMzVGMjQzMDMyQjk1OEEzMEFFODZEMUM1RkIxMDg4RTgwNTI5RkIxQUQ1ODI0MzIyQjI0REUxOTU3QTdCQTg5NTlBODQ1MkJGNjI1MTdFOTM1OUM4MzZEOUFGMTUzRjMyQjMzN0RGMjNDRTE2N0U0OTIzQzE4NTBENEY1NDAyQjM3RDhFNzZDMEYyNzY5RDI5NzM2M0NCQkI3MDc3Qzc1NjBCNTM0REI5MDZGMjZGNzc1ODRCQjlDOTI5NEE4NDEzQjhBMUU3QjhERTk5MUREMTdFQgorNEUyMAorRUJGQzNFQ0Y3NDIwMDM1MTk1MTUwRUU2MUE4MAorQTlDQ0MzMTIKKzc3OTM0MzhBNTM5ODM0QzcxMUJERjU1QjA3NkUKKzE1NzcyN0JCRjM4RkRFMEU4QjYzM0Q4NjhGODMxQjdCRDM4RDBGOThEQTQ0RTRFMERFQUE1N0RGRkFBQTgwRUJGREJGOTdDODE1RTBDMEUzMkNCQjY4OEExNDQ1RjU4RTY3MDNCMUI5QkVFNzIyMjY4NUM4MkNFQTE2QzUzNzZDQ0U1NjdGRjEyM0U0QTVGQzI1RDMwQzUwNkUxQTc3QjBDN0ZBRDQ3OTBGN0I1NjZGOThEMkZDQUI3MUJEN0QyREQ4MDQ4QUM2MkJGMjAxQjlGMDk3M0UzOTY0NTRFODhGQUMwNTczNjA0ODkwNDg3QzRDOEFCREFERjQzRgorRjRFQgorMzhFMDU5Njg2MzY1MDdEOEU2REY2NDY4NURDNEM5OEYxQTJGRDgxRTIwQzBDNEFFQzQKK0UwMEZGQkZCCis1MUU0Rjg5OEIyNkZCNzNDNkE5MTdERjgyMzIzCisyMkIwOUIyM0ZFRkIzNTk0OUM5MzBGRjUyRDZEMUExMkVDMjJFM0ZGRTc0QzFENkIyRTM3OEMzNkM2OTM1QjFCMjI5NzNGREM3QzU2OEZEREVDRkU0MzI3MDJBMTIzMTY2Q0RDMDBERjREMTQ1MDFFNDFBMUVENzNFMEI1OUFFQjA3NDkwMDY5RUY0MENDMENGQTlDMjQ2RTM3QjM5OTA3QkVCMEZDNkRCRjVDOEE1RTIzMEQyNzJDRERCQ0QwNkQyRTJDQkY0QkNERDM4RThCNzIxRkRBMjgwOTQ3NEExQUM3NTc1QzFGODhCMjVERDhEREQ5RDRGREVDNTUKKzFCNUIKKzMyQUI3OTE2CitENDVFQUVGOEE0MEU5RkYzRjFCRjBBMzAxRQorQzlGN0EwN0Q3NjQzQ0ZEQTQwMTdDQ0Y5N0NDQUY0NzlFQTNBQUIyNzNCMTg1QTIwQ0YwOUM1NEEzMzg5MDE3Q0JEMDQyQ0I0QzVENjA5NTU1RkQ3MDQ0RTVGMEQ0OENDNDdDNDMxNjg0ODc1MkFBQzMyOTUwQUJCRTZCOEY1CisxMzA5QzY0RgorNDBCRjcxQjNDNTYwMkRFN0Q1RDgzMzBEOTYKK0NEOEY2ODdFNzU4Qjg0QjBCMTlCNEU5QkE3ODIxOURGQjEyQUNCRjE3OEIyNDIKKzE0NjBEODZECisyQjAzMUYxQUNCNjdDMTAyRTk1RjhCMjhCRTE2CisyNzE3Q0I2MkFCRDRDMzA5RkMyOTI2REU3QTMyRjc2RTQ3QUEzQzU0NTZFMTZBNzcyNzdFMzQ3MDZFRTlFNjdDNjc2NjBGRDQ4NjZFMTU0QjRERkQ1QzREMTgwQ0QxQjM2MEI0MTcxQ0I0RTJDN0M0MEZEOTk1MjQwMkZGMDU2NTRDMkZGNERBOEQzQzYwNzNEMzdBMzRDNUFGMkNENUE4Nzc2ODE3OURFNDdBQTJGQzkzRkJGNzc4RjM2Rjc2MEE3NjZDRjU1Q0EwQTdCQzkzMjQKK0EwQjU3QTg1CisyRDFBMjY0QzY0MDZGRTFBNzhBQ0I5ODk0MQorNkU2QUE5RkFCQTVEQzFCRkZCQkE4NDNENzlGMUU4OTQxRDNGRkJCQTQzNEQKK0ZFOTgyOTVECisyQzQ4NkVBQTI1NTBCMjEwMTFCMTk1N0Y2MkE2Cis1MzAxOEU5ODIwNUU2MDkyCiswMkZCMEJGMAorMTZCQjU5NjE2MjcyNzkzOTNCRDYyMjJCMjMyMTg1RjA0ODAwMTdCRDY3MTA2REZCQzZENjM1MDBGQzk4NUY4N0I1MEUKKzM2ODcwNTJEQTQyOEQyMzU3OEZFODEwMEMzRjIxNkVGMUE1NEY4RTU5RkVERjQyNDA5NkFBOEZFRERCNEEyRUMwNTJDQ0YwN0I2NjMKKzUzODg5NUREOEU4NjMzM0I2NkIyMUNERUFFOTI3MzEwREY5MDUyQ0VGMjgzNzIwQkM1Q0Y3QQorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoYgorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGIKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hiIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NSBwdXQKK2R1cCAzIC9DMDA0NiBwdXQKK2R1cCA0IC9DMDA0NyBwdXQKK2R1cCA1IC9DMDA1MiBwdXQKK2R1cCA2IC9DMDA2NyBwdXQKK2R1cCA3IC9DMDA3MiBwdXQKK2R1cCA4IC9DMDA3OCBwdXQKK2R1cCA5IC9DMDA4MCBwdXQKK2R1cCAxMCAvQzAwODMgcHV0CitkdXAgMTEgL0MwMDg0IHB1dAorZHVwIDEyIC9DMDA4NSBwdXQKK2R1cCAxMyAvQzAwOTcgcHV0CitkdXAgMTQgL0MwMDk4IHB1dAorZHVwIDE1IC9DMDA5OSBwdXQKK2R1cCAxNiAvQzAxMDAgcHV0CitkdXAgMTcgL0MwMTAxIHB1dAorZHVwIDE4IC9DMDEwMiBwdXQKK2R1cCAxOSAvQzAxMDMgcHV0CitkdXAgMjAgL0MwMTA1IHB1dAorZHVwIDIxIC9DMDEwNyBwdXQKK2R1cCAyMiAvQzAxMDggcHV0CitkdXAgMjMgL0MwMTA5IHB1dAorZHVwIDI0IC9DMDExMCBwdXQKK2R1cCAyNSAvQzAxMTEgcHV0CitkdXAgMjYgL0MwMTEyIHB1dAorZHVwIDI3IC9DMDExNCBwdXQKK2R1cCAyOCAvQzAxMTUgcHV0CitkdXAgMjkgL0MwMTE2IHB1dAorZHVwIDMwIC9DMDExNyBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIwOSA3OTggNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0Mjc0QzI2NEU1RjQ1RjAyODZCRDFCMjNEMjZDMzQ2MjZFMDdBCis1QjAzOURCMzZDMTgwMDVFRTMyQ0ZBNjQKKzkwNkIyODVDQjhCRDdGMDk2OAorRDQ3RjUyNDIKKzIyREEyOUJCNjNFQTI5QUMxMjkzRDlGMzY1CitGREQwOTI2ODZDRjBENzM5REFFN0I0RUJFQ0RGRTIxQjhCNTgxMEIxNUIzNUQ3Cis4QjFCREI2NgorMDJCNkVEODg2QTc4M0M5RjJFMjk1OURBQ0EKKzlGOEM2ODdDQUM1MEY5OEREM0Q5OUM5MUEzODE2ODk0RjVBMjIzMTgxNDA1NkYyODA1RTQ1MUY2NkI1OTIzCis3OUI0MzREQgorRjcwNjM4QjlGMjA0NEYzQUJFQTExMjM1MjgKKzE0RkI2RkFCRTM3MEY2NDk0QTU0QkQxNzQwRTk2RDg2OThERjM2REQ4MzEzQjA1QjU1NkUKK0UwNDMyNDM2CitEQzAwNjE4RkRDNEU4NkM4RTU4NUU1NDc2RgorQTQ1MUJCRDk3RDBEMzZBNjI5NTAyNDZGNTZFQjA2RjczMjM2MDRFRTkzRDQ1QkY2M0NEMzY4NjM2NUU5RDE2RkZENkRDMEEyNDc5Qzg3NjQzOEVDMkRGNkY4MjZBQzVENkY5NTJCRjJEMDg5MjUyRkQ5MTQKK0U4MTdFNEE2Cis2MTFBMUVGQTgzMjFCQjlFNkZDMjE0NTA1QkU5Cis0NzA2MzIyRjYxNkY2OTk4Qjk5QTA5Q0U3OUY1RTg5ODYxQzFCRjhCM0JBRkZEMDdCMzdCQjEwRTdGOTAxMEQ4OEQ4MzExNTYzQTc1NTlCREFBQTQ3MjI3QkZGRDYxNzExMjEzNDIzRUI0QUZGNTcwNkIxNTJENDQwNThDNkFFRjhFMDdCMUI1NDY5RTczRTVDQkRCQTA4OUYxRUNEMUVGOTQwQ0M0RkY1RjM2RTFBMDVEQzJDMkI1MUQ3MDAzMEQ1M0IxNjJBQkEzNzhBNTA2CitDMjQyRThBQgorM0E1RDQyNTk1RUY2M0MxNzgzNkQzRkE5MkJENAorM0NGRkY2RDAwNzYyODE4QjhBNThENDA1QTBDQTg5RjMwMTA3QjU4NTg5MzczMjM2MDA1RUVBOTlGRjYxRjhCMzMzREE3M0I0OTM4MTIzMjhCN0FBNDkxQTIwMUQ0NDQ0NDAwQTRFQzQwRDIxRkQ4NEJCQjk5OEJEMDcwRjQyNDY5NzA5RUU3OTk2M0QxMzIwN0JCRTExNzBEMzFDRTc1MjU4NTZDQzM1NjcwNzk0NEM2QkU2RjVGRUQ4NzU3RjM3OTJEMzAwQ0VEM0RCOTJENjRFQTBDNDBCOEY5Q0IxRjc1RTJDN0U3OTFBRTMxNworMzhGMzc3NzcKKzQ1QjcyQTJBNDg1QjY2QThCNzY1N0U3QjI5CisxRTgwM0QxNDgzMDE5MDk5NUI3NTEwMUE3MjIyNDI0MkU0MkMxQkU3NEJERTg2QzM5NzU1RUJDMkQyN0QxOERBQUZCMzFENjQyRUFBMTYxNUNCNEFBN0ZDMUNDMzJBNzNEQUY5MDk2QThFOThBOEY5M0NBQ0IyOEUxQTE3NEE5QzVBNUFGNDBDQzIzRjlGNjkxQkQ2NjJGNTM5MEZEMUU2OEVDNTYwNTgwMzU4QzNDQzA1M0FENThFREMxNUYyCis0Mjc4NDlCQgorMDlEQTEyMzNDNjgyMDIxNTFBN0RFODFDRjg4RQorRjFCNEFCRjEzQUNBNDRDNEExM0FENTJCNURCQTFFMzdBRTMyMThENERGMjcyRDMwNjFERDNCMjYyQjA2Q0M1MTE2RTVDRjdEMTE0OUVEMDgyQ0QzOTBEOUIzQkM1M0U1QjY3MTk5NUE3QkI1NkI2RUQyNTBBRDNDOUMyNkZFRkZGRkJGRDlCNkZFNkU5Q0U4RUI4NzYxNTM2NUNBNDYxQTA2M0I3MzM2NUM5OUJCMUZBRTc3RTk2ODczNEZFQTQwRjk4M0E5NDgKKzE5MkNFRjdBCiswMkIxRERFQkJFMEI1NzFFMkU5NEQzOUVGNDM2CitDQkEzMEY4RTcxODc2N0Y5NkYxMEI5NzQ0MzdBRjgxOTBDQkI3MzBCQzg2Q0UyRjM0RTg1QkQ2NDZEQTczQzA0NTRGMjQ3NjhDMEUwMDAwNzA2MjFENkVCQ0JEM0MzODUzQjQ2NUFCQjc3MjVBMjg2QTMxRjQzQjRFNzNBMEUxMDE5OThEREY0RTgzMzZENTY3NDVBMDRFODU1Mjg0OEY0ODkxMENDNzE5MDMxMzgzQzJENDYyNUEyNTVBOEZBNDhEMjlEMUIyOEVFM0M4QzlBM0NBN0REODJCRDk0RDhFNUFGMTlBNDBENDFGODJDNUU3NkYzODBDOTczMjcKK0ExNDIKKzNBMDU4NjI0Cis1RkNFMzdCN0I3NThBOEExNTU0MTMyMEYxQgorQzYxNUU0MkE4MDlEQjUzRDVGMzNEMjI4OTAyNTYxM0UzRkUzMEUzNkQwQzBBNkREQTNGNjdCMUU4QjVGOUFDRDYwMDE1N0QxNkY2NEY0MjNCNDJBNDEyREMyNTNEQjhENjMyQTY0MzVFOTFCQkQxNkMwNDREM0Y1OEYyQ0VBNEQ1RDI0QkFDN0FFNTEwRjIxNzEKKzRGNkREOEIxCisxODI1QjkwODg0MkVDMjcxMUQ5NTIwMUZERTJECisyRTFFQTczNDM0RUNBRURFQjYzRTVBMERDRkRBODAwOTExRTBDNUQ3RDM5N0JFOUE0ODk2QkNGRTM0NDI5MkMxMDdBMDc1NkQ5RDQ2OTA3M0FGNDgzQ0I5NjU4RkY1NzVDNjg4NUIyRkE0MjRDRkIwQjE5NDY4ODc2RDQ0NTAwNzZBRDdGMTJDQUMxNzQ0RTZGMjAwOTM3NDFDMTA1NkU0MjA0OUQzMTdGMDc0RjU1OEFERjNFREU0MzJENTM2OUVFMjI3MkNFMDczNDhGNQorMUY4MDc2QjYKKzkyQ0JENDFCQzU5QThFMDkwRDU1QTZFMjZENTIKK0JFQzIzQzIxNEVDMkNERDI5REFFODUyRjA3MTBCOEFENzZGNjcwNTVDQjU2RTUzQkE2MzkzMjJFRDdGQzM3MjY0MEE5NjQ1Q0Q2M0JFRTAzMUJBM0UxQ0Q5MkZGM0RFOEQ3OThCNjBDNzExOEIwQjZCNTU3NzZCNDI5QkE3REUyRTY2MTI1RDYzNEE2M0U5MDUyOTA4RkZGOTU4QzM3MTRGMzJFRkU5QzNGMjFBMjExQzUwMUZEQUZDQUUzNTNBMjI0OENFQjRERkFFQjYwQTA2RjlBRDU1MTJCMUE1NjEzNDlBRkUyMjEwN0U5NkI3NzkxQkIwQjc5MEUxNgorRjQwMgorNkQ5QkQzNUYKKzlFQ0QyMEJCCitCMkE0MzQ2QjM5NjUzM0ZCRjJEMTFEN0YwOAorMjkzQ0RFQjVCMEQyMTY4RUIwMkYzQzhFQUEyQzhCNkQyMzI3MTU2Rjc0NjM2MkREQTYzN0QzQUI1M0IxRUJERjY0MjEyODc0QkYyQjg3M0ZEQkFGQURBMjlDRDU1RUY1QzY0OTc4NjBCNjQyMURFMDY2MDRFRTRERjZGMzdDRDJDNEVDNTQ1N0M0MkQ1MEU4REY2MkEwNzAwRTcwRDBCMUNFNEE3OTIyOEQxOUJCNjJDNDg1MTA2NTAxMjEKKzdDQjQyQkZGCiswOUY1RjMxRDQ0QTI3NzYyMDRGNkZERjNEOQorMEQyMzJCNTZEQjJENUUxRUQ0MTg1MDI4RTYwQkZFODJFMEE0MzE2QTkzRjQyMTZFRjI5Njk4NUVGNUY3Mjk3MDA4MUVBRTU5NTQzNTNFQUVCMEEyOUVCNzIzQjQ4REZDQzFCMzBBREE1REM0QTU5MTQzMTlGQURFNDM4RjY1OUU4NTlEQUExOEU4NEU0OEIwN0NGMDUwNDA1OEVBNjRFMDUxNDAKK0U1NjA4QjVBCis3RkJDMzZEODZEMDAxMTExRkE2MTZBMDFBRjZDCisxQTUxN0Y4NjcxNjYxNDRENUJFMTk4MkY4RjFDRDJBMUZBNkI2MDM0OTZEQTZFMTg3RTMzMjAxQTRFMUFFM0U2MTFERDg4MkM2RDc1MTUwMDk2RUFCODk3NTU0MDM1QkQ5Q0VFNTIyRDA3NzZFOEUyRDJEQUM3QUNGNTRDMUQyRUNCQUNCMkZGRTM3OTZFMUU3MEMzMDE3MjY2ODE5QkU1MDI5OTMzQzE0QTM3NkI1NDg0ODU3M0M4MTk5NEI5OUMwMDNFRkQyRDJFMTcwRTMwQTRCNzU5N0QKKzREQTY5OTU4Cis4NTBERENENEQ2MTNDODE2MTQ3Mzc2MzY0QgorQUE1ODQ1REYzRjk3NDVGMjJBQjFGMjU4M0YwRDZFOUJCRDI5MTZGRjlBQTczMTMzQjcwMEM5QkEyOTI4NDRFRjc2OEU2QUFEQTBFQzcwMjlGRjVBM0I0NkY2M0NBNzMwOUFBMDg5ODczOTgxMDYwN0YxREUyNjFENUUwOUU5QkFCOUI2N0E1MzY0MEEwOTJCMDVEMERBRERERjEzOUY4MzhDQzFDQTQ0MDE4RkMxMEM4RkE0QjEyQgorNjFCNjJFRDUKKzVDMDM5RUFFQTdBMDUxNUFGQzEwQzY5QUQ1CiswMzRGQzk4NUNCRDA0NzJDQkZDMzc3NUI2ODNFNDIyREYwMzBFQTEzRTkwOEVCOEM0M0YxRUYyOUU4MEY5RjExRkFEM0EyNUY1MTIzQkVFN0Q3RjUxQ0ZENEE1ODEzMUZBRjA5MjAxMDFCQ0U3NTlEM0U2M0FFMjBGMzhFNjIyMEIxNzUxQTM0RDEyOTg0NjdFOUE1Q0UzOEZBQzIwOEYzMkVCN0FCMzc3MzNCMkUwQjlGMDEwMDQzRDYKK0Q5OTVDRjAwCis0QjcxRDVFMUVDREFCNjQ2QTg1MjFFN0M5OTRECisxRDQ5RUNFQzIxMDdENDk3ODFGNzI1RUU3OTUwQkFFRjMyMkQyMDQyRjQzNzY1MTFGQUU5MUU3QUUwQzk4QUI5ODQ5QTYzRkQ1OTNBQjVGRUYwMDg1OTQ2QUUwOUYyMkE3QUYxNjdGM0EyRjRGRUI5OUU4OUFCRERENkJEODVFOUQzRjBDQUUzODI1NTc2QjhDQjA0NEVCQzkzOTE5OTIwQTEwOUY5NEZBMUExMDgwMjI3Qzk1ODUxNzNDQTlCNTczNERGQ0EzRkFERDY5NTY2ODc4MDJBNzY4MzhGQkNCODExMUJBMjM5OTJBQzYzNDZFNTgxMjlDOTYxNUQKKzczOUEKK0Q0NENFQTM5NDJFQkVDRjgxRDEwOUZBMTJEMzM0RkYyMjJBQTNGQzM0NEJCNTYxMjFEMzI3MkJDNjdENzAxMzYzNDhFRTNCNzAxCiszQzlBOUE2OAorQjcxQjRBQUVCOTlERUU4MzQxMTVBNDEwQUMKKzVBQzM1RkNCOUFGRkQzMTVDN0IwRjVDN0JGRTgwMzY4QzJCRUM5ODRGMzgwRUQwODRBM0M4N0Q4N0FCQzRENDAzNUQwQ0IyOTJFRUZBMkMwNTRFNTJCNTFBOThGMkIwNjkxMDE4MjYyMTlCMEExMUZERTdBOTQyRDVGMDhDMTA2RkFEMjJEMkQzQ0E5RDVEMjdFQUFDOUZBOUYyMworOERDNkM1NDIKK0YzRjk1NUY2NjREMDQ1NzBCMDE2OTVFRDY3QUQKKzQ0MTU4MUQ3MEFDRUIzQkRBMTgwRjgwMTU4NTYwREU1NjMyOTkzOTJBNjJDMDUwOEQ2MzM0M0I5MDJGREE0Q0ExMDQyRkMwQkY2Mjg3RjczNDlCMzA0REFGMDA5RkYwREY2QkUzRTBBOTg3QkJERkQ0MTcwMzM2NzRCMDI2MzU3QUZDMENGQ0UxNjI5NDA2RUY5QUVGQjNCRjdBNERDQzA3REYwMkQ0MjMxMjRBQTRDMzZGMENEQkYzOTA3ODJERTgxQUY5ODcxNzI4MDcxNDA0MzM1RjQ0MDdDMzI1RUZCQzRDMUNBQzQ5OUYyQ0EwNjAyRUVCRkZGRkE2MQorRUQ4OQorMTE3NgorMkNCODU1N0UKKzI3QTUzN0NEOEFBMjU5QkQwMjEwRTU5MkM1Cis2N0VGODI0NTMzQzJBODMyOUIwMzQwNDc2MTdFOTZFMzhFMzlENjhGOEI4OTQwQ0NBREI2NDRFQzExQTNFQ0I2RjQwRkRCNzNGMzRDRTg3NUI4N0YzOTEwRjAxMTU3Qjk5NUI3NUQ3NAorRUEzNjI0MDAKKzJEOTIxRTcyQ0IwNjgwN0YxOTRBRjgwMkZFQ0EKKzU4RDZFMzlBQkQ3RDQ3NDIzQzZERDE1MDI4QTQxODVCQzFCMEMyRTlBOEM0Q0E5QjUyOEFDOTBFQjNCMkZFQzg0RDZGMjM2N0FENEU0RjI2ODBGMkZCOTk4QjI1QTJBNTJFQTdBRTlERjQ1M0ZCNzMyQkZENjU0Rjg5NkQwQ0Y5RDM5RDQxRkNGRDk0NzgxNEE4RTUyRTcwRjI4NjU5OUU2RkYxODJGNEJDMkJDQ0NEQ0Q3Njk0RjFGNjNGMjY5NzM3ODc1NTg0QTgxODU4NjdFMTMzQTYwMEZCOTkzNTFBODE3Rjg2MDUzQTZENUIwQ0QxNUM0QjNCNTQyNAorQ0FDRgorQTQ2RUFENEM3QTc1NzUxMjVEQTAxNzdGQUU3NTAyMjZDQkIzRkFGRDkyQzlBOUVGRkIyQjA3NjcKKzU4REI3MUQ3Cis0NzVBQ0Q1MDk5RDNFNjc2RDUxQkU2MzY5RDEzCitGMTVEMjAyRjI5NDQzM0MzNDkzM0VDMzVDRjZGMUIwNjYzQzZGMjhCMTk2MUUwRjk4RDY3NTcyMDRBNkRBNzgxQUEzMzg1RjkyMDYzMjg1MTM3NTU5MDExNzNGOUVDNTBDNzM5NUZFM0ZGNEJCQkQ2NTdEODJDMzkwQTI2RTczNTMxRTYxRkRBOEExMjYyRUY3QzFBQjExN0REMEU5RjREM0MxQjdDNjZBMjlBMEJCNUM0RDRGM0IzQTI2MDVGNTUzMTlERkZBOEJFRjIxNgorNjhENDBBRDIKK0I2NDBDMjBFNTYzNjI3RkI4QTFCRjA3RkNFCiszQUIyODBFMzk5RTkyRTk2Nzc2REQzMUMzMDdEREIyRDcxRkE3QzZFN0FCQjJBNDJCMDcxRjQyMDU3RUUxMjY1NTY3OTFDRkM3QTEzREUwNDk2QzU1MjNFQTIzMzI0RjAyRDE3RkE5MzMxQjcyNTE2RUQzNzc2RDAzQ0RENTYzNTcxNzlFNThDN0UxMgorODg1QTA5M0YKKzVEN0I4QjQzMjc2Nzk2MEI0MThBRTk2NTYzMjEKKzlGODJEOUVFMDFBNjlCQkI4NzlGMzc0MUI0MkU4MzJFQUYxMUYzNzJENzUzRTVBMDMzQkZENkEwREFFQkQ1OEYzRDk4OTVCNDdFRTZBRUYxMTRFRUQzMzc0NkU2NDJBRDI4QTEyOTI3QjZCNDIzREJDOTE2MzdFMzQ0MkZBQTZFQ0FGMjNCODBCNDIwOEI4NUJENEVENzFEQjdDNzNGOEQyQjA0MzMxNzlGQTIzQ0YyODNDMzczNzdFRjI3QzkxRDQ4QzhCQjFFMjUzMjIzNEFEM0M4M0Y3MEFFRUY1MTZEMzIKKzM5MDU1NERBCis2MzRDM0U4QTcwNzM4NDhGQzE1NjBCM0RGNQorRUU1RkZEODJDMzRGNjg1RTM0Q0Q2RDk4RjI0QjJBRUQ3NzkzRkRGQjg4MERDRUJCMUJDMTEwRjE1NDQ0M0UxRTMyRTA2QTU0REEzNjhBQjIyM0QxRDg2QTQzMkU4N0VENTg3MTY3RkUzM0E1QjNBMEY0MzBBQTcwNDY1RUE5QzQyMTE2NUExOTZBQkZCRDJBQzA5NzMzRUMzM0FFMDMwNjdERjFBOUFDQTMwNzdFMUU5MworQ0I1MjBDNzQKKzhDREUzNjQ4REZBRjIzNzMyOTUzNDZENUEwMUUKKzQ3OEIyOEVENzk3ODJFQ0E0MTkwN0FENkJBN0FFM0JBMDIzOEJCNTU3N0I1NUI0QkRDMDhDREU0QjcxMUEyQkJGQzNEQzA3MzI5ODBEQzNEMzczODUyNzk2QjIyODhCNzQwMDFBMTUwMUM2NTFDNEY1NEEyOTlBRTgwREVDRUJCNkJBQkQ4MUVBMDQ3QTZDNEE1RUI4MkIxQ0Y3QjZGOUU4QTg4RDE3Q0ZCNDYyMkY3MTg5MDA4MEJGMDI4MzdEOUI0OENFREVFQjVDNjdFRDVFOTZBOTE3RTNCNkE2QTRBQzFFNkJGRjZEMzA2NUYxNEE5CitDNEYwNDEwNAorNjVDM0MwRDI2RTAxNDdCODBGMzFERTc0M0EKKzYwQkMwRTA0NTJEN0JCQURDMzQ3MjEyQTRCRUY3Q0ZGRTdEMTg1MDBFRUNCM0VBQ0NBMkVFNjUzODMwNEZBOEEwQUJDMzQ5OThDQ0Q4MzU4RDFFNDBFMEQ0OEYwNThERUYyOTU3NTA5MTIzQzAyNjg0NzQ1MDVFQjBDRjA1MkY0NjMyOUNFMTgKK0E0OUY4QkQ0CiswNUI2MUM0M0E1OTkyRThCOEYyQjNGOTJFQworQ0QzODQ2MzMyNjczMkU3NzQ2RDJFMjg5RkEzNDkzRDMyMDhGQUI0RDMwNjBGRDU3REM5Q0IyM0QzQzE4MUI1QzVGNkQxMjA3NjAzNDY1NjRGQzc2MTU0MjAwMzFFRjcwRThEMDYxQ0NEQjMyQjUzMDVCQ0Q3OUM2MzkzODM3MTc4MDk4NTJEQ0JDRjY1N0M2MjMxOEY5RDY2RTBEQkE0QUVGRDY0NTA1OEVCOUVGNTQzNjFBNDgKKzMwMDAwNzYwCis2NThCQzZGOUIwREFGNzlBM0ZCRTgyQkMzMzJGCitEMTIxOTU5MzAyRDlCNzk0CiszOTQwNDBCMAorODlBOENEMUVGRjIwRjI4QkFFNUQ2Q0Y4MTA3REJBRTAxMEE0OEZCMURBOEQ3NEQ5MDhBREI4MzlENDAwMzFFRTk3MEQKKzA5RUZCNjBDMDM0QzUzQjE3OEM5QTMyMTQ4REUwOERDOUQ5MkQ0RjYyQzVBMjE1RTEzRDg0NDlEN0ZDMzFFRjJCRDI0Q0Q1OUYxNDMKKzI5MTM5QjkwMTgwRUMxN0EzMkEzMDhERDY0RDM0QUQ1QUJDMkYyMUE0NTIyQ0U4QzAxMTc4QworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoaQorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGkKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hpIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA4NCBwdXQKK2R1cCAzIC9DMDA5NSBwdXQKK2R1cCA0IC9DMDA5NyBwdXQKK2R1cCA1IC9DMDA5OSBwdXQKK2R1cCA2IC9DMDEwMSBwdXQKK2R1cCA3IC9DMDEwMyBwdXQKK2R1cCA4IC9DMDEwNCBwdXQKK2R1cCA5IC9DMDEwNSBwdXQKK2R1cCAxMCAvQzAxMDggcHV0CitkdXAgMTEgL0MwMTA5IHB1dAorZHVwIDEyIC9DMDExMCBwdXQKK2R1cCAxMyAvQzAxMTEgcHV0CitkdXAgMTQgL0MwMTEyIHB1dAorZHVwIDE1IC9DMDExNCBwdXQKK2R1cCAxNiAvQzAxMTUgcHV0CitkdXAgMTcgL0MwMTE2IHB1dAorZHVwIDE4IC9DMDExNyBwdXQKK2R1cCAxOSAvQzAxMTggcHV0CitkdXAgMjAgL0MwMTIyIHB1dAorZHVwIDIxIC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTQ0IC0yMzYgNzU3IDcyOF0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OUQ5QzhCMjBFODc0MjE0RUYyRjlBOEY5NEY1MjM0M0Y1MQorMzA5REQ2MTdDMUVBQTBENEYwMDc3NjY0CitFQzk3RkQyOTU5RkE4ODQzNTMKKzY1RDcyOTkxCis2ODc5NjczNDFGNUU4NjkyRTlBODgxOEU0RjBDCis4NjVGQ0Q3ODM1REI3OTE2Q0EzQjk3RjkwOEFFRjFBNTBBNkQ4RjQ4QzY0MEEwQUY1RUE4OTA4N0M4MDJBNDYyMzZDNzM2NDBBODhGMjY5QjMzQTNENkE3QzI5NzA1ODYwNkYzNjUwQTAzRkUzMDY0MENCMjc3NjlBRUFCQjlCQUVDMUExNjdCMkE4QzgwMjYwRTg1OEQ4RkVDQkQwM0VDMTJBQzJCRjE2MkIzRUZFMzQ1RDlDNkE0QzFDMEUzQzIxMzk1RTU4OUY2MUU2ODY3NDk5NDRCMUQ2QzFFNEEyQjY5CisxQTI4QjZCRQorNUQyMzcwMEExMTFCNkVDODAwRDc0MkMzQkMKKzU4MUY0NjNCQjlBRUE3MUY1NTEyODREODNEQTc3ODZCQjc3MThDMjYwN0U5Cis4NkU1Mzg3MQorM0Q3RUI1MjgyRjYzMEY3RTFBRDVBNjhBMEMzNAorOTZCQ0E3Njg3RUM4Q0M3REY4REVFNkM5NTcyNjE2REVDRjYwNjU5MUZERDIwRDVGNTQyMDBGOTg0MDk0M0EyMkMwOEY2MUNCNzlGNENCNjQwOTI1NjZEQThENUFGQjFFRDI3MkJBMEQxMTBEODE3MTM0ODNDN0U2MTg5RDk4OUMzN0ZGMUEwRDI2MkQzM0FGRTMxQTA5M0E3QkY3NkIzOUJFMEYxOURDRkQwQTk4NjU0MEFENDg5Mzc5OTVFNjZGOTdCMjlENTVDOERGQUFBMkZBMUM3RTQyNUFGNzM5MDNGNzhBQzUxRDQ2M0FBQkQ3NEEwQ0IwMEY3RjM2CiszMjE2CitBMzNFQjREMDUyMzFFMEE3MkQ3MEEyMkE0QQorM0I5M0NGMDMKKzFBNzFFMzQ4N0Q3OUUzRjVGMDIxNERDNDdECis1Nzc1NEU1NTRGNDc1RUIyMjRENzAzMDQ5QzQxOTgyQTk3MDk1MDk1MDkzMjY4NTE1QjU3NTQ1RkM4MDQ3NzRERTM5RDgyQjQxNjc0NDA4NTJFN0JCMDJGMjZFQjJGRTY3RjMzQzc1REM3QTFDNkM0RDU0MDI0QkU0Q0RDNDhCMjY2N0FBQkIyRTYyOUJBOEI4RkZGMjc3Njc5RUUxMkFGNEVEMEVCQTg0RjJGRkEwRkFEQ0VFMjBDOTc3NTE0N0QKK0I3M0Q2M0I0CisyMDUyRjQ4QzUwOTAxOEM4QkU3MEM2RkNCMjM2CitFNjlDMzg1MTM4NzkwQjQ1QUQ2QUZBMDgyNERERkQ0Mjc5MDE3MTA0RTI5MzdGNTU1MUE2OUY0QTBGRjM4NjJERkJFMDlEODE0MjMzRTJBRTY2OEIzNTIxNzQyRkIxRjQ3MUUzRTAyNTUyMTg1NzUzNjM1MjgxNTk2OUIxNTZEQ0EyQjNFMDIzNTIxNzA3MEZBNUY1MjU2RDEzODQ5ODQ3RTQ5NzU4OTBBNjcxRUM5NzY4RDhCNzVBQjA1OUIwNEUzREE0RUM2RUQ4Cis0RTRDQjUyMAorM0IzMEU0MzEyNTkyOUQ1MThBOTJCNDg1MEJERAorMTgxRUI4QTk1RjVBQzJDQjc4NkIyQjE2RkQ0Qjg3MjIwODBBRjdBQzNFNzFCNzVCQzIzMDYwMEY2NUYyMDM2MTE1NTZGMTQyQjQ0OTg2MThDRDA4MTZBQ0RGQTVFQ0EwNzFGM0E0NzdBMDZBRUFCRjA5NUFCNTkxOEY2MzM2N0REMEZDMEY3NTI1RDIxMzMzMDlGMjIxRkEyRDM4QTA1Njk2MzgwN0YzNUY5NjFCOTc2RTZDQkE0NEUxMDZGNTgxRkE4NDBCM0ZGN0QyMzM3RkYwMUJEOTNDNkUwQ0YwQTMyNDAwNUI2NUU2QTZBM0ZGRDhERTFFOEE3RTlCCitGODAxCis0MDEwNzBDNDc0RjMzM0JEMEQ0OTQ0RDRGNEFENENDNEUzNzU5RDJCOEVGRTVBRTkyNzEzQjZEODQ5RjBFQjI5NTgyRTBDN0E4NkY5MkVCMTQ2RUEKK0NGNjZBODk4Cis1QTY0QkIzMEY3MzY3QUZENUM3RDQ2RDI4NkNFCitFRkJCNzFFNTA3RDc2RkRCNDBFQTc0MjIwRTY4OTUzQzc0ODg0RDRBQTU3MDI2RTA5NDNFQkU0RjBDNzZBNDEzQjNCMzEyREVGOEYyRDg3QjM4NEY2NDkxOTFDNUEwMkU0RkMwNkEzOUVBMzJGRDU4QTY3NUE2NEJBOTRCRUJDQzhCRDU4RkIyNzMzMUQ0MDk1MzdCNTU2QzE5NUU5NEFFNUJEMDI5RjZGREVGMERDN0Y0NjBERkQyRUQxQzVDMjA4NTIyNTk3NjAyMjkyNjREN0U5MjU5M0U3Q0ZFOUQwQ0M5NzI2MDVDOTA0Mzg2OEMyMzFDQzZGRTdFQjIKK0MwQzgKK0E1MTM5MDQ2QUFFN0EzNUU1QUQ1MzdENEFBOEI2NjlGOUU4OEY1MDM0NjJDNkYxQTQyRTlBMQorRTU2Njc5ODIKK0NGQUNBOUEzQkUxNjBDQUY3MzlDNDdFOTE1ODEKK0Q0Q0UwRkIyMzVDRUI5OERFMzJFQjkzRTg1QjkxRDRGMUNGNjlEMzQ1MTQ5Q0U1RUY1N0Q0OTc4QkQ2Qjg4MTUwOTQ3MzVEOEQ0RUI2MEEyMTVEMzU3QjBCQzEwNkI5NEJENkNCQkFGRjJDODhGQ0RFODk3QTIyMDAzRTYzMzY0NjY0Q0E5MkY4N0YzMDUzNEQ2N0ZGRDlGMzMyRTIyMzkxRjk5NjdDQTYyMkE4OUFBNTcyOURDMjAyMjY4N0YxNzNDQTE5Njc0NkZERTEzOUFGMkMwREY1MUI0NTkzNTQ1RDMzOUUxRUM4MkQ4MEY4NDk0CitGNjVEOEYwQgorNzE0RTJERjNDRkVEMzNERjRCREEyRjZGMkI4RAorQkU4NUU0RkYzRkEyQUE0OTkxRDMxRTk1NDNENzdEMDgyMkU3N0ExMjBEQzY2RTQ0RjRFQ0Y0RkYwODNGQjRENUI5QjFCNDVCRTlCRTI5NkIyMEYyMDVFMUE2NjhDMEVDNUUyN0M5MUNDQTU5QThCMENENzQzNzI2QThEQ0IxMUExNjhBNTMyREI1MzVBMUQ1QTg1QTA4NzZCQzhFNTc4RUM5RUIzNjZBRkQ5NzczQjAyQjg0NTQ0QzBEQzZGQkE4MkE4ODIxMzM0MworNTAzRTRCQUQKK0RGMDQ2Q0I3ODkzREFBNzhDQkRFNzc4MTYyRTUKKzVBODUzM0M4Mjc5NERGRUUyQTAwRTdEQTA1ODg1NkIwMjMyRDVCMTRBRDIyREE2MDEyMEMxN0FBM0Y1NDM4RUQ0NkVGMjIxREM4RTA2QTJGNDAxMEVCNDVCN0VERTJGQUM0NkQ1RDlCNUE0NkMzRjhCMjZEMzJDRTRCQzM0QUFEQzcyMjg3N0I0MzcxNUU2MTBFNjIyMTBBNUY1MDVFRERCRkU2ODg5QjkzNTFDREM1QUExOEVCRTdFQUE0MjAyQkNFNjBGMjQ0OTNGRUJBMjU5ODVGQTA1OEI2OTRGQkNCNDg0MjI1QUFGMkExQzNFMERERjkzQ0E5NjgyMworNkE0RgorQjM1QUY4RDZCNTQzNkIwNUJFRjUzRUUyODVFQjk0RENENEQzNUYyMzZFQTE2QkMyMDgwNzg3RkVCNkE3QUZGRTk0RTAxMDRDOUEzQzY0NjU4NjFCRDdFQTAyNTVFQ0E4REUyREJGMjZGODdEOUJGRjNGNDVDQzA3MjRERUI2MTA2REIzQjA0ODY1QTMzM0VGNEU1NUE2Cis5QUUxNTlDMQorRDAxMzEyREIyRDQzRjREN0EzMTU2MEM3MTFBNAorMEZFN0ZFNTBGRUE0OTQyQzFGODZCMDU2RUJDMURGQTIwRjVBMEI0OEUwOUFBRkZDRjZDMkI1MTA5RThFMjE1ODc5NzhBNjBFRUM2ODM2NDhBRkU0NzY2MTM5REZFOTQwMEVFNDVEM0VDQ0EwODg0MDU4MjQ5MEE4RDZCMDIwMkVBRTlGNjA4M0M3OTYxNkM0MEY4NjU1ODI5MzBEOUQ2REQzMTEzNkFFRkVEQkM1MjdGOTU5OUVGOTNEQTJFMzVEREM0OUFGMkI4NTU2Q0VGOUIzRTlEMTIyRUU1QTQxQTlBNjA2MTJGMjhFMzNDNDhGRDJCNzQxNTM2MzhECitGMkZECiszN0IwOTcyQjIzN0IxRjZGRjdCQjVCMjREM0Q4OUMxRjdGQTYyQkFGOEQxQjg3MDcwRQorQjFCQjQxQzQKKzY2MDRFMTdEODlDQjAwMzEwNDYxMEU0RjczCiswREFGMkYyREQ0OUMxMUMwRTE0RkZCODI2MEFCM0VGNTY4NjI2NTAzMzdBNjlGNzFBREQzRDgxRTdGNTMxRkE1MTE1MzE2RTVEOTU5QkNFQ0NFQTVFRTdCMzRENjQzMDZFRjg5RDI2MEQ1NDBCNDREQ0Q5M0IwQTZGOUZDNDU1Q0Y3NjI2NzgyNDc0NkM0MTNCQUM5MzY0QzMwMDNDNUM3QUIxNEVBMzM0RjQ5RjQ2MEY5NDUzREM4NEM0RDhFCitDREM1MTcxRQorNUI4RTBEQ0Y4M0MyQjAwMzcxMjI0QTdDQjVBQworMzgwQjFCMjBGNkRDNDJGN0E5RkNDQzNENTE1ODRGRjRDQzQxNzkwRTY3QkMxMDkwNUVDREUxMDJDRjNFNjY2MjY5QTdFODJDRkE1QUZEMzY2MTIxNzE4NkFEMjZFMzA4NjRGNzY0NjNBQTM5RkI1MDZFODExNTNBM0VCNjk5OEFBN0UyODJDMDlBMzg4MERGNTg5QzRFNTYxQjk0MjAwQkUyMkZFQTI0NjEyREFDMzZGMjVBNUU2NTU3N0U3QzM2MkJEMUE5ODkxRjI3RTcwNzQ5MDhDRjY4N0NEMTQ2MDY2NEQ2MDE2NDQ0NzNBNDE0MDE0NURFOTZGMjQ1Cis0OEU2CisyNUQ1MUUyNkUxMEQyNzcyN0Q5OTBDNkI2M0QyOTBCQjdCRUJDREZBNjQzREZCOTc4RTk0OEI4MEIwNTY2QUZEN0YyRUMyMThCNkYyMkYyODBDOUUKK0M5MjcwMDEzCisyNTMzNkU1Rjg3MUU5QUFEMEExQTQwQjQ0QQorRDY1N0FGRjkxODBGREQyM0FCNkFBNDc0NURDOUQwQkUyM0ZERTVEMDFGQ0RCOTY5MTRDODhFMkRDOEJBRkQyQzhFQzhERUY4QjkxMzA2QzM0REZDNkUxNzk4N0YwN0YwN0E0MkMxRTkzRTg1MkU0QkQyQjU2NEVDOUE0NTY2MDI1QjMzRkRDREU1NTBGNzJGMEJEOUE3MEI1QUIxQjQ3MEE2N0E2QjA2NkFFQUI0MTk1NkU4QjIKK0MxOUE2NTZBCisyOUNDQjM2QkJEQ0VFNEZEREExQjg2Njk2QTdBCiszREM0REJFMDcyRUE0MzIwNzc0NTI5MjBGQjE1OTkxM0U5RUY0QzY5MUMyNzc2MEZDNEQ3QTJBOEYwRTY1Mzc3REE0OTFCMjJGMjI1Mjk5QzBGMkEyNEQwMTVDNDIzOTU2OTdFRTM0RTU5NEJEMTQ5OUE1MTAxQkE5QTZFN0IxRjYzOUY0RjE4RTZEOENBQzAzRTkyNTlEMkREMkVFNzIyRUUyQjk5QjM2QjMzNDZENkM2MjU1MEE4QzdCRTFEQjZCNTIxRDUzM0EyRUEzRkU4MDk1MThBRDgxRDJFRUEzRDMxOTA4Rjg0NjFCMgorMTZBNjk0N0QKKzlBOUZGQjY2ODcxNjg4RjkzQTNERkI1REE3CitBNUE5NzQwNzc2NUVGMkU4RDA3NTI2NTBBOEVGOEY5Njc0NjdDQTVEMkEwNDFDNjYwRDJGREQ0MEZEOTU1RkM5OEQ5QjIzNjRFREYxNjIxQjZFQkI1QUI0OTIxRkJENzA1NURERTQ4ODJFQ0M0NDIzNTE1N0NEQzUwNjVDRTE4ODI2RjEyNTlCNzk1MjkwMUJGMkIwNjE3NTQ1ODkwRjNCQkNCMDUyNjUwQ0NGQzgKKzMxN0U0NDJECis5OUQwMTk4MUZGMjA1MDJDMjBBRkNBREQ3NjIxCisyQTM3NTk1NkY3NjM4MUY1ODk4MEM1NkFDNjNENzlBNTc4Q0ZCRDFGQjg3QjdCREU4MkNGQTRBQjJGNTdDRTM3RDlBQjJEMzlBNThBQTQyNDdBMzBEQzQwNzIxN0I5MTYzODRGOEU4RTczQzIzMUI5Rjg2MjJGODlDQTZGREQ2QjAzRTI0MzU2OTU1MTcwN0I1NUQ1MjAzMDhCRjIxNDNGRUM4REY1MzA2NEY5ODQ3OUI1RUJCODdDNTFGODRDMUZCQkNCMzhGOENGRjg0RTg5QTEyNzU3QjAyNTdDQzBBMTMzNTVDOTBEOUFBMDA1NDMxQzU4Nzk5RkZGNkIKKzI1MDcKK0FDMEVCMjA2OEExN0IwMzk0Q0JCQjAyNjgzQ0VGQUY2RjhBOEEzQjNCNzQ5NjAKKzY3RDk2NUY4CitBRDE0NEU2QTZENThEMkEwN0RCNDQwRjQ1RgorQzJFNjA3MzJCMEQyNzc2QURGRjgwMkJBQTVBRjAwOTUwRkQ3Q0UxRDQ5QUI5RERDNDBFNzg2NTRGNzhCQjM1NzIzMkYxQTg1QjFEMDVCMEFEM0M0RDg2QkUwNkE4Q0YyNDRENTk1NDE3MUMzRjJGMTMzNkZDNjUwNUUyQjVCMUMyQzZEODU0QUI4MUYzRjhEN0QxQjU0ODZGMDIwRkZBQUI2QURGMUIwRDZBN0NFQTkxRDIwCis1OUM5RDQxNgorNUNCRjBFNDkxRENENzM4RTJBODhBNTU4MTk1NworRjJEODg0MDZEM0Q3MTE2RkNFNUE3MDc3RkNBNjI2NTBEQUE3MUVBRDcxMjI3RUM1QzdBNjgxNjhCMDFCREYxNEU4RDhDOERFNUNGRjU2QTMyQThGMTdDQThBMTZDNkY4RUFDNjM5NDA1REM0MzBCM0QwQkY1MzY0QTQ0Q0UwN0IwNEM2MzhBRkI4NTM3MTcwRTZFNTA5RDA4QzUwNUIwRjVERTg1NkVFMDgzNUJGRTI0Q0M3MzZBNkMwMjQwREREQjNCN0E5ODhGRUI2QURFQjg5MjUxQTdGRDU3OTg1NUEyQTVDMTNFQTIyNEZCREQ3MTQ3OTNFOEZBRkVDCitFQUU0CitFOEY1OTkxQzJFREE4Mzc3N0UKKzgzNTUwOENECisxMzlCRDU2RTM3M0ZCM0I5RDEyQ0JGRjY3MAorMThBNTY1QjlENTlFRDBFMzhEN0VDMjgzNEVDRkVCRDRBQ0NCQ0I2RjYzQUYyNEVCCisxOEU3QkJGMworNTRGNkRENzJEMEY5QUY2MUY0MjFBNzUxNDRFNworMEJFQTM2OEFCNTUxN0ZFNAorMUUxMzI2ODIKK0Y2RDUyMDhEMjg3Qjc0RkQyQTk5RjI5OEVFNEVBRDg4NTVFMDFBQzkzOEQyMjVCMDE5MjRENTMyRUVFQkM2NkVCQTlBCisxNjE5QzZEODdGN0EwMkQ5RTNCMzI0RjJGOERGMzEwQUI4RjE2REIxNDZFRENBRTM2MUU3NDBBNkQ1N0Y4MkIxMzdCRjBFQjU5MjJBCitCMEZDODZDRDQ5MjdGOTc3RkI5QUM5NUMxMzdFQTQwRTZFMEE2RTMxMDI4QjgyNDU0QjJDRkQKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmkgMTIuMDAgL1BTT3dzdGR1dGNoaSBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0YiAxNC4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDE5MjYzNDMxMjYzMjI3MGUwMTExMDExMjI2MmYyNDI5MmUyMjMyMmMwMTI3MzAzMjAxMTgyNjIyMzMzNTMyMmEyZjI4MDExOTI2MzQzNzMwMzIyYzAxMWI+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MjYzMjI3MzAzMjJlMjIyZjI0MjY+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDBkPiA5NDM0IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDE0YiBTRgorPDBhMTEwZjFkMTQxOTE4PiAxMjcxIDE0NTggMCAyMDU1IC0xIHMKKzwwMDA1MDMwMDBjMWMxNDE4MTMwMDA4MTExZDFhMTExYjEyMDAxZDE5MDAxNzExMGQxYzFlMWIxMTAwMGUxZTE2MTUwMDEwMGQxZDBkMDAxZDFiMGQxODFjMTIxMTFiMDAxYTExMWIxMjE5MWIxNzBkMTgwZjExPiAyMDU1IDE0NTggOSA4NDk3IDAgcword3N0OmR1dGNoMTIgU0YKKzwxZDI5MjY+IDEyNzEgMjA4NiAwIDE2MzEgLTEgcworPDAwMmUzMDMzMzQwMDI0MzAyZTJlMzAyZjAwMzUzMzI2MDAzMDI3PiAxNjMxIDIwODYgNCAzNTA0IDAgcworPDAwMmYyNjM0MzEyNjMyMjcwMDJhMzMwMDJlMjYyMjMzMzUzMjJhMmYyODAwMjMzNTJkMmMwMDI1MjIzNDIyMDAzNDMyMjIyZjMzMjcyNjMyMDAzMTI2MzIyNzMwMzIyZTIyMmYyNDI2MDgwMDFkMjkyYTMzMDAyYTMzMDAyMjJkMzMzMDAwMzIyNj4gMzUwNCAyMDg2IDExIDk0NjEgMCBzCis8M2Q+IDk0NjEgMjA4NiAwIDk1MzEgLTEgcworPDI3MjYzMjMyMjYyNT4gMTI3MSAyMzMwIDAgMTgyOSAtMSBzCis8MDAzNDMwMDAyMjMzMDAzYzMzMzQzMjI2MjIyZTAyMDAzMDMyMDAzYzM1MmYyYTI1MmEzMjI2MjQzNDJhMzAyZjIyMmQwMDMzMzQzMjI2MjIyZTAyMDAzMTI2MzIyNzMwMzIyZTIyMmYyNDI2MDgwMDE1MzMzMzI2MmYzNDJhMjIyZDJkMzkwNjAwMzQyOTI2MzMyNjAwMzQyNjMzMzQzMzAwMzcyYTJkMmQ+IDE4MjkgMjMzMCAxMSA5NTMxIDAgcworPDJlMjYyMjMzMzUzMjI2PiAxMjcxIDI1NzUgMCAyMDM4IC0xIHMKKzwwMDI5MzAzNzAwMjcyMjMzMzQwMDMwMmYyNjAwMzMzOTMzMzQyNjJlMDAyNDIyMmYwMDMzMjYyZjI1MDAyNTIyMzQyMjAwMzQzMDAwMjIyZjMwMzQyOTI2MzIwMDIyMmYyNTA5MzAzMjAwMjkzMDM3MDAyNzIyMzMzNDAwMzQyOTIyMzQwMDMwMzQyOTI2MzIwMDMzMzkzMzM0MjYyZTAwMjQyMjJmPiAyMDM4IDI1NzUgMTYgOTUzMSAwIHMKKzwzMjI2MjQyNjJhMzYyNj4gMTI3MSAyODIwIDAgMTkxNCAtMSBzCis8MDAyYTM0MDg+IDE5MTQgMjgyMCAxIDIxNDcgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYjA2MDkwMDBhMWQxYjExMGQxNzAwMDk+IDEyNzEgMzMwNyAyIDI1ODggMCBzCis8MTExYjEyMTkxYjE3MGQxODBmMTE+IDI1ODAgMzMwNyAwIDM2MjIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxZDI5MjY+IDEyNzEgMzcyOSAwIDE2MzEgLTEgcworPDAwMWQxMzFiMDAzMzM0MzIyNjIyMmUwMDMxMjYzMjI3MzAzMjJlMjIyZjI0MjYwMDM0MjYzMzM0MDAyYTMzMDAzNDI5MjYwMDI1MjYyNzIyMzUyZDM0MDAzNDI2MzMzNDAwMzQzOTMxMjYwMDI3MzAzMjAwMzQyOTI2MDAyZjI2MzQzMTI2MzIyNzAwMzEzMjMwMjgzMjIyMmUwODAwMWQyOTI2MDAzMzJhMmUzMTJkMjYzMzM0PiAxNjMxIDM3MjkgMTUgOTUzMSAwIHMKKzwzNDI2MzMzND4gMTI3MSAzOTc0IDAgMTU5NSAtMSBzCis8MDAyYTMzMDAzMTI2MzIyNzMwMzIyZTI2MjUwMDIzMzkwMDI2MmYzNDI2MzIyYTJmMjgwMDM0MjkyNjAwMjQzMDJlMmUyMjJmMjUwZT4gMTU5NSAzOTc0IDYgNTIxOSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA0MTkxYTFkMDQxODExMWQxYTExMWIxMjA0MTgxMTFkMWExMTFiMTIwMDAyMDcwMD4gMTM5OCA0MzIxIDIgMzYyNiAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBmMDYwYjBkMTEwNjA4MGQxMDExPiAzNjI2IDQzMjEgMCA0NTg1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzcyOTJhMjQyOT4gMTI3MSA0NjY3IDAgMTc5NyAtMSBzCis8MDAzNzJhMmQyZDAwMzEyNjMyMjczMDMyMmUwMDIyMDAwYjBhMDAzMzI2MjQzMDJmMjUwMDM0MjYzMzM0MDAyMzI2MzQzNzI2MjYyZjAwMzQyOTI2MDAyZDMwMjQyMjJkMDAzMzM5MzMzNDI2MmUwMDIyMmYyNTAwMzQyOTI2MDAzMzM5MzMzNDI2MmUwMDJhMjUyNjJmMzQyYTI3MmEyNjI1MDAyMzM5MDA+IDE3OTcgNDY2NyAxNiA5MDE0IDAgcword3N0OmR1dGNoMTJpIFNGCis8MGYwNjBiMGQ+IDkwMTQgNDY2NyAwIDk0NjEgLTEgcworPDE1PiA5NDYxIDQ2NjcgMCA5NTMxIC0xIHMKKzwxMTA2MDgwZDEwMTE+IDEyNzEgNDkxMiAwIDE3ODMgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOD4gMTc4MyA0OTEyIDAgMTgzNiAtMSBzCis8MDAxZDI5MjYwMDMzMzAyNDJjMjYzNDAwMjMzNTI3MjcyNjMyMzMwMDMwMmYwMDI2MmEzNDI5MjYzMjAwMjYyZjI1MDAzNzJhMmQyZDAwMjMyNjAwMzMyYTNhMjYyNTAwMjIyNDI0MzAzMjI1MmEyZjI4MDAzNDMwMDAzNDI5MjYwMDMzMzkzMzM0MjYyZTMzMDMwMDI1MjYyNzIyMzUyZDM0MDAyMjJmMjUwMDIyMmQyZD4gMTgzNiA0OTEyIDE2IDk1MzEgMCBzCis8MWQxMzFiPiAxMjcxIDUxNTcgMCAxNjg4IC0xIHMKKzwwMDMwMzEzNDJhMzAyZjMzMDAwNDI2MDgyODA4MDAxZDEzMWIyMTE5MWExNDE1MTcxMT4gMTY4OCA1MTU3IDMgNDM5MCAwIHMKKzwxZTA1MDAzNzJhMmQyZDAwMjMyNjAwMjIzNDAwMzQyOTI2MmEzMjAwMjUyNjI3MjIzNTJkMzQwMDMzMjYzNDM0MmEyZjI4MzMwOD4gNDM2NyA1MTU3IDYgNzQ0MCAwIHMKKzwxZD4gMTI3MSA1NTA0IDAgMTQxMCAtMSBzCis8MzA+IDEzNzkgNTUwNCAwIDE0OTUgLTEgcworPDAwMjIzMzMzMmEzMzM0MDAyYTJmMDAyZTI2MjIzMzM1MzIyYTJmMjgwMDFkMTMxYjAwMzMzNDMyMjYyMjJlMDAzMTI2MzIyNzMwMzIyZTIyMmYyNDI2MDYwMDM0MzczMD4gMTQ5NSA1NTA0IDcgNTk0NSAwIHMKKzwwMDMzMjQzMjJhMzEzNDAwMjcyYTJkMjYzMzAwMjIzMjI2MDAzMTMyMzAzNjJhMjUyNjI1MDAzNzJhMzQyOTAwMzQyOTI2MDAyZjI2MzQzMTI2MzIyNz4gNTk0NSA1NTA0IDcgOTUzMSAwIHMKKzwyNTJhMzMzNDMyMmEyMzM1MzQyYTMwMmYwOD4gMTI3MSA1NzQ4IDAgMjM3NSAtMSBzCis8MDAxZDI5MjYzOT4gMjM3NSA1NzQ4IDEgMjkwNiAwIHMKKzwwMDIyMzIyNjAwPiAyOTA2IDU3NDggMiAzMzQ4IDAgcword3N0OmR1dGNoMTJpIFNGCis8MTEwNTBlMDMxMDExMGYwNjA0MGIwMzEwMDUwZjA5MGUxMT4gMzM0OCA1NzQ4IDAgNDg2NiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMjIyZjI1MDA+IDQ4NjYgNTc0OCAyIDUzNTQgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMTA1MGUwMzBmMDQwYzA3MDYwMzEwMDUwZjA5MGUxMT4gNTM1NCA1NzQ4IDAgNjc2NiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA4MDA+IDY3NjYgNTc0OCAxIDY4OTQgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMj4gNjg5NCA1NzQ4IDAgNzAyNyAtMSBzCis8MDUwZTAzMTAxMTBmMDYwNDBiMDMxMDA1MGYwOTBlMTE+IDcwMDMgNTc0OCAwIDg0NjIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDM3MmEyZDJkMDAyYTJmMzYzMDJjMjY+IDg0NjIgNTc0OCAyIDk1MzEgMCBzCis8MmYyNjM0MzEyNjMyMjc+IDEyNzEgNTk5MyAwIDE5MzMgLTEgcworPDAwMjMyMjMzMjYyNT4gMTkzMyA1OTkzIDEgMjU5NCAwIHMKKzwwMDMwMmYwMDM0MjkyNjAwMzMyNjM0MzQyYTJmMjgwMDMwMjcwMDMzMjQzMjJhMzEzNDAwMzYyMjMyMmEyMjIzMmQyNjMzMDAyNDMwMmYzNDMyMzAyZDJkMmEyZjI4MDAzMzMwMjQyYzI2MzQwMDIyMmYyNTAwMzMyNjJmMjUwMDMzMmEzYTI2MzMwOD4gMjU5NCA1OTkzIDExIDk1MzEgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMj4gMTI3MSA2MjM4IDAgMTQwNCAtMSBzCis8MDUwZTAzMGYwNDBjMDcwNjAzMTAwNTBmMDkwZTExPiAxMzgwIDYyMzggMCAyNzMzIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAzNzJhMmQyZDAwMzEyNjMyMjczMDMyMmUwMDIyMDAzMzJhMmUyYTJkMjIzMjAwMzMyNjM0MDAzMDI3MDAzNDI2MzMzNDMzMDYwMDM3MmEzNDI5MDAzNDI5MjYwMDI1MmEyNzI3MjYzMjI2MmYyNDI2MDAyMzI2MmEyZjI4MDAzNDI5MjIzNDAwMzcyOTI2MzIyNj4gMjczMyA2MjM4IDEzIDk1MzEgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMTA1MGUwMzEwMTEwZjA2MDQwYjAzMTAwNTBmMDkwZTExPiAxMjcxIDY0ODMgMCAyNzg5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAzNDI2MzMzNDMzMDAzMzMxMjYyNDJhMjcyYTI0MDAyNTIyMzQyMjMxMzAyYTJmMzQzMzA2MDA+IDI3ODkgNjQ4MyA0IDUwNjggMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMTA1MGUwMzBmMDQwYzA3MDYwMzEwMDUwZjA5MGUxMT4gNTA2OCA2NDgzIDAgNjQ4MCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMzcyYTJkMmQwMDMxMjYzMjI3MzAzMjJlMDAzNDI2MzMzNDMzMDAyMjM0MDAzMTMwMmEyZjM0MzMwMDM3MmEzNDI5MmEyZj4gNjQ4MCA2NDgzIDYgOTUzMSAwIHMKKzwyMj4gMTI3MSA2NzI4IDAgMTM3NiAtMSBzCis8MDAzMzMxMjYyNDJhMjcyYTI2MjUwMDMyMjIyZjI4MjYwOD4gMTM3NiA2NzI4IDIgMjg0NyAwIHMKKzwxNjI3PiAxMjcxIDcwNzUgMCAxNDIyIC0xIHMKKzwwMDM5MzAzNTAwMzczMDM1MmQyNTAwMmQyYTJjMjYwMDM0MzAwMDMxMjYzMjI3MzAzMjJlMDAzNDI2MzMzNDMzMDAzMDM0MjkyNjMyMDAzNDI5MjIyZjAwMzQyOTMwMzMyNjAwMjUzMDJmMjYwMDIzMzkwMDM0MjkyNjAwMzMyNDMyMmEzMTM0MzMwNjAwMzkzMDM1MDAyNDIyMmYwMDJhMmYzNjMwMmMyNjAwMmYyNjM0MzEyNjMyMjc+IDE0MjIgNzA3NSAxNyA5NTMxIDAgcworPDJlMjIyZjM1MjIyZDJkMzkwOD4gMTI3MSA3MzE5IDAgMjE1MSAtMSBzCis8MDAxYzMwMmUyNjAwMzAyNzAwMzQyOTI2MDAzMDMxMzQyYTMwMmYzMzAwMzkzMDM1MDAzNzJhMmQyZDAwMmQyYTJjMjYyZDM5MDAzNzIyMmYzNDAwMzQzMDAwMjYzODMxMjYzMjJhMmUyNjJmMzQwMDM3MmEzNDI5MDAyMjMyMjYwZT4gMjE1MSA3MzE5IDEyIDc5NTAgMCBzCis8MDczMz4gMTU4OSA3NjY2IDAgMTg0NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMDA5MTQwNjEwMGUwNjA1PiAyMDMzIDc2NjYgMCAyNzEyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzcyOTJhMjQyOT4gMzE3NyA3NjY2IDAgMzcwMyAtMSBzCis8MDAzNzJhMmQyZDAwMzMyNjM0MDAzNDI5MjYwMDJkMzAyNDIyMmQwMDMzMjYyZjI1MDAyMjJmMjUwMDMyMjYyNDI2MmEzNjI2MDAzMzMwMjQyYzI2MzQwMDIzMzUyNzI3MjYzMjAwMzMyYTNhMjYzMzAwMzQzMDAwMzQyOTI2PiAzNzAzIDc2NjYgMTIgODg5NSAwIHMKKzwzNjIyMmQzNTI2MDQzMzA1PiAzMTc3IDc5MTEgMCAzOTAwIC0xIHMKKzwwMDMzMzEyNjI0MmEyNzJhMjYyNTA4MDAxZjE0MjYyNzIyMzUyZDM0MGUwMDMzMzkzMzM0MjYyZTAwMjUyNjI3MjIzNTJkMzQwMDMzMzAyNDJjMjYzNDAwMjMzNTI3MjcyNjMyMDAzMzJhM2EyNjMzMjA+IDM5MDAgNzkxMSA3IDg4MDYgMCBzCis8MDcxYz4gMTU4OSA4MjU3IDAgMTg4MiAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMDA5MTQwNjEwMGUwNjA1PiAyMDMzIDgyNTcgMCAyNzEyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzcyOTJhMjQyOTAwMjMyNjI5MjIzNjI2MzMwMDJiMzUzMzM0MDAyZDJhMmMyNjAwMDczMzAwMjMzNTM0MDAyNzMwMzIwMDM0MjkyNjAwMzIyNjJlMzAzNDI2MDAzMzM5MzMzNDI2MmU+IDMxNzcgODI1NyA5IDc5MjMgMCBzCis8MDcyZT4gMTU4OSA4NjA0IDAgMTk0MCAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMzA0MGExMjA2PiAyMDMzIDg2MDQgMCAyNDk1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzMyNjM0PiAzMTc3IDg2MDQgMCAzNDMyIC0xIHMKKzwwMDM0MjkyNjAwMmQzMDI0MjIyZD4gMzQzMiA4NjA0IDIgNDIzNCAwIHMKKzwwMDMzMjYyZjI1MDAzMzJhM2EyNjAwMzQzMDAwPiA0MjM0IDg2MDQgNCA1MzM1IDAgcword3N0OmR1dGNoMTJpIFNGCis8MTMwNDBhMTIwNj4gNTMzNSA4NjA0IDAgNTc5NyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMjMzOTM0MjYzMzA4MDAxZjE0MjYyNzIyMzUyZDM0MGUwMDJkMzAyNDIyMmQwMDMzMzAyNDJjMjYzNDAwMjMzNTI3MjcyNjMyPiA1Nzk3IDg2MDQgNSA4ODk1IDAgcworPDMzMmEzYTI2MjA+IDMxNzcgODg0OSAwIDM1ODIgLTEgcworPDA3MTg+IDE1ODkgOTE5NSAwIDE5NjcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MTMwNDBhMTIwNj4gMjAzMyA5MTk1IDAgMjQ5NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM3MjkyYTI0Mjk+IDMxNzcgOTE5NSAwIDM3MDMgLTEgcworPDAwMjMyNjI5MjIzNjI2MzMwMDJkMmEyYzI2MDAwNzJlMDYwMDMzMjYzNDM0MmEyZjI4MDAzNDI5MjYwMDMyMjYyNDI2MmEzNjI2MDAzMzJhM2EyNjAwMjczMDMyMDAzNDI5MjY+IDM3MDMgOTE5NSA5IDgxODAgMCBzCis8MDAzMjI2MmUzMDM0MjY+IDgxODAgOTE5NSAxIDg4OTUgMCBzCis8MzMzOTMzMzQyNjJlMDg+IDMxNzcgOTQ0MCAwIDM4MzUgLTEgcworPDAwMWYxNDI2MjcyMjM1MmQzNDBlMDAzMjI2MmUzMDM0MjYwMDMyMjYyNDI2MmEzNjI2MDAzMzMwMjQyYzI2MzQwMDIzMzUyNzI3MjYzMjAwMzMyYTNhMjYyMD4gMzgzNSA5NDQwIDYgNzgwMSAwIHMKKzwwNzJkPiAxNTg5IDk3ODcgMCAxODI0IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDEzMDQwYTEyMDY+IDIwMzMgOTc4NyAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzMzI2MzQ+IDMxNzcgOTc4NyAwIDM0MzIgLTEgcworPDAwMzQyOTI2MDAzNDI2MzMzNDAwMmQyNjJmMjgzNDI5MDAzNDMwPiAzNDMyIDk3ODcgNCA0OTY2IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDAxMzA0MGExMjA2PiA0OTY2IDk3ODcgMSA1NDcwIDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDMzMjYyNDMwMmYyNTMzMDAzNzI5MjYyZjAwMzYyMjJkMzUyNjAwMmEzMzAwMTAwMDBhMDAyMjJmMjUwMDM0MzAwMDNiPiA1NDcwIDk3ODcgOSA4NTY5IDAgcword3N0OmR1dGNoMTJpIFNGCis8MTMwNDBhPiA4NTY5IDk3ODcgMCA4ODI1IC0xIHMKKzwxNT4gODgyNSA5Nzg3IDAgODg5NSAtMSBzCis8MTIwNj4gMzE3NyAxMDAzMiAwIDMzODMgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzYj4gMzM4MyAxMDAzMiAwIDM0ODkgLTEgcworPDAwMjMzOTM0MjYzMzAwMzcyOTI2MmYwMDM2MjIyZDM1MjYwMDJhMzMwMDBmMDAwYT4gMzQ4OSAxMDAzMiA2IDU2NTIgMCBzCis8MDcxND4gMTU4OSAxMDM3OCAwIDE5MzcgLTEgcworPDMzMjYzNDAwMzQyOTI2MDAxZDEzMWIyMTE5MWExNDE1MTcxMT4gMzE3NyAxMDM3OCAyIDUzMDQgMCBzCis8MWUwMDMwMzEzNDJhMzAyZjAwMzQzMDAwMzQzMjM1MjYwMDMwMmYwMDIzMzAzNDI5MDAzMzM5MzMzNDI2MmUzMz4gNTI4MSAxMDM3OCA2IDgyNDAgMCBzCis8MWQyOTJhMzM+IDEyNzEgMTA3MjUgMCAxNjY1IC0xIHMKKzwwMDJhMzMwMDJmMzAzNDAwMjIwMDI0MzAyZTMxMmQyNjM0MjYwMDJkMmEzMzM0MDAzMDI3MDAzMDMxMzQyYTMwMmYzMzAwMzQyOTIyMzQwMDI0MjIyZjAwMjIyNzI3MjYyNDM0MDAxZDEzMWIwMDMzMzQzMjI2MjIyZTAwMzEyNjMyMjczMDMyMmUyMjJmMjQyNjA2MDAyMzM1MzQwMDJhMzQwMDI1MzAyNjMzMDAyNDMwMzYyNjMyPiAxNjY1IDEwNzI1IDE3IDk1MzEgMCBzCis8MzQyOTMwMzMyNj4gMTI3MSAxMDk3MCAwIDE3NTggLTEgcworPDAwMzAzMTM0MmEzMDJmMzMwMDM0MjkyMjM0PiAxNzU4IDEwOTcwIDIgMjg2NyAwIHMKKzwwMDIyMzIyNjAwMzUzMzI2MjUwMDJlMzAzMzM0MDAzMDI3MzQyNjJmMDgwMDExMDAyNDMwMmUzMTJkMjYzNDI2MDAyZDJhMzMzNDAwMzAyNzAwMmYyNjM0MzEyNjMyMjcwMDMwMzEzNDJhMzAyZjMzMDAyNDIyMmYwMDIzMjYwMDI3MzAzNTJmMjUwMDJhMmYwMDFjMjYyND4gMjg2NyAxMDk3MCAxNSA5NDYxIDAgcworPDNkPiA5NDYxIDEwOTcwIDAgOTUzMSAtMSBzCis8MzQyYTMwMmY+IDEyNzEgMTEyMTUgMCAxNjMwIC0xIHMKKzwwMDBjMDg+IDE2MzAgMTEyMTUgMSAxODQyIDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDEwKSAxMAorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM0IHB1dAorZHVwIDMgL0MwMDM2IHB1dAorZHVwIDQgL0MwMDM5IHB1dAorZHVwIDUgL0MwMDQwIHB1dAorZHVwIDYgL0MwMDQxIHB1dAorZHVwIDcgL0MwMDQ0IHB1dAorZHVwIDggL0MwMDQ1IHB1dAorZHVwIDkgL0MwMDQ2IHB1dAorZHVwIDEwIC9DMDA0NyBwdXQKK2R1cCAxMSAvQzAwNDggcHV0CitkdXAgMTIgL0MwMDQ5IHB1dAorZHVwIDEzIC9DMDA1MCBwdXQKK2R1cCAxNCAvQzAwNTIgcHV0CitkdXAgMTUgL0MwMDU4IHB1dAorZHVwIDE2IC9DMDA2NSBwdXQKK2R1cCAxNyAvQzAwNjYgcHV0CitkdXAgMTggL0MwMDY3IHB1dAorZHVwIDE5IC9DMDA2OCBwdXQKK2R1cCAyMCAvQzAwNjkgcHV0CitkdXAgMjEgL0MwMDcwIHB1dAorZHVwIDIyIC9DMDA3MSBwdXQKK2R1cCAyMyAvQzAwNzIgcHV0CitkdXAgMjQgL0MwMDczIHB1dAorZHVwIDI1IC9DMDA3NiBwdXQKK2R1cCAyNiAvQzAwNzcgcHV0CitkdXAgMjcgL0MwMDc4IHB1dAorZHVwIDI4IC9DMDA3OSBwdXQKK2R1cCAyOSAvQzAwODAgcHV0CitkdXAgMzAgL0MwMDgyIHB1dAorZHVwIDMxIC9DMDA4MyBwdXQKK2R1cCAzMiAvQzAwODQgcHV0CitkdXAgMzMgL0MwMDg1IHB1dAorZHVwIDM0IC9DMDA4NiBwdXQKK2R1cCAzNSAvQzAwODcgcHV0CitkdXAgMzYgL0MwMDg4IHB1dAorZHVwIDM3IC9DMDA4OSBwdXQKK2R1cCAzOCAvQzAwOTUgcHV0CitkdXAgMzkgL0MwMDk3IHB1dAorZHVwIDQwIC9DMDA5OCBwdXQKK2R1cCA0MSAvQzAwOTkgcHV0CitkdXAgNDIgL0MwMTAwIHB1dAorZHVwIDQzIC9DMDEwMSBwdXQKK2R1cCA0NCAvQzAxMDIgcHV0CitkdXAgNDUgL0MwMTAzIHB1dAorZHVwIDQ2IC9DMDEwNCBwdXQKK2R1cCA0NyAvQzAxMDUgcHV0CitkdXAgNDggL0MwMTA3IHB1dAorZHVwIDQ5IC9DMDEwOCBwdXQKK2R1cCA1MCAvQzAxMDkgcHV0CitkdXAgNTEgL0MwMTEwIHB1dAorZHVwIDUyIC9DMDExMSBwdXQKK2R1cCA1MyAvQzAxMTIgcHV0CitkdXAgNTQgL0MwMTEzIHB1dAorZHVwIDU1IC9DMDExNCBwdXQKK2R1cCA1NiAvQzAxMTUgcHV0CitkdXAgNTcgL0MwMTE2IHB1dAorZHVwIDU4IC9DMDExNyBwdXQKK2R1cCA1OSAvQzAxMTggcHV0CitkdXAgNjAgL0MwMTE5IHB1dAorZHVwIDYxIC9DMDEyMCBwdXQKK2R1cCA2MiAvQzAxMjEgcHV0CitkdXAgNjMgL0MwMTIyIHB1dAorZHVwIDY0IC9DMDEyNyBwdXQKK2R1cCA2NSAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yNTYgOTc4IDc2Nl0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIyNDNFMEVDNTkzNDRDRUYzNjk2NTBBMDM3QjQzODNCMDNENgorMjRDMzA2RTg3RUZERDQ3NzVFQzc4NzQyCitGRUZDRTQ0Qjc2NTU3NDQ2NkMKK0QxQUY3QTgyCitDRkUxOUZFQzA3MDU1MTcxODAzQkUzNUZCNjFGCitERkE1QTRDNzM5QTRFMzk1N0VCN0M2NjIzMzg0NEFDNTFBNkE5MUI0NUI3NUU2QUYxRjc2Nzc5QTRFQTM5RDU1NEM2NzFGMDM5RjZFQTA5MDJFRUFCQzEzMzYzQkREQTUxMDFDQTEyQkI4MTU2RUVDNUFGMEJGOUU2RkZENDFFM0U4Mjk3ODk1RTE1NTRGNTczMTRERTVFNUU3MEMzMkRBNDdGRDMwQTg1MjVEN0VFOUM2MDYwN0VEQjZGRDlGODE2QkJBOTQxNzI3NkY4NQorNjBGNUREQjQKK0EzOTQ4QjMzRUNENzA1MTVFRkIwRjI1RTc3NjYKKzIzRjczN0EwNjU3OEQyQzUwMTk3MUQyMUExQUQwREZCNDZDRjUyODc4NjkxODI0NDRGNDExRkYxMTgyMzAyNjY3MEI5MDdGRjM4MjY2NUYzOUY5NEMwOUUwRTFFNzZEQzBCMDJBNEJGMDlGQjhGMkU1QkU5MDlDRDRDNDE4MzNFQjIyRTBGRUE3NUE0MEQzNUQ3NzAwREUxMzRFNkM1NTZENkE3Q0U1MTJENjMyN0YxRjE3NUM0QTE5QzBGNjRBRTYxRTAwRENBMDNGOEY1RTY0QTVBMjM1RTVENzNCQUM0ODdFM0NFRjVDRUU0QTRDREUxQTY4REJCNUM3NworMjEyRAorMDhGQkY4MDc5QkU1NTMxQjc2MTc5OUUzCitDQUM3MUNFNworOTE1QkM1REEwQTJGOURFOTEzNTFCMUQ4NkYKKzg1QzY4QzM3MjI5MEEwNjQ1QUFCNTdGOUIxNzNFMkY5OUIwRTkwQjI5MTZBRDE0OThBRUFDMTNGNkI5OTc5MEFBMDU3Mjk0RDJDMDU5MkJBMTMxRjM1RTM3ODA2ODEyRTJFQUJBMjc1OThEQUQ2QUMKKzVFRTUyMTc3Cis1NUEwQTQ2Q0E5RDFDNDhDRDUwM0NENTZFQworNUQzNjcxQzkwQzcwQUM5NUQyMEFDQTJCODE0NzI3MzZERkE1QTU3QjY3MzVCQTUyMDk0QzM1QTg5MzM1NEIzRUUyN0VEQ0UyMTE3Mjc2RDRGRkMzNTM5NTc3Q0IzODU1Q0YwRjU3NkM0QjMzMTMzMUU0MUI1NzcyQTI2MEE4MDgKKzM4Q0VGQTQ4Cis3RTYyMkVEOUI1RTE5QzYxMzVCMDZFM0RGMAorQ0EyOEQ5NjJDRkY4QzZBNERFMjdCQzQzMzAzQThFOUU3Q0JBQTgwMDJCQTY3NzA4ODY4QTA2NUNGRkREMUZDRDM4OUI5QUU5MzdGOTA1Q0RFMkNCNzREN0Q4QzZCNUUzOEVCQUZGQ0RFNUNBNzRDRDVGMzdDQUNERjk5NjczCitBQTRBRTNDNQorNkY3NDVDQ0Y2QkIxNjcyMDgzQjQ2MzFCMzMKKzY0QUZBNTRFMDAzMzBEQzNBODMzNDlEOEQ4RDhFQTM4MjNENTdEMTZEOUQzQTQ5RTA0ODhEMUE0NkVEREMzRDFFMDUwRjk3QjY4ODRCREZFMzYyQjNDMTFDQ0Q1NjVBQjE5MkYxQjQwMDVCQzhDQ0Y1NworNzAxQzU2MDgKKzg3Nzg3NTlCOUEwMTY4ODQ2QUEwNDEzNzVBCisyRjM1ODE4MDVGMUE5RjUwM0IyRjg5NUI4RDYwMjM5QjZCOTA4RTY2RjA3REM5Cis0QzAyRkM2RAorMjQ0NkQxODQ5NThFNTlCRUZDRDg1OTA3REYKK0YyODQ5RTRDRkM0RUYyNDM4N0IwNEQwOTgzNjVFMDdDQ0Q2RjI1N0I5NUJEREQxNDE4RDIzNTA1MEQwNjdECisxNTc5OEMxRgorMjQ3Q0U1NkFCMDRDQ0FFOUQzRkEwMDQwRjcKKzE4NTE3RUIyMkI2QTY4Nzc5NkQ4MDM3Qzk4NUQzNUVBMjg0QzAyRDQyQkJDMzQ0RTc1ODM1NkJDCiswOUFDQTQ2MworNjlFOEY0REExQzdDOEE5QUFFRTlEMjZCRkYKKzg0MkUwODc1ODNEMTY5QkMxNUIyMzlEOUU0RDdGOUMzM0Q2M0YwNDQ5MzIyRkZGRTg3RjJFM0FDNkZEMjJGMUJDNDY0OTM2RjUzOTlFMDBCODg1MDk0Njc2NzVBOEQ2QTI4NUMyOThCQ0JEMDQ4MzFENzY3NDEzMDIzMUU2MEY2RUQ0OTc0NDg5RUNBQUUzNzY4QjAKK0VCMzM4MDBCCis5RkQ5NDM5RTU1RDFGRTI2RDg4MzdCNTUxNgorNTBFODg5Mjg4QTA0M0Q1RTA1QTUxQjcxMjQ3RUNFODJFRkRCOTlFRDE4MUVCNTE2QUVDREVGQzE4M0NCMkU0MUU4MDAyMDZGQkQ2NDNDMkI5RUM0Mzc4RTQyNDRFOEY3MUZBN0ZCNkIxNTE1MTY3Mjg5RkFBRjNBMEVCQTcxCitFQzIxOTY4OQorQzg0NzlERjcwOUY4RkI4MEI3NTgzMjEwN0IKK0JFQ0M0RTExRUZDNUFENzBFOTc3RTU2QTM3OThGNDQzN0RFRUJFNTIwQkJDQkU3NUMzQTExN0U5MzVEMTY5NUFBMDQ4QUE5QkM4QjkzNkQ0OTRGQTc3MEIwQTU5NjdENDRERjc5OTE5OTM2RDk2NTZCMEM3NTExRDJEOUVDQkQyQUU2MkY1NUJDRkNFQTgyNEQwNzlENjk4Mzg3MENENjZEMjQ5QUEzRTU2Q0E3N0FCNUM2RAorRUNDQUFCNUQKKzA2RTJBN0ExOTE3RTUzRjlEMjQyQ0QzQjUwCisyQzgxOTBGMzE5OEVBQkIxMzlDMkM3NDA3NzgyRDlDMDlGM0Q5NzI0MDZGMjlDNDY0QzY1OUE1M0RCRUYwNjU3RDg2REU4QUE5ODM4Mzg4RDc2QjkxMzk5N0FBN0MwOEVCMjBEMzM4NkFBOTQyNDZBMzEwRgorMUFBNjg5QkEKKzdGMkNCNzUwRDRBQjk2OURENUU5QzlBNkE1CitBRTE1NEUxRjNBRkNBMjVDMkFFOTI3MEE2OEE4MkZGQTQ0RTIyQjNCOEM0QkFDRjRDOEQwRjFDM0FGNDU2RjNCOUQxMUMzN0YxNTVBRTIwQThDNTQ0NTE0MEQ4MUMxMjdFNDI5NjQzRjlCREEKKzE5MEE1MzAwCitDNzFCNzIyMTY2NUMzRjYyRjFCRDZBRTE5MDkxCisyREFDNjEyRjQzM0M1NUJBNjcyNjJBOTMyNEZBMEU3OUMzMjMwMURBRERCODFEMzRFQ0ZCNkNCQ0Y3MURDMzRDNERFQ0RFRENCM0Q3NDI4MEJFODMxQUI4ODBFNjdGRTRDMDk2MjE5MTMwNkUxREU4N0Q1MUJFMzMwNDZDMEY1ODNGOThENjdCOTc3MzQwMjg0QkQ3RUNDNUVFMzhFNzg2NzdEM0E0NjJBMEM3QkMxNjkzNzBFNjE2M0MyMDRBNkRBQUFCNjZGOEVDODM1MjBGMjJDODZCNzU0QTE5OEIyNzlEMEQ0MQorMDE1MUY5QkQKKzM3QjFBNkMwRDgxNDQ1ODNGMDQxNjQzNzU4QjcKK0IyMTBCQzRFQzRGRDhGNkFDMTREMUMyMDM2MTg5ODIxQTg5ODdGRDY4RTgwMEQxMDYxODlDNzgyQjg5MjlGMENERkMxNzg2NTJFMUNDNzZBNEYxMUE4NDA3MEVBRkJENTY0RjAyMTRBMzhENjZEQThCQ0U4QTExOTIzNUZBOEE3NTkzMEYyNTJEMzdBMkFGNEQxMjg4RjFEMDlGNTMxRjBGQUFFNDk1QzlBOEQ3N0RFQTcwNkY3MUFGREI4RDI3NjgyRTJCQjUwRjZFQzEyQTVEMkY4NTRCQUMwODc2NzE5MkVCMzg0MzM0NjUzM0QwQkYwMTJEOEVENDQyNgorNDdDOQorOTYKK0VFRTdBNjI1CitBMDI4QjY3N0NEQkE0Q0U1MTMwNDc0MUE2QworOTg0NTMzOEZCRjVGOEI5MkJFMzFDNERBQTMzNENCNzQ5MkMxRUNDNThGOUMzQTc2OUFEQkZFOEFBRjVEQ0E4MTc1MUM2RUQyOUZEQTVBNDcxQ0IwODg1Q0QwNjVFM0U3MTdGN0M0OTJEN0Q3NEQ2MkNFOTEyQzM5M0E4OEI1NDQ5MTRFNjU2QTU0MzVBMEEwRERFREI2OTk0MzdGRjcyNjlGOTA3MTIxRkVFQjcwODJDMDFCMDExQkMzMzlDQkVBMjkKK0UzQkI1MUI3CitGQzY1MDA0MTlFN0UyN0JGNTE5NDVERDAxOQorN0EyQjkxMEI2ODcyRjNDREY3Mzk5RkRGNjYxRDYyMjUyNDEwRkZEQkU5NUNBNkY5RkEzNjhFN0QzMjY5QjY0NEQ3ODRCQzhFQTBCRUNBREYxMjUyMTBBQTRCQjM2QTMzRjU0MTRBRTI0QzZBMkREQjczMEYxMjFGMTAxMzBDRTgxQjczMkQ1REZENkVFOTM2RTFFRDdBQzhBMzgzNEU4QUVEQjY0RkE1RTA4NTBCRjVENjNGMTIzQTg4MkFERTBDOUZEREI4Cis3QTY2MkEzMAorRjFFQTk4NENBQkJCRkRFNDVCMTFEMjg5NkI3MworQzE2NEMzMkQxMUZDMDlGNzE3NTNFMTMxRUVBODdCRDM2RjQ1MUU0NTJFMUYwRjU2Rjk4NDQzM0YxNDAzOUI0MzA5N0YwMEVFQ0U5NTdERDdCRjUyREM1NDE0NDBDNjY0MjM0NzQxRUMwNjZFOUQzMTk2RjI1NUM0Qjg1Q0E1RTNBQjIxRDVBREVGOUJCRUIyM0Y0NDM1MkJBRkM0M0UxRkIyOTE1NkIxOTRBNkUyREI2NEZEMDhCNTVFODI3MzZGRkNDOTRGQTlDMTBFREIyQjhCMEM5RDgyNDc1NTk0NDc4MkQ0MDBGNkUyQjEyMTBGN0FDRjM1RTVBNUFFCisxQTQ5MDIyNAorQkEzQ0QwRjNBN0JGQUQxMzQ0QUIwMUFGOUFFNQorM0YzRUM5NTkzQUZEMTJDOTYwRjRGRTVFNzVEREQ4NkIxNzc5MDU4OTFCOTUwNjRBRTZBOTE2NEZDNDlCNTIyQ0E2RTYzMDIyMDIxNkJCMDdDMjhBOTI0ODM0MkUwRDA3MDY1NTMyNUFFMkQ2ODY4QTk2RUZFMjJFMDgxMTRCQzIxNjQxMkMzQzJGNUZCNUI1OTZFOEFBQzkyMUI0MUQyQjc3RTY2NDBCMDMzNzY2NTE0QkM0M0JDNzBEMzhBQ0M5NUNDMDZCMzJBNUY1QUZENDQxCitFNkZBRkI2NworRDFFREE5NDM5OTk3RTJGRTBGQUI2NTY0QTMzNworMTQyMEVBOUUxQjUwNTI3MDc2OEEwRTk3QzY1RDI0NkMzQjYxNjNBMTdFMTU3NzcwNTgxNjZGNDQyNTNCNkY0RUJDQTY0QTlDNzQxNTY5NzkwRTc1MURGRTc1RDQxRDkxRjZGRjg0QjlCRkVGMkVGMTM3QzU5NkM1RDY0QzM4MERFQjk3NjUzMzU3MjFCRkNENEIxOUE1QThGRkJENzBBNDZENDQ5OTcyNkExRDMwMzI3MERFMEJBNThGNTY4MjAxNzFBODQ5MjdGRjU2MUU0OTY1QUZCQjlBRjZDN0RFMTdBQzg3MzdGOEM4OTk0QzcxQkE4RAorOTZFMDQwNDAKK0QxQkFCNkZBMUQ3NkYyNjE5NThEMDU5MUIwQzkKKzI3NjFCQzIwNzFGQzgxMUQ3OTNFQjg3RDY2ODEyMThCRTU3NTM0MkY5QzYxNEJBRkE2MzA2QjE2Q0Q1MDNBNkEyQjc1NEZBQjJDQTFDNUMzNTVCNDc2RjVEREVGMjUyNUI3RTJENjNEOTAxMkFGOUI0NkNENkM3RUVBN0EzOUM3QzhDQTBGMDgyMkJDQTQwRTFGREZFRTIxMzk0M0U1M0U5OUUzMkMwNjhBOTAwM0Q4NDAxRkM5MkFDODMwRTQyODQyNDhFNjRCRjNDRTgxM0M5Mzc0NkIxRkQyNEFBNDI0Nzk5N0Q0NkFBM0NFMTE2Mzk2NDQ2MDlCQTI4OAorQzZENworNEQ3NDA1RkFDMTMzRTI1OEI0QjdBMQorNDc5MkMzRDAKKzdCOEUwOUEwMkYyOTIwRkQ0QTkzMDAxNzI5Cis3ODQxQTIwQTJEQTk3ODEyOURBNzkwRDQ4QzZGNkMyRUExNjJDODI1OTVCNjQ1NzE3RTJDNjcwRjZERjU3RkYwNjMyNUIyRTQzOEQwMjc5MEQ4RTEzMTVCMUUzRTg1NjQyODVERUVFM0M0MEI3MjEwNTI1NTM0Cis4RkUzMzAwOAorRTVGMUEzMDBDNjc2QjEyMjg3OTUxMzBBNDQKK0U4OUMzOUQyMUU4NDQ1NzMzQkUzMEZEM0ZCQTA3RDlGNUExNDNCMjQwRTQ1OUNFRTI2N0IzOUQ5QUFBOEM3NTA1MTgxRjI3QTY5QkUzNTkyODZGNjBENjA1MDgzOTdDRTlGNjg3RTA5QkY0NzIwRTMzQzg5Qjg5NDE3MjU0QkRDRTU3MkQzRDVEMjdDQTQKK0JBMTE2NEMwCitCQkEzRTI3ODRDMUFEODREQjBDQTBDNjhERjNECitDRjM5QzY1MDg3OUJCNTU5QTM0OTAxRjM5Q0Y0QTVDQzQxODkxMEMzMjFEMjdBNjRCODZFOUQ0RkMyODYyNzQwOEVGMzk4RUI1Q0JFRkY5QTZFQTYzNzZDREU3M0Y0RThBNzYwMjMyRTkxRjNBOTM5OTQ4QkJBNEI4NUYyOTU3OUU5Q0EyNkUwNUM3NDRBRjA5QTFCNEQyNUU0OTIxOUJDOEQ3NzY3NDIxRjc5RjgxMzk5M0M1NzZDNTNDQUYwMkFBQjlBODA0MjdGOTBFNTk1QUVGQTRFODhGQUI2OUYKKzk0NkVEQjU3Cis4OEEwOThERDQyQjVGQjcwMzNFNzQ5NDI2RgorQTIwOUNCMUYyNTVBQTExRUYwMjY1QjFGMDU5Q0Q2RjVBMzdGQzAxNENCQzUwNDVBOTk1NTkxMkY3QjVDODQ5NzhFQUIzRDAwMjM0QjIyMEIyMTI5MTBEMjJGNjI2N0QwM0RFRjlBNzgxQjhDNEZDNzY5NkM4MEIwQjkxQTc1QUNGRDg0Q0Y5MkU5QjJBNTRFRkRGNzUxOUJCMDNDQkMyMDgyMjNERjc0REU1OTkzMzdCMDRCMzg4NgorMTQyQ0I4RjgKK0UwNUQzODE0NjNCNUFCMDJGRjIzMDAyQ0VGCitBMUNCOUVERUYxMTAzQTA2QjhEMEFBOUEwMzUzQjU3M0IzQ0U1M0NDOERGQTkyOTZGRENBMTQyRkMzOTlFNjUxOEIyQjJBMEE3MTRBMTA1QURERTFCM0E5MkFCMzQxRDc1NjE5NzcwNkExQTM1OTQ2QTU3QTEzMEVGQ0YxQjdCNjRCRjBBNTdCMURERUE5MzhCMDE4RjdBNDE0MDRDMEUwMDQxQUU4CitFMTI1OUE0QworNTgxOTIwMEQ4RThFQ0RENzYxN0E1NEI1MTI0NgorM0E4NkIxNjI5NEI2MTNCRkQxMDgyNjRBQ0YyMUJGOUFDNzgzNjhFRDE1OTc4Q0I2NjY1Q0IzRDY0MTAwOEE5NDVBMkE3OEFDOUZGRUVERTRBRjYyQjgyODk4RkI0RDY0RTI5MkYwQ0RDMUQ5RjZEQzIwRjE1ODYyRTEzN0FCNzRFQUZGRUFCNDIyQTZBMTE3MkE3NTI5RTI4N0REQzhDMEY4Q0VCNTgwNTI1QjgwQTkyNkUzNkNDOTNDRUM3MkY5RTZEOEFFNDNBMTY1RDI2MzNFOTUKKzZENzIwQzNFCis4OEMzMjVGNzYyODY0OEUzRDkzNUZBMDlEMzgzCis3NDlDRTdGQkRBRkE1N0ZBRUEzMTQyQjIwNzExMTMyQUFFQkY2QjI0QkNFMTk3QTZCNDdDOTE4OTYwMUFFNzFBRTlCNEI5NkY1ODdFRTdGN0VBOTc2RkJGOEMzRUNDQTdCRTFERUNDNEVGMDM5NUY1Nzk2QkUyNDQxQ0ZBMkM0NTA4QUI4NDMyMDRCQjRBNzM1RTJCMDg1Q0Q1REZDRjVGNEM2QzJGQ0QxRkI2NEU3ODQ0MjgyQkJDNkY1OTY1RUM5NzNCNDQ1NENENTQyREY4RkQ1MjVCRUUwNUM4NTNDNjQ0QjlENDkwM0JCQkE3NkNGNENGQkY4MDIwQkIKK0VGNzFDMkVBCis0NzVCMDEwMDI1ODVFNkQ2NTg4MTE5MjM5M0M2Cis4MkI3MzlFQkY4RjJBRjFFM0NCNDVEQkJDMkI0MERFRjhDRUJFOTQzOEVGODg3OTNENTE4QkM4MUMxMTY0ODU5NzlFRjVDQTM4OERENUY4MjUzRjQwNzdEMkYwREI0Q0Q4QTlFQzNFMTYxNEJGN0E0NkREN0EyMjk0NzY1N0EzQzdCMjU1MzIzQzEwNTc3NDg4MzUxN0I4ODE0MEY4MDFEMEJDNzM1MjVCNUMxQjI1NzY2QjA3NTA1NzMxRDMzRTk5MjlEMjhDMjYzODBENTkyNDJFNkE0QUNFRjgzQkZBQjhBODhBNTVGN0NBQjAwNDAxRjVDM0VCNUY0NEEKKzUzRTcKKzNBNjlGRAorRUNDRDQ5NzEKKzY5NDZBRDk1MDgzODkzQjlDQzQzNDY1NDMwCisxQkYyNTg5NzEzQ0EwQjk1QUM4RjI4M0UxMkQyNEVGQUNGOTE1RDY5NDhGNDkwQzY2MzgwQkFCMTQxNjgxOEVFRThEQzQ0ODQ2QjA0OUQ1RkYxOTQzNjEyNjZDOUZGQkUzQjcyOTQxNjREM0MyREFCMzY2NTA3REUzRUM5QzA3MTI1QTlCNDVFMDM2OEEzMUQ2NzhFRTc3QkIxNTU4QUUyMEEKKzBEQ0I2OTUyCisyQTIwQjkwOTFEQzFFMTRDNzAwRkRGQjdENEFFCisyREUxMjg4RkFFMkVEMjkwNjJBOEE3MTdENzI0MkVDODgxMUFGRjIxQjNDQTYwM0U5QTMwNjIxNUMwNjY1REUyMTE0MzQzNUQ3NDFCQTYxRDlDNTBEQUVFM0QzREU4MEZDRkQ0MUFDNzE0QTYwQjZCMzgyOTA2QTI0ODY2RDEyQkQxRDBFRjZBNUE1Q0Y3MjhDQkNGMjg1MTkzODZGNDY1MzFDQUJCQjI0RjEyOUZBRDIzQUMzMjlBOUEzNkZFNTlBODI5ODM5QgorMzVFOEEwNDgKKzk4ODhEOThCNjRCOEFDM0ZDNURBRjFBRUQ4CiswMUQ2MjM5Q0U2NUEyNDJDQkI3MUZGMzIzMTA4QTRFQjIwQjE1MzIzRDQ1N0EzNzMwNDJBQTI0MzhBM0Q4QjU5QjM0OUMzRjg5MTA3RDUyMkI4NkVCRDQzOEZENkVBRDlDMUREQjM1MzdCRUVBMDQ5N0UxNkIxRTEwRUNDNjA1OEMxOTg3ODYxMTc2MzNBNEVGMDNDOEE2Rjc1REI4MTgwOEI3RUVBQzQ2NTAxQUZENTMxCitBN0VBMjA2QworMDU4QTU4RjM1Q0ZCMEIzRDNGOTA4OENBODIxRgorQUI1MUI0NDQ4ODk5MUUxNUJFMTZFMTUzOURDRDIzNTdDMjg4Q0YyM0M4ODBGNzNGMUFGNjVGOTg2ODJGMDNENUE3QzYzNUVEODdBODgzOEYyNjA3NjU1RUE3NUE0MTA0RkU1NjA2NDgyQjU2QjI1RkJFNDRCQTJDREFFMDEyQ0M0RjIzOEU3MUNBMTRGMDc3QThCN0E4RDk1MzY5REMyMTE4NkJBOEVBQjA0NDBEMUFCM0IwNUNEMTZFNDVCRjFDMkNDMTQ5MkM0MzFGMkY0RkVDNkVCQ0YzNjlCOENEMEIzNTg5M0I3NEIwM0VFM0QwRUY3RDQ2NTI1QzY3Cis3QTFGCis0NTdGRTNFQkVENkIzNkU2RDAzMDU3MEMyOUMzMkEyRgorNEJBNTAwMzQKKzE4QzhFOEY0QzY3RDQyMjI4QjZEQzc4MDdBMEMKK0I1M0U0MzI5QzgxRDgyODYwNjExOEVCNjY1QjM0QzNERDUzNzRBRjc0RTU1QUY0NEY0NjI5RjdCRkJFNTUzNDcyNTk0NUMzMkUzQjQyMjM2NDMzMzY0RDI2OUZGREYyNDI4MDAyNTQyNjYzNDA5QjI3MDlEMUM3RjBDRTA0QjUzMkRCMDQyMDNFNDAyRjNFQzNCMTExOTZGN0MyOTRFN0NBM0QwRjg4OEZCMDFBMTBDRTQ5ODhCQUU0QjEyQkFDODA5MjcxQjgwMURDNkQ4QkY3NzYwNDZENDkzMUY2MkM5QkM4NEVGQkY4NzhEODg1Rjk3QkI5N0IxRjVBQworMDNFMAorNTBDQjAzRTVCM0NEN0ZDM0EwNzE3QkRBNDAxNEM3NTIzQ0EyRkIzQ0ZEQUI0NjYxODlCNEEyMzVBNUJDNkNCNUY1RDA4NjRCREMwOTE4CitBRTM1NEVFNAorRjk0M0E3ODU5QjRDQTRFNDk2OTNBRDJCNTdBMworNUFBMzNCNUI5NjBBQTBGQTFDMkVBNzM3RjFDNUM4RUNGOTNEMzRGNzU4NjA0MDI2OUM4NzEwOUY0MjEwNUIyMjU1MTdEMDg3NDMzOTI3ODAyODNDOTY5QTk3RDQ3OTc5MzEyMTVBM0Q5OEExMjU0MDQ3NjcwMjFGOTZBQTAzQzE2N0I4OEU3OUIxQTdCNTUxRkY1RTIyNjJCNzFDMDNGMTIxMzQ1ODJCNEU1RkZBMjczMjE0N0JEMzFENDQ3NzdCNTNEM0U5OTA1RUEzREI3QUE3RDNDNUFCNjgzNDA0NTk1RjhFQjUKKzM0ODg3QkUwCiswNjk3RTA4NEMxRjAzNUY4MjI4NkIwMDZBMAorMUExMDlBOENBNDQxOEY4NjQyMDMwMUJERDQ1ODE1ODkwMjIwMzg4OTg2QzIKKzc1NjAxNjMzCis2QjBDN0MyMzBEMjFFMzg2NUUzRTVBM0U3RDhBCisxMUMwMkY1OTlCNjdFMjM1RjVBNUM5NTMyOEM1QjY3QTdCRTA5NUExQUNGMTBGNDNBNDI3NDhBRUVDMTk2RjIzNTY2RUY1RTA1N0NERjY5QzlFMEY0NTQ3QkExQTU1NkY5RjcxRDNCN0RGMDk2MEIyRTJCNzdGNzA4NTk1NDYwNkJEQkQ1NTFDMzgwQ0M0M0M0OTM0MjNGMzJBRkI5MjkzQTlFREYxNjcxQzE1NkQ4MTcxRTFCODA2RDA1MEY1RTA5MzkwMjE0MUNBNTkyMjEwQTIxNzI0QjhGNkIzRTE3OEFBMTZENkE2Qjg1QjcxRjY4RDc1MjhFMkZCMjAKKzgxMEQKKzlBOEI4NgorQTNCN0I1QzAKK0FFMzZGNDFCQzFDQTI3RjgyRDg3QTg5RTVGCisyNTM0QjMyREJBMEI3OEI2RTExOTgzQTAzNUQ3QUMxN0Y3MjlFMjM0OUFGMDE3MEE0MkNDQTFEN0JBOEY1OEM0M0VBQ0VDMEJFNjQ0Qzc4Q0Q4ODM4MjAyODMzRDU3MTQ1NkYzNTE4M0RGQUU0MERBQUVFQzQxQTM1MjQ5MTFCODY3MjYzNUY2MkRGMjJDMUZEN0E0NjQ4Qjg4OUI2ODg4QTg3RjY2NkUwRjdDRDAzOAorRjlEN0RCODMKKzMyQjczM0FEOUZFMjA5REI1MkQwNDZEMEM4CitCQkU4Qjc3QTkyRUZBMTJDNzA0MEI1MzEyNkM4NkI1RDc1MEMzREFCNzMwQzEyOTQ4RjlFNjk0REQ5QzUyMjdENTVBOUQ5MzdFQjVGNTlFOTc4ODAxN0Q3MzZBNUIyOENDNDFGNDMyNEJBNTBDMENFQTgxRTc0MDQxQzg4MkIxNEZGNzBBOTBCQzUxQ0NGMzFGRjk1QzNFNUYyMDlFRjRCNzdCMAorQTY2REUxNDUKKzRCREZGQzM3OTdCNUM4MzNDMzNGRjEyMTE0NEMKKzMwMzhEM0I0NEY2NzNCQTZFMDIxNEI3REE4MENCMDQ1MzE5MEJFOUNERUQ1REY1MkE1OUFGNTI0N0I2OUUyNDhFNzU2RTQ3MTUzRERFMEUzRTgwODk4ODM0NDIzNEEwOEVGNTkwM0QyN0E5MDMwMUZENEZDMTlFNTNBNzBDMDRGQUI4NDAyMjFCNUMzRENEOEYyRTA4MDgwNjY1Q0E1QkFGRTVFMEJFMjRGMEU4NTA1OUU3MTExQjYzOThDN0ZEQUY3RjlCNDIxMkZEQjI2MkVENkI3QUVGRDMxQUQKKzE1QzMyOERGCitCODRCOTFBMEIyMEM0NEE1NkNCM0Y3Q0VDMQorQjM4RTU2REFBMTVCRjYyMTk5MDkwNkZFMEQzQ0U0MkU5NDY5QTdDMzk5RUE4MzM1M0RFMEZFOTVENjAzRTRCOTA5QkUzN0IzRjAwMTA1NUJERTA1MDk3QTQwRDc1MEVBMTIyMjU2NUFCMjhGMjBDREJEM0VGMTk0ODM2Nzc4QTMwNDZCRTQwMkNCOEJDQkE5NTczMTJFQzZENkQyNjIzQzMxNjc3QzM0NjhBMDFCMzhCRQorNkI2REFDOTAKKzdBOUMxNTNENkRENjk0MDE0QjRBMUUwOUQ0Cis2NzEzNTNFQTdFMUU2MDg2OTExREI4NUU0RjY2ODY0RTc4QjE0NUY5RDZERDJBNDk4QTBEMzY4MTY2MDY0QjMxOTNCNkFBQ0UzNDc5NTYzQkEyQjY0RjA1MzVDM0Y1ODI4NDJERkMzRTA4M0I2MTc4MzYwRDdGQzNDQkUyMkUxOEIzNEZGNEFDRUJBQkM3RTEyNUFCNjc3N0EzQUI5RUQxMTc1MkEyQzg0NDEyODgwMzU1MENDMzFFCitBM0ZDNEVBNAorNDc0QjcyNzg3NjQzMjE5OUY3RTNDMjc2RTNBNQorMTE3MzUwRThFMzhFOTEwQTI3OUU1MjU5MDBCM0U3RDMyRDA5MjJGMzBDNTFDNzc4MEE1RDk3RTFDREY5NTVERjZGMTExRUY1NTJBOTA5MjdBQjVBNjUwRkY5MjgwM0ZBOEJDMkYwMzMzNDlGRjY0Q0M1QTE0MDEzQ0YyRjNFNEIxM0UzNkRGNjIxOEVFOUZERTg1QjBGREVEQzNGODEwMEI5RUFBRjY5QzJBOEVDNUIwMUQ1OEEwODIwNjg1REE0NjMxNDFGNTc1NzgyN0ZGRkQzQ0NDOTJFMDcyQzc4QjdCOEE4REQ0RDBFMjgxRTE2NkRCNjZGREFBNTYzCitGQkI3CiszNkQxOERFRjVGMDczRTRGM0ZDNjhBRUE5ODRFQTAxQjkwNDExOUNGNkE1RDgzQ0M3RjA1RUIyMkYzMjdEQURDOTA4NTdEQTE2NkMxOTM1QjgyQ0Q2QzA5OENDRDlECitERUMzRUZEQgorQkE0RUVERjBCQ0M5ODQ2MDIyMkNCRjM5RDJDMworOTU2OTIzQzk3NjA2NDFERjExRTczMTU5QjMwNjM0RDYwQjc0M0IzNzVBQ0RCOUIyNTUxMkQ3NzE3RDZDMkE1RTBFMTQ0Mzg4MDk1MkRFNzZCQzg3RUU3RTlEQjYzNjQ1NTAxMEU3RTUxNjc0OUQxMzIyMDVFN0MxNzRCM0RDRkIxODYwQkFDRkI4RjZCNzc0MTU1ODM0QUYyQTE3OEM1MjBEMkY5MTVFMDJDM0Y3RUNFNkREQjUwM0RCNjFDMzk1MTc3NzhGOEU2Mzg5QTVCQTA2NkNFNTA0NTYKKzIxQjU1M0E5CitDRTM3ODYzQjY5NDJENjI5OUMyOUREQURBNAorMTNFRTM1ODlFNTQ2NkJFRDQwRTk1MDg0OTNEREY5RDc3QTNBMTUzRDdFNUE1OUQ1QzRCMzhBRUFBOTJBNjJDNUE3NDcyREJFMDYxNTA2MTM3QzcxOUEwMDA1QUFBMzFFNDk3RDA1RDEwQUQwQ0I2QUQ3MjZGQjhCQUNBMTVGOUM2QTIwREZCMzAxOTFENTk1NzJCRjA4NTE3RjhGNzExNAorRDAzQkRENUMKK0QzMTlBOEEzRUIyNTI2M0ZFQjEwNEE4N0FCNEMKK0VENEE4NDg5ODEzQkUxOTREQjk2QTlCOTA4QTAxOTFENEYzOTgyRUY4OUZCNDc3RDM1OTMxOTVDREFEMDk1MUU0RDJGODk0Q0I3NDk0MDE5NDRDMkUyNjBCQUNEQjI0OEY3NkQ1RTUyNUJCQkVCQjdEMjNCNTlFRUQ5QTcyNzMyMjc2NDhFQUE5MzczODIyNjcwQjNCQUEyQkEyNkUxNDhGODExM0UyNEE3MTNGRTY0QkVBMDA3OEU2RTU0NzVFRDQwMzE1QjQxQzVEODQ3Q0ZDMkFDODhDNjY1Q0Q2NEQ1RjhGNzdFM0ZEMjI3RkJGRDEzRjA4NjIyM0U5NAorOTM1MAorQTJGM0JGNUE0ODc4RUM2NzVCOUNDQzM2QTBCQ0RBREY2MzM3QjBGRjQ5RTJEMUNCNEIyMUE3MDU5REI0RjU2OEM3OThERQorN0IxMjA4MzkKKzJEQTRFNzJBOUYzRjkwMDQ0QTRGNzNDRjA2Cis2QzJCOUM1RDYyQkMxMjdBNjhDQThDMTMzMDIxNjk2OEE2MkJDNUJEMkRCRTIyMTA2RDIyOTc3NzkyMTNEQzI5N0IyNjA2MzlGQzY2QTNERTUzQ0JBMUJGN0MxOUNFNjBGRTFBMDc3MzA1QzMKKzAzMTUxQTUwCis0RTNEMzU5OTQwODFDQzJBOEM5ODAwQzFBNTlDCitFRjRDODc3MDQ3OTk5Njg3RTg3MDM0QjgyMzU4QzVDMjNGOURFMDc0NEMzRTAxMzI4QjMyM0ZFMkI3OEVFNjRFMkY5NDNFMkEzMzM1MkE3RjgxQ0E4MUNGNDdBNTExREZCMDZCRDIyRjAyNzIzQzUzQzRFNzU3RkMzNkE4MjRBMDhEOTBFREJDOENGRDNDNTY0QkU3RTJGMTg4NzdGRTFEN0JGQkM0MDRFRjRCQUJFNzk5MzQ4NzU2NjQwREU3QTRBMkQxNzBBRjk2QUQyQTQ0Mzc3ODJBRjlCRUYxRkIwNDZDMDA0NzlGNkY3Nzg4NDI3MEE3MEVFMjY4NkQKK0M3OTcKK0I0MUI4ODk4MjZDMkEyMTg1QTI0MEJENjYyODBGMTkwMTg5MTAzODY5Mzk5NTAzMzZFMzMxN0Q1RTc4NjhCCis1QzEyRjFGNgorMkNFNjkxMTNGQ0VDQ0I1N0YyNzJDM0U5M0RENworM0I2OTYzQUI1OTc4QzZGMUJEQUVFQzNDMzBFRkY1OEE0MkE2NDlBRjBFMjYxQkNFNThGNDI5OEMxOTU5RkQ4ODI4NjZFM0JGOTQxNUQ4MDRGODBCNzA4Nzk4NzIwODNFQjIxQTE2OEJGM0NCQjhDRjU3QjdCRDk0QTA1ODgyRDE1ODc0NkVBRkI1MzI2Q0FCMkQ2NEVEMDE1OTIwRkE3RjhDMjhBNjk4RjM3QUE1MEUzNkQ4QUM4NDU1RjNFNTEyMjlGMDMxNEMyOEU0NTAxNzRERDY4MjE4Cis3NjM1QkE3NAorQTUyRkY5MzY0NDAwRjQ0QzgyREQ3ODIzRkMKKzEwQ0M3NzI0MkRCOTYzOTZBQjY4Qzg1NzA3RjYwRjlGNjBCQzgyMDQ0Qzc2MDIyMUU1QjIyQzQxRkFGMTZDNTc5NzFENEU3NTVCMjU4QjU2MDlFRDU1MjQ1MDZBMTY3OUNFRkI5OTdENTZDOEJGRTI5RjMyRUYwRDBBNjg4NUQ5NjkzODc5NDU1NzhCCis1Qzc4NTFENgorNjZFNzBERDlBRkJCQjM4MjkxMEIzNUNBRDczNgorMzJGOEVFOTc5M0I5MjZEMkI5NDMxN0MxQjlBRUJGQzQwQkRBMDQ2NzcyQzY5NjlEMEZBRjE1MzU2MEZDNDk4NEI4NjJERDRFM0Y2NUFFMDMwRTlFOUY0RTgyNTBDMEIyOTU4MzIzNTlFODQ0RTk1RTc5NDZCRkMzNjcyNUU4RTE3Q0MyODEyRTU4QkZGMjczRjdGMjAzM0M4QTM5OEU4Q0E0QkM4NjgzMUE4N0Y2RDc3N0E2RTc1OEFDQTZEQzkwNjRFOTExNDc2MzgwRjkxNDkwMzUwMDk1RkJEMDJGMUI3OTM5Q0I1RDRFNUM0QgorM0U1NTMzMjgKKzc2QkZEOUZEQUZFMzMxOEI0NEI2RjhBRDg2MzUKKzA5NThBOUU3QzA4QzJDMUZGREE5MjY2MTE1NDQxNkQ0QTJDMkE0NDlFQzc0RTJCREQyNEQ1N0FBRjA4RDdBMzg0QzM1QjNCNTVDODZEOTc1QjBGMTA3QUY2QzA4RThCRUM4OEI0MDZFMkE1NzU0Mzg1QkM2RTJEQkQxOUU4MDY0NzMyNDNCNzM0NzVEMERFNzA5N0NCMkI3Q0E3QzE4RUE1QzZGNTMzMkNBNTREMUExOEYyNDZGM0I3NUU1QUFENUE3QTU1NUE5MUM2NUQ3MDdDMkFBCis1OTZBNkUwMworM0Q4MkFBRDkzRTkwNzgxQjQ0NzBDOTJENzIKKzM2Q0QxRDE5MzY3NkM3RTdFRjM4RkFBMjdFNzIwNTUyRjYxNEFENTY4MjBCOTY5NkUxOUFCRTVBMTM3M0NFQzUyODk4ODExMzA2NjFCQjlFM0EyNDczQzM1MjBGRTBGNDk2NTg3MTQ0RkZDQjNBNzk0QjlERUEzQTA2MzZCQjgxOTM5RjFBNjdGRjJDNzRCQUEwNzVCRDcyNjQ3NDQ5ODIyQTc0MkE4MjFDNUM1MAorMzgwNEVDQ0QKKzgwMDBENzgxNTM3RkNGREU3NDI2ODNEQ0VBOTAKK0FDMzgzRTQ0RTI3QTIzQjFEQTZDQTdDQzYwODE0NzkxMUY0MDNGNDJEQTI4NjA0NkYxMUNBM0FFQjVBMkI5REI1OEQxRjQ3NjA1OUQ0MTVERjQ1NjA1MTRCMDlGMDRFRDY0NzFBNUM0NUY5RkNGNDE2NDFGNERDNDhBOEUzMjYwMzI5ODMyMkIzQzI5MEVFRUREQzJCOTNDOTZEMjA1MzE2MjQwRTkwNTk1RTA5RTdERDcwRDI2MjhFM0FBOTNBQkE5NDIzMDIwOEExRjZEODdFQjMzOEUxQkQyMkZGQzdFQThCODE5M0Y2RDRBQ0M1QTE1NTVBNkMwCis3NEZDQkNCNAorRDJFQjFFRUVFRTIxNkI2NzdCODRFOUZCM0MKKzM5RURENjRERjI3NjE1QzBBMUU5RUQ4NDM3RDU1QTVDMUEzNjRBMzhCNEFEMjY4RkVCQUE3MDc4MDU2ODgwQ0JEODk5RjU1OEVDMDU0MTRCOTQ3MzZDQUNDNTI0OUM0RjAxRTg0QkNBQzY5NDEwNTNCNjFENkE3OEM0NzJBRDJDM0FGN0EyMEFERgorNTRFMkRGOTMKKzczQjJCMDE4QjkxODcyOEZBRjJGOTY3QkNCCis5NzA0NkVBMzU3NDVDMDY1ODdBQTY5Njk1RTdFMjc3MkE2MEI0Qzc2RDFEMTEzQkFCMTVDRUFGRDIxNjRGNUM4N0UxMTgxMUM4RTNGODk1QzkzMTIwQzA5MDkxRkI0MjhERDQ5RDg5QzI2NEI2NEVCRUZFMjFEMzkxOUQ4NjkwQ0E2RTc0RTI4QjE0M0UyNDZFQTJBREUzNjMzM0Y4NUJBREUyRTY5MzcyMERDQkZDRTNGQzVFRDJDMTM2M0NFMDBGRjgxCitFMTgzNjM3NQorMjY1M0E2QzRDNkE3MkNFQTI0RTMzNzA3RTAKKzY4MDcwQjFGODUxQjk1Qzg1RTVDMkE0ODFEMTFEQkFDRTY0RjM0ODMyNzY3NUExMzM3MjM5OTVERjU3RkM3RDA5OTAzMDExNTE5NTgwNEVCMjgxMjVBMzVENjU0MENDMEM0OTU2MTdGQTQ3NjY5QjAxQTQ0MEFDRjUzNjlDMDlEQ0Y0ODUyMUNEMDIzQzgwRTUyNEEwN0QxMUQ3OTk2Njk5QzE3OEU4MzlGM0EyMTFENEUKK0JERDI0QjAyCitERkZCMTU5OTE3MEUwNUFBNjJFMzY0OEJCRDFFCitCRjM2OUU3NkVGODBCNjYwRkZEQjBCQzY5QzZENzY2MDREQUI2NzQ4NkFCNjc2RTA3Mjc3RjYxRjRCNDJCRDYxRkE0ODcyMEU4Qjg5NjA3QzAxRjM4QUQ3MzhBODY5MDI4Q0I0ODIxRUVEQkRDQzAzRDIxRkM3RTFDNkQwRTlFRjQ5NDhCRDExNkY2NkRFNDgzMzgxMzYxQjA1Q0JCRjIzRTcxRjc3Nzc0NUU4RTE0RjFDMDI1Qjc2NUE0QjM3OUEzRTE5MjkzQkZGRjU0NUVEODJCMzE4MEU5MzVEREQxOTFCREE5MEY1MUQwNTAzNDgyQjc2QTZENURCQkUKKzZCQjIKKzk2RDIwNTQ3QjdCNkMyNTgzOTRDNkU0NEVFNzkKK0MwNEU2NkQ0CitERjE3QjE1N0MxRDAxRTk2NDM3M0RDQzM2QkNECis3M0QxNjM3QThGRTQzQUFEQTkzMEE4N0MxNzNCOTE2NEJEODcwODI3NkU4NzYyMzI2NUM2RkVENjFBQThDQTI3QTJGQTk4QkUzNDQ0NTc5MkIxQTVENkQ4RUQ2QTM4MkIxMTdDQTE4QzQyQTBGMTUyMzhGQUY4QjA5NUJEMEQyQUVDOTI3RDE4NzEzOTFGMEYyOEY2QzAxODI2OUFDNDMzQ0VEODQzREU3MjI0MENDOUEzQ0VBQjkyOTYyMDY5RTI1M0ZGNTNDNDY2QjFERkYwMDdDMTBDMUQwNDVCOUM2QjQxM0M5QTM5MzU3OEE0QUQxMTQ5RERENzM3NjUKKzc1NkMKKzVGRTM0OEY3REQ3QThFQUIyMzgxREIyREIyNzc4MEQ2NjFFNEFCMjUzNEQ4Q0M2MzVCCisyQTU3NjRBNAorOTA2QTUyQzJDQzFDNEM4ODFDQTVCNUE0ODA1OQorMjg5MDdGREYzNTc3MTM4MUI1RTE5NjgwMjIwOTFFRUZCODZFNzIxMEEwQzU5QkVFMzA2MUI3RDE2QUU5MjUwNzNDRjAxNzdCMDBCOUIxNTM3QzlCRjY5RENDMEFBMDkyNkU2OEQ5Q0RGOTdCN0FCRjA1RTczNTMzRUFDRjQ4NTQ1REJBNTI2OUI2OTY1MUU4QjU5MkM4MzdBMTQwQTY4MTYwRURCODdBMUUxRjA5RkFFQjJENTcyNjMyMTYyQ0Y0NjZCMTI5MUMyRTY3NTNERTBENkIyMjQ3REJFOTIzOEU4NDIxNDBDOUIyMDUxODFCMkMzNThGQTkyQTFCCiszRTE5CitBRkMzNjlCMgorMkFDNUJEOThGMDJBMDI3MkQ4OTJGRDQ3ODEKK0JEQ0M0RURFQzI0Qjk2NkM3MEQxMENEMUEzQjZGNUI1NENDMjUzODI3NUE0OEFENEM2MkMzMzNCRkE3MDVGQzVFMjZDQjgwQTgzNTFDMEI4MDk2MEE5QkNGQjk3OTFBMTUyQTgxQTY2OUUwODNEMTc3N0JFNjZDOTY5MzdFMAorQTI4NTM0NzgKKzk0MzFBMzQ3NUQ1ODI3QUQzOTVEMTg2OTI1OTcKKzExNjNCMzU0NUVFQTZGM0NFQThGRkVCNkRBNzkyNThFNzZBQkRENjc3NjFGMjY1QjY0NDMxRkJBMUY1MkUxRjBCMTA0M0Q1NzBCMERDNkQwRTgxNDAxQ0EzREI5OTY0NzU1MjIxNTk4RTE3M0IyOEZCRkE0REVFRUJEMjJCMDlGNUI3MEI2MjIxMjIyNzFEODYzMkY2QUY5ODQ3Q0UzRjE2RkI5RUU5NDRCQ0I1MUY3NjREMjBBNjhFQURGQjg0MDg2QjlBNDFENTk5MzY0QTk2RQorQzlGRTY4NUEKK0VDMkE3QUQwREZBODhFMUU5NTZFNzc5QTA5CitGMkVFN0Y2NjJBNUIxNTQ1MTQ2OTM0NjdGNjdENkE5MzI2MUM4REYwMDBBNworRUZDRUUwQUYKK0ZBNDZGMzU3QkNBRDU3QTY3OUNGNkY1QUU0QzQKKzVENjAyN0E1MjJBQjczOUIKKzMwQzRFNEI2Cis1ODczMjI3M0JGQjM4ODhDMUNBM0E3MTEzN0M2MTNBNUMyQTNCMjNGMkUyQUVCRDZFMUVCOTE1RThCNDVFQzMyREFBNQorNzRDQkUxRDI3MzIwNUJBRkVEMUE0ODQ0RThDMzQxRTE4NDEyQUE3OEM1M0NEMUI2MTA1MzlGRjcxNzgwMjExMjExQTVFNTgwNzUwNworMDUyMUYzMkVGM0RCRUFENzE1RDlEOUQ4OTNBMjIyRjQ1OUI4ODdGRDk1OTY2QUZGRDdCQTdGCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ1IHB1dAorZHVwIDMgL0MwMDQ3IHB1dAorZHVwIDQgL0MwMDU4IHB1dAorZHVwIDUgL0MwMDY3IHB1dAorZHVwIDYgL0MwMDY4IHB1dAorZHVwIDcgL0MwMDY5IHB1dAorZHVwIDggL0MwMDcyIHB1dAorZHVwIDkgL0MwMDczIHB1dAorZHVwIDEwIC9DMDA3OCBwdXQKK2R1cCAxMSAvQzAwNzkgcHV0CitkdXAgMTIgL0MwMDgwIHB1dAorZHVwIDEzIC9DMDA4MyBwdXQKK2R1cCAxNCAvQzAwODQgcHV0CitkdXAgMTUgL0MwMDg1IHB1dAorZHVwIDE2IC9DMDA4OCBwdXQKK2R1cCAxNyAvQzAwOTcgcHV0CitkdXAgMTggL0MwMDk5IHB1dAorZHVwIDE5IC9DMDEwMSBwdXQKK2R1cCAyMCAvQzAxMDIgcHV0CitkdXAgMjEgL0MwMTAzIHB1dAorZHVwIDIyIC9DMDEwNCBwdXQKK2R1cCAyMyAvQzAxMDggcHV0CitkdXAgMjQgL0MwMTA5IHB1dAorZHVwIDI1IC9DMDExMCBwdXQKK2R1cCAyNiAvQzAxMTEgcHV0CitkdXAgMjcgL0MwMTEyIHB1dAorZHVwIDI4IC9DMDExNCBwdXQKK2R1cCAyOSAvQzAxMTUgcHV0CitkdXAgMzAgL0MwMTE2IHB1dAorZHVwIDMxIC9DMDExOSBwdXQKK2R1cCAzMiAvQzAxMjEgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE4IC0yMDkgNzk4IDY5NF0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI3NEU4MzM4NjM0NTA0MTFFOTE1OENFNjYwRTNBN0Y3RUY3NworMUQ3MjY2MEJBOTc2NzAwNTM1MTYxQTcxCis0RjA3MDM4OEQzQjVGRjI0QjQKK0M2NDRFOEE4CitEODFGOTc3OTAwOTJGREJBRDYzNTlDMjcwMQorNTFBNTUxOTFERjU3RjE2QUExM0Q5MkUwRTZFNjA3N0I2OTdERjg2QkQ5OUFEQgorNjRBQjA5REYKK0NGRkIyOEU5NTAxRTg2MDUzRjNGQjE5MjY2CisxRDJERDI5RThCRUQwMzI1NDBCRjg4MzZEMzUxQzM5MjM5QjY5QzJEMkZFNDg1MjM0MkNECisyNDQ1QzQ1OAorMTc1NjAwMjYyRTZFODUxQUMxOUE4MUJEQjAKKzgyRkE1MTM0MTAwMjJFMTIzNkEyQUQyNEI2NjkwMDdFRDU3RDc3OThGRDY5QUQ3NUQxOUI4QUUzODdDRkI4MDczMTFDNURFOTNDNzdDNTM0NjEzRUIwN0Q3MDRCQThEQTk0ODAyM0NBNTU3NworNDcxOUM0MTYKKzM3MjNGQjFGNTQ3N0ZEODY0NEZCOUMwNTYwNDUKK0EwMzY5RkY3Mjg2N0NEMzUxQTQ4RjMzQzMzNkFGMDZERDYxMTkyQTNEQ0VFMzI4OTNEODYzRjU1NjZCQTU5ODYxRTBFNzcwRkNBMjNBOTJCMkNDRDE0NUExODk2OTNGRTBGNTVDMjM2RTUxMzE3OEZENDQxMzZGNkQyODI3QzU5OTA3NzJBMEYxRjdCRkJFM0U1RTA5MzI3ODRGMjBGNzMyMzg2MDBEMDk1OEM4MTY0NjBGRDBDMTYwOUZDMjRBQzc0MzAxQ0I4NDQ2MDYwQzQKKzMwMzdEQzNECitGQjVGOEE2MURDNzEwQzNCMkE4QjMxOEU4RAorMzI5NkNGRDYwNDhCNUQ4MzE5ODQzMTY1NDE0RTNERjg5QjkwNTlCRTYyNzg2QjA0NzJGQjg3QTExNERCREY4NUY5ODVEMDdCMzA3MTk5MDZEOTFGMEY0MDQ1MzFCNkY1OEY4RTlGQTI0OUVENUQzQzE4NEM0REIzMkY2RUEzQjZEMUE0MzA0MEE4MTkzMDVGNTYzMzc4ODdDNEU3OEJFNjQyN0FEOTQyMUYzMjMzCis0MkE1MEVBRgorNEQ1Njc1NzY0NUJGMTY4QTk0NTdENDJDOEIzOAorMDZGQTA2MThBNDIwQkFGNEE1M0Q2OTk4MjVERjMyNjM1OURGOUZERjY3QzQ4RjA0RTFGNThBNjZEMzY1ODc1QUFDNDMwNEE2MzFFNTU2NzJFQzcyMTREQUVDOUY0MDlFODQ3RUYyQUMzQ0IxMTFGOEZDRTE4MDVCQjc1MDA1OTU4MjJFNUFEQUZCOUYwREQ2NDREOTMxN0IxNDZEQUY4RDU4QjdDOUE4MDI0OUE2Njk3NUFGREMwNkNCQkRGREJBNzQ4OEM5RkZCMTNDN0NGODFERjY4ODdBMjZERgorREI1NTg1MEEKK0I5QUY4NkIzM0JENjgwQkNEMkM4RTVEQUVEQkQKKzA4RURCQ0JDOTI2QjZBODYxMTlENTU1NDM0QzVCMzA2N0ZEMzU2OTQ3MDU1OTdCNjUwNjhERjRDNzcwQThGNDYyOUI2NkVEMzVEMUFGMDQ5RENGNURDQzJBMTUwM0EyNDQ4MzExNTI3NjhFMUIyNzExRTdBMDExMjAyRTlEQzM1NTJFMTY4OEIyMUMzMjkxREI3MTQ5NEU4MEFCNEQ2RDRDOThGQ0Q5MTRDRkVERjY3QjQxQTE2QkQwQzkyQkY2QzI2MTRDOTk1REQzM0I0RjA0MEVEMTEyNzVBMUVDMjg2NUNGRjJBNTkzNjA0OTMKK0QzMUUxMTE2Cis5ODI1ODA1RTk4MUExOEI3MDU3NjREMDAyMAorM0MyMUYxRDBDNTYzNUFCQzBCOEQ2OENGMEFEOUM1MjZDOThDNEQ1NjRFMDBEOUIxRTEwMEYzNDYxNTA4NjgwRkREQzI4NTRGQkUxQkMzMzNCNEI2NTc1NjEyMDAzNEY0NDkyRkJEOUNFNDEzODY3RjU4MjJGQTRDNjkxQgorMDE4OEFFNTUKKzkyNTVCNTU2MTU5NENGMjk4NURGRkQ1RUJFCitFRjgzRDY5NjZENEU1QjlCN0FGRjFBQkQ2MDk5RUI2ODBEQzNFQzZCN0YzNjJGRTRCRDc4Mjg0NzAyRTEyNEIxNzBCNUI2OENBNThCMEI1Mjc5Qzg1MEJGQUVEQkFFRUU1NjRCRDMwMjIwN0YwQjlGMDA0QjcwRTlCRTMwQTlEMDdFNTNFQkU3OTExREU2Q0E0OEVEMkIzQjIyMzI1MEExOENBMTZFN0EyMDk0NUZENUE0M0U5REQ5QUU2NDJBCis0ODg4NDE2NQorNDkxM0MzNDMxNEIxMkNGOUE3QzAyOUE3MUExQgorRjIxMzAxNjYyRkYwODFDRDkxNDA5MzE2ODk1NjU3QzJFQUJEMEYxOTc2OEIwMEM4QkU3MzI1N0FGRTMzN0E3ODI0QjlCMUVBMjczREMwODNBQjc2QTdFNDZEQTEyODc1ODc4NEE1RUVENEZBREE2MDU5MDE4NDM4RTAyQzZGRTFGNUZENzRCQTlENkZEOTkzMUYwNDQ2MUQ5OTZDN0RDQTIwRTkxNzEzN0JBMTI3NjZFQ0Q2MDM3MzMxNUJDMDM2MEFENTNENTY1Qzg1M0Q2N0Y3CitDNDIyMzA5RAorMEUzREE5MjQ4Q0U2RDBCRjUyMjNBQjkwRUU1NworQkMxNzE5MUVEREY5NENCMUVDNTQ4RDY2REU0RkZFMkI5RDlFQjdGNkJEMkZDMEEzMzgwNDVDQkU4QjZCQzMyN0Y3NzA0Mjc5N0U5MTMxODI2OUNDQ0NBQkM2MkFCNUI1OTVBQkMyNjA1QzM4ODk2QjZBRDI0NjEzMzU0OEMzNDc3MTcyNzJDNDc4NEE2NUY3RUNEQ0QxQzUwOTlBQzNBQkVENzI3QTRBODY3QjMzMTg0MzRDRTBBM0FGNjk4RDQzNUU3MDYxNjkKKzY1MzdFMjI0Cis5ODgzOThCNURGNzJEOEU0MTEwNjk4M0E3Q0ZECisxOUI5REI2NTBCRkQxMjI2REMyMjE3ODk5MUFFMEFCQjJBRTAzODkxNDkxMTI0RDExRkZFNDZBRjg3REY5QTc5NjA3NkQ4RTM1QTU1NDZFQzI3NkYxMjM0QjBDMzE3Mzc1NDgxRDEzNzVGQjExODE3OUM4MzM4NzM4MjY0MDQxOTVCQTBGNTc5RjEyMDc3QzY3RDExQjdBQUI3Qjc5RDc4OTlBNjlERTcwNjg0MUIyQjg5NzlCOUZFQjdDNDE3MzA3NTg0RUVEQjY0NEFDN0EwQTdCN0NFMjIzMjMzRTM2QkM4RTMwNEY2REE3MjgxOUJDNUE1QTBEQkQzRDEKK0YxMEUKK0NEN0EwM0YyCis1NEM4NzIyRjMwNTdCNDJBRUNDODk2QzlFNQorMEE4NUMxRTZCMDI1MzkwNTkwQTc1NDI2NzZDNDg3MkM3OTJBMTY1RUJFNzMwNTkzMzU4MDY5ODRBOTA2OTJCODlFNjg1RjUyMjZEQjZFRTYxQzlENzU5NTY4NTlBRDA2RjBGOENBNEE1M0Y1OTI5NDg0QUY1RDk5RjY1NDdBRTFBQTdENTAxODc0QjkxMzZDQUIKKzgzNUYzNUZECiswRDJFMUE1N0YyNzhCQ0JCRDFFNDIxMkJDQjExCis1MzQ1RDQzMzQ3NUMyRjg0OUE4OUIyQUZFNDZCMzI1QkVEQzY0MzJBODZCMzk2NURDM0NGODAyRTgzOEZBODEyNERDQUQwQ0UyODhDMTVGODZEOURCNDg0MEEwRURGNDlGMjY1RDY4NkM4NTJFMDExRUMyNDI3N0MxQUYwRTI1RjhGREZBRTBEMjkyREM4M0FCMDE4QjFDMTU0Nzg0NzczMzFDMDMyNDIxRDI1QjAzREJENjg2RTgwMDE1ODFBNkRCRUE4NUM5ODc4RjAzMworRjZGRTk3MDAKKzUwNkQwMDJFQUIxQzZDMjYxN0Q0NjJGRTVCMjQKKzkxNkZGRUU5QURBQjI5MzNFQTY5MjFDQTE1MkJERTE4QTZDNUMyOUJGNEM0MkNDQUE4NTEwQ0MxMzM2NkVGNUUwNUFGOENERTgyMUExODJGMEEzNTcwNjkxRkEwMUY3NEZGRTc2RjA1MjhERDMwOTY5REVCNjhCQjg2OTMxQTBBODBCMjQ3RTEyODUxOTI2NUM0MjZDOUI5RTQ2QjZERUVCQzQ4OEM5N0E1QUVGNUFEQjlCMzM3MkQyODRBQTkwNTM3REE2NzRBMjMyMDA1NkRDMjAxNkM0RUEyRjNFMTUzOTMxMDNDNTJBOUIzMThEOTUwRkU4QUZDNUNBMgorRkM4NworN0E3NDkzMTEyMUY2NENCMEZEQzVDMDU3NDg1REI5MTJCQjdCQTdDMjc2NjVCNEMyREJFMDYzNTgzNDdERTM1MDc0QUI1RgorMDc3RTRFREMKKzc4REEwMzcwMUUzQ0QzQzExRDE5NThCQzUxRTIKKzVGREVERTYwNTIwQjdFQzhBMzc5NzAyRUVBMDAyOTEzMzY0QTE3Rjg4NDNBRkM2NzIxNzJFNkRGMjUzOTk5ODIxREM4RTA0MkIzNzFGOUFFNTgyNjBBQTgxNENDMDIwRDlDMDA5OEQwNjdDNThFMjE4NUJBNTZGQUQwNTcwMTYwNzg3ODQyMEMzNTQzQTI2OEE1NTM1MTI4QkE3ODMzMjI2NkRBODFBNUE3QUIzQzI3OTEwNUI2MDlGRDVGNjU1NDA5RTI3NTY5MTlCNjE1RUJGQTM4OTI4NTU4RTJFOTU1QzRDRERBRkFGMDFGNjdCMzAzRjQ2MjMyREY5RAorMUVFMgorNUY3M0RFODQKK0Q5MThEM0ZFCis0Mjc0RkNENjIzRjJBNDczQTM1N0YxMjQ0QworNkI1RTQyMzgzNUQ1NDg2RjZFN0Q5QUNFQUQ2OTg4MTc2NjZBRTgwODdFNDAwMTMxRDQxMDQ3MzA1MTI4NDhGNUVEQkE1RkNCM0M5M0QzREYzQTEyNzI4ODBEOTFGREE3OTlEQjc5MDZFQ0ZBMUZCODVFQjU4M0M1RTExN0FENjJGRjVBNDAyMkRFQjEzQzI4RTQ4QjJGM0Y1ODQ0MDdDMTkwNjkKK0VGOURBMTdCCis3QkJFODkwMEMxMDZEMDg4MzNCOEU1RTJCQworRUY4MjgyQUMxMzdGQzY4RTA3RkQ1NTZGM0M0ODFCQkYwMUQwNjU0ODgwMERCRUFEMDkzQTVBOTQyRDJEMUNEOEIxRDhFNjk5OUY3OUYxOUUxRjY4REZCODk5REE0NjEwNzQ2RDhEQjhGM0E3NjQyQ0QwRkEyODlGMUU0MzA3QTYxMjg3QUQwRkIwQTQ0NTdDNDJCMDBFMUM4Nzc1QTlFNzlBQjJCODE3REVFOTg5QTAzMDM2M0E0OQorM0E2M0Y3RDMKK0E5REJGNkY5NEM2MTQ1RkJCRUM3QzY4MDc3CitBRUY1Qjk5NEMzQTJFQjVGNTYyQ0M1QTI2NTg3RUEyNTVFMEVCRDYwRDYwQUY5NDMwMTE2RDdDQjE3QzI5NTg0RDJCOTJGN0Y4NThCRDBGQkNBMjUyQTU0NjYzQTg4OTFCQjZEMDUyOThDQzU5OTQ4NTEyQkNGMjhEOTA1MUEwMjFBNTNDRUM1QjkwNDlGQjg0OENGQzcyMDk2OEEyRUFBRERBRTFERkZDRjMwREYxOTc3MjczRDc0ODYKK0Y2MzM2NjBDCis5MEFGNTczRTRFNzIwOEQ2RUM2RDI0MTJCRkI1Cis3ODNEQjNDMDVERDJCOTg0OTBBNkFFNkQ2ODcyNTYxOTNEM0EyRUQ2RDMzOEY5MDgxNTVFMEJDRUEwMzE3QUZCMTcwOEI1RUY0OUE0Q0VGODU2Njc3NkVCNkI3RThBN0NDQTlCMTBBRjZFNzY2NkJDMDA1MTFEMUNCMTJDRDRDMjlCNTc2OUU2MjRDRjc0RUNFQTUyRTEyNjA2RUE5RUJGODQzQzUyOTM5QTY2M0M1NDZGREVGQzQzN0IzOERBN0EzQUQ0MDg0RDVCMkE2MDYyQjdFRjRDQ0UzRkRERkY3Rjk0ODk2N0VFNTY3MkFCQzlERTA3NzA5NzlGNkQKK0FFOEIKKzI0RjVCRkNDMkQ3MzZFNEMzMUVEOTYxNjQ0MkU0N0UwQUExQzhGNUVENjU2NzVEMDIwMDlCQ0NERUNFOTY5NjgxNTk1RTY1MjRGCitGOEIzQkE1QworMzM1QjU3NDEyQTc3RDhCN0E5RjY2NkU3RDBFNAorRUE3NTU2QTk4QTg5Q0E5OUQxQUE5OTZFMTBGRkUzNTRFQkZFMzczNjVFNzE4OEMxNzlGRDA0QzkwRTlFRTA5Q0U5MEQ4RjVCMjRERjE4NDZERkExNjhGMzlFRkI4MTVGMUY4QTYyNjQ5QjFDMTcxNDVDMjlFMTVFQ0QyN0FBMTFGQjU0MTg5QkREQzY5ODQ4Q0Y0RjM5NEFCMUFBNDlFRUE4QkMzNzZEM0MzNjNEN0ZFQjU0N0Q5QjA3RThFQUQxQzE4MDE1RTBFRUUxMDk1NgorMkU5QTcwNzYKKzYyOEFGRjhCMzg4RkVDRUMzNkJCMDc2NzlFCitCMkFCREU4OUYzRkE3NzhBQ0RDREY2QzU1NjgwQjQxODY3NUZGRUY3MzcyMzkyRjVGMTk2Q0VBQzhFMERDQkI0MDQ2MDk5QjRFRTEyQTJFMkI1ODgyRDYxNUNCN0YzOUMxQTVDNzNBRAorMUFEMzRFQTkKK0FCQ0ZEMUI4NzVGODNEQTA5OTQwRjIzMjhDNTgKK0RDM0EyRTI3RTQxN0U2REMzRDdGMzFCMjNBNzZEMDMxNDdGRUY5NDJFODE3QkVCRDkzODIzNjg1MjQ1Mzg4MjQwNTgwNUYzNTVDODgxMTUwQjY4NEM2Rjc2NjA5REFCNEYxRDQzMDc1RjM4RTJCRDMwQzU5NzY5NTkwM0YzMEI5Qjg3MjE3ODQxMTgwMUU3MEUzNUUyRUFDQzI3RjZCNjg4N0YyMTlGRTUxQjlBQTgyQkIxNjQ3QTUxOTk3RjE0MkY5NUNEQjkyQTBFNjZGREU2NkVCNzY4RTFFMkEyQjgwQ0Q2MjIxMDVBQkVENkMzRERCOTE0MzkyODk3QQorRkFEOAorMjhCRTRDNUI1NjdEODQzNUU0QURGOEVDOTgxNjIxN0U2NEIyRTA1MzUxMTQ3N0U2NzBEM0U5QzAKK0ZCRkZEQTdDCitBNjAzMzUwOEIxMjIwNzVERjA0N0M3ODgyQzg0CiszMEY5NTMwQUU0Q0JCQTY1QjlFM0JCMzhFN0FCMDVGQzVBN0FCNkZCRUREQjY0NEI1QTA1REM0OUYxRDIxMTBGMDEyQjRCOTdCODk0MDcwRDUyNjhENzNDRUZCQjk1QTkxOUVDMzM3OEFBRTc4OTY1RjZEOTNBRDM3OTQ4MjlEQTQ5MkE2NkRDMzEyQ0U0NENBRDQ5MEIyRUU2NDY4MzcyQzI3NzVCRUVFRTAzN0I2NUQ3QzAzRDhDRkQwNjA4ODdEMTkyRDgwMTdGMkNGRgorRTE5MkJGNzkKKzg2NzRCOUU5QTU0RTQ0M0ZENTRFODRDNjVBCitGOEU3M0ZEMzQ3NjBDRTZBNUM1MjlCNUMwNzdDRjlBNkEzNUY3RDhGRkFCQkYzRTQ2Q0QyMDIyRTNDMjlDRDAxQTNCNTgzN0M2MENBQTZGNUM0MzdFQkY5OTMwODQ1NkZENEVGN0E3QjU0MEEwQzFDMDA4QjRBMjU5RTMzMDI5MzQ1REFFQUY3NUIwQQorMEFGQ0QyRjcKKzQ3OENFRDM0NzhFQUQ1NTUwNjVGOTgyOTM3NkEKK0I4NjdGNDNCODE1QzVERUM4M0YwNjQyMzkyRjNEQkUwRkE3NERDRjEwOTE1RDI2ODdBQkZFNTY1QUM0OTExMzBBMDk1MTM3MDg4NTQ2REJGNUI4QTQ1QkUxNzUwQzg4MjQ3NDM0MzlBQjJBQUIwQzk5OTIzMkZGRTQ1QTM2N0I3OTJGMEVDMTA4QkUxQTBCRkNCM0IyRTYxNzBEMUE0RkNFRDY2MkZDMzkwRTVCMUE0MkI2RjAyNjlGQjA4NUNCMTU5MjgxRjAyRjhGOUEwQTEwODlCOTVFNzdFRDA4Mzg4NTgKK0QxQzc0MjExCitCNjJDOTE1MjVDOUE1OUQ5OUEyOUIwMjc1QQorRjQyMkVCNTREQkYxN0YwMTQ4Qjc2NzY2MjI5MTdCOTlCMzM2RkVDMkI2MjNFQzMxRjJFRDczQTNGMTQ5ODA4NENDQTFFNTY0MEU0MUZFNjhBOENGOURBRDFBNUYwRDhGRDMzNDc0NjYzNzRGOEVCQjU0OTk5MUE2NTNFMUMzN0E5RDMzOTY1N0IxNEM5NjM5QTc1RkY0NkNBMTcxMEQ0MERFNEQxMjc3MUVENzBGREVCNQorNDQzNTFGRUUKKzNGODE1ODI0QzFENkI5MkI0Nzk4OUFFOTUyM0EKK0E2REJCQjUyQTJBMzc5RkQzRjdDQTk4MDJFQjUxRDQ3QkE0MDYyQzlCMkJFRUMwMUE1MjZENTk1NEY0QUZCODRDRDYzOTVCOTlBMDQ3OTA5RENFOUIzMTgxNDVFRUUyQ0QyQkRBQkJBNzY2NTU4MzJFMDFEMUU2RURFNkVFOTE5ODUwMkM4QjgxQkVDMTA0QzlBNDcxMjc1OTQ5NkM4MTY3QjIzQTM3RjhGRTVCNjVDNkY5OEIwNEFCQTQ1MDM5MDg5QzU5QUQxM0JDQ0RFMkFFREExODM5NERDRTAzNEUwMDhEQ0M2NjBDMjZGNjkyQzlCCis0NEJGRUU4MworRTZGOEJBMjZFREU1NzFFRjdFMzgxMUZFMUYKKzAwRDYyMjFBOURGQUY5QzhCMjgxNzI2OEVCMTEwODY0NTI5RkE1M0Y4Q0Y3Q0JGQkFEOUVDQjBEMzk0ODRDMUUwMEQ0RjMwNTAwMkY5RTQ0RTI1NzlGNzhCNzNGQTgzMzBEOEExODg1RjQ4NDk1MkM1MDE0RDZCQkEyQzRGRkExNTM3MERCQUMKKzM4NkQ2MkQwCisxRDE1REI0OTJBMDYyQTFBQTBDOTVGNkQ3QzVBCitERjY5MUQ0QzY2NzQ5OTYyQTQ3ODA4RDM4NzgzNjU1QTdCNEU2RTA5RDk4REFFMDAxMkE1QzE0MUQ2REQxNzcxRDA3RkQ3MUE3QzRFOEI4OTVDQjQ0Q0VCRTVENzg0QjMyRDExN0JGMDhDNUQ2RDE0Q0YzMzZBREQ5OTNCRkFDNTBBQkY0MUU1MEIyMTQ4QTQ0RDBDNkE0QzkwQ0YyNDU0NUNBRDA5Q0Y2QjcxOUQxRDQ0NTM4RTA4MDFBRkVDQTNDM0MyM0ZDRjA0RkQ5MThGNjQyODIyN0MzNzgzM0U0NEM0OEMxRjU0MDRGREUyMEVENUFDN0ZERkUwOTIKKzBFNkMKK0FFNUI3M0Y4QzAyRDU5M0I2MTkzQTkKK0IzQ0IwODlDCis4RTE4QzFBQjQ4NUMyNDdCQTM0MTEzRURCOUVDCis1MTFEMjI1OTAxMEFFNkVBNEIzMDE4QjFGRDY3MkFCMkREMTdGNTE5NEIyODc2NjVEOTg4NzY5QzUzMTBBQkQ5NjhDNjEzNjUyNTczNjlCQThFOTI3QjdCRDM2QzJCMjU3QTRBQTFDREJEN0JCNTBBQ0IzRTdERUMyMzU3Q0FCRkU2NEYwNjU1RERGMjBCRURBMkYxRUE1N0E1RTk5MEZEODY5NzdGOTNGM0Y5MTQyQjg0N0JBMDQyQjdBODY1OUI1NEIzNkJBNUQ1N0NERjAwRkJCRDYyRjUyQUZCNkQ1MTM1RERBNTlDMDRCMTUxNjVCQkIzRTQzNDYxRTMKKzM3MkEKKzlBCiszQkNGOUMxNgorRjRGNDRGM0QzQkI4QjAxQThEMzQ4MjI0RDUwQgorMTExOTkwRDE3NDk3ODg1RAorMUVCQjA0NUYKK0MzMTUyMjU4Q0RCNUY2QzYwNDg1OEI0QTE3RUM5NkRBN0Y0MzZCMDBFQzAxNkJFQjA0NjM4MjFFQTAwRjU5NTkxMDVFCis1QTQyNkM3ODYwMjYyQjc2RTRDQTUzMDc0RTg0RDUyODY2Q0NFQUQ0NjlBRDNCNkYwMkVGQUIxRTMwQjdBNTY4NUZBNjgzRjhEOEI3Cis2OEUwRjE5NzJCQjgxOUY3MTEyRjAzOTZFQjhFRjJCQkQwNUZFOEYxOURBRDJDNDgxNUVERUYKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwOTUgcHV0CitkdXAgMiAvQzAwOTcgcHV0CitkdXAgMyAvQzAwOTkgcHV0CitkdXAgNCAvQzAxMDAgcHV0CitkdXAgNSAvQzAxMDEgcHV0CitkdXAgNiAvQzAxMDQgcHV0CitkdXAgNyAvQzAxMDUgcHV0CitkdXAgOCAvQzAxMDkgcHV0CitkdXAgOSAvQzAxMTAgcHV0CitkdXAgMTAgL0MwMTExIHB1dAorZHVwIDExIC9DMDExMiBwdXQKK2R1cCAxMiAvQzAxMTQgcHV0CitkdXAgMTMgL0MwMTE1IHB1dAorZHVwIDE0IC9DMDExNiBwdXQKK2R1cCAxNSAvQzAxMTcgcHV0CitkdXAgMTYgL0MwMTE4IHB1dAorZHVwIDE3IC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTQ0IC0yMzYgNzU3IDcyM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI1RDg5NUM3OTk0NjlERUU0NEJERkVFQjM4RTJEMzg5RkY4MAorREZDQzFCMDc0NENGQ0EzMDBBRjJBMDgwNUMKKzlCMTQwRDhDNkJFNUY3QkU5OTdGRkMxOEI1RDhFNzRFQjlCMkU5RTgxMDk5CiszQzc2QUI4NworQzEzNkEyNjlDNzcyQTQ0NzI3RTFEMEMwRjdEOAorNDE2NzMwQUZDMTRCODdDQjE1NkFDRTU2NUVBMzIyREM3RkNCRjBCREMzNTdCMzk2QzYzNEZDRDYwRjgyRUI2RTEwMjI3Mzg5RDAyRjA4Q0UwMDA4QTgyRTZBQkU3MzFCQUVENDA5MjVCMUM3NTJFQzVCRDY5OEYzMDk3NUY0NDFFRjc4RjM2QUZBREM0RTJEQjNEQjMxQjlFM0I4QjUwOTY4REFCRjUwMkUyMzJCMkFERDA2REVDQUJDRDU1RkZDOTVDQUI0MDE2NkEwNzU3RjZDQTJDRUM1QTU0NDVFMDMzRDAxOUZBQ0NFNzdENjk4RjU2M0MyQUVFRDBFCitCQUIwCitGMkQ2MzY2OTUzNjBGMUVFMEZCOUU0OTVCMgorMTg0NDM3QzcKK0M5RERERjdEMzI3RUUzRkUwRTZFMEI1MjhDCitDMTIxQ0VEMTRBN0IxOTY2OTAyMDEwMUFFQjVFOUZENUMxNjZFRUMzNDQ1MTdGM0Q4NkFCNkNGMEI0N0E3RDlBNTlDMzZBQjFCMkU3NTQ3RjJEN0EzMTkzQ0VEN0I5OUFBQUFENjJBQzY3NzlBNDRBQ0U3RDdBREU5RTgyQzBCNkU5RTZEMTQ0MzE1QkM0OTMzMzQzMDI2NTgwQ0I1ODdCNTMyMEE0MEYzMEFFQkNDNzVCMEM4QkZGNzhDRkE0RTEKK0NDQTJCQjFECiszOTVCNUIxRDhCRjdDNjA3RjFBOUI4Qzc4RTlFCitDRkREREU3RjM3MjkzNjI1MTk5QUZBNzE2QjQ2MUU0NEFENTQ0NEVBMjQyOENGRjQwRTgzMTU2Mjc2MTI0MEY0QzYxNEJERTExRTE1QjgyMzVDRTJGQUMwRTMwRDRFMjYyMDA1QTJERERBOTQ1RUUzNjFDRDY2NDk2NUI3QUY1QzRGRkEyQUY0NzBGMTM0N0I2NzQzQzJCQkZCNEMxOTk2RjRCM0RDNUExNTI1QjJGOUE2Mjc2OUFEMUVCNjIzMjNDQUM2QjVDQkFDODE3MkUxMDFEOEYwMzU3QkQ1NUFGQjQwODNEMDg3MUMwNjk2QTU4N0RBNUNGQjA3QkEKKzREQTkKK0JGMDA0QUQ1NEVCNDNEODNGQTRFRDA3QjIyN0NERjEzNzlBNEE2MEE3OTU2MzgzNzU3RDBCMDRENUZDODdEQzA5RUQ3NEE2RTg0QTQ0MkVBOERGMzg4OTQxOUVFMENFMgorRUY1RUYzMTYKK0Y3MURERDk4MDNBQTkyRDY1MDMyQ0FGRDg2NkQKKzAwQUQ4RjVFRjJGNDkzODJGRDhGNTdGMjA5OUQ1NDZENzEwQjI3QzlCRjA4N0QyRDJBNDE3Njk4QjEzNDc4RDBCMTFCRDE5QUExQTEyQzI4NzBDMjRBQkRDRTlBNTQwQTE5NjhCMzUzMTI0QUE0RUM5MUZDNkM3QUZFRTg1OUFFQTVERTlDRkFCNEQ1RjBDMTYwRDZDRUJBRTFBRDkxRjVEOEFBNDI0NDk1QUQ4ODMyODk3RkFEQkUxOEY2RDA2OEEzQTQzNTU0MjEKK0Q4QkI2NzkwCiszREI3NjdEODE0NjRGODBBOTY3NjhGODA3NjRECis5NEZFOEE3NDE3QTA2MkE0NENFQUMxNTZDNEVCRUM4RTJCMDI3OTA0OUFGRkJCQjJCOTI1RjkzQjM3MjRBNjAzNEM1NERCMkE2Mjc4Q0E3QTE3MzQ1ODhBQzgzREYyQ0Q1NjhEOUIzNjFDNkM2MEE3REIxMUUxNUE5MDdGODIzRTIxMDA4NjEyMDREQzBDMzYzMkMzNDczQ0NBODBBOEQ3OEFDMEY3MkEwMDVCN0UwMjBENDY4RkM5OUIwRDY5MjhDREU2RkI0NTlCNDQ4OTI3NEI5OEM5RTg4MkM5MzM5RkNDMTdFMjAzQjU2NTFFNERFMjRDQTMyQTJCM0UKKzU3NTMKKzIxMzY3QzJGMjQzNDg4NjZDODM0MEU5MzE2ODE4OUU0RURERTFCMTM4MUFFMzExRkRDM0M3NQorOTMzMDE0QzEKK0VENTcwNzE3NUNDNzM4NEY1RDVBRjQ2QjA3N0YKKzAwQTAyN0ZGQ0VDQzEzRTY3NDc3N0FDQjY3OEYyRjYzODIyMjY0MDY1RjVFNUMwMEJGM0YxNjA4NEJBMTgxMjc0NTEwQzAwRTEyMkI4MEVEMjk1OTAzRDg4OTgyMzI1MUE3QkE1QkM3ODZBRUJCRDZBRTQ0QTNCN0U1MjAzNzgyMTkwODk5N0EwMzZEMDlDMUE4ODhEMkQ5RkFGQzhBNTg4MUIyMDMzMTlBRDRDRjE3MTdGNTlGOUIwQjcxRDRDNkYxNjQ2NURDODE4MTVDODg4N0NDNjZCNTUzMEQ1NzYzRjgyRkRFMzgxMDBDOTZEMzIxCis3OTE0NDdENworNzhEN0M4NTc1RDQzMjRDNzFGRjY4QzVCNjkwRQorREYwMEYzRkU0NTFEMkYzMTc1N0JDOEY2QzM1NUVDMkY5M0Q3QUFBQTU0MjUzMTgyN0FDNjA5RjBGRjJCQTNBNDEyNENEQ0NEMjYzRDEyRUI5Q0U1QkNGN0E2ODY5NkZGNzY0RUU2M0RGRTdBNzJFQTU2NUY3OTVGMjkxQjFGOTQwRTI3Mzc5ODMyQTAwNTc5NzI5NTE2NTE1NDYxNTVGQjQ4RjI3OTdBMzBCQkRCRTZGRjZGNTQ5QkRFQzIyRUQ0MEVBMzkxMDJDRkU5MERDM0FFM0IzRjI1MDZGNTBEQTM5MDA0Qzc3MEZFQjVBOEJEOTFENjRDRjI2MUNCCis3QzQ3Cis2MkRBRUIyOUM1NjBGRDgyRkVDNTE1QkU5ODY0OEEzMTRFMzAwQUVCQjVBMjI5MThBNzczRDg3MzA0RTg0MkZGRjA0MUQ5NkNGODU2NTg1NDc3RjUxRTVDMTZDNEE3RTg3RkUwQjBBMThBRTUyMTQ2QjBBQzA2MkI3MzIzRTlGQjVGQjc1MkFGMjJFNUJGQTU0NTQ2NEIKKzhFNjVERTUyCitGQzQ1OTAxOEJEREEzQ0JENzU5MDNDMjM1QTU5CitCQzE5MUI4NENCNTY2QjBDMDAwNzFFQzAyQUM2NDBGOEYzNDY2NTQ5QjE3QzNDQ0JBMzRFRjhBNkM0RDY1RDE3Njg4Qzc5NUVCNzEzMzY0MUE1RDk5ODhCRjQ0MjY3MEFCQkU3N0Q0RDJGOTJBQTAzMDMzQTREQ0RBMzFBQ0FBNEU5MTJERTcwMEE0RkMwODcyOTEzREYzREQ5RDc5OEY1MTEyRDg4MDg3NjQxMDk2M0Q1NzcxMEI3NkQxNEFGNEEzQUM5NzlFRjAyMjBCQUE1NDhBQzI2MDMwODc1MTAxQTJENTQ0ODQ3QjA0MkVGRjk5MDNEQTY5OEY1RTIKKzcwNEYKKzUwQTVEN0IxMjc0MDY5MzhDNzI5RTM1RENBODY1RUNEMEYxRDgyNDk5NzUxREM5MjNGCis2RUMxRkE5NAorODEyMjRCNTk0RDMxODBBRDAxNjEwOTJEQjgKK0M1QkZEMzlFNzdCMEE3NUMxMkFEQTA5NjIwNkY0MzQ2RTYwMzYwNkZCRDlDMkZDMDBGQUZFQkNCQ0JFQzNBRkMyQUVENkVCNzE5QUM3QzlDMDhGRjBCRDJERDFENjg1RURDQTYwQTI3RUY4MzRFNTYyNDFFODUwQUIyNjBBNjU5MUYwQTc4NzY3RkQ5NzQyMkM0RDc1MjQ2QzYxMTNGRURFQjZENjhGMEQ2Qzk0NzlCQTlCQzRGODc0MDgyMzQKKzUzRjBDQ0JCCis3RjYyMkYzNDg0OTM0NzZDQkVBMzVGNDg5NEE3Cis4QkM3RENFNUM5QTE5ODk0RjZGNjc2RUUyOEUwQTJGMDI5MzFGRDNFMzc5ODhFQUQyM0E4ODMzMjUwNDlDRTE3Q0Q3OTUwRjk5MjA2Mzc1MTFCNzkwMjZBNTYyRDJBQjk2RjBBMjYwMUU0NkRBNzc4QzAzQkIwMjFBQjU5REQyODgxNzZEODI3NUEyNjRFNDlDODBCNzMxMURFNUUwNzU1REVENTNBQTQ3MkQ0NDM1MEQ4NjY3MjdENTQ3RTdBMzA2QzVDQTVDRTVEODg2RDZERDg5REZFNjA2N0Y5MTk0REZENkJFRTU1NDlDNEJGMTZEMTEwMjdCQzAzMzAKKzZCNEEKKzUxRjcwOTlFRjVGOUIxMDY3N0M5MjM2OUY0RTE3QTYzQkY0NTc4M0UyN0U3RTJDQTk2RjFEN0RFMDQ3MjNBREI1NTc2OUMxOEVBQjNBNEE4NzI5QQorRkVEM0QzMDUKK0I2NTJBNkM1NDlGQ0YxMzIyRjhFNTFGNjdBCisxNEI1QjJDNjhCOTgwRTQzNjA4QzUzQjM4NUM1RDg5NjZDNEY3REQ1QkM3QkNGNEM4OUVEQUE3NjUyNzg3NTgyNkM3REIwRUVFNUMxM0EyNzIyNjlFRjk4ODVFNTkzRUMyRUY1MjZFREQxODJFMUNGNDY0MEJEODFCRDk3RjAxRjY1RDk0QUNGMDFBRTE0NkZFN0ZCRkJFMjdDNTczQUREM0UwMTgzRTRGRUJCQ0QwQzkwNjY2RgorNDhBMjZDQ0YKK0E0NDVCNjE2MzExRDRBQjQ2Q0I2Q0VCREJDMEMKKzk5MTM4QTUwODQ3RkJCMzc5RDY5NDkzMjE0NkQyNTIwNzdDRjY2OEQ1RUREMTA5NzdGQkFDNDM2NTFDMDBBODQxNDhEMjJDNDk3QzNDNTI2RUU2QURDNTU4NjFBNTg4Q0RCRTY1RTEwN0QxRjE2NzEzRTAzREIwQTEzMTgwODJENkYxOEFBQUM0ODI0QUM4RDhCRkFCRDIyNUVBMUZENUZDQ0E0RTI0QkIzOENCMkY0NjZDMzAzQjA3NzFCMUEyOTMxNjg2Rjc1MjZBMDQxQUZEODRCRDU3OUZFODdBQzI1RDgyRUNCOUMyMTYxCitCMUYyMDYxMQorMjczMjFCQjE1OTRGNDdDMjIwQTQzNjJBODkKK0U0NkY3REM5OUU3QjMxNEZEQTY5RkM0NkVBQzAyRUFCNjI0NkM1QjQ1ODk2NkE3NjVFNTM1ODc2NDg4QUEyRjY5MkI1NzM3ODcwNjE3MTZGNUFFQ0FFOEUxODcyNjVBQjIwNzQzQTNGNTkxNTI1RUEwMUUwNDVEOTdEMjhCMTRCNjREQkE0ODAzODA1ODU4REM5QTFEMzNEMzYwOUIxMzI4NUI2MDVBQ0E1MTcyNAorOTM1QjI2MkEKKzJCOUIxNjQ4OTU0QUJFRTI0RDdENjQ1MUE3OUYKKzQwNDFCQUYyNEFEQUExRTNENUZCMTY3QjAwQUE1NUNDQTYzQzNDRUU3MTYxMkVFNkRDMDQ4RTVENjU3NjYxMjdCRTUyNkYzNkY2RTJEMEIxRDcyQURBQTQ0MDM5OUZBMDRCRDdCNDMxMEVBOTI0RkFEQkI2NTg2NjhEQkZFODU0RDZGMjQ0OTQ3ODkxRTczM0JEQkU0NTBEMkYzRDk2NDNGNEVGM0E0Rjg2OTRDNUU5RkExMTlFRjdERTQ5ODA1OTQxODk3RTRBOTlFRUJGNjFBOTVCQTlDQUUzMEI1NkNBMzc2NzJBMjk2Q0I5Qjg0OTIxMDQ2RTM5OUMyQworNkM4MworQjhFRTRDQkNDNTg4MTU2OEJBNUYwMUM4QUE5NEYwNEZEMkJDRDNGQjUyMkMxQQorMjdBNEZGRUMKKzFGRjU1RkY3MDVCM0NCQTZBMjlCOUY0OUI0CitCNjA1QTZCQjIyMDQxRjZBMUQ1REQyRTkxMjcxQjdENjJBNTJCRDBBNTJGNEJGMEM4ODM0OTIwNjg5NTIyRjJFOEMxREMxN0U0MjI3ODNCMjZDMzQ1REFDRjE0ODFGNzlDOTE1QzIxNDU0N0EyODAzOEZGNTQxNzY1N0VBNDVDQzM5QjA4NjFGQkIyRjY5OEE3OUI3NTY5RkFGRDBEQzVFNTNEMDk0NkM3ODUyOTEyQzFBNkIKK0Q0QjJERkE0CitDN0E3NjI4NDhFRTM0NjM0MkE4OTdFMjREMgorODk3RDg0OUE4MTU1OTQ5MkIxQjlGNDA1M0EwNzVBQTEwQTM3QTlEQzlCQkFEREE0Cis1RkRFM0IxRQorRjk0QkQzMTM4QjgxNjAxNDZBNjRFNEJDM0VGNAorRjI2NjMwRTAzODA2NUExNworRjYwQjU2NTIKKzI5QkMxN0QzQTQyMDJDMkZERENEODY1NUI0Rjk0RDMzQTg1RkU2NjY3NTNFMkE1RENGRTkzMTJBQjAyMkY5QzczRDc0CitDNzk2OTc4NDY4QTFCQTg0NUUyQTJEREFDQUMwNUQ5NEVFRUUzRERENDc2RDdCODJGMTQyOTk5MDdFQTk0Nzg0RDdDNkYyRjIwMDdBCitEMzQ5NUVEMUNDQUZDMjA5ODEyQURCOTZDMEZEMDg5QjU1NTlGMDcwOTU0Q0YwQzE1RUNBMDEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmkgMTIuMDAgL1BTT3dzdGR1dGNoaSBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxYjJiMzkzNTJiMzcyYzBmMDExMDAxMTEyYjMzMjkyZTMyMjczNzMwMDEyYzM0MzcwMTFhMmIyNzM4M2EzNzJmMzMyZDAxMWIyYjM5M2MzNDM3MzAwMTFkPiAyMjA3IDU1OCAwIDczODQgLTEgcworPDJiMzcyYzM0MzczMjI3MzMyOTJiPiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwYzBiPiA5MzQ2IDEzMzAwIDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjgwIDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyODAgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI4MCAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyODAgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDEyYiBTRgorPDEwMGUwOT4gMTI3MSAxNDMxIDAgMTYzNiAtMSBzCis8MDAwZTA1MGMwMDBkMWUxYzEzMTExODAwMGM+IDE2MzYgMTQzMSAzIDMwMDYgMCBzCis8MTMxYzE0MWExYzE4MTExOTEyMTM+IDI5OTggMTQzMSAwIDQwNDAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyMDJlMmI+IDEyNzEgMTc5NyAwIDE2MzEgLTEgcworPDAwMjQyMDE4MDAyMDEyMWQwMDM4MzkzNzJiMjczMjAwMzUyYjM3MmMzNDM3MzIyNzMzMjkyYjAwMzkyYjM4MzkwMDM2M2EyZjM5MmIwMDM4MmYzMjJmMzEyNzM3MDAzOTM0PiAxNjMxIDE3OTcgOCA2MDk5IDAgcworPDAwMzkyZTJiMDAyMDEyMWQyNjFmMjAxZTE0MTAxYTAwMzkyYjM4MzkwOTAwMjQyMDE4MDAzNzJiMzYzYTJmMzcyYjM4PiA2MDk5IDE3OTcgNSA5NTMxIDAgcworPDI3PiAxMjcxIDIwNDIgMCAxMzc2IC0xIHMKKzwwMDJhMmIzYjJmMjkyYjAwMmMyZjMxMmIwMDI4MmIwMDM0MzUyYjMzMmIyYTAwMDgwMDI3MzgwMDM5MmUyYjAwMmEyYjNiMmYyOTJiMDAyYzJmMzEyYjAwMmYzODAwMzUzMTI3MjkyYjJhMDAyZjMzMDAyYTJmMmMyYzJiMzcyYjMzMzkwMDMxMzQyOTI3MzkyZjM0MzMzODAwMzQzMzAwMmEyZjJjMmMyYjM3MmIzMzM5MDAzODNlMzgzOTJiMzIzODA3PiAxMzc2IDIwNDIgMTcgOTUzMSAwIHMKKzwyZjM5PiAxMjcxIDIyODcgMCAxMzk4IC0xIHMKKzwwMDJkMmIzMzJiMzcyNzMxMzEzZTAwMzIzYTM4MzkwMDI4MmIwMDM4MzUyYjI5MmYyYzJmMmIyYTA5MDAyMDJlMmIwMDM4MmYzMjM1MzEyYjM4MzkwMDI0MjAxODAwMjAxMjFkMDAzODM5MzcyYjI3MzIwMDM5MmIzODM5MDAzNDMzMDAxNzFkMDgyMTI0MDAyZjM4MDAzNTJiMzcyYzM0MzczMjJiMmE+IDEzOTggMjI4NyAxNCA5NTMxIDAgcworPDI4M2U+IDEyNzEgMjUzMiAwIDE0NzkgLTEgcworPDAwMmIzMzM5MmIzNzJmMzMyZDAwMzkyZTJiMDAyOTM0MzIzMjI3MzMyYTBmPiAxNDc5IDI1MzIgMyAzNjMzIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDMxYTFiMWUwMzE5MTMxZTFiMTMxYzE0MDMxOTEzMWUxYjEzMWMxNDAwMDIwODAwPiAxMzk4IDI4NDUgMiAzNjI2IDAgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNTA4MGEwZTA1MDYwYTBkMGU+IDM2MjYgMjg0NSAwIDQ1ODUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMD4gNDU4NSAyODQ1IDEgNDYzOCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAyMWU+IDQ2MzggMjg0NSAwIDQ4ODcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDI0MjAxODI2MjAxMjFkMjYxZjIwMWUxNDEwMWEwMD4gNDg4NyAyODQ1IDIgNjkzNSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAyMDIwMDAyMTA+IDY5MzUgMjg0NSAxIDc2NjggMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMGEyYTJiM2IwYTJmMzMyYjM5MjYyOTM0MzkzOD4gNzY2OCAyODQ1IDEgODk2NyAwIHMKKzwzYzJlMmYyOTJlPiAxMjcxIDMxNTkgMCAxNzk3IC0xIHMKKzwwMDNjMmYzMTMxMDAzNTJiMzcyYzM0MzczMjAwMjcwMDBjMGIwMDM4MmIyOTM0MzMyYTAwMzkyYjM4MzkwMDI4MmIzOTNjMmIyYjMzMDAzOTJlMmIwMDMxMzQyOTI3MzEwMDM4M2UzODM5MmIzMjAwMjczMzJhMDAzOTJlMmIwMDM4M2UzODM5MmIzMjAwMmYyYTJiMzMzOTJmMmMyZjJiMmEwMDI4M2UwMD4gMTc5NyAzMTU5IDE2IDkwMTQgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYzA1MDgwYT4gOTAxNCAzMTU5IDAgOTQ2MSAtMSBzCis8MTE+IDk0NjEgMzE1OSAwIDk1MzEgLTEgcworPDBlMDUwNjBhMGQwZT4gMTI3MSAzNDA0IDAgMTc4MyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA5PiAxNzgzIDM0MDQgMCAxODM2IC0xIHMKKzwwMDIwMmUyYjAwMzgzNDI5MzAyYjM5MDAyODNhMmMyYzJiMzczODAwMzQzMzAwMmIyZjM5MmUyYjM3MDAyYjMzMmEwMDNjMmYzMTMxMDAyODJiMDAzODJmM2YyYjJhMDAyNzI5MjkzNDM3MmEyZjMzMmQwMDM5MzQwMDM5MmUyYjAwMzgzZTM4MzkyYjMyMzgwNDAwMmEyYjJjMjczYTMxMzkwMDI3MzMyYTAwMjczMTMxPiAxODM2IDM0MDQgMTYgOTUzMSAwIHMKKzwyMDEyMWQ+IDEyNzEgMzY0OSAwIDE2ODggLTEgcworPDAwMzQzNTM5MmYzNDMzMzgwMDA1MmIwOTJkMDkwMDIwMTIxZDI2MWIxYzEzMTQxOTEwPiAxNjg4IDM2NDkgMyA0MzkwIDAgcworPDI1MDYwMDNjMmYzMTMxMDAyODJiMDAyNzM5MDAzOTJlMmIyZjM3MDAyYTJiMmMyNzNhMzEzOTAwMzgyYjM5MzkyZjMzMmQzODA5PiA0MzY3IDM2NDkgNiA3NDQwIDAgcworPDIwMmUyYj4gMTI3MSAzOTYzIDAgMTYzMSAtMSBzCis8MDAzOTJiMzgzOTAwMzUyNzM3MjczMjJiMzkyYjM3MzgwMDJjMzQzNzAwMjczMzAwMjQyMDE4MjYyMDEyMWQyNjFmMjAxZTE0MTAxYTAwMzkyYjM4MzkwMDI3MzcyYjAwMzkyZTJiMDAzODI3MzIyYjAwMjczODAwMmMzNDM3MDAyNzAwMjAxMjFkMjYxZjIwMWUxNDEwMWE+IDE2MzEgMzk2MyAxMyA5MTc4IDAgcworPDAwMzkyYjM4Mzk+IDkxNzggMzk2MyAxIDk1MzEgMCBzCis8M2MyZjM5MmU+IDEyNzEgNDIwOCAwIDE2NTcgLTEgcworPDAwMzkyZTJiMDAyNzJhMmEyZjM5MmYzNDMzMDAzNDJjMGY+IDE2NTcgNDIwOCAzIDMxMDQgMCBzCis8MDgyND4gMTU4OSA0NTIyIDAgMTkyOSAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwNDA1MTAwZDBiMDUwMz4gMjAzMyA0NTIyIDAgMjcwMCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM4MmIzOTAwMzkyZTJiMDAzMTM0MjkyNzMxMGEzNzJiMzIzNDM5MmIwMDI0MjAxODAwMmEyYjNiMmYyOTJiMDAyYzJmMzEyYjAwMzMyNzMyMmIwMDJjMzczNDMyMDAwMD4gMzE3NyA0NTIyIDkgNzUyNSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA0MDUxMDBkMGIwNTAzPiA3NTI1IDQ1MjIgMCA4MTkyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDk+IDgxOTIgNDUyMiAwIDgyNDUgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MGYwNjBjMDAwZDFlMWMxMzExMTgwMDBjPiAxMjcxIDQ5MzAgMiAyNjE3IDAgcworPDEzMWMxNDFhMWMxODExMTkxMjEzPiAyNjA5IDQ5MzAgMCAzNjUxIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTA+IDEyNzEgNTI5NiAwIDE0MzQgLTEgcworPDAwMjExMzFkMDAzODM5MzcyYjI3MzIwMDM1MmIzNzJjMzQzNzMyMjczMzI5MmIwMDM5MmIzODM5MDAyZjM4MDAzYjJiMzczZTAwMzgyZjMyMmYzMTI3MzcwMDM5MzQwMDI3MDAyMDEyMWQwMDM4MzkzNzJiMjczMjAwMzkyYjM4MzkwOTAwMWMzMzJiMDAyYTJmMmMyYzJiMzcyYjMzMjkyYjAwMmYzODAwMzkyZTI3Mzk+IDE0MzQgNTI5NiAxNiA5NTMxIDAgcworPDM5MmUyYj4gMTI3MSA1NTQxIDAgMTU2MSAtMSBzCis8MDAzODJiMzMyYT4gMTU2MSA1NTQxIDEgMjA0MiAwIHMKKzwwMDM4MmYzZjJiMDAyOTI3MzMzMzM0MzkwMDI4MmIwMDMxMjczNzJkMmIzNzAwMzkyZTI3MzMwMDM5MmUyYjAwMzgzMjI3MzEzMTJiMzcwMDM0MmMwMDM5MmUyYjAwMzEzNDI5MjczMTAwMjczMzJhMDAzNzJiMzIzNDM5MmIwMDM4MzQyOTMwMmIzOTAwMjgzYTJjMmMyYjM3MDAzODJmM2YyYjM4MDk+IDIwNDIgNTU0MSAxNSA5NTMxIDAgcworPDIzMmUyNzM5PiAxMjcxIDU3ODYgMCAxNzcwIC0xIHMKKzwwMDM5MmUyZjM4MDAzMjJiMjczMzM4MDAyZjM4MDAzOTJlMjczOTAwM2UzNDNhMDAzMjNhMzgzOTAwMzIyNzMwMmIwMDI5MmIzNzM5MjcyZjMzMDAzOTJlMjczOTAwM2MyZTJiMzMwMDNlMzQzYTAwMzgzNTJiMjkyZjJjM2UwMDM5MmUyYjAwMDgzMjAwMzQzNTM5MmYzNDMzMDcwMDNlMzQzYTAwM2EzODJiPiAxNzcwIDU3ODYgMTcgOTUzMSAwIHMKKzwyNz4gMTI3MSA2MDMxIDAgMTM3NiAtMSBzCis8MDAzYjI3MzEzYTJiMDAzOTJlMjczOTAwMmYzODAwMzEyYjM4MzgwMDM5MmUyNzMzMDAzNDM3MDAyYjM2M2EyNzMxMDAzOTM0MDAzOTJlMmIwMDM4MzQyOTMwMmIzOTAwMjgzYTJjMmMyYjM3MDAzODJmM2YyYjM4MDAwNTA4MzgwMDI3MzMyYTAwMDgxZjA2MDkwMDEwMzEzODM0MDcwMDM4MmYzMzI5MmIwMDM5MmUyYjAwMjExMzFkPiAxMzc2IDYwMzEgMTkgOTUzMSAwIHMKKzwxZjM5MzcyYjI3MzI+IDEyNzEgNjI3NSAwIDE5MjEgLTEgcworPDAwMzkyYjM4MzkwMDJmMzgwMDMzMzQzOTAwMzkyZTJiMDAyYTJiMmMyNzNhMzEzOTAwMzkyYjM4MzkwNzAwMzkyZTJiMDAwODM5MDA+IDE5MjEgNjI3NSA5IDQ4NzggMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwZTA1MGQwZTA5MDIwODA1PiA0ODc4IDYyNzUgMCA1NjUzIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAzNDM1MzkyZjM0MzMwMDMyM2EzODM5MDAyODJiMDAzODM1MmIyOTJmMmMyZjJiMmEwNzAwM2MyZjM5MmUwMDM5MmUyYjAwMzkyYjM4MzkzMzI3MzIyYj4gNTY1MyA2Mjc1IDcgOTUzMSAwIHMKKzwzODJiMzk+IDEyNzEgNjUyMCAwIDE1MjYgLTEgcworPDAwMzkzNDAwMjExMzFkMjYxZjIwMWUxNDEwMWEwOTAwMWYzNDA3MDAyNzAwMzgyZjMyMzUzMTJiMDAyMTEzMWQwMDM4MzkzNzJiMjczMjAwMzkyYjM4MzkwMDI5MzQzMjMyMjczMzJhMDAzMjJmMmQyZTM5MDAzMTM0MzQzMDAwMzgzNDMyMmIzOTJlMmYzMzJkMDAzMTJmMzAyYj4gMTUyNiA2NTIwIDEzIDk1MzEgMCBzCis8MzkyZTJmMzgwZj4gMTI3MSA2NzY1IDAgMTY1MyAtMSBzCis8MDM+IDEzOTggNzA3OSAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzFhMWIxZTAzMTkxMzFlMWIxMzFjMTQwMzE5MTMxZTFiMTMxYzE0MDAwMjA4MDA+IDE1MDQgNzA3OSAzIDM3ODUgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYzA1MDgwYTBlMDUwNjBhMGQwZT4gMzc4NSA3MDc5IDAgNDc0NCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDAyMWUwMD4gNDc0NCA3MDc5IDIgNTA5OSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MjExMzFkMjYxZjIwMWUxNDEwMWEwMDA4MDgwMD4gNTA5OSA3MDc5IDIgNzA2OCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAyMTg+IDcwNjggNzA3OSAwIDc0MjAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDBjMGIwZDBlPiA3NDIwIDcwNzkgMSA3ODk3IDAgcworPDIwMmUyYjM3MmI+IDEyNzEgNzM5MyAwIDE4MTcgLTEgcworPDAwMmYzODAwMjcwMDM4MjkzNzJmMzUzOTAwMzUzNzM0M2IyZjJhMmIyYTAwMzkyZTI3MzkwMDM1MmIzNzJjMzQzNzMyMzgwMDNiMjczNzJmMzQzYTM4MDAyMTEzMWQwMDM4MzkzNzJiMjczMjAwMzUyYjM3MmMzNDM3MzIyNzMzMjkyYjAwMzkyYjM4MzkzODA5MDAxODM5MDAyZjM4MDAyOTI3MzEzMTJiMmE+IDE4MTcgNzM5MyAxNCA5NTMxIDAgcword3N0OmR1dGNoMTJpIFNGCis8MGYwNDBiMDEwZDBlMGMwNTAyMDgwMTBkMDMwYzA3MGIwZT4gMTI3MSA3NjM4IDAgMjg2MyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA5PiAyODYzIDc2MzggMCAyOTE2IC0xIHMKKzwwMDEwMzgwMDNjMmYzOTJlMDAyMDEyMWQwMDM4MzkzNzJiMjczMjAwMzUyYjM3MmMzNDM3MzIyNzMzMjkyYjA3MDAzZTM0M2E+IDI5MTYgNzYzOCA2IDYzOTAgMCBzCis8MDAyOTI3MzMwMDNhMzgyYjAwMzkyZTJiMDAzODI5MzcyZjM1MzkwMDM1MzczNDNiMmYyYTJiMmEwNzAwMzQzNzAwMzUyYjM3PiA2MzkwIDc2MzggNyA5NDYxIDAgcworPDQxPiA5NDYxIDc2MzggMCA5NTMxIC0xIHMKKzwyYzM0MzczMj4gMTI3MSA3ODgzIDAgMTcxMiAtMSBzCis8MDAzOTJiMzgzOTM4MDAzZTM0M2EzNzM4MmIzMTJjMDAzOTM0MDAyZDJiMzkwMDJhMjczOTI3MzUzNDJmMzMzOTM4MDAzMzM0MzkwMDI5MzQzYjJiMzcyYjJhMDAyODNlMDAzOTJlMmIwMDM4MjkzNzJmMzUzOTA5PiAxNzEyIDc4ODMgMTAgNjg0NCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBhMGIwZTA3PiAxMjcxIDgxOTcgMCAxODY2IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MGYwMDIxMTMxZDAwMmYzODAwMjczMzAwM2EzMzM3MmIzMTJmMjcyODMxMmIwMDM1MzczNDM5MzQyOTM0MzEwOTAwMTgzOTAwMmYzODAwMmYzMjM1MzQzNzM5MjczMzM5MDAzOTJlMjczOTAwM2UzNDNhMDAyYjNkMjczMjJmMzMyYjAwMzkyZTJiMDAzNzJiMzgzYTMxMzkzODAwMjkyNzM3MmIyYzNhMzEzMTNlPiAxODY2IDgxOTcgMTQgOTUzMSAwIHMKKzwyNzM4PiAxMjcxIDg0NDEgMCAxNDU3IC0xIHMKKzwwMDM5MmUyYjAwMzcyYjM1MzQzNzM5MmIyYTAwMzgyYjMzMmEwMDM3MjczOTJiMDAyOTI3MzMwMDI4MmIwMDMyM2EyOTJlMDAyZTJmMmQyZTJiMzcwMDM5MmUyNzMzMDAzOTJlMmIwMDI3MjkzOTNhMjczMTAwMzcyYjI5MmIyZjNiMmIwMDM3MjczOTJiMDkwMDE2MzcyYjI3MzkwMDI5MjczNzJiMDAzODJlMzQzYTMxMmE+IDE0NTcgODQ0MSAxNiA5NTMxIDAgcworPDI4MmI+IDEyNzEgODY4NiAwIDE0ODkgLTEgcworPDAwMzkyNzMwMmIzMzAwM2MyZTJiMzM+IDE0ODkgODY4NiAyIDI1ODYgMCBzCis8MDAzNzJiMzUzNDM3MzkyZjMzMmQwMDIxMTMxZDI2MWYyMDFlMTQxMDFhMDAzOTJiMzgzOTAwMzcyYjM4M2EzMTM5MzgwMDM5MzQwMDMyMjczMDJiMDAzODNhMzcyYjAwMzkyZTJiM2UwMDI3MzcyYjAwMzMzNDM5MDAzMjJmMzgzMTJiMjcyYTJmMzMyZDA5PiAyNTg2IDg2ODYgMTEgOTUzMSAwIHMKKzwxNT4gMTI3MSA4OTMxIDAgMTQwMiAtMSBzCis8MzQzNz4gMTM5NCA4OTMxIDAgMTU5MSAtMSBzCis8MDAyYjNkMjczMjM1MzEyYjA3MDAzNDMzMmIwMDM4MmUzNDNhMzEyYTAwPiAxNTkxIDg5MzEgNCAzODQ1IDAgcword3N0OmR1dGNoMTJiIFNGCis8MTExNzFmMTEyMDFkPiAzODQ1IDg5MzEgMCA0NDQ5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAzNzJiMzUzNDM3MzkwMDI4MzQzOTJlMDAzODJiMzMyYTAwMjczMzJhMDAzNzJiMjkyYjJmM2IyYjAwMzcyNzM5MmIzODAwPiA0NDQ5IDg5MzEgNyA4MTUyIDAgcword3N0OmR1dGNoMTJiIFNGCis8MWUxYTE1MTMxZTE2MTMxYz4gODE1MiA4OTMxIDAgODkwNiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMmMzNDM3MDAyNz4gODkwNiA4OTMxIDIgOTUzMSAwIHMKKzwyMTEzMWQyNjFmMjAxZTE0MTAxYT4gMTI3MSA5MTc2IDAgMjc4MCAtMSBzCis8MDAzOTJiMzgzOTA5MDAxODJjMDAzZTM0M2EwMDI3MzcyYjAwMmQzNDJmMzMyZDAwMzkzNDAwMzcyYjM1MzQzNzM5MDAyNzAwMzgyZjMzMmQzMTJiMDAzMzNhMzIyODJiMzcwNzAwM2UzNDNhMDAzODJlMzQzYTMxMmEwMDM3MmIzNTM0MzczOTAwMzkyZTJiMDAzNzJiMjkyYjJmM2IyYj4gMjc4MCA5MTc2IDE1IDk1MzEgMCBzCis8MzcyNzM5MmIwOT4gMTI3MSA5NDIxIDAgMTY4NCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYTBiMGUwNz4gMTI3MSA5NzM1IDAgMTg2NiAtMSBzCis8MDQ+IDE4NzAgOTczNSAwIDE5MjggLTEgcworPDAwPiAxOTI4IDk3MzUgMSAxOTgxIDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDE4MmMwMDNlMzQzYTAwM2MzNDNhMzEyYTAwMzEyZjMwMmIwMDM5MzQwMDQwMzUyNzI5MmIwMjAwMzkyZTJiMDAzODJiMzMyYTAwMzcyNzM5MmIwMDM0MmMwMDM5MmUyYjAwMjExMzFkMjYxZjIwMWUxNDEwMWEwMDM5MmIzODM5MDcwMDI3MmEyYTAwMjcwMDA4MTMxODFiPiAxOTgxIDk3MzUgMTYgOTQ2MSAwIHMKKzw0MT4gOTQ2MSA5NzM1IDAgOTUzMSAtMSBzCis8MjAxNDFlPiAxMjcxIDk5ODAgMCAxNzIxIC0xIHMKKzwyMj4gMTY5OCA5OTgwIDAgMTg2MCAtMSBzCis8MTAxOTFmPiAxODM3IDk5ODAgMCAyMjUyIC0xIHMKKzwwMDM5MzQ+IDIyNTIgOTk4MCAxIDI0ODAgMCBzCis8MDAzOTJlMmIwMDMyMjczMDJiMmMyZjMxMmIwNzAwMmEzNDAwMjcwMDQwMzIyNzMwMmIwMDI5MzEyYjI3MzMwMjAwMjczMzJhMDAzNzJiMDgyOTM0MzIzNTJmMzEyYjA5MDAyNT4gMjQ4MCA5OTgwIDkgNzEzMSAwIHMKKzwzNDNhMDAyOTI3MzMwMDM5MmUyYjMzMDAzYTM4MmIwMDM5MmUyYjAwMDgyODAwMjczMzJhPiA3MTA1IDk5ODAgNiA5NTMxIDAgcworPDA4M2M+IDEyNzEgMTAyMjUgMCAxNTkxIC0xIHMKKzwwMDAwMmQzMTM0MjgyNzMxMDAzNDM1MzkyZjM0MzMzODAwMzkzNDAwMzgyYjM5MDAzOTJlMmIwMDI4M2EzNzM4MzkwMDM4MmYzZjJiMDAwNTM4MmIzMzJhMzgwNjAwMjczMzJhMDAzYzI3MmYzOTAwMzkyZjMyMmIwMDA1MzIyZjMxMzEyZjM4MmIyOTM0MzMyYTM4MDYwMDM3MmIzODM1MmIyOTM5MmYzYjJiMzEzZTA5PiAxNTkxIDEwMjI1IDE0IDkyNTQgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwxMDBlMDkwMDBmMDYwYzAwMGQxZTFjMTMxMTE4MDAwYz4gMTI3MSAxMDYzMyAzIDMwMzUgMCBzCis8MTMxYzE0MWExYzE4MTExOTEyMTM+IDMwMjcgMTA2MzMgMCA0MDY5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjAyZTJiPiAxMjcxIDEwOTk5IDAgMTYzMSAtMSBzCis8MDAyNDIwMTgwMDIxMTMxZDAwMzgzOTM3MmIyNzMyMDAzNTJiMzcyYzM0MzczMjI3MzMyOTJiMDAzOTJiMzgzOTAwMzYzYTJmMzkyYjAwMzgyZjMyMmYzMTI3MzcwMDM5MzQwMDM5MmUyYjAwMjExMzFkMjYxZjIwMWUxNDEwMWEwMDM5MmIzODM5MDkwMDI0MjAxODAwMzcyYjM2M2EyZjM3MmIzOD4gMTYzMSAxMDk5OSAxMyA5NTMxIDAgcworPDI3PiAxMjcxIDExMjQ0IDAgMTM3NiAtMSBzCis8MDAyYTJiM2IyZjI5MmIwMDJjMmYzMTJiMDAyODJiMDAzNDM1MmIzMzJiMmEwOTAwMTAzODAwMzkyZTJiMDAyYTJiM2IyZjI5MmIwMDJjMmYzMTJiMDAyZjM4MDAzNTMxMjcyOTJiMmEwMDJmMzMwMDJhMmYyYzJjMmIzNzJiMzMzOTAwMzEzNDI5MjczOTJmMzQzMzM4MDAzNDMzMDAyYTJmMmMyYzJiMzcyYjMzMzkwMDM4M2UzODM5MmIzMjM4MDc+IDEzNzYgMTEyNDQgMTYgOTUzMSAwIHMKKzwyZjM5PiAxMjcxIDExNDg5IDAgMTM5OCAtMSBzCis8MDAyZDJiMzMyYjM3MjczMTMxM2UwMDMyM2EzODM5MDAyODJiMDAzODM1MmIyOTJmMmMyZjJiMmEwOTAwMjAyZTJiMDAzODJmMzIzNTMxMmIzODM5MDAyNDIwMTgwMDIxMTMxZDAwMzgzOTM3MmIyNzMyMDAzOTJiMzgzOTAwMzQzMzAwMTcxZDA4MjEyNDAwMmYzODAwMzUyYjM3MmMzNDM3MzIyYjJhPiAxMzk4IDExNDg5IDE0IDk1MzEgMCBzCis8MjgzZTAwMmIzMzM5MmIzNzJmMzMyZDAwMzkyZTJiMDAyOTM0MzIzMjI3MzMyYTBmPiAxMjcxIDExNzM0IDMgMzYzMyAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAzMWExYjFlMDMxOTEzMWUxYjEzMWMxNDAzMTkxMzFlMWIxMzFjMTQwMDAyMDgwMD4gMTM5OCAxMjA0NyAyIDM2MjYgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYzA1MDgwYTBlMDUwNjBhMGQwZT4gMzYyNiAxMjA0NyAwIDQ1ODUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMD4gNDU4NSAxMjA0NyAxIDQ2MzggMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMjFlPiA0NjM4IDEyMDQ3IDAgNDg4NyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMjQyMDE4MjYyMTEzMWQyNjFmMjAxZTE0MTAxYTAwPiA0ODg3IDEyMDQ3IDIgNjk5MSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAyMDIwMDAyMTA+IDY5OTEgMTIwNDcgMSA3NzI0IDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDBhMmEyYjNiMGEyZjMzMmIzOTI2MjkzMTM5Mzg+IDc3MjQgMTIwNDcgMSA4OTY1IDAgcworPDIwMmUyYj4gMTI3MSAxMjM2MSAwIDE2MzEgLTEgcworPDAwMzkyYjM4MzkwMDM1MjczNzI3MzIyYjM5MmIzNzM4PiAxNjMxIDEyMzYxIDIgMzA3NSAwIHMKKzwwMDJjMzQzNzAwMjczMzAwMjQyMDE4MjYyMTEzMWQyNjFmMjAxZTE0MTAxYTAwMzkyYjM4MzkwMDI3MzcyYjAwMzkyZTJiMDAzODI3MzIyYjAwMjczODAwMmMzNDM3MDAyNzAwMjExMzFkMjYxZjIwMWUxNDEwMWE+IDMwNzUgMTIzNjEgMTEgOTUzMSAwIHMKKzwzOTJiMzgzOT4gMTI3MSAxMjYwNiAwIDE1OTUgLTEgcworPDAwM2MyZjM5MmUwMDM5MmUyYjAwMjcyYTJhMmYzOTJmMzQzMzAwMzQyYzBmPiAxNTk1IDEyNjA2IDQgMzQ4MSAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgxMSkgMTEKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNCBwdXQKK2R1cCAzIC9DMDAzNiBwdXQKK2R1cCA0IC9DMDAzOSBwdXQKK2R1cCA1IC9DMDA0MCBwdXQKK2R1cCA2IC9DMDA0MSBwdXQKK2R1cCA3IC9DMDA0NCBwdXQKK2R1cCA4IC9DMDA0NSBwdXQKK2R1cCA5IC9DMDA0NiBwdXQKK2R1cCAxMCAvQzAwNDcgcHV0CitkdXAgMTEgL0MwMDQ4IHB1dAorZHVwIDEyIC9DMDA0OSBwdXQKK2R1cCAxMyAvQzAwNTAgcHV0CitkdXAgMTQgL0MwMDUyIHB1dAorZHVwIDE1IC9DMDA1NiBwdXQKK2R1cCAxNiAvQzAwNTggcHV0CitkdXAgMTcgL0MwMDYxIHB1dAorZHVwIDE4IC9DMDA2NSBwdXQKK2R1cCAxOSAvQzAwNjYgcHV0CitkdXAgMjAgL0MwMDY3IHB1dAorZHVwIDIxIC9DMDA2OCBwdXQKK2R1cCAyMiAvQzAwNjkgcHV0CitkdXAgMjMgL0MwMDcwIHB1dAorZHVwIDI0IC9DMDA3MSBwdXQKK2R1cCAyNSAvQzAwNzIgcHV0CitkdXAgMjYgL0MwMDczIHB1dAorZHVwIDI3IC9DMDA3NiBwdXQKK2R1cCAyOCAvQzAwNzcgcHV0CitkdXAgMjkgL0MwMDc4IHB1dAorZHVwIDMwIC9DMDA3OSBwdXQKK2R1cCAzMSAvQzAwODAgcHV0CitkdXAgMzIgL0MwMDgyIHB1dAorZHVwIDMzIC9DMDA4MyBwdXQKK2R1cCAzNCAvQzAwODQgcHV0CitkdXAgMzUgL0MwMDg1IHB1dAorZHVwIDM2IC9DMDA4NiBwdXQKK2R1cCAzNyAvQzAwODcgcHV0CitkdXAgMzggL0MwMDg4IHB1dAorZHVwIDM5IC9DMDA4OSBwdXQKK2R1cCA0MCAvQzAwOTUgcHV0CitkdXAgNDEgL0MwMDk2IHB1dAorZHVwIDQyIC9DMDA5NyBwdXQKK2R1cCA0MyAvQzAwOTggcHV0CitkdXAgNDQgL0MwMDk5IHB1dAorZHVwIDQ1IC9DMDEwMCBwdXQKK2R1cCA0NiAvQzAxMDEgcHV0CitkdXAgNDcgL0MwMTAyIHB1dAorZHVwIDQ4IC9DMDEwMyBwdXQKK2R1cCA0OSAvQzAxMDQgcHV0CitkdXAgNTAgL0MwMTA1IHB1dAorZHVwIDUxIC9DMDEwNyBwdXQKK2R1cCA1MiAvQzAxMDggcHV0CitkdXAgNTMgL0MwMTA5IHB1dAorZHVwIDU0IC9DMDExMCBwdXQKK2R1cCA1NSAvQzAxMTEgcHV0CitkdXAgNTYgL0MwMTEyIHB1dAorZHVwIDU3IC9DMDExMyBwdXQKK2R1cCA1OCAvQzAxMTQgcHV0CitkdXAgNTkgL0MwMTE1IHB1dAorZHVwIDYwIC9DMDExNiBwdXQKK2R1cCA2MSAvQzAxMTcgcHV0CitkdXAgNjIgL0MwMTE4IHB1dAorZHVwIDYzIC9DMDExOSBwdXQKK2R1cCA2NCAvQzAxMjAgcHV0CitkdXAgNjUgL0MwMTIxIHB1dAorZHVwIDY2IC9DMDEyMiBwdXQKK2R1cCA2NyAvQzAxMjcgcHV0CitkdXAgNjggL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yNSAtMjU2IDk3OCA3NjZdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMjRDMjJBNTExQkQ1Q0EyNUQ0NjU0MjQ1MzkyMEE2NzgxNDcKK0FGQzIxRkE3RjRGNTg2MkNGMTcwOUY2QworQkY4QzNFQ0NCRkU0NTA3REI1Cis2MTJFNDkxRgorMDg3QTEyRDBBREI4MkYyOERBOTNGQzIzRjUyQworQ0VBRjUyNDk0MEM3NzYyNTk0N0FCQzE3MjIwMzg0NjYzQjY0NzgxNUY5NEM5NzMyMkVFM0FBMjY1QkYxODBDQUIzQjcxODI3OUFGRTIyRjlDQURFOENDRDA5ODU4RjcwQkE2NDRGMTQxMkNEQzZEQUY2RjgxMEQyRUE2QzUwMjBDRDNENjZEMUUwREQ0NUI3NkEzMDFDMDZCMUNGOTYwMjgyOUY1NDkxM0JGNzg3QTBBM0Y5MzEwOTI0RDg5RjVDMjJDQTZCQjU3M0RCRUEKKzU3MkMyMjhBCis5QzdERDA5NDRDMTRDNjlCMDk2REQ1NjlCMkJBCis5RkQ0MDY2QTZDM0VCMEMxREMyNUQ5NUE2NTM0MTUxRjhBOUZEMTM0RUZFQTI2QjgxODdDNTYyODA2QTQxMDkwNUU3MzZCOEQ4MDE5RDFGQjY5QjAxNENCODkwQjlFQjhBRDM4MzEzRUQ2RTlDMTA5NTFEQzhGRDk3Mzk0OEMxOUJFODc2RDAyM0EyN0I4NjlFMTI4MTJGNjU3MEU3MjVBM0NBMjA2MEVERDY1MEM4RDY4NzI2RjJBNzBDNDYyODMzQkU2Rjc2NDlGNTYzMEUyQkI4ODdDMjY0NDlEOUU1NzA0RURCNTZCOEI3NzQ2MjFCMUFGMDM4MjcyNkEKK0Q5MTMKK0I3OERBREQ5MUY4Q0VDRDJENUZGQjE5RgorMTBCQTgzMTEKK0YxRTZEREY0NjVBNjhGQzI3Qzk1MjEwRTU5CitEMEVFQTlDM0Y3QjlCRTUzNEY5Nzk0QjIzRDYxRDMyOTIxQ0NGMUJDMUIyOUZFQkE3MzcyRkQyOTVFQjc4NzYyQjNDRTdDM0IyRkM4NTdDNzVCQ0Q0RTJCNzQxQjBEOTdGMUI1MUUzQjIwQUNDNjc0CitGMkQwNUY2QQorMjU5QkU1MEI0MDVERjY4QUZCRjZDMkVBOEYKKzQzNDlDOUQ0MThFQUQ3MDJCRjNERDNDNTNGQzY0QUNFRTE0MzQyQkJDOTkyNzk0M0I0NkM3Mjk0NkNCOUI1RjFENjI1NTc2QTdFNDdBOTc3ODU5OUMxMjVGMDlBQzY0QzdFMUIxQzVEOEFGRDU0OUREQkNFOTVFMDFDQUZBRjE0Cis2MzMwOTZENQorNkI5ODNGRjhGMzM4OEU5RDVCNTcxMjgwQjMKKzMzMzQxOUM2RDJDMUI5ODNCRTlDNERDQkI0N0QxMkI4RDQ1MEIwNDcwMTlFMTQ0OTk5MjU0OEQ3NDExMTFEQUU4MjhGM0ZCQjBFNjA3Njk5RkMzQzk1Q0QzQzg2MDBDRjc4QTYxOURBREU3QkVFMjA0RkY2OUUzMEUwODI4RgorNEU2N0E2NUMKKzREMEZCNzlDMDFEMDU5REIyNEZFMjBENjY5CitFNjVBRDdENDhFOUQ3MUI4RDIyREQ3OERDOEM0M0I0NjJGMTVBQkQ4QzY2QTcxQTRBQURGRDc5N0Q3QzhDRDU4Q0QyMzZDRUI4OTY3MUU4NjMwQjk3Mjg0MkNFNThFNjVBQjIwODRFNTA0RkRFQThBQUUKK0YxQTZFQjg3CitBRUZBMTU5NzA4NzZGRkFERTlBNTQyNEQyNAorM0FBOEJDN0U3QjNEOTNBQjkwRUI1NjJBRUJFNDc3QUU5QjkyMjE5MDc4MERGNworN0ZERkEwRTAKKzlBMUIwM0U1OUI4NDg4NzEzODA1REE4OTYwCiszMDlBODZGRkI0QTUyNEZERUQyNTQ0RTI2OEMxMjkxNDAxMDhFOEI1MzYzNTJDOUI5RTI0QTdBOEEyMDUzNworQjE0NkFGRUMKK0EwNDcwODA0MEU4MEU0NTAwRjkwMTFEODUyCis2ODUwQTg2MEUwMkE5QTRGOThBMTUzM0FFNkQ1RkZCN0EzOUNFM0FGNTA5ODUxOTc5MTQ0MUY4QQorOTdDNjY5MDIKK0RBM0RCNDJCOEMzRTYxNzAwREQzMDI4NUUxCitBQjc5ODM5NEE5NjQzREY1NzVDOTNBMUU0RkE1NEFCNTBDOTIzMjA3NzdDMTZBOENFREQwNTFFNDJDNTI1QTJGNzZENTMwMjYzOTA1Nzk0Rjc5RUFFQzMxRjM5NkFDNzMxNDM0NDg0QzExMUVCQzc0MDcwMDQ5RkI5RDA1OUUwOTlCNzA1QUJGODgxQzg4MUI5RjFDCis0QzhBNDBBQgorQTU2MkVDODEzNzgwQ0I4N0IwODQ3NTE2RjkKKzE4NTJFMUZBOUEwMkRFQjUyRTY3OTcwMkQzMzU1NDNFRDFFMzEwN0EwN0Q0M0I4QzNERTNCOTZGRjUyNjNFMTQ1REVFREVEOERCODJDNUU3QjdEQjgwMDFBNDRDNjQ5NUNCNzY1NTlCQjA5Mjc1QzEzMjRFMTA1RUE0MzdCRgorRDk1NzgxNDAKKzZDNjgwNjUxMDBDRTE2REU5QTRFNEEzQzIwCisyQTM3ODQwOTU3MUU0RjY0Rjg3NzQ5NEIyMzhGNTc2NTlEQjUwNDIyRjE4MDc0QkIzMDkzOUQ0MTQ5NTJBNkU0RkEyMjM2NDM5MzU5NUExRjNERTgyNjk1NzIwNEFBQTY2MjA3N0IyRjUwQzhFMUU2Q0M3NTIzRkE4MTgzMkNBQjQxNEFGMkVBODJBRDAzQjJFMDVCRDhFQzk5MTlFMUQ2OEUwOTFGQzJDODBFRkRCRjZFRkMKKzFGNzE0MUVECis5REQzODBFMDM1QUM1NDlCQ0RBRjJBQjI3NgorNzVDQTUyMjg2MzJBQTRDMThDQUNEOUQ3QjlEMzE4NjcxOTkzMUM4RTY2NTJGODBCNTZFNUZGRjkxNzhDNDgwMDIwN0Y3NzYzNDNBODQ3MTczODA4Nzk2NTRCMDc1QTM3QzdBMUIyRkEzNjE4NTkwNTNDNjMKK0Y1M0MzRDlBCitENERCNzA3NTlEMjA1MDVEQkVFNEQwMTM0RjZDCisxRkM3NTgzOTZDQUUyNzJCNDhDQ0ZEMUU0MzAxRkRBMjRCOTEyN0I5QTExMDA1MUQ5NkY5NDM3NEY0NENBNzU1NjQ3NUQxQUM2RkZFRUJBRjlERThFRTM2NzE3ODVFMDRDOEQ0NzQyRDg1QjY2RDAwRTk1NkExNjdBQzJCRjY1QzEyODZDMEFERUQwRkJCNDVFRkNENzIxQzk2QTJCNTYzNjBDNUQyM0Y2NENFNjk0QURBNzA2QUI0RDgxMDY4QzEyQjIzRkExQ0NGNjZERDBCMEFDMTM4NzI4NzkyMTJDMjhDMDdEQUI5OTQ2NUE5MUY2RTI0CitENDBBRUE5MgorNjMxMzA4N0JEODcwRTE3NjUzQjlBMEZDNjAKKzA1RkY0MDk3MEMwRUYzQ0ZENzlGMENBNDBERkU1MTA4ODRBQ0UwM0E4OTk5M0Q5MDgxMDAxMDZCQjc4RUJCMjU2NURGMzRCOTQ2ODg4NENDNUU5M0E1MDlDMDZCMUZCMjU3MUJCNjE4MDYwRQorQTZDQkFCNUQKK0YzNTUwQ0NDOUI0RDQ5RDJDN0Q4OTI2OUU4Cis4OEZCQTFFMkE4OUY3NDJEQzQ3RjRFOEFENEI1MjBEMDBCQjY5N0E2NTVCM0U0OEY4RjM4NDJCQUM3Mzg1QkM2RTRENUUyQTkKKzBCMzRDNUU2CisyQUQ2ODBGRDFCQjhGRjM3ODIyOEQ5NkYyMTkxCitBRUI0RDRFREZEMUE1M0E2MDI2MjYyRTk3REI2MkQ4MDg3OUMyMUUxMEUwRDg1MzVFQUI0M0VCNTE3NTExMDRCNUREQzAxOTE0RkVCMDI5QkI5QkUyQ0E0QkE3OTYxQkYyNDAyNUU1MjIyNzk1REQzMzQ2RkJDN0UyRTlBRUIzNTk3NzREMTUzMzk5MDYwQjJCQkI0QzcyNkUzRjBDNDFEQzM3MzI5MEI1RkYyRDZEOEJENUJGQjlBMDE5NjkyNzY3MERCMzM1Q0Y1NEFEMjIwMzJFQjhGQUE5NTEzQjhGOUVEQUY4NQorQTNDQ0NGNDIKK0E3MjFBNEI0NDQxMzgyNEY3MEUwQTRBN0MzQzIKKzFFMzIyQUU2NkFCNzM3Q0JENDlGNzA1NkVEQjgzNUFGREUyREI4OEZGNzYxQ0QxRTQ4NkU2MURGRTU0MTU5REFBM0FCNDE0RDk4QTg0NDlDOTY4QkFDQjQzNjc3OUMzNzI0NTAwMTNDNDFGRjk3MEI5QTA3Mjg0NkRGN0Q5NTNCODg2OTM2OUNEMTc0MDEzNTAzNkRGRTc4NTc1NDc0Q0EzNzE1NURDN0U5MTJDNkI0MEI4NTNCMjFFQUQ2RTUzQzFCQzExMkYzQjA2RDQyOTI4Qjk3NzIwNjY0RDc4M0VDODVBQ0IwN0VDRkEyNzgwQzcxRkQyNDlCODMxRgorMDA3RAorQjMKKzFCRTlGNzA5Cis3Q0YxMkE5RjNFMTg1OTNFRTM0M0UzOUE4RQorNTlBOTQ5MEQxMUFBQzE3NTU2NzY2MEZDQ0RCQUIzRTE3QTU3QkIxQjM2RDY3MzNEN0MzMjk5RDBENzQwMDc1MUQwQ0U3M0M4MEY2NTA3NDA4RTI1RjUzODIxMDk3QkQzQ0Y0NkJGMEY0Mzc5OTVBMzE5QjNBMjJCMDI0OEU5Q0FFQzI4MDMzQ0Q5MjlEMDJGODI4MDcyODZDN0MwQjk0MzBCMzA4MDkxNDE2MDQxQjhENzEwRTYyNTZBMUUwQjE5QjQKKzkxMUIwQUI3CitCRDdCNDE2NUJCOTczMTNDNDY0RjgxQTU1NworN0JENEIyNTU2NTczNjczNUY4OTc3QTE1M0ZGOUZBNzkxOTNBMjlCRjk3RDEzNzM2MkIxRTA4RDRBOUUyMEZGQ0Q1QTQ3MDg3MUJEQjFBQTQxOTMwNTIzMTE2QzI1MjYxQTkxQkQxMUJCOEQ2QUVDNThENEI5NkUzRUVFMTg4NDc3RTQwNTgxRkIyNUM0RDVDRjRFNzNGQThGNjhENThDNjNBN0M0MTI4MEM4REZCNTE0MDUwQjdEQTY5M0RCMkE5RjQyM0RDCis0MTQ3RTNDNgorRjY1NzcwMTJCOUQzNTVEMDgzQUI2MkMxRDEwQgorRUY3RkU3NkM2NkE2QzUxMDcxMUNERDYxODRGNTUxODg2Q0ZBMjFFRDY3NkYzRUM5ODFGMDZGMTBGNjQ5NzA3ODU3OTJCRUJFM0QyMTgxNDg4MUI2MTE4MDgzQ0UzQzM3RDU2RUUzRDdENUQ5RUQxMTYzNzUwNzYyRDBFNDQyNDMxREQ5MjJCNDY0MDVFNkU5NjI3NDE5ODc5RTcyMEI2Q0JFQkUyMjdERTJEOUI4OTMwMTBGRDdBRjkyMjJFQUYyRkI3M0RBODMyRDIyMUVCNzBGQkI5MzhDNjVCMzJCQzI5ODk3MjFGQjU4ODBENjZBNjBGQzNCN0NBMDQ1CitEQURFRUMyNQorRkVFNkEwRDU3NUNGRENFOTIwNTBBNDdFQkU0RAorRDVDMUE0QTdFODcwMjRERDYwNTY2OURDQjJENjQwRDA2NzQ4MTU4RUFBNTU1MUY3QjBEODE0QjAwNzhENzI4N0YwNEY4NDBBNEYwRjhFODkxRTA0RjdCNjY0MzZENzI1MjQ5MjQxREM1MUE0QjE3MDQ0RDExNkExODVFN0VBRkFDNzI4OEIzMUQ5QzNFQjVCRTJDMzIzMTBFQTdFQTdDMUIwMzRFRjdDNTI0ODU2M0Y5MTVGRkMxOUI1MUVBNzQyNEQyOEM3NTlFM0I1QTk3NTIxCitCOTcwMUE1RgorNzIxNzMxRTYzMENENERGNUNDMjk2NTVDRTk0RQorMDc2OEY0RTk1RURBNEY4RDZCNTNDMUFENTBDREI4NzkyNDYzMEMxQjUyOEZEQkE2NzZDODhCMkQzMTgyOEFDQzMyMEQzM0M2NDJGQkUzMjEwRDNDQ0NBMjlDREVDMTM5NjNEMzQ0QzRBM0UxMzBFMzRBOUY3RjU4NkYyNEIyMDE4OTc3RkQwRTFGRTQ2NTJDN0VGMjREQkRGQzVGQzBGODM3NDZGNEQxOTg5ODRCQjM5NkRCQzAxNUUxM0YzNkIwMUJBRDA2MTJCOTgxMDgxQTdFOEY3QzUwQkUzRDRGQjU5MURGRThGODUzOTNBOUFFQTFEMworNDRDOTdDOUUKKzY0QzQxOERBQ0IyQUMwM0EwOEYwMjMwNjlERjgKK0QxNjJBMkI0QTg1M0VEMDU5M0IwQkM1MTkxMjgxQzFFQTYwNzVGNEQ2RkY2QTI5MjRGNDNCMjk1MDU2NDk1MkU5QTJCRjBDRjRCOEI0MTE2N0ZGMjlDN0U3RDEyODQ3NUQxMjlCQkFCRUE0QkUzOTkwNEQ1QkI5MzcxMjY2RkVDNDdCNERENkYxM0M4RjBEQjE0MDRGNTJBNkRGNEE0RTQwMkMzQkYyQjM1QjhBNEIyM0QyNzQyQjlGRTQwM0RGN0YxOTZDQUU5MDIyQzM1RTBGRUQ4OTAyQjE0RDAwMTAwRUQyNzJFNTY4MUQzQjFDRkYzODdEMUZGRjkyOAorNDlFQQorM0FGMDA4MkM3NTI2NThFRUUyOTY3NAorQTA3NzZGMjUKKzg2NTg1NjYzOUQ2OTgxNDUyODc1MDI3NDdECis2RjRDQTFCQUQ3QTkwNkEwREEyQTExQjc3Q0QxRTBCODM5N0QyOTRGNzQzRTQ3QTI4QjBDQkM1RjY3QTc2NUFDRkRFMEZCOTczNjY1RThFRUVEREY1OTI2QkEwMkI1NzkyRTk2OTlCRTNCOTkzRDZERjI1OTZCCis3Qjg5ODc3OAorQUVGMTRBMjI0RjkyRTU0NkQwOTQ2ODJCOEYKK0Y2NUQzRjU5MjBEMTYzQTY2RUJFOTNBNzVFRjhDOEU4QTY3QTQ2QzU3REQ0MUM4Mjc3NDQ3M0IzOTAzRDUxMEQ5MkYzMDZEMUNENEE5RjBGRTZGOTA2OTU0MUFFRTk3NDc4NjYyQ0Y1RUZCMjVEMTVDNzhFMkIzQUY2REI4QTI2OUNBMTIwN0Q4RDE3OEYKK0UwQzdFQzNFCitFNTM2MUM3QzY5ODU5MDVENzc5Nzg1QTU3RjkzCis4M0FBMjM1N0IwN0VFMUFFRTlCRDNFRDY3RURGN0QxOTA3QzZDMEI5OTQxMDZERDkxNkQ3MkRCMzBGQkNCMzM2MkFEMTQ3REVFMjMyRDIyOTUxRkQzQkYwQzNCMUUwMzJCOTAwOEExRjZCMkJBNkY1N0VGQzUwQjdDMTJCMENEMjI4MjhBMkFCMkEwQUFBMzY1ODdDQzIyMTg1MUYyNzVENTQyRTYxRkQ1MkMyQ0VCNjg3MkNBODlDREQ3OEIzRjUzMDQ0NEEzMUE1MkQzNkM5QTBGQTIzMkNBQkYzNTAKK0RDRDUxNUUxCitCMEUxQTAwNENCMDlCREQ0RTYzNDU4QTQzQgorRDQyMzY2RDVERDVGQjVGNzU3MDAwRDQ1ODY4QTU0Njk5OEM3RDREMDM5MjBCMEMyNUM5REU5Q0I4ODg5OUFFNThDNzE0NDY3NzdBRUY2NDhDMkQxNDQ3RDRFN0QwMUZBQzVDMDNBNUU5QTI1QkFDQkM4QjAzRDVGMjdBMEE1QjQyNDJDRTc1Rjc5MUU2RTRGM0NEODQ2MzRERUVFNkI5MDkyMEU3M0JERjU1MUJFRjNEQzVGNEY2MworMzBGOUI2NzEKKzEwQzkzN0I5RjBEQTUwMzY1ODM1MDQzOTAwCitDRjNCQzhENjEyMjlDNzhCRjZDQkUzQTJEOThGMDFBNDFFMTlEOUQwQjRBODY5QTU3NjlEQzBCMkE4RDRFMDJGMjUzQkQ2MjMyNDZBQjBCNEFGOEZDRjU2Njg2REJFQTQwOTA1MTkxREVBMEExMURGNUY5NkM0NUJBOTRBRDZCQkNFQkFDODVGNkNGN0U1NkE0ODM4QUMwOTg1MDkyQ0ZBMUU3RkM5Cis5OEJGMkI0MgorQUQ1RkM0NEY2RDlBQ0U5OEQ1N0M4ODc2QUQ5NQorNDBFRDdEQUY5QzJFRjU2M0JCNEJCQ0Y4MkM1NzQ3NjAzQTNENUFCNzdGMENBODlGRDJGQUM1QThDOTk1QjI4NTYxQTk2M0M2MzI0MEFFRUQ1MEJBOTVFQjc2Rjk1MENGMzcwNDhFOUIyOEFDMDQ2Q0M2RjVFODkwMTQyMUVDQjAyNzRCQ0U0MTgwMkU4MkUyRDUwNEMyQjFDNUE1OUNCNUMxRkVCMUVEM0MyOTVCOEY0NENDMTY2RUM0MzczM0NEN0JBMDRGNjFBOEMzMjQ3MTNFODEKKzg2QTkyODQzCitDMkNGODEwQjM2NkU0NTVFMDM3NTQ1MzU1OTkxCitCNDUxMUUzOTdDMERDNUVEQkExQUM2MUZFQTc1NzYxRjc3ODQ5Rjg5OTQ2NkQ0MTg4QzkyNEZGOEIxMjk3NDgxQTI2Q0NDMDdEQjczMEFGNkQ4QTVGMDE1MDVFRTBDMkEzNDNFMzQ3OUI4MTU0QTEzMkEwMEYyRkZGNEEwRUExNzgyMkM4MTVENTY1ODczNTRGQjA5MTZENTRBNDY0RjJDM0MzM0VEQ0VFODMyQ0JGQUVEN0U3RTgyRkFDNjgwM0UwOEMzRTRGMjQ1M0IxMzI4QzQwMkE4NzNFNjg4RjZEN0Y3MURCQkE0OTg2MEFGQjgyNkM3MUNCOThCM0EKK0NGMTUwQjhECitFM0M1QjE0NjdFQzQzNjcyQzFFRjg0Qzg1NzE4Cis2NjQ1QzQ2NzU3RDRDMzBCN0YxMDU0OUVBMDlBRERCNjU3MDVDNDVDQ0I2RjUwNTJGRTVBMDEyNDEwQjVBNERFRkMzNUU4MjUxNTIwOTBGNDgzMjk4OEI0MzE0NUYxRTg4NkQ2OTJBQ0FDOTM5NzY0QzNDNkIzNzFBMkE5NzBFNERGNzQ2OUQ1MjdGMDkwNjIxRjY5RTlFQTRGN0M4QTdERjVDOUJBRTFGMEY5NzcyNzNBMDZGN0RGREUzMzE2MEZENEM1NzVBMkYwRTA1RjI1QzkwMjAzNUVFRTRGODI2OEVBRTc1MjNBMzAyMzFCMDkzMTlBNjlFRDhFRjMKKzVGMjQKKzNBMDYxOQorQTcyRDk5NzYKK0E1MkRGNjgzNDYzOUM1QkM5Q0YxMDMzMThCCiszN0JEOTZDOTNDNTRCMzU5RDBGMEY5Qjk2Qzk5NTRFNzQyMTE1QkZCOEEzOUU2NEQzOEU3OEJBMkQ3OEJFNkVCMTkxMkFEMEVCQjVDQ0FBQjAzRTk1ODQ4QjZFRjhBMzY3QUNBQ0ExQ0Y1OTA3NDc3MTQzRDNEOTJEMzk1NzQ3MkNCODM5NjYwQ0VGMEQ4MDM3Q0UwRjEwNEE4NTQ2MzA1N0IKKzBEMDJCOTVCCis1MTVCMEJFRjYwQjNBMjlBQUNGOERFMURBMUM4Cis2MkM5QkRDMzA4MTEzMzJBQzhCMEE3NDQ1RDQxQkQ1MTkwRURCOUEwNTNCQ0VBN0I5Qzc0RUJBOUI1MzM5RTQ4QkQ1RjQ1Q0RDNDYzQjA4OTYxOUQ5RDIxOUI4RTE0RUNBQ0Y3NTA1RkEyMURCRjNGNjIzNDc0M0QzNzQzMEE0QjY1NjQ2NUIwRTQ1OENGRTU5NjEzMDNFNkMwNzAzRkQ0MUU3QjNDNkJBMEZCNjM1MDU5MjdCMjZDRkZFN0IyQ0QzRTVEQURCQworQjg2QUE1MzQKKzM5ODlCRTFGQ0IwNjE4MTc4NDlCN0Q2NDk4CitBMEYwQzM1NTY4MDEzNjFCMjZGMTlBRkQ2M0Q4ODk3OEM4OUZCMzJBNTVCQTExM0YzNjBBMUY2QkI5OEVDNjdEMEJCMTg1RDJEQjFERDJENTM3MUY3RURGNjVFM0M3RTg4NzU3MjE1ODNFODNBNTUzMDBBMEE5OUFBMDA5QUU0NDVCMUQ1MjQ3QkQwNUU4RTlFNDhBMTVDMEJFQUY1MTk4NTk2NkU0OEQzMUEzMTEwOTgxCis1MjQwM0RCNworREMyQkVDMjk5MEIwNTk0RDZFN0U1MzlGQjc4MAorMjdDN0ZDRDA2MjQ4MzI5MDBBRDNBNTc1MTdCQzAzRUQ3NUE3OEQ0RTlDM0IyMjc5RUE1MUQxOUY0RjI0MTUxMDI1RUZDMzMyNjczRDkwQ0FBNTBFMDA2OUM5QjY4RTAzRTIxMjI4MUUwN0IzOUU4M0UwRTY3RUQyQzY3MjI3NUY1RDU4Q0ZGMUY1MTkwMzY4ODJDODI4MTVCNzc1RkM0MUE2QjlBRUJDMTk1MDRCNjI3M0I5NUMwNzMxNzZGOTE5MTdEOTI1Qjg5MUUzQjIzMDYyRkVCMDE5QjUwRUQ1MTE2NTZCRjM4Mjg2Mzg2MTdGMDY4RTdBNThBRjM5Cis2N0MzCisyNDQ1MzU0QTZCMjQ5RkZFRkYwRkI1OUIwRENGNkE1OQorMzAzNUE2MTcKKzdBNDc0QUU5RUIxMThBOTdGMzhERDg1MjIxRDUKK0Y5MjEzOUJENkQzQjBGMjNDQjc4QjBBRDFCRUMzMzRCQTZCOTE3RjlDRTkzM0UyREZEMTIyQjJDRDhFMzRCOEU3NkNGNkFERkM2NERFNjFCRjlGRDY4RTQ3RjNGMEJCMTExRDMwQUU4NTY2NzQ4MTcxNEQ3QkNBN0REOTQwRTVBRTEyQUE4N0I5NUZBQ0MyNjg1RkQyRjQ2MEQ4N0M5QTJEMDEzNTg4QjM5MDExNTRCQjMzNUY1RDcwMzYyMTUxQUNFQzhERUNENjE3NUU2MjEyRjZCODQxNThEODMxMDI2MDE3MjhGNTdCMjE4QjQ2MjdGMDhGNDg1RDI5OQorNUUwMQorRDFENzFGQ0FFNTE5N0JDOEFFODkzQjg4MjkzRkQ2MTkzMTNEQUYyRDhFRjFCQzdDODA3RjlFQ0FBODQ1NzMyMUQxMkEzOTA1RDg1RDIwCiszQTMxOTM4NQorQ0M1QTE3MzE0RUFBMzk0N0M2RjAzNkI3QTM2RgorRUJENDg5QzA3NkZGRjU4QjU4Q0NDMTZENERCNTYyNzYxNzk3RTc2MzI2QTY2NDE1QkI3OTA3QjNDRDE3Njc1NEQzMzFBOUM3MzRCOEY5RUEyRkIzNzY1NDREOUJGOUYzNzBCOERENEJCRjA4MjZCMTYxNTlEQjBGNjUxNzcyODhENUYzNEY1NUEwRTlDMzRGMTc1QUQ4NTk4NEU1MTJGNjM2ODE0REU2MzczRERFRjZCRkQ5MDRDOTlCREY0NjVFQzg3MDM1QTc1MzVGRjk1QTY1QTlCNjExNkJFMkRFMjcyNkJDMUYKKzZDMDc5MUY3CitGQTlFMzA3MTBCQzQ4MjVERTM2QzAyQzcyRQorMTM2ODhCQzU4QTg2Qjg4NkEyREQ4Q0Q4RTM1NzU4Mjg4MDIxRDJFMjg3QzkKK0UyOUY3OTFCCitFNTRENUE1NEREMzEwN0Y0RDg4MjQ3REU2RQorRDhEOTFGMzI1NUYxREMzRUYwQzJFOUE1MjlFN0NDQTA0N0Q3QUNENDBCNDhFNTI3RjY3NTA3MDA5RjczRkVGQ0U3NkJBNkQxQzU3Q0UwQjRDNEVGMjFCQzUxMDdEREQ2RDIzQzEyRTkwRDJDQURCQkU0NzAKKzc3QUYxOTE5CitFNEM4MzkzRDlERTIyRTI3MDcwQzZFMDQ3RjA0CiszRjRENzgwRTI5NDQ1QTlCNDlGQUREMzU4MjFCQzlEMDZBNjMxMERCRjdCQTgxRDVGRTc1OTdEOEI3MkM5MDg0Q0RCQjEwQjI2MDAzMzI0MjY4RTlDMDdEMTZCMkQ0MUVENkU4RTlBNjk2M0EzNUU5MEMxQ0E1NENBMjg1ODFBQ0MyMUM2NzQ1NTBBOTJBNkM4NzMyNTcwMjk4NzNBNERFRDhCNjUzNUE0NzJCQTJBMTIxMDRDRTA0MkIyQTczNDg0RURFQ0ZGODU5N0MyNDk3NjdBMjBCQkFCNTIzQ0JFMDg5QzhFRTEyQkZBOTBCQ0VCQThFMzI3QUJGN0EKK0U0MDEKKzcxMUU0RAorM0U0NjY1N0EKKzg3RjhFNUIzNENGNjQ1MDFDNkUwNUM5Mjg5CitENEExNEU5OTcxQzQzMzU5RTJGQ0ZEMzk4MEUxODQ4QzY1M0QxQkIxMzY1QTk2QUZDRjc0MkVGQTRFNjMyMjA3Q0M4MTcxMEIwQzZFMzRCNzQzMzZBQTUzQ0MwODIzMTk5REU3QzhDQkI5NkM0QkRDOTM5NkQxOEI0OUUyMzAwMUJGNDg4MjcyNDlBREQ5ODExMjM5MzA5MUQyMzhFNjRCQTFGODk1NUM3QTlEMEYxNAorRTkxMDhEOUMKKzUzNzU5OTJCMjRFNEZBQ0U4QzlEMzQzMzFCCitGQTlDOUEwODExQTZGNzg0RTNERUQyN0RDNzVBNDZEQzI2RUFERDIwQzI5MjFBOUUyQ0QyOTJCMjNDMUE0QkNFQTNCODM1NTMyMkZBOUM1REY5QUUwNTYzMjU3MkE5NkUxODU1MDE2MzdDNzlDQ0Y2OENBNzlFMTU3RjQ2MzU1MzZEODM5NTJEQ0Y1RTE2NDlERUI2M0VDNjFCRjVDOURBMEEwQQorMUI3OEVDQjEKK0JCQzdGNEI3QjlERUY5MDQ1MzVERTkzRjJFMkQKKzNEREIzNTIyOTFCNzA3OTUyQ0I2RjZDQjAyNkRCRTAzOTA3QjU0Q0U3OEQyNjU0RjdGRUIzQjEyQjRBODREMDdGNUE2ODU3NzlDRDA2QzQ1NEUzRkE3RDAwM0ZEQUVCQTY5NjY2MzA1QzBDNjg4NUM0MkY0MjhDMjQzOThCMDMyQjcwMEU2QzgyMkZFRTY5M0ZEOTBDOTA5MUNGOEFCQzcyRDQ3MUZFODU3OEFFQTc3OTlEODBFMjgwMjI1NUFBQTY1NERDM0JFRjI4QzVGODlENUY3MzhDMDk4QjUKKzU0N0M1QkQwCitBQjBGMEMzQkQyRkM0RkQxQjEyMUUzRjlDQgorNzJCOTlENUJDOUQzODNCMDZCOEQ1Mzk5QUNDQjYyMDI3QkQ2ODk1MjNEODI3MEQxOUJGMjUyREM1MjU3QTUwNEQ3OTFFQTJFNkM1QjdDNzgzQkM3Mzg2RDM2MTc5QkI5MDhEQ0ZFQUIxQkRFODlCMzE5MjUyNTJDQzNDMjE0MTVFNjQ2Q0Q0QTU4MTQyNjZCNUQ1NkVEMUFBRDFDMEU3QjY2NUNGNTIwRTYzRjRBN0M3NworQjYyNjI3MDgKKzVGNjhBNzI2MDk5QjQ5N0I5RkYxMDMzMThCCiszN0JEOTZDOTM5M0EyMUM3OUM3NEIwNDM3NUJFNjAxRkMyQkY2M0ZGOTY4OEFGRkJFNUUyQjBCRURDRkExMkQ4MEQ5QzJGMTkwODE5REVFOEQzN0QwMDFDRUZBNzFGMTdGMEY3MzlCMDdENTRGOTAxNzU5QzYxRUYwMDM0NTFBOUZENkY1RURBODkyMzdEMzg5QUNFNEEyM0FFMzQzQThDN0FFM0RFMDY1RDMwMTFCQkYyRjQ3RDNGCis3NTUxM0E3NgorMzY0MkZFNkM5NzdCQTQ0NUI5NTZCQTBGREZGMQorRTc2Qjc0Q0U2NjdCRTJCMTA3OTcyNUI4Njc5RDM5N0MxN0U3RTRERTg1QjNDRDA4MDdDQzE3NDVDQTJEQzFDQTU1ODc1OTRFN0ExMzJBNTRCRkREQzZCRjg0NURGNjg5RjBDNENFOEY3NjYzQzY2NEQ3MjQ5NTFGMzRDRTVGRDFDOEFCNEIyMDJEMzExRUUxM0ZGNDQ2OEJDMkZCMjA0MzgwQjQ2OTc4RUU4OTlBMkVDOTQzQkVGRUNCNTZGMThBMzY4Njg4RjQ4NjY5MTVFNUY4NDIzMUE1NkVDQkQ4NkMxOUQ5M0I3OUIzMUJCMEExODI0OUY2MDlENDIwCis3MEExCitENkRDQzREQkI2NzdGOTY4OEY0NDc4RDQ0QjJDQzY4NDE1RUJCNDlGQjIxMTg4NEZDMzNCM0NERkRGNDhCQTVENUJGQTVCMkZGMzg1MUYwN0ZFQTY2N0NDNzBDMjdCCitDOTVDRjhGOAorNEQ2RkVGQ0NCN0Q3NkExN0Y1MDlCMENERDVBRQorMkNGQ0FGM0E1QUU2NzE3OTZERTQwMTZFREI4M0E0NUZFNDY4RUVDMEY4RTgwNDE3NUM3NDVGN0YxMkQ1MzcyREEwRUZCN0JGRDk4MDcyQjdBRDAxN0Q4OTk5QzVDRTlGNzlDOTAxOEFBQzU1ODQ1RkI0QzdCMzU1Qjc4NEJBMjJGMDMzNzlFRTZEMThCQkM5M0E2NDI2MDBGNjE4RTEwQUE1NjU0Q0UyQjAyRUJENTlFRkU1MUI4OUFGMjM3OTM2OUEzM0IwNTZDN0JGNkQxNTEyRkJGM0M4RjAKK0NCRjJGMjgyCisyNEY4Qzc5RUUyQjBENDBFRjczMEEzMTRCMworRTU1RURBNUVDRUQ1MDdGMTY3MkFBM0MyOUQ3OUM2NkRBOEZDRDMwQjVGRDExREY3OUUyOEM2NjNCMTIyMkVFRTI2MkQzMzcyRjc0MkYzMTY5RTlDODRDREQxQTZBRTFCRDMzMTk4MTUzNTlCRjZCRTA2QzU2RDU3MzQ1NjkzNzlBM0VCQjI5RjZDRDZFQTRDNDgzOTg5MENGQTZDODQxMworRjUxNzBFMkUKKzk4NTBBOTc0N0VERDM5MDhCRENCNTJDRjk5MTkKK0MxOUU5NzgxN0MxODdDREIxNzUyQkIyMEFGQUEzQzAwNDQ4MUE5RkE4M0E5QURFMDdFODMwNzEyNThEQkNGMDgxQ0UxOTZBRDRGRDA2Nzk4QUUzNjZDOEI4RTY4RTdGOTk0RDc4OUE0MDQxMDk3Q0Y1OEQ3M0M5Mzc4MkEzRDIzNUFDQzlEOTI5MkUxOEZBRDFENjA4ODMxMzJBOTY4QTQxMTIzRkQyOTNBMDNENzlFNDdBRjhBOUVDNzAwMjhEOTM2OTdFQTMwOTJCM0RDOUU0NjZCMzdGNkVFNjAyMUU5MjgxNEQ3ODNGQTc3RjlBMjg3Qzk4MTE4NjBGNQorNDJBMworQzVBMDYyMzRENUUxNzQzNzJDNjY4MzUzQzlFNzAzQTE3NzRDMUFENTMyMTA3M0FFMjFFMkRBNTY1MDZDQzgyMUMzNzQ5OQorQkY1NzE1MTkKKzBGMzUxMUIwQjhFREM2RDVERERGM0YzMzE2CiswMkZFMEZDMUFDMjJFM0JEQjU2MkJEMkZCNjUwOTk1QjgzRDlBQjRBOTQyMjBDREM0RUU1Q0JFRkU0ODBCQzg1RTY3QzIwQTVCRUY0OEJFODAzQzk5Qzg1MTIzRTU1ODIwNDc2NkY4NDFENTMKKzU3QkQ0NDYxCitENTI1MkFBNkRFQkE1MERBODRGMzE1RUVEMjhBCis2MzY4MDlEMTUzRDIzRTMxOEQ3NUY4NDVCQkZFQkYwRTU4MzMxNDYyQUY3NzQ3MUExMDYwM0E3RjVBREYzOTNBQ0NBQ0M2OERDRjVFQzMyQzdEQzg1QjQ2MUQwQ0I2RkMzNUNFMUE1RkU0QTA2MzJGRkE3MkI0QThERDQ1RTI3NDg2RjA4RDRDNTg4NDU1OEFFNzM5RjVFQ0M4MDVERjhCQzczMDI3N0JGNDlBNDhENUFEQzU0RkM2MTY2RTcwMEI1NTQwNDQ3RTNGOTBCNzdCMERBOThCRkM1OUM5MzI1Rjg1Mjg2MjM2QjRCM0I3QThCNEU2OEQ0NDVBQTMKK0ZFMUEKK0E0QjlDNDA3OTU3ODkwN0YzNjI5OEZCNkZGODQwNTkzNjg0QzgzM0NDMjczQ0IxREUzNEE1QUFGOUNDRTM0CitBNzYzNzYyNworNzU5QTJDN0EyODk2RTNEQTQ2MkRBRTMzM0RBMworNzkyRUU2RjkwMkI3RUM4QjY3RTY1RUI0REZFQzVDMDcxRjVGNDg3NDYxMURDQ0NFMzE3NkRFRjI4QUZDNDE1REIzOTJBNjMxQjg4OUNEQjAzQ0NFRDg4MDREODE3OEUxMDk1NDQ1ODE2N0QzRjY5MjcxMTMxRkNBOTIzN0RFODg4REQ1MEEyREQyQ0I3QzlGNjk3QzYwMjQyNEM4M0VCRDAzRjYxREYwNjcxNEJGODBGQ0IxNEI3ODM3MEQwRjVFQ0I2NjlEQzI0MEFCMTM0NUQyMjA5N0NDCiswQzI0RDU4QQorM0I3NDY3NjI0RUM5MEEzMjQ3MTlFMEVGMTcKKzJDNzJBREU5M0VCQjFCQzQ0MjZCODg3NzYyODJBOThEQjA4MzcxQTc1QUJCNTFFQjBFQTA3RjQ0MTgzMjc1Q0RFODk0MDY1NTMwMkZEMjVGOTk3MkM1Qzg4N0ZEOEJCOEY0NzREOThBMTFGMzRBNUUxNkRBRDg1NjVGRjY0Nzk0MzY0MDY5NEJGNEYxCisxOTZFMzJCQworQkE0NTAyQzMxMEJDMjlFNjMzQUU3OUM2MDY0OQorNjE4QkUyRDkyRkJBOTJEQjhGNTVGQTQwMkI4MUI5Q0NDOTNEQjA3QzE5QTNFNTg4ODgxNDk0QkREMjUxQURDQTBDMjNGMDMxMEY3NkQ3NDFDRjM1NkVGNjAwN0JCODk5NjZFNjZCRTI5NTIxNjdEMThDNUNBMjBEQzg0OTZCNDA0MkFGODQ1MDc3QzlFNDEyNkY1Q0E2ODVEQTdBMUY3MTE1MTM4RkEzNTg2NzVEOUE5MDc5ODFFQzA1NjgwOEM5RDQ4MDQ4MUFDMzVCMTYxN0MxMzJCQUMzRTBEQ0UyNjkxMjUzN0I1MEMyMzEzRQorMjdFRDFGOUYKK0UyRURFNkM1RDQ3NDIwMTg5Rjg3RTY2NTZDRkUKKzZEMkExQTY4N0UwRDFBREUyREVBQ0I2RTE1Mjc5NEQ3RkUwQzA4OTk4MEJCNUI1OUNCMDYwNDYxMUYzNDQwNEVDRDcyNENCOTA1MzJBMzAxMTcwNjRFNjc2M0IzMTEyMDBFNjk5OEU3NzBFQ0ZGQjdDMDg0NTE3MDlBM0REQkZDODEyMDdBRTlDQUFFQjE1N0VDMTFERDI1NzNBNzlGMTU2OURFNTAyODcyNEVCMTQ3ODNDOTYzMEEyQjVEMkUzQTY3QUEwOEY2QTUzNzkzMTI4OUU4CiswMjAyREJCNQorOEM0QUZCNUE3N0MwODg1ODNEMTI4NDU2RjkKKzhCODEyMEExQTMzQ0MyOEIwQTMzQUExNkU2QzNDQTg5QTI3MDdFQTgxRDM4NjMyMjU3MDM4MENCMkE5MzkyNDVDODY3M0NBRjg0Q0JGMEM2QzdFQ0I4ODJGQ0ZBRUFFNUFDRDIzMjhDNUQ0NjdDRUVFMjFCQ0ZCN0RCNUQzRjc5NDk4MUIzQTg5ODM0RDNFMzA2QjY1OUE1QkE0NDA3Q0ZDRDFBOTMwRUVDOEU1MworQjZFQzg2QTkKKzMyRURBRTdCNDBENENEQUJGOEQyQzI2MDRFRjUKKzIyMTBGMzQzNjM3NDczODA4RUE2QUNFMjEyOTIzM0EyQ0NBMDI5QkRGNTRBQkFCOTZFRUU5NUY5OUI2RjlDOTVCRDc2RjcxRjE0MkIxMzJGMkM2REQ4OUFDNEFBRDZEOEI1MjM4NzNFMkU0NTlDNjJFRjAyRjg5RkY2NTRDNTA2NDg2MEJDQTc0NTk0NUYyRjFCQjFBNzc5NDdBQjQyNTYwRjExRDAyRUI5MzJGNTlCODIyNTg2MDA0NTM0NjlCQTAwMzIxOUNEMzQwQTFERkFGQTlCOTI1MEVDQ0FGQzQ3RDgxNURDODhDNTlGOTVGQzdCRTlBQURECitDN0EwMDk4OAorRDk2NDgxMkQ4NDlEMzYxRDkwMEVGOTM1MDQKKzJEMzA0OTg2REMzRUM4REI4REM3NEVDRTQ3QUYxMEU1QjcxODg2N0I3MTlBMjYyRTA3NzQ1NkVFN0U0REYxNTk0RDZCOEE5MkVCNDczMjE1QUVERUI2QkFCQjU0NTdFMUEzNzE5NkFCOEVGNTUwNDFDNDZEMzcxOEQ5NEM3RkYzOTQzMTlDNUNFNworRjY5RjBDNkMKKzBCNzUwNEI5QkNCQjRFMkFFM0U1NjIxMDY5Cis5OEY3RkJGQTY0NjlCRTg4NjZEQzlGMzRDRUU5MTYzQzcxMjlBRUE5NDZERUVCMTE0RkUyRTY1NUE5NDJERjkyODIyNjE1MDZFMTFFQTJCNEFBODhBM0JFNDlDNzk2NjhDRDNENzk0RUM3MkUzQTAxNzZFRjZCOUU4MzM5NjJFMUEzMUQzRDgwNDkxMzNEQzQ0NjE0RTNDQjFDRjlEMEQ1QzhCQzFBMkQ4N0FDRjM2QTY3ODYzNDkyNEVEMEQwMEFFNjA5CisyOTgzRDQzRAorMDhBRDA1Qjg2OTNDNkM1OThCQTUwRENBMkUKK0JFRTJGQjkzNjdCQkREMjlDRDYyNkFDNTRBRkVFREEwNjJBQTM2MjhDRTRCMUFDM0NEQUE5QTgzMzJEM0QwOTM5RjJBMTE4NjhCQkZEQ0E0NDVGN0YxNDhBQjMxQTkxNDA3NkQ0MUFFNEMyNTBBNDcxMTdFOTk1N0I5RkE2QjdGNEVBMzNDMENGQzAyMDM2OTBBRTNGMTM4OUIyNEUwMjVDN0QwMjAzQkE0NUJCRkI5NzMKKzlDNUI4NjJBCiswOEQ0ODBGQTE2NTAyRjU1MEI0QkVCNTEyRUFCCis5NUFDODk5RDAyRTlEODAwRDQ3ODBBRkMyNEM3MDAyMDI2MjE2Mjg2NzY1MDQwMzQwRDNCMThEM0U0NkRCNzgyOUYyQjU3ODhBRTg0RjU3MjlGQURGRjdEMzVFMkU2OTVFQ0UzREM4MjUyQTU1QzBGMTk5MDA3MTA3QUY1ODEyQzY4NTlCNUU0MjY4QTVFNTBBMTEwNjdGNzFERTQ3NTAwMzFFOTA4OTQ5M0IyMTRDNjBGMTBGRDdGNUU1NTQ1NkNERTZBRjM2RUFENjQ3ODIwNkNEODk3MjQ4RERGMjk4MTZGRDE2MEI0QTk4QjQ0RkI0MDdFODkyOTM1RkUKKzUzODAKK0M4QkE0RjEwNjZFODk4MDI4RjQ1MkI5MTFDREMKKzhBODA0NURFCis4MkUxRERGNzZFQ0Q1RkQ4RTBCRTYwRTEzMUVECis5QUU5QUU1MUY2RkQzMTU1NzE0MkNDMzNBMEQxQkNBMkUxRkU5N0JGQUQ4NUQzMkQ5MTNFOEExQ0MwM0ZGQURCRjg5QUMxNTcxNkYwQkMzNzgyM0Q3RkE2MjEzQTY1Nzc0OTEzRTdCODNBQURGOTdEOEEwNkM3QzUwMjY3RDFBQjJBOTYyMENDNTM4RDE1OTBFMDM4NTZDNEZBNjREMjk3RkJERjQzRERGNDA3RTcxODBFNjNFMkI5MTYzOEFBMzgxQkI0QTcxOTBFMTgwQTA0MzZFQUY1RjMzMzBEOTYzOEYyMzU3NzUyOUY4MjJBNzU3NDYxOTA3OEE3M0IKK0M0RUYKKzExRTUzNDUzNjg1QTQyRkQ0MUU0NDAxMzg4NzYxNTIxRDAyNDlFN0U1QzZFQ0RGRjI3Cis0MTQ0OTJGMgorRDIyNUZCRUNCNTczRDE0OTI1OENGNTNDQjNFNQorMjc5NDM3NjkyMUU5QzVBNzVDNjZGQTBGQzFGRTlENkZGNDk2NTUzQTI5NDdBNTBCQTkwQTlBRjVEQTg2MzFFNEU2QjVEMDk1QzJCNjY0QkIxQzU1NkNGRERBRDM4RDY1OUE4RjY3NTFDMjA2MTY3QTRFMjEwRTE3M0JBNzVBOTQ5MEE4QTU5MEMyM0JFQzA0ODM4NkU0QjhFMzJDN0U4RTMwMDVDNUI0NTM3MUZBQ0YyQjExRjYwQzFGNDdGNzVGM0NFOENDNEM2NTE1Q0EwRkU3RUYzODhDNzlGNjAyOEI4QkMzOURGN0Q2ODVDODUxQzZGODBGQzdGMURCCis1RTYyCisxRTgyNzFFMAorNTNCODlDODAxNjFDM0ZBMUE1OEU3RDMyN0YKKzBGNEMxMTdGQThFMzRENzVDNkQ3NEZGNDdGOTc3NzI1OTA4RkNGNUE1NEE2Q0MzNDIyQjRBQTZGMjkwNDIxOUZCMUU2RThEQUI3RjlDMzA4NTdEMDQxOUEyODgzM0YxQ0I5NkVBNDM4MzNGQkY1Q0MxQTk3RkREMUQxRDY2MAorMzQ3NTFGN0QKK0E3MzdDNDczOENFMkU4MTMwMUJBNDI4Q0Q4NzIKKzI1QzdGRjI4NDNENkQ3RDBCQUU5OUNDODBCQjg2MzY4MEFEMjY4RTQ2MDE3RTFBRUU0NjhCQTdEMUM1MEE5NDhCRjU2QzFDMDk3REU5MzNCNUE1RjFGRDIwRTE3MjgxN0U3RkU1ODRBQTU3M0Y2Qjg1NDQ2NjZDMkRFRDk5NTEwNDE0MzJCMUYzMUVEMTU4OTdDNTc2NjUxOUZFMjUwMURDQzk4MUQ0OTRFOTcxNEJGQTAwMkNBRkFDNDBFRDVDNEU3MUE3Qzk2RkYyNkRCNUI0OQorN0FCRUE2NDAKKzY2MzI3QUEyNkEzMDIyNzY1QzYzQ0YzOTFBCitEQTJERjQ0MEQ4RTIwQjk4MERDNzdFNTgxNDRCRjJBRDdBNTQ5MzBBRjlCMworMTRFQURBMTIKKzRFM0MwOUIzNTdDRjUxN0ZFNEJCRkNFQkM1NzkKKzlCNDgwNzUxMUI1NjVGQTUKKzY4NUQwQ0RCCisxMUQ5MjEzOEY0RDY0ODExNTEyOEYxQTU5NDYwQTEwOUU0Mzc2RkYwN0M0N0Q0QzYzMDk1MjQxQzM2Q0RDQkRENThCNworQjlDQkYyQ0MyMjYwODkxNjM4RUYxQkJGNUIwREE2Q0NCNEVFNkYyODBDRDIwNkVBQjVGOEMyRkI3N0RBQUVGMURFRkM2RTc0MDY4NgorMzZBQjEwRjM0Q0VCRTg3RDJBNjk4OUM5MjIyMUJEMjFBNTgzQzREOTc1RjkzNDVFNjRDMjNBCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ1IHB1dAorZHVwIDMgL0MwMDQ3IHB1dAorZHVwIDQgL0MwMDU4IHB1dAorZHVwIDUgL0MwMDY3IHB1dAorZHVwIDYgL0MwMDY4IHB1dAorZHVwIDcgL0MwMDY5IHB1dAorZHVwIDggL0MwMDcyIHB1dAorZHVwIDkgL0MwMDczIHB1dAorZHVwIDEwIC9DMDA3NiBwdXQKK2R1cCAxMSAvQzAwNzggcHV0CitkdXAgMTIgL0MwMDc5IHB1dAorZHVwIDEzIC9DMDA4MCBwdXQKK2R1cCAxNCAvQzAwODMgcHV0CitkdXAgMTUgL0MwMDg0IHB1dAorZHVwIDE2IC9DMDA5NyBwdXQKK2R1cCAxNyAvQzAwOTkgcHV0CitkdXAgMTggL0MwMTAwIHB1dAorZHVwIDE5IC9DMDEwMSBwdXQKK2R1cCAyMCAvQzAxMDIgcHV0CitkdXAgMjEgL0MwMTAzIHB1dAorZHVwIDIyIC9DMDEwNCBwdXQKK2R1cCAyMyAvQzAxMDUgcHV0CitkdXAgMjQgL0MwMTA4IHB1dAorZHVwIDI1IC9DMDEwOSBwdXQKK2R1cCAyNiAvQzAxMTAgcHV0CitkdXAgMjcgL0MwMTExIHB1dAorZHVwIDI4IC9DMDExMiBwdXQKK2R1cCAyOSAvQzAxMTQgcHV0CitkdXAgMzAgL0MwMTE1IHB1dAorZHVwIDMxIC9DMDExNiBwdXQKK2R1cCAzMiAvQzAxMTkgcHV0CitkdXAgMzMgL0MwMTIxIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xOCAtMjA5IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzQ5QkJFNDNBQzEyQTdDMTNCNDdDMjk5RDg5NDgxQzY5REIKKzk0RDUyNkRENzE0MUJDRDY3QTIwRkY5QQorRDdBNjU4QThCODcyMzA3RUVBCis2NUZFREI5QgorRTYyQjRBQ0FEMDVBRjFBNEQ5REExQTU3NTIKK0I1MjIyRURENkM5Qzg5MDg3Mzk2RDZCQjlFMkY4OTJCNTM1RDdDRTE5MTA2NjkKKzMwNjkzMDI3CitFOTNDOTM3MjFDMzBFMzNDMzFBQUE5Nzk1MworNjBDODNENTMwRkRGNjYzQUY5NUNBQzI3NzdBREFBQjA2MzBDRTE4MEMzQjE1MzU4MkM4RAorMDlERjYwMjgKK0JDOTQ1OTBDRjdDOEUyREMxOEFEMUQ1RTVDCis1RjQ3Nzc1QUQ0NzcxNTg5M0UyQ0I4QjY1MjhFNkM3MDcyQ0Y3Q0I4MjM1MjY0MzlGMDVDQ0FCRTVFNTk1RUE4OThCQjI3QUY4NkU4QzM0NjExRTFFMkFGNkY4NzBCODg0MDcyRkEwMEE1NTcKKzZBRjY5QjdECis3MUM0QjA2QTg5M0EzRkQwRERCNUExQzE0N0JCCis0NjgyMUJBNjkwMjBBN0M5QkYzQUY1QzVCQ0IzMjBGMjNENzE3MTYwMTg4NTMyMTRCMTVCQkFBNUI1OTUzMTMwMjI0QzVFMDlGRDAyRDczMjkxRDYxRjc4QzFFRkEzMDBBNjI4N0YxNzExOUM0N0ZCQThENzQ2MzA4QTQxQzIzMUE5NERGODJBOUZCNkVBQzE3OTY3NzBCRjJDNkIwMUFCRTY2OTk3RUI1NTQ5OEU1REFGMTI1NzE4NjlGODVBRjdEOTYxMjM2OUIxNEFFMjQxCis5QTZERjAyOAorRThEQzg3QjhBMDcyQTMzMjNGNTE4RjUyQTIKKzNENjA1MTU1RDJENjQyRTFCRkM2MERCNDVENjU5RjM2RDc1QURENjA0QkQ0RjYwOUI4QjJBRkQzREUwOTEzOUM4MkY2REVEQTdBMTE3RDFDNTAzQzgzOTcyQkE4QkU2MjYwNkQ0NkM4Q0U2RDU2NkMzN0I5NDBBMDk4RDFCMEVDOUZGQkE0MTdGODhGNEQ4NjFEOERBREYwNjlEOEQxQ0Y2MzQ0NEYyNzBGMEQ3NAorNzU2NTYxNjYKKzJEQjFCQkMzRDQ1OUI2OTI0QzBCREY2N0Q4MzYKKzkyRjlFMThFOUExNzE0QjFGN0JERTU2MDkzN0ZGQzAyNUM5RkI5M0Q0RkM3RjQ3NkUwNkMyM0UzMEM1MERFMEQ4OENBODQ2RDRFQzMyRjhEQjU1NDFEQzIyMkM5MEM3MEE2NzE3Q0U5MzZDQjg5QjRGRjA0NkQzQ0E0NkJENkE3QTBGOTE3NjAxMzI4MTlGNjg5ODIyQkM5NDBDMTY3N0M0OEVFNjFERDA2NEMxQUUyRUIxRUUyNEQyNzJDMDYxQTMzRkI3N0I2MzhBNDg2NkI4MzNDRkZFQTVDNTgKK0UzQTQxNEVDCis0RTQxNTc1NzBFNEIzQzNFNTc0RTIwNjlFNjU4CiswOUI3QTFBNUQ2M0NEMDhENzk4NjI1ODlGQTA2N0FEREZFRkE4QkY4MkUwQUVCNjQ4MzcxRDYzRTYwMzEyQTQzOEQyRTRFREQ5MTY3NjA5MTgyMjM2OTU4RjhEN0E4RjZFMUEzQjNCRTZBQUY1N0E0QzU5RUVEQTQ3NTEwMDc5MkM1QUFDQzZDQzg2QzAzNEQxREZDQkMzQ0JCNjQ1NEQyMjU1RjMwQzgxRjFGOTQ5MUMxODQzNkQwRDk0QUYwMDk4MTFFMUI5QTQ1OTcyQ0NBRTM2RTg5MjZBNTc5RjA5N0NDNkIxNDM4MDM5OEZECis5RTJERDk0RQorMjJEODU0QzREMTQ1NkE2Rjg5MUVBNjQ3MkIKKzk5NDgwNkQwQkI5MDZGRjcwNEIxMkREMTI4NjgyMUY3QTkzNDk5NDNFNzg5QjQwN0ExOUU4QUVDMDRGNTY1MTNBOTlEQzQ2NDhCNTk4Nzc5NThERjQyMUEyNzVCNzM4Nzg5M0U4RDUwMjU3OTg3NzQxMTlCNjA1OENCQjkKKzQwNzJFNjIwCitEMTAwQ0Q0N0JDQUUwQzJFRjUwMDE0RkUxRAorQzg5MjFDMEUwRDlFNjFGRkZDRTQ0NTc2QjdEMDhEMTBFQjkxNEQwRTRFOEFFRDYxRjg0MDY5MjkwNDQ1NDEwOEI0RDk3QTg0MjkyOURGQjNFMEFGMUJDNkZERDdBMzRFMzQ3QTVDNDk0RDYwOEVBOUVFMkUwMEQxNzAyNjIxREU2QUQ5NUE1NDNCQzFDQUYzNUMKKzg1MzU1MDIwCis1NEE5MEYwQjczRjlDREFGQjdENUYyNjVCRQorQkRDQTRDNTg3MkQzOUJBNzAwMjlDMDIyOTVCRTFDREE5RUQzOTgyRUI3RDQ4MjU2NzMyNjRGNUFCQkFBMjNEMkJERERDQTcyQjlGRTIzMUJDRUNGRjFFMzgzMUEzOTQzMkJEOUMzNkY5MUM4RjUxREM4RDQ2NEVCNTlGOTRCM0NEMERDQjU4QUI0RkI1MkQ3MkU4RDREQzY0QTIyMTVCNEM3NzNFMUEyOTdBRjg0OUY0Q0Y0NzhGQjI3QUU2NworQjlBQUVDRkYKK0NDN0IwODcyNkQ4NDNEQTVEOTlCNTAxRjIxMkMKKzA0RERDRjE0M0QyNzA5NzMxNDZCNTZENUUxM0Y2MTU3MEQ1Rjc1Q0NCRDIxRjE1MDZDRENGOTVGRUZDQTIwOTlFM0JCRjgwMTgyQTJDOUJFRDNEMzFFRjIwMjI4QUNBN0NGQjVFMzYwQTIxQjdGMzExNDM2QTAzMzY4QzBDRDY5OUE5NEM3RjAwNTQyM0M3RDdBOTM4M0YwNUU2OTAwMzQ2NTBFRjZBNDI3RUQxOUM1QjEzMzM4MTU5QzRCNkFDOTZCRDk5QkQyNTI4NTNGNjVBMworMTM0NUE0QzcKKzlCOTc2NTlFOTJERkQ4M0YwMzhDQjIwOTc0OUMKK0Q4NTk2MzQ2MzFCMDRBQzA2RDIxODhDMDRGQTExOUQ4MUI4Q0YwNzJFMTdEMEE5RDNFMkM4MkUyQjE1Q0U2MDUzOUJCMUI1RkI1RThFMTdEMzJCMjBGOUQ5NEQ4MjBCQzRDQzlDQ0Y4NTRBN0RGNEE4ODQ4N0E1NTc4NDA3RkU5MDA2RTJEM0IyNDgwQzEyMDNEQTNCODVDOTc0RTU1OUI5MDlFN0YzODc2MTVCODQxQjk2QUVBOURFMjVEMTVCOUYyQjJBMkNFCis3OTRERjAxNAorNUQ2QzM0RjM3Q0JBNzFGMUJCNzA4MEE5MDNDQworNDE5MjY4NjBFMEFDNzJCQzhGQzkyQzM3RkQ4RURDMTQ3RjczODUwMzBGMEQ1OTlGRUU1RDA0OTFCQTg4QzdBMUNDRUJDOUEwOEMyNzg4OTBDRTMxOUFGOTdFQ0FCNDMxMzJDMTUxN0Q4NzE2OEM5NEI1RDBEQzUxMEFEM0E4RDk2QzcyNjlENjk3NDc2RTY3OTZFOEVEQTUwMjdBMDVFNTJFN0ZBRDY0MEExMTM3OEQyNzdGMUZGRUUyMzc0QTlEMjkzN0NGOThENUE2OUVFQUE2RThDQTRCMzQ4MTQ2RkM1QkNGRTNCQTU0MDE5Rjc5MjNCMjMxQTgyRTc2CitDRTEzCisyNkM0MDVBQgorNjhBQTgxOUUyNEY2NEJCNjRCQzk5MzdFQTkKK0ZGQUY4QzA3RUExQjlGRjk4QzdFNDIxQ0FFQ0Y5RDgzMjkxOTk1MTUzRTAzNjJGNDVENjJFODY1NkRCRDhCMzg3NzNGOTU1NEM3QzVCMDk1MDUzMkM0MjY3MzJGOUNDRkYwMUU1QUUyRjZFOEE2RjNBQTQyRUFEQjJGOUE4RDUyRDFGMjA0REIzRjRBMTE1NkI2CisyNkQ5RjFCMworREJBQTA4MUNFNDAxNjI0NDkxNkQ5MEY1QzkyQworNjg2RjEyMkRGQjMzNDZEMzhDM0ZERTY3N0FCMThEOTRDRkRCQjUwREY5QUQ2M0ZCMjNENzg5REI2NDM2NEU0QTQwRUQzNUJEMEU2MTlCMjIxQjc5NTY4OTdFRDg2NjQwODZENzcyQjc3NEJFQjRDNjJCQUVFQjhEQzhCMjZENTNDQUI3QjFGMUE1MzQ5MzI4MUMzQTA0NTk0RkJDMTBDOTAyMjQ1NzNGMUM2OEI4N0IzNzIzNDUyRkQxRkNFMDhCNjREOTQxMTI1Q0U3MUMxOTY5NEVFQTc2MDJFNjEyMkNCMTFGM0E3NDdCRDRBRTk5NUE1OUQzMzc0MkM4Cis0OUIzCiszQjk4MUQ3NworQUU3NDJEMjUKKzRCQTZDQkZFNTgzMDQ5NUQ0Njg2NTBBRDIwCitBNzdBQjIzQ0RDRkQ5MkRCRUFBMURFNjk3QkY2OEVERTI5MDE4NkE4QjQ0RjEyNzZGODBBN0Q2MzBFODQ3NDM4QTRBOEQxQTNERTQ2OUNFQjlDREY1NkFFNTk3MzJFQzc1ODVCMjdGQzQ3RTY5NEJFMzQ4OTk4NUU0MkNEMTZCQTU1QTE4MTZCOTBGRkIyNDI2MkRENjhFM0Y0RUI5MjNFQTkwMworOTYxRjQ2MUUKKzgyMUZCRTUzRDI3MkI2RERGRTNEMEZENDRDMzUKKzI1MDMyOUQ1MTk3OTFBNzc0RDYwRUI1QkEzMUNERDc5QjE0NDg5MzQ5RTRBRDRDQjM4MDk1QjEzODYwMjdFQTcwMDRDRDQ5QUExMjRGNEYxNjRFRkUzMEE0OUJGRENEQUNCRDdCQkY3RkRFMEZCNjJFQThDNUYwNTBGRDk2MjE4NzZGRjNBQ0YzRkRBNDdGRDA1NTQxNzI0RDNCRTkzMjgxMjNERUM4QzU4MDc4RDc4QUY1M0U0OEEzMTkxNjcxRjUxNEU1MzU4OEIxMUE1NEM1Q0Q0MzVEOQorNzY1REUxRkUKK0U1NEI4MTU0N0M1QjgwODk4OEM1RUM4RjFDCiswODVEMkVCOUY5ODQwRkFDQTUzNDBGQzI1QjA4ODM2NEY3Mjc4REUxRDQ5QkY5REJDRjcyRkQwODRDMzY1RENGMkI4MzY2QzMzNTFEQ0JFRDA4MDdEOEI5MkRERjczNkI5RTdDNDc0N0UxQzUxRjQ1QjA1NDhBNUFGRTYyQTgwRTkwMENBQzM2RjU1MUQ2MkQxRkRFNTEwOUZEQUVBMTU3RUVBMDBCRTkxRjQwNUNFMEQ4QjlEQjBGCiswMDU5Njk4MQorQzRCOTlCRDJDNkM1M0Q2OENENEQ5MEI2MDYKKzhBNTIzNUE5RUVDNjAxQjk1QzdGRjU4MkU2OEE4MkZEMEExN0Y3MTE3MUU5QzcxNjMyRjU2Q0VGQzgwMkE4MjhENThDNzI4NkYzOUU1QzM1ODk1MDQ3OUUyMTUzQzI4N0UxNzA2MTQ2MDRBMjZCOUZEMDcwMzMyQTZFREE4MEI1QzNBMjExM0ZBRTdBQ0Q3RjNCMzM5MUZCMUY1Njg1MTIzMkFDRTMzQjlFNjg2RTk0NURGRUI3QkYyNgorQkE3NTc0MEYKKzE1MEFENjcyRDA2NzdCOUY0MkIwRjBENkREREUKKzJENjMwRTYwODBFNzJEM0RGQjc5QUY5OTUwREFEQjE1NTE4NzYwNkYzMjk2NTk0NzVFRDVBNUM1RUI1RkY0MkJBRTUyNEQ3N0NERTQ4OEU0NzdERTQxM0Q3RDVFMDEzRjhEMDMwNzM4M0VCQTBEM0UzMEY5MTczMzZCQjhGRjcyOTg1QzlGNTE0NjcxQkEwQkFDNDlCRDA4NThERUJFN0JGNzU2MURGNDVEOTcwM0VDODUzMTkzNTRFMEQ2MjZBMzU4MzIxNUMzNzZBREQzQTJBNjVFREI4MURDNEI0RkJFMUY3RjkwNTM3MjU3RDZCNjEzNzQxRjVEOTQxRQorQUEzNworNDgyRDdEQjk1RDI0RTBCOUFFOTA3QjdDMTAzMTgwRTRBN0U5MzAzQjZCMTU2NTFFNzM5RUFDMjNGMjZDNkNDQ0FFRkRDNTFDNDUKKzU0MTg4NUI3Cis3NDlBMkIxRTk5NTk4QjFBNUY3NTE4REIwNjJCCis1NDBGRDk2QTVFMTFENzFBMjA2NjlFRDY2OTgwMjAwQ0NFMjJGNzc1RDgwNTMwQUVGMjM0Nzk5MzVFNEUwMTMwRTQ1M0QzRTkxQzlDRTRBMUU3MUM5MzY0MUQ1NzhBMTU2NUNBRUVFOEREODYwOEEzNEU0QTFBMEQ2RkU1QkUzRkEyMDQ3RjhCRTI3MjcyMkI4NEMyMTEyNkEzQzRDRkUwMzNFRDAxRTY1NUIwODAxNjNBNkY5ODY1MzU1Q0JBMkFGQ0FERTU1NzM1QjJGRDQ1Cis0NjJBNEQ3NgorQzREREFFREU0RjZDMzE3NkFEN0RDQ0YwREUKKzU0Qjk5NkM3ODUzN0EzMjEwRTExNEUwQUU3QTM1ODZGRDIxQzUzNzRDMkI2M0M3RjM3OUExRjhGOUMwRjRBRDRCQzQwRDQ1RjA5NEJFQTczOEUwNDU0MDEzRkY4NzRCNTQwOEMzRkJEOTZGQzgwMUE1QTI0MjdDNEVEQTI5N0IzRTBGQ0ZEQTFGQzhGNDU4M0IxMzJDNjgwNUY5QQorQTJENzZEMTEKKzJGQTIyRkE5OTM3MkZGQUUxNDAxRDczOTExCisyNzQ2OEREMjY0OTBFQzI0NjI1NzBEMjNGNTZENkI0NTJCNjBCQUVDQzZGN0RFQTJBOUUxQkI0QjFBRDdDRTYyMTBENURDMjZBNjJEN0U4NUM3QTg2NjMyODRDRDhGMDIzRjE2REFBMgorNTZCNUQ2QzUKK0M3RDkwMjE1MDhEM0RGNUNCOTJEOTQxNEE4NkEKK0MzMENENzkxMzU4OTcwNkM3REVGOERCNEM1M0FEMkZBMTk1ODc3RjVGRjk5NjQ5MjM3NUFDQzlDMDk0ODMxMTQ3RjA2MjMyMDBDMjBCNUZGQUZERjJBNDg4QjE0MDI2NUIxRTFEQkQ5RTVCREQ0NzI1QTRCRUE3OUY4RUU4OEY5MkVDNTg0M0I2N0I4RTY3QzE0NjRERTgxQUUzNzI3MEFFRTAxODA3NERBNUVCQTQ1MzhFRDgyQjdFNDIyODgzNjExRTIwRjQzOUI4MTdGRTExQkQ1MDExODc0QTUwREVEQjU5QzkwQzIzMEM5MjBBMUNCMkYyNjA2NTgwOQorNEE0QQorOTkwOEY2QkE0MDdBQkJDQzk3RUE3NDQwNjFFNkZCMUM3NDcxNjA0RTIzRUVGM0NBQzRFRTFFQTkKKzlDNEFGM0I0CitCRjc5NDBEQTgwQTE4Qzc5QTdGQzFFMUVBOEQ5CiszQzRGMzBFQUE0RjUxMjAxQzlFNjMxRTcwNEZBOUIzQUQxQzNBMTRDNEI3RTNDQzVCQTYyQkE5MEE0NzQ1QzRFQjM3MjQ4QTg5MDkwMzk1Q0FEMzhBMzU5QjE2Nzc3Q0VEQ0E0M0M4RkVDREE3QUVFN0QwQTczMTJBMkNEQTg2M0ExNjgyQUU5N0VGNTlFRTBENDA0MjcxNzVCRkU0M0M2NkI1NjRFRDYyNTFGNzNBNjlGMzM4MEIyNjEwNTc3Rjk3NDZCQUU4MzIzQzEwMAorMDEyMjc1MzgKK0YwMzk0MDk0N0U2QkVCN0NERTRDQUM5RDMzCitGQzQ5RTg1RTZCNTZBMzI5M0MyQ0JCNDhFNzM5Q0M4NzY3NUVFMjhCNDQ0MDMwQUIwOEQxNjNGQkUyMTBBMEI1QjcyNTZDRTQ5OEU1M0RCRDQ1NkVEMERCRkU2RjJGRkE4RTNFNjQ2MUQ1Mjc4MUNDQjhBNUZCQTIwMzZBMDdGRTcwN0ZGNDlFQjM5RQorODJCMjkxMzkKK0E3NDk3MzUyNzk0QzM1ODE0NDVENTBCMzE2NTAKK0NCMkZFNDIzREFDMzFDNDNDMjBFODJEMkUwODk4M0I5ODZDNTM1MTRFMzA5MkM1NkVBRkM3OUY2NzIwOEI1RjA1MTVGRUI3N0Y2Q0MwRDM3RTg4OEMwRTNFRDY3N0Q5MTM3NTZFQjZBRTBBMTBEQTcwMEI3NzMwRDJBNzVDMTU2RUJCMzE0NkY5OThBOTdFNDg1RkVBMDQ4NTFFQjhDNkU1MEYxQjU2QURGREI4RkU4Q0MwMjJBOUJBODc5MkJFNkY1MjE4RERDQjc5MDVEMDU1QTZBMTg2OUEzN0Q5MDRFQzAKKzkyRTEyQjIwCitDMDkwMTBCQjg4RDJBN0NBQjA1OTI4QUU2OAorNDAzQUM3RDJCQTc4OEZENUI1NEY2Rjc2QzZERTNFMUVGNEFGRDc5N0IzREY4N0JENUQ0MkM0QkQ4MTVDODQyMTYzMUVFMzMyOUY1QTZCN0Q2NjEzMEREMjUwM0M0MDgwNEZBMjgyMTFFQjVDRjQ0OTM3QkVBMjdEQkJGNjM5MDZCMzM1MkVBMUMwRjJCNjFGRjE5MzIxRDBFMDg5OTc1NDY5MjJFMUQxRTQ4QTM4MDU3OQorMUI4OEI1QjEKKzgxMjUzMjdERjhFNTJGQjMwNkRFOTA3QTE3ODYKKzhBQUNGMzIyNTc5QzgyNEE2OTZDN0U4NDhERkVFQzlBOEIwRjNEN0M2Njg4RkEyRTNGN0MxNDkyNjNBRTUwRjVBMDdCRDg5NDFGOUU3NzdBRDJDMUQyODcwM0IxOTBCOUIyRDQ2MDExNzkyRTQ5ODcwQjc4OEUxQUE1M0E2MDkyRTI0QkExMzQ3QzE0MEEyRDI5NUFDRkEyRTk2QUZBNDFCOTdBQzk5OUExMDk4RDk5NDIzQjEzMjQ5NjRCQzZGRTY4NzRBRTJDMDBCNTI3MkJEREVFRDkzMkFEMDEwMDE4QjcwMEVDRTYzQ0M4NjNDRERCCis4RkFENTlEMAorQUE4OEU5QUI0MDlGNDJEMDRENTBERDQzMTMKK0U0RTk1RUY3QTBGNUM4NzU5RTgxRDVCQ0MyRDU2NEMzODRGM0M4RjVEMjI5RjFCQzg1NzRBRTgwMEJFQjA1ODA2RTJCNDlENzREQzczRkNDNTUwMjc0NEQ1MTQ3RTY2MzQwQzg5NkY0OUUwRkQ5OTZCQjU3OUM3RDcxNDBGMDI1MjU2NTJFRTkKK0ZDMjE2OTBCCitBRkY1MDZENDMxNTZCRTQ2N0ZEQjVBNTk1RjBECis0QTkzQjY1NkM0QjZCNzQ1RkY2NkJBM0E3OTdEREZFQUMxNDJGQUI5OENCQzlFNTRFQkMxMzU0ODE5QTVFMzU0Q0I1Qjc3OTBGNTEyQTFBNkExNUM0MDdBQUEwNzcwM0NCRDhCRDQ0MzZEMTk0RjJFNjQ4RTI3MzhGM0IyNkJCQzc0OTdEQkVCMTQyRUQ2NDI5MjdFOUIxQ0VEOUIzQTdFQzQxQ0Y4RjlBMzY2NjY1MzdENkRCOTJDNjc3NDBFNThBMDNFRjU2MTdFRkMyRThCRjYzQjE2NDg4RjU2NEJGNzQyOTkzM0FFRjQ0MDcyODRFQzQxNkVDMjUwQkIKKzNGOEEKKzVCMDIzRURBMkFDRDQwMTFDOUY1OTEKKzA3MUQ4RjY0CitBMzRDNEI5MEMwMDVDQzc0RjQ4QTAyMjM4OTE3CitFMjcwRkY2QjE4ODIxRUY5RTZGMUQ1NzdFOTk4MTBGNjU3Q0Q0QUUxQkVENDlBNjkwQTQ5MEEzN0UxNUI0NTJFMkU2ODIxQkMwMzNERDcwMkUwMkE1Njc5Q0IzMTNENEVCQkRDOUQ5QkQyNEU2MjU0OTNDNjMzRjg4NkQ1RTA3RUFGMDEwNTZBOUU4MTJCNkY0RDJGRUQ0N0I0QTI3NDM0OTc1QkVCNjU1QjNENzZGOUUyOTcyQTgxNUMwNjIxNEYxQjIzMzVBQ0MzRTRGRjcxOTcwNjJFMENDMTIwNDNENTlGMzdCQjVGQkQyMTg3NEM0ODIwNTcwQjcxODAKKzhENUUKKzRBCitGNEU3OUEwQQorNjBCMDE5NkQ0RTI1Q0Q3RDFEQzMzRDFERDgzRAorQ0VENUIwRDEyRTk3RTM5MAorNTZDRDBFOEQKK0FBQUJBNTJBNjdGODBFODM3NjRGNjdBQTNFNjQyNUUzNDU1QTIxMjQ2RURFNUU3MTQ4M0EyMjJFQTY2NUQ1MjI1QjlDCitGRjI4QjMzRTcxNTVCMEI0RjcwOUY2RTk4NTY2MEIzREYwMzg5QjI2RjY5QjZENDU2RUYzQTgwREE4RUFBRjYwNjREQjY3QUMyRDI1CitENzE1RThCQkYyNDFEMjZEQUI3NjlDODJBQTY3MEM4NDMxNzYyMDRBRTQyRTlDRDMxNTBDMEIKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwOTcgcHV0CitkdXAgMiAvQzAwOTkgcHV0CitkdXAgMyAvQzAxMDAgcHV0CitkdXAgNCAvQzAxMDEgcHV0CitkdXAgNSAvQzAxMDQgcHV0CitkdXAgNiAvQzAxMDUgcHV0CitkdXAgNyAvQzAxMDggcHV0CitkdXAgOCAvQzAxMDkgcHV0CitkdXAgOSAvQzAxMTEgcHV0CitkdXAgMTAgL0MwMTEyIHB1dAorZHVwIDExIC9DMDExNCBwdXQKK2R1cCAxMiAvQzAxMTUgcHV0CitkdXAgMTMgL0MwMTE2IHB1dAorZHVwIDE0IC9DMDExNyBwdXQKK2R1cCAxNSAvQzAxMTggcHV0CitkdXAgMTYgL0MwMTIyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xNDQgLTIyNyA3NTcgNzI4XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjVEN0M3M0UwRDlGQkMyQzUxRkM1RDdBNEM4NDY2QTBBQ0YzCitFRjZBNTFFODU4ODE4OTNGNUY4QkM4NDMwMjA4Cis4N0YzMTAzRjc3MjFFMTM3RkExRjVFMEFBNjY4QjkyRkQ1MjI3OUU2NkMxRjg4RTIyNUYxRDAwNTI1QjAzNjI1NjAwRUVFOUFBMEYzQkM3NzQ4NzVDNzhDOERBMzQ4NUYxNzY3NUM0OTU3NTk5NkE3M0FGQ0RGQzVDMDQzRkYxNTI0MEYyNzY2RDM2MEIyOTVEOUYzNTc1Nzg4MkYyMDIzMUNEMjNENEIxRDQ0NjQ5RkFDMkY5NDZDNTI0NEEyMkY2MkY5OERDODkwMDQ5N0RCODgwRUUzMEJFQzRCRTMwMTFDMTA4QkIxNjAzRkM5RTQ1MDg3QjRDM0Y3QjQKKzM4MEUKK0RCN0JFRERGRDgxMEJGRTU1QTUxRkE5MkU3CitDNUUwMjc2MAorMkZFQTZFMUM3QkM4MTZCMzc5QjlCQjY5MEIKKzNGMUY4RDVEMTNCMkZBMENBMTNCMzJFMjMxQUQ2NzAxRjg1RTcyNEU3M0VFNUNBQjc1MkExRjAxOTI0RTU3RUMzMzI1NjE0N0E5RDE1QzJCRUQxM0U1Qjk4NjhFNDYzRDBDRjk3Q0Y3OTUyMEQxOThFRjdFOUE0RTg0MzM2MTVENDNBREI0MkU3OTU3MDA2ODg2MEFGODE2M0RGQTMyRTFGMUFBOUQ4NEEwNTg5QzMxNkE3NTUxMDc1MzIxNDUxNworNjVCMDI0RUEKKzJDQUUzM0RFQUZFMkZDRkVDMDU1QkNDNkU4MDcKKzhBNTNCNDQ1RDkyMzgyMEMwQjNDM0I3NzVCRkExODU4QjQ5NEEzRTFFRDU3OUI0QjcwMjFCMjc0N0NBN0RCOUJBODEwRDAzQzEyMzg2MEFGNzMyRDZDRUM3QTE3NEU1QURCMkRGMkM0ODQ1OUI3REE5MTA5OUI5RUE0REZEMjcwNjAwNzAwNDdCOEZFRDU3ODUyQkE1NkYwQzc1QjA5RDk1MzE1ODQxQTFENjM3MDAyNjEyRjczMUFGOEVFNDA0N0RFRDVEOEU1M0JBNTUyQkVFRjVENzkwNzBCNkNBQzJCNjhGOEM4MzVCQkU0MTVEOTQ3NEZFMjkzOTNGOQorQUZCNworMzE2OEY4QkFDRUU0Rjc1M0U1Mzc0RjlERDU0RjgxNkYyRkIxNjU2OUNCREZGRTZCRUYyOEFGRkJBOTZFNkQxRDQxNzkwQjlBRDVBNzFBQzQ3RUJCRjA4QUZENjU0QTQxCitCQkI5QjkzNAorMzJDRDNFQTQzQzNENzU2NTBBMDI2Rjk0RUUwNworOEM5Q0QyNTE5RUY1NzIxNTZCMkYzNERFQjc2REM3NkJBOUIyNzA5QTZERDc4QzU1ODk3OENEQzc5MUJGNDM2ODFCQjdBRTkzMjhCQUE3QjI4NEJFRTVBNzQ1NEM3MkE1Q0YyQzlCREU5NDgwNUE1OUZGODQzQkU1MUNDREJGRTY5QzkzNjFFQzZDNDkxQzE4RkEyNjE2Qzc1Qjc3MkU2MTRGMTNDMzhCM0E3Q0FFMzk4NkQyQjE0MkNEREQxREEwNTI1NTZCMEI4MAorQ0QwMDlGNkEKK0IyNjM4NzUwNzAwRDY2RDBBQTU4MTAyMTMxNDEKK0FDMDA4NzgxRjM5OURGMUE4MDQzREJBRUJBRkMyQjRBQjU5NkRBMTA3MUYzRDUwNTY1NUM4QzlFODBGRDlBMUUwRkI1RjcwREI4QTIyN0ZDNUQ4N0UyNUI1OTg1NDYyRDJFNERENDQ2Rjg4NzI0MzJGQTRCRjc4ODlBNkI4MUFBQzlDQjhCODE4MTQxQzREMjM3RDdEQjFGQzVENTFBNTU5Q0QxM0M5MzVCRjFBRTYzOUUyNjFCODM0Mjc4NDFCNTY0MTA4NEY2RjQzRDQ0Q0I3REQ2MEEwRkY0N0U5NENBODZENzFGQzZFRUYzQUMxODkzMENFOTFCMDBDOQorQkQ3MAorNjcxOThFRjBGNTU5NTNERDgyNkEwQzk4MUM3MTkzRTVDQjUzNTkxRkQ5MkQ1RTNFRTRGQTNFCis5MEI4QUZEMworQkQ3RDFBNjUxNDVFNjJCMjQ3NDg0REJFRkQ3RgorOUEzNTRBOENCMkIxOTE2OTgxRjNCMDRDNDQ2RTkxRjlENzg5MEM5OUU3NjhEOUZDNEVBNjI2RDY5OEEwQTMwOTk5MzdDRTBFMTZEMjZEMzhCRkM4QUYyNDkxNEMxQ0FFMjk2N0Q3OUVGREU2OUVGODZFMjM3MzlCNDZCRTdDODM3RDlEMzA2ODhGRDM3NDg2NDlGQkY2ODA4MkZBNEQ3MTYwM0Y0ODNCMDU3RkE2REU0NUVGMzExNTRCNjI1OUYzQjYzM0VGQjNENkEzNTczQjQ3M0VCQTFGMDFERjJDRURCMDI2NzAxMkRDNDUzQkEzMDAKK0MxMTM3OTlDCitENzNEMDU4RkQzMjVDQ0RGRjkxQzdFQ0ZDMEVECitGNUMxQTgzNUZBREQzQTMzRjkwQzZENDBCRTM1QzRDNDRDMUU3NEEwNkJBNUMyMTNBQzNDMzIyMDczMzNGNDE5MjRCNzIyQjQ2N0M0QTI2MjI1N0MyMTM5OEUzQzVFMUVDQTA2RDlBMDAwOUU2Njk1MDcwNzAxNTA2OTBEOTk5QjRCOURFRDY0REVBMjJBQTYyRkNDQjA2RDBDRkZGMzBDRDZBM0YyMTY4NUY4QUY0MzM4MjU0MEMwMDAyNEI3NkZCODZDMjFCRDhGCisxNEI0NEZFRQorRDQ1MzA5Q0I3NjYzOEEzNjBDQzNDNTJDMzc2OAorMzNDQzlDMDdBMkM5NEMyOTIyNTg3MTFBMkUyNjg0QkQ3NzAyMjNFRTg3RThFNTE1MDBFNjZDNDEzQzg4NUREOEY3QjU5MUQ2MTZFMDM1RDBBNEQyNDIyQjAyQTg3QUNBMzU5MTBFMjA0ODMzNTNCOEFFRDhGRDAyN0VEODREQURDOTI3RjA0QUM1RkUyOTBCMjQxMUJBQkU5ODE5QTFCNTQ1NUM0Njc1QzAyRDU4NkZCQzk0NkRDMEQ4QzBENDU2NUQ0N0E0QkExRTAxNzY3QUMwMUJDOTlEMzgwRTI2RUFFRjI4MTExNDBEQTRCQ0IyQjZDREMxNDVFMDIzCis1NTc3Cis0MEM4QzUzRjZDMUQyM0I2NkZCNEM1NDc3ODUxNjU1MTFGRTc1RUZGNURGMDhFM0E4OTBEMjY5NTQyQzc0RTc2RENEQjI3MzM4RjU3OEY3NzQ5RTFCQzU2NDlCNDlDMzVENkVCMDdEOEIyMjA2NTgyRUY0REE1Qzg3MUFGRjBEQzczRDM2NEY1NzFCOUMxQTU1Q0FENjkKK0EzQzg5N0ZGCis2QUYzRjBFRkE1MUY3NjFDRUI1QTA5NjM5NgorQ0E2MkFERDY0MUJCRUI3RjE1QkY3MUVFNjBBMDc2OTc0NjM1OUU2RUQ1MDJEODYyMjE2ODZGNTM4N0ZBRDFDOTlGQzc5RUMzQjY3RDI2REU0NzkxQUI3QzJFM0E4NzhGMTAwREVEQzc3MDc5REU5MzU0Q0FFRTU5MzE1OURDNDgwNDg0MEIzNDZDMEI2M0FGMzA0MkE4RjU1RUQyQ0RENjgxQUUwMkE1NjQ1RTQyNzE5MDg2NDVFNjQ0MzRDOAorNkVDMUZBOTQKKzgxMjI0QjU5NEQzMjRFRUMyMkIxOENGMkZGRUMKK0M2OTREMjZEQTRCMDFFQUMxN0U4MUJEMEExMjAxQjA3MzNGMUEyMzgwNjlDRTY4NUI2MUFCN0MwMzcyREY1MjdGRTEzRTlDNEYwMkZBNEEyQTdCRTlGNjMwNjhFQkI1ODUyQzlGQjdDMEIwREM0ODA2OTlBRTJCOTU3N0RDNDM1Mzc5OUQwMjg3Q0Q5QTVFNkEwOUEwQTcyNUY1OTFFQjEzMUFDRDcyRjk4RDc5MTk5QjdCM0I0MkNGQTVFNTRGMUU3REIxRjkyRUE0RDYwNTVGQ0Y2MjdDNEUyQ0U5MDA0NkE4RTRDMzhFOTk3NDU3OTU5QUY0QzUzMTY1RQorQUEwQworMUVFRkU0MkIzQUYyMThDMTk5QkYxQjk3RkY5RjlCNkVCNjMyNTNCQzM1NTRFOENBMkIzOUYyQ0REMzMxRTczQ0Q3N0Y4NDAzOTM0ODg1MTAzMkU3CisyNkU4Q0NBMgorRjlENEFCOTA5OTY0OEYxNjU5NDRBRDAyRUUKKzgzQTQ5NEZBRDEwNjAxRkNGNTRDMDY2NUYwQjQ3ODdCNTZFOEYwQUQyMkQ4MTRFQkI2NTU0QjYyMkEzMEFDNTdFNDY2QUI0NjgxRjU2NzhEQzVFNjNDN0M0NDdDMEVDRDJCNzA3ODUwN0U5MUJDRjcyNUNFRjUwOEQ2QzQwRTg5RkQ4QTI2NjlEREFGQzFFRkQyQTBENTI0MzRBODI0NDA1MTZDMzkxQjU3QUIxNjlBMEQzNTI3CisyNzRBNTk0OQorQkVDQzM3QjdDNEE5NTUyOUJCMzNGMkMwRUE4RQorMjc5REM2NzAwRURFMENFODUwQTkxNzdDNkU4NTFEMDFENjdCMUZBQTBFRTQ0NkZFOTQ3QjE2QTI0Qjk5QzFDMkU4RDgxNDEzMzdENzA1Njk5NUY0QkE5RDEyNDY1NTE1ODdBQUVGNUU4RkVBOEM4MTI3QkJEREE2Mjk0QUJBNkIzN0I0REI2M0Q5M0JFREFBMzBGQzEyQkQ1MDEyOUEwQTgzQkYzMjQ0MEM3RjQ4MTZDNDc5NzJBREEzNUQzRENBQzY1MTE5MEJBMTkzMTAwNEU3NzcxQzkzRjQzNzY0MTQ4QjFENkJBMkZEQTcKKzgzNjVBQUMyCisxNjREMDc0NjRBOTVDMUMxMTI4OEVDMTg2MworNTNCOUM0QjI5OEU0OUMwOTUwQzhGNTIwNThDQUVGMUEzNDE5OUY4NTNCNzlERTdFMDcxMEU0QjEyNDk3QkYxNTZGODEzQjA1MjFFNzJGNjk5MzU4Q0ZCRDE0QTlENTZDOERDOENGNUY1NkQ2REExODFFMUZFNEQ2NDk2RDI0Mjk3QkVCQTgxQ0RGNDJGNDk4QzAyMjg5MTlBMERCQzUxQzg2ODYzOTkyNUY5RTE2CiswMTNDRDUyNworNTJBNjMzNzA1M0ZDOEUwQzRENTg2OUIyOTYyMAorQkVCRjAxRkRFMTI3OUJCQUZCQjlDOTVGRjY4RUE3ODk3NUU5Q0ZDQzVCNTVGMUFCQTQyMjJDNUY5RjM2REMxNzkzOEEyOUM3M0IyNTIxOTNBRjMzRTU0Nzg5OEEzOEE2QUQzQkExQTYxQTU2RDdEODUzRkUyREY0MjlGODRDM0M2N0Y5NkFCRjIxQzlFODk3ODYwQkU5Rjk3ODYyMkE1MUIzOUIwQjEwN0VCQkEwMzI2RTAwODE3MDg0N0IzOEIzODVCMjY4QUY1RDAzQTExRDU4OUQ0OTIyOTQ4MjYxQkE0NTJFQzEwOTYzRTJENTE4MjFFQkE3RDAyQkZBCitFRjM2CisyRDNBQTkwQjY5NTFDOTY3QTlDOTg4N0U3NDdCMjUzMUNGQUIzOTY5MjQ3NUE0CitFMEUwRjQ1NAorQ0M0Qjg5RUQ5Rjc0MkY5NTU0NzBBMERCNkIKK0M3RDEyQUUxMTRCQkU3QjI2RTFBODk3QzczMTcwM0MyRTQ2RUY1QkQ5Mjc4MzUwNTZCQUU2ODFBRUVERjA3MjcyMzM5NEM5QTFBQzJGOUNDRERBODhCMjcyODgwRjM5RjlDN0E5NDA5NzBBQjlGNzdDNzEzQzQwMDBCQ0YxMDFFNUFGNzYxQkZCOTc3NURENzZBNEFDMEU5NjcxMkM2ODRCMjVGOTBBNjRGNjhGOEM5MkVGMAorNjdFRDgzNUUKKzNFNEUzNzUwNjdGQ0E2QjExQTEyOUFCNzYzMUIKKzMyMTI1ODI4NUE5MUJBODdDQ0I5M0E5ODI5MzQyMTYyRkNDMjI4NUUwMTgwMTZBRDFBMjgyOTRCRkEzNTdFOEY3MTg3NDMxMkZEOTdFQTNBNDJEMTMxNEJDOTIzM0EyOEY2ODFCQ0U4NTZEN0I3NzQ5QTExRUVFRjczQjZGRUYzNDNBRDI4OTRFN0U1MDUwQzMyQ0Y4REFGMzVERTU1MTcwNkM0RTA2NTY0QTkzOUMzRTY3Q0UzQjE2RTlCM0IyMUEyMjkwRkUwNDdCMTU2Rjk2NDI4QzgyMDVCNDJBOTVDNUY4M0I4NjI2Mzc0NDNGM0U1MEI2QkM0OUFDQworRjBBMQorNDJFOEUxQjY4OEFENkNCQzRGCitCQTVENEIzRQorQzc5NDNGQTJEREI3NEY5M0QzRERGNkI1MzM0MAorOEYzRDczMzI2NzJERTE1QgorRTdFMTgzQkIKK0Q4RjJGN0I0MUU0MzYzRkY0MjI0NENFODI5QUE3M0NDNEE3OUQzM0YyQjlGMDgzOUY4OUUzNkUzMDBEQjQ4NTdGMDUyCisxRjM1REQzRjVGQTJCRDFFQzRBMUM4RjQ5NTFGNzk3RUYyQzBCMkM4MjQxODI3OEQ4N0ZCQkY0OThEMkQyRkFCRjg3Q0E2RkRBQzk5Cis1ODYyNEU0MzVFODAwMjkyMTc0QkQwRUE2MENEQjcxQjMyNkM3M0VGN0FBRTMyRkRGMjdENTEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmkgMTIuMDAgL1BTT3dzdGR1dGNoaSBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxZDJlM2MzODJlM2EyZjEwMDExMjAxMTMyZTM2MmMzMTM1MmEzYTMzMDEyZjM3M2EwMTFjMmUyYTNiM2QzYTMyMzYzMDAxMWQyZTNjM2YzNzNhMzMwMTFmPiAyMjA3IDU1OCAwIDczODQgLTEgcworPDJlM2EyZjM3M2EzNTJhMzYyYzJlPiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwYzBjPiA5MzQ2IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDEyIFNGCis8MDgyNj4gMTU4OSAxNDMxIDAgMTkyOSAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzA0MGYwYzBhMDQwMj4gMjAzMyAxNDMxIDAgMjcwMCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDNiMmUzYz4gMzE3NyAxNDMxIDAgMzQzMiAtMSBzCis8MDAzYzMxMmUwMDM0MzcyYzJhMzQwYTNhMmUzNTM3M2MyZTAwMjYyMjFhMDAyZDJlM2UzMjJjMmUwMDJmMzIzNDJlMDAzNjJhMzUyZTAwMmYzYTM3MzUwMDAwPiAzNDMyIDE0MzEgOSA3NTI1IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDMwNDBmMGMwYTA0MDI+IDc1MjUgMTQzMSAwIDgxOTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOT4gODE5MiAxNDMxIDAgODI0NSAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYjBjMGYwNz4gMTI3MSAxNzc4IDAgMTg2NiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDEwMDAyMzE1MWYwMDMyM2IwMDJhMzYwMDNkMzYzYTJlMzQzMjJhMmIzNDJlMDAzODNhMzczYzM3MmMzNzM0MDkwMDFhM2MwMDMyM2IwMDMyMzUzODM3M2EzYzJhMzYzYzAwM2MzMTJhM2MwMDQxMzczZDAwMmU0MDJhMzUzMjM2MmUwMDNjMzEyZTAwM2EyZTNiM2QzNDNjM2IwMDJjMmEzYTJlMmYzZDM0MzQ0MT4gMTg2NiAxNzc4IDE0IDk1MzEgMCBzCis8MmEzYj4gMTI3MSAyMDIzIDAgMTQ1NyAtMSBzCis8MDAzYzMxMmUwMDNhMmUzODM3M2EzYzJlMmQwMDNiMmUzNjJkMDAzYTJhM2MyZTAwMmMyYTM2MDAyYjJlMDAzNTNkMmMzMTAwMzEzMjMwMzEyZTNhMDAzYzMxMmEzNjAwM2MzMTJlMDAyYTJjM2MzZDJhMzQwMDNhMmUyYzJlMzIzZTJlMDAzYTJhM2MyZTA5MDAxODNhMmUyYTNjMDAyYzJhM2EyZTAwM2IzMTM3M2QzNDJkPiAxNDU3IDIwMjMgMTYgOTUzMSAwIHMKKzwyYjJlPiAxMjcxIDIyNjggMCAxNDg5IC0xIHMKKzwwMDNjMmEzMzJlMzYwMDNmMzEyZTM2MDAzYTJlMzgzNzNhM2MzMjM2MzAwMDI2MjIxYTI4MjMxNTFmMjgyMTIyMjAxNjEyMWMwMDNjMmUzYjNjMDAzYTJlM2IzZDM0M2MzYjAwM2MzNzAwMzUyYTMzMmUwMDNiM2QzYTJlMDAzYzMxMmU0MTAwMmEzYTJlMDAzNjM3M2M+IDE0ODkgMjI2OCAxMiA4NzI3IDAgcworPDAwMzUzMjNiMzQyZTJhMmQ+IDg3MjcgMjI2OCAxIDk0NjEgMCBzCis8NDQ+IDk0NjEgMjI2OCAwIDk1MzEgLTEgcworPDMyMzYzMDA5PiAxMjcxIDI1MTMgMCAxNjAxIC0xIHMKKzwwMDE3PiAxNjAxIDI1MTMgMSAxODI2IDAgcworPDM3M2E+IDE4MTggMjUxMyAwIDIwMTUgLTEgcworPDAwMmU0MDJhMzUzODM0MmUwNzAwMzczNjJlMDAzYjMxMzczZDM0MmQwMD4gMjAxNSAyNTEzIDQgNDEzOSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDEwMTgyMDEwMjExZT4gNDEzOSAyNTEzIDAgNDc0MyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwM2EyZTM4MzczYTNjMDAyYjM3M2MzMTAwM2IyZTM2MmQwMDJhMzYyZDAwM2EyZTJjMmUzMjNlMmUwMDNhMmEzYzJlM2IwMD4gNDc0MyAyNTEzIDcgODIxOCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDFmMWIxNTEzMWYxNjEzMWQ+IDgyMTggMjUxMyAwIDg5NzIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDJmMzczYTAwMmE+IDg5NzIgMjUxMyAyIDk1MzEgMCBzCis8MjYyMjFhMjgyMzE1MWYyODIxMjIyMDE2MTIxYz4gMTI3MSAyNzU3IDAgMzI2OSAtMSBzCis8MDAzYzJlM2IzYzA5MDAxYTJmMDA0MTM3M2QwMDJhM2EyZTAwMzAzNzMyMzYzMD4gMzI2OSAyNzU3IDUgNTE2MSAwIHMKKzwwMDNjMzcwMDNhMmUzODM3M2EzYzAwMmEwMDNiMzIzNjMwMzQyZTAwMzYzZDM1MmIyZTNhMDcwMDQxMzczZDAwM2IzMTM3M2QzNDJkMDAzYTJlMzgzNzNhM2MwMDNjMzEyZT4gNTE2MSAyNzU3IDkgOTUzMSAwIHMKKzwzYTJlMmMyZTMyM2UyZT4gMTI3MSAzMDAyIDAgMTkxNCAtMSBzCis8MDAzYTJhM2MyZTA5PiAxOTE0IDMwMDIgMSAyMzgwIDAgcword3N0OmR1dGNoMTJiIFNGCis8MGIwYzBmMDc+IDEyNzEgMzM0OSAwIDE4NjYgLTEgcworPDA0PiAxODcwIDMzNDkgMCAxOTI4IC0xIHMKKzwwMD4gMTkyOCAzMzQ5IDEgMTk5NiAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAxYTJmMDA0MTM3M2QwMDNmMzczZDM0MmQwMDM0MzIzMzJlPiAxOTk2IDMzNDkgNCAzNjI2IDAgcworPDAwM2MzNzAwNDMzODJhMmMyZTAyMDAzYzMxMmUwMDNiMmUzNjJkMDAzYTJhM2MyZTAwMzcyZjAwM2MzMTJlMDAyNjIyMWEyODIzMTUxZjI4MjEyMjIwMTYxMjFjMDAzYzJlM2IzYzA3MDAyYTJkMmQwMDJhPiAzNjI2IDMzNDkgMTEgOTUzMSAwIHMKKzwwODE1MWExZDIyMTYyMD4gMTI3MSAzNTk0IDAgMjMxMyAtMSBzCis8MjQ+IDIyOTAgMzU5NCAwIDI0NTIgLTEgcworPDEyMWIyMT4gMjQyOSAzNTk0IDAgMjg0NCAtMSBzCis8MDAzYzM3MDAzYzMxMmUwMDM1MmEzMzJlMmYzMjM0MmUwNzAwMmQzNzAwMmEwMDQzMzUyYTMzMmUwMDJjMzQyZTJhMzYwMjAwMmEzNjJkMDAzYTJlMDgyYzM3MzUzODMyMzQyZTA5MDAyNz4gMjg0NCAzNTk0IDEwIDc4MDggMCBzCis8MzczZDAwMmMyYTM2MDAzYzMxMmUzNjAwM2QzYjJlMDAzYzMxMmU+IDc3ODIgMzU5NCA0IDk1MzEgMCBzCis8MDgyYj4gMTI3MSAzODM5IDAgMTU2MSAtMSBzCis8MDAyYTM2MmQwMDA4M2YwMDAwMzAzNDM3MmIyYTM0MDAzNzM4M2MzMjM3MzYzYjAwM2MzNzAwM2IyZTNjMDAzYzMxMmUwMDJiM2QzYTNiM2MwMDNiMzI0MjJlMDAwNTNiMmUzNjJkM2IwNjAwMmEzNjJkMDAzZjJhMzIzYzAwM2MzMjM1MmUwMDA1MzUzMjM0MzQzMjNiMmUyYzM3MzYyZDNiMDYwMDNhMmUzYjM4MmUyYzNjMzIzZTJlPiAxNTYxIDM4MzkgMTYgOTQ2MSAwIHMKKzw0ND4gOTQ2MSAzODM5IDAgOTUzMSAtMSBzCis8MzQ0MTA5PiAxMjcxIDQwODQgMCAxNDc3IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA2MGEwZDA5PiAxMjcxIDQ1NzAgMCAxNzc2IC0xIHMKKzwwMDA1MWIxYTFhMTMxMTFmMTcxYjFhMDAwYzFkMTcxMzFhMWYxMzEyMDAwZTFmMWQxMzEwMTkwMDBkPiAxNzc2IDQ1NzAgNCA0NjQ3IDAgcworPDEzMWQxNDFiMWQxOTEwMWExMTEzPiA0NjM5IDQ1NzAgMCA1NjgxIC0xIHMKKzwwYjBjMGYwNz4gMTI3MSA0OTkzIDAgMTg2NiAtMSBzCis8MDQ+IDE4NzAgNDk5MyAwIDE5MjggLTEgcworPDAwPiAxOTI4IDQ5OTMgMSAxOTU5IDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDE1MWIxZjFhMDAzYzJlM2IzYzNiMDAyYTNhMmUwMDM2MzczYzAwMmMzNzM1MzgzMjM0MmUyZDA4MzIzNjAwMmI0MTAwMmQyZTJmMmEzZDM0M2MwMDNmMzIzYzMxMDAzNjJlM2MzODJlM2EyZjA5MDAxYTJmMDA0MTM3M2QwMDNmMzIzYjMxMDAzYzM3MDAzNTJlMmEzYjNkM2EyZTAwMzgyZTNhMmYzNzNhPiAxOTU5IDQ5OTMgMTUgOTQ2MSAwIHMKKzw0ND4gOTQ2MSA0OTkzIDAgOTUzMSAtMSBzCis8MzUyYTM2MmMyZT4gMTI3MSA1MjM4IDAgMTg2NCAtMSBzCis8MDAzNzNlMmUzYTAwMTUxYjFmMWEwNzAwNDEzNzNkMDAzZjMyMzQzNDAwMzYyZTJlMmQwMDNjMzcwMDJhMmQyZDAwMmEwMDA4MTUxNTFlMjgxNTFiMWYxYTAwM2MzNzAwM2MzMTJlMDAzNTJhMzMyZTJmMzIzNDJlMDAyYTM2MmQwMDM4MmUzYTMxMmEzODNiMDAyYTJkMmQwMDNjMzc+IDE4NjQgNTIzOCAxNiA5NTMxIDAgcworPDNjMzEyZTAwMjkyOTFiMWExMzIxMTEwMjAwMmEzNjJkMDAzYTJlMDgyYzM3MzUzODMyMzQyZTAwMzYyZTNjMzgyZTNhMmYwMDJhMzYyZDAwMzYyZTNjM2IyZTNhM2UyZTNhMDk+IDEyNzEgNTQ4MiA2IDYwNTAgMCBzCis8MTI+IDEyNzEgNTgyOSAwIDE0MzQgLTEgcworPDAwMTUxYjFmMWEwMDE0MzczNjM2MmUyYzNjMzIzNzM2MDAxZTNhMzIyZTM2M2MyZTJkMDAyMTNjM2EyZTJhMzUwMDNjMmUzYjNjMDAwNTE1MWIxNDFlMjgyMTIyMjAxNjEyMWMwNjAwMzQzNzM3MzMzYjAwM2UyZTNhNDEwMDNiMzIzNTMyMzQyYTNhMDAzYzM3MDAyYTAwMjIxNDFmPiAxNDM0IDU4MjkgMTIgOTUzMSAwIHMKKzwyMTNjM2EyZTJhMzU+IDEyNzEgNjA3NCAwIDE5MjEgLTEgcworPDAwM2MyZTNiM2MwMDA4MDAzYzMxMmU0MTAwMmIzNzNjMzEwMDNkM2IyZTAwM2EyZTM0MzIyYTJiMzQyZTA3PiAxOTIxIDYwNzQgNiA0NjQzIDAgcworPDAwMmMzNzM2MzYyZTJjM2MzMjM3MzYwMDM3M2EzMjJlMzYzYzJlMmQwMDM4M2EzNzNjMzcyYzM3MzQzYjA5MDAyMjMxMmUwMDE1MWIxZjFhMDAzYzJlM2IzYzAwMmQzMjJmMmYyZTNhM2I+IDQ2NDMgNjA3NCA3IDk1MzEgMCBzCis8MmYzYTM3MzU+IDEyNzEgNjMxOSAwIDE3MTIgLTEgcworPDAwM2MzMTJlMDAyMjE0MWYwMDNjMmUzYjNjMDAzMjM2MDAzYzMxMmEzYzAwM2MzMTJlMDAzNTJlM2IzYjJhMzAyZTAwM2IzMjQyMmUwMDM1M2QzYjNjMDAyYTM0M2YyYTQxM2IwMDJiMmUwMDM0MmUzYjNiMDAzYzMxMmEzNjAwMzczYTAwMmUzOTNkMmEzNDAwM2MzNzAwM2MzMTJlMDAzNDM3MmMyYTM0MDAzMjM2M2MyZTNhPiAxNzEyIDYzMTkgMTkgOTQ2MSAwIHMKKzw0ND4gOTQ2MSA2MzE5IDAgOTUzMSAtMSBzCis8MmYyYTJjMmUwNDNiPiAxMjcxIDY1NjQgMCAxNzc4IC0xIHMKKzwwMDFjMjIyMzAwMDgwMDE1MWIxZjFhMDAyZDM3MmUzYjAwMzYzNzNjMDAzODNhMzczZTMyMmQyZTAwMjIxNDFmMDgzYjNjNDEzNDJlMDAzYjJlMzAzNTJlMzYzYzJhM2MzMjM3MzYwMDJhMzYyZDAwM2EyZTJhM2IzYjJlMzUyYjM0NDEwOT4gMTc3OCA2NTY0IDEwIDg1MjkgMCBzCis8MjIzMTJlMDAzYjMyMzUzODM0MmUzYjNjMDAxNTFiMWYxYTAwMTQzNzM2MzYyZTJjM2MzMjM3MzYwMDFlM2EzMjJlMzYzYzJlMmQwMDIxM2MzYTJlMmEzNTAwM2MyZTNiM2MwMDNmMzczZDM0MmQwMDM0MzczNzMzMDAzYjM3MzUyZTNjMzEzMjM2MzAwMDM0MzIzMzJlMDAzYzMxMzIzYjEwPiAxMjcxIDY5MTAgMTEgODkyMyAwIHMKKzwwMz4gMTM5OCA3MjU3IDAgMTUwNCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDAzMWIxYzFmMDMxYTEzMWYxYzEzMWQxNDAzMWExMzFmMWMxMzFkMTQwMDAyMDgwMD4gMTUwNCA3MjU3IDMgMzc4NSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBiMDQwODA5MGQwNDA1MDkwYzBkPiAzNzg1IDcyNTcgMCA0NzQ0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDIxZjAwPiA0NzQ0IDcyNTcgMiA1MDk5IDAgcword3N0OmR1dGNoMTIgU0YKKzwxNTFiMTQxZTI4MjEyMjIwMTYxMjFjMDAwODA4MDA+IDUwOTkgNzI1NyAyIDcyMjQgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMjE5MDA+IDcyMjQgNzI1NyAxIDc2MjkgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDBjMGIwZDBlPiA3NjI5IDcyNTcgMCA4MDUzIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTkyZTNhMmUwMDJhM2EyZTAwM2IzNzM1MmUwMDM3MmYwMDNjMzEyZTAwMTUxYjFmMWEwODNiMzgyZTJjMzIyZjMyMmMwMDJjMzczNTM1MmEzNjJkMDAzNDMyMzYyZTAwMzczODNjMzIzNzM2M2IxMD4gMTI3MSA3NjAzIDggNjczMSAwIHMKKzwwODE1PiAxNTg5IDc5NTAgMCAxOTM3IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDQwZjBjMGEwNDAyPiAyMDMzIDc5NTAgMCAyNzAwIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8M2IzODJlMmMzMjJmNDE+IDMxNzcgNzk1MCAwIDM3OTUgLTEgcworPDAwM2MzMTJlMDAzNDM3MmMyYTM0MDAyYTM2MmQwYTM3M2EwMDNhMmUzNTM3M2MyZTAwMTUxYjFmMWEwMDJkMmUzZTMyMmMyZTAwMmYzMjM0MmUwMDM2MmEzNTJlMDUzYjA2MDAwNTJmM2QzNDM0NDEwOD4gMzc5NSA3OTUwIDkgODg5NSAwIHMKKzwzOTNkMmEzNDMyMmYzMjJlMmQwNjA5PiAzMTc3IDgxOTUgMCA0MTEyIC0xIHMKKzwwMDIxNDEzNjNjMmE0MDAwMzIzYjAwM2MzMTJlMDAzYjJhMzUyZTAwMmEzYjAwM2MzMTJhM2MwMDM3MmYwMDJhMDA+IDQxMTIgODE5NSA5IDY5MTQgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYzA2MTAwNDBjMGEwNDAyPiA2OTE0IDgxOTUgMCA3NTkzIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDk+IDc1OTMgODE5NSAwIDc2NDYgLTEgcworPDA4MzU+IDE1ODkgODU0MSAwIDE5NDAgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGYwMTA3MGUwND4gMjAzMyA4NTQxIDAgMjQ5NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDNiMzgyZTJjMzIyZjQxPiAzMTc3IDg1NDEgMCAzNzk1IC0xIHMKKzwwMDNjMzEyZTAwM2IyZTM2MmQwMDNiMzI0MjJlMDcwMDMyMzYwMDJiNDEzYzJlM2IwNzAwMmYzNzNhMDAzYzMxMmUwMDM0MzcyYzJhMzQwMDNiNDEzYjNjMmUzNTA5MDAyMjMxMzIzYjAwMzUzZDNiM2MwMDJiMmU+IDM3OTUgODU0MSAxMiA4ODk1IDAgcworPDM0MmUzYjNiPiAzMTc3IDg3ODYgMCAzNTAyIC0xIHMKKzwwMDNjMzEyYTM2MDAzNzNhMDAyZTM5M2QyYTM0MDAzYzM3MDAzYzMxMmUwMDM0MzIzNjMzMDAxYzIyMjMwOT4gMzUwMiA4Nzg2IDcgNjM1OSAwIHMKKzwwODFjPiAxNTg5IDkxMzMgMCAxOTY3IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBmMDEwNzBlMDQ+IDIwMzMgOTEzMyAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzZjMxMzIyYzMxPiAzMTc3IDkxMzMgMCAzNzAzIC0xIHMKKzwwMDJiMmUzMTJhM2UyZTNiMDAzNDMyMzMyZTAwMDgzNTA3MDAzYjJlM2MzYzMyMzYzMDAwM2MzMTJlMDAzYTJlMmMyZTMyM2UyZTAwM2IzMjQyMmUwMDJmMzczYTAwM2MzMTJlPiAzNzAzIDkxMzMgOSA4MTgwIDAgcworPDAwM2EyZTM1MzczYzJlPiA4MTgwIDkxMzMgMSA4ODk1IDAgcworPDNiNDEzYjNjMmUzNTA5PiAzMTc3IDkzNzggMCAzODM1IC0xIHMKKzwwODM4PiAxNTg5IDk3MjQgMCAxODgyIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBhMGEwMTBjMGEwNDAyPiAyMDMzIDk3MjQgMCAyNzI1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8M2IyZTNjPiAzMTc3IDk3MjQgMCAzNDMyIC0xIHMKKzwwMDNjMzEyZTAwMzQzNzJjMmEzND4gMzQzMiA5NzI0IDIgNDI2NiAwIHMKKzwwMDJhMzYyZDBhMzczYTAwM2EyZTM1MzczYzJlMDAxNTFiMWYxYTAwMWYxZj4gNDI2NiA5NzI0IDQgNjUwNiAwIHMKKzwxMjA1M2IwNjA5MDAyMTQxMzYzYzJhNDAwMDMyM2IwMDNjMzEyZTAwM2IyYTM1MmUwMDJhM2I+IDY0NzkgOTcyNCA1IDg4OTUgMCBzCis8M2MzMTJhM2M+IDMxNzcgOTk2OSAwIDM1MzYgLTEgcworPDAwMzcyZjAwMmEwMD4gMzUzNiA5OTY5IDMgMzk4NiAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBjMDYxMDA0MGMwYTA0MDI+IDM5ODYgOTk2OSAwIDQ2NjUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOT4gNDY2NSA5OTY5IDAgNDcxOCAtMSBzCis8MDgzYT4gMTU4OSAxMDMxNSAwIDE4NDcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGYwMTA3MGUwND4gMjAzMyAxMDMxNSAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzYjM4MmUyYzMyMmY0MTAwM2MzMTJlMDAzYTJlMzkzZDJlM2IzYzAwM2IzMjQyMmUwNzAwMzIzNjAwMmI0MTNjMmUzYjA3MDAyZjM3M2EwMDNjMzEyZTAwM2MyZTNiM2MwOT4gMzE3NyAxMDMxNSA4IDcxOTQgMCBzCis8MDgyMD4gMTU4OSAxMDY2MiAwIDE5MjkgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGYwMTA3MGUwND4gMjAzMyAxMDY2MiAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzYjM4MmUyYzMyMmY0MTAwM2MzMTJlMDAzYTJlM2IzODM3MzYzYjJlMDAzYjMyNDIyZTA3MDAzMjM2MDAyYjQxM2MyZTNiMDcwMDJmMzczYTAwM2MzMTJlMDAzYzJlM2IzYzA5PiAzMTc3IDEwNjYyIDggNzMyMyAwIHMKKzwwODNiPiAxNTg5IDExMDA5IDAgMTg0NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwZjAxMDcwZTA0PiAyMDMzIDExMDA5IDAgMjQ5NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDNiMzgyZTJjMzIyZjQxPiAzMTc3IDExMDA5IDAgMzc5NSAtMSBzCis8MDAzYzMxMmUwMDBmMGIwZDA5MGQwMDIxPiAzNzk1IDExMDA5IDMgNDg1MiAwIHMKKzwxMjFmMDAyZjM3M2EwMDNjMzEyZTAwM2MyZTNiM2MwOTAwMjIzMTMyM2IwMDNiMzEzNzNkMzQyZDAwMzYzNzNjMDAyYzM3MzYyZjM0MzIyYzNjMDAzZjMyM2MzMT4gNDg0NiAxMTAwOSA4IDg4OTUgMCBzCis8MmEzNjQxPiAzMTc3IDExMjUzIDAgMzQ5MyAtMSBzCis8MDAyYTNiM2IzMjMwMzYyZTJkMDAyMT4gMzQ5MyAxMTI1MyAyIDQ0ODAgMCBzCis8MTIxZj4gNDQ3NCAxMTI1MyAwIDQ3NjUgLTEgcworPDA0M2IwOT4gNDc2OSAxMTI1MyAwIDQ5NTYgLTEgcworPDA4M2Y+IDE1ODkgMTE2MDAgMCAxOTA5IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBjMDYxMDA0MGMwYTA0MDI+IDIwMzMgMTE2MDAgMCAyNzEyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8M2IzODJlMmMzMjJmNDE+IDMxNzcgMTE2MDAgMCAzNzk1IC0xIHMKKzwwMDNjMzEyZTAwMzQzNzJjMmEzNDAwM2IyZTM2MmQwYTNhMmUyYzNlMDAzZjMyMzYyZDM3M2YwMDNiMzI0MjJlM2IwMDMyMzYwMDJmM2EyYTM1MmUzYjAwMDUzZjMxMmUzYTJlMDAyYTNlMmEzMjM0PiAzNzk1IDExNjAwIDkgODgyNSAwIHMKKzw0ND4gODgyNSAxMTYwMCAwIDg4OTUgLTEgcworPDJhMmIzNDJlMDYwOT4gMzE3NyAxMTg0NSAwIDM2OTIgLTEgcworPDA4MjU+IDE1ODkgMTIxOTEgMCAxOTc1IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBjMDYxMDA0MGMwYTA0MDI+IDIwMzMgMTIxOTEgMCAyNzEyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8M2IzODJlMmMzMjJmNDE+IDMxNzcgMTIxOTEgMCAzNzk1IC0xIHMKKzwwMDNjMzEyZTAwM2EyZTM1MzczYzJlMDAzYjJlMzYyZDBhM2EyZTJjM2UwMDNmMzIzNjJkMzczZjAwM2IzMjQyMmUzYjAwMzIzNjAwMmYzYTJhMzUyZTNiMDAwNTNmMzEyZTNhMmU+IDM3OTUgMTIxOTEgOCA4MzcyIDAgcworPDAwMmEzZTJhMzIzND4gODM3MiAxMjE5MSAxIDg4MjUgMCBzCis8NDQ+IDg4MjUgMTIxOTEgMCA4ODk1IC0xIHMKKzwyYTJiMzQyZTA2MDk+IDMxNzcgMTI0MzYgMCAzNjkyIC0xIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgxMikgMTIKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNCBwdXQKK2R1cCAzIC9DMDAzNiBwdXQKK2R1cCA0IC9DMDAzOSBwdXQKK2R1cCA1IC9DMDA0MCBwdXQKK2R1cCA2IC9DMDA0MSBwdXQKK2R1cCA3IC9DMDA0NCBwdXQKK2R1cCA4IC9DMDA0NSBwdXQKK2R1cCA5IC9DMDA0NiBwdXQKK2R1cCAxMCAvQzAwNDcgcHV0CitkdXAgMTEgL0MwMDQ4IHB1dAorZHVwIDEyIC9DMDA0OSBwdXQKK2R1cCAxMyAvQzAwNTAgcHV0CitkdXAgMTQgL0MwMDUyIHB1dAorZHVwIDE1IC9DMDA1NiBwdXQKK2R1cCAxNiAvQzAwNTggcHV0CitkdXAgMTcgL0MwMDYxIHB1dAorZHVwIDE4IC9DMDA2NSBwdXQKK2R1cCAxOSAvQzAwNjYgcHV0CitkdXAgMjAgL0MwMDY3IHB1dAorZHVwIDIxIC9DMDA2OCBwdXQKK2R1cCAyMiAvQzAwNjkgcHV0CitkdXAgMjMgL0MwMDcyIHB1dAorZHVwIDI0IC9DMDA3MyBwdXQKK2R1cCAyNSAvQzAwNzYgcHV0CitkdXAgMjYgL0MwMDc3IHB1dAorZHVwIDI3IC9DMDA3OCBwdXQKK2R1cCAyOCAvQzAwNzkgcHV0CitkdXAgMjkgL0MwMDgwIHB1dAorZHVwIDMwIC9DMDA4MiBwdXQKK2R1cCAzMSAvQzAwODMgcHV0CitkdXAgMzIgL0MwMDg0IHB1dAorZHVwIDMzIC9DMDA4NSBwdXQKK2R1cCAzNCAvQzAwODcgcHV0CitkdXAgMzUgL0MwMDg4IHB1dAorZHVwIDM2IC9DMDA5NSBwdXQKK2R1cCAzNyAvQzAwOTYgcHV0CitkdXAgMzggL0MwMDk3IHB1dAorZHVwIDM5IC9DMDA5OCBwdXQKK2R1cCA0MCAvQzAwOTkgcHV0CitkdXAgNDEgL0MwMTAwIHB1dAorZHVwIDQyIC9DMDEwMSBwdXQKK2R1cCA0MyAvQzAxMDIgcHV0CitkdXAgNDQgL0MwMTAzIHB1dAorZHVwIDQ1IC9DMDEwNCBwdXQKK2R1cCA0NiAvQzAxMDUgcHV0CitkdXAgNDcgL0MwMTA3IHB1dAorZHVwIDQ4IC9DMDEwOCBwdXQKK2R1cCA0OSAvQzAxMDkgcHV0CitkdXAgNTAgL0MwMTEwIHB1dAorZHVwIDUxIC9DMDExMSBwdXQKK2R1cCA1MiAvQzAxMTIgcHV0CitkdXAgNTMgL0MwMTEzIHB1dAorZHVwIDU0IC9DMDExNCBwdXQKK2R1cCA1NSAvQzAxMTUgcHV0CitkdXAgNTYgL0MwMTE2IHB1dAorZHVwIDU3IC9DMDExNyBwdXQKK2R1cCA1OCAvQzAxMTggcHV0CitkdXAgNTkgL0MwMTE5IHB1dAorZHVwIDYwIC9DMDEyMCBwdXQKK2R1cCA2MSAvQzAxMjEgcHV0CitkdXAgNjIgL0MwMTIyIHB1dAorZHVwIDYzIC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTI1NiA5NzggNzY2XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjI0MTA0ODk1OTE1ODhCNkU3ODIzRDNENzRDMkVBMzJGRTkzCis5RUI4OEFBQjNCNTkxNTc1NDYyRjJFOTYKKzU1Qjg0MzVFMTQxOTY5OUU4MworNDExMTI2MzMKK0IwRkExQTRFQzkyNzg3Q0Q3QTI2QTg3M0Q3QkQKKzFFQ0YxNzVBRDRFQTQ4Qjg3QUVDM0FDQzhCMzhFM0IzOEYxRERGQzU3ODBEMkIwOTA5NDJFOTk3RDY3OUExMzA4MkYwQ0Y1N0ZBNzczNTI5OUY1QzJGN0MwNUZGQTVCRTMwRjlCMkJFNTFENkE0QTJERThEQTdGNTQzQURFQzI5QkY1MEI3MDUyNDNGQUZCNTAyQThDQ0I1M0I5OTc0QkY1QjRBRjY4MkJCM0VGRTU2QTY1OUE3MTJFRkU3NTcwNjcyOEYzMDQyODM0QjFBCitGQkNCMjIzRQorNzE1RThGMTg5QTc2NTdFRDc3MEM3RDhGRjk2QworRThBNUM4Rjk0OTZDMzlFM0M3Rjg0QTkyRUE2MjEzOENBMzVCNTczQzdBMkZENDRFN0Y4NkJGMjUwQ0RCQkE2RTJDMkM0NDc4QUQ4MTAyNUE4MjIxNUMwMDI0NTU5OTgyN0M0QkNCN0Q1QzEzQTVFRUMwQjM1Rjk2N0M4NjI0QjVCRkMzOTY3MEMyOUQ5RkMzMTYwQUZFNUJBNkVGMDNEMTA1Q0ZFQTdGNzI0QzY4NkNGMjg4M0VDREM3NEMzMkM3OTU2MEE0MEUyRDFGRTgxRTE5RThBMTZFOTQwQkVEMkM4QjY4MDJGRDY3NkIxODEyODU3M0FCOTUzOTEwCitFMTgzCisxM0I2MTRCQTNCMUNBN0JFMjBCOTE5MDUKKzQ3RDFGMTZDCitERTE5MEExRjFDMjE4RTYxRjc4QkEyNTFFMAorMDgwNkE3M0RCNDYwM0U5MDc5MjlCRjU0OEEyODhDNEIwMzU2RTFGQTBBRDVCMzNDMDcyODdDNzQ2N0ExN0I2NjA4RUI0M0EyRUZCMEM1MkQwNzBCNzc1NkE4NDQyOUFDNEIyRTVEMzYxQUNFQTU1QworQUE1MjYyMjYKK0JDQzBFMzBGMDVGRkFCNjE3NjZCMzc1QzZGCitBRTU1REMyRjJEMThCOUQ3OEEyMEEyNTAyMUUwRTlBRThEMTFBODFFNDNENDRGOEU2ODc3QTE0RkIyMUJBQTI1RjE5QUREOTBCOTk5NjU3RUQxNTZFQTI1MDM1QjZDN0ZBQ0Y2NDZCNEE0QTM3RkVBNDI3RUMwREI1N0I5RDE5MQorMjdFRjU0OUUKK0I2QTQzNkQwQUM2NTg0MjNBMkJCOEIyQTUxCitFQzM2NDkzNzVGRTgyNjYzRjAwMTMwOTg3RTE0QzBFOTkyMTMyQkJGRTJFRjk1NTRFREMzOTg3RjMxNTk5NkM1MDEzMzc3ODNBM0JGNTVCRjlBMzg2NzdDNDQ4ODQyMUI1QUZFMzk0Q0NGRDI5MjE3MTUyQThGNkUyREU1QUIKK0ZGQzkyNjk3Cis3NUU3QTg2RUIwNERGMDEyRTg3QjYxREFCQgorMjUyRUY5MUU1ODczMzA1MkVDOUJGMDIxQzg3NjlCMjEwMTMwRENENTRBRTI1MkEwNjdERkY0NTAwNEMxRjFBQjk2N0NDOEYxRjM4RjIxM0Y3ODZBN0Y2RkY0NjM1QUU2QTBFMUE1NjhGRDQzNEE4Nzc4Cis2MkIyMjE0RgorNDU3NkUxQzEyNzcyNTY1RDhFMThFMEU4RkYKK0FDNTlDMkE0OEUxMjM2RTgxQjgzOUU5OUMzMkU1NDEwQ0ZFRUI2RkJGQTcxNTUKKzlDN0E3MjJFCis3MjAwMTA2NkQ1MzQzMkQ1NTk2QUFFNjIwOAorRjE4OUQ4Q0JDRUMzQzQ5RkM3QjM4NDcwMDY0MTc3RDhEOTlGN0IxOUQ1NTBDRTgzNzIyQzk1NjQ5ODhFRkEKK0I3OTNGMEIzCitEQTJCRUNGQjYzN0M1MjgzRTlBRUE0NTJBQQorQjUxQTgxODdDNTAxMzY5RjFCNzgzMENENEI5NDU2NUUxMEM5NzA4NjZFQTgyQkM5MjcwNjZGMTgKKzA1NDg5NkI5Cis0ODdCMjBCODZDNDgzNjU4NzA0NTM0NDYzRgorMjVEN0NCMjg0MjY3REZDMjZERTBDRDIwQTE3ODc0RTc4N0E4REExQkM4N0M3NDUwMUM5RTM3MTIzMkFGNTU1MzRCNDE1QTc2MkYwQUFFNzlENzdDNkZBMUFEMzY4NDgxQTQ3OUM1QjcxMDExNzRCNTE3OEYyNkNGODBDMDE0NEUwRUNBNTE1NDFFOTlCMTQ5MTAzMworNDZBQjQ2NEMKKzA1NTAyNUNBRjA0MDJGODlDNkQ3MDYzRjMwCitDQUVFOTE3RkQ0NTI1NzkyMTkzNDkwOTdGNzA2QzYzN0U2MTgyOEQwMERDMjc1MTAyQ0Q3MDNERkE0RDE1MDcxODFDQzUxMzlBRkFBNjc1NTkwQUEzQTM0NTJEOUY2RDU3OTA2RDhDQUM1NEE3N0NCNUNGNjcyQjU5QUFGOEIKK0FFOTJBRkQ4CitDQjQwOEREOTI0NzY5MTNFQTM4ODZDQzQzNAorNTVDNkM0NEUzRDk2NjQ1RTcyQkQ5QTc4QjI5MjNCMTE2NjFFNkFGQjgyMjJENzgxQ0QyREZGQjkxQTRBNzM5RDQ3OEY1OUFEMDQ3REY0ODJCQUQxRTYzNjc4NkIyOUFDOTQ4QzNDNEJDMEZFOEU4N0IyNUI0MUQyMjBFRTU0NkFDMzM0NDVFQzY0NDdBQjJFRDJEODAzOTY2MjgwNzMzMDBGRkFDOEY5MTREMTVGNkExRUIwCiswQ0EwRjI5MgorRDUzOTQ4RkZDNjg1OTA1QzdBRkU4M0VCMTYKKzBFQ0I0RERBNkQxODFDNzZBMThFRUFCRDVGNjVFRDREMEM1QkU0OTEyNjFGQ0FFM0FGOUM3RDI4NUQ3MzA2MEMzMDRFQzA2NDkxMUU5NEI5M0NEODQ1RjUwNjQ3M0FCMkE0MUY3MEIzRTYzQjVCMERBNEIwCis4RUIwM0E3MgorODQ3MTMwODgyMTg0RTlCOEI4MkYxQjI0MzdCQgorQzQyOTVDQ0QxMzI5MTY3MzMwOTBDMDJBRkM5ODc5M0FGM0Y3OUUzRDQwQjM3MzM4NDU2QzQyNzE3MDIxNzcwQTlCOTNFOTQyN0U1RjhGODAzNDZGQzhFNDgxRjlDMUNFMEYwQjc0MDQwNEI5MDBDMEFGMUU1QjY3NENDNTU4NTQxNzFCRkNFM0RGNDkxMUM0REQ0M0VERjRFQzUzODZFM0UwMkMzRDRGNkRGNjc2RjFEMzlCMTAxN0U1RkY1QTkwOTkwNENEOTU1MDNENUVBMThDMTAwRDkzMkRGRDAyODU2MzdCMTc3Mzc2NkNFODgwN0YwOQorRDRERjUxOTYKKzA4ODM0NDRDRTk4MTI3MzdENzU0NDU5NUQxCitFQTk1MjkwMTIwOTA0MjgzRkFDNjNENEVFOEY3MzZFRkZBQzZENjJDNDBFNTE4Mjc0RkY5RjNBQkQ0NkEwMjE3NTVGREUxNDRGNDA2M0Q0QTEyRTU1RTNBNERCMUNFNjExMzcwMTJENTNGNDQKKzRGQ0EzOTM4CitEODlEQjIzN0VBM0Q2MzFFNDU1RUE5RDYzQworMDY0QThGNTlBQjczOTRCQ0Q1QTRDNEI2OEEyQkYwMDgzRUQ5NzdBNUIwRDk2OTk0NDM0RTE1RUYxOTk1NDE5NTRCOTA1NTEzCitBRUJENEUxMAorMDIzRkM4OUJEMjc2M0IwMzI5MkFCREMxNERBRQorQTY2MDAyQUE0Qzc0QjJBMjI0MkJDQzRBQjlFQzMwREY2QUYyRTI5MzIyOTM2ODNDOEQ2QzgyM0ExMkY0MDQyNTdBQzc5NTE2RTE1NTZCQzI5NjIzNDA0NDgyNkY1NTlBMkUxMEE1MjI1RUI0MkExNTc4QTQyREUyNkJFNTk0RkE2NDEyMjRGM0NGMUYzMDcyMTJGNUFBRDM2Q0JFNzcxRUM1QkRCNDhGNzFBNENBODM1NTZBNTdDRDNBMDU1NzBCOUJBMTU0QThBQTkzOTlCRUFBRTVDNTYwMjhEMDU5Q0NERDAyREQKK0YxQjhFNUFGCiswQTJDNDM3Q0YwMUUwRDg2MEZBOEY2NzFFM0E2CiswQ0JCNzQ2RDlFNUU0NjUwRTJENjkxNkVEODQyN0M2QjRDNkUwMDc1RTYwRTE5RDBDODk0NzU3RUE3MEIwMDg3NTNEN0QwNDYwMTA5MUU2Q0FENDk3NDI3ODU3OUMyQ0E5NDk1M0Q4QUQ2NUMwQTVFMjFDQTgyRTYwREU2NTgzMUE1MTY5MzhEODQwREYxMDU5OTMwMEM0NDRBQUQ2ODZBNjZCNzY0Q0M5RkY2N0RGNEFERTEwMzk1MTIzNkQzNzNFNUY5RkRGODY5QTY5OThFOURGRDAxNDQ4MTc0RjBGMzAxNEY0QjQ5QUQxQUEzMUY4NjBFREYyM0VCQTUKK0E4OTAKK0RECis2MkIwRUI5RAorRjIwRENCREIzNUVEQzA3NkM1NTVEREYzNjMKKzc5NjczQjdGM0VFODlCOUFDNTdBRjVGMTVENEI5OUUzOUY5Q0FBREY2QUQ0MTM2QTJEMjJGRkU1QzQwOUY4MzAzRTgyOUUzMkNDODAzMkRERjdBMkNGMThDOUFDOTdCOThGODQ5NjExNTM0M0UxODQ1RkJGMTUxNDlFRTJFRjQzNjk4QTUwRjkyREEwRTY5MEFDRUFDQzBFM0UxMjFGODM2MzQzRDg1OTY5QTFDNjVFRUM0QkNGQzVBOTA5REI1RjU2CitENEJDODQzRQorRkQ2MkM2ODNCOTUzQzU5MEZDOEQ3NzQ2OTMKK0M0NTM3MzYxQkFBOTRBN0Y4Rjk5ODQ2QzlDQUNERjg3ODdDMEQ2QzlEMkEwNDMzMzUzMEI5ODI0MzJEQ0UzREZFM0VDNkEyQ0Y3MUZDRTg2QjI4M0ZFMDU2QjA2MzQ4Rjk0NzA0MTJCRDFGNzgxRkNFNzFFMjQ4QTRBNkYyNUYwNEQxMkMwM0VFNzUzQTg5RUQ2OURFRUU1NTI5NkVDNzUzNzQxMzAyMDk3Q0UwRjdDRUZGNkU0QUFBQkVBQ0M0MkJFNjUwRgorOUUzNzk1MUUKKzYwQjU2RUM1NjVGMDlEMjM1Njg5NENCRUZFNUIKK0QzMUM1QjE0MUE0NUZGNzA2NTI4NzE1OUE1QkQ2REZFMUVDNDI1OTQwMjQzNzA4MEUzNTU5QkY4QjBDRjNDNjVFQkI0N0ZBQkM1MjIyMjc4MkMxRUJDNjA1NEM2Q0UzMzQ4MDBCNDM1QkVEOUUyRTRGODg0MUExODlCREQ1RUE5NjI0N0MyM0UwNEUyMDgxOEE1NzI4OTU3OEMyQkFCQkFBQ0E1QTBGNEQ4RjM2MzRFQzY5NjNEMTJEQTdCNUM2QjhFODBEQUM1NzFBQUQzRDNCMzVGMjFFNUUyRUM5MTEwN0MxQ0NFODVDRjAzMkY5NjI1QTA3N0MxQURBNQorQkJGOTgwQjUKKzI1QkYxMjE0NkIzMTNFMjg3NTdEMTA0MjAyRkIKKzNGNjc3REM0NUIzRTVENzExODZCOTA1Qjg2N0UxMDVGNkNDNEZENzk0QTZFRjVFMzMxRTYwNEM4NUQyRkYwOUQ4QUI4MjJGNDg0MzM5RjAwNzE4Qjk0NkFENjk4Mzk1ODA5RTU2RjIxRjBDRjVEMDk3RDJDRDE4OENFMDgyQzM1RkNCMUE1Njc0QkMzOTI5RTgzNjQ5M0UzNzNFN0MxRjRDQjFEQ0RFMENDQjAzQUIyMENCOTA4QzgxMTFGODlBN0REQTQxREEzQTMyNEEzQ0I4RTIwNTFFNzQ1QzA3N0M1NUNBNjg2RDgyM0REMDdGMjhBRkFFQUQxRTk4MQorQTU1QgorRDMyRTI1NzQ2NURGRDRBNjVFOTY1OQorQjdBMUU1RkQKK0FGNEEyN0I1NTEyOUU5NkYxNjgzMTQ5QkRCCisxNkExQUZFNzcwMzZCRjYwNEM3NDhDQTFBQ0VENDg4Q0E3NTIyNTNBQkJGNThDRDJEMkE0MEFERjc1MzY1QTBBRjM4QzNGOEM2MDI5QTYwMzRGNDY1RjRGQzZGODk0RTczQTk3NjkxMzA3QzUyOEUyRkY4QjgyCisxMkVBREIzRQorMzNGMzZENDE4Q0M5QkRFQjNBMURGMjc4QzQKKzZBNEYyNkRFODExMzM4REUxNTg5MkE4OUM3RjQ3ODdDOTQ5NDA5ODAwNjYwRDI2MkQxMUQ4OTY2MTY1QzU3NDBBMkNEOEJFRDIyNkVERUJBRjU0M0ZBMDc5NTkzQTBDQ0ZCNUREMkU1MkE1N0IxRDYyMjdBN0JFOEJEMkMzMUE2NTgxMDcwREUzNDM2OTkKKzEyMDU1QzRECitCMjVCMEZBQkU5NkY3MkZENUUzMzVBOTAxNDE0Cis2N0E3MTIwN0ZENTAwQ0JFNkZCNTk4OTY3NUUwM0IxMURDQzdDRkYzMTkzMkM2OTMxRDhFRjNDQTJEMUUzMjI1RjE2OUY0NzNFODczNTZCRTY5RDI4QzkyQjhBMUJDNDEzOUY4RjhFMjJDQjlGNzgzQjgzMTA1NEMyQkUxQzQ3QzkwM0FFQzMyODVDN0QyNzJDRjFBQzE4MENBOEY1ODBBNzE0NDVCMjkwMjcwQkJDRURBRTMzRDU4RENGMTZFRUMxREZCNkE5NDYwOTg3QzkwNjlDN0Q3N0NFNzU4QUMKKzM2OTBGQTZECis5NjhBQUREODA4RENBNkIyRDE1MTI1RDhBMQorODlGQkVENDMyQkU1MzE0MUJDMUVDOUZGRUU4OUEyMDk0RDhFN0QzRkVFRkRFN0M1NzZDOEUwRTNCQTU4ODc1QzUxOUNDQTk1NTdGMDE4QzQwRjUwNzI2QTQ1MTE5RjhDMzI3OTVDNjkyQTRFMkM1M0E2QzJCRjY2NUUwQzNBN0QwQkY2QkMzRTUwRTRDRjg2QzVEMzFENzY1MjAzOUM1QTc3MjYwMTk1NzA3RjhFOEJCN0Y0MTY4MgorMzU5NjNDOTkKKzRERjg1QzEzM0M3QTlBQTRDRTI3NEMyNEI2CitCM0E2ODRERDA0OTU4NUIwQTRGNThCRjM2RkZFN0QzQzhCMjEzQUU0NUQ2REYwMjlBMUU4RDA5QTczNDVDNTlCQjRFNDA5RTc4MjQ0M0UyMTJGNzI0N0YzNDBCMzI0QTZERTA1MDI3Nzc0QUIzODlDNjkwNDA4REQwNEM2MzNEMTAyNTYzNUY0QzdEOTAxODU4ODBFOTMwQkFCOUIwQ0UxODdFMUIxCis3NTlERkVDQQorQzlCMDYxOTlFREFDNTc3RTc4NjA5QzdFRkQzOQorMzg1NTNBRUExOTg0QTIwMzczRTkxNENDRjcwMkREMTk2REJFNkU3MUYyQkM2MTg2MEMxNjk4RUQ5Q0Y4NUMzMzcwMzFBM0NDRURCQTRBNzMwMUMxQjFFRjM0OERCQzk5Nzc1MTcxMjg0QzE5REJEQjk3NkVFOEE0QUU2REFBMEU3REJEMUVFMEEyREQ3QzhGMDdCMUUwRDFEQ0JERkJFRDEyN0U4NzBCQ0I2QzIzOTY2OUIzRDIyMzY4Mzg3NzQ4NENERTYxQkRGMEQ0MzQwQTZBQTEKK0I5MzMyMjhECitGQTIwMUE4QkYxOThFQzREMkQxRjJCNkVFN0IzCis3RDE3OEJENDM1NDA0NUE1RkJBQUVFOTk5MzNCMTMyRDg4RTNEQkNGODM3OEEzNTAzRDAzN0IzREZGRjBBRTM3MDZEOTJBODZBREQwMkYwNzdFREJCRTJENTY1QzdFMTU4MkQ0MkE1RjY0MjY5M0YxMDIzMUFDOTZFOUI1QzZCNzlCMjE4OEUzRjAzMDc1RkNEQTJDQjEzQjM0Q0Q3RjA0MEFGQTk0NjlCRjIyRjEyMjU5OEM2RDVFRTU5QTdDNERCODAzQUUxRjNFRkQwQkQ1MTY0MDJFNjZDRDg4NkE5RTMxOTY2OTg5RDc2Q0JEQjQ3QjRCNEQzN0Q5MTUKKzhBODEyRTI1CiszOEFFNkJDNjQ5MjM5MjUyRjQ4OTAzNkVFODkyCis1MTI0MzA1MzlBMjA2NzREMTMyQUI3Qzc5QjJDMjAyMjQyQjVFNTU2QjU5OTY0RjM2NjBBMjI2RTY1MUI5MTA1MzI4REQ3QzI2ODUyRTAyQjMxMTI4Q0JBRkFGNkUwRDZGMEYyRjRFQTJEQkU3RTg1RTZFOTdFMzcxN0M2NkVDQzAzREQ0Mzc0MkJEMTY3QjY5MUVGQjhGMDc3QzEwRDU2MEUzQjM2ODJCNDdCNTU5MkY5QjQ2MjQyOTNFQ0VFN0U1MTUwOTlERTY0RTYxN0JEMzkxQUZBQjU0MDYwOUQ3NEZDN0RERkRGMDZBNzJBMzVBQkM3MDNDMEFCQTkKKzIyQzgKKzQ4OUJGMQorREJCMjBERTkKKzRGQzYwNTVDNzZFOEFBREUxM0M4N0Q3MDgyCiszNzFEM0Q0ODE0RjVDRDRCNDBFMzA1QkI0MTc3ODI1RDk2MjlGQjZBNDdFRkIzMTk4M0JEQkYzQzA4NDc5MzY3QTlGNzA0NjBCNDRGNTY1MjEyMzc1OUM3NURENjZCNjg3QUE2QjY5RDlDRTlGMDUyMUJBQUI3M0I2Mzc2RkNGQzlFNjg4QUU2Mjg5MTYzRTY5NTFFQjUyMzVBNEY1QUFBMTYKK0I2NDlGQzQxCisyRUZEQjcxOEQyQkMwQzhDNEUxRDM0OUZDNkVECisyNDg3OUYwMjAzQzI1NUMzQzM4M0MyQjIzODVBRTJDMDhCRjkxMDgyRUVBREE4MjI1MTExOTAwMDhGQzE4MTE5NjZBNjQ2MTgyRTcxRTUxN0MwMDBDNzVCRkU5NTZERkE0Q0FBMjVDMzNGREI0RkZCRDE0RjBFQzY1NDNGODQ1QkJFQUIzN0M0QjA4MUQ5QTk5ODRBNEJFREI1ODBBQzMxODQ1RTdENzY0OEQyOTNENzhFQjk3OTk4NjBFNTU0QzU1OTVBOTUyNQorQTBBMzA5ODkKKzNEREVFMjFBQkU3OTZFODFCNEMyQ0E1NjgwRjYKKzIyMTE3MjUyNEMwM0Q1MUFDNjMxRUU2MEI2OEVCMEI0NEI1N0ZDQUQ1MEM4NkEzMEE2NjdCQjExRjBGRDY2RTFGOTA4NjMyMkU2MzJERjM5RDFDREY2Mjg1Q0NEM0FGMDZDMEMzNTEyNzlCQ0JCQzMwRjQ3Qjg1MThDQ0E4OEI3RDc1MDYyMDUzRDY3Q0UwMEZEN0VGREU2OUY2NTc3MzRDQUM3QUQ4NDdCM0Q0RUQ2RUZCMUE3NUI5NDhEMDMzQkMwNzI5Q0VERTlGNzgwOUY2NkI2RjQ1NTA2OTlFQURDQkRCMDYwQTE0NEE4MUUzNTZGNzI1MzI4RDE1NAorQUZDQgorRDRGNEUyMDY1ODhBQjlDQ0ZCMTREQUE0N0ZDM0UyQTgKKzY1OTE3RDJGCis1NzYwRkVGNTgzMERDRDZFRDU3RUQ5Q0MwMjdFCitFMjNGM0IzQjVBRDI3MzhEQjY0OUIzQzY3NEE5QzU4Q0JEMTI3MDc0NDU4RTgzMkZEQURDMkQ4RUQxMjY0OUMwQjJCOEEzNURFNTE3OEYwN0U3NjM0RDVBMTNDNDM3MjA1RjlEMkEwNkE0MzI2Njk2NEIzMDI1ODk2QkZFNEI1MTJGN0M0OURGN0Y2Mjc5MDlERjMwQjg5RTA1NTZEMzBEQTExODc1OEZGNzQ4RDQyRUY3MTQ0QjYxNDUxNjE5MTA2MzJENzY4MUJGMzM4REUyNkJCQkYwN0MzQjlFQjkxOUI1Njk2MTFGMEIxRjIwREUxMzJBN0M1MkQ4OTkKK0ZEMzUKKzExOENDMTcwOEE4MkE4RjdENkRBRjQzNzkwQTBGMUQ0QTA1NEYxNzk5NDMxRUU2RDJGNUU5QjM1MThBQkM2QTkyMDUzRUJEODJFM0IyMAorMzIxQkY5Q0YKKzk0N0JCNzkwNzYwMjA4MDlBRjZGQjNBRDZBCitDNTU1NzVFNkU3RkZEREMwOEFBQjI4Rjc4Q0MzQkVDRkZDRERGMTgwOTMwMQorMjY5RTdBNzEKKzc4NjUzOEI1MzNFMzhFREMxODc0QzNFMDIwCis1RTBCQkUwMzIwQTNFMDI3MzJBQUNENzZBMjI4QzcxRDlFQjFBNTYzRjVEMTMzNTc4MUJFMUY5RTFCNUIzQkZEOUVDNjhEOEEyMEY5MTAxQjM2NkUyM0RFNjlCMEJDNjNDNkQyQUJBQ0E5QkM3RjIxRTY1QQorRDQxNEE2NkQKKzQyRjdBM0QyNkE0RjMwRUQxNkVENURGREIxREEKK0U0MjhERUExQTcyOTU1QzkzMDlEODcyOTVFQTI4OUQ5MUVGNUE4Mzg2MDE0RDcxQjVBNjk3OTVBNjE1ODNGMzVEMERCMDEzQzY4MEI3NzVDNTE0RjdDMzZDMUM4NjA1Rjk0MjFFQjIwRjFENkRCM0EwNURFODM0RjQ1RDlBRTUyMzE0MEZGMjIyMDRDMDVEOTlBQkJCNUUwQzVFREYzRDBBRTdDQjExMEFEMzYzNEZCMjAyMEIyMkUwOTk4ODI4OUM2NDAyRjk5RTY1MTQxOTdEOURFRkUyRTcwQjNCNDBGQkQ4NzhFQjVGODY2QzFEQzA4QTdERTcxODI2MgorMEE3NQorRDJGMzBDCisxNERBRUJDMgorRTQzMDVERTdDODVGNUY4MUFFODVDRUM3MDUKK0EyRUI4OUQ3NzMxMEMwQTY3OEU2NTFDOTJEQjkyQjQxRjE0NEY0RUNGNDlGNjQ3OTY5OEUwNDJGMzVBQzZCNTRDOUJEMUVGMjQ0NTVCNkU1NTc2QzU0NDQxNzUzRTA0NTZCQkRCNDVDQUQyQUIxNzUxMERGNzczQjM1RUUwRUQxMTVCOTJBODRBQzRERTg4NjU3NDA5MDEwNTAxNjQ2NUY1QURBQ0Y4M0NGMUFGRDg3CiswRUU1MTU0QworNkZGMjcyQjVGMTc2QkI1NTI2Q0ZCMzNEN0MKKzZEMDM0RUI4RkYwQUQ0MkI3NUQ4OTk4OUEzM0FEQzhGNUNDRjdGNjNBNzg1MkU1MTIzQUYyQzA0ODQzREJBNjRBRkM5NTM5RkNFMjExMTk5NjI2OTlEMDU4MDdBQzBBNzI5NkVFQzUzRDYyRjE5NEZCQzJDQjJGODQzMTVBODZBRjc4NDA0NEEzMzZCNzk3RDREODIwRUVCNDIzMUE4NUZCNjdBCis3Nzk1Qjk4QworQjM0NDZGNUQ0RkIxRTg2QzlBMDYxQTMwQTBGOAorN0Q3QkFGNTNGNzZENERFMkY2Mjk2QUJBNDQxRUYzOTE1QjA5REQyODU2Q0JGOTlCQjk1MTVDNzFENTIyNEREREQ1QkE5NTBFOEQ2NTZBRTc5RTE2OTAwMTA1RUIxMjA0QkE4NkZCNkUxMjA1RkI2MDk4QjU3QjAxQzkyMUU2QzRCNUM1MEREQTE1RDQzQkM0MUM1Q0VBMzgzNzEzM0M5MDY4M0QyODI2QUZGRkFGQzNDQjkxOTM4REYzMURCNTk4QjRBODA3ODc2QjM0Q0U0QjFBNkZGNEUxRTg2RQorRkY2ODAyMzkKKzI5NkNCNDYyQTM4RUYzREFCOUUyNEY1MUYzCitCN0ZDNUM4NzA5QkFBMUZCNTU3NEFDRjI0RTAzM0M0QUY5M0UyMjQxRjZCNjVDRDlBQkNERTkwQTdBNEU1MkYwNEY5MDlGMTYyRTZFNkEzRkZEMkRGNUJCOUI3NjBFQ0I5RjkzQTY1MDNBQTIzMEU0NUY3NkNENEY0QzlGMkNDRjVDMTRDMjZBRTIxOEE5NjBGRDFFMEM2QjRBRjQ4MzlDNTZGQUIzNjIxMzJGOTI0MUVBCitCMzBBQzg4OQorNTE2QjFBQ0NERTY3NzIyMjJBQzVCMEI4MzgKKzNBQ0ZFRTNCRkNFMjI1QTM1MTk2MzREMDk0RUE5NEVBQTE4QUM1QThFQzM1OUY2QTQ5OTBFNjg0QTA3MkMzODZFOThDQTc5NUUwREMzNTc0QjNCMzQwOUYyOEY5OTdGOTBENkM3QzNBNkE1QUQ5QTM5MTRCOEE1MTdEMkE2QjRFOUU0MTI0RTQ2MjkzRjg0OUI5RDcxOEY0OEE0MTA1NjMyNjUwOUNDRkFDREY5NzY3RkNCRDNCMzEKKzhGQUQ1OUQwCitBQTg4RTlBQjQxNDRCQkUwNzU5MzlCOEExMzA2CitBQTc0NDg0MTgzN0ZBQjYzQ0I4NkM4NTRGNDY1MURCRTI0Q0Y5MzU3OEZFOEZDMENBN0I5ODc4RkMyRTVFRkU4MDQ3NDc4RkQ1NDUyM0UwODU5NDgxQURCNjVGNjZBNEZERTUzN0E5ODYxMTJCRjFENjI4NTRCMzE4MENDQjY5RjJDRDYzQzlFNjQ0NTU1MzUxQTdFRkY4ODY0QzRCM0I1MkQ2Rjg0OTJGMERENTM3NEY1NjdBNkE5ODU4N0YzMjkxOUU0MzY2RUM2QzMzNjgyRjU2MUU4MTdFNkVFOUFFM0QzQ0NGRDdDMEJGMTEwRDA4OTlBMTJERTY0RkIKK0EyREYKKzVFNENCQzc3MkEyM0FDMEU5NjBGRUU2MzM4OTQwOEI2NEZDQjNCRjUzNjJBRDZDMUM4OTlFMDgxRkFBMzE1OTU3Q0VBMzE1MEU2NDE5NEM2MjgzMTQwMDYyMDczRDUKK0M3RTQ4OEQzCitGNEZGRTZBQ0Y0NzU4RkUyRTJEMjdFMkNEQTk0CitERjJBQzBGOTA1NTE4MzE3Q0M0QzQ4MkVCRTlDNjJENzlFRDAwNEQ2OEEwNDZGNUQzM0UzMkQ1QzhDRkM5RTI3MUMxOEE1MkQ4MkZDMkUyRTAzOTY5NTIzRDAzMTJEOEY4Nzc4RkUxNDMyNjFDQUU1NDQzODY2MTk1QjRDQjY4MUU5NjkxQTgwQTdGN0MzMTk5NTYxNTEwMDMyRTE5QjgwNTVDREE3Q0M3ODkzQjc3NTk2MkQxQkE3RDQ5NTlDOTM0MUM4MzVGMjMxRkU1MkJERTdGMzE2NzAxMQorQzNGQkQwN0QKKzY5NDREODNFNjZFMUZDQjg3NEQ5RjNBOTA2Cis4RDMyQUNEQkU4MjE2MTBGNjE3QzNGN0QyRTVFQzQyMUU1QjdFQkY5RTg2MjU4MEUzQkNENEJEODM0MTgwRURDQjZCQkY2QzI5NUI3RTM2NDAzMTBFMzNDMjhEMkVBRjgyMDAwMDgwRUQzMDI2RUY0MTQ1OUM5RTg2QzI5RTA0NDFGMzY1QkJCQTBGN0Y4NEIyRDUyNEFDNjgzQ0Y4NTdFCitFQ0E0MEZDQQorNDcyMjZGMUY3N0IxQUIwRkZDOUVGNzE2RTYwNQorNzk5RjM4MDA1NEFBRDRCRTI3RDEwQzFERjE5M0FCMDFGNDIyRTRFOEFBNzYwRjUyOTlGNEFGRDIwQ0YxNEE4OTMxOTU5RjIxNzEzMUU1QUI4NzExMzY3QTcxQjg1QzU1NzJBMEMwQzM4QjQ5MjRCREJEQjMwQjVEOThDQkM0MjMwQjU4MjE3MzM4ODU3NjUyQjQyNjBDQTk2MEY0MjA1RURGQTYyMEY5MjA2ODI3Q0IwMzZCQ0ExQkU5MkYwQUE4OTdBODYzRjU0MzYyNzFCMkFDOEEyRDRCRDU3MTg3MDM1MzVGNEVCMzFBODkzQTIxNzlEOTRGMDE3Mjg1CiswQTNFCitDMEE1RkEwMzUyQTJEMjQ4MjRGOEZBMzIwQkRFMDMzRDZFRDdFNEQ4Q0FCMUM1RjZCRDM1RkI1MDUzQkZGRjMyNkJGODExCis1NDRDREJBQworMjdCNUM2NjBFOTFBMTE0MzIwNThCN0ZGMTYKKzZDNTA3QjQ5M0VCNDUyODY3NUMyNUJBMEMzNEYxOUIyRDEzM0U3NzZBNzc0MTExNUUzM0IxOThERkVDMkY3MDgzQjM3RThBMUJEMUQ3M0M5MkU1OEJGMkQyRjNGMDBGNDU2NkZERDIxMENEQworM0U1NzNEMTEKKzNBRDQzOTVBMzJDMkIyRjY4MTE0QzA0NDczMUIKKzZEQjgwMDc3REQzMjRCQkI0QkU3MzVFMEI5M0M5NEZERkVCMEU1NTE1QjEzNkFDRjg1MzM3QThFQkJDMDRDQTVCNjA5RUYxNEI3MzJCNkJGRUQyNDQ3MURGMEYyMjkwMTYyRUJDRDA4Q0NCMEU0NUJDODIyNjRFMDU0NURDRDVFN0UyNTY4QTc1RTgyNkQzM0IzOTI5QzUzNDg1RTM1QTBDNTQ1MkJEN0JFMTQzOEJCNTlCNkVGMTQ2QTYwNkFGQTkzNERFRDlCNjIwNDcxQTE5RThCNzI0ODc2QTlGQzJDNjdGMjA2MzZCRUFGMDQ5NUE3QURFQzZCNkFGNworMDcyRQorRDRGMTcwREJDOUVDQjExRDBDQTM2MzJFMEFCNDI3MTQyN0Y1ODU2OTY5MTJDMDFCMUVDMDY5QUE1OTdCRUIKKzgwRTU4OUZFCis1NDk4MkM3OEQzMzg0ODdCODJENEIzRDUwMDNECis3OUNEQTYxMzEzQzJFQkRCM0Q4NUMxNUU1RUY2QjRBODhCNjkxMjI1NzM2NDRFMjg2RjNBNjIyRDFBNzlCMEY4NUQxNzYxQUE5RUIwNzIxMjYwNEJEQzE0Q0IzNERCRjk2NDBGQjM3NzgzOUM0RTEwOUU2NDZEODJCNzkxRkI3QzYyREZENzg2M0Q2NjNEN0YwQUU0RDFGQ0Q0M0RBNzdDRjIxNDNBQjc4NjEzNTY5NEEzRDc4MjE3NTFCNkFFNDYxN0U3RDA2ODRENUM4N0FCQ0E0NUYxQUYKKzQxQUI0MTc5CisyN0E1NjRERDUyQjQ4RjBBRUI2RTY2RDIwMworOTdDNDZGRUEzQjdGN0QwQjZCMkFBRUMwRjYxM0ZEMDE0QkNFMUU0RkEwRUMzQ0VGRTRFODk0MUEyNEE0MkQ2MjI2NDUyNzYwNzdBMDdBOUM5MEI5MTIxRTQ5REU1ODc0OTZFRjRFM0MwRjZCNTIzQkM0MzYzQjNGRDNFQjNEMkE4ODY5QjAyODE0MzAKK0UyOEU3NjZBCiszQ0Y2REJBQTdCRjNFNTE4QzM0QTM2NEQ5QzhFCis4QTdFMDQyQTNENDY4OTkxREVFNDQ3NzM4QjIzQTI3MjYyNDExNjcwQUI5OTJFQzc4RTkwQjQ2N0ZEMzMyMjc5QkNFOUI5RjE0RTY0Qzc5NTlCRENEQUM4QkNGNzBCQjYxOUVCRTRDQzVFMzZGQTcxN0ExQUU1QTQyRkMwQjg4QjU4MkZGQ0RDQUI0QUEzQjY3OUZGMzhFMTNBN0U0QTYzNkUyQTJDRjEwNEYwQ0MyQzAxQ0Q2NzlCMTJGNzAxMTk3OEY4OTdCQTBENjE3MThEREUwQkUwRTJCMDFBMTgzM0YwM0MxMzgwODIxQTQ1CitCNUYyQjc0QworRTBENTVFQzUyNTlCOTYzMTZEQjEwRjBEOEVERQorNUUwQkVDNDBCMzRBNDE0NkMyNTQxRDMzMTc2NzZEMDgyREFDQTZDNjBDOTRDN0FDOUY1Q0JGQzEyMEE4RTQ4ODUwM0Q4QjdCMzZFOUJEM0Y4MjE5NThEODJENzBENkQ1MkY3OEE4RDExMDkzQjAxRDNDQkZBNjJGMDJCNkQ4QUQ3RDlFNThERTI3NUUzMDRCRTRCQjUxQUU2NzY2N0NFNDQzOUUwNzJGMkZCQTMyMDcyRUEwOTgwRDYzM0E4QTAzREM3MjIwQUExMUREREQ1OTdFNDAKK0JGMEQ0MzE2CitDMjNBN0VDQjYxNjMwMjg5RDdFNTdGQzUwMgorMDNFRTZFQzZDOENFRUMxMENFNzIzMDRFNTQyMUYzNzYzRjI4MDNGRDA5RDdGMUY0RTc3QkFGNjYwNjQyNUQ2ODBBOTA0QjAxQkUwQkM5ODYwMTM3MTFDNDYzNTkzMkY4RTYwQjA2MzU0QzJGRTFFM0VBNEYxODExOUI5NDkxMEUyRDg4REVBNzBENTEzQ0ZGQkI3N0NGQzM5QTYxNjE3MkQwOUUzNzkxMTJDMTA2Cis4ODU0QTQ3QworREFCRDI0QjdBRTA2ODdDRTdGMzY1RDMzMjhFMAorQ0JFOEQ0QzU1QTQwRkM5RjNEODRFMDRDRDc4ODAxREFGNDlENjM3ODFBMjMyRUFDRjMyODYxMTU4REZGQkUzQ0YxNEZFNTI1NjlCMjlCQkM3MUVEMjIyNDdBMzRCQ0Q2Q0E5OEI2Q0NBQ0M1NTEwMkQ2MzcyMDY2Q0RGNTZFNzMwOUQ2QjA0M0E5QzhFOTBDRTEwRkFFNTkyMzlCRUUyNjVBQTI2NEVBOEU0NzNCMDlDODREMzk3MEM1NjlGQjcxNzUyNTZFQTNBNTA0RDlGMDZFM0IxMjUwQzVBQjdDODIzREUyMDIyODQ4MUNDMjlGNjEzNUQ2MzcKKzFEMjFEOUU1CiswQjQ5MTNEQjJBOEQyQTYyOEZCNjM1NkE0RgorMUIwMTMxN0IwOUUyNENGMjUxMjhENzdBODc5RDI1NEUzQjQ1NkFDNEYzOUM1MjBCQzQwQ0UxQ0E3QzFBNTNBRkUwMTc2Nzk3NDlFNUNEODRCNDlGMThFMjYxMjVFRTZBRjQyMDQyNzIzOTY3MjhFNEIxMzFFMDgxRDRCRTg0NkRFMzQxQkFGRjY0CitDMzEyOTc5OQorQTczOUNCQ0UyMzJCQThGNjg3QkU2QzY1MTAKKzRCMkJDNjBENUVENjM1RjlCOUNFM0JGOEQ5REUyQTZGRjIzRTQ0OTExMDE5NUIwNkE3REQ4RkEzQTRENTNFREE1QkZDOUI5MjFEOUU1QkJGODdFOEFCRjczNUMyMDQyNEM5NUREQkUxM0NFNDU3REZBNEY2RTlFMEI0NjY0MjNBRDFFNzdEODg0QTJDNjBFNkZBMTlEMTQ2M0Q4QTYxRUVFQzk1QTk0NDQ3MUJFMzdDMkFFQ0EzNjY2RTE2OUYxNUUwMjEKK0JERUEyOTRECiszQUU4ODRBMjIyRjZEN0Q3QTVBQ0UzMDU3MworM0JGNzY5RTc5NEU4NkE2RjZFRTI2ODIxNzA2Qjc5NEFCN0Q2MTBCNUZGOTlGODNGNTVEMjI3ODRDQkVDQ0VGMkYwMkQzMTM1MEREOTBBRjU4NjlDNzFBMENFNDAzNzU4QjczNEI5QjEwMzQ0NzNBOTY3ODY2MThGMDJBQTA1OUU1MjJEMUE5OTMyNjM1ODQzMzY4MUYwODU3ODY3OTMxQ0E1QjFCM0I0QTY4OUMzQTFDNgorODY1NUI5NEEKKzVCQTEyOTk0QkRGRjhEMTU5QjQ5QjQ3NDk4ODQKK0Y5Njg1NEMyMEUxNzI4OTg2NTkxOThEMUQ5QTk4MkMzRTFBNjQ0ODMxQkI5MzM1RDc1NzA5RjY0NjMyODQ4OUY0QUJEMkQxNjUyRTFDRjZERjMxODI0NzhBOTk2REMxMUJFNkI3REE0MTgyMjg2MkNDOEZCODdFMjJDN0NGODlCMDA4MTY0ODdGNDJCOTgxODBFRTM5QUY0NEExOTdFNzAxQkE5REZFOTUyRkM5MzJCQzU0ODRFRDQ5REFDQUU1OERDOTIyMUZDQjkwMDlBRTg3NzU2QThEQUFBNDg4RkYzNzVEMzQ4MjQ0ODAzNDEyRUJGMzZCQTEzMzAxRgorRUMwOQorNUZCQUI5RjE0NzhENzU0OUQzMDEwQ0YxQ0QwMQorMDc3MkEwMkMKK0JBOTExREU4REY0MEYzMkIwNzYwMTAzRTY0NTUKK0IyNDRCOUJGRUMwREU4RjhFMDU4NTNEQkIzMjBFQjc0MkY2QUQzRjlFODY1QzY5MUI4ODY5MTlCNDhBNDM3RjdCQ0IzNURCMDZDMjdDRERGQUZFMEUwNTIzNzI1Q0EyMUEyQzMxOTA4MThBNTNGMUYyQjNFQzcxN0ZBRTA2N0Y4Q0I4OUVBNDNGQ0M2RTRFRTI2MTBFRTY0QTNFRTQ0RTA4RjNCNzZERDEzRTIwRjZCRURBN0JCMDJDMDY4ODI1MjQ5ODhFN0VEODk5RTAzNURFQUZEMkJEMkYyMTM1MDEwQkU5MkQzRTc4QUZCQTNBMDVGNDBGQ0VCOTkyNworQzZBNAorMEVDQTgxNzUzMDg2NkVEMzc3Qjg2NDEyRTU3RjJFNDU3RjdEQzA0QkE3Mzk2OTg1MTAKKzBEMjEwNjBFCiswNDY0NDIyNzY3ODcwMjEzOTRCRTU3MTdERkU4Cis3NDY5MjE0NTVENTEwRTlCQTAzNjkxNzAxMzIzNzVBMUM1RkJCN0QzODA0RDRDRUFEQjkzMkY5QTIxNzk4MTA5QkJCQTkyRDQwMzg3MkEyNkUwMEM4MjM1NTNENjU0MzBEOTI2RjA5NDcyRDVFNDg4ODQ2M0NCMDcyQzYwNzIwRjkzMDNCOTdCMUNGNzRFMDAzNkQ3RUZGRjhDOTZGQUNCMzJCRDg4QjNCOUI4QjBDNjY0REI1RUQzOERCMjM3OUFERENBRUJGNzFBRjlCQkEyNjIyNjc5Qjk1Qzc1QjIxREQ1RkQ1QUY2OTQxQURBMzhCMkQ4NDUyNjI4NzMKK0ZBQjMKKzA2RDBBNTYyCitGM0ZERTNDRDk5QzUyNUREN0UwOTMyQzhBOAorOEFCMUNBQzA1RkM3QzY1NzYyMTgwNUE1NTRCNUI3QTRGQjQyRkNDMkExNEQ4QkI2Qzk1RjQxMThFREMyNEU4QzVEQUZFMjdDQTQxNzJBM0ZGMkRBQzNCMUI4QzRDMkI1REY1NUUwOTg1QzYwOTRDNDU5N0ZDMDQ3NEJDN0VBCisyOUQzQkRDNQorMjkxODIxNkE5MTQ3MERCMkIxNDEzNzY2REQKK0U1MEU2MTRFOUQ0QTgzMjREMzVDMEUzREM3OUFGNDJGRDVENjQ2QzFBQkY0CitFQzU2MEQ5NgorMTkxRTkzQzlBOEQ1NjkzREI1RTBEREREN0FFMgorQTI4Q0YxQTI4RjJBMDA2MQorNzc0RDQ3MTMKK0Y4MTkzNENBMUMwMzI1OTczOUVBQjEwMDk1NzNCN0QwMjExNkM1MkEyNTY0NUVCMEREQzREMURGRUYzQjI5NDI1NjBFCisxMDhEMUE5RkY3QUE3NjA2MThDNjc0QjY0QkNCNEE0RkMzNEVBNjg0MTBEODJFMDc2QjFCRTE4NkFDN0NCODJCQUJDMkExRkY5MUUxCitCRTVCRDg1ODA0QUMzNTAwOTQwQkEwMkJCRUJCMTkxMkRBNzkxMDY5NDIyNUNCRjI4NjZDNUEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDUgcHV0CitkdXAgMyAvQzAwNDcgcHV0CitkdXAgNCAvQzAwNTggcHV0CitkdXAgNSAvQzAwNjcgcHV0CitkdXAgNiAvQzAwNjggcHV0CitkdXAgNyAvQzAwNjkgcHV0CitkdXAgOCAvQzAwNzIgcHV0CitkdXAgOSAvQzAwNzMgcHV0CitkdXAgMTAgL0MwMDc2IHB1dAorZHVwIDExIC9DMDA3OCBwdXQKK2R1cCAxMiAvQzAwNzkgcHV0CitkdXAgMTMgL0MwMDgwIHB1dAorZHVwIDE0IC9DMDA4MyBwdXQKK2R1cCAxNSAvQzAwODQgcHV0CitkdXAgMTYgL0MwMDg1IHB1dAorZHVwIDE3IC9DMDA5NyBwdXQKK2R1cCAxOCAvQzAwOTkgcHV0CitkdXAgMTkgL0MwMTAxIHB1dAorZHVwIDIwIC9DMDEwMiBwdXQKK2R1cCAyMSAvQzAxMDUgcHV0CitkdXAgMjIgL0MwMTA3IHB1dAorZHVwIDIzIC9DMDEwOCBwdXQKK2R1cCAyNCAvQzAxMDkgcHV0CitkdXAgMjUgL0MwMTEwIHB1dAorZHVwIDI2IC9DMDExMSBwdXQKK2R1cCAyNyAvQzAxMTIgcHV0CitkdXAgMjggL0MwMTE0IHB1dAorZHVwIDI5IC9DMDExNSBwdXQKK2R1cCAzMCAvQzAxMTYgcHV0CitkdXAgMzEgL0MwMTIwIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xOCAtMjA3IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzRGNTIxMDExQTRGQUIyMjM5Q0M0QzkxRjNFODUxNEEwQjEKK0Q1NkQ2QUM5MjFCNkNCOUE5NUI1ODYyQworOTZFQTEyNDNENkFEQjczMzgwCitGQkE4MUFENQorRTY3MTg3MzgzMTc1M0IwNjJENTQ4NzBBQzMKKzdCODZEQTgxMzcxMzQyM0M2MTZCNzUyRjVCNDc4NTM1RUE1MUFCMzM2QkYyNjIKKzBDMTJBOUI3Cis0MDM2ODhCRUUxREY4MzE5OTBEOTQyQzE0NQorQzIyMDRDRkNBNDc3QTJGQUMxRDZGRkU0OEZCOTVBNzJFMDdFMDA3QTY1QTU1MTMyOUZCNgorRTVDRUJDQTQKKzIxQUE3MDNENTZGQTlGQUZDNTYwODY2MEFECitCMTU4NUQ3NTdDNjlBOUVFMTAzRjAxRTIxMzJGMzczN0E5RDE4N0YwQUY1QTUzNDMwM0Y1REFGMTgxMUY0MjEyMEVEMzdFMzdGOTkxRjJDMzE3REQ2QjkyQTA2QUZBMTc5OUZFOTFCNjY0N0EKKzQyN0U4QzEzCitDRjYwQUU0OEI1RDkwM0NDQzJBNTcxRTkwMjQzCiszRUZCRjAyRTBDQUYzNzI1RTA0NDdCRjkxMTZDNUU4Nzk2RTgxNEFCOENEMUQ2MEY1RUFEMUNCNkRBM0Y3MkFEMTQ1M0Q2QTNCN0ZDMzdBQTlGM0MxRjY3M0M1NTdDRjE3NUFCMTlERkY4RjQ1MkYyMURCOUMyMzkxQzEwOUZGRTY0N0Y3QzcyNTQyQzRFQkU3MzI4NkY1ODIwNTZGMkFDQTQ1NzcwRkRDNjA5NDE1Q0JBRENEMDFCRUQ0REJFNDdDQTBDOUUzRUMyOUJGMDdCCis5ODFGNDVGMworMDI4NUVDMEQ5MTU2RkJBQjhFNEFFQjQwRDYKKzg0NTdCQzhEQTcxMzIyQjc5MkI3QkY0REY3MkFBRDBDOTM0NTc1NjE0NERCRDI2M0JFRkM0QjA0NTlCQzM2RkFDMzY1QjJDRDJGNkRCQ0E2RDFGRjFGRTQ5NDQwQzUyQ0IwQjI3ODQ4MDIwNDcwN0ZEQ0Q4NEIyRUFFRDg1ODUyQkNDMzRBNDVDMjFGRTk1OEEwRTRBRTMwM0M1NUNCNzM1RDMyMkNFRkY1QTlEMworQTE1MDMzMkIKKzA1MjM0M0MwQjE1QjdBREU1MzM0QTUyMTdENzcKKzI5NURFNUVBREQ1ODZENzNDNTExQTlDRUE4REMwMkVDRkNFRTk2NkZGM0Q1NzM4NzE5NDkwQzZFMUU2MzZDRTBEMzNFM0Q4NDgxNDIwQ0YxRTA3RkJENkJDRkU2OUYzMjFCMDMyMDExNEM5MkZFRDJCNjlBODNBRDVDMUU1QzMxRDY2N0VEQjdFNTQxMTJCMzUxNjIyMzVDRkNFRDVDQTZENUJCNzE0MEMxNTFCODczRTNDQThFMEJENzgwMzhBOTBBRTg5RkEzMTUzMkE4OTIwRTM4QTM2QkQ5NEUKKzIwMUIyMDk0CisxNTM0QzUzRTgzRDQwNzY5RDM4ODg0RDUxNUMwCitEOUJDODI2RTU1OEEyQzlERThCQjZDQzFBNDQyNTI0Njg1RTNGQjVCNTg0NzI3M0Q4MTA1QTM4RkVGRUMxOUIwQTAyNzA3RjlFNEM0MzNBOEVGOUE1NzBFRUU0Qjk3NDI5Q0Q3MDY0QzUxQ0FBQzY3QThEODMxNzA4RTFBREQwMkYxREE4NkRFRTBDRUFDRjJBODQzMDNBMEFBREIzQzBDRjkxQUE0ODUyQkNDRjJEMUNCNjQ1MDkxOTQ2RkE3RjYxNzIzMzlCMDhCODVGMUVGQTU3MzQ1MDlBQUY2RjJBQzM1MkYxQzM3MDNGRjZDCitCNUU4NEU1QQorRUZBRUQ1NTc1NjdEMDI2N0VERTU3QzI3QjEKK0RBQjdGNjkxQzY0MTA0MjEzQkVGNjg4NENGNzQ5RDJBNUQ4MTY5N0ZBQzY2Nzg0QkZEQTMyQTZBRUJFQzJCMTE0NUI0RTM0MTBDNzA1NzM1Qjk1RkY0ODg4NzNBNDNBMjY5ODc3Q0Q5QTRCMUJFNEU2NDIzQUUxNkU0QzMKKzY3MDI0MTRFCiswNEQwOTVCNEZBOThERUEyMjAwRkIxNzU4QgorQUM2N0UxNDI5RDQ0MzJGNkMzNUUwNUI2QTRBNzFDMUVEODU3MkM5MTUxMDQ2NkQxQTI5RUUxOUI0MEQ2OTc5MUU2ODg1MjE0OTYyOUUyRkEzRTBENzhEN0JCNkU5MzkxMjExREZDQTUwMDQ5QzUzNEFCMTVFQ0RCQzMyQkVEQjA0Rjk4MThGNURBODZBNDNFMkQKK0YyRDA1RjZBCisyNTlCRTUwQjQzRTA2NzFFMzNDMTQ4QjVBMAorNTIxOTZBQjAyQjlDOUY0MTlEQjI2NTZGREVCQzE3RkZDNzg4MDc2ODk1REZGNjcyNzRFNTY1MDkxMzgzMTA0QTI1N0I5QUM5M0M5NDYzNkNFRUFFREUzNTM1Qjc2Q0FBQUU2REJCQkQ0MEQwNTY2QUQ5MjdCNTQwNjZEOTgwQjBCQjNDNTI2NzVGRDhEQkYxRDgwQjE0REMyQ0IyMzAzRkNFNTEwOTZDQjAzQkVCRjUwMjRGMTg5OTBEMTJCMAorQkMyMjFFNjcKK0YwNzQ3OTU5MzE4OUFERTlBMTZCNEIzMzU3NUEKKzBDRTZBQzNFODM0MTJDNEIwQjYzREZGMDI0NDM0RjQ0N0QxNDI1NUYyQzYxOTJFMUNCODE5MDY4OEU3MEVGNDgxRDlBRURCQkQ3REY2RDhBODE5MjdCNUYzQjI4QTg2RjFBMTk2OEM1Mjg1RkMxNTQ1RTExMTlBRTZEMjg0RkVDM0I2RjZENDZCNjk4M0U5NkIwRDQ2RUY4Rjc0RTA0NUZFMzU3NzdBQ0M0NEI0MzM1M0ZFM0U1RTNFRjI0OUZBOTY2MEM2RjZEQzM5RjY4RDQ0MgorMkQwOTU5QTQKK0VFOUVDNTFEQjZBMEZDNTVEMjcxNUEyRTFFRTgKK0JCMUUyNzE3NzQzOERENjBFM0UzNzdBNEQ2NDMxRDlFRDUwQThBODBCRjNGRDA5OTNCOTU1RDVCNTg3NzZFRjJDMzk2ODQwRTc0RTk4RURFNzcyQzAwQjYzRkRFOUREQTU3QTBEQkY1NUNCQ0Q1QkU2QjU3MDMzNjg5NUY3NkY5NjQ0OTE3REJENjFBQkRDM0Y3N0Y1RjBEMDJEM0Q3NDQ4MzJGQjk4NEUwOTUxOUFDMzUwN0Y3MUZEQ0I2NDVGNzJEMUMyRTVGCitDODA2REMyQworRTU1QUUxMDkwN0VFODBFRTZFNkE3NUVGMkNCRQorRDlGNTA1MTFEMDMwNzVERUYyM0MwNUMyQzM4RDExNkFGNjUzRkJFRTJFNTZDNTA3NDlGMjA0Nzc4OEM0RTA5ODg2RkIzNDQxNTg4RjJGQ0E4RTE0ODk5MzMyOUY0NDA4Qjk5MjIxNURCQjg4M0Q2N0VFRDI1NjAwQ0E2NUYwNTlGMUM4MUE2RTI0N0YzNDkwQkEyRDNBMDQwM0U2Mzg3RTA0NjlEMzVGQTVFQzYyODhDNUQ4NTJGRUQzNjgzQTEwMzcxNzA0OTI1RkEyNzRDMjhCNDgxODA0MjMzQkJGN0IzRjQ5QTYxOTE5MUY4NzM2RDQyNzNGQzFBNTlBCitERDZDCitGRTI0OENERAorN0I1RkE0MkIyQkEyOTk3MUQ1NTYxRUJDQkYKKzc2MTUzQkRGMjExMEYyNkNDRjc4OUY1N0ZBRDY1NkM0MUZGRDRFNzNGRjRFNTk0NkIwQTk0NDlDQTVENkUzRDVDODlGNDY0MEFGMDg0QzY2NzA2RkI2QzA1QTVDMUM5QTVBOUQ5RUU2OUMxMjEwNTdCNTM5NEQ3QkM4NTc5NUNEMjEwNUUzQkZGRTEyOEQ5NUZDCitFNDgwNEMzQQorMUVERjhERkEwRkY4REFBMTQ4MTVBODI5MjUwNAorRjIxRDkzMkMwREFCMjIzMEFDNUNFRDJGM0VFQzZCRUQwQUZCNDVCRUI5QzVFMzIxMEIxRjdDRDYxQTBGQTA2MzM1OEQ4RjZGMUExNzRGRjNDRkYxMDUzMDIzRjdGQjFCQjU4N0Y4RkFFMTRGRTAxMjBCOTBEMEU4RTI0OTY5OTMxRDgxRUMyMEZGRTU2RUVENEFBRTM3NkQyQkY0Qzk2RENDM0VFRDk1REJDQkQ2QkE5ODczRkE3QTE4MzNDQTE1NjZDM0U5NTkyNkM1M0YKKzY0RTQ3QkVFCisyNjczMTczQjFDRjE2NTc4NzZFNEE3QzVGRTI0CiswNEQ3NzQ4MEQ3RDI2NDY5MTE0Q0FCOTUwQTBDMDBEQTJGNTEyODFGQzI5Q0VBQzU5NTM3NzYwNjJGNkE5NUQxOUFBQUIwMEFEOUE2REE2Mjk5ODc3RTQ2NTBCODQ1MDM3NzQ5NzQ1NkE1QjNGMUE4QUFBQUNDQUM2MDNDNTE4QjkzRjJFNjc0RkMxRjZDNzJCMjZGRThCOEZGMDU0RDYwQjBDMTg0MjQ2OEIxRjAxRTQyQzRFNDBGN0M1MkU4REUyNjIxMUVEQ0I3RDI4M0MzQUE5Qjc0MUQxQzNDMDYxMUY3NTk5QzAzNjhDOTFDQjU3NTdDOTY2MEE5NzAKK0UyM0IKKzFFQTQwRDRFCitCNUQxOENFRgorRDdEMEE0QTRBREIxQUFFQzRGOTc1NTVFNDEKKzg1NkQxNzNDNEVCMkQ0QUIwMDc4MjJCMjYzRTkyRTNEOUUxODg2QTAzRDQ2QjhBQkFCRDY5MjVFMjQ4MDA5N0E3QUYyQzI5MDJEMDkyNkE3NUQ5QUJERDg5NUVCMTZBRTRBMTk1RTI0ODI5MkFGRDc5MTdDOTVDNkI1OTk2NEU3RjhEQjcxRDA5MzAxOERCRkExNjAzOEU2REQ3MDNGRkM3MDgyCis5NEJERjgzMAorREI1MzBEODcyOTcyRDA2NTJGMDg2NkEwRTYKK0U5MTIzNDQ4OTQ2RDI0MEFCMTVCQzA5NzA0NUIwNjU2OUQ0QUNDQTAxRTA3MjkzMDA2NjdDNjhFREM5QTYxOTM2Mjc2QUY0OTcwODExQjcyODI2NkJFNEY5RkM5NkQxNERGRjc4QTc0RDU0N0U4RDYzOEY5RjMyNTgxOEM2N0U0QkMzMTI2M0NCNUM4QkY3MjhEQkRERUE4QTU5NzYwNjg0RjVDNTI2RDUzRkM1OEExN0FGMkQzRjgKK0JGMkZERjg4Cis5MDhBN0NCQjJBQ0ZERTY0NzU4RDE5MjYwRQorODA1M0U5NzIzMDA5Rjg2NzU0QzIzMEJBNzc3MjUyREUyMUVCNjNFN0RCMTkwMjU1MjdCRjI1QjBFQUExNjZCM0UzODlBNDU2OTMwMUJCMTA0RDVBNzYzNDA2ODYyNUYzRjAyODgwRDlCMDYyMUE0OTk2OTU2RkFGODRFM0UzODk3RTYxNkVEOTc0QThCN0EzMEJCMTk3RDQxRjIxN0Q3RjJDMzU1OEMzMEMxRjRCRkIzMzU2NTc5QzdGCis2MzBEQTYxQQorMTQzMDA5RkZEQkM1OUFFMUFGRTU0Njc2RjgKKzI2RDdDOEVGNERFQzQyQjBDNzJGREFBN0ZCNDQzNUFCM0ZDMjBCREQ1RjhBNDMxQzJCMEQ1RkJDMTVCMjBDQURBMzZCNTNCODEwOEU5QzQ1RTEyQkYzRjBBQUYwN0RCMDAxQTc1QkRGRjY2QjY2OTg4NTc5RDgwMDEyRUFERkIzRkE1RURCNDBFOTZFQkFGRUFBMTVFODZDOTIxNAorMDFGNUE2ODMKK0E3OERGN0MzNjFDMDFCMjE2NjA5MzZGRDYwRkEKKzAxMERFN0IwQTIwMjQyQkZGMDY0M0I1NUNEQ0ZFQTVDMUEwRjdCQUE4NDE3QTg5QUE1REM5NjZDRTRGNDlFNDE2RTQ4NzE0NjVBMjVFNjc3NzJFODBDRjkwQ0Y5RjgzMTczOTJERjdBRkNDRjZDNjFENTgzNjU3NEEzNkNGQzNBMDc2MzVFMTc0RUM5RjIwOTQzOTY1NEMyNDQ2RjE3RDRGNzY3RkE3NzYyQzU3QzcxQkZCNTU2N0ZBMEUxQUI3OUI3NTRFN0U3MEZEODMyQjJCNjlBNjEwNUE5QUNENkIyNTEwMTUxRDBBMTE2RDFCMDQwNDE5RjlEOUUxMgorNzdCOAorNDRCQworNUVDMzk2OEQKKzhDQkVGRjRBNTU2MkIzNjE4OUFFQkUyQTVDCiswNDVGMTUwMTM2RDdEMEJDMTJGMEIwREExNEQ0MjBDMDhCNEJBNUI2OTI1REMzN0U2NkEzRUY0QUZBQjQ5NzAzOEMxMzU4NjlDMjlBOTcwMEYxNDJCNTlBMDdDOUEyMTkxMzMzQ0MwNworQ0VDOTRGNkQKK0ZFMjc1QzUxOTg1QjdDNDI0NDRCOEEzOUIxQjAKK0YxRUJGQjQ2RDhBRUQ0NkI0MkRBNDk5Njc0MkM3NDg2NTZGQTk3M0I2NTU2ODE4MkZEQzM3NEYwOUUxOEYzNDk1QTQwMTQ5RDA2RjkyQUExRDlEMkRFOERDMUFGMTUyRjU4MjI2QjVBMjRGQjU0NzA3OThFNjBDRkE4ODAyNTVDQzQ2MzI1OTREQzY4OUE0QTk2MEFDRUZCMzM5OUQ3NDg4MDY2MjVEMjQxRjAyMTFGOUMzNDA1MTA2Nzc4REU2QTg4Rjc3QkQ2OUM1RjIxNDJCN0Q2MDZCQjk2RDVCODdCNkFCMzJEODJEMUU1MjZFMTk4REUxMzgyQUZFQworMERGRQorQ0ZGMDlBMTk1MjJEOEEyQkQ1OUY3MDE5OEY0N0M0NkY0QzY1ODk2RUUzQTJCMUYzQzkyN0E1MjAKKzEyQkMzODlDCis5QzBCQTMyNUI3QUYyMkU3QjhBOTJENkNEQjQyCis5NzU3RDJDMkUxN0JGNjA4MEY0RTAyMUM5MEQzQzEyRkM2NjI2MzNBRkE3OENGMzdDQzMxNTI5MDA5M0RGQUM3MjdCOEMzQkM4NEM1QTA5NzVBQzFFMTVGRjlFQTVEOUREQjhCQjk5REU4Q0UyMDNBQTJCRjZBRTE5NkE0NDY4Qjc3RDM1RDcwNzRCMDI4N0VERTEzMjdDMzM3M0E4NTBFMTkyQ0U4RjgzQzI3Q0Y2RDBENTg4RDA1MTlFQjA1NjIzNkYxRDNEMDZCQjE5OAorMUI5NDlGMzgKKzM0QTU1MDYzNTFERkIyNUQ5NkFBOEI1MEJCCitBMEY2OUM2NDBGMEY5ODE5MzM2MzAxMTU0QTQ4NDMwNkVBRjUwNzZERjlCMjY2NTQzQzc0OUMyQjk5QjYyQzlBNDA4MTE0QTZCRjMzREVDRTdBMkE2Q0NBRTQwMURBMUU4NDU0MkVGRkQyREU2QjI2NDU3OUJGRTIzODg1REMwNzQxQUY3NTA0RkZGNQorQzZCOEU4NDAKKzE0NzIzMzY4OUM4RkUxOEM5RkE2QTVGNDE5MjkKK0Q3NUQzQjFFREZEMTlBRkQyQ0RBMUY2OUM0MThENUJGRDI5NDFBODc0NUEyQTYwNDU3NTdBNzkwNDFFMDhDMzVGRkQ5NTAyRTAwQ0U1NDFBN0JDRDQ3RjI3Nzk1RDYyOUIyODBBMzhCN0Q2RjQ5NEFFNjFDNzNFODAyQTZCMEE3RjE3MDEwRTA0MTJDOTY0QTVCQjczOTdBODI4NDIxMjU4MDVCOTNEQTA4OEQ5RDRBQzU4MkZCQjU0NjI2OTY4QUQ1RDdFMDY2NTI5NUZFMDhCMkNCMjkyRjZCMTZDNjkyODEKK0Y0RTgzQzg5Cis1QzhFMEQ3QUZGNzE4M0E1MzYzOEQxMUJGOQorQTNFOEIwRTVBNTYxQzIyNTEyOEJEOTI0N0EyQTU5Nzk0NzhGMjA4OTRBOEFGM0VCMzg4MzJDNDc1OEU0RDkxOUVCMTAyRUVDNTRBQTM0NTU5RTk3QzU3NDc2OTQyODQ1OURGRTBDOThFREQ1QjFENUExRjIxQjIxMEUxOEQ2QThCNjgyMTJGNUQxMERDQTMwMTFEODcxMDEyRDJBQzRCQUJDMEIxNENDMDBDMUQ1NzhERQorQkE2ODZGREMKKzIyOEMyQ0REOTU5OUYwRDhBRTJFOERCNTgzNTEKKzYxNUUyNUVDQjIwOUVBRDQyOURGREU1NzNDQjZGRUI4MEFBQkFDMjJDQkZERjU5RDFCM0ZBNDUzM0ZGQTUzQjI3RTNCMjc5QkRFMjZDNjYyQTNBMDA3NTg5Mzc1MEVDQjFCQzc3M0VCQUI3MjdENkNDN0YwNTZEOTQ1NDg4MjgxQTQzMTlBREQzNzlFRUIxQTYzMkFCQzZDQ0UwRTVBMDhCRDA0MjUxNjYwMzlDRDhFOTczNkJBRTM4N0UzNDQ5RjFCQjFERUMwMTY0QjRENkFBODZDODIwNDhGMzVBNjE1N0ExNURERENCMEQ0MDE1Q0I3CiszNUMyRERBNgorQjA3NTIwRTY4MTMxMzhFMDAyQzQyRTZENDMKKzM4RUU1ODk1QUU0NzQzRkQyNkJDREQ1Nzk3MzJFQzUyOEQyNDZCQzIyNkY5ODAwRjAyMUY4RkU2MjRGRjg5RjcwQjZCODU0RjIxMkI5RTE3MUIwREE1NEIxODE0RThDMTI0RkJDRThCRUJFNDEzMDhCQTQ2ODcyNkFCQ0VGRkYyOTI5NTdFQjYKKzFEMEE1MThGCiszRkRENjI3QzZGMEJEQjQ4NzdGRUU5REQzODU1CiswNUYxQTU4OTU3MzI0QURCMjdFREU2REZDQzk5QzY4NUU2QkJDRTNBNkM4MTI4QkU5MTFDMDhDQkEzQTBBRDhGRUI1MjQ4Qzg4MUZBQUQzQUNDMEIxRTBDNURDNTUxQ0Y3QkIyN0VGRjY0OEZEQzg0NDZCMTAyN0FDNzI5NDkyQjUwMDU2RTM3RkFCQ0E0QzU4RTczN0MzQzAzQ0RGNzlDRjVFQjdENDNCMkY5ODI5MDMwMjFEQkI0QUVEMEU2NTY4NEU1M0Q5OUM2RjhBMzk2REY1M0E2MEMzMERGNzhBQTRGQUIxQ0EzODE2RTZFQzVFOTI1QzYyRUJBNjIKKzc5M0MKKzE2Njg1MzZGMjA5RDBDNDFCRTk1Q0Y4QzJBRjJDRTZCMjg3REM2Qzc1N0NECis5RTU5NEZFMworMTc2QkYzRUM4RTRBNDQ1RjQwMDk5RUFDREI4OAorRjgwNzM0RTc3OTBFNUY2NgorQkMwNUEzNjUKK0M4MkM3MjUwMDlCRTQ4MUFDNDJFOUZDMzNENEE5NDgzRUI1ODlBNDQxOUY2MUI2OEZFQzU1NzJBN0Q4MTI5Q0E1RTA4CitENTA3NzhBNTBDMjg4MkNBMUNFMTM2OTE0NDA4NTY3MzkwRkFDMTYyNEUxRjdDMUI1RDhFMUQwM0Y0MUIzMUY1RkExMTM0MjdEOEFECis3MzAzRTZENzVBQzYzOUJEMkJERTdCQTgxODMxMTI5QzBGQkZBOERDMzBGQzIyOEIyNjM3RDYKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwOTcgcHV0CitkdXAgMiAvQzAwOTkgcHV0CitkdXAgMyAvQzAxMDAgcHV0CitkdXAgNCAvQzAxMDEgcHV0CitkdXAgNSAvQzAxMDQgcHV0CitkdXAgNiAvQzAxMDUgcHV0CitkdXAgNyAvQzAxMDggcHV0CitkdXAgOCAvQzAxMDkgcHV0CitkdXAgOSAvQzAxMTEgcHV0CitkdXAgMTAgL0MwMTEyIHB1dAorZHVwIDExIC9DMDExNCBwdXQKK2R1cCAxMiAvQzAxMTUgcHV0CitkdXAgMTMgL0MwMTE2IHB1dAorZHVwIDE0IC9DMDExNyBwdXQKK2R1cCAxNSAvQzAxMTggcHV0CitkdXAgMTYgL0MwMTIyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xNDQgLTIyNyA3NTcgNzI4XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjVEN0M3M0UwRDlGQkMyQzUxRkM1RDdBNEM4NDY2QTBBQ0YzCitFRjZBNTFFODU4ODE4OTNGNUY4QkM4NDMwMjA4Cis4N0YzMTAzRjc3MjFFMTM3RkExRjVFMEFBNjY4QjkyRkQ1MjI3OUU2NkMxRjg4RTIyNUYxRDAwNTI1QjAzNjI1NjAwRUVFOUFBMEYzQkM3NzQ4NzVDNzhDOERBMzQ4NUYxNzY3NUM0OTU3NTk5NkE3M0FGQ0RGQzVDMDQzRkYxNTI0MEYyNzY2RDM2MEIyOTVEOUYzNTc1Nzg4MkYyMDIzMUNEMjNENEIxRDQ0NjQ5RkFDMkY5NDZDNTI0NEEyMkY2MkY5OERDODkwMDQ5N0RCODgwRUUzMEJFQzRCRTMwMTFDMTA4QkIxNjAzRkM5RTQ1MDg3QjRDM0Y3QjQKKzM4MEUKK0RCN0JFRERGRDgxMEJGRTU1QTUxRkE5MkU3CitDNUUwMjc2MAorMkZFQTZFMUM3QkM4MTZCMzc5QjlCQjY5MEIKKzNGMUY4RDVEMTNCMkZBMENBMTNCMzJFMjMxQUQ2NzAxRjg1RTcyNEU3M0VFNUNBQjc1MkExRjAxOTI0RTU3RUMzMzI1NjE0N0E5RDE1QzJCRUQxM0U1Qjk4NjhFNDYzRDBDRjk3Q0Y3OTUyMEQxOThFRjdFOUE0RTg0MzM2MTVENDNBREI0MkU3OTU3MDA2ODg2MEFGODE2M0RGQTMyRTFGMUFBOUQ4NEEwNTg5QzMxNkE3NTUxMDc1MzIxNDUxNworNjVCMDI0RUEKKzJDQUUzM0RFQUZFMkZDRkVDMDU1QkNDNkU4MDcKKzhBNTNCNDQ1RDkyMzgyMEMwQjNDM0I3NzVCRkExODU4QjQ5NEEzRTFFRDU3OUI0QjcwMjFCMjc0N0NBN0RCOUJBODEwRDAzQzEyMzg2MEFGNzMyRDZDRUM3QTE3NEU1QURCMkRGMkM0ODQ1OUI3REE5MTA5OUI5RUE0REZEMjcwNjAwNzAwNDdCOEZFRDU3ODUyQkE1NkYwQzc1QjA5RDk1MzE1ODQxQTFENjM3MDAyNjEyRjczMUFGOEVFNDA0N0RFRDVEOEU1M0JBNTUyQkVFRjVENzkwNzBCNkNBQzJCNjhGOEM4MzVCQkU0MTVEOTQ3NEZFMjkzOTNGOQorQUZCNworMzE2OEY4QkFDRUU0Rjc1M0U1Mzc0RjlERDU0RjgxNkYyRkIxNjU2OUNCREZGRTZCRUYyOEFGRkJBOTZFNkQxRDQxNzkwQjlBRDVBNzFBQzQ3RUJCRjA4QUZENjU0QTQxCitCQkI5QjkzNAorMzJDRDNFQTQzQzNENzU2NTBBMDI2Rjk0RUUwNworOEM5Q0QyNTE5RUY1NzIxNTZCMkYzNERFQjc2REM3NkJBOUIyNzA5QTZERDc4QzU1ODk3OENEQzc5MUJGNDM2ODFCQjdBRTkzMjhCQUE3QjI4NEJFRTVBNzQ1NEM3MkE1Q0YyQzlCREU5NDgwNUE1OUZGODQzQkU1MUNDREJGRTY5QzkzNjFFQzZDNDkxQzE4RkEyNjE2Qzc1Qjc3MkU2MTRGMTNDMzhCM0E3Q0FFMzk4NkQyQjE0MkNEREQxREEwNTI1NTZCMEI4MAorQ0QwMDlGNkEKK0IyNjM4NzUwNzAwRDY2RDBBQTU4MTAyMTMxNDEKK0FDMDA4NzgxRjM5OURGMUE4MDQzREJBRUJBRkMyQjRBQjU5NkRBMTA3MUYzRDUwNTY1NUM4QzlFODBGRDlBMUUwRkI1RjcwREI4QTIyN0ZDNUQ4N0UyNUI1OTg1NDYyRDJFNERENDQ2Rjg4NzI0MzJGQTRCRjc4ODlBNkI4MUFBQzlDQjhCODE4MTQxQzREMjM3RDdEQjFGQzVENTFBNTU5Q0QxM0M5MzVCRjFBRTYzOUUyNjFCODM0Mjc4NDFCNTY0MTA4NEY2RjQzRDQ0Q0I3REQ2MEEwRkY0N0U5NENBODZENzFGQzZFRUYzQUMxODkzMENFOTFCMDBDOQorQkQ3MAorNjcxOThFRjBGNTU5NTNERDgyNkEwQzk4MUM3MTkzRTVDQjUzNTkxRkQ5MkQ1RTNFRTRGQTNFCis5MEI4QUZEMworQkQ3RDFBNjUxNDVFNjJCMjQ3NDg0REJFRkQ3RgorOUEzNTRBOENCMkIxOTE2OTgxRjNCMDRDNDQ2RTkxRjlENzg5MEM5OUU3NjhEOUZDNEVBNjI2RDY5OEEwQTMwOTk5MzdDRTBFMTZEMjZEMzhCRkM4QUYyNDkxNEMxQ0FFMjk2N0Q3OUVGREU2OUVGODZFMjM3MzlCNDZCRTdDODM3RDlEMzA2ODhGRDM3NDg2NDlGQkY2ODA4MkZBNEQ3MTYwM0Y0ODNCMDU3RkE2REU0NUVGMzExNTRCNjI1OUYzQjYzM0VGQjNENkEzNTczQjQ3M0VCQTFGMDFERjJDRURCMDI2NzAxMkRDNDUzQkEzMDAKK0MxMTM3OTlDCitENzNEMDU4RkQzMjVDQ0RGRjkxQzdFQ0ZDMEVECitGNUMxQTgzNUZBREQzQTMzRjkwQzZENDBCRTM1QzRDNDRDMUU3NEEwNkJBNUMyMTNBQzNDMzIyMDczMzNGNDE5MjRCNzIyQjQ2N0M0QTI2MjI1N0MyMTM5OEUzQzVFMUVDQTA2RDlBMDAwOUU2Njk1MDcwNzAxNTA2OTBEOTk5QjRCOURFRDY0REVBMjJBQTYyRkNDQjA2RDBDRkZGMzBDRDZBM0YyMTY4NUY4QUY0MzM4MjU0MEMwMDAyNEI3NkZCODZDMjFCRDhGCisxNEI0NEZFRQorRDQ1MzA5Q0I3NjYzOEEzNjBDQzNDNTJDMzc2OAorMzNDQzlDMDdBMkM5NEMyOTIyNTg3MTFBMkUyNjg0QkQ3NzAyMjNFRTg3RThFNTE1MDBFNjZDNDEzQzg4NUREOEY3QjU5MUQ2MTZFMDM1RDBBNEQyNDIyQjAyQTg3QUNBMzU5MTBFMjA0ODMzNTNCOEFFRDhGRDAyN0VEODREQURDOTI3RjA0QUM1RkUyOTBCMjQxMUJBQkU5ODE5QTFCNTQ1NUM0Njc1QzAyRDU4NkZCQzk0NkRDMEQ4QzBENDU2NUQ0N0E0QkExRTAxNzY3QUMwMUJDOTlEMzgwRTI2RUFFRjI4MTExNDBEQTRCQ0IyQjZDREMxNDVFMDIzCis1NTc3Cis0MEM4QzUzRjZDMUQyM0I2NkZCNEM1NDc3ODUxNjU1MTFGRTc1RUZGNURGMDhFM0E4OTBEMjY5NTQyQzc0RTc2RENEQjI3MzM4RjU3OEY3NzQ5RTFCQzU2NDlCNDlDMzVENkVCMDdEOEIyMjA2NTgyRUY0REE1Qzg3MUFGRjBEQzczRDM2NEY1NzFCOUMxQTU1Q0FENjkKK0EzQzg5N0ZGCis2QUYzRjBFRkE1MUY3NjFDRUI1QTA5NjM5NgorQ0E2MkFERDY0MUJCRUI3RjE1QkY3MUVFNjBBMDc2OTc0NjM1OUU2RUQ1MDJEODYyMjE2ODZGNTM4N0ZBRDFDOTlGQzc5RUMzQjY3RDI2REU0NzkxQUI3QzJFM0E4NzhGMTAwREVEQzc3MDc5REU5MzU0Q0FFRTU5MzE1OURDNDgwNDg0MEIzNDZDMEI2M0FGMzA0MkE4RjU1RUQyQ0RENjgxQUUwMkE1NjQ1RTQyNzE5MDg2NDVFNjQ0MzRDOAorNkVDMUZBOTQKKzgxMjI0QjU5NEQzMjRFRUMyMkIxOENGMkZGRUMKK0M2OTREMjZEQTRCMDFFQUMxN0U4MUJEMEExMjAxQjA3MzNGMUEyMzgwNjlDRTY4NUI2MUFCN0MwMzcyREY1MjdGRTEzRTlDNEYwMkZBNEEyQTdCRTlGNjMwNjhFQkI1ODUyQzlGQjdDMEIwREM0ODA2OTlBRTJCOTU3N0RDNDM1Mzc5OUQwMjg3Q0Q5QTVFNkEwOUEwQTcyNUY1OTFFQjEzMUFDRDcyRjk4RDc5MTk5QjdCM0I0MkNGQTVFNTRGMUU3REIxRjkyRUE0RDYwNTVGQ0Y2MjdDNEUyQ0U5MDA0NkE4RTRDMzhFOTk3NDU3OTU5QUY0QzUzMTY1RQorQUEwQworMUVFRkU0MkIzQUYyMThDMTk5QkYxQjk3RkY5RjlCNkVCNjMyNTNCQzM1NTRFOENBMkIzOUYyQ0REMzMxRTczQ0Q3N0Y4NDAzOTM0ODg1MTAzMkU3CisyNkU4Q0NBMgorRjlENEFCOTA5OTY0OEYxNjU5NDRBRDAyRUUKKzgzQTQ5NEZBRDEwNjAxRkNGNTRDMDY2NUYwQjQ3ODdCNTZFOEYwQUQyMkQ4MTRFQkI2NTU0QjYyMkEzMEFDNTdFNDY2QUI0NjgxRjU2NzhEQzVFNjNDN0M0NDdDMEVDRDJCNzA3ODUwN0U5MUJDRjcyNUNFRjUwOEQ2QzQwRTg5RkQ4QTI2NjlEREFGQzFFRkQyQTBENTI0MzRBODI0NDA1MTZDMzkxQjU3QUIxNjlBMEQzNTI3CisyNzRBNTk0OQorQkVDQzM3QjdDNEE5NTUyOUJCMzNGMkMwRUE4RQorMjc5REM2NzAwRURFMENFODUwQTkxNzdDNkU4NTFEMDFENjdCMUZBQTBFRTQ0NkZFOTQ3QjE2QTI0Qjk5QzFDMkU4RDgxNDEzMzdENzA1Njk5NUY0QkE5RDEyNDY1NTE1ODdBQUVGNUU4RkVBOEM4MTI3QkJEREE2Mjk0QUJBNkIzN0I0REI2M0Q5M0JFREFBMzBGQzEyQkQ1MDEyOUEwQTgzQkYzMjQ0MEM3RjQ4MTZDNDc5NzJBREEzNUQzRENBQzY1MTE5MEJBMTkzMTAwNEU3NzcxQzkzRjQzNzY0MTQ4QjFENkJBMkZEQTcKKzgzNjVBQUMyCisxNjREMDc0NjRBOTVDMUMxMTI4OEVDMTg2MworNTNCOUM0QjI5OEU0OUMwOTUwQzhGNTIwNThDQUVGMUEzNDE5OUY4NTNCNzlERTdFMDcxMEU0QjEyNDk3QkYxNTZGODEzQjA1MjFFNzJGNjk5MzU4Q0ZCRDE0QTlENTZDOERDOENGNUY1NkQ2REExODFFMUZFNEQ2NDk2RDI0Mjk3QkVCQTgxQ0RGNDJGNDk4QzAyMjg5MTlBMERCQzUxQzg2ODYzOTkyNUY5RTE2CiswMTNDRDUyNworNTJBNjMzNzA1M0ZDOEUwQzRENTg2OUIyOTYyMAorQkVCRjAxRkRFMTI3OUJCQUZCQjlDOTVGRjY4RUE3ODk3NUU5Q0ZDQzVCNTVGMUFCQTQyMjJDNUY5RjM2REMxNzkzOEEyOUM3M0IyNTIxOTNBRjMzRTU0Nzg5OEEzOEE2QUQzQkExQTYxQTU2RDdEODUzRkUyREY0MjlGODRDM0M2N0Y5NkFCRjIxQzlFODk3ODYwQkU5Rjk3ODYyMkE1MUIzOUIwQjEwN0VCQkEwMzI2RTAwODE3MDg0N0IzOEIzODVCMjY4QUY1RDAzQTExRDU4OUQ0OTIyOTQ4MjYxQkE0NTJFQzEwOTYzRTJENTE4MjFFQkE3RDAyQkZBCitFRjM2CisyRDNBQTkwQjY5NTFDOTY3QTlDOTg4N0U3NDdCMjUzMUNGQUIzOTY5MjQ3NUE0CitFMEUwRjQ1NAorQ0M0Qjg5RUQ5Rjc0MkY5NTU0NzBBMERCNkIKK0M3RDEyQUUxMTRCQkU3QjI2RTFBODk3QzczMTcwM0MyRTQ2RUY1QkQ5Mjc4MzUwNTZCQUU2ODFBRUVERjA3MjcyMzM5NEM5QTFBQzJGOUNDRERBODhCMjcyODgwRjM5RjlDN0E5NDA5NzBBQjlGNzdDNzEzQzQwMDBCQ0YxMDFFNUFGNzYxQkZCOTc3NURENzZBNEFDMEU5NjcxMkM2ODRCMjVGOTBBNjRGNjhGOEM5MkVGMAorNjdFRDgzNUUKKzNFNEUzNzUwNjdGQ0E2QjExQTEyOUFCNzYzMUIKKzMyMTI1ODI4NUE5MUJBODdDQ0I5M0E5ODI5MzQyMTYyRkNDMjI4NUUwMTgwMTZBRDFBMjgyOTRCRkEzNTdFOEY3MTg3NDMxMkZEOTdFQTNBNDJEMTMxNEJDOTIzM0EyOEY2ODFCQ0U4NTZEN0I3NzQ5QTExRUVFRjczQjZGRUYzNDNBRDI4OTRFN0U1MDUwQzMyQ0Y4REFGMzVERTU1MTcwNkM0RTA2NTY0QTkzOUMzRTY3Q0UzQjE2RTlCM0IyMUEyMjkwRkUwNDdCMTU2Rjk2NDI4QzgyMDVCNDJBOTVDNUY4M0I4NjI2Mzc0NDNGM0U1MEI2QkM0OUFDQworRjBBMQorNDJFOEUxQjY4OEFENkNCQzRGCitCQTVENEIzRQorQzc5NDNGQTJEREI3NEY5M0QzRERGNkI1MzM0MAorOEYzRDczMzI2NzJERTE1QgorRTdFMTgzQkIKK0Q4RjJGN0I0MUU0MzYzRkY0MjI0NENFODI5QUE3M0NDNEE3OUQzM0YyQjlGMDgzOUY4OUUzNkUzMDBEQjQ4NTdGMDUyCisxRjM1REQzRjVGQTJCRDFFQzRBMUM4RjQ5NTFGNzk3RUYyQzBCMkM4MjQxODI3OEQ4N0ZCQkY0OThEMkQyRkFCRjg3Q0E2RkRBQzk5Cis1ODYyNEU0MzVFODAwMjkyMTc0QkQwRUE2MENEQjcxQjMyNkM3M0VGN0FBRTMyRkRGMjdENTEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmkgMTIuMDAgL1BTT3dzdGR1dGNoaSBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxYjJhMzgzNDJhMzYyYjEwMDExMjAxMTMyYTMyMjgyZDMxMjYzNjJmMDEyYjMzMzYwMTFhMmEyNjM3MzkzNjJlMzIyYzAxMWIyYTM4M2IzMzM2MmYwMTFkPiAyMjA3IDU1OCAwIDczODQgLTEgcworPDJhMzYyYjMzMzYzMTI2MzIyODJhPiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwYzBkPiA5MzQ2IDEzMzAwIDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjgwIDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyODAgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI4MCAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyODAgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA2MGEwZDA5PiAxMjcxIDE0MzEgMCAxNzc2IC0xIHMKKzwwMDA1MWExOTE5MTMxMjFlMTUxYTE5MTcxMzFkMWQwMDBlMWUxYzEzMTExOD4gMTc3NiAxNDMxIDIgMzkzMCAwIHMKKzwwYjBjMGYwNz4gMTI3MSAxODI2IDAgMTg2NiAtMSBzCis8MDQ+IDE4NzAgMTgyNiAwIDE5MjggLTEgcworPDAwPiAxOTI4IDE4MjYgMSAxOTU5IDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDE1MTkxZDE4MDAzODJhMzczODM3MDAyNjM2MmEwMDMyMzMzODAwMjgzMzMxMzQyZTMwMmEyOTA4MmUzMjAwMjczZDAwMjkyYTJiMjYzOTMwMzgwMDNiMmUzODJkMDAzMjJhMzgzNDJhMzYyYjA5MDAxODJiMDAzZDMzMzkwMDNiMmUzNzJkMDAzODMzMDAzMTJhMjYzNzM5MzYyYTAwMzQyYTM2MmIzMzM2PiAxOTU5IDE4MjYgMTUgOTQ2MSAwIHMKKzwzZj4gOTQ2MSAxODI2IDAgOTUzMSAtMSBzCis8MzEyNjMyMjgyYT4gMTI3MSAyMDcxIDAgMTg2NCAtMSBzCis8MDAzMzNhMmEzNjAwMTUxOTFkMTgwNzAwM2QzMzM5MDAzYjJlMzAzMDAwMzIyYTJhMjkwMDM4MzMwMDI2MjkyOTAwMjYwMDA4MTUxNTFjMjQxNTE5MWQxODAwMzgzMzAwMzgyZDJhMDAzMTI2MmYyYTJiMmUzMDJhMDAyNjMyMjkwMDM0MmEzNjJkMjYzNDM3MDAyNjI5MjkwMDM4MzM+IDE4NjQgMjA3MSAxNiA5NTMxIDAgcworPDM4MmQyYTAwMjUyNTE5MTgxMzFmMTEwMjAwMjYzMjI5MDAzNjJhMDgyODMzMzEzNDJlMzAyYTAwMzIyYTM4MzQyYTM2MmIwMDI2MzIyOTAwMzIyYTM4MzcyYTM2M2EyYTM2MDk+IDEyNzEgMjMxNiA2IDYwNTAgMCBzCis8MTI+IDEyNzEgMjY0NiAwIDE0MzQgLTEgcworPDAwMTUxOTFkMTgwMDE0MzMzMjMyMmEyODM4MmUzMzMyMzAyYTM3MzcwMDFmMzgzNjJhMjYzMTAwMzgyYTM3MzgwMDA1MTUxOTE0MTkyNDFmMjAxZTE2MTIxYTA2MDAyZTM3MDAyNjMyMjYzMDMzMmMzMzM5MzcwMDM4MzMwMDI2MDAyMTE1MWQyNDFmMjAxZTE2MTIxYT4gMTQzNCAyNjQ2IDEwIDk1MzEgMCBzCis8MzgyYTM3MzgwOT4gMTI3MSAyODkxIDAgMTY0OCAtMSBzCis8MDAyMDJkMmEzZDAwMjczMzM4MmQwMDMxMjYyZjJhMDAzOTM3MmEwMDMzMmIwMDM5MzIzNjJhMzAyZTI2MjczMDJhMDcwMDI4MzMzMjMyMmEyODM4MmUzMzMyMzAyYTM3MzcwMDM4MzYyNjMyMzczNDMzMzYzODM3MDkwMDIwMmQyYTAwMTUxOTFkMTgwMDM4MmEzNzM4MDAyOTJlMmIyYjJhMzYzNzAwMmIzNjMzMzE+IDE2NDggMjg5MSAxMyA5NTMxIDAgcworPDM4MmQyYT4gMTI3MSAzMTM2IDAgMTU2MSAtMSBzCis8MDAyMTE1MWQwMDM4MmEzNzM4MDAyZTMyMDAzODJkMjYzODAwMzgyZDJhMDAzMTJhMzczNzI2MmMyYTAwMzcyZTNlMmEwMDMxMzkzNzM4MDAyNjMwM2IyNjNkMzcwMDI3MmEwMDMwMmEzNzM3MDAzODJkMjYzMjAwMzMzNjAwMmEzNTM5MjYzMD4gMTU2MSAzMTM2IDE0IDc3NDEgMCBzCis8MDAzODMzMDAzODJkMmEwMDMwMmUzMjJmMDAxYTIwMjEwMDA4PiA3NzQxIDMxMzYgNSA5NTMxIDAgcworPDE1MTkxZDE4PiAxMjcxIDMzODEgMCAxNzg3IC0xIHMKKzwwMDI5MzMyYTM3MDAzMjMzMzgwMDM0MzYzMzNhMmUyOTJhMDAxODFkMDgzMDJlMmYyYTAwMzcyYTJjMzEyYTMyMzgyNjM4MmUzMzMyMDAyNjMyMjkwMDM2MmEyNjM3MzcyYTMxMjczMDNkMDAyYjM5MzIyODM4MmUzMzMyMjYzMDJlMzgzZDA3MDAyNjMyMjkwMDM4MmQyYTAwMzIyYTM4MzQyYTM2MmI+IDE3ODcgMzM4MSAxMSA5NTMxIDAgcworPDI3MmEzMjI4MmQzMTI2MzYyZjAwMjkzMzJhMzcwMDMyMzMzODAwMzQzNjJhMzczOTMxMmEwMDM4MzMwMDM0MzYzMzNhMmUyOTJhMDAzMzMyMmEwOT4gMTI3MSAzNjI1IDYgNTM2MiAwIHMKKzwyMDJkMmE+IDEyNzEgMzk1NiAwIDE2MzEgLTEgcworPDAwMzcyZTMxMzQzMDJhMzczODAwMTUxOTFkMTgwMDE0MzMzMjMyMmEyODM4MmUzMzMyMzAyYTM3MzcwMDFmMzgzNjJhMjYzMTAwMzgyYTM3MzgwMDI4MzMzMTMxMjYzMjI5MDAzMDJlMzIyYTAwM2IzMzM5MzAyOTAwMzAzMzMzMmYwMDM3MzMzMTJhMzgyZDJlMzIyYzAwMzAyZTJmMmEwMDM4MmQyZTM3MTA+IDE2MzEgMzk1NiAxMiA5NTMxIDAgcworPDAzPiAxMzk4IDQyODYgMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDMxYTFiMWUwMzE5MTMxZTFiMTMxYzE0MDMxOTEzMWUxYjEzMWMxNDAwMDIwODAwPiAxNTA0IDQyODYgMyAzNzg1IDAgcword3N0OmR1dGNoMTJpIFNGCis8MGIwNDA4MDkwZDA0MDUwOTBjMGQ+IDM3ODUgNDI4NiAwIDQ3NDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMjFlMDA+IDQ3NDQgNDI4NiAyIDUwOTkgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE1MTkxNDE5MjQxZjIwMWUxNjEyMWEwMDA4MDgwMD4gNTA5OSA0Mjg2IDIgNzE4OCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAyMTgwMD4gNzE4OCA0Mjg2IDEgNzU5MyAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MGMwYjBkMGU+IDc1OTMgNDI4NiAwIDgwMTcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxNzJhMzYyYTAwMjYzNjJhMDAzNzMzMzEyYTAwMzMyYjAwMzgyZDJhMDAxNTE5MWQxODA4MzczNDJhMjgyZTJiMmUyODAwMjgzMzMxMzEyNjMyMjkwMDMwMmUzMjJhMDAzMzM0MzgyZTMzMzIzNzAwMmIzMzM2MDAzODJkMmEwMDE1MTkxNDE5MjQxZjIwMWUxNjEyMWEwMDM4MmEzNzM4MTA+IDEyNzEgNDYxNiAxMiA5NDUzIDAgcworPDA4MTU+IDE1ODkgNDk0NyAwIDE5MzcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MDMwNDBmMGMwYTA0MDI+IDIwMzMgNDk0NyAwIDI3MDAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNzM0MmEyODJlMmIzZD4gMzE3NyA0OTQ3IDAgMzc5NSAtMSBzCis8MDAzODJkMmEwMDMwMzMyODI2MzAwMDI2MzIyOTBhMzMzNjAwMzYyYTMxMzMzODJhMDAxNTE5MWQxODAwMjkyYTNhMmUyODJhMDAyYjJlMzAyYTAwMzIyNjMxMmEwNTM3MDYwMDA1MmIzOTMwMzAzZDA4PiAzNzk1IDQ5NDcgOSA4ODk1IDAgcworPDM1MzkyNjMwMmUyYjJlMmEyOTA2MDk+IDMxNzcgNTE5MiAwIDQxMTIgLTEgcworPDAwMWYzZDMyMzgyNjNjMDAyZTM3MDAzODJkMmEwMDM3MjYzMTJhMDAyNjM3MDAzODJkMjYzODAwMzMyYjAwMjYwMD4gNDExMiA1MTkyIDkgNjkxNCAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBjMDYxMDA0MGMwYTA0MDI+IDY5MTQgNTE5MiAwIDc1OTMgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOT4gNzU5MyA1MTkyIDAgNzY0NiAtMSBzCis8MDgzMT4gMTU4OSA1NTIyIDAgMTk0MCAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwZjAxMDcwZTA0PiAyMDMzIDU1MjIgMCAyNDk1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzczNDJhMjgyZTJiM2Q+IDMxNzcgNTUyMiAwIDM3OTUgLTEgcworPDAwMzgyZDJhMDAzNzJhMzIyOTAwMzcyZTNlMmEwNzAwMmUzMjAwMjczZDM4MmEzNzA3MDAyYjMzMzYwMDM4MmQyYTAwMzAzMzI4MjYzMDAwMzczZDM3MzgyYTMxMDkwMDIwMmQyZTM3MDAzMTM5MzczODAwMjcyYT4gMzc5NSA1NTIyIDEyIDg4OTUgMCBzCis8MzAyYTM3Mzc+IDMxNzcgNTc2NyAwIDM1MDIgLTEgcworPDAwMzgyZDI2MzIwMDMzMzYwMDJhMzUzOTI2MzAwMDM4MzMwMDM4MmQyYTAwMzAyZTMyMmYwMDFhMjAyMTA5PiAzNTAyIDU3NjcgNyA2MzU5IDAgcworPDA4MWE+IDE1ODkgNjA5NyAwIDE5NjcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGYwMTA3MGUwND4gMjAzMyA2MDk3IDAgMjQ5NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDNiMmQyZTI4MmQ+IDMxNzcgNjA5NyAwIDM3MDMgLTEgcworPDAwMjcyYTJkMjYzYTJhMzcwMDMwMmUyZjJhMDAwODMxMDcwMDM3MmEzODM4MmUzMjJjMDAzODJkMmEwMDM2MmEyODJhMmUzYTJhMDAzNzJlM2UyYTAwMmIzMzM2MDAzODJkMmE+IDM3MDMgNjA5NyA5IDgxODAgMCBzCis8MDAzNjJhMzEzMzM4MmE+IDgxODAgNjA5NyAxIDg4OTUgMCBzCis8MzczZDM3MzgyYTMxMDk+IDMxNzcgNjM0MiAwIDM4MzUgLTEgcworPDA4MzQ+IDE1ODkgNjY3MiAwIDE4ODIgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGEwYTAxMGMwYTA0MDI+IDIwMzMgNjY3MiAwIDI3MjUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNzJhMzg+IDMxNzcgNjY3MiAwIDM0MzIgLTEgcworPDAwMzgyZDJhMDAzMDMzMjgyNjMwPiAzNDMyIDY2NzIgMiA0MjY2IDAgcworPDAwMjYzMjI5MGEzMzM2MDAzNjJhMzEzMzM4MmEwMDE1MTkxZDE4MDAxZDFkPiA0MjY2IDY2NzIgNCA2NTA2IDAgcworPDEyMDUzNzA2MDkwMDFmM2QzMjM4MjYzYzAwMmUzNzAwMzgyZDJhMDAzNzI2MzEyYTAwMjYzNz4gNjQ3OSA2NjcyIDUgODg5NSAwIHMKKzwzODJkMjYzOD4gMzE3NyA2OTE3IDAgMzUzNiAtMSBzCis8MDAzMzJiMDAyNjAwPiAzNTM2IDY5MTcgMyAzOTg2IDAgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjEwMDQwYzBhMDQwMj4gMzk4NiA2OTE3IDAgNDY2NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA5PiA0NjY1IDY5MTcgMCA0NzE4IC0xIHMKKzwwODM3PiAxNTg5IDcyNDggMCAxODQ3IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBmMDEwNzBlMDQ+IDIwMzMgNzI0OCAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNzM0MmEyODJlMmIzZD4gMzE3NyA3MjQ4IDAgMzc5NSAtMSBzCis8MDAzODJkMmEwMDBmMGIwZDA5MGQwMDFmPiAzNzk1IDcyNDggMyA0ODUyIDAgcworPDEyMWQwMDJiMzMzNjAwMzgyZDJhMDAzODJhMzczODA5MDAyMDJkMmUzNzAwMzcyZDMzMzkzMDI5MDAzMjMzMzgwMDI4MzMzMjJiMzAyZTI4MzgwMDNiMmUzODJkPiA0ODQ2IDcyNDggOCA4ODk1IDAgcworPDI2MzIzZD4gMzE3NyA3NDkzIDAgMzQ5MyAtMSBzCis8MDAyNjM3MzcyZTJjMzIyYTI5MDAxZj4gMzQ5MyA3NDkzIDIgNDQ4MCAwIHMKKzwxMjFkPiA0NDc0IDc0OTMgMCA0NzY1IC0xIHMKKzwwNDM3MDk+IDQ3NjkgNzQ5MyAwIDQ5NTYgLTEgcworPDA4M2I+IDE1ODkgNzgyMyAwIDE5MDkgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjEwMDQwYzBhMDQwMj4gMjAzMyA3ODIzIDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM3MzQyYTI4MmUyYjNkPiAzMTc3IDc4MjMgMCAzNzk1IC0xIHMKKzwwMDM4MmQyYTAwMzAzMzI4MjYzMDAwMzcyYTMyMjkwYTM2MmEyODNhMDAzYjJlMzIyOTMzM2IwMDM3MmUzZTJhMzcwMDJlMzIwMDJiMzYyNjMxMmEzNzAwMDUzYjJkMmEzNjJhMDAyNjNhMjYyZTMwPiAzNzk1IDc4MjMgOSA4ODI1IDAgcworPDNmPiA4ODI1IDc4MjMgMCA4ODk1IC0xIHMKKzwyNjI3MzAyYTA2MDk+IDMxNzcgODA2OCAwIDM2OTIgLTEgcworPDA4MjI+IDE1ODkgODM5OCAwIDE5NzUgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjEwMDQwYzBhMDQwMj4gMjAzMyA4Mzk4IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM3MzQyYTI4MmUyYjNkPiAzMTc3IDgzOTggMCAzNzk1IC0xIHMKKzwwMDM4MmQyYTAwMzYyYTMxMzMzODJhMDAzNzJhMzIyOTBhMzYyYTI4M2EwMDNiMmUzMjI5MzMzYjAwMzcyZTNlMmEzNzAwMmUzMjAwMmIzNjI2MzEyYTM3MDAwNTNiMmQyYTM2MmE+IDM3OTUgODM5OCA4IDgzNzIgMCBzCis8MDAyNjNhMjYyZTMwPiA4MzcyIDgzOTggMSA4ODI1IDAgcworPDNmPiA4ODI1IDgzOTggMCA4ODk1IC0xIHMKKzwyNjI3MzAyYTA2MDk+IDMxNzcgODY0MyAwIDM2OTIgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MTAxOTE1MWY+IDEyNzEgOTA5MSAwIDE3MTAgLTEgcworPDAwMDYxYTE4MTExNTE5MDAwZTFlMWMxMzExMTgwMDBlMWExMjE2MTMxZTFkPiAxNzEwIDkwOTEgMyAzOTU2IDAgcworPDBiMGMwZjA3PiAxMjcxIDk0ODUgMCAxODY2IC0xIHMKKzwwND4gMTg3MCA5NDg1IDAgMTkyOCAtMSBzCis8MDA+IDE5MjggOTQ4NSAxIDE5NjAgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMjEzMjJlM2MwMDE1MzMzMTI2MmUzMjAwMWYzMzI4MmYyYTM4MDAzODJhMzczODM3MDAyNjM2MmEwMDMyMzMzODAwMjgzMzMxMzQyZTMwMmEyOTAwMmUzMjM4MzMwMDMyMmEzODM0MmEzNjJiMDAyNzNkMDAyOTJhMmIyNjM5MzAzODA5MDAxODJiMDAzZDMzMzkwMDNiMmUzNzJkMDAzODMzPiAxOTYwIDk0ODUgMTUgOTA0NiAwIHMKKzwwMDMxMmEyNj4gOTA0NiA5NDg1IDEgOTQ2MSAwIHMKKzwzZj4gOTQ2MSA5NDg1IDAgOTUzMSAtMSBzCis8MzczOTM2MmEwMDM4MmQyYTAwMzQyYTM2MmIzMzM2MzEyNjMyMjgyYTAwMzMyYjAwMjEzMjJlM2MwMDE1MzMzMTI2MmUzMjAwMWYzMzI4MmYyYTM4MzcwNzAwM2QzMzM5MDAzMTM5MzczODAwMzYyYTI4MzMzMTM0MmUzMDJhMDAzMjJhMzgzNDJhMzYyYjAwMjYzMjI5PiAxMjcxIDk3MzAgMTEgODI0MSAwIHMKKzwwMDMyMmEzODM3MmEzNjNhMmEzNj4gODI0MSA5NzMwIDEgOTExMyAwIHMKKzwwMDNiMmUzODJkPiA5MTEzIDk3MzAgMSA5NTMxIDAgcworPDA4MTUxNTFjMjQyMTFiMTgyMz4gMTI3MSA5OTc1IDAgMjY0OSAtMSBzCis8MDAyNjI5MjkyYTI5MDAzODMzMDAzODJkMmEwMDMxMjYyZjJhMmIyZTMwMmEwOT4gMjY0OSA5OTc1IDQgNDczMiAwIHMKKzwxMj4gMTI3MSAxMDMwNSAwIDE0MzQgLTEgcworPDAwMjEzMjJlM2MwMDE1MzMzMTI2MmUzMjAwMWYzODM2MmEyNjMxMDAxZjMzMjgyZjJhMzgwMDFmMzgzNjJhMjYzMTAwMzgyYTM3MzgwMDA1MWYyMDFlMTYxMjFhMjQxZjIwMWUxNjEyMWEwNjAwMmUzNzAwM2EyYTM2M2QwMDMxMzkyODJkMDAzMDJlMmYyYT4gMTQzNCAxMDMwNSAxMSA5MzM1IDAgcworPDAwMjY+IDkzMzUgMTAzMDUgMSA5NTMxIDAgcworPDIwMTQxZDI0MWYyMDFlMTYxMjFhPiAxMjcxIDEwNTUwIDAgMjcyNCAtMSBzCis8MDAzODJhMzczODA5PiAyNzI0IDEwNTUwIDEgMzE1NCAwIHMKKzwyMDJkMmE+IDEyNzEgMTA4ODAgMCAxNjMxIC0xIHMKKzwwMDFmMmUzMTM0MzAyYTM3MzgwMDIxMzIyZTNjMDAxNTMzMzEyNjJlMzIwMDFmMzgzNjJhMjYzMTAwMWYzMzI4MmYyYTM4MDAxZjM4MzYyYTI2MzEwMDM4MmEzNzM4MDAyODMzMzEzMTI2MzIyOTAwMzAyZTMyMmEwMDNiMzMzOTMwMjkwMDMwMzMzMzJmMDAzNzMzMzEyYTM4MmQyZTMyMmM+IDE2MzEgMTA4ODAgMTIgOTUzMSAwIHMKKzwzMDJlMmYyYT4gMTI3MSAxMTEyNSAwIDE2MDIgLTEgcworPDAwMzgyZDJlMzcxMD4gMTYwMiAxMTEyNSAxIDIwMzcgMCBzCis8MDM+IDEzOTggMTE0NTYgMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDMxYTFiMWUwMzE5MTMxZTFiMTMxYzE0MDMxOTEzMWUxYjEzMWMxNDAwMDIxZTAwPiAxNTA0IDExNDU2IDMgMzY5MiAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MWYyMDFlMTYxMjFhMjQxZjIwMWUxNjEyMWE+IDM2OTIgMTE0NTYgMCA1NjU4IC0xIHMKKzwyMDJkMmE+IDEyNzEgMTE3ODYgMCAxNjMxIC0xIHMKKzwwMDA4MTcwMDJjMzAzMzI3MjYzMDAwMjgzMzMxMzEyNjMyMjkwMDMwMmUzMjJhMDAxYzM0MzgyZTMzMzIwMDJlMzcwMDMyMzMzODAwM2EyNjMwMmUyOTAwMmIzMzM2MDAyNjAwMjEzMjJlM2MwMDE1MzMzMTI2MmUzMjAwMWYzMzI4MmYyYTM4MDAzODJhMzczODAwMjYzMjI5MDAzNzJkMzMzOTMwMjk+IDE2MzEgMTE3ODYgMTYgOTUzMSAwIHMKKzwzMjMzMzg+IDEyNzEgMTIwMzEgMCAxNTcyIC0xIHMKKzwwMDI3MmEwMDM3MzQyYTI4MmUyYjJlMmEyOTA5PiAxNTcyIDEyMDMxIDIgMjc1MSAwIHMKKzwxNzJhMzYyYT4gMTI3MSAxMjM2MSAwIDE3MzYgLTEgcworPDAwMjYzNjJhMDAzNzMzMzEyYTAwMzMyYjAwMzgyZDJhMDAyMTMyMmUzYzAwMTUzMzMxMjYyZTMyMDgzNzM0MmEyODJlMmIyZTI4MDAyODMzMzEzMTI2MzIyOTAwMzAyZTMyMmEwMDMzMzQzODJlMzMzMjM3MDAyYjMzMzYwMDM4MmQyYT4gMTczNiAxMjM2MSAxMSA5NTMxIDAgcworPDFmMjAxZTE2MTIxYTI0MWYyMDFlMTYxMjFhPiAxMjcxIDEyNjA2IDAgMzIzNyAtMSBzCis8MDAzODJhMzczODEwPiAzMjM3IDEyNjA2IDEgMzY3MiAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgxMykgMTMKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNiBwdXQKK2R1cCAzIC9DMDA0MCBwdXQKK2R1cCA0IC9DMDA0MSBwdXQKK2R1cCA1IC9DMDA0NCBwdXQKK2R1cCA2IC9DMDA0NSBwdXQKK2R1cCA3IC9DMDA0NiBwdXQKK2R1cCA4IC9DMDA0OSBwdXQKK2R1cCA5IC9DMDA1MSBwdXQKK2R1cCAxMCAvQzAwNTggcHV0CitkdXAgMTEgL0MwMDY1IHB1dAorZHVwIDEyIC9DMDA2NiBwdXQKK2R1cCAxMyAvQzAwNjcgcHV0CitkdXAgMTQgL0MwMDY4IHB1dAorZHVwIDE1IC9DMDA2OSBwdXQKK2R1cCAxNiAvQzAwNzAgcHV0CitkdXAgMTcgL0MwMDcxIHB1dAorZHVwIDE4IC9DMDA3MiBwdXQKK2R1cCAxOSAvQzAwNzMgcHV0CitkdXAgMjAgL0MwMDc3IHB1dAorZHVwIDIxIC9DMDA3OCBwdXQKK2R1cCAyMiAvQzAwNzkgcHV0CitkdXAgMjMgL0MwMDgwIHB1dAorZHVwIDI0IC9DMDA4MiBwdXQKK2R1cCAyNSAvQzAwODMgcHV0CitkdXAgMjYgL0MwMDg0IHB1dAorZHVwIDI3IC9DMDA4NSBwdXQKK2R1cCAyOCAvQzAwODggcHV0CitkdXAgMjkgL0MwMDkxIHB1dAorZHVwIDMwIC9DMDA5MyBwdXQKK2R1cCAzMSAvQzAwOTUgcHV0CitkdXAgMzIgL0MwMDk3IHB1dAorZHVwIDMzIC9DMDA5OCBwdXQKK2R1cCAzNCAvQzAwOTkgcHV0CitkdXAgMzUgL0MwMTAwIHB1dAorZHVwIDM2IC9DMDEwMSBwdXQKK2R1cCAzNyAvQzAxMDIgcHV0CitkdXAgMzggL0MwMTAzIHB1dAorZHVwIDM5IC9DMDEwNCBwdXQKK2R1cCA0MCAvQzAxMDUgcHV0CitkdXAgNDEgL0MwMTA2IHB1dAorZHVwIDQyIC9DMDEwNyBwdXQKK2R1cCA0MyAvQzAxMDggcHV0CitkdXAgNDQgL0MwMTA5IHB1dAorZHVwIDQ1IC9DMDExMCBwdXQKK2R1cCA0NiAvQzAxMTEgcHV0CitkdXAgNDcgL0MwMTEyIHB1dAorZHVwIDQ4IC9DMDExNCBwdXQKK2R1cCA0OSAvQzAxMTUgcHV0CitkdXAgNTAgL0MwMTE2IHB1dAorZHVwIDUxIC9DMDExNyBwdXQKK2R1cCA1MiAvQzAxMTggcHV0CitkdXAgNTMgL0MwMTE5IHB1dAorZHVwIDU0IC9DMDEyMCBwdXQKK2R1cCA1NSAvQzAxMjEgcHV0CitkdXAgNTYgL0MwMTIyIHB1dAorZHVwIDU3IC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstNTAgLTI1NiA5MjAgNzY2XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjE5Rjc1RTUzQUMyQUI3NTI0RTYxREQyOTQyQUQ0M0M4NjBDCisyRTE3RUNGMDBDODgzQjY2QTMzMEI5N0IKK0ZCNEE2QUE2RUExMEFFQzY1MQorQzkzMzNGQ0EKKzU2OENEQUI3QkE4REY2QjQxRkY1QzAxNzJGMzIKKzEzNkJDMTA3REVBNjcxRDVBMDRERjA1MDI5Q0VGQTZFNEVBQzAzNjVGMTBDQUMwMEI1QTEwOUNGNTYzQzk5OTc3NTk3QTgxMjEwNDYyRUVGRTlDODExNTAxNDQ0ODI3QTcwRkZGQjIyOTI5NkRDOTU0OTMwQTIwN0ZGRTlBRDNCQzdBMTYyMDBBNjIzRTUxODk0MUEzNzRENjI4MkQ5RjZDRjYyQjM2RTRCNkM5NTJGNTQwRThFQjM3Rjk0Rjk1QUIyRDJGQkE4MDlDNzM1NDkwNjg0QzIyQUMzNjVGMzJBOUYyNDk2N0ZFQzEwQzc0NEZGQzhDNjVBRDE0NAorRkU4NAorOUE5QTVBQTZBOTlGREUwOUQ5NkM4NkY4CitBRDgzMjI0NAorRjMyQTYyQkM0QkNFNkYzMkU4OUYwNkY4N0QKKzEzNTJFNTg5OUFFMDFDOTU1M0IxMEZGMENGMzg4REVCNzU0MjlGMUVBRDFCQzY1MkMzOUE4QjkxRTlGODQ3QzQ5NkM1RTZCNURCQTRGRUU4RDgzNTkwQjFFRkJCQTFBRTM1RUVGMDQwRTA4NDU2QjI5MEY0NzY1RjQ2QzM2QThFCis3M0JDNzUwRAorMTgzREMwRDU1MUMxOEI2NjdBQUQ1NEQ4MjMKKzUwRjhENUZFRDhGRDRENUU2RjVFQjA3OUE3REI4MUIxMjMxNEY5M0Y2MjIxNDVGMTYwRTkxQkI4MzkxN0ZFNzE1N0IxNDZGQURBODVBNjA3N0YxMTE1REZGNzFBNEY1NTc5MUYzQzdBNkEzNjlBMjM2ODQ1MkE2RjZFRTI1MworNkVENTVDMDUKKzkwRDlCMUZGNjZBQ0YxQ0Y1NkVFQ0JENzM2CitDNTk2RDZGQzBGMTgxQUZGQTc5NkYyQTgyQkU5MDEzNkNEMDQzQzg1RTEyQzc5RkMyQUEzRDU3ODUzRDExMUFDRTlDQzBFMkZEQTdBNjM4MTlEM0M5MEYxMzRFMTQ5NDAwRjRBNjM1MTQ3MTQ0MTE3RTcKKzMwMkJFQTQ3CiszQjk4Q0VGMjE4MUNERDk2RTZEQjBCMEJGNQorOENFMzBFNDYwMkUyOEFCMjUwNjFFMTQ1QzE5MTM1NkUzRkFCMDlBOEVDQkJGOQorRjRGODVFNDcKK0NENkNFMEVBNTE3Mjc1NTMwREMzMERCQkMxCiswRTEwODY2NTFCREUxNTA0NzEwMEYxQUIwN0I5RUU2OENFMTMwMTdDRjNDRENCOTgwQTFGQzRBRDA5QUQ3MQorQzA1NERCQTUKKzlCNUYzNDVBOEMyNTFEQ0MyMUEzMTk0NEMxCiswRTEwODY2NTA1MTdERjIwNzgwQ0REQzRBRkVFNERCODVDRjJBNUFDREE2RjAwMzc2OUY1QzYwNTI5RjU2MjVEMDNDNUQ2MkRGQUMxMkFEQjZFQjM3RDQ2MTgxODFDRUEwNTZDMDY3NEI4NUY0NTQyODI4N0QwRkEzOUY3OTkKKzFENkZDQTU4CitDRDlDOTk2OEQ5MTc4MDc3ODRGMThBODcxODZECitFMUI0OTZDNDZBQTRCMjMyNUU5QjIyNkM0OEI3RDA4RDdFQzJEQ0UzMjQxQ0EyQjhBMEQ0REUwNDU4NzIwNDNDOEE3NEE1NUEwRTI1QjY0ODMwMTM1RUYwNDFEOERBN0YwOTNDMzkzOTBENkVDQjg1NTAzM0FDRkNGM0Q0RTExOUYzNTBFNTlGRkI4QTZDOTE3QTY0MzhBQkJFM0JGNEIwNDhEMDMyQkRCMzUxMEQ3NTJBM0I1REMwMDY1QjdBNEI5QTkyMzMyMUE1MUIzRTA2QTkyQTQzNTUwRDIyOUUKK0UxRTM4OUY5CitGN0I5QUY0RDZDNjc5RjRGNEMyOTlGNjcxNgorOEFGN0U2MUZDNDU5Q0U2NkE0MzUzQkMyMURGMzNBNUU5MjIzQzNDNjQxMkI0OUNCNjNCQUJGNzMwMkY0RkI4RTkxNzg4QjYwMTRENzIzRDA2MDhGMzBBNEY4NDYzQzU0MkUwODc2OEYxMTE5CitBQkY0MEQyMQorODkxNzU5NTREMzcxNDBCRTlDNDg4RTc1QkJGNQorOTdEQjQ5RTM3OTA5QkIwMUEzNTFBNUYwMkRDMEY3QUIwQzQ0NDlEQTFDNzg5RDNCODc1MTQ1NkFGQjc0QkUwOEVGOTFEOTU2OENFRDVFNjQyMTgyMTJGQzc4Mzc3MDE2MzY2RDJENUVDRkVDRkJFMjgwMjY3MTRDQTBGNThGMzc0Njg0MzFEQTc4RDAwQUU2NTEyREJGNEI3MkU2QjY0QTE1NEREMjg5NzhBRTM0NDM3RUYxMDQ0RDk5MjgzNERGMUJDMUUyOTU4QzFGRjMxNEQxNDU1RTczNzg5NUM4NTJFMTZDMjkKKzhBMkU2RjlFCis4RTFFNTIzMzVDNjAwNDA3QjM3MkU1RkQxOTk2CitGOEFBRTc5MTU3REI0NzI3NkQ0MENFM0VGQjQ2QzkyQjk1MUE5QTA0RTRENDMwMUZBMjE0MTFCNDhEQjczRDk1N0NCRkI3QkRFRjkwQUI2OTQ4NDQ5RkNBN0ZDOTk4RTExNThCMjM2ODYwNjhGMEFFNzdCRjEwQTE5NEJBOEMzQjI5M0I5NjhGODNCREQ5ODcxMTYwQUE3MDU0NjEwRTZDMjE4NDkzMzM0OTZCMEEwN0Y1MzNEOUNBMEM5OEE2RjAzNzNCNENCMUZGRUZERjA5RUEyMTY5MkQxNTRDMDlDMUIwNEI3QTU1MkI4RUVCRTcxMjU4Njk3OEQxRUIKKzE4MzIKK0M0CisxMEE5N0JBQQorRjBCQUZGRkI5QjI5NDYyNEMxOEREMUQ0M0UKKzhDN0I4MURFRjM3NTVEOEU0ODJFREM0QkM2RjE1QUEwOUEzMjdCREYyMjlCNTRCMzlEMTY3Njc4OTg3OENEQUQ0OTAxMUNBQzA1REI1Mjg4NzE1MkQ4NDUxN0IzRkVEQzc3MDA0MEUxNDM4QURGQUYyQjBERUNCQkM2MTZBOTI5NjgyQjI1N0UzODk5QUI3Q0JGNDlFRDIzQkU2NzYxOEYwMUJCREU4MDMzOEFGQzg4REMyQUExNjZBRTU5RTcyNTE4CiszMjIyOTFCOAorRDM4Rjc1RUY4MTUzQjY3NkIyMDM3QkFGQkMKKzc5RjMzRTA3MUJCM0Q4Qjg1M0Y1Njc2NTYxQUY3RTZDRDE4MDI0QjE4NjBBQTJCNzdDNUVEMThGQjQ5MzU4NjRFNjg0Q0FDODFCOTE3MTIyMTQxODI0RjdEMEJEREE2MjQ2RkVGNTIxNjI4MTgyMEJERUREQzQ3QjYwNDAxRDRDNjQ2QjBEQjBCOEMzM0I4NzJBM0RCMjMwOEJDNDQ4QjA5OEJGRUFDQzgwNTMxQTE1NjBCMEFCNEFFMTVGQzBFMTUwMzNCQworNzU0RkZEQjIKK0E2MUQxNTAzMjQ5NEMyNDI3NTY0MDc4QjA1OTcKKzVCNDYyNUQ1MTUyQjg2Rjg4NTIxOTNCM0Y3NDIwODZGNzRBMkM3MkYwQ0RDNjU2ODlBRUVFM0MzMUZGNUIwMDQ2REFDNDM5Q0E2MkRCOTkxREI5NTk3ODZGQjQ4NzYzNDExQkEyMkFDQTA3QUY2QTMzNkVBRTBDOUVFQzQyRUI0MTM0MUQ4ODBGMkU1N0E0MDQzMDlENkY5RjJDODZGNTE2MjYxOEQ5MzczRjc0QjZEMUNFQTkxQThDMDA1NUNFNEUzREE1MkFCQUY3N0JDN0M1NTQzNThEMTg0NDU1QTRGMzFCMzI1NjAzQTdCOTdEQ0Y1QkVGRTIzNjkyMQorNERCMzZCMDIKKzg5QUVFRDNBRDg0NjMzNEMzNzE5NDFGMEFBRDMKKzI3MzUzM0YwNEU2MzEzNjJEMDExQTM5OERCMkMzNUI2OUZCMzhEMTlDREZFMjBGNjZFQ0NDNjIwQjM0MThFRUU1NjlDQzgyNTBBNTIxNURFMTQ2NzY3ODdFQzk1N0IxOTQ1MThFQkI1MzNBQzI3NjgxRjBEMjQxNTYzQjFFNzc1NjNFRTJDNUUyNDBFMkY4Q0IzOTExMzc1NzNBNkY4QjczNDk2RDBFRTU3RjQxQUJBRkZDQzlGRTc2NEIxMDEwOTc2RDRBMTQzQzc2MTYxOTNFMQorRDhCRDlEQkYKK0ZDM0JGOEE3QzI5N0ZEQjhBNzkzNDRFRjU1NDgKK0U3QkEyMUU0MTEzRjU1RjNDRDI4OTdGNTY2NzA0RTY5RDVEODM0QzdGQjFFM0NFQkQzNDZERDBBQjdCQTg2QzY3N0YxQzkzREExRTYyODQwMUFERUJCNzU5NzYyRUIyMzMwRkE5RDk5QUM3MDgyOTgyN0Y4QjNBQUREQTMyMDE2MEUyMDhGOTlCMzQ1M0YzMTM2NTlCQjA0QUMyNjVCMTlBNDJBQTY2NTFCREE1RUEwRDZFM0YwMTNENjcxN0Q0NDE1NEVFNjYxQ0VERkRGMUYxODRDMjJDQzRFM0ZERUQ0MzdBMzY1MTYxM0FGNjRCRDEyRDQKK0JFRUYwNEQ3CitFOUY0RTFGQTc0NDU3Nzk2NEQ2RDdENjBDNUYxCitFMEM3ODAxMjhFOTAyNkVGMDM0ODcxRUQwRTVCNDU2RTVDRjdDQ0VGMEUwQTFEMkFEOUNBNTBGMDgwM0YyNDYzRTc3QUZGNUFEOTVFMTNEMjkxRjg0Mjc0RENEQkNEMTUxNDIzOTAwOEY2ODNBNTk3NEQ2NjU2MkQ3RTZEQkUzMDQ0NkVEN0E5OEY4QjUxRUE4MUEwNUI0OUI1MjUyMkNEMkM3N0VBQjk4MzE1NzU4ODU2RDVGNjg2RjdFMTZGNzZCN0M0MTAxQkU0QUM1QkIzRUY2NjlFMkRFMUY4RTE2RkI5Mzk4NTFCQjY4MkFEOUY2RkMwQjgyRjdFMDYKKzU5OUIKK0E2OEU3QjFGQTU0NzQyODcyOTIyOTAKK0RGQUJBNzBECis0MkQyRjVDRkU0MDQ2RTlERkE1NkNBRjE5OAorRjEwNzNCN0I1OTg4MzAxOTdFODU5MkFGRDRCNDQxNjU1RURGRTBBN0ZBNzlFNzE2OUU0MTlFRURFNEJERTAwNUUzREVBNERCNzhGM0JFMTFGQTBDNDM2N0IyMjE1NUY0ODM1REFDOTcyMjE5QTI5MzRCNzAxOAorOTEwOENBMEMKKzZGQjRCMUMzQjQ3RUE5N0FEN0YyNTBGNzY3QTUKKzNBODJGOUQ4OTA3ODk2Q0E1MUU2RTE4NUU5QTNBMzE5NDBCQkYxN0Q0OTM1RjJEMDhGMkYyMzMwN0IxMTU2NkFGM0FDNkVCREU4QjMwRTczNjIxRDc0NUM0NUNDRDAxRjRDNTMxNkJGQUNBM0Y3OUY4MkE4MkVGM0E1NkMwOTA5RTM1MzhEREE4ODU5QTE5QjZCNENGQTIxMzJDRTdEQzQ4OUUwMjIxNDlCQTYwOTE2ODc0ODRGMDYzRkM2QjZDMUFBODAyOUU5NkI3MjY2MjgwQzEzMkZFNkIzNkIxQworQ0M3MjYxQ0MKKzkzMkIyRTM0NUU5Q0U3OTFCQ0ZERDI3RjE5CitFNjM1NzgxMTlFOERFNzFDRDQxMjI0RjRGMUZGNjg5NjQ4RDJCQUYwMUY3QUJDREMyRTI5NjkzOTg5QjI4QTZDQTFBRkIxNUI0RDgxQUQ3NUIwOEI1OUE2QTRGQ0ZENUZEOTg5RjY2MkU3OUQxMzJGQTAzM0RERDA5NkY1RjEzMTc1REY4NDgxQjJFRjZEMENCQzA2MDFDNDdGQkIzODk0MTNGN0MxMDIwODlDODg3NUU1RTY2NUI1Cis2NjVEMEUwMworRTZBMUVENkYzRThENjY2MDY0QkUzQ0FFQ0EKK0I3RjNGQjRCMkMxMDdFNzkxQ0FFOTA1MjVDRURCMzk1RDc2NUE0RTlGNkNENDU3RjVFNjA2QkJFMTIyRTg4RDQ2RTUwQ0UyNTMxQ0Y5Nzk4QzRGMTE5RjczMjM1NEIyQUNBQjRFN0NFRTE1MDI3MjFDMzRBMjc4MTEyNjdCOUI1RDBERTFBQ0RBREUyMzUxOEVBMjUxQ0YxOURCNzZCQUMxNzFCQUIKKzlERTlDRUQ1CiswNjM1RkVFOTcyREQ3MUQwQ0U0NzAxQ0Y1MjM1CitDRjY3QjVEQjUyQzAwNURDM0QyODQxRkY0QUU4RUY5MDMxQzI3M0YzRTg0RjYxMDBGRTRGMjlCRkQ2QjI3NTk2RkY2QjJFMTBDNTdDOEMzODlFQzI1RDEzNEEwNTFDOTVDNkExQzNEOUI1QTUzMDNBMzM1NTA2RUE0QjU3NUZGRDdGOUYzODNFMjdERjFDRjhCQTYyNEM4OTAzREFCQjkxMTQwOUQ1QkQ3NUQwMDhBMTNDRTg3NzIxOTlBRUE5QjAxMjhCRkQ4NkI0ODIxOUJGQTg3RgorQUE3MkYzNzcKKzZGMzJBRDQzOTQ4NDVBOTg4NUExRTU5NTdCQ0EKKzBFRTMyNkI5QTgxNzIwOUVGNzU5NjU1RDVGRDdFQUFEREU4MTJDNjc5MDUxNjU4QjIzRDJCMjRCRUQ3MUFDRDQ0RjQwQkI3NEM3RkNFNTFBQkIzNzVGNTE1Q0JFQUFCM0JFQkY0OTZERjdDRTRFRTU0MEEwMUFBNkYzNUUxMTI2NEEyRDk1Rjk1Rjg3QTY5MEZGQUY5RUI2NkUyNjk3Q0NFOTQxRkVBQkZGODQzQzFGNDlERDQyRjMyQzExRDJBMEM0MjU2N0NDMkIyOEVGREM5OTBDNkQyMDhEREU0NEQ5MjFCMzZDMzQ2ODFENzU5ODc2NUMzRTBCNTg1OQorOEQ5NDFDQkYKKzgxMjk4RkMxODI0ODUxNkIwMDU5NDIyOEE1OTQKKzk3NDRGRjQwMDhDNEVEQUFCRUZFQTgyQ0Q3MjM0NUQwNkNFMTE2Q0ZFOTZCMUFCREQwOTQ5MzY1Q0EwREVCQkFDNkIwQjBGRjA0OUE5Q0U2NUE3MTQ5OTQ0QzQ4NzkxN0NCODI1MTc1QjQ2QzVFOTQwNUIwMDk5NTQxMzU4REI2MUVCRTUxMDQyOTc3QTFBREYwMTJBMERFMjBENEY4NzMyOTQ4NUUxMDUyRjFEMjFFMjA2QkFEQTlGRTg5MzYzNzA4RjFFNkVBNTVEOTQyQTUwRUZEMDY4N0E3QTg4ODUzRUEyNjBBM0NBOTAzNUI0MTI3MjY2M0U0NDY4RQorMEE1NworMUY1N0VDCis4RjRCMzFFQgorNTg3OTU5NkQ2RjE4N0ExNzQwRkE3QUYxQ0QKKzI4NDg4QzFGQjA4MTJDNzVDOEZFOTI2NUJBRkMxRTU2ODA1QTgwNEU4OUY2RjkxMzVFOTRFMzUwREQyQUU0MDVBMkZDNjBBMzhENTZCMzVEMUJCQkZCOUU3MkE3RTNDRkFGMEFBOTg0MEYxNTlFQkZCQkU2NzU3ODYzMzI3QzA2NzM4NTBDQkIxQUY4RjcyMkZEMThDMzdENkM2QkJBQTE5RQorQzc1RjlGRjgKKzM2MzhDQkNFRkQwQUVDOUY5NDQwOUFBRkZCQTcKKzUwQTE2QTQ5MzNDM0U0NkZGRDBBRDhFODQ4MzYxNzBDODQyRURBNTQ3RkQzMENBQjE1MkVBM0Q5RjQ0QjlGQURGMjcwODU4MjEzMUY5QzRGNjU3REY3NDc0QURFRjY3NzQ4Rjc2RTcyOEZCOUEyQUJENjdEQzJBRUMyMjAwNjYwRjY5NEZFQkNCMkMyNENFODFFMzYyQTREMjUyNTQ1RkU0NDBBOEZBRDc5QkE3REYyMTU2RjI5NjQ0RDgzODlBN0UwQzJBMTFDCis3MkVFNDk4QgorNzVERDVCMzFFNzFGOTYxOUZDOTM3QTA5MzUzMAorM0VDMTgyMzhCOTAwOUFDRDkyMzA3RUFDRjFCOURDNjYxNTE5OUIyNTE3MzE2MUZGQUFBQjRBNkY0RkU2QkM3MzM1OTY0Q0Q1QURFQjk5REUzRTM3RUU0OTZENkZDQjA4QjRCRkFDRUQ1MEY3M0E0RTVGQzMxMEZFMEE4MzhEMzRCNDU5MjdEREFBNkIwQzU1RjdCMzkxRTBDNDIyMTg1MUZBMjFDQjYyNUEzMDA1QjY1RURFQkYzRDQ0QTgwMURDRTZGMDA3ODA0MzY1N0ZFNzBDMzNGNTZFREM5RDc1MjlCMTU2NDE0RjhGNjY3Q0QzRUQ0NUZFNDhGMUI3CitDNEQwCis3ODQ3MDhCQjg4QzVEQUJGRUJCQTI0ODE4OEJCMEYyMEYyMEIwNDgyRTkzRDdFMkU3MDlBODZDNUVGNDYzNjA3Q0ZEQzVDOEZFNzYzMjYKKzQ4NDJDNjgyCis2NjZGRTdCNUMwRDVFNUVBMDlBNDQ1Njg0RgorNEEyNzcxNjU4MEU3NzMyRkM0OUYzOTUwNjQzMkFCRjZBNkQwQ0E5RjY4MjZEN0YxNzZCMjFEOENGMDhDMTkyMzU1RUVEREVGRTE1RUYzNEE4NUNCCitFNzhFQTYzMworNTczRjIxM0U4MzdDMzVBOUYyQUM5NDIxQTQKKzZBM0ZBM0Y2MTlCMzhBQ0FGQzQyQkNBMjZDQzBEQTc4MTkzNEVGN0Y5RUU3NTUwMDE3MjhFMDdDREQzMzUyMEY4MTIzM0Q5NDZBOUE2NDI3MTQ3QTU0OTkKKzQyNEEwNzVCCitDNzMxQzMxN0E1Nzk5RTM3ODMyNEU3NkQwMQorOTM3RjlDRkVCQ0MyQkU4NTM0QTMzNDZEM0JFOURBNjZCMzk5RTgyNTk5RTgKK0Q4QkY5RjMxCitFOEU0MUVEMEM1QTIzNTg4NThBQ0Q1RjVCMjQ4CitFMDE2MjE1MjUyNjZFM0I3RDlDMERCNzM0MDc4NjkwQTI3QTU1QjQyQThEMjg3QUE3RDRGOTA3ODkzRkJGMjQ4NjJGQUU0NkYwNTMyMEVCOUU3MkZEOUY3NTI0NzQyQThFM0M1OTBCRjIyMzVENkZDODZEM0E2REQzNEQ4QTIwMzAzMTk1NUZENzU1Njk4OEVFRjVCQ0E3MUNDQ0ZBMDU2OEFFMEYyQTExNzM3RjE2QUE2Q0VEODJBRDk0NDIxNzNFRjQ1QTMyMDBDNzY0OTE0QTk5RTM0MTJBM0VENkY1M0U2RjAzQUJCRUU0NTNBRjY4MzRFRjI0QjU3QzgKKzc2MzgKK0Q2RERDQworQjcyQzhCMTgKKzAyQzMwODZDMTM1RjFFMTZBNUI1QTQ4MDU5CisyODkwN0ZERkNCMjEwNzZFQzMzRDQ1RDE2NTEzNjQzQzY3MzQ3NTFGRDhCQjFDOThBN0UxRURGMUE5OTBBNUE5NDQ0QTlDNzY0QjJCNUQxRTM0Qjc1ODc1QzMwMDRCRkNCNjhBNjRBRjlCNDQ5NkVEMzFCQTM2NjNEQUVDODA4OEVDMkU0M0YwMDA5NTJBRDM1Qzc2MEU2MzUwQzE2RTkyQjEzREZFMzU3RjJCMTAwMQorNjZDQzU4NDUKK0YxRjA1QjNDOTMxNjk4MzQ3RjhEQUJFMzAzCitGMjFDMTBCNjU0NURBOTY1RUExMTY5MkNFMTIyQkRCQjkyRUU5OUEzNzg5MEFGNzVCMzI0NDU0NjM0NkJDRjI1NTkyOTU5OEUwNUVCNzkzNzgyNzBGQjgxNkMwRDcwQ0M0NTRFRDE3MTRGMTkxNEU0RTc0QjI2OURBQkI3QTc5QUVBNzA3RDM1OURGNkQyQTI3RTI0M0U5OTUyQjhGNUY0OENCMAorOTA4OUNDMUIKK0NDQjFCNzA2MTFGNkJERTBDNTA1MTg3OUM5QzMKK0M4MDYxODM3N0I4M0FCMzU4RkY2RDdBODkwRTI2MjU0RkUyMTg3N0Y2RUFFNUQ1OTM5NEM2RUUxMzExNURDOTgyMjgxNzZDRjlDN0JBQUI3RTFBMjlCREZCODNFMUQxN0Q0Qzc1MDBDQzM0RjhGQTRGNEQ0NDIxOEQwNDM4MDc3N0YzNjYyQUM0OTI0QjE3MkNFQTQzMjI3OTQxMzE4MjU2QUI1MEEyNURCQTY1OUZENERBMjYwQjk3MzU1MzJDREZEMkFFQ0M4Mjc3NTZFRjQwNkFFQzMxMEI1NDQKKzAxMjMwODg0Cis2QzA0MTJCQjg3NENCNDFDNzUyQkEzMTBBRgorRkE1NzM1NUFBNzIzMzVDMkFEMkQ5RkE2RjIxQjc3NEZEQUUxNEQ5MzE3Q0ZGNEY3N0VENUUxNjhCQjcxODMzNjFEREFDQjk1RjE4ODZDRThBNDc4OUIwOTBGQkJGNkZENUE5RERBQTYxMUZCN0U5MURGODQzQzY4NkM3MjhBNEY1RUUyNTJCNTk3NzJEOTZGMTkzRjA2NjJFQjVCMzE1NUE0M0NBODZGRTNCOTZCRkRBMQorMDRERDM2M0QKKzBENjRGNTAxRTBFOEU4RUJCMzBCRjRBREFECis4NkVGNUJFRTE3NzY5MzAzQjE2MzQ2QTkwNkFCRTUyMDEyQ0JGRDdFRTNCOTMyNTRDNEI3NTdDRjlDOTI4QkZGRjU0NjJDOThDOTVBMjFGNTU4OERBM0MwQzA4MEVGMDQ5OTBFRENBNTZGNTU5MjYyOUQ4MzU0OTU2MjIwNENERDQ5QjgwMTMyQUYzODQyMkQ4MzE1MTdDNDQxRDNBRkQ3QzAyNDczRjU2QTQwQjRDQzA2MTI4RDc1CisyMjQ4NUE1NAorNEMzQUY5ODNEMTA4OTNEMTk3NUNDNzdDNUQ3RAorNjZERkU0MzE1OUM1NDEzOUMzNTI5ODIyQjkyMjAyM0NENUY2MjdFQzZDM0JFNzRGNkFCRTVFQzIzREFCMEVEMjVDRDQzQ0VGQ0E1NEQ1RTY3RkU5NDRBNjM1QTQ3Nzg3MjhCRUYxNjczMEVFNjgyMDcwQUE3QkQ2MUM2MTgwOUE3MEIyMjZFOTZDNzY1MzU1RDBFNDNEMTVGQkU3QzUyNjhFMTM2RjhEQTVFOThCODQ4RkIyNjZBQ0VBOTkzRTVFNjM0N0FGNDBEQjRFMUUxNTE3M0U2OTY0RTYyMEU3QTZFNEMxODNFQzAzQ0UzNTY2NTNBRDk2QTkwNTgxCis4MDhECiszRTQwMkNENTc3OEJFRjgzMTVCNjE1QjM0NUM4MUU2QjE4NzRCMUJCMUMxNzc1MTVFNjc1NzIwQjAyNTU4MkUwNTRDQjcwM0Q0M0U1QURERDk2RTMyRkI5RkJBRjk3Cis3RTI4RTJERgorN0I1RTUwMjBCN0RBQ0YxRkY5QTM4MzQ3REQxMworMzc2ODExMjYxNDhERjhFMENFNTJEOUVBNTc2MDhDRTkzREQ2OUExMjcyMDEwOEY0NTkzNUUzMkU1QTMzQTQ5MjNDODY0MzA5MUEyMUU1NjkwMTc3MjE5QUYwREI1MTU1Qjk3QTFENzgwMzJGMTdDRjkzODcxNEE3REU0OTNFN0ExNDkzMTgyQkE1RkY0OEY2NDQ3NTZDQjNDQjhFMjAwN0E4QTMwRjg3NTMxRDcxNDc2MzcyQTM5MkVCOENCMERBMkY3MjdCRTI4NUJBMDU4Q0M2MjFCOEI4QUEKK0FENTE3OTIyCitDRUJEOEI4NDBCOEI3ODEzODcyREE0NzlFNAorMjc5NDY1QTY2NEU2MzNBRTE0NTJCQ0U3ODQ1RUVEOUZBMDVEM0YwRThCMTdFMkI0NDhCMTlGRjVCOUMyNkY1MUE2NDMyM0U5ODVGMzVDMUYwM0QzODQ4RDk5QjJBNzA2MUU5ODJBOUMwMjcxMDU2QUU0RkUwNzYwQTcyMjkzODUyRkQ0RkFBODkyRTM4NjE4NUM5RjFBQjk5NzBBMEUwOAorRkJCNTIwMjAKK0JGNEJDMzNBNzdFNzAyMTE0Qjc3QTUzNjJBCisyQThBQTNDQUNEQTFGRjFFODExQjU1OEMyRkJBQ0RBOEY5RjE3QTkyOTkyQTlGOEVGOTI4M0Y1RDA4MjE4RUM4QkYwQjM4NDY1Njc5NjRBOEQyRDJBM0JDMjI5NDlCMzM5QTBBRjkwNTAzOTAyODUyOTczQ0U1NzQ2RkY4Mzc5OEI2REZFRTMyMjAxNDZBQUY4OTA1NDZDNTg3MUMxMDA2Qjk1NDc5OTkyNDdERjc4MUEwOUNGRDJDRDc3RDQwMjRCNjg2MEYKK0NCQjc4NTQxCis4MDU5QTc4Q0NGMTFGNjY1Njk5RkFBRDVEMzI0CitCQ0M2Rjc5MEZCMURCMThDOTA0NDQ5NENBRUE4QjM4M0M5RTJEMjJDQjU3OEFBRUQxMjAwMzAyRURGOTNERjM1MEE0NkRFMzdCRUMyQ0U2QjVBMUEyMjBFNUYxNEY5OTU3RjRCMkI4OThDQ0E2NjZBNDcyQURBRjk3ODE5MEZBREZFNjY5NkY5QUY0QzczRDk1MUZEMjY3QjUwRTcyMEE0NTBGQzdFRDgyRTAzNzBEM0YyNUY0NzdGQzQ4MjhDNkE1RTVBRjI1MzYyOERGOEIxQzk5Q0YwRTQ2NDlFRDc0MzhGNkUzNkFBNUZDMUE3NzBEQzY4OEQxQzkwQjAKKzdCNjEKKzY4RjJEOTgzMEVFM0FEMkVGQzNGQTc0QkY1QTQxQUI1MENFMzhFRkMyRDA4MzJFRUVENDJCNjc5M0JDRjY3OEFEQUI4MTMKKzQ1NjM4RjAyCitGQzdEQTcxMkFGRDk3NTBBMzU5OEE4QTM3QgorRjFGOUM1QzBFMTBERTlDQ0MzRTI1MkVGQTExQzJEMUU4Mzk1MkE1RTE0RjA3Q0JDNjk1QkZCMzdDNEY2RDNBQUExMjQyRkM0NDJBNUM3NDkxMzE1RTNGODU0RkZEMzk0MDREREY0OTQ5N0Q5Cis5OTVEODE5MQorOTMxNzQyNDYwN0FENDQyMzA4NjYxOERDOUI0MgorRTMyNTVEOUZDRkFFOTg1RERBN0U3RjdDRDgxRkVBQTdGQkIxNUU2RkNCNzRCMDJDODQyNEJDNTNCRTFBNEI1NDgyREVFNjVBN0E0NDM2QUJCMEM4NjI2MDZCQ0FCNUE0QTNENkYxMURCMjg3NkM0OUY1RDY4RTNGNzFDQUZERTM5QUU1REYzMkE1ODQ1Njk3NTE4RERFMzgwODQ2MkE0MDhENjc1MTU4MTBGRkNCRTA0RjVFRDU4NEFBMTQ3MUJBQTM2QUZCQkU4ODU4OUExRTBBQUI0MjUyNDg5QTYwRDdCREQ3ODE1QzJDMDVDRDVEQkM4Q0M3ODVGNDgzCis3REJDCitBNDM1M0JBNUI3MEY5QkY1QjBFNjFBM0VFODJCRTE1NzI4OUJDOENFM0JBRTU0QkNCRjJEQUFERTgxMjRBNQorQTNBMUQxOTQKK0QyMDMwMzI4QUMxRjZGMjREODUzODdFQzE5N0YKKzA3QzREMTkxRTE0MTBGNkVBM0QzOTRDOEEyOUE2NkJBODNCQkYwQkZCRTUyRjJENjUyMTJENDU3ODJBQ0UyMURGREJFRjJEOEZCNjY3OTZERUUxMzU4OUJFMzI3NDk0MDI3NTYwQzUyNjdDMkYzRTVFMURDRkQ2RTc4NEJENkY4MUI3RDJBNTEwMDhFNzc0MTdENTFDNTU5RTdCRDI3MjIzQkUxODdDMkIwNjM3NjQyMjc0RjYxOEY3RUU5QzE0MjA5QzZGNTU1NjFDQkQ0RThBN0Q0NUQ2RgorOUY1NEFFMkYKKzREQUM0MTBEMEY4NDMzMEYwNEE3RUUxODY1Cis2QUFDM0Q3MzE4RjcwMkQzNTdEOUM2MTk0Q0FERDcxM0IyNTdFNTc1Q0ZCQ0Y3Q0YwNzkwQTg2RTEzQzA2NzMwODQ0RjYyNDI1N0VBNzEwQjk1NjgzOUEwMzZFNEUzRDNGQUM5ODkwNkQ3MUJGQTBDMTVFQUU5QkIzOEQzOURBQTNCNDU0MDFDNjI2NQorRDQyRDE4REIKK0FGMTRCMENBMUM1QzFCMENDQ0MzMzZBNkU0QUIKKzU2N0U0MUZFMzFBNUZDNjY4MTU1OTM0QUZCQkFBNEE0MkZGQjQwNjY1QUVDOEQxRkY1OEI4NEIxMEQ2MDU2NEYwRDVGRUJENUE2RjkxNjQ3RjVFMjYzQUFGMjZDMkVFNzUxOUE4NTgyMUU0REMyMkM2ODMyQUEyOEI3RkI4MzA3QTMyRTA2NTI1QzMxQjlGRUI3NUJDNDYwOUU1RjVDOTZDN0M4MEJGMkNBODUzQkU3NUEzMzI2QjM5RjAwNEMwRUM2Qjc1OTRBNDI2MTkzMUMxODEwQTNEOTNDMUFFRkYyQkJBNTFFM0NDNzkwQzUKK0RBNTM0OUEzCitFN0IxRkRBOUVEQ0MyNzU3MkQ4RjNDRDY2QgorNkI2MjQ4NEQ3MjhERTJENENFQ0U1QjY0QTc2NDc0NUYzODk0REFENzg5QzU3Nzc5OTQ3RDQ5Qjk1MjdERkMyMUMxMUJERERGRjkwOUIxQjM1MEQ1MkQ1MTE2NTZGNEZGQjA4NDhDRkZBMUNBODZFRDFDMTQ2NzFFODY0MDA3ODE3Qjc2ODhFOTY4NUEzOUEwMjc4MkM5QUY2OEVEMzI0QUE4QjI0NTVGRTE1OUI5CiswNjMyOEIxMAorNUY3NzMxRTMyQjA2RjJDNzVFMDRFNzdGQzVGNAorODBDOEYzMDMyQjQxNTlGRDNGQjQwRUFBN0I1MTMzRTZGOUMzRTUwMUI2NTFDODg3NEY5NTJFMDY1QkY5Q0ExNDkzNjdBQkI1RDIyQzhCMDhFMTM0NzFEQkYxOERBQzBCM0VFOTQyQzYwRUFCMjUzNkZGOUY4QTE3QzI2RjQwOTY0NjdCMUE3MDgzMjI3OTc3NDVEMjExMzEwMEFFNEI2NEQyNzEwNThGMjM4MDM2NEU0OTIyQTI0QzBBQUU4RTg4MTFGNkIyOUVCQkVCQTQzREM4RTM1NjFCMDE2QTNBQjVERDQ0REYxNTczREMxRjg1RkJENDI1OEEKK0I1MTY4NjgwCisyRTY4RkIxMTlCQ0REQUM2RERBQkZEREFFNAorNDlGRTY4MThGODU5NkQxNTVDMkNDQzQ2N0FCMzcyRTk2NjZCMUFGNEVEN0Q4QjQyRUUyOEQ1QjQ5NDQ1QTRGMDAxRDZFQTIyQkNCQzk5RTAwNkIxMDEzMDJGMDFBMUZDMjNGQUFEQjE2M0Y2Njc5QzE4MDFEOEUxODQxNDM5N0VFMjZGQjVGMzM4Cis3QzIzNEQyMworMTQzODgwRjc5MUJDREI3OTkxMjcwOENCNUEKKzU1RjRFRDkxNjhFMERENzdBOTVBMzAwNzQyQjY3NjhGOTFENUJFMEI4MjdDQTkyM0ExNjk5NjAxM0QwOERCQzY0ODNGQzVGMUI2RjY4NjIzQTc0MzZGRTVCQzIyNEJCM0UxNzQwMTYxN0YzQzkzQzgxRTI0MEUzQUQ2QjU3RTA2NTBFM0NEQkIyQTBGMkUyNkVENzg3RDRBNzBBRUM1OERBQTI4QzRGMTcwOEEzNTQzQzZBMjY2MEVCQ0EwODQ3OUQ2QzEKK0IyRTFGREZCCitBRDFCNDBDMTY2MjUzQkI4QzY1NUJFNUQxRgorOTFGRkJBNEE1RDRENzJGRUI4NzU3MUE5NEExMzg1REMyMkExQjE2OEIxMDU2ODYyRjNCRkY2Qjk0OUEzMUIyQTY1MUU3OUYxNUVCMkIzMUFFODYxRkVCNTY1NDk4MEM4NkVCMEExNjJFOURDNkJCOTkwRDQ0Q0FCMEM1OENBREE2NUVFNjRCODlGQTkwOTFGQkJFMThBQTU3MUM5QTJBQUFEQzE5NUZCOEQ4RjdDMDY4RQorOUJBMzRENDUKK0ZEOTkyMzg2MDc1RUVFNzhGRjIzRTAzNUQ0NDYKKzhBRTVDNzMwNEZEMDM3MzUzOEU1MjczOUYwRUFBRkEyQzYzODQxOUNERTFFRDgxQzI3RDYyMjJEQUM1REJBRDU2RDNDNDBBQTMxNTRDQUY3M0Y1NDU4NzdENUFGRkU3MjRCNDY2OTYyMjdEN0Y5M0U3QUY5ODA4OEVBQUZGMjkwRTFFNzAxNDZDNjg1NDg1MkNEODc5OUU4N0QzRTE2QUUxOTdDREQ1N0EzMjM0RDdGMzhDREEyRTk4N0E5MTY4OTgyMkZEQTEwNEU5MjIzQjFERDdCMjVBRjE0NUZFODhGNURGOUE3RDNDOEUzNjNGRDQ0QzVDQThDNjI1NworMERBRgorQ0JCNjg3QzE2RTMxQkZFMDgzM0EzQkJGRTk2RgorMDE2NEJGODAKKzkwODAyRkQwREYyRUZBNTNDQzE5M0MxNDRFQzAKK0JGQTg1Mjk3RjczOUVEOEQ1QjMyMzBDODZDMzUwMkNDRkM0MjE1MkNBMzYxMkExRDg3Mjg4MjM4MjYxMkJENkJGMjA1QTY5RUYwMzY0RjA2QTgwNTdCQUM1QkNGMzFBNkI4NDYwOTQ0NEZCNjlGODczNTY4MDREOTE3MUI3NzAzMDI4OTQxRjAxQjVBQTZDQUVGOTFEOEIxQzAxMkIwQTQ2ODQwQ0RCQUNGNEZDRTY1QkMxM0M0N0ZCODAxOERCNDA1QTBGNzA3RUUyQjU1MTg0RjdCNjQxMTJDRUYzRjk2NTFDNDE1RThDRDVGNzFERDEyMDcwNzcwMDBDQgorMzQ5QgorRjFDNkYzRDU5MTk5QzJFMEYwNjRFNDYyQUZFRDkyQjRGMEZCQzk5QzI2QUVGQjBCRDkKK0NFQkU1N0Y2CiswODczMUNEMzYzREFEQTc5NTIyOTVCRDVBQTFBCis1N0RDMEU5NTE0MjY0M0EzQjI2MEMxOUQ1Rjc4M0MzOUI4RTBBQ0FFRUNGQTEyQjc5Q0VBQjUwM0Y3MTcwRjlGNzgxQ0JBOEZBN0U1QUQ4QjRFMUE5MTg2NDIxQzRGQkZBMjkwQUUxMjlCOUZGODg3RDQ1MDEwRkVFOTA5NTgwMzE0QTU3M0IwRjJCRkIxREY0Q0IzQTA0RUZCMjY0REZBOUE4MjJFQUE4NTFCRUYzREE1MUYzMkVFQkU1RjBGMzQ4RjA4REE2NkIzNTE0MTIzN0I2MEZDQUQ4OEYyODI1ODdCN0Y2MzE2M0U0MzhCQzVCNEFFNkE2MDhGQjAKKzk3ODYKKzE4RjZDMUU1CiszNDhCNzA2NjAwMkU4QTdGOEY3NDIyODZCMworNjIwREM5NEFDRDlCQTM4Q0QwOEEwNzlBNEU2M0Q5REJFMTY1MDE1ODc0NjJFRDIxQUFBNjY4MTQxQkUzNkQyMkRCQzIwRkM5RURCRDNGQkFGQjM1MkNGNzRFNkYwMjc1NzVEMzBENEE0ODZFQTZGMUYwRkU2OTM1RDE3RUM4Cis4MTBFQTlCQworMjFENDZCMDAyQzE3NDdENTQ4MTc3RUEwRUIKK0MxRUFERjk2NzAwRDJERTI1NDZERDA4NDk3NEY4MTFFQTM0NzA4QjQ3ODlCCitFNzhDNjlDQworNDZGMkNGNDE2OUU5NjI1MjJFMDNFMDJGOUI5QgorODc3NDIzN0U3MUM5MUE4RgorRUYyRkJEMTkKKzM4NEEzMkQxRTE4RkM3NzI5MTdEQTRFNzM5RDdFN0Q2MEM1MjZBRUM3RDNFOURFMDQ5M0IxOUM0Nzc3MTlBNjQ5NUY0Cis3MTlGMkRCNDQxRDU3OEM2NjczMjE3MDlBQzYzNzczRTYwN0E0M0UzOURCQTJDODUwMjQwQjNBMTJENjVEQjVFMDc1RThCMEQ4MDlCCitGREI5RkZDMzAxQzlCMDE2N0U1MTUyMDdCRDJENDAyNzE1NTUxODQwRkFGMTk5NUUyRUUzMjcKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDUgcHV0CitkdXAgMyAvQzAwNDcgcHV0CitkdXAgNCAvQzAwNTggcHV0CitkdXAgNSAvQzAwNjUgcHV0CitkdXAgNiAvQzAwNjggcHV0CitkdXAgNyAvQzAwNjkgcHV0CitkdXAgOCAvQzAwNzAgcHV0CitkdXAgOSAvQzAwNzMgcHV0CitkdXAgMTAgL0MwMDc3IHB1dAorZHVwIDExIC9DMDA3OCBwdXQKK2R1cCAxMiAvQzAwNzkgcHV0CitkdXAgMTMgL0MwMDgwIHB1dAorZHVwIDE0IC9DMDA4MyBwdXQKK2R1cCAxNSAvQzAwODQgcHV0CitkdXAgMTYgL0MwMDg1IHB1dAorZHVwIDE3IC9DMDA5NyBwdXQKK2R1cCAxOCAvQzAwOTkgcHV0CitkdXAgMTkgL0MwMTAxIHB1dAorZHVwIDIwIC9DMDEwMiBwdXQKK2R1cCAyMSAvQzAxMDMgcHV0CitkdXAgMjIgL0MwMTA0IHB1dAorZHVwIDIzIC9DMDEwNSBwdXQKK2R1cCAyNCAvQzAxMDcgcHV0CitkdXAgMjUgL0MwMTA4IHB1dAorZHVwIDI2IC9DMDEwOSBwdXQKK2R1cCAyNyAvQzAxMTAgcHV0CitkdXAgMjggL0MwMTExIHB1dAorZHVwIDI5IC9DMDExMiBwdXQKK2R1cCAzMCAvQzAxMTQgcHV0CitkdXAgMzEgL0MwMTE1IHB1dAorZHVwIDMyIC9DMDExNiBwdXQKK2R1cCAzMyAvQzAxMTkgcHV0CitkdXAgMzQgL0MwMTIwIHB1dAorZHVwIDM1IC9DMDEyMSBwdXQKK2R1cCAzNiAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE4IC0yMDkgOTE5IDY5NF0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI3NEE0QTk4NzZCQzQ2NDJERTVERUNGOTQzQzA2NjMwQkExMAorNDJERUM4NTE0QUNEM0YwRTU3NjI3QUJFCis3NTYzOTM2OUFBQkU1MkUyNTcKKzNFMUY5N0VECis4REUyRjIzNzdDNDMzQzZDOEQ4QTg1MUUxQgorMjEwQzNBQUJBNjBEMEVFRDk3QTgwOTc1QkY2NURBRERGQjhGNEEyQTIzODc1QQorQUEyMjA5QTAKKzM4NTVDOTk3MUNFRTM0MzU0NERERUZCNjA5CisyQTU0RDIxMzgwQzY5NTVBREY4M0YyMzE4MERDNzI2Qzk0ODFFQjY1RTYyOTUzQjUyRUQ2CisyOTc0RDA0NAorQzE0QjI3RTM0NDk4OTk5MDFCRTNFRDNCMDYKKzBFQTZFRUE1MDQwMjRERTI1MENCRjFCMDA3QkU1RjlDMzhBRTY5OUE3MTNGRTM1Qjk5MkY4MDAxRThFRjEzRTJFRUZDN0M5Qjg1NDEwNTcxNUVCNzhFNjZCODAyM0JFMThFQThGNEIyQjdCQQorRUE5ODUxQjMKKzM3QjIyNzRDNUNGQkUyMDIxMjA2QzVCODMwNTEKK0JDNDYwNzZGNzQwNjk2NTVDQ0I3Q0Y4MjQwQUI3Q0IzMUE2ODg3NDhGNDgyNzExRUY2MUM3MkQ1NDM2MjYxMDcxRkJBMzQ5NEVCNjM2MEExQkZBNzBDMUUxNjVBQUE4OTFGRDgyOTM5NjhGNEM5RTc2QzRCMzUyMjVGNjA1QTk4RUI0QzUzRUQxRURENUZDQjhBRTY4OEZCODNCQjE1NEE1QUI1Q0ZGRkI4NTI5QUNDQzM5QjRDMDk4MzBEQ0JBODA1QTNGMkJGMTFDNDQ2NTY4NTJBMEMKKzFBMTQwODNGCis1Q0Y0Njk1MzU4MzY0QzhEODJDRkVGRDFBRAorMEU1NkVFQjNBNjUyNTlEQkZGMzFCRUI4OUJBRDkwOUFGRjFEMzM5NDY0MDcwMkE0REZBNjBDN0IzMzRDQjYxNkQ4NzIyQkU5MTlEQ0MzNTlDRUUzRjM3RUIxNzkzMzYwQzdCNUY1MTQ5RTFENzkyMDk3NjUzMTBEQkIzRkEwRUNDMkZCMzA1RDE4RkZDODIxRjkxQzAyMDI3QTJFQTFDRDcwQkNBRkQxOTAzOEFECitBRDJBMkFBMworQzRGMkZCOThEMjdDRkFGNzdFNkQ2RjdBNzREOQorODVCRUM1MzY0MkQ5RTk3NENFQzBBN0Q5Mzc0M0UwQ0QwN0Q5NjYyMDVENEYzQUIzODdGRUZCNjgzNzlFNEVBRTkzQTAzMDBERDcwMUE1RjE2MkQ3NzlENEUyQzNBNDJBNDYxMkVFOTcwMEM3OUJBNjQxQTM5MkEzRDczNTE4OEQzQ0NFQzY0NUFBMjlBODRCQjg0NDU5NzQ0QTBERkI1MjNCQzI0NEM0QjlBRTk1MDU1NUM5OUI0RDc5NTE0QkI5QUFBOTQzQUFBRDcyQkQ2MjRDRTZENUQxNzk4NworRDVCODRDOUUKK0MzNjUwOEQ5MENBQjBFN0Y4MDU1M0NFNDI1QzEKKzUwMkRDM0UxRTE3OTJFNjQ2MzU5MkM1ODVGMjg2MTFCQkY1OEE2ODQ5MUIyQzg4NEU3MTA5OTY1QTVCNzA2MkZCMDgwQTcxQTQ0Qzg5MzQ0MDYyMkVGQkNERDYzNDU0RjJDRjI5MjIxRTNFRkQxNTUyODg1NzdDQkI1QjUxMjI1MjEyNjlGMERCMjI5NEYwREY4N0U2REYzQUVDMkNCRkM1NEUzN0MyODIxOTMyQjcwNkUxREExNTMyNTM1NTFBNTVDQzA5RTRBCis4OUI4NzlDRQorNTY4RjVEQTk4RTU1MzU5MTM4QjIyMzBGQjYKKzg5RjBEQjVFOEJCOTY2MDMyOTU4MEU2NjgwRkU0MjJCMzkxRkYwQ0M4MjgwQjFCRkVFQ0NDODZBMjM5N0U3MUY3MDlDQkYyMzQxM0VBRDQyQ0QyNDcyOEZFMDkyODU3MkU4QzE3NkE0NzdGNUY0QUNFMkE0Mjk5ODcwRjYKK0MzMUQyNEFFCitCMkM5MUIwQTJBNUM4QTZFMUIxRkExM0U3MDdFCis4OENCQzVCMjYwMTQ2RDM5MDJFODFCNzFFQ0Y3OTM5NzJERTM0Q0M2RDM2MjdEOUFDMkFEREU2NzlERTc2Njg3MDYyM0RFMTI4ODQxOTEyMEU5RTFBQzUzMjgzNTAzQTAxRkM0Qjk3MTA3QjkwQzZDMkQyMjc5QUMzRTExMDg5MEZBMzJBRTczQzFBQTA0QzFFRTM3MEM4QjRERTBGQTM4QUU4NkZBRjFENDQ0QjIwQzc4M0Q4MkMzODJDRkZFNUQzNjQ2MjVEMkY2OEI0RjBBRURBNjFENTYxMworRTdGQzMwRjUKKzlGRDhDMjExOUQ3MkZCRTY5MzZDQkQ1ODNECitBODI1OUUxMTkxRThBNjYzMjMzQjA4REQ0RDY2REJFNzQzOTIyOTk3MkExOURENUVDMjA2QTM0MkI2REIwMUYzREI3NEI0QjZCOTYwREE2NEU4NkZEQjVFQzY5ODdFQzVBRjRGNUYxQzNCQUNCQUJFRUZBMjAxNzdDOUJFNEJGMUFBMTM4RDI5NjQ4RTAxNzM1NUYwOUVDMjEwNkM3QzE3MDdCODVENkNGMjNCQUU0ODcyQjIzRjNGMUIwQTlBCisxMzc4QkYzRgorODQ4NEUwMzkxRTBBNDdBMEY1Q0FFQjhBMjFCMQorRDk1MjI0QjczNEI1RTdBNkYwQzRCNjJBM0JGQTM3RkM5NUM0N0Y0N0Q4NDU0ODQwQTM3MTU3RkRGMkZBN0NFNzRCNTQyOUY2OTgwRkM0QkZDQjRCREE0NTQ5MEIwRDE4MzNGOUFCMzQ4MkVFQzIxRTFDMUMyMDREQ0Q2MjM2MjgxOTlEOEUwRjMwQ0VFN0U4Mjg3RDA5MjkwMzc0Mzg3M0RCOTBCNEZCOTlGNjU4RUQ3QUJDNkQzNDMzNkU0RUVFRDg0OENCQkU2QUI0Mjk2RDI1CitBOEZBNDA0QworMDYwNDJCQ0NDRkVDNkVEN0YxMzdCNjdDMTYxOQorNURFOUQ1OUFBNkZFOTU0NEM5RTcyN0JBMDhDRjdGNDUxMjA3OEY5NzkxNjE1MDYyNzIxRjdDNzNBQzMzMTA1NEYzMzcwMUMzNTNFOTg2MkVGOEEzN0IxRkQ4ODhDNzlGQkYxQUUxRjIxNUYyRUJBMTlDNUM3Qjc2MzgxNkU0NjBFRTlCQ0RFRkVCMzNGN0Y3NzFENkE1OTlGQkQwNzNCODQ1RjIxOTlFQ0VGQ0RFMDc0OUQ5REVCNzVBRDAwMTY2OUQ5MDBDMzUKK0YxODQ1OThGCis5MTA0N0M1NUMzQjI5RjFGODU1NkM5MzA1OEI5CitDOTAzOTU5ODZCQzU3NzZERDAzNUUzRTJBRkZGOEY0MzY3Qjk2NDYyQTBFN0VBMjYyRDk2MTQ3NDlDRjg1QzgxQTZGNUVCNTk4NkUzQTJEMTA4RDhEQ0Q3MjdDQjZGMDIxNjFFQjgxMzc4RTMwNERFQUM0RTRERDZBNkM4MDU1Mjk0QzEyQThEMDExRTNDQjE1OEI3NENCNzZGNTI1RkYwNkVCNkU2Rjg2QTY4MEIzNzNGODY4OEUwQTdFOTdBM0UzRkY0Qzc1NDVGNjAyQTYxODM5OTA3RTVDNjZFMDE1Q0FDQTQ2QUE1ODc1QzgxOTBFRDhEQUI0RjdFRUMKK0ZENTIKKzk2Rjc4RDAyCitGQTdGN0JBRDM2NDlDQzY5NzI1MjU2REM5QworODgyNjRCQTk1RTZEMENDQTE2QkIwQTMxREE2N0YyNDI5NzYzNzU2RDAzQzI5M0M5RjE4OUNFOTE2RTcwMEMwMjFERTIwMzg0OTg2QTY1MzM2RTY0NENDNkUwODczMTA5RkIwQTU4OTE2NDc1MTIyRDQ2QTA2OEY5MjgyNzJCNjEwRjNDQ0ZEMTU5RDVCODFERjkKKzdFOTFCMEE5CiswMjQxNjg5RTlGQjZFRTdFOEVGQzgzNzFEM0M0CitGRUE1QUJBREZBQTg0MzBCMDVDQzY3NURFMTM1NDYxNUMyQkI1REE0QTJDMkQ3RkRFMjNDNTE2OTIxMUM5OURCRjFCMkFBMzdFQTY3MjU2QTQ2RjMzMzdGNjRBMURGNzQyMzIxMTkwOUQyNjkzRTIwQjUwRDFBM0E4MTc1QzIzQzk4NEMwRTZFNTU2NURDRUZGNTBFQzk3QTI3MkU1NjVGM0U1NjUyRTYwOUEwRTFENDJBMTczMDJBNjE0QTMxMDQ4MEFEQTI3MzUwOUYwQgorREY2Q0YwMjkKK0NDMEY1MDE0RjM1MzE5Njg4ODhGM0VFMjFEOUIKK0QyNEI0OEU0NzNGMzZCNThFNTdFQTBFREJGNkYwMTBBREUxMjA0RjYzMTY0OUI5QjI5QTlCNjc1QUY1NjlCRDNBNjA2MjQ5MjExQzJGNDBBMTEyNDcxRTZDNjhDQjM3NkVFRkQ2M0FCMzQ1OEUyNjBFQ0JCM0EwMUYzN0YyQkQxRkQwRDVGODA5M0IzNUU5Njc5NDk4NjBGRkNCRTI5NUE1RDI3Nzk5M0FCNDdDOEQ4NDNGREQ5QjA4MEVGQTBBOTUzOUI4QUY1RUJDOEFDMTAyOTczRjRDMDJFNTI1NjM5NDRBMEE5QjMzNURFNjBEMEJDQ0I1MTFBQ0NDRgorREJCRgorOEExM0I1QTIKKzI1MUNCRUQ4CitBMkVEMkMwNjgxMTYzNUEyREY5NjRFMEFERQorMzUyRTVDN0UyMTBEQzJERTRFRDU0Njg4MDg5ODcwQzQzNUMwM0U2MUJCMkZCMDAyRDM5QjExN0RFOTRGNzNEN0EwNTdCNEI2NTQ3MDJDRDU0MDk5QTI0MTc3NjE1NENDNkQyRTg1OTU5QkNCMjc4ODk0RDBCNTk2NTI5RDY4MjBEMTVGNTczQjNBQjI1QzUzOEEzOUE5QTQyMzNFNDkyNEY3NUEKK0Y0RjU4RjM0CisyMzJEQUVFRkVFRkI5QkI1OTgzMDZCNDRBNworQkREMzVGNjNERUIxQjEyMDk5REVCQjlGREYwOEFBOTU0QTZGRTM0RUVDMjNEREY0NTIzQUM2MjQyQTg1RDNFQTM4NzJBN0E5MjNGRjhGN0Y5MzE1NjU1RUFGMzExQ0E0ODQ3RUNGNERBQTBBQjQ2QjA1RjA3Q0IyNDcwOEM4OTM4MjEzQ0MyRTcxRUYxMjE4QzY5NzlCNUNCQjRFQ0ZDRTc0QjFDRjQ3NDg2NEVFNDA1RDc1QTYyRQorQTY3MjQyNTgKKzIyMDYyNzcwOEJFMDY2MjkxNENBNDRBNzM5CisyRDhFNzkxRDc0QkYyMDNDODE4QzI4RUQ1RTcwQjREOTg5RTI0MjBFRjlFQzJDMzdGODUwRkVGQjI3N0IzRDhGQTNGNTRGMjE0QURCOUU3MDhBREY5M0U4QTY3OEQ3RjQxM0UzMEI1QjFGNjI1MDZCRUZCRDNCQTU3MjVFNzUyQkFBQ0E1NEZEMzkyMkNGM0Y3RDIwN0I2OTM1QjdCQ0YyOTFDQjc0MzIyREE1OUU5NjY3MDU5RUZGOTcKKzlERjUzMTcxCiszODQ3M0NFOTg4OUM1QjI2QjdCNEM1RTBBMTI5Cis1REZBNzVDQzg3MkRDNkRGNDVDOTYwMzY5MzdEM0NFMkI5QTdEMjVDQjQ3MDZGQkZCMjU3MUI5NDczNjQ5NjBEODBDNUZDRjQxNzU5MDU3MEM2MEEwNEIyMDVEM0QzNDFGQTJFQzc5NUUwODJCNDYxRTk4OTc2MDAxRjlGMTk2Q0RDMjE1NTM1MDkyRDFGQjBGODFEQTgwMjlDQjFEMTA5QTExMTBBQkJEOTcwREU5RUM3NjlDODI3OUNGRUMwRUM0NTlEMkRGNTA0MDVGNUQwMUY3NzVDNDFGMTlDODBDNkFFQjA0RkRFODQ1RjIzMDk4RUU0QzIzNURGNDAKKzlCMTYKKzY0Qjg5REYzQjEzRTBENUM0OTM1QTVGMDgwNDg0NjIwN0ZCNDkzQzJGN0M2NEQ3OUVCMkFGOEI0QkFCOTU5RTIwNDIwNTcxOUJECitGQTY2RDA0QgorOTBFOTQwODcxODdENjc5NERCQjk2MkI5RjExMQorRTY2M0U3NTMyMjZDQTgyMjFDMUE5NjlGOTMzNjExOThGODI2QzYxN0UxMzg1N0U5NkQ3M0Q3MTYzQUQ5RkEzRTI1MUEwRTJCMDExRDc1RDVEMkU1QjY2MzA4Njk2N0ZDOUMyQTE3QzVENDdFODAyNzM0Q0I1Q0FBNDRBM0Y0RUFBNDlERDY1NERGOTc0MkI2Qzg3NzBGM0Q5M0VGNjUyQTVBQkMwM0M5MUFENzY4OURCMTEwOThERjY2M0M5NDlDOEREOTg1RDMxNDA3NUUzOAorNUVFOEYwRjMKKzRDMUI4QUYxNjk2QjhDREMzMkY4ODBBNkIyCisxREUzOENGRjZGNTYxMUFDRTEwOTMxMTAwNjNENkE3Mzc3RTE1MTcxMUI0OEIwNEM0NTY3MjVFM0VEQjAxNUFCNTdBNDI1NThEODg0MkZGNjI1NEY5NjlCRTEyQzM2RUJEODM4MDE1MjE1MTA0OTk5OUNGOUFDQTYwQTQ5Qjk0OTEwRDlEN0IwMjQwMUI4MzdFNzZFMjk0QUM1MUEKK0E2NjEzQURECitDMUNEOUU1OUJCNUFFMUM3MjIzNzdGMDFCMjgzCis5NzFFODE4OTZEREU4NDlEREFERDA1OTE4NDk0NUExNDEzRjAwQzk5QkU2QUJCOEU3N0QwNzJCQURCNEFBNEI3QTZDMzZEOTRCQjRBMTc4RkM4NjE2QzI3NEYyNjEwQTBGQTM1M0U1MzI0NkU5NDcxNjM2ODEyMUNCQkM2QTQ0QTg1QkQxQUZCQzY4ODM3OUI4NkZFN0E2OEExNDMyQzg1REU3NTY5Qzg0MjlDMUQ0OTVFQzY0RUYzQzM3QUZBREZCNDRBRTUxNkRCODc1RDgxMzI1NjJEQjlDRkVBMEQyQ0Q5Njc2NjZGNzdGNzg3MDQ1RTYzMzI0QzY4NjgKKzA4OUIKKzU3MzAKKzM4NDBGQ0YwCitEQTYxMTkwMkM0QjFEQTEzRjE3Q0M3MUZDQgorNTA4MUFGM0RGQzAxQzM0NENBMDA4N0IwMjdDMUI2MkE5MjdBRUZCRTQ2NUU1MzZDODU5MzFGNjY4MDg0OUUwMjVGQTQwNkVGQkFDM0U5NzI4RkI5MkZDMjY4NEJDQjVFMkZFNEM4MzYKK0NBOTIxQjQ0CiswMUZGQURCQTUwQThBQUZGODdGRDY1QUJDREFBCiszMDgyNThGQzcwQUYwNzlEODE3NDQ4ODcxOEVGQTU1N0FGNkJBQzM1MThCNjZDMDUyNUJEOEJERTY0RDZDQjE3Mzg2N0QyRThCNUZCMTQzNkU2QkMwM0ExMTgzMDI4MTYyRDA3NDAyQzdBNDFDRkUxNTYwNjc3REU0MDlBNTQ4NTNCOEJBMkZBNDJCRDlGQTA0QzE0NEJERTdEQkEzRDU1QjdGRUNBQ0QwRTQ5RjY0NEY1NzQ3RTNGOEZGMURGNkRBRkVDNTk2QjIyN0NDQzM3RkQ4QzcwODgyRjUzMTM5OERGMkYxREFFREQ1NDM5QTQxN0YwNkI5RTMwMkYKK0M3MjQKK0MxRTcyMkVGNzlCQUQyOTdCNzU0MkMzODM4NjYyNjRBM0JCNjIzNTYwOEI5RDRCOEIwRjBGRDM1CitCOTcyMjQ0NworNjQyRjNFMUZCMTU3NjE1QjcyNTk4NTY4NTczNQorRjBCMEE0N0JEODA4Mzk0RTY0OTRFOUYzQTA2RDU2QjNBM0RGQzlCREJDQzgyQUYwQkJGODdBNTJDODg2REMyNzhCNzQ5QkM3M0FCOUM4N0JDRjAyMDI2RjMxOTU2Njc4NkZBQzQwMkMzRTNCQjk5RUZCQUI2OUM4NTQyQ0I0OTI5MDlGQTY4M0U5NDgxRjFFQzk5QTdFOTREOEFFQkQ1QTdGNUY2OTcwNkRBNjM0M0JDNUJFNDZFODVEQzA5NTVDOUIwMjJDMzVBRkFDMTQKKzc1Nzk4RkJGCiswNjUwMjYyNDFCNDNDMzI4QzJEOTg5OUEzMQorMDdEQTQ4NjFBQzk5Qzc3NzRCODBBNEFDQkJGMzBBM0ZDRTAyQUVFODA1QjM5NkQ1QUI3RDJBNTZBQkYxQTgyNjA4NjdDMDY2MTQxRDI0RUM5NzhFOTRDQjcxNTVGNDIzOUI4MjMxOUJCQTExOUUzMjZBRDVCRjg2QTg4RDJDNzMzQzM3NUY3REU0NzAKK0Y1QjM0NEMwCitGMTlFOUQ1M0E5M0M4NEM4NkQwREVFQjQyNUQzCis3NjAyOTZFRUJEMkE2NzdDMkREMDFCRjUxREQ0MkFEOUI0N0QzODdBMjJBRUJCOEI5QkZDMkVFQTY5QkJCQzhFMjE2MTREMkVBQUQ5N0NDRjhCOEM1NkEzRTc5NEFBRjlDNEFBNTY5RUVBQTEwMTVEQUE1RDRBNjMwODkzOTM4N0NFQzIxNzZEOUVEMDE0NjFBQjE4QUMwRkRENzUxRkRCMzEwRDlFNjhFRjM2M0ZDREJDQzI1QTE4OEI5NEQ2NzQ5OUUzMkQ3N0NBREIwRUQxQjgwMEZCMjYyOTE4OURFOUE4CitCREZEM0U2RQorMTkzMjBFQzUzMkZBMDM3RTBCODE5MkYzNzQKKzYzREYxNUU3NTA4NTVCNUJGMDA4MEU2NEQ5RTIyOEFGMzNCOTM5M0UyRTY4QzE2QzE0Rjg5QjhBOTRGMzI2OEQ0QjA5NUVFRjkwN0UxN0UzQ0UwNTUxMTdGOUY0NDdDRDgyMTRCM0FEQzJCN0Q4Rjk4OTA5Nzk0QzJBQjY4NzVGQzQwQjYwQTUyMEUxNDFDNTIwNzVGQkMzNzFCMUE3QjQ1OTczNDgwNTQ4ODg0RkQzNTIKKzNFOTlCMjcwCitGQjc5RUFCMDVEMDZCOEY2NTE2MTA3NzUzM0VECis5OEEwNzAxODY2NjlENzJFMUZENjM3NTA4NUU5OUNBOTM4RjlGRDc0MjQxMEYwNDkzOTU0MEQ1MkQ1Q0NDQUE5RjQ2ODBGQTYzQkRDOUY1OUMzQTFEQUQyMjkxQUQ1MDk1MEYzNkFCNjgxQzBEQTI1OTkyMzlDMjQxOTExMEUyRkY4NURGQzZCNUQwRTA4NzAyRDNDQjZBMTUxQTVGRkEyNjFGN0U4NkRDREY3Mjc1NTM1NzJGRjU4M0NGNEUwQ0E5M0EyMUQxNzcwQUEzODI0QzlBMjg1Q0E0RDRBNTc0Q0QwMTlBODFGMUIwQUVGNTU4MQorRjcyMDI2OUYKK0U2MjU4QzkwOUE2NEI0MzlFRUY3RjU3QkM1Cis4NDMyQzEyRDE4NzNBNDI0MTMwQkZERTQzQzI0MDc5MEY0OTdCOERFRTRBOTcwRDJEQ0NDMDg5QTM4MUZGMkRCRjAwNjAxQThDRDdFREQ4NDkxRUQzNzdCODQ3NUVERkIxODUwOUNFRTcyN0I4ODk3RjE1NDQ2QkRFREMyMjQzMDNGMjVFRTI1CisxOTE5NjQxNworM0UwRTBGNkQ5NjQyNjE0NEMzOUE0NEVFRUM2NAorMzlEN0FEMDg2MEY5Q0Q2QzQ4OEIxRjMyQzUwRUQyOTYyQkQ3MjcxOTczNzBGQ0E5QzhCMEY4ODI3QkQ0MzVEQkE2NzIwQTVCNjUyRkEyRTMxRUVGNTAzNzU4ODM2MDY5QzM5REVENEUyRTcwMjlGOTk4QTZFNjBDQjFENEI2Q0U3RTFFMzY1NEIzQTVEMkQ3RjlCOTE1QTk0MDhERUM5RkY0RjgwQjUyQ0ZENEIxM0I5NEM3RDcxMDVFODNERDEyOTY2NTc2NzM3Q0Q2N0ZDNUFGNzhDNUVGMDIyOUU0MTkwQTMyNkIyRUI1NTUzOEE3MDRBNkEwNjBFNDE4Cis2M0M5CiszQkUxOTNCQzkwODdCREVGOUE1NDEyCiswQkE5MDY3NworRUE1NjU2NjZBNUVCMkZEMEE3MUY4NDMwRjdDNworNTYzRTMwNkIxRjVBNkZFNUY4NzlCOUYwQTlBMDc2QTQxODE1QjU1RjgyREQzNTg5NDkyNkIyRjA5MTM2NTZCQTMwMTQ5OTM1NEJDMTlDRDQwNjVCM0U4QjA4MDk3ODk0Q0MzMTI5REY0QTJDNEUyQzRFQjQ2M0JCNDU1M0M1QjM5OEE2RkE4MjhERjY5NjUzRDZDOUExOEZEMkJFN0NCOTk4RUUxMTcxMjFGOUQ3QjhFQjlGNEM4OUQ1MUFENkVFRjE4MDUzOTg4RjdGODZCRkREREZFRjNENEVEMERCRjU5QjM3RTNBNTVGREYwNzBEOTlFQzRGMEUyQjJCCis2NjA4Cis1OTlFNjZERTZBOTJFMzM3QjYxNjc3RThDMEJBQkI5NUU3MkQ3MEM0NDA3MQorRDNDOERBNkIKK0QzNDZCNEMxOUQ2NDU5NUQwQjg0NDg2MEE0NUYKK0Y0RjI4NjgzREIzQTE4MzY4NkU3M0IxRDI5RDQ1RUQ3M0FCMUZDM0Q3MEZBQjI5NDBGMzIyNjAyQjVGNkI2ODMzN0FFRDk3MTZFQkNDRkJBN0VFQTIwN0IyODFDMTM4RkRGMTNCOTU2Mjc2MkI2OUJGQ0M0MzVGNkYwOEVFN0IyOTBBRUZBQUI4MTcwNzBCRUNFQUQ5RjQ4Mjk2OTBFQTgxRDZGQzcxMTZBOTlCODZFMTE3ODZGNjM4N0JGM0VFMTA0NERDNjk1Q0REMkI0MkZDRTg0NDFBNjhENjFGMTE1MTE1QkM5RjhCMEU5Qzg5QzQ0RDYwQzI4MDQ0RQorOTNFNAorOTYKKzY1MTBCNjBECis1M0Y3MENFOEEwNkY3NENEOEQ0OUNGNzQwNworMzQ2NjVDNTgzQTVGMjVGQkY1N0ZFNzhDQzJFOTkzODdBMTlBOTIyNTVDMzZBNDRBCis2MzA0NERDOAorRDVGMjRDMTA5RDkxRjhBMjAyNDdENUEyNjkwNgorNDc5NDNCRjdBMjZDNjMzNgorMjdGMzlEQUQKKzRBQzY3OEEyQjlERDdFNEFBOTEyNzhFRTQ1QTVBNEQ4MzdFQjYzQjg3QzJEMDU4ODk4Q0ZCNUQwNEE2OUYyMDQ0QTVGCis5MDNBRUIwMjM0Q0RCNUUyREVDQzVDRjQ0NzJEQTI1RTcyMjdBOUUzRTk5MjM3NzRFQTc1RDRFQTA0ODE2MDYxMzU1QTVGNTgwREU0CiszRTNBMzQyRTM3NEJGRTc1RjUyNTFGRUMxNjE3NjY5QzIxNEQ1NzVFOTE3MTgyRjg4RjhERUIKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwOTcgcHV0CitkdXAgMiAvQzAwOTkgcHV0CitkdXAgMyAvQzAxMDAgcHV0CitkdXAgNCAvQzAxMDEgcHV0CitkdXAgNSAvQzAxMDUgcHV0CitkdXAgNiAvQzAxMDggcHV0CitkdXAgNyAvQzAxMTIgcHV0CitkdXAgOCAvQzAxMTQgcHV0CitkdXAgOSAvQzAxMTUgcHV0CitkdXAgMTAgL0MwMTE3IHB1dAorZHVwIDExIC9DMDExOCBwdXQKK2R1cCAxMiAvQzAxMjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE0NCAtMjI3IDUxMyA3MjhdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNUQzOEQ0OEVDNzQ2NkZGRUJBNUM3MTQyNTA2RDc4REYyNEYKKzA2MEIzRDZGMjJGNDNDMTYwNUY3RTYxMENFRTAKKzgyMUM2OEZCMTNDMDFEQ0FCNUQwN0VEM0M5Q0E2M0NBNDU4MUFFRTJFRkRBNjZFNEY5Q0JGNzIzQkIyQzI2NzNGMkIxMUI3RDM4RjAyQ0M5RjlBMkM2MDI1RDhFOTU5REZBODlFOUVBMTE2QTZBRTFCNDc1MTBENjA1NzBERUI3MUVFMDFGNTdEQTg3NjVFQTY1MDNGOTdGOTM1RTYwQTcxRTMyQUM5NDQ1NUIwRUMwRTY1Q0EzM0YzOTQ0NzdFRENCMzZBOEU3MTA3MEFCMDNDNkRDMjFCODlENTgwQkJENTExOTNCQkJBRTNEQTZCNzY3QURBNjZFRjg4OQorQTRCMAorRjRENENBOEY3RjgwOEU2NkFFNjZBRUI4NDIKKzA2RTJDMTRFCisyQkNGOEJEQTQ1NUQxMzVGQTgyQzgxODQ1RAorRTY0QzM4N0ZCQjVEQzA4MjRFODAzNTcxRDRCQUQ0OTgzQzU1QzlCOUMxNkVCQjg5QkRBMENCRUI2NDhGMDJCRkIwNzc4Q0ZBQkY1OTI1NTk3NTM3NDAzMDgzMUUwMDU1RTRGODA2ODg3NUU5NTNEOEZBRjhEMzI2NDNGQzhDQUMxNkRBNEY1REI1MTVGNjc1RjE4MDlCMEI3NkM2NEMxOEY4MTQxN0Y4NTgyRTZCNTQzRDBBMUJGRTdBMDJCMTY5CiswMEE4OEM0NworMzRBRkVBNUE5MkZFQ0MxNEFDOTNDM0IzNTg1MworN0Q0RDg2MEZDMDgzNkE0OEQzNzcwRkREQzQ4RDg1RjRERDYyNEE5NTM2MkY2NEE1NjhFQkJBNEExMjdGOUVCMDU0RjE3NTlDNERDNzI1NkZDRjQ3MEZDRkU3NEI3OTRDQ0Y2MjM1OUExMUQ1NjMwRTIyRDc5QUM0Rjk4RjM0REQ4RkI1NDlDNTA0Q0E5RTQwMTg5MUYzRDk1RDdENURDQjQ1ODVFODQ1MDcxNEE2QTBDQTJGRTdCNzcyOEU5RjEyNTIxNUU1MUU1OTFGM0E2OEE4ODg5QUNEMURBNTdGMTNGQTQ2NjU3Nzg3M0EwMDk4MDJCQTdBQjA3NkFECis4NTYwCitGQUUyMzMwOUU2RkY0MDRGQTE1ODVEQkY2QUY4Q0QwRTBDRkUzOUUzNDREOTI1NUUwMTY4NThGQTY1NDQ2N0I3RDQyRDFERTRFQ0JGRjk4QjhDNzE3QkRENUFCQTdDNTkKK0I0NzVDNTc0Cis0RDIwOUU2NTlFOUI1RTM2NkQwNDFBMzE0NENBCitBMUM0RjE5Q0IwMDIzMjkxRkVBMDczNjVGMDdDRjc3MzhEMEFDMTRERDY0MzZGQzZGNjYzMDc1QzFDREZENTE0NkE4MEY0RDk1N0RBREE3RUZGMDMxMzYxNjFGMEE3OUI1OUNCNERGQjAyRkFGQjU4MDc4OERBRUI3RUZCQTBDQzdGMzM5ODFGOUUxM0UwMjA1REVENjMwMDdDNjE3RDg3QUVDNDIyQkZFNzA4NUYxOEY4REQ0MTlFQUY0OUU0RjkxNUY5ODREOTZCCitDREI5MzI1OQorREFENDYyQUUxNTY3MEJBNEY2NEY4OTFENjVBQgorMEU4NzkyN0I5NjFCQUJDMkVDRTM3RDY4MUM2REY1QzNFNEIxRjczODZGRDc3QjEwOTBERDM1ODhBNjQ3MDMwMzUzMUY2NzYwOEQ5MkM4RjdCQjdCRjE2RkU2RTI1QkJBMTRCMDgxRjBDNDkxMjMwMjc3MDAwOEVEM0ZFMjZEODY5RDU3MThFQTM1NjAzMUU2RDM3QzQzMTdGRTcwNDkzMUYyMjQwMUVFMjFFNjZGNEJDRDAzQjI1M0RBRjQ5MkYxRTUzRUI1REM5NkNENTRCQkQ5RTE0MTI4NUE4MzREODY3RTQ1M0RCOUJFMDYzRkEzQjEKKzJENzRENTY0CitFMTM4RDJBNjFFQkRDMzFBMUU4NjFDRURFRkI0Cis5NDFBQ0I2NDBBNzJGQjQzNkM2RDAyMTBCMEI0OTFEMUEwODNCRjA3OURFNDdFRUI4MkUzRkMzN0IxRjg3MTY4RjEzQUI1NkJDNDY4MEZDNTc2MkM1MEI5NzlCM0RBRTZDNUNDOTFBMkU1REI0RjczNjZGMDlGNTEwNzg5RDY0OEZFRUI2ODQ0RTVFQTdBQkE1N0Q3NDcwRTQzRDYzMkI0OURDNDdCMjcwOUIwMEE5QTU5MTFCMkVFNzJEODEwRjQxNURCMjVFRkM1CitCMzVGNTI5OAorRjdDODU3REMwQTlEMDE2OTAzMTEzNjBCNEQzRQorRDc4NUVDNzZDNkY2RDVCM0M3MTZFMTA2MEI4Q0Q1MjgzQUJCMUM0MzdDNUEzQUJDRDQ4QjMxRDkzRjk0MjZCMDFGOTY4MEQ1NzA1NEIxNzlDNTQyMEZBNjVBNTNGQTJDREQ1NzJFMUY5RjhCMzY2REZCOTFEMUE3MjJFRTMxRTQ5QjU0Rjc0MDREQ0Q0RTM4MUQxNjdCM0M4RjM1RUQ5QTM4RjFCMjQ0MTk2OEQ3OTU2MzM5RjM1Q0FCNzlEOTU5MUNBMDM4NTc3RDVBODQzNzA3MkIxNDdFMTRERTQ3ODZENEFFREEwM0FFNTZFQjVFRUI2NUM1QUYxOUFDCis3MUMwCis2QTY5ODBENjc5NkMwMzRGRDUyMjA3ODFENjk0RUVFRkFFRTJCNTJENUMzNjJCQTYxNTQ4RUY4NkQyNEQyRjFGNDNDMTQ4OUJGNzI0OTA1MURGNUEKK0RENDRGMjVCCis0QjBFMzVBNkE3QUMxQkE2OTlCRTY3M0UxRAorN0M3NjU3N0U0N0NGRTUyOTg4MDg3QzhCOTA5NzU3Q0RCQTUzNjM3NzQwQUZFRUVDM0VGRDk1Q0JCNjNERUYzOTIzOUI1M0QyNDVFQzc0NDM1MTlGOTgwN0VFNTRDNzZFM0IwMTBFQjQ5RjVFQkI2NDUyOUVEQUY0MzMxMzBBREE0NUEyMjlFM0IzMjE2MkFGMzE3QjE0RTQwQ0FFQTMxOURDMEI1NjQ2N0RCRTBDNTYzMEZBNkUKKzREOEFGMjNDCiswQ0U0NjQ0RTlCMkFGMDgyM0YyRkQ1ODBERkRGCis0Nzc4MjFBOUYwNzhERkI4RDE3RjYxRjgwRjRCRTc2NThCOUE2QUJEMEUxOTg2MjJGRDg2MkQwMzM0RjIxNkJDNzUyMkFCMjkxMzZFQTYyODcwRThGMDlBRDc4Njg2NURFMkQzMDlDMTEzQzQ1M0U4QjUxRTVGRkM1MEQ1NjBDODA5NTVGNEM0QTM0REY0N0VBMUNGNUY1Rjg4MzM4RUMwQ0U4MDJCOUVDQUY4MUU3MERBNURDNDhBOUM2MkFFNTlDODA3QTQ1NjM3RTEyRTRGMzk4RTAxMUU2NzA5MTlBQzhEM0RGRTM3RjAzQgorMzhFREYyMzgKKzlBMzFENDEzREIyQkY3RjVGODRGNzY2OEI5RDcKKzExMjlGQ0Q1QkQxMDhFQTFFODM1RDdDMTcxNTA2MUFDRUI0NUJEQTYzMkMwQ0FGOUU1RkRGNjVGMTYwMTVGQUU0RDdGNzhBNzZEQ0EyQkYzNTdCQTgwMkY5RThDMDBFMDUxNkMwQjJGQUEzMTMzQkExRTg3NDk3NjVDMUNDREYwNjFBQ0NDNTZCODZERjVFMDkzN0Y2NDI4Q0M5NUVDNTU1QTQzRUI5OTlCMTZDRDEwREM2Mjg0ODU4MzVBMzM0MjUxMDgyQTc4RDk5QzVGREUxRTM5RDUxQTk3OTczODlCNUFGNEIwNkIyODJCQTQyRTk4RjNGRjhDNjQ1RgorRjE0MQorQjQyMjY2N0Q5ODFDNjVBREFDQjBFMDM1NUI1MUY3NTlCMzcyOEExRTYzMDY4QgorMENBNDJCOTAKK0YyMEUxRkI5RUMyNEY0NDhCQzE2MzgxQTk2CitGNzQ2QzI5MDgwQUVBMDI1OTUyMkU2OTE3Q0JFRTAzMDM4ODVCODIxNzBGMTQxQTQzMUJCMTlDMDQzMTY3REZBOEZGNjkyNTI0OEVCMjFBMURFQzgyMTU5QTFDNzIwQjJFRENCNzFBM0VENUY5OEU0QjY0MzFDNzM3NUUzMDUwQzg2QjIyRTczMjNDRUVGMjBFMzlBRTAyMTA4QzEzRDBFOUE0QjY0NUQyRDE2N0IyMkI0OTUKKzJFQzA3MjlECis5RDhCNDA1RjIyMDEzRDNFNTY2Q0QwMzcxMzhCCiszMjk0Q0Q1MTFBQTdEQTBBNjI2MThBREUyOTE5MjgxOTBGQUNGODRFNDI3OUE1MUQxOUUwQzg3MDY3MTlGMzNBN0IxNTRFQzlGMzZBQkRBMzMzNjc0MEJBMjE4N0REMzI5MzU0RDRFQzY1MjYyRjgwNTk5MjVDMDc1QURENTRGOTI2MkQwMzNFMjEyMTgzQkYyQzAyRUMwNTQxQTA2QUU3NjgxNUUyMkY5QjE2MTI5OEM1NTY5QUI3NDAzMTk3NEYyMjMyOTRCNTg5RTU4NTAyRDA4MEVCM0EwNkZBRDFCQUM5RDZCRDdBQzNEOUFDNDk4QUI2M0Y3QzBBQzUKKzRCQjMKKzU4QTQ3RkM2RDRBMzY5NUI1QworRTRFNUM1RjYKK0RCN0E2OERFQzVBNzUwQzcwRjVFRjI1NzkzMzcKK0I5NUJBQzUwMURDOTQxNUEKKzFCMUNGRkJDCis5OEVEOEZBRjdDQTIyQjNGM0U2NzYwQ0M4RkQyRTcxOTE3MDJBMzBBOEQ2NEQzMEZDNTQzRjMxNTYwNEJFNjc2MEJENgorMDFCNEMyMjEzQ0Q3Qzk2MDdDRDA0ODk5MTg0MUQxMURBQkQyMTZBMjUxMkNGNEIwRTQzOTYyQ0RFRTlBMUUzMUZFNUEzODcxMjUyNgorQ0JFRDA4NDMxOTg5NzNCM0IyNUZCNkRGNjVCRDYzNDRBMkU4RDIwRjQ0MEJGMDdCOTkxMTE0CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyYiAxMi4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJpIDEyLjAwIC9QU093c3RkdXRjaGkgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTUyNDMyMmYyNDMwMjUwYTAxMGIwMTBjMjQyZDIyMjcyYzIwMzAyYTAxMjUyZTMwMDExNDI0MjAzMTMzMzAyODJkMjYwMTE1MjQzMjM1MmUzMDJhMDExNz4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyNDMwMjUyZTMwMmMyMDJkMjIyND4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MDgwOT4gOTM0NiAxMzM4NSAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI2NyAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjY3IDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyNjcgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjY3IDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA2MmM+IDE1ODkgMTQzMSAwIDE5NDAgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGIwMTA2MGEwND4gMjAzMyAxNDMxIDAgMjQ5NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMxMjQzMj4gMzE3NyAxNDMxIDAgMzQzMiAtMSBzCis8MDAzMjI3MjQwMDJiMmUyMjIwMmI+IDM0MzIgMTQzMSAyIDQyMzQgMCBzCis8MDAzMTI0MmQyMzAwMzEyODM4MjQwMDMyMmUwMD4gNDIzNCAxNDMxIDQgNTMzNSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBiMDEwNjBhMDQ+IDUzMzUgMTQzMSAwIDU3OTcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDIxMzczMjI0MzEwNzAwMWQwZTI0MjUyMDMzMmIzMjBhMDAyYjJlMjIyMDJiMDAzMTJlMjIyYTI0MzIwMDIxMzMyNTI1MjQzMD4gNTc5NyAxNDMxIDUgODg5NSAwIHMKKzwzMTI4MzgyNDFlPiAzMTc3IDE2NzYgMCAzNTgyIC0xIHMKKzwwNjE0PiAxNTg5IDE5ODAgMCAxOTY3IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBiMDEwNjBhMDQ+IDIwMzMgMTk4MCAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNTI3MjgyMjI3PiAzMTc3IDE5ODAgMCAzNzAzIC0xIHMKKzwwMDIxMjQyNzIwMzQyNDMxMDAyYjI4MmEyNDAwMDYyYzA1MDAzMTI0MzIzMjI4MmQyNjAwMzIyNzI0MDAzMDI0MjIyNDI4MzQyNDAwMzEyODM4MjQwMDI1MmUzMDAwMzIyNzI0PiAzNzAzIDE5ODAgOSA4MTgwIDAgcworPDAwMzAyNDJjMmUzMjI0PiA4MTgwIDE5ODAgMSA4ODk1IDAgcworPDMxMzczMTMyMjQyYzA3PiAzMTc3IDIyMjUgMCAzODM1IC0xIHMKKzwwMDFkMGUyNDI1MjAzMzJiMzIwYTAwMzAyNDJjMmUzMjI0MDAzMDI0MjIyNDI4MzQyNDAwMzEyZTIyMmEyNDMyMDAyMTMzMjUyNTI0MzAwMDMxMjgzODI0MWU+IDM4MzUgMjIyNSA2IDc4MDEgMCBzCis8MDYyZj4gMTU4OSAyNTMwIDAgMTg4MiAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzA1MDgwOTA3MDQwMj4gMjAzMyAyNTMwIDAgMjY0MiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMxMjQzMj4gMzE3NyAyNTMwIDAgMzQzMiAtMSBzCis8MDAzMjI3MjQwMDIzMjgzMDI0MjIzMjJlMzAzNzAwMzUyNzI0MzAyNDAwMmYyODJmMjQzMTAwMzUyODJiMmIwMDIxMjQwMDIyMzAyNDIwMzIyNDIzMDcwMDFkMGUyNDI1MjAzMzJiMzIwYTAwMzEzNzMxMzIyNDJjMDAyMzI0PiAzNDMyIDI1MzAgMTAgODgyNSAwIHMKKzwzOT4gODgyNSAyNTMwIDAgODg5NSAtMSBzCis8MjUyMDMzMmIzMj4gMzE3NyAyNzc0IDAgMzU5NSAtMSBzCis8MDAyNTJlMzAwMDMyMjcyNDAwMzIyNDJjMmYyZDIwMmMwMzA0MDAyMjIwMmIyYjFlPiAzNTk1IDI3NzQgNCA1NzY4IDAgcworPDA2MzE+IDE1ODkgMzA3OSAwIDE4NDcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MDkwNTBjMDQwOTA3MDQwMj4gMjAzMyAzMDc5IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM1MjcyODIyMjc+IDMxNzcgMzA3OSAwIDM3MDMgLTEgcworPDAwMzUyODJiMmIwMDMxMjQzMjAwMzIyNzI0MDAyYjJlMjIyMDJiMDAzMTI0MmQyMzAwMjAyZDIzMDAzMDI0MjIyNDI4MzQyNDAwMzEyZTIyMmEyNDMyMDAyMTMzMjUyNTI0MzAwMDMxMjgzODI0MzEwMDMyMmUwMDMyMjcyND4gMzcwMyAzMDc5IDEyIDg4OTUgMCBzCis8MzQyMDJiMzMyNDAzMzEwND4gMzE3NyAzMzI0IDAgMzkwMCAtMSBzCis8MDAzMTJmMjQyMjI4MjUyODI0MjMwNzAwMWQwZTI0MjUyMDMzMmIzMjBhMDAzMTM3MzEzMjI0MmMwMDIzMjQyNTIwMzMyYjMyMDAzMTJlMjIyYTI0MzIwMDIxMzMyNTI1MjQzMDAwMzEyODM4MjQzMTFlPiAzOTAwIDMzMjQgNyA4ODA2IDAgcworPDA2MTk+IDE1ODkgMzYyOCAwIDE4ODIgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MDkwNTBjMDQwOTA3MDQwMj4gMjAzMyAzNjI4IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM1MjcyODIyMjcwMDIxMjQyNzIwMzQyNDMxMDAyOTMzMzEzMjAwMmIyODJhMjQwMDA2MzEwMDIxMzMzMjAwMjUyZTMwMDAzMjI3MjQwMDMwMjQyYzJlMzIyNDAwMzEzNzMxMzIyNDJjPiAzMTc3IDM2MjggOSA3OTIzIDAgcword3N0OmR1dGNoMTJiIFNGCis8MTAxYjE3MjIwMDA2MWMxYTExMTcxYjAwMDYxMTIwMTExNTFlMTExYTAwMGUxYzEyMTgxMzIwMWY+IDEyNzEgNDAxNCAzIDQyMTUgMCBzCis8MGIwYzBmMDc+IDEyNzEgNDM2MiAwIDE4NjYgLTEgcworPDA0PiAxODcwIDQzNjIgMCAxOTI4IC0xIHMKKzwwMD4gMTkyOCA0MzYyIDEgMTk2MCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAxYjJkMjgzNjAwMGUyZTJjMjAyODJkMDAxOTJlMjIyYTI0MzIwMDMyMjQzMTMyMzEwMDIwMzAyNDAwMmQyZTMyMDAyMjJlMmMyZjI4MmIyNDIzMDAyODJkMzIyZTAwMmQyNDMyMmYyNDMwMjUwMDIxMzcwMDIzMjQyNTIwMzMyYjMyMDcwMDEzMjUwMDM3MmUzMzAwMzUyODMxMjcwMDMyMmU+IDE5NjAgNDM2MiAxNSA5MDQ2IDAgcworPDAwMmMyNDIwPiA5MDQ2IDQzNjIgMSA5NDYxIDAgcworPDM5PiA5NDYxIDQzNjIgMCA5NTMxIC0xIHMKKzwzMTMzMzAyNDAwMzIyNzI0MDAyZjI0MzAyNTJlMzAyYzIwMmQyMjI0MDAyZTI1MDAxYjJkMjgzNjAwMGUyZTJjMjAyODJkMDAxOTJlMjIyYTI0MzIzMTA1MDAzNzJlMzMwMDJjMzMzMTMyMDAzMDI0MjIyZTJjMmYyODJiMjQwMDJkMjQzMjJmMjQzMDI1MDAyMDJkMjM+IDEyNzEgNDYwNyAxMSA4MjQxIDAgcworPDAwMmQyNDMyMzEyNDMwMzQyNDMwPiA4MjQxIDQ2MDcgMSA5MTEzIDAgcworPDAwMzUyODMyMjc+IDkxMTMgNDYwNyAxIDk1MzEgMCBzCis8MDYwZTBlMTYxZjFiMTUxMzFjPiAxMjcxIDQ4NTIgMCAyNjQ5IC0xIHMKKzwwMDIwMjMyMzI0MjMwMDMyMmUwMDMyMjcyNDAwMmMyMDJhMjQyNTI4MmIyNDA3PiAyNjQ5IDQ4NTIgNCA0NzMyIDAgcworPDBiPiAxMjcxIDUxNTYgMCAxNDM0IC0xIHMKKzwwMDFiMmQyODM2MDAwZTJlMmMyMDI4MmQwMDBlMjAzMjIwMjYzMDIwMmMwMDE5MmUyMjJhMjQzMjAwMTkzMjMwMjQyMDJjMDAzMjI0MzEzMjAwMDMwZTExMWYxOTFhMTgwZjBiMTQwNDAwMjgzMTAwMzQyNDMwMzcwMDJjMzMyMjI3MDAyYjI4MmEyND4gMTQzNCA1MTU2IDExIDkzMDggMCBzCis8MDAyMD4gOTMwOCA1MTU2IDEgOTUzMSAwIHMKKzwxYTBkMTcxZjE5MWExODBmMGIxND4gMTI3MSA1NDAxIDAgMjcyNCAtMSBzCis8MDAzMjI0MzEzMjAwMjQzNjIyMjQyZjMyMDAzMjI3MjAzMjAwMmMyNDMxMzEyMDI2MjQwMDIxMmUzMzJkMjMyMDMwMjgyNDMxMDAyMDMwMjQwMDJmMzAyNDMxMjQzMDM0MjQyMzA3PiAyNzI0IDU0MDEgNyA3MzUxIDAgcworPDFhMjcyND4gMTI3MSA1NzA1IDAgMTYzMSAtMSBzCis8MDAxOTI4MmMyZjJiMjQzMTMyMDAxYjJkMjgzNjAwMGUyZTJjMjAyODJkMDAwZTIwMzIyMDI2MzAyMDJjMDAxOTJlMjIyYTI0MzIwMDE5MzIzMDI0MjAyYzAwMzIyNDMxMzIwMDIyMmUyYzJjMjAyZDIzMDAyYjI4MmQyNDAwMzUyZTMzMmIyMzAwMmIyZTJlMmE+IDE2MzEgNTcwNSAxMSA4OTI2IDAgcworPDAwMzEyZTJjMjQ+IDg5MjYgNTcwNSAxIDk0NjEgMCBzCis8Mzk+IDk0NjEgNTcwNSAwIDk1MzEgLTEgcworPDMyMjcyODJkMjY+IDEyNzEgNTk1MCAwIDE3MzMgLTEgcworPDAwMmIyODJhMjQwMDMyMjcyODMxMGE+IDE3MzMgNTk1MCAyIDI1NTIgMCBzCis8MDI+IDEzOTggNjI1NCAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzFjMWQyMDAzMWIxMzIwMWQxMzFlMTQwMzFiMTMyMDFkMTMxZTE0MDAwMjIwMDA+IDE1MDQgNjI1NCAzIDM2OTIgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDBlMTExZjE5MWExODBmMGIxND4gMzY5MiA2MjU0IDAgNTA3MSAtMSBzCis8MWEyNzI0PiAxMjcxIDY1NTkgMCAxNjMxIC0xIHMKKzwwMDA2MTIwMDI2MmIyZTIxMjAyYjAwMjIyZTJjMmMyMDJkMjMwMDJiMjgyZDI0MDAyZTJmMzIyODJlMmQ+IDE2MzEgNjU1OSA1IDQ2MzIgMCBzCis8MDAyODMxMDAyZDJlMzIwMDM0MjAyYjI4MjMwMDI1MmUzMDAwMjAwMDFiMmQyODM2MDAwZTJlMmMyMDI4MmQwMDE5MmUyMjJhMjQzMjAwMzIyNDMxMzIwMDIwMmQyMzAwMzEyNzJlMzMyYjIzPiA0NjMyIDY1NTkgMTEgOTUzMSAwIHMKKzwyZDJlMzI+IDEyNzEgNjgwNCAwIDE1NzIgLTEgcworPDAwMjEyNDAwMzEyZjI0MjIyODI1MjgyNDIzMDcwMDEyMjQzMDI0MDAyMDMwMjQwMDMxMmUyYzI0MDAyZTI1PiAxNTcyIDY4MDQgNiA0NTQzIDAgcworPDAwMzIyNzI0MDAzMjI0MzEzMjAwMzEyZjI0MjIyODI1MjgyMjAwMjIyZTJjMmMyMDJkMjMwMDJiMjgyZDI0MDAyZTJmMzIyODJlMmQzMTAwMjAzNDIwMjgyYjIwMjEyYjI0MDAyODJkMDAyMD4gNDU0MyA2ODA0IDkgOTUzMSAwIHMKKzwwZTExMWYxOTFhMTgwZjBiMTQ+IDEyNzEgNzA0OCAwIDI2NTAgLTEgcworPDAwMzIyNDMxMzIwNz4gMjY1MCA3MDQ4IDEgMzA4MCAwIHMKKzwwNjJjPiAxNTg5IDczNTMgMCAxOTQwIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBiMDEwNjBhMDQ+IDIwMzMgNzM1MyAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzMTI0MzI+IDMxNzcgNzM1MyAwIDM0MzIgLTEgcworPDAwMzIyNzI0MDAyYjJlMjIyMDJiPiAzNDMyIDczNTMgMiA0MjM0IDAgcworPDAwMzEyNDJkMjMwMDMxMjgzODI0MDAzMjJlMDA+IDQyMzQgNzM1MyA0IDUzMzUgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYjAxMDYwYTA0PiA1MzM1IDczNTMgMCA1Nzk3IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAyMTM3MzIyNDMxMDcwMDFkMGUyNDI1MjAzMzJiMzIwYTAwMmIyZTIyMjAyYjAwMzEyZTIyMmEyNDMyMDAyMTMzMjUyNTI0MzA+IDU3OTcgNzM1MyA1IDg4OTUgMCBzCis8MzEyODM4MjQxZT4gMzE3NyA3NTk4IDAgMzU4MiAtMSBzCis8MDYxND4gMTU4OSA3OTAyIDAgMTk2NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYjAxMDYwYTA0PiAyMDMzIDc5MDIgMCAyNDk1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzUyNzI4MjIyNz4gMzE3NyA3OTAyIDAgMzcwMyAtMSBzCis8MDAyMTI0MjcyMDM0MjQzMTAwMmIyODJhMjQwMDA2MmMwNTAwMzEyNDMyMzIyODJkMjYwMDMyMjcyNDAwMzAyNDIyMjQyODM0MjQwMDMxMjgzODI0MDAyNTJlMzAwMDMyMjcyND4gMzcwMyA3OTAyIDkgODE4MCAwIHMKKzwwMDMwMjQyYzJlMzIyND4gODE4MCA3OTAyIDEgODg5NSAwIHMKKzwzMTM3MzEzMjI0MmMwNz4gMzE3NyA4MTQ3IDAgMzgzNSAtMSBzCis8MDAxZDBlMjQyNTIwMzMyYjMyMGEwMDMwMjQyYzJlMzIyNDAwMzAyNDIyMjQyODM0MjQwMDMxMmUyMjJhMjQzMjAwMjEzMzI1MjUyNDMwMDAzMTI4MzgyNDFlPiAzODM1IDgxNDcgNiA3ODAxIDAgcworPDA2MmY+IDE1ODkgODQ1MSAwIDE4ODIgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MDMwNTA4MDkwNzA0MDI+IDIwMzMgODQ1MSAwIDI2NDIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzMTI0MzI+IDMxNzcgODQ1MSAwIDM0MzIgLTEgcworPDAwMzIyNzI0MDAyMzI4MzAyNDIyMzIyZTMwMzcwMDM1MjcyNDMwMjQwMDJmMjgyZjI0MzEwMDM1MjgyYjJiMDAyMTI0MDAyMjMwMjQyMDMyMjQyMzA3MDAxZDBlMjQyNTIwMzMyYjMyMGEwMDMxMzczMTMyMjQyYzAwMjMyND4gMzQzMiA4NDUxIDEwIDg4MjUgMCBzCis8Mzk+IDg4MjUgODQ1MSAwIDg4OTUgLTEgcworPDI1MjAzMzJiMzI+IDMxNzcgODY5NiAwIDM1OTUgLTEgcworPDAwMjUyZTMwMDAzMjI3MjQwMDMyMjQyYzJmMmQyMDJjMDMwNDAwMjIyMDJiMmIxZT4gMzU5NSA4Njk2IDQgNTc2OCAwIHMKKzwwNjMxPiAxNTg5IDkwMDAgMCAxODQ3IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA5MDUwYzA0MDkwNzA0MDI+IDIwMzMgOTAwMCAwIDI3MTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNTI3MjgyMjI3PiAzMTc3IDkwMDAgMCAzNzAzIC0xIHMKKzwwMDM1MjgyYjJiMDAzMTI0MzIwMDMyMjcyNDAwMmIyZTIyMjAyYjAwMzEyNDJkMjMwMDIwMmQyMzAwMzAyNDIyMjQyODM0MjQwMDMxMmUyMjJhMjQzMjAwMjEzMzI1MjUyNDMwMDAzMTI4MzgyNDMxMDAzMjJlMDAzMjI3MjQ+IDM3MDMgOTAwMCAxMiA4ODk1IDAgcworPDM0MjAyYjMzMjQwMzMxMDQ+IDMxNzcgOTI0NSAwIDM5MDAgLTEgcworPDAwMzEyZjI0MjIyODI1MjgyNDIzMDcwMDFkMGUyNDI1MjAzMzJiMzIwYTAwMzEzNzMxMzIyNDJjMDAyMzI0MjUyMDMzMmIzMjAwMzEyZTIyMmEyNDMyMDAyMTMzMjUyNTI0MzAwMDMxMjgzODI0MzExZT4gMzkwMCA5MjQ1IDcgODgwNiAwIHMKKzwwNjE5PiAxNTg5IDk1NDkgMCAxODgyIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA5MDUwYzA0MDkwNzA0MDI+IDIwMzMgOTU0OSAwIDI3MTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNTI3MjgyMjI3MDAyMTI0MjcyMDM0MjQzMTAwMjkzMzMxMzIwMDJiMjgyYTI0MDAwNjMxMDAyMTMzMzIwMDI1MmUzMDAwMzIyNzI0MDAzMDI0MmMyZTMyMjQwMDMxMzczMTMyMjQyYz4gMzE3NyA5NTQ5IDkgNzkyMyAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA4PiAxMjcxIDk5MzUgMCAxMzk5IC0xIHMKKzwxYzFlMTMwMDA1PiAxMzg5IDk5MzUgMSAxODcyIDAgcworPDBmMGEwMDA1MGQwOTAwMGUyMDFlMTMxMTFhPiAxODY3IDk5MzUgMiAzMzI0IDAgcworPDBiMGMwZjA3PiAxMjcxIDEwMjg0IDAgMTg2NiAtMSBzCis8MDQ+IDE4NzAgMTAyODQgMCAxOTI4IC0xIHMKKzwwMD4gMTkyOCAxMDI4NCAxIDE5NzIgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMTA+IDE5NzIgMTAyODQgMSAyMTQ3IDAgcworPDJlMzAyNDAwMGI+IDIxMzkgMTAyODQgMSAyNjQ4IDAgcworPDFhMTQwMDBiMTcxMz4gMjYyOCAxMDI4NCAxIDMzODQgMCBzCis8MDAzMjI0MzEzMjMxMDAyMDMwMjQwMDJkMmUzMjAwMjIyZTJjMmYyODJiMjQyMzAwMjgyZDMyMmUwMDJkMjQzMjJmMjQzMDI1MDAyMTM3MDAyMzI0MjUyMDMzMmIzMjA3MDAxMzI1MDAzNzJlMzMwMDM1MjgzMTI3MDAzMjJlMDAyYzI0MjAzMTMzMzAyND4gMzM4NCAxMDI4NCAxMyA5NTMxIDAgcworPDMyMjcyND4gMTI3MSAxMDUyOCAwIDE1NjEgLTEgcworPDAwMmYyNDMwMjUyZTMwMmMyMDJkMjIyNDAwMmUyNTAwMjIyZTJkMmQyNDIyMzIyODJlMmQzMTAwMmUzNDI0MzAwMDMyMjcyNDAwMTA+IDE1NjEgMTA1MjggNiA1MDE3IDAgcworPDJlMzAyNDAwMGI+IDUwMDkgMTA1MjggMSA1NTA5IDAgcworPDFhMTQwMDBiMTcxMzA1MDAzNzJlMzMwMDJjMzMzMTMyMDAzMDI0MjIyZTJjMmYyODJiMjQwMDJkMjQzMjJmMjQzMDI1MDAyMDJkMjMwMDJkMjQzMj4gNTQ4OSAxMDUyOCA3IDk0NjEgMCBzCis8Mzk+IDk0NjEgMTA1MjggMCA5NTMxIC0xIHMKKzwzMTI0MzAzNDI0MzA+IDEyNzEgMTA3NzMgMCAxODIwIC0xIHMKKzwwMDM1MjgzMjI3MDAwNjBlMGUxNjFmMTAxNjE4MGYwMDIwMjMyMzI0MjMwMDMyMmUwMDMyMjcyNDAwMmMyMDJhMjQyNTI4MmIyNDA3PiAxODIwIDEwNzczIDYgNTgwNiAwIHMKKzwwYjAwMTA+IDEyNzEgMTEwNzggMSAxNjE4IDAgcworPDJlMzAyNDAwMGI+IDE2MTAgMTEwNzggMSAyMTI4IDAgcworPDFhMTQwMDBiMTcxMzAwMTkzMjMwMjQyMDJjMDAzMjI0MzEzMjAwMDMxMDE2MTgwZjFmMTkxYTE4MGYwYjE0MDQwMDI4MzEwMDM0MjQzMDM3MDAyYzMzMjIyNzAwMmIyODJhMjQwMDIwMDAxYjBlMTcxZjE5MWExODBmMGIxNDAwMzIyNDMxMzIwNz4gMjEwOCAxMTA3OCAxMSA5NTI2IDAgcword3N0OmR1dGNoMTJiIFNGCis8MGIwYzBmMDc+IDEyNzEgMTEzODIgMCAxODY2IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MGE+IDE4NjYgMTEzODIgMCAxOTI0IC0xIHMKKzwwMDFhMjcyNDAwMTA+IDE5MjQgMTEzODIgMiAyNTE3IDAgcworPDJlMzAyNDAwMGI+IDI1MDkgMTEzODIgMSAzMDI1IDAgcworPDFhMTQwMDBiMTcxMzAwMjQzNjJmMmUzMDMyMzEwMDIwMmQwMDMzMmQzMDI0MmIyODIwMjEyYjI0MDAyZjMwMmUzMjJlMjIyZTJiMDcwMDEzMzIwMDI4MzEwMDI4MmMyZjJlMzAzMjIwMmQzMjAwMzIyNzIwMzIwMDM3MmUzMzAwMjQzNjIwMmMyODJkMjQ+IDMwMDUgMTEzODIgMTEgOTUzMSAwIHMKKzwzMjI3MjQ+IDEyNzEgMTE2MjcgMCAxNTYxIC0xIHMKKzwwMDMwMjQzMTMzMmIzMjMxMDAyMjIwMzAyNDI1MzMyYjJiMzcwMDIwMzEwMDMyMjcyNDAwMzAyNDJmMmUzMDMyMjQyMzAwMzEyNDJkMjMwMDMwMjAzMjI0MDAyMjIwMmQwMDIxMjQwMDJjMzMyMjI3MDAyNzI4MjYyNzI0MzAwMDMyMjcyMDJkMDAzMjI3MjQwMDIwMjIzMjMzMjAyYjAwMzAyNDIyMjQyODM0MjQwMDMwMjAzMjI0MDc+IDE1NjEgMTE2MjcgMTYgOTUzMSAwIHMKKzwxMTMwMjQyMDMyPiAxMjcxIDExODcxIDAgMTgwMyAtMSBzCis8MDAyMjIwMzAyNDAwMzEyNzJlMzMyYjIzMDAyMTI0MDAzMjIwMmEyNDJkMDAzNTI3MjQyZDAwMzAyNDJmMmUzMDMyMjgyZDI2MDAxMDE2MTgwZjFmMTkxYTE4MGYwYjE0MDAzMjI0MzEzMjAwMzAyNDMxMzMyYjMyMzEwMDMyMmUwMDJjMjAyYTI0MDAzMTMzMzAyNDAwMzIyNzI0Mzc+IDE4MDMgMTE4NzEgMTMgOTUzMSAwIHMKKzwyMDMwMjQ+IDEyNzEgMTIxMTYgMCAxNTYyIC0xIHMKKzwwMDJkMmUzMjAwMmMyODMxMmIyNDIwMjMyODJkMjYwNzAwMTA+IDE1NjIgMTIxMTYgMyAzMTI5IDAgcworPDJlMzAwMDI0MzYyMDJjMmYyYjI0MDUwMDJlMmQyNDAwMzEyNzJlMzMyYjIzMDA+IDMxMjEgMTIxMTYgNCA1MjE0IDAgcword3N0OmR1dGNoMTJiIFNGCis8MTExOTIxMTEyMzFmPiA1MjE0IDEyMTE2IDAgNTgxOCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMzAyNDJmMmUzMDMyMDAyMTJlMzIyNzAwMzEyNDJkMjMwMDIwMmQyMzAwMzAyNDIyMjQyODM0MjQwMDMwMjAzMjI0MzEwMD4gNTgxOCAxMjExNiA3IDg4OTQgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwyMDFjMTUxMzIwMTY+IDg4OTQgMTIxMTYgMCA5NDYyIC0xIHMKKzwyND4gOTQ2MiAxMjExNiAwIDk1MzEgLTEgcworPDEzMWU+IDEyNzEgMTIzNjEgMCAxNDU3IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAyNTJlMzAwMDIwMDAxMDE2MTgwZjFmMTkxYTE4MGYwYjE0MDAzMjI0MzEzMjA3MDAxMzI1MDAzNzJlMzMwMDIwMzAyNDAwMjYyZTI4MmQyNjAwMzIyZTAwMzAyNDJmMmUzMDMyMDAyMDAwMzEyODJkMjYyYjI0MDAyZDMzMmMyMTI0MzAwNTAwMzcyZTMzMDAzMTI3MmUzMzJiMjMwMDMwMjQyZjJlMzAzMj4gMTQ1NyAxMjM2MSAxNiA5NTMxIDAgcworPDMyMjcyND4gMTI3MSAxMjYwNiAwIDE1NjEgLTEgcworPDAwMzAyNDIyMjQyODM0MjQwMDMwMjAzMjI0MDc+IDE1NjEgMTI2MDYgMiAyNzIzIDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDE0KSAxNAorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM2IHB1dAorZHVwIDMgL0MwMDQ0IHB1dAorZHVwIDQgL0MwMDQ1IHB1dAorZHVwIDUgL0MwMDQ2IHB1dAorZHVwIDYgL0MwMDQ3IHB1dAorZHVwIDcgL0MwMDQ4IHB1dAorZHVwIDggL0MwMDQ5IHB1dAorZHVwIDkgL0MwMDUxIHB1dAorZHVwIDEwIC9DMDA1MiBwdXQKK2R1cCAxMSAvQzAwNTMgcHV0CitkdXAgMTIgL0MwMDU4IHB1dAorZHVwIDEzIC9DMDA2MiBwdXQKK2R1cCAxNCAvQzAwNjUgcHV0CitkdXAgMTUgL0MwMDY2IHB1dAorZHVwIDE2IC9DMDA2OCBwdXQKK2R1cCAxNyAvQzAwNjkgcHV0CitkdXAgMTggL0MwMDcwIHB1dAorZHVwIDE5IC9DMDA3MiBwdXQKK2R1cCAyMCAvQzAwNzMgcHV0CitkdXAgMjEgL0MwMDc2IHB1dAorZHVwIDIyIC9DMDA3NyBwdXQKK2R1cCAyMyAvQzAwNzggcHV0CitkdXAgMjQgL0MwMDc5IHB1dAorZHVwIDI1IC9DMDA4MCBwdXQKK2R1cCAyNiAvQzAwODIgcHV0CitkdXAgMjcgL0MwMDgzIHB1dAorZHVwIDI4IC9DMDA4NCBwdXQKK2R1cCAyOSAvQzAwODUgcHV0CitkdXAgMzAgL0MwMDkxIHB1dAorZHVwIDMxIC9DMDA5MyBwdXQKK2R1cCAzMiAvQzAwOTUgcHV0CitkdXAgMzMgL0MwMDk3IHB1dAorZHVwIDM0IC9DMDA5OCBwdXQKK2R1cCAzNSAvQzAwOTkgcHV0CitkdXAgMzYgL0MwMTAwIHB1dAorZHVwIDM3IC9DMDEwMSBwdXQKK2R1cCAzOCAvQzAxMDIgcHV0CitkdXAgMzkgL0MwMTAzIHB1dAorZHVwIDQwIC9DMDEwNCBwdXQKK2R1cCA0MSAvQzAxMDUgcHV0CitkdXAgNDIgL0MwMTA3IHB1dAorZHVwIDQzIC9DMDEwOCBwdXQKK2R1cCA0NCAvQzAxMDkgcHV0CitkdXAgNDUgL0MwMTEwIHB1dAorZHVwIDQ2IC9DMDExMSBwdXQKK2R1cCA0NyAvQzAxMTIgcHV0CitkdXAgNDggL0MwMTE0IHB1dAorZHVwIDQ5IC9DMDExNSBwdXQKK2R1cCA1MCAvQzAxMTYgcHV0CitkdXAgNTEgL0MwMTE3IHB1dAorZHVwIDUyIC9DMDExOCBwdXQKK2R1cCA1MyAvQzAxMTkgcHV0CitkdXAgNTQgL0MwMTIxIHB1dAorZHVwIDU1IC9DMDEyMiBwdXQKK2R1cCA1NiAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yMzggOTIwIDc2Nl0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIxOTAxREU0OEI2NDNDRkI4NTdDRkJCODVFMjUzRUUyRUE1QQorMTc1NTlGNjhBODQ5QTg3OUZGQkQwQjk5CitDRkRBODhGMEMxMjQ1MzE2NEUKKzEzODFCNEY1CitGNTE2QzZGMjRENkRFN0JFNEFEMDMxNDcyMjQ5CitDOEZEQ0U1RDk5QTg4NzZCRTFFMEI3REJDQUE3QTZBMTZCMkMyQjE0NDJGMzQ0QUZGNDgwRjE4M0ZEM0NFQTA1RDE3MzAxRTVENDEyMTkwQkY4RkYwNkY5QURBOEM4OTEzMzY3N0EzRjE2NDQxMzkwNUZEOUFCMjMyRkYzQzZCMTUyNjE3REQ1NzYxQjg2NzM3ODIxNEY4MEFGN0U2MkFFQkFGQkYwODM2REIxNkYzOTYwQTQ1NTE4NzExNjAwQjJBN0YwRDREM0RCQThFNkE0MzREQjVGNjMyQTMwNjM1QkZEN0RFMDE4Nzk2MzgzNDgxRDc5MzQ3QjcxM0EKKzU5NjIKKzg3N0RCNDY2OUM3NTgyMjU3RUQzQjQ2MgorMTk3NkIxOEEKKzFBRUY2Qzk2RDQ5QjMwREM3NDBFOEJBQjNDCis5OUJDQTU5MURGMkNFODdEM0E1ODZCRTQwNDk5M0M0REM3QkFGMkI3MDExNTg4MDQ5N0U0NDE1RUI1QkRCNzA4RjUzMEJEMUYzRDVDMjQ2NjQ5NEVEOUFGMzBERkMwMjIyNDUxMEVDQ0ZENjBGODkyNDUKK0U4NDE0OEVFCis2ODEwMzVBMzlENEY0RTM1MDdCNDU5NjZBOQorRjZDMkZEQTA2RjUyRUQ3RUJDRkFFQUUwNjNBQTY5MEEyQTNCRkUzMTRGQTI1NAorOTA0RjY5M0UKKzhGRjgxN0VENEZGQzQ5QzRGQTYyRjRFMTA2Cis5MzAyOUNFMDQ1OEQ4NDk4Njg1MDEyQ0NFQjYwQTM1RTkxMjU5QUIyRkZGNUI1Q0Q4RDlCRDJDMUZDMTFGRgorQ0VGRkIzM0EKK0Y5MkZBM0Y4NjQ4NTczOUE2REUwRDY3QTQzCisyM0YxN0Q5MUYyRkQ2ODJBMTI0MUIxNkVBMUJBODBERDkyQjJBMzMzMTdEODhEOEUxRjQ1NTg5QworRUI5NjFCOTQKKzExMzBEQTI0NEZCMkNBQjMyRjg0MDU4QTZCCisyN0JGMzU0MkQ1MTBBOEM2QTNEODhBOUEyQ0IxQkJFNTlGQjg2QUYxMTM1NjgyNkNCNzVCOTdCOUUxMDAzN0QyOUJCNjY2RjNFQjQ4REIzMjIwNjVBNDYyQkQ0NEVDNjFDMjI3NDY1NDZDRERGNzRDRTE0NjM1NzBCOTg1QTcxMEU0QTYyMzI3Mjc2NDMwMTdERERGCis3RTJGNkJENgorN0ZDMDU5NDYwQTUzRjFEMTNEQTlEQ0UzNzQKKzc2MkUxNzVEMURDOTkwMkJFRDM2MTZFOUFBODhEQ0IxNzE2Qjk5OTRCM0I0RkYwOEVBNUVDMEE1OTUxNjgzMDQ5NUUzQkE2RjI3RTJFRjA2RjJCM0YyNjkzODM1NTZERUU3NkIzRkU4MThFRDVCODBFMkIzMjk5RUFFM0MzQgorMjI0QTY0NUQKK0MyQUEwRDM0MTU5MjIzREVBRTMyNzc3OTAwOEIKK0Q4NjZDODFBRTRFN0I2MERDOTY3QTIyN0M5NUJDODVCQzJCQkY3NTMxNkNDRTBCOTczQzMyQzM5ODEwMDU1OTIzRkQ2OEYyNzcyREVBRTM0NTcyRUQ3NDU1QkUwNjNGNDVEQUNGMTI5QUZCMTA0MDY4RkQxNDA2MEMzRUYwNUFDMkZFNDE3QjZGN0FBNUIwOTM0QjlBNEE3REY2Q0FGQkQ1QjJEQjkwODgwODkzQkQwNzE2RTZEMEI5RDM1NkQ4OTM5QTM1NkE1REQyMzg5RDE3RDMzQzAxNDNFQTY5MAorQzMzNzczNTYKKzQxQzRFQ0UwMjZGMTIzOTA3MDg3NTg1Nzk3CitGQkQ4NTM0MDJBMDcxMEMwQ0I0RUQyOTZCMEZDRDA5NjgzNEU2QjFFQTdDNDFBODBDMjMwOEU5MDFDQjg3NDFEQjc3QzczNzZFOTRDOUU1NTUwMEMyNzhCQjdGN0FDODc2MUE5MTBDRjYwQjhEQUY2RkZFQworNDUyMTQ1QkEKKzRGMzY2RDg0RkZBMTZFMjNERUFDMjgwN0VCCis1MjAwMEZBOTE2QURFNzU5QTk3RkEwMjI2RDFGOUE2NDI1QzkzQzc2REZGRjI0OUNCQzI2OTkwNzU0NTUxNDUwOEU5OTU2RUNGNTRGNDU3NTg1M0RFODg3MUYzQkJERjgyRUQ1QjY1MDNFMzc5OTUxRjc4MzQ4RTdFNEVDNkZBRTM0OUMxOTU1ODlBNTJFN0JDOEZFRjFEM0JFNEZFODFFODdCOUE4QkNDRTI3RDBBNjJCQzU1Qjc1NDIyNkU4QTE0QQorNTYxQkQ1MjIKKzg5RTA4RDQ4MEZENzlBRTI4N0U1OUZGRDg4CitFMEFBQjU2QUNFQTNGM0JEMDA0ODA4MDI4NDVGRDIxNEREQ0I4NEI0Nzc0MDAxOEQwRUM4NjUzMUREMDlDMURDNERENDZGODNCMUMyNDVEOTZDRDNGMEJCNjI1MzE2QTk5MTJEOEQ4NUQwREYKKzE1Nzc1NzFDCisyQUJCODZEMURBNDk2RjFFRTk0QTVEM0ZEMworQUI2OUUyNDc1MDUyMUYyRUJGQ0UzNkMyMEQ1RkRCMDMyNTlFMkFDMzFDMzEyQjJCNkNGRjkxRjU0RTgzQTMwNjRDRTFBMTY0MzVCOEE5Cis4ODIxNUE3MQorOEUxNkRCNDhBQzJCODkxRDE4RjE3QjdFRDNCMQorOUJCQzc0NkQ2OUUzMTlERjg2MDlFQTdERkU5N0U3NUUwMEYwN0I5RUM5OTU4QUFFMEYzNDEwNUI4MDNBOTM2ODkxMjgyNzA5RDM2NDhFNjg1NTNDQkZERjAyOTE1NUI4ODg1NEFFQURCOTdCMERBMEJFMzcyMTAzMDgzNjU1MDdGQ0IzNjU4OTg0RTFGNDlGNDVEQkUwN0NENkQxN0UwNTQzNDJDNjdEQkE3OUEwMDBCRjEwREQ4RTkyRkYzODcyQkNFQTI3QjhFMjY3QTdFNDM1MjBCNEYwQjRENUVGQjUzNDgwNTIKK0JDODJFMkZFCitFNkNBM0RGQUM5Q0Y1NDEwODE2Q0JEMDFGNTI3CisxNzVBNzAyRDA5MkM1QkJFQTI2Qzk0MUNCN0Y1MjVDQkU2RDZFRDUxRDJFMEJGQzE5RTVFNUYyRUM4RDBBMEQ4NUY0RjdGN0ZCQzVEOUVDQjNENzg2MzA3MDFBQTZFMDQ4Rjc4QTMwOEJGQTdERUUwRjI2MTA2MTI1MDEzQzdCOEEzOEYzQkIyMzFFRDlGMjlBOENDNzk5QUM0MjI3OERDNjNBMDQ4NDJGRjc4MjMyNTg3OTI0MEY4OTg4NjdBRjgzRUYzMjlBQjM4MDg3NDIxNDI2QTNCMkVGNDI5NTdEOTFEMTQ2QzIxMEZCMEJEQzEyODJDRDkyOEEzNjMKKzZFMzcKKzE0CitBNDJCOTg1NQorNEZFRDM5NDRBMDA2MTMzODQxREZBMjlFRjMKKzhDMTRBN0QzQjdBMUEzQzM2NkY3QzQ0NzRCNUU5QzJEQjc0Q0Q0MUU5NzVGQzM4Q0FCOEEzRkE0QTFDREQ5MjcxMjY5NzA5ODIxM0M3MUIxODlBQTY3MEFGQjgxRjAxNjVGMDA4RTBBQTBEMDNCNEQ0MTJCRTFDMTAwM0E5ODhENjRCMkZBNzE3RTYxQzc4M0ZFQUE5QjU0NkVCQURGODk4NUM2NDcwQjY0NDJGOUE2MzRCMTM5RDE0NDkxRjU5QUUxQUVBMworRTVERUEzODEKK0FEQzREN0ZEREJCMjIxOUUwM0NCRUQwRkVGNTMKK0ZGQjkxRTIxOThDNDdFMzY2RDlBNkY4RURENkQ5MTU5NUU5MDkzODRBOTFCM0E5RjU5NTNBQTdDQzg3QzZFMDM5QTEzOUIzNUQ1QUIxNTBGRjBFQTM0MTQxRDQwNzQ0MjNCRTNCQ0Y5NDhGM0Y3QUFEMzkyQ0I0MjA5NDdDQUJDQjBERDU4Njk4MDhFMjk4MjJBODhCMTk0MUQ0MUMzRjIyQ0FENDFDQUUwMENFQjc2OUM4Rjg0RjBFQkNDRTRGRTAzRUFBMTZDNjFDQzlEODFFM0JGRTg4QTg1OTdDRkI0RTIzMjRGODMyQTlGNkJGMkYzREFGOTIyQjlFQgorRUIwOUY1NTYKK0I3MUYwNjQyNDVBQUYyMjVDMzgzRTZCNThCQzgKKzc5REM3MzRENDVDQkZCOTU4NUM5Q0REMTkzQUIzOThGNEFFMTc4QzI1MkYwNTRFRUM5MkQzRkZBNzFFRjg0MUQ2ODYyQTI4RThCQjk4NkI0RDVDMTYxRDAyNTRDQTZFMUU5Q0I5RjE4NjMxRjVBRDI1MENCQjE3NTlGNDAwRkFCNUIxRTMzRTQ2MUFDMjBCMThBQ0JCM0Y0RjA1NkFFREYyMTc2QjI0MzRFNDE1MDA1RUY3RjQwNkE5QUY2QUE4MzJCNjRDQzdGMzY3NDI2OTdDQQorREIwOEUzMzAKK0M1MjU4RjcxRjE3OUE2OUJGRTc0MzQ2NDkzMDgKKzA4NjhGNTZBRjJBQUI1OEYwQTk2M0M3NUI0NDUwRUFCQ0VGRTc5QjIzMjQ4ODNGNEM2RUZGNjMwQTA4NDREMkY1ODBGODlDRTJGMEY0MkJFMTc4RDlERkNENTYzOUY4Qjg4NEYzRjdGMzRBRDIyN0QxMEQyMDdBOTRCQTk5REI5NzgzRTc1ODE0Mzg0NTJCQkE4RThENkEyOEY4MDQ3RTE2NDk0OEFFOTU2Mjg0RjUyOTk4ODY4NTQwMEREMkEwNDhDQUY3NDQ5Q0M4Qzc3OEM4Mjg1REFFQ0YyQjBENDJCNDg3MTBFNTMwMUYzQkEwOERGRDc2NThFMzhCMQorQkMxOQorMDNFNUEyOERDOUQzRDcwMzNFOTM0MAorM0U0MEYwQzAKK0U5MUUyNTIzNDM0N0YwMUZBOURFQzI1NjUwCis3RUIwNTcwNkZBNjIwOUQ2RTIzNjlGMjRDNDhDNUY4RUM1MjAyMUU2MjFGNTA5Q0FEQTFFQzc4NkQ5MTNFRjAxNEU1M0Q3OUU1ODg1MURFNzE3OEQzNDFGMTUxNzQ5NzI5MTU5RDg4NUExMUIwNzBGMkQxNEMxCis0M0M4NTk2MgorQjZDNjcwRENCRUYxREY4Rjg5RTc1MzJCRDEKKzlDRkRENjkyMkEzMDhDODlBRTc2MDUyRjdDMTk3OTZBNDFDMTc2RUMwNDkxQ0YxREY2MTlEOThBM0Q1QjEzOUEyRjFEQUM0NjdCMjNFRENCNjVFMEIzRjc3RjU5RTlCMTUzRjAyQUY3QTM2ODYzNzJGOTAxNEE3MjQ5QzhGRTRBNEVFNDU1QkM0QkI0ODcKKzBDMkU0Nzg2CitGMTJDM0ExM0REOEY0MTE2N0M3OEQyMTBBRkQyCitDMDIxMzEyNTJBMjdDQzg2REQzMkVBNDFENDIyREMxQzZBMDg2RjYzNDVFQzAzNjkzNUE3RDBDMjZERDkzMTk2MjUxOTZDNkVDRkVFMTBFREFGMzE2MzcwRjMwRjFEOEMzQjQyQzBCNTlBRTQ3M0JGOUE2RjRCQkQyODE1OTgyRkQ2MjI4RTFBMzY0ODNCMjRGRUE4RDQ5NDc5MjgwMTA2QzFGM0RFRjdGQjg0NUI0MDhCNEJGMzI4RjdFOERCMkFBMzAxMjE4RTI4RDIxQTM1MzZGNTg2OTQwRDhCRTEKKzZFQUUwMzM5CisyQUYyQjVBNERDOEM1M0E0RDA5MDJGQzBFOQorNjdGNkRFQ0FFNjlBRjM3NkI0OUIxMjM1MjdCOEJENzFCRjNFRTc5MkE0NDA5MDJGNDk0RUYwMkFFNkQ2MkY0OUYwMjNFQkVFNkIxOEMyNzZDNTM0MDk2MzdGQ0Q0OTA1MzZCOUVEOUEyRUEzMkVEQTlGMzNFQzk3NjcyOTc0NkQ4MkM3Q0NDOURCNEI1MkZFODdFNUNFMDBEQjI3NkZGMzNBMzc3NjIxQTM3REJBOTdGOTU1QkQxNQorNjNEMEREQjMKK0MxOTU2RDE0RkM3OEU4QzlCRkU4RTkzNzk3CisxRTk0QzAxQzAwQ0Q3NUVCQUYzNEM0NzMzREY4QzdEQzc4MjhGNjI0Q0E0REMxMDJFODAxNEZFOURGN0U1Qzg1NjNERTI3QzY5NUE3MUMzMTUwN0EyOTU2MUY5QTFBQ0FFMDYzQkVGRTE4QjgwNkY4OEFBRjI5RkREQjQ0N0EwOEZEM0I2REFDNUZCMDA0MDJBMTc4MDhFOUFBN0YzNTQ4RDlCRkJBCiswM0M2QkZGMQorRTY3NDBGNjEzNjgzQjhEQ0E4RjJENEEyNkE2MgorRDcxRkFGMUY3NEZCMjkyOTRDMkQ1RUNDOEVGN0E4OTY5NTI4N0I2MjZENkQ2MzAwQzBFM0Y3RDlDMzkxODdCODRCMDQ3NzJBMjFCRjQ5M0E2M0QyQjYxMTk0OURBRTZERjhBMDdBODQ2RjU0NDVFRTQ2QkQ5MUU3Nzc2MEUxMTk3RTYxQzU3MDYwREZERkYwQUYwMTE5NDhGQzZGNUU0NUE5MDJBOEQ0RjFEQjgyMTRCRTgzNkJGODgzMkI1MzZCNjZCREFGRTcxMzlENDlENEJFNzAKK0E5MzJBQkYyCis5OEJDMTQ5NzA1MTczQjFDNDAxRTk2ODgxQzk1CitDMDVEODY1NDc1QTMyNzcxN0I5RDA5OEI3NDg5QzlEQTBFMjE1QUZBQTNEQkM5M0IyNERFOTQxMDQyRDAwOTUyNzE1NjhBRjlGOTJFNEMwQUFBRkYxNkZBQ0MwRDI3QzhEN0ZCQzYxMDZEM0E0N0EyQzg1MTg5NkU2MTFDQzNDMjVCRkY3RUNGODdDRkM3NDdDM0NFNzUxNTAxMERENTQ2Q0RDODlFMjMwRUFBRDVBMUFFQzZGNzI1QTJFQjU4NDdCRTdBRkRFNjE1OEEyOEM4QzNCRkYzMkJCNUQzRkY0RERENURDOTIzMzdGQUJCMDg5RjA3NTkxQThGRDkKKzBCRDA5QTVFCis0N0QwNTBCQjg3QjNBNDAyNTQzREU4QjBCMjA1CiszRTY5N0VDOUQwRjU3OUFERUU4RkE1MDFENDJCMDcyRUIxQkMxQUU4Q0FCODAyOTg4NjU0OEI3RTc2Nzc4RkMwMDZFQUFGQjJCQUE4N0Y5Q0NBNUU3NzA0NkUyQkRCMUUwN0ZCNzdDNEI4MUY4N0YxNUZCQUQxRTA4MDZGNDY4N0ZGREY1NUNEMzVDOUUzRUM4RTZCRUMwQjRCNUU0MzNFRUU2NzcyRjQ3NUVGNDNBMTJDNzUwMDY2QkI2ODA4Q0UzOTdFODVFNDI5ODIwNDg4QTFEMkI1MjQzMjcyRURDNjEyRjM3NDBEOTk1MTRGMzEzN0U0MjY1RkFEN0QKKzE2NTcKK0IyMzQxNQorMEZBNUNDQ0YKKzgxODZCMzU4NjJBNTUwNzBBOEE1RjY1NjVCCis5NjZCRjY1MDEzODk4MTFFQjlBQTQ4MDczOEQzM0YyMkU1MTJCQjY2NzlDNEVFMkNFQzUxNTFFMTI1N0M3ODRCOEFCMDBBQjg3NDBBM0I1OTIzNjhGRDJBMkFFQTIwNDBFQTA0ODU5MTEwODdFQkEzQkQ2NThFMjczOTgwMkY2RDY4QkM4NDQwNTI5MUREOUUzNjY2Q0M1NDdEQkNGOTg5Q0YKK0E5QjZDMDRBCis2Njg3RDUzNDY1RjE0OTc4OUI5Q0M5ODJCNkEzCis4NEQzNTQ0MDJBNTVCRjk0N0MwQkQ2MkRDRURBQzc1QTA5Qjc2RjhBMDBEOENEOTkyQ0ZEQkNFNzU3N0JCNkM2ODYxQTkwRkUxNkQ4ODBDMEJBOTI5QjVDMkE5QjcwNzlCMTZGMDlEQ0VGRjIyNTk2QkRDMzJBQTIyNzgyNDJGMDZGNjlFREI4RUVDMDQ1QkFGRTkyRTZENkU2ODNFMTREODM2RDNENDlCNDlBMkJFNTNCMTZGRTU2REJCQzM5QTMxMDNDQ0Y0RAorOTkwM0FFM0UKKzFBRDc3M0Q4RjI0MkQwNUFEMzRGQTY1MTUwCis3QzY3MzlGQTU1NjI1OUQ4Qzg2Nzk2NzYzQThEQzJDMkE0NDE1NDQ2Qzc3NjU4QTY4NTBDM0RBN0QyMEE3NEJDQUEwMUJBMzI5OEFFMDk0NDYxQzAKKzAxNkRDMkQwCis3QTBGRUQxRjg1MEU1MjNDRTI1Q0I2RDk0OQorRjRGRDlCMTMxMzkzREQwQzc4QjFCNzMzMDFGODg3Q0I0OUNGQzFENTEzOEUwQjYwRDEyMzFFMDNGOUQ4MThBQ0NGRTJGMDM0RkEzMDFGMTE2OTFFQkE4MQorQTNEMDE3MkEKKzg3QjBBNkRGOTk1NzA4QUZDNDFGOUU4QzY2Cis3MzVDNTlFQUI4MzI0MTYwQTk5MDlBMjY1QTUzNjgwMTdENDA4RTFBNDQ0MAorOEYzNTM3NDAKK0U1OEYwNDg4MUI3RTQ3QUE0NzA0NjM4REY3RTMKKzU5OUY2MkIwOUJCNzUxNjlCREUzRUNEMUM1REMyMTczODM3NkEyQTc2MzA4QjlFM0VBREMyRjczRDExMDI2NUY4ODM4QjFDNkZDQzFGRUExNTE5NzFDNzIyMTdGM0I2OUVGMDFBNDNEQjEyMjVDRjM5QTdBQUFGNTRBMTFDN0Y2NDlCMDNEMzI0ODQyM0MyMzRFQjFBRjlFMEYxQzhFNkVGNTQ4QzRBQkM3MUI2QUUyMUY3QjcwNDFDRjNDNkMzOEJCQzgzMkU3NDg0OTIxNjlGQzk5Q0E5NEZDODAwMUM5QjQyMkQ0RDVDRjAzMkVENjgwRTkyMEVFREFFRgorNDBEOQorNDM3N0E2CiszMUM0REIyNworRjVGNTlCMUIwN0RFMkJFOTNBQURCRTY2QTUKKzNCRTc0OEM0NjdEQTY0MjBCNzIzMjcwOURBMjZGRjk2RjNCRjY5MTRGNThGQ0E4QjJCM0RFODQxNjUwODEyNUYxMTk1Q0VCMzIwN0I0RDI5MTMyOUQyMzRFNzNBMjNBMDJFQzY5M0NEMkVGNUJBRUJBMUNBOUJEQjQxQjI4QTY4NEU3REZFQTZCMEUyQTI1NDM5N0Q4MDQ3MkUzQTM4RjE0MzBGNTU3OUE5N0UzODRBCitFNjZFQkM4MQorRjJFNzVGNUMzMjc1MjM0MTc5OUM5Q0FBNzUKKzhDM0MyMTFGQ0E2RjlENzYzQTUzN0IwRENFRjc0NDk0RUMwRjA0RjE5ODFERDU3QTgyOUJBN0RBNkIzMTk5RjQ3NzA0NjlGNkFENUU2RDM0MjE3MzRCMDkzRTJBOUI5ODAxNUM5NzIzQTQzMDkyRkE1RTI1OUMzRjNDQkZBMTU5MjU0Njc5NjI1Mzg3OThERjMxNkQ3NTU1N0Y4QTc5QUM5NzFFCitENzgwNTM4NQorQjI3MTkzMUE0NDdCOEE2QjBGODlCRDI2RDM4QgorQ0JGMjNCNEM3QUI4OTVDOTI0MDQ4QTY0ODY5NUU2Rjc3MEY2Qjk0REJEMzVDODgyOTY5RUJDMzQ1QjgwQTg2MjNDMTE2MDI4QUI5NzZGNzE0MTQ2MDQyQTQxNDgxNjVBQ0M3QkYxODY4NUI2OUE5MDNFNDUzQjUyRDRFMEM4NThGMDE5NkZGQjE5OEVGOTE2RUMwN0M1MTQzQUI1OUQ0QzNEQ0IwMzRCMUE3MjAyMUVGMzA4MkE0RDJENDVDMUU5NTlCNEVCMjNGMDg4ODUzRTZBRkVFRkMyM0FGQworOEQ0RDNEMUIKK0E4OTUwRjFFNkRBOEIwNTc5OUE5OTM4RUYyCiszNkY0MTQ3QzlFRUU2OTE0NjNGREJDNjlFMUUyQzRGQjYwNkZDMDQ4QUZGQjlEOEM5QTc3MzMxODQyQkQ4MDUxMjJCRUFBMzUyNTk2QUU4MTY3N0QxRDgzQzhEREZDQzlGMkNGNTYzQzFDQzI4MThDQjcwMDIwM0U5N0QwMjUxMDM3Qjc1MEE4QTI4Qzk4QTY0NEZEMEFCNzBFRkFEQjI2MzNGMzNFNDFDMDQ2RDM3MEEzCis3RUUyMDA4RQorOTU0M0VFNEU0Q0JBNTVGOTUxODI2Qjc3ODYKK0YzNUQyMUUzOUM3NkVCRTUxNTY3NjgwMDAyQjIzNjZEQTRDNUZFNUU1M0NFRUQwOUQ4NjE4ODU3MkNDNDRFMkUzQkY4OENBREUyMUIxRTg2OThCQzE2MTJFOUU3MjQ2MDc0QUIxOTkzRTg2RDUzQzM5QTFDOUUwMUU0OEJDRTAxMEE1QUJFNUMwOTg4NUE4QjJGRDUyRTIxNzgzOTAxNjYzNjc1NTM3NDQ2OTgyMUNDNzc2RDhDODkKKzI1OTY5NDE2CitDRjYyOTAwMTVBMjk1OTlFOUM3OTNBMjU5REFECisyQjk3MEI5RDM2OTdDMkQ2RDhFNDdBOUM0OUYxREU2QUQ3NTlFQzY1MTkxQzIxMTA2MzU3RThBRTJFNzJDREQ4MkExNjBCQkEyODc4MEU0ODMzMDc0MEEwNzI2Qjk3NTc4NjE3ODE3MTE4RkVCQjJEQ0U1MTkxQjc1NDkzNjVEOEM5RDZGNDg1MzZENzQxRTQ1MDRDMzI3NDJFRTc2NzIxODU3Qjg3NUY4RDU0ODVCNjMwM0I5ODZFRjExMDZBQkNDQUM2MDFBMjNGRUE3NDBEN0FFOTY0NTQyM0MxRTY1RjFEQjQ2ODJBMDcxMzNBRTRGNDU0ODU5RDVGRjkKKzQ1OEQKKzVCREVCMkIwMTkxM0I3QTE5MzkwQzYzQUQ1RjExQkU3Mzk1QzUyRjhCMEFCRTQwNDQ5RkYyM0QxQjM2QTQxRjk0MENEMkFEMEFCN0M1RkZDQTE4NTAxOTIwNzlGNDcKK0QzMTRBNzg5Cis2RUE4N0QzQzcwNDAzQzZFQzYxOERGN0YwNDM0CitDOTU5OUQwNUY2RjIwQjNGQkM2RDhCNzk5NTVBMjAxRkQ4QTZCNzBENzAyRDFBNUM4N0JGMzM1QTFEOThFQ0Q5MTU4RkJBN0IzNTIyOTQ2RDNGMTc5MkVFN0FENzgwRDM3MDREMkFDQzNCMTlBMDJFMDJGRDk0MzBDREY2RUMxRUYzNTMxNTg2NjVFMkUyRDQ0RTdGM0ZGODlBRjAwRjY4MUE3NTI1RkMxREY4MjNGNjBEMTA3RUMyMDYwREQ4MEQwRERDQ0I1NDRDM0MxMTJFNTBFNEIyQjIzNworQkY4RkRFODMKKzQxQUJBNzlEOUNERDgzMTNGRkZDODJEMUI5Cis0MjNENDhCQTY1NTc5MEZEMjg3NTQyN0IxRThCNzdGMUY3QTZFMUNCRjc3OEFGOUEyNDRDRUIxRUYxMUQ3RTAwMkNERDYyQzA4OENFMTY4ODJCMEE0NzQ4RTg2OTlEMzE5QURFRkI4Q0RCQkQxNTNDRUQ0QUU5MUE5NEZBOTE1N0JDMEI0Q0E2RDNCNUEyNjU3MERCNTM5MTAzMjYyOTUyCitENUY0MjFEMworOTJDREFEMUFGNTFBMzAyMDQ0NkY3NDUyOUNENworOENBREM0MUQwQUFCODdEMzg2ODY3MUFDNTAyNjQ3NzU1RjU2QzI5ODg4QzBEMDNFNzhGRDQxRDY5QkY4REQ5QUE1Qzc1RkY5MTEyMjZBNTcxOENDMTRGOTgyNUE2RENCMDUxNEMyM0VFMUQxNUU2RkU2MzEzRTM5NTFEQjI0NTJFRjAwQjZEOUMzQjU0Q0FDMDE2RDkwMzk0NDdDMEY4RTM5QkQyNUExQkExQzAwQTMwNjIxNTEyMzgyQzI4NkNGN0ExMDk3MzM4RjM3NTlFODY5MEI3OTYyMkExRkRGRkI3N0MxNDA2OTQ1MjA2NEQxRDk1OUJDQjUwNjI4Cis1NjU2CisyMkQ3ODcxRjREMUQyRkRDOENCRDBFRTFFNDI3NTQ2RDdDN0NCRUVDRTBGMkE4MDE0NUJGRkU4MzA4QzExNUFDMzJGN0QzCitEMzQ5NkUwOQorRTI2REM5ODE4QzgyNEQ2REIxQjhEQzQ2RjAKK0JEM0E1OTU4QTMxNTA5MzMwRUMyRjVGQzdGRUIyNkRDNEYzRUQzRjA1NzNDMkQ0NTc0NkVDNjRENTMwRjlGMEFBMDg3MUFFNzIwRUZDQTk1MjJENTI4M0Y2N0U1MkY2M0JEQzE2NENFQURCRgorMkZGODkzNDUKKzVCQzg3NkVERDUzNDhFOTg0RDBFQ0I4ODIyOEIKK0RCOTRCNDgwOTVDMDY0QzUyNjdEQjk4NzM2QzI5MkQxRUVENUNFODg5QzVDQUFEODVERUFDMUQwMDgzQTNEQURBNzNEQTI4OTlEQkQxNjkyNUM0MDFFM0FERDdCQ0U0MEE3NzhBRDdGREI2REU4MkI3N0Y2ODU1RDNEQzM5NDVGMDc5NkRBOUUxRDI1MTlDOEI2NTM5RjRFRjQyRDUzNjY2ODdBOEYyMEM5QTc0OUU1OUE2RjE4NzVGQkYwNkI1NzU2Rjk0NkYxRjE4MzA2OTE4MTFERjgxNzY4Mjg2NDVEQThBQ0IwMzA5RThDN0FEMzQ0NzBCMkQ4RDMxOAorOTRGNAorMDUyMzhENzJFNTA0MUM0OEZDODlFRTJGNDE2NThFMTFGNEEwQ0VDMTkyOTkyMjU3RkEwMkVCOTM1MzFBNUIKKzM4NjQwQTUwCisyOUEyRkU2Qjk0QzhFMTRBOEJFNUE3QUE5RDQ1Cis4ODlDRDRENjFENjcwNTkxNTA0QzIzQkE5NDRCRkQ3MEQ0NTAyNEU3NkU5MDUwMTFCQjZDNUE4ODk4MEQyQkU3ODZDRDJFQkY1MkYwNjYzMTgwRjYxNkI4MzlFMjNCMkIyQzJFOTc4NzkyRTI5OEMzMzQ5M0Y4MzdBQzQyODA4RDYyNjVFOTY1RjYyMDRCRkM0NEU4MkVCMzk4NTdFNUI4N0M3MDA5NkVGNDlCQjgxNzUyODdDRDg0RUQ2ODg0NDQ2QjhDMDZBQ0ZGQzlCRDE5OUU0RTc0RjAKK0M3MDREMzQzCis2MUM2MThEQjI5ODYxMjI3NEU2MDA1QkVFRgorRjNGQTQ1QTMxMDA0RTAxNTQ1OEU3RkQxQkExMkNCQzUzQzcwMTg2RUI1NzYwQ0QwNDU1MEY1NjI3RDQwNzhCNzc1RDEzQjU4MTVFRTA2NEQ5QzQwRTQwN0NBMzQ3NDY5OEJDNEFBNkNDNjY3RDY1Q0IzMzQxMUVGRTczQTdDODJFREIzQ0VFNzJGN0YKKzhCNTVCRTE5Cis3MkQ4MUNDRjY2RjVGQjM5MEIwRTVEMjI2MUE5Cis4NzA0OEI4RDMyQTVBMjA3MjIzNDkxN0YzRENGQjEwRkZEREM5MjY4MDg2RTNDOTNBRERFM0FFNEJERjVERjAyMDZDNTc4NUVDNDgxOTkzQzFGRTVENUVDMDRCOUEyMzU4RTk0NTc5QTk5QUE2N0ZCNEJEQ0JGQTAyMDBFRTA5RTNENUQ3MjUzMEQ4Q0E4RUNDNzhDOTFBRjNFQ0YyOTY3QTc3QjAyQUEyNzcxOTBBNzVDN0IzRTFCOTlBRDlGQzk4QUI3NDQwMDBCMThEMTkzODEyRTc4Nzk0QzZDRTA5MzU2RkM4NEFEQzUxMDI3CiszNzcxRTUwNgorMDMxMENGNjY0OTAzMkMzQUNBQ0QwMDE5QjEKKzBCRjgwMDA0MEMxMjg4OTA4QjZBNTNCMjM2QjBCQ0FGQjYwNjk2QTNDRTA3Q0JCQTBGMEY1MEU5QTVFODI3MTg4NTY0MDUzRUIxMjJDRTRGQUZEMjUxNDU0MzBBNTQ5QzcwNTNEQUJBNDNCRDlENjZGRTg0MkE4OEVEMTkxNUJFMUQ3MTcwNDZGNDYwMERDNERDQjIzOTZGRThDRTEzNjc5NjY4MjgyOTA4OTA3QQorN0VFRDVCNUQKKzE0Q0RGNTdGQTM0MDVERUYxQjUxN0FCRjNGMUUKKzk3M0U4QjRGOTlEODY4NzEwRDZCNUM0QTY1MzJDRDlCQTM3ODI0RDJDNjE4RjE1NzY0NzA3RkMyQjZFN0JEMjg1OEY4QTYwREEzODcwMkU0NTUxQkEyQUVBREY1NUI4NzYxMUZDQkIxOEJDQzk0Q0U2MzcxQTk3REVBNTY2NTgyMTREMzM3OTkzRENFNjE2NDdFMzU2RkVDQkEyQkVCMjg5NEM0NEQ0QTg1MzdERUY0MEQwNTVCQTM1RjNDNzFDNTA0OTc0RUY2QzdFMzE4NkY4NUQxNjUzRjVBRkUzMUVDODU0RkE2RUVFQzg3OTU4NUQ0QkU4QzcxCis4RjM5NkVDNQorMzg4QTNGNUZERkQ5MUUzNTZBMEU2NkE0NUQKK0JDMUJFRTJBQzcxNjFFNzY0MkJFODY2MzU4NzVEQkU1QUQ0MTcyRjQ3ODZBNEYyODJFQTFFNTE2MjNGNUU5NkJFMDg5OUYxNzE0RjI5MzZBN0Y5NTEwQTk2ODUyOUExQUExOEUzNEJGRDUyMDEyQTQ5QTJDNkZDNEEwQTI4RTRCNzM1QkM5QkMyRAorRThCMDdDQ0IKKzA1N0VCRTlBNzc1NzM5OEFEMUQxNTE1OTY0CitCNEQxM0FDRDVCQUYyRTA2QUFDNjIzQjA2QTcyMUEwMzlCRjcxN0YyOTBBNEUzRjM3MDAwRUM3RDk0Nzk0NzkxNEE0OTRENTA0ODBENjM0RkFCQUYzQUM3MjU1OUE1Njg5NEYxMjc3QjNGQzBBMTg2RjE2RTRFRUIzMzhDRjM5MTQ2NjEwNDEyNjNFQjRFREM2MEZGMThBREIyQjVDOUNBNTQ4MUI4MEEzMkFBRkU1MTg3MTU4MjQ1RTYzOEJBNDZBREM0CitBQjFFQzFEOAorRUFDRjdERDhGNDlENzVCQUNEQzAwNUNFMzgKK0JEMUZBNzM1MDRBN0FBQzk0QzdFMURGQzNBMjVFRkRCQjk4RkUwNTA5Q0M0RUJFMTVGRTYwRDI4RkMwRkE1QzhCMERGRTMxOTE3REJDNzU0RTlDNzNFNTdBM0Y5MTI1RDI3NjQ2RTE1MTdCMkNDRjE1OEFDMERBMTZGODNBNjk2M0RCRDU2QzU1RTczRTkxREMzNEQwN0FFMTVEMjM3REU4RDZEMzM5Q0U1Q0ZEM0NGMDIKKzUzOTA3NDk5CitENDBBNDlFQjhDOEVDNDk1N0ZDNjVCRDI1RDUxCisyODNEMTUzREZFQjZGMzBENzc3MDc2MjQzMTk1OTZCODA3REY2NkIwQ0ZGMDA3ODNDMzNFOTJGNTkwMDBFRUQ5QkM2QzIwOTkyOEJDQ0RERkY1QjI5MEY0RUMxRjNBNDA1OTgzRTZBOUJFNzY2Q0VCOURGMUE0MjlGRDFFRTk4NTQyRUNCRkE3NzIwRTkxMEZBOTBFREE2RkFFRTAwQjUzQjI0RUQ0RUQ1RUQxNkNENEMzODc5Q0FEOEY5MDlENEM1RTQxMTEwRjlDOTczOTVGQzMxMkE4ODY2RUI1QTQzOUE5OUFCODYwQTdDRUVDNjgwMDY4RjJFMzUyRkEKK0U3NDgKKzkzMzNFMDZFNUVFQzNEREQ2MzMxODg3MTg0Q0UKK0Q5MjI4ODE0Cis1NDdEMTJBMUVGMDQ0MDAyMzM0ODgwMEREMTNDCiswNDAyMUZDOTVBRjE5MkI3MERFNTJDQjc0ODdFQUE2QjUzNTM4ODk0RTgzNjc4MEQ0N0RGRDAyODZFMTM4NDk3MkNBREQ2RUMwN0U2MTkwNDQ0NkM5NzU3QTZDOTVEQTY3NkQ0Rjk3MEQ4OEZBREQ4MTY4QkM1MjVBNENDMjlDMDZDMUIzNjY1NEQ0Qzk0NzZEN0VFQ0YxODVGMzAyMTU5RjVCNDRFNjc1M0I4M0I5RkUzOTA2RUQyNzgyODZCQzM1OTlFOTdERjAwRkVFNEFCMjdDNzgzNUU5QzY0REJGQTk0ODNCOTBFQ0YxM0FGM0YxMjk5ODE2RERBMzYKKzNEN0IKKzE4OUVEOEZGCitBOTEzQzdEMEJCQ0M3RUJDNzE3MjkzNEUyQQorMEM2NDNCQ0YwRjIzMzVFQzdEOURFRDZDMkJCQzg4NjFBRDUxM0Q0NTYyOEZFQURGODlEOEM0RDYwNTFCMUNFOUIwNTBDMDBDODVBMDQzOTQ3MkI3RDUxQzRENzZCOTc4OEFGQUNEMTk2RkJCM0E5NkZDMzQ2RDM3NkYxNUE3Cis3ODlFMTYxRgorQkU2QzM4NERGMkRGMzhGQ0Y4RDVFOEZDMTMKKzNCMkREOTEyQThENDZDN0UwNjNBREU4MTBFNzcwMEIzRTFDQ0FDNDExODhFCitBMTQyOUM1RQorOTY0MUZEMzg5NDk5RDA4OURFMzlBNTI3RUU0MAorQkU5Q0RFMjU2MEMwNzYzMgorNzkwMTgxMDAKKzQ3RTU4NjhBRUYxNEIyNjVENkJENDFEOEExOThCOUJDNTJBQkI0NThFNTk2MUNDQzRGNDk4NDIzMjI2RURGQzdEQjkzCiswM0FFRjFBOTI1N0QwMDZDMDQ4NTc3MjE5NjBDRUE1NEVERjI3MUYxMjhBRjJDNTJDMDZBMTYwNkU5QjRENjhCOEU3MDAwMzVEOTE3Cis4ODAzQTQ5OUVGNTVENEQ4NzZCMjBCQTBBOUE5Mzk0REI2ODdEMjREM0FGN0U0Mjg0MUM4REMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDUgcHV0CitkdXAgMyAvQzAwNDcgcHV0CitkdXAgNCAvQzAwNzIgcHV0CitkdXAgNSAvQzAxMDEgcHV0CitkdXAgNiAvQzAxMDIgcHV0CitkdXAgNyAvQzAxMTAgcHV0CitkdXAgOCAvQzAxMTEgcHV0CitkdXAgOSAvQzAxMTIgcHV0CitkdXAgMTAgL0MwMTE0IHB1dAorZHVwIDExIC9DMDExNiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIwNyA3NTUgNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjVEMkZGMUE5RDRDN0JDRjU1RkRDMUY5MUIyMTc3MzIwOUZDCis4ODUyQzM4ODVBNjEyQkE3MzhFQTY2RTMKKzA1QTgwNDZFQTRGOTE2MUMzMAorMjM0RTkzNjIKKzFGOUZDNjdBMkQ5QTZFRTFBNzRERjQ0MzFECitCM0U4MTcxRkFDOUJDMTEyMDBFNUFBNTNGRTVDQTIxMEU4QTdCRjQ1NDVFOENFCitBNEIwNUVCRQorMEM4RDk3RjY0NkQ3MkIxMDA3NDYyNUI1ODYKKzNCQjA5RjJENUNDMjE3NTA1NkJFQTBBM0NDNTJCODY2M0I5Q0ExRkQ3NUM5RURDOThEMTEKKzE2OEVFQkQ2Cis1OTQ4ODUyRjAwMUZCNkQwNTc1QTUwNjcyM0E4CitGNzI2QkUxQjVBOTg0OEE3NTQzQkY1OTM2N0ExMzU4RTVGRThDQjlERUJFNDNCN0RFOUQ3MTU3NUREODY4QUJCN0E2QkQxN0UxMTlCNTg5OUZFMTAyNzAzQUYxMEIxNjc5REFBOTVEOUNFRjhCRjgyN0M5MzZCNkE4RTFFOUUyRTdFN0M2NDA5NEFDNTYyRTVDMUQ2MTMzNjgwQTM4NEUzMkFCQjhGNkVBNUY2Q0M3NkRCRjExMTFCM0YzNkEwMjRDQTFCNkE2RUQwMkVDNTBDNDgyMkFDNTI5NDBGNjE0NzRBMEQ2NDQ1MkI2Mzk1CiszQTgyQzZDNAorNUQ1OUVCRDZGMzBGQTk5OTcxOEFGRjFDODAKKzQ2ODU1MUU4ODYyMzM2MEVDQzJEMkE3NjI1QkUzMTAxNEZFNDc1MUVFMTM0QTBEMTk5QkJFNzg4MjczOTQzQzFBMUExREIyMDQ3NDE2MEFERUYwRDAyQTE0MzQ3RUMzODY5MzIyRDJEOTY0REU5MjMyQkI3MDBCNDI4MDNDMkI3Q0MzMDA4OUEyQTgwMjY1MjFCNkU2N0QyRjk4MjdGQzI1QTM2NzQwNEUyMTZCOTU4QkY5NTkwNzAKKzI1MTFBQkY4Cis1RDhFMEU1NjM3MTE2RjUyOTk1N0ZFQTQ4OQorNjAzQTlEMjM3OTgxNDgyNzYzOEUzMDc2ODIyOTBCQkY1NDkwMjQ1MzQzMTNERDNFMUZFRTk4RkU1OTJCRjk5NDJDNDUwRkVGODI5NURGRDNBODdGRDhEQjI0MjE1MkREQzVFNEY2NkNGNzk0NkM3QjJDRTI3QzAxOEZDNkVCN0UyNTA4MDA3OTI4NTY3RkFGOUE5QUI5RERDQTE3N0NGNEE3MzY4NTU4MDEzOUY1RTVCRUZFOTMwMkFBCiswMEM5OEE1NgorQjFFMTc0NTBGMkQ4ODQ3NzgyMEY2N0E5OTcwMgorMzgyNzAxQ0RDQ0NGMEUxQkM1Q0JEMTlDMTc0OEI1MjRERDQ5NDE0MUQxNzk4QjBEMDdENzQzQUQxOUY4REU1Q0M1MkM2QjA0NzZFREVDQzNCQ0Y2NDJCRjVCMEI2Nzk4ODQyNDdGNzgwMUFGQTJGMzI1QkIwREM0NTVDQTc0M0I3NzFCQ0E4M0E3RUVDOERDNTA0MzI0RDk5MEMwOEMyOEVCRDJBM0M2ODIxN0ZFMUZEMkJFRURBNzcyRDMzRDkyOEI4QzA0MzdDNjg1RDgKKzhBMEUwOTQzCisxOTI4RjQ0RkM3QzIwRjFCNTI4NURGOEYwQgorMUQzNDJGQTRCOEQxRDU2NkFGOTc4QjEyN0IxRDI0ODJEMDA5MjZEQTU3NTdEMzkzRkZFQzE2MjdBQkE4RUI2QjJEMUM2NDJCM0YzOEE3NjNDNEIyMjM0M0YxMzkyMkMzNEE0MzVDM0QyMzEyM0UzMzcyODlFMzE0QTBDRTc4ODU3QkEwOEFBNkFBQTYKK0ExQkFDQTM1Cis0NDEwNUMzNEZEOTdGRjNGNDlGQ0E4RTUwRjkxCitBNzEwRDQ1QjFFOTVCNkUxRTkzRUUzQzIzRTYzOTQ4NTQ2N0YwRTQ4NTY5QzE0OTA2NzBGNzEwRTdBMEE4NzQ3MERDN0Q5RDZEMjdGNjM1REZCOTQzRTAzNEFCRjNGNDExMTE0NUY1NUI5QUE1NjVBRDJGMjUyREQ2MDBCNjAzRTY4QzRFRkFEM0NFRkY1OEE4MjAzNUIyODNBMENCOTQ0NDE3NTM2NkZDNjNDNDRDOTg0RkM3NTIxNEEzNUQzMThEREMyNzBCOTNGMzRBOUVENDA2RDhDMTNGMTNGNjQ3MUY2CiswODg5RjcwRAorMjFFRkM4NUU1MjlFQTRBRURBN0ZDREM1QkYKK0ZDQzVDRTlDRDUzRTBEOUIyMzI5RUNDODJBQjc5Njg2NTQyMzc3OEUyMzM3QTQwODU3QjlDMzgwNjNEOTVFMEEzQ0UxQjg1NjA2NjhEODlGNkIzRUU4QjI3RjNBRDQ2MjA3OTIzRTZDRTI4RDBBNkNGQUU4Q0NEMDNDOTc4MkEwODQ0NzI2NUQzRUVEMTE0OTdFMjRBNjc3QURGNTA4RkRDRTMwMzM2NDA4RENEMTMwMTIKK0M4RURFMDA2CitGMjg5RkY4ODdFODU4MUQzMzgzNDNFMjM2OAorNjkxNzU3MjhCRDdFRDhEQUMwNTg1MDMxRjFCNTMwMUEzOEVFMzYwNkFFMzlFMTdBQ0NCMzEyRjJGMThEOTBENkI1ODQ2QTFFRDY0OEQxMTNGRkIxODY1OEEzRTYyQkQ0M0NGM0YwOEYzNTRBNUI2NjQ1QjY0RjA5NTE4NERFNzBGRjk3Njk3OQorRjJCQjM1MzcKKzk5QjMwQjBCN0VGRTE1MDQwQUVENTU4NDM5RDkKKzcwOTQ4NjRFRDJFMTM3RDcKKzdCQjYzNjAzCisxRTM1OEIwN0RENkNCM0M3RENCRUFFQTc4Mjc1NUZFQ0EwQkY3MDc1QjUwQTIyNDREQzhGMjk3N0YxQTdGNEM0RTBBNAorODlDMzE1NUM0ODNFREM0NUJENzQ0NkYwMDRDRjlGNzI4NUVFQUIxODQyQzQ4NUMyMTBCMkM0NDYwM0E1RUU3QkE2RDZGNDVGNDA2NgorMENDMTUyRDlERTI2NEUzNUQ4RjUwMjVBRTNFRUFGMjM4RDI4MTc0REFDMkZGMzE1NTRDRDY0CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hpCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoaQorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGkgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY1IHB1dAorZHVwIDIgL0MwMDc2IHB1dAorZHVwIDMgL0MwMDk3IHB1dAorZHVwIDQgL0MwMDk5IHB1dAorZHVwIDUgL0MwMTAwIHB1dAorZHVwIDYgL0MwMTAxIHB1dAorZHVwIDcgL0MwMTA0IHB1dAorZHVwIDggL0MwMTA1IHB1dAorZHVwIDkgL0MwMTA4IHB1dAorZHVwIDEwIC9DMDEwOSBwdXQKK2R1cCAxMSAvQzAxMTEgcHV0CitkdXAgMTIgL0MwMTEyIHB1dAorZHVwIDEzIC9DMDExNCBwdXQKK2R1cCAxNCAvQzAxMTUgcHV0CitkdXAgMTUgL0MwMTE2IHB1dAorZHVwIDE2IC9DMDExNyBwdXQKK2R1cCAxNyAvQzAxMTggcHV0CitkdXAgMTggL0MwMTIyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xNDQgLTIyNyA3NTcgNzI4XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjVEOUE0MzI3REEzOUNCMkRGRDc0ODhEQzMwQTgzQkQ2NTM2Cis1NDAwMTUxREE5ODI1RkZGMzc5MjEwNjM3Qjk5Cis5MzUwNzRCNTQ1QzFBNUMxM0ZGQUVBQ0MxMzQ4MzA3RjE3NEY4OTVENzZCQ0JGNzk2NUI3RENCNUIwODJGMDY5REUzODZENzhEMDY5RkI5M0RENUNENEJGQTBEQUFERkM4NjgyQzAyNTEyQTcwREJEQjMxQTQ5Njc3QzdBOEZDQzY3RTM0RTEzQzUzM0I0MjUzRjI3NkQ2NTkyMUVCMTBGRjczODkwQjgxRjAzRjhCREU3OUVCNEQxMTFFQzIzRTU2NUYzN0ZENTc3MzY4QkRCOEU1OEQzNjVFOTEzOUI4RTEyQTEKK0E3QTRBNThBCitGMzg0QTMwQjNFMzc2N0IyNDMxQTlENzY5QworNjk5QjlDREVBODE5OERBQzAwOEFDODIyODE5NEM5MDFBOUJGMDJERDVEQ0MyNTlFNjM1M0QxMTNBOUFEQjY0RTk1Qzg5MjBFMkZCM0UwQzUxNDVFQkY1MEM2OTZCQTJFNTMxNDZERTY3ODZBNDcwMUMzQzMxNTNCMjJGOTZFQTcyQjU4MTExQzdEMzEzMjk5N0FCQjM5NDg2OTI2QUIwQ0FBNTY4NTAxMTM2QkVBRTdEMkYwNDQxQkExMDk4MAorOUEwNzEwNTgKKzBCNjhCMEFBMTYyN0ExMjRDQ0Y3MjcwRDIyRUYKK0EyMzBDMjYxNTA2OTgzNjcwMzJCQzYyMUYzODhFMjZENjQwN0QxODc3OUE1MEJCMUNDNENCOTg4MUNBMTBGODVFMTg2QTcxNTU4QjJDOUFENjkyOTQ5RkFGNDI3Q0UzRTAzNTA4MDU5Mjg3NjIyMDIxMDk0MDAzMEZBQzM2NEFERTZCNkU5RjE5NDYzM0U3Qjg5QUZGOUZFODA5QzU4OEU3M0NFRDU0NDlCQzUyQUM0QTQ4MUVGQ0M5MDY0ODlCQzUzNDc1QUE1M0ExODUzQUNBMjUwNUZENzA2OEU3RUE1MEVGMzBBMkQ1ODMzQTY1QkQwM0JGRjE1MzgxMAorOEVDMQorRUQ2OUVGODU0N0NEMDdCM0VCN0NGQTZBQjgKK0JFMDkxNTJECis1MUY2ODkyNjk4QUJEQzMzMzQwOTFCMDVBMworQkFBNDlGQ0E2N0MxRkE3REY4MzQyODYyRjYxM0M1M0M0REEzMEU1MEFBQTkzMDk5NTNGQTQ2NjFFMTBGQjhBN0U4NzUxODU3MzJCRkUxQ0FENEUzNjU0MzdGMzcxM0REOEU3NThDRTg3NDJBOUY1Mjc2RUQzNzM3RkQxNjQzNDEwNTRBNzg3RDNDQzAyOTgzQkJFNTc3QzNEQkY5Q0UzOTdEQTRCODNGNDE0ODYyMjI1NjY3QTMyNUM0MTY3REY0CiswNUM5OEU2QgorNzE3M0RCMjNGNDhDMzJGQkZDNDgyMEJCMDg0OQorMEU4OTY4Q0Q3N0Q0NUNCRUI4N0JCQTM5QTY5MUE0RjBERjE3MkIxQUYzNDUxMzk0RjQ0NUQwQzNGMDk3QzgwNEZBNTlGQTA0MzYyN0NGNzdFMzcxNjIxQkJFMzRDODQzQjMxMjFGMEVCNEU5RDU3RjkxRUE4QjczMjM1NjM5NjE1QUNGMTBFODBFOTk1NDk1QTUwMEJGMzc3RUNFOEJDQUQ0NjcyN0RDQkVCNDJBQUQ4ODQzQUU3RjEwNjRDRThCQTAzQUU1RDc4RjIyNDg3QUNDMjYxMjUwRDJDOUFEMzg1MjYyODg0M0RGMzg4OEEyMDM3MEU5RDM3OUM5CiswMjEzCis3MTZCMjUzRDE5OTNFQUIzMERCRjM4NzMwMEVBMTk3QjJBN0MzMTk0NkEwRDA4NTE2NjE3REJGMUI4RkU1OTM1QUVDODcxN0Y1Q0UyNEY0NDEyNzZCMjU3NDhCRDM3QzAKK0FERkQ5NkU3CitDNzExMjZCMjUxN0QxQTg4MkUyODY2NzlBRTVGCis4MDBDNEQ2ODcyNkU0NzM0MkM1NzNFNEI2OTlEOEE4MjQwMDY2MEY2NDE0MTM2NEM1NTAxOTI3M0FBNDE5ODgwQjVCMkI5NzFCNENDMjU2M0Y5NTdEN0I2ODRFRTNBREU2OTJGMUFEMTE5Mjc5Q0Y3RkFFMjM1MzVGQTIxMjA5M0Y5RUUyODZFQUM4MTAzRjA3ODZBQkYxRUYwNEM4OUI5MkRGRjYyNjJGNDdCN0JFODQyNzA3M0ZFM0Q2MDRFRUFBQzYyNkZGQzM1CitGQzU0RTY3RgorOEFBRDZEMUNBMDhFMjZBOUFFM0UyQjY1RDc4NworMzJDNDBGMUYzM0I3MEI0MDA4REM3QTlEODJGNjc5NzRGMEVDNzU1RDc1OTMyNURBOUJBODE0N0U2MURCNkVBRDQ2MTZDMDE3NjU5MTMzN0YzOUNCM0Q3QjU3QzlEOEZFRTU3OEExOUQ3RkE5OUIyQzAyODZDRjkwMUUwNDRFNzg1NjkwRkM5MjhFM0ZBRDI4RjcwQTYzOTQwNkYzNzM3N0FBMTJENDdDODJBMUNBQTE2REY2NDA2OTVCRUI2NTE3MDEzQzlCNzFDOUZENEQwN0QxMTY4MjVCMzcxRDEzOUE3MjZCNDU3M0NCRDg3REI1NjJDMzQwRjc1RDIxCitGQzI2CiszMEZGODczQTc3OEVCQTFBNzAxRkJBMTgxNkRERTJBOEFGQzBFMkFCMERGRDE0RTQ3NTFBMkUKK0U1QjJDRDMxCisyRTU1OTIzODc4MEU3Q0YzNUU1RjMzODIxMTYyCiszQ0I1RDZBNTM3QzA1NkY1MEUwNjgxNUU0NTRDN0FBQzVGN0JDRkYwMjgyMjE4NTdBRUY0N0ZBM0UzMkYwMjUzQTQ0Mjk0Rjk3RTk2OUMxQzM4OUFCMEIwRjkzNDZGMDBGNjk5NEVEMTg4ODhERDdCMUExNzhENjAzOEYyOTg1OTM5RDI4RkNBODdCOTJGM0IzMjg0NDk0RTQ2MzIzMjIxREQwM0VDNTBFQjI2NTk1RDQ3QjlDMTJFNkQ2MjBFMzYwMTY2NTRDREYyMEIyRDZGNjA0MDE5NkNBNDdGNkI4MEVDNUQwN0EwM0Y5RDBCNTlFOAorRkExMUM4ODMKKzNFNTgwNzEzODA2OURGMEY3NTk4ODhDNzYxMUIKKzYwMDdCQ0VFNEIyQzNDMjY5QTJGQjIxODVCRkUxNEM5QjdFN0U0MTdCN0Y0QjdGNDBDNDgzRTcyMTE5RDY4MzE0QjUzMzNFM0Y1QUEwQUI3MkM4MDM1RUYxRTY0QUYzQTZGNkMzMjNGMzAwRkMzM0U1MTk3ODQyNTMxMzdDRjk0OUNGODU1Q0Q5RDhEMThFQUEyQzY5NTJBMEI5MjhFNTdBQTAxRjFBQTBBQ0ZFOEI5REVBRTVDN0YzNTNFNUY4MzBCRUJFRUY4QzUKK0NEQ0MxRTdDCis0MjRDRjQzQTA0MUYwRkREMDJEQkZDOEI5RkM1Cis2NDEwNEExMjk1RTJCQzFFREY4NTc2RDA1NTRCNTI1RUNDRTU3RDFEQjY3QUYwN0VCQTg5NjAwQkE1QUI3MUE5NkIwQTVBN0U0Rjc3OTlDMDcwRDI2OTJDNzAzNDc0NTZBQ0I2MEEyODg5RENFNzEzN0E1Q0NERkY0OURENzE2Qzg3REZDRjk0NEUyM0Q1RUQ4N0JBQzZFRDZCMTUyRkU3MjY3ODYxODJGRjYxQTFBMTlEMUZGQzVCOTE1NERBREZFMTNDQjZCNTk5NTk2QUM5NkM3MjREMTcwMTAzQjdBRTk0NzFDQjg2ODI3MENGNTVCQjhFQ0YzQzRDOTkKK0ZGRDMKKzRERTlDODhFNUYzQjA2REQ3ODYxMzcxQjBGQjdDNTVGMzVEMDUxRjI1OTE4QjA0NTEzOTk4RkI3NjdBOUU5RkEwRTI4RkVBRjAzNzgzMkNGMTlGRDk5NDc1RjZDNTM5NEVGMzQwNTI3OUEwMzdGNjBEQjY4ODEyMDk5MDRBQUExMkM4QzZEQjM1MTk5Qjg5OERFQUJCNAorQzQ5MThENjQKK0EyOTg0NUFGNkJBMkJGN0YxQzI1QUVGOTIzCitFNjc2MDkzNTY1MUFEQjNFODczMjk5NzQ1NUFCMzJCODRENzcxN0MyRDE0QTFFMzk1NTIzOEJBNEUwN0M3MUI3ODU2RUJGQUUyNzI2RUU3QUJFRTJBRkEyOEQ5Q0M1RTlBMkQ1MjExQUVGM0QwRkMyNEUyM0NCQTdDNjQ5NjZDNkUxRDc3QTQ3MzlGNDM3NDZEOTgxNEI3RTY0RjE0MkZFRkE1RDc1RUNBQzM0OEM4RDQ2NTBGODQ1RUM3MzJBCis3NEM2RkFGQQorNENFOEZBRUNCNjZDQUQyMzY0ODMyMjdDNjQ5OQorREM0RTZERTE4QThFOUE2RjJGMEQ4M0Q1QUM4MkVFRDI3QzY5QzM1QTkwRUM1RDU0RTVGQkVCMjQwRjk4REFDOEYyNjQ0RkIxM0Y4MzEzODU4MTk2RDZCQjMwNkRGREVCMDc1OThGODQzNUM3MEZDNjk1NjE4MjhENzRCQzNBMUE4NjY3MTQ2Q0JCMkM5RjI2QUQ5RkRFQUIyQkIyQkREQUI4MEI2OTA1MkY3RTA1MzFDMzU5RjM1OUU0RjdDNERCQkI4RDY2OERFQ0IwMDUzRjlFMEI3QTdGNUMzNTEzOEVDNkQ1QUQ1NjcxMjg5QTk2NDdCRkM0OTYzRDJBCitFOUJFCitGMjNCNTZGRjIwMkUwODUzNzFCOTREQUM2REY1QjIyRTNDQzI3QkFBRUJEQkQ0Qjc5MTE4QUZDQzgzMDI5RDdDMDE4MkM4NDNBQTg3RjRGRDVGRTAKKzE5QzUyOERDCis1NjlBMTAwOTM4MTg2NDc0QkMzQzM0QUM5NworQzY2QzIxRjRCREEwRDc5MjUxQUEwOUQ2RjgzMzQwQjdDMjZFOTg1MkQ2QTdBNDk3QTg5NzVCNDU2REEyODE0Q0I1RTlFRTA1MDZDQUYwOUQ4NDEzNkM0RTA3Qzk1ODExNUI1NTU1RjRFQzg5QUIwMkJEQTQxMjdFMzg0NDlCNjEwNzk0RDlFNUEyOTU1RkIzOUI5Q0NBQjMzNkYwRkVFRUJBQ0Y2NDg4QjEwMENBRjc2OTY2REUKKzU4RUQ5REFBCisyMjRERTU3ODQ4MzlCQjMyNjhDM0Y2QTAzMDRDCitDNDNCN0Y1NjE3OTEyNTQzQUZFOUNBMEE3QzIzNEY1OENGQjMxQ0UxNDU2MjhEMEIyMUM0QTk3Q0MyOUNDODc5N0FDOEEzNTQ4MTYzRkYyNUI0NkUzRkI3NDlGQzcwODNFNkY3NEM5RTFBQkY3QUFBMTMwMTFFNEM3QjkwRDA1NjcyNUJDRDdDMjgwRTI2RENFRUZERTVBREZFOEI4OEJDMzc5RUFDRUI4RTkyQTRBNjhFRjFEQUQ1NUM5Q0YzMERERUEyQTZCRkVEOTJCOTQzNzU0RDE0MEEyNzZFNTNBMTQzMzBBNzZGMEEyQgorNjYwQTMxNDUKKzdDOEFGQkNGMDVBMUNEQjk4REZDMkI5ODRCCis5OUE2Q0E3RTgyRTU3OTQ4QTdEMDNENDVFRTY4NTNFRTJEMzY1MzZCMjk4RjAzNUY5QjI3MUI3NkRDMUUzNzMxMDEwQjYzMkU1M0Q4NzVDM0E2MUVFRUU2NUFENzE1NjBFOTdGOTI5NjA3RDcxREM1RTBFMDkyRUZBOTYzQjBDMUQ1RDBFNjg1QjY2MTI5OUY4QjZBNjM4RjBGNEM2QjMwOTVFOERFNEMzNjVCRjAKK0EwMTg1Qjg1CitEMTU2NDI4RDJCMUVBRDYxQkYzNTk4RjlCMzE0CitBNDhCQkFGRjE4OEQwOTc5RUE3N0QxOTY3RDI2QzUzNDdBODJFNDAyMTc5RTFFMEREQzEzMTcyRTYzODVGRkVBOThCMkY0NjlGNDhGNjM0NEE0MzlGODcxNEY0NTUzMjQ1OEIyNTBBODMzNUQ1Q0FFQTA3NDUzRTQ1NjI1NDREQTdDMzUyMzNCQTA0RjI1NzRDMUZFNUExRTEyRDMyNEQwN0JGNUFFMEUzQzMxNTIyMzA4NkQ4ODQ3MEYwNkI4MjAxNjVEMDY2QzgwRjQ0QjMwOEZERTRBRDU2MUUzQkYyMjU1M0Y4OTZFNEI2NkE5MDNBMEJCRkZDQjU5RjIKKzAwRjkKKzI2RjI4QUM0MDBFNjQzMTg5NEEyMEE3MzUzMjc2NDdBMDEzRTlBNURFNTVDM0EKKzQ5ODFGNDFFCitDOUZBNzVFMjg0QTkzRDBBOENGRjQ1RTQxRgorNDY3NTE5NTM0RDQ4OTE2RkZCMjNFRjIyRTdENkNBRDY1OUQzMThBM0U3NjRDMkM1RThBMjZFQzIzMzIyOENEMjFFMEMwMTdFREZBQkM1OEJFRTJBMzk1QUJCM0UzMTE1NTk1MUY1NjgyNTI1NDZDMzgwNjJGNTlBODgzQkM5MjI1QTU1NzM4NjQxRjcwMTE3OEY3OEE3NDk5MzE3Qzg4MTdGMjYxMTIzNzVBRDJCNUMyRjhECis1RkU1NUM2MAorQzhCRjVDQkUzOTZBOEIxMDQwMkY0MkUwNEFENgorNTEwNzRBN0ZGRjI1MkU4OTNCNDE2NkQ1NUExQUVFRDA5OEYzRDA1QkRGODYzNEE0OEE4QzQzQ0FENUE2NTdBM0U2QTk4RENGRENEMUEzREIxQkMzOEQ5NzNDOUIzNzBGQzVGNTY1NjAxMTg3OTQ4MUU4MUVERUI4OUE3RTMwMEQwQzVGQzk1MjY3NzMwMzhGN0IwRkExOEJGNTAwQkZFOTFDQzBGQjMxMjY1REZBNTc2RTE4ODE4MTBCMUU3NDRBNzVBNzk2QTlEQzQ5NTQ1QTY0NDdGQjM0RUI0RURFQkIwQzREQjE3Qzk2NkRDOTIzRUZBQUM2RDA1OEExCis0QTEyCisxMUVBOUY1QUI1QTlBNEJFRTkKK0I1NTdFMUE4Cis2NkM4QzIyNUI3OUFBRUNFOUNDQjQ2NUFFRDU3CitCQzRBREYwNjAxNjQ5MzM3Cis4MENFRDdDQQorRTc2MjMzMjM0MDcxNUY2OUYyQjIyMTY0NkM1MTE3QkRBMDkxRTUzMUJBQ0I2NUJEQTJDNEQ3OUI2OTFDOTA3RkU1RkMKK0Q4MUVGOUEyODZENUJBNEI5RjRCNTMyRTQxMkRBM0Q5NURDOEI4MjkxNDU5NkE4QjdGQzFENTg0QjBCRjc0NjJGMkE0NUY4REFDQTIKKzIzQ0EzM0Q3OTU4Q0MyOTE5OEMyMTZBQUIwQTFGODc3OUM3MzIwMTk5Qzg2N0VGRDhFMTgwMgorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyaSAxMi4wMCAvUFNPd3N0ZHV0Y2hpIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDE3MjUzMjJmMjUzMDI2MGMwMTBlMDEwZjI1MmQyMzI4MmMyMTMwMmEwMTI2MmUzMDAxMTYyNTIxMzEzMzMwMjkyZDI3MDExNzI1MzIzNTJlMzAyYTAxMTk+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MjUzMDI2MmUzMDJjMjEyZDIzMjU+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDA4MGE+IDkzNDYgMTMzMDAgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyODAgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI4MCA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjgwIDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI4MCAzIDcxMzMgMzIgcword3N0OmR1dGNoMTIgU0YKKzwxYzI4MjU+IDEyNzEgMTQzMSAwIDE2MzEgLTEgcworPDAwMzEyOTJjMmYyYjI1MzEzMjAwMTI+IDE2MzEgMTQzMSAyIDI2MTAgMCBzCis8MmUzMDI1MDAwZT4gMjYwMiAxNDMxIDEgMzEyMCAwIHMKKzwxYzE2MDAwZTE5MTQwMDFiMzIzMDI1MjEyYzAwMzIyNTMxMzIwMDIzMmUyYzJjMjEyZDI0MDAyYjI5MmQyNTAwMzUyZTMzMmIyNDAwMmIyZTJlMmEwMDMxMmUyYzI1MzIyODI5MmQyNzAwMmIyOTJhMjUwMDMyMjgyOTMxMGM+IDMxMDAgMTQzMSAxMCA5MTQ3IDAgcworPDAyPiAxMzk4IDE3NzggMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDMwODA5MGIwMzA3MDUwYjA5MDUwYTA2MDMwNzA1MGIwOTA1MGEwNjAwMDIwYjAwPiAxNTA0IDE3NzggMyAzNjkyIDAgcword3N0OmR1dGNoMTIgU0YKKzwxMjE4MWExMTIwMWIxYzFhMTEwZTE2MDA+IDM2OTIgMTc3OCAxIDUzOTUgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMjA0PiA1Mzk1IDE3NzggMCA1NzM3IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDA+IDU3MzcgMTc3OCAxIDU3OTAgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwZDA2MGEwYjBmMDYwNzBiMGUwZj4gNTc5MCAxNzc4IDAgNjc0OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDEzMjUzMDI1PiAxMjcxIDIxMjQgMCAxNzM2IC0xIHMKKzwwMDIxMzAyNTAwMzEyZTJjMjUwMDJlMjYwMDMyMjgyNTAwMzIyNTMxMzIwMDMxMmYyNTIzMjkyNjI5MjMwMDIzMmUyYzJjMjEyZDI0MDAyYjI5MmQyNTAwMmUyZjMyMjkyZTJkMzEwMDIxMmYyZjJiMjkyMzIxMjIyYjI1MDAzMjJlMDAyMTAwMTIxODFhMTEyMDFiMWMxYTExMGUxNj4gMTczNiAyMTI0IDEzIDk1MzEgMCBzCis8MzIyNTMxMzIwNT4gMTI3MSAyMzY5IDAgMTY0OCAtMSBzCis8MDQyMT4gMTU4OSAyNzE2IDAgMTg3MSAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMTAxMDI+IDIwMzMgMjcxNiAwIDI0NjcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzMzMxMjU+IDMxNzcgMjcxNiAwIDM0NzkgLTEgcworPDAwMzIyODI1MDAwZT4gMzQ3OSAyNzE2IDIgNDAxNCAwIHMKKzwxYzE2MDAwZT4gMzk5NCAyNzE2IDEgNDUzOCAwIHMKKzwyNDIxMmYzMjIxMzIyOTJlMmQwMDE1PiA0NTM0IDI3MTYgMSA1NTgxIDAgcworPDIxMzYyNTMwMDAyZDMzMmMyMjI1MzAwMDIxMjEyYj4gNTU4NSAyNzE2IDIgNzAyNiAwIHMKKzwwMDMyMmUwMDI1MmQyMzIxMmYzMTMzMmIyMTMyMjUwMDJmMjEyMzJhPiA3MDI2IDI3MTYgMyA4ODI1IDAgcworPDM4PiA4ODI1IDI3MTYgMCA4ODk1IC0xIHMKKzwyNTMyMzEwNT4gMzE3NyAyOTYxIDAgMzQ4NSAtMSBzCis8MDAxYjJmMjUyMzI5MjYzNjI5MmQyNzAwMDkwMDJlMzAwMDBhMDAzNTI5MmIyYjAwMzYyOTI1MmIyNDAwMGU+IDM0ODUgMjk2MSA3IDYxNjMgMCBzCis8MGUxNTA5MDYwYTAzMDAyMTJkMjQwMDBiMDAzNTI5MmIyYjAwMzYyOTI1MmIyNDAwMGU+IDYxNTkgMjk2MSA1IDg0NDEgMCBzCis8MGUxNTBiMDU+IDg0MzcgMjk2MSAwIDg4OTUgLTEgcworPDFlMTAyNTI2MjEzMzJiMzIwYz4gMzE3NyAzMjA2IDAgMzk5OCAtMSBzCis8MDAwYjAwMDQwZDAwMGU+IDM5OTggMzIwNiAzIDQ3ODAgMCBzCis8MGUxNTBiMWY+IDQ3NzYgMzIwNiAwIDUyNTAgLTEgcworPDA0MjI+IDE1ODkgMzU1MiAwIDE4NzkgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGUwODEyMDYwZTBjMDYwND4gMjAzMyAzNTUyIDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMxMjUzMj4gMzE3NyAzNTUyIDAgMzQzMiAtMSBzCis8MDAzMjI4MjUwMDJjMjUyMTJkMDAyMjMzMzAzMTMyMDAzMjIxMzAyNzI1MzIwMDIxMmQyNDA2MmUzMDAwMmMyOTJkMjkyYzMzMmMwMDI5MmQwMDMzMmQyOTMyMzEwMDJlMjYwMDJhMjkyYjJlMjIyOTMyMDAyZjIxMjMyYT4gMzQzMiAzNTUyIDExIDg4MjUgMCBzCis8Mzg+IDg4MjUgMzU1MiAwIDg4OTUgLTEgcworPDI1MzIzMTA1PiAzMTc3IDM3OTcgMCAzNDg1IC0xIHMKKzwwMDFjMjgyNTAwMjYyOTMwMzEzMjAwMzQyMTJiMzMyNTAwMjkzMT4gMzQ4NSAzNzk3IDQgNDk3MSAwIHMKKzwwMDMyMjEzMDI3MjUzMjAwMjEyZDI0MDAzMjI4MjUwMDMxMjUyMzJlMmQyNDAwMjkzMTAwMmMyOTJkMjkyYzMzMmMwNTAwMWUxMDI1MjYyMTMzMmIzMjBjPiA0OTcxIDM3OTcgNyA4ODk1IDAgcworPDA3MDMwNzFmPiAzMTc3IDQwNDIgMCAzNTExIC0xIHMKKzwwNDI0PiAxNTg5IDQzODggMCAxODgyIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA1MDYxMTBlMGMwNjA0PiAyMDMzIDQzODggMCAyNzAwIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzEyNTMyPiAzMTc3IDQzODggMCAzNDMyIC0xIHMKKzwwMDMyMjgyNTAwMmQyMTJjMjUwMDJlMjYwMDMyMjgyNTAwMGU+IDM0MzIgNDM4OCA1IDUwNTYgMCBzCis8MWMxNjAwMjQyNTM0MjkyMzI1MDAyNjI5MmIyNTAwMzIyZTAwMjIyNT4gNTAzNiA0Mzg4IDQgNjc5OSAwIHMKKzwwMDJlMmYyNTJkMjUyNDA1MDAxZTEwMjUyNjIxMzMyYjMyMGMwMDA2MjQyNTM0MDY+IDY3OTkgNDM4OCAzIDg4OTUgMCBzCis8MjEzMjJjMWY+IDMxNzcgNDYzMyAwIDM1OTQgLTEgcworPDA0MmM+IDE1ODkgNDk4MCAwIDE5NDAgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MTEwMzA5MTAwNj4gMjAzMyA0OTgwIDAgMjQ5NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMxMjUzMj4gMzE3NyA0OTgwIDAgMzQzMiAtMSBzCis8MDAzMjI4MjUwMDJiMmUyMzIxMmIwMDMxMjUyZDI0MDAzMTI5MzcyNTAwMzIyZTAwPiAzNDMyIDQ5ODAgNiA1MzM3IDAgcword3N0OmR1dGNoMTJpIFNGCis8MTEwMzA5MTAwNj4gNTMzNyA0OTgwIDAgNTc5OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMjIzNjMyMjUzMTA1MDAxYzI4MjkzMTAwMmMzMzMxMzIwMDJkMmUzMjAwMjIyNTAwMmIyMTMwMjcyNTMwMDAzMjI4MjEyZD4gNTc5OSA0OTgwIDcgODg5NSAwIHMKKzwzMjI4MjU+IDMxNzcgNTIyNSAwIDM0NjcgLTEgcworPDAwMGU+IDM0NjcgNTIyNSAxIDM2ODMgMCBzCis8MWMxNjAwMTYxYzFkMDUwMDFlMTAyNTI2MjEzMzJiMzIwYzAwMGU+IDM2NjMgNTIyNSAzIDU3MTMgMCBzCis8MWMxNjAwMTYxYzFkMWY+IDU2OTMgNTIyNSAxIDY2NjkgMCBzCis8MDQxNj4gMTU4OSA1NTcxIDAgMTk2NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMTAzMDkxMDA2PiAyMDMzIDU1NzEgMCAyNDk1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzUyODI5MjMyOD4gMzE3NyA1NTcxIDAgMzcwMyAtMSBzCis8MDAyMjI1MjgyMTM0MjUzMTAwMmIyOTJhMjUwMDA0MmMwMzAwMzEyNTMyMzIyOTJkMjcwMDMyMjgyNTAwMzAyNTIzMjUyOTM0MjUwMDMxMjkzNzI1MDAyNjJlMzAwMDMyMjgyNT4gMzcwMyA1NTcxIDkgODE4MCAwIHMKKzwwMDMwMjUyYzJlMzIyNT4gODE4MCA1NTcxIDEgODg5NSAwIHMKKzwzMTM2MzEzMjI1MmMwNT4gMzE3NyA1ODE2IDAgMzgzNSAtMSBzCis8MDAxZTEwMjUyNjIxMzMyYjMyMGMwMDBlPiAzODM1IDU4MTYgMiA0OTI1IDAgcworPDFjMTYwMDE2MWMxZDFmPiA0OTA1IDU4MTYgMSA1ODgxIDAgcworPDA0MmY+IDE1ODkgNjE2MyAwIDE4ODIgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGUwODEyMDYwZTBjMDYwND4gMjAzMyA2MTYzIDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMxMjUzMj4gMzE3NyA2MTYzIDAgMzQzMiAtMSBzCis8MDAzMjI4MjUwMDJmMjUyMTJhMDAyMjIxMmQyNDM1MjkyNDMyMjgwMDMyMjEzMDI3MjUzMjAwMjEyZDI0MDYyZTMwMDAyYzI5MmQyOTJjMzMyYzAwMjkyZDAwMzMyZDI5MzIzMTAwMmUyNj4gMzQzMiA2MTYzIDkgODQyNiAwIHMKKzwwMDJhMjkyYjJlPiA4NDI2IDYxNjMgMSA4ODI1IDAgcworPDM4PiA4ODI1IDYxNjMgMCA4ODk1IC0xIHMKKzwyMjI5MzIzMTA2MzEwNT4gMzE3NyA2NDA4IDAgMzY5MCAtMSBzCis8MDAxYzI4MjUwMDI2MjkzMDMxMzIwMDM0MjEyYjMzMjUwMDI5MzEwMDMyMjEzMDI3MjUzMjAwMjEyZDI0MDAzMjI4MjUwMDMxMjUyMzJlMmQyNDAwMjkzMjAwMmMyOTJkMjkyYzMzMmMwNTAwMWUxMDI1PiAzNjkwIDY0MDggMTEgODgyNSAwIHMKKzwzOD4gODgyNSA2NDA4IDAgODg5NSAtMSBzCis8MjYyMTMzMmIzMjBjPiAzMTc3IDY2NTMgMCAzNjUzIC0xIHMKKzwwMDA3MDMwNzAwMDQwZDAwMmQyNTMyMzUyZTMwMmEwMDIxMzEzMTI5MjcyZDI1MjQxZj4gMzY1MyA2NjUzIDQgNjA1OCAwIHMKKzwwNDE5PiAxNTg5IDY5OTkgMCAxODk0IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBlMDgxMjA2MGUwYzA2MDQ+IDIwMzMgNjk5OSAwIDI3MTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzMTI1MzI+IDMxNzcgNjk5OSAwIDM0MzIgLTEgcworPDAwMzIyODI1PiAzNDMyIDY5OTkgMSAzNzc0IDAgcworPDAwMmMyNTIxMmQwMDIyMjEyZDI0MzUyOTI0MzIyODAwMzIyMTMwMjcyNTMyMDAyMTJkMjQwNjJlMzAwMDJjMjkyZDI5MmMzMzJjMDAyOTJkMDAzMzJkMjkzMjMxMDAyZTI2MDAyYTI5MmIyZT4gMzc3NCA2OTk5IDkgODgyNSAwIHMKKzwzOD4gODgyNSA2OTk5IDAgODg5NSAtMSBzCis8MjIyOTMyMzEwNjMxMDU+IDMxNzcgNzI0NCAwIDM2OTAgLTEgcworPDAwMWMyODI1MDAyNjI5MzAzMTMyMDAzNDIxMmIzMzI1MDAyOTMxMDAzMjIxMzAyNzI1MzIwMDIxMmQyNDAwMzIyODI1MDAzMTI1MjMyZTJkMjQwMDI5MzEwMDJjMjkyZDI5MmMzMzJjMDU+IDM2OTAgNzI0NCAxMCA4NDI2IDAgcworPDAwMWUxMDI1PiA4NDI2IDcyNDQgMSA4ODI1IDAgcworPDM4PiA4ODI1IDcyNDQgMCA4ODk1IC0xIHMKKzwyNjIxMzMyYjMyMGM+IDMxNzcgNzQ4OSAwIDM2NTMgLTEgcworPDAwMDcwMzA3MDAwNDBkMDAyZDI1MzIzNTJlMzAyYTAwMjEzMTMxMjkyNzJkMjUyNDFmPiAzNjUzIDc0ODkgNCA2MDU4IDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDE1KSAxNQorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM0IHB1dAorZHVwIDMgL0MwMDM2IHB1dAorZHVwIDQgL0MwMDQwIHB1dAorZHVwIDUgL0MwMDQxIHB1dAorZHVwIDYgL0MwMDQ0IHB1dAorZHVwIDcgL0MwMDQ1IHB1dAorZHVwIDggL0MwMDQ2IHB1dAorZHVwIDkgL0MwMDQ3IHB1dAorZHVwIDEwIC9DMDA0OCBwdXQKK2R1cCAxMSAvQzAwNDkgcHV0CitkdXAgMTIgL0MwMDUzIHB1dAorZHVwIDEzIC9DMDA1OCBwdXQKK2R1cCAxNCAvQzAwNjIgcHV0CitkdXAgMTUgL0MwMDY1IHB1dAorZHVwIDE2IC9DMDA2NiBwdXQKK2R1cCAxNyAvQzAwNjcgcHV0CitkdXAgMTggL0MwMDY4IHB1dAorZHVwIDE5IC9DMDA2OSBwdXQKK2R1cCAyMCAvQzAwNzAgcHV0CitkdXAgMjEgL0MwMDcxIHB1dAorZHVwIDIyIC9DMDA3MiBwdXQKK2R1cCAyMyAvQzAwNzMgcHV0CitkdXAgMjQgL0MwMDc2IHB1dAorZHVwIDI1IC9DMDA3NyBwdXQKK2R1cCAyNiAvQzAwNzggcHV0CitkdXAgMjcgL0MwMDc5IHB1dAorZHVwIDI4IC9DMDA4MCBwdXQKK2R1cCAyOSAvQzAwODIgcHV0CitkdXAgMzAgL0MwMDgzIHB1dAorZHVwIDMxIC9DMDA4NCBwdXQKK2R1cCAzMiAvQzAwODkgcHV0CitkdXAgMzMgL0MwMDkxIHB1dAorZHVwIDM0IC9DMDA5MyBwdXQKK2R1cCAzNSAvQzAwOTUgcHV0CitkdXAgMzYgL0MwMDk2IHB1dAorZHVwIDM3IC9DMDA5NyBwdXQKK2R1cCAzOCAvQzAwOTggcHV0CitkdXAgMzkgL0MwMDk5IHB1dAorZHVwIDQwIC9DMDEwMCBwdXQKK2R1cCA0MSAvQzAxMDEgcHV0CitkdXAgNDIgL0MwMTAyIHB1dAorZHVwIDQzIC9DMDEwMyBwdXQKK2R1cCA0NCAvQzAxMDQgcHV0CitkdXAgNDUgL0MwMTA1IHB1dAorZHVwIDQ2IC9DMDEwNiBwdXQKK2R1cCA0NyAvQzAxMDcgcHV0CitkdXAgNDggL0MwMTA4IHB1dAorZHVwIDQ5IC9DMDEwOSBwdXQKK2R1cCA1MCAvQzAxMTAgcHV0CitkdXAgNTEgL0MwMTExIHB1dAorZHVwIDUyIC9DMDExMiBwdXQKK2R1cCA1MyAvQzAxMTMgcHV0CitkdXAgNTQgL0MwMTE0IHB1dAorZHVwIDU1IC9DMDExNSBwdXQKK2R1cCA1NiAvQzAxMTYgcHV0CitkdXAgNTcgL0MwMTE3IHB1dAorZHVwIDU4IC9DMDExOCBwdXQKK2R1cCA1OSAvQzAxMTkgcHV0CitkdXAgNjAgL0MwMTIwIHB1dAorZHVwIDYxIC9DMDEyMSBwdXQKK2R1cCA2MiAvQzAxMjIgcHV0CitkdXAgNjMgL0MwMTI0IHB1dAorZHVwIDY0IC9DMDEyNyBwdXQKK2R1cCA2NSAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTUwIC0yNTYgOTIwIDc2Nl0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIyNDNFMEVDNTkzNDRDRUYzNjk2NTBBMDM3QjQzODNCMDNENgorMjRDMzA2RTg3RUZERDQ3NzVFQzc4NzQyCitGRUZDRTQ0Qjc2NTU3NDQ2NkMKK0QxQUY3QTgyCitDRkUxOUZFQzA3MDU1MTcxODAzQkUzNUZCNjFGCitERkE1QTRDNzM5QTRFMzk1N0VCN0M2NjIzMzg0NEFDNTFBNkE5MUI0NUI3NUU2QUYxRjc2Nzc5QTRFQTM5RDU1NEM2NzFGMDM5RjZFQTA5MDJFRUFCQzEzMzYzQkREQTUxMDFDQTEyQkI4MTU2RUVDNUFGMEJGOUU2RkZENDFFM0U4Mjk3ODk1RTE1NTRGNTczMTRERTVFNUU3MEMzMkRBNDdGRDMwQTg1MjVEN0VFOUM2MDYwN0VEQjZGRDlGODE2QkJBOTQxNzI3NkY4NQorNjBGNUREQjQKK0EzOTQ4QjMzRUNENzA1MTVFRkIwRjI1RTc3NjYKKzIzRjczN0EwNjU3OEQyQzUwMTk3MUQyMUExQUQwREZCNDZDRjUyODc4NjkxODI0NDRGNDExRkYxMTgyMzAyNjY3MEI5MDdGRjM4MjY2NUYzOUY5NEMwOUUwRTFFNzZEQzBCMDJBNEJGMDlGQjhGMkU1QkU5MDlDRDRDNDE4MzNFQjIyRTBGRUE3NUE0MEQzNUQ3NzAwREUxMzRFNkM1NTZENkE3Q0U1MTJENjMyN0YxRjE3NUM0QTE5QzBGNjRBRTYxRTAwRENBMDNGOEY1RTY0QTVBMjM1RTVENzNCQUM0ODdFM0NFRjVDRUU0QTRDREUxQTY4REJCNUM3NworMjEyRAorMDhGQkY4MDc5QkU1NTMxQjc2MTc5OUUzCitDQUM3MUNFNworOTE1QkM1REEwREIxN0ZGRDRBQkRFNTExMUEKKzA5RjJGNzBGNjEwNkYzRjYwRUNDNDI0MkFFOTlEQzQ2NUZENDE4NDFFOUI3NTI1RDVDNEIzMkNFQTREQzZGREYxQTIxNjVCQkZBOEE0RUYxMTI4RkIyRkNDRkVDODc4RDc0RTU5QkQ0QTRGOUIwQkVERUZDQTlERDI2NUYxRkE4CitCRkI1QjFDRQorNzA1RThFM0M1QjYwMjQ3MjAwN0QyRkY5MDkKKzNDQkQ2Nzg4MDFGNTJBMzJCMjhFREU0OTIzMDI0RTI1QTg3OTU2NzZDQzU5NEJDNEVDODkzNEUwQTdEQjg3NEFFMDBERDUwN0RFNTMxM0Q0QjJEQzdBMTE2MzNBQzE1RTk5Njk5OUJDOENFNTAxREU1REMxMUVCNDZGNDM5NgorMkY5OURFRUEKK0VGMkMzNTdDQ0REQkE3Njc3QjYyMkRGMEI1Cis1QzEyRkQ5Mjg3RkQ3RDBBRUYzNEJCNUU1OEI1QTU3RjQ1RDY0NTAzNUEzM0I2MEUyOUQ2MEZCOTM2MDA1MTc4MjUxQUYxMDMyODcxMUZDMjQ4RTgzNTBFQUVBNDkzMzg3NTZCQTRCNkY2NzMwMEYzNDQKKzFDQjA0NDFECitFODAyQzI5RUJDNDU5QzA2QzlEQUYxN0M2RAorMkVCMUI4RDZEOTgzN0Y1OTE1NzBENjk0NzY5QTE1QzdBMjE4NTk1RjQ0NDE5QQorRDQwRjhBNEIKKzUxMkNEOEVGQTY1NzVFREQ5QzgxQkI2Q0U3Cis2RkFGQzMxQjE1OTg4OUZDMjU3MzE0MUU4MkExMjhBODlGRUMyQzMwRTRBNzMzNjI0NTM4NTU1RDkzOUUzOQorMUIyMDcyOUYKKzQ3QkM2QzVCQTIxOTVERjFFQTIzMUMzRDBBCitDRTc3NTVBN0RBQkEwMzM5NENDQzg5ODZDQUQyMjQzM0JDMjI4NzlEOEI3RDhCMzM4NzU4ODMzRAorMEMxNTRGNUUKKzU0MEZCRjEzRjRBRDE3MDREOTJFNEQ2RTJDCis0NzlCQzlDN0MyNjdGMEZDNkZEMzg3NzU3NTkxNTlDOTg1REJCOTJBQjhDOUM5QjcwRUYyNkEyREU0NjMxMTk4RUM5NUY3MDlDQUFDMzNGMEZFRDI0QjI4MjI1QjRCNUM0RDJBNTAwQzUwNzc2RDg3MUM0OEYwQjUyM0UyQzdFMEEwQTQ2QjA2Mzg1NUNDMzBGNDM1CisyNjlDQ0QyQworMEU0M0NENjlGODVCRTNCNzNCOTA2MkI4MEYKKzlDNDJGOTRCOTUwQkE1QjZEM0IxRDA1RDRFQ0EwNjg0NzZDRDlCQ0MwRjQ0Mjk3RkQ0QzVGQzYxQjJBMzA1Mzg0MkY5QjAxM0Q2NDlERjZFQUMwM0QxQTA3N0UxQUQyMDNDQzRFOUJDMTA1RjgwNzZGODk2MTFBMzlCMUVFQworRDg4RjE4RkUKK0QxNzdCNDMyMzY4MTIzNzJBQTgyQTU3OTU3CitDRjQ1RjQ3MEJFRTk2NkQ0MTdDOTcyODIyNTgxMEFFRDI4QkQzODI4QTJBODJGNUM5QUYzNjhBMkU0NzIxRTc1MUM4MTAxQ0RERDYyMzNFRTZFODY5OEU2RkJBMDI1MjFDM0UyM0NERERCQjE1OEE5NzM2QzA4MTBEQTdBNzE2REVFREJFRDJDRjUyMDg2QjQ4MzVBMEJCMENBOUU5NjkyMkZFMkY2RUFCRkZCNDExOUNFOEYxNDhCRDhGQjQyQzhCQgorRDg4RUI3NEUKK0FCNUZDMzUzN0E4RERDMzk0NjZBMEUyRjNDCitBMjE4NjlDQ0M0ODM2NTM2RDg3QkU4QzU4MjM2RTEwQTQ5M0Q3NjVGQ0I5QjdEQjA4NDQ1RkM4REJDQjIyOTY4NUZBODNBMjkwMTBBNDA5RkU5MzdGQjNERTA2NTRCMzc2RDc1RDExMzQ3OTAKK0E4REM2RDY3CitFMThBQzVFNDEzRjE3RDgyQzFFNzNDMDk4OQorMkUzRTY1RUJENDI3OEY3NTEyNDlGNzVEOThFMzRGNEIyNUY5OUY5OTFDODhFQkIzRTBDRTYwOTE5NDY0N0FDM0M4MjQyN0IzMjEwM0JDCis5NEUzNjc4QQorQkEwNTJEMDRCNjVFNDg1QTQyRjg5N0QzQjY0RAorMDc5QTNCQTgyNEEzQzE3MTcyODJCMkY5NjYzQzY5N0IwMDVCOUM1QTJENzRFM0E2MkE2MDM4NEI0RUQyMDNCQkIzMjE1QzczOEFBQjU0QjJCQkNENUY5N0Q0NzJERDlBMTIzNTM5NjRBMUUzNzI5NDJFNTc4Q0UyOUJFRUE4ODIyNjY5MDUxOTM2ODBFRDMzRThFOUM5MTdCNUZGNTUyNkJFRDI2NEQxNjdEM0YwQUY1MDRFMDY0Mzk2RDQzMEEzQ0YyRjlBQ0ZERjA5QzI1Mzc1NDYzOUM4MzlCNTk0NUQ0NzNDMTAKKzAyNEM5RDFCCis4NUQ2MEQwRjM3NjM1MjIxMjdBMDIzMTEyNkExCitDQ0I5RTdGNUM0MTM1MzY3QjA2QUNCQjYxMjE0OTdBNTNDOTY3MEZDQjAwNTI4MDVDNkQwMDQ1RkNFQzZBMjNGNzZBRTk1Rjg1MDcwNDkzRTM0RDg4QzczMzM1NkI4MkQ5RkNERTc3RjlERjQ1NjJDRjJGNjExRUU0QTY2QUNGM0JDOUZEQTUzNjgxQUU1OTdGM0JDQ0Q4M0RDNEYyMTI3NENGMjhEOUUwQTA0MEM1RUZGNTBFRjVCODFEQ0ZFQzI3MjZFMkQyMkJBRjRCM0FEM0I0NjM4NDBGNzEzNjYxQzhERjgxMEIxMThFRTEyMTdDRUY5NURDRkY4QjUKK0QwNzYKKzJECitCODU5MUM3QQorOUFBM0I4QzkxMjZDQTRGNEUwNEUyQjE4RkEKKzBENUE3QkFBMEE1RTQyREFGMDdFMERGNTlDRDEwMkYyN0ZDNUVDQzcwQThCNUM5Njc0OTNFRDI4RjdBREY1RTE4NTYwMzIxQjU1RjNCQkM3Q0VFRkI3RTJBNzFBN0E0MUMyMURGNEMyNjM0QjdCQTVBQjRFQTcwNjQ0MzNENzE2RDNGRDMwMjQ0ODhDOENFNUYzMzc0NjA3QjA5RDM0MzVEQTEzOUJENjk0Mzk2RTlCMjFCRTJGNEI1OTk2ODg1MzM5CiszODJDQjFFOQorQjRFRUNBQzM5ODg5NDQyMTg1MTM4OUFEQkIKKzVFMkMyQTM1MDhFQkJCNUQ2RDRFQjZDOEYwNzQyQUIzNjY1RUJCRjIyQTc1QjFGQjVERDI3QkE4QTExRDUwMTZGRUMxOTBFQUNEN0ExNzJBRDIxNjlFMjg4RjUyQkNGNDlFQ0I4RDY2MDA3MzYwMTYxNjcyOEM5MzZGQzRDQTkxQzQzOEJDM0QyNjEyNzcyODBCMDkyNzE0MEY2QURFODdDODYyODU0RTIxQzFFQjg3RTNBNUIwN0E0M0QwODNCRTZDREI2MAorQUUwNzA0MTAKKzE0NjM3ODc1M0U1OURCMURERDAyQTM1MjczMTAKK0EyNDA0OTA0MjlDOUE5QzcwM0NFMzQwNzlBRjgxQTM3OEQzNjQyQTFGQTNFQjE1Rjk2NzE0RjU4QTYyQTkyOUI2NUU1NEY2MkE3OUVBQkEwQTgwNTM2QTA3RkFFMzZCNTA5MkRCMkEwNTI1QUJDRDcxRjM4NzVEOTQxNjUyNEU1QzdGNERBQ0M0OTcxQ0YzMkRGRDAxRTQxQzYyNzUyNzgwRDBDQkY5RDAxODZBMERFNzY2MEI4REM1NUM2ODNCQzBEODhDNzg2N0Q1MkFBQjg2QjUwMkYxNTk4MEZCQ0Y4RUUyNTQxQ0MzNThGM0YyMTk3MEI4RkY3QkFEMgorMUE1ODhGRjUKKzVDQjVGNDMzQkMyQ0ExRjFBQURENjlFODc0MEMKKzU4OUQ2MDRBNENDM0M1QzQ3RUQwQTBCMDA3NEQ2NTAwODdCMzg2MDY2RTBGRjlBQkFGREYyMTJBQTQwQUUwMkM3MkQ0NjYwODQyOURGMzI5M0U5NkRDMzc1Nzk1QTdERDYxMzA4QTU4MDU1NkY1RUM4MTFGRTAyQzMzMkJDQUNENTA5REU2RjBFOUE4RkE4MEJFN0RGOEMwRjQyRDJBRTE5OURERTJBNkY3OUY1REIzRjQ0QUQ4M0ZFQzRDODVDMjM2MDVCNDhDQThENDk4NjE5QQorMzJDOTM1N0EKKzkyMzJGNjU1MTI0NjAxN0RGQ0VCQzdGRUVGQTgKKzQxQjIyNzQ1QzBGQkY4OUM1ODUzNjQ2OTBDNUUwNUY5NTA2QTQxMDhCNDg0NDk3ODdFRTI4OTZDREFCREIxQzU1RTU2QzgzMzIwNEJBNTk2QTZBRkEwNzdCRTcyQTVDMENGNDUzOTk0QTU3MEUyMUQ3RjQwMUEyMzcxRjI4MTAwMEQxNzUzM0MwRUZBRTU2RkUwNEY4MDAxMEJGMkY2RUIzQzUzRjU1QzFEQzBBRjg4NjExMDIyQ0E5QjMyQjBDRTk2RkYyODNCQTZCM0MyNEUxMEU0MTJCQzdEM0IzRUJDNDkyNzUwMjZFQzk4RjQ5NDJBNDEKK0NDMTFERDQ2Cis4Rjg3NkI3NjRBNDg0OEY2NjFEQjA5QzAzNjE4Cis4QUY4NjlFODdGQUQwODZGODYyNTcxMzRBMTczMkU1MDUxNDZGNDVFQUUxNjUyRUNFRkU3N0Y1Q0JFRkMwM0YyN0EwRDVFM0FBMzZCQTVFQjkwMjQ5Qjg4MEUxNDJDRTY2M0U3MDVDRENEN0JBNDI3NDNERDRERkI1MTM5OTcwN0QxNDY2MzdDREFDRjlGNjNBNkNENURFODQ1QTI0QjcyNTNENTBCNEM2NjlGOTE0MUNEODYyMDkzOTg1RjIzNTA0MzcxMUQ5QjIyOEE4Q0JBNzQxMUEwNzMyODhENDQ0RDJBNjQ5REQzRkFBMTE4Njg4OUMxODZCMEVEQUIKK0E0QkMKKzQzNzI4MTQyRUIzRkI2MjJFQkM2RjEKK0YzRjE1N0UxCitDQ0NGMzUzMzcyQjM3QTkzRkQxMEJCMTlFMQorOEI1NzBEQzg0MDBGODRBNUI2NDRDRDJBQzdBRjVDQTdCQUMwQUIzODVFRUE5RkMzNEI4QkY0RDE0QkJENjA3NUQ3MDZEQjE1REQ4OUUzRUYzMTNDNTdGRjU1NENBNkM0MzdDMjBDQzgxNzNBQkZEQzIxOEQ5NgorNTdEQzhCMkUKKzEwNTZBMUZENDE2M0NERkY4NjNDOTgxMUIzCitCNUVEMjBBRDgwMUE5NEZFOTNBNTJEQkU4NzBGM0UyQUI2RUJGODk5MDYxRDNBMEJEN0ZDNEYxQUQ1QzA1MUI3NTNDQTkzNjRDNUU5RkMzRTYzQUIyNEFCNzEzRTM0MDNDNjdFQ0RCMDM5QThDQzNEQ0I3MDUwRjc0QkE5MzU4NzYzQThBNTM3MzZGMUY2CiszOUVFMEJGQQorQjdDRERBMkJCRTEwMDdGNUQzNEUwRDdGMTc4MworRUFBQjgwMzE5MDg3MEZDQ0VBRUUxMkVFNDk2RUI5MjNGODY1NDc4MTczNUYzQTJFMkVEMjdGM0NCOThCMzM3MUUwNDRDOTk4RTM3RURCQUVDRUQzODkxQTlGMTRBMDNEM0VEQUFDMjg2MDIzQzkwODQ2NkNGRTg3MjE3RDI4MTU0QjU3MUFBRDA0OTQ0RERDNTY3QUE4NUQ3NUQ5Mzc3MDM1NzBFMEVDRkRBNDE0NDJGRUYxOTg0QzM3N0I3NERDRDAzQjAwRDVFQTgzN0I3MjMwRERFNjU2QjUyQzE3CitCMEE3MUJGMworQjAwRjczQjEzQkRERkY0MjMyNEZBQkE4MTMKK0ZEQTkzNUZBMTIyQzlERUZENzI2NTM4NzVGODhBNjBENDE0NTRBRTZCNzA4NEMwQUM0QjAyNkJFMTdGRjFCNEZEOUNBRDk2MzM5NDJDN0UxMzM5Rjk4MTdFQzA4M0FFOTM5RjFFQTlFOTc4OUVGRTUzRjlFMDdENDJEQkY0Qzk3NzIxMjI2QkJENDg5NjY0NUREODVBQUI4MkFCM0UwMEE3NEJDNTYxQTM0NDdGMjQ5M0ExQTc0NDYKKzI3QzUxOEVECiswN0U2MzY0NTg0QkY4MkQ2NURCQjc2QzhFQworNjdGNzEzMjgzNDI4QUQ4MTY2RTQxNTNGMENDMEQwREFBQzkxODNCODNDOERDQTAyMTVGODBFNkI3MzBEQUUyN0E2RkFDOTAyNjhFQ0Q2REVGN0E3MjZDQ0I4RUIwOEM5NDlGN0U5MUY3ODU0MDk3NEMyMjg2MjJBNzExQTEwQjYxMERFOEYwRkNDQ0Y3MjFEMzAzMDQ4QkY3NUY4Qzk2NTE2RDk4OAorMjI5Q0M4MEYKKzgyRjA2QkRCMUY1MkQ1REIzN0NGMDJERTlDNUIKKzZBOUVEMjUzNzZEMTdERUY0QjQyM0E3NEM3Rjg5MkZDNDM1RTgwM0RFNDFDMERGRTg0MDdENkY4MDIxNTNCQUFGRUZGNzYzQ0QzNzUyOEYxRUEzNzk3RjhBMDJCNkNERkY0MjYwOTk3Qjg2RDk1NURBMUFBMTI0NkEyRkMxREQyOTRBRjAxN0RBNjNFMEIzQzhBMkNBQUFBNjMxMDc2NEUyQzMxNjc4QjU2NzEyMjA1MjcwOTdBRUNFQjJDRDQzOTkxOEM5QzI4NUJBQTlBQ0JFNEI1CiszNzVENzM4MAorMDBCNDE3N0M5Nzk3MDg4QkY5OEVGQkZFNDQyMworNzJCMDhBMzE3MEY2M0RDNjQ2RDc5OThERjQ2Rjc1MTJDMEEzRDAwMjI2QTY5RDA3RjJGODc4NkNENjcwRjJFNDhFQTE2NTY5MEFGQTE1QkVEMzIyMTY0MEQxNDU4ODIxNDMxMDE5QzM4QTQ0QUJDQ0NBMTVGMUQ5MkE2NUNDQUJDQTg0NjE4NUU1QkEyRUZDOTUxNjhBREUzOTI2QUQzQTBDQzU4Q0FDMDVBRUQ5NjY5QTgxQzFDQzM2Nzk3QjA1ODcyODlBQjgyMTgxQjM4MzRFRjY0RTg3OTg1RTgxREYxQUZDNEIyMjlEOEMwNjdCMTdENDQwQkYzNzZFCis4RTA2OUZCQgorMzkwNkY0RkMyNUE1QTQwQzUwQ0M3RkY1ODJDOAorQUNGOUJGNTZCOTJDNUYzN0RFODg5MDJCODAzQjQ3REJFNjk1QzRERjMxMDA5NTVEQTgzNzQxOEQyNkQ3NkQ5RjlBNEUzNkQ5QTFDMkIyM0I0RjhBQ0NCMDRBNEIyQURBMDFDMEJBOTNBMUM5NEU4MDBGMTQyRkYzRUVEMkRCRUE3MUI2N0U2NThGM0Y5MTE0M0Q1MUY3RTQ4NkNBQTc0MDQwREM2OEI1QjQyRkZFRkQ4MEExM0E4QThCMjU3MEZDQUNFNUUzQTMwREEyM0RBNjU4MENBRTRFODg4NDM4Q0FCMjMxQ0EzMUYxNzM0MTBERUQ0RTNBRTI2MzE0CitBODdCCitFRTZCRDUKKzcyQjM2RDMxCitGMTE4NTBCMDkwOTE4MjlDQjQzQjAyMzdDOAorRTY3RDE3NEUxRTU4RDc5NDk3OTgxMzU1QjYxRTcxRjE3RjRGRkYwRDRGMjgxNDU3RkM5NkE5RDMxRDE5MjBFMDI3RDg5MUE5OUEzOUY2QTc5NjkzRkQxMDdBNTgyODhFNThERUVGQkI1OTJBNkFCMEMyODRERTlDNjRFMTlFNjBENjg4MjdGMTE4N0Y3NzJBNEI4M0Y4QUNFOTRERDgzRUU5CitDOThGNDQ1MQorMjRFNEE5NDc1M0U0ODRBQTAxNTg5MkQ1QkZEQworMzdBOTIxRDFCMTQzRDRCNkQ1Rjc3RkMwQzM3RDU4OTk0NzhDNTdENDExOTcyRTk2MTk3MjMwQTNCQzU3MDY4NkVGMkNENUUxRDc4ODlEMTg1QzlFMTk0MEM1MDg1Mzg2NzY0N0I3N0NGRkNCMTI1NUYxMUEyNzU2NzlGNjEyMUU3M0I5MzQ0MTI4RkZEMTJERDE2MEM1Qzg2QUUxQjhGQjgxQjU4RENEQjYwNUUwNTAwQkQwOEYxNkY1RTFEOTQ1QTc3MUVCRkVCMzczRkY5MjE0OTMwMDM1NTYyMjBERTdCOUI3MjQKKzQ3MTczOTE0Cis0QTQ5QkY4ODcxRkVFNUU3RDZDMTRBRTMwOAorQTlERThFMDYzMTVDMjM2QzVEMjgzNjY2NTQ3MzA3MThBMEI0NjZBMTJBMDBDNjQ5QkQzNTY3NjhFQjUxNjZDRUQwRjQyQ0MwQkE2QkI4NUZCNTMwCiszQTQ0Rjg0RQorRUJDODNFRDUyNEZDMzQ2RTRENEU1QTEzMTgKK0YxMkU2MTRBNDBFODEwMzExN0EyRDdDQTgzNDQ2MTBEOEE5RkJGQUYwNTI3NjA5RkVGQTU1RDA1MzdEOUY2NURDNzRBRjRCMjEwNTk4MTAzQkRFMDQ0OUMKKzMwNDdBNDE2CisxNDVDNjZEMkREMUE0MjhFQkNDOEFGOTYyNgorQjFERjA2MUY3REM1QjFERjVDNTZCMTRCRkY4QzVBMDlFNTU5RTkxM0FEMkUKKzVGMUM2MEJGCitDNDFGQ0M1M0M1NUFEMkMzMEQ4QTAzODc2NQorODhEMzUyREIwOTk5RENEMkNGNDY1RjQ1RjUxMTE1NjUzMkJDN0M0RDI4NzhGQ0VCMUY4MDMxRTZFODBGMzVGQTRCNkUxRUVCNkE2MUJGM0YwMENFQzAyRUVFNzAxOTlBRERDREY0RTFCQzdBQkNGNzQ4RDkKKzU1RjBDM0RGCitCMkQ4QThDRTZFREE2MzQ3OTRBOTBBQjA1QzU3Cis2ODUzRkVEMDRFODVBMzUyNTJBRjEyMTZFQzRCNkJBNDdDNUY0MDAyNDQ0RDFFNTMzQzRBM0JBODIwODJFODVCQjJFNUQxRTA2OUIyOEExNjlDNDAwMzlDRTVDQUFGNDVDMTRDRkIzQTBFMDdBRDYyQjM3MzBEN0VCRTk3ODUwREMxODE1QTM5QzI3OTJGMkU5RjZFNDA4MDEzNjBCNjlFQzA2MTA0QTJDNkM5MDlBNkFCMDU3MzNCQzIwN0ZFRDM3Mzg5NzVFQUY2Njg5M0NGRjkyNzdCRTlGNDJGMjc2N0NEQzY4MTZBREMwNTE2RjQ4RThENkFDRDJGRUUKKzNCMjkKKzRBRkJCNgorNTM1OUI3QjMKKzlGNzFDRDJDQzdFRTVDREM3OUNDRjNENDAzCitDODk5MkEwNzhDRDAwRDYzNjA3MjgxRjU2MTQwMUUyRUNDMzZBMTQ4MzRBREVENzMyOUFBQzQyNzJFOUQyNzc3NjdDRjk4ODVDN0Q4REZBNzY5MTYzQUFCQjQ1MzE0NTA3N0ExNjcyMzgyNUM3RTkyMTJERkM2Mzc2RkZGN0MwOTVGQzg4MjE0MkFFM0I5OTBEMTM3NjdGNDRFNjc4RTMwOUQ3ODBFODc5MjM4RDFDMQorQUFCRDQ4MjEKKzE5RjBEMUREQjhENTcwRkUxMEU3ODMxRDAzCiswOUZDMDZDNjYyQjNGRUQ1MjlGODk2OEZEMDU3NEFCOTI2RTBDOTM1QkUzRTI3OUQwODNBNDgyQ0ZCMkI2REI3RUI2MzBDNEU1OTY5RkMyNzZCQjBCQkVBM0NDMDBCMzEyMDZCOThBQkMyNjU3QjU5Mjk4OEU5MDI5RDgxMUFGODIzNjZDODM2QzZBRDBFNTE0OTNCMUU1RTRENEIyNUUyMUY0RgorRjAyNDJGNzIKKzdFNkM3RUQxRkU2QUY2NTI0QjI5QTdFNzBBRkYKKzVCMTRCMDJCQ0NEMEY4MkFGODQ0MTRFQkI0NTI3QThDMzM2RDVCMDQ3NEVCREM0NTgxRTNFQjQ3MUFCMEIwOEYxODczNDg5QTI0RUM3RjU0OTU3MzIxRTRCRjQxRDQzMTAxODM3Q0RDRTQxQ0JFREJBN0ZFOTdDMUExM0I4RTdENkZCQjAyOTYzMThERTkzNkQwOUM0NUU2NUY4MDQ5RTI1MDAyMzUyNjkwMTkzQUJERTI4RDI3OTI3MEJBNTlGOTJGNDExNzI2MEYzOUEyMEM5NTBGMjcyNDNFMTMKKzEwNjQxM0U3CisyMzFBNDVGNjlGNzM3NTVBNDIwNTU3RDkwMAorODVEOEFGQzA1NzA1MkMyRTREMEQwQkI2NjJGNzVBMUI4MkUxM0I1MERDNkFDQjZCQTk4NTg5NjI0N0U0NEEyMjI1ODdFQUY0M0M0Mjg0OURCN0EyOTNFQUE2M0M5MENCMDQyOUQ4MUZEMzc2QTEwRjgwNTIyRTJFQ0I1OTI5RENCQ0M0M0M3RUU3RjlCQjc2NzZGRUUxQjlCQ0JDQzQ1MzFENDIwMDc0OUVBMDVGMTYzOQorNURGRDgwMDQKK0YxMDQzMjc2OTMwNzJFMDM0MEYzOTlFMDlECis0RUQ1NkE3MzNCODlCNzQ0QkFDM0M3OUNFODRGODIxOUQxRjFERDM0MDg0OTg3MkQ3MTE1N0Y3RTk1MTUwRjU3MDM5NEU4OTE2OUQ5MEE5M0NBRTUyMDZCQUU5NzlERTdBNkYwRkQ2RDJEMkExRjM1RDIxMEQ0QTlFNkNDQkZGOEJDMDQwM0RCMEJGRUNGMzI3NUUzQTA4MjU5QTBDRkJBRjNGQzk4QzFGNUFFRUE2MjFGM0U0OEQ0CiswOTM0OTRBMAorQzEzOTJBOTNFNTQ5RDhBMjRBNzY2QjM3OEZFOAorNjY5MUJCMTIxNzUwQzY0MDZDNEM2Mzg5Q0ExRDNGOTYxNTlEQTlERkQ1MUYxQzg3MDZGM0Q1Rjc1MTA5NzkwNTFFQUQyMTUyMDE2RTVFMDUyRTU1MUM1NjE4OEVCQkVEQzExNzFFRjdDMzg0M0UyRTJCMDY4OUY1NENGRUMzM0NEMzg1QThDRDkwMjE2RjE5NzM4MzMwNEIyQTNBRjBFQTU0NEM1QTY4QTA4OUFGQTc5QzQ3RUZGNjk5OTg1MjRGREJGQTQ0NjFEODMyRjQ0QUIyNDUxMEFFMzI5RjA1MjRGNkY0MDc4NEFBRUM0QUJBREU3Q0VCMUZBRThBCisyNUZECis2RDFGRUUxOUYzRjU3MzlFMjBFNzA2M0Y0RTEyQjc2QUFBQjBEMjUyRTc3MUMyQ0ZDODc4RkEwN0U2NkREM0NCNjM1QzE4QzdEQjYxMjlCRjA4MjU4REMwQTZEMDkwCiszMUI1MzYwMgorM0QzN0Y4QUIyNzMyOTg5ODE1QzdBMzZENzE0NworNTIyMDc4QzlCNjQ5OTYzQUI5RUJCRjA1RjZDREREQzU5QTcyMDlENTlGNDA4Nzg2QzA3OUVFQUMwMjMwQUY1OTE5QURCRjQ0MUVBNjM3OURDNDE5RDFFQjNBNTExNzJDNzdGMzEyQjI3NjZENEU3RkI3NDYxNzVBNEMyNDRDNjEyOTFBODREQUFDOEM5REU3QjQzNDBFNTYxNkRDNzM0M0U0QTMyODhCMTBFQUYwQjZBNDNFMkUzOUFEREVDQUM1OUQ0NDIyNzY4NDVCNTMwQTVCQjAxODQ4MUQKKzZDODREMEM1CitDODhEMDgxNzVCRTM0QkUyRTJCQThFNTQyNAorQzhEMEE4OTk1OTY4RjMyOUIzRDU0NTYxRTk0RkI2QzFDNjYzQUY1N0ZBOTgxMDUzNzU2QjU5QzQwQkFENjkwRjk4MTc2RDZEMkZGRDUxQTM2OTdBMjFBNDQ1OTJGNkEyQjQzNTUxN0U4OUU5QTc5RUIxMDEyMkZDRUFBQjIyNjA1MTE5MkNFMkFGRTBEMTI4RTc5MEJBODk0NzZFQUUxMgorOEI3RUE1OTEKK0VDQzJENzJDNzEwRTU5NUUwMTkwMTBDNDMxCitFMkQ1QkQyNkJGOEVFN0E2MTcwQkY5MTMwM0RCQzIwMTBCNUExM0M0NDlEMThBRTVCRjlBMThGQjdCNjUwQzIwNTVGN0I1NDMzNjlBODAwRjdGQzgzNTc2RkUxN0FBOTg3QkFENjQ0RTY0QUMxOTlGMTkwQTVEQjIwMzU0NjRBNEVEM0VGOENFRUUwNTQxQzE4NTVGRjM5RjFGQkJBN0QzQzg0RDkwRDNEMzgyMTM4RDNEM0M5QUI0QkIxMUExRjUyN0QxMUUKK0U0MDMwQzg1Cis4MTQ2NUU0MkZDNjEzNEQyRjA2QjJGNTg3NTMwCitEMTIyMTRBMzU4OTYxRjc2MDRBNjE2QTE5N0UxQ0RCNDc5NzVGOTNCNjA5N0RGMkQxNURCNDM5RTMyOENFNjhBNzg1QzhFNzcxNDFENEJGMzFDNjUwMTJCRDdGMkFDRjA3QUYyNUQ3QkQ5OUZFRTJEOUExOUI1MjU3MEEyMkVGM0ZBMUJERjFFODk0REZDMDM2ODA2N0EwRUQ2MTRDRDlDNTBGNUMzMTg2QkYyMjI2MzQwNTZFNDhGOERFMEIwNDE0MjM3NEQ4NTA4MDg1MzExMTJCMzA2RjZGOUU5MzRGNUFCMjZEOUY1MTRBQUM1N0EwNUMwQTIzQTY5MjEKKzA4RDcKK0U3QjVEMEY3NzEzODk0NDJGOUNDM0E3RDg3OUM2NjE4RjhGNDQ3QUQ4N0I5NUQ0QkIyMTkwNkRGQkFGRjIwMzA0ODIwQUQKKzI4RDNCRUUxCitGNDhBNjI5RTc2N0EwQTJCMUZENDkwM0VFMQorNDNGMEZGODQ3NzQ1QkRGOUVGOEVCODRFQUZFNjkxRTc2NEJBQ0RBRkM2Q0ZCREUzQTdFOEYxQTU5RDkyMjA4QkZFQzQ5MjkzOEYwMjFGNjBENEY3OTAxMUY4Nzg1QzBBNEQ0OUUzRDA5QjNDCitBN0I4Q0M3QQorRTlBQUU4MDcyQzg0OEZDREMyNTlDRURENkIxQgorREZENUU5QUQ3QTI0NEMyQUU1QjRDMEZGRUVFNUVDOEYzMDY2NjI0MEI0QzM0RDNBNjdBNzJGMzQzNTBDMjFBMDQ5QTI5MjIxQUVFQjU3NUIzN0IyODJBMzJDRURCMUYwREY2RDQ5QzhCRDdERDEyNkQyODlENTlDRTE1QkM1MjBENDA0NDFEQkM1NzFBNUU1MjQ3QjY2RjJFNjU1NzM5NUI1MjBCMkM0NjdCNzU0QTIwOTBDNURCNTUzQTZERjM4MEQxMzdGRjlGRDE5REU3M0JEQjYzRTEyOUVCQTk0NzYxMURBRUNFODY4OERBRjI1OEM2RDY5ODE2MUY2CisyQ0EyCis4QkRFNzgxQ0E1RDk4OTJERUY3OTg4MEE3NjNBQ0E3RDVFOTMzODg5ODJEQzIyRUVFRDAwNDlGMzZCRjBERgorRTRCQUJENEYKK0I0NUZDQ0M3MkE1NjI2RTUzMTk3RkFDNDUzRjAKKzE1MjBFQUQxOTlEMTVBQjhDOTU2MjU5MDFFQUMyMDkwNTA5NDc4MjlENjUwRjRFRTQxREU0NzhBMzg2MzIxMEFBRjcyQTIzRTE3N0YzOUU3MThCQThGNkRGN0MzRjEyNUM0NDU0OURCNTkwMEMwNkY2QzM3N0FCQzVENjMzNjBFNzlFMzczNkNEMEEyRkNBQkFDQzA4OUYwMkUxN0U0MTcwNjZCNjIwMzFEMzM5NTI0M0EzRjJGRkJGRThFNUE3MjdBQkM0M0M1QkVCMUJFOTkyRTc5REM5QgorNjQ2MEIzNTIKKzZBQzdDREQzMEY3MTczMUJGOEEwQzBBQzM5CisyQTJGNzcyQTNFMkUyNzI3Q0NGQzY5MDM0Rjc4MzM4MDQxNEU3RDY1RDE5NUQ0QjkzQThDRkFCOTEyMzU1MTc5ODNBQjIyNUIzQjE4MzA3RTVEREE5ODc3MDREOEU1MjEzNUFBRkI4MzQ1NkNGNTA3MkJCRTY1NUFGNzVGMDY2RjlCRjgxNTI5MkI1MAorQkIyREFDMEQKKzMyOEM0NzQ5RENBN0UxNkJDQkM1QkM5MTY0Q0IKKzkzQkZGRjVDQ0ZGODkyNEY4RjA3QjdBOTBCQUI4RDk4NDcxMkQ2MkY5NzQ5N0VFOTZGMjA4RkQzNTU2OEM3OTA1MEMyMUY0QzRGQUNBQ0QwRThDNzRCMzQ0RTc1MUY3N0U1RTA3Mjk0MkFGMDREQTFERTUwMzcyMkMxMDYzRTlBOEJDRkQzNTUyNUEyOThCMUU4MEIyQ0RFQkI5MEY1OUU2OTNGMTJCNkI0NTVDNDA5RjEyN0QwRTI4OTBFODQ3OEQ2QzY4NTIwMjVGMzVDMzAxRDM2MEQyQzlBNkZCMEY0RTc4QUNBRUEzOUEyMjMKK0I2MkQ3REY2CitGNUU3OEVBMjhFRTBCMDFEMTEyQzM4N0QwMUU0CitGNTZFNUVDMTVGRjlBOUY2QzU2MDhBMzVDNTFFMjgxMzcwNkVBMUM4QjI2NDVDN0JGMTg1NUJDOTU5NDdEOUUwNDI4MzEyMUMzMTkyQkREN0EwQTAzNEFGOUUzQ0FBMkI0NzIxNTQ5NzE5ODdENjZDNzhENzlFRTJBQUVDOEZEN0I5MTQ2REUzNTQ0RUIyNTk2NkY1RTBEMjIyOTFBQTBFMTNDQkNCMzc4QkM4QzhDMTE3NzRCMUU1MjYxNzgzMDczNTQzNTU0QTE0NDFFMzhCMjZCMgorNTU0NkEwNkUKKzI5MDNEMThFQUREQjM1MTVFNjZDMDJDNzJFCisxMzY4OEJDNUEwN0YyNEVGNzc5NTk0OTI4RUU2RURGOEVFNjdDRDk1OENBRDNCQ0FFNzFCQUU4MkVFOTgzNENDRkRGNDVFMzIwMDQ5NUJGMTBBQTY4RUVDMzVFQzQ1QjBGMTFFMUQ1NzBEOUUzQjI3NzY2RTQ4REU0NTMwRTM1NjlGMDEzQTk3MzNGOUQwOTNGMTI3QjM0QzM5RTMzQjhBMzRCNjdEMDdGQkJCMDcKKzM4QTc3MDhECitFQTM3ODAyOUNCQTQxMTczNDhDMzc3RDIyMjE3CiszMTJCMDg3M0ZGRjAwQTBGNTAyNzRBRDlDQkNCODdBNDA2NEMwNjgyQzRCMkEwMDg0NjBBMDBCQUVDMjg3MkRDNEYzMjVDNzc3MDZCQTY4MUQ0MDUxQkVCNTQ2MzM0MzlENUUyNEM5NEM3RTE1NkUwREZDQjE1QzdFRURFQzE0Mzk1QzhGQ0YzMjEwMEE5M0VFMDk0NUQ4NjcwNTE2MjkyRDA0REY4MjdGNTg5M0YzNDVBOTVBNDc5RTNDNkVEODBENkUwQjFERjU2NTA4ODVFQTlCRUM4NDZDODk2RENFRTA3RTZEMzZCNzBCNENGNTI4M0UzOUFBOAorQUEwREI5NUMKKzQ1Q0M5M0FEMDRDMkNBNjUyNEJDMkIyQjNECis2RUQ0RUM2NkEyQTkwREFDRUMxQTFGMkMwRUJFMjU4N0FFMUE3NTE2RkEyOTFFODg0QkREOTYyMkQwM0Y1NUY5ODM5NTlGRkZDMEI1QjAyNkY0NDFEOUE2QUJBNUExQTMxMTU2Q0VBNTg2QTgxQjJGNEI4RjBGNzU2MUNEOTBBOUY0NTQ0NTQ4REQKKzI2QzFFMDBCCis4M0M2N0MxMUIyMzlDMUYxRjlFM0EwNUYwNQorRjIxRTEyM0M3Q0NENjJERTUzOEI3MUFBN0M0NkY0QUU1ODkzQjVDRDg1QTY0MzhGMTU0OTZEMkM2QzM3QzNGRTI4RkMxRjRCRURFOEYwNEY2NTZDMTQ1RTY1MUY2OTE0NUM3Q0Q1RDM3NDM5OEY5QUZBNjFBOTU5M0RCMkFCMTE0QTFCQjZDNTE3RTM1NzFEM0VENTAxMjJCRDVERkRCMDg5MjM2OEU0NkMzN0FDNTc4MDlFOUE4MTI2RkQxNEU1NkEzNQorMkVEODAzMTMKKzI4QjAzNzY4OUEwMDZCM0U0REZBOEI2REY1CitGOTU3MzREODBEQkNCNDQ3OTE2QTRCRDM0MDlCMjRCMUE4QjU4NzY2NTVDNjI4MzVDQTU5OUUwQjk5REVERUJFNzlDMDBFOUFCMEMwQTU3MjExMUNEQUI4M0QxMjA2QThFMjNCN0VDRURDMDVFQTEyMEM1QzRDMzJBQTI3MUQxRUQ4NEYzMjJFRTkwNEYwNjcwQ0FFQzIzQUQyQjkyMTY0NTFBRkZDRkQ1OEI1OTg0RERFCis2OEFCQjkzOAorRkY5NDE0NzI3RTAwMDY4NDZDQjFERTYxNjgwOQorQkI3Q0VCQTYzQTRBMTg2MTFFQTI5QUJENzYyMURDRTIyRERGODE4QUU5MDA2MkM0M0NDQjM3QkFGM0VFRTBGRTk5QUUzQTQzMDcwMDlBN0U2NTBEMzIzN0JDRDMwMUUyRTBCQkM4NjAxRjA1NzVCOTFCNjFCRTQ5NjVBQjVENDQ2ODUxQzYxMkE3REVCMkJENEM3NTU5NkFDNjQzOUU1NUM2OEFCMTVDNTU4NUNCRkFDQjMxQTFCQjRBRjEyOTM0QUJDNEI5MDg0NTQwNEFFRDgxNTRCREY0QUJBMjZDRTRFQjEyREVDMjY2REE1MjYwODg2NjYwQUNGQTM0CisyMzQzCis3MzAyNTFENzI0MUYzMTRGQkFCQjZCQkYxQzhCCiszODgyQzYxMQorRUVFOERFQkVEMTExNkU2MUU1QUIwQUIwNUM1NworNjg1M0ZFRDA4REVCN0Y2NEZCMTIwMzBCQjQzOUFBMTYzNzE4ODM3RTUyNDYxRDZFNEE1OTNDMjBCMjdCMjUxMEE3NjYwODM3ODVFNjcwOUQ2MTU3RTg4N0Y3RUZFOTg2QUVBM0M1OTc2NDU2MUFCNzYyN0Q1NDMxMDFERUNCRDY0MUI2ODg1OEU0RDRCODc4MTVEQkM2RjY5REQyRUMwNzQzRTJFQjk0Mzk3Rjk0NTUyQUYwRTBCN0FFRjI0MTVFM0JDODg1QTRCRjFGMDI5RkJGMDAzNzE4MkUxNkZEMUM0MkYzNkJFOTI4MDI4RTg0MkRFRjcyMjVDMDM5Cis2OEQ2CisyMDQwMjNDQzM2MEIzMTQ3MTg1NEM4OTIwMzY5MURENENDNkU3Q0IzRDM2MTE2NDY3OQorOEFFREFEODUKKzEyREI5Q0VDQjA4OTk5Q0FEOTVGQTM0MjRGMUIKKzc5OTVBOTcyMkRDNkQ4QUQ5QTk5N0RCN0U4RUM1MDVERDAwOEVCRDJGNTVCNTQwNjI1QzkzNTQ1NDYyNUQ3RkQzNkM5RkFDRTNDM0FGOTk0OTg5NjhERkE5OEVDMjI3MDA3MTJGNjBBMEY2OTBGQ0NCOTIzNTcxNzUxNjRBQUY0MkEzMzM3MzRGRTRENjVCNDgzNUVENEM1NzkzNzkyMzg1RTA5ODJDOTlBN0EwNjU2RkI3MDI3OTA5MDQ3Njg4MUM1NjQ2RUY4M0FDQUVCQTU5RjBCQUY2NEFFNEE3NjFEMTJCNjA2NzgwNDhDN0RBODNFRjE5QUZBNTNENQorQTIwQworOURENjM5ODEKKzlDQTlDRTJGMzE4MjE3REE3MzA5NTY3NjVECis2MzdCN0NBQjZCMDFCNTkxQzU4MDRGQ0U3OThFQUUwNDNDMzlGREREMzgxRkE3RjQ4NzcwQjBFQkEyOEMwRTQ0MkIxRTdFRjVGMDBEQTlCMzZEMTJEQzlGRDkyMzlENEUxMzgyNzAwMzI2QzYxQ0MwQ0Q5N0Q2RTA2NzU3NDAKKzhCOERDQjQzCis4RTA3RkEzRERCNDNEOTgzOTVGNjI4MUYxMQorOTJCRkZFREIxOTI4MDdEN0IyOTNENzQ0MTNGRkY0NzUyRjZFNTJGQzI2MEVEOQorM0VGMjgyRjkKKzA1MEU3NzBEMUJCRDIzRDYxODM4NzM0RTY5MUIKK0MxNkM1MDM1ODU5N0E4RjREMEM0NDgxQ0YyMzJBM0QwOTAwMTIwM0Y5RTJCNDM1M0Y1QzZBODNCNjk3OUU1NEI2NEM3MUY4OTBGRDExMzUwMjM5NkQ0Qzk0Q0I5Njc4QzkwQTVDNzQ1Rjc4NzNFN0VDNEE1OTAzNURFNjBDOEFFMjcyNDU0NjIxRDI0NUY1MDNGRUM0QzNBNDFCNjcxQkM2RTZDN0YyOTdEMjE2QURCOUJCRDQ4RDcyOTdGRjkzQzdGQTEyQThCQzkwNDY2QUE0OAorQ0E2RjNFMzgKK0Q3RTg5RDYwM0EzN0U3MkEyRDlCMDA0NEIwCis1MDc0N0U3REVDOEZCQzZBQTgzQ0RFOERGRjQ3OTcxRTU3MTk4OEIxMENGOQorQTMzRDhBNUIKKzQzMDVBQkVERTZFRUM3MjczNUNDNjRERkVDMTEKKzVCQ0RBMzU5MzVENjI1RkQKK0RGMzE5NEFECis1MEY1NEZBMzM2MDg0OUE2ODBCQTU0RjAwM0MzNTA3OEUwN0M3Qzk4RDQzQTA1MjI1NkZDNjFGOThEQjBGRTc5RkFBNQorM0VEMDI5OUMwNEY5OTIzNDI5NjgwRTk5RkM1QzRGODBFRTAzRTE0NjE3MzM3NkUxRkU1MjU2OEZFMkVGNDQyNTlGNEI5NTlCQzA4NgorNzVCRDZDMTU4N0E5QThDMDE4REM4MjU2RjgxQkJDNUIwRTQ5RkUxRkI3OUJGRTExNDEwODNCCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ1IHB1dAorZHVwIDMgL0MwMDQ2IHB1dAorZHVwIDQgL0MwMDQ3IHB1dAorZHVwIDUgL0MwMDUzIHB1dAorZHVwIDYgL0MwMDY3IHB1dAorZHVwIDcgL0MwMDcyIHB1dAorZHVwIDggL0MwMDc4IHB1dAorZHVwIDkgL0MwMDgwIHB1dAorZHVwIDEwIC9DMDA4MiBwdXQKK2R1cCAxMSAvQzAwODMgcHV0CitkdXAgMTIgL0MwMDg0IHB1dAorZHVwIDEzIC9DMDA4NSBwdXQKK2R1cCAxNCAvQzAwOTcgcHV0CitkdXAgMTUgL0MwMDk5IHB1dAorZHVwIDE2IC9DMDEwMSBwdXQKK2R1cCAxNyAvQzAxMDIgcHV0CitkdXAgMTggL0MwMTAzIHB1dAorZHVwIDE5IC9DMDEwNSBwdXQKK2R1cCAyMCAvQzAxMDkgcHV0CitkdXAgMjEgL0MwMTEwIHB1dAorZHVwIDIyIC9DMDExMSBwdXQKK2R1cCAyMyAvQzAxMTIgcHV0CitkdXAgMjQgL0MwMTEzIHB1dAorZHVwIDI1IC9DMDExNCBwdXQKK2R1cCAyNiAvQzAxMTUgcHV0CitkdXAgMjcgL0MwMTE2IHB1dAorZHVwIDI4IC9DMDExNyBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIwOSA3OTggNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY5NjM3MjE1MkUzMTYyODNGNDA5QTJCRTNGQjY3QjZDQjJECis2QzM1MTM4ODQ4NDAxRkNGOEQ2NDQxMUEKKzQxRkI0NEQwRTg1NUFEMzlDMgorMEJDRTVDMDIKK0IyRThCNzJDQjBGNUYzQTZBRDU0RkM2OTRFCitFMUNDREI5MjdFRDcxMjI2Q0JGMEMxQzA5ODlDRDJFMTY0Qzg3MjY3OTFERTc2CiszQkFGRTU5MQorMjdEQkFFQzMwRjg1Njk5RjAyRUJCNTg4NjgKKzg4RDRBNkM1Nzk4RDZERTE3REJBNTRCNkYwRkQxRDJDOUU1REM5ODg0N0MzRDg3RERBQUU0M0U2REY1N0VECis4RjM1Mzc0MAorRTU4RjA0ODgxNjc2Q0Y3MDYwRTBENkI1NzAKKzY1NTdCODMxRTEwQzFCMzMxREIxOTRBNzM1QkUxQjk2MTlBNEZDNThCNUQ1MDY5NTA1RjcKKzA3MEZENTE3CitBMUQwRjVDREE5MTA5MjU3NjMxRkEyMDNBRQorMzQxNUFFRUE5RkIzNjA0RUE3NDQ3RUU2MTY2QTUwODM5QUZDNDlBODg2NjZDQTcxRDU5MUI3Q0Y5OTA3NTQ2RTI2QkZGOTRFMzA1QTc1RDJENUEyQjYwNjMyQzk4MzgzNUEwQkY4QjIzNDc4MUZFM0Y4N0ZEQjQ0MTZCOTFCQzcxNDM4OUQxRjRDMDdGRjZBNTAyN0JCRDYyMDkxNkExQkRFODFFNTY4ODk0MgorQTc5OTgyRjAKK0IwMEZDNUNBM0I5QzlFMTlGNTFCNTk1NTI0NjAKKzQzQzg2NTlFM0U5NENCQzUyNkM5MUNCNkQ1NENENUM1MDUzQjVBQjg1MjE3NTdENjZCMDk4MjUwNjEzQzc2QTIwM0I0N0EwREFDMjQ4NTAwOUVGRkZCNTE1N0I2N0M0NTMwQUI4RTI2RDQ1NTMyNzQ5REIxNzQzQUFCRTRGRTk5ODE5QTY0Q0MwQTI0MTNBNDhFQjQ0NEQyOThFRDVGQkM1OThCNzEzMTkyQzhFNzkzODdENDEyRjEwQjBBQzQzQjJEQjIwMzlBNTMxMUNFNUQKKzAwRUY1REQwCitBN0Q2QjhEMDhBRkFCREZFQkJDODcwOTE0Q0YxCitENTIyMTIzRUNCRDBEQ0UzNEJCNkNGMTJBQjAyNjY0NEM0NEYxQzIxNThGMzE2QTY1QUQ5MkY5REFEN0VFNzc5NDYyNjNEQzgxOTc5MTdEOTI3RTBFMTc5NzJDNDhCRUM1RDM3RkNDNjA5Mjc4QUFGMDNCMkY3QUNGMEU0QzU2NTY0RUQ1QkU5RUVFNTI4RkVEMTU3REI3MjcwREJDNTZCRjE1MzVBRTVDRTI3MDZCRDQ3NkQ2ODU3NkUyQzlEQTdBNkM0NjlDRDBCMUVGMDlFQjU4NjAzREFBN0VDMkJCREM5RjI3RkNDNDBDNTZGCis4QzQ3NDk1QgorRjUyOUUyMkNBQkZDMjJCMTYzQjNGNjJBNDIKKzY2RTIzQTEzRThCQzE3MDdCRjMyNEUzOENFMzJCRUI5Q0VDQkU2RDQzMzAwNDYxN0ZERkI4REQ5MURDQjk5NDJCOTE4QkM4NTBBNkVENjA1MEIxNDE2QzkwMEZCNTc4MEExMDAxQjc4M0VBMjdBN0I1RTIyQTRGNTIyM0FDRDMxOUE5QkVGN0EzQ0RGRDNDODkwMDEzMDVERTEwNTAyRkEwN0UyRTE1ODY0RUIwNEE4RkRDQTU5QkE0RDc3MDMKKzAwODY3MUU3CisyNjlFMjAyNUM0RTVDRjE3NjEzNjhGNDQ2MjEwCis0ODRDMUFGOTQ1OTkxQTJCREY5QzBGQjRBRDYzRDAzNDM2NTEzRTMyOTI3N0JFRDA3QjY2QzRGQTY1NDQ0M0RDRTY1NzY0NkFFRURBQTgyOEIxQzU1NTQ2MDYwQkRFREFGQjc4NzZGRTc3MjY5QjFBNUMxQTdGM0MzQ0YzMDU5MDRBNUIyQ0E0QUJERDI4OTQ5QjIyQUY3MDUxMjBGMERDMzhCNTgzRkE1RTNFMDZFMDRDMUQ5NTBGNjUyM0M2MjRDNjk4OUE0QworQzU0QkM3RkYKKzUxMTRCMTU0RDVENzI0NDdERDUyNEMyQTA2OTEKKzFBN0ZCMzZFRjcyRjk0MzgyQTY1MTRBRTRDRTUwQUUwNjg5Q0M0QjI4OEJCNUIyODI4OTRGMUQ3NTM5N0JDRTdBNDIxNDVBQzQ1MkRGMEUyMkJBODA1NjE5NEFGRDk4QUIwOTQwRjk1QjM4QUVGNzI4NTIxODY5RDBFQUU0NzA0NEJGRDkxQzEzMEJBMjk0M0Y3REJCRjM0MTM2OEZDOTY0NjAyMzZGMDM2NEFGQjYwMTEyNjdGRUFDQTk3RDhFQTlGQzY1NTczNDc0NjVBM0MzRTBCMkVEOTBGMTk3NkJDMUQzQzE4OTkwQQorQkU1RDQ4RUIKKzg4RkFFODE0Q0Q4RkFGOEJBOTgwQTA2NTg0QkUKKzJFNkExREZBMDlCRUQxNjU3NEYwRjU0RjA4NDFFRTZDQjUyQjk0NjFEOTU5Q0Y0OTkxRTJDMjgyMTFDNTMyNUI2RjE5NjQxOTc5NDEzNjA5RkZFNUJGOUNFOUNFRTJFRDlBODcyMDg0MDFGQjYyNDgyNEM2QTIwRDM3MzVFMDkwRDIzNkI5QTVEOEMyNEQzNzkzNzNBQ0EwNTJEN0M5RjYyRkE4QTk0NTc5NUE0RDI1ODEwOTEzMjM3NjlGNUFBRTg0QUVCQTZEOTMxQ0VCNEY3QzY3NUMxNUQ5QkMwRjAxQkZBQzFFNDA1QUQ2Rjk4Q0U0OUIwMTM1REY2MgorNEFEMworMEVDNEUxMTUKKzFEODNFMkQwQjBFNzA4MkRBNjI2NjE5RTFFCitCQjcxRDYxNkMxOTFENkU5MDc1MkY0QkFEQTUxRTM5RUU1N0IyQzYwNTIyMkUwODQxMjJEOEE1OTA1NkExNDg4NDQ5Qzk5RjBBMzBDMkVFMzQ5Qzk1MTE3Q0JFQTY3RTQwODUzNzlDNkYzM0NCREEyODMzRTI4QUJEMEE3Q0NENERGMzgzQkVFNTdFODU0Njg1QgorNjNENjE3NzgKKzk5MUQwOUYzNkE0NkRGQzJFQ0FFMkYyMUZCOTQKK0MyRDgzREI4N0VDNEExM0QyNzE5NkFDMzg4NjZENUU2MjYwN0RBQUM0MDJCNTFEMkI3QUFERDg1NTQ4RDM3RTIxMkJCNzI5QzU4NjYxNTk2QjY4OUZENzdBMTMzMkVFNzg4NENGQzk1MEUxMzBGQkI1MDFGMzZCMTIyNjBFMjE1NDMyODBDRDQxMkYwREJFMjAxMDAxMkM5MjNFRjRFMzE3NDY1QTMyRTEwMTExOTU4REE3MUY0M0U0NjY2RDNCNUQ5MjM3ODEyQzU2OTg0CitDQzQzODY3OAorQUQ3MjJFNzRFRTA1NkIzQkI4QTJFOEVBMUQ0OAorMDE4QTRENEQ4OUYwNkQ4Rjk0MkMzQzI5NzZBNzdDMjAyOTExNEQ4RjIzODIzQjlEQzNFQjNDMTdGREU3RTIwMERFQzVEQzUzMTUzNDk2QzFEQTBBRDBDQTcwQkU0RjIzMDU3OEZGMjkzQkZERjREREM3QkE3NEYyNkQ4QzBENzQwNjE3RUM1NEJERTY5NzQxODgwNDY4Njc4RTEwMTdCNkUxOTkwRjdDNTYxMTNFMzJEOEVGODlGMTQ3OThBRUZCNzlENjQxMTFEQjc0REMzNUExQkRDNDEzRTYxRjg5RTNEM0VEMjJENjBDQzBENDQ5NERGQzBDMEMwRDc2Cis1Q0I2CitDNEFFNTNEQgorMjZGMTYwM0YKKzIwN0VFNTZCOTkwOUZENjQ3MTFGQjZBNUYxCiswMzgzNzFEMUIxNzhFMUJCMDExRjY3MjFGQzk5MDM3N0VENkMzNUUzRTVEMkU5NEU4OEY4RUJGRUEzMkM5M0ExRkQ2MDM0ODVDMDIzNDk1MzM2Q0E0OEI0MTYzODUyRDE1NTg2MzMyNjYxN0Q5RDNGRDdEQTAyNTBFRDY3NzcwQTJFNjIxQjdDOTM4MDExQTJEMzZCNDUwQkZEMTdDNzg1MzBDMQorNkVGM0I3OTgKKzVGMUNBQ0NDNUEzOEE5RTc1MjYwRjJBOUY5CisyNkE1ODU1REU3NTk2Qzk5OTQwMDM2QjlGOEQxMTk1NTdEQURGNjE5MDBFQTEyNEZCOTMxQTAxQjkwQTM4Q0YyRjgwN0JGNURFNURBRTVBOEVGMTE5MDI0MDAwN0I1NjdGRThDNEFFQkI5QzBFNDJBN0M1NkQ2QTA5OTQ3NzEzNEU2RjRDQjUzQkI2NTc3MUQxMEJCMjE2OUY2NkYwNUUyODkwMEE3N0ZGODlBQjFCMjVDNzA1RTM3Cis1REY1NENEQworODlDQzIzQUYwOTAyM0E4NzVBMjI0NEE4MTgKKzAxOUJCRTgxOTMzNkNGQzA0RTI5MTQ4Mjk3NDEwNzNBRDhGNjE1M0Q2MDJCNjY5NjMxOTA1NTg4QkI1RkJFODUwMDY0ODVDOEMwRTEyMzlBOTE1NzY4NkQ5QTBCNzE3MDQ5NDQzNDQ5M0E4QjY2Qjk2OTQwMUJBMjQ2ODhFMDhGRUM3NDY1QkJENEE0QzhDQzJBNjc0M0Q3M0VBODE1RDAyNjI5MDQ4QUNBQ0E1RTVBQjhDNTRBQzAzMgorMDhDODI0NkQKKzY3QjQxRTk5RTNDMTdGNzlCNjQzRkIxMkEwMDMKKzhFMTQ3OUU4ODFENDg1NEIyNjZBRDc4RTM0OUUxQjczODI3OThFMTRDNDBFQThDNTk2M0I2NUY4NTQ5QTgyRDBGMEQ0MTAwQTg2MTQyNDFDNDRENENDOUU3RENCNjNCQjczNzlCOEY2QUNENkZCOTQ1NDRGQjhFRUM5MkM0OTZCQzZDNUFGN0ZFODk5M0E3RTkzQzA3OTYyREEwQzVGMTE1RTEwOTc2QzA3ODlCRDA1QTRGODQ1RUVFNkMxMjFCNkIxN0IzMTAyMEQ1REJBQkQwRUZBQjk4RDlFQzQ0MEFGMzg4NEI2RDAwMUE0NzIwQUJERDkxOUIwMjA0RgorNzZBNAorQTQwRTA3QjkzNjBFQTQ3RUE2ODVCRURERDdCNzQ2RTgzNENDMDIyQkU5QzFFNTg2QUJBOUYwMUU3NkVDQTAwQkM4RTlDRUNFRjAKK0M4NzhEMUIzCisxMTNBNTMxNUE2MzVDMTI5NEM0MTVCNTFFOAorOUZDMUU0ODhEMDhBQTE3MjY1RjU5Mzg0OTcwMzdGMjFGOTY3MDlDQkU3MEFEQkVGOTMzMkJCQzQ3NTU1NEMwNEZFMjJCMUY1NkYyQkZFOTRFNkI1OUI2MUYyMjU2N0U1Mjc3RUNFM0RDRURFREE3MTM3Njg0RERGMjdERjYyNkIxRjQ1NTc4QTNGNzFBMjU5NzAzNjFGRUJDMjVECisxQjcwN0Q5QworNjhDOTg0RUMwMDZFNkE5MDFCNEVGQzVGQkZBNQorNjlEQjJERUUzMUE0NDU2MTlCRDFFQTE4OUJFOTEzRUREQkQxN0I3Q0EzODkyNzM1RTQzMzlDRjZGRUM5REFDRDBFM0MxNThEMjYyNkQ4Q0UxODRCMkZFNDEzQTQxRUZFMUQ3NDExNzlCRUEzMDNCQUEyRERBRkNBNTMxNjYwMzQyQ0Y1MzFDMUE5RjgwMEI2QkY4NjQyNEQ3M0FCM0MwRDZFMkYyOTU2RDRCN0YwOEJERkE3NEY4OTlGOUQzRUUyRDhENjY5MDgwREVGNTMyQ0M1NDJGQjBGQjk3NEJGRDQ0RERFMjY5NjgyNzBGRTE3RjQ3QUQ0MUIwRTM0CitBOEY2CitCODQxRjNDQzRDOUI2NkJFMTNCMDZBMzRFNjM0NTUwQUYzNzAzN0E2RkVEQkE2NEJBMTI4M0RDRAorQ0M4NTdCOTAKK0U0MjMzMTA1Nzk1Qzc5QjFGODc3NUVCQTFDMzAKKzYzNDk5RjI0QzUyREZEQTkyMEUwM0Q4RDE0Mzc1QzE5RjZDNDg1Mzg1OTcyQUM1QUExN0FEQTNEMDQ0RUVCNkNFQjZENjZEODRCRTY0NDAyODZGRDNENjVBRTkyOEE3MTJBODIzOTI3MkM0MzNCQjRDRjM4QjQ0RjVGOUM1MEEyQzYxMEVFNzYwQzMwMzBDOUNGQTZFMjFDRkU0ODA2N0VDNTYwRTM1MzdBRTYyODU5RDg1NjFGOTI0OTIwMDQ4NjE3Njc0QkExOTBFMDY4CitDQzUwMDE2MAorRDRBNTlBMTMxRDkzQzFDRDEwQ0Y2RDQwNUUKKzZDRTlDNzMyMDY5N0QwM0FDMjY2N0M4MzJGNDdDMkE2QUFGMkIyOURCQTcyMzhGNjFFRjVEQzlGQjI5NTY4OUVDQzhBRkY0QzEwOEIyRTY3OEExNTFBODE1NEUwOTNGMkJFNTFDRDJCQ0Y0QTFGMEFDNjUwQzlGMEI3NURDQThEQkZGRjlBMjFCNUYwCitFNUE5MzQ3MgorMkU5MTlFRTM2NTUzRjcxQzhCNDlEMjAxNkNDNAorMzI1NkExNkUwNjk0MDRBMzMyNDUyNDQwNTEzMzI4MDhCQzJFQjI2Qzc0MEQxQTU3QkRCMjI5Rjk0RDYyODlDRkREODdCMEIyQUNCRjVBNzc5OTA0QjU4MDNDRjk4NEY0QTA1QkU5MEIxRTY1NEFGNzE1Q0UyNEU4OTlFODc0MjZERUMwMDc3QzE2ODREQjA0OUI4Q0Q4MEM2OTEyNTkyMUQxNjA0M0UzM0ZDN0EyOUM4QzY2Qzk3QkY1NDdENTQ2NDdGNTZDODAyNzg0ODY0NzE5RUZCMTJBMkI3RTgzMDFBNAorNkU1M0MxMDUKK0EzQTg1NUU5MUMzNDhDNDQ4RUI0ODBFQjU1OTcKKzI5QkFGQjUwMjM4MkVCNDY4RTVEMDEyNzBENTc0MTA1MzdEQzdCMTZGRjE0NEQ1RjJDQTk4NUE5QkZCRkI1RTYwNzI5RUUyMjU0M0I1ODBCODNGRUI4RTFGNDFBMzQzOUFDRDVCMjk2ODEyRjZGODA4MkJEQjU4QTYzRDc5N0M5MTA2MTM5OTEwQzJGNDAzRThGRkIzNEQ4N0Q4MkQ5MjU4NUI4MjY4MkY1NDM1MDA5MDE1NTM5QTY4NkQ3MTQyQjY1NzlDNDc1RkRFOTQzMUQ2OAorRkYyRjQzREUKKzc0NzNERDc4RkVGMTEzQjBBMDVFRkZCMzEyCis2REU1MEM3MEFCMkI2QTNDQTI5QkQ2OEExNTQ5QUM5OEU0MDYyNURBNjFDOUQzRURCRjAyNzU2QzE1MzI5RkU2MUY0NTkwMzQ5QzNBRkE5OTJGMjMwNDBBQTBDNjNGNzkwMzFGNTgzQzlFMkQxQzk0ODFCOUIwRTc1MzdEODRGMDc3NTQ2MDI4OTc5MUZBMkFBRTJGNEIxQUExNDVGMjlEQTczQzVGMEQzMDQzRjlFRDEzCis5N0Y0RUVDMworMTg1Mzk5NTg2QTMxNEM2N0Y1MThEMDA2ODgzNQorRDY5QjQ2NTEyOUYxQTZBMTNGNjQ1MEFBODdEQ0M3ODE5QkY5MUMyOUQ4MTIyMkUxRjI3ODE4QUU5NTk1NTdDMzZCMTcxNzU2RjE2NTMwNUEyNjNFQTc5NEU1MkQ5OURFODlCN0E4MUZENUZERDFCNjAwRTU4NDhCMDAxQTg4MDQ1QkYzRjg3MzdCQThCQkNFNEU1NjlBNkYwQjA2NzE0OEQwNTQzMTg3RTYwN0NGQ0VEOUFEQkEwRDNEQzU0OEQ1RDk3OEJFN0UwQzJDMTQ2REY5MkMwRkY0Njk0NjE5MEU3Q0QwODdDOEM0M0I2OEY3MEMKKzVGM0E0NDRFCiswMTFFRDY3RkE0NEU4Qzc2MUYwNzI1QzAzQgorNDEzMkI3QkE4N0MxRkU5MEM1Mjg4RjkzOTBCQjEyQjMxNkU5QTI3REMxN0I3Mjc5NDk0NEMwREVCNTIzMDJFMDM1MTk2RTNCRjc3MzMyNzY1REUwNEU2NTgwM0FBMkZDQjJBNUNBMzREQTZGMzExNzUwNzc0OTMwMDhBMzA5NTAxNDJBM0FEMgorMEM4OUY1ODgKKzM5QTU4MTgxNjQxQkU3NDQ0QUJGNkZCNUM4CitDMUIyMEQxQTQ3Q0RDREJDODE0RTIxQkIxNUZBOEI0RDZBQTJERTFBM0Y3NzZGM0JCOTQxMEVBODA1NTI2QkE5QTBDOEQzRTcxQUIwNEE1NjFFOEM3OUI5MkM4ODAwNUYxREFCNkQ0N0MxOTQzOTc1RDQ5ODdBQjJBMTE2OUZCOEM2MEU2QTgzMEY5QjYyNzZEMTE4N0NFQjU2MEY1NDBDRDc4MkMxOEM0QzE1Q0ZCQUE5QkRDMQorOURCQjIzQzQKKzQ0QTkwODgxMDE0N0MyOEMxRTNFRUEzOUVGM0QKKzJBRkU5MzQ5QjE1MkMwQTIKK0VEMzk2QjM5Cis5OThFNjVEQkRFQ0EzMzEzQ0VBRkRGRjIxOTY5QkMxNzUyNjgyQ0QwMkRGM0FCRDBDRDYxMjk3RDg0OUM3OTE5OTJERgorNkEwRDFFNzQ4OEM1ODk4NDQzM0NGQUNDMzNDN0IyMTIxRkNGMzIwNTgwQUQ5N0IwMTlCOTUzRkExQ0NFOTk5RjdCQTE2NTBEODdFNworRjZGMDI0NEREQjBEMDM5NTQ4RDQwQzIyMUU1N0VDMzAwQ0NDQzcyQThGNEYzRTVENkQ1MTlCCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hpCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoaQorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGkgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ0IHB1dAorZHVwIDMgL0MwMDk1IHB1dAorZHVwIDQgL0MwMDk3IHB1dAorZHVwIDUgL0MwMDk5IHB1dAorZHVwIDYgL0MwMTAxIHB1dAorZHVwIDcgL0MwMTA0IHB1dAorZHVwIDggL0MwMTA1IHB1dAorZHVwIDkgL0MwMTA4IHB1dAorZHVwIDEwIC9DMDEwOSBwdXQKK2R1cCAxMSAvQzAxMTAgcHV0CitkdXAgMTIgL0MwMTExIHB1dAorZHVwIDEzIC9DMDExMiBwdXQKK2R1cCAxNCAvQzAxMTQgcHV0CitkdXAgMTUgL0MwMTE1IHB1dAorZHVwIDE2IC9DMDExNiBwdXQKK2R1cCAxNyAvQzAxMTcgcHV0CitkdXAgMTggL0MwMTE4IHB1dAorZHVwIDE5IC9DMDEyMCBwdXQKK2R1cCAyMCAvQzAxMjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE0NCAtMjM2IDc1NyA3MjhdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjlFQUJDNTNGRjdCMjYzNzY1Mjk2RDM1RUQxQkE0NTE2QkYKKzRCMkQyNDYyRkI2MkU4NzVDNUEzQUEyOQorNTdFREFFNTU5NEM5NEM2NjUxCisyQ0M2RTA1OQorMjhGMTMzMDJDMEE5MzBCQTZENzZEMTg4NTUKK0NDMTY4OTZGNjFDQjYwRDZDNzc3QzQwREYwMzJERTEzNDg3NTAwQzE5MTQ3M0U0NkJGQzkyQzg3OUIxNzRBNjBBNjYxNTJEQzAxRDA0NUJBMjUyRkExNjA1QkNGQUJGMEFEMkNBMDEzOEIKKzdDODk4NjVDCis4MzBBNTNGNjMxODkzMTlEOEM4MkZGMTkyNQorMUIxRDM3MzUzNkUxQTNBMzFCNzg3RjQwODc1RjkyNzk3MjgwNjc5QzJGMTkKK0VGNDBBRkU4CitGQ0M4ODc0QzdGRjU5MTAxRjBCNjc1OTgyNUNDCis0ODM2REQwMUQxRTgwMTkwODQzNTVDMDdFNjk2ODVBNUE0RDU0NTVBRTgwRkNFNkQ1MkM3QjEyNDU4MUQ3RDI3NDYzRTY1REJBODMwMTU1QUQ2OUUwQ0NEMzg1OTdBMDFFQjUwMTU4MDA1MTY4NURGMUY5Rjc3RTY2NThFNEJCRjQxODY2NTgzMjgxODY0RjFGODM4NzRENEY0MzdFRDI2MDZDNzkzQzI1QTUxNkNCNUEwOUQwQzQyRDJFMUI1NjRCMEFCRUZEQzZCRDVCRUU5QUJDNTM2NEFDOUNBMjczQkM3OERDRDgwMzhBN0U5NDhBN0Y3RUJFQTlFNzAKKzU4QTIKKzE3NDVBMEVCOTU0ODI3N0QyRjJCQTI5QzJCCis2OEYxQ0I0NgorREI1RUMwRjNEMjNBQjUyRjE5RDI2OUJENDEKKzgzRjE4RDE2M0Y4NzYzMkQxNkI1NTE5MEE5Mjg0RDdBMkUyNEQ1NkFBODc3RkNEMDg1Q0NEQUVCMDE5ODYwRjlCREQ1RDhDNTdCRjBDQjBCNDE2RUYyN0FBQTUwRDcxQTJDNjM4OUQxODE2QTY2OUQ5MjU4NDA5RjhEQzlEOTIzMkNDQzZGRTYwRTk1MEVEQzQwMjhCRjlENDZGNzg3MUVERDYyNTczQUE0NDkxNDgwRkNGRjg3QjZEQkEyNDg5QQorM0M0RDAxNjgKKzk4OEQxNkZDRTlBOTFBQjIyNTQ5NUVBQTY4NEIKKzhFQURDNUQxQTNDMjg5RkRGRDRBNTY4MDcwQjk4NTU5REZCOENDMEExMUREREMwNDNCQjAwNDRBMzAyRDJBRkRGQzUzQkRFMkIzQjE5RTk3REY0M0FCMTRDQzkxREZENjdCN0I1RUM5NUM5QkVGNTk3MzQ3RERBOTUwMURCNEI3ODY2RDI1QzQ1QkRCRTYwRDNCQkFEMDUzMUU2OEM4OUZDNjU3N0VBRjJERTE2NEJGNzI2MkE0OUEzRTc0RTlERTA3REI5Qjc5NzYKK0IxQjFBNTgwCis5N0YyOEJBQzhERkQ3NTA3NzE0MDQ2QjI5MzkxCisyQjMxQ0FGOTg1NjFBOTkzMzI0Q0Y1ODczRDJDNjA1NzEwNzlFRkJDN0Y1ODNCNUY5NEREMTNENUJGQzI1MzE4MTI4Q0ZFMEY5QzRFOTg1NUMyNUQyNjgxOUM3NDNGMjcyNUJDMzE0NEZEQjgxNTNCNUM4MjNDRjI4QzFDNkQyNkY0MjAzQzQ5QzMyNkQ2MUVFMjZBRERDRTQxQUExOTEyNkVBNTUwOTE5MTE5NTUzQkVBQzhFNzRCNDBFN0ZDQzc5OUM3MzRFNjZCNzAwODk1NzFBNERGM0MyRTk5QzI0RUI2RjJCQzU4MUM0NTBCMkM3RTM5QTEwMTkyRUEKKzAxMkEKKzlDNUJBMzE4MzEyODFGNjY5NEREMjM5RTMwQTM1RjhENDhDOEQ4QTA4OUQ1QzUyNjA0NTM0QworMjk0QkFERjQKKzIwM0VGMEZFMEU1MEI2OTE0QjBCOTRBRUIxRTMKKzExMzgxQUNDMDE3RUI4NUM3OTE5NzI3ODBFREI1MEE1ODVFOTZGODYyRjAzOEQ4MDVBMEQ4RjFFOTNDODI5N0E2MDlFQjZFREJDNjE1QkQ1Rjc5QkQyQzM2OTE1OEQ3OTYzNjk1RDNENjIwMDZDRDY5OTFBMzBEN0Y5RUQwQTkzMUI2RDUzRUY2NTREOTFCRjU3OTY5MzQzOTEwNUU3QzJDRkUxRkVENjc4MzUwNDIwNEY4OEFCMTA5NEIyMDhCNDk4RDREMkRCQjAyQjE2Mzk1N0NFNzQ5MDBBMUUzOUQ4OTY5NTc5RjAwQTFDOTkzQkJGCis0QTAwNDAyRAorOUIwQkEyQzlCMzRGRjNGOUU4QjE4MkEwMjI5NAorNEUwMkNCNkQ3RkQ5REVFMUU4QTcyQjQ4QUQ5RUNEMTkyRkVGNDNBMDBGQkU3QUJCMDc5NTI4RDJFMjhCRUU4NzgwNTdENzdFOTAyMzdGODYxQUZBODIzMTg5N0MzRTRFNUIzM0VBQkM1NTdBQkE2QkU2OTY3RjI2NjlGMTRFNkZENjg5QUMwQjVFMjUzMDBDRTRDMkI4MjM1MkM4Rjk1MDlDMEVGMDdBMTAxMTFBREYxOTQzODc2MjZFMDUzMzIxMzkwQTIxNjhGOAorOTBGMzI2QTAKKzQwNUZBQjQ2QUFGNjM4MjQ0NTZGMjRBMkNFRDkKKzFBNjUwMzJGQjk4RDQxQTg3QkYxRjZGODJFOUYxOUI1ODlENzFCQzBGQzg5RTJBMzNCNjNGNjJENjBGRjRFQzc4QTgwMDFFNkIxNjRGQjVEQzc5Mjc2NDBGNkIzN0MwQkM2OTRENzQyNjg4MUIyM0MzQ0M5OUExOUEyQjVGRUJERDc5NkRGRDNCQkNGRTQyMjVBNjQ2ODNDNzU1ODNCNUEwNDQzRDU3NTBDQTMzOTU1M0NDRTdENUMzRjBDN0VDNjdGODg4OUY1NTQ2RTgyQjk2M0MxMUQ0MkNGRkMzNkVGRDlGNUVFNjlGOThFQTRCRTk3RTVFNkYwMjQ1OAorQUFGOQorRTkzNDA5MzcyN0FCMzFCNjE2MUJEQTdGMUE4M0RGQ0ZBQUREMUIwM0UyQTFFODI0RDU2QkI3RDNCQTg5NjdERTc3MzVFMTVDRjM3RjhFRjBFQTgzRkU2QTQzQjI2NjBGMUFDQkFDNEZBQzAzNjk4NkE5MkI3Mzk2MkVBQUJFODQxNzUxM0EzNDExNDUzRUQzNjRGQ0YyCisxM0U1MEEzOAorQ0FCMUI1MzE3RDI4NzhBRUU2ODIwNTk0MDMwQgorMjY5MDdFNUUzMjU3QzBDNkRGMUQ4OTdDQUQ4MDJENTMzOTM0QzBFNUYxQjNGNUMxQjM3MUZBNTdBMDZBQjhFNkVFMTdDMEE3ODYyMTk3RkE4QkVFQUJGQTdCRUQ1MDNGNEQwNThCODQzODgxMzNEMkYwNjFEMzJEMDBEQzI2QzFCOEZFOUI3NzIyQjgzMzgyN0U5RTkxMjc1NDE2OUQzNTFENDhGRkY2Rjg1RTg4ODM1QjdGMTIxMkFFMDkyQTg2QUYwMURBRDYzQjM3ODM1MUI2QzMyRjU3ODAxRjYyNjZBNUMwRUY2QTJBRTdEOEREMTBBRjhFQThGRDY5CitCNzE5Cis2QzBCRkY2Q0U4NEJDQTdDMjM1QzNGRTgzODM3M0YyQzc5OUQwQ0I1QjZGNkQxNzQzQgorMjE2Rjk1OTQKKzk1NEIzOUQ4NkExQkZCMTBCRDQ4MjI1RTExCiswNjQwQTgxQ0YyMzBBRTQ3QzgyM0FEQjMyQTBCOTY1M0VGNzZCN0I1MUM1ODc1NkI2N0YyQTFFQjA0NTYyOTQ5ODYxNzRFMjFFMEQ4NzJCQURGRTU3RDE5REEwRUY5RTkxRTBCNjY0QzFFOUE3MjlBOTgzQ0UyRURGQzc4MDEwRjMzM0JDQUM1OEEyRjU1MjExNzhGODI5NTg5Q0YxQzkyRjAyNUE0NDExOUY5RDJGMzYwQjRBOTQ2ODU3ODBFCis5MUIxRDMzQQorOUMzNTkxMjE0NTIwMEQ2RTY2NEZFODBDOTlFQworOUIwMDk0Njc0NEJDNjIwNDZEODBDMDI1NEE2RTE0OTQwQkUyRUMxN0U4MzY0NjVBMzJCNTMxNEUzOUE1Q0YzMEE4NUU3MTcyMDA4RDM4NDI1QTUzODYxRDMyOTMyOTFEM0U1MTcwMUREQTdCOTY4MTBBOEE1ODYxMUZFMjcwMzc0Q0Q4MDI5NTBDRjA5MEEwOUUzMDZCQzNBQTNEQ0FDNENBQUUwOEJERTU5MzdCQThBNThGOUZENEFGQjVBRDEyMkMzNzJERTYyODJCN0EzN0NDRTQwRThGNDQ0RDY1OTY3RDI1QTY0NEU3N0E4Qzc1ODk4RTcxNDAxOEU2CitEREQ3CiswRUE5MDRBMzM4MDMzMzhBRkY0QzY3NjdCRDdBNjMxQkYwMjk5N0VFMEJDNDQ2RUExMTREQzg4QUYyREY2NkI5NTgyMzhFNTU5MkM2NUZDMEUxRDEKK0E3NzI0MjBFCis5MzY3MUEzMUVCNzE2RjI2MTI1MzNCQUUxQgorNzUwMzE4MzY1ODMzOTgzNDAwRTkwOTQzOTM0Mjc0RkVEQkE4QzQyQUM3NzdDMUJGMTlENTRCOEJCMDZFMDgxMzA3QkNBMzY0Q0Q5QTVDNzFERDdGMkRFNjIyNThENjM2QTc4ODkxOTkwNTIwODY4Mjc4OUE1NDFEOERDOTdDQzQyQ0VBMTM0ODcwMDVBQ0MyNzNGNjUxODkyNDYwNUQ0NTIxNDBGMDA2MTExNDQ2MkYzMEQzQTIKKzgxOEZERDY3CitCNUY3QzNBMzdGRkFBODg2ODE2OEMzMzhEQ0FFCisyODM5ODg0NkFBQUNGODVCQzdENEMxMEMwNjUyNURGNjQyNDM5NzA1QTU3QzAyOTRFM0Y2QjNFOEFEQkU2RDVGRDA1RTgxMzhGOTU5NDJCNDVDNUQ5RUJEODEwQ0UxRkJEOTZDMzQ0MTMxOTcxMkUxMEQ5QzU2QzA5QkNFMUI0MUM5ODYxOUUzQUFBNDk0OTA3MDc1QjQ0NjczQkI3MjcwQUZDNjg5NTYxNzE0NTZFRjE1MEVBMjIzQTZFODkyNDAyQjBFMjA0MDdGRkQzMjMxQjg4QzY3ODhENDFCOTExNzQyRTFEQkIyNTNDRQorMjVGMDRERkEKKzAwNTUzMjA3RkQ4MDg5MzYxRUMyQjgzMUZBCitDOEIzNUE3MDZFMjVBNTg1RkQyMzlGMTU4QTIwRURDRUEwOENGQzI4RkI1NTIzM0JDOTQ4MUJENDkyMzdEQjcwOUIwRDBDOUUyNDgyRDEwQTIwQzM5MDdGOTExQ0MwRDU1RjBFQTE2NDU1MkZFODgzMUQxQjNCMTM3RkVBQ0IzQkU4NzAwMTJBMTFFNUFGMERBMkY3Qjk4RUU2ODZDNTI1NTMxNjgwMjY4MTRGMjAKK0MxNDBCQzNCCisxMUIxNzhENUJGOEZDRTYyNTc2RTMxNkYyQTY0CitBOEY0NjkzOUU0RjA1NTJGNUNCQzRGM0ZGMEU3QzkzNjc0RkFFMTdGRkZBMTU2NDY5RDI2QTZGNUY0Rjk1NzY0M0M1RkYwODM5RjU2QTJBODdDNzQ1QTcyNUUyQjBGRjVFMTRGRjVCOTlCRjFDQUU3NDZBMTA1RjI5RUY5RTMyODI5RUVDM0RFQjhGM0E1NjgwQTQwRDREMTZGRENFMjYyN0E0N0VERTNGNkM5RTlCMzREN0MzMjQxN0E1NUQ0NjEwQUQ2MDlCM0JGMDc1MUVGQzdERTY3NDJFRDM0NTg0RDg2QzEyNjhGQUVGQzQ2NUE1NzI1QkU5RjFFMTIKK0UwRUQKKzU0NkYzMzlGMUNGNjkxMzMxQkFFNzZBRkJBNEYzNTFDMEM3QTkzQTI1RTRGOEIKKzNGQ0FGMTZBCitDNTVBRTU5Njk3RkYyMjAzRjhGQzcwQzNENQorOERDNDg0QkVEQTE3QTkzMDg1QjUxRkI2MEFFNDgzODQ1Njk3NDY1RTZEQTgxRUYzRjAwOEFBRTAwMjE3RTVCMzVGNkE3RUE1OTMyRjJEODlGN0E2MEZBMkE4REMyMkU0QTM3REY5ODNDRDU4RTA2NDhEQjlFNkE3MjRGNTQzMUYwQjUzOTUzNEIwMTg5QjU4MENGMDY3MjUxNUQxRDdGMUI0RTk0NUUyMUM5MzEyQzgzREFDCitFNzM5Nzc2OAorNzJGM0Y5NDA4ODQ5Nzc5N0M5NzAxM0ZEOTg1OAorQzgyMTlGRTI2RjJBMzlEOTYwNzRFMzE5NTYzQ0MyNzU0NTRCMDNFRUQ2MzY2OTczMjcyMkQxOUVGNUY4Q0ExMUIwNTE5RjEwNEVGNEVFRDk1REJGQzFCMTc4MkUxNkM4REI1MUM2ODlDNTA5M0IyNzVEMTM0MDMzQjBFRjhGODk3MzFEMEQzNTk4REJDRjY5ODQ5OUZCODE1MkRCOTY4M0EwRDY1RDQyM0U0QjIyQjYzQjY0MEYxQkVDOTRFNEM0QTZERDkyQTU5NjY5RUFGMkFBOEVEQjQ5Mzc2MkVFNzAxNEUwMkQzQUM0QzdGQUQwMENFMTMyN0E1OTg2Cis2MEQ5Cis3RDA4REM3QzA2NDY5ODc1MkQ0NUVCNzRDRjhCRURCRjBFRkI0NUE4QTAxQTg1NERDRTZDMjlCRDMzNkIzNENBRDdDNkY1NjFDMDIwCitGOUM3QjlCNAorRDZFRTVCNkNCNTVCMzFBRDg1OTcyN0ZGM0E5MQorRDZFRkY5NzEyMTgwMjc3OTJGQzQyNDUzMjdCQTFENDIxM0EyQUFFMDNDNEY4OTY2Mzc5NjkyNEYyNjUyQUUzNzk2MTFFQ0FDNjQ4QkUyNTBEQjVENDNGOTVCRUVBNTg3NURGNzhDRDEyOEU0NTk1RDE3Q0NGNDA1ODc4QkQwMTc1MzY5RDA3NDc1MkIzNDFGN0RENkQ4OTg4NjA0MUQ4QTk0Mjc2MzJCRTg3REREODEwODUwNkE5OUY3RTc0NDQyQ0Y1MjhGNkEzNTZGMzc0OUEyMEFCRDkwNTc1MzVBQUVBQjdDQ0IxNzgyMDMzQUExMjZEOUYwMDQ0QzMzCitCMkU2CisxNzE0OEU1MDYxN0Q1OEEzQkIKKzAyRjdEMzFFCitGMUQ4QTJGNDRCQjA2NjYxQjNCN0VBNkM3MDZDCiszNDMzOTc3RTQwRUU2NzUxCitDRTFBQUEyMQorNTQxOUU2MDRGMjhEOUUxOUY4OTQwM0U1REVFMDI4NzQ5QUFDODJCNjNEMkFCMDU4MkNEOEY2MEU5MUMwOEQ3REIwODIKK0QxMzc4MEFEQkQ2MUI3NEZENTZGMDBCN0EzQjQ1QUM2ODI5NkFDMkYzRDhCQkY2QTBFMEY3OTMzNzg2MkVFRUYwQzNDN0Y3MjY3NzMKK0M1MDc1MTMwMDQ4NTM1MEVCRDBFOTI4RUMxNkMwRkIxQTU3NzI0NDRBQ0NGNTZDODZENjQzQQorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyaSAxMi4wMCAvUFNPd3N0ZHV0Y2hpIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTRiIDE0LjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MWEyOTM4MzQyOTM2MmEwZDAxMGYwMTEwMjkzMjI3MmMzMTI1MzYyZjAxMmEzMzM2MDExOTI5MjUzNzM5MzYyZDMyMmIwMTFhMjkzODNiMzMzNjJmMDExYz4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyOTM2MmEzMzM2MzEyNTMyMjcyOT4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MGIwYz4gOTM0NiAxMzM4NSAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI2NyAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjY3IDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyNjcgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjY3IDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxNGIgU0YKKzwwYjEwMGYxYjEzMTYxNT4gMTI3MSAxNDU4IDAgMjA1NSAtMSBzCis8MDAwNTAzMDAwZDFhMTMxNTEyMDAwODEwMWIxNzEwMTkxMTAwMWIxNjAwMTQxMDBlMWExYzE5MTAwMDE5MTAxODFjMTAxYTFiMDQxOTEwMWExNzE2MTUxYTEwMDAxNzEwMTkxMTE2MTkxNDBlMTUwZjEwPiAyMDU1IDE0NTggNyA4MzY0IDAgcword3N0OmR1dGNoMTIgU0YKKzwxZD4gMTI3MSAyMDg2IDAgMTQzNCAtMSBzCis8MjkzNTM5MjkzNzM4MDkzNjI5MzczNDMzMzIzNzI5PiAxNDI2IDIwODYgMCAyODc2IC0xIHMKKzwwMDM0MjkzNjJhMzMzNjMxMjUzMjI3MjkwMDJkMzcwMDM4MmMyOTAwMzcyOTI3MzMzMjI4MDAyNTM2MjkyNTAwMzgyYzI1MzgwMDI3MjUzMjAwMjYyOTAwMmQzMjNhMjkzNzM4MmQyYjI1MzgyOTI4MDAzYjJkMzgyYzAwMzIyOTM4MzQyOTM2MmEwODAwMTUyOTMyPiAyODc2IDIwODYgMTIgOTQ2MSAwIHMKKzw0MT4gOTQ2MSAyMDg2IDAgOTUzMSAtMSBzCis8MjkzNjI1MzAzMDNkPiAxMjcxIDIzMzAgMCAxNzczIC0xIHMKKzwwMDM3MzQyOTI1MmYyZDMyMmIwNjAwMzIyOTM4MzQyOTM2MmEwMDM2MjkzNTM5MjkzNzM4MDkzNjI5MzczNDMzMzIzNzI5MDAzNDI5MzYyYTMzMzYzMTI1MzIyNzI5MDAyZDM3MDAzNTM5MzMzODI5MjgwMDI1MzcwMDQwMzgzNjI1MzIzNzI1MjczODJkMzMzMjM3MDkzNzAyPiAxNzczIDIzMzAgOCA4NTk2IDAgcworPDAwMmEzMzM2MDAyNTAwMmIyZDNhMjkzMj4gODU5NiAyMzMwIDMgOTUzMSAwIHMKKzwzNjI5MzUzOTI5MzczOD4gMTI3MSAyNTc1IDAgMTk0MyAtMSBzCis8MDAyNTMyMjgwMDM2MjkzNzM0MzMzMjM3MjkwMDM3MmQzZTI5MDg+IDE5NDMgMjU3NSAzIDM2MjYgMCBzCis8MDAwZjAwMzgzNjI1MzIzNzI1MjczODJkMzMzMjAwMmQzNzAwMjgyOTJhMmQzMjI5MjgwMDI1MzcwMDM4MmMyOTAwMjkzYzI3MmMyNTMyMmIyOTAwMzMyYTAwMjUwMDM3MmQzMjJiMzAyOTAwMzYyOTM1MzkyOTM3MzgwMDI1MzIyODAwMjU+IDM2MjYgMjU3NSAxMyA5NTMxIDAgcworPDM3MmQzMjJiMzAyOT4gMTI3MSAyODIwIDAgMTc5MiAtMSBzCis8MDAzNjI5MzczNDMzMzIzNzI5MDg+IDE3OTIgMjgyMCAxIDI2ODIgMCBzCis8MDAxND4gMjY4MiAyODIwIDEgMjg0OCAwIHMKKzwzNjMzMzEwMDI1MDAzODM2MjUzMjM3MjUyNzM4MmQzMzMyMDAzNjI1MzgyOTA2MDAzMzMyMjkwMDI3MjUzMjAwMmQzMjJhMjkzNjAwMzMzMjI5MDAzYjI1M2QwMDI1MzIyODAwMzYzMzM5MzIyODA3MzgzNjJkMzQwMDI1M2EyOTM2MjUyYjI5MDAzMDI1MzgyOTMyPiAyODQwIDI4MjAgMTIgOTQ2MSAwIHMKKzw0MT4gOTQ2MSAyODIwIDAgOTUzMSAtMSBzCis8MjczZDA4PiAxMjcxIDMwNjUgMCAxNTEyIC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBjMDYwOT4gMTI3MSAzNTUxIDAgMTY4NSAtMSBzCis8MDAwYT4gMTY4NSAzNTUxIDEgMTg4NyAwIHMKKzwxMDE4MWMxMDFhMWIwNDBhPiAxODgzIDM1NTEgMCAyNjc1IC0xIHMKKzwxMDFhMTcxNjE1MWExMDAwMDk+IDI2NzEgMzU1MSAxIDM1NzEgMCBzCis8MTAxOTExMTYxOTE0MGUxNTBmMTA+IDM1NjMgMzU1MSAwIDQ2MDUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxZjJjMjkwMDFmMTExYzAwMzYyOTM1MzkyOTM3MzgwOTM2MjkzNzM0MzMzMjM3MjkwMDM4MjkzNzM4MDAyNzI1MzIwMDI2MjkwMDJkMzIzYTMzMmYyOTI4PiAxMjcxIDM5NzQgNiA1NDcwIDAgcworPDAwM2IyZDM4MmMwMDMyMjkzODM0MjkzNjJhMDAzODJjMzMzOTJiMmMwMDM4MmMyOTAwMzkzNzI5MDAzMzJhMDAzODJjMjkwMDA3MzgwMDMzMzQzODJkMzMzMj4gNTQ3MCAzOTc0IDkgOTUzMSAwIHMKKzwzYjJkMzgyYz4gMTI3MSA0MjE5IDAgMTY1NyAtMSBzCis8MDAyNTMyMDAyNTM2MmIzOTMxMjkzMjM4MDAzMzJhMDAxZjExMWMyMzFkMWQwODAwMWUzMzA2MDAyNTAwMjQyNDI4MjkyYTI1MzkzMDM4MDIwMDM2MjkzNTM5MjkzNzM4MDkzNjI5MzczNDMzMzIzNzI5MDAyNzMzMzEzMTI1MzIyODAwM2IzMzM5MzAyODAwMzAzMzMzMmYwMDM3MzMzMTI5PiAxNjU3IDQyMTkgMTIgOTQ2MSAwIHMKKzw0MT4gOTQ2MSA0MjE5IDAgOTUzMSAtMSBzCis8MzgyYzJkMzIyYj4gMTI3MSA0NDY0IDAgMTczMyAtMSBzCis8MDAzMDJkMmYyOTAwMzgyYzJkMzcwZD4gMTczMyA0NDY0IDIgMjU1MiAwIHMKKzwwMz4gMTM5OCA0ODExIDAgMTUwNCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDA0MTYxNzFiMDQxNTEwMWIxNzEwMTkxMTA0MTUxMDFiMTcxMDE5MTEwMDAyMDcwMD4gMTUwNCA0ODExIDMgMzc4NSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBlMDYwYTBjMTAwNjA3MGMwZjEwPiAzNzg1IDQ4MTEgMCA0NzQ0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDIxYjAwPiA0NzQ0IDQ4MTEgMiA1MDk5IDAgcword3N0OmR1dGNoMTIgU0YKKzwxZjExMWMyMzFkMWQ+IDUwOTkgNDgxMSAwIDU5NDggLTEgcworPDI1MzIyOD4gMTI3MSA1MTU3IDAgMTYwOCAtMSBzCis8MDAzYjJkMzAzMDAwMzkzNzI5MDAzODJjMjkwMDM3M2QzNzM4MjkzMTAwMjgyOTJhMjUzOTMwMzgwMDM3MzMyNzJmMjkzODAwMjYzOTJhMmEyOTM2MDAzNzJkM2UyOTM3MDYwMDI1MDAyODI5MmEyNTM5MzAzODAwMzYyOTM1MzkyOTM3MzgwMDM3MmQzZTI5MDAzMzJhMDAwYjAwMjYzZDM4MjkwNjAwMjUzMjI4MDAyNT4gMTYwOCA1MTU3IDE3IDg4NTkgMCBzCis8MDAyODI5MmEyNTM5MzAzOD4gODg1OSA1MTU3IDEgOTUzMSAwIHMKKzwzNjI5MzczNDMzMzIzNzI5PiAxMjcxIDU0MDIgMCAyMDcyIC0xIHMKKzwwMDM3MmQzZTI5MDAzMzJhMDAwYjAwMjYzZDM4MjkwOD4gMjA3MiA1NDAyIDQgMzM0NyAwIHMKKzwwZjM3PiAxMjcxIDU3NDggMCAxNTE1IC0xIHMKKzwwMDNiMmQzODJjMDAzODJjMjkwMDM3MzgzNjI5MjUzMTAwMzQyOTM2MmEzMzM2MzEyNTMyMjcyOTAwMzgyOTM3MzgzNzA2MDAyNTAwMzcyNzM2MmQzNDM4MDAyZDM3MDAyNTNhMjUyZDMwMjUyNjMwMjkwMDM4MzMwMDI1MzczNzJkMzczOD4gMTUxNSA1NzQ4IDExIDcxNTkgMCBzCis8MDAzZDMzMzkwMDJkMzIwMDJiMjkzMjI5MzYyNTM4MmQzMjJiMDAxZjExMWMwMDM2Mjk+IDcxNTkgNTc0OCA1IDk0NjEgMCBzCis8NDE+IDk0NjEgNTc0OCAwIDk1MzEgLTEgcworPDM1MzkyOTM3MzgwOTM2MjkzNzM0MzMzMjM3Mjk+IDEyNzEgNTk5MyAwIDI2MTYgLTEgcworPDAwMzQyOTM2MmEzMzM2MzEyNTMyMjcyOTAwMzIzOTMxMjYyOTM2MzcwODAwMTczODAwMmQzNzAwMjcyNTMwMzAyOTI4PiAyNjE2IDU5OTMgNSA1NzA2IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDAxMDA1MGQwMzBlMGUwMzBmMDUwZTA4MGQxMD4gNTcwNiA1OTkzIDEgNjgzOCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDgwMDE2MzMzYjI5M2EyOTM2MDYwMDJkMmEwMDNkMzMzOTAwMzcyYzMzMzkzMDI4MDAzMjI5MjkyOD4gNjgzOCA1OTkzIDUgOTUzMSAwIHMKKzwzODMzPiAxMjcxIDYyMzggMCAxNDU2IC0xIHMKKzwwMDJiMjkzMjI5MzYyNTM4MjkwMDMyMzkzMTI2MjkzNjM3MDAyNTM4MDAzNDMzMmQzMjM4MzcwMDMzMmE+IDE0NTYgNjIzOCA1IDQxMjcgMCBzCis8MDAzZDMzMzkwMDMzM2IzMjAwMjcyYzMzMzMzNzJkMzIyYjA2MDAzODJjMjkzNzI5MDAyNzMzMzEzMTI1MzIyODAwMzAyZDMyMjkwMDMzMzQzODJkMzMzMjM3MDAzYjJkMzAzMDAwMjYyOTAwMzMyYTAwMzkzNzI5MGQ+IDQxMjcgNjIzOCAxMSA5NTMxIDAgcworPDA3MzY+IDE1ODkgNjU4NSAwIDE4NDcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGYwODE0MDYwZjBkMDYwNT4gMjAzMyA2NTg1IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM3MjkzOD4gMzE3NyA2NTg1IDAgMzQzMiAtMSBzCis8MDAzODJjMjkwMDM2MjkzNTM5MjkzNzM4MDAyNTMyMjgwOTMzMzYwMDM2MjkzNzM0MzMzMjM3MjkwMDM3MmQzZTI5MzcwMDI2MjUzNzI5MjgwMDMzMzIwMD4gMzQzMiA2NTg1IDggNzM4MCAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBmMDgxNDA2MGYwZDA2MDU+IDczODAgNjU4NSAwIDgwNTkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOD4gODA1OSA2NTg1IDAgODExMiAtMSBzCis8MDczMD4gMTU4OSA2OTMxIDAgMTgyNCAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMjA0MDkxMTA2PiAyMDMzIDY5MzEgMCAyNDk1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzcyOTM4PiAzMTc3IDY5MzEgMCAzNDMyIC0xIHMKKzwwMDM4MmMyOTAwMzgyOTM3MzgwMDI4MzkzNjI1MzgyZDMzMzIwMDI2MjUzNzI5MjgwMDMzMzIwMD4gMzQzMiA2OTMxIDYgNTg2OSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDEyMDQwOTExMDY+IDU4NjkgNjkzMSAwIDYzMzEgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwODAwMTQ+IDYzMzEgNjkzMSAxIDY1NjQgMCBzCis8MzMzNjAwPiA2NTU2IDY5MzEgMSA2ODAyIDAgcword3N0OmR1dGNoMTJpIFNGCis8MTIwNDA5MTEwNj4gNjgwMiA2OTMxIDAgNzI2NCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMGU+IDcyNjQgNjkzMSAxIDc0OTAgMCBzCis8MDAwYTA2MDAzODI5MzczODAwMjgzOTM2MjUzODJkMzMzMj4gNzQ5MCA2OTMxIDMgODg5NSAwIHMKKzwzYjJkMzAzMD4gMzE3NyA3MTc2IDAgMzQ5NCAtMSBzCis8MDAyNjI5MDA+IDM0OTQgNzE3NiAyIDM4NjAgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwxMjA0MDkxMTA2PiAzODYwIDcxNzYgMCA0MzIyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAzNzI5MjczMzMyMjgzNzA4MDAxYjM4MmMyOTM2M2IyZDM3MjkwNjAwMzgyOTM3MzgwMDI4MzkzNjI1MzgyZDMzMzIwMDNiMmQzMDMwMDAyNjI5MDAzZj4gNDMyMiA3MTc2IDcgODMyNyAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDEyMDQwOTExMDY+IDgzMjcgNzE3NiAwIDg3ODkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzZj4gODc4OSA3MTc2IDAgODg5NSAtMSBzCis8MzgzNjI1MzIzNzI1MjczODJkMzMzMjM3MDg+IDMxNzcgNzQyMSAwIDQzMjAgLTEgcworPDA3Mzc+IDE1ODkgNzc2OCAwIDE4NDcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGYwODE0MDYwZjBkMDYwNT4gMjAzMyA3NzY4IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDNiMmMyZDI3MmM+IDMxNzcgNzc2OCAwIDM3MDMgLTEgcworPDAwM2IyZDMwMzAwMDM3MjkzODAwMzgyYzI5MDAzMDMzMjcyNTMwMDAzNzI5MzIyODAwMjUzMjI4MDAzNjI5MjcyOTJkM2EyOTAwMzczMzI3MmYyOTM4MDAyNjM5MmEyYTI5MzYwMDM3MmQzZTI5MzcwMDM4MzMwMDM4MmMyOT4gMzcwMyA3NzY4IDEyIDg4OTUgMCBzCis8M2EyNTMwMzkyOTA0MzcwNT4gMzE3NyA4MDEzIDAgMzkwMCAtMSBzCis8MDAzNzM0MjkyNzJkMmEyZDI5MjgwODAwMjExMjI5MmEyNTM5MzAzODBkMDAzNzNkMzczODI5MzEwMDI4MjkyYTI1MzkzMDM4MDAzNzMzMjcyZjI5MzgwMDI2MzkyYTJhMjkzNjAwMzcyZDNlMjkzNzIyPiAzOTAwIDgwMTMgNyA4ODA2IDAgcworPDA3MWU+IDE1ODkgODM1OSAwIDE4ODIgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGYwODE0MDYwZjBkMDYwNT4gMjAzMyA4MzU5IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDNiMmMyZDI3MmMwMDI2MjkyYzI1M2EyOTM3MDAyZTM5MzczODAwMzAyZDJmMjkwMDA3MzcwMDI2MzkzODAwMmEzMzM2MDAzODJjMjkwMDM2MjkzMTMzMzgyOTAwMzczZDM3MzgyOTMxPiAzMTc3IDgzNTkgOSA3OTIzIDAgcworPDA3MTI+IDE1ODkgODcwNiAwIDE5MzcgLTEgcworPDM3MjkzODAwMzgyYzI5MDAxZjExMWMyMzFhMWIxMjEzMTgwZj4gMzE3NyA4NzA2IDIgNTMwNCAwIHMKKzwyMDAwMzMzNDM4MmQzMzMyMDAzODMzMDAzODM2MzkyOTAwMzMzMjAwMjYzMzM4MmMwMDM3M2QzNzM4MjkzMTM3PiA1MjgxIDg3MDYgNiA4MjQwIDAgcworPDFmMmMyOT4gMTI3MSA5MDUyIDAgMTYzMSAtMSBzCis8MDAzNjI5MzUzOTI5MzczODAwMjUzMjI4MDAzNjI5MzczNDMzMzIzNzI5MDAzNzJkM2UyOTM3MDAzYjJkMzAzMDAwMjYyOT4gMTYzMSA5MDUyIDYgNDYwMyAwIHMKKzwwMDM4MmMyOTAwMjYzOTJhMmEyOTM2MDAzNzJkM2UyOTM3MDAzNDMzMzczODI5MjgwMDM4MzMwMDM3MjkzMjI4MDAyNTMyMjgwMDM2MjkyNzI5MmQzYTI5MDgwMDFmMmMyOTAwMDczMTAwMjUzMjI4PiA0NjAzIDkwNTIgMTEgOTUzMSAwIHMKKzwwNzE5PiAxMjcxIDkyOTcgMCAxNjQ5IC0xIHMKKzwwMDMzMzQzODJkMzMzMjM3MDAyNTM2MjkwMDMyMzMzODAwMzEyOTI1MzIyZDMyMmIyYTM5MzAwMDJhMzMzNjAwMjUwMDFmMTExYzIzMWQxZDAwMzgyOTM3MzgwODA4MDAwZjM3MDAxZjExMWMwMDJkMzcwMDI1MDAzNzM4MzYyOTI1MzEwMDM0MzYzMzM4MzMyNzMzMzAwMDI1MzIyODAwMzIzMzM4MDAyNT4gMTY0OSA5Mjk3IDE3IDk1MzEgMCBzCis8MzEyOTM3MzcyNTJiMjk+IDEyNzEgOTU0MiAwIDIwMjUgLTEgcworPDAwMzQzNjMzMzgzMzI3MzMzMDA2MDAyZDM4MDAyZDM3MDAzMjI5MjcyOTM3MzcyNTM2M2QwMDM4MzMwMDMwMzMzMzM0MDAzMzMyMDAzNjI5MjcyOTJkM2EyOTM3PiAyMDI1IDk1NDIgOCA1ODU0IDAgcworPDAwMzkzMjM4MmQzMDAwMzgyYzI5MDAyOTMyMzgyZDM2MjkwMDMxMjkzNzM3MjUyYjI5MDAyZDM3MDAyODI5MzAyZDNhMjkzNjI5MjgwODAwMWYyYzI5PiA1ODU0IDk1NDIgNyA5NTMxIDAgcworPDI2MzkyYTJhMjkzNj4gMTI3MSA5Nzg3IDAgMTgyNiAtMSBzCis8MDAzNDMzMmQzMjM4MjkzNjAwMzQyNTM3MzcyOTI4MDAzODMzMDAzODJjMjkwMDJhMmQzNjM3MzgwMDM2MjkyNzI5MmQzYTI5MDAyYTMzMzYwMDI1MzIwMDJkMzIyODJkM2EyZDI4MzkyNTMwMDAzODM2MjUzMjM3MjUyNzM4MmQzMzMyMDAzYjJkMzAzMDAwMjYyOTAwMjUzMDJkMmIzMjI5MjgwMDI1MzIyODAwMzMyYTJhMzcyOTM4PiAxODI2IDk3ODcgMTUgOTUzMSAwIHMKKzwyNTM3PiAxMjcxIDEwMDMyIDAgMTQ1NyAtMSBzCis8MDAzNjI5MzUzOTI5MzczODI5MjgwMDI2M2QwMDM4MmMyOTAwMzkzNzI5MzYwOD4gMTQ1NyAxMDAzMiA0IDM0MjAgMCBzCis8MDAxNzM4MDAzYjJkMzAzMDAwMjYyOTAwMmQzMjI3MzYyOTMxMjkzMjM4MjkyODAwMjYzZDAwMzgyYzI5MDAzMjM5MzEyNjI5MzYwMDMzMmEwMDI2M2QzODI5MzcwMDM2MjkyNzI5MmQzYTI5MjgwMDI5MjUyNzJjMDAzODJkMzEyOTAwMzkzMjM4MmQzMD4gMzQyMCAxMDAzMiAxMyA5NTMxIDAgcworPDM4MmMyOT4gMTI3MSAxMDI3NyAwIDE1NjEgLTEgcworPDAwMjkzMjM4MmQzNjI5MDAzNjI5MzUzOTI5MzczODA5MzYyOTM3MzQzMzMyMzcyOTAwMmQzNzAwMzYyOTI3MjkyZDNhMjkyODA4MDAxZjJjMjkwMDI2MzkyYTJhMjkzNjAwMzQzMzJkMzIzODI5MzYwMDNiMmQzMDMwMDAyNjI5MDAzNjI5MDcyNTMwMmQyYjMyMjkyODAwMjUzMjI4MDAzMzJhMmEzNzI5MzgwMDJhMzMzNj4gMTU2MSAxMDI3NyAxMyA5NTMxIDAgcworPDM4MmMyOT4gMTI3MSAxMDUyMSAwIDE1NjEgLTEgcworPDAwMzIyOTNjMzgwMDM4MzYyNTMyMzcyNTI3MzgyZDMzMzIwOD4gMTU2MSAxMDUyMSAyIDMxMTMgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYzA2MDkwMDA2MTYxNTE1MTAwZjFiMDQwYT4gMTI3MSAxMTAwOCAxIDI2OTggMCBzCis8MTAxODFjMTAxYTFiMDQwYT4gMjY5NCAxMTAwOCAwIDM0ODYgLTEgcworPDEwMWExNzE2MTUxYTEwPiAzNDgyIDExMDA4IDAgNDE5NyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFmMmMyOT4gMTI3MSAxMTQzMSAwIDE2MzEgLTEgcworPDAwMWYxMTFjMjMxMTFkMWQwMDM4MjkzNzM4MDAyZDM3MDAyNTAwMzgyOTM3MzgwMDNiMmMyZDI3MmMwMDMxMmQzMTJkMjczNzAwMzgyYzI5MDAyYzM4MzgzNDAwMzQzNjMzMzgzMzI3MzMzMDAwMzkzNzI5Mjg+IDE2MzEgMTE0MzEgMTEgNjk2OSAwIHMKKzwwMDI2M2QwMDMxMzMzNzM4MDAzYjI5MjYwMDM3MjkzNjNhMjkzNjM3MDgwMDE3MzIzNzM4MjkyNTI4PiA2OTY5IDExNDMxIDUgOTUzMSAwIHMKKzwzMzJhPiAxMjcxIDExNjc1IDAgMTQ1NyAtMSBzCis8MDAzNzJkMzEzNDMwM2QwMDMxMjkyNTM3MzkzNjJkMzIyYjAwMzgyYzI5MDAzNDI5MzYyYTMzMzYzMTI1MzIyNzI5MDAzMzJhMDAzNjI5MzUzOTI5MzczODA5MzYyOTM3MzQzMzMyMzcyOTAwMmQzMjAwMzgyYzI5MDAzNzI1MzEyOTAwMjczMzMyMzIyOTI3MzgyZDMzMzIwNjAwMmQzODAwMjkzNzM4MjUyNj4gMTQ1NyAxMTY3NSAxMiA5NDYxIDAgcworPDQxPiA5NDYxIDExNjc1IDAgOTUzMSAtMSBzCis8MzAyZDM3MmMyOTM3PiAxMjcxIDExOTIwIDAgMTc3MCAtMSBzCis8MDAyNTAwMzIyOTNiMDAyNzMzMzIzMjI5MjczODJkMzMzMjAwMmEzMzM2MDAyOTI1MjcyYzAwMzYyOTM1MzkyOTM3MzgwOTM2MjkzNzM0MzMzMjM3MjkwMDM0MjUyZDM2MDgwMDFmMmMyOTAwMzgyOTM3MzgwNzM3MzQyOTI3MmQyYTJkMjc+IDE3NzAgMTE5MjAgOSA3Nzk4IDAgcworPDAwMzQyNTM2MjUzMTI5MzgyOTM2MzcwMDI1MzYyOTAwMzgyYzI5PiA3Nzk4IDExOTIwIDMgOTUzMSAwIHMKKzwzNzI1MzEyOT4gMTI3MSAxMjE2NSAwIDE3MzYgLTEgcworPDAwMjUzNzAwMzgyYzI5MDAxZjExMWMyMzFkMWQwMDM4MjkzNzM4MDYwMDNiMmQzODJjMDAzMzMyMjkwMDI1MjgyODJkMzgyZDMzMzIwZD4gMTczNiAxMjE2NSA3IDUzNDQgMCBzCis8MDczND4gMTU4OSAxMjUxMiAwIDE4ODIgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGEwNDEzPiAyMDMzIDEyNTEyIDAgMjQwMyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDIxPiAyNDAzIDEyNTEyIDAgMjQ3MiAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMjBhMDgwYj4gMjQ3MiAxMjUxMiAwIDI4NzAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyMj4gMjg3MCAxMjUxMiAwIDI5MzkgLTEgcworPDM3MjkzODAwMzEyZDMyMDkzMTI1M2MwMDM0MzMzNjM4MDAzMjM5MzEyNjI5MzYzNzAwMzkzNzI5MjgwMDI2M2QwMDM4MmMyOTAwMjczMDJkMjkzMjM4MDAzNzJkMjgyOTA4PiAzMTc3IDEyNTEyIDggNzYzMSAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgxNikgMTYKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNCBwdXQKK2R1cCAzIC9DMDAzNiBwdXQKK2R1cCA0IC9DMDA0NCBwdXQKK2R1cCA1IC9DMDA0NSBwdXQKK2R1cCA2IC9DMDA0NiBwdXQKK2R1cCA3IC9DMDA0NyBwdXQKK2R1cCA4IC9DMDA0OCBwdXQKK2R1cCA5IC9DMDA0OSBwdXQKK2R1cCAxMCAvQzAwNTAgcHV0CitkdXAgMTEgL0MwMDUxIHB1dAorZHVwIDEyIC9DMDA1MiBwdXQKK2R1cCAxMyAvQzAwNTQgcHV0CitkdXAgMTQgL0MwMDU4IHB1dAorZHVwIDE1IC9DMDA1OSBwdXQKK2R1cCAxNiAvQzAwNjUgcHV0CitkdXAgMTcgL0MwMDY2IHB1dAorZHVwIDE4IC9DMDA2NyBwdXQKK2R1cCAxOSAvQzAwNjggcHV0CitkdXAgMjAgL0MwMDY5IHB1dAorZHVwIDIxIC9DMDA3MiBwdXQKK2R1cCAyMiAvQzAwNzMgcHV0CitkdXAgMjMgL0MwMDc2IHB1dAorZHVwIDI0IC9DMDA3NyBwdXQKK2R1cCAyNSAvQzAwNzggcHV0CitkdXAgMjYgL0MwMDc5IHB1dAorZHVwIDI3IC9DMDA4MCBwdXQKK2R1cCAyOCAvQzAwODIgcHV0CitkdXAgMjkgL0MwMDgzIHB1dAorZHVwIDMwIC9DMDA4NCBwdXQKK2R1cCAzMSAvQzAwODUgcHV0CitkdXAgMzIgL0MwMDg4IHB1dAorZHVwIDMzIC9DMDA4OSBwdXQKK2R1cCAzNCAvQzAwOTUgcHV0CitkdXAgMzUgL0MwMDk2IHB1dAorZHVwIDM2IC9DMDA5NyBwdXQKK2R1cCAzNyAvQzAwOTggcHV0CitkdXAgMzggL0MwMDk5IHB1dAorZHVwIDM5IC9DMDEwMCBwdXQKK2R1cCA0MCAvQzAxMDEgcHV0CitkdXAgNDEgL0MwMTAyIHB1dAorZHVwIDQyIC9DMDEwMyBwdXQKK2R1cCA0MyAvQzAxMDQgcHV0CitkdXAgNDQgL0MwMTA1IHB1dAorZHVwIDQ1IC9DMDEwNiBwdXQKK2R1cCA0NiAvQzAxMDcgcHV0CitkdXAgNDcgL0MwMTA4IHB1dAorZHVwIDQ4IC9DMDEwOSBwdXQKK2R1cCA0OSAvQzAxMTAgcHV0CitkdXAgNTAgL0MwMTExIHB1dAorZHVwIDUxIC9DMDExMiBwdXQKK2R1cCA1MiAvQzAxMTMgcHV0CitkdXAgNTMgL0MwMTE0IHB1dAorZHVwIDU0IC9DMDExNSBwdXQKK2R1cCA1NSAvQzAxMTYgcHV0CitkdXAgNTYgL0MwMTE3IHB1dAorZHVwIDU3IC9DMDExOCBwdXQKK2R1cCA1OCAvQzAxMTkgcHV0CitkdXAgNTkgL0MwMTIwIHB1dAorZHVwIDYwIC9DMDEyMSBwdXQKK2R1cCA2MSAvQzAxMjIgcHV0CitkdXAgNjIgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy01MCAtMjM4IDkyMCA3NjZdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMjQ2MEMwMUUwQzgxNTZFNkUyRTBGQUNDRUU2MTgxNzA4NDgKK0JGODczMERCMzJCNUQ2ODA2MDQ3M0MyMworOURCQTcwMTA1Mzc0NkYyNjYzCiszOTU2MjRFRAorMEE5ODY4Q0M4MEU3QUEwODY2REEyRjZGRjk0RgorOUUxRTZGM0Q3NTFBQTBGQjI0NTJDMTIxNjU1REI5MjgyRDY0MTc5OTIzRDdGRDEyQ0M1MTQ2RUQ0QTVBNUY3MjUyOEM1NTAwNDYzMDkzM0U0M0NBN0U0NEJCNkQzQTBBQTk1MjRDNzRFRjU2RTYxRDZBMTc1MDRDNjRCMTJERjk4M0M1REJCNEYxQUNFQzcxMzY0QTUzMzdDMkE2OTU4NUNBODRBMkRFMDExRTkwODQyMEI1RUY3NDBGQTg4QURBREY3QTFGNkFDOTFDRjkKKzA2REY2MjUwCis3QTMwQzNFQTJBRjMxNjE5QzVGNDI2MTc5NTI1Cis5NjE4NzIwM0QxMzM4RUFBNDY2OEFGOTk5NDNGN0QzQ0Y4MEZEQzgwM0QxQzRCQjA3MDk5RkFDMTAxMjlGMUI0NzEyODA3MjA0NDU2NDg3MkZCODlCMDBFMEQ0RTU5REUyMTU5MzVFQkE5MjNFMTE5NzRERDc5RkJBMjIxRTQ5ODdFMkRBN0M5M0NBOENDNTY2QkUzODBCNDE3MzAyOUU3OUJEOEZCRDI4MUM3MUU0Q0QyRDM1QjY0QTJERUZCMjlBRDg2MDI5NUY0QTczNDQxQTg0RjlENURFMEU0RTBEMkRBQUJGOTVDRTEyQjVDRTE0NkNFRkFFRTFDQjcKKzIzOEEKK0UzM0MyNDU0QzcwNzE0NzE5NUYyQjFDRAorMjcxOEIwMTcKKzlGMTdGOEQ0QUM2NTlDNDgzRENCMkJDMTE1Cis0MzczMTYxOUYyRjFDOUY2OTYxQTk0QUEyMTc2MDdBOUU2M0ZEQ0Q0MkU4RkI4NkI1MzhCQ0UxQUUyRkUyMTMwRTZCRjZDNjdGMjg1QUFGRTk5MThGOUJFNTA4NDVDRTM4QkZENzQwRjc5Njc1RTc0MTgKK0RCNDlDRjE0CisyMDc3QTFFMTUwNEVGMUM2MzA1RkNBMjY2NQorMzlENzdFOUM0Q0UyRjc0NjMzOTI4RDI1MUZBQzdBQTk3NUJFRjMxRjREQTRENworRkVGNTMzRjQKK0JDNjBCNzc4NTczNjgwQTc2Q0NBNzFCQjA0CitEMDMyMzQ0NTE3REMwODczOUZBOTcyODFBMzI4NjFCMkU5NEYxREQ5Mjc2NTExRTQwRDRGMUFEOTdEOENDNgorRDgyMjg5MzAKKzYwRUJDNTJFRTE1RDMxQTkxN0ZEMEY0MjlBCiszRTA2REMzRUFBMEEzRDgyMDM2OUVFQjAxMzdEM0E4N0UyOTREQUM3RDlGMkEzQzZEMzhDRjA4MgorNEU5NzRERkQKKzdFNEE4Nzk1MENDNEFBNzhGRkUwQUNEOTUxCisxRUFGNDRFMTgyNDk1ODEyRkYwMkJDNjM2NDJCNzM0NkRGMERFRDI3NkVBRDk3RkI1MzJEM0VFMUM2NjgyQjVEMEU2OEI5NUEzNkNBQjdDRjFCQjIxQTUwNTRCNDU0RjZFNzJFMUQ0M0RBNDREQzg3NTU4MzZEOEVBREJGRTBBNDEyQjc4MjAxRjYwQUYxQUJEMjc1CiszOUU5QkE5OAorRTBFREI4RDkzNzQxREVCMTM4MDlBNzUxNEYKKzQxQkI2NTAyQTgxNDI3RDVEQTk5MzEzOTM5NUVCMUY5NUM2RTQzNzcwN0Q2NkUyRTk2QzlGRDE1Q0MxNUQ0NzU2NDc2N0MyRENCMENGNTFDQzE0MkUzNTAxNTdCMTBBMTk5NzkyMUQ1NUE1Q0JENkNCNDU0RjYyNkNGMTQ4MAorNTRFNjE3QzcKKzFGQkZCNkY4QzYzOUZFRkY0MzJGNDNFRjg5Cis3MjI0ODY3QTgzN0M3MTBENTIxQTdENTJDMzY5NjI1QUUwMjJCOTkyNEE4NTA3Q0Y4RkZCRDY3NzExNkUwRDZCNEFEM0QwOTc5Q0Y3QjdDQzRFODc3RDJCOUMyNkNERDI5RjMwNEE0NjdGQTFEQTFBREREMTQxQTU3NjRFRURBQzIzQzYxQUQwMzU0RDhDRkY1QzZDQTJDRDQ5MTg5Nzk4QkY4QjM0QUM3MzI5MEE4MEZDM0QKK0ZDNUIzQzA5CitCOUE5NzVENEY0NDU2QTZCRkY5MDk3M0NCNjQyCisxMDQzRjdDNzhGRTU4NDQxNUI1QzE2MzJFNzVCQzM5MDkyOUU1RUQ2QUVFMUU5OTRFQkREMjFFNTg4MUQ0QUMwQzNENUJFQTZBMjJBMzI3QzM2QjlCNTk5MUUzQzdGQTQwNENFQzVBOUREMjY5N0IxOEE5MTI3QjgwRjcyMzE2QkVEOUU3QzZCMzRBM0QxMzVFQUY3N0Y2MDFFMUQ0MDI2NDNBNDJCMDQwQzk1Qzc2NjJGQUFGQTMyMDE3QzcyMkQxMUY3MkY0RTBFREJEQTZENzQwQzZFNzBBNzkyNjgKKzIwQTQ0OTkwCis5NDk1N0UyRTdGRTBFODExMTZCNkMxMUZDQworQjk3MDg1NjU3MjcyRDAyRUY5RUQ5QzA0NzhEODhFODFGOUQyNjI3NEM0MjAyQjdFQjc5ODJFRDZDNzY0RDY1NzgzNjYxRThGMEUyMDI0NTVFRUVBRDQwNTlDRTZGNEFFMEE5OTExRjMyRkM2ODZDQzY4RUIKK0U0NzIzMDhGCisxQjlGQzNDNjk1RTI3RTE3MkRGQjU2MTQzQUMwCiszQTBGRDE4MDJBQjZERDJERkFBMkQ5M0MxQkIyNTQwNTIyQkUxNEUzNkU4RkU1NkI2NjA1QjEyOTA4OTBDQUU2MUEwQ0EzMzc4ODQ3ODIxMjZCRjAyRTgwRjFCNDUyNzE2Qjc5REUzNzU0OTAxRTdEMkIyMzUyNTJEMkJCQzA1RkQxOTk4OTc3RDM5Qzc5Qjg4QTVDMEU4NTFFMEIzQ0QyNjdGOTVDRjE4NkNGNDQwOTExMzI5NThCODEyNTg1N0M4NUUzRUMwOQorMEZBM0MyQzYKKzBCMTYzRjcwNDcxRkNBMjM3MzYzQjlGMDM2Cis5QjY2QkE2QzM5MkY1NTlGREU5QkMxNzI1NjY2MDJDMEVEQzkzRTQyRTY1MTIzNjQyRjU0ODE2RUU4NDY1QTZDM0E4RERGOUNFNTY2M0JGMTNEMzEyMDU3NUUyQUM1RTgyMzg0RkUzQkU0MUIKK0U5RUJBRkNGCitFMEZFQzhGOUVDM0Y1ODAzQkZFOTg3NTdENQorMzJGQ0Q1QURGMzkyQjNDMUE4NjVERTNFMjYzN0FEOTQzMDNGNjhGRUExQkM4MzgzOTYyQjYwOUYzNUYwMkEyN0VDNkFDQUREOEJDQjNDREU2MjZBNDYxMDg0QzFBRTUzQzI3QUUwMkZDM0NBQTlDNTVDRTNGNTcwQUFFMzI2QjEyN0JENDc3QTU4NTJDRTVGQ0Y5Njk0QjlGMzQyODYyNworMzMyQTA3Q0IKK0Y5REMyM0M5QzFBMURDNjc3OTE1MkQ5NEM4N0EKKzQyQTkxNDhFMzQ2NzNBQUYzQ0Q5QkVFNzI1ODI1MDRCNzI3NUE4NEVGQkM2MjUwOTA1M0QwQjc1QzQwOTg2QjE2NzIyNzFFRUNENzkzNTBDMjYxMkQyNzMzQjQ3NjgwREZFQzY5Q0Q2MUI0MzBDRTc5QUVCRjQxNjdDNUQ2NTc3RjY5QTZGNDQwMUU2MjFCQjU4OTRCOTcxODBBNDM5NUY2N0Q4QzA2NzRDMUNENkZFM0FDQkIzRTkwNTQ1MTc1QzM5QzIxQUIzRUUwNUE3QUY4NTA4MzYwNDcxNzc2NEU0RUZEM0JBCitEM0RBMDZCRAorOEU1Mjc0MUQ2MDgzQkExMkFGQzAxQUExRjRFOAorN0YxRjE4NEZDMDM5NUI1REY2REJBNDc0NkQwRjg1NjhFQUE1RkQwMTY5OEE3Nzc2OThENTNEMjJDQkYyNjQyOTU2RkFDREQ3Qjg0ODk0OUQ5QzM3REE5Q0Y3QkY3RkRBM0I2Q0M3NjYzQjI0NTFFRTk4MjMwQkYyQ0RGMDFBNTQ5RTc4NTgwMEM1Q0NDMTYzMDYyNkMzM0EzRDU4REM0MTZGM0FBODk5RUNBMDU2RDhGRTQzRTI1NDUyMTJGMkQ2ODYxMUQxNzIzQ0I4RjBDQkI2ODU2NjM3M0JDOUQzNDczOTZEMzZBODRBMzk2M0YxRkU0ODMyNUUyRjM2CitEOEQ3CiszMgorRUJBNzU4NjQKKzdDQzNBREZFMEI1NzREREQ4M0EyNTk4Qzk0CisyMjQ2M0Q4QkFGRkVDOTQ3MzM0RTYyRjdCNEI0MDU0NDBFMDA0QkY2M0JFNzAxMzNGRUZEODY0MEZCODAwRjdEQjY3RTQ5OTcxRDJDNUEwRkMwOUVDOTE2Q0ZDMEQ0OUVCM0M5OTRCMzYzODY1NTcyOTA0N0Y0N0MwMEZGQTAzNjEwRDZGMEQ2N0M4QjhEMTE5QTlCNjVGRkJDMzgzREQ1NENFMzAwODAwNkRCM0E5RkUxMTcwM0NFMzJFNTVGNDdERgorNERDMjRCQTcKKzFBNEYwQkIxNjg5QzNCNkM1N0I2MUY4RTc2Cis0MUY1OEFDMUI4MEVCNzk1MzlDNDk1QURBOUNDODRCRkEwMTcyMjYzNUNBMEM1QUM2MTJCQ0UwNkFDOTVFMEQ0NTA5Q0ZGNUJDOTZFQ0JFODQ1M0NDQzE1MjA4QUZGQjc3RjAxRUY1RTQyRkM1QjQ2MDk4OEI2OUI1OTU2REFGMDRDMkQ1RDk5MTRDRTc5MTQyOEY0MTQzNDA5NjNEM0VERDBDMzBENTNCQTA0RkMyRjNCRDgyNEMwNDg3ODRDRTVFMjM0Q0EKK0IyQThCMzM0Cis0MjEzREU1OTczMTgzNTBDQTVFMjM2REQwMjIzCis2REY3MkYxOTVCMDM0NDlFOTk4MUM0OTgzRkYwMzg2OUFBNTdCRjI1MzFEN0RGMzIxMTJEM0I0MDk1MzlBQzUzOTYzOTlDNEUwM0I4NzU2MjJCMDFBMjc3OTBDREM5QkE4QjZGMzI4NDU1NTc1MDgxNDMzNUJDM0I2QTBEQTY1RDI4NENDMDk3ODI3Rjg0RjE5QkU4MDNBMkI5MDg4ODVBQTIyRkI0ODg1MzE1ODQzNTg1QzlDRTE2RDU4NDU4ODdGMzNGRUEzN0UyQjJCNUVGQjI0MDJBNjhEQTFCNjdGMThDOUQzQUIxQzM4MzZBNjY4RUY5MEIxN0E2MUIKK0ExNzI0RTNFCitDM0Y2QjY2RkE0MEIwMUVGMzcyMDM4NjI4OUVCCitEN0NDQjYzMTNEQkE5NUU5OTNDQURCODFGNTJENDI2NzJGNTlGNjNERTQ4QUZDQ0U4QzQ4QkM0MDgxNzEwNTNFRjlDOTcxOEY3OEIwQjg4RTZGQzhBRkFCMEJCRTEyMzRGNTE2NDMzQzY3NzRBMjRBMTU4NEM1MzcwNDVGMEY4M0VGMDE0N0I1NjREN0IzQUQzRDdGQUI4QzdDOUYwRjRBMUNCRTczRDFEQkMwNjJDMUUzNzQ1NzFBRTMzOTY2NDRFMTM5OEY5NDUyMjI5NUQ2QjMyMUY0M0RDQjRFQTdCRThBRkRCRjBCRDY3REVCOUFFRTUwMDUwQ0U0OUQKKzY5OUIKKzAyMzMzMjU3NDcwRjQ1RDFBM0FFMjkKKzZDNzY0NERGCitFNzE3RTBCREY1MkE5QzhCMDgzNDJGRTA4NworNkMwNjg3MzJCOUEwNjAyOEZGOTA4MkVDODlBQjcxQjM3OUI4NDhEM0I5QTZCRjNCQ0M1RTE1MDdCQjkzMDU2RTAwMUZGQzBBNjcwMUE0MTY1NzFBMTg0RUVGQTg5NzdGODY2MEZCMjJFNkQ4MjU5Njg0RDg4RQorRkJCRjkyQTkKKzVBOEQ4QjY2RjZFQTgzQjc4OTlCNjE4NTI5CitGN0NEOEVBMDk3MTAxMEU1RTU4QTgzNkJGNkJFM0ZGQkQ3NjdCM0MyNzNFMzA0RUQ5RUQyNDQ5MzQwM0U5NkU3MDQ3NTMwMjNFRDAyRTdCN0E0RDkwQTkyRTY5OUY3OTk1NTM2MTI2OEY4NUVGRDM2MzlDNDdGNzE3RTBGMjY4NUM1RjI5QTM1OEFDRkY5Cis2MTA0NEZGMAorOTMzQjhGQUIzM0Y1QjM0MENCMzQyMkE3RjQ1OQorQ0Y0N0Y2RjYwQjk1REM4QjYxQkEyMkRERjBEQjg3MjM1NjNGNzE3N0IxMDFCMjUzNDk0Rjg3NzBDOTVDMjg1NjY1NDUzN0IzRUM1ODU3NDMwODdGNDE4QThEQTQ0Njk3RTVDRUI3NDI4NzNDN0RDOUJCQkZGRDEwMTM0NTYyNTZCMzc2NUU2MjFFRTQxMEUxNEM4N0Y1OUU2NzU4OEM5MURBRDZGRDFBOTIxMzY4QzJDNkZGRjcxRUMxODBEQ0I3NDNEOUM3MUZCOUNGRkMyQUZGOEM0Qjk1ODM5Q0I2CitERjJGNEYwOAorRDVENUUwQzgxNDY2QzREQjlCRDJFMDA2NEUKKzU4MzJFODYwNkQ0OUMxMDA1MTlBRjM5QTcxMDE1RDZFQkM1NTNFQ0Q2N0JDRTAwQjlBQ0M4NEE3RkU0N0IzMUJDNzlDNEZEREU2QkU5MjRFQTU5RjFENkRDMEJGRUMyQ0NBRUZFNzdFMUY4QTlFMTkxQzcyNzAwODcyRjBBQTQyOUI4OEQxOTU5QzJBRjdGODFFMUNEMTJGNEVBRkYzRDc2N0FFNUQyQkI4MjI4MjE3MTZFMzNCMDEKKzVFQjlCMzQxCis5M0NGOTBDRTY1RTI0NDQzOTY2QUVBNzY0NQorMURGNjJFOTcyODQ0REQ1NzIyQTdERDcwMjA3MUUxMDZFNjRDNDg5ODAwNTRCMDU2QUFCMzg2NERGQ0MwMUU0QjA0NTYzQTU0MjkzRjVCQjI2NDJFNDNDMzZDQTlCM0UzQzA0RjlFQ0MwN0JCNDYwREU5RTA1NUE4NjNGNjkzMDA3NDFCNUI4NDc5QzI1NEU0QTVFNDU1NkU0NjAxNzI4RUI2MTUzMworOTYzNTJBRjUKKzJFRTUxMDQ2MUM3N0Y5OUJBMzAzNTlFNEMyMkMKK0RBOENGOEI4OTQ5MDExRjk1NzcxODREOEE3QTRGNzFEMEUwQUMyOTNDNkQ2NTZFNDBFOTc5N0Q5MjRDQzYzMUZBNjYxNjBDRkM1QkJBMTk3QUY1NUIzRjhEQTBBMDlCNEIzNEZFMkZEQjc0RTMwMjAxRTE2MEFCRUNDRURCNUJDQjBGNDI1NkI4NzdCRkU4MjlFQTE5ODRDOTI2QzAzMkVGOEVBRUYyNTkxNTNDNDM1MjM2QzU4Q0JGRjkxMEZGRTQ0NjUyOTRGMTA2Q0E4OEQ2QkUxCis5OTYyNjNBOQorMTJFMERFRDE5MzI4NDREOTYyNDhGN0I3Njg3RgorMTY4MUQxMDM3MzM5MjQ0QzUwOTQ1OThGM0I1MDA3RUM5MTQwRjJCREJCQ0QwRjVBRkQxODlGNjJGMDEwNEU5MTQzRDMzNkNFMzFGODY1NUFBRDREOTRENEIzRjU2RjQyMUJCREExMDAzNThBNUIzODkwNkNCMUEwRkE1MzREQjMzMzJDQjhBNTkwNDAxRDMxMzQwNDY0MUU3Q0FFNkFERjhBRjJGNUQzQjdCNjNGRDNBQTY3OTYzOURBMTAwMEQ3NUI0OEEzMEE1RTYzMzkyMkVCQUVBQTQxRTQzNzFEMTA0OTVENEMxNjBCNzhDODZCNzdFQTNDMDU5RjQ1Cis3OEE1QUYyNAorRkNCMjlDNjI5MjRFQTdFNzZENDBDQ0UxRUI1RgorQzNDQjgwMTQyNkZFQ0E0RDMyMUQwOEI4OUVFMEE4OThFNjA3OEQ3NjYxOEMzRUMyMzAwQ0U1MENBRDZCNUU3NTEyMjg4RjBFMkQ1RjkxMUI4REE0OEU3NEFFRURFOUQyRTJEN0NBRERGMUE0NjU5NUQwNkYzMTg1ODc0RkQ1ODVBOTFFMEI3RTk3NkI3NzgwODI1NzI0MDA1OTFFRjgzMzYwQkVGMjREMkQyMkREMEY3NjFEM0QzRDRCREIyRDUxQkNBMkY3RUQ0RUVFQkZEOUVGNDlDREZBQkNFOUUxREJDMzgyNzM5QzRDMzI5RDZDNzkyN0JGNjU0QkEwCis4MTBECitEOTVGQjcKKzQzMDY4NzQxCis4MUQ4QzNCQUVFMzVCQTA0NkU4QzZBMzIyQworN0ZCNEUxMzJDOEVCOTU3OUI3MUM4MzBERjA4QzBGQjQ4MjY1OTgyOUM0NTFCODc4OTYxNTZENDk0NTA0REUxQzcwRkJGMUI3RTRFOEY2QjU4MzQ0NDY4MURERDFGMzIwNUM1NjVFMTUzMTBCNDc3NUVFREU5QzE1OEMxMEQ2OUIzMTY4NEI0QTkzODlGMTlGMTFERjY1NDA1NjA2NUJBODRDCitCMTA3QjU5OQorQTIwMjA0MDRCMTgxNTJCMDdGRjI2MDkzRjQ0QQorNDk3MzEyREQ0QTQ3RTk3NDM2REU0RDQxNEVBRUYxMTk2NUQxNDcyN0I3QjQwMEIwMDBCRTg4NENCNTY3QTBFQzIwODQxNjdBOTg2OUIzOTI5MTE2QTFBMEQ3QTg2RTFERDlBMDI4NEM5OTMwRTI3MDI0ODI2QUE0OEJDMjRFNDg3RjM1RDg1QzE2QjFFNDQ1RTI0RTY3RTY2QTk4QkU2REQxRERCMzM2OTA0RDQ5NzgyNzBDOUFDRUZFNTlBQTg3OENFOTdCN0UKKzY2MDZGOTExCis1MENBOTg0ODE3NEVEMzhGNDE3MERBRTlDN0ZDCitBOUY3RUE1QUFCMjUxOTA3NkI3NzM4MUJENERGOEU1NzQ0OTBDRUQwNjlGMTk1QzVDM0U2M0YxN0UxQjNCMTRGNjdBQUJBQ0M2QkFCNEREQkQ5MDBGMTRDMDAyOTg3RTMzRjFCRDQ5N0RFQUQxODQxNkU1RTI2QjJBMzlGMDQ5Mzc5Qzc5MDIzREY5OEFGMTdGOEI5OUMxRTkzQjQ1OTQ0M0U1RDBEM0Y0ODVGQzYzQjJGNUE4RkRGRjZEMEUwNkExRkY4QTBBMjhGNDVGOTVGNjQwMEYwQjI0NDlCODA5RkZFQkNENDRGMDE1MDY4OEVFOUNFMDZEOTIwM0QKKzM0MUYKK0U2MTEwNzEwNEFGRDg4MUQ5MUJEMzVFRTM5NjI3QUM2MTJBNjU1ODg2MEUyMjc5MTg2NUZFNzk5NDZCNkI5NDJEODBGMUVENkQwMUUyNworMjVGNzlCN0MKKzZDN0Q1MzJBQTFGN0JBMUEyNTgwRTQzMUMxMEIKK0I0RDk0QTM4NzYwRkIxQUJCMTc1MkM1MjYzMkY0RjRCQjRGMzIzQkIzQTU0Mjk5NDlDNEM5OUFFNjdBOTNCNTNERkNGNUU0MzkxMTNCRTg5REFDMURCRTM2QTMwQTAxOTlGQzE1Qzc0QjlENEFGNUExQzFCNEZDQkQ4NDlEM0MwNTBEQjA3RUIwOEVCQjE3Rjg4MkI2MjZDMTM4MjEzQzZEQjRBRDQ3MkQzNjJBQTJCOTVGNjUxNzdGRDU0MDJGRDE2QUE5MTQzNjAwM0U4ODczQjgwQzJCNjZCMEMzNDRCRjI4QzBFCitBNUZENjFGOQorQjQxNjBCQUIxN0E1RTI0QUU2NkM1MDZDRjAKKzAzODI4RTdGRDMwMDgyNDNBMjE5OTNCRjlBNjlEQTRERTBDMjY1OEMwODM4CitFMENBRDU4QworMzRFODUzRDc1RkIzRkYzRkNFM0QwMDJCOTgKKzY5Q0JDMTc3MDM0QTczQUI3RTJCRUZFRjYzMTIyNkM0QzUxMDNEOEFBNjA1MkYzMjE2ODA5RkRCRUY1NTQxOUU5NDI5RkNDODg4RkE4ODg3NUY4REM4NUNDMUNGNkY3REM4RDEyRTZFNjdDRDgyQzlFMzVBCis4NEIyOTBDMAorNTMwNkE2ODZGOUY4NDhCQUFDNzc5NTkxNkM0MgorMUQyNzQ3NkUwMzNBNkRBQzc4MzM5NjhBQkRDOTMwNDcxOTlBMDNBOTU4M0E4NzREQTVGMTRFMUEwRjVENzU3MkVENTE5NkEwNkJFNTUxNzlDM0ZFRjk2OTRFRjE1OUNBMDQyQ0IzMUU2Mzc4QTk5RjZCQTM0RDUwRTZFM0I1QzVCQTc4MUU3NDVGN0FFMzc2RTQ4NDkzNkJEN0MxQzdBRjU5REI3NDQ5QzlGOUMyRjQzQTQwQzI2OTFBODk0OEQ3NjIxNUJDM0IzN0RDNDI3MUFBQTVENzI5NjJBOUM3QTY3NkQ3QTNDNjRBQkFDMzBGMzZCMkEzRTUxQzVECitERDI1Cis4RTdDNTcKKzNFMTVFQUU0Cis0Q0VFMEIyMEJFQUM3REE3MTMzRkNBMDRDMgorRTQzMUVFM0ZFMTE0RkU1REZDNzY2NkMyREEzMTZFM0EzRDNBN0NERUYzMUJBRTNDMDA4QUM1N0Y1NEM5OTQ5MzA1NzQ1QUZGMEE2M0U3RUU3OThDODYxOEREN0EwRjU1NTY0NzNDRENCNjAxOTQ5NEI5ODQ2RTAxNzhFQjhBRTY2RjM5REJDMUNEQjdBQzhCQzQ4OEZBODlGOTlFRDU4ODQ4RDdCMjE0RTg0QTJGQ0YKKzNDNjIwQ0QzCisyQTdGNkRDNjQ5RkIxODk2NEMxNERCRDY3MgorOTlBRTVCNDAyMzk3NTk3NTFFQjEyQUJENEE4NDY1NUIwMDU4MzBFMjIzMTc1MEJERTMxOTczNTMyOEVBQzM5NkUxNkI0MTlFMzE1NTVBNEFBNjBBMTIxMThEMkVBODJGQjcyN0M2NkNBMzNBOTQ5ODAxOTlENEFBQzNCQjMzMjZGRjY1OUEwNEEzNTA4QjI4OTMwQjZCRDFGQUIxMUFBOUI5NDQKKzdBQzA0NTZECiswQUY3RjZGRjVFODM5QkIyREM3MUY5RkMwOEQ5Cis4Q0FGQzkyRTE5Nzk4RjQ4NEExRDUyNzYxRUQ4MjM1NjI0MkU4Q0Q3RThCNEE4NkY3M0QxM0JBOEIwOUNENjk0MzU0OUREREE4MDY4MzRCQkNFNUM1REREMEQ5NDVFRDU4MjM4N0ZGQTAxNEFDODQwRDcyOUE5NzVFNEY2ODhDQjhCRUNCNzZENzY1NDFFNjBDMzZFQzY5RDgzOUE5RjcyQzE5RTEyMTgwQzJDNTE1OTY0RDE5OTU3RkQ3QjI2QTVBQ0MyNDkyMURFNTU5MUYxRjgzMkU0QUFDRjI4Cis3MEY2Q0E4OAorNEVBMkJFMDlCNzkxM0RFNDc5ODU4QTQ0NDUKK0VENDU0REYwMEIzMkEzRUUxOTYwNkI3REVEMjBFQ0JFNDJCN0Y5ODczMzI3RTQ2QkQ3MzJGN0RDREUxNEM2NTREMDM4RUM2Nzg1RkRGMUNERjg3OTA0NEFCOENERTU2RkVENjU1QUEzQjAyRDBBRjk5ODUwMDRBMTVGM0UxMjk3RjNDRTM3QzYzRTUzNTQ5NTRDNjVDMjFGMjZCRTE3MDFFNkQ3MjhCRDYxNjVEMTc4MEQKK0UwQjJDODYyCiszNzY5NjZCQ0Y5MzhEOTA4RTJFMzFDRkI2RgorNTk0RDMyNkREREFGRjA4NTkxMUNBNEZGNTZCQkU0N0E2ODk0QTcwMzEyNkQ3NDU3QTNBNjEyQkE5QjI2ODExRDBFRUY5OTVGRTREQUFBM0RCQzcwRUU2QzgzNjQxRTNCM0VBRTA2NjRERUJCRkZBMTU3OTZFNEFGNEU0ODVBRjlCOEQ4Qzk0Nzk2REQ2Rjg4MzFBMzhFRDkyQTU0NEYyNUEyRUNEQTE5MzJBMzE4OTBEMEQzODQ5QQorQThGRjYxRkUKK0RFOUUzNzdFRkE1ODhBNkUxQ0MwQ0U1QzcyNTEKKzJEMTk2RjhEOEYxMjg4NDI3NkU0QkM3RDg0NzIwN0M5MDVFRDQyQjFFNkE3ODBFNkU3MzNDNENCN0NCRUZEQTI5NjhDREQ1NDc3NUQzOEY4NjMzODkxODE2Q0Q5NjY2MzFGNDQ0MEE3NUM1NUM1OUNGQjE4MDkwNjdBMTAwQUI5QzVEODI2NDY5MTQyQUU2NUM5RTY0N0Y1Mjg0RkRFNUU2N0FBRjdEQzA5MjIyNTdDQzVERDVEMDdDNUVGNEVFNzAyQzJFQzIxQkU2MTFBOTgyOUUxN0YxNkFGNjlDNzhCMDVGQzgzN0QyMzBGQzEwOEU2NTQyMkVCRDhCRgorMEFBMAorMUMyQzMyNTA2NDBFNTYyNDczMEM4NjhFQjE1RTlBOEYwMEIwRjE2ODExOEE2RDc5NjAzRjU2OUM2NzdCNjAyOTdDM0QxNzkzOERCRURGMTk0MEU1RjBBRkY5NzFGQgorREMzN0M4OUEKKzdCRjBENkY1NDY4NDcwMzhCMjUwQTJBMThFMEYKK0Q5NzQxMzVGOTMxMERGMUM1NTEwRDIzNEU2MTk0MUU1NkZBOTA5RkQ2Q0Q3QjFGNjc0REY3Q0M5MTU1NUY1RjI1NkQyMjMxQjI4MjU0N0EwNjAxMkIyRTFGRTExMUE3QzI3NjhFQzk1N0I4MTc2RDhBQzY1NEY1NUM3Q0FFNDQ4RDEzNkMwMzIwMjZBQzdDNTQ2OEQwRDg5NzcwRkQ0QkU1MDQ2OTA5NDE4QjZBMTZEQkFCOEJDRkUyNDI3MEJFNjIxQ0Q5NUYxQTVFQjkxRDkyRDEyRjk3RERCCis4ODRBRThBQworOUNFMDJBNjJGNDFEOEU1QTBENUM1MUU2NEMKK0Y3MkI0QUQ5ODVEOEE1RTU3ODREQTIyREU4MDBGN0U5MkQwRkY5RTkxMTM1NTQzMDEyQ0VDNDNCNDk0Rjk3NEUzOURDMjdCQjFCRThGMjM2MkZBQjc2MUU5ODQ5RDJGNTVCOUNBMjY5MzJBOEVCNjQ1OUQ0M0MxRjkxRTAxM0E2MTI4MjhFNjVFMTJDOUVDMTZDRjlDMDQ1RjdENzY1QzcKK0Y0OTI0M0Y3CitDOTIxMzYzQjExODU2MUJCNTMxQkRFQTREMgorNjI2QTBBRDY2RDhDRDM5RERFNjRGNTRERTQzN0Q4RTM0NEFDRUMxNUYyN0NFNzI0NjVGMzdBRDlCMEVFNUYzQzc1QTRGQzc0NDY3QjgyNUMzOTMxRTE4N0MxRERDREE5RjgzMzZENjFFNkFBRkJGMjRCNUVFMUIwMDZGNzQ5MUJFMzYzNkQ3NTdEMzkwNTc1NzcxMUJENjUzOTUxQjRGRDFGMkI5RjU3ODlBMzIyOThEMjA5QUY5MThCRjM3NTVDNjUyNEY2Cis4Mjc2ODBFRgorRDQ1M0RDNDkyQUM2MTYwREY4NzcwRDNEOTJFQgorNjQ0QTFFODZBOUJGRkRFQUE4MTlFRTUwNTIxQTBCREI1M0Y2NkEwRDJEM0QwQjAxMkMxOUNCNzFBRDg4ODk5NzZBNEY4ODQzM0Q0MjY5QzAwNjNFODE5NTY2QUQ5QzM5NjIyMTc4QjMxMDYwMzVEMkU0OTg0REZBOTI5NDNBODczMzdCOUZCNEExRTFFODlDMTFFOTEyQzhGNDE3NDI0Njk3MzA4NTRBNzhBMjk3MEY4QzY2QzM4QjhFRDlFMzk3NjVERDdGM0FGRjY5NUM4QjFFRTRDM0UyNzJBMjVBQkMyRDA5RTQxOERENjcxODNFQjBGREY2NUQ0NjkyCis2RDFECiswNEMyMTI4MzRFODI1ODEzNzI3RTUzQjRFNTA2RjVGMzEzRThFMzFCMzI1QjFFMDBGRjkwNUM4RjU0NzgzNTJGQkMyREYyCitBRkQwRjQwOQorOERFQjVFMzBGMjEyOTgzQTZENDBCNUI5MTAKK0U0MUFGNEY5OUJBM0E4RTdDM0VBRTFGQTU3MEM4NEYzMzJBQTAzMTUzRjY4NjIxMzlDNDhCQjU1Q0I5NUQ5RDUyRDE1RjY3OUIyRjM0NjMxODc1NDMzNENEN0U4QzBDNkI0NkNCQTU2RUVFRQorMkJBNjJBOEEKKzRFQTBCQzgyOTQ1NDg2NjU3QkUyNDc5QzZFNjUKKzdBNEQ4ODc0ODlBMTYyRjNGNDhFMkQ0OTVCMUI1QjM5RDMwMjdBRTE3NkNGREJGMDhGNTRBQjVFNTQwRTIzQkM1MDlFM0MxNTBDN0FFRkFBRDRGQzc3MDgyQTM2RjM5MEUzMjAyNjQ4QTVFOUQ3RTY4NzFCQkE1NjBCMjZGNzUyRTJBQTE0OENGNjk5OEE5N0M2QUJEODY0OUE5OTk2RUI4NUIzNEYwRDBBRTI0NzQzQjZDMDk5Q0NFQzZBRTU5MTU0OTQ3MUVBRTdEQUQ4NzEwNThFRjNGMjdDOEVGNTNFMUVCMzIyN0JEOTE0RTRFRjA2M0MzRkFEMkVBQgorNDVGMworNzc5OTJEOUM4RDFCQzlBOTgyM0IyMERCMjVGMTAwMTNGNzcwODJDRDQ0M0MyNjEzQ0EyODc4OURBM0EzRUYKK0Q0ODlFMENBCitGMzcwQkYyQTc2OUI4RDJGMENDRjY5NDQ0MzlCCis1OUNERDBDMzgxMEUyRUU2NTFCNDg3QUM3NjZERkIyNEM4MjU1QjY1OEEzMkJCQkMxNUY5NEVFRUQzN0YwQTg0NDc3ODk5Q0U0QjQzNjE3Mzg3MTUyRTU2NzY1RUJEQTRFOUFFOTg5NzEwNTIwRDU5QzdDOTlCMjk4REIxNjY3NjhERDI3NDVENUY2ODRGQjkyRUM0MUQyQ0JBMTVCQjlFNDU5RjQ0RTcxMEE1Q0ZFQ0U4RTYwNUU4MUFDMzE5NTI0NzYzQkQ4QzMzQUMwNTM4OTBBQ0NDNTIKKzY4MUMyMEU3Cis0NzgxRUQ5OEJCQkQyQzRGQzUyREUzMjM5MQorN0Y1QTIwNjBFNjZCOTY5OUREODlFQzU2MkQyMUQzMzYzMTM5M0ExM0VDNDY1NjI4QTFFMDlFQjk2NzI1MzMxNUQ3RUJBMENFMDY0RUNGODRFMDE4MTI3QjQ0MTkyQ0U2Q0U3Q0MxRTE0RTUxQjU5NEM1ODI5Mjc4QjI4MEM0OTU5MDI4MkYxQ0E5MTkKKzYwRUNCQUU4CiswM0IzOTM4RTFGODU0RTQ3OERGMjMyNzQ0MDU2CisxNTkzRjMyQUJBM0YyRTMyODZCMDkyQjNGQUIyMkM5MzA4MjI5MzJGNTNDOTg3OEQwMzI5RjUwQzUwRTAzMDU3MEVFRTI5NzIzRDIwNkY2NzJDMzYwODUwOTMwRDY4MTk1NEVFMDU2NjZCQzBFN0ZGNjk1NDZCODRDQTNBM0ZGRjk5ODYxNENCNjkxMDVENTA1NTM4NkExNUQ3NTkyOUVEOTYwRUFBMzRENzlFNjZFQjIyQUI5MTIwOUNFNzA2MDM5MkU3MkIwQjkyODEzNzQ3MjI1MDYzQzcxNDRGQ0E1OUU1OUE2QTU2NUVDODUzCisyOTAyRDM0MgorQ0EwOTkwQTVGMUM3NTdGNDE5RjYwRUU2MzVBNAorQzhGN0EzQjYzRkNEMDg2OTk5MjZFQzlBNjY5MzlDOTI0QjEwNzMwODIxQ0I3ODIyRTU5MjZEOEIzQkZGNTE2Q0I5NTk5REQ1RjQ0RUVBRTc5QUQ1MjgyMEIzMDMzRUYxN0FGQzExQjNERjFFQThEOEUxMTJFMTBFMUU1RjM2NkFGQUExQkI3QTlCNTYzODkxRTU5MkY5OTM5NUNBODlCRDY5NDk4OTVGRUE4MEEzQzQwMEM2RkY0Q0RBQTAxQzU3QjVFNzA1RDJDRkNBNTNCMkREQjcKKzJEOTI4MkEwCis2RDhDMUFCOTFGOUVFM0QxN0I1MjMxRkI3OQorNTU1RDAzN0RGMDAxMTk0NDBCRUZBMTNGM0YyQjcyOUUzQTg2NjEwNDE0ODkzNTFCREMyMDYxMTNBQzdFRUZBQzlFOTREMDJBRkFBMUMzMDc1Q0YxQUQyNzJDRDExQjZEOERGOUZGNkRFQTRGNENGMDUwOERBMDcyN0VBRjEzQkIyQUM5OUI1MUFCMThBOUNEREVCRDU2NTQ2OUQ2NDFBMEQ2M0E3RERFQjI5RjFFCitCQTFFQTU1OAorODc0MDdFNEVDQTFCQ0Q1NUI4ODM2M0U0ODEwOAorQUU4NzAyM0YwMkM2MjJEMkE5OUUzNDA3MkZEMzdCMEZERTQwNThFNTFGNjY3QzQzOTBBNDNBQkUxQzY0QzkyM0NBNUY1MkQzRDlBMTA4M0JBNjczOUMzRDdBMzNDQkRGNjZCOTNEQTBBNjJFQjEyRjdBNEU3NjgwNDkyQzZFRUM4MjAxNUYzRDJDQ0Q1NzEyMzYwQzZFMkVGMDFFMThENDcxMkQ3NjYxREE5RDM2OTZEMDU1RTY0MjJFQjdDRDUwMzlDNjkxNjU1Q0ZGNjc1NDdFRjgwOUNFODkxNkMxMzY5RTI4QTlCNjNFMzAxM0Y3MjU4NUQ2QjUKKzM3MTFCRjkzCis1MEYzNEVGRUUyQkU1MjI5N0EzMzNDMjJGRQorMjlENUM0OTI3NEI4Q0JGQTQ5NEM5RkFDRDhDMTQ2NTk0NjU0MENEMjhCM0U3QTYxNTBBNDM0RENEQ0VFMkJDREEyOTIxQTUzQTM1NzM5QkEzNkE3ODU1N0ExQ0JGN0M0NkRFRjIyNDI0MjU0MjE3QzA1QkJGRENEODRBRTZCNTA4MjE4MDlEMzE1CitGMUE5ODlCQgorNDMwRDAxQzA1ODQyNDlCODJEMUFGRTM1MDMKKzMxMzc5Q0JGNzIzQkIxNDY5RjQzQTkzNEI5NTg2QzVFNkVBOEUzQTQ0RkI3NkZFM0ZEMzM4ODQwMjFFOTM4RDYwRTNGMDc1NDAzNjUxREU5RDNFNDI4MjA3RTk2NDAwNUYxMEE0M0Q3RkNFMkExRkVFNTMwQ0RBM0QwRjdGMUM2RDJCMkRDMDRCQjI2QUFBOERGODI2RDE5NUIyNjM2QzZGN0ZFRTMxQkJBQzUwREMwRTI3RUU5RkRGNDM2NTlCNzZGQzkKKzE2MzAzMTA2CitFNDlFOTExRTAwNTRGREY0OEIyNkI5MDE3OQorMEIzNzgwQ0QzQTEwNDcyOEI3RkEyNDAzRjk4MEQ1NTg4NEI3RTE5RDg2QURGQUNDNzlCRDhBMUU0NjZFRjY1OTU5RUFGOTE4NUQwMTU4ODE0QzJFODk5ODBFNkE0RkNBNjNFQjA4Qzk4REU2RDMwNTFBM0ExNUFDQjIyRjlEQUJBN0FBQTUxODk3RDMyQ0UyMTBFMUY0RTM5RjlBQzRDRDE0OThDQTE5NTczQzg3N0YwQgorQzYzQzkwNEYKK0M3NTYyQUUxQUZCOTg1QTBCNEMwRUIyOEY0NzAKKzE5M0NBMTNEN0UyNkFBMUUyMUUzRTU1REY4Q0Y2QzkzNzc1QUQ5Qzk5RUU2MUU5RDUyQjhDNUYxQjNFMDZDQ0JCRDhBQkIzMkQ0MDIzMTA4M0ZGMkMyREZFOUVGNzgxOTA1NTAzNDk0NzUzNjhENzRCMEQ3RkE3MDI2QzhGOUQ0MEFDRDVEOEY4RUVEQTBCOTY0MTdFQTcyNjI5RjYzMjNDRjc0NUZDQTFDQzVDMjU5Rjc0M0M2MTY3OEREOEMwN0FDNUM2MUNERjI1MTBDNTU3QTlFMkE1NjAxREJCQjcwOUI4RTQ3NThGMEUwMTlGMEQ3RjBBOEIwQUVFRQorMzlBRQorRjlCODEzMjNBNkI3RkYxMEQwRTI5Q0I3Qzc3OQorNjREMkRGMzQKK0Q1MTBERTJCREVGMTk2MzlFMDc2N0E2NTFFOEIKKzBGQjVCODg2NjEyRjczQTFDOEZDQUE5REU0OTVGODhGNUM0N0QxMDM1QzM1NUFCMEQ0NDYxQkVCMkVCNzlEMjNENUEyMTg3RkYyMTZGRjdBMTg5NjVBNkJDODMxNEY5NjYwOUY5M0ZENDk2NzgwQUM1REExNDg5QThCRDc0OTQ1ODA3MzlBODVCNTZGODVFNzRENUJEMkMyNUU0QkIxMUQwOEU2MjI0OTBDQkM2RTFDRDhDODVEMUQxNTJDN0NEREJGQjQ4NUQxODYzREY5MUFDOEE1MTZEMTg0MDkyODJGNUVEMjZENkM3RDA5REM5QzU3M0Y3NTU1NDM0RQorMzEyOQorQTZGMzlFMkUyOTMzMjdBRDA1NUJERTJFRkU2MDM0OEU3MUM0MDE1NEY1Qjc0NjAxMEEKKzA2MjZBMUE5CitGRTYyQzdGRUNDRjYxNThGRDFCOTJFMDA4MjA0CisxMjdBQURFREY3MTk3N0M5RDk0RDE5MkE4MzU5OTk5MTUwNUMwNjg5QkIxMjJDOTMzQjYwNjEzNDNBNEE0Q0IzNkM0QkM1NTYxNDRDRTI2QTFDMUM4MzFGQTM0QjIwMDMwOTk2QkYzNThENzcyMzEwQ0M0Q0Y4QzM3MEZCQkU4RDAwQzRDRUIwNUM3RjFBMEFFRkQ1RTEwOEM4MTVEMzlGQjJFOEJGOThEM0ZCNURBRjU5MTZENENBRTlFRTMwMTk0MDM1MEM1RDJCQTZBMjIwODQ0QkNBOTc1MUQ5N0FEMUU2RDkxN0I4NkEzM0QwM0MyRjM1OTAyODNBRTMKKzExOEQKKzcxNjk2OEMwCisxMDExRTk1RTZDRTBGMzBBQzc4MTAzMjA4MQorQzA2ODZEQTZCQThDQ0RDMzdDQzIzMjg3Q0VFRkY0NzM3NzhDQzRGOTE3QTU5NzNDNDY5RTg0QTYzOEY5RkZENkNFQTkxQ0I0QjYxMzQ1OUMwQjYzQjE2QkJDMDk0MEU0NUM1RDNFNDhENkExRTM1NzY4OUY3MzU2NzUyMDhFCis3NDJEODlEMAorOTIwM0Y3OEU5QkYwRThGQjI1NUI2NzU3MzgKKzkxNjM2QUJENUZGNjk0QjFDRTlEMDQwMTdGOTQzRjU4MzZGQkYzQTgzMTkzCitCMUVDODFEQQorMUJEQjBGRkU5NjVCNDdGRkRBQjk0NTcwNEE1NAorNkE5QTFBRUE3QzU1QUFBNQorODU2QUNGMjkKK0E4NzFBMUU2MjcwREMxMUIzQjBEMTEwMTlDNjU5RjdCN0ZENDgwQkZERTIzQkJFQTQyNkRDQkFCM0JEQUNBNDIzMUQzCis2MzZGQjlEM0FCMTJDNDA5QzkyNTRDODMzNjE1MjRBMTU5RkUxRjAyMjZEQTEyNzc1MzQ3RjY0Q0ExNEM0MTlGQkEwRDMyN0NFOUVCCitCMDUxMjlCNzkyMzBENzY5MUMyMDVGNjRDOUVFNDlFMDRFRDBCRTQxNUQ1MDE2MzdBQjQ5NTEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDUgcHV0CitkdXAgMyAvQzAwNDcgcHV0CitkdXAgNCAvQzAwNjcgcHV0CitkdXAgNSAvQzAwNjggcHV0CitkdXAgNiAvQzAwNzIgcHV0CitkdXAgNyAvQzAwNzMgcHV0CitkdXAgOCAvQzAwODAgcHV0CitkdXAgOSAvQzAwODIgcHV0CitkdXAgMTAgL0MwMDg0IHB1dAorZHVwIDExIC9DMDA4NSBwdXQKK2R1cCAxMiAvQzAwODggcHV0CitkdXAgMTMgL0MwMDk3IHB1dAorZHVwIDE0IC9DMDA5OSBwdXQKK2R1cCAxNSAvQzAxMDEgcHV0CitkdXAgMTYgL0MwMTAyIHB1dAorZHVwIDE3IC9DMDEwOCBwdXQKK2R1cCAxOCAvQzAxMDkgcHV0CitkdXAgMTkgL0MwMTEwIHB1dAorZHVwIDIwIC9DMDExMSBwdXQKK2R1cCAyMSAvQzAxMTIgcHV0CitkdXAgMjIgL0MwMTEzIHB1dAorZHVwIDIzIC9DMDExNCBwdXQKK2R1cCAyNCAvQzAxMTUgcHV0CitkdXAgMjUgL0MwMTE2IHB1dAorZHVwIDI2IC9DMDExNyBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIwNyA3OTggNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY5ODk0MTNFQUM4QzYxMEI4NkI4RDU1NTg3RTU4NDAzMDBECitCN0Q0MUUwNzQ4QUIyMEQ2NUJEMUM0NUQKKzJDNTcyOTc2RjU5QTAyRkQ0RgorNzYwMzhFNUMKKzc1Q0E3MTM1MEM1OUMwRTI5RDI1ODBCMkVBCisxRjFGODlDRkE3MzU3QzM5RTYzNjQ5MTY1MTkyQjU4NzExMUE1NUUzRDIxOENFCitFMTMxNTE0OQorQ0MwQzE5NzY4RURBNDM4QkRCMTNCRUJGM0MKK0Y2MEY0NzU3ODRDMDE5NkE1QjA0NDY5NkQ4QUI2MDkxOTk4NEY5NDk0MDI1OEE3NjgzMDYKKzYyQ0JDMUQ1Cis1NTQ3MUUzNUQ2NThBNEU4NTM3MzdBQkFFMDU2Cis4NDdEMzQzMzhCMUFDM0E0OUQ2MkQ0MDRGRjExNDZDQjdFREZCNDk4RjYyM0U3RjAwM0JFNzI5NEZBNjkyQzhGMkE0QUI1QkQzMTREQ0YzMTI2MUIwMzNCQzJGNTZDNzBFMTc5MUMyMzI5NTIzRTlGRUM5MjA3OThFODk0RTgzMUZDRTFBRUY4NTExMjdCRTk4NUM1QTlCODMwQURCRkZBMEY1QTI3NEU5QTBFNEFDQUUxM0NDQzgzQTU3OUJDQTREMjY2MUEzNjVBNzAzMTU2CitFNDVCMkJGNgorQjRGNjQxNEQ3MTRGMzg2QzQ3QjczNTY5NzMKK0MyRkJBQkZEMDMwNTA4MkI0NTM5ODQwRjMzNTc5NDZBOTM5QkRCN0QxQ0JGOUVFRTAyRDE0NEIzNkMwRkQ2RENBMDA5N0RFRkFEMEU4OUQ2OTAyNjBGNEJEMDJGMDgzNDA4Mzg2NjY1Q0UyMzEwNEQ2RjY3NTNDMjMzQzAzQjFENTk0REE4MjFBODg5Q0Y0MzUwMjFCRjM5OTA5RDEyNjM0NTg5RjVFNTYxMzNDMworM0RGMDgwQjEKKzYyQzc2QzcyRjczNkIzRUYwMkUyOEQyRTJEQkIKKzM3NEJBOEIwNkFCMUVDMkYyRDQzQTYzMDU1MzAxRkVFREE1RjlDRUFEMDExMzMwODlGQ0YyNkY0RDg5QzFGQkQ3NDFDQzVCRTMyNUFBQTIxOTE1NjVCNzBGMkU3RTAwRkI4MzhFNTcwRkJDNDlBMzk0OEFBNzMwQTNBMkI0MTg4NDg3ODNGODQ5NkU0OEM2RjA0RkM1NTQ1RkQ4QUFGODg4NDY3RDFEMUNGRDJBN0UxQ0MxNUYwQUFDMkFGOTYyQkQ5NDBCQUM1NjM5OTAzN0NFNENBNENGQjQyQjdFNDBEQURBOEZGQjZFQTgwMDAKKzBEQzE0REQ0CitDN0I1MEZENTRDM0Y1MDg5MjVFRkNGNDUzMAorQkZDODQ4MUNBMjMwMUQzRTE4MjREMzkzODdEQTI3MzI4QzYzOUYxRENBNkJGMEZCOERFQUZBOTAxRTdCRjA5NDY0NUY2MjcyN0YwN0E3OTY3MUVCQzhGN0FFRENENjQ5MEFGQkFBMDk5N0ZENEI5QzA4MjM3QzVGRjY5MAorNjlBQ0E3MDMKK0Q3Qjk2NjRDRUZGMEIwRTJGRUNENjk5NkI5NUMKKzU5QkExNEQzNEM4MDEyRDkyMTQ1QTFCNDkxMUQ5RTM3RDUzQjMyQUU1NEU0RkFFRkUzNzA0M0RFMzMwRDMzM0Q5NzExNEQ3RDQ4RDQ5QzM2RDkzNzEyMTY3RTRDNTJBODlCODg0N0MzQUJENTU3QTJCRTY3NzUwNzdDOEIxMTQ0Rjg1REU1MDg4M0RCMUQ3NzAwQjU0M0UyRTEyMjNCQUM0NUE2RTQyQTM1MzIwOEVFODRCMzQwOThBRDYyOURERUMyRDEwMDUxCis1RjQ5RUEyMworNTU1REEyQTU4OTZFRDJBQTc3OEZGNDAyNEVBRAorNUNCRjNGNUUxREQ3QTQzMTQ1RTM5QzNBMEY4NTRCOTk5MkYzM0ZDNzE2REZFRUJEMEQ5N0NBRDhFMkY2QTZGQ0IyOTAwMEMyOTMxMjQ2NTJDQjVERkIyQ0RFRDVCNEFFRDcyMTVGODQ0Qzg2MjVDOEI0MkUwRUI1MkM3OTUzRThDMTkxNUU1RDY2MDNFN0E4MUUzOUVENzBFRDY2QjZGOUZENzRDQzRCMDk1QkJFM0JCNzM3QjgxMjJDODM2NTU0OUUwNjRBNUYzNEUxOTA0MkIyODRGMDE5OTQ2MzI2NUQxMjYzOEQ5NjNGCitCMjBGMUJCNgorRkZFOUZCQ0E5MzE2QzQ0NEE2RTlENkRBNDIKKzk3OEE5ODNEM0RGQjcxQUVGREE4NDYxOEJBNDY0QkMzMEY5RDc4MTFCOEE1MUIxQkE1RkFDNjlDOEQzN0Y4NUVCRDMwMDhEMzY3RkE1RkM0MkVGQ0M3MkY2M0IzNEFBMkNFQ0M2QjUyQ0NBQ0JDQTI4NEJEOEJCREZFRDk3QjMzRDE2QTE1QjI1RTBCQjdDMzA5CitEMjY5RkZBQgorNUY0QjBEOEIxQTRDQzE3ODE0RjNFNTI1MjUwNworMjVBOTVEMTU0NUE5NDA5NUNFRDUxRTcxOTg1RTkzMjI4M0FDMDQ1M0ZENDVEQzA2MUMzQTBCQjE1MDY4RDY5MUY0NTYzNjE3RkIyODIyNEJCMTM4OUM0NjNBM0FDOTg5QzQyODU1NEUxQjkzQzNDQTdCODZDRTMzREM1QkEzN0RBNjBGQjBBRTE0Q0JFMTg1QkU4NDFEMzlBNzRGODM3MjY4RTE5MDkzOEVDQzg5RjA1MjBDRDhCMUYwNjNGOEJBNzgzNUE2RkU5RjQyQzcKKzAxMkFBOTYwCitBQTBFOEE1MjFGRTRDQ0IwRjEzNzMwRkM0OEUyCitCMkFFNDNBQUNCREZDMEI0REQ5QURDMzhBOUUyRkI5NTUwNjdCQzI0MTkzMjFDNzk3N0MxM0ZDRjY5MkRFQ0UwNUMzN0ZFOTVEOEVCMzRDQzUzRjdGODAzRURCMDdEOTRGQ0I0RkQ4OTU4NjgzMDQ0NzMyRTlDMEVCN0FCNDRCMUY4MThFQUQyNTQzREM2Q0VEOTg2NEZGRjMwMUIzMEZEMDVEQUE1OENBRTY0MTg1NkEzQUUwMjcxNDNGQTI3NDI1QTUwRkFGREI0RDIzQUI1OUQ3RjIxMEUxNDE0NTdBMDQ3NENFMUJFOUY1QjhGREFBNjRBODQ1NkJEMDEKKzQ3MEIKK0IyQTFBNDY2NDIzMjA3RDAwMUIxQjlGQ0M4RjJENjFERkNCODMxQjVGRTRCRTIyRkZDRTcxREFDMDIzODVEMDFBQjIwRjEKKzQ1NzBEOEM4CiswMzc5NjBDNkZDRjNGNjAzOUM5NDJBQUUyODgxCis2RDk5OTk1NUIzRjcyMEVDMDU2M0U4Qjc3M0I2MEYzRTU3RkY1NDgxNDUyMUFERDFFNTg1MzAyN0NCMURCMjMxOTM0OUYxNUUxMzFCNUE5NkQxNzJGNzU0NkRFMkUyNTg5NjNGNEE2QzFCNzFCOUJGMDVBQjlGQjRFNzYzN0UwNTNDMEY5MzIwOUQzMzY1MDhCOTA2MTk5QTk3QzhFQUMxNDdCRUMyMkRBMkJCMUQxN0E0Q0Q0QjEyQjRBRDc2NkQyMUJEQ0RBMDU0QUNFQjY3Q0Q3MkZEQUU2M0Y1RTlFOTcxNzk2QUQ2RjE5NEU4RUNCMEUzNTZDRDRDODIKKzM1QUEKK0VEMzVCNzRBCis4Qjc4NjIzOQorQjMwMkEwMjNBNzQxRkVBQUFFN0M2M0U0NjcKKzBCOTEyNjE5MDE5MDM4M0NGNUJGMTFCNDE4MEVDRTFFOTgxNDg4MDNFMTg4MThGMjc1RjdERUFEOTVGRDU1NTNGRDhFQTUxNzM5RjUyQ0Y2RDM0NTQyRDVDMzQ0NkM1RjQ5RjJEMkM4ODc5QzcwNTA2QkVERURFRENBNERCMjA2MkY5Nzg2MTVCOEUzODE2OTUwQjhGODdCM0M1MDRBQ0Y2NzAwCis2QUY1MDE0MgorMzBDNTc3Nzk0NzkyRTZCNEU2ODRCQzMyRDMKK0FFQzk5MkI2ODM5NDAyMTYzOUNBQjFGQ0NDODI2M0VGMjkyRDU1NTEzQTg3MzBFNUY4NDNBQ0Q5MDE1RUM1QUI5RURBMzUxMkI0NDIwMTIyNTMxNkM1N0YxNEQ1RjJDNjBCRTA5REQ3MjUwODJDNzIzQUUwQkJERTk3NEM3QzlBRkVFQzkxNjI2M0VBRUZGNTA4MzBBMzJBMEI0QUY2QTlDMTE4QTk4QTlFMzc1NTM3NzM4NEI2NTgKKzU2MzFCOTE5Cis3NERFREM5Q0MwQzUwMTRCOUE4NjQyRkJDMAorODU0NjFDMUZGNjJFMzU0OTAzOUQwNTMzMzYyOEY0OEEyQ0E2M0MxQTU1RUJEODFFNkI2NTRGMzA2MDRBM0Y1NjgzN0Y2MzA5RUE3MDYwNzU2MjVBQ0VERTJCMzJBOEI1OEEyMzVCQ0VBRjIxMDgxOTA1OUMyNzAyNTExNEYwNTA2Qjc0OEIzRjk4NjkwRDE3OEEyNjdBMDgzRUVGRjc2NUQyMzk4NTVBQ0E5MjQ5M0VGMEE3NDdGQ0FECiszQjAwQUE3NgorQ0JDRjM0RDlFRkFBQkJCRUE5NzlDMEM3NTkKKzZFNjE5OTdCQjFDOTRCMTI0MDYyQzQwRUM5OEU4NzQ3NzcyMzY3QTkyRTlDNzFGODg2OUY5NEFDOTE0MEI2NTNENTVDQzRGQUQ5ODU1OEU3NzYwRjBFRDFDOThBOTk3QkM5RDk4QUFBCitGNEZGQUJCMgorQjk5MjUwQ0I5QkFGMzdERUNERDQzMEY5RkUyRgorM0I5MzE2RkNFQzk5RUMyQTIxRUFEQTQ5RTFFNEZCRTBGNjkyMzJGMUQ4OTc3MjAyQTNFMTRGQzczQzRDODdBQjU2OUJFQ0YwMTRCMDhBNjI1MjZCRkUzMzdCQ0VGMkUyNERDOTdFODFBMjE0RjNCQzBGODI4NUVFQjEwMDNGOTE4NDM3NzI4QTE2NUIyQzY1RTNFQUE0NDg0QjZBN0UxREVBRDMxQzc5MzgwQ0MwRDZBQjU2Qjg0Q0Y2QkI3MjdGOUZFN0Y0RUJFRDJGMjU5NDYxMEEzM0RBNjA3NjYxQkJCNDY5QjA4RjExMUE0RUFDRTYwRkZFQkIwRTY5Cis2M0ZBCitDOUI4M0I0RUY5Qjk3NDBCRjFCODhDMjZCQUIyN0IyMTlFNERBOUU2RDQxRjNDNDU0NzdFNjU5RAorRTVDNUU2NEEKKzJGRDcwNUY5Q0E3NzU1NjVDMEIwMzJFRDBDMkMKKzFGQjMxRDNBREYxRkM1NTNEQjNFOTZEODI2NUI5MEUxRjQ4OUM5ODhFMDg3MUMxOEEzMjc3RjM1MEZBRTlFODM4M0JCMjEwOEFCNzQ1ODVEM0VFM0U0MzYwNjdGMjAyNzc5NERGQUYxQUZGQjgwQUZFOUU3RkY3MUMzMUIxMjYyQUQ4N0ExN0UwMDRFMzIxQjRGQjdDRTE1QzMyMUQwMDUyODQ4OEJFNTVFNkM5OTk2RDIyNjNGMUVGQkNCRDlFMzUwOTk0QUUyRjIwQkIyCis5MDAxN0YyMgorMUY2MUQ3Q0I0RTA3ODhGQkE2QUEyQ0Y3ODAKK0RBREJEMkZFRDA3NDM3NjdDRTMzNTIyQjNGNDI3QkNCOTMxOTU2RDE2RkNCNDQ1QzdDRjlERDQxNDVCMzIwQjdDNDc1NUQzMDRFQzFBNDYxMzI1MjAzMzk1RjA2QjQyM0RDNzhGNUI2OTE1MDNEMDhDNEU2REYwOEY5NEYwNDFBQzQzMUJFNUZDREEyCis0MTg1RkUxOQorREY1NTc3NENGOEE2RDI2QjY5QzFDODRGM0QzOQorN0UyNUE3Mzk2ODRFODYyQkZERkU1NTkxMzY1RjU2NUQwNTJEMkY0ODJGMDdDRkNENUM1N0M0NTdFOEVBMUE1NUYyNTU2MTRGNkQxQTE3ODgxRjJCNTkyQTg0MUNEMEQ2MjlCMEM5NDUxOEVBNTA1RTk5QTM0RDlEQTA1NjlDMkE0QUJBQjYxRTFGOEQzNDQyRTkzRkJFOTg5NjRFRkYwNjc0OEI1MUI0RUQwMjg0QTQzNjk1RTk0QjIwQTY2RjU5NzUyOTJDODdBMTY2Rjc2QkJGNEZBRjVBNDNFQUMwMTYwQworRTQ2M0FBQ0MKKzgxNTExMEM2N0UxMkJEQTNCQTgxNTEzNzM5NUIKKzQ0RUZDRUZBOEJDNDEyRDkzQjdEQTQzN0QxNDgxMThFOThGQjgxNzc2RUMxMDkxQTNBQzBDMjg0OTFGN0Y2RkFGODkwNDJCQ0UwMjcyNEZCQzdGQ0M2MEJFNUJDQjk1OUIxMkM4NjNCMTQzNzA1M0I0NDU2MkRBMkE3RjQ3REZDRTE5MTEzRTE1M0ExNkNBQzYwNDgwQTA1RjgwOUU5REZBQjBCQzIyNzYzMUZFMjEyNjhCOTU2NEUxNTRENkZFMUQ0OTlCOEQyMDAwQ0IwMDYwQworRUI2NzEwOTEKKzEwMDNERDk0MUJDMENGMTJGMkZGMjFFOUFFCis1M0EwRTgzM0UzRTY1NzI3OTBFMjVENzUzRjRBRkFBNjA1QTJFNjJDQkMwOTQ4RUVENDdCNkM3QzU2MTk0RkREQjI3MzVEQkE4RUQ2MjIwQzg1MjRBNTU3MDAxREQwMTI0M0Y0RjQxNjIwNDZGNDcyM0M1NTA3MUU0ODg0Mjk3Q0JCNTU4NDREQkQ3NEM4MTBFRDYyN0EzODIxQTg3RkYxOTUzRjkxNjEyMUZGQTY4QzQ3Cis5ODEzOUVBQQorMjNDQzAyNDlCNTBFMzhENEM5MDA3QzMxRjBBRgorMUMyRkQ3NUM4M0JEOTE2OTg3NzlFMTg4RDIwQTg5QkE0RkI1RUFFMkZGMUI1OUFDRjE0MEYxQUMxMTdBREEwQUE0OTJEM0M2MDBENjZEMUNBMkY5MThDNDdBNzlBNTE1ODA4ODJGMzk4QzUwMzI0RDY3MkU2QjdBRDJGNjU3QUNCODRCNjAxQjA5RUVCRkNGQkE5RjI2QjAyRjQzRTI0QzQ4RTgyOTU4NjcwNjg4QzE5Nzc5NzhFNDlFNTQ3OEI4QzhCODcxRTE3Rjk0RTVGQ0VBRUJBMDg3RTIyODcyNUNGRjY2QTBCQTI3M0UxNTk1NTEKKzMyNzQwNUQwCisxNjJCQzk1RkQ1QzQwNTQ4NENBNDg0Q0Y3QgorN0Q1Njk2OEUzRjJGMjFEQzExRUFCRTE1OTNDNzZBMzhBNEEwRUQ4MjNEODNGMTM3Q0NGRUMzQzdDNEM3RTQwNDIwQzU3OEY5RTkyNTQ3QjdFNEQ0OEU0NjI0ODc3ODQzRDdGRDdCRTYwNTU2QkZEQzQ1OERFNjM2RkEyOEU5NzMxM0RGRENDNAorRkY0NkY3NzkKKzZFMDA1OERGNzFCQ0FCRDcwNUNGQ0FBNEJFCitFNDlBNjQ4NENDQjAwMTIzMzg2RTBBOEZGMjBEQUNGODY3ODhDQTc4MDUwQjEzQTVEODZFRkFCMDIyMjAwRTA4N0E5QzVCNjVCRUZCNDkyMzRCMkE2RkZBNTJGMjU3MjYyRUMyQzRCNzZBMEM2ODM5OEJBMDI5QjI2ODU0OTdDMjAzMjAxNTU4QkYwMDhGMzQyRThBMjhBOEFGMTdGQzAwNkQ1MzM1QzkxMzJBNkM5QTQwODFDQgorRkE2RjI5MjgKKzgyOTdERDA5NkFEMTE2MEFCRDY1RDJDODZEM0EKK0QyREE4NTg4QjY1NDY4N0UKK0Q0QzBBNTA3CitEMDI0QzVDQUU4NDY5OUVGRTczRDg2MEVEODc2RDM3OTM5MzM1MTgwNzg4NTcyRDA0MEREMEIxOTE4Q0M3NDg2NUUxQgorMTU1QzcyMEJFMkQ0NzA1NzRGMjQ4Q0RBRTlCQUE3OTI5QjFBMjM1RjEyQUY5RjJFNzQ4RDFGQ0Q2ODU3QjE3RDMzODlGRjVGQUI1QworMEE3NDAxQ0JBQTQ5NzAwNzcxQTQ5ODBDRjBENzdGNDhEMTBEQTVGN0I3MDRDN0Y4MTQ4RjlECiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hpCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoaQorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGkgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDk1IHB1dAorZHVwIDIgL0MwMDk5IHB1dAorZHVwIDMgL0MwMTAwIHB1dAorZHVwIDQgL0MwMTAxIHB1dAorZHVwIDUgL0MwMTA0IHB1dAorZHVwIDYgL0MwMTA1IHB1dAorZHVwIDcgL0MwMTA5IHB1dAorZHVwIDggL0MwMTExIHB1dAorZHVwIDkgL0MwMTEyIHB1dAorZHVwIDEwIC9DMDExNCBwdXQKK2R1cCAxMSAvQzAxMTUgcHV0CitkdXAgMTIgL0MwMTE2IHB1dAorZHVwIDEzIC9DMDExNyBwdXQKK2R1cCAxNCAvQzAxMTggcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE0NCAtMjM2IDc1NyA3MjNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNUQ1NkE0Qzc1NUQ5N0I2MUZEQjRGNDc4QzM2NTIxQTExNzUKKzUwRUFCNUQ2OEIzODA2NjZDNDA2MTgzNjNFCis4NzUyMzRENTkzMkNGOTUyNzhDQkYyNDY0MEFDNDQ5NTVGRTBDNzQyNEE1QgorRTc2N0UwRTgKKzQ0RDAyMTU1MDc5RDE0RDc4OEY1M0FCNDBFCiswMzEwM0E1QTk4QkUxMjNEOTNCM0IxQzRFMkQ5ODhDRTM5RDg3MTI0OUJGQzQxQjhGRTVEMzUxRDQ4NzU3ODY2NzVBM0NFQkRDMTkxRTk1Qzk0MjUyRTk3NjNBMTc0OTBFQ0VCRTgyQzAwN0FCOTZCQUM4N0NDMEU2MUIyMjY3OThDQjI3NjI1MzU3ODk5NzMzOTAyMjBGNTVGOTM1RTlGNDJBMjYyNUZCQzEwNDVBRDE0NjAyMEEzNDJERThBNEEKKzRERTRFNkZECisxRDFGMjdBOUM2RUZDRkUzRjcwRTgwMDEyNkZDCisxNDVERjc4RDhDQTM3NTFEMEYyRTUzOTFCQUM4NzM5RDU2OUM2NUIzNzY3QzNBOUI4ODkzREM4MUZDNjg3NDg4NEUzMkVDQThDRTg5RkQxMkQ5NzRCQTg3MDVDRDNBMjA5NzFERjM1RkFDRDE1Njg0QURDRDIyMUFGOEY3OUE2OEYyRjdFRUY5NzhDMkExM0MyMUU0OEU3Q0JEMUQ0NjVFNkQ0Q0I4OTQyQzM2MDJEOTBCRUYxM0YwNzg4MDlFQzY3MjJCNTg0MjFGMDVCM0Q4ODU3OUU2RUVDOTMzQjk0MEFBQTg0QUM3REZFRjU0MDI5NzE0RjlGOThBRjcKKzk4MkUKK0QwMjY2REJCM0RGM0Q5RkYwRTE1MTkyMUM4NTM3MDZBNDM4ODlFQzcwMDE3Njg1QUVFMDVEMDVBQkU4Mzk3MzEzNDlCMTcyRjczRTU3RTRCRUNFNUIyNzhBMjE1M0EyNgorMTI1QzkyNTMKKzg0MzgxRTRFNzUyNDFDRDI0OEFFQUE3OTQyRDcKK0VDQUY1OURENDIyNjc5QTgyOEQ0MEI0NjFCM0U0NTI2Q0JCQzNDRjdBRkZGMzFDREExQzZEN0U2MkU5ODQ4NDY5NDhBRjc5OERDNjQwODgzQUZFNzk1RDIzMkY2MTQ5ODUwNUZBNjI1M0RDNjYxREZDQTlCMzFCRTY0NUU3RTYzRkFCOUYzRDdDMjZDMjA5MzVCQTIxMjkxMjY1MENGOUJERjBDNzRDQ0QxNEY0RUNERTkwMTBGNDQ2MTY1RDEwOEEyNTVDRkYyNzQKK0YyOTY4NDI3CitCRkZBRkYyMDM1MTM5QzJCMUNDNTU2Rjk5RDZECiswQTdFNkQwRjBBRTU4ODU5NjI4RjhBM0E0ODM1QTYzRjJEMDYzOUM2MkFBNUI4QkE0QjdFMzE3QzIyRkU1RjIwMjUyRDREM0VDMzNFNTg5QkRDMDQyMEQ3Q0UwN0U5RUIwNDU5QjNCMTZGN0NFMTQyQ0Q0RDkwNjRFOEJENTdFMjVFQTE4OTJDM0VCNDEyRjhBODUwMzg5QjNDNEE3Qjg2QTU5QTYwRDg4NkVBMTQwNEE2RTU1MUM5RjA5Mzk1RTY1ODVCRTlDRDIwOEM0Qjk5NUM1OEIxNjMyREIyMkY3MTUxRjhBRTg3MEEyNzZEQjBGMTcyMDQyODQwNTcKKzdFRTQKK0JGMEIxN0Y5MUE0RTk5RDdDRkQyOTdENjRDQTRDMDIwQjM0QzE4RjI2Qzc1MTg1ODIyQjk1RAorREI4NkM1MDgKKzA4QTMzNUY4NThGNkYwQzNDQzRBNTdDOEY2QUEKKzkzNjJFOEE4NDFCMDY5RkVDRjhDNDI4N0U2Nzg0QkM0NjZENjAxOEQ2MjUyREJGQTNDNkQ2OUQyQ0IzQjIzRUE2RTM4MjA4OUZDRjAwQkJEN0U4QkVDMjU1Njg1MjAwNEZEREY5RkNDRTUyQkEyNzNDRUNCMDhBRjcxM0U4RkNDQUI2QjFEOENDQzBBMkU1OEVGNURGRUQ4MEYyMkM4NTVCNUY5NEU1NDlDNDE4MzA5ODczRjZFQUI0QkFCRkVFMDE4OTI3OTIyNUMwQjVGRjFGNzdBNUJBMTk0RkE2M0UzN0NEMzNBMDhGNjg5RUQyOEE2CitCNTdDOTBEMgorMEZGQkI1QzU1QjQxRUY4RDQ0NEVFNjdBRUU2OQorRUZDNzNDRDE1NjhBQTJDM0IxMjU3NkJDNzE2MTBFMEQ3NURDNzI0NkRFNkNBMEQxNzQ4REM3ODk4Mjk4NTRBNDAxQUU0MEY4MTE5NUVEMTM1OTZDRTFBNzRENUM1RDI0OTFFRkYzQkI3QjMxODVBRThENUVDMzhCMkI0NDFCOTQwRDBFRTYzRjUzRUY1Nzg1QTEwODVBQjVBQkRCNzdBODA2QkVDQ0Y0OUZBMjNDOEI3QTNEM0Y0MUUzMkYzQkVBOTIxQjhGQjFEOUU5RDQ3RTJEMzgwQ0U2OUUyNTBGMzY4NUU5OUVFREQ0NjVBRUY5NUM1MjlCQkRBNjQ3CitCODkyCitGNUJENzBDQ0VERDg5NjdERkE3MEIxQzZBQ0QyREI2NTJCMEQxMDZCNjQyREFEMjFDMzA4MzZBNzgzMjZCMEIxMjEwNDUzNDVGMDg1MjBDQzRGMUIxOENENzVBRDU3MDM5MzM2MDlGMjIxQjAyOEY3NjQxMDQ2NDk2RUMwM0EyMEMxM0RERTZBMUUxMDQwNjQzQjhEMTcKKzY4NzUyRUY3CisyOEFFMzBBRDZBMjIyRjk5NTM1MDYxQjJDQworOTk0RDQxRUZFNDJCNEVEM0IxQjlERTg3RUU1MjhDMzc2OUJEQzE2RDlERTA3REM3NTk5MUI3Q0IzQzc1QjU4NjdDQkI1OEI2NDIyMUE1QTE0QTQwMEM1MjQ5QkExRjIwOEQzNDNERDkzRTZENkVBOTE1QjdFOTM5NzE3NTRFRjQwRjZDNzk1RjA5OEFDQkM5NkNFMkY5NEY3Q0Y5QzMxN0JCQUQxMjg2OTQ2OUQwRjlEQ0JGRTRBQjUwREU3NworMjQwQzQ4RkUKK0M2M0M2OEJCNDlDQjQ2ODZDQ0I5NDgyMjg5MTgKKzFEODlDRjc0MDlGNzM4QjAwMTM5M0RENTU1QkM2OTVENDc1MTA1ODkwQTY2RTdDQUEwQzk2NUU2NUJDRkE5NEZERDU0QkVGQzRFN0YyREQwQUIxQzNEODdBOTZFOEM0QTFCOUYyQkEwNUU0MDkzMTU3OERCOTU2RDM3NDA1OUJCMjA1QkM4NEU2NUM4OUJCNDVBMTgwMzVGOUY0QTM1ODgzRDIyODdFNTAxQjRBRjM3NzBBQkIzNDhBODMxNkVDMzA5QUU4MjFGMkEzN0Q1MThGM0ExQTVCREY4QUJBQTVCOEM5QTQzMDE3QTUzRUNBRjJBOUZDODk1NkI1OQorNzUwOAorNUYxMEFGNTQxNDEwNkRCMTczNUY1RjlCRDQ5RjNEQjg5MURCREJCRDJEQ0FEOTFBQjlBRjUwRDBBNzlEQjNFMDNBOTdFQTIyMjUwNDExRDkyMUQ4CisxODQyMzU0RAorM0Q2RDUzOEU0NEZFNzc1NTZDQTY1MTBBRDYKK0JEODdFOUJEN0M1MDQyQzI1RDY2RDUyNEI2MkNFRjdERjJENDhERDEzQ0M5MEE4M0VGNDhDQ0M3MDQ4MjRCNkVCNERBNjkyNEI3OEJFQzRCQzQ0MTdFNjBEQTIzNzJCRjNFQ0MzNzQ1MjlCQTBERjY1NUYxMDhDRTExRDEyNTFCODEyN0IwOTZGNEQ1Q0EwNkU5QzUwMzA4RjFBQzIyQkFCRjEzQzZCNkQxNERBRUU3MDUwMzAwCis2NUM2MjZFMAorQkYwREQ0OEFFRkQxQTQ2MkQxNDU3MjJDMDU2NAorNDg0MDg2NUE4MzNCNzcwQTgzMUQ0MjEwMjY4QkM1RDQyNDgwNjAwRDdDMDZGODI4NDJBNDgxQTNENjQ0MDg1RDEyQkY4N0IzQ0UzQ0QzODMyREMxMTExODlGRkM0RUY3REQ5Q0ZFRkMzOEYxRjJGNjg5NDgwQzBDODMxRTFERjhEM0Y3QzMwNjZGQjNFNTgzM0Q1NEU2RDE0REJEN0Y3RDFEQTM3REVGMEVCQ0JCQTM1NTkyNjYzRUY1RjczMTZDQTE0ODg1NTY4OTUwQzI5NDU2QTM3MkY5MkQ3QzZCRkFCRTMzMzUwM0QxREEKKzM0RDNFMTczCiswNDE3MEY2NjAyMzAwMkQyRURGN0Y3QjBDNQorM0Y4NzgwRDhCOUNBMDFCN0Y4NEVDQjUxRjhCODJFRUExMTFBODVEN0U3NTlGMDVGMUJCNjQwNEQyODhGMEMwNkU3QjQwODBBNzhBODkzQzZBMjExRUQ4MDdGNEQ1NEUyMDI2RkVEQ0FCMEU1QUJFMTc4MTEzQjY3MTNEMUQxQjFBMkU0RDI3RDQxQTI2NzE0NEQxQzk0NUYxRDMyNjdDMDQ2MEZDNzUyNEJDRUM3Cis1OEEwOEE3MAorOTI1RTAwRjVCRUZBMkNENTJCM0U0NEQ4QzFBRgorRUFCNjY2NTVCMzk4MkVGNTBBRkJCRkJFRDcwRENFQUFDMEIxMzU2Qzk5MzBFNzREQzRFMDFGM0VGRkU5RTk1NEY0RDI2NTAwNkVEMENBQTgxQkQwMkVGNjJBQTJBREQ0RURBOUJDQ0QwQTdFNzhBNTYxQ0Q2Rjk3OEE1ODVBNDFCMTFFQjFGNDM0MkIwMjI4MEM1OEVDMzNEQkI5NzI2N0U4REZGMjk3QjVDREE3MzgzMEI0Nzk2NTlCNzVGQTE0OTIwMUFFRTc2Qzc1RDA3QzFCQTYwQzk2NTRGNTM3NUQxMDcyRUJBMzU0N0UwRUQ1M0Q0OTE4RERGQzVGCisyRDlFCis3NEM0QUQxMzk5REU2N0UwMzA5MjYzMEI4NjY5QjdBNzYxREYzMUM4QjgzODZECis4MjZFMDExMQorMjkzNzJDNDk0ODUzRkJBQzVGMzAyRUNGQjkKK0I1RjFGOTcyNzhBRjdEOUVBOENBRUNERTY0NUZGOTRBQzRFQjg5Mjk0NUVFRjAyMjFGMEE1QTkxM0IwQjA3MzNCM0E0REZFMkY4RTA0OTk4NEQwRUFDRkUxRkMxQThCNDYwNDBGQUFFQUFFRDZBOEVEQzFGNTk5NTIwRUZCNDhDOTAyNkY4MTJCQjJEQjEwNDI3RDEwMUYzRUZDQTAzQjMzQjdDMTc1MkExRUYzOTZERjdGMworREQ0NkZDNDAKK0M5NTQ4QjJGRDJFREY3ODgwRTJDNzlFRjIxRjcKKzNBQkMxMjFEMERFNkI1RDgKKzgzRUQ3RkU3Cis2MDcxRTA1MjBBQkM0MzQxODEyRDBCMEI5Q0Q5MDA4RjUyOUM4QjYxNzEyQjY1MENENEVDNUU4QTMyOTczQjU5NkQ5OQorOTVBQkEwNTc3MUMxN0E5MTlFNzg4MEFDRDAxMjc1OUJEQjkwREVGMzM4MEZFRDQ5QzE4NkEzQUI3N0FCMTEzNjREQ0ExRjU1QzM5RgorRkRFOUM2N0QzOTJFQ0Y3N0U5MDk1RkI2QkM5ODA4NDFFMzc3REFDQzg0ODg2NjRFM0U3RkMzCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyYiAxMi4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJpIDEyLjAwIC9QU093c3RkdXRjaGkgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTkyODM3MzMyODM1MjkwZTAxMTAwMTExMjgzMTI2MmIzMDI0MzUyZTAxMjkzMjM1MDExODI4MjQzNjM4MzUyYzMxMmEwMTE5MjgzNzNhMzIzNTJlMDExYj4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyODM1MjkzMjM1MzAyNDMxMjYyOD4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MDkwZD4gOTM0NiAxMzMwMCAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI4MCAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjgwIDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyODAgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjgwIDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE2Mzc+IDEyNzEgMTQzMSAwIDE0MjEgLTEgcworPDAwMmMzNjAwMmMzMDMzMzIzNTM3MjQzMTM3MDAzNzJiMjQzNzAwMzcyYjJjMzYwMDM3MjgzNjM3MDAzNTM4MzEwMDI5MzIzNTAwMjQwMDM1MjgyNDM2MzIzMTI0MjUyZjI4MDAyZjI4MzEyYTM3MmIwMDMyMjk+IDE0MjEgMTQzMSAxMSA2NDg4IDAgcworPDAwMzcyYzMwMjgwMDA1MDAyNDM3MDAyZjI4MjQzNjM3MDAzNzNhMzIwMDMwMmMzMTM4MzcyODM2MDYwMDFlMmIyYzM2PiA2NDg4IDE0MzEgNyA5NTMxIDAgcworPDJjMzY+IDEyNzEgMTY3NiAwIDE0MTAgLTEgcworPDAwMzUyODJmMjQzNzI4MjcwMDM3MzIwMDM3MmIyODAwMjUyODJiMjQzOTJjMzIzNTAwMzIyOTAwMzkyNDM1MmMzMjM4MzYwMDFlMTIxYjAwMmMzMDMzMmYyODMwMjgzMTM3MjQzNzJjMzIzMTM2MDYwMDE2MjkwMDNjMzIzODAwMzUzODMxPiAxNDEwIDE2NzYgMTEgNzM3NCAwIHMKKzwwMDM3MmIyODAwMzcyODM2MzcwMDI5MzIzNTAwMzYyYjMyMzUzNzI4MzUwMDMzMjgzNTJjPiA3Mzc0IDE2NzYgNSA5NDYxIDAgcworPDNlPiA5NDYxIDE2NzYgMCA5NTMxIC0xIHMKKzwzMjI3MzY+IDEyNzEgMTkyMSAwIDE1ODQgLTEgcworPDAwMzIyOTAwMzcyYzMwMjgwNDAwMzcyYjI4MDAzNTI4MzYzODJmMzczNjAwMjYzMjM4MmYyNzAwMjUyODAwMmIyYzJhMmIyODM1MDAzNzJiMjQzMTAwMzYyODI4MzEwMDJjMzEwMDI0MDAzNjM3MjgyNDI3M2MwNTM2MzcyNDM3MjgwMDI2MzIzMTI3MmMzNzJjMzIzMTA2MDAxZDMyMDQwMDI0MDAyYTMyMzIyNz4gMTU4NCAxOTIxIDE2IDk1MzEgMCBzCis8MWUxMjFiMjIxMjFjMWM+IDEyNzEgMjE2NiAwIDIyNzAgLTEgcworPDAwMjYzMjMwMzAyNDMxMjcwMDJmMmMzMTI4MDAzNzMyMDAzNjJjMzAzODJmMjQzNzI4MDAyNDAwM2EyODI1MDUzNjI4MzUzOTI4MzUwMDMwMmMyYTJiMzcwMDJmMzIzMjJlMDAyZjJjMmUyODBlPiAyMjcwIDIxNjYgOSA3NDMwIDAgcworPDAzPiAxMzk4IDI1MDUgMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDMxNDE1MTkwMzEzMGYxOTE1MGYxNzEwMDMxMzBmMTkxNTBmMTcxMDAwMDIxOTAwPiAxNTA0IDI1MDUgMyAzNjkyIDAgcword3N0OmR1dGNoMTIgU0YKKzwxZTEyMWIyMjEyMWMxYz4gMzY5MiAyNTA1IDAgNDY5MSAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDAyMTEwMD4gNDY5MSAyNTA1IDIgNTAzNyAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDkwYTA4PiA1MDM3IDI1MDUgMCA1MzU1IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDIwNjAwPiA1MzU1IDI1MDUgMiA1ODAzIDAgcword3N0OmR1dGNoMTJpIFNGCis8MGEwNDA3MDgwYzA0MDUwODBiMGM+IDU4MDMgMjUwNSAwIDY3NjIgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMjAyMDAwMjE3MDA+IDY3NjIgMjUwNSAzIDc1NDMgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDBiMGEwNDA5MDgwYTBjPiA3NTQzIDI1MDUgMCA4MjMyIC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBjMGEwNzAwMGEwNDA4MDAwOT4gMTI3MSAyOTc1IDIgMjMwNSAwIHMKKzwwZjE2MWEwZjE4MTkwMzA5PiAyMzAxIDI5NzUgMCAzMDkzIC0xIHMKKzwwZjE4MTUxNDEzMTgwZjAwMDg+IDMwODkgMjk3NSAxIDM5ODkgMCBzCis8MGYxNzEwMTQxNzEyMGQxMzBlMGY+IDM5ODEgMjk3NSAwIDUwMjMgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxZTJiMjg+IDEyNzEgMzM4NSAwIDE2MzEgLTEgcworPDAwMjAxZTE2PiAxNjMxIDMzODUgMSAyMDU4IDAgcworPDAwMWUxMjFiMDAzNTI4MzQzODI4MzYzNzA3MzUyODM2MzMzMjMxMzYyODAwMzcyODM2MzcwMDI2MjQzMTAwMjUyODAwMmMzMTM5MzIyZTI4MjcwMDNhMmMzNzJiMDAzMTI4MzczMzI4MzUyOTAwMzcyYjMyMzgyYTJiMDAzNzJiMjgwMDM4MzYyODAwMzIyOTAwMzcyYjI4MDAwNTM3MDAzMjMzPiAyMDU4IDMzODUgMTUgOTQ2MSAwIHMKKzwzZT4gOTQ2MSAzMzg1IDAgOTUzMSAtMSBzCis8MzcyYzMyMzE+IDEyNzEgMzYzMCAwIDE2MzAgLTEgcworPDAwM2EyYzM3MmIwMDI0MzEwMDI0MzUyYTM4MzAyODMxMzcwMDMyMjkwMDIwMWUxNjIyMWUxMjFiMjIxYzFjMDYwMDE5MzIzNz4gMTYzMCAzNjMwIDYgNTM1NSAwIHMKKzwwMDI0MmYyZjAwMzYzYzM2MzcyODMwMzYwMDMzMzgzNzAwMzcyYjI4MDAzNTI4MzQzODJjMzYyYzM3MjgwMDI3MjgzOTJjMjYyODAwMjkyYzJmMjgzNjAwMmMzMTAwMzcyYjI4PiA1MzU1IDM2MzAgOSA5NTMxIDAgcworPDM2MjQzMDI4PiAxMjcxIDM4NzUgMCAxNzM2IC0xIHMKKzwwMDJmMzIyNjI0MzcyYzMyMzEwNDAwMzYzMjA0MDAyNDAwMjMyMzI3MjgyOTI0MzgyZjM3MDIwMDM1MjgzNDM4MjgzNjM3MDczNTI4MzYzMzMyMzEzNjI4MDAyNjMyMzAzMDI0MzEyNzAwMzIzMTAwMTUxYjA1MWYyMDAwM2EzMjM4MmYyNzAwMmYzMjMyMmUwMDM2MzIzMDI4MzcyYjJjMzEyYT4gMTczNiAzODc1IDExIDk1MzEgMCBzCis8MmYyYzJlMjg+IDEyNzEgNDEyMCAwIDE2MDIgLTEgcworPDAwMzcyYjJjMzYwZT4gMTYwMiA0MTIwIDEgMjAzNyAwIHMKKzwwMz4gMTM5OCA0NDU5IDAgMTUwNCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDAzMTQxNTE5MDMxMzBmMTkxNTBmMTcxMDAzMTMwZjE5MTUwZjE3MTAwMDAyMDYwMD4gMTUwNCA0NDU5IDMgMzc4NSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBhMDQwNzA4MGMwNDA1MDgwYjBjPiAzNzg1IDQ0NTkgMCA0NzQ0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDIxOTAwPiA0NzQ0IDQ0NTkgMiA1MDk5IDAgcword3N0OmR1dGNoMTIgU0YKKzwyMDFlMTYyMjFlMTIxYjIyMWMxYzAwMDUwNTAwPiA1MDk5IDQ0NTkgMiA2ODk3IDAgcword3N0OmR1dGNoMTJiIFNGCis8MDIwYz4gNjg5NyA0NDU5IDAgNzIyMyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMDcyNzI4MzkwNzJjMzEyODM3MjIyNjMyMzczNj4gNzIyMyA0NDU5IDEgODUyMiAwIHMKKzwyNDMxMjc+IDEyNzEgNDc5OCAwIDE2MDggLTEgcworPDAwM2EyYzJmMmYwMDM4MzYyODAwMzcyYjI4MDAzNjNjMzYzNzI4MzAwMDI3MjgyOTI0MzgyZjM3MDAzNjMyMjYyZTI4MzcwMDI1MzgyOTI5MjgzNTAwMzYyYzNkMjgzNjA0MDAyNDAwMjcyODI5MjQzODJmMzcwMDM1MjgzNDM4MjgzNjM3MDAzNjJjM2QyODAwMzIyOTAwMDkwMDI1M2MzNzI4MDQwMDI0MzEyNzAwMjQ+IDE2MDggNDc5OCAxNyA4ODU5IDAgcworPDAwMjcyODI5MjQzODJmMzc+IDg4NTkgNDc5OCAxIDk1MzEgMCBzCis8MzUyODM2MzMzMjMxMzYyOD4gMTI3MSA1MDQzIDAgMjA3MiAtMSBzCis8MDAzNjJjM2QyODAwMzIyOTAwMDkwMDI1M2MzNzI4MDY+IDIwNzIgNTA0MyA0IDMzNDcgMCBzCis8MWUyYjI4PiAxMjcxIDUzODMgMCAxNjMxIC0xIHMKKzwwMDI2MzIzMDMwMjQzMTI3MDUyZjJjMzEyODAwMzIzMzM3MmMzMjMxMzYwMDI5MzIzNTAwMzcyYjI4MDAyMDFlMTYyMjFlMTIxYjIyMWMxYzAwMzcyODM2MzcwMDI0MzUyODAwMzcyYjI4MDAzNjI0MzAyODAwMjQzNjAwMzcyYjI4MDAxZTEyMWIyMjFjMWMwMDM3MjgzNjM3MDQwMDNhMmMzNzJiPiAxNjMxIDUzODMgMTQgOTUzMSAwIHMKKzwzNzJiMjg+IDEyNzEgNTYyNyAwIDE1NjEgLTEgcworPDAwMjkzMjJmMmYzMjNhMmMzMTJhMDAyNDI3MjcyYzM3MmMzMjMxMzYwZT4gMTU2MSA1NjI3IDIgMzM5OCAwIHMKKzwwNTIwPiAxNTg5IDU5NjcgMCAxOTI5IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDQwZTBiMDkwNDAyPiAyMDMzIDU5NjcgMCAyNzAwIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzYyODM3MDAzNzJiMjgwMDJmMzIyNjI0MmYwNzM1MjgzMDMyMzcyODAwMjAxZTE2MDAyNzI4MzkyYzI2MjgwMDI5MmMyZjI4MDAzMTI0MzAyODAwMjkzNTMyMzAwMDAwPiAzMTc3IDU5NjcgOSA3NTI1IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDMwNDBlMGIwOTA0MDI+IDc1MjUgNTk2NyAwIDgxOTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwNj4gODE5MiA1OTY3IDAgODI0NSAtMSBzCis8MWUyYjI4PiAxMjcxIDYzMDYgMCAxNjMxIC0xIHMKKzwwMDM1MjgzNDM4MjgzNjM3MDAyNDMxMjcwMDM1MjgzNjMzMzIzMTM2MjgwMDM2MmMzZDI4MzYwMDNhMmMyZjJmMDAyNTI4MDAzNzJiMjgwMDI1MzgyOTI5MjgzNTAwMzYyYzNkMjgzNjAwMzMzMjM2MzcyODI3MDAzNzMyMDAzNjI4MzEyNzAwMjQzMTI3MDAzNTI4MjYyODJjMzkyODA2MDAxMDM2MDAxZTEyMWIwMDJjMzY+IDE2MzEgNjMwNiAxNyA5NTMxIDAgcworPDI0PiAxMjcxIDY1NTEgMCAxMzc2IC0xIHMKKzwwMDM2MzczNTI4MjQzMDAwMzMzNTMyMzczMjI2MzIyZjAwMjQzMTI3MDAzMTMyMzcwMDI0MDAzMDI4MzYzNjI0MmEyODAwMzMzNTMyMzczMjI2MzIyZjA0MDAyYzM3MDAyYzM2MDAzMTI4MjYyODM2MzYyNDM1M2MwMDM3MzIwMDJmMzIzMjMzMDAzMjMxMDAzNTI4MjYyODJjMzkyODM2MDAzODMxMzcyYzJmMDAzNzJiMjgwMDI4MzEzNzJjMzUyOD4gMTM3NiA2NTUxIDE3IDk1MzEgMCBzCis8MzAyODM2MzYyNDJhMjg+IDEyNzEgNjc5NiAwIDIwMjUgLTEgcworPDAwMmMzNjAwMjcyODJmMmMzOTI4MzUyODI3MDYwMDFlMmIyODAwMjUzODI5MjkyODM1MDAzMzMyMmMzMTM3MjgzNTAwMzMyNDM2MzYyODI3MDAzNzMyMDAzNzJiMjgwMDI5MmMzNTM2MzcwMDM1MjgyNjI4MmMzOTI4MDAyOTMyMzUwMDI0MzEwMDJjMzEyNzJjMzkyYzI3MzgyNDJmMDAzNzM1MjQzMTM2MjQyNjM3MmMzMjMxPiAyMDI1IDY3OTYgMTQgOTUzMSAwIHMKKzwzYTJjMmYyZj4gMTI3MSA3MDQxIDAgMTU4OCAtMSBzCis8MDAyNTI4MDAyNDJmMmMyYTMxMjgyNzAwMjQzMTI3MDAzMjI5MjkzNjI4MzcwMDI0MzYwMDM1MjgzNDM4MjgzNjM3MjgyNzAwMjUzYzAwMzcyYjI4MDAzODM2MjgzNTA2MDAxNjM3MDAzYTJjMmYyZjAwMjUyODAwMmMzMTI2MzUyODMwMjgzMTM3MjgyNzAwMjUzYzAwMzcyYjI4MDAzMTM4MzAyNTI4MzUwMDMyMjk+IDE1ODggNzA0MSAxNyA5NTMxIDAgcworPDI1M2MzNzI4MzY+IDEyNzEgNzI4NiAwIDE3MzQgLTEgcworPDAwMzUyODI2MjgyYzM5MjgyNzAwMjgyNDI2MmIwMDM3MmMzMDI4MDAzODMxMzcyYzJmMDAzNzJiMjgwMDI4MzEzNzJjMzUyODAwMzUyODM0MzgyODM2MzcwNzM1MjgzNjMzMzIzMTM2MjgwMDJjMzYwMDM1MjgyNjI4MmMzOTI4MjcwNjAwMWUyYjI4MDAyNTM4MjkyOTI4MzUwMDMzMzIyYzMxMzcyODM1PiAxNzM0IDcyODYgMTIgOTE2OSAwIHMKKzwwMDNhMmMyZjJmPiA5MTY5IDcyODYgMSA5NTMxIDAgcworPDI1Mjg+IDEyNzEgNzUzMSAwIDE0ODkgLTEgcworPDAwMzUyODA1MjQyZjJjMmEzMTI4MjcwMDI0MzEyNzAwMzIyOTI5MzYyODM3MDAyOTMyMzUwMDM3MmIyODAwMzEyODNiMzcwMDM3MzUyNDMxMzYyNDI2MzcyYzMyMzEwNj4gMTQ4OSA3NTMxIDcgNTczNSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBiMDUwODAwMDk+IDEyNzEgODAwMCAxIDE5MTYgMCBzCis8MGYxNjFhMGYxODE5MDMwOT4gMTkxMiA4MDAwIDAgMjcwNCAtMSBzCis8MGYxODE1MTQxMzE4MGYwMDA4PiAyNzAwIDgwMDAgMSAzNjAwIDAgcworPDBmMTcxMDE0MTcxMjBkMTMwZTBmPiAzNTkyIDgwMDAgMCA0NjM0IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MWYxMzFiPiAxMjcxIDg0MTAgMCAxNzQ0IC0xIHMKKzwwMDM1MjgzNDM4MjgzNjM3MDczNTI4MzYzMzMyMzEzNjI4MDAzMzI4MzUyOTMyMzUzMDI0MzEyNjI4MDAzYTMyMzUyZTM2MDAyZDM4MzYzNzAwMmYyYzJlMjgwMDFlMTIxYjAwMzUyODM0MzgyODM2MzcwNzM1MjgzNjMzMzIzMTM2MjgwMDMzMjgzNTI5MzIzNTMwMjQzMTI2MjgwNj4gMTc0NCA4NDEwIDggOTIwMSAwIHMKKzwwMDEwMmYyZj4gOTIwMSA4NDEwIDEgOTUzMSAwIHMKKzwzNzJiMjg+IDEyNzEgODY1NSAwIDE1NjEgLTEgcworPDAwMzIzMzM3MmMzMjMxMzYwMDI0MzkyNDJjMmYyNDI1MmYyODAwMzcyYjI4MzUyODAwMjQzNTI4MDAzMzM1MjgzNjI4MzEzNzAwMmIyODM1MjgwMDNhMmMzNzJiMDAzNzJiMjgwMDI4M2IyNjI4MzMzNzJjMzIzMTAwMzIyOTAwMzcyYjI4MDAwNTEzMDAzMjMzMzcyYzMyMzEwZj4gMTU2MSA4NjU1IDEzIDg1NTQgMCBzCis8MDAxZTEyMWIyMjE5MWE+IDg1NTQgODY1NSAxIDk0NjEgMCBzCis8M2U+IDk0NjEgODY1NSAwIDk1MzEgLTEgcworPDEzMTQxNzEwPiAxMjcxIDg5MDAgMCAxODg5IC0xIHMKKzwyMT4gMTg2NiA4OTAwIDAgMjAyOCAtMSBzCis8MDAyYjI0MzYwMDMxMzIwMDMwMjgyNDMxMmMzMTJhMDAyOTMyMzUwMDI0MDAxZjEzMWIwMDM3MjgzNjM3MDYwMDFlPiAyMDI4IDg5MDAgOCA1MDI5IDAgcworPDMyMDAyYzMxMzkzMjJlMjgwMDI0MDAxZjEzMWIwMDM1MjgzNDM4MjgzNjM3MDczNTI4MzYzMzMyMzEzNjI4MDAzNzI4MzYzNzA0MDAzODM2MjgwMDI0MzEwMDI0MzUyYTM4PiA0OTk4IDg5MDAgOCA5NDYxIDAgcworPDNlPiA5NDYxIDg5MDAgMCA5NTMxIC0xIHMKKzwzMDI4MzEzNz4gMTI3MSA5MTQ1IDAgMTczNSAtMSBzCis8MDAzMjI5MDAxZjEzMWIyMjFjMWMwMDNhMmMzNzJiMDAzNzJiMjgwMDA1MzcwMDMyMzMzNzJjMzIzMTAwMzczMjAwMzMzNTMyMjczODI2MjgwMDI0MDAyNjMyMzAzMDI0MzEyNzAwMmYyYzJlMjgwMDM2MzIzMDI4MzcyYjJjMzEyYTAwMmYyYzJlMjgwMDM3MmIyYzM2MGU+IDE3MzUgOTE0NSAxNCA4OTkwIDAgcworPDAzPiAxMzk4IDk0ODQgMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDMxNDE1MTkwMzEzMGYxOTE1MGYxNzEwMDMxMzBmMTkxNTBmMTcxMDAwMDIwNjAwPiAxNTA0IDk0ODQgMyAzNzg1IDAgcword3N0OmR1dGNoMTJpIFNGCis8MGEwNDA3MDgwYzA0MDUwODBiMGM+IDM3ODUgOTQ4NCAwIDQ3NDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMjE5MDA+IDQ3NDQgOTQ4NCAyIDUwOTkgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFmMTMxYjIyMWMxYz4gNTA5OSA5NDg0IDAgNjAwNCAtMSBzCis8MTAyYTI0MmMzMTA0PiAxMjcxIDk4MjMgMCAxODY5IC0xIHMKKzwwMDI0MDAzNjI2MzUyYzMzMzcwMDJjMzYwMDMzMzUzMjM5MmMyNzI4MjcwMDNhMmIyYzI2MmIwMDNhMmMyZjJmMDAyYTI4MzEyODM1MjQzNzI4MDAzNTI4MzYzODJmMzczNjAwMjkzMjM1MDAzNjMyMzAyODAwMzIyOTAwMzcyYjI4MDAzMDMyMzUyODAwMjYzMjMwMzAzMjMxPiAxODY5IDk4MjMgMTQgOTAwNCAwIHMKKzwwMDI3MjQzNzI0PiA5MDA0IDk4MjMgMSA5NDYxIDAgcworPDNlPiA5NDYxIDk4MjMgMCA5NTMxIC0xIHMKKzwzMzMyMmMzMTM3MzYwNj4gMTI3MSAxMDA2OCAwIDE4ODAgLTEgcworPDAwMTYzNzAwMmMzNjAwMzEyNDMwMjgyNzAwPiAxODgwIDEwMDY4IDQgMjk5NyAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBkMDMwOTAxMGEwYTAxMGIwMjBhMDYwOTBjPiAyOTk3IDEwMDY4IDAgNDE1MCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA2PiA0MTUwIDEwMDY4IDAgNDIwMyAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYzBhMDcwMDBiMDUwODAwMDk+IDEyNzEgMTA1MzggMiAyMzM0IDAgcworPDBmMTYxYTBmMTgxOTAzMDk+IDIzMzAgMTA1MzggMCAzMTIyIC0xIHMKKzwwZjE4MTUxNDEzMTgwZjAwMDg+IDMxMTggMTA1MzggMSA0MDE4IDAgcworPDBmMTcxMDE0MTcxMjBkMTMwZTBmPiA0MDEwIDEwNTM4IDAgNTA1MiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlMmIyOD4gMTI3MSAxMDk0OCAwIDE2MzEgLTEgcworPDAwMjAxZTE2MDAxZjEzMWIwMDM1MjgzNDM4MjgzNjM3MDczNTI4MzYzMzMyMzEzNjI4MDAzNzI4MzYzNzAwMjYyNDMxMDAyNTI4MDAyYzMxMzkzMjJlMjgyNzAwM2EyYzM3MmIwMDMxMjgzNzMzMjgzNTI5MDAzNzJiMzIzODJhMmIwMDM3MmIyODAwMzgzNjI4MDAzMjI5MDAzNzJiMjgwMDA1MzcwMDMyMzM+IDE2MzEgMTA5NDggMTYgOTQ2MSAwIHMKKzwzZT4gOTQ2MSAxMDk0OCAwIDk1MzEgLTEgcworPDM3MmMzMjMxPiAxMjcxIDExMTkzIDAgMTYzMCAtMSBzCis8MDAzYTJjMzcyYjAwMjQzMTAwMjQzNTJhMzgzMDI4MzEzNzAwMzIyOTAwMjAxZTE2MjIxZjEzMWIyMjFjMWMwNjAwMTkzMjM3MDAyNDJmMmYwMDM2M2MzNjM3MjgzMDM2MDAzMzM4MzcwMDM3MmIyODAwMzUyODM0MzgyYzM2MmMzNzI4MDAyNzI4MzkyYzI2MjgwMDI5MmMyZjI4MzYwMDJjMzE+IDE2MzAgMTExOTMgMTQgOTE5MiAwIHMKKzwwMDM3MmIyOD4gOTE5MiAxMTE5MyAxIDk1MzEgMCBzCis8MzYyNDMwMjg+IDEyNzEgMTE0MzggMCAxNzM2IC0xIHMKKzwwMDJmMzIyNjI0MzcyYzMyMzEwNDAwMzYzMjA0MDAyNDAwMjMyMzI3MjgyOTI0MzgyZjM3MDIwMDM1MjgzNDM4MjgzNjM3MDczNTI4MzYzMzMyMzEzNjI4MDAyNjMyMzAzMDI0MzEyNzAwMzIzMTAwMTUxYjA1MWYyMDAwM2EzMjM4MmYyNzAwMmYzMjMyMmUwMDM2MzIzMDI4MzcyYjJjMzEyYT4gMTczNiAxMTQzOCAxMSA5NTMxIDAgcworPDJmMmMyZTI4PiAxMjcxIDExNjgzIDAgMTYwMiAtMSBzCis8MDAzNzJiMmMzNjBlPiAxNjAyIDExNjgzIDEgMjAzNyAwIHMKKzwwMz4gMTM5OCAxMjAyMiAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzE0MTUxOTAzMTMwZjE5MTUwZjE3MTAwMzEzMGYxOTE1MGYxNzEwMDAwMjA2MDA+IDE1MDQgMTIwMjIgMyAzNzg1IDAgcword3N0OmR1dGNoMTJpIFNGCis8MGEwNDA3MDgwYzA0MDUwODBiMGM+IDM3ODUgMTIwMjIgMCA0NzQ0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDIxOTAwPiA0NzQ0IDEyMDIyIDIgNTA5OSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MjAxZTE2MjIxZjEzMWIyMjFjMWMwMDA1MDUwMD4gNTA5OSAxMjAyMiAyIDY5NTMgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMjBjPiA2OTUzIDEyMDIyIDAgNzI3OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMDcyNzI4MzkwNzJjMzEyODM3MjIyNjJmMzczNj4gNzI3OSAxMjAyMiAxIDg1MjAgMCBzCis8MjQzMTI3PiAxMjcxIDEyMzYxIDAgMTYwOCAtMSBzCis8MDAzYTJjMmYyZjAwMzgzNjI4MDAzNzJiMjgwMDM2M2MzNjM3MjgzMDAwMjcyODI5MjQzODJmMzcwMDM2MzIyNjJlMjgzNzAwMjUzODI5MjkyODM1MDAzNjJjM2QyODM2MDQwMDI0MDAyNzI4MjkyNDM4MmYzNzAwMzUyODM0MzgyODM2MzcwMDM2MmMzZDI4MDAzMjI5MDAwOTAwMjUzYzM3MjgwNDAwMjQzMTI3MDAyND4gMTYwOCAxMjM2MSAxNyA4ODU5IDAgcworPDAwMjcyODI5MjQzODJmMzc+IDg4NTkgMTIzNjEgMSA5NTMxIDAgcworPDM1MjgzNjMzMzIzMTM2Mjg+IDEyNzEgMTI2MDYgMCAyMDcyIC0xIHMKKzwwMDM2MmMzZDI4MDAzMjI5MDAwOTAwMjUzYzM3MjgwNj4gMjA3MiAxMjYwNiA0IDMzNDcgMCBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMTcpIDE3CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzYgcHV0CitkdXAgMyAvQzAwMzkgcHV0CitkdXAgNCAvQzAwNDAgcHV0CitkdXAgNSAvQzAwNDEgcHV0CitkdXAgNiAvQzAwNDQgcHV0CitkdXAgNyAvQzAwNDUgcHV0CitkdXAgOCAvQzAwNDYgcHV0CitkdXAgOSAvQzAwNDcgcHV0CitkdXAgMTAgL0MwMDQ4IHB1dAorZHVwIDExIC9DMDA0OSBwdXQKK2R1cCAxMiAvQzAwNTAgcHV0CitkdXAgMTMgL0MwMDU1IHB1dAorZHVwIDE0IC9DMDA1NiBwdXQKK2R1cCAxNSAvQzAwNTggcHV0CitkdXAgMTYgL0MwMDY1IHB1dAorZHVwIDE3IC9DMDA2NiBwdXQKK2R1cCAxOCAvQzAwNjcgcHV0CitkdXAgMTkgL0MwMDY4IHB1dAorZHVwIDIwIC9DMDA3MiBwdXQKK2R1cCAyMSAvQzAwNzMgcHV0CitkdXAgMjIgL0MwMDc2IHB1dAorZHVwIDIzIC9DMDA3NyBwdXQKK2R1cCAyNCAvQzAwNzggcHV0CitkdXAgMjUgL0MwMDc5IHB1dAorZHVwIDI2IC9DMDA4MCBwdXQKK2R1cCAyNyAvQzAwODIgcHV0CitkdXAgMjggL0MwMDgzIHB1dAorZHVwIDI5IC9DMDA4NCBwdXQKK2R1cCAzMCAvQzAwODUgcHV0CitkdXAgMzEgL0MwMDg3IHB1dAorZHVwIDMyIC9DMDA4OCBwdXQKK2R1cCAzMyAvQzAwOTUgcHV0CitkdXAgMzQgL0MwMDk3IHB1dAorZHVwIDM1IC9DMDA5OCBwdXQKK2R1cCAzNiAvQzAwOTkgcHV0CitkdXAgMzcgL0MwMTAwIHB1dAorZHVwIDM4IC9DMDEwMSBwdXQKK2R1cCAzOSAvQzAxMDIgcHV0CitkdXAgNDAgL0MwMTAzIHB1dAorZHVwIDQxIC9DMDEwNCBwdXQKK2R1cCA0MiAvQzAxMDUgcHV0CitkdXAgNDMgL0MwMTA3IHB1dAorZHVwIDQ0IC9DMDEwOCBwdXQKK2R1cCA0NSAvQzAxMDkgcHV0CitkdXAgNDYgL0MwMTEwIHB1dAorZHVwIDQ3IC9DMDExMSBwdXQKK2R1cCA0OCAvQzAxMTIgcHV0CitkdXAgNDkgL0MwMTEzIHB1dAorZHVwIDUwIC9DMDExNCBwdXQKK2R1cCA1MSAvQzAxMTUgcHV0CitkdXAgNTIgL0MwMTE2IHB1dAorZHVwIDUzIC9DMDExNyBwdXQKK2R1cCA1NCAvQzAxMTggcHV0CitkdXAgNTUgL0MwMTE5IHB1dAorZHVwIDU2IC9DMDEyMCBwdXQKK2R1cCA1NyAvQzAxMjEgcHV0CitkdXAgNTggL0MwMTIyIHB1dAorZHVwIDU5IC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTI1NiA5NzggNzY2XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjI0NTdEOENFMzU5ODA0MjlCQjFEOTE5QTBBRThCRDdFNUM4CitGRDE1RjdGNjFCRjBEMjgzNjkwOEJGQkMKK0Q0Q0IzOTE5ODY0NEYzMUJCRQorRDczQTY4OUYKKzkzMUIxRkQ2MEY2MzBGN0Y5QkVENkYxQ0Q1NTkKKzM4RTRDOTA2NjlCNDk0OTM3QTM3NTk2RTZGRDFCQ0ZBMDhCRTk4RkIyMjAxNTU2NEJGQzAxQzhCNjcyMzk1NTIyNUFCNDlBRkQ1RDkwOUZBNjg5RDU5QzFFM0UzNjEyNkE0N0QyMkJENTVCMDgyQTQyOTlCMUYyREVBMjUxNDcyQ0ZDQzA2QTU0NkRERTVCNUUyN0YzNkYzOTgzNEJGRUFCNDcyRDFDQkVDQzUyRjBBQkY4RDIwNjFDRTlDMzY5RURBMTZDMDcxOEExNURGNkZBMjYzNzIyOEMxREEyNjZBNkQ4MTY2RjU1ODAyRTdFMDEzQUNBMjc1RjlFNQorNjU5NAorNUE1MEVDNDc4QTk5Q0IyRjNEQTJDRkM3CitGQTc5MTBGMgorRjdFOTQ5Q0M1QTg0NTkwOUM5NTYwNzM0NjUKK0MzMDk4MTIxQkU0NjA3ODM1NzRFNDIzQzIzMTlGOUFDNjFCQkZCOUEzNDU2Njc3RUZGMjVEQjQzQTE0MUUxMEI1Nzc5M0MzQ0QwQjZBMzgxQzUwNDNGNURBMkUyOTVGMjk2OTVDOTU1ODY2RjhDQTgKKzlDMDg3RTZBCitFRTg0RUE4ODU1NzdCNTQ5NkY0MzZCM0RGMgorNEU3REM2QURGNUEyRDNBNzI3MjMyMTQ5NERGNDYzODI2QzZEOEVCNDFFRTY5MERDMzI1NkUyNTM5MkIzRkRENjdGNDlCOTA4OTQ1MTk2QjUwQTk3RkZFRDlDM0YxQjYwODNCN0Y3OEYxMTJDMzc4RTY1ODY5QUFGRTk1OTcyNkQKK0JFM0I5Njc1Cis2QkZCREJBOUQ1NUNGNTY1MjA1NzJFRUUyRQorQTUyMkY5QkIzRkZDMUM2MkE1QjczQTI2RkYyRDc0ODY1N0JCOUIyNkU3RkQwRUZDOUUyQTMxMzk1MEJBNjUwRjIxRkEzNTkwMDA0MTQwNTI1N0Y3RTFBQzMzOUU0RTIyMkQwNEIxNUY4NzY4MTRENzlCRDA1RUY5QjQ2RDU0CitCRUU4MkUxMworNDEyOTM0QjE2NTUyRkE0OUE3MDdDNjc1QzIKKzg3OTA4RTE1NkREREUzREFBMUU3ODQwNEQ5OUY5RTA1RDFDRkMzQUU4MDA5OEIzQzcxRUJFQzAxRkMzNzJEOENCNUNBOTNFN0NEOEFEN0RDMTIzRUVGNkE0MjI0ODIxOUEyNDY1ODk4NDZENUMyN0IxMAorQTA3MjRFOEIKKzg2RDc4RjY0MEU4RjMwQTY2OTZBMDFEQTcyCisyNEIwNkFBREVBMkVCMjA3NEIzNjFDOUI5N0JBNjJBODA2QUI1NDIyRUZCMjFGCis5M0FFMjNDOQorQTg0RjMyQkEwNzI4NEQ0QTZENDUzREQxNTcKK0IxNjJFQzkxOEQ4MDc0OEVGOUYzRkYxQzQzQThBN0M4MTU4REU3RUM5OTdGRUIxMDA3MjNGMjI1QzIyM0UzCitEMTE2QTNDNworNEQzQUZBRkU2NDU2NjUxQkJDMzdCMDQ4RjAKKzQ5NTRBQkJCMjJENjVCNTFDRDhEREIzNzFEOTRFOEM2NzhGQzlBODcwNkYwNzRFRjAwRTcwNTRDCis3N0MwNDZEQQorREZFOUZGODU1NjhBNDhFM0IyRkQ4MUU5REUKKzg1MEUxRjdFNTRCMDMzMEQ1OThDMTA0QzBEM0E0RUM5MjUwOUJBODYwNzZERDE1ODRBNTU3NUEyQkZBMzU3MEJEMkI0MjJDNzBCOEFEN0E1MDYwREQyNUYzRDBCQjExNjUxRkExMkJFMURERjhDQjMwRjQyQzFGNTY0RUZGRDIxNDU0RDEyOTIyQTZGRDA3NERCODcKK0RDM0M5OTJGCisyQjk2RDkyQTVBQUJCRjcxMUY4NEUzMEVDNworM0FFMDBFOTczMEI2NDI2MEJDRkFBQTAxMUQ0NDI1QTA1QzJENEJBM0IzNkM3Q0Q4QTYzNUZENUFFOENBMURGRDVENjEzRTE2NkQyQjZDMzAwQjI0OTNDNkYyRDMwN0FDQTdEOUE4MkRFODEzMDc2MDQyRkFBMEMxMjg0NUFGCis0N0Y1QkFFMAorOTJEODdGRkE1RUIxNTBENDQ1OEI3NTQ0NUEKKzAwOTlFQTA2NDRCRUM0OTVERjAxRTVFREU1RjlGQzBCRDA3ODI5MkZGQjhBRTI3OUNBQkQ3RTlBN0Q0OEYwQjg4QkJBMkI4NzE3NzI5QUZBRTcyQkU5QTZERDQ3MDY5QUE3MUJBQjEyODM1NzExMzk1QURBREQxMTk4NzdGNkNGNDc3Njk5MUU5OTRENzNFNEI4NEE4QjFCQjAzNkJFNzZBQkRGM0RCMDc0MTk2QjY1M0VGNAorOUI0MEQ3NEUKKzRFNjQwM0Y0NDdDOEVFNEREOUQ1MjNGRTcxCiswRkY2MUQ3NkMzRTczMDlBQkM0RUQ3NEJERDA1ODdCMjAxRUVCNEZEMUExNEM0M0NDNTA3RUJGNTU5Qjg1MEFGRjA0NDYyMEYxRUVDRTNFN0VFN0Y3MAorMDJGOTA4QUQKKzcxREFEMUQ2MTA4NDAzQkM4ODAzN0IxNUE0QTkKKzZCMjc3MkJBMzI3RkY5MzM1NzYyREZEQTBCNzAwQURCMDQ0M0E3MURCQjY4NkFDOUY1QzdDNzJBRTVFNzFCODA1RDc2ODExQkY3RDc5OEE3NjdEODY1MzdDQkY5RjhDRTA3OTAzMDE5NzdDOUJCQjYyNjlEMEExMkRCRDNGRUU4Rjc2RjkwMzFGMTNBNTE5QTgyOTUzN0Y4ODZDQzQwQjRFQTVCMEI0NjA3MUJBQzdCNzc2MDA4NzI1ODc0QjFCNTVFQzdFRjcwRkZGRUI5ODNGRTEwQTVFNEZDRDc0MjU4ODA3QTkwOTdFNDlFQkI2OTM5NzUKKzg5NTNCREEzCis0MDI5MzQwMzY4NzkzOEExODZBQ0U5RjJBOAorRUMyREI5OEY1ODVGRUVGMzBGNDQ5QURBQzU2NjgzQ0ZBQjQ1RDQ3N0JCNkY3MDY1NTJBQkQwNEExRTg0OTEwREU4MkJFRkQxNzkzQjE2Q0E1RkVEODQ2MDM3NUVGRjA2RjBCRTk4MkQ4MkMyCitFRTYyM0JGRQorNEFFNEYwMDJCRkNBN0MzNDE1MTAwMUQ0MUJGOAorNUEyQkFEQUE3M0QxNTg0MzM1REYzMTQ0QzYzQjY3OEJDRjBGMjNBRTc3QzQ4MEIyNzZENjgxQTFEMkQxNEY0RjAxRTAzQUFGQTRCOUU5NDA1QzNGNzIwRkNCOUM2MzZCOUU5Mjg5MjBBMEUyM0Y3NTBENkZGMjY3MDVGNUYwMTAyRDQ2RjYyMEY4RTYxNkEyRDA1Q0Q1QkQ4RjBGNDM3MTI4MjUxNzkyNjU0NTZBNTg5NTdEMjAzOEJBMzNFMEVDMzI2MEJDMThBODZFQjkzNzcxN0E4MDQwQkM1MDU1NTUwOEFGQjAKK0U1QzZDREI1CitCNTM5NjUwQTA0QTg2QkU5MTRFNTI4ODM1NkZDCisyQ0I0M0ZGQ0UxNDExQTkyRDg0NEMxRTBBNzU1RUFDQUEzRDUyNDUyQkIzNjMxMTczQTQxQThGQjI2RDE0QTgxREUxMTQ5QkI1OUM1NzU4QTc4NzE5RDY0ODkzNkQzNkVFN0VFOTExNjJENTBCOTJCMUM2NEQ1NkRBOTlFOENFNzcwRjA0QzBDM0Y4MEI2QzRDQTVGM0UzNzI5NUQ4NDYwMkUwNDFBODRFRjE2OTlENTJFMjY1Q0Y3QkI2MkUyQkIzQzYzMzQzNkY3QjI1QkU3M0MwNzdFQjE4QTBFMzhBNTMxOTYzRTZCRjYxNTQyMUY0RkRCMDg0RjNDNDkKKzE2MkIKKzZCCis5NTY0Njk5RAorMjkwQ0VFNzhFRjdCRTk4MTU2MzVBNTQyQzgKKzM4OTg1M0IzNTE5QTQ5RDk5MzY4QTFCOEQ4QjZBQzM0NTBENEY3ODk0MDM3Njk3QTYwN0VERTc3NkExQTAyMUExNTUyMTYwMDhCMEQ3RUExMDlEQjIwNjBDOUE5MzM0QUFBRTJGMkYxQTg2MURBREQxQUY1MTNEQjM1MjdBRERCMTU3MkZBNTA0NDBCRENBOTE4ODY5NzM0RjBBNjIyRkNDQUMyRjA5QUZDRTQwRThDRjRDMUY2MkE5QzIzQkFGQUZDCitDMUEwREEzQgorRTU4NzhEMUVEQ0FEQjk2QkFCQzYyNEVBODgKKzU0MzAxNzVGMjAxQTdGMjYwNjU2Rjk4Q0MxNUJCNzVEM0QzOUU3ODUwMkE1MEVFMEI2QThFRjY1NjM3MDA1NTE0NUExNUFGMzA2RkVDOEM3RkEwNUIxRUM2MTMwRDI1MTYxNzFDNzJBQUJGMjA5RTk1MjQ1OUE1RjJDRjQ0NzE1MjgzN0JCNTUzQTc4NkE1MEMwQUE2ODRCRDg5RkU5ODI0RThGRTFBQTlCMEE2MEQ1RkUwRTIwRkEzNDFGOUQ4RkExNzBGOAorQ0EzNjhFQjMKK0QwMDdERThFOUI0NkUwQjhCQzRBRDQ3QjlDN0EKKzc5OTFEMUJBMDAxOEJCOENFRTFCNkRCQkMwRDE1OUQ2MDJDRjVCMDZBRUE3RjhDMkVCNTdFRERGM0JDMjhEREMwOTY1QTk0NzNBNkIyMzdEQzUxRDNCM0VEOTYyNjNDOTQ0OEUyMEI3RUU5MjJGRDIyRUJGOERDMUY0MDAzNEI5NUE0ODU3NTQwN0VDRkNCQjUxQjIyOTMyQUYxNTE1N0RGREUyMTNBRkZDM0QwNzQ0RkYyM0YwMUNGRTlEMUI0NDIwNTE3NjJGODk2NUNEMEY5QkZFRDMzNTU4NDExN0ZEODBEODFEQkMzOTI4NzcwOEY3ODE5MDkyMkI4MAorMkVGNAorOTdFNjhCOEJGRDdEMThDM0ZGN0Y3OQorNkJEOTVCRjAKKzNCMjEyOTRGOEJFODJBM0YzMjBBMENCQkMyCisyQTNDREUwOEYxMEI3RjQ2ODVERDcwNTRDMTIwRDg2OEVDRjkxNjUxMENCQUQ5ODZCMUEzODZGQTlCN0IxQ0Q5OENENDYyQTk3RjhBNDk4ODgxNUFBMEMyOUU3ODk5MkEwMkU3Q0NCOENEQjhDNzhCRTgwRTI5Cis2NkYyNkVFMQorQzI1OTYyNDYwMzEwMzY2MTFDQzJDODhBOTUKKzVBNjA1NERDM0ZFQ0IzOTQzQ0E3NzYyOThERjc1NDNFQzM2NzFBNDI4OUQzNkQ5MTY2NzMxQzg4OUMwOURDOUE0NEJGODA4ODU0QUIwMUUyNDM2MjNFOTI5RjNBRkVFRjdBRkQ0OTcyNEREODk3OEVCN0RCQUQ2Qzc3MDNBQzI0RDU3NTgzMUM3RDIwNTEKKzc3Rjg3QTc5CitFOUE0NTc2RkVCQUFGNkIxQzAwMDkwQzZGMzFGCis0RkUxQjAzNDUxRjkzRDU0OThGNUY5NDMzQzJEMjcxOTlBQ0Y4Qzc4OTdFNDZCQTZBRTMxNUM5MkI1MUI0RDI4MzQ2ODQ1QzExQzI2MUY0MTU4ODJEODBENDIxRjA2RUFFNkMyOTg4Rjk5MDkzMUIzRDVFQTZCQjUyMjg3OEY5RDJCODlGMEY2RjA5RTlEN0U5NDJCRDg2OTEzQTlBOUNGQzEzNTIxRDI1RUIwRDU4OTJGRkM5REE4MUE2MThCNEY2Q0MxQjE5QzQ5RDRENzAwNjJBRDYyRkY1MUU1RTcKKzM1OUY0NzVDCiszNzVFOTRERkNCMkQzNkMyRDg2QkEyRTExRgorMTVEMzAwQTk3MzA4QjVCODgzNUFDREFDQTZEQzcyNjRFREIzMTQzMDg3NDM3OEVGMEU4NDZBOTkzQ0UwQjc1MkE2OTQ2NTFCQ0U5RkI0NzVDM0IwRTRCQjRENjgwMUEwNkIxMEZCRDdFN0FCNUYxMzlEMTdDMDg4NDdGNDYxRjVFRjE3MUUxRkYyNEYxMjYyRjJCRTI5RDQ4MDUzMEY2QTJCNkJDOUYyOTEyRjEyMEE2MjVBRUQyRAorQTA1ODcwRTIKKzFENDMzQTk0RDU1RkE5M0JCQ0JFN0Y5NEMwCitFMDlFNkQ5RjBFNzQ4N0VBQUE2RDFGMTE5NEUwNDMyODUzMzc4MUEwMjQxRDYxMzU5NzdGQjQ3MzMxODUxQTRCQjUxRjMyNjRBNzNBMjVEM0Q2N0FEMDU0RUJDMjNCNEM0QUIwMDRBQzlDOEREQzY0QUE4OTFFMzRBN0ZFNjRCOEQ5MTM2N0E5Rjc5RDMzMThFQkNFMzA2RkNEQ0RBM0YyMTNBN0JBCiszQURFRTg3RAorNjFEQjM3RDZCM0U1MDQ2QzVDODc3QzZFMkU2QQorQkU3M0FBRTM5NDlFMzU1MDVENjQ3ODdDMTQ5NERCNjhGN0Y0RERERkUwMUM3RDNDMTRBMzlFQjQ0QkU0NDlENTE3MzJFNDRCQTQ2NjY0MDRBOUU4MUYzMjQyRkJFQjdEMTcxQ0U1QTU3MDA2MUJDMkIwQzAxMkZBQ0JENkQ5ODQ0NTIyMUQxRDdGMkE0Q0QwQkZBNUU3RjEzOTVDRjZFQzMzNzcyQzI5RjlGMjE1NjMwRjBDNkI3Q0Y3OUQ1QjZBQjIwQzQwRUZERTlGRjZDODREMjgKKzY0OEY2MkIzCis1RDRDNDQ3NTUyODMwNDlCOUVCMUQ4QTI2ODlECisyMzdFNTU1ODQzRTNCQ0QxRDlFRTIyNjhEOEREQUE5N0ZCMDFEMTEyMTc5REI3RUM3Q0UwNTBDNTE2RkEzRUU0NzhEM0MzRUY1MjY4MzMxQzQ5MTRCNEI3Mzg5MjI0MjAzQkE2QjFCMkM4RTlENjQ5NjdFOUJFMzM0NUExRTZDOTA3QTQ0NkZDOEY0MDU0NjFCNkNGNERDOTQxQ0VFRkIyOUJDMEUwMjJENUMzMkIyQjIyMzFDQ0NGMzdBNzhGRUYyQjRBOEUyREI1NUFGQzRDMzlEQTRFNkZEMTc3NkFCRDdGNDY1NTI0REJGRENEOTlENEYwRURFRjI3NzgKKzg3N0VBNzJBCitGMzE1NDQ1MEIwOUZDREJBNDY2OThDNkYwQTk0CisxODg1QTZENDQzMEUzNjBGOTZGN0QwQkJGQjFDNzY2NDUxN0JFQjhBODgxMDdEM0EwNDlFRkQ1MDU0QjZFODhGOUU1MzZFQ0M1OTRCRTBERDM3NjVEQ0YxRTVFMDQzOTRDN0ExRUYxNDlBODY1OTExODZCQTkzN0NBQUNFREUzRDBFMTQyRTBCNkZGMTJGREUwOUY2QjQ2RTFENzlCMzUwMTMwMTFGM0ExOUVCN0RDRkY0REJDQjI4NDRBQTJDRTI2M0M1RjU4MDM0NDJGMkI3NTNFQjNCNzlBRjhBMzFEQTU2RDBGMTEzN0FENURERTAyRUE3NkYwQTU3MjYKKzMwNzcKKzFCOTNCMAorOEI3RkI4MjQKKzAxNDUyNDA0RUJERTlERkYzQjk0Q0YwQzc2Cis2OUVEOUUzNkNFRkMzRTg2NjI0NTQ4Qzk5MDgzNzhCRUM5Q0Q5OUI2N0EwRDE4MDQwMzIxRjNBMTI1QzkyRkQ5ODYzRDVFOTJERTcyQTdERTI1REFEMjk3QkU1NDUwRUY5RTNDQ0RBRTZGQjdEODA4QUY2ODU3N0I5NjRBRDRCMDg2MkJDRTVCRkZERDI0QTYwMjBCOEREQUUxMkM1NUVDMzYKK0I0QzkwRDYyCitENEE0MTg2QTcyMjZDRDlCREIwQ0M3OUYyQUU1CitBMTc4RTM3RkU1QTc5OUI4RjFDMTlBQkI2RjhCMkQwNjhDNDI4NDNCMkE4MTk0NkE3MDk5NjI2NUNCMzBFMzg4RjdBQTAzNTU4OUQwRTgwNzVBRDYyRkMwRUJDNzJCM0Q2Rjk2MDlENDU4M0Q4RDk1QTlFRUI3RjAyQzg4NjM5NzFDMzJDNzU1RUU1Q0RGODU2N0I0MjAxMjUzQUNFREU0QzQ4MjQ4N0UzMDU2NjQzQ0MxMTlGQkZBMDhGRDRBQTcyOTk0MzNEMgorQUFFMzg0MTIKK0U2N0REQTYzQjg4OTA0NjUxRDA0N0MzNjRFQjgKKzc0N0E0MTRGQzgyREFGNTE2RkMxQkQwODIwNzY3NDM2REJGMTk4RDBBMjc5QjREMjQ5RTA3RTc5ODM5RDgzNzBBRUEzOUY1RjQyRDE3OUJCRDM2Rjg3Qzk5MUZBQzAxMUE0MzgzNDMzMjUxODY5MzcwRkNBRjEyRTUyNUVDNDU3RjBCOTIwQzE0OTMwRkM0NjQzNDMwODhGMURCQTcxQjUxMkFGNDYwMDFFNURBMUREODlGRTdBNjFFMDRGMzUxNkU0N0ZBNEZFRUEzNDVEQ0VGMzZBNzNBMzU3NTgxRTVCMDYwNEQ5MzYyOEExN0I0NDFGNzEwN0YwRTc4RAorN0UzQworODVFMzhDODU5RThGODI0NDg3QzczNzE3QjhCNzJFQjkKKzhDQjI3MEVBCitDMEZBQzIxNkI5NDE1M0VFN0ZGRDA3MDA4QUJDCis3M0U2ODZFRTIwQjRDQkIzM0E3MDE4RkE2RDA2Mjk5QzAwODBENTIwQThFOTdDQjRFRjQwNzE0NTk0NEVGQTg1NjdFQUYyMjdERDlEN0YwNEU2OTZBMzAyMkE5Njg0NjRGQTFEQzRGNUFGODc0N0VCMUMyOTAwMzhDREQyNTI1N0U2Q0FFOEM0MjM5NUZBREY0NzA1Qzc2MjY2QjUzRDY1Rjk4QzQ4REI4MENDQzgzOTI4MzVEOUE3OTUwMEU2RUQ5RUM3NTY5M0YxN0M1MkM5MTJERUFFREQzNzI2QzREQkU4QTAxNzU4RDQzOTc3Q0MwODEwNkVEQzg4QTgKK0EwREIKKzlEMkQ3RkUzRUUzOTk0QTY4RTFGOUY0NTczQjZDQzEwRDIxQjRGNzE0QzgzNDZDQjA2NzQwMTZCQ0Q1ODEyQURBRTREMDhBQUMyRjdDQQorOUQxQTk5MkEKKzAyNjk5RTc3OTUxNjExNDczMkUwOTIyQTNDCis3MzNGQjlENERGMUY0NUIwNDk4RENFNjVFMkE4MEVFQTQ0MDZFMzk5OEYyOAorRDlFRkYwRjYKKzJCNjc3NEI2REIwMDlFOUNBM0NGRTVCNzk2REQKK0YwMDc2OTY2NTBDMTdGQTYyMDVGQzgzRDkxREIyMEJDN0ZFQTlGNjQyOTk5Mzk1REY4OEZEQTQwRUI1QjY3M0ZCNkM4MzIxQ0M4NDJENzg1NTlCOTcyMDg3NDEwNjEzQzBGMTU0NjdCMkZBRjZGQTAzNEZCMjVFNEFFQzg2NjdCMTVBRTFCNzEzMTUxOUFDNzExMzc0MjNCNDA0NDUxMjdENkFBN0UxODhCOUE2NDAzRkI2ODg4QzVDNkNDMjFFQUUyNkRBNDIyRTU5NjFFNzUyQ0ZGQzgzQzREQjdBOUEzQThEOTVFQTY4RDRENDI4MUI3NTgxNjZDMTg2RQorMTUwNAorMjY3MjQ1Cis2MUE4M0E2NQorRjEyQTYxMTM2QjVENEE3OTREQzQ2QkRBNkEKK0FDMDk2ODk0MDc1NjQzQzhCMTlCQTk3ODU0MkI4RTFGQjZCOTMyRDU5MzlBMkRFQjI3RjAyNTUxMjgxMUYwNjc3MjcyMDBFNzE2QTM2MERGMkNGMjI3REFBN0REMTI3MTc5M0FBQUY0NTU3MDM4QUZCRkM2RDMzNzg3RDNCQUYxRDQyQjc0MDBEQzhFQzQ4RTc4MjZFNjREQ0IxQkZCNjI2OERBREY5MkFEQkZDMTBECis3N0FDN0JGQQorMTM3ODQ3NzZCQURGRDVGOUU1RUNERDNFOTEKK0Q5MUM1N0Q4RjlFNDk3QjdFRDVBOTQ1MjU4RkY2ODcxMTU0MkRGRTc1ODYyMzA3MjQ2M0MyRDFCRDMxRkU2QjFENTdFNjc0MjE2MzlGRTk3MEIzM0E1NThDMDRCMjFBRUFCMzA2M0IyQkYwQTExQzU5M0ZDMEFDNEU3NUVDNEFBMkRFQ0M5OTFFRjBCRTc3M0JDMDEyM0EzNEFFNjlFNUY1QkJECisxNjlBQTI4NgorMDlBNTNDRTI3NUJERDA0NEVCM0RCMTU0MDlBQgorOTA4MzNDOTVDMjI4MzBCMTMwQkI4NUQ3NEIwOEZFNzNCMjIyQjkzMzZGMDA0NDMyMTk3NzIyNTYyOTczNENBRjFENjI4RTkzMTFBQzMzODc2NTJCQThBRTU0MUI5MUJENEFEMzg1N0QxNjREQjkwOTcwNTFBMUQ1RkFDQTcwMTBDNEIyNkUxQ0JEQjcwODg4MUU0ODQyN0Q5NTc2ODVCRTM1Rjk2NTk4NkFCQ0IyOTZBM0I1NzVFNkM5QjdEODQxNzQwN0I3RDAxODRDQkREMjRDRkY2OUMyNjNBNQorQTg5RDhFMjEKK0U0RDc0M0NFMEU0NjA5RkMwMDgxM0NBQzkzCitEQ0ZEOTA0M0NCODM5MjFERjFDM0I3MjA4REE4M0Y4RTIzN0ExNUVBRjMxMzMyNjVEOUQ1M0U5M0M2REVCODMwQzBGNUU0RTlDMTQ5RDQ3MTAwODhDNTQ2ODMxQUM5N0E4NDQ0QTYzMTZBNUE3NTIyMkQzODYxRTlDQUQwQ0MzQkI2OTgxOTYyQ0UwRjI2NzE5NTFDQTZCRUVFOEYzNUQyRTQ4QTk0QzY3N0IxMzNGOTJFCiszMEVCNDEwQworOTU5QjNEQTM2NzRCMDE3MzE2MkZBOTUwMjIKKzhFRkQ3MEJGMjc1N0YwRjQ1MUZBQkUyREJGNjIyN0NBN0IyN0ZCNEM0QzE2NjZERjBBQURBMjVCNDFBOEQ2NEI4MDU1M0ZGRkUwM0I1MDUzRTBCRUFBQzgwMkIyQjY1QjE2MTZBMzU0QkIxQUJCMEEwRDk2RkQ3QzhFMDE4OUU2NTdBOTU4RUNFODlCOTEwRUE5RUZDOThDNjIyNUQyM0E3RjA5M0U1NjlGOUYxRDBFOEY1NzQwQ0IKKzJFQjFGOEVDCiswMDI5QTg5MTQ4QjJDODYzMDJDNDgwNjU4NzFECis5NUY0NzkwNUVFNEZFNDhEMEQxMkM4RDVGREI1RDA4Rjk2QzEzMjNGM0U2NDI2M0JCNzU2NDFGMjVDMEM3QzU5QzZENDVEMzY4MTg3NkIzRDA5MDBDNjc5QTczQjE3RkFFMzM2Njc4ODlDNjVCNDZDNjY3NTA5RTU4NDFBRjZDRTAyMUE3Rjk4OTdDRkRBOEY1RjY3Mzg2QzRDQjI1MjJBMDkyNjREQTM0RkMxODBCRDZDOUI3RjZDNTI3OUEwRTFCNTMyNDA2NTE5QUVCM0JENzM3MDg3RDgyNTZERUNCNjY4QjkzNUUxNjk0NjBBODc0NjNCOTIyREZENjUKK0E0RDAKK0EzREI2MTM5RDIyQzJCQjg5N0U2NEMzRkE5RjU1MjJCMzk2QkZGNzE2MUExQzZGRjlGOEJFRjUxNzVGREQxNDhDOERGMzAwNkVBMTA5QjY0QThBMEVDMjY3QkZDQjAKKzg3OUIzQTY4Cis1OUQ3OUZCMTBGNUYzOEM3RTVDQTgwNjUzMjJECis5QUFFMkQ1NTMxQjE1MkIxRDc1MDg4NjQ1NzFBM0Q1RUIyMzI3QjI4Q0IwNjc2NjhGMDgxMUQxMjg3N0M2RURDRjgwQUUyRDI4QTIxNjc4MDhFQ0Q0MjVGQThBQ0IxQUM4NDUyQUEyNDJCMDFGNzM5NTY3NDNDRDM2NENBQ0ZFQzYxOTVGNDcxRUM3RDRERjdDMkRDMDFCNjBERTRFNEQ2NzYxMzYzODRGNTk3OTdGQjA3QkU5OTAwNjQxRTIyOEVGMjg4OEExNzA3ODU2MTNDNDZDQUM2RkQ1RQorQUQ1RTBGNzkKKzVFNjRFQjc1REQ5NzhEODZGREFBNkZBMjhBCisyQjVGQjk2NTk0QjcxMERENjE0QzhCMjlGRTRENTZDMTU2NTFDQ0U0QzFBODJBNjVCOUY4OThBREIzQzk2REZGNzczMTdDQTE2RDJFNjEwNTE0RTk0RjcxODdGQzA0MTQ5QTE1NDREOEZDRDU5OEZEOUEzQTI5NjZGQjY1OEZEODU3RDkyNjE1RTIyQzlGQTUzRjQ0NEM2QTc3MTU2MDlBCiszMzRGMEFGRAorOTRCODI5OUMzM0I1MDZGRTI3OTkyM0NGNTU5MgorMDUwMkQwQkNFQzkwMTFBNjQwMkM4RDQxRDg4NkZDQ0RFNDc5RDE5NTVGMDU1NTY1NEFDMzMyNjY3NEVEOUU0NzczOUE0RTc0MThFM0Q3MjlCNjI1NEU0NkVBMEJBRUM5Q0Q4MDJBM0ExMkRERThDQ0M1MjAzODU4MTM1QThFRjVFNjNDMjQ5ODkzMjk1MUJBMDlFRTEzQTdBNkJCRDdEQTk3MDk2MzQ5MDNEMkJCNTU2OUVCRkNGMjI3MjY4MzhGM0MzNkQ4N0M5NDQyQTEzNThENzA0QjE2MDA1OUFFMTIzRTgwOThCN0JDMUU1RTRGMzlBNkIyRDBGQUM3CisxM0QxCis0MkM1MDkxRUE5QUQ2RDI5QTUxRkVFRjVCOUNBMDQzMzNDRERFM0I4QkU2MUE4Q0Q3OUVGQzA4RTNBN0ZCRkU5OTYxOEMwCiswRDIxQjE0QQorM0IzRThDQzYxREI0NzgyRjc3OEFBOUUyMjYKKzlEMEFGOTUxOEZCQkU3ODlBNDFBMzM3MEUzRUM3QTNFRkI3OTAwNTYwQUY3QzFGNzY2NDIzRjI0QUI5MkQ3REVCNDMwQUI0MkNGRENGODU2RTE0NUZCNjk1NTQ0NEJCNDg4NDlBNzE5NjFFRgorNDhFMzQ4QzgKK0Q3OUM4MzA4OEEzMEZFRjczNUNCQTRFMjNDMEYKKzEzMzI0MUYwRjI3NjMxMTc4NzY2N0MwRDNEQTg3NDM5NkQ1OEZFREFDQkY0MjBDRTg1N0REQkVBMDBCOTk5OUJEQzlFQjlGMDFFQ0QxREJCNzVCREVDMkEzRTAzOEIxQTE5QUEzNjUxQUU0MjBBOEQwMDk4NjlGMUYyRTZGOUU2MUQyQ0IyMDY5RTY0NzVGMzBGNzg5MThGNTAxNDY1NTc3NjdFOUVGMEJGNDMyNkNGQUY0QTIyREU0NDkxNUM4Q0Y0MDc2QkYxRUUwQjU1ODY1MDFFQUE2MzgwNjlGQkZFRTZCNUY0MDFDMzc1Mjc5OTFBNUJCRDQwQTQwOQorMTExQQorNkQxMzBCREVDMUNDRTA3NDU4Qzg3REMxMEIzRjdBMkNGQzlCQUZCNDQwNDdFNEMwNjcxQTVCOTAxQzVCMjIKKzQwQjVDQzJBCis0NzkxRkNGNjE1ODY2MkFBM0QxQzU3ODUwRjQ4CitBNUUwRjI5OTc2RTZBOTlGNjYxQTAzNjA4OEYxNjc4MEY1QjMzREI5RDRFQ0E3REIwNjg0Q0E0NjZGNTY3QTg4Q0U2RjRERDZBOTBFQjg3NUU4Mzg0MkJFMzI4MDk5MDc1QTU5RjRGRDE5QzBEMkZENDhBN0RDRTc4M0ZFNzUxNEFEOTYzOENBRDVDNDBENkUzRUREQUE0NTE5QTRBNkRFRjA4N0Y0QzNDRjY4QjAyQUIxMkRDRTREODEwOTg3QzZGQkVBRDNFMUU5MUI5NkVEQ0I5OTYyMjcKK0ZGRTNDMTQ5Cis4MDJGMUYwRUU3NzUxRTREMzM1MzM3Mzg0MAorNUU5QjdBQjYzREU0NUI5QTYzM0JEMEY3MzJENjQ3RUZBREM4ODg4RkRGOTVENkYwNTAxMTVCMTk2MzZFMTMyRjBCRTM1Q0NCMTNFMTkxRjBENkI3MzJDMzQ5M0IxM0VDMzU1MURGMDIyNkU0RTY5QUMzNTQ5NEYxMjkyQTFEODg0NDlEMDMyQTVFN0QKKzM0NjREQUFCCis0NDM3MEM1RjMzNDk3QUM5NDYzNDBGQjVBOTYxCisyRjc0QUM2OERDRUJDMDg5NDg5OEFBODQxMEY0MTE1NkMwMDM1Q0U2Q0NENzUyMUZFNjNEOEY2Mjc3QjMxQUU3MEI5REY1NDZCRjQzM0JFN0RFNTk3MkVBQUE5MEYwM0UwQ0RBOEI1OUM3ODUzMUQyMzIzRDZCOEU2NTA5OTUzNzhGNTNDQjM4NTM4MTNBOTQ5QzkwRDZEMTIzRUI1RjlFNUVGREU3MDU1MDdGRjUyQkVCNjBCQzZBODVDNUJFMTI1RjY0NjM4NDZCOUM2MEREOTFFQjk1NDg0MkY0RkQ0QzA0OEU5NDQzMkJGQUUzCiszRTkzQ0Q4RQorMEMyQzQ0ODQxMTkyM0I2NjRGNDFBRDQ4NjkxQworMkE0N0RGMDU0RjFGN0E4MzQwQUNEMzRCQUM2MjUzQzE4MzMxNTRGRUY3Q0MwQUE3QzVDQkU4NDZERDFCQ0M1QzY1NUFDQkI4QzBDNzc4MUM0MkUxNEJDMEQwODgzNUVDODg3OUE2OTZFNTA5ODJFNDdDQTJFQzcwN0Q4NjA5Q0UxOTgyMTYwRUQzOEJGRDg5Q0U4OTI1OTcwQjQwMjRDRTMwMjI1NjU4RTM0ODc3Mzg3QTE1NzRBNzhERDczNDkxNDc1QTY0RDdCNTVBQjU4RjcwNDUKK0VBRDUwNUY2CitBNzBBQ0M2NkY2QzMwMDZGNDdCNkFDN0Y0MQorRUVEQTQxNkJBOTUwMThGQzgxOUQ3MEU3MTE5RkFENjM4MDZBNTA1NTM3REM3MzZFNkVFRTFENjM2QzUyMUNDNEQ5MTY5NzNEQjdCMzQ3MjlGRUJEOTk0QUI3RjlDNThENTE5NURDNTM3MEUxRjNDOTJFMjc0QzE3OUUxMUJGRDE4QzYzNTVEMjdEODRDREEyMkJERDhGQ0E2NTExNTExMjc0NjBCRUU5OEFFRTU0Cis3NjdGN0NEQQorRDFDMjY3NURFMEQ2QjU2RTEzRjM1Rjg5NDU1RQorNkUzMkQ2REQwMTM5Mzg5QjIwMTNGNTU3NDBBMEMwQzkzRDI1N0E3MDUwNjYzOTU1NUU2NDIyNjJEM0VGMDNDMjVFRTZDOTYwRDBFMjNBQjcyMjJBMDRENzlDODY4OTA3MzYzMjAzMkQwQjZFRjMzMDIwMjc3M0Q4NzNCQzA0RERDQzMxQzJFOTE4ODEyNTY2OThBOEI5OUIzQzE1MkYyRjU5OTZDMUUwMzRENTFDMTU0QkU4MDk5MDU4NTE3RjNFMjQwMjkzM0I3OUFFREU0OUZGMzM2Q0IxNUQzN0U5REJBMzZFNjQ5MEEyMjM2RTVEOTM4RUMwNjkKK0U5RkFGQTBFCis3QjczMEY5NTQzM0IwNDJBMkRBMEY4NTg5MworQ0NBOUM2RDE4M0I5NjY2NUFDMTRFQjEwQTY0OUIwODJBRjU0MkU2Mjk0NDk3MTU5QzQ0Rjk4MTlDNEUyNzAxQkY2NzEyMDk3OEU2MEVBMzgxQThEQ0E1MUZCNzZENkYwNjU4RDhEODAxMzM1QkVFNDNBQjM4RDFDMEQ3QkQzMTVCRjY5M0VCRTZCCitBQzkzNENEMworNjRCMzk3NEE4NTY3RTU5NTczRDVCMzZDM0EKK0QzM0UxQjMxOTA4MTYxNjUxNjlDOEYyNkRBRjU3NEIyQTZBNkQ5NUI4MjRFNjM0RjhBQUQxODI2OEQxMTIzM0U5RDhGQTkzNTgwQjNFOTYyRTM5NjE4RjVCNEJGMzBFMTRGRTlCMzcwNURGQTYxNDcxNzdGNzU4NjI1MzFGMzBBRjRCMDhFRjU4ODA2MzQ4N0RCMzQ5RTBFNzFCMTEyREUxRkIxMjI2OTZBM0U1QTc0QjYzRTVBRUM5QTcwQ0FBMTBENEMKKzIyNEM5MUU4CitFNjZDRjc1MEQ2QTE1MDdCOTE5ODY1ODg3RAorNEVGOEFBN0E5ODI0N0IyNkNERDAxMTJDQzAyN0QxN0Y5MkZFMTJEMDFFQzZEMDk4NTA4NEQ2QjkxMEM1QkVDM0EzNjAzMDYxQjBFMjE3NDA0NjQyNjgzQkREOUQxMzk4NzIxRTE2Qjc0QUYyQjBDOEZDNTkyNjA1NDI1RjQzMDI0OEM4MkE3ODk1NkIzMTUxOEYxRjBFNUVFMzYxRUU4OUEyNjg2RUUzN0MyNDUzMjFENAorNTQ0NEE3NjQKK0JBQUYzNDY5MUZBMDJCOEJGMTFBNjFBRTNEMzUKKzEwOEQ2OUZFODA4MTFCMTg1RThDRUM3NkM2ODJDMjY3REU5QThBMzA2RERCODc5OUJCRTA0NjRERjNBMzgwNDUyOEJCQUQzNzRBNThBMzI2MDYzQkUwM0YxQjMwQkQ5MjAyQzFCMTAzQUMxQUNCMEVFODUxNjdDQkNCODFCNjJFMkRBRkE4RTE3QUQ3MjY4ODY0QTkyQkNGRTA4NzBDOEM2MzkyMkQ4QTE3NkY0OEM1Njc0OTc0NEM1NDdGQTcyOTI0Rjg0MjlCRjFBMTFEMjNBRUIyOEQzODlCNzM5QjU3QjYyOTUzOTY5MkY1RTA4QzBENjc2RURCNTg3MAorQjVBNQorQkQ3M0IwMjg0QTgyNTk0QUY0QjA0QTQyQzAxMQorOTEyMzhBNUYKKzA2RTBBNTNBMTAwMUFGQjJCRUVDOTREQTBCQzcKKzM3MDEzNzNCQ0JDNTY5MEVCQkUwNjI2MjM2RkJBRUVEQjA3NzdEQ0JDRjlEQUUzNDc2MUQ5QkM1NTI1MjU5RDBDRkFGRDFEMTkzODVERUQ1REYxMTRCRUU2N0YzMTcyNjM0NkM0QkJGM0Y0NDJDNjMwMEQwNDAxRTY2M0MwOTM3MzVDQUUyN0UxMUZFNEEzNDc4NUUwOUE4QjAwQUE0QzlFNDA3RDM4RDJCMzFCQUEzQjYyQ0RFOTA4RkJCQTkzM0UyQzNBRjc4NzhCNzAwNEIzM0E2MjUwRUU0MjRDRkJBMEVDQjkxOTc0M0IzOEFDRDVDMThENzUxOTZDQworNzBBNAorOEQ5MEJBMEYxOURGNTBFOTFCNTAwQ0ExRUQ2RDlDNjUyMzVBRTNCNDExRTQ5MDEwMTEKK0VEMzY1NTQ2CiszNkIzN0E1QkREREU2NkY5NjdENTFDMkQxNzQ5CitEQzYzNDU3NEZDMkM5QTZDREZCNjc0NEVFRTQ1MTBBNUVEN0Y4QjJFQTZCRDYyQzg3RTIzRURGRjI1QUJDRjgyOTU2MTM0NUY5Mjc3MjlBN0YzOTI1MEFCREQ1MDIwQUQ5NzIyREJCQ0M1QkI2OUYwMzBGNDY5RDU2MzRCRDdDNEM4QTQ3QjIwQzZGOThFM0EyNDMyQjAwMUM4NDM3MTQ3NUFCQjRDOEVBNTFGRTFCMEFFQkRGQTk2NEI4NzUzMDAxRjg3NkI4MUY3NUFBQTNFODE5QzgyODk5NjA2NDgwMDlBMDA3RTY4Q0E5OEY5OTc0OEUwRThBNTU1ODUKKzcxQzkKKzM3NzMxMjIxCis3RjBGMUQ2MEQ0MzQ2NEFDNkY5NzU2RjExOQorN0Q4QjEyMEVENDNBREFENUM3QjgxNjVEQzM5OUE2MzFDQjBEQkVFNkFBMTk1QjFDNjkwOUU3NjExQkNEM0JEMUY3MUNDNDJEM0UxRTA5NEE0ODIxMTA0NEFFMkUzMEQ0M0JEMDQ2RDA3QzhGRDY5MzY0NzZGNkUzODVBNUE2CitCRTdGREJCMgorQUU1ODMyMDFGNkU4NENDMUJDRDUxOTM4NzgKK0FGMEQzRUU3RThBMkZGQjIxRTNFMUU2QUFEOTcwNkM3QTAyNDQ5NjRGQzA3CiswMkY3RDMxRQorRjFEOEEyRjQ0QkIwNjY2MUIzQjdFQTZDNzA2QworMzQzMzk3N0U0MEVFNjc1MQorQ0UxQUFBMjEKKzU0MTlFNjA0RjI4RDlFMTlGODk0MDNFNURFRTAyODc0OUFBQzgyQjYzRDJBQjA1ODJDRDhGNjBFOTFDMDhEN0RCMDgyCitEMTM3ODBBREJENjFCNzRGRDU2RjAwQjdBM0I0NUFDNjgyOTZBQzJGM0Q4QkJGNkEwRTBGNzkzMzc4NjJFRUVGMEMzQzdGNzI2NzczCitDNTA3NTEzMDA0ODUzNTBFQkQwRTkyOEVDMTZDMEZCMUE1NzcyNDQ0QUNDRjU2Qzg2RDY0M0EKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDUgcHV0CitkdXAgMyAvQzAwNDcgcHV0CitkdXAgNCAvQzAwNTggcHV0CitkdXAgNSAvQzAwNjcgcHV0CitkdXAgNiAvQzAwNjggcHV0CitkdXAgNyAvQzAwNjkgcHV0CitkdXAgOCAvQzAwNzIgcHV0CitkdXAgOSAvQzAwNzMgcHV0CitkdXAgMTAgL0MwMDc2IHB1dAorZHVwIDExIC9DMDA3OCBwdXQKK2R1cCAxMiAvQzAwNzkgcHV0CitkdXAgMTMgL0MwMDgwIHB1dAorZHVwIDE0IC9DMDA4MiBwdXQKK2R1cCAxNSAvQzAwODQgcHV0CitkdXAgMTYgL0MwMDk3IHB1dAorZHVwIDE3IC9DMDA5OSBwdXQKK2R1cCAxOCAvQzAxMDAgcHV0CitkdXAgMTkgL0MwMTAxIHB1dAorZHVwIDIwIC9DMDEwMiBwdXQKK2R1cCAyMSAvQzAxMDUgcHV0CitkdXAgMjIgL0MwMTA4IHB1dAorZHVwIDIzIC9DMDEwOSBwdXQKK2R1cCAyNCAvQzAxMTAgcHV0CitkdXAgMjUgL0MwMTExIHB1dAorZHVwIDI2IC9DMDExMiBwdXQKK2R1cCAyNyAvQzAxMTMgcHV0CitkdXAgMjggL0MwMTE0IHB1dAorZHVwIDI5IC9DMDExNSBwdXQKK2R1cCAzMCAvQzAxMTYgcHV0CitkdXAgMzEgL0MwMTE3IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xOCAtMjA3IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzRGNTIxMDExQTRGQUIyMjM5Q0M0QzkxRjNFODUxNEEwQjEKK0Q1NkQ2QUM5MjFCNkNCOUE5NUI1ODYyQworOTZFQTEyNDNENkFEQjczMzgwCitGQkE4MUFENQorRTY3MTg3MzgzMTc1M0IwNjJENTQ4NzBBQzMKKzdCODZEQTgxMzcxMzQyM0M2MTZCNzUyRjVCNDc4NTM1RUE1MUFCMzM2QkYyNjIKKzBDMTJBOUI3Cis0MDM2ODhCRUUxREY4MzE5OTBEOTQyQzE0NQorQzIyMDRDRkNBNDc3QTJGQUMxRDZGRkU0OEZCOTVBNzJFMDdFMDA3QTY1QTU1MTMyOUZCNgorRTVDRUJDQTQKKzIxQUE3MDNENTZGQTlGQUZDNTYwODY2MEFECitCMTU4NUQ3NTdDNjlBOUVFMTAzRjAxRTIxMzJGMzczN0E5RDE4N0YwQUY1QTUzNDMwM0Y1REFGMTgxMUY0MjEyMEVEMzdFMzdGOTkxRjJDMzE3REQ2QjkyQTA2QUZBMTc5OUZFOTFCNjY0N0EKKzQyN0U4QzEzCitDRjYwQUU0OEI1RDkwM0NDQzJBNTcxRTkwMjQzCiszRUZCRjAyRTBDQUYzNzI1RTA0NDdCRjkxMTZDNUU4Nzk2RTgxNEFCOENEMUQ2MEY1RUFEMUNCNkRBM0Y3MkFEMTQ1M0Q2QTNCN0ZDMzdBQTlGM0MxRjY3M0M1NTdDRjE3NUFCMTlERkY4RjQ1MkYyMURCOUMyMzkxQzEwOUZGRTY0N0Y3QzcyNTQyQzRFQkU3MzI4NkY1ODIwNTZGMkFDQTQ1NzcwRkRDNjA5NDE1Q0JBRENEMDFCRUQ0REJFNDdDQTBDOUUzRUMyOUJGMDdCCis5ODFGNDVGMworMDI4NUVDMEQ5MTU2RkJBQjhFNEFFQjQwRDYKKzg0NTdCQzhEQTcxMzIyQjc5MkI3QkY0REY3MkFBRDBDOTM0NTc1NjE0NERCRDI2M0JFRkM0QjA0NTlCQzM2RkFDMzY1QjJDRDJGNkRCQ0E2RDFGRjFGRTQ5NDQwQzUyQ0IwQjI3ODQ4MDIwNDcwN0ZEQ0Q4NEIyRUFFRDg1ODUyQkNDMzRBNDVDMjFGRTk1OEEwRTRBRTMwM0M1NUNCNzM1RDMyMkNFRkY1QTlEMworQTE1MDMzMkIKKzA1MjM0M0MwQjE1QjdBREU1MzM0QTUyMTdENzcKKzI5NURFNUVBREQ1ODZENzNDNTExQTlDRUE4REMwMkVDRkNFRTk2NkZGM0Q1NzM4NzE5NDkwQzZFMUU2MzZDRTBEMzNFM0Q4NDgxNDIwQ0YxRTA3RkJENkJDRkU2OUYzMjFCMDMyMDExNEM5MkZFRDJCNjlBODNBRDVDMUU1QzMxRDY2N0VEQjdFNTQxMTJCMzUxNjIyMzVDRkNFRDVDQTZENUJCNzE0MEMxNTFCODczRTNDQThFMEJENzgwMzhBOTBBRTg5RkEzMTUzMkE4OTIwRTM4QTM2QkQ5NEUKKzIwMUIyMDk0CisxNTM0QzUzRTgzRDQwNzY5RDM4ODg0RDUxNUMwCitEOUJDODI2RTU1OEEyQzlERThCQjZDQzFBNDQyNTI0Njg1RTNGQjVCNTg0NzI3M0Q4MTA1QTM4RkVGRUMxOUIwQTAyNzA3RjlFNEM0MzNBOEVGOUE1NzBFRUU0Qjk3NDI5Q0Q3MDY0QzUxQ0FBQzY3QThEODMxNzA4RTFBREQwMkYxREE4NkRFRTBDRUFDRjJBODQzMDNBMEFBREIzQzBDRjkxQUE0ODUyQkNDRjJEMUNCNjQ1MDkxOTQ2RkE3RjYxNzIzMzlCMDhCODVGMUVGQTU3MzQ1MDlBQUY2RjJBQzM1MkYxQzM3MDNGRjZDCitCNUU4NEU1QQorRUZBRUQ1NTc1NjdEMDI2N0VERTU3QzI3QjEKK0RBQjdGNjkxQzY0MTA0MjEzQkVGNjg4NENGNzQ5RDJBNUQ4MTY5N0ZBQzY2Nzg0QkZEQTMyQTZBRUJFQzJCMTE0NUI0RTM0MTBDNzA1NzM1Qjk1RkY0ODg4NzNBNDNBMjY5ODc3Q0Q5QTRCMUJFNEU2NDIzQUUxNkU0QzMKKzY3MDI0MTRFCiswNEQwOTVCNEZBOThERUEyMjAwRkIxNzU4QgorQUM2N0UxNDI5RDQ0MzJGNkMzNUUwNUI2QTRBNzFDMUVEODU3MkM5MTUxMDQ2NkQxQTI5RUUxOUI0MEQ2OTc5MUU2ODg1MjE0OTYyOUUyRkEzRTBENzhEN0JCNkU5MzkxMjExREZDQTUwMDQ5QzUzNEFCMTVFQ0RCQzMyQkVEQjA0Rjk4MThGNURBODZBNDNFMkQKK0YyRDA1RjZBCisyNTlCRTUwQjQzRTA2NzFFMzNDMTQ4QjVBMAorNTIxOTZBQjAyQjlDOUY0MTlEQjI2NTZGREVCQzE3RkZDNzg4MDc2ODk1REZGNjcyNzRFNTY1MDkxMzgzMTA0QTI1N0I5QUM5M0M5NDYzNkNFRUFFREUzNTM1Qjc2Q0FBQUU2REJCQkQ0MEQwNTY2QUQ5MjdCNTQwNjZEOTgwQjBCQjNDNTI2NzVGRDhEQkYxRDgwQjE0REMyQ0IyMzAzRkNFNTEwOTZDQjAzQkVCRjUwMjRGMTg5OTBEMTJCMAorQkMyMjFFNjcKK0YwNzQ3OTU5MzE4OUFERTlBMTZCNEIzMzU3NUEKKzBDRTZBQzNFODM0MTJDNEIwQjYzREZGMDI0NDM0RjQ0N0QxNDI1NUYyQzYxOTJFMUNCODE5MDY4OEU3MEVGNDgxRDlBRURCQkQ3REY2RDhBODE5MjdCNUYzQjI4QTg2RjFBMTk2OEM1Mjg1RkMxNTQ1RTExMTlBRTZEMjg0RkVDM0I2RjZENDZCNjk4M0U5NkIwRDQ2RUY4Rjc0RTA0NUZFMzU3NzdBQ0M0NEI0MzM1M0ZFM0U1RTNFRjI0OUZBOTY2MEM2RjZEQzM5RjY4RDQ0MgorMkQwOTU5QTQKK0VFOUVDNTFEQjZBMEZDNTVEMjcxNUEyRTFFRTgKK0JCMUUyNzE3NzQzOERENjBFM0UzNzdBNEQ2NDMxRDlFRDUwQThBODBCRjNGRDA5OTNCOTU1RDVCNTg3NzZFRjJDMzk2ODQwRTc0RTk4RURFNzcyQzAwQjYzRkRFOUREQTU3QTBEQkY1NUNCQ0Q1QkU2QjU3MDMzNjg5NUY3NkY5NjQ0OTE3REJENjFBQkRDM0Y3N0Y1RjBEMDJEM0Q3NDQ4MzJGQjk4NEUwOTUxOUFDMzUwN0Y3MUZEQ0I2NDVGNzJEMUMyRTVGCitDODA2REMyQworRTU1QUUxMDkwN0VGNEUxOTgxRjlBRUFBQzNCMworQTVDQzFDOTdFRDkzOUFGNjVGMkU3OTAxODM3RjUwMTM3NDEwQTIyNTIxMzRCMTkxN0QwQTk4MkM3M0EwQjFCQTAxQUM1RERCMkNBRTU4QzhGRTNFMjFDNjMxMjNDMDgyMTc5NjE2ODgxNzdENUY0RkI5Q0Q5RTM5NEEyQTM1RjE5QjczQ0I5M0YzNzRBNDE0QkUyOTdEM0I2NUMxMDlGREU3RDYzMjRERTdDNUU4Q0M4Q0ZBREZGQzhDMjlERDJCMUE2QjI0NTBGMUUwNUU3NTE3QzU4QjJDRUE1ODQ5RTlFREQ4ODI1OEE2CitCQTdDQzc1QworREUwRjM5NjMwMEJEMzFBOEQxMEY4MDFEMDIKK0VENjNCNTJDMzBGODk1MDEwOEY2OEQ1MEZDNkI2MURBMDgwOTFGOEZBRTNCQjBFRTUyOTZFMzQ0MEI4M0FCM0ZCRTYyMDY2MTEwODhGRkNBNjU1QzQxNkI1OTFCOTQzNTUyQTBGRjIxQjM3M0Q5NUEzNzQ2N0YyRjcxMEI3NDIzRTY5RTU2Rjk4NjNBQjUzMUFGCis1N0IzQ0JCMAorNUVDQzYxRTU4QTQ5RTUzRERGRDc3MjFEMUE5MAorQjc2MzNDQjJCNjBENzkwQzFEQTdEQzNDRDNDRTJFMEM5MjFBMUQ3QkNENURDMTE1NDY2QjM3RkZGQzUyMzIyNThDMzJGQzc1Mzk5QzdDRjlGMkJDQjk4Q0VBOUNFRTI5RUI5MDcyREUwRDVDMTEwMzA2NUI4QzhCNzY5NkY5QkQ0NTRGQTk3ODY4RDM4MDE0MUIzNjBDMzZDQUNBRkFGNzUyNkZCQjM5NzI4MEU0NzUwQUYxRjYyMkIxNUM4NDlBQUFGQkMzMjJENkVGNjc5NzQxQjBFNTlFNkYwQ0JDNDQ3Q0UwRTZERTNGOEQyNUJDNUE1MzNFRDdCODA4CitGREQ2CiswNkY1OTMyMworQjgwNDhBRTQKKzM1QkVDQjE0OTBCOTIzQjAwODg1N0I1NDNCCitDNjRCRTMxRjZCRDZERDgzRDEzN0EyRDJCOUZGQUQ5NzhDNzFFMTI3RkIxNTM3QkE5QjFEODg5OUE5MEQ1MzY4RDQzNkRCQURCRUIyNjI4Nzg0Nzc3MjFFQzIyQzBBOTU4NkYxQkQ3OUZFQzU5M0JGRTRBOTFBNzUxQTdFNDc5RDRDODA0ODA3RUUzODhCRTExMjVDNDIxNjhDOTAyNTEyMjU1MQorNzk0NjY4Q0MKKzQ1MThENDI4QjdEOTcwMjRBQTU4OEQwMUZCREUKK0ZGMzQyODYzNTc4RTIzNzg2OEQ4NEI1RDNENjRGQTIyNjgwRUIxNUVEREVBRjEyQTQ5M0YzMUM5MjBGOTc5NkU2OUQ2MDk1N0Q2RDNBOTJCMjRFQkU1MEU3RjY0NjQxRkM0N0E5RUNCQkE4OTcxRjA5RTdFNDY4NDI3OUU2NjY1N0Q1RTZDRjk2MjdEQzQyQUM0NTY2MDgyMEEyMzRDQTRGQjc1NkY2QTI0Qzk3NzI5MTg4OEI1REU5ODQ3NjcyNjhDRTYxNDdDRDQ0RDM1MUYwN0NCRTM1QworMkVFRDREM0MKKzE4RDNCNkM4OTRCNkJGRDE3OUE4N0NFQ0UxCis3NkUwQ0EwN0FCNUNEMjM4QzkyOUQwMjhERTNEQTQ4QUU1MTA2Mjg1NUQ3M0NCODIxODAwRUYzNkQ5RjFEQzE3MjNDOUQ2NjYxMDRDODQxNUQ0RjM3MkQ0NTlDREI2Q0VGMTVGQ0YzQjZEMEU0RTlCNkJENUE1OUFCNTZEQkI2NUM4NDEyODQxOEUwQjVGNEUzRUNFQjM5Nzc4RTcxNjU2MUVFODU2NUU1MDBFRTgyMTQ4NDhBMjlFCitEOEIwRDIxRgorRDVCM0EyQjMzQkE1RTQ5MkEwMzY3MDAxMzkKK0JEMjAyOUQwNENGNDA4NUU5OTMyNjMyOTYwMkU3MzY4MDUxQUQ2REY3QzdEN0E0OUE1OTJEMkFDNDI4QzI0NDAyQ0U0NzYzRjMxQzM0MzIwNEYzNDI4N0ZDQzFFODBDQ0VDNzBDQkQ3QUI2MkE4NzRBNzcyNDU5RkU4QjREOTVCRTRERTUzMDkxOUVBRjM4QzlBRDBDMjVCNDRBRTdCRkFFN0Q5RkM2NzA3NTU1QTEzRTZBNkQ1NDQzOQorN0JBMUEwNTYKKzg4NzJCMzA3OTQ3MUQ0RkQ1QTYzQTMyNDE1CitGREFCMzYzMTExQTg4RjEyOTU2NDcyNzJERjc4REYzOTI1NjYyODUyODUwRDlCMTczNkE1NjAxNEE4NjBEOUU3RUZDNzBCOUYzMUI1REY3RUU0M0NFNjIwOEFBQkY3RUExMzY3MTMwQ0EzRTBGMzNFOTBFMjZCN0JFMDE1QUI4M0UwNTkzMzM4MEM1RjFEMDZGNTlBMDZDMUI5QzgKK0I2N0VDRDQwCitGQjZCREU4NkZGNTg0RTM1NEYzOTNFNTMwMQorMzlCRTE3REJDNzkxNEUzMjYzNDA0NkZDMkZEQTM1NEUwODBENzFEODJFMzA3MzAzQjA1QUE2MEM1NTc1NThDNjJDREVFM0M3RUNDQUNBMjA4NEI2RENCQTY3QzRGMTJDQUFENUMxODUKKzUzRTgxMkYwCiswRUE4QTc2Q0FCREEyRTQyNjkxOTJEMjIxRTNECis2NEQwNDhDRTk5NDRFMEUwOTgyRUFGMTM2RjU5NTJDMUFFMTJBODY3NTA3RkFENkE5NTk4REQwMkRDRTRGMkRFNEI1ODgzOUY1NkYyNDI5RkE4ODgxQ0ExQjU3NDFDQTk2MDM1QTUwOEE1QUI3NjJFMkU4QTE5RkVBRjNCRkU0NTEyNTBBRkY3Mzg2NkY4RjVEOURCOTk0MTU3QzMyMTY5RjBCNjFGQTMxMEZBNEE3M0ZGN0VGQzM4RjU1ODdCQUMyNjMzRTQwRTQ3Q0YzM0VCQjU4OTg4OEZDRjM0Nzk1OEVDNkY5Qzc3RDkwOUREQkZFQUFDMTI4OEIxRDkKKzUwRUYKKzYzNTc4RDUwMDlBNkJFODNBM0U1MDMwRkRCQTAwNTY2QUI0Mzc1NzE0MzU1Nzc5NEM4M0I0RkVBCis0NzJDRkEzNAorODBGRkYzRUQzQ0YyQTg2QkI5QkY4QTk1N0QzRAorQUUzM0U0MjU0NjZGQjY4NTdEMDkwMTY3NEI2M0E3NkQ4QkUxRjQ1MTMzQjMyQjRGQUYzQjRBQzVGRUU1NDQyQkU1RTkwQkEwOUYwRkVGREIwNUNGNkM4OUY2NUQwQUM3RUI4MzhCN0Y4M0U4OTkzM0M5OEQ2OTUzNDkzNUJDMTM2OTRGRDRGMUY5MTNEMTMwMjZGQzVFRkM1NUFCODU3QTUwNTQzNjA1RjJEMkY0NjZEQTEyNzMyRjE4Njk5MzhGQjhBQzU3OTNBNThGMkEKK0FEMEZGNDk4Cis5NzFDODYzMTZDODk3NDQ1RDJDQUFCNTE0RAorREM2NkM2OTZDMUExMkNEQjBEOUJFMEVEMjhDQjE3MTUxMTY5NjgwODQzMDZCOEVENDkwODlEN0U2MTcyMjdGRDI0QTc1QzJFREFGOTg5MUZFQjIzMzlFRTg1NTFCMzI1NTQ3QkU3MUM4NTUyOTRDRjcyOEY1RTkwQjNFM0Y0MDhBNUQ2MjY1OEY5MjcKKzhDNjZDNjRCCis0OTdFN0JBQ0MzREQ1NjlEQzZCNjVFMDYxNDQ3Cis4NzA3MEUyQzY5QzNENEIwNDlCRjE1RjVCOTdGM0ZDMTA1NEU3MEQxREU3NTE0MzU5MzFFNjVEMjMwMTQ3OEMwMzg5N0VBMzVBNTgwQUU0MEM5OUY5Rjc4NURGMkYzNEQ1NUFBMEE4M0Q1Qzc1NDE1NEI5QUM4NTgyODhCMTBENEY3QjgzM0UwMzVDRDZBNTAyMTI0NkEzOTAzMjYyRjVGN0JDRjM1RjVBRjVEODBGRjFEQTI3QkYzNkUxRjdCQjE5M0U0QzY1MEFBN0JBOTcyQkVCQUUyRDk5OEQ2MjE0MDU4CisxMkU4QUVBMgorRDc5NEI4QThDM0MyQjg2QTUzMkE5NjdFNEZENAorMUNERDYwRDY0NkNCMDE4NDcyRDVENzAxM0UyNzg0QzI5NTIwNjk1QjgyQzAxNTNGQTlDQzM0QkUyMTIwNTU2NjA3RDA4QkJBRjM1NjYyM0RCQjNGNEZDODY0MDc0OEYzOUNGOURDRDVCMDNBNkY1QjBBMUQ5RkJENjhBOTRFOUE5MjZGM0NDREY1QjYyMTAzNTU0QjhCQjEwMjJDQjE2Q0I2NTE1QzM3NTIwMDU4M0MzQkExNjU3QUM0NUM2MUEwRjQ1NUQ3MDk2RTlBQTBFODIzCitCMjJDNUIzMworMUI4NjNDMkY5QzM0M0JGMDg4QkQ5NDg0RjIKK0Q2Qjk0RjEyNDk2Q0FFMDk5NkM0OEE3Mzg3QjQxOUJDOEU1NDMxRjQyMEEzQUJFNzQ5NjNFQTQ1OEVBN0IwRDA2RjcxQUFDOERBNDg2MzRFNUU4RkQwOUUyREUzOTAwNkQyM0E3OTgyOUNBMEM0QkE3RTlCMjAwRTI2MTA4QjAyNkI2NjhDODg1RjIyQUE1MzZCMTc2MTcwMkYyQjE3M0JEMEU4QjZCODdDRDlCM0EzM0IKK0Q5MDc0QTJECiszQ0I0MTAwQzcyNjI4OURCQzI3RUUwODcyMkRDCitFNkE1NzYyRTEwRkZCNTExQTBCMzlGQzA3ODI1N0E3RDI4Nzc5NTJCOEJFMERDNUY1RDc5NTRCRDE3OTIxQkFDN0Y1NDIyQ0Q5MTM4NEE1MTkwQUQxMDRGQzBGNDYxRjAwRTBERjlEM0YyRkUwODg0NEJFODIwQUMzRUM0NjM2MEJDRkZFNTI0QUVDOEU5RDI1OTQzQzkxQzgyOEQ1REU5RDdFRTUwRjZCNjdFQ0YzQkUwOTYxNEZBRDBBOEVFRTQyRDUyQzk0MjkwODRENkQ3REQyODlCQkI4MDgwODc4Q0Q3NDFEODk4NUZEOTcwQjkwMworNjQ2NjIwODEKKzg0Qzg2MzZEQ0UwM0RBNTdBNEE4QTc3QzM0CiszQjY0NTcxN0I3MTBEQjkyNDQyMjFENkNEQjFGQUIzM0Q3RjIwM0Y1MEVFQTIxOTQyNzQ0NDFDREIxM0U3QTc5RjQ0QkM5RDY3NkRBMEVEMkE0MTg1RDAwRUQwNkYwNDVBRTA0MkMwM0U4ODM1MkY0NEU5RkIxRjQyQURFRjAwQzc0MjVGQkZCCis0NjAyRjhCQQorRDlDNDgwMTI5NjhBOUQ1RTkzQkZGMDFGQjUKK0M4MUQ3MjA2NTM1M0Y0NDYyRTdGQzMxMzkxODY2RDEyQkJGOTZGN0UzMzZCRDcyNDFDN0Y4NkJBQkFBNENBMjc1ODEyQzJERDIxQkRBRDI2MTA1NzEwNTBBNTZGQjg0RTM0MTM5MUNCODA5NzhGODM1OEY2MTA1Qjc3NUNEMTk2M0UwNTYwNjJBQUY2RTg4QkJCMDNGRDI2NDg3ODE2MjUzNUMzMDQxM0Y1NDRCRDJCMTk0OEMyCis2MzBERDA0MgorMUI0MDNBOENCNUNDMTZBN0MwQURDREQwQTU0MQorQzdDNzk4Qzg5MjA3MTkyQgorNjYxMTFFMDUKKzRFNUY2RDFBMkFCRTE3NjFCQUU5OTQ4N0ZBNkM0RUZCNkVDRkE2QkY2OURBQTU2MTA5RDRCQjhCRUU0NEIwNTlFMEQyCitEMDlBQzRCOEMyMTIxNERGRDkyQzQ3RUZGQTVFM0JBNkQ3MTQ4QThDMjc3ODA5OTY0RjlGNEIwN0U3RjA3MzAzQkE3NzZENDU4RTM3Cis4MTE5MTQyQkIzMkU5MUM0RjUxQzIyOTc5NDFCRjlEMjc1QkYxQTUwNUEzMEQwOTZFRDY2NEEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwOTcgcHV0CitkdXAgMiAvQzAwOTkgcHV0CitkdXAgMyAvQzAxMDAgcHV0CitkdXAgNCAvQzAxMDEgcHV0CitkdXAgNSAvQzAxMDQgcHV0CitkdXAgNiAvQzAxMDUgcHV0CitkdXAgNyAvQzAxMDggcHV0CitkdXAgOCAvQzAxMDkgcHV0CitkdXAgOSAvQzAxMTEgcHV0CitkdXAgMTAgL0MwMTEyIHB1dAorZHVwIDExIC9DMDExNCBwdXQKK2R1cCAxMiAvQzAxMTUgcHV0CitkdXAgMTMgL0MwMTE2IHB1dAorZHVwIDE0IC9DMDExNyBwdXQKK2R1cCAxNSAvQzAxMTggcHV0CitkdXAgMTYgL0MwMTIyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xNDQgLTIyNyA3NTcgNzI4XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjVEN0M3M0UwRDlGQkMyQzUxRkM1RDdBNEM4NDY2QTBBQ0YzCitFRjZBNTFFODU4ODE4OTNGNUY4QkM4NDMwMjA4Cis4N0YzMTAzRjc3MjFFMTM3RkExRjVFMEFBNjY4QjkyRkQ1MjI3OUU2NkMxRjg4RTIyNUYxRDAwNTI1QjAzNjI1NjAwRUVFOUFBMEYzQkM3NzQ4NzVDNzhDOERBMzQ4NUYxNzY3NUM0OTU3NTk5NkE3M0FGQ0RGQzVDMDQzRkYxNTI0MEYyNzY2RDM2MEIyOTVEOUYzNTc1Nzg4MkYyMDIzMUNEMjNENEIxRDQ0NjQ5RkFDMkY5NDZDNTI0NEEyMkY2MkY5OERDODkwMDQ5N0RCODgwRUUzMEJFQzRCRTMwMTFDMTA4QkIxNjAzRkM5RTQ1MDg3QjRDM0Y3QjQKKzM4MEUKK0RCN0JFRERGRDgxMEJGRTU1QTUxRkE5MkU3CitDNUUwMjc2MAorMkZFQTZFMUM3QkM4MTZCMzc5QjlCQjY5MEIKKzNGMUY4RDVEMTNCMkZBMENBMTNCMzJFMjMxQUQ2NzAxRjg1RTcyNEU3M0VFNUNBQjc1MkExRjAxOTI0RTU3RUMzMzI1NjE0N0E5RDE1QzJCRUQxM0U1Qjk4NjhFNDYzRDBDRjk3Q0Y3OTUyMEQxOThFRjdFOUE0RTg0MzM2MTVENDNBREI0MkU3OTU3MDA2ODg2MEFGODE2M0RGQTMyRTFGMUFBOUQ4NEEwNTg5QzMxNkE3NTUxMDc1MzIxNDUxNworNjVCMDI0RUEKKzJDQUUzM0RFQUZFMkZDRkVDMDU1QkNDNkU4MDcKKzhBNTNCNDQ1RDkyMzgyMEMwQjNDM0I3NzVCRkExODU4QjQ5NEEzRTFFRDU3OUI0QjcwMjFCMjc0N0NBN0RCOUJBODEwRDAzQzEyMzg2MEFGNzMyRDZDRUM3QTE3NEU1QURCMkRGMkM0ODQ1OUI3REE5MTA5OUI5RUE0REZEMjcwNjAwNzAwNDdCOEZFRDU3ODUyQkE1NkYwQzc1QjA5RDk1MzE1ODQxQTFENjM3MDAyNjEyRjczMUFGOEVFNDA0N0RFRDVEOEU1M0JBNTUyQkVFRjVENzkwNzBCNkNBQzJCNjhGOEM4MzVCQkU0MTVEOTQ3NEZFMjkzOTNGOQorQUZCNworMzE2OEY4QkFDRUU0Rjc1M0U1Mzc0RjlERDU0RjgxNkYyRkIxNjU2OUNCREZGRTZCRUYyOEFGRkJBOTZFNkQxRDQxNzkwQjlBRDVBNzFBQzQ3RUJCRjA4QUZENjU0QTQxCitCQkI5QjkzNAorMzJDRDNFQTQzQzNENzU2NTBBMDI2Rjk0RUUwNworOEM5Q0QyNTE5RUY1NzIxNTZCMkYzNERFQjc2REM3NkJBOUIyNzA5QTZERDc4QzU1ODk3OENEQzc5MUJGNDM2ODFCQjdBRTkzMjhCQUE3QjI4NEJFRTVBNzQ1NEM3MkE1Q0YyQzlCREU5NDgwNUE1OUZGODQzQkU1MUNDREJGRTY5QzkzNjFFQzZDNDkxQzE4RkEyNjE2Qzc1Qjc3MkU2MTRGMTNDMzhCM0E3Q0FFMzk4NkQyQjE0MkNEREQxREEwNTI1NTZCMEI4MAorQ0QwMDlGNkEKK0IyNjM4NzUwNzAwRDY2RDBBQTU4MTAyMTMxNDEKK0FDMDA4NzgxRjM5OURGMUE4MDQzREJBRUJBRkMyQjRBQjU5NkRBMTA3MUYzRDUwNTY1NUM4QzlFODBGRDlBMUUwRkI1RjcwREI4QTIyN0ZDNUQ4N0UyNUI1OTg1NDYyRDJFNERENDQ2Rjg4NzI0MzJGQTRCRjc4ODlBNkI4MUFBQzlDQjhCODE4MTQxQzREMjM3RDdEQjFGQzVENTFBNTU5Q0QxM0M5MzVCRjFBRTYzOUUyNjFCODM0Mjc4NDFCNTY0MTA4NEY2RjQzRDQ0Q0I3REQ2MEEwRkY0N0U5NENBODZENzFGQzZFRUYzQUMxODkzMENFOTFCMDBDOQorQkQ3MAorNjcxOThFRjBGNTU5NTNERDgyNkEwQzk4MUM3MTkzRTVDQjUzNTkxRkQ5MkQ1RTNFRTRGQTNFCis5MEI4QUZEMworQkQ3RDFBNjUxNDVFNjJCMjQ3NDg0REJFRkQ3RgorOUEzNTRBOENCMkIxOTE2OTgxRjNCMDRDNDQ2RTkxRjlENzg5MEM5OUU3NjhEOUZDNEVBNjI2RDY5OEEwQTMwOTk5MzdDRTBFMTZEMjZEMzhCRkM4QUYyNDkxNEMxQ0FFMjk2N0Q3OUVGREU2OUVGODZFMjM3MzlCNDZCRTdDODM3RDlEMzA2ODhGRDM3NDg2NDlGQkY2ODA4MkZBNEQ3MTYwM0Y0ODNCMDU3RkE2REU0NUVGMzExNTRCNjI1OUYzQjYzM0VGQjNENkEzNTczQjQ3M0VCQTFGMDFERjJDRURCMDI2NzAxMkRDNDUzQkEzMDAKK0MxMTM3OTlDCitENzNEMDU4RkQzMjVDQ0RGRjkxQzdFQ0ZDMEVECitGNUMxQTgzNUZBREQzQTMzRjkwQzZENDBCRTM1QzRDNDRDMUU3NEEwNkJBNUMyMTNBQzNDMzIyMDczMzNGNDE5MjRCNzIyQjQ2N0M0QTI2MjI1N0MyMTM5OEUzQzVFMUVDQTA2RDlBMDAwOUU2Njk1MDcwNzAxNTA2OTBEOTk5QjRCOURFRDY0REVBMjJBQTYyRkNDQjA2RDBDRkZGMzBDRDZBM0YyMTY4NUY4QUY0MzM4MjU0MEMwMDAyNEI3NkZCODZDMjFCRDhGCisxNEI0NEZFRQorRDQ1MzA5Q0I3NjYzOEEzNjBDQzNDNTJDMzc2OAorMzNDQzlDMDdBMkM5NEMyOTIyNTg3MTFBMkUyNjg0QkQ3NzAyMjNFRTg3RThFNTE1MDBFNjZDNDEzQzg4NUREOEY3QjU5MUQ2MTZFMDM1RDBBNEQyNDIyQjAyQTg3QUNBMzU5MTBFMjA0ODMzNTNCOEFFRDhGRDAyN0VEODREQURDOTI3RjA0QUM1RkUyOTBCMjQxMUJBQkU5ODE5QTFCNTQ1NUM0Njc1QzAyRDU4NkZCQzk0NkRDMEQ4QzBENDU2NUQ0N0E0QkExRTAxNzY3QUMwMUJDOTlEMzgwRTI2RUFFRjI4MTExNDBEQTRCQ0IyQjZDREMxNDVFMDIzCis1NTc3Cis0MEM4QzUzRjZDMUQyM0I2NkZCNEM1NDc3ODUxNjU1MTFGRTc1RUZGNURGMDhFM0E4OTBEMjY5NTQyQzc0RTc2RENEQjI3MzM4RjU3OEY3NzQ5RTFCQzU2NDlCNDlDMzVENkVCMDdEOEIyMjA2NTgyRUY0REE1Qzg3MUFGRjBEQzczRDM2NEY1NzFCOUMxQTU1Q0FENjkKK0EzQzg5N0ZGCis2QUYzRjBFRkE1MUY3NjFDRUI1QTA5NjM5NgorQ0E2MkFERDY0MUJCRUI3RjE1QkY3MUVFNjBBMDc2OTc0NjM1OUU2RUQ1MDJEODYyMjE2ODZGNTM4N0ZBRDFDOTlGQzc5RUMzQjY3RDI2REU0NzkxQUI3QzJFM0E4NzhGMTAwREVEQzc3MDc5REU5MzU0Q0FFRTU5MzE1OURDNDgwNDg0MEIzNDZDMEI2M0FGMzA0MkE4RjU1RUQyQ0RENjgxQUUwMkE1NjQ1RTQyNzE5MDg2NDVFNjQ0MzRDOAorNkVDMUZBOTQKKzgxMjI0QjU5NEQzMjRFRUMyMkIxOENGMkZGRUMKK0M2OTREMjZEQTRCMDFFQUMxN0U4MUJEMEExMjAxQjA3MzNGMUEyMzgwNjlDRTY4NUI2MUFCN0MwMzcyREY1MjdGRTEzRTlDNEYwMkZBNEEyQTdCRTlGNjMwNjhFQkI1ODUyQzlGQjdDMEIwREM0ODA2OTlBRTJCOTU3N0RDNDM1Mzc5OUQwMjg3Q0Q5QTVFNkEwOUEwQTcyNUY1OTFFQjEzMUFDRDcyRjk4RDc5MTk5QjdCM0I0MkNGQTVFNTRGMUU3REIxRjkyRUE0RDYwNTVGQ0Y2MjdDNEUyQ0U5MDA0NkE4RTRDMzhFOTk3NDU3OTU5QUY0QzUzMTY1RQorQUEwQworMUVFRkU0MkIzQUYyMThDMTk5QkYxQjk3RkY5RjlCNkVCNjMyNTNCQzM1NTRFOENBMkIzOUYyQ0REMzMxRTczQ0Q3N0Y4NDAzOTM0ODg1MTAzMkU3CisyNkU4Q0NBMgorRjlENEFCOTA5OTY0OEYxNjU5NDRBRDAyRUUKKzgzQTQ5NEZBRDEwNjAxRkNGNTRDMDY2NUYwQjQ3ODdCNTZFOEYwQUQyMkQ4MTRFQkI2NTU0QjYyMkEzMEFDNTdFNDY2QUI0NjgxRjU2NzhEQzVFNjNDN0M0NDdDMEVDRDJCNzA3ODUwN0U5MUJDRjcyNUNFRjUwOEQ2QzQwRTg5RkQ4QTI2NjlEREFGQzFFRkQyQTBENTI0MzRBODI0NDA1MTZDMzkxQjU3QUIxNjlBMEQzNTI3CisyNzRBNTk0OQorQkVDQzM3QjdDNEE5NTUyOUJCMzNGMkMwRUE4RQorMjc5REM2NzAwRURFMENFODUwQTkxNzdDNkU4NTFEMDFENjdCMUZBQTBFRTQ0NkZFOTQ3QjE2QTI0Qjk5QzFDMkU4RDgxNDEzMzdENzA1Njk5NUY0QkE5RDEyNDY1NTE1ODdBQUVGNUU4RkVBOEM4MTI3QkJEREE2Mjk0QUJBNkIzN0I0REI2M0Q5M0JFREFBMzBGQzEyQkQ1MDEyOUEwQTgzQkYzMjQ0MEM3RjQ4MTZDNDc5NzJBREEzNUQzRENBQzY1MTE5MEJBMTkzMTAwNEU3NzcxQzkzRjQzNzY0MTQ4QjFENkJBMkZEQTcKKzgzNjVBQUMyCisxNjREMDc0NjRBOTVDMUMxMTI4OEVDMTg2MworNTNCOUM0QjI5OEU0OUMwOTUwQzhGNTIwNThDQUVGMUEzNDE5OUY4NTNCNzlERTdFMDcxMEU0QjEyNDk3QkYxNTZGODEzQjA1MjFFNzJGNjk5MzU4Q0ZCRDE0QTlENTZDOERDOENGNUY1NkQ2REExODFFMUZFNEQ2NDk2RDI0Mjk3QkVCQTgxQ0RGNDJGNDk4QzAyMjg5MTlBMERCQzUxQzg2ODYzOTkyNUY5RTE2CiswMTNDRDUyNworNTJBNjMzNzA1M0ZDOEUwQzRENTg2OUIyOTYyMAorQkVCRjAxRkRFMTI3OUJCQUZCQjlDOTVGRjY4RUE3ODk3NUU5Q0ZDQzVCNTVGMUFCQTQyMjJDNUY5RjM2REMxNzkzOEEyOUM3M0IyNTIxOTNBRjMzRTU0Nzg5OEEzOEE2QUQzQkExQTYxQTU2RDdEODUzRkUyREY0MjlGODRDM0M2N0Y5NkFCRjIxQzlFODk3ODYwQkU5Rjk3ODYyMkE1MUIzOUIwQjEwN0VCQkEwMzI2RTAwODE3MDg0N0IzOEIzODVCMjY4QUY1RDAzQTExRDU4OUQ0OTIyOTQ4MjYxQkE0NTJFQzEwOTYzRTJENTE4MjFFQkE3RDAyQkZBCitFRjM2CisyRDNBQTkwQjY5NTFDOTY3QTlDOTg4N0U3NDdCMjUzMUNGQUIzOTY5MjQ3NUE0CitFMEUwRjQ1NAorQ0M0Qjg5RUQ5Rjc0MkY5NTU0NzBBMERCNkIKK0M3RDEyQUUxMTRCQkU3QjI2RTFBODk3QzczMTcwM0MyRTQ2RUY1QkQ5Mjc4MzUwNTZCQUU2ODFBRUVERjA3MjcyMzM5NEM5QTFBQzJGOUNDRERBODhCMjcyODgwRjM5RjlDN0E5NDA5NzBBQjlGNzdDNzEzQzQwMDBCQ0YxMDFFNUFGNzYxQkZCOTc3NURENzZBNEFDMEU5NjcxMkM2ODRCMjVGOTBBNjRGNjhGOEM5MkVGMAorNjdFRDgzNUUKKzNFNEUzNzUwNjdGQ0E2QjExQTEyOUFCNzYzMUIKKzMyMTI1ODI4NUE5MUJBODdDQ0I5M0E5ODI5MzQyMTYyRkNDMjI4NUUwMTgwMTZBRDFBMjgyOTRCRkEzNTdFOEY3MTg3NDMxMkZEOTdFQTNBNDJEMTMxNEJDOTIzM0EyOEY2ODFCQ0U4NTZEN0I3NzQ5QTExRUVFRjczQjZGRUYzNDNBRDI4OTRFN0U1MDUwQzMyQ0Y4REFGMzVERTU1MTcwNkM0RTA2NTY0QTkzOUMzRTY3Q0UzQjE2RTlCM0IyMUEyMjkwRkUwNDdCMTU2Rjk2NDI4QzgyMDVCNDJBOTVDNUY4M0I4NjI2Mzc0NDNGM0U1MEI2QkM0OUFDQworRjBBMQorNDJFOEUxQjY4OEFENkNCQzRGCitCQTVENEIzRQorQzc5NDNGQTJEREI3NEY5M0QzRERGNkI1MzM0MAorOEYzRDczMzI2NzJERTE1QgorRTdFMTgzQkIKK0Q4RjJGN0I0MUU0MzYzRkY0MjI0NENFODI5QUE3M0NDNEE3OUQzM0YyQjlGMDgzOUY4OUUzNkUzMDBEQjQ4NTdGMDUyCisxRjM1REQzRjVGQTJCRDFFQzRBMUM4RjQ5NTFGNzk3RUYyQzBCMkM4MjQxODI3OEQ4N0ZCQkY0OThEMkQyRkFCRjg3Q0E2RkRBQzk5Cis1ODYyNEU0MzVFODAwMjkyMTc0QkQwRUE2MENEQjcxQjMyNkM3M0VGN0FBRTMyRkRGMjdENTEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmkgMTIuMDAgL1BTT3dzdGR1dGNoaSBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxODI2MzQzMDI2MzIyNzBmMDExMDAxMTEyNjJlMjQyOTJkMjIzMjJiMDEyNzJmMzIwMTE3MjYyMjMzMzUzMjJhMmUyODAxMTgyNjM0MzcyZjMyMmIwMTFhPiAyMjA3IDU1OCAwIDczODQgLTEgcworPDI2MzIyNzJmMzIyZDIyMmUyNDI2PiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwYjBkPiA5MzQ2IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDEyIFNGCis8MWQyOTI2PiAxMjcxIDE0MzEgMCAxNjMxIC0xIHMKKzwwMDI0MmYyZDJkMjIyZTI1MDcyYzJhMmUyNjAwMmYzMDM0MmEyZjJlMzMwMDI3MmYzMjAwMzQyOTI2MDAyMDFkMTUyMTFlMTMxYTIxMWIxYjAwMzQyNjMzMzQwMDIyMzIyNjAwMzQyOTI2MDAzMzIyMmQyNjAwMjIzMzAwMzQyOTI2MDAxZTEzMWEyMTFiMWIwMDM0MjYzMzM0MDY+IDE2MzEgMTQzMSAxMyA5NTMxIDAgcworPDM3MmEzNDI5PiAxMjcxIDE2NzYgMCAxNjU3IC0xIHMKKzwwMDM0MjkyNjAwMjcyZjJjMmMyZjM3MmEyZTI4MDAyMjI1MjUyYTM0MmEyZjJlMzMwZj4gMTY1NyAxNjc2IDMgMzgzNyAwIHMKKzwwNzIwPiAxNTg5IDE5OTggMCAxOTI5IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDQwZjBjMGEwNDAyPiAyMDMzIDE5OTggMCAyNzAwIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzMyNjM0MDAzNDI5MjYwMDJjMmYyNDIyMmMwOTMyMjYyZDJmMzQyNjAwMjAxZDE1MDAyNTI2MzYyYTI0MjYwMDI3MmEyYzI2MDAyZTIyMmQyNjAwMjczMjJmMmQwMDAwPiAzMTc3IDE5OTggOSA3NTI1IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDMwNDBmMGMwYTA0MDI+IDc1MjUgMTk5OCAwIDgxOTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOD4gODE5MiAxOTk4IDAgODI0NSAtMSBzCis8MWQyOTI2MDAzMjI2MzEzNTI2MzMzNDAwMjIyZTI1MDAzMjI2MzMzMDJmMmUzMzI2MDAzMzJhM2EyNjMzMDAzNzJhMmMyYzAwMjMyNjAwMzQyOTI2MDAyMzM1MjcyNzI2MzIwMDMzMmEzYTI2MzMwMDMwMmYzMzM0MjYyNTAwMzQyZjAwMzMyNjJlMjUwMDIyMmUyNTAwMzIyNjI0MjYyYTM2MjYwOD4gMTI3MSAyMzIwIDE0IDg2MzYgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwNjBhMGQwOTAwMDUxOTE4MTgxMzExMWUxNTE5MTgwMDBjMWMxNTEzMTgxZTEzMTIwMDBlPiAxMjcxIDI3NDggMyAzOTQ2IDAgcworPDEzMWIxZjEzMWQxZTAzMGU+IDM5NDIgMjc0OCAwIDQ3MzQgLTEgcworPDEzMWQxYTE5MTgxZDEzMDAwZD4gNDczMCAyNzQ4IDEgNTYzMCAwIHMKKzwxMzFjMTQxOTFjMTcxMDE4MTExMz4gNTYyMiAyNzQ4IDAgNjY2NCAtMSBzCis8MGIwYzBmMDc+IDEyNzEgMzEyOCAwIDE4NjYgLTEgcworPDA0PiAxODcwIDMxMjggMCAxOTI4IC0xIHMKKzwwMD4gMTkyOCAzMTI4IDEgMTk2MiAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAxMzE2MWExNTAwMzQyNjMzMzQzMzAwMjIzMjI2MDAyZTJmMzQwMDI0MmYyZDMwMmEyYzI2MjUwMDJhMmUzNDJmMDAyZTI2MzQzMDI2MzIyNzAwMjMzOTAwMjUyNjI3MjIzNTJjMzQwODAwMTUyNzAwMzkyZjM1MDAzNzJhMzMyOTAwMzQyZj4gMTk2MiAzMTI4IDEzIDc3MzUgMCBzCis8MDAyZDI2MjIzMzM1MzIyNjAwMzQyOTI2MDAzMDI2MzIyNzJmMzI+IDc3MzUgMzEyOCAzIDk0NjEgMCBzCis8M2I+IDk0NjEgMzEyOCAwIDk1MzEgLTEgcworPDJkMjIyZTI0MjY+IDEyNzEgMzM3MyAwIDE4NjQgLTEgcworPDAwMmYyNzAwMTMxNjFhMTUwNjAwMzkyZjM1MDAyZDM1MzMzNDAwMzIyNjI0MmYyZDMwMmEyYzI2MDAyZTI2MzQzMDI2MzIyNzAwMjIyZTI1MDAyZTI2MzQzMzI2MzIzNjI2MzIwMDM3MmEzNDI5MDAwNzEzMTMxOTIxMTMxNjFhMTUwMDIyMjUyNTI2MjUwMDM0MmYwMDM0MjkyNj4gMTg2NCAzMzczIDEzIDk1MzEgMCBzCis8MmQyMjJiMjYyNzJhMmMyNjA4PiAxMjcxIDM2MTggMCAyMTA5IC0xIHMKKzwxMDAwMTMxNjFhMTUwMDEyMmYyZTJlMjYyNDM0MmEyZjJlMDAxOTMyMmEyNjJlMzQyNjI1MDAxYj4gMTI3MSAzOTQwIDQgNDE5NCAwIHMKKzwyNjMxMzUyNjMzMzQwOTFiPiA0MTg2IDM5NDAgMCA0OTk4IC0xIHMKKzwyNjMzMzAyZjJlMzMyNj4gNDk5MCAzOTQwIDAgNTcxMCAtMSBzCis8MDAzNDI2MzMzNDAwMDQxMzE2MTIxOTIxMWIxYjA1MDAyYzJmMmYyYjMzMDAyZDM1MjQyOTAwMzQyOTI2MDAzMzIyMmQyNjAwMjIzMz4gNTcxMCAzOTQwIDcgOTUzMSAwIHMKKzwyMjJlMzk+IDEyNzEgNDE4NSAwIDE1ODcgLTEgcworPDAwMmYzNDI5MjYzMj4gMTU4NyA0MTg1IDEgMjEwNiAwIHMKKzwwMDMyMjYzMTM1MjYzMzM0MDkzMjI2MzMzMDJmMmUzMzI2MDAzNDI2MzMzNDA4MDAxNTM0MDAzMDI2MzIyNzJmMzIyZDMzMDAyMjAwMzIyNjMxMzUyNjMzMzQwOTMyMjYzMzMwMmYyZTMzMjYwMDM0MjYzMzM0MDAyZjM2MjYzMjAwMjIwMDMyMjYyYzJhMjIyMzJjMjYwMDI0MmYyZTJlMjYyNDM0MmEyZjJlMDg+IDIxMDYgNDE4NSAxMSA5NTMxIDAgcworPDEwMzM+IDEyNzEgNDQyOSAwIDE1MTUgLTEgcworPDAwMzcyYTM0MjkwMDM0MjkyNjAwMmYzNDI5MjYzMjAwMTMxNjFhMTUwMDM0MjYzMzM0MzMwNjAwMzQyOTI2MzIyNj4gMTUxNSA0NDI5IDYgNDQyOCAwIHMKKzwwMDJhMzMwMDJlMmYwMDMzMjYyODJkMjYyZTM0MjIzNDJhMmYyZTAwMjIyZTI1MDAzMjI2MjIzMzMzMjYyZDIzMmMzOTA2MDAzMzJmMDAyMjJjMmMwMDMyMjYzMTM1MjYzMzM0MDAyMjJlMjUwOTJmMzI+IDQ0MjggNDQyOSA5IDk1MzEgMCBzCis8MzIyNjMzMzAyZjJlMzMyNj4gMTI3MSA0Njc0IDAgMjA3MiAtMSBzCis8MDAzMzJhM2EyNjMzMDAyZDM1MzMzNDAwMjMyNjAwMmMyNjMzMzMwMDM0MjkyMjJlMDAyZjMyMDAyNjMxMzUyMjJjMDAzNDJmMDAzNDI5MjYwMDJjMmEyZTJiMDAxNzFkMWUwOD4gMjA3MiA0Njc0IDExIDY1NDEgMCBzCis8MTAwMDMzMmEyZDMwMmMyNjAwMTMxNjEyMTkyMTFiMWIwMDM0MjYzMzM0MDAyYTJlMzYyZjI0MjIzNDJhMmYyZTAwMzcyZjM1MmMyNTAwMmMyZjJmMmIwMDMzMmYyZDI2MzQyOTJhMmUyODAwMmMyYTJiMjYwMDM0MjkyYTMzMGY+IDEyNzEgNDk5NiA5IDc0MzEgMCBzCis8MDI+IDEzOTggNTMxOCAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzE5MWExZTAzMTgxMzFlMWExMzFjMTQwMzE4MTMxZTFhMTMxYzE0MDAwMjA4MDA+IDE1MDQgNTMxOCAzIDM3ODUgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYjA0MDgwOTBkMDQwNTA5MGMwZD4gMzc4NSA1MzE4IDAgNDc0NCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDAyMWUwMD4gNDc0NCA1MzE4IDIgNTA5OSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTMxNjEyMTkyMTFiMWI+IDUwOTkgNTMxOCAwIDYxNjAgLTEgcworPDE0MjYzMjI2MDAyMjMyMjYwMDMzMmYyZDI2MDAyZjI3MDAzNDI5MjYwMDEzMTYxYTE1MDczMzMwMjYyNDJhMjcyYTI0MDAyNDJmMmQyZDIyMmUyNTAwMmMyYTJlMjYwMDJmMzAzNDJhMmYyZTMzMGY+IDEyNzEgNTY0MCA4IDY3MzEgMCBzCis8MDcxMz4gMTU4OSA1OTYyIDAgMTkzNyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMzA0MGYwYzBhMDQwMj4gMjAzMyA1OTYyIDAgMjcwMCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMzMzAyNjI0MmEyNzM5PiAzMTc3IDU5NjIgMCAzNzk1IC0xIHMKKzwwMDM0MjkyNjAwMmMyZjI0MjIyYzAwMjIyZTI1MDkyZjMyMDAzMjI2MmQyZjM0MjYwMDEzMTYxYTE1MDAyNTI2MzYyYTI0MjYwMDI3MmEyYzI2MDAyZTIyMmQyNjA0MzMwNTAwMDQyNzM1MmMyYzM5MDc+IDM3OTUgNTk2MiA5IDg4OTUgMCBzCis8MzEzNTIyMmMyYTI3MmEyNjI1MDUwOD4gMzE3NyA2MjA3IDAgNDExMiAtMSBzCis8MDAxYzM5MmUzNDIyMzgwMDJhMzMwMDM0MjkyNjAwMzMyMjJkMjYwMDIyMzMwMDM0MjkyMjM0MDAyZjI3MDAyMjAwPiA0MTEyIDYyMDcgOSA2OTE0IDAgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjEwMDQwYzBhMDQwMj4gNjkxNCA2MjA3IDAgNzU5MyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA4PiA3NTkzIDYyMDcgMCA3NjQ2IC0xIHMKKzwwNzMwPiAxNTg5IDY1MjkgMCAxODgyIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBhMGEwMTBjMGEwNDAyPiAyMDMzIDY1MjkgMCAyNzI1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzMyNjM0PiAzMTc3IDY1MjkgMCAzNDMyIC0xIHMKKzwwMDM0MjkyNjAwMmMyZjI0MjIyYz4gMzQzMiA2NTI5IDIgNDI2NiAwIHMKKzwwMDIyMmUyNTA5MmYzMjAwMzIyNjJkMmYzNDI2MDAxMzE2MWExNTAwMWExYT4gNDI2NiA2NTI5IDQgNjUwNiAwIHMKKzwxMDA0MzMwNTA4MDAxYzM5MmUzNDIyMzgwMDJhMzMwMDM0MjkyNjAwMzMyMjJkMjYwMDIyMzM+IDY0NzkgNjUyOSA1IDg4OTUgMCBzCis8MzQyOTIyMzQ+IDMxNzcgNjc3NCAwIDM1MzYgLTEgcworPDAwMmYyNzAwMjIwMD4gMzUzNiA2Nzc0IDMgMzk4NiAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBjMDYxMDA0MGMwYTA0MDI+IDM5ODYgNjc3NCAwIDQ2NjUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOD4gNDY2NSA2Nzc0IDAgNDcxOCAtMSBzCis8MDczMj4gMTU4OSA3MDk2IDAgMTg0NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYzA2MTAwNDBjMGEwNDAyPiAyMDMzIDcwOTYgMCAyNzEyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzMzMDI2MjQyYTI3MzkwMDM0MjkyNjAwMzIyNjMxMzUyNjMzMzQwMDIyMmUyNTA5MmYzMjAwMzIyNjMzMzAyZjJlMzMyNjAwMzMyYTNhMjYzMzA2MDAyYTJlMDAyMzM5MzQyNjMzMDYwMDI3MmYzMjAwMzQyOTI2MDAzNDI2MzMzNDA4PiAzMTc3IDcwOTYgMTAgODc3NCAwIHMKKzwwNzMzPiAxNTg5IDc0MTggMCAxODQ3IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBmMDEwNzBlMDQ+IDIwMzMgNzQxOCAwIDI0OTUgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzMzMwMjYyNDJhMjczOT4gMzE3NyA3NDE4IDAgMzc5NSAtMSBzCis8MDAzNDI5MjYwMDBlMGEwYzA4MGMwMDFjPiAzNzk1IDc0MTggMyA0ODUyIDAgcworPDEwMWEwMDI3MmYzMjAwMzQyOTI2MDAzNDI2MzMzNDA4MDAxZDI5MmEzMzAwMzMyOTJmMzUyYzI1MDAyZTJmMzQwMDI0MmYyZTI3MmMyYTI0MzQwMDM3MmEzNDI5PiA0ODQ2IDc0MTggOCA4ODk1IDAgcworPDIyMmUzOT4gMzE3NyA3NjYzIDAgMzQ5MyAtMSBzCis8MDAyMjMzMzMyYTI4MmUyNjI1MDAxYz4gMzQ5MyA3NjYzIDIgNDQ4MCAwIHMKKzwxMDFhPiA0NDc0IDc2NjMgMCA0NzY1IC0xIHMKKzwwMzMzMDg+IDQ3NjkgNzY2MyAwIDQ5NTYgLTEgcworPDA3Mzc+IDE1ODkgNzk4NSAwIDE5MDkgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjEwMDQwYzBhMDQwMj4gMjAzMyA3OTg1IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMzMzAyNjI0MmEyNzM5PiAzMTc3IDc5ODUgMCAzNzk1IC0xIHMKKzwwMDM0MjkyNjAwMmMyZjI0MjIyYzAwMzMyNjJlMjUwOTMyMjYyNDM2MDAzNzJhMmUyNTJmMzcwMDMzMmEzYTI2MzMwMDJhMmUwMDI3MzIyMjJkMjYzMzAwMDQzNzI5MjYzMjI2MDAyMjM2MjIyYTJjPiAzNzk1IDc5ODUgOSA4ODI1IDAgcworPDNiPiA4ODI1IDc5ODUgMCA4ODk1IC0xIHMKKzwyMjIzMmMyNjA1MDg+IDMxNzcgODIzMCAwIDM2OTIgLTEgcworPDA3MWY+IDE1ODkgODU1MSAwIDE5NzUgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjEwMDQwYzBhMDQwMj4gMjAzMyA4NTUxIDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMzMzAyNjI0MmEyNzM5PiAzMTc3IDg1NTEgMCAzNzk1IC0xIHMKKzwwMDM0MjkyNjAwMzIyNjJkMmYzNDI2MDAzMzI2MmUyNTA5MzIyNjI0MzYwMDM3MmEyZTI1MmYzNzAwMzMyYTNhMjYzMzAwMmEyZTAwMjczMjIyMmQyNjMzMDAwNDM3MjkyNjMyMjY+IDM3OTUgODU1MSA4IDgzNzIgMCBzCis8MDAyMjM2MjIyYTJjPiA4MzcyIDg1NTEgMSA4ODI1IDAgcworPDNiPiA4ODI1IDg1NTEgMCA4ODk1IC0xIHMKKzwyMjIzMmMyNjA1MDg+IDMxNzcgODc5NiAwIDM2OTIgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDYwYTBkMDk+IDEyNzEgOTIyNCAwIDE3NzYgLTEgcworPDAwMDUxOTE4MTgxMzExMWUxNTE5MTgxNjEzMWQxZDAwMGU+IDE3NzYgOTIyNCAyIDM0MTQgMCBzCis8MTMxYjFmMTMxZDFlMDMwZT4gMzQxMCA5MjI0IDAgNDIwMiAtMSBzCis8MTMxZDFhMTkxODFkMTMwMDBkPiA0MTk4IDkyMjQgMSA1MDk4IDAgcworPDEzMWMxNDE5MWMxNzEwMTgxMTEzPiA1MDkwIDkyMjQgMCA2MTMyIC0xIHMKKzwwYjBjMGYwNz4gMTI3MSA5NjA0IDAgMTg2NiAtMSBzCis8MDQ+IDE4NzAgOTYwNCAwIDE5MjggLTEgcworPDAwPiAxOTI4IDk2MDQgMSAxOTYyIDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDEzMTYxYTE1MDAzNDI2MzMzNDMzMDAyMjMyMjYwMDJlMmYzNDAwMjQyZjJkMzAyYTJjMjYyNTAwMmEyZTM0MmYwMDJlMjYzNDMwMjYzMjI3MDAyMzM5MDAyNTI2MjcyMjM1MmMzNDA4MDAxNTI3MDAzOTJmMzUwMDM3MmEzMzI5MDAzNDJmPiAxOTYyIDk2MDQgMTMgNzczNSAwIHMKKzwwMDJkMjYyMjMzMzUzMjI2MDAzNDI5MjYwMDMwMjYzMjI3MmYzMj4gNzczNSA5NjA0IDMgOTQ2MSAwIHMKKzwzYj4gOTQ2MSA5NjA0IDAgOTUzMSAtMSBzCis8MmQyMjJlMjQyNj4gMTI3MSA5ODQ5IDAgMTg2NCAtMSBzCis8MDAyZjI3MDAxMzE2MWExNTA2MDAzOTJmMzUwMDJkMzUzMzM0MDAzMjI2MjQyZjJkMzAyYTJjMjYwMDJlMjYzNDMwMjYzMjI3MDAyMjJlMjUwMDJlMjYzNDMzMjYzMjM2MjYzMjAwMzcyYTM0MjkwMDA3MTMxMzE5MjExMzE2MWExNTAwMjIyNTI1MjYyNTAwMzQyZjAwMzQyOTI2PiAxODY0IDk4NDkgMTMgOTUzMSAwIHMKKzwyZDIyMmIyNjI3MmEyYzI2MDg+IDEyNzEgMTAwOTQgMCAyMTA5IC0xIHMKKzwxMD4gMTI3MSAxMDQxNiAwIDE0MzQgLTEgcworPDAwMTMxNjFhMTUwMDEyMmYyZTJlMjYyNDM0MmEyZjJlMmMyNjMzMzMwMDFiPiAxNDM0IDEwNDE2IDMgMzU5NSAwIHMKKzwyNjMxMzUyNjMzMzQwOTFiPiAzNTg3IDEwNDE2IDAgNDM5OSAtMSBzCis8MjYzMzMwMmYyZTMzMjY+IDQzOTEgMTA0MTYgMCA1MTExIC0xIHMKKzwwMDM0MjYzMzM0MDAwNDEzMTYxMjE2MjExYjFiMDUwMDJjMmYyZjJiMzMwMDJkMzUyNDI5MDAzNDI5MjYwMDMzMjIyZDI2MDAyMjMzMDAyMjJlMzkwMDJmMzQyOT4gNTExMSAxMDQxNiA5IDk0NjEgMCBzCis8M2I+IDk0NjEgMTA0MTYgMCA5NTMxIC0xIHMKKzwyNjMyPiAxMjcxIDEwNjYxIDAgMTQ1NyAtMSBzCis8MDAzMjI2MzEzNTI2MzMzNDA5MzIyNjMzMzAyZjJlMzMyNjAwMzQyNjMzMzQwODAwMTUzNDAwMzAyNjMyMjcyZjMyMmQzMzAwMjIwMDMyMjYzMTM1MjYzMzM0MDkzMjI2MzMzMDJmMmUzMzI2MDAzNDI2MzMzNDAwMmYzNjI2MzI+IDE0NTcgMTA2NjEgOCA3MTY5IDAgcworPDAwMjIyZTAwMzUyZTMyMjYyYzJhMjIyMzJjMjYwMDI0MmYyZTJlMjYyNDM0MmEyZjJlMDg+IDcxNjkgMTA2NjEgMyA5NTMxIDAgcworPDE0MmYzNzI2MzYyNjMyMDY+IDEyNzEgMTA5MDYgMCAyMTQ0IC0xIHMKKzwwMDJlMjYzNDMwMjYzMjI3PiAyMTQ0IDEwOTA2IDEgMjg0MiAwIHMKKzwwMDI1MmYyNjMzMDAyZTJmMzQwMDI5MjIzNjI2MDAyMjJlMzkwMDMzMmYzMjM0MDAyZjI3MDAzMjI2MzQzMjIyMmUzMzJkMmEzMzMzMmEyZjJlMDAyZDI2MjQyOTIyMmUyYTMzMmQwNjAwMzMyZjAwMzAyMjI0MmIyNjM0MDAyYzJmMzMzMzAwMzcyYTM0MjkwMDM0MjkyYTMzPiAyODQyIDEwOTA2IDEzIDk1MzEgMCBzCis8MzQyNjMzMzQ+IDEyNzEgMTExNTAgMCAxNTk1IC0xIHMKKzwwMDM3MmEyYzJjMDAzMjI2MzMzNTJjMzQwMDJhMmUwMDI1MzIyMjJkMjIzNDJhMjQyMjJjMmMzOTAwMmMyZjM3MjYzMjI2MjUwMDMwMjYzMjI3MmYzMjJkMjIyZTI0MjYwMDMyMjYzMzM1MmMzNDMzMDgwMDEwMzMwMDM3MmEzNDI5PiAxNTk1IDExMTUwIDkgNzE1MiAwIHMKKzwwMDM0MjkyNjAwMmYzNDI5MjYzMjAwMTMxNjFhMTUwMDM0MjYzMzM0MzMwNjAwMzQyOTI2MzIyNj4gNzE1MiAxMTE1MCA1IDk1MzEgMCBzCis8MmEzMz4gMTI3MSAxMTM5NSAwIDE0MTAgLTEgcworPDAwMmUyZjAwMzMyNjI4MmQyNjJlMzQyMjM0MmEyZjJlMDAyMjJlMjUwMDMyMjYyMjMzMzMyNjJkMjMyYzM5MDYwMDMzMmYwMDIyMmMyYzAwMzIyNjMxMzUyNjMzMzQwMDIyMmUyNTA5MmYzMjAwMzIyNjMzMzAyZjJlMzMyNjAwMzMyYTNhMjYzMzAwMmQzNTMzMzQwMDIzMjYwMDJjMjYzMzMzMDAzNDI5MjIyZTAwMmYzMj4gMTQxMCAxMTM5NSAxNSA5NTMxIDAgcworPDI2MzEzNTIyMmMwMDM0MmYwMDM0MjkyNjAwMmMyYTJlMmIwMDE3MWQxZTA4PiAxMjcxIDExNjQwIDQgMzM2NiAwIHMKKzwxMDAwMzMyYTJkMzAyYzI2MDAxMzE2MTIxNjIxMWIxYjAwMzQyNjMzMzQwMDJhMmUzNjJmMjQyMjM0MmEyZjJlMDAzNzJmMzUyYzI1MDAyYzJmMmYyYjAwMzMyZjJkMjYzNDI5MmEyZTI4MDAyYzJhMmIyNjAwMzQyOTJhMzMwZj4gMTI3MSAxMTk2MiA5IDczOTUgMCBzCis8MDI+IDEzOTggMTIyODQgMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMDMxOTFhMWUwMzE4MTMxZTFhMTMxYzE0MDMxODEzMWUxYTEzMWMxNDAwMDIwODAwPiAxNTA0IDEyMjg0IDMgMzc4NSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBiMDQwODA5MGQwNDA1MDkwYzBkPiAzNzg1IDEyMjg0IDAgNDc0NCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDAyMWUwMD4gNDc0NCAxMjI4NCAyIDUwOTkgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDEzMTYxMjE2MjExYjFiPiA1MDk5IDEyMjg0IDAgNjEyNCAtMSBzCis8MTQyNjMyMjYwMDIyMzIyNjAwMzMyZjJkMjYwMDJmMjcwMDM0MjkyNjAwMTMxNjFhMTUwNzMzMzAyNjI0MmEyNzJhMjQwMDI0MmYyZDJkMjIyZTI1MDAyYzJhMmUyNjAwMmYzMDM0MmEyZjJlMzMwZj4gMTI3MSAxMjYwNiA4IDY3MzEgMCBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMTgpIDE4CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzYgcHV0CitkdXAgMyAvQzAwMzkgcHV0CitkdXAgNCAvQzAwNDAgcHV0CitkdXAgNSAvQzAwNDEgcHV0CitkdXAgNiAvQzAwNDQgcHV0CitkdXAgNyAvQzAwNDUgcHV0CitkdXAgOCAvQzAwNDYgcHV0CitkdXAgOSAvQzAwNDcgcHV0CitkdXAgMTAgL0MwMDQ4IHB1dAorZHVwIDExIC9DMDA0OSBwdXQKK2R1cCAxMiAvQzAwNTAgcHV0CitkdXAgMTMgL0MwMDU2IHB1dAorZHVwIDE0IC9DMDA1OCBwdXQKK2R1cCAxNSAvQzAwNjUgcHV0CitkdXAgMTYgL0MwMDY2IHB1dAorZHVwIDE3IC9DMDA2NyBwdXQKK2R1cCAxOCAvQzAwNjggcHV0CitkdXAgMTkgL0MwMDY5IHB1dAorZHVwIDIwIC9DMDA3MSBwdXQKK2R1cCAyMSAvQzAwNzIgcHV0CitkdXAgMjIgL0MwMDczIHB1dAorZHVwIDIzIC9DMDA3NiBwdXQKK2R1cCAyNCAvQzAwNzcgcHV0CitkdXAgMjUgL0MwMDc4IHB1dAorZHVwIDI2IC9DMDA3OSBwdXQKK2R1cCAyNyAvQzAwODAgcHV0CitkdXAgMjggL0MwMDgyIHB1dAorZHVwIDI5IC9DMDA4MyBwdXQKK2R1cCAzMCAvQzAwODQgcHV0CitkdXAgMzEgL0MwMDg1IHB1dAorZHVwIDMyIC9DMDA4NyBwdXQKK2R1cCAzMyAvQzAwODggcHV0CitkdXAgMzQgL0MwMDkxIHB1dAorZHVwIDM1IC9DMDA5MyBwdXQKK2R1cCAzNiAvQzAwOTUgcHV0CitkdXAgMzcgL0MwMDk3IHB1dAorZHVwIDM4IC9DMDA5OCBwdXQKK2R1cCAzOSAvQzAwOTkgcHV0CitkdXAgNDAgL0MwMTAwIHB1dAorZHVwIDQxIC9DMDEwMSBwdXQKK2R1cCA0MiAvQzAxMDIgcHV0CitkdXAgNDMgL0MwMTAzIHB1dAorZHVwIDQ0IC9DMDEwNCBwdXQKK2R1cCA0NSAvQzAxMDUgcHV0CitkdXAgNDYgL0MwMTA3IHB1dAorZHVwIDQ3IC9DMDEwOCBwdXQKK2R1cCA0OCAvQzAxMDkgcHV0CitkdXAgNDkgL0MwMTEwIHB1dAorZHVwIDUwIC9DMDExMSBwdXQKK2R1cCA1MSAvQzAxMTIgcHV0CitkdXAgNTIgL0MwMTEzIHB1dAorZHVwIDUzIC9DMDExNCBwdXQKK2R1cCA1NCAvQzAxMTUgcHV0CitkdXAgNTUgL0MwMTE2IHB1dAorZHVwIDU2IC9DMDExNyBwdXQKK2R1cCA1NyAvQzAxMTggcHV0CitkdXAgNTggL0MwMTE5IHB1dAorZHVwIDU5IC9DMDEyMCBwdXQKK2R1cCA2MCAvQzAxMjEgcHV0CitkdXAgNjEgL0MwMTIyIHB1dAorZHVwIDYyIC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTI1NiA5NzggNzY2XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjI0NjBDMDFFMEM4MTU2RTZFMkUwRkFDQ0VFNjE4MTcwODQ4CitCRjg3MzBEQjMyQjVENjgwNjA0NzNDMjMKKzlEQkE3MDEwNTM3NDZGMjY2MworMzk1NjI0RUQKKzBBOTg2OENDODBFNUNFM0Q2NEUwQjA3Q0U3QzkKKzMzQkQ5ODRFMDIyMEVCQUJCNkU0NjU1ODM0Nzk4Q0JGMzJDODQ5MDYyNDYwNjYyNUJDMDU4QjZEMzI0RkMwNENERDMwQTQzNTBCOUMwQTI0NkVGMjMwOTI5NEY2MUJDOTY5N0NGNjRDRDc4QzA5NUZGOEQyOEZEODZGMUU3NjM2QzNCNUM0MjIxNzA1NTJGMjQ3QUJFNDBDOTgxMjdFMEQwMjdBQkQ2MUJCRDAyMkU3NTAzMzlDOUUyRTA2QzRDMDIxNEVENjVEQjlCRjYxQUExNEY2NTAxQTUyQUJDNDlCOTgwRUIwMDRBOTgzQzg5M0I3MDk3RTA4RERFRAorMjk4OQorMzA0RjQzQzY4QjMxNzlDNkNDNUM3M0E1CitBRDYwNTQxRAorNUY3NUNGNjE2NzFGQzUwQUI1MTAyRjE5RDQKK0MyNkM1MUI3QzRGNTY5OUMzM0ZFRkRFMzZEQTkwRkYzMUY4RTdCOEEzMTc3NjAxQTFBOUUwNzBCNjkyNUJFNDRERTIyRjQ3OTM2NDdBNDM0ODRGRTAyMzVBNUJDQTlDNkQwN0YxRjUyOTQyNjk5RjAKKzEzQzk2MzFDCis3MTVCQjU1NTMyRkUyREM5NTE4QTMxM0FCOQorRUI2RTQ5MTEzRUZCQTA0NjY1REUzRUM1QzcxMjA0OTFDQTNEOEI2MEM5Mzg5QkNFMzcyNzMxMDQ0MjQ0OEM1QkRENzA2Q0RFN0FBMzNENjRGMERCRThBNjU1MTYyQjE2MzUzRUQwQzFBNzYxRUYyRTUwQjk1NDNDQjE4MjI0RjUKKzk0QTk1MjI1Cis3RDA0NEUzMEU0MzNCQzQ0MUQyMzkzMDU4RQorQTg3MkY3RDYxN0ZDMjRGMzM1MDczM0ZEREJDNTFFQjgxQjE1Nzg4QkUyNEU5QTAyREUwODMxODE3NTYzN0Y3QTAyOTA5OEMwRkQwQUI3RjA0MzM4NkI3QjY1RkZGRkQzNTlGMEQ1RUE2MEUxRjgwMDc4MUYxRjE5OTM1RTAwCitGQkMyOUYxMQorMTkxQjY5NzE5MzNEMjA1QjZFNzI0QTM1RDIKK0I2NjBCQUJDODdFQjUzNTdBNzA4QjQ2N0Q3Qjg0NUE1Q0YzMkYwQUM0ODBGRDJCOERBQ0Y2MUUzRTU3OTIzRUEwNTcxQTJFQzlEREM5MTA1M0VCNjU3RERCREJBRDIwQjEyRTQzNEMyMTgzMkE3Q0MwMgorRTYwREZEMjkKK0YwNUQ1MzgxRUM4NTFGODNGMTY3ODIyMEU4Cis0ODZBMDU5NzY5MDQ1NkZCMDA0OEVBMjg0Rjg2RkRCNUQwRTkzN0E2QzU4MTIyCis1NUE2NzkxMQorNzY0MzhDRkYzQjA2MUU1Q0QzOUJDNzNCRTQKK0IzOTQxMEU5QjNERkNDNjg3MjQyOEY4NkQ3QTA1MkNGRUE1RkMyQjkyOUJFMjc1QkQ4OThFQjAwQkZBNDIyCitDODdGMkZCMAorOTE0QUI1M0ExOTY4NUEwNjdBRjE2NDJGOTcKKzcwN0ZDODY1RkQ2OUIzOUIzMUE0MUYxNUZCRUY4NkVFMUEwQTdFMDNCNTk1MDc3NDRCMUVGMDNGCitGOUZBODgzMgorN0QwMjQ3QzYxRTFGRjAyNDEyRERGN0UyQUYKK0EwMjFBNkI1NDhGQzUwOUEwMUMxMkU5MEU5MjFBMkNFMkExREUzMDhFQzkzMkZGMkQ2QzA1RTkxMTUzOTUzRkUzMUMzMEU5RkIwMjExODNDNzdDRjczRUY4MTIwOUI4MTE1NkY1QTc1RDI2Q0MyREY2MjBBMkNGOTI4RkRDQTI2RTE2RTkxRTgxNTU2OEJBNTlFNjcKKzBFNjJFN0UwCis2NjBFQ0UwRkE3RDdDMUYyM0RGNDQ2QzlGQQorRjBFRTdFRTVDNTNGMUYzOUVEOTNCMkE4QTZEQkQ4M0NGM0FENTBDM0YzRDE2QTNBRjhGM0RDRTYxOUE0NUM5QkQyMkUyNEM4MUEyODFBNzNDMzI5QzYxQ0MyQkVFODZBM0VERTEwMjU0OUI4MjhENDZDRUZFREQyNDM4NDRGCitGNUQzNzMwNQorNTk1Rjc5ODA4MDkzMjJFQTNDNUEzQ0MwNEQKKzg4NkZFODBCQUNDQzRDODk2MUMyMDBFRDZBMDI2QTEzREFBM0VDMjU4MjY0MTg2RkI0ODQ4NjUwQTFGRTgzMTc4QTgyOUIyNDFFRjkxRTQyRkEyQUI3MEJFNUFFQzdGRkRCQzg5N0Q0MEZBQTI3MEFBRTczOERENjc2NUY0RDk3Mjc3QjY0Q0ExRDVCMjI1ODkwRDhFRTQzRkIwNkJBOTlERkE5NEVFMkZFRDRDRUFERkM0RQorMTgyOTU0ODMKK0M2RjM3REFEOEFDRjlCQUVDNzNEMTNGMENBMEIKKzQxNTcxMjE2MjZBODU4QUZFRjNFODgwNEM5OTg5ODA2QzJBNEUzMUM1QUU4RDYyMTIzQzBBNjA4RUJGNDc4MTQ0QTE3MUMxNDQwQ0U2MDUzREM4QjFCMDAyMkE0QkU2QTA5MDkwMDlCMzIwRTZFQjIxQjBDM0E4QTE4ODc2NUVBMUQ2ODZFODQ4MTU0MjAzRjQxNDQ1QTg1RDVBNTk5ODcyREU5QkRGQUZBMzAzRjE2MUNEMUVBRkJCNEU0OURBQzZCMjU5NTM5ODVFOUEyOTNDOTcxQjA4MDU5Q0M3RDYzRjA1NTVCNEVGMkFGQkZDNjA2RjkKKzg3OEZEMTM0CitEMURGOUQ5OTdERUJENkI2RDA2MkZDNTg5MAorOTk4QTk5QkYzRkEwODhBMDdGNkY5MTYxRjE0RkY4MERDOTdFNEMyNURDNTk3NUIzNTg3RDgyRjcyQjJGMjgwNkYzQTE1QkQwMjBDNUE3MkE2QzcxRkEyQzkyNDk5MjVBNTk3QzdEOEE4NzhBCitBMDIwREE1MworQjFCMkRDNDM0M0QxOTU2MkMwMjg5NEE1RDNBMworMzExNDVERTY3NkUzMTJCQkI4MUEzOTkxODQyOUQ2NTZGQTg5REI1OTcwMkM4MEJCNjYwNUREQzMzMzc0N0U5QkM2QzE1MDFBMDk1RUExQzA1NUVGOEI4NDYwMzIwMTdCOUVFNDhDMDk4RjRBNzQ1N0I5NzkwQThGNTBGQzhDODc1QTdEMDg4OUE5QTExQjNDOEFFQTkxNTVFNDMwQzVCQ0VENEM1NUM0M0E2MTI0OTQxODcxOEM2QjEwMERFNzcyREI0REVFNTZBNUIyN0EwNURGQ0QwQjFBM0Q3QTRENTFEN0QzRTQKK0ZBQTc4MTMyCis3OUNBQTE3OEY0RDQ2RkNGM0U0MDBBOENDQjcxCis3RkNCQTA1MkEwMjlFRDRDMDFFRDFGOTVBRjM4MzM4Qjk5Q0ZDQTEzNDlCMzcxRTAwQ0Q5RkVDMDgyRjA0NjM0NDQyODRDOTgxMjg3Q0EzMUNENTBGRkYwQTI4RjM1MTlFODlFMDExN0ZFQTI5MjMyNTAzQ0E2NDA5RjNERDg1MTZGMUYzREVDRUU1RjZCQzVDOUU1NzA4MkY4QkNGQzkxNUIyNkMzQUVFRTMxQzg0NTc0ODQzRjZEREFEQTNEQzExMUVFODA3MjlENTZDNDQzQkYzNDkwRDg0ODc1REI1RjgxQTNDN0E5OTM5OURDOEIyOTBBNjFCQUIyNDkKK0FGOUYKKzEwCitENzE0QTVGNAorNERDQURGNzI3NjZGRTFBNzg2QkVCMEQwRjgKKzQ4OEZFMTg1QUMwQ0UwRDY5NUQwRDlDRjY4OTlCOUU4ODdBMTgzODlFRDA3ODI5Qzk1NzYwRDZERjQ1Mjk5MzREMzNCRUQwRUYyODc1MzhBNzMwQTE4NkI0OEU3QTFFMzhCQTNCNTQ2MTg3N0RDMEE2MjRBQkNEMENGNzkzQTAzRDk1QkQzM0JDRkVGNjFCN0QwREQ0NEU1MzA1MTFEQjNEM0VBOUFGMzQ0NEVCMUY1MzYzMjlDQjAzRjM2RTgwQTAzCis4OTE5QUZGNgorRUNCMjYxQzcxQkQ3N0NDRTA5ODE5Mzk3NDUKK0Y5RDVFRUVDMjBDRjZBMTQwNURDRjQ3OTA2MjY3RjY5MUY5MjhEQTY3QTFDRThENDI2REI1QzlCQzE3REM5MEQ2MDJDNEYxNDg0NkU1MUJBQjhGQ0JGMDVGRkRENEVFQjVBNzU2MDVFREE4RURERERBOERDN0IxQzdCQ0RFN0RCNUFEQTc5RDQyMzk1NTgxMTFBMEQ4NjkxNDQ0ODBERUQzQURCNDEwODExNTE5RUFDNTgwQzlCQjhFNzJFQzlBMkJERjI2RAorMTNDNzM2ODEKKzI3QUM3QkI2QTcxOEZGMDk3Q0M3RTVEQUVEQkQKKzA4RURCQ0JDOTE5MEUxNjA4QjhFM0VDNUM4QkMyMEY0Nzc5MTEyOEYzOTE4MEVDRjA0OEU0NjJDNERGODZCOEFGMEUzRkNERkE1MDFCMjQ2RTVEM0MxNkNENzQ2Qzg1QURERTBDRjFEOUY0ODEzQUU4NTJERDcyRjA0NDAxQTQ1NjQ3OEQxODIxNkU4REI5RTk5MzkwNjBGQjA2OTYzMTdBQjlCRDQyRUM2NUU0OEIwMjM5OUFFRDQ2NDk2NjE4NEE2RkUzNzg4Q0NBRTYxRTU3ODhBRjNDQzAxOTdFN0VBRjk5QjAzMDA3MjQyNDA5MkZERjExNTdEMzgxNgorQTM5RUYwNTYKKzY3MEY0RjI4NUYwMDBBRjVBMURGMjc5MTc4QjkKKzlGRDM4NzVCN0VGNEJGQzUyOUFBOUE5QjAzMTgxQURCMTlCNTIwMkYwNjBDN0ZBOTI4NEM5MTczREVGNDlDQjgyRDk3ODBCRTcwMTI0M0ZENjQxRTI0N0IzNDEyRDk4QjRCMDg2N0U5OUEwRUQ1NzlDMjQ5QjhFRUY1RDM5NTE0MTAyMzRDN0Y5NjM0MTZFRTFDNkZDRTkwQjFBNjMyRkI2ODFDMjNBMEZFRjAyMkQ5QUM2OEI1ODhBODc4OEY5NzFBM0RFNkRCMUEzNUQ0NkQzNjMwOTg3QjlERTkzNkRGQUZCRjNGMkY1QjRBNzQzNEY2NDEKKzQ0NDQ5MTg1CisxRDdFQjlFNDNFMURBMUZERkRCOTk2Q0U5QTc2Cis0RDhGQjExNTNGRjI5QTE1QTBDODcxQjREMDUyMTQ3MDAyRUVEMjNDOTFDRUMzOTgyRjQ5MEE4MzQ3N0Y4RjBFMzg1NzNBRUE1NjhCMzQ3OTkyMTQyQTlBMUUyMTVCNDBCQzI5QUYxQjBEQzlEQUQ1OTM4M0Q3MDUyOTM0NjRBMTA5REVCOENENjI2NTk0QzBDQUU5RkNCQ0VBNUFDN0VCQjM0RTQ2MURFODQ4RTc3QjhFMzE2N0Y4OEQ3MjczOEMwMDNCMTA1MzhFNUVGODg3NkU1Q0NBRTk2QzI4OUNBNjlCODgxNkQ3NjhEMTE3QUU1MTE5MzUzREI5RDQKKzM5NDUKK0UzQTg2RkUxMDkwOUJGMzgyMTdDMDUKK0U3RUE5NDA2CisxMEZENzIxRkVCMEM1MzE3OUY5MjE3MURCRgorOTk2NEJCRUNBNDY2M0M4NkEwN0Q4MjZDMTkyNUE1QzAwMjNCMTJCRTBFOEI2MjVEQTcyQUM5MEExNTJEOENBMzcwOTg2Mjg0NjVBNUM2NDVCRjNCN0ZGNTk0NERCNDFDOTMyMzc5QzZEQUI5RDQ1QjMyNUJDMQorQTAxMTVENjQKKzhDQjY2N0Q4RTFDMUZGRTI0RjI0RjcxMUZGCis1NzFFNzU0MDkyQjU1MjE1MjA5MzI3QTM2M0Y3N0JBRUIzREU1NkQ0NEIxMUM2MjdDNEFGNEREMUZBQ0I5MzNENEQwM0E0MjkyQTZFQTAzMjA3OEE2M0Q4N0JBNDg0MTMyMzg2QzJGRTdGODg4QUYzNTJGQzc2NTc0Qjg0NjM5MUE3MjlERUQwMTM5MTNBCisyNDVFM0M1OQorREI4ODY4OTE2RTU1NTE2MzhBOUQzMjNEOEI0RgorRjgxMjlBOEU0QkQ2QkE2OEQ4REIzMEQ1QzlDNTkwRjZCQUZGQzE5N0NBMzJEN0YwQ0M4NzRCRDc2N0U3MTU4MDAwQUZDM0IyQjQ4NzZCQTY3QjkxMjgwOEM5NTlCMUE5NTc3NzFBNTYxMDVDMUM0Q0VCQjY3Rjk4NkU3QkNFOTlERDg5QTU1ODEyMTcxMzY1MTk1MkY0NjE3OTNCMTY5MEI5OTU2RThCQTMzMEQ3RTUzNEI1MUQwRTkyQTc1Qzc0NUJENTBBRENDMjg3MEVFNzc5MUEwQkRDNjlEQ0JBCiswQjJEMkVBNAorRjdEMkEzNEE2QzcwQUUxQTU3QTJBN0NEQUQKKzYzQTBEQjZEQzRDNTI2NDVBQjE2RDU5MEJDMzFFMzNFNERCNDhEMkIzNTY3ODg5Q0NFRkI0MUNEQzg3OUIxNDJEMTREQjExMDA0QjNCRDI3M0VDMzdDOEU5RTgzQ0U4MEJCRkY5OTYzMDExNEIyRjcwQjdDRUM1M0JDOTg5QkUzN0Y1MjUyMUNERjk4ODEzNjg2RDBFOUFDQkZEQzAwOTk1QzgzQzYwQTk5NjIwNTJDQzQzQUQ3NDcKK0IyN0M5MjU2Cis2NDhCNjI4MDU1MERGRTEwMEFGMTg0RTY3OAorMzQ1NkJGQzQzRUMxMTFDQThERUU3REIwODVCNDMwMUQ5NjFGMTA0RjQzOUE2OUM1REFCRkEwNzgzNUJFRjI3NDM5OTgyOUFGODkxRjg2QjA3MTc4MzZCNzE0MEJFRkQzM0U3RDZFRTZDRjExQzlGRDFFMkE0NDFDNDBDMzY1NERBM0M3QzhBMDBDNDIxNkEyQkRGNkREQzcwNDk5QzJCRjVBMThEQQorODk4NzkzNTEKKzg3RjNEMTBDMDIzNDAxMkNDRkEwRTNDMjExQTgKKzlFMTZERTVCQTNENjA0NENBRkIyNEE4RTQzODBGRjU0ODUxREJEQTU0NTU3M0NDRDY4NDE5NzNDM0Y5RTk0OEU5RkM1M0FCNkM2REQwREVCNzIxNzZEQjU0RTRDN0YyMUE5RTdCNDQ2Njc2MjlCQ0I2QUZBODk2OUJFOThEMDYzN0NEQ0Q5ODYxQkU1N0I3MzFDOTQ5QTJDMzEzMjQ2OTZBMzI3MUQzOEFERUUwNEQxQzNCN0E0QzM0RDg2OTcxMjRFQzFEMTVFOUJBMDQ5MjBEQzI5Cis2NzJGNjEyNworOUZFQzYwMTM2QjgxMzgyMDJENkQ3NkQ3Q0Y2NgorQjg2NEJGMjgxNDk5OTAxQTgwQjI3NDk3RjFEQjgwMDZFNTBBMzA5OUY2ODAwRjRBMDlCNkU5QkY2M0ZGOEQ0NzREMzc5OEMzRTE4MkI4NjA5QjFFQkVCOEU1MzYyODA4NjVGMUFFMEFEQjU5QTE0MjRGMjRDRkUxMzU0MUIyQTgyRTUyM0ZGRTVFMDNGMkI4MjVDN0JDNERDRkVCQ0RBMEMwMzRFMTE3RjRFMjFDRDA5REVBNTZGQkFBRkJFOURGQkIwNUQ2MTNCOUVCNTBGOTUzQzhDQzIwMUMyRDM2MTIyOTQxRDFDRUM2RTE0NkE2NjAxM0VCQjU2NDI4CitDQzU5NUFCMgorODZFMjQwMzkzRTNCQTc2QkI5RTg3RjEyMkE2MworNUYzODcwNDkxQjhBNDQxOEE4QTJDRjlDRDkyNDREMEJCQUIwOERGODA0RjcxNDcyMDNEQ0U0QjNCMzI1Qjc2REVGRjE0RUVERkI2N0FGRkI0ODk1NzdGMUQ2MzA1NzBFNjJCNURGRjJGQzYzMjg1MUU0QTMxRjkxQTc3NUM3NTU1MzQ5Q0FEMjhFRDE0MjA4NTM0MjRFODkzMkExMEQ5OEQ0MDFEMjNERkY5NkExNzdDOTMzNkIxMENDQkQ3RTM5NDU5RjU0QjFCMzNCMDdBRTc2RDkxRTI0OEY4MzcxMjc2NTg4MDBDOTQxRjQzNTFEMEJDRDc4ODBBNkI0Cis5MUI1CiszQTg1QUMKKzc3MTBERTYyCis1QkQwOEUwOURFNjhGQzZERkZEMUFFMjdBMQorQ0I1NUMyRjUyNEM3NTcyODlCMjZCNTM3OTIyQzU0NkI2ODIzRDc3MTZCMkU2MTU2RUFGQUMzRjcwRTE3MEJBNzY4OEUzMzYwNzI5M0IwMkIwRjFCQTUwOThENTQ0MTREOEEwMDgyRDhENjU3RDVDRTNGNjRDQUZEOUI0OTkzQkU5NjU1MDA3RTJBQUFFRDI0RjBCRjM3RUU0QkNCREMxMUE2CitENUM5RkQzNQorMzREM0IwODk2RDUyMDRBMDZBNThENzRDRjNFNQorREFBODJEQTRCREQ2QzFFMUMwRjlBQzlENTU2NURBNEM3MjRENUFDQUM5ODlDQjk2NEIyMkQ0NjA2MzNCRUY3NTNCRUQ3NTIxN0QzREUyRUUxQzA5M0NCNDVGQjVFOTA3NTk1Qjk0M0NBODcyMUUxQ0FFODU4MEM0NUI3RTkxODExRUM0OUEwMTBBRDM3NDkxMzhCMjM1Q0Y2QTM1NUVDNzAwNzBCNUIyQkI0ODEwMjUwMDc3MEUyRDBDOEM5N0RDQTYwQTYzNzMKK0M1MTI5NjIwCiszRjZGMjk4RTM2QjYyNThGRTVDQTA4MkVEMDk5Cis1OEU3MDNGNzVCMTQ0QUYzMkYyRUNENTlCNjk2MjczOUQ0MjQyRDI0MTEyNDU2RTUwNEEyQjdGOEIwQjI4QTM2REE1NzIwNUQyMzVCQUNEQzVBNTUwM0E5RDIwQzdDQzg4QjQ2MEUyOUFGQzBCNUYxMDMxNkQzNzMxNEU4NkMyNjgxMDU5M0NBN0JCQkFERjRBMDRDMDY1NUJENTQ0MTcyMEFGRkU1MjcyMTQzMTFBMEEyRjI1RTMyNzAyNDlFQzNGM0ZGNzMxNEIyRTVCMDBBNzM0QTJDOTExRTU4RENCRDQ0QTREOUI5RDExQTc4MDREMDk0QzcwNkNCMDUKKzhGMjkKKzdGQzcwREE5MjYxNDIxMzM3ODJBMkZCRDQ3RkZFQTE1CitFNzk2MjU5QworODQ3NDBBNEFERkRCODdEQkM3QzU3MUMyOUM1OAorMzdGRkZCQURERTY5NkFDNzlBRjAxOEMzODAyNTJEMEJDRDM4NUU5Q0ZEQTgyQkM4MkRFQTBBMDZDN0FCM0FGOEYwNjhGQzEwNjVFOEI5QzIyQ0E5Rjc2RDE3QTlCRUJDMzkzNjk5RTczRjhGOEQ2NjA0MDhBRjU2MUJEQ0RBNkNCN0FDREYxRjk0NjcyMTZEQzAxOTc3QTRDQzAzRUUxNUYwRTBFNTEwMzU3RDVFRTE3QzZGRTE5MTNCNzc1NTJGODNCOTI0MzE5OUQ3QjFGMTY0OTI3RTI4MTM2QTRDQzJEREY4MjA1MzkyREQ4NjVFMTc1RDlEMTkwOThBCis0MDkwCis3MTc1RjQ4Nzk0NDVFOEY5QTFFMDU4OTc3MzcxREI4ODU4NEEyQ0Y1REY5RTc5NENFMkY2N0IyODg1NTNFNkY1MzE3QkNERkQ0RDcxMDEKKzhCODk5QzMyCis5RjE5RkVFMjA1REQ4ODg2QTU2RkI3RTFDMAorOUVENDA5QTNBNEVBODkwREIxNjI4QUY1MTU1QTU2Q0FFQzMxMDk3OEIzNEM3Q0RDRDM2M0ZBMjAyRDc2RUVEQzkxQ0M1OTIxOEMzMjUwREYyRTVDCisxMUFFRDQ5QgorMEYxM0U4Mzc5OTU4Njg0MjdBRTI1RkI3N0EKKzYwRDA0RERFRjQ2ODQ5NDFBODM3NEEyNTU5ODNGNTMxODI0MjBCRTBGMzZENkRBNEFFOTFCMDM3Q0Q0NDMwOUIxMzNERUI1NTRERDI3MDFFQ0Q4Q0ZFRUEKKzM2NUY3RTk0CitGOEY0MUJBQkVBRDhFRjA4OERCMUJEQzJFQQorODE1OUEzRDQyQjZBQUEwQTE1QTBEMDlCQTRGOTlGOURDRjQxOEYzRUQzREYKK0FCRDE1ODBECiswM0UwQTNCNkMxNTJFQUVEODhBNUU3MUY5RjQxCitDQjhCQzFFQURGOTExOUE4MzUyQTc0MTM0ODEwMzRDMzM1OUNGNjg2MTBFQzBGNTk0NTkyREJGRUZGMTUxQzY2NkYwQzlFRkJGNjc1M0VENDhCNEM4NkFGRjMyQzBERTUxNTc0MTQxM0UxMDU5MEFERjcxQ0M5NUY4NjQ5RUI1QUUzQUFFNzM1NUFGRUNFREJFOTc4NUI1MTBDNkM2QjQ1NUIxQTVDRkY3NjFFRkYxNTI4RDg0NzgxMEFBM0Y2QzQ0MkI3NUE1OUVGREMwMkE5NDY1RTVBRkE2MDcyRTVCNDY4MzMyQzRGMzAzQzQ5MjIyRjNEN0M2RkE2ODgKK0M1MDcKKzdDNTFFQQorQkNBMDcwOEUKKzcxQTdGRDBDREIyNzA0NEY1QkI5MTNEMDY5CitFNDEyNjc0M0M3QzQxOTA4MkVCM0Y1RjMxRUY1M0EzOUE0RTIxQjdGOTkxRTE0MDg4OTM1MTFFQUMwQkQ5QjVDMjQ4QzFGNzdFRjc4MDlGQjFEQURDNjI4QTI3MTE2OUJCREFENDhDMUUzNTNCNzM2RThBNDU5QzU5MzBBMUM5QTMyODA2QUE2NDJFMkIyNEI3REE2NzQ5RTQ2RDc4QkU0RkMyNDY4MkNBRkZCRDREOAorM0QxQzQ3MjUKKzZBMkNFQjlDQzM3NjhDQjcxMjlDM0VCNTY3CitGMkU5MjU2Nzk5REVEQkFFRjVEMzI2NzYwMTFDQzBGNjBFNTc5MDREMDE4RTM3QkY0NTYzMzYyOEM4NDYyMzE5QzY4MUMzRTY5Rjk4N0RFRTg3RkFGRTVBRUFDRDgzMEFBOTgwNDI0RjU4Q0E2Q0ZBQTVDOUUyNkY5QTJERUM5QzNFNzZGMkM3RTJEMDg0OTY4MEI5NEI2QzBBNDdGMzBBOTREOAorRkM1MEFFMjgKK0ZBMDBBOTk1MDNEQ0ZGMThDODAyQjU3QTA4MDQKK0M3QjUxMDk0RkY3QTg1NUEzNjY4RjUyRjE0M0VBMjBEMzhGMkRGNkQwRkExQkVFQ0YyMUNFNDA0ODBEMERBODIxNTA0QzVDODA3RTY2RDA0NUY4RTREQ0Y3MzZBRUIwN0RFNkVBNzhEREY1REQyMDdDRDE1NzYwRkQzMzcwQzVBNjgxNzNFQjk1MDhEQ0Q0NTVCMERENjI4RTYxREZDOTNCMTU2REJBMDMyM0I1NEFFODc5RjRDOEQyQkUyRUE5RkU3RDU5MjMwMjVCM0E2ODdFRjM4RjkxQzg2MkMKK0NDNTBENzk1Cis0N0VGNUM0QjQ5REE3RTA5ODYxRUEzMjdGNQorRTQ4RTFGNDQzNDg0MTg0MTA2RTU2MDdDRDk5NkRCMkI0NUZFNDhBMDE2NUFDNUNBQUU3ODRDNTQ1N0E4N0M4RUYyM0M1OTRCNTk2RDYyNDI0RDkxRkQ3Q0I3REQzOTBFQUI0QzlDMEVDMjk2QUNGQkYyNzlGODREQjVBNUY3REJDOEQyRTQ2ODYyOEFBOEMzRjhEMTQ3NjEwNkRCMUNCOUY5MDY1NERFNjYwNzBDRTEyRAorQTAwQTc2M0QKKzk5RTJGRURDNjk0Mzg4QjAyNjg4MzY2NUMzCisxQjUzNjFERDE2NjRDNTNGMTkwOERBQThCODlEOTUxQkVEMEZDOTVBRjAyRUY5MEVGNDQ3Q0FDNEQ4Q0IzNDA1NDVCOTVFMUMzMDkxMEFCNTg2Qjc5OTExMkYwRjc1NUI1MzNFNDEzNEU5QjVDOEJCNDEwNUQ2NTBFRUMyOTgwMDIzNjA0NDI2NEVCMzU3ODU4OTM5NEMxQ0ZBOTdGNzY4NDA5NTk5NDlENTM1NDVGQjU4NEYwNzhECitCNTQ4RDkxNQorMThDNDJEQUU1NDk2NjFFOTRERDYzRjJDQTBGRgorNkJFM0I4Q0M5RDFDNTY5N0EwNjE4RTIxRjcwRDc4Njc1RjMwOEVDODU1OURDOTJEMUZCRkE0Nzg1ODc1MjhGNTFBNjc3QkZBODE0NDIwMTgyODcyQUUwRjAxNUIyQjUxMjAwNEUzMTIwOTc5NUFFQzU4QThFOThDODQ2QTRGQUU1OURCMjNFODQyMDg2RUQxNjRGMzY4ODUxMDBCQkM1QzIzQzc5QjA0NUFBN0NGQ0IwNDM4MzVDNDY5NkJCQjEwNjFEQjM2MTA5RTlCMjM2MERGQzA0RUY2NjQwNzAxQjRGQTM3MjQ0OTNBMUJFQzFBQTdDOEU0NDUyMTlCCitCMjQ0CiswN0M4MjlDQTNDNzg0N0M1REEzNjQxNzgzMDBBMTM0QURDOTdCNDVBMEQ2RDhFQ0MxODFGRDMzN0VBM0EzODREQTJBMkJBNzJDRUZDQTcxREM1QTg1MDIzOTIyNjAxCis1NUQ3M0JDQgorQkQ3NjA0QjgzQzU2MDhBQ0JCMTcxNThGMURFRQorRkM2NjlDRTYzQ0NDRjBENkJFRkY1RDA3NDkxM0RBNzlBQjhBODE4M0I0ODE2RUIwOThCMkE2RkNBNzk5RTY5Qjg0OENGNjkwREIzQzZDQzM3NzQ5QkRCNDdCQjg3ODhGOUNGQTIyNTI5QzMyQzM1MEY3MkY5ODNEQThGQkEzQUZDNTk0RjM3MDYxQkVFQjdCMENGMzNERjg5OEYyNDM0Q0Q0RTk3MDUwQjhFODY4RkIyMDlEQjBEQTgwQjM2M0NDMTUzMjg1MzA5RTdDQzgyOTE1N0FFNzY5REUKK0I5NTNEQTRFCisyMzVFQzk2NzdCOTA0MjBFQTQwM0RBNThERQorMDU2QjdCMEYyODFCMzU2MDJEN0QzRTA3RjA2MENDQ0M3RTQ3QzI3ODY1MDhFNzQ5RjZDRTFDMjQ4QUQ3NDg2NEVGREUwOTQ5MERFNjk5NEU3QkE1N0IwRUREMEE3NzgxMEI3NkI5NzA3QjBDOTg1ODcxRDYzQUQ4NjlDNTAzN0M0NTQ2MjA1RkE3OTcyRDMyRDMwMTA2MzBGOEM5N0M4MgorNEMxMTg0MDgKK0JBNUNGQTZCOTc3QzFBOEJFMUQ3OEQ4RTJEOUUKK0FERjI2MzI0NzRBNjQ2QzFCMUFBMjE3RDYyNTZCRTE0ODZFRURBQ0Q1RDdGOUQzNUZBM0RBRDk3NTM5MzU0RjdGNzNBNTI1MzFDRDlFMThBMjM1QkRGQkQ0NDU4QzhGQUE1MUYyRjJFN0UwOTVGNkRFMUY3RkZGREU3RTY4MDAyRDkwRDczOUI3RjM5RjU4QzNBQzM4MDI5QzZEMzQ2RDI5REZGQzA4NTRFMDlENTZGNDI0QjE2N0JGNDE3MEFERThDREE3MThEOTNCN0Q1Rjc5REM3QjdDRTgxQ0U5QUVDQzMzRUM5OURFMjE0MEMzMkVCNzE0N0MxNEJGMgorNjhGQQorOTdFNDZGMkFFRTg1QzkwREE3MTAxMjA1QzcxNTc5M0QyRUM5MTk4OTQ3NTJGRjM4NjNFQUU2RDQyNkQ5QTY0NUM4QTQxMAorNkZBOUIyREYKKzMzN0M0REQ4RTdGNTNGMTM0Mzk0RUE0NUU5Cis4RjIxMERFRTA0ODZGNEQxRkRGOTg3M0I2MTlBQjA0QzVENTMyMTQ3RTZCREE3QzkwM0NFQzAxQzBGQTQ5N0NBOUI3MzdGOEM1NUUzODY2QTY5NUJERjdGN0Q3QUZFNUQzQzIwRkI3NzVCNTcKK0UxRTBFQkM1CitDMjIyMDUzNzQ4NkQ0MTYyMTkxMkY1QkE4OTkwCis2MzM5MThGNTM2NjE5M0Y2OTk4MkI0MjY4NzA5RkEzMTc5OTBBMDE2OTI1OTA3RTQ1NUY1OEFFRTg1NkZENTMyNDI3MEFBRkFBNDRDMzFCNkVEMjAzQjc3ODYwQUFDNDI0MzBCQjA4MUFEOEJEMkQ5QzUxMjFCMjQ5Qzc2RDNENzAwMzE3NEMyQUU0MTZGNzk2RjAxNDk3NzUzQzZGRUEyN0E4RjNFNTc2RjAyNEM2MTQzNTQyNUVFNUQ2OUFGNTNFNDQzNTQ4MDk3Mzk4RkVFMkRENTMxNDlDRjJGQzRBMzgxRjE1MDE0ODUxMEY4OEY1NjBFREQwNjNGNzYKK0U3ODcKKzZDNTNEQzQxREVGNDNFQzkyQzdCRDUxQ0VFQkE4NEM0NEY0RTA4NTlBNDE0RTdCNkY3MzUzRjg0QTVDOTlCCis3MEMwMTBCMQorRkYxRUYxQjA1NThDODI5RkJGN0NFOEYzOTgzQgorMDMxQzAzRDA3NEMzNjFEMkE1MTg0RERENzMzOTMyNzMzNTZFQkUxMUEwRDMwRDk2QkYwNERENkUzMEY0NTU0NjNEMTJBOTI1OTgyMThENUJFQURBMUMzQ0I5N0M1MjlBNEQ4Nzc3MUEwRjRCMDAxREUxQkFCQjFDNDM5MTU0RUZERUE4NzI4MEU4MTRBQkVDQzdBMkNCODE2NjdGMzM0REU1N0RCRTlDM0ZGMzk4MDE2OUVENjg0Mzc0NzUxQjNDN0Y2QzU0MENGMkVCNUU3MTI4NkMwQzhBCisxNTI3MTg3NQorMzc3MDdDNjgyNUY5NjU3RjdGMjRDMDQ4OUIKK0U4NTk1MkE2RDcyRjZBMjAyNTlDODk2MzNGRTYyMTgzQzhDRkI5OEIyNUZCRjExOTAwRDc4MEFENDI0NzI4QUFEREQ0RDJGNjQyN0FENDlGRDBFRjI4OTMyOUNBRkQ3NTRCNDVCQTQ1NjBBQjc3RTIwRDQxQzExQzI3NjJBMEIxNjc4QUJGQzFBRUNCCiswOTgyOTk5MworRTg1QjkxREQ0OEQ0OTdFNzhEMDM4QjNCQjNFOAorQzcyOTVCNzcwOUJDQjkwQjNBNjdFNTMyOUM4Q0Q0RkVDQTI5OTUzNjFFMjQ2RDlEM0QyQ0Y0N0I1MTUzQ0Q2RjkyRkE4RUE5M0UwNjMzQ0VBMUNCRjMxM0E1QzYyNkI0REJFNTVDMzVBNzNEQkUzRThFREIyOUQ3MDFFNzA4NDVCQjkxOTA0RjU1NTIzRjc4NDM2RkRBRUMyQzk1Qjk5RDQ2RTVCNjE1NUZCRDZFQTI5MUY2NEI0NzdCQUU1MDIzNEY1QUU3MkNENzRCMURBRTUzNkJCMUExOTk5MTgwRTAzQjdDNDBDNjEyOEU2OQorNjQ3OTM1QTMKK0I0N0UzQjREQkMxQ0E5NzUxNzU1REI4RTNCMEMKKzAxQzZENzUzOTFENDI2RTM4QzQ1NUU3M0MzMDkyRjNBNzAxODU5N0VDNkQ1NjVFNEZDREE0MDAxQUY5MkI2Qzc1NzAzOTk2OEQwMUFGNzQzOUMyN0ZEQzI3RTdBOTVGNzg0N0VBMkVDM0MxMTNBNDRCRTMzOEU0MEY3NEE0OEE1NkJEQjZCMjIyNjNFMkFGNUNBN0Q0OEUwREQwNjNDQTA1NENCQURFQzI1NEVBMzUzMTMzMkE1QjdDMzYzQkFFOUZGRjUzREZGN0QxRTEzMDgxOTVGCis0RDA3Q0Y4MAorREI5QjREMjkwOTM5RUEyMUVDOTY1REQ3NjMKKzEyNzZENTE2RjgxNjc5RUUwNjdERkQ5MkRFQjM0NUZERTU0QUVCREYyQ0Q5MkY0RjE0NkQ0RTBEREZDRjQzOTZBM0Q1MjgxNDMzMDIwNTU1OTI0MUFDN0VDMDQ3M0NDNTdGNjFEOUNFQTc3NUY3ODQxRTE4Mjc5MDFGOTUwMzQ2QjEzOTVGOUMyNTg1MzUwOTRCRjM0RTg0RjE3QzU1NkFGOTJERDlDMkI0Q0JERAorMzI5NDNDNEYKK0VDNDg0RjZFMjY0RjFCRDYwNjNCMjQ4QkM5RUYKKzA3NDYzN0NCQTMzQkUyN0U2MjRFNjkyMzQ1NDEwQjE2RUJFMzVBMDFEOUE2REQ4QTQ4RTdENEY4MTM2NjFDNTdDRTYwM0NEOTk2RDMxRDU3NkJGMTM5QTc4NzdFOTFENTc1QUYzQUREMkZBQjhFREI2RDk5N0U3OUJFQUJDRTVCQ0JGREE2ODdEMzk2QzZDOTgyOURDNTlFNTJBMDhFQzdFM0VEMkExOTQwNjg4REUyM0NGQjJEQzFFMTEzRDI5N0NFRjQ0MkZENjZGOTk3MTVGRjUxNzhFOUZFNUMwRjFCQTA4QjhDN0E0OTUzNzJBMzc5MzQzOTFDCis4NzVBREZCRAorNEQyRDUyNkNFQjgxNEVGNTg5MDEwQTA4MTYKK0VFQkNGMDRGMjBGRjBEREJFNUI5QjRDMzZCMTQwOERFMThEN0M3MTQ3NDk5MDRCOTdGQzc1NDY3MEQ4MzJCQzE3NjRGMjVGRUFGRUQ4M0NEMTcxRDZCNTE5OUE1MTdFMjQxRDIwQzczQUExNEUwRUREQUFBNUZEQUZDRkNDQUFGOTgxMzM0OERFMgorRjQwNzFGMkIKKzVFMjIzRDI4MDhCQzBBMEUxQTgyOUY0MTNECitCRjZCMUFGNTMwMThGMkE4QjUyMzg1M0Q0RTI3OTc1OERBQjVFQzU0QkM0NzdEMEZGN0JGQjM3NDA0NTcwQjNEOENEOTc4NzNEQjM2Rjg3NTQ3M0JEMDNEQzM1QUMyRDQxQUI0ODlCODE1RjlFQ0FEQTA5Mzg0RDNDRDQzNEM2QUZFRjJGRTNBRDJGNDFEM0MxMjQ2QzA4ODNCMTNGMzVCRDU2M0I5ODk3Nzg5QTE0NTk1OEMzNUI5RDY2REJBMDFDNjdFCisxMDRGMTBFMAorMUJCRkI0NzI4RTg2MDc5Rjk2NkE0NTJCREEKKzdDRTI5RDlFNzREMjg0QjRBRkU3RDJBNDNBQzk5NTJFM0QxNTIxMUJENTNEOEVFOEUyRTFFREQ0RTBCM0NDQUY3RTZEQUMzRjYzRTQyMzY0ODFFQUI4QUNEM0I4MUY3NkIzOEFDNTk4NDY5MDYxN0I2MDk1QkJERkJBNEUzQTkyMDgxM0VFM0FDMDdGRjAxNUYwQzM0OUYwQkVCOEY0NzlENDEyMzcxQzI1NEU0RUU3QjgKK0Y1NTZCMkVDCitDMjI4OUE3NDk5MTMxMTQwRUQyMERGODMyMUMzCis2NUE1MTA0RjYzOEIwQTE3QzhGMzNBNDA3MDk5NDNDQzk2MkZENTQ4MkMyRTc0MzUzMTg4RkNFNjQzQzUxRDg3OEJCMkM5NDgwRDJCRUFEMkE5QTc2NkRCRURGMDMxQTJBOTExMkU4NTFDMkQ4RTlCMkEzMzQ2NDY1MkVCMkU3NDQ4RkQxQkY3NjQyNzFFNUJBMzI2RjE0Q0I4Mjk5MEQ2ODVGQzYzRUVCMDY0MEM3NzJDNzJDNTMzNzREMUEyQzA5NUQ5QTdFMDVGN0VFMDE5NTE3NkI5ODNBMjI4MjVCQ0JCREM4MTAxMEIwRTBFQUU1OEZERkNDRjU4REQKK0M2MzAKKzUxRDRBM0JERUVCQjQxNDFGOUYzMjQzQkZFMDUKK0E5MTc3NjQ4CitBRjYxQ0M5NEUxNjcxMzhENTVDNDNFM0Y2QkE2CitFMUM0NEI1MTQ1MTA0MjI1RUQ5MzA2MTdBRjMwQ0U1NjEwMzQ5RTZCODYwQkY1ODlFNkQ1Mjk1MzZDQkMzQzUxOEJEMUQyRjQ1MzAxRTY1OTVBRjQxRUVEMDc0OTI4MEQxNDYyMjFBNDQ3MDJDRkYwNTlBQjNGQ0NBNTgyNDNFRTMyOTk3NTQzMUMyMkEyRkNFQTUzNzU0RUVGRUQxRDMwOUFFNDlDMzAyMUY4QTQxMkRBRUE1MTQ1N0VBMjYwMzk4MzNERDgzNkQ4QTRFQ0RFRENCNURCNDcxQ0M4MDU5OTFBNEQ0M0NBOTNGNTQ1ODM0REE1NkZCREQ1M0UKKzk2RjcKK0I0NjNDNzc4OTJCMkZGODhEMDE2Q0Y2QUE1Q0RGNjg5MDA4OUUzODRBMjhEQjMzMzgyCis2RkVFMTgzNAorQTFCODM2REFEM0E3OTA4MjZBMERFQzUzMjg3MAorRkQ3MkU1MzIxOUQ1MkQyQjE1RjA2NDc4NUM3OUM2QjI1NjE1NEE5MUYyMzYyNzA0Q0U4RkYyNzlGOUNGRDNDMDU3Qjk1QzMzMTdCMzkwMzI1NzBBNEI1MzQxMjIwQTlCOUUzQjhCNUVGMkY1MEQ3RTBGMjY3MDFDRDkzMkNFNUREQkQ0QzZGOTAyN0ZERDk0MjM4RUM1RjVERTJCODM0MUUzNEFDM0Y1RDYwNDU5NUNCN0Y2NDJFMEY4QUFDMDQ1MDE5NkEwQTRBN0YwODU0REUzN0Y0OEUwMUQ2RkY4ODkzRjVFOEIzMjkxNTcwNDdGNTVGQTU0Qzc2QjlECiswMzMzCis0NjdEOUE4QworQ0FGNEU1QjQxRTcxNUJBMERGOThGM0M1QkQKK0E0QkIxNjU4MDc4RDY3RDExMEExNDEyREFFQTA2RDQ2NjVDMUNEQkYxMTQ5MEUxRjI4QUE0ODg2OEMxN0FCM0EzNUFFMEY3QzVEOEVGMjAwQjMxMzM1MDMwMjJCRDgxMkEzRjlFQjExREI2NDI2QkRENzhDRjJGOUVGMjQ2NgorNzY5MTAyQzAKKzY4MEZCMEFGNURBRDdFNTQxMzU1RjBCRDVGCitGQzdCRjQzMEZBMERGRjUwQjYxMTQ4RjBFNDgxQ0MzNzdENjZCNUYyMzZDOQorQ0IyRUQzNTkKKzg1NjM5OTc3MzNDMjM1NzFCODM2RUU4NkUzOUQKKzRDOERGQThGNERFMzgxMzMKK0ZDMzA0NEZBCitBQUZBMzg4RkU5NTQ4RTJENzQyMUY1QjQxMEJCODUyNzc5QTY5NzVFOTc5QUVFMTI0MDYwMjM2OUREOTkzRjkzOUY5RAorRkU4NjJCMkFDQ0Q3Mjg5QzcyRUU5N0NBMkZGNjZGNzNGNUEwMTJERTk1NkU0NEY0NTMyQzg3MkI1MzU0NEMyQUFGQzhCNjJENDlBRgorMzlCMkQ4N0YwMTFCNjQxNzRERDQ3Q0JFRkRFQkZGNjVDNEREREY2RjJFREYyMUQ4OTZEMDM0CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ1IHB1dAorZHVwIDMgL0MwMDQ3IHB1dAorZHVwIDQgL0MwMDU4IHB1dAorZHVwIDUgL0MwMDY4IHB1dAorZHVwIDYgL0MwMDY5IHB1dAorZHVwIDcgL0MwMDc4IHB1dAorZHVwIDggL0MwMDc5IHB1dAorZHVwIDkgL0MwMDgwIHB1dAorZHVwIDEwIC9DMDA4MiBwdXQKK2R1cCAxMSAvQzAwODMgcHV0CitkdXAgMTIgL0MwMDg0IHB1dAorZHVwIDEzIC9DMDA4NSBwdXQKK2R1cCAxNCAvQzAwOTcgcHV0CitkdXAgMTUgL0MwMDk5IHB1dAorZHVwIDE2IC9DMDEwMSBwdXQKK2R1cCAxNyAvQzAxMDIgcHV0CitkdXAgMTggL0MwMTAzIHB1dAorZHVwIDE5IC9DMDEwNSBwdXQKK2R1cCAyMCAvQzAxMDcgcHV0CitkdXAgMjEgL0MwMTA5IHB1dAorZHVwIDIyIC9DMDExMCBwdXQKK2R1cCAyMyAvQzAxMTEgcHV0CitkdXAgMjQgL0MwMTEyIHB1dAorZHVwIDI1IC9DMDExMyBwdXQKK2R1cCAyNiAvQzAxMTQgcHV0CitkdXAgMjcgL0MwMTE1IHB1dAorZHVwIDI4IC9DMDExNiBwdXQKK2R1cCAyOSAvQzAxMTcgcHV0CitkdXAgMzAgL0MwMTIwIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xOCAtMjA5IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzRDMjY0RTVGNDVGMDI4NkJEMUIyM0QyNkMzNDYyNkUwN0EKKzVCMDM5REIzNkMxODAwNUVFMzJDRkE2NAorOTA2QjI4NUNCOEJEN0YwOTY4CitENDdGNTI0MgorMjJEQTI5QkI2M0VBMjlBQzEyOTNEOUYzNjUKK0ZERDA5MjY4NkNGMEQ3MzlEQUU3QjRFQkVDREZFMjFCOEI1ODEwQjE1QjM1RDcKKzhCMUJEQjY2CiswMkI2RUQ4ODZBNzlDQUY1NkRDMDI0QkJDQgorRERBMjUxOTBGQUZDMzQyM0RENjgxQzM0NTZFOTc3MTQ3OEY1M0E5MjdEOTQxRkI2RkYyMworM0EzODlBRkIKKzE5RUI5MDM1Njk5NzZEODI4RDZGQzkyRTRECis4MUNCNzcyMzEyQTA4MkU5NTY1OENFNDAwQTU5ODRCQzk0RjNFQ0JBM0VFNjVGRUJGRkY4MEI3MEU5MkY3QjEyRERBMThGODVBN0FDOTAxMkRGREIxMDgzRTMzODJCNTdBNkRCREMzRUI0NEEKKzQ2MDU5RTRECitDREMyNjExQ0QzQkRFOTExQ0E3MjA1MTFFOQorNzU0RjNEM0VDMjUyQjUxMDBCQkVGRTI3RUQ2NkQ3OEVGQUM5RTJGOEVERDFCMDAwNEFEREI3Qjk2MzY3MjdBM0NBQzBFRUE5MzQxOUZFRDMxQTk4QkZGQTQ4OUFFQUFDMzYzREVERjFCNzZGMTQ0QTY3RUU3NUE1NTEzQ0YyMzg5QzhGRUY2M0ZCQTAxM0ZBNEMwMDMxRjY1MkY2RTc5RkIzQzNBQzgyREFBNUQ3CitDOEMzRTZGQgorNTZBM0ZCMzgyNzUwMjU4NDkwQ0NFQzEwQzJCMQorMjE5NjZCNjgwMjMxM0JGNTc5NThGMzgyM0FBMTNCM0RGOThBQURCQTI1NUJEQUYxOTc5OTg3REZBMEYwQzI2RkE5MDIwQUUzNjQxQzk4QjEyMUVGMjA5RTgyMzk0NkE5Nzk0M0JDNjQzOEVGQTExRDcwOEU1NkEyRDU0QjdBNUMwREI5NDUyODM5QjI3NkNGQjNDRTgzNEUwQUE0RjBCRUU3MjJCQkE5M0NBM0M4RTc4MkM3MjQzRTRGQTU2Q0IyNzI2ODY1RkNEMzQzMERDOTMzQTJBNUQ2RUIyQQorMEREMUJDNkYKKzAyMDRGQjE3REQ4REZDRjBBNDAwNkFCNzRGCis4QkQwRUM2NDNGNEI4RTJGMTJGMTZFQzA4QjhGODhENjFDNjkwMjk0NkYxMUUyOTRBOTA5MjI0OUZGREFGRDVCNjBFODRGREY4OUIwMzhGQTk1N0I0MjU1RjIyMDk1RkVGM0I5Q0JEQUJCNEU0MjVCRTlGMTBCQ0YwNTdENUMwNzkwRjVCNjdBRkEzQTgzNDkyMDEyMERGQ0I3REI2NkY3NkVCQTJBNEU3MTI3NkVFMkQ4RDAzNDcxNzZFMUM5Cis1MEJDQURBRgorMTBBRThGMjY2N0RFOTI4MDEwRTA2RTZBMTYxMworMUNBMjJBQkE0ODhCQzE3NTc3ODVBM0IxRTY2RTMxNkYxMzI3QjZBMjlGRTdGOTFDQzZBMTZBQTZFQTlDRjgwMUMyRUJBQTdENUI2RDk0N0Q3NENEMEE1M0QyRTE3RENFQTIwQzQ1NzY1QzkzNkYwNjQ5QTA2RjM1OEE3Nzc1RjdDRDJDRTE1QjcwOTFDRUFCRjZBMTNCRjNBNjZCMzZFRjVDQzBBRUU2QkQ2NTZCODdCRTI4NTIwM0U4NTc1QUE5QTUxRTJBNzFBODgyODNFNzhCCitFODJGQkE3RAorM0E0QTc4MEJDODBCNUJBREI1MENFOEE2Q0RBRQorOUY3RUI4QUQ1MUYyMTRFNTMxNjQzNEIwNjhDNDkwRTI0MEY4NDlCREQ1NDMxQ0NGQjEyQ0REQzkxNkUxRUIyRTQ1NTk5RDIyNTg0NDNDRjhFREUxMTVDMTQyMzRFNDc3ODYwRDRCQTBGNzNGNDM5QTY2RkZDODM4NUE0QzY4MjFDN0Q2QjJFN0E4Q0YwREY4NDhCRTFCNEM1MTcwRTREMzFEQTQ4MjE1RDdFOUYwMTU0OUM0RjIzREI0MUQ1MzEyQzlFNTFBRDYKKzFBRDM0RUE5CitBQkNGRDFCOTJDNEQ0RjExMDk4QzYxN0RFREZDCiswRTQwNzc1NkM0NEQzRDg2RjQ2QTExODFERDk2RDdGQ0FCNTI4QURFMEFCMzVBRDE0M0Q0NkI5QzBBRkI4ODdDMEY0NjEyQzYwRUNFNEJENTA3RUQ5QzA5RjhCOUM5MEFFNDFGRTNGN0FEQjMyMTc2Q0RCRUE5RDYwQzkzRDk0MUFCOTBENTNGRTg4M0FENERGNDgwNzNFQjMzOTZENjU3ODY4MDg1MEUzNDlFNTMzQzQ3QTg0NkMyQTIzM0NFNkY5NTJCRTkzMTNEMTMzM0RDODM2QUI2NDE1MjExMTE0NUQzNzA2ODVGQjMKK0NGQzc0Q0NDCis5OEUxN0NFODZGNjVGM0Y3NjZFQUE1NDdBNUMyCis5Mjg4QzYyODIwQjNEMkQ0MUUxODcxNDc5MDMzMDRDNUNFOUExODg1QUE4NDk4QUFDQkEzRDk5MTg0NTQ5M0Y3MUI0Mzg2NDZFODFENjYzNDAzNDhBRjUxNzBDQ0IwNjhBRTM0RDk4QTYwN0M1MzYyOEUyQzk2NERDNzJCM0E0MTg3MUQ0NkU2MjgzMUNFQ0NDREExQjg3QTU5NjY1MzQxRjE1MDM4Mzk4QUI4NTA4MDQ1Qzc5Rjc1QzZFRjNFOUQwNUJBQjY0MTU4N0M1OTQ2NEFDNkM1RkE2RkM4MDkzNUFBMTQ2N0E3NThBRkQ2NzY0NEY4MzMxN0Y2QzcKKzMwNTIKK0U0NDJCMTE1CitENTBDMDMxODFEQUVENTlFODRFOTZCREM1RAorODI4NzJFMzA1QTQzOUI1QkY4QTBGODU3NEJFNUQ4NDdBRjJDQkU3NDY4NzhEQUFFMkUyQkI2NTkwQjVCNzhCQ0RGRDA3OUEyOTJBQzNDREFENzA2MDU1QkVBMDkzNjQ3NkZEQkRBMjkzMUE3MzZCQUIwQzA2QzJEOTIwRjBGMzBCQjI4QkFDOTMyOEI1NUVGOTUKKzA0MUVGMDNGCitCRjI0NEM0RjEyMzUzMzYxNkZFMDAwRjFEOURECiswRTBBQ0Q4NDdFQjM0QjMxNTVBMjFCODI5QzE2RDZDQTAwRENBQ0E5RjFGMEMzQzU2QjQ1QzY5RTVDQkU1OTZFQkVBNjU0OUQ2NkZDQUFBNTlGNzUyQTEyNzIwQjRFNjM0QjRFNUUzOUQ2QTNBMzFGMEFDNjI3NDNGREUyNDkzRDc2REUzNkFFMzMzNTEyMjM4M0Q5MjE0RkFGRDRCRUIzRjVCMDdGOUVDQjk5NkE4MDhFMDRERDNFREIwMEJBQ0U0NzJBNTQyMjA1MDdCQgorQThFNTgwNkIKKzgwMzI1OTVBRTE1REUyMjVBQkE3REQ3NkVBQzEKKzQ3N0Q3ODFEN0RCRTJBNTI2QzJGNUM5OUVFMTExMUQ5MUMxNzI4QjM1Nzc3MDZEODgzREU3REE0ODc0Q0REMTY0RjA5NkQ3OUNGRjAzMUU2OTA3QzZDREE3NzI4QkVFOThBODhDREZFNENBN0Y5OUYxQUNCRUUzNjFGNjc3MDUzOTQ5M0UxMDVDREU2MzIxNzNGQTM4RDEzMzcxRDNCMDBGRjdEMzM4RkNBNEE2QjY5MURFMDQxN0Q5RkM2RTVCQjRCRTdBNjZFNzc2NERERjE2QzI0MDE0OURFRjU5Q0MzQTQ4NkMxRUU4MzBGQ0IxNjMwRUE0MzNBM0ZGQQorMEM5MAorODUwOTlDOEQKK0Q3ODI4ODg1CisxODExMUNBNzJFOTRCMURCMDI4MzE3Qjk3NQorRTg3OERENUMzQTc5OTA1MEY0RkJDQjg5RkYyOTUwQkJERDlFNzI4QkI5OTdDOTlBRjFDNjFBODUwNTY2MjE2MDQ3NjlDRDM5NTFFRjExMDYzMEJERDgwMzdGNkNBNjYwQ0Q2M0I4MkYzMzFCNUE5RUNCQTJGMzg5RTEwNEM5NTE2MTdCNzMwQTE4MDczREVGQTNBODFGRTUwMDBFNzU4MDg0QUYKK0ZDNzNBMkEwCitENzk1MzkxNDkwMUY5MzBGMTg5RDY3NzU1MgorQjkxQTlDRjdFQzZCRTQwQkE1Qjg2MjE4QUIyMUJGMjEwN0MxRUNCNjA4QTkzMDhCNDI0MEUxRjdBMjRBQjlCNTM3MTE1NUIwQjY1Qzk5RDNEQ0RGQkRFMDIzN0U1RTkxQjYxRTFCRkY1QTVEMEUzQ0JCNTAyRDE0QjVCQTg5MDQxQkExMzRFNzZFQ0U1RUUzQzRBREZENEM3QzA3NUQ1OTE0NjI5QzA2RDFCMDY2OEIyNTc3RTRCRAorOTNGREMxRjgKKzhDOEZCMzI3OUY2QTE4QUE2RDI3MTMyNkEyCitFN0IzMTNFQjkyMkU4QzY2RTEzQTM3RThDQzRENzJCMEZBNjI1NUQ5MTE1RDQyNjhEMzM4NjVCQkVDRDUzMUNFNjc3MkQzMTkwMDdENTFFMThGREExN0NERTMxQUY2MDIyMzE2OUY3MkQ5MDc2RTJEQkY1RjA4NDcxNDFGODMwM0I4OUJFMEQxNzk5RUY5MzU1RDYwODQ1RTVCRTAwOTFDMUM5RTU5RTAwMDdFQjZFNTBGREZCNzI2OUYKK0YyODQ1ODYwCitCN0ZBMUY2NzNCQjcyQUE1QTY1N0VEMkM1OTlCCis0MjNBQzUxQjhGNUY4NDAzQ0VEQ0MxRjAyRkI3NUI3RkY5QTQxREUyRUE4NEUzMjNFNzg5Qjc0QUVBMkVFRkQ1OTJCMDc1MEI0QzBCOERENzE1QTdEMjAwRjg0MzgyMjI3NDY4RTZBMTFDN0Y4OTQ3ODVGOTJFMkU0MTZEQTU0NkE5NjZBMTU4QkIxOEEwRTc0NEQ5MjNCQjM3ODkwOUYxMjQyQjhDRDNCRTlBRTMwN0E5MzZDNEVEQTUyRUU5NzRENDA0MDEwOEI1QUE4MTIwOEFBMDRGNTgxRkMyQTg3QkZCODZDN0Q5NDQ3NDcyRjI5MzkxNzc5RkQ3NkIKK0VFQzcKKzQ3RDA2QkJFNzIwNkY3NTY5N0IyNTUxRTU4MjQ0MjZFMjRGMTBGNjRDQzVGQUU4ODhGQUM1NkM3MjQ2Qjk0NkE5RjlFRTUxRjkxCis1MzY4M0Q3MgorRDRDQ0U3NjkyQTBGRUE0RTMwRjdFQUYxNEUKK0Q0REU1Qjg4RTJCRDYyQjY3MUE2MkU0Q0IyRDYyMzI2MjNCMzExMDk1Mjg5NURFQjI2QkE1NjdCODcxMDJBRDc3NjFBQUFEQ0Y5RDQ1QjdDMDEwQ0JBQTY1MURFNDg0OUFERDE3RjhCM0I1QjE2RkVENUNCN0QzRkUzMDM4Q0E4OUFERDREQjE4NjE2OUZGQUE2ODlCNTc2RDY2MworRkQ3ODczRkIKKzg0MUUzRjkxQzIyOUVGN0EzMkM4MTRFNjVCMjAKKzY4Q0M0MDM0RTM2MjM3MTUxMjZGMkFFODY0NDI0NDVCRkI4QzBGNkNGMkM5MkVCQUVEOTkzREQ1RDM5MEI3NjhFMjAxRjlGRTY2MzU0OUU0ODE4MjJFQzc0MDhBNzQ5N0I0NzgxODc5QjgxN0ZERDVCQ0I3RDYwNjQxMkQ5OUJEMjFCNjY0M0Q2OURGRTA5M0I1NEE0NjcwNjU1RUU2NTMyMzEyODY4RUE0QjUyQUVBN0ZCRDRBQjhCQzJGNjhCQTNGQjFGRTc3Q0VFMEY0QTA5ODU0RUU4ODE2MTBGM0M5MDk0MEEyRjU3OEZBMjY4NjdDREQ5NjY0QjlENAorREE2MAorRkFERAorQzk0MkVDNTMKKzY1REFCOEVGRTVEM0IxNjAzMzcyQzQ3QTI1N0UKK0JDMUZBNkI0QTNGNjAzM0YyRkZCQkJCOTc0OTcwMDc5RTlGNTBFMEY0OTFCRUQzNDQ4OTQzMzQwMkVDRDMyOTg5QzIwQzVEMjRDMERGRUFDN0NFQjczOUM5ODNGRkU4RUIwM0I3QjQzMENGN0E1NTk5QUQyNjFBNTU4OTU1MkExODhFRDhBOEM3QkQ5OEEyNjg4MkY3MTE5ODBERDdFOTA0NDI4NTM3OENCQTg5QzhCODIzMDUzMjcyOTZCNzUwNzg2MDNCQjlBMDVFN0M5Q0RBNDhCNkIyNTg5NkE0OTE0QTlEQ0M1QTZEOEY5MTJEOEZFODE5REQwN0QzRAorNjBCMAorMzQxMUEyODczNTlCNkI2QkUzMUZGNEU1MzEwNDhBNEFBRjRDNENFREE0QjMxM0JEOEFBMTY4RDEKK0REODFBNjlGCis4RDZCRUVBNzgyNjExRDhEM0RCRTIwMTc2NjY3Cis1MDBFNTg3ODhDMUZBREI3QTlEQUVDOTkwNDVEQjg5QkJDMzYyQTlBRjE5MkIzMjUyRDVCRDYzODhDRUJFM0EwOUY1ODQ5OTZFREU4NUQ1MUJBQjg2QkRBMkNDOTZFMUE4REY0RkI3NEU5MjhBMEE1OUI0MTM1QzFGNEU1OEQxNTRBQTE2MkY5MkMzRTVFNUQ2MTIyREIyQjFFNjBGNUMyRjBDRDE3QzRCRDlDRTM1OEUzQTcyNjdEQ0IzOUYwQTFFN0FBOTlBMzhGMUFERQorOTM5QTg1OTIKKzg5NjJEM0MzM0E3NjcwMEU1RkJFMjVGNDcyCis5RTU3RUUwNjQ5MDg0ODE0NDgwMzdCNUYzQjk5QkFCRTBENDI5OEE1NzY4N0I1QTAwMUQ4REVGM0IxMkRFNjU5NjU0QkEyQzQ5N0E5QzM5QzIxMzQzNzM0RTE1QkVBMTEyRTc3OUU1QTNDMkY1RTY1N0U4NTczRDg3Q0ZCM0M4N0I4NzcyQzI1QzBFMAorNTc1NkMxMTkKK0NEMzFDN0QyM0M0MjA3RUY4MjU4ODE5OUQwRUUKK0I5NzQyRUIwNTgwOTcwRTAzQkI0NEJEQ0RGRjBFODlFMzk0RTI5QjI4NTc2NTA5Q0RFRUEzRURBQ0NCRkY4MzBERUIwMUVEMkY3MDk1NzM0NjNDRUI5QTA1QzM4QTBENTRGQjkxNTI1NzY4QjFGMTY5QzA5MzVDNEE1RDVFNzdFREJCQkI2MUYzMDk3MDExMjc2ODExRDk5Njg2MjJDMDQwNTU1MzZBMDNGNUEwQzVCMzAxRTE0Qjc2QzM5OTVERjAyODIxQTBFQjI2RjIzMTU3MDY2MjY4NTVFMzEyMDlGQTcKKzcxRjFBQjFGCis0MDdCOEQ5QkJDNzEyM0ZDMTU4N0FFNkRBNUQ3Cis1OTkwOTgyMTE5OTlEMDk0NDM0RjgwMEY5MjJFQjBCNEI4MzhBOUFCNUMxREE5RUEwNkE0QzhBQzRDNjE4MkU0RThEODdDNTY0RjhFREM4RDQ5QTk5QzdEM0YwMjBCMjI2NDEyOUMyNUMzREJFRkU4OTQ5OUIyMjJBQjk3NjlDQjg1MjIzQ0Y1QjgzNzY2RUE0NjQ0OTBFNUI4NkM2MTg4NTdCRUQ3NERDNTkzQkMzN0M1OTgzMTRGMDFBNUIxNDU3OEFEMTBFRkNDNzY3QkQ1NjUKK0MxRDFBNEY0Cis0QzRCQTM5NjBCMjAyOTk1M0EwNzQzRjBFOAorN0NGMkJBRThBNUQ2QjU3NjVGQTY3MDY1QzU4NDhBQzk1QzI2QzA5NTkxOUQ3Q0YzOUNERjNCQUYzRjMzQTU1QzdFQjYyODI0RTI3QTA0RDAyNEI2OTVCQjM5NkY2N0U1MkFCREY0MDE3OTIwM0UwNzgwQjlBRjAzNzU4Njc3ODZFNkYzMzI1NTY5RUM2QkVGQzRGQjZENDExQjE4QUJFRkQ5NkI5QjJBQzg5MkY4MzNCOAorMUIxNDBGODYKKzY5NTE2MDc0RDk3RUIxNDVEOUQxN0ZCQzFFNjQKKzcwRkJFMDBGMzQyRUE0MDE3QjQzN0ZDOThBNDZBODJFNEYzRUJFNEJGN0U5NDA2Nzc2NjExQkExQzVGRTdEMkQ4OUMzMDI5MTk2NkFFRTdFOTE0NEZCQzczNEMzODNCRUZDN0ZGOUUzMTE5OEU5NzAzRTVBM0ZENzNCOUNFQUE4NDAyNDRGOTUyRkY0QjQxNDYwREMzOUM3OEJCNERDMUEzQTVFMzZDNTg5QzhGNkU3MjMxQjMzRjA0RTU4MTlCNDM4MTFBRTM1MjhFMUEzMzlCRkI3NjU5MTFEMjdDQTA5NTUyQzU4NEU2NEQwMEI1RDU3CitDQUIxMTE1RQorQkFBNjNDRTVDQzFGNzY0MzE0RjhEQUYxN0QKKzQ1RDk4MjRGNERFMjQwOTUzOUM4QjY0RUJDRjMwNzVBRDc5MUQ2MjUyNjQwNjEzNjcwNzcyMDVFMjI3NkY4NjU3NjczOTRGNDE1NzAyQTFCOThDRTY2OUU3RUZEQTNCREY0RUI1MzQzRUU3MEY4QzNCOEYzNTZENDQ2RkI4N0VCMkRFQUZDQUEKKzBEMDQ0NEU4CitGMUE1OTQxRTFFMzU4QTc4NTFCMzAyREE3NAorN0IwODIwOEQ3N0VBNzNGQzU2NUU5OUExREI5NEQ5RjBFMTFBMjlGNjM2ODBCRDA5NDhGMTI5NzVEMDRCMUNBNkJEN0IzMDNGM0M1QjkzNTRGQzY0QkFDREIxQTVERDdENTJFM0I1RTJEMUQ5QTRERkUwQTU2MzdGMTUyRDcyMkZFNjIzMjAwQzYzOTA1MjM4MTlERTQ5REY1N0ZBMjgzQ0IwN0FFQkExRDFFQkEwQ0I2MkUzNTAKKzczMkY5NEU1CisxQkU4ODg3RjA3Nzk5ODI1RDk4REIyMDg1MDU0CiszODE0MkJCRjg1RjE5NjVBMUNGN0VGNjMyRUMxNzQ5OEM4MUI2OThBRUMyNTBBM0VDOThCQjkxMDY4NzFBQzU4QzZBNjg5RTFGMTM1QzI3OEI2RDk2NDI5RUNEQUNBQzhFNDcwOEIxNjUyRkRBODVGOEZFNTY3ODhDQjA0NUIxNkY0NzlDMTZBOEM0RDkyNkZGQjk0MDU5RDU0QjE0NEI2REE1QjcyQ0Q5RURBQjIxQzk1NUI1OTRCNDUxQTAzNzgwMDE2MDAwQzEwNDg5OTFGQTM5OEQ0RUFEMzg2NzZFRTNDRTE1OTJBNDU1MUI5M0NCRkMwMEVBQ0ZCMTgKKzk0MTQKKzY0QTY4QUIwNThBRTA3NTlBOTIzNzUzMkQ4OTdENUYwMjEyQjE2Nzg3OTlDCis5MjUyQ0U1MQorQkYzNzQ2NUIyNzVDREQzQkVFQTUwNENEODA5NgorMTZCRTQzNDIyNTU1NkZCOAorNUNGNEE5RUIKK0M2NThDOEM5QjU3Q0U1QzkxQzUwQkNDNjU3QUJCMjE5NkEzRjZGNDUyNEUwNjVCMkYyRDJFQzUxMDZDREJDNDdBMzU1CiswN0EwNkQ3MTZGNDk5NzM1QkRENzI1NkQyNzAxRUNFRDRBN0UyMTJFMEUwM0RDQzI1RDJBODNFN0JEMDBFMEE4RjcxQ0RGQzlCNUIxCitGNzYzRTJGQjFCNUQ5MjdEMDM5NkIxODY0Q0U3MEQ0NjVGRkZDREI4QkVBMDU3QUExNjFBNjUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwOTcgcHV0CitkdXAgMiAvQzAwOTkgcHV0CitkdXAgMyAvQzAxMDAgcHV0CitkdXAgNCAvQzAxMDEgcHV0CitkdXAgNSAvQzAxMDUgcHV0CitkdXAgNiAvQzAxMDggcHV0CitkdXAgNyAvQzAxMTIgcHV0CitkdXAgOCAvQzAxMTQgcHV0CitkdXAgOSAvQzAxMTUgcHV0CitkdXAgMTAgL0MwMTE3IHB1dAorZHVwIDExIC9DMDExOCBwdXQKK2R1cCAxMiAvQzAxMjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE0NCAtMjI3IDUxMyA3MjhdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNUQzOEQ0OEVDNzQ2NkZGRUJBNUM3MTQyNTA2RDc4REYyNEYKKzA2MEIzRDZGMjJGNDNDMTYwNUY3RTYxMENFRTAKKzgyMUM2OEZCMTNDMDFEQ0FCNUQwN0VEM0M5Q0E2M0NBNDU4MUFFRTJFRkRBNjZFNEY5Q0JGNzIzQkIyQzI2NzNGMkIxMUI3RDM4RjAyQ0M5RjlBMkM2MDI1RDhFOTU5REZBODlFOUVBMTE2QTZBRTFCNDc1MTBENjA1NzBERUI3MUVFMDFGNTdEQTg3NjVFQTY1MDNGOTdGOTM1RTYwQTcxRTMyQUM5NDQ1NUIwRUMwRTY1Q0EzM0YzOTQ0NzdFRENCMzZBOEU3MTA3MEFCMDNDNkRDMjFCODlENTgwQkJENTExOTNCQkJBRTNEQTZCNzY3QURBNjZFRjg4OQorQTRCMAorRjRENENBOEY3RjgwOEU2NkFFNjZBRUI4NDIKKzA2RTJDMTRFCisyQkNGOEJEQTQ1NUQxMzVGQTgyQzgxODQ1RAorRTY0QzM4N0ZCQjVEQzA4MjRFODAzNTcxRDRCQUQ0OTgzQzU1QzlCOUMxNkVCQjg5QkRBMENCRUI2NDhGMDJCRkIwNzc4Q0ZBQkY1OTI1NTk3NTM3NDAzMDgzMUUwMDU1RTRGODA2ODg3NUU5NTNEOEZBRjhEMzI2NDNGQzhDQUMxNkRBNEY1REI1MTVGNjc1RjE4MDlCMEI3NkM2NEMxOEY4MTQxN0Y4NTgyRTZCNTQzRDBBMUJGRTdBMDJCMTY5CiswMEE4OEM0NworMzRBRkVBNUE5MkZFQ0MxNEFDOTNDM0IzNTg1MworN0Q0RDg2MEZDMDgzNkE0OEQzNzcwRkREQzQ4RDg1RjRERDYyNEE5NTM2MkY2NEE1NjhFQkJBNEExMjdGOUVCMDU0RjE3NTlDNERDNzI1NkZDRjQ3MEZDRkU3NEI3OTRDQ0Y2MjM1OUExMUQ1NjMwRTIyRDc5QUM0Rjk4RjM0REQ4RkI1NDlDNTA0Q0E5RTQwMTg5MUYzRDk1RDdENURDQjQ1ODVFODQ1MDcxNEE2QTBDQTJGRTdCNzcyOEU5RjEyNTIxNUU1MUU1OTFGM0E2OEE4ODg5QUNEMURBNTdGMTNGQTQ2NjU3Nzg3M0EwMDk4MDJCQTdBQjA3NkFECis4NTYwCitGQUUyMzMwOUU2RkY0MDRGQTE1ODVEQkY2QUY4Q0QwRTBDRkUzOUUzNDREOTI1NUUwMTY4NThGQTY1NDQ2N0I3RDQyRDFERTRFQ0JGRjk4QjhDNzE3QkRENUFCQTdDNTkKK0I0NzVDNTc0Cis0RDIwOUU2NTlFOUI1RTM2NkQwNDFBMzE0NENBCitBMUM0RjE5Q0IwMDIzMjkxRkVBMDczNjVGMDdDRjc3MzhEMEFDMTRERDY0MzZGQzZGNjYzMDc1QzFDREZENTE0NkE4MEY0RDk1N0RBREE3RUZGMDMxMzYxNjFGMEE3OUI1OUNCNERGQjAyRkFGQjU4MDc4OERBRUI3RUZCQTBDQzdGMzM5ODFGOUUxM0UwMjA1REVENjMwMDdDNjE3RDg3QUVDNDIyQkZFNzA4NUYxOEY4REQ0MTlFQUY0OUU0RjkxNUY5ODREOTZCCitDREI5MzI1OQorREFENDYyQUUxNTY3MEJBNEY2NEY4OTFENjVBQgorMEU4NzkyN0I5NjFCQUJDMkVDRTM3RDY4MUM2REY1QzNFNEIxRjczODZGRDc3QjEwOTBERDM1ODhBNjQ3MDMwMzUzMUY2NzYwOEQ5MkM4RjdCQjdCRjE2RkU2RTI1QkJBMTRCMDgxRjBDNDkxMjMwMjc3MDAwOEVEM0ZFMjZEODY5RDU3MThFQTM1NjAzMUU2RDM3QzQzMTdGRTcwNDkzMUYyMjQwMUVFMjFFNjZGNEJDRDAzQjI1M0RBRjQ5MkYxRTUzRUI1REM5NkNENTRCQkQ5RTE0MTI4NUE4MzREODY3RTQ1M0RCOUJFMDYzRkEzQjEKKzJENzRENTY0CitFMTM4RDJBNjFFQkRDMzFBMUU4NjFDRURFRkI0Cis5NDFBQ0I2NDBBNzJGQjQzNkM2RDAyMTBCMEI0OTFEMUEwODNCRjA3OURFNDdFRUI4MkUzRkMzN0IxRjg3MTY4RjEzQUI1NkJDNDY4MEZDNTc2MkM1MEI5NzlCM0RBRTZDNUNDOTFBMkU1REI0RjczNjZGMDlGNTEwNzg5RDY0OEZFRUI2ODQ0RTVFQTdBQkE1N0Q3NDcwRTQzRDYzMkI0OURDNDdCMjcwOUIwMEE5QTU5MTFCMkVFNzJEODEwRjQxNURCMjVFRkM1CitCMzVGNTI5OAorRjdDODU3REMwQTlEMDE2OTAzMTEzNjBCNEQzRQorRDc4NUVDNzZDNkY2RDVCM0M3MTZFMTA2MEI4Q0Q1MjgzQUJCMUM0MzdDNUEzQUJDRDQ4QjMxRDkzRjk0MjZCMDFGOTY4MEQ1NzA1NEIxNzlDNTQyMEZBNjVBNTNGQTJDREQ1NzJFMUY5RjhCMzY2REZCOTFEMUE3MjJFRTMxRTQ5QjU0Rjc0MDREQ0Q0RTM4MUQxNjdCM0M4RjM1RUQ5QTM4RjFCMjQ0MTk2OEQ3OTU2MzM5RjM1Q0FCNzlEOTU5MUNBMDM4NTc3RDVBODQzNzA3MkIxNDdFMTRERTQ3ODZENEFFREEwM0FFNTZFQjVFRUI2NUM1QUYxOUFDCis3MUMwCis2QTY5ODBENjc5NkMwMzRGRDUyMjA3ODFENjk0RUVFRkFFRTJCNTJENUMzNjJCQTYxNTQ4RUY4NkQyNEQyRjFGNDNDMTQ4OUJGNzI0OTA1MURGNUEKK0RENDRGMjVCCis0QjBFMzVBNkE3QUMxQkE2OTlCRTY3M0UxRAorN0M3NjU3N0U0N0NGRTUyOTg4MDg3QzhCOTA5NzU3Q0RCQTUzNjM3NzQwQUZFRUVDM0VGRDk1Q0JCNjNERUYzOTIzOUI1M0QyNDVFQzc0NDM1MTlGOTgwN0VFNTRDNzZFM0IwMTBFQjQ5RjVFQkI2NDUyOUVEQUY0MzMxMzBBREE0NUEyMjlFM0IzMjE2MkFGMzE3QjE0RTQwQ0FFQTMxOURDMEI1NjQ2N0RCRTBDNTYzMEZBNkUKKzREOEFGMjNDCiswQ0U0NjQ0RTlCMkFGMDgyM0YyRkQ1ODBERkRGCis0Nzc4MjFBOUYwNzhERkI4RDE3RjYxRjgwRjRCRTc2NThCOUE2QUJEMEUxOTg2MjJGRDg2MkQwMzM0RjIxNkJDNzUyMkFCMjkxMzZFQTYyODcwRThGMDlBRDc4Njg2NURFMkQzMDlDMTEzQzQ1M0U4QjUxRTVGRkM1MEQ1NjBDODA5NTVGNEM0QTM0REY0N0VBMUNGNUY1Rjg4MzM4RUMwQ0U4MDJCOUVDQUY4MUU3MERBNURDNDhBOUM2MkFFNTlDODA3QTQ1NjM3RTEyRTRGMzk4RTAxMUU2NzA5MTlBQzhEM0RGRTM3RjAzQgorMzhFREYyMzgKKzlBMzFENDEzREIyQkY3RjVGODRGNzY2OEI5RDcKKzExMjlGQ0Q1QkQxMDhFQTFFODM1RDdDMTcxNTA2MUFDRUI0NUJEQTYzMkMwQ0FGOUU1RkRGNjVGMTYwMTVGQUU0RDdGNzhBNzZEQ0EyQkYzNTdCQTgwMkY5RThDMDBFMDUxNkMwQjJGQUEzMTMzQkExRTg3NDk3NjVDMUNDREYwNjFBQ0NDNTZCODZERjVFMDkzN0Y2NDI4Q0M5NUVDNTU1QTQzRUI5OTlCMTZDRDEwREM2Mjg0ODU4MzVBMzM0MjUxMDgyQTc4RDk5QzVGREUxRTM5RDUxQTk3OTczODlCNUFGNEIwNkIyODJCQTQyRTk4RjNGRjhDNjQ1RgorRjE0MQorQjQyMjY2N0Q5ODFDNjVBREFDQjBFMDM1NUI1MUY3NTlCMzcyOEExRTYzMDY4QgorMENBNDJCOTAKK0YyMEUxRkI5RUMyNEY0NDhCQzE2MzgxQTk2CitGNzQ2QzI5MDgwQUVBMDI1OTUyMkU2OTE3Q0JFRTAzMDM4ODVCODIxNzBGMTQxQTQzMUJCMTlDMDQzMTY3REZBOEZGNjkyNTI0OEVCMjFBMURFQzgyMTU5QTFDNzIwQjJFRENCNzFBM0VENUY5OEU0QjY0MzFDNzM3NUUzMDUwQzg2QjIyRTczMjNDRUVGMjBFMzlBRTAyMTA4QzEzRDBFOUE0QjY0NUQyRDE2N0IyMkI0OTUKKzJFQzA3MjlECis5RDhCNDA1RjIyMDEzRDNFNTY2Q0QwMzcxMzhCCiszMjk0Q0Q1MTFBQTdEQTBBNjI2MThBREUyOTE5MjgxOTBGQUNGODRFNDI3OUE1MUQxOUUwQzg3MDY3MTlGMzNBN0IxNTRFQzlGMzZBQkRBMzMzNjc0MEJBMjE4N0REMzI5MzU0RDRFQzY1MjYyRjgwNTk5MjVDMDc1QURENTRGOTI2MkQwMzNFMjEyMTgzQkYyQzAyRUMwNTQxQTA2QUU3NjgxNUUyMkY5QjE2MTI5OEM1NTY5QUI3NDAzMTk3NEYyMjMyOTRCNTg5RTU4NTAyRDA4MEVCM0EwNkZBRDFCQUM5RDZCRDdBQzNEOUFDNDk4QUI2M0Y3QzBBQzUKKzRCQjMKKzU4QTQ3RkM2RDRBMzY5NUI1QworRTRFNUM1RjYKK0RCN0E2OERFQzVBNzUwQzcwRjVFRjI1NzkzMzcKK0I5NUJBQzUwMURDOTQxNUEKKzFCMUNGRkJDCis5OEVEOEZBRjdDQTIyQjNGM0U2NzYwQ0M4RkQyRTcxOTE3MDJBMzBBOEQ2NEQzMEZDNTQzRjMxNTYwNEJFNjc2MEJENgorMDFCNEMyMjEzQ0Q3Qzk2MDdDRDA0ODk5MTg0MUQxMURBQkQyMTZBMjUxMkNGNEIwRTQzOTYyQ0RFRTlBMUUzMUZFNUEzODcxMjUyNgorQ0JFRDA4NDMxOTg5NzNCM0IyNUZCNkRGNjVCRDYzNDRBMkU4RDIwRjQ0MEJGMDdCOTkxMTE0CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyYiAxMi4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJpIDEyLjAwIC9QU093c3RkdXRjaGkgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTkyOTM3MzMyOTM1MmEwZTAxMGYwMTEwMjkzMTI3MmMzMDI1MzUyZTAxMmEzMjM1MDExODI5MjUzNjM4MzUyZDMxMmIwMTE5MjkzNzNhMzIzNTJlMDExYj4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyOTM1MmEzMjM1MzAyNTMxMjcyOT4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MGIwZD4gOTM0NiAxMzMwMCAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI4MCAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjgwIDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyODAgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjgwIDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA3MTI+IDE1ODkgMTQzMSAwIDE5MzcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MDMwNDBiMDkwNzA0MDI+IDIwMzMgMTQzMSAwIDI3MDAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNjMzMjkyNzJkMmEzYz4gMzE3NyAxNDMxIDAgMzc5NSAtMSBzCis8MDAzNzJjMjkwMDJmMzIyNzI1MmYwMDI1MzEyODA5MzIzNTAwMzUyOTMwMzIzNzI5MDAxMjE3MWIxNjAwMjgyOTM5MmQyNzI5MDAyYTJkMmYyOTAwMzEyNTMwMjkwNDM2MDUwMDA0MmEzODJmMmYzYzA3PiAzNzk1IDE0MzEgOSA4ODk1IDAgcworPDM0MzgyNTJmMmQyYTJkMjkyODA1MDg+IDMxNzcgMTY3NiAwIDQxMTIgLTEgcworPDAwMWQzYzMxMzcyNTNiMDAyZDM2MDAzNzJjMjkwMDM2MjUzMDI5MDAyNTM2MDAzNzJjMjUzNzAwMzIyYTAwMjUwMD4gNDExMiAxNjc2IDkgNjkxNCAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA5MDUwYzA0MDkwNzA0MDI+IDY5MTQgMTY3NiAwIDc1OTMgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwOD4gNzU5MyAxNjc2IDAgNzY0NiAtMSBzCis8MDczMz4gMTU4OSAyMDIzIDAgMTg4MiAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwNzA3MDEwOTA3MDQwMj4gMjAzMyAyMDIzIDAgMjcyNSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM2MjkzNz4gMzE3NyAyMDIzIDAgMzQzMiAtMSBzCis8MDAzNzJjMjkwMDJmMzIyNzI1MmY+IDM0MzIgMjAyMyAyIDQyNjYgMCBzCis8MDAyNTMxMjgwOTMyMzUwMDM1MjkzMDMyMzcyOTAwMTIxNzFiMTYwMDFiMWI+IDQyNjYgMjAyMyA0IDY1MDYgMCBzCis8MGYwNDM2MDUwODAwMWQzYzMxMzcyNTNiMDAyZDM2MDAzNzJjMjkwMDM2MjUzMDI5MDAyNTM2PiA2NDc5IDIwMjMgNSA4ODk1IDAgcworPDM3MmMyNTM3PiAzMTc3IDIyNjcgMCAzNTM2IC0xIHMKKzwwMDMyMmEwMDI1MDA+IDM1MzYgMjI2NyAzIDM5ODYgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwOTA1MGMwNDA5MDcwNDAyPiAzOTg2IDIyNjcgMCA0NjY1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDg+IDQ2NjUgMjI2NyAwIDQ3MTggLTEgcworPDA3MzU+IDE1ODkgMjYxNCAwIDE4NDcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MDkwNTBjMDQwOTA3MDQwMj4gMjAzMyAyNjE0IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM2MzMyOTI3MmQyYTNjMDAzNzJjMjkwMDM1MjkzNDM4MjkzNjM3MDAyNTMxMjgwOTMyMzUwMDM1MjkzNjMzMzIzMTM2MjkwMDM2MmQzZDI5MzYwNjAwMmQzMTAwMjYzYzM3MjkzNjA2MDAyYTMyMzUwMDM3MmMyOTAwMzcyOTM2MzcwOD4gMzE3NyAyNjE0IDEwIDg3NzQgMCBzCis8MDczNj4gMTU4OSAyOTYwIDAgMTg0NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYjAxMDYwYTA0PiAyMDMzIDI5NjAgMCAyNDk1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzYzMzI5MjcyZDJhM2M+IDMxNzcgMjk2MCAwIDM3OTUgLTEgcworPDAwMzcyYzI5MDAwZDBhMGMwODBjMDAxZD4gMzc5NSAyOTYwIDMgNDg1MiAwIHMKKzwwZjFiMDAyYTMyMzUwMDM3MmMyOTAwMzcyOTM2MzcwODAwMWUyYzJkMzYwMDM2MmMzMjM4MmYyODAwMzEzMjM3MDAyNzMyMzEyYTJmMmQyNzM3MDAzYTJkMzcyYz4gNDg0NiAyOTYwIDggODg5NSAwIHMKKzwyNTMxM2M+IDMxNzcgMzIwNSAwIDM0OTMgLTEgcworPDAwMjUzNjM2MmQyYjMxMjkyODAwMWQ+IDM0OTMgMzIwNSAyIDQ0ODAgMCBzCis8MGYxYj4gNDQ3NCAzMjA1IDAgNDc2NSAtMSBzCis8MDMzNjA4PiA0NzY5IDMyMDUgMCA0OTU2IC0xIHMKKzwwNzNhPiAxNTg5IDM1NTEgMCAxOTA5IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA5MDUwYzA0MDkwNzA0MDI+IDIwMzMgMzU1MSAwIDI3MTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNjMzMjkyNzJkMmEzYz4gMzE3NyAzNTUxIDAgMzc5NSAtMSBzCis8MDAzNzJjMjkwMDJmMzIyNzI1MmYwMDM2MjkzMTI4MDkzNTI5MjczOTAwM2EyZDMxMjgzMjNhMDAzNjJkM2QyOTM2MDAyZDMxMDAyYTM1MjUzMDI5MzYwMDA0M2EyYzI5MzUyOTAwMjUzOTI1MmQyZj4gMzc5NSAzNTUxIDkgODgyNSAwIHMKKzwzZT4gODgyNSAzNTUxIDAgODg5NSAtMSBzCis8MjUyNjJmMjkwNTA4PiAzMTc3IDM3OTYgMCAzNjkyIC0xIHMKKzwwNzIwPiAxNTg5IDQxNDMgMCAxOTc1IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA5MDUwYzA0MDkwNzA0MDI+IDIwMzMgNDE0MyAwIDI3MTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNjMzMjkyNzJkMmEzYz4gMzE3NyA0MTQzIDAgMzc5NSAtMSBzCis8MDAzNzJjMjkwMDM1MjkzMDMyMzcyOTAwMzYyOTMxMjgwOTM1MjkyNzM5MDAzYTJkMzEyODMyM2EwMDM2MmQzZDI5MzYwMDJkMzEwMDJhMzUyNTMwMjkzNjAwMDQzYTJjMjkzNTI5PiAzNzk1IDQxNDMgOCA4MzcyIDAgcworPDAwMjUzOTI1MmQyZj4gODM3MiA0MTQzIDEgODgyNSAwIHMKKzwzZT4gODgyNSA0MTQzIDAgODg5NSAtMSBzCis8MjUyNjJmMjkwNTA4PiAzMTc3IDQzODggMCAzNjkyIC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBkMTYxMzFlPiAxMjcxIDQ4NzMgMCAxNzEwIC0xIHMKKzwwMDA1MTcxNTBlMTMxNjAwMGIxYzFhMTAwZTE1MDAwYjE3MGYxNDEwMWMwMDBhPiAxNzEwIDQ4NzMgNCA0MDY3IDAgcworPDEwMTkxZDEwMWIxYzAzMGE+IDQwNjMgNDg3MyAwIDQ4NTUgLTEgcworPDEwMWIxODE3MTYxYjEwMDAwOT4gNDg1MSA0ODczIDEgNTc1MSAwIHMKKzwxMDFhMTExNzFhMTUwZTE2MGYxMD4gNTc0MyA0ODczIDAgNjc4NSAtMSBzCis8MDcwODBjMDY+IDEyNzEgNTI5NiAwIDE4NjYgLTEgcworPDA0PiAxODcwIDUyOTYgMCAxOTI4IC0xIHMKKzwwMD4gMTkyOCA1Mjk2IDEgMTk2MCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAxZjMxMmQzYjAwMTIzMjMwMjUyZDMxMDAxZDMyMjcyZTI5MzcwMDM3MjkzNjM3MzYwMDI1MzUyOTAwMzEzMjM3MDAyNzMyMzAzMzJkMmYyOTI4MDAyZDMxMzczMjAwMzEyOTM3MzMyOTM1MmEwMDI2M2MwMDI4MjkyYTI1MzgyZjM3MDgwMDE2MmEwMDNjMzIzODAwM2EyZDM2MmMwMDM3MzI+IDE5NjAgNTI5NiAxNSA5MDQ2IDAgcworPDAwMzAyOTI1PiA5MDQ2IDUyOTYgMSA5NDYxIDAgcworPDNlPiA5NDYxIDUyOTYgMCA5NTMxIC0xIHMKKzwzNjM4MzUyOTAwMzcyYzI5MDAzMzI5MzUyYTMyMzUzMDI1MzEyNzI5MDAzMjJhMDAxZjMxMmQzYjAwMTIzMjMwMjUyZDMxMDAxZDMyMjcyZTI5MzczNjA2MDAzYzMyMzgwMDMwMzgzNjM3MDAzNTI5MjczMjMwMzMyZDJmMjkwMDMxMjkzNzMzMjkzNTJhMDAyNTMxMjg+IDEyNzEgNTU0MSAxMSA4MjQxIDAgcworPDAwMzEyOTM3MzYyOTM1MzkyOTM1PiA4MjQxIDU1NDEgMSA5MTEzIDAgcworPDAwM2EyZDM3MmM+IDkxMTMgNTU0MSAxIDk1MzEgMCBzCis8MDcxMjEyMWEyNDFmMTkxNjIxPiAxMjcxIDU3ODYgMCAyNjQ5IC0xIHMKKzwwMDI1MjgyODI5MjgwMDM3MzIwMDM3MmMyOTAwMzAyNTJlMjkyYTJkMmYyOTA4PiAyNjQ5IDU3ODYgNCA0NzMyIDAgcworPDBmPiAxMjcxIDYxMzIgMCAxNDM0IC0xIHMKKzwwMDFmMzEyZDNiPiAxNDM0IDYxMzIgMSAxOTMzIDAgcworPDAwMTIzMjMwMjUyZDMxMDAxZDM3MzUyOTI1MzAwMDFkMzIyNzJlMjkzNzAwMWM+IDE5MzMgNjEzMiA0IDQzMjEgMCBzCis8MjkzNDM4MjkzNjM3MDkxYz4gNDMxMyA2MTMyIDAgNTEyNSAtMSBzCis8MjkzNjMzMzIzMTM2MjkwMDM3MjkzNjM3MDAwNDFkMWUxYzEzMGYxODI0MWMxYzA1MDAyZDM2MDAzOTI5MzUzYzAwMzAzODI3MmMwMDJmMmQyZTI5MDAyNT4gNTExNyA2MTMyIDcgOTUzMSAwIHMKKzwxZTExMWIyNDFjMWM+IDEyNzEgNjM3NyAwIDIxMjAgLTEgcworPDAwMzcyOTM2MzcwOD4gMjEyMCA2Mzc3IDEgMjU1MCAwIHMKKzwxZTJjMjkwMDFkMWUxYzEzMGYxODI0MWMxYzAwMzcyOTM2MzcwMDI3MzIzMDMwMjUzMTI4MDAyZjJkMzEyOTAwM2EzMjM4MmYyODAwMmYzMjMyMmUwMDM2MzIzMDI5MzcyYzJkMzEyYjAwMmYyZDJlMjkwMDM3MmMyZDM2MGU+IDEyNzEgNjcyMyA5IDc2MjUgMCBzCis8MDI+IDEzOTggNzA2OSAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzE3MTgxYzAzMTYxMDFjMTgxMDFhMTEwMzE2MTAxYzE4MTAxYTExMDAwMjFjMDA+IDE1MDQgNzA2OSAzIDM2OTIgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFkMWUxYzEzMGYxODI0MWMxYz4gMzY5MiA3MDY5IDAgNTA1NCAtMSBzCis8MWUyYzI5PiAxMjcxIDc0MTYgMCAxNjMxIC0xIHMKKzwwMDA3MTUwMDJiMmYzMjI2MjUyZjAwMjczMjMwMzAyNTMxMjgwMDJmMmQzMTI5MDAzMjMzMzcyZDMyMzE+IDE2MzEgNzQxNiA1IDQ2MzIgMCBzCis8MDAyZDM2MDAzMTMyMzcwMDM5MjUyZjJkMjgwMDJhMzIzNTAwMjUwMDFmMzEyZDNiMDAxMjMyMzAyNTJkMzEwMDFkMzIyNzJlMjkzNzAwMzcyOTM2MzcwMDI1MzEyODAwMzYyYzMyMzgyZjI4PiA0NjMyIDc0MTYgMTEgOTUzMSAwIHMKKzwzMTMyMzc+IDEyNzEgNzY2MSAwIDE1NzIgLTEgcworPDAwMjYyOTAwMzYzMzI5MjcyZDJhMmQyOTI4MDg+IDE1NzIgNzY2MSAyIDI3NTEgMCBzCis8MTUyOTM1Mjk+IDEyNzEgODAwNyAwIDE3MzYgLTEgcworPDAwMjUzNTI5MDAzNjMyMzAyOTAwMzIyYTAwMzcyYzI5MDAxZjMxMmQzYjAwMTIzMjMwMjUyZDMxMDczNjMzMjkyNzJkMmEyZDI3MDAyNzMyMzAzMDI1MzEyODAwMmYyZDMxMjkwMDMyMzMzNzJkMzIzMTM2MDAyYTMyMzUwMDM3MmMyOT4gMTczNiA4MDA3IDExIDk1MzEgMCBzCis8MWQxZTFjMTMwZjE4MjQxZDFlMWMxMzBmMTg+IDEyNzEgODI1MiAwIDMyMzcgLTEgcworPDAwMzcyOTM2MzcwZT4gMzIzNyA4MjUyIDEgMzY3MiAwIHMKKzwwNzMzPiAxNTg5IDg1OTggMCAxODgyIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDUwODA5MDcwNDAyPiAyMDMzIDg1OTggMCAyNjQyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzYyOTM3PiAzMTc3IDg1OTggMCAzNDMyIC0xIHMKKzwwMDM3MmMyOTAwMjgyZDM1MjkyNzM3MzIzNTNjMDAzYTJjMjkzNTI5MDAzMzJkMzMyOTM2MDAzYTJkMmYyZjAwMjYyOTAwMjczNTI5MjUzNzI5MjgwODAwMjIxMjI5MmEyNTM4MmYzNzBlMDAzNjNjMzYzNzI5MzAwMDI4Mjk+IDM0MzIgODU5OCAxMCA4ODI1IDAgcworPDNlPiA4ODI1IDg1OTggMCA4ODk1IC0xIHMKKzwyYTI1MzgyZjM3PiAzMTc3IDg4NDMgMCAzNTk1IC0xIHMKKzwwMDJhMzIzNTAwMzcyYzI5MDAzNzI5MzAzMzMxMjUzMDA0MDUwMDI3MjUyZjJmMjM+IDM1OTUgODg0MyA0IDU3NjggMCBzCis8MDczNT4gMTU4OSA5MTkwIDAgMTg0NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwOTA1MGMwNDA5MDcwNDAyPiAyMDMzIDkxOTAgMCAyNzEyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8M2EyYzJkMjcyYz4gMzE3NyA5MTkwIDAgMzcwMyAtMSBzCis8MDAzYTJkMmYyZjAwMzYyOTM3MDAzNzJjMjkwMDM1MjkzNDM4MjkzNjM3MDAyNTMxMjgwMDM1MjkzNjMzMzIzMTM2Mjk+IDM3MDMgOTE5MCA2IDY1ODUgMCBzCis8MDAzNjJkM2QyOTM2MDAzNzMyMDAzNzJjMjkwMDM5MjUyZjM4MjkwNDM2MDUwMDM2MzMyOTI3MmQ+IDY1ODUgOTE5MCA1IDg4MjUgMCBzCis8M2U+IDg4MjUgOTE5MCAwIDg4OTUgLTEgcworPDJhMmQyOTI4MDg+IDMxNzcgOTQzNCAwIDM1NzkgLTEgcworPDAwMjIxMjI5MmEyNTM4MmYzNzBlMDAwYjAwMjYzYzM3MjkyMz4gMzU3OSA5NDM0IDMgNTExNiAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBkMTYxMzFlMDAwNTE3MTUwZTEzMTYwMDA1MGUxYzBlMTIxYTBlMTUwMDBiMTcwZjE0MTAxYzAwMGE+IDEyNzEgOTkyMCA0IDQzMjYgMCBzCis8MTAxOTFkMTAxYjFjMDMwYT4gNDMyMiA5OTIwIDAgNTExNCAtMSBzCis8MTAxYjE4MTcxNjFiMTAwMDA5PiA1MTEwIDk5MjAgMSA2MDEwIDAgcworPDEwMWExMTE3MWExNTBlMTYwZjEwPiA2MDAyIDk5MjAgMCA3MDQ0IC0xIHMKKzwwNzA4MGMwNj4gMTI3MSAxMDM0MyAwIDE4NjYgLTEgcworPDA0PiAxODcwIDEwMzQzIDAgMTkyOCAtMSBzCis8MDA+IDE5MjggMTAzNDMgMSAxOTYwIDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDFmMzEyZDNiMDAxMjMyMzAyNTJkMzEwMDFkMzIyNzJlMjkzNzAwMzcyOTM2MzczNjAwMjUzNTI5MDAzMTMyMzcwMDI3MzIzMDMzMmQyZjI5MjgwMDJkMzEzNzMyMDAzMTI5MzczMzI5MzUyYTAwMjYzYzAwMjgyOTJhMjUzODJmMzcwODAwMTYyYTAwM2MzMjM4MDAzYTJkMzYyYzAwMzczMj4gMTk2MCAxMDM0MyAxNSA5MDQ2IDAgcworPDAwMzAyOTI1PiA5MDQ2IDEwMzQzIDEgOTQ2MSAwIHMKKzwzZT4gOTQ2MSAxMDM0MyAwIDk1MzEgLTEgcworPDM2MzgzNTI5MDAzNzJjMjkwMDMzMjkzNTJhMzIzNTMwMjUzMTI3MjkwMDMyMmEwMDFmMzEyZDNiMDAxMjMyMzAyNTJkMzEwMDFkMzIyNzJlMjkzNzM2MDYwMDNjMzIzODAwMzAzODM2MzcwMDM1MjkyNzMyMzAzMzJkMmYyOTAwMzEyOTM3MzMyOTM1MmEwMDI1MzEyOD4gMTI3MSAxMDU4OCAxMSA4MjQxIDAgcworPDAwMzEyOTM3MzYyOTM1MzkyOTM1PiA4MjQxIDEwNTg4IDEgOTExMyAwIHMKKzwwMDNhMmQzNzJjPiA5MTEzIDEwNTg4IDEgOTUzMSAwIHMKKzwwNzEyMTIxYTI0MWYxOTE2MjE+IDEyNzEgMTA4MzIgMCAyNjQ5IC0xIHMKKzwwMDI1MjgyODI5MjgwMDM3MzIwMDM3MmMyOTAwMzAyNTJlMjkyYTJkMmYyOTA4PiAyNjQ5IDEwODMyIDQgNDczMiAwIHMKKzwxZTJjMjk+IDEyNzEgMTExNzkgMCAxNjMxIC0xIHMKKzwwMDFkMmQzMDMzMmYyOTM2MzcwMDFmMzEyZDNiMDAxMjMyMzAyNTJkMzEwMDEyMjUzNzI1MmIzNTI1MzAwMDFkMzIyNzJlMjkzNzAwMWM+IDE2MzEgMTExNzkgNiA1NjY1IDAgcworPDI5MzQzODI5MzYzNzA5MWM+IDU2NTcgMTExNzkgMCA2NDY5IC0xIHMKKzwyOTM2MzMzMjMxMzYyOTAwMDQxMjE0MjQxYzFjMDUwMDM3MjkzNjM3MDAyNzMyMzAzMDI1MzEyOD4gNjQ2MSAxMTE3OSAzIDk1MzEgMCBzCis8MmYyZDMxMjk+IDEyNzEgMTE0MjQgMCAxNjA4IC0xIHMKKzwwMDNhMzIzODJmMjgwMDJmMzIzMjJlMDAzNjMyMzAyOTM3MmMyZDMxMmIwMDJmMmQyZTI5MDAzNzJjMmQzNjBlPiAxNjA4IDExNDI0IDUgNDQ3MyAwIHMKKzwwMj4gMTM5OCAxMTc3MCAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzE3MTgxYzAzMTYxMDFjMTgxMDFhMTEwMzE2MTAxYzE4MTAxYTExMDAwMjFjMDA+IDE1MDQgMTE3NzAgMyAzNjkyIDAgcword3N0OmR1dGNoMTIgU0YKKzwxMjE0MjQxZDFlMWMxMzBmMTg+IDM2OTIgMTE3NzAgMCA1MDcxIC0xIHMKKzwxZTJjMjk+IDEyNzEgMTIxMTYgMCAxNjMxIC0xIHMKKzwwMDA3MTUwMDJiMmYzMjI2MjUyZjAwMjczMjMwMzAyNTMxMjgwMDJmMmQzMTI5MDAzMjMzMzcyZDMyMzE+IDE2MzEgMTIxMTYgNSA0NjMyIDAgcworPDAwMmQzNjAwMzEzMjM3MDAzOTI1MmYyZDI4MDAyYTMyMzUwMDI1MDAxZjMxMmQzYjAwMTIzMjMwMjUyZDMxMDAxZDMyMjcyZTI5MzcwMDM3MjkzNjM3MDAyNTMxMjgwMDM2MmMzMjM4MmYyOD4gNDYzMiAxMjExNiAxMSA5NTMxIDAgcworPDMxMzIzNz4gMTI3MSAxMjM2MSAwIDE1NzIgLTEgcworPDAwMjYyOTAwMzYzMzI5MjcyZDJhMmQyOTI4MDgwMDE1MjkzNTI5MDAyNTM1MjkwMDM2MzIzMDI5MDAzMjJhPiAxNTcyIDEyMzYxIDYgNDU0MyAwIHMKKzwwMDM3MmMyOTAwMzcyOTM2MzcwMDM2MzMyOTI3MmQyYTJkMjcwMDI3MzIzMDMwMjUzMTI4MDAyZjJkMzEyOTAwMzIzMzM3MmQzMjMxMzYwMDI1MzkyNTJkMmYyNTI2MmYyOTAwMmQzMTAwMjU+IDQ1NDMgMTIzNjEgOSA5NTMxIDAgcworPDEyMTQyNDFkMWUxYzEzMGYxOD4gMTI3MSAxMjYwNiAwIDI2NTAgLTEgcworPDAwMzcyOTM2MzcwOD4gMjY1MCAxMjYwNiAxIDMwODAgMCBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMTkpIDE5CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzYgcHV0CitkdXAgMyAvQzAwNDAgcHV0CitkdXAgNCAvQzAwNDEgcHV0CitkdXAgNSAvQzAwNDQgcHV0CitkdXAgNiAvQzAwNDUgcHV0CitkdXAgNyAvQzAwNDYgcHV0CitkdXAgOCAvQzAwNDcgcHV0CitkdXAgOSAvQzAwNDggcHV0CitkdXAgMTAgL0MwMDQ5IHB1dAorZHVwIDExIC9DMDA1MSBwdXQKK2R1cCAxMiAvQzAwNTIgcHV0CitkdXAgMTMgL0MwMDUzIHB1dAorZHVwIDE0IC9DMDA1NyBwdXQKK2R1cCAxNSAvQzAwNTggcHV0CitkdXAgMTYgL0MwMDYyIHB1dAorZHVwIDE3IC9DMDA2NSBwdXQKK2R1cCAxOCAvQzAwNjYgcHV0CitkdXAgMTkgL0MwMDY4IHB1dAorZHVwIDIwIC9DMDA2OSBwdXQKK2R1cCAyMSAvQzAwNzAgcHV0CitkdXAgMjIgL0MwMDcyIHB1dAorZHVwIDIzIC9DMDA3MyBwdXQKK2R1cCAyNCAvQzAwNzYgcHV0CitkdXAgMjUgL0MwMDc3IHB1dAorZHVwIDI2IC9DMDA3OCBwdXQKK2R1cCAyNyAvQzAwNzkgcHV0CitkdXAgMjggL0MwMDgwIHB1dAorZHVwIDI5IC9DMDA4MiBwdXQKK2R1cCAzMCAvQzAwODMgcHV0CitkdXAgMzEgL0MwMDg0IHB1dAorZHVwIDMyIC9DMDA4NSBwdXQKK2R1cCAzMyAvQzAwOTEgcHV0CitkdXAgMzQgL0MwMDkzIHB1dAorZHVwIDM1IC9DMDA5NSBwdXQKK2R1cCAzNiAvQzAwOTcgcHV0CitkdXAgMzcgL0MwMDk4IHB1dAorZHVwIDM4IC9DMDA5OSBwdXQKK2R1cCAzOSAvQzAxMDAgcHV0CitkdXAgNDAgL0MwMTAxIHB1dAorZHVwIDQxIC9DMDEwMiBwdXQKK2R1cCA0MiAvQzAxMDMgcHV0CitkdXAgNDMgL0MwMTA0IHB1dAorZHVwIDQ0IC9DMDEwNSBwdXQKK2R1cCA0NSAvQzAxMDcgcHV0CitkdXAgNDYgL0MwMTA4IHB1dAorZHVwIDQ3IC9DMDEwOSBwdXQKK2R1cCA0OCAvQzAxMTAgcHV0CitkdXAgNDkgL0MwMTExIHB1dAorZHVwIDUwIC9DMDExMiBwdXQKK2R1cCA1MSAvQzAxMTMgcHV0CitkdXAgNTIgL0MwMTE0IHB1dAorZHVwIDUzIC9DMDExNSBwdXQKK2R1cCA1NCAvQzAxMTYgcHV0CitkdXAgNTUgL0MwMTE3IHB1dAorZHVwIDU2IC9DMDExOCBwdXQKK2R1cCA1NyAvQzAxMTkgcHV0CitkdXAgNTggL0MwMTIxIHB1dAorZHVwIDU5IC9DMDEyMiBwdXQKK2R1cCA2MCAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yNTYgOTIwIDc2Nl0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIyNDRBRkZCOUU4NDI5OEFEMThERjkyNkU1Q0Q1MURGMEZEQworMzQzMTM0RDBENEU3QTE2RTMxREREMkI2CitBMDI1MzA1NDhEMTQ3NjI3MEMKK0Y1MzA0MTVGCitDNzMzOTg4RDQ2NUVGNTk1OTZGNjU1N0ZGRTE0Cis1NTkwQzkxMjBCNjFFN0E1Qzk2QTkzQzEzNkEzMTRBRTg0RDM0OTBFNEI4QUI3Mjg0MjY2N0M3NzVEREEyODkyNzE4MzEzMkE4QjU1NjkyQUY4MjQ2QzdFMDlBQTM3RkE0NTExNkU3RThBRkJBNkE2QTQyMDczQjAwNzAzOEY3RjRCNjczODQ1QUJDOUU3QzZCMDU5QUQxNTMwNEMyOEZBNTA0OTJGNzU0MzczREFFMTU0Qzg0RUNGNzgwREEwNTA0NjI1OEUwMEI5MUU3MjQ1QzM2QjA0NDNBMjlBRURCMjM4OEE2OEE1QTNGQkI2QjlDQzZCMzZBRTQ0MTMKKzMwMEUKKzY3OTc0NjUyQkMwNkQ1OEQ3QzU5REI2OQorNDMzRjg5M0QKK0I5RThFOUQzRTNENDYxQTREMjAzMUQwOEE5Cis1OTEwMjkzOEMwOTQ4NDAzMkI0MzVFOEJFMjNBQUU3NDZDODdBQkNGNkU0Qzg1NzdFNzlBMjEwODUwNDk1NTg3MzExQjVBOTRGOTU4MUJCRUMwNzAzNkJDMDkzNzVENkFEQjk5M0E4REVBOUY4NjI1N0I1NzcxQTY0QzY4OTA4NQorNkRFMzE2NkEKKzM4QkU3QTI0QUFEMjZDNkIzMUEzQTJGNUM1CiswMUFGNDIyQTk0QzZBOUREODRFODk4MjczOERENDAyQzYwMDEyMjgwMTQzQzdEQzgyNjc0MzcwNUM3RjAxMzk4NDhGNzE1REI0MEI2QTlBNzIyRUNDRDVEOEU5MUVBQkE0RTBFMkRDMzVEQTFFNjlFRURDNzQyNEJCOUQ5MkUKKzBDMkU0Nzg2CitGMTJDM0ExM0RFQjIxNDAzOTQ4OTUwREVENQorQjlDMjIxQjBGMDM3ODgwMDMyOTgwRjJCQzVGMUNBRDhGOUI0NTRFOUZBMEFEQ0UxMEI4NTY0QjkwNDU0MjNBNzEwMkUyRkFFRUYzMzc0MjRGQkE1RDUyRkEzNzc4RUY4QTYyNTMyQkNCODU3RjhGRjdBCiswOTYyQjcxQgorOUUzNzk1RkRGQjA1OTZCNTE4M0UyRjQ3QjIKKzY1RUM0RjVDOTE5MzQzOUFEQjVBMkY1N0UzMzU4MkM5NkJFQUVFMTY3QjE4QTMKK0Q1MUUxMDBBCitFNjc2QzRCNzAyN0JBOTdBQ0Y3RDNEREVFMworNTA2NUMwODI3M0E2RDVCN0Y0MjM5QTA1MEEzOTdBOTlBNUJEMkMxQzREMjU3QzMyOTgxMDEzMjU3MjA3NkIKK0Y3Q0YyQUE0CitBN0MyRUMxMTY2NjhDMDE0QjI1MzZCNjVBMAorNDQ0MDM2NDYzQTMzMTlFMTBBMjdGMzA4MjkyNjlDNkVDNTRENTg5OUJGRjQxMTBDRTAzQTA4NTYKKzVDMTgyQjYyCis0RjE4QjVFMEFBNDAzMEVCQkNBMkZCN0M2OQorOTJCNzlDRDg5RDMzNzMyMjc5MjhFREE4NzRFOTA1NTlCOERGNUIxOEM3RTg0RjFFRjJCMDQxNzM2NEVBNDRGQTQ4Q0I1OEZFMkQ3NkQwMTg4QjhGMTFBNjVCRDc5Mjk2MEQ0MEE5RDk3OEEzQUUxRTAzNTkyRTg3MTY4QUMxOEVGODhGREE2Qjk3ODg3REU2RjA5OAorQUJCNkM3NDAKKzBBQkYxODU0NEQyMzZCNzlFRDVBNUY5RDlECiswRkRCOTY1ODFDMTk5NDhDMDM2MUMyMDQ2MTMzQ0Y1NkQ5Rjg3OTUzMUFGRkZGQjUyQ0FBODk4REE3NzlEOEZGOTAxQ0Q2QjI0NzhBNTE5M0M5OTkwNzFDODc2ODVFOUJBMkE3RThEOUE4ODk3MTkxQjhBOEU1NUUwRjY3N0IKK0MxMDc0MkE1CitGQzhBOTQ0NkNGMEE3ODYyNEU5QUJFNjE0RDRCCitGQThCN0RBQUE5Qzg2MkUwQUQ1NUY0QUJDRTIxMjg3NENDNThDQ0VBNzcwNDA3MkYzRDhERDhCMjJFRTM2NTBFQTRCMUNCQTUzNzY2Q0U2RDNFNzY2M0I4NDVGQkQ5OEQ0RTRFNUVFNTQyODY2MDFBMDlDNUE2QUJBQkJDRDQ4NEJFMDUzRUM1MDFFMTUwQjEzQjcxNTQxMkY2RjdDOTdGNzg2RDExRUI5REU4NTMwRDlBRTczN0QzNkZCM0ZFOUE5NzY1ODU4QzYxNkI2NzJENzY5QkIwQkRBQURCOTgKKzVDODU4NUUxCiszMjhCMEZFM0UwQjEwNkZCNjAwQkMzMDVCRAorNTgyMEM5OTFFQTk4RTQ3MEMyQTREN0EwRkU0MzA3ODQ4NDA5MjQ2RDQyODlGRTAwQ0VFNjU0MDU4NTVDRTIxRkNGM0I1M0REMjVCOTg0NzYyN0YzQ0IxODU1NTkwQkFGREY4MzQzREI3MUQxMUU3MEIxMjYKKzFENkI5M0M3Cis3QjJDQjVFQjgwMzYxNTQzNzJEQTVCQjJBQQorQjBBNDMzQzQ5RjhBRjhGNkY1Rjk2NDNFQUMwQjREQjc1MTg4N0Q0MDJFMjY2N0RBNEM2NTc2NUUyRTFCQjQ1ODk2RjFCMjY2RjQyMTVBNjE4NDFDMkJDQ0MyOTQ0NDU1NEU1NDVDNkI2NUUwN0I5QzA1MjkwMTA2N0ExNEUzODEyNDg4MTc2OUQxOEZGRUM2MkE2Q0FBMEVBRDc0Rjg3NjE1NEI0OERGMDNGMzY4QTNDNkY5Q0I3N0Q2MEIxMERDNUYKKzQ3QzIyNDY5CitBM0YyNkFFMEJDNDYwNDBDQzMyODExOUI4OEIwCis2RTU4ODY1MUM1Q0Y3Q0IzQzJGMjI3N0REMDQ0QTREMEQwM0FDQkFDNEQzMTE4MzBFMUNGRDY4MEJFRDBGOTMzMEM0OTEwMDE2NzZEMUFBMDA3MERBM0VBRENBMEY5RTIwQkM3RDAwREZGQ0UyMjU3MTcwQ0YxMTkzQzY0MDExQ0UyMjlCODYyNzMxNzcwOTA0RjQ4QTM0Mzk2MEY5RDYyMjk5MkRFOTgxQjFBRjRGRDhDM0RFOEU5QkM1NTEyNjBDOEI5OUI5NTYxCitBQjk3ODU0MgorNjYzMTI2QjZGQTdGQTcyMDU5NTkyNjc1RkYKKzgzQ0FGMjgyMTMzQThDREE0NDk1NDEwNjU1RkRCN0VCNTA1NkYxNTJFQzgwREJCNEEwNEQ0RTI1NDhGQzJBMTBGMjg5QjkxNjlDMDEzRTIyN0JGREU4OEEyRTY2NkVGQURDOTMwM0MwOUNFNAorQzZFREUxN0YKKzdBM0E1Qzg4QTI2QzE3NDAxQkMwRUE1MTIxCisyNURDMDJDMTY3MDVGM0ZENUIwNjVFMDExOEUwRDY1OUY2MkU5QjFERjAxNEQxQkI0REJGRUZBQjE1ODVFNzU3M0JCNDkwRTBGMjQwNjEKKzdFOUQ1RTU5CitBRDM5N0M0NDM3MjM3MTc0RDZBNjdDRDY1QUE1CiszRDYyNTNEQTQwQzYxQUNCNkRFNjI5QjM5NjQwQ0ExOThDN0UxMjQ2QUM2MjNCRTIyRjQ1RTVENDY1ODU0RTgzQzJBNTA3MUFBODcxRjIyQUQ3NENBQTJBMUQyMUI1NUVDNDU5NDg2RTVBQzA5RUMyNzUzM0RFMUU0RjNFOEZBMTE0QkNENDA5Rjg1MDE2OEJGNjU1RUYwRDNFOEQ5Q0MzOUIzNEZFMjA1Q0FBRjJDQ0EwMzhBODQxMjEzOERGMTlGRTAzQjg1OEU5MjVCMUE3QkUzNThBREExOTRBMTk5Qzg3QzE2MgorM0ZBNDU1QzMKKzI2NkE0Qjk4MkFBQjMyRjczRDE5QTg5RUE1RTgKKzkwMTRBMUMwRThBMkUwOThGRTNENDQwRDgzNERBMDQxRTJDNThENUM3NzVDMUI3NzMzMjRGMTlGNzE4Q0E3ODBFMzhGQjdBRTU5QUYwRjFBMjI3QUI0RDRFMTY3MkMzODdFNjU2QjQyQjA4ODAyQUQwQkQ4MTk4NjNCQzdGQUM5MDYxNkE4REM4NDQ4OTUwNEI4OTI2RDBFOUQ2NTc5QjYzN0JFMzM3NDA4QzREMjQ2MUJFMTgwNTdEQTc4QjE3NkNFNTYyNTAzMTg3Q0YwQkJGRjQzRjFCRTM4RTJCNjlBODcxN0Y5NzRGMEQ5OTJENEVDM0Y5RUYwMjM4QworRjc1QworRjcKKzNBNEVBNDY0CitDQkExRDRERDA3OURGNjQyOTlDNjgwN0I2OAorMDU1MjRBNkQ4Q0YzNzkzMEI0RTFDRkU3Mzc1MzhFMzEyQjRBMDhCNTI1Njg0QzM3NENDNUVFNUI0QTU2MzZEOTRENUJBNzE4NTVCRUY3QTJDRDJFMTAyRkU0Nzc1OUIyOTVDMTNGQzQxNUJDMDU5OTNDNjk2Q0U4ODZBRkVBNTc0MDM4NEI0QkYyNUU3NTVEQjkxM0VGOEMyQjU5OEVFQjQwQ0NGRTBGOUFDQTYxRUM2RTMzRkRGRDcxOTYxRTNDOEFBMDIxCis5MDQ0REI1RQorODI4QTBGRTI4RkNCNDg3MTg0NjlFRkU1MjEwOQorNzlBMThGQUEzQzM0NERBODNGMjU4RUNBNUFDMzVEREYyNTYxQkNFNkE0REZFM0Q1MzZBNEUzRjQ0RjcxMTM3Mzg5RTE2MEVBQ0Y0NDRCM0JBMURFRDVCQkVCOUU0NkExNTVBRjM1MzkxOTI3MTIyNzY5NEZGNzlDMzU5Mjk3NzBGRTY4RTFDQjAyRkI4NUE5MUY0NkQ5NEY1NTU1QjkwMTUwMzdBNkI2RjQyRTA5MkJGRkMxM0FEOUYxN0FEQkQwMTE4QUY4QTZBOUQ4REQ5MjZBOEU5MTMzNjU5RTBFNTQyMzlCQjNBQzc3OEMyRDQ2NDM2RjU1QzVFQ0Y5CitEMkVCMEE4RQorNDlFNDNDNTY5RDg0QjMyNzhEQzA0RjFFMEVFNworMjUxQTAzRUVFREYyOTRGNTk0NDJGNTYwNTEzQjFFQkFGNzM0MEE1QzBFRTJDNDU4ODA0RDQwMkM1NDUwMEI2ODlGNDk2REU1QzE0NTY3RkMzNzdDOEE5NjkzNEIzNTZCRkRGNDk5OEE1RjBDREVFNThGNDk5MjUzMjkyQkIwMTVCRjhEQ0I1NkU5NjlBNEU3MjM1REYzNTRBMjJFMUU1QTY3MEIwNTlBMjgzOThFRjlERjEzQTZCQTY5M0E1QkQ0QjJGMzJBMTMwRDRENTNCQzUyCitDQjY1MTFCRgorRDM4OUI2ODhBQzE3MUZFRTA5MEZERjZBNzlDMworMDFFMDA2MDAwM0I3Mzk2QTg0RjBBN0ExMTVBQzNGMTdFRDhBNTNGQTY5RjI2NzBEQ0Q3QURCOTQ5N0U5OTdEMkU5MjhDNjRDMEJCQjc4RkM3MURBQkNBNUVEMjNFNkYyNjRGODI0MTJBQ0UxQjA1MjQ4REY5Nzg1NTNBQTZGOTBCMkU5QUQxMjQ0MkY1QThBOUQwRTBDRjUyNTc3RkQ0RTlDNUVERTgzRUE5NTM0QjU5OTZDRjU1OEMwRTY2Q0E0OEQwQzM0MTQyQ0Y3REIzODE3NTUwOURFQ0U5OENEQURBQ0RBMUU1MTk2RDEyMDY4QkQ1ODM0QjU1MjVDCis5RThECitBNUZCQTgwM0FGNUNFNjVBQjA0RTgzCis2Mjg2RDk2RQorQjI1REM4MEE4OEJCREJCQTZBOTJEMjlEMTkKK0M0Q0FEMzFBMzY3QjQzNzMzOTg1NkVGMzkyNUNFRDA4NDQ0NTFDNDczMTk4NDQ1RTQzOTUxN0Q2ODdCRUYwRjUwQzJENDExQUEzOTkzNzU0Q0VGMkY5Q0RERjUyN0NBMDM4Q0FFNUNCRDBFM0U0OUNBRURGNTUKKzdEQjNDMzlBCis3ODNFMTcxMkIwOTI0RTVEQzI3RTdFMENBQworRkNEMTE0QjBFODIyQkQ3ODNFRjI2MTFFRDZBNDJEM0U3QzM4MzYwQTE4NDZCNjgxOTVCMUZFREQyM0I5NDQ4RTRDNTEyNUZGNTAzNUU2MDMwRUM2NjczQjdFRDY1N0NBOTlGOTQxOUE5OUIxRkU5ODI1QzgxRUVGNjkyNEI3M0E5MTE2ODc2NEI4QzZFMQorODFGODFDMEEKK0U4QTk2NjExNEFGMEE2RTNDMTQ5MzgwMTlGN0QKK0FBMzVFODJGRTBEOUQ2QTUzQTg1MUJCMEZDMUY5NDRENDMyQUIwQ0ZGRkFBNTFBN0I3MjdFQUNDNjlENzc5MDM3M0MyMTBBNTA4NDk5NDMxNThGRjMyRTcwMEM5RUFFRjMwMDY2NkZGQzM2ODE3MThCRjZEN0YzQkE3MTIyNzZBOTc0QTIxNTAxMzJCOEMyNjAzQTQ4MjdGRjlEMjhEQTZBRkRFN0ZERDM1Q0JGREM4NTU2MzlGODkxNzIzNDM0N0JDQ0UyQUY1N0YxRjcxRDAxNzkwRTZDN0RGRTQ5OQorMzBDMEFDMTEKK0NFRTM4MDQ4RUI5RDdFMkM4NTQ1NjJBMEU4Cis2RTE5RkI4RERERTEyNDBERDVFMzM4Q0U4NDU4NzI4RUFENjU4OEI4QkM0Q0M4N0YzQTgyMDBDNTI1ODREMEI2NDU1OEUwRTNBRTZFMEJCNTNFNDE0MjBGNEVCODBFMkU3OUJDMTQzRDNCQ0FBRDIwQzZFNTc5MzBDOEMzQzQ5RjQ1Njc3MTAxODMwMzlFRTJDNjQ1MjE0REQwODRBNjVGNkJFRDA3MjZGRUE4NDdDRjlDNjRDNDA5Cis4MkQ4M0Q0RQorNzZGMjdBQ0M2MTRCNEFBNjVFMjdCODZEQzIKKzhEOUNBNDY3RUQwNTlGMUFFRDI4RjgyMkE3NzU1NTUyQ0YzRTU0MTkyMDg1NTQzN0Q4MDBEQzRBNDMwMDVBNEQxNDA2Mjg2MUJFNEQ2N0JDRjY1OTQ5OEYyNEM4NTQzNjE0QjVCREZCQkQ0MUNBMkU0OTVEMTc0MkQ5QkQwMkY5OTc2OTc2QkQzNjA4RjUwMTdBRUYzRjJFM0VEQ0FCQzlGMDg0ODMKKzQ1Q0E5NTc4CitGMkFBRDFDQjI1QzVCQUExNjVBNzMwQjY5NDU5Cis4NjQ4RDMzMkFEMUY1MEFCMEYxNUFFRTA2OTBDQzUyMUVEMjE1QzEwMTA5QTdGMUZGQjcyMjc4MTQ3OUIwNUZERERBQTc2NDlGRUUzMjJDQjBCRThGNEY3MDIxQTMwMjZCMTgwOEU3MDNBQUYxNzJDRDUyQUZBNkI3MjBDM0FEQTJCOTg3QjRGMUJBNjQxNDExQ0YxMDU4MUQyRTFBRjQxQkNCMERDOTgxRTc0QTk1N0ZBMUYzNjIyQ0QzNDU1RUI3OTY3OUQxRTRCNjZFRkRERkZDMAorREYwRDMzRDkKK0ZFNzE1NUM0QTEyOTA1RDM5MDZCNThBQzcyMzYKK0ExMzBDNUJBMDE3MzNDQkE4REY1QjlBNEJDMEJGRjJCQzg5MEExOUE4ODBERDlCMkZDNDc2NDcwQjczRjlEQTMyQ0QxMDcyN0IyQTc1M0Y0NzIzNzlGQzMzOUIyM0UwNjUyMEYxNEU3MTMyQUFGNDcwNzY4OENCQzZDMUMzRUU4RTI2NTc5MkQwQURDNDVGMURGMDJCMDhFNkY0Njc1NkQ5MTlBMkRBRTE5MDIxRDE4MEY2MkM4MjRGRDIxRTg1NDhDMjc3REVEMkJGRTgyRjkwOTczRjI3RjVCMkFBNzlEMDhFQ0I0NUVDRkYzQUExQzk4NkE3QjUxNTQ1NgorNzIwMEVBNEUKKzQ4RkE1QjM4RDZCREU3QUYxMzA1REZENTgxRTkKK0YzRjY4REM2NEY0RUNCOUFDNDdBQjU4MjcxQTFDRkUzQUNBRjQ3RkQwM0EwMTYzQjkwNTQ1RkQ0OTJBQkNBM0U1NzQ1OUFFM0RCMzU4QkM4QkI2QTAyNzg2QTk4OEQ3MTMxMjkwQkQ1RjU3MjcwNThGMkIxREQ2OUJBQkYzN0IwMDJBRDQ2MTE1NDAxQjQzMkY2N0EzNkRGOTQ1MkFCRjg5RThBMjIyMDkzM0ZBQTREODFEQjRDMjZFMkU4NEUxN0VCRDA3NTk4RjRGMDNFQ0VCOEFGNDkyODUzMzc3NDUyOURDNEExMDNFQTYyN0E2QjIyMDA2Nzc1QUJGMworRTdGMAorMTRDMjU5CitDQjczMDZGRQorODYxREJFNTFDRkM4Mjk5QzY2MjUwRTBCQTYKK0I3QzYyNzczODRDMjBGODc5ODdENTBEMUVCNDhCMkMwM0EyNzIzRjYwNTNCQUNEMDk5MjMxODZFMjJFNzczRjREMTY3NTM3OUVFMjk2MzFBQjI2M0IwOEUxNkVBNjYwQUZFRDM4MzE1RjdDNkYwMUJBNTFDNTA4NTgxNDgwNDkyQzAwM0U5NDQ3QTBEMEREMjA2NDg2MUQ1RUMyQjEwQTAwNQorMDE0RUNCQjMKKzZENjgwNzREMDQ5MkFCQzI1MUZBRTU4NDAxMjIKKzcyRTIzMTk4OTY1REZENkU4RTQ5ODk5RUY5N0Q1QjFBNzM4NTVBRTA3NDEyNzVCN0U5NTMzOTBFOTAxRkJBRUE0NkY5MkNFODY1N0YzNjk0NDhDMEZBMkE4MjIxOTBERkM0NDUyOTIzQzgyQzE0NzE3NUFGQkJFRjM0MzAwQ0E4NjdGNDUyQzMyNUQzN0NFMEMwNzgwN0RBQjEwODVBNTlFNjE5NjhERDFCOEU0RTZGODBEOUVGN0Q5RDdEMzg2REYyNkZDN0IzCitFRDZBQUIzRgorMkZBQjI3MkMzRkQyNEEyRkQ4MjJCQ0FDQUMKKzZCMjg0NkVFRjFCQjgxNDYyNjk0RDRGQTY4MTA2OURFODJGNkU3OTQ5QzJCMzFBOUIzNzhGQkJCNzczNzY3RjUyODNFQUI1OEM4MjM0MDU3OTJBOAorQTc2Mzc2MjcKKzc1OUEyQzdCREUzMTc1QzEyQjk3Qzc4QTI1CitDNTcxN0JGMzg0OTM1MTA0RDhFM0FENEQxOEI3REIyNkE5MDNFQkFEQzBDQUFDNUQ3NENENTk0N0IyQUM3RjJGMzdGNTU2MEY4N0YxRkJFNjVBQjQ3OTMzCisxRUJBNjA0OQorQTNCOUI4MzA0NThFNjgwRjIwMDA0MzQyRDAKK0IwNTI4M0U2Njc5MjAzNkZDQjgyQjg0QzBBOTdGNTk5RDk4MDk2MUNDQzEwCisyMTFENUNGRgorODBFMURCQkVERDVFQ0UwQ0Q2N0E3OEZDMzc3OQorM0UyODlDNUJDMERFRjRGMEM0NDU2M0ZCQzQzODJGMkI0NDU4RDEyOUE4OTZGQTkxQUFBM0M2NzkwNTBGRUQyMjE1RTU1QTM0N0Q3MkU5ODkzODdDMEUyQjFGQzhERTYzRkZEMzBCNTA2MENDNDI5QkFBQkUyNTRFODZFRDQ2M0VEMTU0N0M4REU4NDU0REY5OUYxMUM0RDk5OUExQzI4QUU2NjgxMzUyODAyODc5OUNERTM3MTYzRURDQkFBMzlDMjgyMEMyRTQyNTBFMjEyNEY3NjJENTlGREM0MkUwNjUyNDY3QjI4N0RERDU2NTE5M0IyQzU1RTI2RTZDCis3NTM2Cis1NkJDQ0IKK0VEOUE4Q0ZFCis1MUU2RkExRjVBNUM3QzRCNUUxQ0FBODQxMAorMjhEQ0QyQUMyMzNCMjhCNzU1NzVDMTE1RDIzQ0MzMEJCNzcwMEM2RUU0ODY1RDEzRDlBNzA1MDEyNEM2RTVBQTBEM0QzNTlGOUQ4NkJBREZBMkRGRkJFRTczMzIxNDBDNTFBMzM3MTVGNjM2ODZENDJCQ0E2NUE1MTYwMzc1NkE5RkEzRjNDQ0JCNEE5RkUzMzMwMDk0QzEyODk1MEQ1NDAyOTYzNDgzQ0JEMjI4MkMKKzlDRkI2QkFBCitGRTYxRjNDQjVGQTgxOTgyQTRCNDdFMTE5NAorMTNERDk1NTY1MzYxMzU2MkIyRDgzNjQyRTg4OTlGNjc5QzRBODMxRjkxM0ZDNUEzRTNEMUY4ODdEOEJEREQ5MkREQThENDBCQUQ2QjVDQ0JENjlDMzFCRDkyRDZBNTA3RDYyOEE1RjEwOEJENDQ4NkE2QjM0QjMzRTE1RUI1MDM0QkQxNjZENURCM0U1RUMxQUNCQTM5RDE2MUUwMjk5M0JDMTcKK0IxMzJEOTkzCis3NUI3NDFEQTgwNzNDRkMyMDVEQ0ZFNUNDQUQ5CisxNzM4MTY3MEU4QjZCODQwMTRDRUYzNTAwQUQ4OEVDQTIzQzgyMjVGOEJGRkEyQzhBQzI3QjlERkZEODEzRDRGMEI2NkUwNkYxMzIzQzI1NTg5QkUwNEQ4MDZBQTc1NjcyMkI4MzA3OUUxRjI0NUI4NzFFRTA0QzlCQjYyMDc3MkQxMjlDQjg1M0I4RDFCMjlGNzJCOTZFN0RBMzlCQjVERDlBMDY4MjhFQTY1NjIwMDAwOTNFNjg4NzNBRjRBM0Y1NUE0N0JGODUwOTdGQzhBRkRFQzBCRjBGQTk2CisxOUE4QzczNAorREQzNkEwRTVFNDEzQUZFMkJDQkMxQkY5M0IKKzFGMEE5MEMwODQxREQyMjRCMUZERjVGNTMzOEU2QkY4Q0JCOEUyMUUxMTg1N0M4RTQxQjREOEJFNzQ4MEFDM0IzQjlENUVEQzk5MDI0QUY4N0ZDNzg4OTk0NjFDOEE0MTQyRUZERkZCODUwMzREMDY0NzEyMzFBQUJDNTY5OUREMTE5NTVBODNGNDYxNUIxMUQ0MTI5NENFNDBGNDU3RTBENTRGNUMxMjJGOTM5NzA4Q0QKKzlFMDcxNjRCCis3QTI5N0FBNTdBQzVCNTgxNjA5ODkzOUYwQQorRUY3RTY0RjZCNDY1NjA0NkE5ODdCQjBFMUZEMjk2MzQxNUM5N0JDQkYwMTk4RDY5QkQ4Q0ZDMTE2OEYzRDU4QUQ0NjM5Mzc2RUU4QUE2QjVCNUZCRTY1MkE0MDg0NkZEMjdENzlEQjBGMDkzMDM0NTcwNUEyNjIzQTVCMkZFM0UyMkYxNkM4RTM4OUMwMThGNzY1MzdDNDBFQjEwNUQ3Q0ExNDIwMUUyOUYxQjg0OTFCNkVDNkM1NgorNzRBOENFNDcKKzRGMTY0RjQ5QUJBRjA1OEJGQkRBODU0Mjg0MTkKK0RDNzRFNTM0QkIwMjMyNTUzRUIwNDVCQjI0ODY0RDlGRURGRDBEMzdEQjJEODJCNzBDRDI3ODc4NEMxNzg0NDI5ODEzMEE5RDZENzhCMkQ1Q0Q3QjMxN0U1NzBBRjZDRjJEMjQyQzY1QTI2QjIxRkFBRTM3QTM1RTQ5NEQ1RDBGQjJDMTlDNjQ2OUM1QjVDMkZCQ0ZCNjBCNkY4ODgwQkJEQkM2OTAzNDAwNzJCODE1Q0I1N0Q2MTQwMDY5ODg2REE3RDlGOENENUU2MDRGQzREMkIyOTA3N0Q1MUEwQ0VDQjNEQjQ1QTJDMTY5MzVFRDk5QkFFODUyNTE3OAorQkY4RgorODBGMDRDQ0VFQjg1QzRDODUzMUIzQzVERkQ0MzlENDYxMzc0REU5QkUxOEVFRUM0NTdEMEQwRjBDODYxNUNFNTUyMzk4OTJCOUNDMjFBQzJBNTg3NTZEMzk1NDM5RgorN0I1N0EzNTUKKzkxQTA4MEQ1NkVBOEU0OTkzM0VBOUVERUYzQjEKKzlGQ0U0QzA4NjA3RTY1NzJBNjM4NDUyN0IwQ0Y2RkMwMEYyRUNDNDVFNDY5OTY3Q0FBODUxODM0RTkyNENGREM0NzYzQkE3RUFDMjNFNEY3MTJDN0E4RjU0MjcwQTQwMTM4M0NEMDE2NTQwQjhGNjM0MTlBNkUxMzQ3NzUwODdFNjU4NEUxRjEzOUZGRjI5MjVDOTU4NkREMTFFREExODYwRjg4MUQwODgyREUyMkE0Qjg3Q0VBNkIxRUE4N0MxMDUxMDFGRDRBMkVDQzc0QzE1OUE2NTZFRjE1Cis0Q0Y1RTlGRgorQ0YyREJBMzE3OTlDQzAwNjdERjMzNEM0RTUKK0FENDRCRjdGMUFBMDk5QzQ2NTBGQkFDMUVEMkY2ODQ3NDc4RUJBM0ZDMTVFNkU0QzgyMTUzQTA1OTg3MkIwQkM5MjVFNUM2RERFRTlBMzRCM0REMkEwOTAxNzU3MTQ0MTJCMUFEMzREQ0JFM0Y0NDAxODY3NTc1MTI4MjEzNUQ1NkUxMTE2MEM5MDc3MEFCODE4QzYyMjQ0NzAyRDQ1MjgKKzhDRkMyQUI1CitCQ0Y1NzJCM0M2RTJGNTEyNkMwQjM1QzY5M0I5CitBRDI2MUMzQzY0NzZFMEFGMkVEQzA4QThGQTM3QkNGNDc4NDM0RUU4NkQ0MjA3RDAxMTlDNTdBQzY0QTVDMzc2OTJEM0VBQzY0MUQxODEyNTI5Q0FDRDQ3MjlFREY4MTM5N0U2NzFBM0QyODZGMzA3OURGMUMxMTg3QkQ2RTAxQzg1NzFGNEY0NEI0MTc1M0ZGNTM5QjlCRDg0MjlDQ0M2QzNBNTE1Q0E4NTFCMTdGQzFGNTg5QTMyMTRFMDZDODNFMjYyRjJBODg3OUQ2MTM2NURFRjQ1OUZFRDExODFDNjYyOEIxRTk3RDMzQzUwMTMzM0M1MDIyQzI2OUUKK0VCQ0IKKzAwMTE5OUZGRkE4RUI2NkYwNzk5RTBBODcxNzM4QzA3QTRBQThFRTlBRTYyOTczQkM4RjhBQjVDMjVERTgzNUM4NUQ1REYKKzREN0JDRDRECiszNUZDM0U5N0Q2NTAyODYyRDg3OTBCMzAxRQorOUNFNjJCNzhBRkE2MjU4QUQ3M0VBNzgwOTJFOEExNjY1RENEQzcxNkQ2OUI5RTg0OEY5NjVEMzVEM0IwQzEyREJGQTMzNkJEMEQ4MkQwNDFFQ0UzNjg4M0REQ0U0NzI1NDExMzNCRDI5MTZGCitFNzRCM0E3RQorRjlDQkRDOTJDMzAxMTQxMUZEMTA1Q0Y4MjhBQworQjA3MzBGNDY2NTBDMUFEOUFBRUEwRUU1NkM1NzdFNTRCN0EwRUQwMzdFMzg0RTIyQ0ZGQzU5MjJFM0U4QkE5NDYwODk0RENBRTg2QjVDQjE5N0E1MjFFREZBMDhCNUQ3NUYxMkZGQTI3NjBFMEVBQUQ0RUZBM0RCRThEOTczMzNGQjQ3REFGRjZFQjNBMjFCNDc4NDkyMjc5MjczQUM0MDFBRkRDNjQ4ODA0MzUzMDhCQzQ3Q0YwRTA2QTVBM0Q3RjM0MDY2QkUwQzBDNDNDNzNERUFBQzEwODYxRTZBMTg0ODkwNTgzNDYyOEUzREQyNzlGRUEzRDRDQjI4Cis4MTAwCis4RTEwNjZBQ0I0MEVGRDE1QTc4MEQzRDJDNEZDQzE1MDNEMkExRjBFRjE0NjJGMjUyQzgxODk0ODlGNUQ3OQorOTc2NzBERkQKKzkxODc2RjdGRjFCQkMyM0Q5NERBMDE0OEU4REQKKzZBNDc5NjJBODQzMzdGMTgwMjBDRjUwOUZEMzEzRjc3NUI4MzFEMjQzMzFEODcwRTcyNTdDODlGOEMxMzI3QUIzQzgwODU2QzlDQkIxNTVDMkNFNjQ1ODAxNkI5RUZCN0Q3OUYxRjY1RDAzNzhCQUFFNzZGMjVGQkRCODA3MjRGM0VDQ0FGOEJBRjE4Q0JEMzU3RDNFMUI0ODg5NjM3MEFGOTBFQ0U2RTAxQ0M0MUFDOEMxRTM1NEIyNTNEMzVCQzY1QjE3NUQxNjQwRUI5ODBCRkNGQTMxQQorMkZGQ0NCRTUKK0U3NEQ1Q0FEMThCRTgwMjFBMUVDMjZFRDY1Cis4MUFGQThCNjc1QkUzOUNFRDUwRDYwQjc3OTcwQjc5OTM4NzZBQzQ0QjI5QkQ3MEQ4NEM2NjdCQUEyRjAxNDhCQjc2NDUzNDcyNjM2RERBNzJBQzQ2QzFFREQ4N0NFNDU4RTU1M0VDQjc0MzQyNkE3QTYyMkU3MTU5N0IxM0NFNzU0M0U5NzkzODFFQQorRDkzRUE2N0IKKzc5QjlGODVFMzVDRDg0NjFBMjc5QUI4N0UxQTUKKzExQTYxNjQzMzgyMEE2Nzc2RUE1NjNCMjg3Rjc3NUU3NzcyREFCNTlFRjZCQ0JEQ0E0QjY5MkQ4MTY3MTMwRDFFRjFCNjVFN0RBQ0Y5OEY3RTVCQzAzRTUyQzE5M0M5ODkwQ0Q4Q0I4QURGNEZEQzU0RUYwRDk2N0U0NDRBMDAyOTIyNkYyMTU5MDYzOTExMzk3MUU1MzMyMkU5MkIwMzI5OTVCOUQ3MzI1RUI3MEZBQTI1RTU4RjZFNDI2QjY0NTQ0Mzk2Q0FENTREQkJBMEU1Q0Y3MTEyNkZEOUMwMjY0M0NDMEFERTg4QTE2RjcKK0QwMTI3NEIxCis0NjczQTdGN0Q0MDdGRjc1REIyQjUwNEJENkY0Cis4RDc5Q0JCQTRCNUI2RDY4NjkwRkE5MjE3MUQyMzNGMzJFRjA3Njk0M0Y1MTZFMkRDMDNDQThFQzUyNzUxMTg4RjkxQkUxRDE4NTFFNTJCM0REMUI0RUQ3Rjc2Mzc2QTcwN0U3RTBBQkZBQTg1NkUxNjg1MTIxNkVCNzFCRTlBNTE2NTkyNEI0MjIyREIwNUVBMTVDNjZCOEFGRjcxNkZFRjBGQkY1OUNCNDc4RUZGQzhENjRGRjEzMDZFODNEN0JCRkU3MDk5REZCNzA3OTZCNzMzOQorNTNCMzlBQ0YKKzVFNzgwOEMyQUE3MUI0NURFMUYyODJBQ0Y0Cis3MTVFNUQyNzJBRjFGQTI5NUY0OTY5QTc2MUQ5RDQzMzc1QzcwMjIzRkVFNzdGMzdFMkY0NDAzOUVEM0UwNTZGM0I5MEI1ODgwN0Q5MDBDRTQ4RjMwQzBBOURCOEJFQzY5QzA4NDhGODM1MTA1NUVCOEFBNDI1MEFFOEI5RkI5MEVEQUVCNEEwMEEzODlBODRCNzUxMTg4MTYwN0U0QTYyQkE3QTlBQThENkMyMDUKKzMxQzJEOUFECis1Qzc3ODJEMzE0MEVENTA5OTRFOTQ4NjdGREU2CitGNDBCOEVGOTFBOUY0Njc5NTQ3Q0JEQ0QzODcwM0Q1QkU5MEJCNDI3RjE4NjE2NTExRTRDQ0VBQTlDNUY3MTdDRkY5ODVEN0Y4MDQzM0M2RjgwMkRCMDg3MjA1NDcyNjJGNEU5MDJCNzg2MTc1M0E5MkUzQTRCNkMxRDM5QjE3RDcxMzEwOTY3NDg4NzIyNDkxNUFDMjMzOEE0NzlBODM0MkQ4MjkyQjFDMDVDM0U5ODFBQTdFQTlFQjg1REU0NUY4NjA5RTMzNjA0MTIwRTRBMkJCRDlERTkxRTcwRUJDMzQ1RTk2N0M5OEU2RDgyN0M2RTc2ODdGRgorMDI5RTAxNTkKK0NCNkFGOEIwMjI0NUU0QzFFQTdGQzMxNDAzCis3QzdFMTNGMzdBNzU2OENDRjA2MjU0NjhDRjgwMUU4MzNGNDU2Rjg3OUM0RUZBM0I5REE0NTBEQTQ1QzQyRkU4NjZDMkMwMDRDQjcyMTA3NkJEQjY2OUU5RTNCRUNGMzMxMkFBRERDRTBCRjlGOUJGRkJCMDMxRTQzQzk0ODZDRDM3REVGNDdCMTIKKzMxRDdFOERECis2MUY4NTEzQTI1ODVCN0VBRDdDODREMzMwMAorMjAyRkFCMjg5RjUzOTBFMTI3NzNEQTdEMzU1MEE0MEFGQkYxNjc0MTgyNTA2NUE1M0JGNDI1QTdDMDUyOEI4Qjg0OUFFQkQyQTlFMzUzMzBCOTU2REVGOTlCNTU1QzdBNkI5MDhGQjMyOEI3RkQxOEY4OEE5QkMyN0RENDJFNzZCMzhCRjQzQTIyQkU3NDk4MzY3RDczQUQzRkREQjdCQTdENzQ5QUIyRDg4MzdGMUM4M0ZCNzdFMjdFQ0I2NjYyM0QxQQorQTM0MEMyQzUKK0E1Nzc4QjQ0MkJGOUFBRTc5NEYxMDMzMThCCiszN0JEOTZDOUQyNUE3REVCQTk4NUM4QzYwRkYxOTE1QUE1MTRCNEYzRkFEODNDOEU4MTg1RDk1QjhEMTYxQTJCRTU3QzdGRjc0NDBBOUNCMTI2NzVCQzMyNjVCNjY4NEM4RDQyMTIwNENCNDc2RUI4OEE1MTdFQ0Y4MUIyRjQyRjIxQTM2Njk4RTM0OTQ3MkJEMzFEMzM0OUZGNUQxQUI5RDA0QTkwNDg4REE3NjU2RjMwCis5NTNBODQ1MworOEVEQzYyN0RFRUFFODQ0RThCM0Q1MkE2NTZCMQorQTU3RDhCREI0NDJDOUMwODk0RUI4NTM4Qjc1RDFENUVFMzY1RjdFOTZEMDUyQTFFQjU0OUNBQUNGREU4MUQ1MzhFNDJDQkNGN0NDRjBEM0FDRjRCQjFBOEY0RkU5MDhERTM2MjczNTk0RDQyRDA1MTRERUE2QTAzOENGNjdBQ0ZBREMzMEJFMTU4QzRCNkFFRTc4Q0E4ODY3MkU4Njc5OEFGMjBCNTE0QUVENkIxRDc3NkE0N0M4NEZCQkVEMTFGM0ZGMkJDQjM2MzNBMEE5QTIwQkU3M0NBNDRCQTA4MjI2QzBDODYzNkNFOTNENzY5MTFEMDVCQ0EyQjYyCitBRjkxCisyQkQxQzg3MjhDNEQ1NjEwRjU1QTc3ODNDQjFDCiszNDcwQ0M4MQorNzA1MkU5ODQ3MkFBMkY0NEEwODRBRkU4REQ5RQorMEIxODQ0QjE2ODhGNEUyMTE3MkY4RjhFRTY2OThBMTFEQzdFNzE5QkFFQjVFNjZBRUREMERENDQwMENCMjQ1ODdGNDEyQ0M4NDMwOUFCNEJDNEY5OUVGRTg1MzEwQkQ5MkVFMUFDODI1NUIzNTA5MzZGMjk3NTQ3NDkxNkM3NUVBMkQ0NEYwNUZBMDA1OTVDN0I0NjM0Mzc5NzIzQTk0MjY1OTFCOTdDNTg4M0VGQjRBMjU3MjY3M0I3RTRFOEQwNUNBN0Y4MjBGM0JENjZFQzQxMjQ4RDE1ODEyRjU5MTEzOTNDQ0ZBNDBBNjE2MjMyQTMzQkM3NUNBREEyCitGNjE5Cis1NDc3QzQ2RQorQ0E0MTBFMTlBREM2RDNEMDlCNzVEMkYwNjYKKzQ4NDI4QjZCNzZBOTc0N0ZEN0MzNDJDRjMxN0FENjJERTQ5MUE0NzhFNUI4RTk5MkNERjU4N0EzQkVCMERCMENDMzAzMkFCM0IxNjMzMTlGRkREODkxN0ZEQkM0NTA0MThDQUI5RjhFMTVBMEFEMDhDODY5REFDMjFERUUxMAorODBENDU0OTIKKzQwODFFOURGMTQ4MTI3MzRDOEVCN0ExREM2CitBNzAyOEEwQTYwOUQ5RDUzRDRDMUM5RjU4NzZBRTc5MDZBODQwNTczQ0QyMAorMjBDQjVFMzYKK0Y4QkJCOTUyMzkyOEMwNzBENDhGRTBGNDg5RDcKKzJFRjYwMTgzNTgyNzI1Q0YKK0Y3MjI1MzJCCis2MjA4NzEyOEY1QjBEMTI2OUI0OEVFMzYxOTg1Qjk2MzJDOEM3NUVGNjY2RDQ2MTk0MUUyQkRDQkM2RTI1Qjk3OUJFOAorQjRFMEMyODA1MjI3RDA5NUE5REM4RkJFNUQ4REM2QkZEMjRBM0E2NkFGQUYxMTJCNUFCMjg0N0NFMkZDOTRDNzAxOTlFMTlBMTlBRgorMEIzRkFFNEE2OTFBODE5OTZGMjAwNzlFNjFFMjFEQTJENjQ1N0IyOTNBMjM1MEFGRDgzMDMwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ1IHB1dAorZHVwIDMgL0MwMDQ3IHB1dAorZHVwIDQgL0MwMDU4IHB1dAorZHVwIDUgL0MwMDY1IHB1dAorZHVwIDYgL0MwMDY5IHB1dAorZHVwIDcgL0MwMDcwIHB1dAorZHVwIDggL0MwMDcyIHB1dAorZHVwIDkgL0MwMDczIHB1dAorZHVwIDEwIC9DMDA3NyBwdXQKK2R1cCAxMSAvQzAwNzggcHV0CitkdXAgMTIgL0MwMDc5IHB1dAorZHVwIDEzIC9DMDA4MCBwdXQKK2R1cCAxNCAvQzAwODIgcHV0CitkdXAgMTUgL0MwMDg0IHB1dAorZHVwIDE2IC9DMDA5NyBwdXQKK2R1cCAxNyAvQzAwOTkgcHV0CitkdXAgMTggL0MwMTAxIHB1dAorZHVwIDE5IC9DMDEwMiBwdXQKK2R1cCAyMCAvQzAxMDkgcHV0CitkdXAgMjEgL0MwMTEwIHB1dAorZHVwIDIyIC9DMDExMSBwdXQKK2R1cCAyMyAvQzAxMTIgcHV0CitkdXAgMjQgL0MwMTEzIHB1dAorZHVwIDI1IC9DMDExNCBwdXQKK2R1cCAyNiAvQzAxMTUgcHV0CitkdXAgMjcgL0MwMTE2IHB1dAorZHVwIDI4IC9DMDExNyBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIwNyA5MTkgNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY5NjM3MjE1MkUzMTYyODNGNDA5QTJCRTNGQjY3QjZDQjJECis2QzM1MTM4ODQ4NDAxRkNGOEQ2NDQxMUEKKzQxRkI0NEQwRTg1NUFEMzlDMgorMEJDRTVDMDIKK0IyRThCNzJDQjBGNUYzQTZBRDU0RkM2OTRFCitFMUNDREI5MjdFRDcxMjI2Q0JGMEMxQzA5ODlDRDJFMTY0Qzg3MjY3OTFERTc2CiszQkFGRTU5MQorMjdEQkFFQzMwRjg0NUFDQjUzQjg4NTA5NTgKK0IzQUJERjBBQkYyQzY0ODJGMUU1MTk2NkMwRkNBMTU5NDY1MTRCQ0VGOTczNUI0RTcwMDcKKzZFRjZDQjk0Cis2MDNGOUUzRUFDMzk0NTdDMDA4N0FDRDFEOQorQTUyRDVDN0QxNTZCMzc0RTgzRUMwODdGMzBCREU2QkU4NTBEREJGMkUwRjBFNkI2NDE4MjU1NjUxRTRBNTU3MURFNEVBQ0NDNUUyRUNEN0MyRjI0QzBDMEQwMEMwN0Q5QTk1REEzNEIzMEM5CisxNDUwRTkxRAorMkVFQzU0MzBGRTc3QjZEREZFMzI3MUI4QjE0QQorNjU1MEFBMzg1RjY5MzU2RkM2RjkxNDUxMzQ0NThCMzE4RERFMkE3ODVBRUNCRUYxMDA0RkJBMzVFNEYyNkRCQjhFNjFEOUFCQjExNzk3MTg5NzQ2RjI1NUEyOUVDMkY2NzgwRTI1NjA1ODI4NDQyOUQzMUFERjU2QjAzMEZGRTFCQzI1MUZFMkVGNkU3QjZFRkFCMTEwODU4MzE5MzIxNjlBQkNCMTdEQkI0M0ZEMjUxNEUyNjY4RTg2N0EzNDE4Qzk3MzNGODVCQ0M0QUIzMkY4NEYyNQorQTg5OTU3QUQKKzhGNzRFQzhBRDJBNkM0QUQ2NTkyNTdBQ0MwQ0YKKzRGMjlDMzMxNjhCN0Y5MTJGRTQ3RDc4MUU3NkVCQTVGREQ3RjYxMUZDMjkxOEYzNzhDQzdCRjJFODFEOUQ3ODg5RjI4QTFGOTQ0NjJFRDYwMzk2MDc5RUQ5OEI0REE1N0IxOURFRjlFN0RFQ0VDMkI2OEJCM0JERkJEQjY5MzgwREVBNUY0MkQ5RjgxM0UwMDVFMzg1RkY4RkE3MzNEODdBMUUwQ0U4MEYxQTYxRjQ3NzQ1M0JEMDFCQUQ5RDNDNDY0NjIyRjc3MjI0OTBEQkQ1NEQxMUI2MUEzRTUKKzI3NjZCMjRCCitDREM2M0RGRDk3M0Y3OEMzQjUzMDVFMkQzNUUzCiszQjc5NEZEOEU3NDYxMDBGQ0Q3NTIzNEYwNDMyOEEwQUVCRDMzRTUwQUMwRTZERTZCQkRDQzhCMEJERUY0OTAyNjdDOTg4ODU5NURCMEY0REUzNjQxNDI5QzI1MDE3NUYzNzVBNkRCRkI0NkYzMUMxODEwRkREMEM4QjM4QjFBOTZGNzcyNEJCRjVDNjQzRUMwODBGODBBMTU4NEVBQjc5RjUwNTQ4OTAxODI0MEJDRURCMkE1NEY5MURDRkFCNENFOUNDQ0IzRAorQkY4MjEzQzMKKzVEMjkzMkNDRDgyOEEwOTc1M0QyQjM4NzE3QzAKK0Q5MEFCNDA2MEJDQzNDMUE0OTg1QTMyNjRBRjI4MjQ4MEE0NkMyNDAzNzFCMTgzRUE1NEQyREFBNEFCMzBDOTMxRUJENzE3MEFDOUFBNUIyRDYxMzdCM0E0MTE0NTAxNDI4RUU5RkVGMjJEQzkyNjdBOTU2RDI3OUM3OTc2RERFQ0YzMEE1Q0VDRkVENkUwQTg3NjQ0MjFBQjNFREIyNEQyNjY5MjIzMDlFQjZGRjU2OUZENTdGQ0MzNzQ4NDVBMTFBRjlERUE5MUNCOERGQkYzQjY4MTgwODY2QzVFQTNEQkY1RkQ2MTgwMjQzNTcKKzhBREM5QUZECitDMDgwMDE1QzY3OThDRUMzRDhCQzNCMDlEQQorN0E2NkU3NTRCMkFBNkFFRjI3OUIwQjY5MDEyRDE3OUFFQTEzN0QxQzgzRTE0NDcwQkZGNjRGREU4NzgxRDJFQUNDNDM1NkE4RjJCMUEyNzhEMEY3RDVGNDAzNjc1MDQ1NzdFNDFFREU2NzRENDhDMEFERTBFNDYwRTg1QgorMzBBNDJDRjUKKzJBQURGREQ4NjdFMzVEMzA1QjFBOTEwMUY4OEIKKzUxMUZGODM4NjEwMjFCREY0MDI3M0U2Q0I2RjE0QTFENTRDMEIwNTY5RTQ1QTZDNUUwMThENjM4RTNGMkI5NDM5OUZFQ0E3MzdDMEM3MTY4QkUzNTg0MUYxODVFMERBNEE3RDE1NDEwQzk5Mjg0NjY1MTcwQkVGRkVFMzlDOTM1NEVENDcxNkNGMUVDMzM0QTc0Q0M5REZERDMyRDcxOTJFMkRDMjNCNjYxQkJFNkE2QjlFNDFDRkQxNzgzN0YzODk4MkUwNjhCRjgzREMwNEQ3NTlERjhCMzgyCitFRDIxOTU2RAorM0MyMEQ2Q0Q2NUU0NkUwQTJGQjAxQUIzMzMKK0IzRkU4RUNGMDUxQjA1QjExMTNCM0JGNTBGQzFFREY2NzM1RTIwQzhFMTgwN0QxMTdDQjg0RkM3MDYxNkEyQ0I5NEQyN0FENjM4NDQ4OENBNjBGRDhBNDEyOEExMjdEQkExNzBEN0QxQkVGMEVDOUYwNzM5OUM3RTBGMDRCMzJFMkYwOTdEMTA0RTM0NkYxODBBMEVBNzk1RDRBNzgyNjg1RDVCRDlFMEQxRDA0QkZCNTAyNzU4MkFGRDIxOUQKK0Q5Mzg2QzQxCitFMkQ2QzAwQjRDQkFENEI1NTRBQkU2OEMyQTAxCis4RkFBOEM1NzZDRjREMDExMkU3NjRBNTFEN0Y3NUM4QTU0NEEwNEJEQUZFNTVENTQ1MzRDNjk4NUFDMzk3NkU5QjUwOTMxNEQ2MjBGQ0MwMDc0MTdGREI0OTE3MEE0QjM5MUI0MUYyMUMxQzA5OTQ2NjFCOTRCREU1NDQyRjM4MjRERDFDQjg2M0ZEM0ZDMEU1MDUwRjMwMkJBREIzNzNGODEwNDA1QkM2Qjc0NkI2QTg4QzgyOUI4RjU2MTFFMzYzQUNFQTcyRTk1OTFENTUwNjkKKzcwNEVBQTZGCitFMThEMDA5RTdDNEYzRDE3ODE1QUQyQUFFMzUxCitBQTVDMUE1RTAyQkUzRTJDRUJEQkIxMDZENUNDMjZFOUVGQUNDNEYxNDc2NThGN0QwM0M5QjQ4MjRDOUU5OUUyODFDRTQwNEFBQUZCOTZFM0M5RUI1RkYxMDcwRkE2MEFFMEE0M0U2Mzg0QzYyRjhCRUQ3MjZGMkFEMjIwRkVGQkI0MTREOEJCMDAyMTE2QTIzRTMxRTk5Qjk0MUJEMjA2QUQ1NDExN0EwMkQwMTM3Q0JERTJGMEM2MTY5NDZEMzJERUQ3MTM0MgorMzhFQ0RFREIKKzE0RkJCQzYwODQxMUE0RjAyOTYzMEU2MUNGNUYKKzdDOEIxNTQ2MUVGRDZDMDZDMTYyRkVGNTMzRjY4MDY0RDAyRjNENDBGMEQ3NkYwQThERDNCM0UxNTc3RTE0QTJDNUIxMEQ2OTZDNTY5MzU4OEQzNTI3RDVCQ0NDMjQyNzg2ODA4ODUyODlEODhFM0ZFMTg4NTJDRTAyREU5MjM0QkI5MkE1OTQ3OEI1QzExRDdCRDBGQjMwMTdBM0ZBNzI1MzkzQThCODA0MzEwRTQ4OTIxQzA3NDU0QzVBRjc5OTdFMEJDNEExRURFRkIwMjZEQzJCMkNERkVBRDhBRTQ4NTIyNUI3REQ3MgorMTNGREU4RDQKK0VDQUYyN0ZDMDg0NDU4NjAyOTREMjlFQ0Y3Cis4NTQwNDI3MEE5RDZCQUFFNDMwMTc5MkE2QTQwQzNCNTUwNDU0NjBFREMzNUE2MURGN0QwOTg3ODI5NkE1RDI4QTI2MTI2RjAyRjUyMDAxQTc4OTU5QzE1REY0NDMxOUM4MEI2REI2NTk3QkJGOTNGQzFBNzMwMEU2N0MxOUQ4MDQwQ0E5NzZCNzg1NkU3MzJCMQorMTdENkIyQjUKKzM1QThBQjU2MTU3QzMxRDVGREJCODQ3MUQyRTkKKzkzRjUyOTU3QjEzREY4RjlCMkE5OTgxNzFDQjIzOERGRTI1RjQyNDM4QzlFOTg1RjNGRUQyOEVDREU2Qjk2RDVFRjBFQTIxODk0MTkzQTI5ODI2MURDNDQwNzIxQkFCREY3QzMwQjQ2MjA1QjVFRjhCNzc5MUQ1OTlEOTc4REMzQjI0MEI5Q0FERURFNTc5MzBCRUVCREI3QjBENDQ2QTg2MjU1QUQzMTY4MTgyOTlGMUNBRTJDQ0U5OEMzNTk3NTg0RTA3QzBFREM2MzdGQUNFRjVBQzcxQzUwNUQzNDkwQUY5ODY1NTM3NDBERUI4NDdENDcyQkZBNjE0NQorMjY1OQorN0MxODM5NUMKKzA5NjJFMjFECis4RTc3MjIzRkVDRDRCM0VDMUI5OTJCMzA2MQorRDcxRTJDQTk5RkM3NDc3RDg1NzAzOEEwMDlGNTA3RThERDhDNTNEQkZDMjFBRkU0RkE4N0IzMzE3QThEMzQxQjRBQzhGRTIzOEFCQTQ4NjMyNjVFMUZENTFFRDZBOUYxMkQ0QzI5MjE5OTY3NkE2REUxRUIxNjhDOTBCREUwOTE0NzA3OTk5NEFEOTFCOEEyQjVDMTEzQzZGQkI1RkMyNTNBNEMKK0ExRTAwNzg2CitCNkFGODUyQjRCN0Q2MjQ2RUZGQjQzQUQ3QworRUJBQTFFOEE2QTQwMEY2MEY0OUFEMDYwRDUwNjg2NjYwOTI0MUU2QzRBOERDMEY1REY1RDlEMkZCNjVDN0VGQUJCNjFFQTg1RDk1ODg5Q0Q4MDU4MUQ3MjhGRTNDQTUyQzgzRDY0QjFDOTQ2OERFODJFODFCNzhFRDNCRDRFNUE0NkMyM0U4Qzk2RjE3MURCOTQ5NjMzQUI3NjRFMjVCOEEzMjA4QjNGQkYxQzZFRERFN0Q1N0NEOQorMEY5NDM5RkMKKzlFMkU5QzRBODFEM0Y5QjMxOTcwRDBGMTQxCis2NUZERUYxQ0JDN0U3NTQ4NDc0Q0YyQzRFRTNFNjRCMjY1NkVGMEUwNjNGQjE1REQ3NEZCQzUwN0NFRkM3MDU1RUMzNzE5MTgwMDdFNzUyODJCMkI0Mzc3NUI5NTVFOUY4NEZBRDJCRjU5NjcwNDAzOTEwQ0ZGMjNDM0I2OTQyRDZFODc4NjlENzAxQTBENzFBRDE5ODk4NEI0N0MwQ0I3RDlDOTE5MEVGRkEzOEVFODM5Q0RGNDg0QkUKK0JGQkEwMjI4Cis2N0NEMTI5NDA5RTdCOTVBMDM1NTI5OTFBQTg5CiswQThCNkNCNzhEQ0U1OTI3NEE2MTQ1QkY2REYxNTI4NTZCQzZCOTI2N0E5NzAzOTdFMTc4Qjc5RkIzMzdCRDgwMENDRDE0NkFDNzZFNkI1RkZCNUVDOEIwMzczRkJCN0QzNjBFQjBEOTZFMjI0M0UzQzM2OTNGMDUwREE3QzJDMzdGNzZCNzY2OTg5M0FCNEZGNDk5MTA1N0NCQTc3NTNDQzhEOEE4QTYxRUFFODAyQ0I5Mjk1OTM0RDQ2RkE4QUEwNEY1QUI0Q0FCNEFBRkUyNzJDMjQyNEVFRTAxNkJFMURFQ0IyMTJCOUU0NkZDOUMzQzcxODcyRUZEODAKK0MyNTcKKzdBOEMwNUMwNTQ0Qzg3QTc4RjAxREE3N0M4NTI3NTcxRjEzMzVERjE5RkY2NzA3NEM1RkUyQTA0Cis3RTRCRUEyMAorODY1RDk0REY5RTE1REE2MjNEOEUzNkQ0Rjc2RQorOTM5RUExQURBOTNGM0Q1MDk0OTI3ODNDRTc3QkM3RDBDOUVEMzAwMkQwQThGNDZEMjY2RjNBQTQxMjQ1RjZBREIwMjhDOTdEQzI3RkVERDk4NjQwRDBCQzdCM0YyOUFBNUYwQjI3MjkyQUFFNDRGQjZFRTc5OTY2NUEyRkU5NDhCODhEMzJDQTI3RjQ4NzYwNEQ3NkIxQkY3NDQ0N0E1NkI5MTJFNkZFQzgyMzM2Mjg0NTYzODBBNzc5QjcwQTE2RjUwNzYzQUE5ODZDMjUKKzk3QUQ4RkU1CitBQkU3Q0E3NzE4RkE3Mzg3MzdDRTNCNTBGMAorMTc5QjAxMzFGQzlGMUNBRjAwRTRFOEIyODA4MEQyQ0IwNTQyMjVBRTYyOTIzQTQ1QkYwQkY5M0NGMUJGMkRGMzhERkUyMjYyQ0JDNUQzOTY3N0FDQUI0RTc3OTg4QjYzQkUwNUMyMkIzQ0U2RTI0NzRDOUIyOEQwODlBNTA3RUQ3QTgxRUQ4OTdGOTcKKzU1NTY5NzIyCiszRUJBQTIxRTEzNjIxQ0RGRUZDNzBGOERFQ0Q4CitCNjMyN0FFNjFBRkYxM0Q2OERFNTEwMENBNTNFQzlFQkU0MjQyNTI4RDBCQzhERDhCRjc3REY5Qzg3N0Q2MUU0Qzk0NUUxNzY4NUNFQUJGMTEzRTJCM0YyMjU1RUEyMjQ0NjVGNUVGRjIyMDYxREMzQzY2RUZFMkEzNEJGM0Q1MEYzQ0IzOEYyRkEwMTJEOUUwMjE0ODUwREE4RDU0QURFRTZDNDk5OUU2QzNCMDI2NThBMzBBRkVEQzFDQjcxN0IwNjEyRDg3QTQ1OEY4QkQ1NTQyN0U2MkUxQTMzQjM4RjAyCiswMkQwNzU0OAorQUVFMjNDODZCNjlGODFEQjczNkEwMTExMjNDNAorQ0RGRENENUE2Q0U5NjJCNTIwQkQzODYwN0E1RTA1NDI0RkY5NDAwOTQzNUM1NjBEMkExNTRFOEVCRjAzMzlBMkZGNUZEMTA4M0YwMkJFQUYzNDMyN0UwQTVCRDREMEYyRTlBRDNDRTRERUIzRUYzRjUxQTc4RkE1NjNERDUyRUNDRjU2MDAzMjJEMUY4ODVBMUI1NkUzRTAwRjRDRDkxNjdEQUQ0Nzc0NDg1REFDRjg4NDY2MDg4RkVGMTExM0YyQzhCNUQ4RjBGMTVEODBCRTI0CiswQkYyMzUzQgorNDU2OTJDNkVDN0RCRjZBQzFDQjlENDkzMUQKKzgxREM5NzJDMDg0Q0ZGOTY2MjJBRkVBQTlENTRDQTc5QzFERENDMjM4M0YyRkJBRjI3OUM0QzUzODcxNTNGNEExQTFFNTRCQkYwOTJDNUY3NzQxRDc0Nzk3MkQyM0M5N0MyMjlDQzYwNDcwNTZBQjgxMkY3MjE1RjE5MEVCMjdEMTg1QTc5RDQ3MjdGNzIxRkI1MjU5RjNCNzFEOTQyNjFFQTg4RjZBQTU0RTdBMzZBNTIKKzE5QkJENEUzCitFRTBFNDc2MjA3QTY1MkZBNUUyQUIzQjU0OUJCCisxMjgwNTNCQzlDMzE4RjhCQTMwNDZGNzI4MjAzQTRDMkFBMjgyMTEwNkVCRjMwMDJFODI2MjUxQjZDNTcyNjJBNkIzMUE0NjkwRDRFMDBGQ0VENDc5RjMxOUJFMkVEMEEzQjU0NjlDNjE4MzNFNkU3RDk1RDA3N0E3MzY4MjkxQzlBNEZGNDU4QUJCOEY2MDZDOEJDMEM2MzYzNzFDRTk4QkI4RkQ1QTk4OTY5Njg3MkVDQjhERTFCN0VFN0E2ODM5QTc3MzI0OEUyQjlGODcyRkEwNzgwQThGNEIyMkFDNTZBM0RGQ0NGMjMwRDcxRkUyMgorQzhCMTEzODEKKzYxQjJFNjlEMjhGRTZBMjlBQTI4RUJBNkFBCis4NThBNjJCQTk2MkYxMUFBODJDOUIxMzI3REU4RTE1QjI5OUQ4MjFDQzgzQUFDN0MzRjVFRjlDMDUzNDNEOTBBMjE0MENCNUE1MTQwMjA2MzQ1NEU3MzZDOTA1OTEzMTgxOEMzNzJCNjUyNEY4MDg0Qzg1NEU5RjcxM0NCNEFCNjBFMzg5NjVBCis2NjM3RTExOQorQjcwMEVFQUM0MzI2OTcwMEM3QUJFRTFFMTQKK0M2NDM1MjkwMDFGNDI2RDcxNDZBNjk4NjM0QkU3MjJBM0IwRTQ1NzYxRjMxQzk5NTkzMDUwRTY0NTg4QTMxMjUwN0YzMzM2RTJCNjU4MDM1RDNFMUVENjg4ODIwN0NCRjZGOEMyOURCOUM5MzM0QjJFRjdGNUFCNDU1NzhERjk5RDBFNkM4NDQ0M0NCRDc5MjY4Mjc2MzgyQTgxRDM0NUQ2QzgwREJFMENBODVEN0I4MjJDQzExCis5MzE2M0REQworMEMxODg0MjI4RTBCNDIxNERGQ0MxQUE0MTU3RgorN0NDMTExOTE1OTc4M0QxMQorRTM0RkMxMDMKK0UzMDBBOTI2OTcyQUFFRTRDOUNEMjQ0QzAyMzAxRUI2M0EzRTk4REYyREY2MEZCMEIyODhEMTY1Q0QwQTM3OThDNDEyCiswQTY0QzgyOTE1QkYyM0U0NUVCQUFBN0REREQ5N0I2N0Q2QTY0NTQ4RTcxQTY3NkMxM0M4NTcyRTI4MkU5NTc5M0MxNjcwM0U2QTIyCis0MTM5QUZCMEI3NTVFMEEzMTEwNDExNTE5ODM5QUJFNzlBMzVFMDU5MDM2RTNCODhGNkZDMDIKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwOTcgcHV0CitkdXAgMiAvQzAwOTkgcHV0CitkdXAgMyAvQzAxMDAgcHV0CitkdXAgNCAvQzAxMDEgcHV0CitkdXAgNSAvQzAxMDQgcHV0CitkdXAgNiAvQzAxMDUgcHV0CitkdXAgNyAvQzAxMDggcHV0CitkdXAgOCAvQzAxMDkgcHV0CitkdXAgOSAvQzAxMTEgcHV0CitkdXAgMTAgL0MwMTEyIHB1dAorZHVwIDExIC9DMDExNCBwdXQKK2R1cCAxMiAvQzAxMTUgcHV0CitkdXAgMTMgL0MwMTE2IHB1dAorZHVwIDE0IC9DMDExOCBwdXQKK2R1cCAxNSAvQzAxMjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE0NCAtMjI3IDc1NyA3MjhdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNUQ2MzgxNUJFRjE1QUM5OTE5RjI5Rjg4QTcyMkU1MDk3MDAKKzFFQUE5N0ZEQjk4MDBDRTFDQzZEQUNBNTc3MUIKK0RENUFCM0ExMUVEQTY2NTg2M0JGMTZCMEZFMTlDRUM4NDA1N0FBNDZFOTU5MTNGRjRFN0M1NUIxMkY3MTAyNTdGMkI3NjQ4NUM0MTk1OEE3MjM1MDhFM0QwOThEODBCNzk1REQwOEIwMUQwQ0FCQjIzRjFDQjg1NjNGNjg1RjkxRjY4MkVEODQ2NTk1ODE1OTJCRTgyQkFEMjQ0RDRBN0MyQjMyMDc0NTFCRkIzQTNGMDY3NjJBRTNDNEJFNDlCNjAwNkM0RkZGQ0M3MzVCQjYwRjUwMkRDMzlDMDcwNDA4QTNENEE1NzZDOTg3QjdEREM3MDMzNTFFRDM1QQorREIzOAorN0M3RDk0ODUxMkU3MzM4NDk4NEQwOTlDMDgKK0JERTM1RUFBCis1NjVBM0E5QzYzNDUxMEY2N0M3MTAxRERDRQorNUVFNjlDMUYwNkNGMTUyMzk2MjQ1MDVGNkFFNzM0NDBFRDlCQTJFMUQ2NEIwNjY2OERBREMzN0ZFMDc1QTY0QkFEN0U0NUFCQzlDNDNDQ0U1QTg1QkJGRDFDRUYxNDY3MkQ1RUMxRDk1OThEN0NBNzlGQ0ZGQzRGMTRGNzI2OEY0QzA4RTA5RjE0M0EyRDlCNkZERjk5RDA3N0M3NTc2QUVENDJEMEU5OTNERkY3OUIwNzYyQzAzRkRBQUI5QzhGCis2Q0FFRDI1NworRDZDODJDQjBFODU1NUY4Qjc3OTY5REZDRDcwMAorMjYzQ0MwNUYzQ0EzQkQzQjRBQTE4ODk0MkMzRTgwMzFBOUQzQjFCNDIwMDFEREI0OTkyOEUxMTRCRDVEM0VDMDAxODg2RDk3RDlBMUM4NDFFMDYxODUzMTAzREFCRjYzRTEwNjExRjM2Q0E2QUM0OTRDOUY0Q0I1MjY2MTlBQjVDMzYxNDJFQTFGMDZFNkM1QTVFMTQ0Rjc3MzgwMkU2NDFEQTY4OTRCNjBFMkZCNDczODlEMjQ2QUM1NDhEQzk3MzVFMkQ5OEE3QUVENUUxMDY5M0RCOUU1M0FFQkU0RTZGMTA1M0FERTE1OUUwQUZERjU0QUVDODAxNUMxCis3RjBDCis4RTEwRDQ1QjFBODQ0RTYzRTVENUUzOUM0QzM2NTgyQTgwNDU3NUVBMjYwRDc4RjdDQkM1MTVFRTJFQjUxRDdBRjg5QTEzNzRBQjRDOTg1MEZDOENDQkZBQzlGMzFEMDIKKzZFNTIyRTRDCis2NzAyMjg5QzM0QUZCMDJGQjRDOTA3MzYwRDk0Cis0ODc1RThCQ0FFNkRCQUEyNzY5MDlCN0ZEMERERTYyOEVEQTA3NjY0RTEwRUEyMkI5ODFFRDU4NkY4MUZDRkNDODQwMUI2OTMyMUU3Q0RGQTdGMDg2QjlGMUM5MkQxRjFCMkQ1RjE5MzhGNUU2MkQ5REQxMEUxQUREODQzNzdBOUM3OUQ5RDA5MDhFNzdGMjMwQTJENTY0QjdEMzhBQzA5MzQyNjlGMTYzRTA1Mzc2QTcyMkI3OTYxMkI4MzRBMEIzREQ0MUJCQ0VDCisyMUI0QkY3MgorRkNGRjE5MjJDRUZBMDVGQjExMThCODRBOUVBNAorQjdDNDI1MERCQjE0NUJEMjVCQkRDMEFBQzAyNjk3MzM0MEE1MkU4NTdGRkJFN0MyNkMxNDNGRkQ1MzVBMUY5M0UzQjRDRDREMURBRDFERjIwRjkzMDVGOTNDQUZBMDYyQUMzQUQ2RkJBMjNBODRGOTQwMDRDQUQ4RDQ5NkMwMjZFMUFFOUMzMDhDMThCQkIwNTVGREVEQTE0NjNCNERBMDk2RDQxOTgxOEY0QTA2NUI0REMxRDkwNjZBMjRERTBDNzZEMDhCMzIxODZCMDIxRkIyQTM2ODE4OTdEQkJCRjJGMzIxNTEzQzZBRjEyNzA3OUVBOUUxMTEzQURFCisxNDdBCitBNERCN0NDRjM4OTQzMDI2RjMyRjYyMDQ4NEQ3MjQ1OTBGN0RGNkUyNTEzMzk4MDUzMUI1NDUKKzEyQUVDQjA4CitBQkYyOUNENDFDMjIxMTI5MTJBMTBCMDJDNUFBCiszNjhFMEVBNEREQUIwNUU3NjY0MUExNEZBMTBFNjVGQTNGODk5Njk3N0ZEMEFFREUxNUE2Q0UyQkZCOUQwOTJBNjRGODFFNTYzMEVCODE0RTdCOEQzOTdCMEVFNEUyMDczMkE3RTA3MTRDMUNGMDY3MDA5RDFBMkI5OTAyNkMwQjNDMzk2NzM2RDUxMkM4REU2M0E3MjVGOUEyMEYyQjg4OTA4RkQwNzQ4RTM3NEQ4NkE5NzUzQ0Y3NjA4N0NENTExNUIyM0UzNjFEREVERUY0QjhFMzhDQjFGQTQxMjJFNEEwQkE1RTA2NTFBRDVCQUIxOAorODBDRkVBNTkKKzlDNjg4NDhCMzE5MDVFMzhBNUVGMTIyN0EwMTIKKzM0ODhFNTYxMTdDQzZDQjcwN0IyOUEwMzFBQTJGRUJENDFFMkIwODJGRTYzQURERkRBQTQ2MUU4OEFBQjc5NTVBMjI3OEI2MkI0NDYzMkVFNzQ0QTY3Qzk3RUQ5MTVFQTNFRkFFNTc5OTJDQTIyMDVBNkUzQkUyNzExNTYyOEI1ODU0NTcxQkE3MkUzRkVBNTY4QjM2MkNBQ0QyNkJFMzZFRjYwNjgzREI1MTI1OEE1QzFFRTk5MjhERjU2QzQwRUIyRUI1NTJCOUQKK0FDM0ExOTRECis5NjUwN0EyRUFBMzU0NEJFMThENTlGNTM4NjM0CitFRUYxMEMyNUJBNjJFNzI5OTE4NTkyMEQ5ODc5QUQyODhCMEM0MjE1OEJCNUJFNkI5MEUxN0JCMkE2QUM4QjNFMDI3MEZGQjMwNkQzNjkxNDAwNDhFRDc0MDVBN0E1MkYzN0FBQjU2RTY4QkQyOUJDODJFQ0ExREU4NzdBNDA3QTVBMTFFRkM4MzIwMkE2OTUwRThBODNDOTZCMUYzQjdGM0FFQUY3NjJCQjNDRDE2MzQ2NzgwOUI5QjBFOTM4QjAyOUNFREQyQTg1ODVCNjZBRjJBMzFFRTc1QzVCNjQ2MjdDM0Y0OEY2MkUxQzBCRkE3NDMyMzQ5M0JFMUUKK0I0OTkKKzgxQzg1MzlCQTg5ODIyQkVBQkI5OTNCNzA5NjVEQTAxQTI2ODRBNzEzRDE5ODIzQzMwRURBOUU0M0VCREVCMjJFNkY1QkFEQ0RFMDMyMjExMTJFRTMxN0M5MTFBRTJFMzAwMzQ4QUUyMjRCOUU5RTRDRTVBM0NFMEI4M0MwRTY0MDMwRjA0NEZCOUY2NzhGNkZDRjMwQQorQjc3QkE4RTUKKzE1N0Q4NTFGM0EzNUZFMkZBMzE4MUM3RjA5Cis0NDM2MEQzNzMwMjY0QzM5NDUxN0Q0NTIyREI4OEVGNzY2QUFBMkNFQTlEMUMyQzhERTA1MEM1MjdERTExNEM4OEVBN0Y3NkY5MDI3OThBM0EwMTc0NkMyOERCOTIwOEYzMTk2NEJGODZFRTEzRjEwODcwMDgzNDFFMzc2ODdEQjM4OTlGMUVBRjU4ODgyNjU3QkVCNUM3MkU3RTIwODA2Mjg1MkQ3OTRCRkVCMUU5Mzc4Njc0RTIzREIxN0FDCis3RTQ1MDVDMgorRDBFMzU4NTFDOTQxQTM1Qzg2QkQ5RTIzRTlCMAorNkE5NDhGNDYyNjEyMEZBRTc0MjBDQTUxNDQ0NzFCRjU1NTg2Q0QxM0U4ODYzQTVGMDZGOUFEMzRDNzJEOTdGNzE2ODdERUNDQ0RBNjA2RkIyM0QyQjcxNDI4MjIwNEEzODdFRTFDN0QyNTVFNUFEQ0M1RTlCRTEzOTQ5MDBCNDU1QzMxNTlGNENBODRDOENFQjg5Qzk5Qzg0NDlCNEJCRjAyQzc1MjM1RDc5MDU1MjEzQ0Q1Q0U1RjE4MTlCNzdEMTQyRjY2MUY2NjhDRDY2MDNEODM0RTkwQTJGNzFBMkExQjBGQjEwOEY1Q0E1N0RBQTMyODUzNDU5MDg3CitCRkQyCisxNzI5M0QyQUI2REM3MjU1ODk4RUNCNUNBODNFMjg1NEE5RjhDOTVBQUVFQkZBMDY4RTE2NjVFNDUxQjhGMUQ5NzE0RDI2NzY1QjAyN0U0NTUwQkIKKzg1RTg1RERDCisyRjM1ODhCQ0RBNUM5MkUxQjU3RTMyMDlERgorOUY4MTU2NzczNDMwMjEzQkEwMDBGREQ0MUYwRTQ4MjEwMjExMDRFQTBFREI0RkYxMDVDM0I0OEU0M0VBRjFFMEEwRjhCQzk1REE1QTMxOUNEQkEzMjg0MDcxREE1N0UyNTM5Q0ExNUMzQzQ5MkIwNjJBMDIyNThGNTI1ODFDOTQ0Rjk5OTYyN0UwNUJDNTZERjA1MjUwRkNCOTIzNjFEQ0RCREE1NDJFMkUzMTkyNjIyMTczNDQKKzE4RjQ5NDY5Cis3N0Q4NEQ2RDI0NzAxRTQ4OUM0QjVBREUwOTQwCisyQzhGRkJGMjBGMkIzQUU0NDY1RTg2RDEwRkUxRjgwNDE3MTYwOEM3REE5RjAwN0JGREUzNjU0OThDRTQ2ODU1Q0I1NkI2MjZFNUYxNzEyODM3ODM1NkE5QTRCNTJERkMyQ0YzQTA0MDQ1MkQ2RkQxQjFEN0YzQTJEMTY3QzgwODdBMERGNTA1OEVGQjkwMUEyRTM4Q0QzMUJFOTQyMUI2RTUwRTY3NzYxNDE3Q0EzMzNBRDNFQTNGODdBRjRERjI2RERGRUQzNzE0ODFBNEQ0QTNDRDI0Nzc4RkYxNzk3NUIwMDJGREFCN0ZGMworNUU1QTdDMTIKKzZEREYyNzM1QjhDQ0ZDMEIyOTFDQzNEOEE4CitFNTg5QzRBNDQwQTA4QTBDNDAyN0YyMEM4NEI5MjJDNkNDQkYwMjJENTA1RUNCRkY3NjZEM0Y0MjdEQjREQjVBQkM0OTE4MTVFOTg4NTBCRkI0MjM2MzcwMUYyRjI1MEFFOTIxMjM0REIzMUQwNDk5QTdBODhGODQ2MjVGNkM1Q0JGMTdFMEJCMjU0Rjg4OTkyQzRERDUzMTE3MzM1QTVCNjEyMkM4RDcxQjY2MDUKKzIwRjlEMzFDCitGM0U5NDY5ODg4RDIyOTczRkQ3Q0E2NENDMgorRjdCMUY0MjkwMjlEMTUyMUMwQ0VFNTc4MEVCNzBBMEUwOTEzQzYyNTU4RDY4NURCNjRBNUYwREQ2QTkyMzhDRDk1RUVCMTZGRDYwQ0EyNEU3NTRDMkI5MjAwMURCREIxRjZEOEY4MzA4QTlEODRFRUQ0NzIyNUE2MTg0MjZBODZBMEI3QUM5MTQxNTVBNENFM0Y4NjNDQUVBRkNGNTc3MjkwOUVFODI0MTE1QTlEQTE5MzVECis1M0IzOUFDRgorNUU3ODA4QzJBOTQ0OTBDQzQ2MTUyOEJDRDNGNgorQzFCRkQ1MDM5MjU4OTNBRTA4NkREODE2RUE1QUQ3RTYzRTI1MTJBQzE4REY3MTlFRDMzMjlEMDFDMjM3RDJEOEFEQkMwRTY3QzdCRkU2Qzk0QTU3ODZFQTk1OUFENEY4MDA5RTVDNkU2MzA3N0UxNzUwOUFFNjIyRDI4NTBDQTZENzBBRTAwNTAxODA4QkI0NjdBNDQxNUFFOTc3QTczMzYyOEZCQjAyQjREMUQzNzA4NjQ0MDlBM0FGMjVEMUNFOEQxOTQ2ODZDREQ5MzBFOEYzQ0EyQjg5MzA1NDkwQzc2RTczQkFCRUZCQ0M0RTE0MTVDQUEyOEFEM0RBCisxRjc3Cis3OTFFQjUwQUQ1MTEyNkQxN0MKK0ExRUUyODI3CiszNzQzMDNGOTIwMkJDM0FCNDJBMjI0MEMwOTZFCitBMTI0RkRBNTM4OUM4NTY2Cis2RUYxN0FEOQorQTNGNzcwOEYxNzUwNEY3RTk5ODgzNzg4QjcwQUQ0MDUyNTdGQjM0OEI1NEY1QTQyNTEzRDU1QzhEQkFGREY2QkU4RjkKK0EzOUNGRDQ1RTIwOURCMjkwMUQ2MDJFNjc4MzdBMzBERUVEQkY5OEM1MzI2Q0FBMzU5MkNGNDZGOEIwM0Q3RjRFRENGQzc4NDAzRDAKKzI0REJDNzI5ODY5MTNFMjY3Q0IzMkJBQjU2MDhDNTlEMzI1OTE3N0EyNjI4QzY3NDg0MzhDQgorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyaSAxMi4wMCAvUFNPd3N0ZHV0Y2hpIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDFhMjgzNjMyMjgzNDI5MGYwMTExMDExMjI4MzAyNjJiMmYyNDM0MmQwMTI5MzEzNDAxMTkyODI0MzUzNzM0MmMzMDJhMDExYTI4MzYzOTMxMzQyZDAxMWM+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MjgzNDI5MzEzNDJmMjQzMDI2Mjg+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDBhMGU+IDkzNDYgMTMzODUgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyNjcgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI2NyA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjY3IDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI2NyAzIDcxMzMgMzIgcword3N0OmR1dGNoMTIgU0YKKzwwNjMyPiAxNTg5IDE0MzEgMCAxODgyIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDYwYjBjMGEwNDAyPiAyMDMzIDE0MzEgMCAyNjQyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzUyODM2PiAzMTc3IDE0MzEgMCAzNDMyIC0xIHMKKzwwMDM2MmIyODAwMjcyYzM0MjgyNjM2MzEzNDNhMDAzOTJiMjgzNDI4MDAzMjJjMzIyODM1MDAzOTJjMmUyZTAwMjUyODAwMjYzNDI4MjQzNjI4MjcwNzAwMjExMzI4MjkyNDM3MmUzNjBmMDAzNTNhMzUzNjI4MmYwMDI3Mjg+IDM0MzIgMTQzMSAxMCA4ODI1IDAgcworPDNjPiA4ODI1IDE0MzEgMCA4ODk1IC0xIHMKKzwyOTI0MzcyZTM2PiAzMTc3IDE2NzYgMCAzNTk1IC0xIHMKKzwwMDI5MzEzNDAwMzYyYjI4MDAzNjI4MmYzMjMwMjQyZjAzMDQwMDI2MjQyZTJlMjI+IDM1OTUgMTY3NiA0IDU3NjggMCBzCis8MDYzND4gMTU4OSAyMDIzIDAgMTg0NyAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYzA2MGYwNDBjMGEwNDAyPiAyMDMzIDIwMjMgMCAyNzEyIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzUyODM2PiAzMTc3IDIwMjMgMCAzNDMyIC0xIHMKKzwwMDM2MmIyODAwMzQyODMzMzcyODM1MzYwMDI0MzAyNzA4MzEzNDAwMzQyODM1MzIzMTMwMzUyODAwMzUyYzNiMjgzNTAwMzYzMTAwMzYyYjI4MDAzODI0MmUzNzI4MDMzNTA0PiAzNDMyIDIwMjMgOCA3OTcwIDAgcworPDAwMzUzMjI4MjYyYzI5MmMyODI3MDc+IDc5NzAgMjAyMyAxIDg4OTUgMCBzCis8MjExMzI4MjkyNDM3MmUzNjBmPiAzMTc3IDIyNjggMCAzOTk4IC0xIHMKKzwwMDBhMDAyNTNhMzYyODIyPiAzOTk4IDIyNjggMiA0NjYxIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDc+IDEyNzEgMjc1NCAwIDEzOTkgLTEgcworPDE2MTkxMjAwMDU+IDEzODkgMjc1NCAxIDE4NzIgMCBzCis8MGYwYTAwMDUwZDA5MDAwZT4gMTg2NyAyNzU0IDIgMjgwOCAwIHMKKzwxMjE4MWMxMjFhMWIwMzBlPiAyODA0IDI3NTQgMCAzNTk2IC0xIHMKKzwxMjFhMTcxNjE1MWExMjAwMGQ+IDM1OTIgMjc1NCAxIDQ0OTIgMCBzCis8MTIxOTEzMTYxOTE0MTAxNTExMTI+IDQ0ODQgMjc1NCAwIDU1MjYgLTEgcworPDBiMGMwZjA2PiAxMjcxIDMxNzcgMCAxODY2IC0xIHMKKzwwND4gMTg3MCAzMTc3IDAgMTkyOCAtMSBzCis8MDA+IDE5MjggMzE3NyAxIDE5NzIgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDAwMTU+IDE5NzIgMzE3NyAxIDIxNDcgMCBzCis8MzEzNDI4MDAxMT4gMjEzOSAzMTc3IDEgMjY0OCAwIHMKKzwxZjE5MDAxMTFjMTc+IDI2MjggMzE3NyAxIDMzODQgMCBzCis8MDAzNjI4MzUzNjM1MDAyNDM0MjgwMDMwMzEzNjAwMjYzMTJmMzIyYzJlMjgyNzAwMmMzMDM2MzEwMDMwMjgzNjMyMjgzNDI5MDAyNTNhMDAyNzI4MjkyNDM3MmUzNjA3MDAxNzI5MDAzYTMxMzcwMDM5MmMzNTJiMDAzNjMxMDAyZjI4MjQzNTM3MzQyOD4gMzM4NCAzMTc3IDEzIDk1MzEgMCBzCis8MzYyYjI4PiAxMjcxIDM0MjIgMCAxNTYxIC0xIHMKKzwwMDMyMjgzNDI5MzEzNDJmMjQzMDI2MjgwMDMxMjkwMDI2MzEzMDMwMjgyNjM2MmMzMTMwMzUwMDMxMzgyODM0MDAzNjJiMjgwMDE1PiAxNTYxIDM0MjIgNiA1MDE3IDAgcworPDMxMzQyODAwMTE+IDUwMDkgMzQyMiAxIDU1MDkgMCBzCis8MWYxOTAwMTExYzE3MDUwMDNhMzEzNzAwMmYzNzM1MzYwMDM0MjgyNjMxMmYzMjJjMmUyODAwMzAyODM2MzIyODM0MjkwMDI0MzAyNzAwMzAyODM2PiA1NDg5IDM0MjIgNyA5NDYxIDAgcworPDNjPiA5NDYxIDM0MjIgMCA5NTMxIC0xIHMKKzwzNTI4MzQzODI4MzQ+IDEyNzEgMzY2NyAwIDE4MjAgLTEgcworPDAwMzkyYzM2MmIwMDA2MTMxMzFiMjMxNTFiMWQxNDAwMjQyNzI3MjgyNzAwMzYzMTAwMzYyYjI4MDAyZjI0MmQyODI5MmMyZTI4MDc+IDE4MjAgMzY2NyA2IDU4MDYgMCBzCis8MTEwMDE1PiAxMjcxIDQwMTMgMSAxNjE4IDAgcworPDMxMzQyODAwMTE+IDE2MTAgNDAxMyAxIDIxMjggMCBzCis8MWYxOTAwMTExYzE3MDAxZD4gMjEwOCA0MDEzIDIgMzA4OSAwIHMKKzwyODMzMzcyODM1MzYwODFkPiAzMDgxIDQwMTMgMCAzODkzIC0xIHMKKzwyODM1MzIzMTMwMzUyODAwMzYyODM1MzYwMDAzMTUxYjFkMTQyMzFkMWQwNDAwMmMzNTAwMzgyODM0M2EwMDJmMzcyNjJiMDAyZTJjMmQyODAwMjQwMDIwMTMxYzIzMWQxZDAwMzYyODM1MzYwNz4gMzg4NSA0MDEzIDkgOTM0NyAwIHMKKzwxZjJiMjgwMDM1MmMyZjMyMmUyODM1MzYwMDE1MWIxZDE0MjMxZDFkMDAzNjI4MzUzNjAwMjYzMTJmMmYyNDMwMjcwMDJlMmMzMDI4MDAzOTMxMzcyZTI3MDAyZTMxMzEyZDAwMzUzMTJmMjgzNjJiMmMzMDJhMDAyZTJjMmQyODAwMzYyYjJjMzUwZj4gMTI3MSA0MzYwIDEwIDgxMDQgMCBzCis8MDI+IDEzOTggNDcwNiAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAwMzE2MTcxYjAzMTUxMjFiMTcxMjE5MTMwMzE1MTIxYjE3MTIxOTEzMDAwMjFiMDA+IDE1MDQgNDcwNiAzIDM2OTIgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE1MWIxZDE0MjMxZDFkMDA+IDM2OTIgNDcwNiAxIDQ3OTEgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMjA4PiA0NzkxIDQ3MDYgMCA1MTMzIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDA+IDUxMzMgNDcwNiAxIDUxODYgMCBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwYjA0MDgwOTBkMDQwNTA5MGMwZD4gNTE4NiA0NzA2IDAgNjE0NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE2MjgzNDI4PiAxMjcxIDUwNTMgMCAxNzM2IC0xIHMKKzwwMDI0MzQyODAwMzUzMTJmMjgwMDMxMjkwMDM2MmIyODAwMzYyODM1MzYwMDM1MzIyODI2MmMyOTJjMjYwMDI2MzEyZjJmMjQzMDI3MDAyZTJjMzAyODAwMzEzMjM2MmMzMTMwMzUwMDI0MzIzMjJlMmMyNjI0MjUyZTI4MDAzNjMxMDAyNDAwMTUxYjFkMTQyMzFlMWYxZDE0MTExOT4gMTczNiA1MDUzIDEzIDk1MzEgMCBzCis8MzYyODM1MzYwNz4gMTI3MSA1Mjk4IDAgMTY0OCAtMSBzCis8MDYyND4gMTU4OSA1NjQ0IDAgMTg3MSAtMSBzCit3c3Q6ZHV0Y2gxMmkgU0YKKzwwMTAxMDc+IDIwMzMgNTY0NCAwIDIzMDMgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNzM1Mjg+IDMxNzcgNTY0NCAwIDM0NzkgLTEgcworPDAwMzYyYjI4MDAxMT4gMzQ3OSA1NjQ0IDIgNDAxNCAwIHMKKzwxZjE5MDAxMT4gMzk5NCA1NjQ0IDEgNDUzOCAwIHMKKzwyNzI0MzIzNjI0MzYyYzMxMzAwMDE4PiA0NTM0IDU2NDQgMSA1NTgxIDAgcworPDI0M2EyODM0MDAzMDM3MmYyNTI4MzQwMDI0MjQyZT4gNTU4NSA1NjQ0IDIgNzAyNiAwIHMKKzwwMDM2MzEwMDI4MzAyNjI0MzIzNTM3MmUyNDM2MjgwMDMyMjQyNjJkPiA3MDI2IDU2NDQgMyA4ODI1IDAgcworPDNjPiA4ODI1IDU2NDQgMCA4ODk1IC0xIHMKKzwyODM2MzUwNz4gMzE3NyA1ODg5IDAgMzQ4NSAtMSBzCis8MDAxZTMyMjgyNjJjMjkzYTJjMzAyYTAwMGIwMDMxMzQwMDBjMDAzOTJjMmUyZTAwM2EyYzI4MmUyNzAwMTE+IDM0ODUgNTg4OSA3IDYxNjMgMCBzCis8MTExODBiMDgwYzA1MDAyNDMwMjcwMDBkMDAzOTJjMmUyZTAwM2EyYzI4MmUyNzAwMTE+IDYxNTkgNTg4OSA1IDg0NDEgMCBzCis8MTExODBkMDc+IDg0MzcgNTg4OSAwIDg4OTUgLTEgcworPDIxMTMyODI5MjQzNzJlMzYwZj4gMzE3NyA2MTM0IDAgMzk5OCAtMSBzCis8MDAwZDAwMDYxMDAwMTE+IDM5OTggNjEzNCAzIDQ3ODAgMCBzCis8MTExODBkMjI+IDQ3NzYgNjEzNCAwIDUyNTAgLTEgcworPDA2MjU+IDE1ODkgNjQ4MCAwIDE4NzkgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjBmMDQwYzBhMDQwMj4gMjAzMyA2NDgwIDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM1MjgzNj4gMzE3NyA2NDgwIDAgMzQzMiAtMSBzCis8MDAzNjJiMjgwMDJmMjgyNDMwMDAyNTM3MzQzNTM2MDAzNjI0MzQyYTI4MzYwMDI0MzAyNzA4MzEzNDAwMmYyYzMwMmMyZjM3MmYwMDJjMzAwMDM3MzAyYzM2MzUwMDMxMjkwMDJkMmMyZTMxMjUyYzM2MDAzMjI0MjYyZD4gMzQzMiA2NDgwIDExIDg4MjUgMCBzCis8M2M+IDg4MjUgNjQ4MCAwIDg4OTUgLTEgcworPDI4MzYzNTA3PiAzMTc3IDY3MjUgMCAzNDg1IC0xIHMKKzwwMDFmMmIyODAwMjkyYzM0MzUzNjAwMzgyNDJlMzcyODAwMmMzNT4gMzQ4NSA2NzI1IDQgNDk3MSAwIHMKKzwwMDM2MjQzNDJhMjgzNjAwMjQzMDI3MDAzNjJiMjgwMDM1MjgyNjMxMzAyNzAwMmMzNTAwMmYyYzMwMmMyZjM3MmYwNzAwMjExMzI4MjkyNDM3MmUzNjBmPiA0OTcxIDY3MjUgNyA4ODk1IDAgcworPDA5MDUwOTIyPiAzMTc3IDY5NzAgMCAzNTExIC0xIHMKKzwwNjI3PiAxNTg5IDczMTcgMCAxODgyIC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDAzMDQwZTBjMGEwNDAyPiAyMDMzIDczMTcgMCAyNzAwIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzUyODM2PiAzMTc3IDczMTcgMCAzNDMyIC0xIHMKKzwwMDM2MmIyODAwMzAyNDJmMjgwMDMxMjkwMDM2MmIyODAwMTE+IDM0MzIgNzMxNyA1IDUwNTYgMCBzCis8MWYxOTAwMjcyODM4MmMyNjI4MDAyOTJjMmUyODAwMzYzMTAwMjUyOD4gNTAzNiA3MzE3IDQgNjc5OSAwIHMKKzwwMDMxMzIyODMwMjgyNzA3MDAyMTEzMjgyOTI0MzcyZTM2MGYwMDA4MjcyODM4MDg+IDY3OTkgNzMxNyAzIDg4OTUgMCBzCis8MjQzNjJmMjI+IDMxNzcgNzU2MiAwIDM1OTQgLTEgcworPDA2MzI+IDE1ODkgNzkwOCAwIDE4ODIgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjBmMDQwYzBhMDQwMj4gMjAzMyA3OTA4IDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM1MjgzNj4gMzE3NyA3OTA4IDAgMzQzMiAtMSBzCis8MDAzNjJiMjgwMDMyMjgyNDJkMDAyNTI0MzAyNzM5MmMyNzM2MmIwMDM2MjQzNDJhMjgzNjAwMjQzMDI3MDgzMTM0MDAyZjJjMzAyYzJmMzcyZjAwMmMzMDAwMzczMDJjMzYzNTAwMzEyOT4gMzQzMiA3OTA4IDkgODQyNiAwIHMKKzwwMDJkMmMyZTMxPiA4NDI2IDc5MDggMSA4ODI1IDAgcworPDNjPiA4ODI1IDc5MDggMCA4ODk1IC0xIHMKKzwyNTJjMzYzNTA4MzUwNz4gMzE3NyA4MTUzIDAgMzY5MCAtMSBzCis8MDAxZjJiMjgwMDI5MmMzNDM1MzYwMDM4MjQyZTM3MjgwMDJjMzUwMDM2MjQzNDJhMjgzNjAwMjQzMDI3MDAzNjJiMjgwMDM1MjgyNjMxMzAyNzAwMmMzNjAwMmYyYzMwMmMyZjM3MmYwNzAwMjExMzI4PiAzNjkwIDgxNTMgMTEgODgyNSAwIHMKKzwzYz4gODgyNSA4MTUzIDAgODg5NSAtMSBzCis8MjkyNDM3MmUzNjBmPiAzMTc3IDgzOTggMCAzNjUzIC0xIHMKKzwwMDA5MDUwOTAwMDYxMDAwMzAyODM2MzkzMTM0MmQwMDI0MzUzNTJjMmEzMDI4MjcyMj4gMzY1MyA4Mzk4IDQgNjA1OCAwIHMKKzwwNjFjPiAxNTg5IDg3NDUgMCAxODk0IC0xIHMKK3dzdDpkdXRjaDEyaSBTRgorPDBjMDYwZjA0MGMwYTA0MDI+IDIwMzMgODc0NSAwIDI3MTIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwzNTI4MzY+IDMxNzcgODc0NSAwIDM0MzIgLTEgcworPDAwMzYyYjI4PiAzNDMyIDg3NDUgMSAzNzc0IDAgcworPDAwMmYyODI0MzAwMDI1MjQzMDI3MzkyYzI3MzYyYjAwMzYyNDM0MmEyODM2MDAyNDMwMjcwODMxMzQwMDJmMmMzMDJjMmYzNzJmMDAyYzMwMDAzNzMwMmMzNjM1MDAzMTI5MDAyZDJjMmUzMT4gMzc3NCA4NzQ1IDkgODgyNSAwIHMKKzwzYz4gODgyNSA4NzQ1IDAgODg5NSAtMSBzCis8MjUyYzM2MzUwODM1MDc+IDMxNzcgODk4OSAwIDM2OTAgLTEgcworPDAwMWYyYjI4MDAyOTJjMzQzNTM2MDAzODI0MmUzNzI4MDAyYzM1MDAzNjI0MzQyYTI4MzYwMDI0MzAyNzAwMzYyYjI4MDAzNTI4MjYzMTMwMjcwMDJjMzUwMDJmMmMzMDJjMmYzNzJmMDc+IDM2OTAgODk4OSAxMCA4NDI2IDAgcworPDAwMjExMzI4PiA4NDI2IDg5ODkgMSA4ODI1IDAgcworPDNjPiA4ODI1IDg5ODkgMCA4ODk1IC0xIHMKKzwyOTI0MzcyZTM2MGY+IDMxNzcgOTIzNCAwIDM2NTMgLTEgcworPDAwMDkwNTA5MDAwNjEwMDAzMDI4MzYzOTMxMzQyZDAwMjQzNTM1MmMyYTMwMjgyNzIyPiAzNjUzIDkyMzQgNCA2MDU4IDAgcworPDA2MzQ+IDE1ODkgOTU4MSAwIDE4NDcgLTEgcword3N0OmR1dGNoMTJpIFNGCis8MGMwNjBmMDQwYzBhMDQwMj4gMjAzMyA5NTgxIDAgMjcxMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDM1MjgzNj4gMzE3NyA5NTgxIDAgMzQzMiAtMSBzCis8MDAzNjJiMjgwMDM0MjgzMzM3MjgzNTM2MDAyNDMwMjcwODMxMzQwMDM0MjgzNTMyMzEzMDM1MjgwMDM1MmMzYjI4MzUwMDM2MzEwMDM2MmIyOD4gMzQzMiA5NTgxIDcgNjk4NyAwIHMKKzwwMDM4MjQyZTM3MjgzNTAwMzUzMjI4MjYyYzI5MmMyODI3MDAyMTEzMjg+IDY5ODcgOTU4MSAzIDg4MjUgMCBzCis8M2M+IDg4MjUgOTU4MSAwIDg4OTUgLTEgcworPDI5MjQzNzJlMzYwZj4gMzE3NyA5ODI2IDAgMzY1MyAtMSBzCis8MDAwYTAwMjUzYTM2MjgyMj4gMzY1MyA5ODI2IDIgNDMxNiAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgyMCkgMjAKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNCBwdXQKK2R1cCAzIC9DMDAzNiBwdXQKK2R1cCA0IC9DMDA0MCBwdXQKK2R1cCA1IC9DMDA0MSBwdXQKK2R1cCA2IC9DMDA0MiBwdXQKK2R1cCA3IC9DMDA0NCBwdXQKK2R1cCA4IC9DMDA0NSBwdXQKK2R1cCA5IC9DMDA0NiBwdXQKK2R1cCAxMCAvQzAwNDggcHV0CitkdXAgMTEgL0MwMDQ5IHB1dAorZHVwIDEyIC9DMDA1MCBwdXQKK2R1cCAxMyAvQzAwNTIgcHV0CitkdXAgMTQgL0MwMDU3IHB1dAorZHVwIDE1IC9DMDA1OCBwdXQKK2R1cCAxNiAvQzAwNjEgcHV0CitkdXAgMTcgL0MwMDY1IHB1dAorZHVwIDE4IC9DMDA2NiBwdXQKK2R1cCAxOSAvQzAwNjcgcHV0CitkdXAgMjAgL0MwMDY5IHB1dAorZHVwIDIxIC9DMDA3MCBwdXQKK2R1cCAyMiAvQzAwNzEgcHV0CitkdXAgMjMgL0MwMDcyIHB1dAorZHVwIDI0IC9DMDA3MyBwdXQKK2R1cCAyNSAvQzAwNzYgcHV0CitkdXAgMjYgL0MwMDc3IHB1dAorZHVwIDI3IC9DMDA3OCBwdXQKK2R1cCAyOCAvQzAwNzkgcHV0CitkdXAgMjkgL0MwMDgwIHB1dAorZHVwIDMwIC9DMDA4MiBwdXQKK2R1cCAzMSAvQzAwODMgcHV0CitkdXAgMzIgL0MwMDg0IHB1dAorZHVwIDMzIC9DMDA4NSBwdXQKK2R1cCAzNCAvQzAwODcgcHV0CitkdXAgMzUgL0MwMDg4IHB1dAorZHVwIDM2IC9DMDA4OSBwdXQKK2R1cCAzNyAvQzAwOTUgcHV0CitkdXAgMzggL0MwMDk2IHB1dAorZHVwIDM5IC9DMDA5NyBwdXQKK2R1cCA0MCAvQzAwOTggcHV0CitkdXAgNDEgL0MwMDk5IHB1dAorZHVwIDQyIC9DMDEwMCBwdXQKK2R1cCA0MyAvQzAxMDEgcHV0CitkdXAgNDQgL0MwMTAyIHB1dAorZHVwIDQ1IC9DMDEwMyBwdXQKK2R1cCA0NiAvQzAxMDQgcHV0CitkdXAgNDcgL0MwMTA1IHB1dAorZHVwIDQ4IC9DMDEwNyBwdXQKK2R1cCA0OSAvQzAxMDggcHV0CitkdXAgNTAgL0MwMTA5IHB1dAorZHVwIDUxIC9DMDExMCBwdXQKK2R1cCA1MiAvQzAxMTEgcHV0CitkdXAgNTMgL0MwMTEyIHB1dAorZHVwIDU0IC9DMDExMyBwdXQKK2R1cCA1NSAvQzAxMTQgcHV0CitkdXAgNTYgL0MwMTE1IHB1dAorZHVwIDU3IC9DMDExNiBwdXQKK2R1cCA1OCAvQzAxMTcgcHV0CitkdXAgNTkgL0MwMTE4IHB1dAorZHVwIDYwIC9DMDExOSBwdXQKK2R1cCA2MSAvQzAxMjAgcHV0CitkdXAgNjIgL0MwMTIxIHB1dAorZHVwIDYzIC9DMDEyMiBwdXQKK2R1cCA2NCAvQzAxMjcgcHV0CitkdXAgNjUgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yNSAtMjU2IDk3OCA3NjZdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMjQzRTBFQzU5MzQ0Q0VGMzY5NjUwQTAzN0I0MzgzQjAzRDYKKzI0QzMwNkU4N0VGREQ0Nzc1RUM3ODc0MgorRkVGQ0U0NEI3NjU1NzQ0NjZDCitEMUFGN0E4MgorQ0ZFMTlGRUMwNzA1NTE3MTgwM0JFMzVGQjYxRgorREZBNUE0QzczOUE0RTM5NTdFQjdDNjYyMzM4NDRBQzUxQTZBOTFCNDVCNzVFNkFGMUY3Njc3OUE0RUEzOUQ1NTRDNjcxRjAzOUY2RUEwOTAyRUVBQkMxMzM2M0JEREE1MTAxQ0ExMkJCODE1NkVFQzVBRjBCRjlFNkZGRDQxRTNFODI5Nzg5NUUxNTU0RjU3MzE0REU1RTVFNzBDMzJEQTQ3RkQzMEE4NTI1RDdFRTlDNjA2MDdFREI2RkQ5RjgxNkJCQTk0MTcyNzZGODUKKzYwRjVEREI0CitBMzk0OEIzM0VDRDcwNTE1RUZCMEYyNUU3NzY2CisyM0Y3MzdBMDY1NzhEMkM1MDE5NzFEMjFBMUFEMERGQjQ2Q0Y1Mjg3ODY5MTgyNDQ0RjQxMUZGMTE4MjMwMjY2NzBCOTA3RkYzODI2NjVGMzlGOTRDMDlFMEUxRTc2REMwQjAyQTRCRjA5RkI4RjJFNUJFOTA5Q0Q0QzQxODMzRUIyMkUwRkVBNzVBNDBEMzVENzcwMERFMTM0RTZDNTU2RDZBN0NFNTEyRDYzMjdGMUYxNzVDNEExOUMwRjY0QUU2MUUwMERDQTAzRjhGNUU2NEE1QTIzNUU1RDczQkFDNDg3RTNDRUY1Q0VFNEE0Q0RFMUE2OERCQjVDNzcKKzIxMkQKKzA4RkJGODA3OUJFNTUzMUI3NjE3OTlFMworQ0FDNzFDRTcKKzkxNUJDNURBMERCMTdGRkQ0QUJERTUxMTFBCiswOUYyRjcwRjYxMDZGM0Y2MEVDQzQyNDJBRTk5REM0NjVGRDQxODQxRTlCNzUyNUQ1QzRCMzJDRUE0REM2RkRGMUEyMTY1QkJGQThBNEVGMTEyOEZCMkZDQ0ZFQzg3OEQ3NEU1OUJENEE0RjlCMEJFREVGQ0E5REQyNjVGMUZBOAorQkZCNUIxQ0UKKzcwNUU4RTNDNUI2MDI0NzIwMDdEMkZGOTA5CiszQ0JENjc4ODAxRjUyQTMyQjI4RURFNDkyMzAyNEUyNUE4Nzk1Njc2Q0M1OTRCQzRFQzg5MzRFMEE3REI4NzRBRTAwREQ1MDdERTUzMTNENEIyREM3QTExNjMzQUMxNUU5OTY5OTlCQzhDRTUwMURFNURDMTFFQjQ2RjQzOTYKKzJGOTlERUVBCitFRjJDMzU3Q0NEREQwMzc4QjYwMTJGRjRBNzZECis2OTFBQUQ5NzlFOThEQUVGRTBFQTM0NzczRkIzQThBMEY5OUU2NkY3RDIzQzJGQUYwNzlBODAwNTk5MTUyRkJDOUIyOTU4REIwMzNDRjE2NTJGNzc2RTcwQ0ZBRDNEQzgzOTM0QzEyNENDMTk4NzQzRTE2MjUyNkJDMTU3NDM5Qjk1MUI0NjZBMjk1NDA1Rjk3Rjg5RTQ2NzFDRENEQzY2Qjg4QkJENDU5ODNCRTBBN0FBNjc1N0VERDVGNTIzNTJCNDZDNEQzNjYyQTc0MkFFNTc0MzlBRUQ0MEUwNERCNkY0RTg2MjlBRjc3RjBBRDlFM0Q2RjQwNjQ4QkUKKzdDNzAKKzlGOTcwQzU3RTI1NkRDMzA5MDk5OTNENzRDREJCNzI4NTJBNzBGRkQ0RUJDQURGODk5Qjc3RTk2OTNERjlENUU2MEFGMDJBNUE0MjgxQTE2OEE5M0M2NDFDMTg1NjRFOEM4NUU4MjlDQjNBMzc1RTREQjQ0NUJFRjQwOEMwMAorQTYzRkM2NTEKK0NDMUJBMzVGMjYzMjI4MDAwQzkzQjJFNUJCCisyNDk3QkQ5QkQ4NzgzNUEyQjVFMUIyQjY5RDU2MzM0RDY3QjlFM0NDRjZGRTA5NkUzOTBBRjhCNzE5NkUzOTQyMjQ5MUU1NUIwODVENjc3OEY4NEY3MjAyOEI1NzIxMDczNjAxQzRGMzg0OTREMEU4QTUKKzcxMTVGQTlBCiszODRDMzA2MTY3RUNBQzJEQjc0M0NFNUMyRQorOTJGNEE5Qzc3MDIwNTdCMzI2QjkzRTM1RDVDM0EyMTRERDg0RERDNjZERjUxRgorMDAzQUQ0QzkKK0M1NzlENDUzOTFCMTY5QUI2NDUwOEE3QkQ2Cis4RjBENjg5NjNBODc5QTk5MUZDMDI1MjFGRkQ0N0ZENjQyQUQ1OTYxODcxMDE2RkI1QkJBNzk4MkQ5MDI3MAorMUQ0NUM4Q0UKKzZEOTUxM0VBNEM0MDhBOEM4QTQzMDg0NkUxCiszN0U2Q0EwQkY3NEZFRjgwNUM2Q0RBQzQ4NEE5NzQ4OUY3RUZGMjFCNkNBNDAzMkQ1QzhDQUEwQjZFOTVCNDcyQTM4QzA3NjcwRTBENjM5NjI0RDZFNkNDMjI3NDdDMkZFNTI0QUM3MjM5QzU3REE5NkRBNDY4MkJCODk5MDk1N0NCRDIyMjIxMzNFMEI1NzIyM0VFCiswQzZFOEY1NAorQzU1OTY0OUU5RUQzMEU1MkI4MjU0RkM0N0UKKzcyNkZGQUFFRjI1QjBFMDBBQkQzNDZBNTNDODc1RDI5NThCOEExNTY3RThDRjlFN0Q1RDVERTE4RkQ3QTU4MEY2MjVCMDMzMzgxRDY3OURGRTAxM0U2MkY0QzREOTlDMDEzMjM2NUM2MTU0NzNBRUZFQUJCMDNCMTc0NUQ5RQorMjlDRjNBOTcKKzNEQjFENjRGQ0NEM0FFM0E0MDBCQzhERjYwCiswMEQ3QTU3MUNCNTUxMjBCQTFEQzlBQjIwN0REMUYwM0FGRjk1NDE4Mzc4NURGODkxNUE0M0I0REIwRUJDMDIyNzUyMkVDMzdFMDhEN0M0Qzk2Q0ZCNjVFOUYyMDhGOUEyRDc4NDVBNUE0NUI3NTJFQkRCN0Y0QUQ2NTE5MDQ3QjlGRjA2MEJDRDhDOTMzMDcwRjY1NDNGNTM0NTdDRTMwOTQwMTk0RjExMDQ3MEI0NkZFRjIKK0I5MEJFNzRBCisyRjA1MDk4QjEwNjM3N0MwNjhERkRFNjc1RAorMDczRjQxNTJERTU5RTBFMDZDMUU0NEEwN0RENDRDNjg3RDQ0OTRFRUUwNEZEMDM3OThCNDM4MkYwQkFBNzZCOTYwNDI4OTNCMDdCMzQxMUNCQURGMjdCQjcwRTQ3QkFFODEzMkNCQ0Y0ODIzMDNERTJCQjgKKzZGRkY1RDg4CitDOUM1QjhFMkU2NDQxQjBCQzk2RDFFRDE4MERECis5M0U2NUMzRUYxOTc4NzY4MERDQ0MxMDE2Q0NEQUMyMUZFMjlEMzRERkQ3MTg3MkQ0M0MyRkEyMkFBMDExN0ZFNkIwQjUxMDQ5NjNEMDM1MDdCQ0NEM0Y4REFGQjRENEYxMEQ5MUU4NzIzNTNFQjZDMzcyM0EyNzRCRjg0NjVGMDc0RTY4RTQ4QUU4RkQ0RDE0NzVDQjAyMDlFRDdBRjlFMTkwRDBBOTVBMDY1QjFDNTFDOTE0MjM0MkM0NTMxOUNBQzlENDI1OUYxCiswMjkxQzAzMgorQzVGNkI3NEJGOURFNjAxREUzNkU2NUY0QzUKKzAxRTIwODg1MjE1MThBQjE0QjVBMzQyMDI3QjBFNUNFNUY0MUJGQzM2QTVDOThFNjM0NzBFMTkyMDc2REQ1MjZEQkY5MjNGNDYzOTBGOUM0MzJEMkNDNzUzMDA0QzMwNjEzQkIxQTM0RDY5QQorQTFBQkZGM0MKKzBGOUUyQUY0NUNEOURFNjAxNkE3RTIzMjE3Cis2QzUxRkFFNjIzM0RDRDdBMkVCRTk4QzVCQkNBQjRDNTUxMDM2NkM2M0FEMkQzQjEzREVCMDkxMDQ5RDAzMUQwOTQ3RDNBOTIKKzI5RkRCRjU0Cis4MUI3QjRBNTYyQkQ1QzJBMEEzQjkyNDQ2MEQ5CitGQjZDMkFDMjAxQjc4RTQ2RUNEMjIzQUJENjY0Q0NENDJBQzRDMTkxRDBFQ0Q5MUFCNDg3QjRCQjM0M0Q0Q0FCQzMzRjFENjkwOTExNENEOUIzNENBMTAzMUU0OTM5NUY2NDU5QUI4MjYxNzU1ODUxMjUyQTFDMTc1NjkwRUE3QjMxNzFBQjc5QkU3OTM4NEE1QUUwMEMxNDEzNTRGNDRFQTNCMTUwRjk1RkM2NUIyNzFGQThBNTE2QTBBNzdBMjM5RjZEOTZCQTZEREFCRDI0RTNEMkZBQUU3NzNDMTI1MUI5OEU4QgorOUYwNjcxMUUKKzQwN0EwQzgwNkZCQUIwMjBBQUYxODgxRUZGMjgKK0RGRTUzNUQ2NTcwNjQxQkVEQUZEQkY4QjNDNTcxNkYwRjk3QjY0MUJGMDQxODQ2MzEzNkIwQkRFRjFGMUQ3MDQ1NTNGMERCQTM3NTE2MzFERDM3RjBGODFCQzM2QzI2NUE4RjY4NEQwNUYxM0EyRTJDOEQzMzM3MUY3MEVBQTRENEYzM0QxRUNBMDAxMkM2OEQ0MDkyQzBGNTE5QTRDMzI4RDA4QjgxOEJCMEZENjlBRTFCOUNFQTQ3M0IzNEI1OEJEMkUyRkZFRUFEMDYxNDZDMkRDNUMzNDIwNzI5QjJBRTg5MzNFNjc2N0UyMkMxODA0QThGNEQ5NjIxQQorQjI3RAorNzUKK0YzMzU2MzY2Cis5QkYxMEMxOURCQzhCMkZDOTQwQkZCMzE0RQorMUJDRDE3NTkzNUMxMzcyQzEwQUJFMzcwMDY4M0FERDc2RDM3NEZGRTdDN0MyNkQ3OTc3OTYyMjE3NzhFNDJGMUYyMURBRkUzQzM4OTA3OTkyOThCOTQ2REJEMkM1ODExMzYzQUQ2NTExRkRENEQ5MTBENzNENkE5QTE4QUJCRUY5RTUxNjJCMzI4QTc5QUY1QjExNUIwQkIwRERBOTE5RTYyMDU5MUVERDgxNDFBNzM5REUxNDEyNzQzQTAzQkUzRTEKK0Q4RDg3OTVFCitBMzRCQzY5QkQwNzhGMDJBODY5ODY0NzdBMDRBCiswQTc4OTNCMjREQjA1Q0VDQkFFNUYwRkQyMzdCRTg4OUI2MUUyRDk3OTIwNzVEQjJGQThCMjg4QzZENDdERTdCQkQwOTQ0OTJGM0E5NDQwRkMxN0E5MDA1MEFBMDcxNzlGRjM5RkE4MkMxRjA4MUI4NEJBMjQxQTZCQ0Y2QTAzQkY0NjkyRTg2NTEyODI0NUJCRDA2QzZBNDI5MzgxMTIyNzYzMjIyMEE1QkJFMzdBQjYwMTQ0MTNBMDE1QzI0N0FFQkNENUUzNjVEQTUzMzNDOUI1RUQ5RUVGNEU2Q0Q0MTRGQjgxQ0QyQTJBMDVCNzVGMTMwRUVFODE3NTUKKzUzQjE5ODRBCis5MTZGNjJFMTlEQjI2NTFEMzhCNDlBNTgyOERECisxRTJDOUY0MzYyMUZBQzg0QkUzNUMyREFFOTRDQ0MzQTI0RkU4OTUxM0YyNTVDQURCOTczQzQzOTg5RTY3ODdBODcwQTIzNjY3QzQ2MDUyODBEQUVCMDgyQkZFQ0QyMTgwQzBCOEVBM0YyN0E3QTBCMUUyNzAxNDg0RTRERDk4MzMzMUU1N0Y1MjBFMjNDMUQ5Q0U4Nzk3RDlEOTNBNDExMkVGOUY5RUM1QzA4RURCNDI4QkM5NTRCRTQyQzk3MDBFRjg4QUE3OEM5NDUzQzgyRjIKKzUzQTZDODA1CisxNDM3MUIwMTBBODVCNTdDRkFFMDgzODYwMTcwCis5ODQ5Mzc3QUE3MjNCNTU4QjdGNkVFRjU5M0JGODYyM0FBMjYwNzE2MERBQjE4MTU0MTg3OTgwNEMzREFGQkRBMjA4OEFDOUE3NzAzNEU4QjBCNUUyNTI4NDIzQ0EwQzY4QjZDQkY5NDdDMUQ5NDA2NEUwMzkyMTI4OUI3QUEwMzE1QTA2RkVFNkUyQzRCREYxRDJDMjhCMzkyRTQ3NTEwRTRBNDEwNzVGMjBEMzRFOEZGRjM2OUU2REM3MzI5MDlERDcwQzU1MzREOEIyRUNERTBCNDhGQUU2NTMyNjg5RTE3MjhEM0QwRDhEMjkxMDVCNjJECitDMTM3QzI1QQorMThENDNCREYyQzM1NEVCQTdEMEVGNkZDREZCOAorODdBODNDNDI2RDJDQUNFRDBFM0MwMzBCMzEwMDdGRTE5RjQ1NDk1QzdDQjVCODk5OTA4NDVFMTY5MkQ2QUQ0MERERkE2NEJBNjFDNzU2NTA5ODdDNkNGREFENTc5MDFBMTU0MzJFMzJFNUNFMjgxODY4NTRBOTE2OUYxNjg5MkQxOUEzRERDQ0IyRDc4NjIzQzE0MkZBMUJEOUU4NjNERjQ2MkQxQ0I2NTIxRTVDMDQ4NDEyOTAxQzI3MUYyNzIzNEUzNUJCMThENDdGQTQxNUI5MEU1Q0VDMTk0RUI3ODE2Mzk0NDZCMDg4NTAzMzgxMjU1NzM4MTEwNDc2CitFOTg3Cis1RjhFNDE2OTdGN0EyMjE1RDdCOTUyCis1NTc1OEU0MworNzE2NEIyMTFFOTFFNzI4MjUwNjRFRUI2MEEKKzQ2N0Y3RERCMUIwNEEwMzAzNzRDMUFENTlBNDNGQTA5QzhGNjA3MTVERDY4MjU4NjQyRjFBREE1NDY0NkI0RDI1MkYzQzc2RTczQkU3RUNGQTY5MzgwRTAzMDY0Qjg5OTkwMzcxMjQyNkMzODgwMDBCQ0IzOTIKKzI4MTkxODJGCiswMzE4NDZEMTQ4NjFCNzY4NzhERkMzNjk5NQorQUJBNDM4MDM4OUQ2ODA1QUM3QzIzOTRCMDE0MDI5NzVGODQzMjk0QTBEQTkyMEQ4QUI0NUFDQTVCQTkyM0U1NzkwM0U2RjZGMzNCNjUzMjBENTk3MUZDOTU3OEIxQ0RBOEI1NDJCNTE0OUREMENCNDNCM0VEQTVFNjExMkY1RUVDMzU5NTY5RjRGNzM4OQorRTI4RjBBODAKK0E5QzE5QTdFM0RFRkIxQzZGRENBRDcwMkZBMTEKK0IyNjJFQ0UzNzM1NENFMkFBMDRENDM3OTVEMjkyN0E4NUJEMzc4MzBGQkRBNjY2Mjc5MjYxQTlBN0Y1NEJCRUNEMzg5MzU4RTEyMzM1RkRCODZDNkI2NTg0NDM1MzUwODhCQjkxNjJCOTU2RTE4RUUxNjU5MTkwMUQzQTEwNUE1NTg4QTgwMDE0RjFDRTVBRUM3Mjg1RjFBRDhGMTEzRjNDQTIzNUZENjIzNTI3RkYwNzQyNEYxRUMwMTU4QjkyOUE5NDBCQUYzQzJGQzhBREQ4QTQ1M0U3N0MwRjJBNworNjhDQTVDMEYKKzFFN0FGRTJDREIzRjNFMkYzMTk1MEE4RjNECisyRTQzMDI5MDMwREE4OEM1N0MxNjIzNEM2RUZCRkQ3NTk3QkE5QkIyMkE5Qjk1QTYyNUQxNkYzRkZFQ0VBRjZCNThGMTA5RjZEMTM1QUVFQ0JDNkQ2MUQ5REIxM0MyNjkxNkFFNjE3M0RDREMxOTkyQzk3QjIzNzcwNUU2OTI4QTA1MURERTE2NkVCQTE3QTNFQUM0Q0U0QTEwODdGRTI4OTY1RkI4NTdGRTJFMjRCMDcxODNBRERGCisxN0MyMEI5RAorOTQ5QjhGOEVBRDZDQjVFNDhBNjlGQTU1N0QKK0Q4N0QyNUU4OEQ4NDA3MzFERkJGRTJGRkI0ODQ3RTE4MDI4RjJDRDYzMENGOTA0MkY5OUE3RTlBMzc1NUEyOTE4RkExQkI3RUM1NDMyQzRGQTQ0ODdBQzQwMzE4QkU5NDc3RjBENzFCQkMzMURBQzJERkZFRjYyMDg3QjRGRTFERjVDNEMwMUZFNzAxRjExM0I2OEQxRUI2QTFDNDVFQjQzRDkxOTAKKzYxQUVBRjg4CitGQkE0RjQ2QTEyQUE5OEVBOTk5RTI1NzE0MjZBCis5RDlGNDFDMjZDQTU2ODNFRDMzOTRFQzE2QzY5Rjk1Q0EzMDA3OTg4Q0VCMjdGMDBBQTlCNTlCNzVGMDg2RDVFQTVCRjZEMzUzOTRDMkYyODIxRTQ5NEI4ODAyODIyQkI5QjEyNzhGMzhCQUY1Q0VDOTA1MUZFQkExNUExODM3QTJEMzMwOTk0MjgxNzAyMTZFRDY4QjFGRDAwRDFENDdGMzlDMEU2NkEwQTUyQjFEMDk3MjcwQkVERkQ1MzMxMzE5OTNBRDc4NEUwQTc0QjgzN0Q2QgorREJCMUY0MkYKK0RFQUQ0NTlCRjg5MUUzMEE3OTc5RkU3REMzODAKKzc4OTFEMDM5MEFENUU2QUY1NTA2MkY4ODg1NjVCM0FGMTk1OTI5NDMwQkI0Mjk1Nzc5QTEyMjhGQkE2QzdGNjVGMkQ0NTQxREU4QkU3MDQ0NjQzNDhERTg1NUE0RTBDQTlGRTIxOUZBQUVEODkxNTc4MjMzNEVCNUVERTZGNTRBQjk0OTM4MkVFQUNBNTJEQjBCMEEzMTg3NEI3MjAyMUUzQkRFNjAzN0Q4N0Y2OUU4N0UwNTdFNUZBRjVEMTQ4MUM4QUVCMEJGODcyMTUzREEyRTdFNTFGMkU5MzJGNUJBRkVBMENDNDJERDUzMkY0NEQ4NzM4MTY5NTA1QQorMzBFOEEzRTkKK0RFQzBDODNDMTY3M0I1RTBBMDRBODkwMzgwQ0UKK0EwQjBFMENEMzFGMUNCQjVCMUJENzA3QjgwMDk0QkIxNjY1MEQ2NUVBM0U0QjQ2QURCRDgwQ0ZGNjgyMUUzNDAwOENFMjdDN0JEQTZCRDhCNTU2RjRBNUM3NEQyMzJFN0I2NzgyOTIzMEY4NjJBODhCMDI0REUzOUUxRTAzMjM0MjJDRkQyRDNEOUM4NUJENDk0NEVEM0JCMTc4NjY4MjZGMUIwRTRDMEE5MjIzNzRCMjA4QTg5OUU1NDdDNEM5M0NCMzJGREE0MUNFMTNCQzZGOEIzQkQ0QzYyMTk1RDdDMDM2MkEzMkM0Rjc5ODY1NUIxQzgxNjU5MkZEMworN0ZEMAorMzE5NTI2CisxNDU2MkMxQgorMDMxMzA1OUM1NzkzM0MxOUIxMjkyOTdFNEUKKzhBRUI5RTM0MDYzNTcyOENFNkVERTU1RjAzQjM5QTZBNTAwNEFEQjREQkRFQzI1NjdEMkFCOEE4RjJCNTY3MDQ1MkRFRUI4QzlCQUUzN0NBMEM2RkI5MDU4QTIyODk4ODkyMEYyOUE3N0ZGNkI2ODlFOUNFNkZCMTRFMjJDNEFDQTYyNzdDNzFDRTRBN0ZGNEE5RjU2NTU2QTg0NDgwMUFFMworNTY2MTY3NTMKKzVBMkEwNEE4RDgwQjc1NTU2QjEzOTEwMUY4OEIKKzUxMUZGODM4NjAwMkFFQ0U0OTY2NTlGRkFGMzk5NzY5RkNDQzcyNTZGNzRBMEM4QTJBQTRENEI1MzhEQTE4RkRBRjdFOENCQzEzRDFENUQ1MzNGM0RDMzZGMjU0NkQzRjY3MUNDMTA5MkRCQkNFM0EzQTdCRERDNDEzNTVBMUM3ODJBNzI1M0MwOTc3NkIwQThEMEI5QUQxRUQzNjAzMTk1QUY5MzRENDgxNTZGOUE1RDU5RUQ1REZEMDI5QTUxNEU4NkVBQzM3CitDQzY5NDkwMgorMTA0REQ1NUEzODBGRkJCN0E3M0Q4N0NGRDk2RgorODRFMjIxNzkxQkM5ODRENjY5NUVEMTMwRDYwNTE1RTJBODk5QUUxODJGQzBBRTg2NUVFMTUyMzZCQ0Y2MEJFOUFEQkY4N0VFMjg4MEIyRDJENzg4RjY5MTdDNUE3RjI2NUQxMjUyNzhBRDM0NEIwMzNGMUQ4Q0EyRDI1MThGN0QzOTA5MTc0QjFFNUMwQjhGREYyMEZEMkM2N0MzMDJFMTU1MkM0RDBGQzk4QjJEMjdGNEE2QjYzQzNEQUQxNzFCQkJBNUNGMkFCODNGRTY0Q0RCRjU5Qjk1OUUzODk0OTA4MzQ1NzdBMUE1RkQyM0ZENEY2MTE3M0UyMjZGCis2RTk1CitEOTBFMkQyNjVDREVDQTNCMkZEMEFCNUJDN0ZEQjZCQgorMjAwQzRBNzMKK0Q0MDFCMEMxQzdGOUEzQjIxODYxMTYwRjNGMkEKK0Y3Q0Q0MDM1QjU3MzI4NEU4OTdEMkIyMzhGRjVBQjUwODMzQUZEMDBBRUZGNTNFODdERDMyQkU3QTJDMjk1ODA1RTAxNEQ4MjY2M0U1QUUzODk1M0I1NjIyRjc3OUFGNzMzNTQ3RDVCQjJDQzc5MTZEMzVENEU2RUQyQzVFQkE1NzFBMzNFQjZGODcyQTdDMzNDRDA2RUI4N0NDQ0UzOEM0RjhCMUU1Q0IwMzlGMzQzMkMxNkY2OTI0QzBCNjkyNkNEQTBBRDA0NDVDOEY2NkNEQUQzRjVCMDlBRDYyOERDMzg0MEVDRkM5QUU4ODhCMjEyQ0JDN0U5NTcxQworMkFGNQorQUE5QUM5OTQ4NDBGQzEyRDE3MkNFQzEwMzUzRkQ1M0VDNjRFRDI5RUU1OUU5Q0I5Nzg0NjY5NzVGQTA2MTYyQkQzQzAwQzU4NTgzMzQ2CitGODZCMkREMgorN0Q5MkM2REI2QzM2OTIyN0YzMzY2NTU3MTcxRgorMkY3MkFBRTMxRURCN0YyNDE1QTMxMkZEMTMwQTI3NTkzQzc2MUZBQTg0MzdGNzFCODVDOUFDMzAzMUEwRjlDNDMxM0YxRDJGMDUwRkQ5N0I1MDg0OUJCNDQ2RDBBRDNCMzVCNEI4NDE2RDg4QTZFODczQTZERTFBQzRGRkJDNTRFMTRBRDg4QkU4MDdGQjc3NzU1M0U2MTUxNEFBN0M5RkQ5Qjc4M0ZDQUE4MjA5MjVGQ0ZCNzNEOEIwMjVBMDBEQTI0NDIwNDFBQjUxRDhENzEyQkU4MDVENThENzYyODc1Q0VDQTEKKzUyMDk3ODdBCis4MTBEQUM5M0MzOTcyQjU1NDU5RDE5RjkzOQorQzhDNTk3QzMxQTU2MTJGMjM4OTM3OERCQjhBRDkyMDU0N0I0NUFCOUNFMkYKK0RDMEQzRTkwCitBNkU0NDM2ODEyMDAxRDM3Qzk2QkNDMUU1QworQUIxNUZGMTlCNDRBNEIzOUQ4NTUwM0RGMDI0NDdBOUFDQjQ1QkY4QUM5REVFNUY5M0I5NzA1QzNCMjk0MDdERENCRTY4QkZBMjI4MDM3OUUwOEIxRENBNTEwODVDMDQ5NzJBNDBBQkY1NUFBMzY1M0M3MDgKKzY3QjE4QzAyCitGQUNBNUI5QUMxMkU5N0E4NjFCMzcyN0NBQ0Q5CiszRUNCMTU4MDlDMDY0QUUxOTQyMkQzNzNGM0NGNjJDNjZCODdCNkE1REIzOEZBNzA5Q0ZFMkRBNDBEQUI3QzczNTAxMDlGRUE0NEFDQzVCQjIyRTgyMzJCQkVFRkVDMTMzNzI4NjZBNUQ3RjBFQzdEMDI3Q0RBQzJDQzhFMDhDMDU2QzI2OTI0RDRBQUJGOUYwNTMzNkUyRkNCNkZGMTcxRDk0QTBBM0Y5MkU0NDNGMDk2MzI1NTE2QkU4MzVEMTk2MUZDRTA2OThBNkZGRTIzNTJGMEFFODc1ODBCMEMxMjYzMjYwOTRFQkMzMDJCODk3REY4NzQ2RjA1OUUKKzQwNTkKKzdFQzU0MAorNjFEODEzQjEKK0UxRDE4MzVGRjE3RDgyMENGMkQxQUQ4RUFECitDRkVFN0U5MkUzNUIxOEE0MzZGODBBMDQxNDBBQkMxODU5MEE3ODdFNDQ5QkU1OTE5QkIzMEE0MTZCN0UxNDc1ODI1QUY4M0EyMzQyNzE5Qzg2NzVFOTUyMjMxOUJENDI4RjI1MjEzMkE5N0I3MUJFMDNCRDUxQTE4Qjk1NTA2RTJCM0ZGMTZDQkQ1NTM2RTY5RTAyRTg4NDQ2OEYxNzIzNTREODM1RUI0MjIwNUYzRAorMDYxRTIxMDAKK0QwNDgwQkIyNDA5RDgzRjkyMkQ4OTZBQzA5Cis5RTNBODBDRkEwODNENDdGNEU5QURBODA1REJGOEI2RTY1QjEwRjU5NUM5NkVEM0Y4MzRDQThDREE5OEE3NTg1MTY5ODc2RDRCOEU5QjMxMzI4MzE2ODFGMTVEOUEyOEJCQTY1RkQxOTdDMDc5NUQzMjQ2NDZBOEEwMjlENTE5OEM5ODBEMTM2REUwQUM4N0I4MERCNDYwMkYzMDI5ODg2MzVGMAorQjNGNkJEODIKK0VDMzY0REM2NDMxMDQ3MDY1QTI1NEYwMzQyN0QKKzBDMUVEMDYzNDAyQUNCQTg4OUI1OTdGRjI5ODAzOTdBQzZFMDVERTg3RUQ4RUM4QzMyMjlGNjgxRTZCQTkyNURBNzc1NTVEQTBBNDIzQzcxOEJCOUMwMzI0QUEwNkE1NkM4QjFEQTFBNzFDMzY0RUZFQkQ4MDdGNUU3RkZCNkQ0RENGMjEwRUVBMDFFQzczOTZGRkI1NUNGRkU3NzEyRDM2RkFBNTFFOTdGM0NGRDUxMTRCNkNCREZDQTY0MTJEOEEwRDFDQzA4OTIzNEI2NENGMjVBNjg1MTMxOUUKKzk3REYxRUQ4Cis5RUZBQjVDNTJEOEIzRUM3RUM2NUY3ODVBNQorMTg5NzFBM0JFQTA1N0VEODc4Q0JFQkE5MkU2MDcwMUI5NEM3NUJBOTlDMkEyNDZFRUQxQjE3Qzc4NkZBNzI1REIxMUVCRUU3Nzg1NjVDOThDOUE5Q0NGRTdDQzJBQzI5NDlBRjlGNzQyNzJEM0ZBMTQ4NEZCNUUwOTQ0NDI3QkFGODcxMkIxQjYxMkVCNzIxMTg5NzU5MEJEMjAyNDlFNjY3QzI0NDc0MEZCRjBBQzRCRAorMjY5NTcyNjgKKzIxNUM3MjYzOTlFNjhBMTdERUVDQjU4RjgwCis5NUQzM0I4MzAzNDVDRDc0MzhBRTk4OUE0M0YxMzU3QzMxREUwNjlDNTQ2NTNFNzdBRUIzMUIwOUFCNEQzMTNCN0MwQzY2OEZFOUZCMjFEOEFGNzg5MDY2QjZCMDAzODRBNzU4QjFFQTQyNTgwQTlBMDE2OUIyODMyMDA0REY0ODY1NDY4OTI3MTRGRjA3QkREQzgzMEIyNEE5NjdCN0RGNDg3NjcxNjk1NDIwMjVCNTlEOEZFRTQ0CitBN0U3ODMwOAorQkYxNEVCNjc3NkZEOEJBQUVBRUMzMTM1MUMxOAorRjBDOTNBMUI1OUE4Q0JDRUY5NDczRUI3MDFEOUVBQjRGRDkyQTM3MkVERDcwQjg4RTkwQzA3RUQ1NTdDQzJCRjlENEZCMkFCRjVFOUUzOEJCMDgzRjYzRkU1ODc3MTlFRENDNDY3RkFCOENEMEE2MDYwNTFDRTdFMkFCODNGNDY2NjYyM0MxQTAzMDU0QjM4RTIwRDkzQjY0OTE1NDg2RENFMTgxQTM4RUE3OEMwMjZDMjZCNTAzMzU5M0I0NEQ0RDhGQkVDNTA0RkI1RDg5QjdGOUM5RDZFNkIyQTJGOTUwRTJDMEZFNTVEODZCNzBDNDM3NzY5ODQ0N0Y5CitFQTQ2CiszREU4NDg1N0U2MjBBM0YzRjMzRDlDQkJCOTNGRTA3RTYzRkUwQzYxOERCQzNBOThCRTdEQTc1RUJBNDRBMzQwMjZGNDhEMjkyNEZDM0JENjc5Q0NDMTUzNUI5RDgzCis3N0IxNjdGMworMUY0QzM5QTZBNDcxQzY2RUQ4QkQ1QUNCOEJGMQorMTc2OURBQkY4MTE0MUI2ODUzNzc2QUU5RjFDMzRGNkY2QkQ0RUM1MEI1NUMxQTgzMzRBMjFGQTUyMjAxN0M0NTFGMEZBNkJDODJCMEQ1QTUwQzczRTdFRkQzOTU3QTBBQUFDMjAzNTczRjNDNTZGNjBEODRENjIzOEVDNzJFNzkxOUQ5MUNFRDdGMEQwN0QyMTA2NEZFNDIzNjUxNjhERDFCNEJERThCNkVFMkFBMDRBREZGQUIyNkM1MzMzRkIxQTVCNDcwMzEwQUUxMjhCQTZFNDM0MTYxQUMKKzZFNTQyODUyCitFRkQ5RkUwRjA0MDM3NTNDQUI0RUVGMzQzNQorNDNBQTk0QUI4NkNGNTNBREVDRjZDQkIzODFFRkU2MjE0REJEMUVGNDI5NDlBQkFEQTM5REU4RDNGRjU3RTFEQTNEMTAxMDcxM0Q1Q0IxNDY1QUEzODMwQTMxQ0E5OTRCQjNCNEI1ODNCRUU2QzFBOTYzQzlBNjdFMTc3MDdBQ0E5NjhGMDYzRjYxNDcyQUNDNEI1NDAzRUMwN0JCODVEMAorM0JBRkU1OTEKKzI3REJBRUMyNURDQTlCQURDN0VGMkE1QjE2RjQKKzIxMkJBNTEzMjlDMTUyQkE0MTNDOUYwNTQ2MDY1RDE1MDI1QkI4QTBGODFDMkE2NENCMkM4MUVFNkY5QkQyNzM5QTNDNEZFMjc0RUU0NjJDNTQ0NDYyMjYwQjc4NkZCNkNEM0E2QUI0ODY3RTgxRkRCRDFDQjNBN0IzMTFFOTRBNDNDNzNDNTZFMDgyMEE3QzkyRDU0RTQ5RjM4MjNDNjBFNDVENzhCNkI0ODk3OEM5QTJFOTc2RTZDNEIzODE0ODY1M0U4ODYxNkVFOTZFOEE1OEUyRjlBMTZDREExMTQxMTBGMzYyNUQzMjE4RTAyODY5NjgwOUE5Qzk1NAorNEQ0NQorNUZDNTBDNTEwMEVEQUNDN0M4NzFDNEE2RjI5MjU3ODJFMTA1MDZBRjJDREI5MEI4MjE0RTFDMjJBOUFDMkMxMTM0NjlEOQorOTZBNkIyREUKKzJGODY3QTM5Mzc4QUQ1ODc0OTBDNDFFQjgyCis0MUFCMTk0QzlDNzlGNkM3NkNBRTc0REI4RERFRDk5QjM3QTE3RThBNEMyNUQ4Mzk3OUFDOEFDREIyQkZCNUVBMTQ0RjIzNzA4QzY4RkZGQzZFQUNGRDRFRURFNUE5RkVENkIzMjA5MDlDMkIKKzg5ODZGRjNBCis0ODIyNTA0RDYyQTE2MDIwRTQ5MDk5Q0QwNjM1CitFMzNDQjc2RUM5ODIwM0M0MjIzODc2RkI3ODcyQzU4NDExMkM2REJBNjIzOEU4OUQ4NjdCOTNBNzE0MURGMEJGMzA5NkZEOEE0MDY3OTY5ODNFQTJCRTFGMEFBQzQ5NkEwNDJBMDlFNTY3MUI3REM5NzBFRUM1MzFCRDU5NDE5RjhBN0M4NjA2RTlBN0I5MTZFNzQwMzA5OERENDI2RjkzNjEyMzg4NEVCODM1NDg0RTNFODI3MDIwRkM1Q0E1ODVCN0EwRDY5RDA2M0Y1NUJENzA1MEUwMEU3MTMxNjYwRjlEQzhGNDBDMzY4NDQ5RUZENzJCNTk5NDlDMjUKKzVDNEMKKzY4MjNGNjIxQjM2NDZGMDM4Mzc1RDVDRkE4MDJEODY2MDc0M0QwMDE4OEQ4MTM3MUVFMTA1ODNCMjczNTQ4CitDRTVDRkNGQworNDI3NTMwODc2Q0FGQkVFNDlFRTg1NEVDMEFBQworOEI5ODFBRTg5QzdGQzUyN0Q3RDU3MkE0ODRENkY3Nzg1NjA3OTkyQzVCMTZBQUZBMDdCRDkxNzU1NEJDOTkzOUMyOEM5QTQ0Rjg1Q0VFRDQ5NjcwMzBBODg1OTVCMTQ5RkVCQjNEOTk0RjA5RjkyRjNDQTIyMEVCMzdEMEE4OENGMEJBRDUyREJFOThGNjMzMDUzNjQ0MzM4NDAxREEzMTlCOUVBREYyMkJBMzYwRjU5NjQ5MUQwRUVGMTgyNTE5RkVDNDg4ODhENEI2OTM5RjBDNjAxNEE4CiszOUQ5NEIwMQorNzhFQjY1QUJBQUIyMTdFRkMxRTE5RUU0MDcKK0ZGNTBGNEQyODQ2MDdCQTU1QzcwMkU0OTExNzQ0NTEzMzRFRDFCQTREOTJGMzY0NTBDN0M2QkU3MTY1QkRCQTg2MTM1QzQyMUEyRTA3OEFFODNBQzE5NDgyOERDMUNFOTEwOEYxREMxM0VBMDAzMUIyRkMxQTcwRUFFQjJGRDA4QUYyQkY2QzYyODg2Cis5MUFEOEIzMgorMkMyMTNDQ0NEODlEODcxOTVGQ0YyQzFBNjRFMQorQ0ZBRDlDMjRGNUM0MTVEQjY0RTVGN0NGQ0UxQzk3NzdEQUY1NEJDREZGQkYxQjA5QzQ1MDMwNjZCMTVFMTQ3MURCNEIzNDVDRTkzNTQ4MzdBRkM1MEY3Q0QyQzY0Q0QyOEVGQjQxQ0NFQ0IyMDE2QkQ0RUEzQUIzMzI5M0M5MkQ5N0Q4NTI5RDY2QzYwMTUwQ0M3QTI2NkU3OUZGQzQyOURDQkRGNzEzQURENjQwMjYxRDY0RDM1OUQxQTE2RDg3RDc5QTEyMkI0RjM3RjZGODJBMzQ1RkIwODQwQTI1M0Y5QkQ5OUYyODdDRDNFQQorMDRBQTZBOUQKKzJBOTM5RUUyRTIwQkFFRjk1RjE2NjBCNDY4MzEKKzNEREQ4OEYyN0RGN0FCNUE4MzlERkJGQTZFOEJDRTdFRDBBNzZBODdCMUM1MzJGMjA1NzYyNkRDRUFBQjZFNjIzMjM5RDI5NzIxMUNGOTNENDM2RUYzOTlBMTY5RjcwMThGQTQwQzgxM0VFQjdEOUJBOEE1NTNGMkQ0QzAzN0ExNjdBODlGNzg0QUJFNjk1QjAzMTcxNjlDODQzN0ZEQkMyMzcxQzE4RTM1NzlBM0JEMEFDMDBGNUI3MDI4NDNBODMyRjU4ODM2OUQ3NzBBMTg5QkE4CisyMEMyQ0IzNgorN0RCMkU0MTYyNzA4MkY2OTE0RjM1NjI5NEEKK0ZGQjM0NDkxQjdGRjc4Q0RGM0YyQzNGM0Y5RTVBREMwMDA2QzIxRTIwNjYyNTdFNjQ0RTJFODdEQjg1OUUxQzkwRjU2NDMxRDFFRDcwQTIyNTA5RjkwOTVBNTJDQzY2NEI1MjVFMENFMDIxQ0E3MzFCQzc2M0MxQTVDRDlGMkE0MkEzMTlBMTI0QkI1M0ZBQTQyNzI5QTlFNDBGNzZGRDYxNzczODE1MUE5NTA1QgorNzBBMDJFMzkKKzk2Rjk4MTdGQjZFRTNGRTE3RkM1MDk2OTQyMjUKKzg1REZCRERBMTQxMTAyNzkzODk5RTNEMTk5QjIzREM5NTc1MEI3QzZGNzY0ODVGQzE4MjI4NDE4RjU2OTc4NDIxREM0OUU0NEIzN0Y5Q0ZFOTVGQzE5OTM2MzFBQjRGRjc2QzFEMjM5NTJFOTUzRkZGREIzRkIyMzU4OENFNjExMkIyODgxRThENUQ5OEY3NTJERjE0ODE0NjlENkRDRUIyMTM3NTMzQTQ5RDE3RDg0M0QyQkMxMTRBRjM5NzZFRTc2NDZBMkFCOEE3MTY4NDQ2OTlBOTA0RDQyRjFEQkZBODhGRUVDMTE2QkZCRUU3NzZBOEU0QTAwCis5QkY3M0NENgorOTkzOTNENUU1RjI3QTg0NkUxMzg5NkRCQ0IKK0JBNTNEMTJGM0UzNThBQTQ5NzkzQkNBQ0IxODA5REY5REM5MjQxNkI0REM1NTBFNUFBRTZDRkY4RjIwQzI1Q0I0NDE1QTZDQTJCMjQ2QzQ3ODhBOEU1RjcxMUU0M0M4RkQ4QTgzQjM3MDJDQTJBNUJBOEVGRDk2MTE1MERCMDhEMkYxOUEwQUFGOAorNDZBMjMzMUEKKzMwODRDRTg3OUE5RDNEMDI3NTkwMUVGMjlDCis4QzFFMzY2MjIwNkQyN0VENjg5NTU5MDk4MEQ0OTU1MDIxQTM5Mjk4NjlBNDk3RjI5MDdBNTVFOTY3ODNFNTQ3MTBCRjc5Q0NEQjEzQkQyQjk5REYyMEZGRTNEMkJDRjhCNzQyRTkxNzYxQjgxN0NBRjJGQzU3NTA1Mzk4ODUxRjBCQkY5MzAzOTFGOUUwNEQzNzEzMEUwMDQ2RjEwMUQxNjkxRjcxOUMzNTdGMEM1NTI2M0FEQ0Y4ODYzNzMwQzYzNzE5CiswMUJFNjA0QworQ0Y3NUZBNTNBRjM5MzVCRjY2NzEwQzIwNkIKKzc4RDZCOUVCMTQwOEQyNjdCNjk4MjYyMjFCMkE4MzYxOUEyMTE5NjQzREFDNTNCMzc2MDc5MEIxQUJGNTY2RTJGRUIxNzJBNjg2OUNFNUNDMzJDRjEzQ0M1RkZCMEVFMEQwQzQxMUE4N0U5MjFGMkUyOUIwMUYyQjFEN0NFOTMwQ0M2NTg3MEFBNzE4RTI3NDg5NTg3MDMwRUM1N0YxRDREQUM2QzQ2NDcyRDc4QUZBMUEKKzRCMTBFMTA2CitGMzA4OEYwQjJDM0U4RUM4M0M5OEE3NjQxNjE1Cis1MzQ3QUIwNjMzQ0JBRjM4NTAwQzMwQjMyNjgzODE0M0MyODY5MjI3MTBCMUNDOEU2MTMyMzNGNkY1QUZFRjI5NTU1OEVCNjgzNEQ0NTkyMjVDMzRDMzJDQjlGRjMxMTJBMTk1RURGRUZFRDZDMEU3RDhEMDNBQ0RBQjQ2MTdGMTE4RTNDMUU0QTNCRTE4NEM2NEVFRjY4OUQ2NjE0QUM4RkRBNUQwQUYyRUQyNEE5QjkyQzIxMjUwNTRDRjU3NUI4NEVGQTdCNDJCMzRDMDAzNEIzQ0IwNTlFMUM1QUU4RDMxMzcyODQ3MjFEQjI2NzA5MkQxNDcyMUY2RUQKK0Y1MDAKK0I0NjEwRTMyOEY5RjNERTY0NTAxQjIxNUEzNjUKKzM4OTBGODNBCiszNkE5MkQzRkQ0RDk1NEY3MDRCNEE3RDNBNDY3Cis5OEY1Rjk3NUQyRTJGOEE4MUMyODA5RThCQTREOTI3MDBGRjhEQ0U1OUZDOTZGNkYxQ0ZBNDRCMTRBQUYyNjUyOTMyMjhDRUZDNTQzNjM0RDYwQTNBMDVGMUNERDM2MkEzMkEyMUJFODNCMUI0OTE3NTFEOEVCMDQyMkRGMDI0RDBBRkQ4NDU5QTU5MTQyREExRjBCM0ZBRkE3NEY3N0Y1QTQyMDZBMUZGQjI4M0M0QkVBRjI0NTE0OEQ5RDlEMzc4MUEyQ0ZDREEyQ0E1RENBNTY1NUJEMzA5RUZCMkNDM0FDNkNCRTVDOTUwMzVBQzNBNTUxRjA2QTdDMEEKKzg4NEIKK0JDQTU5NTZDNTg3MEJFRERENjNDQjNFN0E5NUNFRkUwMTUwOUE2NDQyN0M1NUM4MUM5CitBOTVFMEE1OQorQkVBOUE2NzM3RjVGN0NFMzcyOTg4OEM4NTU5MworNkVGMTU1RENFRUNFQ0RFNzE5MDYwOTIwOTlDQkM3RkJDRUFENEU3NjkwQ0E0OURDODE5RUE1NkRCMjAxREMxQzJEMTk2RENGNUY2RjhFNjhGOUEwNkE0RTc1QjRFQUJGMTY4MDNEMTMzQUZCQUMyMzdDRDg3RjdCRURFRTBGREQ2MDY5MUM3N0Q5MzgxNDA1NjQ4OEFDMUE2QzA3OTc4QzZFMzlFMTkzREU4NTU1QjE5QzAxOTQwODQ1MzU5NzAzMTM3N0M0QjQ0Mjc3Q0VGMjZDMDQwQkRBRjREMDVBMTNCRjBENDEwQUVDMDNCQzMyQ0E2NzkxMEYwRkYzCis2QjJECiszMDYzNDNDRQorOTUyRkVBQTNDQjVDMEJBRDQzNTgwNUZENUMKK0NFNjQ3Rjk5OTJBNDcyNDA5NzI0QjVDNEQ0QjU5MTNERjk2QzAwMkU2Qjc1MzEzMTc5N0Y2MUYzQ0NEMEQwQUEwQTdGNDVBRDg1NUNGQjc2ODcwNjcxQTU1MjAzQzFCMDE4MkEwNDVCRjRDODgwNTNBNTE1RTZCOUY1RTMwMgorOTc3MDI3OTUKKzc4OUE1QTkyMjlFNTUxMkNGNzNENDkzNEY2NUMKKzIxNkVCNkMzMThBN0EzRTNDNUNBRDY5M0RCRjA5MzgzQ0JCMUUyRDlDNEUwNzBGMTAxMkU4MUMzOEYxMzA2QkQ2ODg0RERFMzYxOEI2N0U0NkRBOTM0MzA0RDM1M0ZDQTE5N0Q2RTQ5Q0ZFRUI4RTA2MTI2OTU2NDE0Q0FBQTEyQjRDMkZCMUM2REUzRDc3RTlGOEI1QjQxMTcxQzlGQkE3MkNGNkEyMDk3M0RCODAyMkVDOTdFNTYyNUU1M0QxOUQwNzBENkI2REFENzFGMzA1RgorNERBMDY3OTUKK0M1QzVCNjdGRTE1NjIxQ0ZDNDQyQUYwRURFCis2NTZDREY3RUU0NjQ2NjNDODAxRTBGRkIwQkZFRkZCMjdENEY4RUU0OEUxMAorNDY3OTYzMEIKK0ZERUE1MTYyRjNGQjJDMTY0OUJDQTQ2M0YzRjIKK0RDNDZERDRDRjgyNkQzMzIKKzE5NkQ5RjQxCitEM0QwNDFGMTE4QzNGMjNDQjREMDRFNUFCRTA4NkI2QkFDQUUxQ0NFRDBFNkQ2QUQ2ODk5RjA4RjgxRkI2RDc1MjVGOAorRjA3NDhDNzVENkQ3M0VGMkIxOUJFMkM0RjRDQzBFN0ZBNkQyNzBDNjVBNUZFRjM3OUFGQzFDQjg3QTAxQTk4MTkxQjFEMkExOUZDRQorMEVGODdDNTRCMjUxNUYzRkI4NTFCRkZDMTQ0OEIxMEU3ODA2OUUzNUJFOEY2ODhGMkFEQzhGCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ1IHB1dAorZHVwIDMgL0MwMDQ2IHB1dAorZHVwIDQgL0MwMDQ3IHB1dAorZHVwIDUgL0MwMDU0IHB1dAorZHVwIDYgL0MwMDU4IHB1dAorZHVwIDcgL0MwMDY3IHB1dAorZHVwIDggL0MwMDY5IHB1dAorZHVwIDkgL0MwMDcyIHB1dAorZHVwIDEwIC9DMDA3OCBwdXQKK2R1cCAxMSAvQzAwNzkgcHV0CitkdXAgMTIgL0MwMDgwIHB1dAorZHVwIDEzIC9DMDA4MyBwdXQKK2R1cCAxNCAvQzAwODQgcHV0CitkdXAgMTUgL0MwMDg1IHB1dAorZHVwIDE2IC9DMDA5NiBwdXQKK2R1cCAxNyAvQzAwOTcgcHV0CitkdXAgMTggL0MwMDk4IHB1dAorZHVwIDE5IC9DMDA5OSBwdXQKK2R1cCAyMCAvQzAxMDEgcHV0CitkdXAgMjEgL0MwMTAyIHB1dAorZHVwIDIyIC9DMDEwNCBwdXQKK2R1cCAyMyAvQzAxMDUgcHV0CitkdXAgMjQgL0MwMTA4IHB1dAorZHVwIDI1IC9DMDExMCBwdXQKK2R1cCAyNiAvQzAxMTEgcHV0CitkdXAgMjcgL0MwMTEyIHB1dAorZHVwIDI4IC9DMDExNCBwdXQKK2R1cCAyOSAvQzAxMTUgcHV0CitkdXAgMzAgL0MwMTE2IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xOCAtMjA3IDc1NSA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzRDMjY0RTVGNDVGMDI4NkJEMUIyM0QyNkMzNDYyNkUwN0EKKzVCMDM5REIzNkMxODAwNUVFMzJDRkE2NAorOTA2QjI4NUNCOEJEN0YwOTY4CitENDdGNTI0MgorMjJEQTI5QkI2M0VBMjlBQzEyOTNEOUYzNjUKK0ZERDA5MjY4NkNGMEQ3MzlEQUU3QjRFQkVDREZFMjFCOEI1ODEwQjE1QjM1RDcKKzhCMUJEQjY2CiswMkI2RUQ4ODZBNzgzQzlGMkUyOTU5REFDQQorOUY4QzY4N0NBQzUwRjk4REQzRDk5QzkxQTM4MTY4OTRGNUEyMjMxODE0MDU2RjI4MDVFNDUxRjY2QjU5MjMKKzc5QjQzNERCCitGNzA2MzhCOUYyMDQ0RjNBQkVBMTEyMzUyOAorMTRGQjZGQUJFMzcwRjY0OTRBNTRCRDE3NDBFOTZEODY5OERGMzZERDgzMTNCMDVCNTU2RQorRTA0MzI0MzYKK0RDMDA2MThGREM0OEYwRTlDQ0JDOUI4M0JGMzUKK0M4QzNDMEYwOUIwNUUwOEY3OTk4NUQxNDg2NEQ5MTNDNUQ3QkMyNjhCNkJDQkY3N0UyMUUzNDc1MURGMjBEN0MxM0VERjcxRUNDNUVBOTU2QTI5OEE3NDQ3RkMxRTNDRjM1M0NCMzVBRDY0QUFFQUVDQzMwOUIyNTNEQ0Q4OEM0REI1NjdCNDE3QzhGNkVFOEJBMzc5QzRBQjkxNzQ4OTM0ODI0QTNBRTcyNzU5ODRCQUYyMjZGM0ZBMjNBN0M3MzNCMEM0QkVGCisyRDA4NDU0NworRjUyRkEwNDQ1RkIzRDhEOEI2QkNDQjcyRDYKK0UyREQ3ODhDRjZGN0I5NDFEM0FFM0ZEM0I3RkEzODAzODQ3RThCNDgwQ0JDRjRDMzFGRjg3ODQwRUYwRDZGRjVGMDE5QjJFMDMwMkNGNzk0QkJFNjlFQTQwQjAwNjk0MjBCOUUwRjRGOEM5RAorNTBBRUI5M0YKKzg1MEE1NDFGQTc5Q0I0QjU3MTNEQzE5OTQ1MDMKKzQ2QURFQkVGNTVGMEY3MDI5RUFCM0E0OEVFNDI2NkExQTlFMUJDODJDQUYxNzYxMEQ3NTJDM0UzOUZEQTFDRjczNDgxNjlCNUZEQ0U2Q0JGNDM2RkE0OTRFNEUzQkExOTgyQUU3RUZBNzlCNkE3QTJERjFFRjRGNDMxQjA3RjNGRDhCOEZCMDE4NEY0QkExMEEwMDEzN0M2NzMwMDIzMEY4QkU3ODUzQUEwRkQ0MkU5MDU4REIyRjkwREEwNjU3NTVCMzY2NjU3MjRENDc5NTAKKzMyQ0M0OUMzCis3NjdBMDIzMTE3RTUyQzcxQTFEMUE2ODgwMjNCCitGNDkzM0Q3QkVBODE0RUU4QTk3MDA4OTU3MzlBNzgwRTVBMTg2NDdBOTUyQTU4NDZFNENDM0Y2MjRFRTYwQjZDMEIzNkNBM0ZGQzA2RUI1NTU5RDYwNzY4NEMzMEE1M0I4Mzk3MENCMEE1QzcwOENBQzg2NjAwMDFCRTM4NjE0MTgzMjk4QzUzMEQzMEYxMEE0Q0FCMEI2MzRFMzEwNUJDRjhFNEVFRjI5QjQ1N0QwRThFNzNDM0U1RTdGOEExN0NERTRGQTU5NUJBMDQxMEVCMjBDMDcyRUY1RDMzCitEOTg3QTgyQgorOEE2QTZCNTU5M0I1RjFBRUNGMTg4QzJGQzI2RQorN0Y3QzJGMzYyNEVGRTUzNTNDRTcxN0YzMUE5MjY4QkM5QzE1RTVFMTUxQ0I2RDk0MUU5RUI2ODMyREQ2NTFBMUY2RjI3NkIwOTRCNjA4Q0ExQzlDOUI4Mzc3NjBDQjY0MDc5QUM4NkM1Qzk1NTAwNUQxNDMyQ0Q3ODZEMTJCMzgxNEYwNTEzRjUwMjBDMzIyNkU3QkJBNTg2MzhEMjg4Nzk1QkJCNDA2Mjg1Q0NDOTY0QkI5RjVDRUU2NjVGOTdERDdGOUVGODQ5RDAxMTk4MjdFRjEzQTc1ODVBRjg4MDY1NDAyNzhCQzc2NkQzNworREJENTE2MEQKK0MyNjJDRDNGNEE1NTMwNDc3QjFFNzQyMTg3CisxRjg2NDhDMTJBNkI2N0Q0NURBN0YyQTVGREUyOTk3QkU1OEY0MTg1MjBFOUZCNEZFMTIwOEI5Nzg2NjU1OTg0RDUxNUM0QThDQkY1RUUwMjAwRUM0QkUwNUM3NTE3OEI2NUFDMkRFODM4NTZGNkZDQzVDOUFDMUQxMzU0QjUzNjE5QjU2QTA4MENCODIxMUM5NzcyMEU1RTFDNzUyM0M1RjI3QjY4RjZDOTEyMERENjU0MkZEMkFEOTYzMDRDCitBRjYyODE1QworNzFDNzM1NjZFQzFDOTQ5NDVDRjkxQzQ1ODE2QgorOUFDMTE0NkJBNEY5OUQ5NUVCQzcxRjkxQzkzNDA0NEQzQjlBRjBEOEI0MkQ3NDI5RkZERTc4MEEyN0MzMUM5QUVEOEQ5RUZCOEQ0REQ1N0RFMEM2MzdDNjBBMDIxREQ4MzM2NTc0NzZGRkRCMzdFNTk4RTVCQTFFNjlBRjQxRjdBQTQ2MjIyNTAwNjkwNkNEMjczM0E2MDJFQzM4OTY5QjA5OUFERDhGRDg5RjQwNkU0NDlGNjZEMTZCQzBDNDIzQjhDRTQyNUUxQUI0MTg3RTA1CiswNDVBODAzQgorMUY4Q0UxRTMzMEE5QkEyRkQzNzE1QTdEMkMzQgorODk5OTUwN0NDOUJEM0ZBQUNGQTU0M0Y3Qzk0QjlGMEIxMDIxQzI3RjQxRDk3M0Q2QTA0OTAyRUNFMTEwMURGRjI1OENCOTcwRTg0RjJCNTI1ODk3MDhCNDM3QTc5NEY2NTZGN0Y4QTk0QkQzNkUyNjI1ODc2Qjk1NTQ3MTI2ODgzN0RGOEMwQUU0MjQ1OTM0MkQ2QTVENTgyNzQxRDlCNjk0M0NFOUNFNEU4NDVBNzk5M0Y2NDg0RUUxRTM5N0M3NTZEM0QwOTQKKzU4NTVBRjRBCiszNTUyNUYwQTAxRDlBODhGOUIwNzdCRjZFQjAzCis5RjRENURDMTE4Rjg1NDVFMUIzMjkxMzcyQkY1RDYxRjJDNTkwQkMwQTVEQ0QyMEFCQzNFNzU1MTI2QjI2MTg0MTkxRDgxRkFGREQ0N0Y1NjNCNEUzM0ZDRTNGQTNCOUMyNjc2RUZERkU1MkM3MTdDRTU3OTQ4RkNGREQ1NjVEOERBN0ZFNjY4QTc3QzU1QUU0MzQ1Q0YyOEUwN0I3MEFBMTA4RTYyODBGQ0IxODlCOTBCQTJCODU2OTgwQzIwOUEwNDEyRjJBM0ZGMjBCQzZBMzNDNjg4Qzk0OEUwREQ1NTA0RUE0OUNFQTk0REI3QTY5QTM0ODEzNDAyNUUKKzIxQTEKKzdBQzM1QjQ0Cis1QzRFMTg4RkVCNUI2NDhGRTY3MzBFMjE0OAorQUQzNjNENDA2Qzg4QjBCMDkzQjBBMjM1OTRFMjkzQUVFNDlENjNGMzIxQzk1MjJEMEJENjIxNTU3MjVCRTAzMjJFQTRBODczRjc1OTlBNUMyODlFQzlBQkVGOTZBMjQwNDNDRjIwMkVFQzNDQjczMUFDRkEyMzA0RTk2NzY0REU3RDg5NjBCN0ZGRThFMTYxRDQKKzFDNkRDOUUyCitEQTM5RjhBNkI0NDMxOTgyMUMzNDhEQzMyMzhECisxMUMyRTJCMjdERjRCOEZBRURBNUY0QTg1NzdEQUMxQjQzRTg5NkIzMUI3NkRCQjQ0MEFDREQ4NDQ4QkY0OTRFNThBRTMwQjY3QkJDNEUxMDhCMzlFRTgyODQxODA2REE0QzAwREI5NDM1RERDQzAyMzkzMTBCRTMwNkJCNjU4MjY4NjYxQTUyRDAwOUE2NEJBNTM1RDE3OEUxOTZDMTg0NTE4MjAyNDFEOTBGOUU3ODZENDQwNUE1RkY3MjM4NkZCODU0RUFCOUFENkNBNAorNUUxNEYyMTMKK0E5NDYzQTY0NkFDMzJCMThBOURDMEI0NTg2CitDMzk5MkZDNTk5MUZGNjE0MzRERkE3NDUwN0UwNTUzQjM1MTEyNzk3RTExMjFFRjM4ODYzMjY1NTAzN0FDQ0FCMTMyN0JFMUI3MDVCNTc3RTYyRUQyODdGQzcyNDBENTFDRENDMkFGMzNEN0M3Njk3REVERTFCCis5NTJGQjZCRAorRjZGRTY3RUM0OEIwOTlEQjc4NTlCRkIwRDcxMAorQzgzQkNGNkEzQUY3RkQ5RDhDMDYyMjIzQ0QzRjJCNDZCRUI5OTVDODk1QjRCMjdERDY2MTQ5NTIyNjc3M0I4ODQzN0VFMTU4QTZEM0VEMTJGQTA1MzRBRDJFM0QzNEYxNDExQjg0NzlCRTZCNTlCN0E4RTYzMjAwMDUxRjk5ODIzM0EwMDc2NkVFMjMwREFGMEFDNTZBRDZERDA5OUZCNEIxQkUzODUyMDkwQzlGQzVGM0EzRkU5RkU1QzREMkM0OEUwNzE0OURGOUJFOEJBOUVCMTA4MDYzNjM0RkY4N0U1NTQ2ODg5QzQwNUJFQzNDNzg3MUVGMEFDNzU3CiswRjEzCitDNjYyRjY3RAorMkM5QzdDQTcKK0I3MzNEMUIzMThCQjIxMzg4MTE5NzJFQjZDCis4QjA0NUE5QzM1QzQxNzA2QjgxODM3NzQ2NUE0MUE1QjRCMTVBRUY2OUJBMkZBNjVGRTM3OUQzQzk0MEE2MEI2NEQ3NzYxQUExMzIxMzMyRUI5Q0Q3RDRBOTk0MTkzMTIxMDVDMThCOTM2QTkyOUMwRkVCMEJFRjNERjkwOTExQUZDMEFFODQ5ODgxRTQ5OUY2Q0MzMTM0OERBRjQ4MDhGNTU4NTg3OEE3RTRFNkZFREFBNUUwMDBCN0M0MgorMkJFM0EzNDkKK0ZFRjM3NDNBRjlEQkQ1RkI2OUQ2MDVBNTZECitEN0Y0MzA3REM4MTY1RTYxMTAyMUYwNjU1QzlEMkJERjNGMjA4ODdGMkRBRTk1NUE5M0VCMDZFNzUwNjI3NTY2NTg2ODY0MUUwODQ1RjU2ODgwRDA4OENBQTY0NEIwN0VFOEJGMzgzMTQwNjlGRUU0NDEyRTE0RTMzM0U0NDAxNDE2MzVGRDQ2NTE4ODE1QjAzQkQ1OEY0N0E4RUY0ODVBRUUwQgorQzhGQkQ0NzYKKzVERTI1M0I5REM5MkQzMjY4MkQwOEU5MDM0CisxQjQxMTM4MjA2NEJCNTRDRkNGNzNFNzk4MTI0NzRBQkE3NUEzMDUyREM3Qzg3NDgxMkZFNTYwOEMwOEY2RDREQThCRURENUZFNDk1NDA0RDk4QTM3OEQ5QzM4QUFCQzUzODAxRjg5RTc5MDhFMTRENTI5RkQxODRCMzgyMzY1NUEwMjZBRjFCQTc0Q0U5RDVCNDczREI0MkM2Q0VDNDExQUYyOTQ1NjVGRUExRDNCQTMwMjlGRkQ1CitCOTNEOUM3OQorREI4REE0NjM1Rjk0QkQyMjAyOTBDNkYzMUYKKzRGRTFCMDM0NUMzMzMxNjU3OTdFMzhDQ0I4NjNGMjlCMEQ3ODcwOTBENkMyNDlFOUJFOTcxMzI3ODE1QjIyNkNERjlFODJDQjEyRTEyQzYxRDc3QzU4M0U2QjVGMzMzRUVGQTc4QUQzOTIzQzZBODZBMkQzMzU0MTI1NjFDMUNDMkEzMDUyOTdBMkI4REM2Q0RFMEMzNjI2Q0Y2NkRGRUNDRjE2MTM2MUU1ODg2RUU5RDgwM0Y4NzU1RAorNDQxNzg4MTgKKzAxMEVDNzAxMUQ3RjVCNzVGQTM4QzBGRjVDNDkKK0QxQUQ5OTZBQ0FGRDY0OUQyNTg4NUNDRThCNzkwQzY5RTU0NzM5NTQ1MkQ3NzhGMTlEQTYyQTgwNDkyMDQ1MjhBQTAzMDZDRjAzQ0M5NEM1MjBGOTk0OTYzQUIyRTg3MTA0NUIzM0YyQzBDMzI2OTU0MDY2OTAxNEFDNDMwMzhDODk5Q0NFRUQ3NkI0NzM4NUM0MjJGRTU4QzA3MjE0M0U4NTI3NEEzRDk5Q0Q0Rjg1NUI4OEYwOTAwRkY5QTg5RUNENzVEMDJBQTc0QjExMzYKKzBEOUVCNDQxCisyMThCRDRBOUQ2M0UwMzM1NzRGNUNGQjkzNworMUQzRkY1Mjc2ODNBQTZCNzY2REQ2RTlFMDc4ODc1MkZBRDg3RENGNjBCNTA0NEE1OTlFQjc3RDkxRjhGNEQyMTEzQTIyRDYwRUQ0RURBMUE5QkQ4ODFDNEVFNDFDRkFDOEI1NThBMTk3MjQ4OEQzM0E1MkZCRUU5OUU2NDkxMTlBOTg1NzAzM0M2NTE0MDFCNDhFNTU1MDUzRjlECiszQkMxRUJDMQorMURCOTI0RTdEMjg1RTA2MTJFMzE4MEU1MUYKKzE4MDBGRkIwMUMwOUE0RTQwNDU4RDIwOUE3QzkwQ0Y3QTUwMzcyOUI1RkMyODJFOTczQzZERkE1OEMyQTYyNkE3NUZENTA3RUI0Qjc2REQxNDBCNUVCNjI0NDAyNjJDRkY3M0NFRDgzCis3QzBERDk4NAorMjVBODcwM0QyNzA2Mjk1MzNDQ0VBNkMxNDREQgorQUMxRkMzOUQxNDJDREI1N0Q5NDNEMjI5OTRGNEQ5OEUyRjcyODlBNDVFODcyNUI3N0JGQzg2MEVGQTdCNDJENzMxQjJCODQyMEQyNjVBODhENDJDNDdBMDYxMDUwMzc5NUY0MTI4REQ5RDE2MzMxNzVDN0JCNTg2OTk4MkFCQTc4ODY1MDA4MzE2RURENUE1N0ExMThCMzNFNENFNzE5OUU2NDM0QUM0QzJFMzJDRTZDMzVCQ0Y4MUEyNzA2Q0Q2OTMyOEJBQTBEMDcxMkQKKzU3ODk4REI4CitCMTI2MTk2MTVCQUY4RkNGMjI4MEJGQTA3RAorNzcxNzhGMTA1MDY0NkZDRDlCRkQ0RDUyRTA5Qjk4NjExNDY1RjdCQUMyRjg2NDE1NzQ2MkQzODc4MTU1MDkzMjA0QzIzNDE3OTNBMDRCMjM4NzM4NkNBOTIyQ0MzMDEwMDVGQjQwNDMxQjk2MjBBMEVEMUIwQkQ3NEREQkNCRTAzMkNFNTk3NTU4N0EKK0VCRUNDNkIyCitFNjhFODQ3OTc0MDgxQTUxQTkyMzM2MUVDQ0M4CisxMTUyMTM5NEU5OTA0QzUzRTk3NTg3QzBDNDVDRjM5NTgxMzFFMEUzNjdEQzYzMjY4QzA5QjM3MUM2NzI4MUZBOUFBRjJDNUVFM0RDOUFGMzdFQjMwOTBBNEYyREUwQTQwRUQ3RTZEQTAzQzIxRjA4M0Y5NjQ5NkNFRTlDRjQzMjg1MzhCM0ZDMUI2MUIyQjcxRENGNTYzN0EyRTVDNTIyQ0RFOTlDN0VGMjk2OEIwMkI5ODQxQTc4RjY5M0Y4QjAzQUZCMDU4NEI5NEU0MTY5MjlBNzBGNDU4MkRDQUVDM0UwCitCMzlGNkY1NAorMjJFMEJGQTg5MTRDNEUzMUFDQTM3MUE1MUYKKzY0Q0RDNEUwQzJDMzYwNURGRDc2OUYwRDg0MUUyQkNDNjFFRkJFMTNFNUIyRUIyREI2RTY1OEFCOEQzNzYzREYyMjA5M0Y2NkRCQjBGODVDMDYwMDEzRUQ3Q0IyQ0M5OUUxOUE5QUU0MUFEREFBRURENDc1NEVFQTJDMzgzRjMyQzM4M0M1NkFGNTE3OUQwMTQ5MTRFQkVFNTk3NEY2NkFEQ0UwNEVDRDMwMTlEQ0FFNzkKKzhGM0U4REU1CitBOUUxMEI1NEUzMEVDMUVBNjhBN0ZDNDA4RUM2CisyNUUzMTBEQUY1RTY0QjlEQ0VFRDE3NTc3RjhDRjE0MEEyOUUyQUI2NjgyNDMxMzFFMjc4N0REODIwNzhCQjZBNzk0QURENTcyQzkxQ0Q3NUQwN0JBNzA0NjcwM0IxNTcyNkMzMkQ0N0M1NzU3Q0VBMkY5OTI3QzgxMDg1Q0ZGRUI1RENENENGMTRFQzRFMzQwNUFFQjlGN0I5REM0NTYxREZBMkEyREFBOTA5RTNDQkZDMzE5QUE4QkE3QjI0N0MyNzVFRkQ0ODM5N0Q0NEM4RjJCMTY4QTE1MTVCQjBFQjVGQjlENDc5NThBNkFGNDlFQQorNTM1MTcyQzYKKzczNDJEQjMxNUE2MzYxMjYzNEUzNTk3MDFDCitGODIxMzgzQjFCQUQ0Q0VCOThEMTBFQzI4NDc3RTc2NEU3MjE3NkRGOTJFQUE0MUI2QzJEQ0UwNjJCM0VBOTdGMjdFRUM4QzA5MTgwNDdENkY3OTcxOERFQUVEMDFGNEFCOEYyNUIwMzNGQzdBQzVDMTg5Qjk4QzYzQjY5NzQwMzMyQzdDRkE1Cis1RkRGQUMxMworQjlEQTA5QjgyOTY1NDE4OUVBNTlGQTlGODc0RQorMzFFQzM3MEMwRDAyRUU0RQorRUY1MkNCQjQKKzQ4NDM5NTJDRkQ2ODdGNkM2RTI5MDM5MDk1M0Y1NkIzMDA4NjZDQzMzNDNDNEMyNkI1QzM1MjAyRkFERjNCMzM2ODcwCitFMjFGM0FEOUIxQzY0RTYxRTgwNDFGNzUxQTZDRUQwRUU2QTI2RDc5QUUyOTM0QkM3ODQ4ODIzRTEwM0JERkM2MzU3QjI1ODdGODQ4CisyOUE1NkJCM0FCNjZGMjU2MTQxRUEwQzg0NjYyODQzNUEyODkwMDZBMjQ1OUFBMUUwN0YxNDIKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAxMDEgcHV0CitkdXAgMyAvQzAxMDQgcHV0CitkdXAgNCAvQzAxMDkgcHV0CitkdXAgNSAvQzAxMTEgcHV0CitkdXAgNiAvQzAxMTUgcHV0CitkdXAgNyAvQzAxMTYgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTMzIC0xMyA3NTcgNzIzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MkNBNUFBMTE1ODZEQ0ZGNDdEODcwQzVGRUI5MjlFQzVDOQorOEI3QUNEMjg3MUU0QTlGNjlFOEU4N0VBCitFRjIyRDFFNjA3NEY3QTAxMjQKK0YxRkM2NUExCiszMTY0MjUzNDM5MDk5MjQ4MTk5ODgzMjI5QzU1Cis5OEUyNTc0RjNBQTc1MjBDMjQyODAyNTkzMThDMEE0QTEwQjFEQURDM0I0QzI1RTBGNUMyODM4MTI3ODhGNTU2OEJCQzdFMThGN0FGQkQ4Qzc5MzFCM0UyRDJFOTM1OTA5MkQ1M0JDM0NGRjREREY2NDk5MjExN0ZBMDUyMzNENjI3RDA4QzRDRDYzNUQwRkFGNEYzRkRCQzlGQjg0OTdBRjU1OTU3NUU5Qzc2MDc4RjA2N0VBNkMxMTYwOENBQ0ZDMDk1MDYwRTNBCisxQjFDRkZCQworRDIwQjlCOUMwNjBEQjlFRTlCRjExMDY0OTg2RAorREE1M0E3N0ZDNkQ5NzJGODU3MTRGRkNBQ0YzODg3RjNFM0M1M0ZFMjAwRUU3QTg3QzE0QUYzRTVEN0M0M0I1ODFGRUI1NzBCODhFMzRBMDZFMUU2ODJBQzg3M0M5QUVDMENDNTM3QjgwMTIzMjg1RkIyNkNGQjgyREFERjkxMEM4MTNEQTcyQzlENUNEQURERjQ1NUIyRUMxQkIzQURBMzM3MUE3NzE1QjEwMDhENkFFRjczQjcwQjE5MTMwQjg1QTdFRjUwOTM3MkFCQTcxOEM0RkUzRjMxMjc5QTA5NUIwRDlFNUY5NzY2RTk5NDZGQjk4OUZFREE3MDlDCis2ODUwCis2MzFBNURENEUzNzg1NkM1MkE5NDc0RjFEN0NDNDNGN0M0QkZEMzRBNTYyNTY0OTc1MzIyQkYKKzA5QUE2RjYwCis2RUQ1RENDRTg3OTJDQURGNEQ0M0UxRjVBQzA0Cis3QTgyMDRGNDE3QzRFN0JEMTlGNkZGRkQ3RkQ1NzVEMjc0MkFGMTI4NTdFRkRBMkVGNUEwODJDMzJGNThDMTg1NjFCOUJBNzFCQ0IwMkRCMzM2NzdDNzRCMTVDQzEyNjM4OTE1Q0Q1RjY2MTcyNEI0QUIwNDJDMjM2MkY5NkRDQjhDQUMyNTlGQjIxNkUyOTUyREFGQjlEM0U3NDg1N0I5NUE3QjAxRDUxQjUyNTcyMDQ1MTdDMUQ4OTFCMDFCQTk3QUE2MDAwMEY2REVFRjI3ODYwNkFBMkRCRTdFOEEwRkZCRDRDOEFCOEJGQkM5QzdFNTEzMjkzMzY1NUEKKzlGMzEKKzI2RTE2MDcyRjdBOTBGQ0NDQTVEOUQzRDJEOTkxQkZERTQzODNDNEZGQUVFMTE2MTgwOUQ3NjVDQkI4QjYyMkNERDYyOUU2RjE4MEQ3NzNBNkYyNjVBNUIyNkEzMkREN0E2QTNENTUxNzFDQTNBNkM0RDM1RjkyNTc0RDA2N0ZFNUU1RjhDMjEwODY4RkI1M0Q4QUFFNAorRUQ1MENBQTgKK0RERDVFNkRBRkU5MTE3RTdBRjg4QkU2REMxCis5MUEzRkI1QTUwMzlGOTNCOTRERTREQkVFNDQ1MjFEOTUzOUUzRDUzQzdDQzQ2NTZERDBEMjZFNjBCODQzNEQ2MkUxQjBEODAyNENCQjQ5Mzg1QTFENzFFMTY2NDU3NjBBRjBCNzFCNzNFOEJCMUE4NzZDQTUwRTY5MjAyQ0UwNEZDQ0E0QUIxOEMzMUU1MUVDRTFBMjM3MzlBQjg2NjQ3REIzMEZDQTlDQzE3REYyMzcxREI0NjVEQ0NFRTgxCis4OTREMzhGQgorM0JGNkFEQTEzNjVGOUZFOTkzMjQzOEIzOTk4NAorOEI4RjBBNjkyRDUxOUI2ODMzREE0NTI0NkZFRjlEMzg0OTM0NzNCN0MyOTVFODIzMDcwNDBBMDBDMzRERUQ2RDUwNzVFODM1NUZEQUIxMDUwNTE3NEYxNDI1MDlCMjJFNzU1QTQwNzI3QjlENkY4NUI0NkM4RDcxM0Y0QzFBQTlBNzk5OTU1OUZDNzJGRDhBREQ3MUE4MUEyQjQzMEI5QjdGNzE0M0UxRDQyN0QyQjAyQzAyREU1QTE1ODczNzJERTBBMEQ2NkQ2MjhCMTMyMDRDMUZERTBBNTA4OEVCMjRCQjgzQTU5NEFCQ0UKKzIwRDcxNjAyCis3NDdDREEzNDk2OEUwODJDNkEwN0Q3NjhDRgorRkFCNENCOTZFRTcyNjQzMUNGMTUyMjdBNkVFOTYxQUMxODEyRUQ3RjNCQzU2N0VGRkE3MkRCMTY5QzlDRkY2ODc1MTM4MDkyMjUwRUIxRkYzMTg2QUJEMERGNjc1RUQ5M0QzNTI2MEM1RTFEMkIxQzBEODk0RjVDRERGMTU5Nzk4ODk4OUU2QzdCRjEzOUZBM0Y0NDFGRDk5NjczRkRCNkQ4MTU2QzIwQzYyNTRCCitDRjJDRDVEOAorNDBFM0E0NTU1MzdEMThBRUJCQTBBQTJFRjE5MworQUQxRThGMTRCODgxRDVERAorQzZGREQwQ0YKKzNEMkI2MTQzQTdCQzg5M0NGODVERjIwOEQ5MjUwM0IwMDlGQTQ2OUY0MjNDODJGRjZCN0U3M0FCMTU1RUVFRjI3MUJGCis1MUIzRDFFMTk4QjRCMUNCMDFGMjVDM0FEQ0MwRkU2OEE1MENCMkIxQTQzRDJGM0RDOTBBMzJCNEM5RjczQUY4MDlGNzQzRjlFNjZGCis2NzZDRkJDNjhDNjMzQTM0OTU0RDc4Rjg0MjlDNTU1OUU3QkI1QjFERUY3NTU1QjAxODZGODUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmkgMTIuMDAgL1BTT3dzdGR1dGNoaSBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0YiAxNC4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDFiMmIzOTM1MmIzNzJjMGYwMTExMDExMjJiMzMyOTJlMzIyNzM3MzAwMTJjMzQzNzAxMWEyYjI3MzgzYTM3MmYzMzJkMDExYjJiMzkzYzM0MzczMDAxMWQ+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MmIzNzJjMzQzNzMyMjczMzI5MmI+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDBjMGE+IDkzNDYgMTMzMDAgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyODAgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI4MCA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjgwIDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI4MCAzIDcxMzMgMzIgcword3N0OmR1dGNoMTRiIFNGCis8MGQxNDEzMWUxNzFhMTk+IDEyNzEgMTQ1OCAwIDIwNTUgLTEgcworPDAwMDUwMzAwMGIxZTE2MTQxYzAwMGExNDFlMWIxNDFjMTUwMDFlMTQxZDFlMWQ+IDIwNTUgMTQ1OCA0IDQ0MjQgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDExMzUyNzM3Mzk+IDEyNzEgMjA4NiAwIDE4MDUgLTEgcworPDAwMmMzNzM0MzIwMDM5MmUyYjAwM2EzODNhMjczMTAwMzUyYjM3MmMzNDM3MzIyNzMzMjkyYjAwMzkyYjM4MzkzODA3MDAzMzJiMzkzNTJiMzcyYzAwMjkzNDMzMzkyNzJmMzMzODAwMzgzNDMyMmIwMDM5MmIzODM5MzgwMDM5MmUyNzM5MDAyOTI3MzMwMDI4MmIwMDNhMzgyYjJhMDAzOTM0PiAxODA1IDIwODYgMTQgOTUzMSAwIHMKKzwzODM5MzcyYjI3MzIzMTJmMzMyYj4gMTI3MSAyMzMwIDAgMjIyMyAtMSBzCis8MDAzMjJiMjczODNhMzcyYjMyMmIzMzM5MzgwOT4gMjIyMyAyMzMwIDEgMzYyMSAwIHMKKzwwMDIwMmUyYjM4MmIwMDM5MmIzODM5MzgwMDM3MjczMzJkMmIwMDJjMzczNDMyMDAxMzFkMjEwMDM3MjczOTJiMDAyOTI3MzEyZjI4MzcyNzM5MmYzNDMzMDAwNDM1MzcyYjM4MmIzMzM5MDUwMDM5MzQwMDJlMzQzODM5MDAyZjJhMmIzMz4gMzYyMSAyMzMwIDExIDk0NjEgMCBzCis8NDE+IDk0NjEgMjMzMCAwIDk1MzEgLTEgcworPDM5MmYyYzJmMjkyNzM5MmYzNDMzPiAxMjcxIDI1NzUgMCAyMDgzIC0xIHMKKzwwMDA0MmMzYTM5M2EzNzJiMDAyYjMzMmUyNzMzMjkyYjMyMmIzMzM5MDUwOT4gMjA4MyAyNTc1IDIgNDE4MSAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA3MGMwZjAwMWMxMTFlMTQwMDEzMTExODE3MTIxYzExMWUxNzFhMTk+IDEyNzEgMzA2MiAyIDMxODIgMCBzCis8MGEwYjBlMDg+IDEyNzEgMzQ4NCAwIDE4NjYgLTEgcworPDA2PiAxODcwIDM0ODQgMCAxOTI4IC0xIHMKKzwwMD4gMTkyOCAzNDg0IDEgMTk2NCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAxZD4gMTk2NCAzNDg0IDEgMjEyOCAwIHMKKzwzNzJiM2IyZjM0M2EzODAwMzcyYjNiMmYzODJmMzQzMzM4MDAzNDJjMDAzOTJlMmIwMDMyMjczMzNhMjczMTAwMzIyNzNlMDAyZTI3M2IyYjAwMmEyZjM4MjkzYTM4MzgyYjJhMDAzOTJlMmIwMDE3MWQwMDMwMmIzNzMzMmIzMTAwMmYyYTMxMmIwMDI5MzQzYTMzMzkyYjM3MDkwMDIyPiAyMTI0IDM0ODQgMTMgOTI5NiAwIHMKKzwyZjM5MmU+IDkyODggMzQ4NCAwIDk1MzEgLTEgcworPDM5MmUyYj4gMTI3MSAzNzI5IDAgMTU2MSAtMSBzCis8MDAzNzJiMzEyYjI3MzgyYjAwMzQyYzAwMTcxZDA4MjEyMzAwMGIwYTA5MGEwNzAwMzkyZTJmMzgwMDMyMmIyOTJlMjczMzJmMzgzMjAwMmUyNzM4MDAyODJiMmIzMzAwMzcyYjM1MzEyNzI5MmIyYTAwM2MyZjM5MmUwMDI3MzMwMDJiMzYzYTI3MzEzMTNlMDAyNzI5MjkzYTM3MjczOTJiMDAzNDMzMmI+IDE1NjEgMzcyOSAxNCA5NTMxIDAgcworPDI4MjczODJiMmE+IDEyNzEgMzk3NCAwIDE3OTEgLTEgcworPDAwMzQzMzAwMmYzMzJjMzQzNzMyMjczOTJmMzQzMzAwMzcyYjM5M2EzNzMzMmIyYTAwMmMzNzM0MzIwMDM5MmUyYjAwMzUzODM5MjczOTA0MDUwMDM4M2UzODM5MmIzMjAwMjkyNzMxMzEwOTAwMjAyZTJmMzgwMDI3MjkyOTNhMzcyNzM5MmIwMDM1MzgzOTI3MzkwODI4MjczODJiMmEwMDMyMmIyOTJlMjc+IDE3OTEgMzk3NCAxMiA5NDYxIDAgcworPDQxPiA5NDYxIDM5NzQgMCA5NTMxIC0xIHMKKzwzMzJmMzgzMj4gMTI3MSA0MjE5IDAgMTcwMCAtMSBzCis8MDAyZjM4MDAwNjMzMzQzOTA2MDAyNzNiMjcyZjMxMjcyODMxMmIwMDJmMzMwMDE3MWQwODIxMjMwMDBlMDkyMzA3MDAzMzM0MzcwMDJmMzMwMDMzMzQzMzA4MTcxZD4gMTcwMCA0MjE5IDkgNjE4NSAwIHMKKzwwMDM0MzUyYjM3MjczOTJmMzMyZDAwMzgzZTM4MzkyYjMyMzgwOTAwMTU+IDYxODUgNDIxOSAzIDgwMzkgMCBzCis8MzQzNzAwMzkyZTM0MzgyYjAwMzgzZTM4MzkyYjMyMzgwNz4gODAzMSA0MjE5IDIgOTUzMSAwIHMKKzwyNzAwMTMxZDIxMDAzYTM5MmYzMTJmM2YyNzM5MmYzNDMzMDAzMjJiMjczODNhMzcyYjMyMmIzMzM5MDAyODI3MzgyYjJhMDAzNDMzMDAzOTJlMmIwMDNhMzgyYjAwMzQyYz4gMTI3MSA0NDY0IDggNTgxNiAwIHMKKzwwMDQwMzEzNDM0MzUyYjM3MzgwMj4gNTgxNiA0NDY0IDEgNjcyNyAwIHMKKzwwMDJmMzgwMDJiMzIzNTMxMzQzZTJiMmEwOTAwMTQyNzI5MmUwMDM3MmIzNjNhMmYzNzJiMzgwMDI5MjczMT4gNjcyNyA0NDY0IDUgOTQ2MSAwIHMKKzw0MT4gOTQ2MSA0NDY0IDAgOTUzMSAtMSBzCis8MmYyODM3MjczOTJmMzQzMzA5PiAxMjcxIDQ3MDkgMCAyMDQwIC0xIHMKKzwxODMzPiAxMjcxIDUwNTUgMCAxNDY4IC0xIHMKKzwwMDM5MmUyYjAwMjkzNDMzMzkyYjNkMzkwMDM0MmMwMDMzMmIzOTM1MmIzNzJjMDcwMDI3MDAxMzFkMjEwMDM3MjczOTJiMDAyZjM4MDAyYjNkMzUzNzJiMzgzODJiMmEwMDMzMzQzOTAwMmYzMzAwMjkzMTM0MjkzMDAwMmMzNzJiMzYzYTJiMzMyOTJmMmIzODA3MDAxYTE4MWQxZjAwMzQzNzAwMWExNTE5MWMxZDFmMDc+IDE0NjggNTA1NSAxNiA5NTMxIDAgcworPDI4M2EzOT4gMTI3MSA1MzAwIDAgMTU2OSAtMSBzCis8MDAzODJmMzIzNTMxM2UwMDJlMzQzYzAwMmMyNzM4MzkwMDM5MmUyYjAwMzgzZTM4MzkyYjMyMDAyOTI3MzMwMDI5MzQzYTMzMzkwOTAwMjAyZTJiMzcyYjAwMjczNzJiMDAzOTNjMzQwMDEzMWQyMT4gMTU2OSA1MzAwIDExIDY3MjQgMCBzCis8MDAzNzI3MzkyYjAwMjkyNzMxMmYyODM3MjczOTJmMzQzMzM4MDAzOTJiMzgzOTM4MDkwMDIwMmUyYjAwMmMyZjM3MzgzOT4gNjcyNCA1MzAwIDUgOTUzMSAwIHMKKzwzMjJiMjczODNhMzcyYjM4PiAxMjcxIDU1NDUgMCAyMTE5IC0xIHMKKzwwMDI3MzMyYTAwMmEyZjM4MzUzMTI3M2UzODAwMzkyZTJiMDAxMzFkMjEwMDM3MjczOTJiMDAyYzM0MzcwMDM5MmUyYjAwMzEzNDI5MjczMTAwMzgzZTM4MzkyYjMyMDkwMDE4MzkwMDJmMzgwMDI5MjczMTMxMmIyYTAwMTkxYzEzMjUxMzFkMjEwOTAwMjAyZTJiMDAzODJiMjkzNDMzMmE+IDIxMTkgNTU0NSAxNSA5NTMxIDAgcworPDM5MmIzODM5MDc+IDEyNzEgNTc5MCAwIDE2NDggLTEgcworPDAwMWUxNDFhMjUxMzFkMjEwNzAwMmYzODAwMmIzZDI3MjkzOTMxM2UwMDM5MmUyYjAwMzgyNzMyMmIwNzAwMmIzZDI5MmIzNTM5MDAzOTJlMjczOTAwMmYzOTAwM2MzNDM3MzAzODAwMzQzMzAwMzkyZTJiMDAzODNlMzgzOTJiMzIwMDM4MzUyYjI5MmYyYzJmMmIyYTAwM2MyZjM5MmUwMDM5MmUyYj4gMTY0OCA1NzkwIDE1IDkxNDEgMCBzCis8MDAwODE3PiA5MTQxIDU3OTAgMSA5NTMxIDAgcworPDI5MzQzMjMyMjczMzJhPiAxMjcxIDYwMzUgMCAyMTY1IC0xIHMKKzwwMDMxMmYzMzJiMDAzNDM1MzkyZjM0MzMwOT4gMjE2NSA2MDM1IDIgMzI1MiAwIHMKKzwxODMzPiAxMjcxIDYzODEgMCAxNDY4IC0xIHMKKzwwMDI3MzMyYTAwMzQyYzAwMzkyZTJiMzIzODJiMzEzYjJiMzgwNzAwMzkyZTJiMzgyYjAwMzkzYzM0MDAzOTJiMzgzOTM4MDAyNzM3MmIwMDM0MzMzMTNlMDAyNzM3MjkyNzMzMmIzMTNlMDAyZjMzMzkyYjM3MmIzODM5MmYzMzJkMDkwMDE3MzQzYzJiM2IyYjM3MDcwMDM5MmUyYjNlMDAyOTI3MzMwMDI4MmIwMDNhMzgyYjJhPiAxNDY4IDYzODEgMTUgOTUzMSAwIHMKKzwzOTM0PiAxMjcxIDY2MjYgMCAxNDU2IC0xIHMKKzwwMDJkMzcyYjI3MzkzMTNlMDAzODM1MmIyYjJhMDgzYTM1MDAzOTJiMzgzOTAwMzgyOTM3MmYzNTM5MzgwOTAwMWU+IDE0NTYgNjYyNiA1IDQ0MzMgMCBzCis8MmIzMjJiMzIyODJiMzcwMDM5MmUyNzM5MDAyYzM0MzcwMDEzMWQyMT4gNDQyNSA2NjI2IDMgNjU0NiAwIHMKKzwwMDMyMmIyNzM4M2EzNzJiMzIyYjMzMzkzODA3MDAyZjM5MDAyZjM4MDAzMzJiMjkyYjM4MzgyNzM3M2UwMDM5MzQ+IDY1NDYgNjYyNiA1IDk1MzEgMCBzCis8MjYyNjI5MjczMTJmMjgzNzI3MzkyYjAyPiAxMjcxIDY4NzEgMCAyMjYzIC0xIHMKKzwwMDM5MmUyYjAwMTMxZDIxMDAzNDM3MDAyYTJiMzkyYjM3MzIyZjMzMmIwMDJlMzQzYz4gMjI2MyA2ODcxIDUgNDc0NiAwIHMKKzwwMDJjMjczODM5MDAyZjM5MDAyOTI3MzMwMDI5MzQzYTMzMzkwOTAwMjAyZTJmMzgwMDM1MzczNDI5MmIzODM4MDAzOTI3MzAyYjM4MDAyNzM5MDAzMTJiMjczODM5MDAyYzM0MzczOTNlMDAwNDBkMGEwNT4gNDc0NiA2ODcxIDExIDk1MzEgMCBzCis8MzgyYjI5MzQzMzJhMzg+IDEyNzEgNzExNiAwIDE5NzkgLTEgcworPDAwMmMzNDM3MDAzOTJlMmIwMDMxMzQyOTI3MzEwMDM4M2UzODM5MmIzMjAwMjczMzJhMDAyYzM0MzczOTNlMDAwNDBkMGEwNTAwMzgyYjI5MzQzMzJhMzgwMDJjMzQzNzAwMzkyZTJiMDAzNzJiMzIzNDM5MmI+IDE5NzkgNzExNiAxMSA3MjIyIDAgcworPDAwMzgzZTM4MzkyYjMyMDkwMDFjMzMyYjAwMjkyNzMzMDAzODI3M2IyYjAwMzkyZTJiPiA3MjIyIDcxMTYgNSA5NTMxIDAgcworPDM3MmIzODNhMzEzOTM4PiAxMjcxIDczNjEgMCAxODYyIC0xIHMKKzwwMDM0MmMwMDM5MmUyYjAwMTMxZDIxMDAzOTJiMzgzOTM4MDAyZjMzMDAzODJlMmIzMTMxMDAzYjI3MzcyZjI3MjgzMTJiMzgwMDI3MzMyYTAwMzkyZTJiMzMwMDNhMzgyYjAwMzkyZTJiMzIwMDI3MzgwMDI3MzcyZDNhMzIyYjMzMzkzODAwMzkzNDAwMzkyZTJiMDAwODI5MDAyNzMzMmEwMDA4MTM+IDE4NjIgNzM2MSAxOCA5NTMxIDAgcworPDI5MzQzMjMyMjczMzJhPiAxMjcxIDc2MDYgMCAyMTY1IC0xIHMKKzwwMDMxMmYzMzJiMDAzNDM1MzkyZjM0MzMzODA5MDAxZD4gMjE2NSA3NjA2IDMgMzUwOCAwIHMKKzwyNzM4MzgyZjMzMmQwODJmMzMwMDI3MDAzNzI3MzkyYjAwM2MyZjM5MmUwMDM5MmUyYj4gMzUwMCA3NjA2IDQgNTc0MCAwIHMKKzwwMDA4MjkwMDM0MzcwMDA4MTMwMDM0MzUzOTJmMzQzMzAwMzkyYjMxMzEzODAwMzMyYjM5MzUyYjM3MmMwMDM5MmUyNzM5MDAzZTM0M2EwMDI3MzE+IDU3NDAgNzYwNiA5IDk0NjEgMCBzCis8NDE+IDk0NjEgNzYwNiAwIDk1MzEgLTEgcworPDM3MmIyNzJhM2U+IDEyNzEgNzg1MSAwIDE3NzMgLTEgcworPDAwMzAzMzM0M2M+IDE3NzMgNzg1MSAxIDIyOTkgMCBzCis8MDAzOTJlMmIwMDEzMWQyMTAwMzcyNzM5MmIwNzAwMzgzNDAwMmYzOTAwMjkyNzMzMDAzODMwMmYzNTAwMzkyZTJiMDAyOTI3MzEyZjI4MzcyNzM5MmYzNDMzMDAzODM5MmIzNTM4MDkwMDE1PiAyMjk5IDc4NTEgMTEgNjgwMCAwIHMKKzwzNDM3MDAyYjNkMjczMjM1MzEyYjA3MDAzOTJlMmIwMDJjMzQzMTMxMzQzYzJmMzMyZDAwMjEzMzJmM2Q+IDY3OTIgNzg1MSA0IDk1MzEgMCBzCis8MzgyZTJiMzEzMT4gMTI3MSA4MDk2IDAgMTY4OSAtMSBzCis8MDAyYzM3MjcyZDMyMmIzMzM5MDAzYzJmMzEzMTAwMmEyYjM5MmIzNzMyMmYzMzJiMDAzOTJlMmIwMDMxMzQyOTI3MzEwMDEzMWQyMTAwMzcyNzM5MmIwMDI3MzMyYTAwM2EzODJiMDAzOTJlMjczOTAwMmMzNDM3MDAzODNhMjgzODJiMzYzYTJiMzMzOTAwMzkyYjM4MzkzODBmPiAxNjg5IDgwOTYgMTMgODcyNCAwIHMKKzwwMz4gMTM5OCA4NDQyIDAgMTUwNCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMD4gMTUwNCA4NDQyIDEgMTU1NyAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTkxYzEzMjUxZT4gMTU1NyA4NDQyIDAgMjI4NCAtMSBzCis8MTE+IDIyNzYgODQ0MiAwIDI0MzkgLTEgcworPDIwMTQxMD4gMjQxOSA4NDQyIDAgMjg4MyAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwxMDA0MWExYjFlMDQxOTE0MWUxYjE0MWMxNTA0MTkxNDFlMWIxNDFjMTUwMDAyMWUwMD4gMjg4MyA4NDQyIDIgNTA3MSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTkxYzEzMjUxMzFkMjE+IDUwNzEgODQ0MiAwIDYwODcgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MTA+IDYwODcgODQ0MiAwIDYxNDAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMz4gMTM5OCA4Nzg5IDAgMTUwNCAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwMDA0MWExYjFlMDQxOTE0MWUxYjE0MWMxNTA0MTkxNDFlMWIxNDFjMTUwMDAyMDkwMD4gMTUwNCA4Nzg5IDMgMzc4NSAwIHMKK3dzdDpkdXRjaDEyaSBTRgorPDA2MDUwNDAyMDMwNTA2MDcwMD4gMzc4NSA4Nzg5IDEgNDY1NCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAyMTMwMD4gNDY1NCA4Nzg5IDEgNDk3NyAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDMxOTFjMTMyNTFlPiA0OTc3IDg3ODkgMCA1ODEwIC0xIHMKKzwxMT4gNTgwMiA4Nzg5IDAgNTk2NSAtMSBzCis8MjAxND4gNTk0NSA4Nzg5IDAgNjIzMiAtMSBzCis8MjQ+IDEyNzEgOTEzNSAwIDE0MzMgLTEgcworPDM0M2E+IDE0MDcgOTEzNSAwIDE2MzkgLTEgcworPDAwMzgyZTM0M2EzMTJhMDAzNzJiMzIyYjMyMjgyYjM3MDAzOTJlMjczOTAwMTMxZDIxMDAzNzI3MzkyYjM4MDAzYzJmMzEzMTAwM2IyNzM3M2UwMDJjMzczNDMyMDAzODNlMzgzOTJiMzIwMDM5MzQwMDM4M2UzODM5MmIzMjA5MDAxNjJiMzMyYjM3MjczMTMxM2UwNzAwMzkyZTJiMDAyODJiMzgzOT4gMTYzOSA5MTM1IDE0IDk1MzEgMCBzCis8MzkzNzI3MmEyYjA4MzQyYzJjPiAxMjcxIDkzODAgMCAyMTgwIC0xIHMKKzwwMDI4MmIzOTNjMmIyYjMzMDAzOTJmMzIyYjAwMjczMzJhMDAyNzI5MjkzYTM3MjcyOTNlMDAyZjM4MDAzOTM0MDAzNTJiMzcyYzM0MzczMjAwMzkyZTJiMDAyOTI3MzEyZjI4MzcyNzM5MmYzNDMzMzgwMDM0MzMyOTJiMDAyZjMzMDAyYjI3MjkyZTAwMzgyOTM3MmYzNTM5MDAzNDM3MDAzODJiMzg+IDIxODAgOTM4MCAxNSA5NDYxIDAgcworPDQxPiA5NDYxIDkzODAgMCA5NTMxIC0xIHMKKzwzODJmMzQzMzA5PiAxMjcxIDk2MjUgMCAxNjk1IC0xIHMKKzwwMDIwMmUyYjAwMmEyYjJjMjczYTMxMzkwMDM4MjkzNzJmMzUzOTM4MDAzNTM3MzQzYjJmMmEyYjJhMDAzYzJmMzEzMTAwM2EzODJiMDAzOTJlMmI+IDE2OTUgOTYyNSA3IDUzMDEgMCBzCis8MDAxOTFjMTMyNTEzMWQyMTAwMjczMzJhMDAxZTE0MWEyNTEzMWQyMTAwMzkyYjM4MzkzODAwMzkzNDAwMzcyYjJhM2EyOTJiMDAzOTJlMmI+IDUzMDEgOTYyNSA3IDk1MzEgMCBzCis8MzkyZjMyMmI+IDEyNzEgOTg3MCAwIDE2NzcgLTEgcworPDAwMzQzYjJiMzcyZTJiMjcyYTAwMzQyYzAwMTMxZDIxMDAyOTI3MzEyZjI4MzcyNzM5MmYzNDMzMDk+IDE2NzcgOTg3MCA0IDQzOTIgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYTBiMGUwOD4gMTI3MSAxMDIxNyAwIDE4NjYgLTEgcworPDA2PiAxODcwIDEwMjE3IDAgMTkyOCAtMSBzCis8MDA+IDE5MjggMTAyMTcgMSAxOTY2IDAgcword3N0OmR1dGNoMTIgU0YKKzwwMDE1PiAxOTY2IDEwMjE3IDEgMjEzNSAwIHMKKzwzNDM3MDAyNzI5MjkzYTM3MjczOTJiMDAxMzFkMjEwMDNhMzkyZjMxMmYzZjI3MzkyZjM0MzMwMDM0MzMwMDFhMWQwMDM4M2UzODM5MmIzMjM4MDcwMDJmMzkwMDJmMzgwMDA2MjkzNzNhMjkyZjI3MzEwNjAwMzkyZTI3MzkwMDMzMmIzOTM1MmIzNzJjMDAyNzMzMmEwMDMzMmIzOTM4MmIzNzNiMmIzNz4gMjEyNyAxMDIxNyAxMyA5NTMxIDAgcworPDMwMzMzNDNjPiAxMjcxIDEwNDYxIDAgMTc1NiAtMSBzCis8MDAzOTJlMmIwMDMzM2EzMjI4MmIzNzAwMzQyYzAwMzUzNzM0MjkyYjM4MzgzNDM3MzgwMDM0MzMwMDM5MmUyYjAwMzgzZTM4MzkyYjMyMDkwMDE1PiAxNzU2IDEwNDYxIDggNTUxOSAwIHMKKzwzNDM3MDAzODM0MzIyYjAwMzgzZTM4MzkyYjMyMzgwMDA0MTcxZDA4MjEyMzA1MDAzOTJlMmYzODAwMjkyNzMzMDAyODJiMDAyYTJiMzkyYjM3PiA1NTExIDEwNDYxIDcgOTQ2MSAwIHMKKzw0MT4gOTQ2MSAxMDQ2MSAwIDk1MzEgLTEgcworPDMyMmYzMzJiMmE+IDEyNzEgMTA3MDYgMCAxODQwIC0xIHMKKzwwMDM1MzczNDJkMzcyNzMyMzIyNzM5MmYyOTI3MzEzMTNlMDkwMDFjMzkyZTJiMzcwMDM4M2UzODM5MmIzMjM4MDAzNzJiMzYzYTJmMzcyYjAwMzkyZTJiMDAzYTM4MmIwMDM0MmMwMDM5MmUyYjAwNDAwODMzMDIwMDJkMzEzNDI4MjczMTAwMjkzNDMyMzIyNzMzMmEwMDMxMmYzMzJiPiAxODQwIDEwNzA2IDEyIDkyMzMgMCBzCis8MDAyNzM3PiA5MjMzIDEwNzA2IDEgOTQ2MSAwIHMKKzw0MT4gOTQ2MSAxMDcwNiAwIDk1MzEgLTEgcworPDJkM2EzMjJiMzMzOTA5PiAxMjcxIDEwOTUxIDAgMjAwNyAtMSBzCis8MDAyMDJlMmIwMDI3M2EzOTJlMzQzNzM4MDAyNzM3MmIwMDI3MzEzYzI3M2UzODAwMzEzNDM0MzAyZjMzMmQwMDJjMzQzNzAwMzgzYTM1MzUzNDM3MzkyYjJhMDAyOTI3MzEzMTM4MDAzOTM0MDAyYzJmMzMyYTAwMzkyZTJiMDAzMzNhMzIyODJiMzc+IDIwMDcgMTA5NTEgMTIgODA3MiAwIHMKKzwwMDM0MmMwMDI3MjkzOTJmM2IyYjAwMzUzNzM0MjkyYjM4PiA4MDcyIDEwOTUxIDMgOTQ2MSAwIHMKKzw0MT4gOTQ2MSAxMDk1MSAwIDk1MzEgLTEgcworPDM4MzQzNzM4PiAxMjcxIDExMTk2IDAgMTYzMCAtMSBzCis8MDAyZjMzMDAyNzAwMzgzZTM4MzkyYjMyMDk+IDE2MzAgMTExOTYgMyAyNzI2IDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDIxKSAyMQorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM0IHB1dAorZHVwIDMgL0MwMDQwIHB1dAorZHVwIDQgL0MwMDQxIHB1dAorZHVwIDUgL0MwMDQ0IHB1dAorZHVwIDYgL0MwMDQ1IHB1dAorZHVwIDcgL0MwMDQ2IHB1dAorZHVwIDggL0MwMDQ3IHB1dAorZHVwIDkgL0MwMDQ4IHB1dAorZHVwIDEwIC9DMDA0OSBwdXQKK2R1cCAxMSAvQzAwNTAgcHV0CitkdXAgMTIgL0MwMDUxIHB1dAorZHVwIDEzIC9DMDA1MiBwdXQKK2R1cCAxNCAvQzAwNTQgcHV0CitkdXAgMTUgL0MwMDU2IHB1dAorZHVwIDE2IC9DMDA1NyBwdXQKK2R1cCAxNyAvQzAwNTggcHV0CitkdXAgMTggL0MwMDY1IHB1dAorZHVwIDE5IC9DMDA2NiBwdXQKK2R1cCAyMCAvQzAwNjcgcHV0CitkdXAgMjEgL0MwMDY4IHB1dAorZHVwIDIyIC9DMDA2OSBwdXQKK2R1cCAyMyAvQzAwNzAgcHV0CitkdXAgMjQgL0MwMDcxIHB1dAorZHVwIDI1IC9DMDA3MyBwdXQKK2R1cCAyNiAvQzAwNzYgcHV0CitkdXAgMjcgL0MwMDc3IHB1dAorZHVwIDI4IC9DMDA3OCBwdXQKK2R1cCAyOSAvQzAwODAgcHV0CitkdXAgMzAgL0MwMDgyIHB1dAorZHVwIDMxIC9DMDA4MyBwdXQKK2R1cCAzMiAvQzAwODQgcHV0CitkdXAgMzMgL0MwMDg1IHB1dAorZHVwIDM0IC9DMDA4NiBwdXQKK2R1cCAzNSAvQzAwOTEgcHV0CitkdXAgMzYgL0MwMDkzIHB1dAorZHVwIDM3IC9DMDA5NSBwdXQKK2R1cCAzOCAvQzAwOTYgcHV0CitkdXAgMzkgL0MwMDk3IHB1dAorZHVwIDQwIC9DMDA5OCBwdXQKK2R1cCA0MSAvQzAwOTkgcHV0CitkdXAgNDIgL0MwMTAwIHB1dAorZHVwIDQzIC9DMDEwMSBwdXQKK2R1cCA0NCAvQzAxMDIgcHV0CitkdXAgNDUgL0MwMTAzIHB1dAorZHVwIDQ2IC9DMDEwNCBwdXQKK2R1cCA0NyAvQzAxMDUgcHV0CitkdXAgNDggL0MwMTA3IHB1dAorZHVwIDQ5IC9DMDEwOCBwdXQKK2R1cCA1MCAvQzAxMDkgcHV0CitkdXAgNTEgL0MwMTEwIHB1dAorZHVwIDUyIC9DMDExMSBwdXQKK2R1cCA1MyAvQzAxMTIgcHV0CitkdXAgNTQgL0MwMTEzIHB1dAorZHVwIDU1IC9DMDExNCBwdXQKK2R1cCA1NiAvQzAxMTUgcHV0CitkdXAgNTcgL0MwMTE2IHB1dAorZHVwIDU4IC9DMDExNyBwdXQKK2R1cCA1OSAvQzAxMTggcHV0CitkdXAgNjAgL0MwMTE5IHB1dAorZHVwIDYxIC9DMDEyMCBwdXQKK2R1cCA2MiAvQzAxMjEgcHV0CitkdXAgNjMgL0MwMTIyIHB1dAorZHVwIDY0IC9DMDEyNyBwdXQKK2R1cCA2NSAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yNTYgOTIwIDczOV0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIyNDNFMEVDNTkzNDRDRUYzNjk2NTBBMDM3QjQzODNCMDNENgorMjRDMzA2RTg3RUZERDQ3NzVFQzc4NzQyCitGRUZDRTQ0Qjc2NTU3NDQ2NkMKK0QxQUY3QTgyCitDRkUxOUZFQzA3MDU1MTcxODAzQkUzNUZCNjFGCitERkE1QTRDNzM5QTRFMzk1N0VCN0M2NjIzMzg0NEFDNTFBNkE5MUI0NUI3NUU2QUYxRjc2Nzc5QTRFQTM5RDU1NEM2NzFGMDM5RjZFQTA5MDJFRUFCQzEzMzYzQkREQTUxMDFDQTEyQkI4MTU2RUVDNUFGMEJGOUU2RkZENDFFM0U4Mjk3ODk1RTE1NTRGNTczMTRERTVFNUU3MEMzMkRBNDdGRDMwQTg1MjVEN0VFOUM2MDYwN0VEQjZGRDlGODE2QkJBOTQxNzI3NkY4NQorNjBGNUREQjQKK0EzOTQ4QjMzRUIyMkI4MjdERjY4MURCQjE5CisyOTkzQjU1M0M2RDE3MDc2QjRCOUZCMTkzQTc5QzhBMzZFRUNENUQ0RUYwRjUzMjQzNDI5MkRFRjk4QkMwQjdFRDc4RkQ4NDAxQ0JFODgzMjU4MDdBMzRCOUVDRTdEMzEyOTA4QjJCRDZBNTY1NDA5MERCNDZENjM3NDA2NjY4QworNTFGRjU4NkIKKzBBNDU1NzI3QzNEODIxRTUzNzlCMThFN0NGCis3M0EwQkU4NDNDQjg0MDVDQzQxQTc1QTgwNDg2REY5NTU5MTQwMUFCMjQ3RDlGQkFBRUU2RjFFRTU1QUZDQUIxNjczOUY5MkMxN0Y5REM0MzE3MzBBODQ3OTUwN0FGRDk1OUFDOTE5RjZBMTY5NzhDREQ0QzBEMTQ2N0Q2RTEKKzM5NjJEQzJBCitFQ0U2MDNEQkY3NDE3QzRBNUMzOTQwN0U3MQorRThBODFFREMxRkM2MjlBMUIwRDI1QjZCNUU3NEY0NTlENTQyRkRBOEQ2MEZCMEEzNTEyODJDOTVGMENBNUE5M0VCRUE2QTIyRTc2MkQ1NDU1NUIwNUIxODk4QkJGMTVEODBGOTRBODFERDJEMDhGRDE4CitBMjIwRDlGQQorNEUyMjgyQzZEMzZBOEQ2MTQ2QjkxQ0VFREIKKzU0RUIwODM4QjQ4ODBFRDBFNkFDNDU1RDFBQUUwNEM2NDRGODNDRjg0RTNDNTEKK0I5RDUzOTMxCis4QzcwRTFDMzdGOEI0NkM5M0I1NkU2Q0Y3OAorMEIzN0NFMzkzNjMxQTA5NkU2MjRCNUVGOTEzODhGNjlFRUEyQkUxNDA5QTJFQkJDRTU1RUI4QTI0MUYwRUQKKzFGMjlGOTE1CisxNTEzRUY1M0MyRDI4OTEyRkNGOTgwRDA1RAorODUzMzE1OEFGNzM3NjAxQzdBQ0QwMzI2MTVBOTgwNzZCMUE0RThBMjlFQjFGNzUzM0NEODhBRjEKK0I5MUM2OEQ1CisyOTJBODY2RjkxQjExMUEzOTE2QTM5OTZGMworRkVCMTQyMkNBNUVGOTM4QTVGQzgwRTFCMDk5NDNGQzBEMzZFMzdEMDI3MzlGRTRFMThGQjkxQ0EyOTQyNzc1Mjg0NEI2RTQ4RURFREUzRTM5REFCOTZERDU2NkNCOUVGOTVEOTM0OTU2N0IwOEY1Njc2RjY3OTgzNkY5MUVFQTExNjdFRDNCNUEzQkQwMjA0RUU5MgorRDkzRDBDRkUKKzhBNTY4MDk3RjVFRDc3MkY5QUM0MUFGRjc3CiswMDAwMUZDOEU2RkYwQ0ZDOEZGOTk2Q0U1REMzOTBEMzkzNjZFM0UwMTUzMDQ1MkNCNUQ5Nzc0NzBFMTVGNTZBNUM1REY2N0NCODFGMUQyODlGNDZERkMwQTE4MzEwNDVFMDhBRjc4MTJCMzY0NUY3MzVCMkRBREQzRTI4MTYKK0NGQUY3QkZCCis3NzVERURGRTlGMTE2MjUzRkUwRDEwRUQxNQorMTc0ODlDM0U3QkZCRUE4MDIwRjgyMkE4QjdCOUQ0M0NFNDc4ODFGNEE2RDVDM0I5NzNCNUYwMjFBNDIxNjA5MjQ3MjkxQ0U3Rjg0OUNGQ0U1NzIyQTkzQzE1RTQwRDFBODZBOEJCN0E2RUIyNjNEOEIxRDI0RUZBRjU3MUY4Q0ZBQkE0RDA4OUY0MDlEMkVBOTVEOTEzQjU4RUU4RkY0QkEwRTY1RDgzNDY4NDAyMEI1NzQ3CisyMkExMzQyQworMzZDOEUzRERFMkYzQjZGNEQxQ0JGMTQ5RjY0MworRUM2MDdFNjk5QTZBRDVGQzNENDQzMzM5MjY4OTcwRURCNzg3RUVFQkQzQkQ5RDlBMTg4NUY1NDY3MUYxOTI1NUI3NkRFRkQyMzFBMDEwQjY3ODFFNjE4NUNGRTQxRjczMTlBRjRBQUM2NTAzM0FFMTgxNTE2NEZDQjBCRDZFQjQzRTY2OTg5NThDNTgwMDA0MTVENEM3NEQ4NEVENEQ2NUI2OENCMEZDOUU4NUE3NkY2MjZBN0JEMkExMThGNThCN0Q3QURBQTk1OURBODJFREUxOTQ5NUY2RUE3OEU0CitERTRFOUUyNAorRThCRTA1RDVGQTU4N0FBODJDRjczMTlBQjgKKzEzRTJBMUVBNzM2MEMyQjRGNTc3RUZCODI3RjExREZGMERFRURCMEVCMkM4QzFFN0E3RjNDOEFDMjNFNDI2QTBENTdBMjYzN0ZGMjc0NjQ4NjU5QTk2MTUyMDZBQUZFMjMzRDk0MjZBRjBCNjJEODUxODAyCisxQUMyNDQ0NworRjRBODFFQ0Q1OTE3NjU4RDhBRDBFRTIxMTc5RgorREZGRjY1NUVGNEE0REYwRDE0Mzg3M0M2QjVCNzNDOERENDk4RENDNENDNzg0QkZGMjVBNDhEODc1RDBCMUVENUQ0ODdDRDNFNDQzRkUwNjkwMkQ4QjkyNDQ5QzVDOUZGRjFDOEM2RDFBNjAzMTRENTVGOTI0QzJGQzgxREYwRTgwOTBCODIzM0E5NTJDNTM2MjI5M0UyMzFCNTJBMDMxMzUyNEZCQjUwNDVBNzI5OTRBMzA2QzlCREU1Qzc4MDZENzM1NTJBMUYKKzZENzUyMjExCis5MzZEQUYwRjQ1OTUxNjQ1NEE4Q0I1QUJEQUIwCiswRTU3MjJFMjkyM0Y5RTA3MzU2MkZDMUExQTNDRUI4MTAzRjk5REYzRUE5MDdFOUM1RUM5RkI3MjM0MzU2QTcyNTBFRUNCRjFGRTRGMzdCMDZGOTNCNjFFNzk0QkM5NDJCNUVGM0Q5NTQ0Q0UwQzAwMTZBQjAyNDUzMTY5NDY5NDkwMzU2RkM4MDVFNTU0Mjk3Qzk2MzdGOTA3NTgzQzI0NTdGRUU2NTFERDM4N0U2MkMxQURFMDRDMTBGQjY3NERFQzhBNTdBQ0MwRkZFMDc5ODcxQkEzMzMwMEQ3M0U2RDQwNEQ5NjM3RTA0MTE4MjU2RTkwCiszQTQ2MzU0MworQzU4MTMzQkRCMEVGOUFGQzNCODFFOUQ5ODQ0MgorMkQ0MjgyMDAzOTZGRTEwMzU1QTE2QzEwNDEyRjY5N0E5OEEyMTE5NDhENTQzQzhFM0EyNzAxNEE2MkNDMUJBOUE3NzBBRkRGQTRBRjY0N0JBRDEyQkJBMzA0MzYxMkNBRUM4NThBRkJBNjlEQTBFOUMyM0ZDODAyREZGQjYxOUU3NDE1MDU2RjNCMTA2QTQ0RTg4NEJGNjk0MzZGOEEwOThENUI2NEYyNkY5NjM0Nzk4QkY5QURFNjkxMEMzMzUwMTMyMDk2ODNCOAorMTUyQ0U5OEIKKzE5NjkzRTQ1OUE0QjVBMEE4MTg3ODVFRDQ2CitCMjIwNUQ5QjE3MjUzMkJENUFDQThEOEFENEFCQzMzMThBNzBEREUxM0QwNUE1NDRENDhFMEU5MEVGNDczNjI1MUM1QThCRDQ4RUREMDYyMjk1MTM3NjlGODcxQzgyRDkzRTVEMTk2RDdGQjAKK0MyQjFFQ0E0Cis2OTg0ODBFRDc4NzZDQjA2NzA0NDAwRDBFMDc3CitBQTYzMjg1OENDOURCQjg0NEY4RTM2MjFBRjREQTU2RjJDQ0EwRDEyMkY2OUUxMjFERDc1N0ZCMUNCQzExM0YyM0MyNUQyRUVBQ0Y1NDE2MkU5NjM0NUEyMTkxOTI4MkY3MDRDQThCRTk4MUY3RDJFOTM2MDgzNUU3MEFCOTlDN0UyNzM4QzQwMkRBRTM1NDIxNkNDNTNGNzA1NjUxMUNCOTdGNUM2NDc0MzJEMEIyNEVFODY5NzFCOEZGQzM0QzAzMEQ4OUFFMDU3RUVGRkJFQ0Q1Njg1OEM1MkE2NjM5NTRGQzYzQQorMDEwNDExNjcKKzFGQzgxQTJFQTFBMEQzNDU2OEZDQzQ1MjFEQTIKKzg4NjRENzM1MUEwNTkxNzIzQzYyOTY2NDVCQzg1QTIzOUVDRUZCMTJCQUM3MUEwODE4OEU5RUIwMUMzNTg0Mzg4ODVCQkM4OUI3RDNDRjBBNjIwQzYyMjRFRkIyMzMwMERGNzIyMDBCQ0MyRUQ1QzZGNzU5ODcxQkU1REYyNDM5MTY3OTg2MTMzNERFQzYzMTg5MUMzREUyNTJFMkZCMjMxNkNEQjBFNTVBOTUzREZCNjBGODU1NEI3NDA2M0U0ODY1NTBCNDQ3RTQyNkY4NjE1QUE3MDdDMTVFQjhDMDNENzUyMDMyMDhGOTk4MzAxQTI2RUY5MzkwMjdGRQorODNDQworM0IKKzc2OUUxMEQzCis0Q0UxRTQyMUU3MjM4NDkxRUQ0Q0ExODU2RgorNTkxQTBDNjlGODdEQzZCMzZGMkUzQjNDRDMzODA2OEFFNDFGNjg2NzYyNDUxQjczQ0Y2NkVCOTZFNjhENjg0MjRFRjg1RDI1NkU5NDdGQTI5MjUxRkMzRjA4NERFMEFFN0Y4MEE2M0M2NThDMDlCRTZGRUU4RkI4Qjk4ODRFNzkyQUY2MjNBQ0Y3MTE1RkJDNENFQkVDOUVGNTRFMzE2MjgyNjVCRDk0NjE3OEFGOTJDNzQ0QTkyODM1RDA5RTc4NDQKK0Q1Rjk3Q0FGCis3QUM5MjE1QTU1MjBDRkE4MzU5NzZFOUExMworODEwOEY1Njc1NTFGMDZDOTM5MjM3NzgzMEQ5NDEyOUY0RTVCNzgzQzZCQjIxNUJDNTM5MzgwMTVFMEY1RjMwQUZCMjJFQjFDQ0VCOTZCQTU2NTU3RTYxRTdBRDREN0Y0QkU3QkExQTFCM0Y2NjZCOTgxNDE5MEZCQzFCRERDRTA3Q0U5NjE2QTY4MEZBMDI2N0Y2N0EyOTgyODU0Qjk5RUE0QzJGN0ExMzk0MjRDMUJFODdFOUQ1MDdDNUY5NjUxNzQxQ0UwCis5MjlENjkyQgorM0VCRUFDQkVGOTFGMkVFRjk4MTI2NUU5RDhCRAorQUM5MTk3RUNFMDZDQzhGNEZERUQ4RTIyMjgwRkFGRDdBRTJFOEE5QjMzQ0Y1NjU4QzY2N0JDNTBCRjE5OUEzQkU1RTU5NTA1NTFDM0E3RjlBNTA1MzMwMEVCMTRCQzE0NkFCNkYzREU4NDUyOEY1NDMwQTAzNEI2MzI5MTEzRDY0OEQzQTdCMDE0MUVCODAyQzBGNzhENzc5MTA2MzBDNzkzRDYyNkIxNEZEMTJCNUVBNDU1QUUzMTYyRDg1QTU5MDczNTIyMDhGMjlBRDU2MkI5OTIzMEE0NDJFRUZCRTlGQzM5RkY5RDVGMDZGNEI5MjI3QUJCMDM1RDA0Cis1ODQwNkM3MAorMUVGNzEzNDMwMzQ2MEYzNUEyQkI5ODYyRUU2NAorMzc4RTBGMjU3RUM2MUM3QzlGOTJGQzVGMjJDQTY5OEI3QTY0NTNDNEY1NTkyNTVCRTlGNjZENjZCMjMwRDRGQzlGNkMxNTkwNzMwRjhDRjQxQjgwMDZFQ0Q2QUFDMUE0OEIxMDBGOUMwNDRFQTEzMzU5QTA2NTk2NjM5NUY5MjRBMjE1Nzg2NEM1MzcyOUJCOEE3NDdCNDRGNDk0MTQ0RDMyOUYzREMyMjlFMzIwMDA3QzY4RjgwQzA4OERGNDA2MzVDRDAyMTg2NEIzNUUyRUQ1Cis0QTQ5MTMzMworRENEMTI5QTA1NTAxREMwN0ZERDkyNURDOTQyMgorMjRGODA4OUI2RDk3MUY3MkExNEQ2RTBBQ0Y4MTI1MTlBRDlCMDVEN0FCNDdGQjZBNkFFM0EwQzMxODJCMzgyQjI1QkMyNTBERDY4MTk4NjU0OTMzMEYyMTlENjkyNjYzNkUzQUUyQkU3MEFCM0NGMkFGNUEyMEI4MjUwNTBCNDU2NEQ5NzRBNjc0NkEyM0E0MzM5NzZDN0EwRTIwM0UwRkMwRDI5NDE5MzY4NzhEMEM1Mjc5MDEzQzVFOUYzQzQ3OUI4NTY5QTFENkFBODNBNjM0M0EyQTRERjVBMTA5QzUwREM2N0M4NEY3Njk2QjI2MzIyRQorNEVBN0JDNzQKK0ExRjYyNDVDQUY3NzAwMTQxMTUzNEE2M0I4CiswQ0FFQUNGMTQ0MDcxMzZGNTM4QkZFNzFGMjA5Q0JCMDlFNzVGNTgzNDYyNUZFNzA1RkU3RUI1ODVGOTA2OTE0RTI5RUVGRDhFMDNBODdDOUU4RUIyNzAwNjE0QkZBMDcxMTE0OEUxQzk0OTY1QUQ3REQyQ0IzCisyQTk2ODkwMgorQUE2RkE0NDZBODM0Nzk4NjA1QTBGRkIxREIKKzAwNDBBQzU4RDk2OEQ0QzIyQ0VGOEI0QzdFRDVDNDk1RDlDM0MxQkEzOUVCODJBRTlEMkVGODFEMjlCNkYxMTRGRURFN0VENjkyRDg4NjQ5QUJBRjFBOUFEQUNBNTg5MEU5RTIzMTUzQzUzRDI0Qjk2QUJEMTMwREZGRUNDRTAwMEU2RTNEQTU5RjBGOUEKKzdEREU4RUNCCis3MTEwM0Y3MUVDMkVERTU1QTYzNjQ1QUE2MEQ0CiswNEIzMTg3REE4QkE4MDA3MEE0QzIzQUU4MDExNDQzMEVBNjJBNDQyOEFEOUNBMDVFRURBMUJCMzFBNjE1NzZCNzUwNEEwMDY0MTkyREJEQUZCMkE5MjE3MjVEODhCMUU5NERDMjlBQjVCRTA3MTcyMkFFQzM5NUJCMDE0Q0UxMEJGRjg5QjhGMDdBNzE2NjcyQzM0NTREMDg5MjhGNUYwMzA4Njg1QzJDMjkyQjY1RTdCRTNERjQyQ0RFQjE3Q0FBRjBEMDJERDc5QzhCQTQwNzJGMjlEQTM2MTBDODkKK0QyRTIzMTY2CitFNUMyQTU2NjZCMkI3MDEyMDlCQzYyQjVBQQorRTFDNjFFNkExRkZBQkQ5ODkzQUQzMkM3NDkzRjhFRjY0NEI5MTM2NUNGMjhBRjRBM0E0MzA1NDdBRTVCMDMwMTQ3MDY1RUNERTJBQjYwRTdGRTg2MTA1MzFEMkM2MEFGNzI1MDA3NTc5QUY0NEQ5QTZFOTEyNENEMkQ0NzhENUY2NjQzMDE0OTNEN0Y3ODg2NEI3MDUyNTg0RjVCNDMxMzlGQzczNzM2RDQxQjA2OEFBN0RBMDc3RAorNzVFODE1OUQKKzQzMDQwOEFGRDQwOTY2MUZCQ0ZERkYyMUU5QUUKKzUzQTBFODMzRTFBOERDODEwNDVFMUNGMDkxQkMwNUIzNzRGQjk4NjBCN0VCQzVCNTI1RDc4MzQ1QTMxQ0IyREEwMjgzMkM4Q0ZFQTYwRkQxNjA3NTU1RDc0N0FBMDg2QUFGQjU1ODY3NDU5OTZGQkNCQzNEQjA1NjY0MkE3MDIyNTNBNzA3MEJCNjAzRTE1MkM5NzIzNkI1NEVGNzM1MDNBMDAzMTQ4NjA1NzFEMjU1MTRCRTNCQzZDRjQzODkyNjVCMUU5QjJFMUIyMTk2RTlGRDM2Cis0ODg1RjI5QworNUYxRTYxRjY5NjgxRjkxQjMxMzgxQUFDOEM3NgorNDJEQTA3RUY4QjUyNDg1M0VEMkQ1QjNCREFDREM3OEVBMUFBRTQyOTdCREUyQkRBQjUyQjAzNzU1MEQ1NTVBNjU5N0RERjVEQUI1OEM0NkIyQjdFMkNGMjZCMzI0MjhDN0M5OEVFRTUxQTFGRDk5OTI4NTU1REZGNzlBMTIyRTUxQUFGMUE2NTg5MEUzRjY1NEIwNjg0NjE1MUY4QjI4OUJGOTgxRTlCRTc5Q0MyMTE3MjI5Njk3OTE3MEVENUVGMzg5NzMxQjYzQjZERDEzMDFCNTgzNUQxMDBGQzdBNDEwMUQ2QkY3OTkyNUQ1NkJFNkRGMUJCMjkyQzcxCisyMkMyMDVBQQorMDQ0NTI1QUQzOEM5Q0IyQzBDRUUxQUI5MTBGRgorNTc1MTM4MTA1RkY1RjZFQkYzQzIzRDhDRjAyQzE4MDhGNkUzOEIyM0EwMkZDREE3MkI2MDBDRDA3QTU2MUY2NkFDNkYyQzE0RjY5M0IwMkRGNEU2MEJERkE5RDE4RTE4ODdEQTU2NjZDQTE3M0VFMjA3NTJDNDlBQkU1NzY5RkVDNDA5NzA3NURERkEwOThEMzBDNzVDQkYwOEVBRUYxODg1MjZCOEM0ODgwNzBERkFCQUM5RDUwNzNBQkFDQkQ1RDI0RkQzQ0UxMjkzMDc1RUMzQkY1QkZDMEJERjVERTk2RDJBMjIzNTM2MzJBN0EzOEFGMTQ3MkIxMTEzCis1OEE3CisxMjg5NzUKK0E0NkE5MkI4Cis2NjAyRkIxQjlFQTUxQUVEMkY4MDFFNEFGOAorOTMxOUY2QjAyNTA2RjBFNTA2MkRCREJEQzk3NzFCQkJBMUVGOTRFQTQ2MEExQzlFMzNDNzRFOTBDNTNDRDI4RDQ0NzJEMzRBRUQ4RkQ5OEZFRUUwQzI0MEZEM0IwQ0Y4RkYxMDVGMEI0QTc1RDc5RjNGNTdCQkMyRDM0RDM0RDBENDM1RkQ4QTIyMDA5RDM1NzU3MkVFNzhCQzIxRTkzNEM1Cis4NDhERDAyQgorMDA2NDQwQTI2NDFFQjM3M0FDQzgzNEVDNkYyNQorRUJFREU0RTdCRDkyNDEzQjIzNzFEQzZGQ0E1MkI2NDBENTIxNjNGMTY0MTFCMzc1M0M1NzI0QzkyREJCMDE2OUYyQkMzNjJDNkJGRTE2ODlEMkNGMDQ5NTQ4Q0QxN0RGMjJEMEM3ODZDMzE3NDlBMUI3ODk5RjM0RDVEMUNGNTJBMjYzRUJDRTgwNjYwRkYxMDA3QkY1QUNFQzZGOUVEQ0FBRDhCMjY1RkM4Qzg5RjczNjkzQjE5QUY2ODJDRkM0NTBGNkMxOUUKKzNENkZDRjJDCiswRkMxQkI0NUIxMTY2NzdBMTA4NzAxNTQ1RQorQ0E2RUYyMTY5REYxMTZFMjczRDQ3QzRGQUVERjRDNTk0NjBBMjJEMTI2ODM0NTQwMTAwRjgxMjI0QTc2N0Y0MjQ4QTQ5NDgxRjI1OUY4NDQyQTMzOEYyMDVERUQxNDQ0OTgyMzkwODQ1NDQ4RTBCNjdGMTBBMkRDNzRDNzJFNEZDQ0ZGN0ZEMEI0OTk2NDc4MTdERkI3MTNGNzcxRTU3Mjc2QzFFMEFBNUU1ODIzNzZDNQorNkZGMjkzRjcKK0ZCNTIzNjczNUM3MTI0MDNBMzNGRTUzRjEwCiswREUzMjlGMjQ4QTkyNjlCQ0M4NEYzMDIxRkY5MERCODU3QjQ1NjAzRUQzQzQxNjE3QTM1MDI4RjE3N0U2RjZFRjRFQTQzQzJDQ0FFRThFNERFNUEKK0Q5RTlCRDcxCisxNTgwNzkwQkM5OEZGRjIzMDE5M0I2MTlFNQorMTk0MkMwMjk4QUZCOUU1Q0Q5MEE0RDdCRTg5RkY5OTg5OUE4OTJGQ0Q1Rjc1Qzc4NzQ5MDJFQTE3NzZBODdCNjM5QTU1MDhEMzlERUE2MTEwRDhFNEQ3NAorNEYwNjI5REUKKzU1RTVBOTQ4QkYwNkJGMTE0QzhGREQzMDZCCis2NkI5MzU1RUQ5NzA2N0I5NkYyQkIxOUUwNTY1Mzg5NzFFNkNBQTc4ODZGMAorRUFENDYxRTEKKzEyNDg5QUU1MTE2RDIzRTBBREFGMDc4MTI2Cis1NDBCRDJENDhCNjFCNUE0MEIyNkE3OTRDOUVEODgyOUE4RUFEOUVFM0NBMkQxOEFEMDJGQzAwNjRENEQyODM3NkI5NTQ5NzhGMzc4NDEzMDFDMzRENDNDNjA1MkVFRjc0QTI2ODEyMkFDQTlFNDA5MjMyQgorNURDMTk1MTcKKzY3OUQ3OUM0RDk0ODg1QTMwQjEzOEY0RURCOEQKK0QwQUMxOTRENDc3MTBGMDU4Q0VGQUVCNjVCQUVCMEYyMzMzRTIxRDY3MkRBOTAzMkE2QzhDNjFEREU1RUVDNUU1MTBFMTdBREIyODhFQjZEMDM1QUUzQjU0RjdBRkIxRjU5ODM0MzhGRkJBMUQyNkJBQ0E4MEYxNjREMTFCMUJFNTU1NUE3M0Y1MDFFNzUxNDA3OTcyNEIwRDlBOTNDREZDNTI2RDhDREY4QjQxRjcyNUEyMUZDQzQzQ0U3MTQ5NUNFODM2NzEyNkRFNzBGNkVFMUUyRUNFN0EyN0M0NDZGMUIwODBBMkE3MjkxRDM1MTdBNjdGMTc1MTNBRgorMzVCNAorNjU4Q0U5CisyN0Q5RjA5NworMEZFRTJFNUQ1OTIzQjE1QjZCNEQ2ODQzNEYKK0I3OUM3MDY4MzE5RUJBRUFDQUE5MjRCRDg2Q0U3NTg3RDA4MTRBNTk1ODQ3QjFCMDdBMDMyNEU0M0E3NkI5NkRGMTM1MEI4N0RDNDlERjI5OTYxRDBBRjgyNTMyM0Y3RkRCOThCNjU4NjdBQjhBMzM1MzhBRUU0NEZCOEYzMEE5ODE1NTgyNzg4QzY2RjExMTFERUI3MDJDRTYzRjdGRUUzQTlENDk3MEU1RDY4QzQ3Cis2MkNBMkQ0MgorRkNFODc4Rjk5ODQyQjJENjUyQkNDNEVFMzUKKzAwRUM5QUY5QkIzRkJBRDI4ODUxQUEwRUM2NjFBMEY1NkJBRUI0QUQ2RkZCQTZFNTYzQjE1MTMzOUM2M0IxRUZGMjUwRDFCRTg1NjkzRjg2OUE1Mjg2MUU4QkEwMDczMjQxRTkwMzVGRjA2Q0RDNTgzQUVBMEVDOTIzRTlGNkRFMzI4MzU1RDc2MERBQjQ4QkUwOTg3NkY3REExOTQwNDgwMjBDCis2N0ZBRENGRQorNDNGQkFDNDA5NzY0MTFFNTUyNENBMkFEQkE3NQorRTcxNDM4ODVCM0RBQzZFRTNDOUYwNTQxMjNERUEwMTE0RkMwRTExNkY4REUyQTFBRDA5OUQ1MzE3MkRFOUZFMzMxNUMxODUyNEU0NUUxMEREMEVGRjk2NzM0NEM0NENBODk4MjgxQTQwNDY4NDVFRUJERThFODhDNDZDQUUyNzc5MEFBM0Y4RjVFMjVDMEJDQ0I2QUQ4MkFCOUNCNTIzMTkyRkZEMzNFMDNFODQ1NDhCQzkwMkVGRTVCRENCMkM3OTIwNjgzNDhBMTA5MjgzOUNFMjQ1MjA2Qjg1OQorQzI4N0QxRTEKKzI3MUM0RTM4QTVFRjEyNERCMUYzODdGQjAzCitGQUE1QUQxMjk3RjNBNzFFOTM1NEM5M0VCOTUwNUZFQTQ5MjM2MkZGREFEN0JERUQ4RDYxQTQxOERGQzI2QzY1MDQyOUE2QjZFOUI1MDkwQTVCMDZFRTk3QUExRjk2MzYzMUZCMjJCM0MzMDk5Q0MyQzE4Qzc5NENEQjNFN0E4NzNEMjRCMDI0QzlCQUNCNTg1MjE3ODlBNUMwQTg4RTYzRjNBOTM3NzNERjA2QjlBMjEzCis4NjNCQzQyQgorRjk1M0I2RTI1RjRDRTc3QUFGOEYxNDc4NTEKK0ZDRDg1MDA3N0MzMTFBMTkyMDMwNzQxNzMzRjFCMzUxNkRENkVFQUE5QzJCQTk3RTI0RTM2OTFBQUMxNTkyNUU4NzlFQkFDNkQ3QUMzMEM2NkM0NzE4RDQwQ0E3MURBQjREOUE0MDMxMEUzNzc2QjQ0RUE2RUZBRTJGNzhDRDg1NTVGNDQxNEI1RDBDMjFCNTEyMkZFN0MzRENFMUIyMDIyODBGQ0NBMzFDNjFDMDE1MjdDQTQ0MjAKKzk0MkU5MzgxCiswOEYwQjU3NEM1NzgzN0U2Njg4MEZDOUI0Mzg0CitFRTZGOUExNUJDNTU2MDMyN0I0RjY3NDNBRDI3MjdBNDkxMTU1MkMxRTAyMTdGMjQzQ0YxRkMyNTUxMTk0RDlCM0JFMDZGOTg2NUQ0NzMzNkNEQjE3QkEzM0Q2MkE0NTRCMDQyNEZCQzU5M0ZEREMzMEU3NkIwMTlBM0I0QjYwNDM4ODQyNkZFOTNFNDUxRDk2QzhGNThCM0NFMDg4MjZDNkFBMkQwNDIyRTI4RkRFQTA4RTc5NUYwNzZEMTkzQzIzM0UxQTA2REVERkUyRUM1QjM3OTZDNEE3N0FBNkE2NUY3QUNFNDc3MDhERkE2MzQ2MjFCRTExNkYyQTQKK0E3OUMKKzQ3OUEzODdCMDA0RjZGRDc5QzZBMEQ1NzY0QTcwODA4OThCRkE3MkNBMDA4M0I1MUYwNEE5QzE1NzBFNkQxNDE4Q0I2OTY5Q0RGMzlFMzA5RUM0QjFBQjY2MUQ1RDIKKzk0QzVEMTc3CitBNEFGNjg2NzhDNzFCNzM0RDE4REMyM0QyQjlECis4RDAzMDREQkJDMzQwN0M0QzkyMDMyQ0FBQjM4MTc2OTYyRjM0MDJDRDc2QTUxQTEzODBBNkJEMjQ5NjI5MzZGREVGQTU4MUVDMEY5MUNEN0IyNTk3NzVGNUQ4ODgwRUU4MUEzNDJEREI5MTc0Q0NBMUIxQ0Y5NTYxQTIxRjlBMkZDNUQwN0JDQUY4QkU3NkNDRDBEMDUzQTNBOUEzMUVCNEM5RTk0QjM4RjQ0Qjc0MzVGRjNBRUUzQzcyRTY1MTg5NEY1NURFMzc2Mzk3MkU3RDk1RTI3NzhDNAorODRFRkFCNTcKKzQwNDYzMUYxRjE5NzZDQzk4MTdCNzIyMEIwCis3MUM4ODE5NEEyNTY3OTI3OUIwQkVGQzg5ODZEQTc2OTNGMEY1NzAwN0JBMzJBQjFEMjRDN0M5N0REMEFGNTIwMzVBRkY0NkEwQ0FERjM2RDAyNjU1RkU4NDc1RkE1MDQ5ODNBNzhGQjUwQjJBM0E3NzFGNDMyMkNCNTdEMkI3NUUxN0NFMzQxRDhFMzcxMTc3Mjg3QUI0MTZFNUFFMUNGCis0QzUyMkJBMAorRTM3OTFDRUE0MkM5Q0E4M0ExMjZCRjRDMDYxRAorNzAyOUMwRjg1N0VDNjEzNDJDMEFBNzEwNzM5OEFDNzdGOEJENTIzNjA0NkJCRDgzM0YxOUI2QjFFNzRGM0E3RDc4QzY3OTE5M0E3NjBGNTZFQUE4MjNBOUU4MjJCNTExODdGNkRERjY1RTY2RTVERTA2MUMyOTY0RjRBNDRFNTU3NUU0QzgyQkU0QzREQjMxQTBCRjk0OUMyNzkzQjQ1NTYyOEY1RjkxNzEyOUUxNjlGM0YxODUxRUI3RTg2MTIxN0IyMkZDRUUwQkNCRjE5QkIwRjYzQjU2MkQ4MzhCMUY2Q0I1RTI5QjA2NTlGRDBGQThERDgxRkQ3ODJBCiswQzRBCiszOTYzNDQxRjA4NTQyRkE3ODFCODZDOEUwNDRGOTczN0Y2N0Y3NENFREFGODA1NDIyRDc1NEQ4QTFBNzIyN0I2NkU0MkNCCitENDM4M0M3OAorNDdEQjNFNzAzRDg4NENBNTQ5NTYyRjgxNEEKKzc0REE3MkNCMDFCNjlEODgzMkQ0NUNFQkU4OTlCREY0RTk1REFERTk3QzdCNjYwMDk2RTgxNTIzMUYyMEY5NURCODE5RTYzNjdCMTA4NkEyMDBFQzMzNjkxQUFFNTYwOUY4MkU2QUQyODEwOQorNjA4MTA5QzEKKzNFN0FGQjRDQUY2Q0IxNUMzODg1QTdDMkRDNjAKKzRGRTIzMzFERDMwRDE1QjhBMUQyQkZDNjlCMTYwRUM2MzdCNTg1QUMzOUMxNTVBQjgyNEIwMDY5NjZDQzY5NUMzOUQ2OEU0RDZDMUZCREU1MTE1NTQzNUU3MUFENjE0MDU2MzFBM0IyNUUxQTAyNzg4REQzNTRBMTg5RURCQ0MzMzlFN0EwMTI4NjdFOUYzMUY3MTU5QTM2Q0QxRkRGODIzQzI0OUExMjA5OUIxMzI1NjkyNzQ5NzRBREE4RDE5MTI2MUU3OTQ4RjZERkVBQTY1OEQ3Njg3RDlCNDc5Njk1NUY2MDU0REExNzRCNUY1Njc1RDMxRDRCRUJFQQorOTUzOAorNjFBRDI2OUI3QUYyNDREQzNFNjc1MzhDODU4RjlCMTAxRDQ0MkIxNjA0Mzg1NjlERjM5MjNGRTcwMkY0RjkKKzQ0MUM1QTdGCitFMTM1OTc2MUEwOEJDN0M1QkMzNTI3OUE0NDI5CitCMjkzOTA1OUZBMUVCMThGMTdFQjdDQzg0OEY3NDk3MzY1MUU2MTc5QUE0NDNCNTNFRTU5QjE0MzYwQjA2MkU0MEYzOTRERUE1ODY4REE2RTIzQjJFNUZFNUI5QzlEMDQxMzBGRDRBRkE1NERDMjlCQzI0QjMyQjZCMUI2Qzk4MzFCMUE2MEYzMDZCQTIzODI5N0FERDYwMjZFODk2MDIwNkRDMzkyMjc2MzdEQUNDQ0MwQjYyMTJBQzRGNEFCNjEzQzJEMTU4QTM4N0VCNkNBMkNDOTMwMEEKKzkzQTZCQzc1Cis4NTIxN0FENkExMkUyMzJGRDQ4RDdCRjk0NAorNjZCMEY2RTA2RjQ0REJFOUI3MjlGM0FGMTNCMjc1Q0YyOUNBRTQxNDMwOUZBNTlBOUU1ODlDNUU3MUQ3NDRDNDUyMjkwNTMzQzczMTRDQjM5RTEzOUI5NzYwMDAwMDU0MTMxOEZDMDg2MjBBMUQzNUREQ0VBQTFCMTdDMjVENUY4MkZFQzI3OTdDQjIKKzQwODgxM0M3CiswMUEwNEQ0NzU0QkRBRUJBMzU4RTZEMzc4REIxCis4QjlCNTNCNTM1M0NGMUUxNDMyQTNERkY4REM1NjdEQzkyNURCNTEwQ0UwQTZDN0U1Mzg2M0I2QTExQUJDMEVBOTBDOTkxODI1NUIzNDQxNzlDMzJDNkVEMjFDNENCQzQxQ0NCNzNFNUU1OUZERjMwNzlDQTJDMjJEOUEwQzU2N0UwQjZCQTkyQUUxQjE4MDAyRDI1MjgyMzU0QzRCQzBGOTk1RUU1MEU3MjBFOEQxMjg1QjJDNjJGQ0I2MTgyNEMxRDlDNjRFMjA0Qzc2NTk0RTExQzUwRUM1MUYwMDI1MDk3OEM1REJFRTM5MDkxCis5MjIzODkzMworNDJFMjg0RDdEMTlDMEMxMzYyMTJGMDMwNTAwMQorNjg5N0M3NDBFRDY4ODE3NURCMURDM0U3Rjk3RkIxOUUzMzVDRTQ1MDZGRkY2QUE0NzQyODFBRDlFQjJGNTE4RjNCNkMyRDZBMUExMUNBMzkyQUZERUVEQTcwNzgxOEI3RkRFOEMzODFGOUM5RjE5MDNEMDQzQUQ4OTVFRTNDQjFCMEE4OEQ1RjEyMDkyQUU3OTVGRTNDRjFDREVFOTE4RTQ5QzlBMzg2MTUwREYyMUE1Njk0OTY2MDI5QUY5Rjg0MDYwNEQ4RkVGNzc1MTMxN0RFRjEKK0M0NkY4ODBDCitENDUwODVGQzNGMkE4NDNGMzNCMTBCNzc3RAorNkQwMzAzRDhDRDM5N0NDQzcwNzQxMzQwODc1MjhBMjc4MTBBNzBBMjgxMUEyNTcyODRGN0MzMEUxQTA3MkU5Mzg4RTQ5MkJCOTEyOEIxN0E3QTNBQUU1MTMwMUI5M0EwMzJGRjg3OEZFMTkwNDZCRTZDRTZCQjQzNEZDNDU3QjE1NjI1MERBNzRGMzUxRkI2QjAzOTZFNTU0MjA0QzczQkMwQTYwMUQwNjdFNTE2CitDRDRCNzQ0RgorNzRFRDNDMjVDRkE5MDIyQTQ5NTZENDlEOEQzMworNTNGQzdERjNENjg4RDZERURCMDBCQjVBM0NCQjY5ODUzMkMxNUI0Njk5MDVDODk2NzhDODZDMDQ2ODg5QTIyMTU5MkU3N0M5OUYxQTFCNEE3MEYzOTIzNzVEQjc1Qzc1NjY3RDQwREQ5NDAzQzU3OEEyRjRENDU4NzBCNTczRUVCRUQ0Q0Y1QkZDQjY2ODRFNTU4RTg2MDlGMEU2NUI2REEzNUE3MDk0RDZCMjlCMTM5RUUzRDYyRUFCMDUzOTA0REI0MTJBNTlENDRENjk5NEYyQzhDODU2REYyN0JDMTg1NjkyMERFRThDNkJGOEQ5OThGRTM4ODEKK0VBQjFEQkFECis1RTc1Q0UwNDI3QUYzQUJCMDc3NTM2MThBMworNzQwNTFERjRBMkZBRkQ3RkUwODY0RTk1RUUzODdBRDI3RjQxOEIzNTVBRjY5N0VDNzgyQUQwMkRFODYwM0FGRjg1QUIxMzIyMzY2QkU1QzkxN0FERjQ5NTlFM0Q4OTlFNzhGNTQwREUzQzcxRDE4QkE5MDgwQTc1MTFBNDhCMjFCNTMwRjBFQTQyCitFNjIwNDM3NAorQzU5MjE1ODFFMUY5NjRFMjgyNTE0NjI5RTUKK0EyNUM0RkRFQzJFOUZDMTE0QkVFMjBDMjFEQTA2RTM4MzBDRkRDMkRCNEY0RkFGODFFQkVGRkIxODExNERCQzM5NzE5RDI3QkZEMUZEQUYxNjQzOEY2Mzk0RDc5M0MwNjJENUY3NURDMjE2NTVBNTJGRDdCMEU3ODEyMUJCMDM3NDQxMkVBNzUxMkNCODVGNEI3Nzk5Q0MwMTg4NDEwMzQ1QTZGQzg3RTA0Mzc5NTkyNzZBODYxOTY2MEI0NTQ1MDc5QzUKKzAwQTI0QUJFCis1NjY3OEZFNzJDREY1MTFGMDFENkY2RDRGNAorRkMzN0FFOTU4NDEwMkEwQjcxRTRBMjRFRTVGMjIzOTE3NzI2REY0QUVENEIxMDFFM0U4MjU1OTFDMDU3RkVEMUNDMjA3RjBBRDgyQkJGMTIyRDA5ODIxMDU1OUZDMzM3MzU0MTYyM0JEMkM5MEFBNjY3NTc5RUVFMUUxM0ZFRUJFRTNBREYzMjYxNTYyRkI3MTE2M0RCNzU2MzM3MEJBOThFQ0U2QjhBNkYwMDhCOTY3MAorOEIxNjhGNjEKK0M0MDdBNUQ5NTFFOEQ5MTVGMjUzMjY3NjFGNEQKKzI1OEVBQUMzMzc3MkVDMDVGNDY3MkY2QjQ1QkJFRENBN0UzQkFCQjM3NDM4MDdBNDUzRDdBREQ3QUI5QUI2OERFRDA4QzFDMDIxOUM5NEZBOTk3MUUxOTQ3NUEzNDEzREY3MEYwMzQ3QTFFRTIxOUQ1MUNBOTI1RDIwQzVDNjE1RUMyOTg2RDRFQjkwNEE4RDI3RkJERTFBNDk0QzM2NjQwMUQ0OUY5MjU3REMyNzVCRDQ4NjhFNTlGQjFGNkM1QjJBMDFCRjg5NEJERTQ4M0RBMTY1QTJDNDIzQ0Q1ODdFRjA1NzQ1MzdDQzU0NENGODZDMzRBQzIwMjI3OAorNjAxRQorRDVENzI4ODVCMDJEMTdBOTk3ODIzMUI0RDA2NworNTE3QkMzNDUKKzgzRDhDNDk3RUMxMTcxQzE5NTE0NEJGM0ZDMEIKK0E0ODVFMDUwQUYxQ0U4NTNGREIyRkFEMDc5NUUyOTEwMEY0OUVEMEY0QTc0QkEyRDM0QzM3NTVCRjU0NjZEMThBNTFCMjU2MDlBMTE5MzhFNEU0REFGMzcxNTE3MkIzQUFBMjNFQUEwOUE4OTYxRURDNUM0QkI3MUU1NjQ1MjA5OTc4REMwMTYyNzgyMjdFQ0YzMjY1MEE5QzkyMjhBQzg3NDEyNjAzM0I5N0VBMkEzQURBMjNEQjU0Qzc1NTVEQ0M0OUNCRkU4RDI3N0Q0MDQ3NDlDMDdBNzhDNkQ1M0YzNkY1NjgwNTA3Qzk1QzE0QkQ3QzYzNjA5MDNEMworNTI0MworODE2QzJDNTFDRjlCMkQ1ODZFMTFFNDhBNjFCQTVEMUNFRkIwRjVFMzdEMEMwRDcwMzEKK0EwRjA3NjZCCiswMEQ3QTRBNTI3NUU0OUI1RURFRDdDQTJCQjM1Cis5ODg1NDFDOTExODkyM0U5NzNEQzMwNTM2RkVBQkIwQ0Q4RDYyQzdBOTk3MUFGQzFERkNBQjNDOUQzQzEzQTY3M0NBOTczNzM4RUNDMUE0NDAzMkNBM0JERjJCRTkwODhENjhFM0JDQkQzMjk5QUM0OEE4NjIzRkE4NEFBREE2MjYzMkZCN0I0NjY3RUQ5N0U2MTMzMTA5MzMxN0NGRDhDRUMxMkI2OTk0MDFCMjk5QTdEQzFCRkE5OEY1NkVCMkU0OTM3NUQ2QzczQTMyQTBBRjY4QUZEQTk0NzFEQkFERERERDZFODM5RkRGQkI3QTE1MzhCQkJGNTVEMjAKK0NDMjkKK0M3QzI3REE3CitCNzYwQjQ5OUE1OTE0MDM2REMyNDcwQThCNgorMzhBQzc3NDFCQjg2MDJFMDU3Q0UwRDk3MUY0NDgwMDU2REU0MTE1MjYxRDg5RjU1NDFCRThEQzhBMDFCRkY2OThFN0IyMDFFQjQ4RThGMzhDRTMwRThCMDczOUZDMjJGNkQ2Q0JGQTQzQjUwODUxRjY0NUYxOTM4RkZCRTRCCitBRTM4MURGNworODNDNDdBQUIwRThBQ0YyRjk4OUY5Q0EwMjkzMAorNkU3RTFFNDVENjY3Q0MwNUJGQzI5NzM0QkJFNUYxNUM2Mjc3RDc4QzFEMUZCMkFCNTZCMkRBREYyNkYwOTg0OTg0ODMzQzREMEUxOUUxRDk1NzFDRjRGRDYxREI2Qzc5OEQxNjAyMUUyOTFFMjZBRjJCNTEwMjlEQ0E5ODJEMzBFNTY5NDk4REQxQTUyNkQ0QzIxMDk0NDYyNkNDQjJEMTNENEY0OTFBNEVEQ0Q0NDI2M0IxMzNGQzlDNTFCQjBBMzU5RERDNEM5REQzNkZDRjZGCitBRTNDNTU1QQorOTM3RjczMTQ5QTQ0MkI2MUFCQkNGMzhDQzQKK0ExNzNBOUFERUVGOUIyRjZCQUIxOUNGNkNBNzY1MkE0RjJBRDhCMzg3RjRFCis0QzU5MDE2NAorOTgwM0I1REFFMzlBMENCMTQ5NkQ3MzY0RDU1MAorODU5MTcwQjQ0QTU4M0M5QworNDZERkQ3MTEKKzc5NzQ0RDUzNzI3NUYyQkJGQTcwQzBCMDFFOTU3OEU4MkRFMUNGMUI4MTEyNDQ4RjYxREI5QUNBRUExQkVFMUY3MUY0CitBQzUxQkE0RUUwMDE1NEEwM0I0QTU2MTM3NzkzNDhEMzcxRTc3RDc0NjhEQzhCRjc1ODYxMzkxQUI2RkQ0MDgzQ0NBRjdBMUJGNjg1Cis3MUI0NTFCMTE1N0I5QTUwQjdFN0Q1NDM3NDQ0RDVFRTc0M0MwRjI3MkNCN0EyNTk3RkNGMzUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDUgcHV0CitkdXAgMyAvQzAwNDYgcHV0CitkdXAgNCAvQzAwNTUgcHV0CitkdXAgNSAvQzAwNjcgcHV0CitkdXAgNiAvQzAwNzEgcHV0CitkdXAgNyAvQzAwNzggcHV0CitkdXAgOCAvQzAwNzkgcHV0CitkdXAgOSAvQzAwODIgcHV0CitkdXAgMTAgL0MwMDgzIHB1dAorZHVwIDExIC9DMDA5NyBwdXQKK2R1cCAxMiAvQzAwOTggcHV0CitkdXAgMTMgL0MwMDk5IHB1dAorZHVwIDE0IC9DMDEwMCBwdXQKK2R1cCAxNSAvQzAxMDEgcHV0CitkdXAgMTYgL0MwMTAyIHB1dAorZHVwIDE3IC9DMDEwNSBwdXQKK2R1cCAxOCAvQzAxMDggcHV0CitkdXAgMTkgL0MwMTA5IHB1dAorZHVwIDIwIC9DMDExMCBwdXQKK2R1cCAyMSAvQzAxMTEgcHV0CitkdXAgMjIgL0MwMTEyIHB1dAorZHVwIDIzIC9DMDExNCBwdXQKK2R1cCAyNCAvQzAxMTUgcHV0CitkdXAgMjUgL0MwMTE2IHB1dAorZHVwIDI2IC9DMDEyMCBwdXQKK2R1cCAyNyAvQzAxMjEgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTEwIC0yMDkgNzk4IDY5NF0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OTdDNjRBQTEzNDEzNzY1NDRCQzgzQ0FCM0YxRDNEQzUzRgorQ0NFNkRBMTQ3Q0Q3NTM5NDI0RTUzMDhGCis4NTU2M0E5ODVERTkzQURCMTcKKzlBOUFGODg5CitGMkI1QTQ1OUU1MEVDMkM1Rjc0RDU2REY3QworMjFEN0NEQUNBQUNGQkFDNkQzQTVFNEYwMkUwQzZBNUI2REQzMTc5M0VFMDQ2NAorQThDNDhGMjQKKzMyQzIzRTA4RDRENDI3MkI2QTFEM0E0QkQ5CitGMEI3RTBCMjNBOTRFQUU3QjhEQzUzMTI5NkM5RDU3NUQ2QjExQ0JDNjg2Q0ZFMjZGMjZFNUU5NTgxNjkyQgorRkYzNjJGREYKK0I3QzQwRjI5MjIxMEUzMjdEMzM3NTY5MzQ1CitGNjc2RUNGOEJEQzBEOEY0MUZCQTJFQ0QyQTU0QjAwQzI4Nzc1QTdDQ0U3QTExQUI4NkY4QkI3NzhCOERDNTRCM0I2MUVCM0M1QjQ4MTk0OEQwREQyNEFFCis3MDA3QzEyRQorMDk1NTY1MjkxN0QyMkJFMzQ5OTkyODIwQjExRQorQTFGRkFENjRCRkMxMEZCN0I3OUUxQTQ0NTI4MzJENTQyRTRBRjQ0NUYyQzAzQTBFMDk0MUE3ODYwQzQ3REY4N0REQzhBMTQ3MjZDQTJGMDA3RTBBODQ1NkFEQkU5NkNEQUE3MjdFNUE1MENCOEZBMzU1MUZDRDM5Qjg2RUIwQjNBQjI3N0FCNDk0NDBBMENDMkE4NkYwQkNFMzg2N0RFQjQ4QzAzNzIxMzFEQjA1MDE0MDU5QkY0QzFDMkIyM0I3Q0U1MzkxMUI5MjhCMjdCMgorOEIyNEZDNjYKKzFBMTA5QzQ0MTMzNzRCREEzMEQzRDI0QzRDRDgKK0Q5QjRBMDIxN0Y2NTQ3MjNFRDFDMUI1ODlGMTEwQ0FCMUY1NUM2ODhFOTAyNTU3MkJDRTVEQzZCMjBCQjFBODc1QzNEOUQ4M0EyNThGODkyQUIwQUNFOTREMjNDQjREQ0E4MEI5NDk5NkE4NjBFQTczMjczRUI2QjY3OUFGOTVGRTQxM0RCMTFFRjJCNTdGQUYwRkEyQTRFNkUwQUU4MzhGQkFEQzhDQzNFMTFBMDAyNTFGQTAxMzU4ODQzMjU0MTkzMTdGNjBBREY4RjREQTc3RkEyNUY3NjU2QkU3NDA3QkFDM0I5NEU3RTZCRTcKKzM2RTI2RTlBCitDQTI3NDc5QTk0MURFMzJBNjdGMUMzODlDRAorNTFFN0IyQkM0MUQwNzlCNEMzRTczNzMwRENCRUEyM0E3MkFDMTVEOTBCMTFCRTI1MDM4REQxOTg2NjNCQ0MzQUE5NkFFNjM3MjNBQUMzMzhDNkVBNkU1MjI4MDUwNjA4OTc5N0MwQUFEOUQyQjg5QjNCMjlFRDA5QUE0QkNBMjFFQ0IwNzZGNDVCMDI5MzU0NzZDNzNENzY5OEVGMjIyOENDNzI3QzNGOUYwNDk5QzNBM0NFQzgzOUM1QUY4RAorNjRDQkMwN0MKK0UwQjY1QjQ4NDM3RjM1OTI2NzE3ODAxQkZGMjkKKzI4MEU4REY4Njg2RTM1QTVDMjhFNTY2QjIxRDcwN0VGNTkyOUJEMEQ5OTQxMUI3QTFFREFDOTM4MDE2NjlCOEQxNjJBNkUzMENERTI5ODk2RkY3MEM3MzQzQTlFNUUzODYzQUI2RkNERTAwMzYyRjVGRDUyQjJERjk1OTREQ0E1RDM5MEVFMEE4OTUwMUE5QjE4MDFERjAwRTRFRUMwNjIwQTcyRDBCQjMzNzU5RTVFMDBENDlFODcxODEzRThBRUIwODBDQkZGMjBBN0I4NzY1MAorQjNGMzE4NEUKKzhFRDZBMEJBOEVCNTBCOTMxRTRBNTA2RTg3Q0QKKzg1RTg0QzU0NEQ0MkI2MUYzRUNFQzIwOTdGMUY4QTU5N0RCNzdDQTQ5NTVCN0VBMjBGQ0JFQjEyMkEyNTQ3QkRGOEQ1RTk2REQ3MUY0OUMwOEQ2NTFENDE3MUNCQTkxMDFEMEQwMUIwRDk1QTNGQjUzNEIxODc5Rjg5RjQ3MThCQkQ0QUJDMTI2NDM0NzdDQTU2QkM0QkVDMjdDNjVBODZCMzg2NjQ5NTg3MEMyQTYzMDg3NDA1MkNFNDVBOTEwMTQwMTcwQzRENTI0RkJDQzIwODBCRjY0MzMzN0MyQjIzMzRFRUMxNDRBQworRjBCNkRCRjAKK0MyODA0Rjc0QzFBN0YxNzhGQTE5OUFCNTM2OEYKK0Y0MTQ4MUQ2NzgwRTAwRTM3MkQxMDUxMzEwN0VBQ0ZFQkYyMUMxQUFBNzZCQkNCNUFBRDU4RTM2RkY2QzcwREMzNkFBM0U4NzdDQUY3OEE3RDExMjFCMTYxQTVBMUQ5MjdCODk3OTQxOTY5OEEyREY3MzIzQkIyRTY5ODlGQzlGODhBRjMwQkJEN0IyQjIzQTRCNERCOTMyMTFBMzkwNDE0M0EzOTdBM0Q2MjUyOTI1NjE0QkI4RjUyRDE3MzhGNDdEOEMzMTNENTFGMDVDOTQ1RkE4RUQwN0I4MzUxNkIwNTdFMDBENTA1NzExQ0NGNTZBRTc0QUVBQTc5OAorMDgwNworQkQ1RUUyNTQKKzE4QjczQjI0MDhFRkQ1NTUwNEUyMDRGQzIxMEUKKzlFM0RENjNGQTJGM0NBMjk4NkQ4NURDMzZEMUI3OUFEREEzMTVEQTlCMDAyNDhBNTk4RDU3QTlCNTAzMzg0MDQ4MDVDOERGQzM5RjFGNzU2REEzRDFGQjM4NDA1ODM5QTE2M0JGQjJBQkYyRUJBMUVFN0Y1RTlDQTNFNERFNzEwNTQ0NDgyNTdFOURGQkYzNjA2OTlFREU1QzA1NTRCQUJDQzRGNzk5QUY4RENFMDEzRkNFRDA4QjREMzFFMEU4RDc0RUEwNzlENTIzQkQ1Q0U1M0E2NDI1MUE4MzVDMzZGNzgyQkQyRjQyOTE5RTA4MkQ0Njc5N0E0RkQ3QworMDIxOAorMzk5REM3NjQKK0M2ODVENDhDCiszMzZBRTUzMkYzQzQ5QzgxMzAzMDMyQzAzMQorQjI5OEU4NEUzQTRBRDhDRDlCOTNGMEJBNjMwN0UzQkJBQkUyMUJCOUQyMzhGNjUxNkEyOTYwRjkyQkQ5M0E5RjY3NTk4OTBCNkE0Q0JERDA2OTA4QTQ1MTI2Q0YzMjM1RDczMjE1REQ3RTM0RDg1RTdGRTQ3OERGRjBDOTc2OUFDMDRBNzFGMzk3Q0NDMzU3MEQ1QjdGMTZGMzE4MTREQzFDODVCQjQ3NUFFOThEMTg0Q0ZFRTU4Rjc5QkMKKzM5RjM3NjZCCis1MzZCMUI1Njk3NjY5NUYzMDBCODlBQzUyMgorMEVEQTE2M0E4NjFEMkM0MEQ5RjcwRUZFQjg4NEMwNzJCMEQwM0IwMUMxMzg3RUIwNTk0RDk5RjJCN0ZCMEM1NTMyMTE1NTY3RkFEMDRGQTFGODg2NUU1MUY1NjM2QjU3REIxMzE2QzdFREVENzI4RTJCN0I3M0I5MEEyNzAxNjY3OTQxRDNGMTNEMjNFOUVCMDA4MUJBOTMwRDREODVDNjkxNUEKK0YwNEU4MzczCitDRjA1MDVDRUUxRDQ2NTdGODlDMDg2NzQ3MTdFCis4N0U2NDgxN0EyNjZEMkFFOTVBNDNBRTc2NzhCOUNDNzNDMzI2NTk0NjdGNkVDRDZEMzQ1QkVDMkJFQTAxM0MxMjIxNkVGQUUyQzNERUFCMDU2MTZEMTg3NTFBNTI4OTJDMUYyQkIwRTY5QTAyNjE2N0NGNTA0N0FBOTgzMDY5NzI2NjU4NDlGQTg0MzU2NzFGQTg1NjZCOUE1QjlDMTQ2Q0VFNEREODU2MEVGRTBGMUVCMjg0OEI4Qjg3MTdENzJENzIxNkY2RkFFRjU4NEQ2OTZCREM2MjYKK0FFNDZBOEQ2CitDQTZEMzIwRUYyRDRBMzBFQTVGODA0ODU1MAorQjc5REYzREU0ODE3QjgzRTlGMDdFOUI3RTkyOURBNkE0ODY2N0YxMTBEMzBENjA3NjQ3QzVCRTUxMDYyOTYxNTg4NzlFNTZCQURGNUI2NTc4QTQ0MTM2QTU1RjJBNEFDRTE0RDFEODdFQkRGNkNERUExNDk1QjY3NUVGMzhCMzlCMDk3NjBDQjkyMTZFQjk2MkU3MTQ3RkMzOTU4Njk5OEQwNUM4NTBFMEI3RjE5Nzc3MzExMTE0RgorQTQ5NDA2RDgKKzg3OUY1RjFBODM2M0Y5NkYzNDdDNTJDMTJBCis1NjU2QzdCM0FDRTc1N0ExMEE1REM1MDZERjNBMzYxNDQ5Qjc3NDIzRTVGRDNBRkVBQzVEQTYyMEZEOUYzNTE1RDU5QkE3Mjg2QjFBREE2RUExRjkyOTI2RjIwQkQ1Q0RDQzM3ODM0MDdGMTY4QTAzQ0RGNDRGRUI4NTY2OEQwMzZENjExMTdBREVDQTU1NTNEQ0Q5ODhENDE2QzBCMDJGM0I4RUMyMTc1M0QzMDJCNTczNTk4MkY1RUUKKzcyREI4QjJCCitDM0VBNjJDOTI3MUY4QjM5QUJFOTgxMTFEMworMTlBRkY0Mjc2RjQyQkY0RjRGOURGMjQ0NEYwNUU2NERBQjMwMDAwQzczOUIwMUFCMzNGNjVFMkYzNTE0NUIwN0NGRUU4RUQ3RkYyMDEwNTEzMDUzRkI0MERFRjkyREM4Njk2RTgwMDg2NjMxRkRBRDA0QjdFREYzODg2MUZGQUZDNTA4RTRGNzUzRjk1MENBNDE4NDExNzBBMzZGCitEOEI4NDFDNworNDgwMzM0RTAyMzMyMUQ5NDhDRDhBRjNFNUUKK0I5QkM3QkUxMjIzN0VBRTc5MDE0QjBEQzFEMzJBODRDRDVDQkZBQjBDM0Y3NkQ2NTg0MTk3MzA0NUFEMjY0RTJCNzVFNzA0NzMyNTU1N0Y3RkYzMkUwRTZFQ0Y4MUEzODUyNzc1RDgwCis3Qjk2RDAyNgorM0NFNEM5MTg4Mzk5ODU3OURDMzQ1MkNBRkM1RgorOTAyRDZFMDA1NzZENkVGMzYxRERDQTU1MUNBMjQ3NjM1MjExNEIwQTJEMjk1ODkxOEJDQkFGOTAwMTgxQ0JGNzc0NUVGMEVBMDgzQjJGMUMyMkI0QzY5NzQ2RjVCNjczNEUyNUNDM0U1MzQwQ0FDRjYxODkzMjJFOTc4QzcyQ0FGMzMyMTE1MTA1QTBCRjhGMzgxREY1REU1MzY5ODE4RjdEMDEwNzlGM0Y5Q0YwRjM4NzE5RDZCQ0EzNkFBQjYzRDA3Q0Q5MDc1NzREQTNEMUE1Q0RBMDQxNjVEM0U3QUNDOUEwQjg2NzFDNDM5Q0YyOUUzOTdENUNDNjQzCitEODUxCitCNUQ0ODVFMkEwNkYyOTE5QkE4NTczOTcyMEM0OEFERTNCNjREMTI3OEI5OThFNDJEQzhGN0NFRQorRURBMjBDMTUKK0VGOUY0N0U0N0I0RkVDMkJCNDdCRjA5QjE4ODIKKzlCRTI1MjNGMjRDMEJCRkJGMTg4MTdBNkFBQUQ0QjA5ODQzNjUzOTYyNzY0NDI0M0RFOUFFODc5RTQ4MDEwN0JCOEI5QTlBNjg1NTgwNjBBRjIxMTIxQ0Y3RTg1NDZGNjk1MjdCRDZGQzFEQzNFNDZFMTU4M0RCMEYwRjQwMkYxOTVEM0UwRDFCOUZBMkM3QzU3MjUxMzYzMUE3OTY1RDAwQzVBMkQ2RjQ5MzkwMzQ3REQ5RDkzMTlEODc2MTRCN0NEQUZENjJFMkZDMjRDCisyRUUzQTEwNgorNjY0MEVEMjQyQzkzQTYxNzI4RDg3NkJBMjgKKzI5QTRENTVEOUFDRDA1NEE5MDI4RjFEMzAzNDExQUM3QjI3ODAyOUE5OEI2RjMwNjNBNUNGMEM1NzdCQkYyRTc0NDYzREM5QTkzNDg1MTdFQ0YxQTBCRUU3NTc3NEU3QjA2NEJFMTIwOEQ5QkZBMTY1MDhGODU0NDdEQkQ1OEUzMUM3NzEyNUUxRkJGCisxMzYzRkY1QQorRDhBMDhDRjg3RkJEQTU5QjJBN0Q5OTdFRkY3MQorQzBCMDBCOTVCNEJENTMyMzlFNERCQzI0MUJBN0I0RDZCNTUyRkExQTlERTIyQkNDQjdBMzkwNDcwMTREMjRCNjJDNTQwMkUzREVGRjExQzgzRDc1NjMwMTAzOUM2RDlDM0M2RDcxMTgzMDY2QjZDQkMzRTc1NzMyMUZGNTQ1ODBFMDk4OTU3NzcwNkMyNkIxRTRBMDhEMDJBOUZBRUYyODYzMjQzQjZDQzNDOUFBN0M2MjE5RTdFQzY1RDMwQ0NEMDQyMkY2QkQxRTlBRDZGMEI5RDhGRkRDNjVBQTZGOEQ5NworRkY1OTg0RUQKKzY3OTMyODFFOUFFMjI5MDY4OTZDMUNEN0RFCis5RTlDMDg0OEM0Q0YzQjQ4QkFFODlCMzI4NDgzNzJDRTgyMjU3OTJGODQ2QjNDNTU0M0UzNzZDMEE1NDcyRDYwM0Q5N0U3QzNFQkE1ODJBNkE5MENEOEYwNUNBQzhGNEEwNkE5QUZCQjg4QUU0QUNDODg2OUYxMjE2QTg0RTMzOTU5MjkxMDVFOTc2QTBEREMxOTY0MUExQzU0RjU0QTU2QjY0NjhENkVFOEREODBFMTUyCitFMUQ2M0Y3MAorODVGMUVEN0NEMzMzNTgwQTA2RTRDMEYyOEUzQworQzY0QkI0OTNGNjRFMUFCOUEyNjAxOEJGM0RCNDQ1Q0NGN0JGMzBEQjhFRTIyNUEzRDE1OEZFQ0Y4QjNFMEIwRDk1Nzk3Njc4QzhFMzQ0Qzg0MzA1MTNDMDI1NEU0MjYxM0ZFMDNDQTQ5NUMzQzAxMjNDMjAwMUEzQzMzRUM0MEE1NEFFMkI2NENGRkY5QTkyNDcxMzg5MENFNjcxNTRGM0ZCMjZEQTA0MDY1MEJGOEJDRDUzNTJGOEVBNEE5RUE2OTQ5NTJDRENCMjc3MTNFQUFGQTJBMjMxMDQzNTJEREY2NjlBRUU5MjY3RkYwNkVGQ0YKKzExQUVENDlCCiswRjEzRTgzNkUwMjZBRDdFRDAyNzQ2REFCNworNkE2NjAwRDdEODMxM0ZDODFFNkUzRjVERjk0NzI5NjY4QzNBOTYyRjNCNjQ1QTREREU5MUNGNERFMzVGQTEzQ0Q1ODZDNEUxQjg3MUM3NTQwNTdFRUVBRDQyQjk4QzA4RDZGRDdBNjFGMjkxNDE5MzZGQkY5NzYxNzE0NjMwNzU0NDVGRUU0RgorNDQ5MUI0NTAKK0JCMjEwRjg1QTFBMjMwRDIyM0E4MDgwRjVCMUMKK0NEQkE2Nzg2QkE0MjE4MUNEODM5M0JFNEZDMkI5N0Q3OTFGNjIwMjJCNERCMkY1NkNBOTY0QjFENEUwNkYyQjQwOTZBNTNDRERGQ0EzRDNFMEZDMEQ1Q0VGOUZFOThBMDc5RTEyRTM4MjUzRjYzNjFFQzA3QUQzOTcwQTg5MzZGQjMxQkQwNjA1NEE3OEQzMzIxNzU0NkM5NUI1MjEzMDQ1MDREM0ZEM0UyQ0I3MjlCNzlEQzkwQjc1QzA5NUI4NDc0QTMyODE4QzUxREFDRDU2NTAyNDgyQTAyMTREQ0RDOTJCQzA1M0NDQjI4QkNBRjQzNzNDOTAzRTk1RQorMTY0NworNzM4QzRFNjE1NEUxQTQ1MjczODAxRjJGMjREQTA1NzcxN0ZDODIxNUZDQzQKK0Q0OTJGQTYzCis2QjIyOUNFMTJDQjQ2NkM4RDk1MUY0NjkwNUY5CitFQjgyODQxMEQ2OERCRTE0QjExMDk0Mzc5QkQ0NjUwMzM2MUEyQjc5QUNCNzM0QUNCNUZERTIwN0Y2M0Y0QzU2NzJGRkNBMjY0MUUzODNFODFGMzFCNTg0QjJERDZCRThDRkMxNDFBODgyRDlDM0FBM0Q3RUYzMzg1OUJCNkJFODkyQjY4QjU0MUM3QzYzOUVEMUVFRkU1NTcyRDBBRTg0NTQ1MTg0REU0QTZEMzE0QzUwMDFERDY1RERDMUVFNUI0QzkwMkI0MDI2MUYzOEVCRDc2MUVEMDg4REVBMUFBRjQzNTAzRjIwN0M0REVBNTIwRDA0QkMyN0JBOTEKKzcyOUMKKzBBCitGMUQzN0QwRAorQ0IzRjMyNkUxMjEzMDgyREU5ODE4RUIxMUM0MQorMTQwNjBGQUQ0RTFEQzhCNworMURGNEM0MzYKKzkzRjQzMEM2REUyMjJBRkQ2NjZENTQ5MzU2Njc3REI4NTQ2NUNEQjVCMzFDMkY0QkVBOUQxRDg5MDhCMDFBRDRDRUE0CitDNEQ3NDI0REFCOEJCMEQxRDA2MkFFRTY4RTAxNzIwODVERjNENzMxQjIwQzg2OTE1NzQ0RUE1QUNGOTNBM0Q5NzM2Qjg1MzAzNUNFCis0QUM4RDc3OEEwQzk0MzE5REVEMDQ2NjAyRDNERjY3MDY5QUVDNTE3REY4NUNDQURDNzM1Q0QKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNGIgMTQuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxYzJiMzkzNTJiMzcyYzExMDExMjAxMTMyYjMzMjkyZTMyMjczNzMwMDEyYzM0MzcwMTFiMmIyNzM4M2EzNzJmMzMyZDAxMWMyYjM5M2MzNDM3MzAwMTFkPiAyMjA3IDU1OCAwIDczODQgLTEgcworPDJiMzcyYzM0MzczMjI3MzMyOTJiPiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwYjBhPiA5MzQ2IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDE0YiBTRgorPDBhMGYwZDE5MTExNTE0PiAxMjcxIDE0NTggMCAyMDU1IC0xIHMKKzwwMDA0MDMwMDA3MGYxOTE2MGYxNzEwMDAwNTE1MTMxMzBiMTQwZTAyMTIxMTE0MGYwMDA4MTYxOTExMTUxNDE4MDAwOT4gMjA1NSAxNDU4IDUgNjEwMSAwIHMKKzwwZjEwMGYxNzBmMTQwZDBmPiA2MDk3IDE0NTggMCA2OTc0IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjAyZTJmMzg+IDEyNzEgMjAwNSAwIDE2NjUgLTEgcworPDAwMzgyYjI5MzkyZjM0MzMwMDJhMmIzODI5MzcyZjI4MmIzODAwMmIyNzI5MmUwMDM0MmMwMDM5MmUyYjAwMmQzMTM0MjgyNzMxPiAxNjY1IDIwMDUgNiA0ODQyIDAgcworPDAwMjkzNDMyMzIyNzMzMmEwNjMxMmYzMzJiMDAzNDM1MzkyZjM0MzMzODAwMjczYjI3MmYzMTI3MjgzMTJiMDAyZjMzMDAzOTJlMmIwMDMzMmIzOTM1MmIzNzJjMDAzNTM3MzQ+IDQ4NDIgMjAwNSA3IDk0NjEgMCBzCis8NDE+IDk0NjEgMjAwNSAwIDk1MzEgLTEgcworPDJkMzcyNzMyMDc+IDEyNzEgMjI0OSAwIDE3ODcgLTEgcworPDAwMTYzODM4MmIzMzM5MmYyNzMxMzEzZTA1MDAyZjM5MDAyZjM4MDAyNzMzMDAyYjNkMzUyNzMzMmEyYjJhMDAzYjJiMzczODJmMzQzMzAwMzQyYzAwMzkyZTJiMDAzYTM4MjcyZDJiMDAyZjMzMmMzNDM3MzIyNzM5MmYzNDMzMDAyYTJmMzgzNTMxMjczZTJiMmEwMDI4M2UwMDMzMmIzOTM1MmIzNzJjMDAzYzJlMmIzMz4gMTc4NyAyMjQ5IDE0IDk1MzEgMCBzCis8MmYzMzNiMzQzMDJiMmE+IDEyNzEgMjQ5NCAwIDE5ODggLTEgcworPDAwM2MyZjM5MmUwMDM5MmUyYjAwMDYyZTAwMzQzNTM5MmYzNDMzMDAyZjMzMDAyZDMxMzQyODI3MzEwMDI5MzQzMjMyMjczMzJhMDAzMTJmMzMyYjAwMzQzNTM5MmYzNDMzMDAyNzM3MmIyNzA3PiAxOTg4IDI0OTQgMTAgNzA3NiAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA1MTUxMzEzMGIxNDBlMDIxMjExMTQwZjAwMDgxNjE5MTExNTE0MTgwMDBhMWIxNDE5MGIxYT4gMTI3MSAyOTI4IDIgNDIwMCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MWU+IDEyNzEgMzMxMSAwIDE0MzQgLTEgcworPDJiM2IyZjM4MmYzNDMzPiAxNDI2IDMzMTEgMCAyMDU2IC0xIHMKKzwwMDBhMDcwZjAwMzQyYzAwMzMyYjM5MzUyYjM3MmMwMDJmMzMzOTM3MzQyYTNhMjkyYjJhMDAyYjMzMzQzYTJkMmU+IDIwNTYgMzMxMSA1IDUwNTcgMCBzCis8MDAzMzJiM2MwMDJjM2EzMzI5MzkyZjM0MzMyNzMxMmYzOTNlMDAzOTM0MDAzNDNiMmIzNzM3M2EzMzAwMzkyZTJiMDAxNjMzMmQzMTJmMzgyZTAwMjczMTM1MmUyNzI4MmIzOT4gNTA1NyAzMzExIDcgOTUzMSAwIHMKKzwyYzM0Mzc+IDEyNzEgMzU1NiAwIDE1MzggLTEgcworPDAwMzIzMzJiMzIzNDMzMmYyOTAwMjkzNDMyMzIyNzMzMmEwMDMxMmYzMzJiMDAzNDM1MzkyZjM0MzMwMDMzMjczMjJiMzgwNzAwMTc+IDE1MzggMzU1NiA2IDUyNzAgMCBzCis8MzQzNzAwMzkyZTJmMzgwMDM3MmIyNzM4MzQzMzA1MDAyOTM0MzIzMjI3MzMyYTA2MzEyZjMzMmIwMDM0MzUzOTJmMzQzMzM4MDAzYzJiMzcyYjAwMzgzNTMxMmYzOT4gNTI2MiAzNTU2IDYgOTUzMSAwIHMKKzwyZjMzPiAxMjcxIDM4MDEgMCAxNDQ1IC0xIHMKKzwwMDFlPiAxNDQ1IDM4MDEgMSAxNjYwIDAgcworPDJiM2IyZjM4MmYzNDMzMDAwYTA3MGYwNzAwMjAyZTJmMzgwMDM4MzUzMTJmMzkwMDM3MmIzMjI3MmYzMzM4MDAyZjMzMDAxZT4gMTY1MiAzODAxIDYgNDc0NSAwIHMKKzwyYjNiMmYzODJmMzQzMzAwMGEwNzEwMjczMTM1MmUyNzA3MDAyMDJlMmIzNzJiMDAyNzM3MmIwMDM5M2MzNDAwMzkzZTM1MmIzOD4gNDczNyAzODAxIDUgODA3NiAwIHMKKzwwMDM0MmMwMDMzMmIzOTM1MmIzNzJjMDAyOTM0MzI+IDgwNzYgMzgwMSAzIDk0NjEgMCBzCis8NDE+IDk0NjEgMzgwMSAwIDk1MzEgLTEgcworPDMyMjczMzJhMDYzMTJmMzMyYj4gMTI3MSA0MDQ2IDAgMjI5NiAtMSBzCis8MDAzNDM1MzkyZjM0MzMzODA3MDAyMDJlMmIzZTAwMjczNzJiMDAyNjI2MmQzMTM0MjgyNzMxMDIwMDI3MzMyYTAwMjYyNjM5MmIzODM5MDYzODM1MmIyOTJmMmMyZjI5MDcwMjAwMTMzNDM5MmUwMDM5M2UzNTJiMzgwMDI3MzcyYj4gMjI5NiA0MDQ2IDkgODExMCAwIHMKKzwwMDJiMzMzOTJiMzcyYjJhMDAzNDMzMDAzOTJlMmI+IDgxMTAgNDA0NiAzIDk1MzEgMCBzCis8MzgyNzMyMmI+IDEyNzEgNDI5MSAwIDE3MzYgLTEgcworPDAwMjkzNDMyMzIyNzMzMmEwMDMxMmYzMzJiMDUwMDI4M2EzOTAwMzkyZTJiM2UwMDMyM2EzODM5MDAyODJiMDAzODJiMzUyNzM3MjczOTJiMmEwMDI4M2UwMDI3MDAyNjI2MDYwNjAyMDAyYzM0MzcwMDI5MzQzNzM3MmIyOTM5MDAzNTI3MzczODJmMzMyZDA3MDAxODMxMzQyODI3MzEwMDI5MzQzMj4gMTczNiA0MjkxIDE1IDk0NjEgMCBzCis8NDE+IDk0NjEgNDI5MSAwIDk1MzEgLTEgcworPDMyMjczMzJhPiAxMjcxIDQ1MzYgMCAxNzgyIC0xIHMKKzwwMDMxMmYzMzJiMDAzNDM1MzkyZjM0MzMzODAwMjkzNDMyMmIwMDJjMmYzNzM4MzkwNTAwMmMzNDMxMzEzNDNjMmIyYTAwMjgzZTAwMzkyYjM4MzkwNjM4MzUyYjI5MmYyYzJmMjkwNzAwMTkyYzAwMzQzMzMxM2UwMDM5MmIzODM5MDYzODM1MmIyOTJmMmMyZjI5MDAzNDM1MzkyZjM0MzMzODAwMjczNzJiMDAzOTM0PiAxNzgyIDQ1MzYgMTMgOTI3NSAwIHMKKzwwMDI4MmI+IDkyNzUgNDUzNiAxIDk1MzEgMCBzCis8MzgzNTJiMjkyZjJjMmYyYjJhMDU+IDEyNzEgNDc4MSAwIDIxMjYgLTEgcworPDAwMzkyZTJiM2UwMDMyM2EzODM5MDAyODJiMDAzNTM3MmIyOTJiMmEyYjJhMDAyODNlMDAyNjI2MDYwNjAyMDAzNDM3MDAzOTJlMmIwMDM3MmIzODNhMzEzOTM4MDAzYzJmMzEzMTAwMjgyYjAwM2EzMzJhMmIyYzJmMzMyYjJhMDc+IDIxMjYgNDc4MSAxMiA3OTkzIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDYxMjE1MGMwYjEyMDAwODE2MTkxMTE1MTQxOD4gMTI3MSA1MjE0IDEgMjY3NCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDYyNz4gMTU4OSA1NTk4IDAgMTg3MSAtMSBzCis8MzgyZjNmMmIzODM1MmIyOT4gMjAzMyA1NTk4IDAgMjc2NCAtMSBzCis8MjAyZTJmMzg+IDMxNzcgNTU5OCAwIDM1NzEgLTEgcworPDAwMzQzNTM5MmYzNDMzMDAyNzMxMzEzNDNjMzgwMDNlMzQzYTAwMzkzNDAwMjczMTM5MmIzNzAwMzkyZTJiMDAzODJiMzMyYTAwMjczMzJhMDAzNzJiMjkyYjJmM2IyYjAwMjgzYTJjMmMyYjM3MDAyNzMxMmYyZDMzPiAzNTcxIDU1OTggMTEgODgyNSAwIHMKKzw0MT4gODgyNSA1NTk4IDAgODg5NSAtMSBzCis8MzIyYjMzMzkzOD4gMzE3NyA1ODQzIDAgMzcyMiAtMSBzCis8MDAzNDMzMDAzOTJlMmIwMDMxMzQyOTI3MzEwMDM4M2UzODM5MmIzMjA3MDAxNDJlMjczMzJkMmYzMzJkMDAzOTJlMmIwMDI3MzEyZjJkMzMzMjJiMzMzOTAwMzQyYzAwMzkyZTJiMDAyODNhMmMyYzJiMzczOD4gMzcyMiA1ODQzIDEwIDg4OTUgMCBzCis8MjkyNzMzPiAzMTc3IDYwODcgMCAzNDkxIC0xIHMKKzwwMDJjMzQzNzI5MmIwMDM5MmUyYjAwMzgzZTM4MzkyYjMyMDAzOTM0MDAzYTM4MmIwMDJhMmYyYzJjMmIzNzJiMzMzOTAwMjkzNDM1M2UyZjMzMmQwMDM4MjkyZTJiMzIyYjM4MDUwMDNjMmUyZjI5MmUwMDI5MjczMz4gMzQ5MSA2MDg3IDEwIDg4OTUgMCBzCis8MmUyNzNiMmI+IDMxNzcgNjMzMiAwIDM1OTkgLTEgcworPDAwMjcwMDMyMmIyNzM4M2EzNzI3MjgzMTJiMDAyZjMyMzUyNzI5MzkwMDM0MzMwMDM1MmIzNzJjMzQzNzMyMjczMzI5MmIwNzAwMTkyYzAwMzkyZTJiMDAzNTI3MmQyYjAwMzgyZjNmMmIwMDJjMzQzNz4gMzU5OSA2MzMyIDEwIDg4OTUgMCBzCis8MzkyZTJiPiAzMTc3IDY1NzcgMCAzNDY3IC0xIHMKKzwwMDM4M2UzODM5MmIzMjAwM2MyNzM4PiAzNDY3IDY1NzcgMiA0NTA3IDAgcworPDAwMGQwOTEwMGUwMDI4M2UzOTJiMzgwNTAwMjczMzJhMDAzZTM0M2EwMDNjMjczMzM5MmIyYTAwMzkzNDAwMzUyNzM4MzgwMDM1MjcyZDJiMDAyNzMxMmYyZDMzMmIyYT4gNDUwNyA2NTc3IDkgODg5NSAwIHMKKzwyODNhMmMyYzJiMzczOD4gMzE3NyA2ODIyIDAgMzgxMyAtMSBzCis8MDAyODJiMmQyZjMzMzMyZjMzMmQwMDM0MzMwMDM1MjcyZDJiMDAyODM0M2EzMzJhMjczNzJmMmIzODA1MDAzZTM0M2EwMDI5MzQzYTMxMmEwMDNhMzgyYjAwMjYyNjA2MjcwMDBkMDkxMDBlMDIwNz4gMzgxMyA2ODIyIDkgODg5NSAwIHMKKzwyMDJlMmI+IDMxNzcgNzA2NyAwIDM1MzcgLTEgcworPDAwM2EzMzJmMzkzODAwMmMzNDM3MDAzOTJlMmYzODAwMzQzNTM5MmYzNDMzMDAyNzM3MmIwMDNjMmUzNDMxMmIwMDI4M2UzOTJiMzgwNzAwMjMxNTJiMmMyNzNhMzEzOTExMDAwZjAwMjgzZTM5MmIzODI0PiAzNTM3IDcwNjcgMTAgODQ5MyAwIHMKKzwwNjEyPiAxNTg5IDczOTEgMCAxOTI5IC0xIHMKKzwzODJmM2YyYjM4MzUyYjI5PiAyMDMzIDczOTEgMCAyNzY0IC0xIHMKKzwyMDJlMmYzOD4gMzE3NyA3MzkxIDAgMzU3MSAtMSBzCis8MDAzNDM1MzkyZjM0MzMwMDJmMzgwMDJmMmEyYjMzMzkyZjI5MjczMTAwMzkzNDAwMzkyZTJiMDAwNjI3MDAzNDM1MzkyZjM0MzMwMDNjMmYzOTJlMDAzOTJlMmIwMDJiM2QyOTJiMzUzOTJmMzQzMzAwMzkyZTI3Mzk+IDM1NzEgNzM5MSAxMSA4ODk1IDAgcworPDM5MmUyYj4gMzE3NyA3NjM2IDAgMzQ2NyAtMSBzCis8MDAyNzMxMmYyZDMzMzIyYjMzMzkzODAwMjczNzJiMDAyNzMxMzkyYjM3MmIyYTAwMmMzNDM3MDAzOTJlMmIwMDM3MmIzMjM0MzkyYjAwMzgzZTM4MzkyYjMyMDc+IDM0NjcgNzYzNiA3IDc2MTggMCBzCis8MDYyOD4gMTU4OSA3OTYwIDAgMTg3OSAtMSBzCis8MzgyZjNmMmI+IDIwMzMgNzk2MCAwIDIzNjkgLTEgcworPDIwMmUyZjM4PiAzMTc3IDc5NjAgMCAzNTcxIC0xIHMKKzwwMDM0MzUzOTJmMzQzMzAwMDMwNjE1MTkxYzIwMTYxZT4gMzU3MSA3OTYwIDIgNTM4MSAwIHMKKzwyMj4gNTM1OCA3OTYwIDAgNTUyMCAtMSBzCis8MTIxYTFmMDAyOTM0MzIzNTJmMzEyNzM5MmYzNDMzMDAzNDMzMzEzZTA0MDAzODJiMzkzODAwMzkyZTJiMDAzODJmM2YyYjAwMzQyYz4gNTQ5NyA3OTYwIDYgODg5NSAwIHMKKzwyNz4gMzE3NyA4MjA1IDAgMzI4MiAtMSBzCis8MDAyODNhMzczODM5MDAzNDJjMDAzNTI3MjkzMDJiMzkzODAwMmYzMz4gMzI4MiA4MjA1IDQgNDkyMSAwIHMKKzwwMDI3MDAyNTFmMjAxZTE2MTIxYjAwMzkyYjM4MzkwNzAwMjAyZTJmMzgwMDI5MjczMzAwMjgyYjAwM2EzODJiMmEwMDM5MzQwMDQwMzUyNzI5MmIwMj4gNDkyMSA4MjA1IDkgODg5NSAwIHMKKzwzOTJlMmI+IDMxNzcgODQ1MCAwIDM0NjcgLTEgcworPDAwMzgyYjMzMmEwMDM3MjczOTJiMDAzYzJlMmIzMzAwMzkyZTJiMzcyYj4gMzQ2NyA4NDUwIDQgNTM1NyAwIHMKKzwwMDJmMzgwMDMzMzQwMDJjMzEzNDNjMDYyOTM0MzMzOTM3MzQzMTAwMzUzNzM0M2IyZjJhMmIyYTAwMjgzZTAwMzkyZTJiMDAzNTM3MzQ+IDUzNTcgODQ1MCA3IDg4MjUgMCBzCis8NDE+IDg4MjUgODQ1MCAwIDg4OTUgLTEgcworPDM5MzQyOTM0MzE+IDMxNzcgODY5NSAwIDM2MjkgLTEgcworPDAwMjgyYjJmMzMyZDAwMzIyYjI3MzgzYTM3MmIyYTA3PiAzNjI5IDg2OTUgMiA1MTY2IDAgcworPDA2Mjk+IDE1ODkgOTAxOSAwIDE4NTkgLTEgcworPDIzMzcyNzM5MmIyND4gMjAzMyA5MDE5IDAgMjUzMSAtMSBzCis8MjAyZTJmMzg+IDMxNzcgOTAxOSAwIDM1NzEgLTEgcworPDAwMzQzNTM5MmYzNDMzMDAzYzJmMzEzMTAwMzcyYjM2M2EyYjM4MzkwMDE0MWQyMTAwM2EzOTJmMzEyZjNmMjczOTJmMzQzMzAwMjczMzJhMDAzODJiMzczYjJmMjkyYjAwMmEyYjMyMjczMzJhMDAyOTI3MzE+IDM1NzEgOTAxOSA5IDg4MjUgMCBzCis8NDE+IDg4MjUgOTAxOSAwIDg4OTUgLTEgcworPDI5M2EzMTI3MzkyZjM0MzMzOD4gMzE3NyA5MjY0IDAgMzk4OSAtMSBzCis8MDAyYzM0MzcwMDM5MmUyYjAwMzEzNDI5MjczMT4gMzk4OSA5MjY0IDMgNTE2NSAwIHMKKzwwMDM4M2UzODM5MmIzMjA3MDAxOTJjMDAzOTJlMmIwMDM0MzUzOTJmMzQzMzI3MzEwMDM3MjczOTJiMDAzNTI3MzcyNzMyMmIzOTJiMzcwMDJmMzg+IDUxNjUgOTI2NCA3IDg4OTUgMCBzCis8MzgzNTJiMjkyZjJjMmYyYjJhMDU+IDMxNzcgOTUwOSAwIDQwMzIgLTEgcworPDAwMzMyYjM5MzUyYjM3MmMwMDNjMmYzMTMxMDAzYTM4MmI+IDQwMzIgOTUwOSAzIDU0ODQgMCBzCis8MDAzOTJlMjczOTAwMmYzMzM4MzkyYjI3MmEwMDM0MmMwMDI5MjczMTI5M2EzMTI3MzkyZjMzMmQwMDM5MmUyYjAwMzcyNzM5MmIwMDJmMzk+IDU0ODQgOTUwOSA3IDg4MjUgMCBzCis8NDE+IDg4MjUgOTUwOSAwIDg4OTUgLTEgcworPDM4MmIzMTJjMDc+IDMxNzcgOTc1NCAwIDM1NDQgLTEgcworPDAwMTc+IDM1NDQgOTc1NCAxIDM3NTYgMCBzCis8MzQzNzAwMzIzNDM3MmIwMDJmMzMyYzM0MzczMjI3MzkyZjM0MzMwMDM0MzM+IDM3NDggOTc1NCAzIDU5NzUgMCBzCis8MDAxNDFkMjEwMDNhMzkyZjMxMmYzZjI3MzkyZjM0MzMwMDMyMmIyNzM4M2EzNzJiMzIyYjMzMzkzOD4gNTk3NSA5NzU0IDMgODg5NSAwIHMKKzwzYzJmMzkyZT4gMzE3NyA5OTk5IDAgMzU2MyAtMSBzCis8MDAzMzJiMzkzNTJiMzcyYzA1MDAzNTMxMmIyNzM4MmIwMDI5MzQzMzM4M2EzMTM5MDAxZjJiMjkzOTJmMzQzMzAwMGMwNzAwMjMxNTJiMmMyNzNhMzEzOTExMDAzMzM0MDAxNDFkMjEwMDMyMmIyNz4gMzU2MyA5OTk5IDkgODgyNSAwIHMKKzw0MT4gODgyNSA5OTk5IDAgODg5NSAtMSBzCis8MzgzYTM3MmIzMjJiMzMzOTM4MjQ+IDMxNzcgMTAyNDQgMCA0MTc0IC0xIHMKKzwwNjE0PiAxNTg5IDEwNTY4IDAgMTkxNiAtMSBzCis8MjMzNzI3MzkyYjI0PiAyMDMzIDEwNTY4IDAgMjUzMSAtMSBzCis8MjAyZTJmMzg+IDMxNzcgMTA1NjggMCAzNTcxIC0xIHMKKzwwMDM0MzUzOTJmMzQzMzAwMmYzODAwMmYyYTJiMzMzOTJmMjkyNzMxMDAzOTM0MDAzOTJlMmIwMDA2MjkwMDM0MzUzOTJmMzQzMzAwM2MyZjM5MmUwMDM5MmUyYjAwMmIzZDI5MmIzNTM5MmYzNDMzMDAzOTJlMjczOT4gMzU3MSAxMDU2OCAxMSA4ODk1IDAgcworPDJmMzkwMDM3MmIzNjNhMmIzODM5MzgwMDE0MWQyMTAwM2EzOTJmMzEyZjNmMjczOTJmMzQzMzAwMmMzNDM3MDAzOTJlMmIwMDM3MmIzMjM0MzkyYjAwMzgzZTM4MzkyYjMyMDc+IDMxNzcgMTA4MTMgNyA3NjYwIDAgcworPDA2MmE+IDE1ODkgMTExMzcgMCAxODgyIC0xIHMKKzwyMDJlMmYzOD4gMzE3NyAxMTEzNyAwIDM1NzEgLTEgcworPDAwMzQzNTM5MmYzNDMzMDAzYzJmMzEzMTAwMmYzMzI5MzcyYjI3MzgyYjAwMzkyZTJiMDAzNjNhMjczMzM5MmYzOTNlMDAzNDJjMDAyYTJiMjgzYTJkMmQyZjMzMmQwMDM0M2EzOTM1M2EzOT4gMzU3MSAxMTEzNyA4IDg1MDUgMCBzCis8MDAyYTJmMzg+IDg1MDUgMTExMzcgMSA4ODI1IDAgcworPDQxPiA4ODI1IDExMTM3IDAgODg5NSAtMSBzCis8MzUzMTI3M2UyYjJhPiAzMTc3IDExMzgyIDAgMzc3MiAtMSBzCis8MDAyYTNhMzcyZjMzMmQwMDI3MDAzOTJiMzgzOTA3MDAxOTJjMDAyYTJiMjgzYTJkMmQyZjMzMmQwMDJmMzgwMDM4MmIzOTAwMmUyZjJkMmUwMDJiMzMzNDNhMmQyZTA1MDAyZjM5MDAzMjI3M2UwMDJlMjczYjJiPiAzNzcyIDExMzgyIDEyIDg4OTUgMCBzCis8Mjc+IDMxNzcgMTE2MjcgMCAzMjgyIC0xIHMKKzwwMDMyMmIyNzM4M2EzNzI3MjgzMTJiPiAzMjgyIDExNjI3IDEgNDM5OSAwIHMKKzwwMDJmMzIzNTI3MjkzOTAwMzQzMzAwMzUyYjM3MmMzNDM3MzIyNzMzMjkyYjA3MDAxNTJiMjgzYTJkMmQyZjMzMmQwMDJmMzMyYzM0MzczMjI3MzkyZjM0MzM+IDQzOTkgMTE2MjcgNSA4ODk1IDAgcworPDJjMzQzNz4gMzE3NyAxMTg3MSAwIDM0NDQgLTEgcworPDAwMzkyZTJiMDAzMTM0MjkyNzMxMDAzODNlMzgzOTJiMzIwMDAzMzkyZTJiMDAzNDMzMmIwMDM3M2EzMzMzMmYzMzJkMDAzMzJiMzkzNTJiMzcyYzA0MDAyZjM4MDAzNTM3MmYzMzM5MmIyYTAwMzkzNDAwMzgzOTJhMzQzYTM5MDc+IDM0NDQgMTE4NzEgMTEgODg5NSAwIHMKKzwxNTJiMjgzYTJkMmQyZjMzMmQ+IDMxNzcgMTIxMTYgMCA0MTY1IC0xIHMKKzwwMDJmMzMyYzM0MzczMjI3MzkyZjM0MzMwMDJjMzQzNzAwMzkyZTJiMDAzNzJiMzIzNDM5MmIwMDM4M2UzODM5MmIzMjAwMDMzOTJlMmIwMDM0MzMyYjAwMzczYTMzMzMyZjMzMmQ+IDQxNjUgMTIxMTYgOCA4ODk1IDAgcworPDMzMmIzOTM4MmIzNzNiMmIzNzA0PiAzMTc3IDEyMzYxIDAgNDA5NyAtMSBzCis8MDAyZjM4MDAzODJiMzMzOTAwMzkzNDAwMzkyZTJiMDAyYzJmMzEyYjAwMDgzOTMyMzUwODMzMmIzOTM1MmIzNzJjMDcyYTJiMjgzYTJkMDAyMzE1MmIyYzI3M2EzMTM5MTEwMDMzMzQwMDJhMmI+IDQwOTcgMTIzNjEgOSA4ODI1IDAgcworPDQxPiA4ODI1IDEyMzYxIDAgODg5NSAtMSBzCis8MjgzYTJkMmQyZjMzMmQyND4gMzE3NyAxMjYwNiAwIDM5NTggLTEgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDIyKSAyMgorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM0IHB1dAorZHVwIDMgL0MwMDM5IHB1dAorZHVwIDQgL0MwMDQwIHB1dAorZHVwIDUgL0MwMDQxIHB1dAorZHVwIDYgL0MwMDQ0IHB1dAorZHVwIDcgL0MwMDQ1IHB1dAorZHVwIDggL0MwMDQ2IHB1dAorZHVwIDkgL0MwMDQ3IHB1dAorZHVwIDEwIC9DMDA0OCBwdXQKK2R1cCAxMSAvQzAwNDkgcHV0CitkdXAgMTIgL0MwMDUwIHB1dAorZHVwIDEzIC9DMDA1MSBwdXQKK2R1cCAxNCAvQzAwNTIgcHV0CitkdXAgMTUgL0MwMDU0IHB1dAorZHVwIDE2IC9DMDA1NyBwdXQKK2R1cCAxNyAvQzAwNTggcHV0CitkdXAgMTggL0MwMDY1IHB1dAorZHVwIDE5IC9DMDA2NiBwdXQKK2R1cCAyMCAvQzAwNjcgcHV0CitkdXAgMjEgL0MwMDY4IHB1dAorZHVwIDIyIC9DMDA3MSBwdXQKK2R1cCAyMyAvQzAwNzIgcHV0CitkdXAgMjQgL0MwMDczIHB1dAorZHVwIDI1IC9DMDA3NSBwdXQKK2R1cCAyNiAvQzAwNzcgcHV0CitkdXAgMjcgL0MwMDc4IHB1dAorZHVwIDI4IC9DMDA3OSBwdXQKK2R1cCAyOSAvQzAwODAgcHV0CitkdXAgMzAgL0MwMDgzIHB1dAorZHVwIDMxIC9DMDA4NCBwdXQKK2R1cCAzMiAvQzAwODUgcHV0CitkdXAgMzMgL0MwMDg3IHB1dAorZHVwIDM0IC9DMDA4OCBwdXQKK2R1cCAzNSAvQzAwODkgcHV0CitkdXAgMzYgL0MwMDkxIHB1dAorZHVwIDM3IC9DMDA5MyBwdXQKK2R1cCAzOCAvQzAwOTYgcHV0CitkdXAgMzkgL0MwMDk3IHB1dAorZHVwIDQwIC9DMDA5OCBwdXQKK2R1cCA0MSAvQzAwOTkgcHV0CitkdXAgNDIgL0MwMTAwIHB1dAorZHVwIDQzIC9DMDEwMSBwdXQKK2R1cCA0NCAvQzAxMDIgcHV0CitkdXAgNDUgL0MwMTAzIHB1dAorZHVwIDQ2IC9DMDEwNCBwdXQKK2R1cCA0NyAvQzAxMDUgcHV0CitkdXAgNDggL0MwMTA2IHB1dAorZHVwIDQ5IC9DMDEwNyBwdXQKK2R1cCA1MCAvQzAxMDggcHV0CitkdXAgNTEgL0MwMTA5IHB1dAorZHVwIDUyIC9DMDExMCBwdXQKK2R1cCA1MyAvQzAxMTEgcHV0CitkdXAgNTQgL0MwMTEyIHB1dAorZHVwIDU1IC9DMDExMyBwdXQKK2R1cCA1NiAvQzAxMTQgcHV0CitkdXAgNTcgL0MwMTE1IHB1dAorZHVwIDU4IC9DMDExNiBwdXQKK2R1cCA1OSAvQzAxMTcgcHV0CitkdXAgNjAgL0MwMTE4IHB1dAorZHVwIDYxIC9DMDExOSBwdXQKK2R1cCA2MiAvQzAxMjAgcHV0CitkdXAgNjMgL0MwMTIxIHB1dAorZHVwIDY0IC9DMDEyMiBwdXQKK2R1cCA2NSAvQzAxMjQgcHV0CitkdXAgNjYgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy01MCAtMjU2IDk3OCA3NjRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMjQyRDJDN0M1Mjk4OEExNkQzQUQ2M0ZBMEE2QTUzMUY1OTgKKzgyQzdGREZDRjlGNzdBMjk1RjExQ0ZGQgorNUIxMkZENDAzMzIzNTIzMjU0Cis0RTg2QkE5RgorODcyRDRFNTUzODQwN0I1NEI4MkU0RDI4N0JGMworQUM4MzREOUJDMEZENkJGQzgxQkI3MTVBQkI0QkJENjA3QjAxRUM3QkM2NTI1NTIwN0E1QTFGRUI0RjYyMDAzRTc3Qzg4MUY5OThEMzZGRUFDOEY4NjlEOUIwQkEyMzQ1Njk1Q0UzNjM3OTQ4NDc1MTdGODY4NEFGMjk2OUEyNzI2NDNCODNBNEQ0OEE3QTRDMjFBODAwMzg4QzdCQTQ3M0VFODYyNEZBMDIyRjM0MkQ0OTU0NjM3QkREMEY5NjYxOUJEQzIzOTQ2ODdCM0MKKzkxMUJERjI5CiswNzU3MzlBNEYxQjdGQzUxQzM0NUNDNTBGRQorNjExMUNDQjQ1ODIyMzIxODNENjU4Q0I4RTJDQTc4RUY1MjBEMTYyMDI5NzhERjdFMTlGNkEyM0VFN0E4NjAxMEU0RUQ3NTU1QzBEQ0Q5NzgyNkY0REM4MzYxQUQ4MDY4QUYyRkExN0I3MkFGQkE3MAorNzk4Mjc4RjMKK0M0M0FBRDEwRkQ0NzVDNDI0MjQyNzY4QTFCCitCREVCMzg0MTRCRDc2Njc3OUMyRkQwQzFDOThDQTQ5OTdFODIwRDJBMEVFMzlDRUNDMTNBREEzQTdGQzFFNUNEN0VEOTM5NjBGNjVFREJBMURDNENCQkExMTQ2NUI5OUE2QUE3MjMyODAyMUNBNDg0MTVGNTA5RTc2RjNERjQyRAorMjlGREJGNTQKKzgxQjdCNEE1NjBEQThBMEU3QTE4NjVFMkUzCitGQkFEM0JCQ0I2RjkzNzc3QjY2NzM1OUFBNTgyMzk2MjhFQTlBMjlBQUEzOEU5MDQ2MkREQ0YyRTNEMkNCQTFENUIxQ0QxMTZDOUNBRUQxNDcxN0YwRTJDNENFMzcxMjYzODRDOUNDNTcxQzJFMkU5MEUzOUQ2NTc2MDFBMjcKK0U5ODA0MTE2CitDMDM1NkQzMTAxOUQ3NUI1MzM5QzM0MzNBOAorNTJFQjBCM0VFNzY5Njg4OUM1OTgzMEM2NDhDRTUxMDMzQjFBMTFEQ0JGNzc2OTUxMzNGM0NGQjI1MkU0NEU1Qjg0QzAzQkIzMUQyNjhFM0E3RjdCOTg5QTQxNTczQkE1RDc0QTIwQTgwRTA0MDYyM0Y4CitCMjdDOTI1NgorNjQ4QjYyODA1NjM3NzYyMjE5MDYwODAyNjIKK0MwRDlCRTJDMDA4MURFMTcwQkE2N0JEMDhFNkU0NzcyOURBREVCM0IzNzcwRjcKK0ZBMDcxM0Y4Cis2QzJCOTU0MDhEMDJFMjYwODA4RjAzODQ4NQorRUU3MDFERkVENTk4NEM4RjJFN0NCODk2REVBNDQ4RTE2RkVBOEU1RTk5MjRDQTkzNTM3QzBDMDg2MjREOEIKKzVEMDQ4QzJCCisxMUQ0ODk2RUIzRkM0MTREQkUzMzhBODkyOAorMzk0NjZFMzE3QjNDRkFENjVCQUExNkFEM0Q1QkNBNTVBNkRCQUE5RjdFNjIwMzY4NkY3RjZDRTUKKzY4NjE4NzlBCiszQjA2RjYzM0JFNTQ3MTNFM0VBQjQ3RDRCRgorODVGRkE2MjM0NUU5RDcwMjY2QTExQTYzRjU2NDVFOEJDQTczQjJERTdERDFCOEZCRjA4OTg2Qjc4MDVDQzZCNTdDNDVCMzQ5OUVEMUM1OUIxRDIxQjM4NDA1NUUzNjIyMEJFRjEzN0I1RjE0MEQ1NzRCREJGQUZDQjVCMTk4MkMzMzgwNjJDOUM1NTc3REE1NDM4NAorOUQ1MUQ4MDEKK0Y1NDIyMzU5Q0NCNTM4OUEyOUM0OTQ5RTlECis3QzFEMTlDRjQ5ODExQTYyMzQ4MDdBNDM1NERCNjI5QzY0NzhDMUFCRkY3QzBCN0UyMjEyODRDOTYxODJGMjJDOTIyMkM0RURBRTExMkQ5MUE5M0Y3OEY3NzFBRkEyMkQ1QTNBN0FFRUVEOEU5MzU3MzQ3NEE0QjY1RjUzQzMKKzNDNjc1OEQxCis4RTg2RTlBRTZBQTRBNkZBRjE3MzU2RDBBRAorMEZCQUYyNTc3RDU3M0M5MUU5QzBEMzMxQTk5OUIzOUVGNURGOURCQUQ2RTVDQThGMjdDMEJCOEVFNzZDMDEzNTk2QTdENjc0NzdGM0YzNzYyQkVGREVCQjhERjQ3NzAwNTE3RDI4MEZFOTMwNzIwMTRBQzNBQTAyMEI1NTNFNjMzOTRDMzE1MzEyN0NCRUMxQzkxNTI3MTlFOEFDM0FERjk4QjgyOEFBMDgyNUMxNUZCNDVCCitFQjM3NkFDMworMjAyQzJDNEMyRjlCREYzMEM0MjJDRkIwMUYyMgorQTk0NEVGMjE1OTdEMkYzN0U5OEFGODM2NUVGRTc5OEVFN0FBNUZEMUYwNzE2MUVCMTMwQkNBMDI0NzE2MUM3QUM3OTQwNzA2QTRCRkYwMTA4NThGNDc1NjQ4NUU4OTk3NURBNjA2ODdBQUUzNzg4NUQ3NkUzRDU3NzUzMTFBMUVEMUExQkYzMkU0NUM2RkUzOTQxQjg4MzYxRTQ1MDFGMzI3ODY3MDI5N0MzNTk2RUYyOEU4MTIzQ0UyQTFGMDU5MzZDRTY0OUExOTNCRkI4N0MyNzg2QTNCRDFBMkJFCis1ODg4RTk1OQorMkUyODMzMjdFMzk0OUJFRDEzRkQzMjYyQjcKKzExOTk0RUU3MkU5RkQyOTJCMTEyMTFDREZFOEEzRDQ3RDBDNjA2Q0U4RkIwRUExQUNFOUE4QzZCRkQ2OTgyNUQ2MjM0RkY0NEE1RkI5NEI2OTMyOTE3NTNCREQ5MTQzQjRGQzNGRERBOEIzOEJGOTlGMzVCCisxODVDOTYxQQorQ0YzNTg0RTIwMUM4RTYzMzBEM0NCNzE1MEI1QworMDA5QTZERUY3QTE3OThERDQyMURBRUExMTdEODhFQTI2MjIwMjBDRkIzMzY2QzE3MUJDNDhDQjZDRDUyNDRGQkVGRjE4REZGOTg3NkMwMDJDRTg2Q0YwMEFFMEZCNDYwODFFQkI5NDdBRTNBNUU0MTFCQ0JFMDFENTZBNDNBNjNERTBFNzI4ODQ2NkU2OEM5OERGOUY1Q0M2RDU1RTM2MUU4QkE2OTI2NkRBQTJBNzUzNTMzODBCMzBFNUM0MDg3RTg5OTJFRjgKKzM0RjdBOTI1CitDMTQ3NkMyQjYxNzU1RjM3QTE0MERCRDRCRDU4CitDRDdEMkZFNEY3QkU5RkI0ODQ1RUE0MDdGRTA5NzdFNTU5RjY4NEFDREI0RDQ4MzM4QTdBN0E3OEQwQ0E1NTVDNTBDOTYzNThDQThCREU1MjNDNTZDNTczM0Y5NEFDMEM2QjU4NjY1NTU4NTc3ODdCM0QxMjFCNzY2RUFCQUQ5MzZFMzUwMTM0N0JERTdGQ0Q2Q0U0MzU3NUU4NjU0MEM2RDlERDlCMEVCMEYyMDA5RjVDNjM2NjcyMzE1RTk4MEQ0ODI2NzQxODlBCis5Q0Q4QzREQworRkVBMDNBQUU4OEY4REM1RjI2NzdENUNDODQKKzMzNUE3NzZFMUM1RjcwQTBFNjZEQ0ZCNTgwMEZEQjAyNzRDNUQ0MTE0NEVFNzNFQTczNjA2QzUzRkFFM0YyMkYzQUUxNTA4RjQ5RTUzRkFGQTA4OUIyNjgyRjU3RjUyQkJCMEFGNTExMTRGMgorNjdBQjBFRkYKKzkwRDJFOEYwNzQ0QkI4RDFBODgwNkMxOUI3RTkKK0U1NTBGMDk2QTcyRTJENTIwQjM0NUIyNDYwMTg4RjY0QzRGOTlCNEVDOEVDMUQwNzM1QTJFMjIxMjY0NzFFNzEwREQ2NkJBOEQ4OENGRkYwMDM1QTEwOTE4NEM2OEFBNjVCOTlBMkVDRjhEM0Q2MzRBMTQ1MjMxNjQ1NzJCM0U4NDZDNERFRTc5RUFDRjgwRUZBRTc5MjIxNDNERDNCMENFMEM4MTk0RkREM0M1RUQ5OEQxNkJGOTVEOTg4OUFENjIxQjMxRkQ5MUQ1RkUxREIzN0VFNDdCQTRCNTVEQzBFM0ExMzA2Cis0RjVBQ0IxQgorQkY0MzRCNzUyRTAyQzcxMTgzMzI0ODFCRUFCNQorNDAyM0VERDkxMzJCNkEyMkU0MEM2NzFDMEE0OTJEQkMzM0YwMkRCRUI5M0VCNkYzNzE5MzlFQkVGRTgxM0ZBNEFEQzFFNUQyRTgyMTQ2MTc2Q0RGQTcwNDlBRjVGOTM3M0ZCQkY5MEU2REU1RTBEMkM3NDI4N0VCNTE2M0UyMTNCOTA3NjI2MDc1ODgxOUFDRjQ2OTAwRThFRkYwRUNCOEFDMTkxNEQyM0JFMkI3Nzg0RTc3QTJDNThCODYyNzU0ODY5QkQwNzlDMTE4QTk0NzVEREU2RDA1NTIyMkY1M0Y1OTZDNjI4MDk2RTU2MkQ5ODE5Mjc2MTZFMUI0Cis2OTcwCis2QgorNzI2ODg3RTkKK0E1Q0ZBMEVEQUU3N0JENzA3MTQ4NTc0Q0NGCis5MzQzQUREQUJBNURDNDJENkZGNjRGMDM4NDY0MkJBODk0MjQ4MTFEMjFBRjNFMTAwQTdCQjJDRDI5OENDQTQ4RkQ1NEQwRkY1Q0M2MTM4NDU4OTc1MTI0RTQ3NTVEQzlGRTZDOTUxQkYzRkVDQ0Q0OUJGODNCMzFGQzVCMDRGQjU2MjY1RkE5M0NENTg1NkRBQUMzMjk5QzlEMTVEMTk3ODUyNTczOEYzNzQ4RUE4RDVCRjM3NjNDQUQ5QUYyNkMwMQorQjVEODU4NTAKK0Q5ODAxQzUyOTNFRjA0MzY5OTQ2QTdDN0JBCiswM0MzOUUyQkYxMzM4QjhGOTZCNTBGQzBFOUNFREUwNUE2NUQyQjM4QTFDRkYwN0QxMjQzRTREMUNENDY4M0E3MjRGQjBDNUNBMDI3NzhCQUIwNjVGNERENjI3MTAyQkNGM0UxREJENjlFMDUwQ0ZGODAxODFGMENFNzUzQTQ3MzU3NEU4OTZCOEE0RUE4N0M0NDIyMDI3MUIxRDc2N0FBRjM4Q0IzRTE2N0ZCRkYyODkwMjIxNUY3REM0Qjc5RDI2NTYzRkUKK0M5NDU4MjAzCitEREY3ODY0NjYyRTBGQTdBOUY0RDcwMTQ1RDQ2Cis3RURDQzAwOEU0MDY4MUI4MjU4NEZERUIxOEFERDc0NjMxMDE5QUIzRUQ1MTlGOEUxMjRCN0NFODJDMjM2QUJFRTg2QzEyOTQyQjBENjJCMUE5RjU4QjBDQTZCNEJERUMzOTQ5MjY3NEZBNjdEOTQ3OTY4NzY4Q0YxMjBDMEExRERBMEQ0QjI3MTM3QkUwOUY3NzFDM0E4OERBRkRFRjIyQjkxNUI3NjBDMTk3RDAwRjE2RDVBODg0NDczNzkzMjlENUM5N0JFQzM4MDg1ODhGOENBMjg1Q0IzOUJERDY2NTcyMkQ3RDNDNjg1QjYwNzcyQzBBCitEMkE2Rjc2NQorQjAzOTM0RUM5QzlGODEwNkU4MEQ3NjczQzc4RQorMzNGQjUzQjhBMERDMkQyQUMxOTU2NTUwN0Y4MjJCMkZFQTI4NDBGQkI2RjE2NDgzNkM5OTQxMUU1MzE2QkNFOTBEQzdBODNGQUI1MzM5RTAzRUQyRUMyQzI0OEU0MTU1NkUxRTI4MEJGMkRBQTEzMThENzNBNEZBQzZBNkE3NkZDNjM5NTZFMTE3MTNBQTc0NDFDREFDMjE5NEVEQTc1RDVBQTg1MkYzMDAzQkUwODc2Qzk5REY3NTkyRDU2RDI5NTIyRDlCMjdBNDM0NzM0RTFCRDM1MTNGRUE2NjI4QTVGRjMzNjU2MkFBMkZDNzc2MjdGNjkwNEY1RkJFCis5OEVFCitFMTFBMjc3QTM5RkYxQTY0OTI0OUZGCitGNTAzRTdFNAorOTgxMEIzREJFRkJGNTIyOEI0NkIyQzAyODgKKzY0RkU1MTM2ODE5Njc2MjgwNUY3QkZEREJCREI3RjI4QjYwM0RCNjNDNkY3MTExOUVERURBQzg3QjA5Q0YzMEQxQjZCOEMyQ0NFMUY0NjNDQzg2NUJDOTM0RUIzREFCQkRCRDIyNzBCMDgzNTlFOEFFOThDNEMKK0U1MzM4QzNCCitDRjZGMzc1NUU4RkNDRkY5RUFCRjI0MDAyMzYwCis1RUQyRjg0ODQ3OUIyMDk1NEQ4QkY2NzhDRUQxQjcyMDA5Q0U1OEJDNDNCNjlBODM3REE2ODZFQkY2MEEwRUQ1OTI3OEQ2MDQ5MjAwQzk2MjFCRDZBQzQyODBDODdBQUMzNDUxMjA4NTRCMzY0MDUyMTAwRkFDNEREQTZDMURGRkJCOEJBMTNBNEQ2NUIzOUM3MTdERjhBOEE2QTIwMTk0RThGOTlFOTM5MzM0QzAwNjVFMkNBMzgwRUMwMzM3QjA5RkQ4NEJFRjNGN0Q3MzUwRTM2MEI4RkZDODNENDBFRTkwMjZGRjE4RDA1QjMxNDEzQTFEQjI2RTVDQTkKKzA1RTQKK0E2M0M0RjIyRTVBQTZDMDU2OTkwRUE1M0VBMTdDMzc2MEYwOUY5QjJGNkEyMzMxMzk0OTAzQjc1QUYxMEU1CitFOUNENEIwQQorNEY3RDJCN0Y5MzA3MUU1RTRFODAzMEI1NzFEMQorREU1OEZDNkY4NUM3MzgxQkJGRjVDMTZGQjhFOTA1NTU4ODMyQzY3RjQxRUZGOTFGMkJBQTcwRUIxQTI2MDMzOUExMjg0MDBFQjVFNDY5NUZCNzJGRjZEMzU1MTQzMDlBNEVFREQ4NjhGNzBFQzQ3NTI1QkNEQjU4Q0RCNTA1NDhCMDRGMTE0Mzg0Qjk5N0RFNzM5NjkwQzY3NkExQzZCN0NDMzUzRkFFRkRDNjU1QjQ0OTE3M0YzMzZGRTQ0Q0Y5RjY4NzhENTM5ODc2OUYyODE0OUEwRDdBMDFBQTgyCiszQjFFNDM3MworNjI4ODJBODc4NTFEM0ZEMzk4QTIwREQ0OTkKKzVBNjIyQkFGNkExN0Y0NjVBMTcyRjAxMTAwNEIzMDhFQ0I2RDA1MEEyNDgxMjE4NkEwQjQ4QkU1MTk0MkIzMTk4RTE0OEREMENCMkExMDAwRjk3MkQ0MjZBMkRENUY4QjdEOTc2REYwQUEyOUQwNTRFNkVCMEU4ODZGQUIzNjVGRkJFQ0JBMzU3RDA2Nzc4NDk1ODg2MTFDRjgyRUFCNENCQzlDOUE5QjdFODUwNEREQTM0M0M4NDEKKzc4MUI5RERECis4MERERDMyQUY3NkFFMzFFQTY5MkI5QzQ2RAorQjU4OTFDNUJGOTg4QTFEOUU5RjU0QzI2RDE4RjBDMTdDQjY2RTI3REM2MEE4MTU4QkFDMjVFNkEzMTg4RjY5NDJEOThDMkU5M0IwOEU1NzEyN0U4QzcyOEQ3NDNBQjk0MDJBN0VBQTFCMjIzNjc4RUQ2NUNBN0U4RDE3MDE3MDIyNkJGNzExQjI5OEU1ODVERDNBODZDRkVBNjBFNTJDQzE1NjA1RAorNTg0OTQ0Q0UKKzkxRjYxNkY1MDhGMjFDNUJBM0ZFNTQ0MkVCRDEKKzU1N0IwQkJENEVEQUI4RkQ2NTAyRjExMzA5MUMzOUNCMUE3MzlBMzI5OTExNTRBQjIxNUFENEIxNDdFOUM3QUQwRDFFNTlGRUE0RTI0MTgxQ0JDNTMzRDdCMkI0QkFGNUNDNzU5MUFENTUyNjg5MDhDQjA0RjE2RjM1ODJCRTZCMzRFMzk0NDNGMjJGQjUyNUVFMEU3MzgwQ0UzREMxRjRDMjY2NDI5M0U0RjUzNUNBOEJCODBBRUEyMDY3MEY3QUQxOEMwODY2NDAwQzMzNkQyNzVFCiswMEU2QzkwMQorNTFFQzBGRkIxM0IzNzI0REM2RTgwRUVFQUM1QgorMzM4QUI4MjhEOENERUE1NUJGRkRDMDg4NzRBM0Y5REYyQUQxOUY1OTlFMjM4QkM5NTUzRTY3ODAzQUM1NzZGRTJEMTcyMDVCQTNENUFFOTMwRUY3ODk4RjQxRUM0QzdEN0MzODJFNkQ5RkYzN0NFQTNGOTJFNDlFMDVEN0ZEMkY1MzFDMTMzOUNBMEU5RkFGODg0MUVFMjQ1NTFFNTNFQTExMDhCQTlEQzc4OThDNTU4MjUzNzVDOEEwNTRCQzQzNjFBRUYwM0NBNTI5OUE3NjhFNjRCMzY5MjUyRjRERTkwODcyN0VEMDI5M0FDQ0IzNERFQTNDM0Q0N0Y1Cis2NTFBCis2MTE3RTIKK0JCQkYyREMyCis5Rjk4MUFENjA3MjM3OTgzODQxQkY3NTE4OAorMDZDNkQyOTUwNUVFMjdCMTkxRUNBREU2QTI2RjgyNTRFNkM3NTVDRDZDMTdGNDA2QzAwRkNCREE5RUM0Qzc3MTNCRTU2ODYxREZCNDZFNzdDMkNBQkRCREFDQzBDMzU4ODMyQUQ0RkJFMzVBNDI1RDdDNDkwMjE1REExRTg3QTg1QjY0MzFBQTcxRkU3NjIxNzNFNzQ4QzI5RTcxMjFEMEIyCis0MUVDRjBGNgorOTk3MkVGOUNDMEM5RjgxOENFRTk3Q0YyQjdBRAorNTJFRTQwMzEzMTE1RUVBNUE1MjlDREU3MzdCRTQ2OTlEMjYyQzFGOUJFMDdDMjUzN0ExRkYyQ0RBODRDNTM3OTFGMTRCOTAxNjBEMTFEMzBDQUIzRkYyNzY2NzIzNzJEOEUxOTVDMEFDQzgxMjFEQ0U1RDY4QjAxMjg2ODAyMDI3NkY4OEI0QkYxMkIwRDRERkY1ODMyODJFOUJCQTc0REUxNzZDRjc4NzQ4RDhGQkNFNDEzNEMzM0NBNEU0NEIzNURCRTc1QjIKK0M5MTA4OUQ3CitCOEY2RjFDNkE4MTdFNDRFNDFDNkQ2RDUyMUU5CitEMEE3MERCOTNGNzNCRjU2MDE1N0QyRDNFQUZBRjQ1MEVCQ0I5OTBCRjY2M0Q1RTE5NUJFREEwRjcxQzJGNURCRUJCRTAzODY1MEQ3NUNDQjYyQ0E2NTY5RjZFMzdFQzZGM0JFMDhGRDU5RTQyNDVFQjAzODA5REM3MjQ0QUM5ODIwQ0Y4RjgzODQ5QTI0MkI1NzE1MDg5MTk1MUVGQzRGOEYxQkVFRTVDNTVFNkNEOTE2QzRGNDM5Q0VCRkFBOEFCODEyNTY5MzM1MEZCQkFCMkY1QTk1QzM5NzlDODFGMUZCNDFGRTgxOUQxNkZGRkY1NTMyOTFBQjg2OUMKKzk4QUEKK0NBQzA0OUI5RjQ3OTQ2MTdFMzkzMzRFNzI0NTRGNkJFCitFRUU5QTA0QgorRkFCOTkyMzNFRjcwOTdDODVFOUI5MEVGNkM5MgorN0I2NTY1N0ZCOUMxNTk0MTBDNDVEQkM0Rjg0RTgwNkQxRjc1MTkwRTU4REZGMzVFNDU2Q0NENzQ0QzRBRDVDMTNENTZBQTQ3NkUxOUY4QzI5ODdGNTFFNjQ3NTVFQjE0MzUxNEJENTk0QjgxOThDQTU1MkREMzI0NzFCN0QyOEYyQ0ZGNzYwNDc2OEQyRUEwOUI4RTNDMEZEOTZFMjQ0MzgwRDQ0OUMwMDVBQzg2MEJBMUQwQkVEOTBDQTQwMTMyNUMyOTI1OTMxMEExQ0E2MzNCQzNCQzREOTUxNjI4NDlEOUI1NUQwMUE0NDZEMTQ1RTU3M0Q2MUNBM0ZECis1QTM4Cis3OUM3OTgwMzdFRjFFNkZBODczRTQ1RTM3QTg0Mjc3RUQ0NTIyNERFOTc3ODM1OEFDNUQ0RUUwODkzRTREODQ3QUYxMUMyMTY5QzI4NUMKK0U1QTNGMjQxCis3RjBDQzYyMzg1QkE0MENEMUVDNzdDRkEyRkM2CitENDY1RjlGNzA0NENCNjQzREZEQUNDNkExMUY0ODc4RjEwQzdDQzRDNzI2QjJFQTkyRDVCQ0ZDMDZEMDM2MUFGOTJDMjMyMzRGNUM4M0Q1ODE0Q0FBM0MyNjg4ODFGRjgyOTdCNDk5MzY4QjFCOTVDNzZFQjEyQzU1NUEyRjBCOUUwMTA5QkI0MEE1RDdBMkJGNUJCQTk3NTBDQzJGNTI1NTQxQkE0RjhCMTIxQzNCRUYyOEQwN0MyQkNDQjQ2RjA2MzA5MzgxODBBMjQ5RTY5ODc3QUQ2RUNGQTRBRTg3QTYxNzg1MgorQ0U4RkY0NjAKKzM5NjhFNjJEOEMyRkM5QUVCN0ZBNjE4MTcxCis2REFFRjFCRjVBQkEzRjE3QUFFOENEODAwQzFGRjM3QTFFODNGNkY5QjRBN0I5NzlCQkQzRjM2RjVGNTQ2OTBDRTM2RDI2MUYzREZDQzgxNjA5NjMKKzk0RkEyMjRDCis2NEZEOTAzRjMyRTk3NDFDMjA5MERDMUQ5OAorN0YyRDYzMDEyQTIwRUIzQzU3OTkzREI0MjI3MjkwNTk4OTJEQkE4MUY3QTRFRUI2RTJDNTlBRTM3MzRERThCNUMzRDc3Q0FCN0NENDY0REYzRjJENjlFQworQTE5NDAwOUMKK0RCNzY2NjA5MkY4Qjc4MUVEQjMxNDFCMUVECitBMEU2RkZEMTY2MzczMjE3RkI1QUQ0RTZFMjNDNzcxMkQ3OEUyODg2RTRERjJFRDdBNDNERTEyMzE0Qjc5MDc0N0Y5RUU2OTlFOUFGQjQxNzU2NjRBRkEwNzNBNEZENjdFOUI3QjU0RENDMzFFMjcxMTQ3OAorQzFDRUY1NkQKKzczQTJBMTNCQ0E5OTVGMTAyMUQ5QTk3QUFBRTkKKzU2QzM0MEQ0MDVBNTk2MzNGNDM4N0E3QTE2RjQ4RDU2MjY2MEE3NkNBOTJDQjM1NzA3N0M4ODYwRkY3N0NGRkJFOTgwMTA0RkU1RTFDRjcyOUYwMkFFNkVERThFOTU1QzU1MzVGQTIzNERFRUUxNkRDNkM3MjM0MEQxRTVEQzNGN0YzNzIyOTQ3RDI3NEIxMjFFOUM4RjY5RDRGOTZENDlBM0I4Q0ZBMUFDNzA0MDM0QkYyMERGMDczQjc0Nzg3QjMzNUQ0MkFDN0RBOTcwMjVGMTJGNTQwRjY3MjRGQ0Q3NURFMEZCREZCQTBBQzFGRDUxRDI4NTY5MzVEQgorOTAwRAorQUM5OTAwCitBRjRDRTJCRQorODc2NjYwQUVFMENGMDhCOTQxMDY3MEU1MjcKK0JDOTUzMzJEOTMwMjUxODU2N0Q4NUI5ODkwRTBBOEY4MEJFNDM1RDEwNjQ2Njk4QkI4REM5NUMwRUZFREE4MTA1NjAwNTg1RkE2MjMyODVFOURBMDUzQkMxNDEzNTBDRjlDMEIyNzdFOTc0ODQ4Rjc0NjYwNDI2RjExMEQyNTk3NDYwMjQwMzdBQ0M5MzA3NzE4NjY4RTlEN0JGMjQ5QkI5NDIxQUMxRjk5QjM2ODA2Cis5MjUwOTFFMgorMjA2NURFODlFQzEwRkFGOUUyRDdCQzc4OEUKK0FCRDJBNzQ1Mzc1RDM5RDc0Njk0RDY5M0ZDNDdEMzhFNjY2MUE3QTAzNjRDOUVDNjI5QTdGQjJEQzA4NDQ5NEZFNjQ0NURBQkI4MTJBQjE4RkU3RTVFOTY3QUZGNjMzRjgzN0Q1ODhFNUE3NjVEMDhCOUQ2MTM3MTU1NDJFMzg4MzJFNTk5RkE5M0Y3RjAzRDA4QUIyNDk4MTVDQzY5RTM5OTYwCis3RkIxQzc0QworN0YxMTA0NzA0MzA5M0JCNzdDNUM3NkIyNkIyMworNjMyNjI1NDVDQUVCODA0RjU4RjlDQjI5MDE0NTNCM0E5ODY5QjI0RDY5NTc4NDhCQ0I1NkExQUM3MzBEN0YxN0IwQ0MwQ0I3ODJFQjY3RTFERDc2QTVGREJGRTE2NzRGMzA3OTNCMzQ5RUZGMjNEREEwNzcxQjlBNUFDODM2NkEzQkUwQTlEODhGQjhFNjRDNDdBODQ5M0NERThDQjFDNEE2RjczNDlFRTQ2ODgzNTA3MDU3QUZDQjg5RDYzNDYwMEI2MEQzM0M2MzA0OTU5MzYwOEEyQzdDRjkxRQorNDdFOTgyRTIKKzlDNEQ1MUUwQjVDQzM0NTY2NTY2QzRBMjNGCiszRjQ5NzQwM0RFNzUzQzNFQzhCMzgzMUM0RUFDM0Y4ODYyNDZDNzg1RDI1Q0EwMjg5NTU4NzlCMTgzNzFGOTE5RTRGRTc0Qjg1MDMwRTE0ODNGNjA3MDg5QTNENjlGNDNGRTZBNUNGMDU3NkNBNEU1QTUzNDkyRjZBOTdBMjQ3NjcwNDkzQzA5QTJBMDAyMzM2QThBNjlCQTYxRUEzQTA4MDNFNzQ2NjJEOEJDQjc5MzczCis4NkYwREM1OQorODU0M0IzMTRGQTY0QTAyQzVFMTQ3RDA4RjIKKzVCQkYzRUREQUMxQTEwMUQ3ODE3MjQxOTBEMTU1OTY3QjA0OThCNjc4RDNBOTY3M0U4OUI2NTE0RUJGMTI1OThDNEU1OERENDQxQ0E2QzkyRkJFNkE3MEY0RTY1RDhGMjEwNEUxRTY5MkM4NTg5MDkwNDA0MkQyMTgwRDMxNzBBRURFMDk3NkNCNTFBRkMxQUY1MjFGOEY5M0JBNzBFODdBOTI2QTYyM0Y3RTJCNzRENTk4MTQxNUYKK0ZDQTkzRDAxCiswOTRERURGMTNEQjlFM0Q0QjREOUE4RUYzM0RFCis5ODhGRDM3MEUxM0E3MjM3Rjg4RDg3NzA3MDYxRkVERjAxOUFBNEVBMTA2M0E0NjA5MDczMjRGN0Y1NjY4RUNFMkJGQkUwQ0IwMzhCNzNDQjIzMEJCREJGQjZFNENENzM2NEQ5QUUyMEM2MkM1NEI3MjRFMEJCNUM3MjM1NkFEOTg1QjBDRjRCNEUxMTZGMDcxMkZBRDE0OThCOTRFREU5MkJGNTA1MzVGQzczM0YxQjAyNjFGMDU2QkQ4MjdBNDVCMUU1QzEwMzhDMzJDNDUzQkJBQ0ZDNDNGRjc3QjUwQUQwQTBBNzBERjQxQjlEMDM2RUVGRDA2MDFCRDkKKzQyMjMKKzlBNTlCRjNBQjg4OTI2OEVFMzc2M0M0Qjk1MkQzNzQ4NkRFQTJBMEE0OTBGRThGOUZFN0U5NTg1NzNCQTlDQjlCODQ4ODkxRDk3NUZGMzhGMDI5RkZEODBERkFGNTAKK0MxQUU4M0M4CitBMTVDMkJBOTk2QTlEQTRFMDZFMDA3RkZDNURCCis4NDI3Q0Y1NjI4NjEyRkQ1OURFREZGOEM3RjdFRDA5MDFCQUZGOThCNjI2REI2OEYzQkIwMEI2QjkwODNDRTUzREI5REVGRThCMTVGMUE3NjJFMDg0MTM3MkY4QjU2NDIwRkIwN0I0Q0UzRkFFNUQ3NzJEMUFERDkxQjRFRkRFN0IxMzc1NEZBNEE0M0IxMDRDRkIxNUMyRkQ0OUYzMjNFQzI3OTk0OEZGMTMyNThDMjE0MjkzODdGRDFCQzM4RTkwMERFNkY5MjlDODU5M0IyQ0REQUFENjk5RQorNTg1NUFGNEEKKzM1NTI1RjBCMzhFQjU1MEVERDY1QThGQzgwCis2OUQ0RDFGNjBCMDkxOUJCMkRDMjBFMDMwOTcyNkY5RkY5NTAwQTQyQ0JGODEyRDAwNEQxQzk1Mjg3NUQzMzZBODZBN0E2RjUxMzJCQjkzMjU1NUYyNEY0NUY5M0VFRDREREI0QkQ3NTQxNjFGQUVFN0JFRDZGQTkyNEY3MTdDMzBFMTg1OEZDMDU5NjJCNjQwNjQ4OUJBRjg0MzIyMEExCis5RjVCRkI5QQorMzlEM0UwNzhGOTk2QjEwMTJCNkY0MkI4NTkKK0I5RUIzQUM2N0Q4MTZCOUZBRUUyM0NDM0M1MUNGMzc1RUZGQjE0RTFGN0E3RTdCM0U5RTg5NkM5NUEzMUIxNDE3MEE3NjYyNUUzRTk0NUVBN0UzQzlGQzQ3OEM4MzY0NEY5N0ZEMDYyRjY0RjhFMzE3OTFCQTY4NTdEMkVENEYwMDYxQzlENzI0MzZGMDg1RkNDQ0U4MjkwMUZCQThCQjg0RUMxMTc3M0Q3QTNENzMyMEJBMzY5RkI0ODUxMTc0NDM1OURBRQorQkM3RTdDREIKKzM2ODY2MjgzNTg4REY0MzBEN0U4NTAzMzg3NzMKKzEzRkY1NTcyODNDQjIyQTVFMDVDOTJGNEE1MUI0M0QxNjNCNTA2NDVDNDFEMDZENTU3QTM0RDE1QjZFQ0U0OEI1NzQyMzk3MTFGQTYwNUM4QUFCNjk5MTc2QzNGNzU0RDc2QjI5RTg1QjIxRDE2Q0VBNzRBOTY2MTdBNzJFOTZDNkM2QjdCNDBFQ0YyMjA0NDY0OTVFOTZDNjhFNkFDRTU3MEQwMjAxN0Q4MDJFNDg0NDY4NzhEQ0VBODkyQTdDMDkwREE2NkE1QTM2RDI4MTQ4NDJDM0JEQUREOUM4MzNGRjZBMDEyMTMxNkVFMTk3ODY0QTY1MUVGQjIzMworQjA0RAorOTZCNEFDMjEyMDk4REYyQ0VBMTUyQUU1QTJBQTc4QjVENEMwMUY2NUQyRTQzNjU0RjBGN0NGNDBFNDUxRTQyQUQyQkFGRgorNEY2Q0M0NTAKKzM5QzExQ0M0NDU2MDk3NjExNTI1QzlEQTRCCiswQjJBMzg5QzhDN0Q1MzA1RkVDREIxN0ZGMkY3QzNEMDQzNzA5MTVCQzQwQjY2RTYxQzIzNkEyOTlDNjVDMTRBNEJDMzI5NjQ1RERGNTc4RjlDNDA1OEQ0NzYyMjA2RUUxMjg2NzExRjg1MjgKK0NDQzRBRjA2CitEN0JCNjgzMDg4RkM3NjY1MENCQjJBQzcwMzNBCitENzgzMTlEMDE3RTM2NTIzMDk2RkI5MkREQzY2Rjg0OUUxMTA1NDA5MzI3Mjc2RDA4QkM2RjQ0QzZCRTI3QkE1QUI1QkI4QzM4RjUzMkQ3RUJCQzAzNEZGRkM2Q0U4QzJDRkY4QjhGMTg2QjM1QzhFMzhBQUFGNEIwMjNDMDA0RjI2MEExMEQ5NUNDRDVBMDhGODM4Q0I2MzFDRDYxMzE3MDk2RUE3RUZBN0Y1NEEzRjZCQTlENjZEREREMDc5RjU0MUNBOTU2NUVDRURDMTg5QTY1MUJDQ0Q5RjkyMTIzMDJDNjBGRDRGRDczMUIzQ0JBM0E4QUM0QjY5MTkKKzlERkQKK0JCMDlCQzZENTkzRjQ3RjYwNkE4QUJDRDQ3NjczNkY3QUI2REEzQzFENDQ2MTUzOUQxNTJCRTNFMzJGQkQxCisxMTc1MjU2MAorMkUzNkRDN0JCOUQ0MEIyNDA0RUFFRjYwQkE0NAorM0ZFMERGRTM2OEZDNkYyRUVFNTI5M0VBM0VCMTFENkUwNDYwQTMxQjFCM0Y3NDJDMjhBOUFEMzI5NERDOTE4NkNFM0VFNjgyNjk3QTFDRUQ4NDcxRUJFRDMzQkNCNEVGNUExREU3RTYxMjhEMENEQjU1NEQzQTAwNkZBODUzNjZDOUQ0OEMxRUJBM0U4OTE5REZGNzM0MTY4MTg2MEI1QThGNjZCRUYwRDVFMTdGNjdDODFCNzUwMUFCNEJDNzFDQTBCMUIyQ0E3NjI0QkJCNDVCRjdFNUQ2Cis2MDRBQ0E0NworNzJFNUEzQjRGMUE5MTIzQjJERTMzNzA3RTAKKzY4MDcwQjFGNUIyMTFCRTU5QkExRUU1OTk3ODM5MEM5Q0YwMzlFRDU4NTMyN0Q1QzcwRjcyMDhBQkRCRENBMzZCNTQ4RjQxQUMxN0M3MjhBQUE4RDZBMTA3RDNCNzIxMTQ0RTJCOTdDMEUyRTJFMjlCQzc0RkIyQ0Q5OTUyRjJGQjUwNTNGMTgwRDZBCitDRTMxMzIyRAorMUVBQzUwQ0VENEMxOTk4OEM5RDEyRTcwREM1NAorQTJBMjZCMURFNjdGQzU4MUQ0MEQyNDQ5Qjc2MkExNDY3MTc5MTdCMjFFNTJEQjdGQ0E2MkVCRDI1MTkxRTA5NkM1QTlDQjI2MEFFOERCNjAzRTQyODU2QzZCQkRGODlBRjY3QTVBQ0ExQUM4NkJBRUM4OEMzRDc3NTBGMjA2OTJGQzYyOUJBOTQyRTIwMjAzRTRCMTY1N0RGNjAxQjk3OEQzQUU5QTg4Mzk4QjBENUQ2NTUzQjMxNDhEMzExOTVCMUY1RDZFN0JBNzEyMjMxMEM2NUQwOEI4OEUwMzMwNzAxMUU0OTUwOEM4QTkxQgorMTVGOENFMzEKKzJGRDRDRTk0QjVBRkVFNjY1NzFENTAyNEM1MUMKK0ExRkRBQkZGQzczRkJFMDZBRTlDMDBDNzA0ODgzNUNEQUZBMEFGNzQ2MzZDREI4OUZCNjVBRkE2MDBFOTREQTBBODhCOUI1Qjg2REQxOTM2NTkzQTlCRUU0ODZCNkVEMkZGNUQyNkQyMzFGQkEzOTdBM0M5MDU4REY2OEUxMkIzODM2NEU1RUFEQzkwRkYyNTBBRURDQjQwOTVDNTQ0MUQ0NURDMkU3NkZCM0VBQjZGODQ0RUJFNzE4RjMwMENGNzhFQ0Y3RjBGREI2MUQxM0JBOEVECis2NEUyQ0U4NQorRTM3NzE2RENGRTY2Qjg0NjYzMjBENTgxRTkKK0YzRjY4REM2NUUwRDFBNzM0NzlBRDI1RTU0NDZDMUNFMEIwQjY5MDYzMjc1MDNFN0UyQzJENTU5Mjc0RkFGODkwMEIwMkFENzQ1RjQyQ0FDRUNBNDA2RUI3RDk3QzEwMTYyMjdFMUU1ODMzNDY3RjI4MTg5OUYwMjM5RTI3MjJCNEFGQ0MxMTc3MTZDNjNCMEJFQ0IyOEE3M0FGNzlFRTQ5NTc1RTc5NzY0Qzc3QgorQTkwNUNBQkYKKzk0Q0M1QjY5N0MzOUE3NjkzN0VCMzE0NDBDQTIKKzJEQkY4MjUwMzIyODY5NkQwNkUxQ0VEMEM5MzJCRkY3MjIyMDhCOTM4OTI3NkZDRkUzN0VFQzQ3RjZBMUM4NDgxRDE3RjFCQjA5NUU2QjVCNDY0MjI1OUZGMkFEM0JGOEFCODE1MUY0MUU1RDk3RUY3Mjk5MTFENDg5NENCRjExNzVFOUFFQkY4NDhCNDdGQzMzOERGMTM0N0UyQTgyOUUwOUIxMjlEQzNDQzA3RjY1OTM1MDVDRDJFNUI0ODYxNzY5NjI4QjBBM0U1QUZFQjBEMjBDN0I0RUM2MTg5QzU5ODg4RURBQjIwRkFEQzk0RTVGOUY3ODk3Cis5RDIxMzJDNgorRTY2NjYyMTM4NkE3NUYyRDYxRTQ2Q0MxRTUKKzdERDRCMkE4MjkzQ0RBQUVCMDc0NTUyRTdFMDdEMzlGREY1MDVEODRCODlCODM0ODk5RTU0QTMwNTJFRjZBQkVDODJENzgyRDNENEZFM0M1RDg4QUZBQTFCMzY2NzQwREU0QjY2NzJFMTdEQ0IxQTNFQjRBOTlGREUwMTg4N0I0RjZGRUU4RjJCRAorMDY3NTQ2MDAKK0JFQzdGN0U4RkY0REE0QkQ2MTBFQjE3NkU3CiszQzYwOUY4RDlENkE0ODAzNjk5MkQxQTJDMDNGMTM3MDk4RjYzQzc3NTQ5MzU1MUIxOTVGNTZBQ0JEMDYwMjdDNzU0QTIzRjdBQjlERkY5NkRCRTdCNzlDMzZBQkY2QTI2OUI2OEE0MUMyRDZCQTJFMTg0MUFBQzdBQjUyQTE1M0E1QjBFMUUzRkUwMTRDMDlGQkQwMzdENTEzM0NEMTI5QTUxRTZCNEM2RkIzRDg0QTNDRkIwQTU0RjE4QTEzRDVDNUI5CisxODEwRDIzMworNEYwQUE4MDY0QTBFQkNCOUNBMDg4MkU5MjAKK0VCMUMxODREREU1Q0M3MURGNDJFQzVEMTVEMDM4MkI5NTkxRjQxMDE5OEQ0NDQzN0YzODU0Mzg5MDU3NURBMDJGQTU3QjhEQzM1NzgzQ0YyRDUzMDlDNTk0N0Q4ODk4Q0I2OTlCMUE1RDA2MDY0MTBDNjYzNzc2NkFFOTMwMkM5MjVCQUJGMUUzODJCNUQ2QjMyMjc0RjU2MzhCRTkzODZERUY3RjkwMzhFQkNCNDkzMTUKKzQ2N0Q5QThDCitDQUY0RTVCNDFENEMyQjY1MTREODkxQzZGM0QyCisxRkJCQUFEMDc2MjdEREMzRjE0MjM3QkI0MDdEMjg1OUNENUM4MDUwQUU5NUEzRTVCREUwNDJCMUZFNEZFNjVGOEMyRUExM0NFQjhENjM3NDkxQzdEQTY1Q0MwOTg2M0Q5QTA1QTgwODlGRUZBNUU3MjM2RjExM0Q4OTAyOThBQzgyQzdGOUJDMTA2RDdGRTdDNjM0RjNBQkYxQzBENDIzMDczMzUzM0M2RkQ0RDQxNkE1MUUzNTRCNEIxRjVCMDBDNTc2QTlCRjUxODNBODFEMTk0OEZGOTQ4ODk5RjdGODdEQUVGQjkzN0ZGQTU1MDM2MDQ2MDc4Q0Q1NTMKKzhBNzEKK0I5RDZBNUVCMjAyOERDMUI3NDg1QTYwNzY0RUYKK0E4MDkwMkUzCis4NzcwRkUxMTlCNTE5MkVEMzU3QTU4Rjc5NTA3CisxMDMzNzExOTM3NDBDNjU2MTFFNjEyQTREQTNCNUMyRkUwOTlDNDUzRTc0QzYyMDU0MjUyMUZERkI5MTE5N0I3MkRFNDI0MTJFQ0I0RUVGRDIzRjYxNTM5M0Q5ODdFMjdBQkM1MkIwMkMwOUYwN0FBRkM3NUIzOEYxMDY2ODg5MkJBMUE4QTM1MkRGNkUwOTg4ODNFNkExMDJERkI1NzRGOTZEMjQwOEI2MDc2QkE2MjhFQzQ0RjBBQkFEMjI0NEQ0MzhDQTdBRjhDOEE3QTkxRDY1MTBDNjgxMTRGODQ3REU2NDc1NTU3MUJDNjQzNzlBQTc2RjVGMDlGMzQKKzA5OUIKKzVCNjQ1NDFCNjdDNDZDMUM0QUM4MzIwMTU4MzNBNTk3MjRFRkJDMDgyODVGNDQzRTlECitCRTc2ODMzMgorNzk3RjQxMzQ0RTlDMDRDQkRDMzA3MjU2RDE4OQorNDhBMTgwOUQ1M0JDOTZBRUJFNUJEQjI2NURDQzE1MTZGRTNGNzk5Q0I2MkY4MTVBREFEQUQwN0JCM0M1RTJFOTNBQUI3RjgzMzk5ODI5RTA5NDI4RjE2RDNCNTg0MzgzRTQyN0M3RUQ2NkQxNDJBNTlCOUUxNUJEQjBFMDQzRkEwRjIwQ0IxQjdCOUQ0MjQyNDcyREE0QjZBOUFGNTZERUVGRDFGRDk2MDRERUUwRTc3MDVCRDlGM0U2Njc4NTgwQzJBQkJCNTQ0MzI5RDczMEEzNzVDMTMwQTIzRTNERjYwM0ZBODI4OUU0RjI3NUE2QTcwNUM2RDcwOTRECiszODQzCisyRkQ1RUUxOAorNTZENTlCNDQ4RDMyRjk3NEI1MzUwRjgxOTQKKzkxMDQ4MEYwNkU0RkZDRkE1QTNFQUFBOTZFMzcxQUUyOTY1N0FEMEJBOTkyNzQwQjBGQTM2MDRGMTlGQTgwRDZGQzU0MjBGNEZGNjZCN0MxNkVBRjUzMDFDNjVDQzREQzZGQTE4QUQ4QjYwRTA1MDUzMjQyQkE2NzRFNDc1RgorNzQxRDlBODAKKzk1RUNDQzE4ODBBRTU5QkFGNjAwMTQ0MzNBCisxRDhFMDYyREFFOUFFMTE3ODFFNjU3RTE4MkU2QzhBQ0Q2MTJFQzFGRkY0NjIwCitEMkM4REI3NgorMzQwRjJGNUFFRUQ1RDdDQTE2QjZCNUZBMzQKKzEwOENFNjE1QTA1M0MyNTJGNTRBMzZFNDBDNDU1RTlFOTI0Q0RCNTI4M0ZBCitEMzg2OTAwMgorQUY0QUIwM0I1QkYzMzhDQTE4NkZFN0MzMkEyOQorMzEzRUFBQjhDOUQ3ODdDNworQ0U2RjNDQTcKKzM2MTVFNEJERDBBMjRCRkQ2MjI4NTcwMzAzRjRBMzUyREREMkU5M0VCMEM4MkY1OTIyNUU3RDRBNjFBQ0FFMUNDRUZBCiswMjQwMzgyMTZCRDYyMTZCNTVDNTc3RkY4MzAyNTM4MTBEODY5QTE4ODY1OERCQTlFRjg3QjZDRkJBMEJCQ0FDRDE2NUUzOTEwN0U1CitBRDI0NDMxNzk1RTAyMzg5MTMxQzg5RkY3QTBGN0UyQTRDMEQyRDQ1QzE2NjM3MUQ1MjFGRTEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2g5LjUgOS41MCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDFiMmIzYTM2MmIzODJjMTEwMTEyMDExMzJiMzQyOTJlMzMyNzM4MzEwMTJjMzUzODAxMWEyYjI3MzkzYjM4MmYzNDJkMDExYjJiM2EzZDM1MzgzMTAxMWQ+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MmIzODJjMzUzODMzMjczNDI5MmI+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDBjMGM+IDkzNDYgMTMzMDAgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyODAgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI4MCA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjgwIDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI4MCAzIDcxMzMgMzIgcword3N0OmR1dGNoMTIgU0YKKzwwNzJjPiAxNTg5IDE0MzEgMCAxODM2IC0xIHMKKzwxNjFhMTkyZDMzMzE+IDIwMzMgMTQzMSAwIDI5NTAgLTEgcworPDFmMmUyZjM5PiAzMTc3IDE0MzEgMCAzNTcxIC0xIHMKKzwwMDM1MzYzYTJmMzUzNDAwMjkyNzM0MDAyODJiMDAzYjM5MmIyYTAwM2EzNTAwMjkyZTI3MzQyZDJiMDAzYTJlMmIwMDNiMzQyZjNhMzkwMDM1MmMwMDMzMmIyNzM5M2IzODJiMDAyYzM1Mzg+IDM1NzEgMTQzMSAxMSA4MjQ4IDAgcworPDAwMzkzYTM4MmIyNzMzPiA4MjQ4IDE0MzEgMSA4ODk1IDAgcworPDNhMmIzOTNhMzkwOD4gMzE3NyAxNjc2IDAgMzYzNSAtMSBzCis8MDAxZjJlMmIwMDI2MjYxNjAyMDYwMDI2MjYxYTAyMDYwMDI3MzQyYT4gMzYzNSAxNjc2IDQgNTM4OSAwIHMKKzwwMDI2MjYxOTAyMDAyNzM4MmQzYjMzMmIzNDNhMzkwMDNkMmYzMjMyMDAzOTJiM2EwMDNhMmUyYjAwMzUzYjNhMzYzYjNhMDAzYjM0MmYzYTM5PiA1Mzg5IDE2NzYgNyA4ODk1IDAgcworPDNhMzUwMDBjPiAzMTc3IDE5MjEgMSAzNTA5IDAgcword3N0OmR1dGNoOS41IFNGCis8MGQ+IDM1MDkgMTg1MyAwIDM1OTMgLTEgcworPDBhPiAzNTkzIDE4NTMgMCAzNjc3IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDYwMDBjPiAzNjc3IDE5MjEgMSAzODc3IDAgcword3N0OmR1dGNoOS41IFNGCis8MGM+IDM4NzcgMTg1MyAwIDM5NjEgLTEgcworPDBhPiAzOTYxIDE4NTMgMCA0MDQ1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDYwMDI3MzQyYTAwMGM+IDQwNDUgMTkyMSAyIDQ2MjMgMCBzCit3c3Q6ZHV0Y2g5LjUgU0YKKzwwYj4gNDYyMyAxODUzIDAgNDcwNyAtMSBzCis8MGE+IDQ3MDcgMTg1MyAwIDQ3OTEgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDI4M2YzYTJiMzkwOTM5MDAzODJiMzkzNjJiMjkzYTJmM2MyYjMyM2YwODAwMWYyZTJiMDAyNjI2MmQwMjA2MDAyNjI2MzMwMjA2PiA0NzkxIDE5MjEgNSA3ODY2IDAgcworPDAwMjczNDJhMDAyNjI2MzEwMjAwMjczOD4gNzg2NiAxOTIxIDMgODgyNSAwIHMKKzw0Mj4gODgyNSAxOTIxIDAgODg5NSAtMSBzCis8MmQzYjMzMmIzNDNhMzk+IDMxNzcgMjE2NiAwIDM5NDEgLTEgcworPDAwM2QyZjMyMzIwMDM5MmIzYTAwM2EyZTJiMDAzNTNiM2EzNjNiM2EwMDNiMzQyZjNhMzkwMDNhMzUwMDBiMGE+IDM5NDEgMjE2NiA3IDY0ODggMCBzCit3c3Q6ZHV0Y2g5LjUgU0YKKzwxMD4gNjQ4OCAyMDk4IDAgNjU3MiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDA2MDAwYjBhPiA2NTcyIDIxNjYgMSA2ODcyIDAgcword3N0OmR1dGNoOS41IFNGCis8MGY+IDY4NzIgMjA5OCAwIDY5NTYgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwNjAwMjczNDJhMDAwYjBhPiA2OTU2IDIxNjYgMiA3NjI5IDAgcword3N0OmR1dGNoOS41IFNGCis8MGQ+IDc2MjkgMjA5OCAwIDc3MTMgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwMDI4MmYzYTM5MDkzOTAwMzgyYjM5MzYyYjI5PiA3NzEzIDIxNjYgMiA4ODI1IDAgcworPDQyPiA4ODI1IDIxNjYgMCA4ODk1IC0xIHMKKzwzYTJmM2MyYjMyM2YwOD4gMzE3NyAyNDExIDAgMzcxMSAtMSBzCis8MDAyNDE1MmIyYzI3M2IzMjNhMTEwMDMzMDAwNzAwMGIwYT4gMzcxMSAyNDExIDQgNTMwNyAwIHMKK3dzdDpkdXRjaDkuNSBTRgorPDBmPiA1MzA3IDIzNDMgMCA1MzkxIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAyODJmM2EzOTA5MzkwNTI1PiA1MzkxIDI0MTEgMSA2MDU0IDAgcworPDA3MmU+IDE1ODkgMjc1NyAwIDE4ODIgLTEgcworPDFmMmUyZjM5MDAzNTM2M2EyZjM1MzQwMDI5MjczYjM5MmIzOTAwMzQyYjNhMzYyYjM4MmMwMDNhMzUwMDJhMmYzOTM2MzIyNzNmMDAyZjNhMzkwMDNiMzkyNzJkMmIwMDM5M2EzODJmMzQyZDAwMjczNDJhMDAyYjNlMmYzYTA4PiAzMTc3IDI3NTcgMTAgODY5MSAwIHMKKzwwNzE3PiAxNTg5IDMxMDQgMCAxOTQwIC0xIHMKKzwzODJiMzMzNTNhMmIyZTM1MzkzYT4gMjAzMyAzMTA0IDAgMzA2NSAtMSBzCis8MWYyZTJmMzk+IDMxNzcgMzEwNCAwIDM1NzEgLTEgcworPDAwMzUzNjNhMmYzNTM0PiAzNTcxIDMxMDQgMSA0MjE0IDAgcworPDAwMzkyYjNhMzkwMDNhMmUyYjAwMzQyNzMzMmIwMDM1MmMwMDNhMmUyYjAwMzgyYjMzMzUzYTJiMDAzOTNmMzkzYTJiMzMwODAwMTgzYTAwMjkyNzM0MDAyODJiMDAzOTM2MmIyOTJmPiA0MjE0IDMxMDQgMTEgODgyNSAwIHMKKzw0Mj4gODgyNSAzMTA0IDAgODg5NSAtMSBzCis8MmMyZjJiMmE+IDMxNzcgMzM0OSAwIDM1MjYgLTEgcworPDAwMjczOTAwMmIyZjNhMmUyYjM4MDAyNzAwMmUzNTM5M2EzNDI3MzMyYjAwMDQyYjA4MmQwODAwMmMzNTM1MDgyODI3MzgwODI4Mjc0MDA1MDAzNTM4MDAyNzM0MDAxODFkMDAyNzJhMmEzODJiMzkzOTAwMDQyYjA4MmQwOD4gMzUyNiAzMzQ5IDExIDg4OTUgMCBzCis8MGIwODBjMDgwZDA4MGUwNTA4PiAzMTc3IDM1OTQgMCAzODk0IC0xIHMKKzwwMDI0MTUyYjJjMjczYjMyM2ExMTAwMzIzNTI5MjczMjJlMzUzOTNhMjU+IDM4OTQgMzU5NCAyIDU3MDIgMCBzCis8MDczMj4gMTU4OSAzOTQwIDAgMTgyNCAtMSBzCis8M2EyYjM5M2EzMjJiMzQ+IDIwMzMgMzk0MCAwIDI2MzYgLTEgcworPDIxPiAzMTc3IDM5NDAgMCAzMzg2IC0xIHMKKzwyZjNhMmU+IDMzNzggMzk0MCAwIDM2MjEgLTEgcworPDAwM2EyZTJmMzkwMDM1MzYzYTJmMzUzNDAwM2YzNTNiMDAyOTI3MzQwMDI5MzUzNDNhMzgzNTMyMDAzYTJlMmIwMDMyMmIzNDJkM2EyZTAwMzUyYzAwM2EyZTJiMDAzYTJiMzkzYTA4MDAxODJjMDAzZjM1M2IwMDM5MzYyYjI5PiAzNjIxIDM5NDAgMTMgODgyNSAwIHMKKzw0Mj4gODgyNSAzOTQwIDAgODg5NSAtMSBzCis8MmYyYzNmPiAzMTc3IDQxODUgMCAzNDAwIC0xIHMKKzwwMDI3MDAzNjM1MzkyZjNhMmYzYzJiMDAzYzI3MzIzYjJiMDAyYzM1MzgwMDNhMmIzOTNhMzIyYjM0MDYwMDNhMmUyYjAwM2EyYjM5M2EwMDNkMmYzMjMyMDAzODNiMzQwMDJjMzUzODAwMDAzYTJlMjczYTAwMzMyNzM0M2YwMDM5MmI+IDM0MDAgNDE4NSAxNCA4ODI1IDAgcworPDQyPiA4ODI1IDQxODUgMCA4ODk1IC0xIHMKKzwyOTM1MzQyYTM5MDg+IDMxNzcgNDQzMCAwIDM3NTIgLTEgcworPDAwMTgyYzAwM2YzNTNiMDAzOTM2MmIyOTJmMmMzZjAwMjcwMDM0MmIyZDI3M2EyZjNjMmIwMDNjMjczMjNiMmIwNjAwM2EyZTJiMDAzYTJiMzkzYTAwM2QyZjMyMzIwMDM4M2IzNDAwMmMzNTM4MDAzYTJlMjczYT4gMzc1MiA0NDMwIDEyIDg4OTUgMCBzCis8MzMyNzM0M2Y+IDMxNzcgNDY3NSAwIDM2NjcgLTEgcworPDAwM2EzODI3MzQzOTI3MjkzYTJmMzUzNDM5MDAyYzM1MzgwMDI3MDAzODJiMzczYjJiMzkzYTA5MzgyYjM5MzYzNTM0MzkyYjAwM2EyYjM5M2EwNjAwMzUzOD4gMzY2NyA0Njc1IDYgNzQ2OCAwIHMKKzwwMDNhMmUyNzNhMDAzMzI3MzQzZjAwMjgzZjNhMmIzOT4gNzQ2OCA0Njc1IDMgODg5NSAwIHMKKzwyYzM1Mzg+IDMxNzcgNDkyMCAwIDM0NDQgLTEgcworPDAwMjcwMDM5M2EzODJiMjczMzAwM2EyYjM5M2EwODAwMWUzNTMzMmIwMDNhMmIzOTNhMzkwMDI5MjczNDAwMzUzNDMyM2Y+IDM0NDQgNDkyMCA3IDY1NDEgMCBzCis8MDAyODJiMDAzYTJmMzMyYjJhMDgwMDI0MTUyYjJjMjczYjMyM2ExMTAwMGIwYTAwMzkyYj4gNjU0MSA0OTIwIDUgODgyNSAwIHMKKzw0Mj4gODgyNSA0OTIwIDAgODg5NSAtMSBzCis8MjkzNTM0MmEzOTI1PiAzMTc3IDUxNjUgMCAzNzY4IC0xIHMKKzwwNzM0PiAxNTg5IDU1MTEgMCAxODgyIC0xIHMKKzwzYzI3MzIzYjJiPiAyMDMzIDU1MTEgMCAyNTEzIC0xIHMKKzwxZjJlMmI+IDMxNzcgNTUxMSAwIDM1MzcgLTEgcworPDAwM2MyNzMyM2IyYjAwMzYyNzM5MzkyYjJhMDcyZjM0MDAzZDJmMzIzMjAwMjgyYjAwM2IzOTJiMmEwMDI3MzkwMDNhMmUyYjAwMzQzYjMzMjgyYjM4MDAzNTJjMDAxNDFkMjAwMzM5MDAyZjM0MDAzYTJlMmI+IDM1MzcgNTUxMSAxMiA4ODk1IDAgcworPDM5M2YzOTNhMmIzMz4gMzE3NyA1NzU2IDAgMzc4MiAtMSBzCis8MDAyYzM1MzgwMDNhMmUyYjAwMzYzYjM4MzYzNTM5MmIzOTAwMzUyYzAwMTQxZDIwMDAzYjNhMmYzMjJmNDAyNzNhMmYzNTM0MDgwMDFmMmUyZjM5MDAyZjM5MDAzODJiMzczYjJmMzgyYjJhMDAyYzM1Mzg+IDM3ODIgNTc1NiAxMCA4ODk1IDAgcworPDFhMWQ+IDMxNzcgNjAwMSAwIDM1MDYgLTEgcworPDAwMzkzZjM5M2EyYjMzMzkwMDNkMmUyYjM4MmIwMDM0MmIzYTM2MmIzODJjMDAyOTI3MzQzNDM1M2EwMDJhMmIzYTJiMzgzMzJmMzQyYjAwM2EyZTJiMDAzNDNiMzMyODJiMzgwMDM1MmMwMDM2MzgzNTI5PiAzNTA2IDYwMDEgOSA4ODI1IDAgcworPDQyPiA4ODI1IDYwMDEgMCA4ODk1IC0xIHMKKzwyYjM5MzkzNTM4Mzk+IDMxNzcgNjI0NiAwIDM3MjIgLTEgcworPDAwMzYzODM1MmQzODI3MzMzMzI3M2EyZjI5MjczMjMyM2YwODAwMTgzYTAwMmYzOTAwMzQzNTNhMDAzNDJiMmIyYTJiMmEwMDM1MzQwMDE3MWQwNzIwMjIwMDBiMGEwODIyMDg+IDM3MjIgNjI0NiA4IDg0NDQgMCBzCis8MDAyNDE1MmI+IDg0NDQgNjI0NiAxIDg4MjUgMCBzCis8NDI+IDg4MjUgNjI0NiAwIDg4OTUgLTEgcworPDJjMjczYjMyM2ExMT4gMzE3NyA2NDkxIDAgMzY1MyAtMSBzCis8MDAwYjAwMzYzODM1MjkyYjM5MzkzNTM4MjU+IDM2NTMgNjQ5MSAyIDQ4MDQgMCBzCis8MDczNT4gMTU4OSA2ODM3IDAgMTg4MiAtMSBzCis8MzkyZjQwMmIzOTM2MmIyOT4gMjAzMyA2ODM3IDAgMjc2NCAtMSBzCis8MWYyZTJiPiAzMTc3IDY4MzcgMCAzNTM3IC0xIHMKKzwwMDNjMjczMjNiMmIwMDM2MjczOTM5MmIyYTAwM2QyZjNhMmUwMDNhMmUyZjM5MDAzNTM2M2EyZjM1MzQwMDNkMmYzMjMyMDAyODJiMDAzYjM5MmIyYTAwMjczOTAwMjczNDAwMzUyYzJjMzkyYjNhMDAyYzM4MzUzMz4gMzUzNyA2ODM3IDEyIDg4OTUgMCBzCis8M2EyZTJiPiAzMTc3IDcwODIgMCAzNDY3IC0xIHMKKzwwMDI3MzIyZjJkMzQzMzJiMzQzYTAwMzkzNjJiMjkyZjJjMmYyYjJhMDAzZDJmM2EyZTAwM2EyZTJiMDAwNzI3MDAzNTM2M2EyZjM1MzQwODAwMjE+IDM0NjcgNzA4MiA3IDcyODggMCBzCis8MmYzYTJlMDAzYTJlMmYzOTAwMzUzNjNhMmYzNTM0MDAzZjM1M2I+IDcyODAgNzA4MiAzIDg4OTUgMCBzCis8MjkzNTNiMzIyYTA2PiAzMTc3IDczMjcgMCAzNzI5IC0xIHMKKzwwMDJjMzUzODAwMmIzZTI3MzMzNjMyMmIwNjAwMzYyNzM5MzkwMDI4M2IyYzJjMmIzODM5MDAzYTM1MDAzYTJlMmIwMDM5M2YzOTNhMmIzMzAwM2EyZTI3M2EwMDI4MmIyZDI3MzQwMDBkMDAyODNmM2EyYjM5PiAzNzI5IDczMjcgMTEgODg5NSAwIHMKKzwyNzJjM2EyYjM4PiAzMTc3IDc1NzIgMCAzNjA3IC0xIHMKKzwwMDNhMmUyYjAwMjgyYjJkMmYzNDM0MmYzNDJkMDAzNTJjMDAyNzAwMGUxOTEzMDAzNjI3MmQyYjAwMDQwNzI3MDAwZTBhMTAwZjAwMDczNTAwMGQwNTAwMjQxNTJiMmMyNzNiMzIzYTExMDAwYTAwMjgzZj4gMzYwNyA3NTcyIDEzIDg4MjUgMCBzCis8NDI+IDg4MjUgNzU3MiAwIDg4OTUgLTEgcworPDNhMmIzOTI1PiAzMTc3IDc4MTcgMCAzNTAxIC0xIHMKKzwwNzFjPiAxNTg5IDgxNjMgMCAxOTM4IC0xIHMKKzwzOTJmNDAyYjM5MzYyYjI5PiAyMDMzIDgxNjMgMCAyNzY0IC0xIHMKKzwxZjJlMmYzOT4gMzE3NyA4MTYzIDAgMzU3MSAtMSBzCis8MDAzNTM2M2EyZjM1MzQwMDI4MmIyZTI3M2MyYjM5MDAzMDNiMzkzYTAwMzIyZjMxMmIwMDNhMmUyYjAwMDczNTAwMzUzNjNhMmYzNTM0MDAyODNiM2EwMDM1MzQwMDNhMmUyYjAwMzgyYjMzMzUzYTJiMDAzOTNmMzk+IDM1NzEgODE2MyAxMiA4ODI1IDAgcworPDQyPiA4ODI1IDgxNjMgMCA4ODk1IC0xIHMKKzwzYTJiMzMwOD4gMzE3NyA4NDA4IDAgMzU3OCAtMSBzCis8MDAxODNhMDAzZDM1MzgzMTM5MDAyZjM0MDAyOTM1MzQzMDNiMzQyOTNhMmYzNTM0MDAzZDJmM2EyZTAwM2EyZTJiMDAwNzEyMDAzNTM2M2EyZjM1MzQwODAwMjQxNTJiMmMyNzNiMzIzYTExMDAwYTAwMjgzZj4gMzU3OCA4NDA4IDExIDg4MjUgMCBzCis8NDI+IDg4MjUgODQwOCAwIDg4OTUgLTEgcworPDNhMmIzOTI1PiAzMTc3IDg2NTMgMCAzNTAxIC0xIHMKKzwwNzM2PiAxNTg5IDkwMDAgMCAxODgyIC0xIHMKKzwzNjM1MzgzYTM0M2IzMz4gMjAzMyA5MDAwIDAgMjgyMSAtMSBzCis8MjM+IDMxNzcgOTAwMCAwIDMzMzkgLTEgcworPDM1M2I+IDMzMTMgOTAwMCAwIDM1NDUgLTEgcworPDAwMzkyZTM1M2IzMjJhMDAzYjM5MmIwMDNhMmUyZjM5MDAzNTM2M2EyZjM1MzQwMDNkMmUyYjM0MDAzYTJlMmIwMDM0MmIzYTM5MmIzODNjMmIzODAwMzYzODM1MmQzODI3MzMwMDNkMmYzMjMyMDAyODJiPiAzNTQ1IDkwMDAgMTAgODg5NSAwIHMKKzwzZDI3MmYzYTJmMzQyZD4gMzE3NyA5MjQ1IDAgMzgyOSAtMSBzCis8MDAyNzNhMDAyNzAwMzYzNTM4M2EwMDM1M2EyZTJiMzgwMDNhMmUyNzM0MDAzYTJlMmIwMDJhMmIyYzI3M2IzMjNhMDgwMDFmMmUyZjM5MDAzMzJmMmQyZTNhMDAyODJiPiAzODI5IDkyNDUgMTAgNzk1NyAwIHMKKzwwMDNhMmUyYjAwMjkyNzM5MmIwMDJmMmM+IDc5NTcgOTI0NSAzIDg4OTUgMCBzCis8M2YzNTNiPiAzMTc3IDk0ODkgMCAzNTA0IC0xIHMKKzwwMDM4M2IzNDAwMzQyYjNhMzkyYjM4M2MyYjM4MDAyNzM5MDAyNzAwMzkzYTI3MzQyYTI3MzIzNTM0MmIwMDM2MzgzNTI5MmIzOTM5MDAzODI3M2EyZTJiMzgwMDNhMmUyNzM0MDAyNzAwMjkyZTJmMzIyYT4gMzUwNCA5NDg5IDEwIDg2NTYgMCBzCis8MDAzNTJjPiA4NjU2IDk0ODkgMSA4ODk1IDAgcworPDJmMzQyYjNhMmEwOD4gMzE3NyA5NzM0IDAgMzY5NCAtMSBzCis8MDcxZD4gMTU4OSAxMDA4MSAwIDE4OTQgLTEgcworPDBhNDEwYj4gMjAzMyAxMDA4MSAwIDIzNTEgLTEgcworPDE4MmMwMDNmMzUzYjAwMmEzNTAwMzQzNTNhMDAzZDI3MzQzYTAwM2EyZTJiMDAzYTJiMzkzYTAwMjgyNzM0MzQyYjM4MDAzYTM1PiAzMTc3IDEwMDgxIDggNjQ4MCAwIHMKKzwwMDI4MmIwMDJhMmYzOTM2MzIyNzNmMmIyYTA2MDAzYTJlMmIzNDAwM2IzOTJiMDAzYTJlMmYzOT4gNjQ4MCAxMDA4MSA1IDg4OTUgMCBzCis8MzUzNjNhMmYzNTM0PiAzMTc3IDEwMzI2IDAgMzc2OCAtMSBzCis8MDAzZDJmM2EyZTAwMjczNDAwMjczODJkM2IzMzJiMzQzYTAwMzUyYzAwMGEwODAwMTIzNDAwMzkyZjNhM2IyNzNhMmYzNTM0MDAzZDJlMmIzODJiMDAzYTJlMmYzOTAwMzMyZjJkMmUzYTAwMjgyYj4gMzc2OCAxMDMyNiAxMSA4ODk1IDAgcworPDNiMzkyYjJjM2IzMj4gMzE3NyAxMDU3MSAwIDM3MjMgLTEgcworPDAwM2QzNTNiMzIyYTAwMjgyYjAwM2QyZTJiMzgyYjAwM2YzNTNiMDAzODJiMzYyYjI3M2EwMDNhMmUyYjAwMzkyNzMzMmIwMDNhMmIzOTNhMDAyOTM1MzQyYzJmMmQzYjM4MjczYTJmMzUzND4gMzcyMyAxMDU3MSA5IDg1MTQgMCBzCis8MDAzOTJiM2M+IDg1MTQgMTA1NzEgMSA4ODI1IDAgcworPDQyPiA4ODI1IDEwNTcxIDAgODg5NSAtMSBzCis8MmIzODI3MzI+IDMxNzcgMTA4MTYgMCAzNTI2IC0xIHMKKzwwMDNhMmYzMzJiMzkwMDI3MzQyYTAwMmEzNTAwMzQzNTNhMDAzZDI3MzQzYTAwM2EyZTJiMDAyODI3MzQzNDJiMzgzOTAwMjkzMjNiM2EzYTJiMzgyZjM0MmQwMDNhMmUyZjM0MmQzOTAwM2IzNjA4PiAzNTI2IDEwODE2IDEwIDg0MzkgMCBzCis8MDAyNDE1MmI+IDg0MzkgMTA4MTYgMSA4ODI1IDAgcworPDQyPiA4ODI1IDEwODE2IDAgODg5NSAtMSBzCis8MmMyNzNiMzIzYTExPiAzMTc3IDExMDYwIDAgMzY1MyAtMSBzCis8MDAwYjAwMDcwMDJhMmYzOTM2MzIyNzNmMDAzYTJiMzkzYTAwMjgyNzM0MzQyYjM4MzkyNT4gMzY1MyAxMTA2MCA1IDU5NDAgMCBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMjMpIDIzCislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDAgcHV0CitkdXAgMyAvQzAwNDEgcHV0CitkdXAgNCAvQzAwNDQgcHV0CitkdXAgNSAvQzAwNDUgcHV0CitkdXAgNiAvQzAwNDYgcHV0CitkdXAgNyAvQzAwNDggcHV0CitkdXAgOCAvQzAwNTAgcHV0CitkdXAgOSAvQzAwNTEgcHV0CitkdXAgMTAgL0MwMDU3IHB1dAorZHVwIDExIC9DMDA1OCBwdXQKK2R1cCAxMiAvQzAwNjUgcHV0CitkdXAgMTMgL0MwMDY2IHB1dAorZHVwIDE0IC9DMDA2NyBwdXQKK2R1cCAxNSAvQzAwNjggcHV0CitkdXAgMTYgL0MwMDY5IHB1dAorZHVwIDE3IC9DMDA3MCBwdXQKK2R1cCAxOCAvQzAwNzEgcHV0CitkdXAgMTkgL0MwMDcyIHB1dAorZHVwIDIwIC9DMDA3MyBwdXQKK2R1cCAyMSAvQzAwNzYgcHV0CitkdXAgMjIgL0MwMDc3IHB1dAorZHVwIDIzIC9DMDA3OCBwdXQKK2R1cCAyNCAvQzAwNzkgcHV0CitkdXAgMjUgL0MwMDgwIHB1dAorZHVwIDI2IC9DMDA4MiBwdXQKK2R1cCAyNyAvQzAwODMgcHV0CitkdXAgMjggL0MwMDg0IHB1dAorZHVwIDI5IC9DMDA4NSBwdXQKK2R1cCAzMCAvQzAwODYgcHV0CitkdXAgMzEgL0MwMDg4IHB1dAorZHVwIDMyIC9DMDA4OSBwdXQKK2R1cCAzMyAvQzAwOTEgcHV0CitkdXAgMzQgL0MwMDkzIHB1dAorZHVwIDM1IC9DMDA5NSBwdXQKK2R1cCAzNiAvQzAwOTcgcHV0CitkdXAgMzcgL0MwMDk4IHB1dAorZHVwIDM4IC9DMDA5OSBwdXQKK2R1cCAzOSAvQzAxMDAgcHV0CitkdXAgNDAgL0MwMTAxIHB1dAorZHVwIDQxIC9DMDEwMiBwdXQKK2R1cCA0MiAvQzAxMDMgcHV0CitkdXAgNDMgL0MwMTA0IHB1dAorZHVwIDQ0IC9DMDEwNSBwdXQKK2R1cCA0NSAvQzAxMDYgcHV0CitkdXAgNDYgL0MwMTA3IHB1dAorZHVwIDQ3IC9DMDEwOCBwdXQKK2R1cCA0OCAvQzAxMDkgcHV0CitkdXAgNDkgL0MwMTEwIHB1dAorZHVwIDUwIC9DMDExMSBwdXQKK2R1cCA1MSAvQzAxMTIgcHV0CitkdXAgNTIgL0MwMTEzIHB1dAorZHVwIDUzIC9DMDExNCBwdXQKK2R1cCA1NCAvQzAxMTUgcHV0CitkdXAgNTUgL0MwMTE2IHB1dAorZHVwIDU2IC9DMDExNyBwdXQKK2R1cCA1NyAvQzAxMTggcHV0CitkdXAgNTggL0MwMTE5IHB1dAorZHVwIDU5IC9DMDEyMSBwdXQKK2R1cCA2MCAvQzAxMjIgcHV0CitkdXAgNjEgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy01MCAtMjU2IDkyMCA3MzldIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMjQ3REE3RkM5MUI5RkVCQTgyOTI1QzdCN0E5QjBEMjJERDEKKzdDMEU5QTcwOTM2MDhGMTQxMDU0NkYwMAorMDlGOTg1MzFCNTk1OUI1ODhDCis3OUNDMzEwMworMDQ5NTJBMjU5Q0I0NUU2M0FFNzNDRDY3RjYKK0IzM0E4RDU3MTBGMTYyNzQ0N0M3REU4NjBGREVGREMxRDM0NTUxQkZBNjQ1MEM4RkJFQ0NCQ0E2MUUxNDFBMUZCRDI1OUE4MjJFNEMyN0UxOEUxNERBN0ZDRjM0QTIwRkI2NjcyQjJCMTA3NDk2QjIwNTc1MzREQzQwNTdBN0NECitBRDk1Rjk0NAorN0U4RjM5NDk1OUFCODQwNjQzOEE1Qzg4REEKKzgxNDc4MDRCRjVDQ0VFNDhFNEU0QTUxMkU4MTgzQjYzMEZCQjdGQTNEQkE5MzRFRDgwMUQyNjA5RDkxREJGRTMwOTE5RDI2QjlBNEE2RjQ3RTdERTM0MTM4N0YwRERDRTZGNEJBNjAxRDc5OUVFQjI4REU2MzdFNTk3Mzg3QworOTUyMjI2RUUKKzkxMjhBOEREMkU2Q0QxQjc1RjZEQ0U0QUJGCis2MDY3Mzc3NTUzQ0I2OEE4MkFGNUFDQkE5NTkzNTQ3MkEyNTQ2ODY0MjY2NjI2RUQxQTVCQTRERjM5QkI0RTcxNjY5MDNEQTJBOThFRDgzQ0JGNjUyM0FDQjc5ODEwRTk1NjMyMUE3MUQzNEU0RERGMjgKKzA3RjcwMzhCCiszNzcxRkQ2MzRFMUMzMzg2MzM2OTkxMUUxMAorMEEwMzZFRjU2QzcwRjRCRjZGMTZGNTM3NkQzQzE5MjExMDgyMkZEQkVGODU1MAorNjE4OUY4RDMKK0FGMTFDNzFEQjhBNERGOTk5ODVCM0E4RTdECis3MEYzNTBDRUZENUFBNTZDRUYxRDAzNTAyREZCMDFGREI0RjI0QzAyRDBENjRBNjZGM0QyQTlCNjg5NjBDNworNUZBNTE0OUQKKzk1MUE5RTk3M0JGNDJGQjI3OTIyNURFRjg5CitCRkU3MzI5Rjg4OTY1Njc1Q0FGRkQ4NDZBRDgzREY4QThFMEFCRkZEMzNBODI2QTExNzA1QTc5MDhGRTQzNkJBMDcwRkYzMUYxNDkxQjc1OEZDNjk0REJFNkIwNUJFOTdFRjA5M0MwMjQwQTM0MEUyMjRDMUY2RkQzMERDNEQwRTA0NTI1QTI3OTJFM0VEQzAzRkVCCis4MUQ4M0U1NQorMTBDNzMxQUE2MEQ4RjgyNDQyNEFDQzU1OTEKK0U5RUFBRTUyQzE5MUVDQTM0QzUzQjY0Nzc1QTQ0MzkzQzkwNERCQzlFNDk1MTc3NTRBMkZBOTVCODkzQzFCMjA0RDVEREUzNDg0Q0E3RTUyQzg1OTQ3QjU1MTI5NENEOEZDMTI5OUEwMkM2MjdFM0QyRDAzNzJDN0VFNTE1QzU2NEMxRDBEMjNGMjkxNjJBMkYzNjMwODY0MjNDQzM5RkUyM0Y2NTExOUNBQzA4OUM0RjhFQgorMTNFMTBDQkIKK0I5NjBCNEM1OEQ1RUQ2ODE4QzY1NzdBMERFQzYKKzMzQkM0NDQ0Q0JBQkMzMTAxRURGMDIwRTNERDkyODFFOUU3NEEwRkZCRjEyRUNGMUJGNjBGNkJCNDVENjEzOTlCN0E4NTk4NTc1MzE3OUY0QUZBOTZEMjYyNDJFOTMxMTcxQUM5QjgwODYyMTZDODlDN0ZGNEZFMzkwM0ZGRTJFQjA4OTJFMzBCMkQ3NUUzNjU0OTA2RTRBRTBDQ0RFNUNFQzQ5NjE3Mzg0QTBFMjhCQkZEMzE3QzAzNDEzMUY4MTlEODZDOTIxNEI2RjRBQTE5MEJCMUZBRTcxMkVDMworODY2QTdBRjkKKzhCMDkwNEQxMjEyMkFFNTBFQzJGNkVDRDM3REQKK0FDMjFDNTAzQzU3NTA5QTBFQkUzMEE1NDVFOEQyRjE1QUY5ODQxODk4M0I5MEU3MDc4N0RGMThCRjY3NDdDQ0Q2NTAyQTk0OUU2OUM3MUMxNjUxNjZCNDM1RTgzNjYzNkQyMUIwMUZCREQzN0VCNEJDQkY1N0IzRjBGOTI5NENDMjIxMDBCQUJERTVDQ0I0NzJCNTE1NDVDNENBNzU5QjEyMzFCNjk4MzlFMEE1RTREN0MxQTdDNTMzQzREQjQ3NTFBMzg0NTY3OUYKK0YyOEE5MjlBCiswRjEyNjczRUUzQzFFNzU4QTA4OTBCNzg1RAorMzAyQzM4RUY1MURFNEUzQjc0NEFDNjI3Q0UxNjZGMTY1MjUxOUE4N0QwNjg3NTRGRUZFODA1OTMxNUI1RjQwMERDNEUxNEQ1REE4MTUxQkREQzYxQjEzODA0RERBODdCOTJDQkNCMkREQzc4CiswMEFBMzlBOAorQ0EzMzlCMjExNjI5Njg1MTczQjk5ODJDNTcxMgorOTNEN0YzNjc3MENEMEZBMDBCMDQwNzc0RjRBQzQ0QzhGNDBGNjEwMkFFMDJEQzAxQjY5QTVENkI2MTVDRTYxM0U0Nzk4QjMyRjRFNzAzMkI0N0NENjdFNTc3M0QzRkZEOUMzQTE4MjYwRDBGQ0RENjdDQTNEM0E5OTZEQkQ2Qjg0QjU3N0FBNDY4NDk5RUU0MTUxMTVEOThFQUUwRjc0MkYxMDMxQjhCMkI0Mzc4Q0M5NzBGRTFDRTE1NkU3OUUzOTkxODBEQkYxNzYyQUQxMzU1MUFBM0RENTlDNTgyREI3NzA1RjkKKzc2QjlENzMwCitCRUExMkU0QzJFNzczMjY1RkQ5QjBGMzc1NjJGCitCMUIyMUEzMzJGMTVGRjA1M0VDRjk2RTUzNzA5NUJFOERGOERDMkRFRjEyRTQ3M0Y3NUMwMUY1MzQxMjlERkJGMzU1MkNCRUI1QjJCRjFBMEM0NDdCMjhGRkI4Rjc1QjZFNzJGQkRDMEFBMkRFODQ5NjI2OTE0MDk5ODBEQTY4Rjg3OTlCNDAyRTZCM0JFQTFFMDkwQUVBQjkyNEQyOTk5Rjg3QUQ5REQxMzg4Qjk3NTBBMUQwMkNFMDUzQTI4M0E4Q0RCNUZFMzVDNUVDNzU0MkNEMDhBNEFGRTdERENCRURFRTcwNkRFM0U4M0UyRkMwMjJGOUJFRjIwMEIKKzlFNDIKKzBCCis4QzNBNTdEOQorOUVGQTA3Q0ZBQjZGMTM4MjAzQjAxRDVEMzMKKzQ5QjZGODY4ODRCNTdBM0JFM0FDMTY3MDlCRTYzOUVFMUYyOUI5QTQxOTE4OTUzODY0MTY0NTE3MDQ2MkUxRUZEOERBNTFBMzNFODUxMzE5ODcyM0MxMUQ5OUI1Nzg3Nzk5OEIxNThBMThEOTU0OEQ5QjQ0MkYyMzQ3RTY4NDM2RUFFMzFEOEY0RkYzMUJCQkRFNzZCNTVGQUNCOTU4RjUzREYzQURCNDMxMjE5MDM3QjkyOUIwQzNBMzExODdDQTdECiszMThDMDIxOAorNzZFMjZCRUVDNTdDQzhEQTFDNDFBNkZDRDEKK0UyMENBQzYwMTJDQ0JBOERFRDVGNEUyN0FBRTM1NzExNkM2RkVGREIwNDdDQUI2QkY1NEEwMkM5RDBCMzFDMkFGNzI1QkQ5RjVCMjM5QkJDMDgxRUE4NDc0NTgyQzJDOUUxQjFBNjdEN0MxMTc0NDgxNzFDRTMxQjE4OUVGRUU0MEM5NzBGOTMxNDZENjc4NDFGMDA2Q0MwNjA0NTJFNDQ3MUNBRDlEMDIyNjZBRUQ4RDIyMTdBMTJFQzE4QzE4RUE4OEZFNAorQ0Q1NDBFQkQKKzYwQzc2Q0M0MEZGMzlDOTk2NDJFRkI5RDg0RUQKK0IxMUU4NkM4QzZDNzJCNEU5RDY3RTIzOTM4RTZDMThENjA5RjcwMDVDQzc2MTEyMzg0ODE2RTk3NDBGMzUwODAzMkI3RDQ2MEJCQ0NDRDQyRjg0MTNDMTAzOTE1NkMxMDgzMjkyMzk3MDEwQTA2NUVCMjYxQjk0QzcyRDFFN0FCRDZGRkJCNkJBRTNBM0ZBRDM0NkI1RTI2ODhBQTU3RTVGNUNGRThGNjNCQjA3ODNFRjY4RjIyNDg1RUYzOUUwODgzRkNBMEFEQzRFQkE3QUU4NzM3NUE4NEI1QjgzMzI3NDFERjkxRjM0RTk1NEE4NzE4QTQ2ODE1NEVGNworRjIxMjNDNjEKKzA5NzI5QjkzNjE4MDQwNkNFQjY3RTQxMDlENUUKKzBBNkRDRERDMUEyNzFCNkY3RTNFOEI1RUYxM0IzM0ExMjRBRkRCQjg1QTcxRTY5ODkzN0U3NkRERTdCMjUyNTE2QUE0OTkzMzk0MkY5MzY0QzU4NEVDOEM0RDUwQUJERDExMjA0NEEwNEZEMEZCODlDQjc0REY4NDE2MzdDNzZGNTZGMzYzMDZBNEQzOTU0Q0JFM0NBOTIyNjA4MkI1MEM2NDRGQkI3NDgwQUE5QjEyMURFNjM5Qzc3QTlDMzQ3RDkyQzExMzQyNTBDMTMzRDkxMAorRjlGMTg3Q0UKKzYwNkRFMTc0NDVCNkFGQzgzNjYwRjAyNzg2QjAKK0MyMENENjEwMjExRTlDQTE0MUFBMkM4NzUzRERDNjY0ODU2OEQ5NUQ0NURCRUI2NTQ3RENDRkFFQkNGQkY1MDIzRDUxNzMyNUY1NzEyQjQ0RDg1NjdCRTkzMzBDREQ4N0YxODc5MUMwRkNGNTAxOEQ4NDYzNDhFNjM4NjM0OEEzMjJBMEM4NjFFREQ3MTQ4NTlGMENDMEE2N0U4RDlFOTY0NTYyQkRGOURFQkExNTU3Nzc2OUY4MTAzMzE4NDAxM0U1NjE5NEU3OTNCM0EzNjBENUI0NDE5MDBDMkRBQ0E1NDFBNDhDRjlEOEU0NkEyODc0MDcKKzI5MkUwQTYyCis4NTFCRTQ3NkMyQTBCNUE5RTM1QkUwN0NGMEEwCis5NjZFQ0Y5NDVBQUU1QjdDQ0MyNENBMDlBOUIxMDBGM0M3MDE1NjJDNUIzRkQyMkM4NTBCQkU1OUI2QjQzNkQ2N0M0Q0U3QzAyQUIyNzRBRkUxNjBFODc3MDVCODUzRUZFQTY2Qzc3MTk0MDQ5NTk4QjQ4MEU1MTc2MjU0OTBGNkRBREY0Q0EyRTFBQjQyQTFBNzk5MTUzNzQ3RjQxMUQwNkVGODBBRDE1M0M4OEFGNTQ3QjBCQjFGREVEQjNEQzQ5MjQ3ODc2RkYwQkZGMjJFNTg0MkZEQUM0QUZFMDUwNUNFM0E0NDM5QTJBMkU3RjA1MEY1NDQ1RjY1MTkKK0RCNkIKKzUyMDI4QzhBNzI5QzkzQzBDODUwQkIKKzg5MzBCNTVFCis1Qjc5ODc4NTZFODg1MDlFNDVENzdCOTI4RgorMTQ3MEVBNzA4MzBGMTg5NjI5RDNDREE2MjE4MjI2MTMyRTAxRTNBRUU5QUE1RDFBMTQyRjdGQjE0NDEyOEVGRDdFQjU4QjIxQjNCQjhDNTZFQTg3OEU3OUU0ODRDQzgwOTM0OENGOTZBOTU0NDE5MkQzOEQyQQorQTY5MjdBRDIKKzEyRjJBMkY3QjREMTY2MkQ3RDAwOUM0QjM4Cis5M0RGNEUyNTE4MDkzMDVEN0IzQTg2RDQ3NUM4ODZGQTEwRDVFNzYwOTdDOEQ5QUZDRkQzRDRDRTQ5RDZDNEYwRjZFM0IwQzc3NUI0OTE2NzZERjUzOENGMTVCQzNGMjQ1NUVFRUNEQTZEOTk3OTE2MTg1NDY5NkEwMUU3NDQ1RjIyQjYyNUY5RDZERTRBCis4MUE5RjhENworQzBGODBEQzFBMjVFMDZGNzU5QTI2OUE3OEZEQworMDY4MTBENUVGMzEyODM1NTcwRDJDMjhCRTMzQTg2RkQ1NEY0MDg5MDcwRkU3NzU5NDc2NTIzM0E2N0Q1NUM4NEVBQTZDNkMxMzU4NTRFRjE5OUQwOTE5QkI1RDYwNjdCNzFENzRFQzhGOTk0NEIyNDQ5MTEzNTQ2MzlCQkNFQzJEREIyNzY1QzkzQjRCNzYzQ0YyOEZFNjhDRjQ0NDY0NkJBMTk4OEM2MDBBNjIzREVEREM2MzA0RTAzRkMwRUQxNjQ5QkY1NkY4NzdEN0VDMTA1OTJDM0RFNUZERkI2Cis0OUExQ0E0OAorRENCMjgwMEZGRDQzRTQ5Q0JBRjhBOEFFNEUKKzk1RTNEOUQyMjk5RDhEMDUwRDQzMTQ4QUQxREYzMTI5RUU5NDE5ODc4NzhBQ0RFOTgzQTNDRjMzMTZGRDU0RTZCRUIwNEM3M0UyMjREMjU5MDQzRTU4NUZFQUNFOTYzMTBFMTM3QjAzNDgyMEVCQkFGRDhFNzZBNTRFODg0NDJBQUFCQzVCRDIyQzE5RUVCQzFERDBCQjFFM0I0Mjc2NjJBQTExQTQ0QTE0QTQxQ0EwQzQ0Qzk1MTUKK0ZGMDFERTA2CisxRUFCMTg2OTE4Nzk5ODVFOTYxRjU3RTA1QgorQThCNEQ4Mjk2RTFDRUExMDg0ODA1M0U5MTQ0ODQ3RDMzNEI1OERFRkYzNzY4RkU0MUFDRDdEOUU3QzMxMDlDMUNEN0MyREY1Mzk5OEEyQjRCMzRGQjA3Q0ZGQjAxNDc3MDg1OEE5NjRDNzdEMkFENjM5N0M4OUU0RDQ2REI4NDRGQUNGQTUzQTJDMjkxQTUwMzU2QTY0MDJBRUNFODU1RUZFQjJENQorMTgyM0U2ODIKK0QwNzA3M0Y2NjkzOTIyQzJCRTczRjQ4NjEyMkUKK0UwOEE0ODcwRUE0MTQ5MTI2M0QwRkFBOEE4Njc4MjE3MTFEQTI2RjI1RDBFOTQ0RjhBNzAzNDQ0RDlFNjNBOTY1MDgyODZCOENBOTI1ODM1NkZBQzBCMDc0MTA3QUJFQzNDQjBDQTRBNjBBNjA1OUI3Nzg4QkMzNDIwMkU3NDY3NTYyMzY4MUQwM0MyQ0Q2REQ1Qjk0M0Q3MEQ0QjZBOTQ1NUU5MEJFMUNDRTIzNzdEMTU4MkQ4Nzc0RTFEM0E3NkI2MTNBRDVCQ0I0N0I4M0IzOEE1Cis0NzYzMzhBQgorOTlGRURGNjFDMEU0NTA4MDg3Q0MxRTMzRjZFQworMzk4MzdCMjBFQkFERjEzRDVCMTc5NUE1NkU3Q0Y0RkUwMkE0M0M0RkQyQURCNTQzNkNCMjhGNTY0MjI4MkI4NkNDMTRFREY0M0Q2NjMzQzMxN0QwODk1QTVDMUVDMTYyMjRCNjBBNDBFQUM5QTAyQzhENEQ5NzVBOTQzNkM4QTFFQ0YwRUM2OEM2MDRFNjMxMDVEMEY5OEIxNEQ4Qjg0REFCODk0MDc0QjI5MzRBRTk2NkVENzg5MDRFOUVDMjMzMTk4REIzQTAyMTVFQkYyQzhDNTFCMkE1QzJENzBEOEE0ODUxOTlDQjAyRDZGMzdBODI0RDJCOUY4Q0I4CitENkRGNTAzOQorNkM5N0U4RUVGNjA2ODE4RjU3RjkyRDAzQTFCQQorMjUyRDc2QThGRDVFOTMwRUU5MjJBM0I2MzM1RDNBQUJDOEM5OEM2QTRGNDQ2RDU0QzI5QTJFOTc3Q0ZBNzM5NDcwMUMzMkUyQUUyQUY5NTM0M0I5OEFCMUI2OEMyM0RCNTQzNkM1REE5NjJFRTc1NDc3QjkzMUNFMEI3NkRFMDAwNTIyNUJEQkQwMDlENDJFNTRBMzQ2MTYyNTEyQUI0Qjg4OTYwOTE4QTE2QjMwMUMzNzU1NTFGMDIwMTIyMkVFRTI5MTlGM0QwRUVGMjA2NDQyNzhFRjBBRjU4RkFEOTNBRkEyNzY1N0RENzJDQjQ5Q0I0QkZFRENGQTMwCisxMDg0CitGRkQ1NEUKKzUzNjA0REI2CisyMjg0QzJCMzQzOUQ1MTgyNjRGOEI5QTE1QQorMTk1QTBFQ0Q5QTgwMThERkVGM0RGRjNDOEJCMUVDQjE0N0ZFQTlBQkJENUNDRDI1MUQ5RDFGRUI1OTRDN0RERjFGM0MyQUIzOTFGNDhEN0JFNERFRjZGQjc4RUZDOUYxOTBCMjhBMkFCQUQ5REJEMjVCNDdGRTJCMzA5ODgzOEU2NTA1RkMxNDgwMjRBMEU3QkRGMjREQjMzNTM3QTMwNjRECis1NDIxMTk0MAorNUM0QzQzMTlDMjlDRUFDOTcyREQ4Mzg4MDgyRQorNTRERUEwNjVFRTU5RTVDNTk3NDk4N0UyREQzMzczNjA3RTE4NjM1NDUxRUYwNjBEQjg0OTEyRkEzMTlCNjFFMjFCM0U4NkUwNUJBMzFGQzVEMERDMDQ0MzAyQ0VENTczREUzMDFERTBDMDExRjVCN0UzNkY3QUUwRjUxQ0Q3M0JCMUQ5RENEQzZCNUNFNTBFNDlDNzkyRTVDMDNERjY5MEU2MEFBRDMzOUQ4NUQ2N0JGRDE3RkU1NUY2M0JBN0JDNDAwM0U2RUQKKzdEODZFNzFECis4RDQzRTY4QjNDNThCRTRGRTJFQTVBOEQzRQorNEFBMTUyRTU1Mjc4M0VGQ0ZDMjYxRTc3MEY4RDQ0RUYwMTEwODJENzgzMEJGMEZFQkJCQjg5RjkzQzkyOTE5QzEwMzY1RTdFRTkwNzU4ODAwMTFGOEE3QkFBNjVEQTIyMUQ2QzUxNkE0MzQ1RTNBQjcyQUJERTgwMzUyNjRBRUE5MjE0QzA5RjdERDZEMzI2QTk0NUI5MTFDNEI1MzFCODU4NTNBQ0ZDQkUxRTJDQUJFMAorMjhCOTM5QTUKKzJGNTEwNEU0QUIzMzVGNzdDOTE0MkNGQkZBODYKKzBCRURCRDcwQUQ1MjA0RjRERTRDNTdCNURGMTFGMjhBOTQzRjQ2MzlGRENFMjkwNTM2N0UxOUMwM0Y5MDI5QTQ3Qzc1NEUyMkQxQkY2MDlGNjk1ODQ5RDNGMjUxRjA4MzU1NjIxOUZGQjJBRkI5Q0MyNEE4NDA5ODczRDE3NkNGODQ5NkU5OTIwOTY0OTgyRTRFNTE1Q0IwREQ1MDZDNjQ0REZGM0U5RTg5QjI2RjYwQjc0MkFENEU3QTBBRTAyQ0Y1ODE1RjRFMTQwQzlGMEU5REQzM0Y0MkIyMzdGNUMyQzI0NDE5QzQyNjUwQzAzM0JFNkZBMjI2MUE4NAorN0U4RgorREY5OUVDRDVDMUVFMDZCNjI3QjEzMjkxOTE0NTg4MjBEODU1QzFDNjAzQjk5QUM3REI3RTY4NDRGNDg5MzlERUVDMDU4RjUwRkQ0NTExCis2MTVFNzBFNgorQzFBNUNGQjkyMTU2ODY2Mjc5MTdCMTBDOTREMQorRUJGOUNBMUYyQzY3QzIxOUE0RkEwRDFGRTEzNUE3RkI3NkJENUEyNTgxRjFDRTY1NjA3NUUxQjU4MzIwMDZGQzA5REQ1MDA4RkMxNDA5QzE0QzA3NDgyREFBNkY1OEVERkVBOTY2QjBDODY3M0FBODlBQjI2NjEyRTA3RDMwNDFFMDYzMTc3ODYzMDNERDJGOUVBRkE0MTBGMEMzN0Y3NDhGRDg0N0U1NjI3NTA1REY1QzQxMjM5QzUxMkJEOEM4NzI1RDQ1NDQ2MkE3MzA1MzQxRDg2MTVFMUUyQzQ0OTg5Rjc1MzAKKzEzMzhBMjYyCitGNkI3QTg0Mzk2QjkyMzAxNjg3ODU4MEU3QworMEU2NjhGMDAwRTIxRTMyMjNBNUMzRjlFNTkyQUZFQ0I4MEQwN0Q0NTU0RDlENEIwMDI4REIzRTcwOUE0MDMxOEE0RjJENTAzRkYxREE5NUYxMjU4Cis0MUUxRUNFQworMEM5REE2RDRFQ0I4QTI2RjIwOUYzMzlDMzkKK0NGNjkwODFFQjkwOTc4NEE2MDU3QUNEQkNEQTg4Q0Y1MjA3QTRFRjYwQUYyNzdFQUI5Qjg0NDk0NTg4QzM5MEQ0OTkzNzk0Q0Y4Q0UzRkNDOUQ0NjQzOTYKK0Y0NkMxN0YyCitGNjZBMkM1MDJCODY5NDE1QTA4NUI5NjZGMgorRjg3MjE1MTU4NTE4RkQwNkMyQkFCQ0M3OERCNTE4QjdEQzI2RDREREQ4OTcKKzg3MEVEODdFCitBMkM5RTA3RDZEQzg5MUFFN0JFNjRGQzcyMzhCCis2RDNBNjYzRUUzN0QyMTM3Rjk1NzAwQjJDNjA0Q0QwRkY3OEUyQ0U1MUEzNUM1MEE5NjJEMzIwNkY1MkNERjdFNDA1MUMxNUM1NEFBMUZBMDgxQzQ0MDk0MTJBQzI3ODFBMkRDNzU5RjA4MjNBQUMwM0I4RkNCREU3REU2QzI4NzNGM0Q5Q0RGNDk4ODlFODA4MUI2OURGODEyMjY4RDQ2RjY1RTEwOEYwRUY3NTc3RTQxNTA4NjdCNDMzNzE5NjFDN0E1QTlFMUVEOTNFMTk3NDg4NjVDRThERTRFQzVERUYzRDU1NDVCNDlFMUZDMUY4Qzc3RDAxQjZBQzYKK0RCOEEKK0IzNzkwNAorNkE0MjhFM0QKK0NBRTIxREY4NDY4QTRFRkUxRjhFRTI5RkExCis0NDQxQjlCQzZCRDQ4MEZGMDYwNDAzNjNDNTA0QzlEOThDMjM3NTBCN0VDRkI5QTg1RERCQTgxMTE0NEQyRjIwMkEzMDNCNUUyMTdDMTUyMDI0NjNGRDZGRDY2NURFRUM1QUU1MDg3NjJEQ0UxQkNEN0JCMjBEQzdBMDQ1Qzg1NTY5M0M4OENGQ0REOENBNzlDNDc0NUREQ0IxRkNCQzNFNkYzODAyMzYwRDIwQjJBRAorQjYxNjMwMzQKK0I4OUI2ODdCOUFFMTA4RjJBMUJDRjdDMDVBCis4OTI4MUYyNDNFNTY1Mjc1NzU4NzUyNzU5RkNGRjdFRUYzREFGQjRGNzU3QzhDQzc2ODUzN0QwNkM3MzgwMkY4NTY0OTU0QjhCQzA1MDlDREJDM0Q3MERFNThBREMxNDUwQzg4MTUwNzE1QzVBNEFDODhDMUZCMTYxNjQ1MkVERDM5Q0MwMUNDNUM4MjNFNEVCNEM3NDYxRjc1MzRGNDFDQ0I0OAorQzJCOTUzRjkKK0RFNjg1RjcwMDAxQkU3NEY5NjAwNkFBMkI3NzUKKzVDNEJDRTE1MDg5RDI4QkU5MUNGRkExNEE5Q0VFQjMwRUUxQTdEMUQwOTdGM0E5ODBDNTYxOTNFRjJFMkFDRjg3QTFCMzc0OEQyMDk5ODkxMEYwQkY2QzU2RUNDODJCN0VCNDhEOTU4RTNGMjQ3RjFGODlEMjQ0QzMzMDBENjk2OTNDN0MzNjQ5MzE0RTcyQTBFQjgyRTM0NDlBNkMwMDdDRjIyNkY1MjlGNjgwRkY0Q0Y1QUUxNjY2NjkxRUM1MTcyNjkxMjBCNTcwNTQ3REI1NUMwQjhEM0RERTcKKzU2Q0VBN0UyCis0NENDNjVBMDg4NzYxQzc5NUIxRTJENDAxOAorMEEwODdCMEFFNUM5NzI3MjY3MTI1QzVBMzkwQzUzQkVDRDczRjU1REY5MzlFQzI2QzY2QzkwQkY0ODgwMDFBQUM2ODNENzRFNEQzMEUzRkQwNTc2QzY0RjJFNEZDODE5QUZBM0I2RDQwQkY0OUQyMzMwODJFMjZDNEY4NzQ5RTY0NzNFMUQwRTVFNzMxRTZEMEFENjYyMjQ4MjkyM0IxODIxMTJDQzUxMjYxOTFENzgyRQorMTg1RkI0NjAKK0FDMEMzNjgwQTgzQUNCRkVBRTRBNTI2Qjk5CiszODc3NEM5RjkwQzJFODg2QTRDRjlEODZEMzY1MkMzMjBGQkZERTA1NDI4NUNBOUJDN0Q4QUNGNUNFNTc0MTcyMTEwNEMwQ0FFMTA4OEY4MEFDNjQ0MDVDOTBFN0QzRUE3RUFBQjQyRTFGREM1QzkxODNDMUNBNDYzRTc1MzREOEE5MjQ4RDFCM0JFQUZERTYwMjJFREIyQ0U4REJENDg4MTAwMDIzMzQwOEQ2Rjg4OTRFOUZEM0ZFCis4QjBGMkM3RgorQzc5QUFFOUQ2QTEyNjk0ODNCMERDQTIyQjY0MAorRDg3RTc5RDJEODk0RjIwOEE2NTFCRTZBRDRDQzg2RENGOTY2M0Y4NkNFMzRGQTc1RTk0N0YxNTkwMTIxMDYwRUY5ODEyMzdFNDc5Nzg1NzEyNjM2QjAxOTI2RjdDQTRFQzVDMkJGRUVDNzdGQ0VFOUFDRDMxRDlEOUE1MTBCODI0NzVCNzVGODExMTMyREQzQ0EwODZCRUFCMTkwRjI4MzgxRTUzMzk1RTY1Q0MxNTYyOTVEMEQzMEZEOTJGODkzREFGMjlCNTkzN0JCOEE0RUE4MjA2NjQzN0Q2Q0NCMUZGRTBBODczN0FCQTgxM0M3QTc3OEQ0NzkwMjkwCitCRDIxCitFQ0I2OTA4MTM0QzZDOTEyNDQ3QjcwRjRFNTI3QTFFN0M0QjMxMUJEMzZDQ0JERDY3RTEyRERFN0Q3OEY0NzE2REYyNDRCOEE5QTY0MTJFN0I0RjMxOTA3OTlDRDk3CiszMzYwREQzMQorNzNDMzdBREE3QkUyQjk4Rjg2MURBMkQ4NzhGQgorMjU0MUI1NjEwNURFOTNFREFBOUIzMUZDRjNBNTEyMUMyMjNDOTQxNkJGMTU3NENGM0E5RDNEMDM0RUZGQkE1RUMyODE5RkIzM0QxOTI1NzBFOEU4OThFMDBENzgxQzA3NzAzNTYzOEFEOEUzRThENEVDMUQ2OTExOTVBRDU2NTEyMzhGM0FCMjZCNUI4MkM0RDE4MUVCMzBERkQzNTY5QjA4RTQzMTIyODYxRDYxQUIzRTc5Rjg0MUI3NUQ5MENBOUIzMjdENzYyOTJDODg4QzJFNUEwM0EzQzMKK0NFRjU5NjkwCitEMTgyQkZBRjI0NTY1MDBERTU4RUNFNzQ1NQorRURFQTYxMERBMDgyQkI3MTA1OTYzRTcwRUYzODBCRTBDQ0E3ODA4QzY3MjQ5ODY0QTNFMjYyN0JDMENGODhBNEZERDA4MUQ2NzAwNzIwMTQxMjUxNEU2NDVBOTQxOTZGNUYwQ0JFRkEyMjE1Mjg1MDVGM0YwQjQwMDgzOEREQTVCQTM4NjlBNkQ1OEYyRTJGNUZFQUZERTVFNTU1OTY4NAorMEZDMTQzMzkKK0I3QkE1Nzg4NEZBRUVGNENBMDA2OEE2MkUyCitCOUQyMERGRDg3RUQyNDY4MTdBNkE0Q0UzOEM1NkJDNDFCNDcxRTMyQjkzMjJGRjQyQTg5RkREQTk4NTlDMjA1MzMyMzI4RDY2MTk1MDYzODdFMEFCRkZEREY3QkVDMkQ2Q0Q0RkE1MTBBRTRGMTJEOURGRjAwREIxMUVEN0RBRDhBNEI4OTU2MkQzQThFNTBDNzg2MTBDMDEzRTU1NUE2RDMxQzkyNDEyOTAyNjM1OEI2RDJDM0E5RUE5QzZFNEUyNEFCMTIKK0YzM0JBNEUzCitGOTQwNTExN0ZGRThDNTEyODNCOEVDMkEyMTRFCitFRDE5QzA5NDBCQUU2QUZFNjMzMTVFMTQ2OTc1NDRGOTJCNDM1Rjk2NTZFODkzREYwRjZFNjJCNkVCMDg1NUUzNjJGNTI4MzA3QjlCQUYwNUFCMjRDNTFFRkE0QzFFRTI2Qjg0OUYwQjk3QjJDQUMzOEM0NDZBQTdBRTE1QjQwMTlDRkI0QjMzNzdFREQ3NjBBNTk2M0NGNjhGRDMwMUEzNkYwQzVDOTlFNjI3QjBBNTVEMEI2Mjk0REE4Nzc2RTVCMDlFRkQ4NzhCQjJCMjFFQTgzQ0ZCREExQTA2Mzg4ODREOTE3NDlFRjdEQUE1MzBCQzIyNzQ3NDlFQTAKKzc0NTQKKzMxN0RDNDgxQUU4MDJDRUY5OTc1MUU2NjdCQjc1OTNCNkI0QzE3NTFFNUM4QUU3RkU2RURDNTQ0MEJBNUFGOTMyOURFMjgKKzg0QzQ5NTY0CisxNERCOUUyNUJERTc4QkMwMjE5QkY3N0ZDQworQjVBQkRDMDU3RDM2OUU0OTgxMzNDMjlGNjdCNTA0RUJFQTk2NkNCOUVCMzZFMkM2Njg1REFEMTZEMjJBMDExQzM5NTFDNzQ4NUU0QTE3NzBBM0JEOUYxQ0IwQUVCNzc0MzQ3Q0MwMkRFOUY3Cis4QjQzMTJDNgorM0NDMDlEOTAzMjg1RkM0OThBQUExMjBFRUIyOQorOUMyNzYxOTlDNENCRDNFRkUxOUY2QUIyREI5MEUxODAwRDM4RTQxOTk0NDNCNDc2OEQ3QjQyNEZFMkY4OEY4MEE0QTY0OTNBMTg5NkUxODA1NzQ3MkIyQTgxMjA5MzQ0NUQ0QjIzNzI0REM0MTU3NkM5MTA3Mjg2RTA4NEQzQjkzQkNDN0VCQTgxQTUwRTAyQTkwN0MwNzZFNjdEMDZFM0ZGMEQxQTI3MzQ0NEE0RDQyRUFFODE5NTJFRUNEMUNEODEzMzk2NkFBQkU4RDY5RkRDMEM4MjhBQzIzRUZGQTgxRENFREFEREM1OUJBMUFDMTZBRjM5REEzMDhECitDNjM1CitCMkUzNTFGQTlCNUVBNzJCMDhCQkZCRDk2NUE4NEQ0NTgwOTI2NkE3NEE2NkY4QjE2NEQ0NjE4NTVFQkM2NQorQzU1MEExODAKKzQ3RTIzNDcxQTQyQzBFMTZCQjM5MjkwMTNCODYKK0JFODE1QUIzMjg0NjAyREZBNzRDMTdDQUY3N0MwMTA5MzUyODlFRjlENDUxRDA2NzVGRjQ3ODY0QzlFQjNBRDdGMEYxRUFFMDI1RUREOTUxNTRGMjI2ODA2QzVFNjU0MEUxMUVDRTBGNkU3QzAwMEVBQzA2OUY5OTU2RUQ4RDdBMEVFQUE0NDY0NUJGRjVCRkRCMkU2MUYwN0RDMTlFM0U1RDg5OTY5RTQxRTZCNzBCNzg1MkU4M0Q4QUNFOTYwOTEyMDE3MTAyOTNDM0I4NjY5QzZBQzU3OAorQUUyMEJGRkYKKzg2MUUzRkRGNEYzREYyQTY1QTFDRkFGMUU2CitGN0VCRjcwQURCREVENEIxRjAwOUQ2MDk1MTgzNjI2ODExNzZCNEQ3OEU4RTEwQjdEMDgzNTk0MzJDQzQ0MjJEQjZGMDBCRjkwQUQ5RDI4MzgwQjI1RDFCRjlFQ0IzMUMzOUYwQUQ5NzFDNkM4RjFEQ0JGMDdCMkFGODM0Q0Q1NjBENjEyNkNBOEQ5MQorMkRFMDhDNEIKK0UwQTRGN0NCRjg4RTdGMEExRDY0Nzk3NjY1MDgKKzIxRTY5NjBDMzcwNkZEQkFGOTkzNDEwRjNENEQ0M0VBRTIxNzkxOTY5OEJBRjY4MEVFN0Q0RTNDMjk5MTQ0NzFFM0VFOTAwMUY2MUVCM0QwRjI5OEU4NzkwMTg2MTI5OUQ5RkY4QjkzNEYwQTQzMEE3RjM4Njg5MjkwQzZBQzRDNTQ2RTQ4NjgwQjE0MEI5RTYxRTU0MEJCRUJGQzhDMzIzNzQ1NjU1MzM4NjIwNTFFQ0JFNzhGNjNDQTAyQTYzRUVBRUUxNzUwN0Y0RUZBNzQwQzdEQ0UxMDlCRDJEM0EzMDI5MDIwOUMxRjc2MDMKK0JBNkNBNjUwCisxNzgwN0I0M0E5NUFCQ0ExNjQxRTkxNTEyNzEwCitEN0Y4NUQ1ODhDMkM2M0JCMENEOUU3MzZGMTU0MEQ3MjA5RUY4RjVFMDNGN0NCNzI2OTgzNUMxRDMxNzlCQzVCN0MxQkM4MTQyQzI1MjVEMzM4NjRCRkU0OEFCRDZFOUIzQjI3MTg4RjI0NjVCRjEwNkY4MDA4RDU3NzVDMEI1N0YxQTA4RkE4NDI5NDREQjcyMzBENDI1QTJDQkRFOEMyMDFDNURCQkE0QTVCODNGM0Y3MzRFOERGNTlFNjE4MUUzMkJEQjE1OTUyMjg4QzczNjAwMworMDZERjYyNTAKKzdBMzBDM0VCRDk0ODNFN0NDQTc4QzVFQ0ZECis5N0UxMDM0NURDMDhEMzdDRTlDNUM2QjlDQThFMzgwNzQzNTZGRDhFQjExQTRGOTE0MjYzMzY0QTk5Nzg5Mjg4NTA0MkY4QkYyMkRGQjQ3OEYzMEFDMzg0REJEMkVFMTY3NDJGQzQyNEUzRjRFOTcyNDkzMEU5OEVCOUY2RjJFRTYwMUM1OTk0QzgzMzBGOTg1OTQyOTVCQ0VGODM1OTBFRUE0MkUxNDI1MkM3MEIKKzExODNCN0U3CitDNURGOTFGM0U0NTcxNjM2NzFGQ0UyRDc0Rjk2CiszMTA0NzFCOTA1QUEyQkMxOTU1QjQzODY2N0I4OTY5MUJERjQwRjQzQzQwNjlGRjkwODExN0NEOTY3NEQ5NjY4MzIyMjk5QTRFMkIxMUFGQTYxN0UwQ0M5MTcxQzlGNUIxREY2NjFBQTAzQ0MwREQyNTM1MjYyMEU2RjMzNEVBN0EyRTgwOUMzMDM5QzA4MzkzRkNDNjY2QzJFOEZEMDk4RTMyNUIwMzcxODcwQkZGNUUxNUJEMzM4NEM1NkZEMzU4MzgxNUI4RDM4QkU2ODU0Q0EwMDE5Nzk1MkU0OENFMzZGNjE4MjJFMDQ4QUU0QjU0ODhEODM1OQorNjY2NDI0NEIKK0QxMEY1NjU1ODRGMzM2RDM0MkRDNTMzQTU3Cis1QjMyRTZBOTBFQTc3RDlGNzkzMzJFRUExNEMwMzVBNjhEMTA0RkUwNzk3QjhCRjNGNEFBNEYyOTEwNjY1Nzc2RDA0NDk5NDE3OUNBMzZDQkEyRUE0RDQ2NTI1NkRCN0Q1RjZENTQ4NTE4RUVFQ0ZCMDU4MjY4RjgzNTkwMkE1QUMzNjZFQzRCNkMKK0YyNzE3QzI3CisyNjA5NjQzQ0RGNDgyMjE5RTZFM0Y4QzI4RQorQzM2QkEwRTNBMkE1QUZDQTU3OUU1N0MxQUFFQjVBQkI2M0JCODU3MEU1MkJEOEQwMTFFQzVFRTk5MDc1RTA0RDU0NEU3RjkxNUVGRDZGRjBDRkJENzZFNDc0NjBDMEEwN0U5Q0FEMUFDNUE0RjQ5MUQzRTA0N0NGQjVENTY1MzFGMUQ1NUFBNDQ4M0MxMDk3NkUzQjE1NDIzODRFQUYxNDQzQjc3NDJGQUI2NzIyRURFNDkwNzBFODQ4QzU3OEYxNzY3OAorMjUwQjM2MkIKKzU1RkQ4MjU2RTE4Qzk5QzZBMEQ5MzcxNTBCCis4NUFDRjQyNjU1OTM0MTk1QkJBODI1OTI1NDAzNUYyRjA1RDk2RUIwNEJFRjFBNTA3Mzg1Nzk2ODBGMEVCMTgzNERGMzNGRTEwNjk2NzIyOTQxNjFBQzY1OUE0RUEyRUVFRTQ4N0MzMEE2NEQ5QzhBMDdERDVCNkQ5NEQ1NTY5NzU4RUI1QkI1ODFGRjYwRkMzRDg3NEYwQkJFM0UzQjVGQkYwNjY3QjEyRTY4NUJFRkZDCis4QkNGNDhBNAorNDk0OUJFQURFRkQ5NTY2MUI1OTAxQjE5QTIyNgorRUE4OTk1NjJGNjQ5OUUyRTI0RkYyNzZDMDBGQzMwRUE4RjdCNzM3QTAxRkRDODYzQ0Y1QUJEM0JERTY0MzEwQTIwM0NGOUM4QzBERDU1RDFERTdFRTMzRDE2NDA1RTMyNDUzRDZGMkU0MjUyQkEwQzQ1QjJCNzIyMThGNzc4NDM2MDkxRTI4NEVEODcxQjk0MEE3RUMyREU5MDIwMDMxODZCMkNBNzJFMkUzOTIzN0UzMUQwMTg3QkM0NzlEQzg5RkQ5Q0FFQjYyMzcxNUZGQUQxMkY4QUYyQzMxRjM5RjJBNkRCOTc0QTBBQ0Y4REE2QjM5MkE2REUzNkZBCisxNENECis1OTZDNEYzQTY1Nzg0NUZCMkUwQzg5NDQxOTQ1Cis2OTMwQzRDNAorNUQyNEY1QUMyRTQ5NTkxMUQ2QzAyOEQ5NkEwMgorOEJFN0M2N0Q2MkUxRDNBNUJGQzFBODk2MThFQjY5REI4MzJCNzEzOEFCNTkyNjcyQTU5MDMxQzMzOTExMTA2MEVCQTA4NEI2ODBGMTY5MEY0MTI0N0NBNUVFRkU3MkRBQjQzMTIyQzZGNjc4NjQ1Q0Q3RjRCMDlGREI2RThDNUNFOEU0MzBBMjk5NTkwRUE2NzFFMURGRkVFODFBODA2QzE2RDA3MUU2M0EzMEU2NUM1M0I5QjQ4OEEzQjI4RjBBQkY0ODVCOTM4ODA5RDIxREYzNzM3QjRERjlEQTZEOTJFM0E1MkUxODRCQjJFMTZDMDlGNjgyOTgyN0UxCisyNkQ5CitDMjQxNTdCRQorMDdENjU1MjU0MUJCMTFBMkU1NEI4ODdCNjMKKzJERjk1NjcyRkMyRjc0NDlGMzhGOThFRjZCRkEyRUNFRDkyMDVDMzJENzY0MUI3MzY2N0Q2ODAxMjAzNDg4MTVGQjcwMkVBMzUxNDJGQTUzOUJFNEJFRTJGQUEwOEEzMTc3OTEzNzVBQUNGRDk4RUZGMTY0RTZBQkUxMkNFRAorRUZDNTBBQzAKKzg4RjNEMjZBNzEyM0NBMzkyQUE5Njg0OTQyCisxN0U3Rjc1QTMyMzQ4NDg0NjI4MkRGNjVEQTJCM0E2NjVGOEIyQjZCNEQ2RgorQ0ZERTBFM0EKK0M1OTQzRkVGNkQzQzhBQ0UwMkZERDRGMDY0MTQKKzc1N0Y5OTI0RUMzRkVEMDIKK0ZBRUE5OEM2Cis4REI5NjdGMzlBQUVEODdENzFEQ0FDRUU3RDVBNDE3QUJDMDFBRkRBQzEzOTE3RjlGODBBN0M2OTNFODBEQkM4Q0Q5MworNzBEQTlDOUFGNzdBMkYwNzRFMkUzRUMxQzI5RDNCMTg0NjYxM0UwQTlFOThFQjE4MDE2MkY1MDkwNzhFQjg1QkZGMTNCQTc4MThGOAorRjM2Qjc3MDgwRkM4OUJGQUE5NEI4NUNGNTY5MjlDNjNGNkZFOEYyQUNGOTc0REMzRjc5MDBGCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxNzI4MzczMzI4MzUyOTBiMDEwYzAxMGQyODMxMjYyYjMwMjQzNTJlMDEyOTMyMzUwMTE2MjgyNDM2MzgzNTJjMzEyYTAxMTcyODM3M2EzMjM1MmUwMTE5PiAyMjA3IDU1OCAwIDczODQgLTEgcworPDI4MzUyOTMyMzUzMDI0MzEyNjI4PiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwODA5PiA5MzQ2IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDEyIFNGCis8MDUzNz4gMTU4OSAxNDMxIDAgMTgzNSAtMSBzCis8MzcyODM2MzczMTI0MzAyOD4gMjAzMyAxNDMxIDAgMjg1NyAtMSBzCis8MjA+IDMxNzcgMTQzMSAwIDMzMzkgLTEgcworPDMyMzg+IDMzMTMgMTQzMSAwIDM1NDUgLTEgcworPDAwMzYyYjMyMzgyZjI3MDAzODM2MjgwMDM3MmIyYzM2MDAzMjMzMzcyYzMyMzEwMDM3MzIwMDM2MzMyODI2MmMyOTNiMDAzNzJiMjgwMDM3MjgzNjM3MDAzYjMyMzgwMDNhMmMzNjJiMDAzNzMyPiAzNTQ1IDE0MzEgMTEgODA2NiAwIHMKKzwwMDMzMjgzNTI5MzIzNTMwMDY+IDgwNjYgMTQzMSAxIDg4OTUgMCBzCis8MGMzNj4gMzE3NyAxNjc2IDAgMzQyMSAtMSBzCis8MDAzMjI5MDAzNzJiMmMzNjAwM2EzNTJjMzcyYzMxMmEwNDAwMzcyYjI4MDAzOTI0MmYyYzI3MDAzNzI4MzYzNzMxMjQzMDI4MzYwMDI0MzUyODAwMWMwZTE5MjMxYjFjMWExMDBjMTYwND4gMzQyMSAxNjc2IDggODg5NSAwIHMKKzwxYzBlMTkyMzFhMWEwND4gMzE3NyAxOTIxIDAgNDA3OSAtMSBzCis8MDAxZDBmMTkyMzFiMWMxYTEwMGMxNjA0MDAxZDBmMTkyMzFhMWEwND4gNDA3OSAxOTIxIDIgNjk4NSAwIHMKKzwwMDBmMTUwZTE4MjMxYjFjMWExMDBjMTYwND4gNjk4NSAxOTIxIDEgODg5NSAwIHMKKzwwZjE1MGUxODIzMWExYTA0PiAzMTc3IDIxNjYgMCA0MjkxIC0xIHMKKzwwMDBmMTUwZTE1MjMxYjFjMWExMDBjMTYwNDAwMGYxNTBlMTUyMzFhMWEwND4gNDI5MSAyMTY2IDIgODg5NSAwIHMKKzwxYjFjMWExMDBjMTYyMzFiMWMxYTEwMGMxNjA0PiAzMTc3IDI0MTEgMCA1MTk2IC0xIHMKKzwwMDFiMWMxYTEwMGMxNjIzMWExYTA0MDAwZjEyMjMxYjFjMWExMDBjMTYwND4gNTE5NiAyNDExIDIgODg5NSAwIHMKKzwwZjEyMjMxYTFhMDQ+IDMxNzcgMjY1NiAwIDQwMDUgLTEgcworPDAwMTExODFhMTAyMzFiMWMxYTEwMGMxNjA0MDAxMTE4MWExMDIzMWExYTA0PiA0MDA1IDI2NTYgMiA3MDc5IDAgcworPDAwMTMxNDE5MTkxNDIzMWIxYzFhMTAwYzE2MDQ+IDcwNzkgMjY1NiAxIDg4OTUgMCBzCis8MTMxNDE5MTkxNDIzMWExYT4gMzE3NyAyOTAxIDAgNDIwMSAtMSBzCis8MDAxNTE4MGUyMzBlMTkxZDA0MDAyNDMxMjcwMDFhMTAxNjIzMGUxOTFkMDYwMDIxMGYyODI5MjQzODJmMzcwYj4gNDIwMSAyOTAxIDQgODg5NSAwIHMKKzwxYzBlMTkyMzFiMWMxYTEwMGMxNjIyPiAzMTc3IDMxNDYgMCA0Njk5IC0xIHMKKzwwNTM5PiAxNTg5IDM0OTIgMCAxODYyIC0xIHMKKzwzOTI4MzUyNTMyMzYyYzM3M2I+IDIwMzMgMzQ5MiAwIDI4NDcgLTEgcworPDFjMmIyYzM2PiAzMTc3IDM0OTIgMCAzNTcxIC0xIHMKKzwwMDMyMzMzNzJjMzIzMTAwMjYyNDMxMDAyNTI4MDAzODM2MjgyNzAwMzczMjAwMzYyODM3MDAzNzJiMjgwMDM5MjgzNTI1MzIzNjJjMzczYjAwMmYyODM5MjgyZjAwMjkzMjM1MDAzNzJiMjgwMDM3MjgzNjM3MDYwMDE0Mzc+IDM1NzEgMzQ5MiAxMyA4ODk1IDAgcworPDI2MjQzMT4gMzE3NyAzNzM3IDAgMzQ5MSAtMSBzCis8MDAyNTI4MDAzODM2MjgyNzAwMmMzMTAwMjYzMjMxMmQzODMxMjYzNzJjMzIzMTAwM2EyYzM3MmIwMDM3MmIyODAwMDUxOTAwMzIzMzM3MmMzMjMxMDYwMDE0MjkwMDM3MmIyODAwMzkyODM1MjUzMjM2MmMzNzNiMDAyYzM2PiAzNDkxIDM3MzcgMTIgODg5NSAwIHMKKzwzNjI4Mzc+IDMxNzcgMzk4MiAwIDM0MzIgLTEgcworPDAwMzczMjAwMDcwNDAwMzcyYjI4MzEwMDMyMzEyZjNiMDAzNzJiMjgwMDM1MjgzNjM4MmYzNzAwMzIyOTAwMzcyYjI4MDAzNzI4MzYzNzAwM2EyYzJmMmYwMDI1MjgwMDI3MmMzNjMzMmYyNDNiMjgyNzA2MDAxNDI5MDAwZTE5MWQ+IDM0MzIgMzk4MiAxNCA4ODk1IDAgcworPDM4MzcyYzJmMmMzYzI0MzcyYzMyMzE+IDMxNzcgNDIyNyAwIDQwOTIgLTEgcworPDAwMzEzODMwMjUyODM1MzYwMDI0MzUyODAwMzUyODM0MzgyODM2MzcyODI3MDAyOTMyMzUwMDM3MmIyODAwMmYzMjI2MjQyZjAwMzYzYjM2MzcyODMwMDQwMDM3MmIyODAwMzUyODM2MzgyZjM3PiA0MDkyIDQyMjcgOSA4ODk1IDAgcworPDMyMjk+IDMxNzcgNDQ3MiAwIDMzNjMgLTEgcworPDAwMzcyYjI4MDAzNzI4MzYzNzAwM2EyYzJmMmYwMDI1Mjg+IDMzNjMgNDQ3MiA0IDQ2NTIgMCBzCis8MDAyZjMyMjYyNDJmMDAzNjI4MzUzOTJjMjYyODAwMjcyODMwMjQzMTI3MDYwMDE0MjkwMDM1MjgzMDMyMzcyODAwMGUxOTFkMDAzODM3MmMyZjJjM2MyNDM3MmMzMjMxPiA0NjUyIDQ0NzIgNyA4ODk1IDAgcworPDJjMzY+IDMxNzcgNDcxNyAwIDMzMTYgLTEgcworPDAwMzUyODM0MzgyODM2MzcyODI3MDQwMDM3MmIyODMxMDAzNzJiMjgwMDM1MjgzNjM4MmYzNzAwM2EyYzJmMmYwMDI1MjgwMDM1MjgzMDMyMzcyODAwMzYyODM1MzkyYzI2MjgwMDI3MjgzMDI0MzEyNzA2PiAzMzE2IDQ3MTcgOSA4ODk1IDAgcworPDE4MzcyYjI4MzUzYTJjMzYyODA0PiAzMTc3IDQ5NjEgMCA0MTYwIC0xIHMKKzwwMDM3MmIyODAwMzUyODM2MzgyZjM3MDAzYTJjMmYyZjAwMjUyODAwMzcyYjI4MDAzMDI4MjQzNjM4MzUyODI3MDAzNzJiMzUzODMzMzgzNzA2PiA0MTYwIDQ5NjEgNyA3Nzc1IDAgcworPDA1MWU+IDE1ODkgNTMwOCAwIDE5MjggLTEgcworPDFjMmIyYzM2PiAzMTc3IDUzMDggMCAzNTcxIC0xIHMKKzwwMDMyMzMzNzJjMzIzMTAwM2EyYzJmMmYwMDI0MzczNzI4MzAzMzM3MDAzNzMyMDAyODMxMjQyNTJmMjgwMDM3MmIyODAwMjYzMjMzM2IwNTI0MzkzMjJjMjcyNDMxMjYyODAwMjkyODI0MzczODM1MjgzNj4gMzU3MSA1MzA4IDggODg5NSAwIHMKKzwzMjI5PiAzMTc3IDU1NTMgMCAzMzYzIC0xIHMKKzwwMDEzMTkwNTFkMWYwMDBhMDYwNzAwMzEyODM3M2EzMjM1MmUyYzMxMmEwNjAwMjEwZjI4MjkyNDM4MmYzNzBiMDAzMTMyMDAyNjMyMzMzYjA1MjQzOTMyMmMyNzI0MzEyNjI4MDAyNDM3PiAzMzYzIDU1NTMgNyA4ODI1IDAgcworPDNkPiA4ODI1IDU1NTMgMCA4ODk1IC0xIHMKKzwzNzI4MzAzMzM3MjgyNzIyPiAzMTc3IDU3OTggMCA0MDAwIC0xIHMKKzwwNTNhPiAxNTg5IDYxNDQgMCAxOTA5IC0xIHMKKzwzNzJjMzAyOD4gMjAzMyA2MTQ0IDAgMjQzOSAtMSBzCis8MWMyYjJjMzY+IDMxNzcgNjE0NCAwIDM1NzEgLTEgcworPDAwMzIzMzM3MmMzMjMxPiAzNTcxIDYxNDQgMSA0MjE2IDAgcworPDAwMDIwNTBmMTQxNzFjMTAxYT4gNDIxNiA2MTQ0IDEgNTM5MiAwIHMKKzwxZT4gNTM2OSA2MTQ0IDAgNTUzMSAtMSBzCis8MGMxNTFiMDAyNjMyMzAzMzJjMmYyNDM3MmMzMjMxMDAzMjMxMmYzYjAzMDAzYTJjMmYyZjAwMzYyODM3MDAzNzJiMjgwMDJjMzE+IDU1MDggNjE0NCA2IDg4MjUgMCBzCis8M2Q+IDg4MjUgNjE0NCAwIDg4OTUgLTEgcworPDM3MjgzNTA1MjUzODM1MzYzNz4gMzE3NyA2Mzg5IDAgNDA2OSAtMSBzCis8MDAzNzJjMzAyODAwMDAzNzMyMDAzNzJjMzAyODAwMzAyYzJmMmYyYzM2MjgyNjMyMzEyNzM2MDYwMDFjMmIyODAwMjQyNjM3MzgyNDJmMDAzYTI0MmMzNzAwMzcyYzMwMjgwMDMwMjQzYj4gNDA2OSA2Mzg5IDEwIDg4OTUgMCBzCis8MjcyYzI5MjkyODM1PiAzMTc3IDY2MzQgMCAzNjc3IC0xIHMKKzwwMDI3MjgzMzI4MzEyNzJjMzEyYTAwMzIzMTAwMzcyYjI4MDAzNTI4MzYzMjJmMzgzNzJjMzIzMTAwMzIyOTAwMzcyYzMwMjgzNTM2MDAzMjMxMDAzNzJiMjgwMDM2M2IzNjM3MjgzMDAwMjUyODJjMzEyYT4gMzY3NyA2NjM0IDEwIDg4OTUgMCBzCis8MzAyODI0MzYzODM1MjgyNzA2PiAzMTc3IDY4NzkgMCA0MTEzIC0xIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgyNCkgMjQKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NCBwdXQKK2R1cCAzIC9DMDA0NSBwdXQKK2R1cCA0IC9DMDA0NiBwdXQKK2R1cCA1IC9DMDA1MCBwdXQKK2R1cCA2IC9DMDA1MiBwdXQKK2R1cCA3IC9DMDA1OCBwdXQKK2R1cCA4IC9DMDA2NSBwdXQKK2R1cCA5IC9DMDA2NiBwdXQKK2R1cCAxMCAvQzAwNjcgcHV0CitkdXAgMTEgL0MwMDY5IHB1dAorZHVwIDEyIC9DMDA3MCBwdXQKK2R1cCAxMyAvQzAwNzcgcHV0CitkdXAgMTQgL0MwMDc4IHB1dAorZHVwIDE1IC9DMDA4MCBwdXQKK2R1cCAxNiAvQzAwODIgcHV0CitkdXAgMTcgL0MwMDgzIHB1dAorZHVwIDE4IC9DMDA4NCBwdXQKK2R1cCAxOSAvQzAwOTUgcHV0CitkdXAgMjAgL0MwMDk3IHB1dAorZHVwIDIxIC9DMDA5OCBwdXQKK2R1cCAyMiAvQzAwOTkgcHV0CitkdXAgMjMgL0MwMTAwIHB1dAorZHVwIDI0IC9DMDEwMSBwdXQKK2R1cCAyNSAvQzAxMDIgcHV0CitkdXAgMjYgL0MwMTAzIHB1dAorZHVwIDI3IC9DMDEwNCBwdXQKK2R1cCAyOCAvQzAxMDUgcHV0CitkdXAgMjkgL0MwMTA2IHB1dAorZHVwIDMwIC9DMDEwNyBwdXQKK2R1cCAzMSAvQzAxMDggcHV0CitkdXAgMzIgL0MwMTA5IHB1dAorZHVwIDMzIC9DMDExMCBwdXQKK2R1cCAzNCAvQzAxMTEgcHV0CitkdXAgMzUgL0MwMTEyIHB1dAorZHVwIDM2IC9DMDExNCBwdXQKK2R1cCAzNyAvQzAxMTUgcHV0CitkdXAgMzggL0MwMTE2IHB1dAorZHVwIDM5IC9DMDExNyBwdXQKK2R1cCA0MCAvQzAxMTggcHV0CitkdXAgNDEgL0MwMTE5IHB1dAorZHVwIDQyIC9DMDEyMCBwdXQKK2R1cCA0MyAvQzAxMjEgcHV0CitkdXAgNDQgL0MwMTIyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy01MCAtMjM4IDkyMCA3MjJdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMEVEODA0QkExMzU5REIxQzRFOUU5OTQ3RDBGMjJCOUQxNDIKK0I4QzdGMzJENkZCREMxOTkyNTI3OTUzNgorODE0MDQ0RjQyRUUxMDRFNkQxCitFMjFDQ0I3NQorRjUzRjRGMUE0NzVFOUU4OUNGOUM1QTVCRTUKKzhCNTlDMDIwMDU2MERDQkY3RjZDMjYwQjZDODNFOUE5NDE3RUQzODQ3QjgxOTk4QTY0NzMyOTJEMjQyODYxMzdGMzVCQUQ1NERCQTg5MjE0MEIzQkYwNDhGM0MxQzcwODQ1RDk5RDExODUxQkZGNDM5NAorNTY4MEI2OEUKKzZGNURFNDBCNDFCREEwMTcwQjc1RTc3QTA2CitBMkVDMEI3MTZGNDE4RERBRTNBQjczRjFCOUQwNkFBODUzMTc0N0FCQjNDMkI1CitEQkExODU5NQorNTQ1NEE4MTcxQzM2MTA5NjRFOUU0NkMwRDkKKzRCMzkxMUZGNjQxOEJFMTg4REFGRDJEMTIzMTEwNDE3MjgzNjM1OTYxQzRGNjk0RTZCMTVEOUUxOTc3OUU2Cis3QkNEMDY1NgorMzYwODFFNUVFMkFCMkQwNDQ2RkMwRUFGOEMKKzdGNTdFQkZBNDc0RjVGRDhEMDgyNTlGQkY3MUYxRDk0RTM2QjE5MjQ2MThBOUQzRkFBMDdBNTlGREVEOURDQUNEQUZGNUVENkVBMUI5QTY1M0M5Qjk2ODQzN0IzRUUwNzMzRjRDN0VFNDYwMzcyN0YyN0FCRjRBN0EzODQxOTAwMzkxMzYwMDA0Q0JFRkI5MzZERUQzMzcxRTVGOEQzMzdERTY2QkJDODlCOTJFNkZFMTMwNQorRjRCRDM2NTAKKzQyNDkwRDhBMzJBMTJCM0VFRkQ1MzcxMDJBCis5MzA5RDk2NjE4OTY2NzdENEVDQzVDODFCMjBCRTc3NDkzMDdGNjA5MTUwRENDODc4RTNERTM5RDBCNzI0QkM3RDY1OEI3RkYxRkMzNkQ3MjRERkZFNDg3NjUyNDZGNjQ5RUI4NTg5NjdEQkRBMDkzMzQ4MQorNDJGNTQ1QzIKK0JEQTdCRTA2QjQyMkZEMzAyNDkyMzE2RkIyCiszNzQ1RUU2RTNENjRGMkE4M0M5RDhGNUFCQzk3QzhBNzNGQzdFNTI1MTgwN0UzNUM3RTI0NDY0OTRFQUNDN0Y4NDFGODI1ODYxMUI5N0EzNTYzNzZENTE5RjQ4NkMyQTk0REM0MEM0MjRBMDMKK0JFMENBODkwCisyQThDNUU4MzhEMEM4MTVGMTAzMDBENTFDOTEyCitCRTdDQkE2MjFBMkFCRjkxMEYxMjlBODUxQUIyQkQzQzAzMDE1RDhBNkIzMzk1RTk3NjI2N0IwRUEwNzExREVFNUE1M0E4NjA4MzNFRDQxOEJCNDIzQUJBNUJGNEUwRUU5MjRFNTVCOTM2MjcwRDA2OEMxREYwRTVBRTgwNkIxMEI0NkU4RUEyQkJERTlEODZCQkMxOEIxODY5MUQ1MThCQUZERjk1QTNFRTM2M0UxMEVENTcyMTZENUQ4NUUzMzEwNUUxMjE1N0E3M0VDQUZBQ0YyRTE2QjhFRkE1MEQzQzY1NTI1NgorOTg0RDYxQjEKKzkxNEIzNkE2N0VBM0RCREM1RUU5RjdBQkY4Q0EKKzU3RjIxNDdBRjQ4RjQxOTMxRjk4RDcxNUE3OEZEQzJEQkUzQzhCRDc4MzQ3M0I3Nzg4NzVCMjEzQkIzRkUyQjcyMjZGNkE5MEQwMUFBNjY4NzMyNTJFN0Q5RjYxNzJBNkM0MzQ1MThDNTFERjIwNjUxRjFGNjZBNzU4MUNBN0Y1OEQ4MjA4QTFENzQzMTUyOTJFOTYyQjE1MDNENjk1NDBFMDk4OThCQjEwRjNBNDE3NzA1RTgwRDg0REE5RjAzQzAwOUE2OEI1REU4Q0VBRThCQTlCNjFDMTI2NUIzMjdGRTUwNTY4MERGMTA5QUQyNjQ2ODY0OTg1RThFMAorRjhERAorQjAKK0Q5MjA4RDM0CisyMkFFOUZDNUZCQ0QzNDg0ODMzRTAyNjcyRgorRUJGMzcwMEI1REExRUQ0NEUyNTRBMzc1NEQ0OEUwNTYyRThCNTdGMzM5MzJBNDQ3MDM0NDZDQUI5REI3RkMxRDg1MUQ3N0ZBQTM5MzVGMTM4OTc0QTZBNUY0M0NDMzYyQjczMDAwNkVBQzFDMDU0Njk1NkU4QjlBQjJDQ0JDNzlDQTY4MzI1RkQ2Mzk1QjgxRUREODVFQjQ2RUI0MDlCQ0Y5OEJBRDIxM0I2REQ2MjU3RTkzNTU5RkI0Rjg2QzM4RTEKKzdBMDY1MTg5Cis3RDRGQzQxNENEMUYwMkRGRTUxQkNDMUI5NjNECitGQzFEN0Y1QjM1Njc0MEYzNjdGMzAzOTNFNkQxQkY1ODIwNjZFNUM5N0FFQ0ZGMjVCNzQwRThDRDFCMURBNkRFNTNDMTlDMUU4MkJFM0Q2RjgzRkVBQjNCQTAzRjRCNDhBQjAzMjU0OEI1NEExQ0RBRTM0NEIyOEVFOEEyMUMxMjVBRjNGM0M0RDBDQTg0OEVCOEQ1MzNBRTkyMDFBNEFCMkUzOUY4MTVCMjQyN0ZCNkE2MTRGMkI1Qjg2RUExOTg3Q0M1Njk3QTY3QTEyMkMyNEVDNUQzQzgwMDIyQkVGMDdGNENGRUE0MTlFMDYxOTAyNzExMDZDNEE3QTgKK0VBM0VDNkEzCitEOUNGNkUxNjc4OUExRjg0MjIwMzgwRjAxRTVBCisyN0FDOTNBOUNBMUQ5MDI3QjUzNjkxQTFGMDlEMDVCODBDQkYzNTk0MzIwMEE1NjczRTY5MjM5NDM4NDVCOThENjk3QjcxN0YxNjc0Qjg1MkU5MzZFMjBCRTFCNDg1MUVCMjE4RDhCMTA4RkI4RDBFMTBDRkZBOEU1NTZCOEU5QjgzNkQ1MDRCOEZGMTY2RkY5RTc4OTk5QjI4NzFGRjhBMTg1NEJBODNEMzgwQTcyNDY5MEFBMzJFMjlFRUQ2NTg3QjkyODc1MzRDRTM3REQwMUMKKzlBMTQ2MTc1CisyNDRERTdCMDE1NTFEQTQzQjVCRDdEQTMyMzNECiswREVGMEVGQkZCRjM0RDY0Q0YwNTU3Nzg5RjVCRTJCMEI4MDM0Q0YyNDcyNDI1NDE2M0IxM0MwOTg3OUJDOEFGMjc0MTAxREQ4QzRFMUVBRTYxQjRERkI1OUYwNzY4RDRDMEFFNzA0MDNBQkJDNDBDNUVDRDM1MTI1RkE0QjcwNzQ5RUQ2MDE3NDY2MTg1Qjg1RDMyRDQ2MjRDMUZDRjQyQTNFMzU1RENDOEYxMzBGMURDRTEzRjVGMUY2NTkwOTNGQTgyQUNGQ0Q1NzhCNTMzNEYxRTczRDc4REQ0RkUKKzgzQ0JFM0ZGCitDQkY0RTY5MTA0MzJEM0M4MTIwQ0YyQTZBMgorMEU4MUQ4MTk5NzEwNzBEMjhBNkEzNDAzMUI1QzExMjNCOUNERDlCMDNGOEJDMDNBNjg2ODI4MEZCQzE1MkE5RTBBQTdENzJCMkIxOTEyNEZFOEQwQjQ4RjVDQTdCQTM4MUE5NEIwRTQzNTc4QjcxMzM3Q0NDQjhFODlGMjVGMEU5OTUyNTU1NjAwODM1NUM2RUFEQzJBOTcxMjkzOUE4MTY2N0MxQjg0RUZGMkY5OTI2NkM3MkI3OQorREFEMUFDN0MKKzhDRTA4RkNEOThDMEJBRDAyNzE3Qzc5NUIwQzcKK0EzMEI5RTE4NzcxOUVBOUVGOUZBMjUwREZCMzYzQkIwMDg3NUMzMEQwREUwNjU2QzhDNDVCRkJGNTA0MjlCMEYxNzQ5QzEyRUJGNDU3QjAxN0VFOUIyNTFFNTQ0MzIzRkNCNTI4RUQxNjgzNDM2NjZFM0E1ODIzMjMzQURFODkyMkMxN0UzRUUxNEMxNTAzNDk1NkY1Q0JGQzk2NURFRkY0MkYzNEI0NkUyMzMzNjQyMzYxQzFGODI0QTU3MEVFQTYwNTc4OTZBQTdGRjVFMDBFNEFECitDNTk2NURFRAorOTJBODE5MTY3OTZBOTg1RUM0MUFGNDlFRThDNworODlBOUJDN0ZDNzc2NERDM0Y4QTZFODhFRjU5NEM3MkJDMEU4RDNBNjVBNDYzMDI0NDU4NjQzNzBFMkM2NzQ1RUJEOTczRUM5QThFRjhCQkNFQ0Q0Q0RCMTU0MkIxRDIxQzRFQjAwMUNGQkI1NEE3N0NDOUMwQ0Y3MjZGRDVDQ0REMTZERkM2NzJFMTkyRERBMEU1NEQ2OTYxMEE5N0FGMTk2M0NERjg1NTM0NTdGRDJCQzhDQTEzODFBMkU4QkFFMUQ1NjI2NUM1RkQ1OTg5M0E3RkZFNEU3N0I5NTc2QkFEODM4QjgwRkIzQTkwQUJDMEI0QzEyREVFODNBCitFQTBFMTQ1NgorNTlBNjY1MzhEQ0Y1MzIxODNBOEJFNkM1NkMyMAorNjJDMEFBQjk4OTNFMkE2MTEzODhCNDQxNDFCN0Q1ODRCNjlCNjg4NEVFNTFBMjQ5REI2MkQ4NUE1M0Y0ODE1NDZDRjBGNkU2MDhBN0U3QjFFOTVFRDhFRUYxNUY3ODhDRTU1NTVGOTQ3N0UwOTQxNTUyM0Q1MDQ4QTYxMUMyOEE3Qjc1RkFENjJBMTc3RDY5NDUwQjk5QUI2NTEwOUE5MUE2MjE5Q0M2QjNEMzZGRkMzNEQ1QTNCMEVCNEE3MzY5QjFBMkY2ODQzRkYyRTZBNzA3MjY1QTIzNTE1MjMyMjQ0RTZGRkYwQ0VGNTVCQ0JBRkRBMjNGNkFGMjNFCis2ODNBCisyNDZFRDYKKzc3NkU2ODE2Cis4RkYxMDEyMUNFRjhEM0JBRTNEMjQ3RUFBNQorQkYxQkVDNTM0REI0Q0UxQTFFN0MxRUVEOUU5RjZDQ0NFNUJCMjExQjJDMEIzQkY5RTdDRUZENDA3QjBENzkxMUY4NUE1MkFGRTNGNzAzRTMxRjY4OTRCNEE3MUM0RjI3NDA5NzNFMUMwNDM2M0VENDlERTAyM0I4NEIzMkQ4REQ3QjE3MDc1RTgwOEQ1MjMyMzAxQThFQTJEN0MwQUVBOTRCCis4QjA3MDI5MAorNTVBQUYxODk0RDI1NkRFOEMzMzAwNkM3OUUKK0Q0Qzk2M0M3MjAxQzlDMDI4RTI3NzVEOEQ5QzRFMEU2MDk0QTIwM0M5MTBBCis1QUFGNTYzRAorRDAyRkM2RkMxNERFQjg5RkQwM0I0RDcyRkFGMgorRDc5RUM4RjQ2NzA5RTIzREIxMTlFOTI3RjY1NzBENTVDMDE1MUE3N0IwM0Y0RUZGQjRGODlDRTIzOEM0MkFFMDI4RjM1MzY3RTBGRDY1MDg2QjRBREVFNTg3RjJFMTA2N0NBQUM3MjA4RkEwNDFFMTA4QTcwNjBEMUJBRkQyQTdCODE3MTg4OTNGMzlFMTk0MEExMDZBQjhGRTAxQ0Q2MzE3NjBDN0Q1MDlDMDdGNTNGMkI4MjkzMTVENjU1QkFGNUU1QTNGQjEyNkE5RUFEMjUyRTQ2N0IyRjkwQTk4MTdCNDY1M0Q1MDI0NTY0REQzMTQ4MTU1MjQxMUJGCis1QjVCCisyMEE3MEQKKzVGNTVEREVCCiswNUIwNUUyOTEwN0M4OUE5NEE3OTdERjU4MAorREEwRTBBNEY5M0RBNTQ0RUNGRDdBQjFGMzY1MjYyNzdCNjAzMzk2QjM5MjEwMDBFOEI2NzcyNzA4NkJBQkNENUNBRDBGNDQ1MDY1MzBCRDEwMTREMUZFOTY3QzkzQUM4OTM2NUI3OTkzRjcxOTY4NDE5QUEwQUZGQkE2QzRGNDdDREJFMTk3RDY1OTNFNUUzQzNFODA5QkUzQTE3NTQ3M0FBNzVGNzMzMkQ2QUNGQjYKKzhDRTc2QUQwCitDRjJCQjQyMkVFMUE1Rjc3NjM5OThGNzRCMworMkYyREMyNjBFRkM2OEI2NzVEOTk1NDU2ODNCQUJBQTc1RDBBQ0NDRTVFNDAwMUU3QTczNDVGOEM0MjhCNkYxOUQ3RTYxRTRBM0JDOEFDMEY3QUJFM0VCNDUxQTA2MjE3ODI1OUY3N0U3QjcxNDEyNjhCMUE3NTQ4OUI1RUFGOTQxOURGNDVFRDJERkUzNjJFNDI4OTIyQTk0NEVEQjdGNjY3NkMKKzAxOTlCMDQ4CiszRDcyOTBCQTZFMTc0QjkwRDUzMjA2QTRCQzA4CitERDY2OThBQkMxMTY1NjkxQjE2QkZFQUNCMEEzNkNGQzM4RTdEMUI1RTExOTA5NEYxRUYyNTU2RDMzNjlGNkY2Njg4NjFFNkQwMDYyNjIyMDhEQThCNDZCNTFDQjlCMzI3REUxOEMwMTdFMTNGMTFGMTM2QzNFMTdCNDkyRjg1NjE1NjYyRDY2NzY1MUJFODQyMjM4NzVCRjM5NzFCNzIwMjQzQTYxMEJEMTg5RDQ5NTMzRTQ3QUZCQUZGQ0IzMTk2OUNGQURFRUU0M0E2OTE5N0Y0QkY3OUQ0NDc4CiszN0Y4OTZFMAorNzQ3QTAwRkJCMkNEQjdBNkY3NkE5QzM2ODcKKzdEMEI3NzdFNTQ1MjQyRkU4QkE5RUFGM0E0ODE5RTIxQjU2NDI1OEUxOEM0M0NCMDcxNTI0Nzg3QTk5Q0U4QTQ1MUY4MDEwODk5NkE2MUNEQUNFRkFEMjczOUM5ODk5RjYwRTZGQjcxNjkwODcxM0VGNzA0MjIzMTM5MjRCRDBENEM0RUQyRjdCRDk5RDU5MzI4ODU1OUE4QTVDNDA2MkRGRUY3QzM2MDI0MEQzNkQ3NzAKKzY0NkM1QTY5Cis0MUMxOTE4QTQ0NERDMEU1OTI0M0YwQTg5QworNERGMDFDNDMzNzY3RjcwMEFBMzA0MUVCNjRDRjY5N0MwMzU5MzcyMzIxQUVBMUFGNEIxNkNBRDVENjNEMUUyM0VGQzc0NDM5NzMwQkExM0QwQzYxRkI4M0FGMUZCMjFGRDkyNkQ1OUIwN0Y0Njg1NDU3NDEzQjhDN0I1N0VEMDM0NjNGOEZBOTgyOTI1Q0YyOUU4QzZDRDFEMUEzRjE2QTc5MzY1Q0I0Q0IzREZDMDBDNDJFRjIwRAorNzU0MjMyQTEKK0I5NjQ3MUE2NjM4OEUxOEVEMTVEQTQ3OTFDNUMKK0FENUQ2QzcxQkM3NkY0QjJEQzgwMkQ1MEE4NTFDMURBRDhCOEQ5M0MzNEZDRTYxNzA1M0E4MkVFQUIwQTNGMUFGNDBFMEJCNTAwOTE1OTU1RTBFQ0E3MjQ1N0VGNkQ0ODM3RDY0QzdGMkJERTEzOTBERjk4MjBENjhBNjk5RjYzOUJBMDAyMkQxMkE1RkNFNTEwNTZEOUY1QTA2RUEzRUE5NjMxQjdBQTk2MjgxRjEzMjlBMUU5N0VCQjUxNkQ0RDg0QjdBM0FEOEU2NDI2NzBDMTg2RjZERUFDQzg3QTAyM0Q4NDA4QjY1NEZDNzk0QzQ0MEUzMzY1MzczMAorQTE1QworNkQ4OTNDMUU4NjNDNTEwNjNBNDAwNkFFMDZERjBCMjA3MTMxQjQzQTE4ODdEQjY4RUUwQTJBMzUxMjAxNDAyMTRBMjNDNDhBNzJGRUZGMzQ4RkM2OEVDODg3ODE1MQorRDYxNzQ0MzcKKzE2Q0FCQzBGRjlDMUJCOUQ2QzlGMDI5NUY2QkUKK0YxMEZGNzlEOEM2NTc4Q0U5RUY5MTNEREIyNzAxQjQzQzlGMDVENjkzQUZGNDZFQTNEMDlCNUVBRUE4MTEwOTMzQTNBMkMzRTZGQkI3Q0Y4RjQxMDRCQzkyQUM3OTlDNTIzQzFBRENFNjg0QkZBODJFMjU4QjI3RTQ0NUU4RjM3MEI1N0RBRUIwQzlBQThEMUQzNjI4RjkyNDc1RTA5RUE2MjAwMDc3N0I0RTU3MDhCNTU5OTQ5MTlENTJDQkNEMjBFMkMyNkY0NUUwODBFNDc2RjJEMTQ2MTYwCis0Qzg0MEVFNQorNzA3MUQ4NDA0MTIxQjdDRDA4QUEwODIyRjMKKzMxQ0NDRDRCMjIzQ0MyMTI3RjZFRkU1Q0VEMDY0NEY3NTI3OTgyRTUwNUQ2MDExNDQ3MjJGNTFGQTlDNjBCOTMxMDdBNkVCMkFDNzc2QjdDRkRCMkM0NTEzNjM0NjFCNkRBODU3QUYwNEZFQjQ1NzJFMUIxODVCNjdGMEZFODdBQzA3NDMxNjhDMTBERTE0RDU2MUE4NTM2QkREREI0RTYKKzQ4OEQ2MTQ0Cis0MEI1MjRFOTU2REUyOTcyQTAzMEMzQ0M3MQorRDFCNkE4QkJBRkE3MzJERDA0NTRGNDM4NjJGRUZDOUY1MzExOTEwM0YyNkY1RjhBMTE3MDdGNjY1OTdBODFDMTQyNEJEMzVBRkUwNTA0MDE1MkM4NEU1QTkzNjk4REM2MDhBNEE5RUE1NDZEN0RDRjIwMUIwMjBBRUFGMEEzQUFGOUFCMjc5RDZEM0Q0RjAwN0YyMjJEQ0VFQUQyRUJERDg5QTI4NDMzMUQyMjAzRDFBMDY4OTAzRUY4QjU0OUY4QkREQTkzCitGRTU2RTdENQorMUU5NzRENTk0QUNENkYzNkM4N0UxNUM2Q0FFRQorRUFDOTIyQjhCNzYxNkQ4OUFEODhDQTZDNzZERjk2MThERENFNUZDRjI5NkMzREIyQjA3OUM0MjczRjY5MjZDRUVBNDlGNTQwNjgzNDdCN0E0QkM5RkE2M0E4OTdGNTZBQTZGOTYyOUVDN0Y1NUY1ODQzNzgyOUZCMENFNDc0ODJCNkZDRDdGQzg4RTQ2MkY0NUM5RTFGNDlDODEyQzNFNkQwRDAwRjUwN0U5REJBQ0IzNEVFQUEzMTBDQTEzQkI1MkJCMjUxNkM2Qjk2N0U2NzIwODQ0Q0MwMTVGNTczQkVBOUY0MjBENkU5RkExRDBENUM2QjMwRDE1MzQ4Cis1OTAyCitCNTRDRTBEOTI2Mzg2QUMzRkRFQjBGNzBDNkNERTA3RjFEREYyOEM0OUZCRUI2REQ0OTEwMzU4NjY5OTE3Q0VGMjk4NzhECitDOTBENjQxOAorODlEQTc4NUUxQkI5NTYxODZBRUFCMkVGNkEKKzc3RjE2QkJCRkFFMEFDMTQ5ODE2OThEREQ1MjVDQzk2MTQ5Njg5NkY0MjI4RDAwRDFEMUU2NjNGMjRFMzU4MTA2NzU1ODNDRDExODk1Rjc0RERBMUM2NTdEQjNEMUYxMDMzQ0NFMkNFMTVFRAorRENBNzY5NzIKK0NDNTNEM0Q0REMyQzFBOUQwRkM0RjU4NzM1MUEKKzBGMzI0NzAzMERGOEQzOEZFMDQzNEUxQzg2NkIwOTM5NzM1N0NCMDA5MTcxQjFEREE5MkI0MjIxMURCNUE1RTRCRTBCNTkxM0E0QzE3RkNGOTczMThCRjM1NDc4MTk3NUU3OTNFRDNEMzUyN0RGNDc2MTlCNkFFQUE0RkMyNjY5QUE0QzZDMzRFQUQ3MThGNEY3NTA2QTBGMzkxOTUyNDVGQ0JCQTVFNjNBNzlGMTkyOTRDRkM5QUI2OUNGM0JDNERDODQxNDU3RkZENUFGMjFDNTQ1OTlDOENENUYxMTM3QkQ4OTFEQjlDQzYzNDc5MUE2OTM5QzczMERDRAorMjI4QworNjRCNTU3Rjc1NkFEMkQxRjA1N0QzREIyODE2RUE4ODJFN0QwQUNBRkY1OTUxNEY0NEQyNDJDQzdDRkY4RjMKK0QxOUM3NTVCCitBMTE3NTBFMEI0NEIzQjk1M0M1MDlCMzkwQjBGCitCMEU1QzNGNDYwQTMwQjlGQkREMUY5Q0Q0QjRGMkZBMUMxQTE4MjVEN0E2NUY4MzA2RDBERTVDQ0YzNzU2NDQzRERCREFBM0YzQTgyNDBGNUU0OTZGMDlEMUFBMTNFMEJCQUZERDE4RUNCREQxN0Q5NEU4NjgxMDk5MzdFMjFFNTk2RDA3MDk0RjNENzkxNjI4RUQyRDRCNjUwMEQxOUY2NTZCMzU0M0QwRTYzNEIyMDMxMDJERjFGNTRGMzJBNkUzN0MwMEJERTVERjQ5Q0U2NkIyQ0QxOUIKKzYxQzBCRDJDCitDMjlCRkYyNzQ4Nzg3M0VGOUFFNTcyNzdCRQorMTdBQjNFQzg1MjdFNUM0OTIyMEQ4MzdEOTFFOEYwQzc3QjQ0NEY3NjQ4Q0MyODQ5RTIwODc3NEQ3N0JDRkY0OEM2N0IwREJCN0NFRTBFM0UxNzYwRDE5RTk2NDAyOEM5Qzk3N0NDOEFGMzdFRkFFQTY4MzkxRTk1QzVCQzlEQjYxODg5NzBGNDlBMTYKK0Q1QzEwRDFDCitFOTM1OUQ3NUVBMUMyNUM4NEUwRjQ4Rjg1N0IzCisyOTIwQUQ0OUFCQzFGNzRENjU1NkI1MDM1MzAwMkExMTRDNTA0QjUwNTlEMTIwNDAwQ0Q4NzU1MzA3OUU1QzNFNzk0NEYxREJGRTIyOUQ0MDE0OTkyMEJEN0FFODIyOTM2RDA4OEY4MTE5OEU1QjhCRTI3RTMwNjA1N0JCQjIwMUJBQTkyRDQwMzYxNTgwM0YyNDUxRkJGNURCNTBFNzFGNENCMDBEQjIwRUVGOUVFQkJFNTVBNDMwMEE3NEI1Q0Y5MTVERUIzREFGMzdCOTBDOTZBODMyNTc0NTQ3MkMwN0Q1NzdBODQyRjQ2MEQzCiswNERGNjNDOQorRTI4MjRFMUJBMUJFQ0Y2MzAzMDA5NERDMjEKKzFDQjJDQjk0MDg1QzREQUM5MEEyRTBDQ0ZENDM0NTE4QzVGNTM5RjFGMUY4OEVFNUM1NUVCRTJCREI3QkFCNURGMzREMkU4NDkxNzZBNkU3MzdDNzRCN0Q5REE4OEEyMkFGQzU4QzhCNEY1NTFEMTE1NzY4ODczRUM2MjNEQkQyMUEzRjMxNDZCMTE2RjIwQTkxQkNFNzE4RUZBMkE1RTM0NDY2QzVENDgwQUZGMAorRTg4N0M5Q0IKK0MxQzA3NjFGMEVFMkE5RkY4MTc1ODJENjdEREYKKzI1MEUzQUFCQUQ2MUFDMkMyOTJBQTcxMkY3RjA0OTkyNTI1MjQ5QzhEN0IxNDM0RkM4MUU1QzNBMUYxRDhGMjFCRkEzMUFBNTBEMUQ4MkYyMDlGNjMyNDZCMkE0ODUwMjZENzcwNTMxQkUzNTFFMDhGRTZDNDcwNURBQUMwOEE0NDUxNzI3ODY3QkY1MDM4REUxRUEyNDcwMTRENjkyNENFM0M4REI5NzExMjg2NkUyRjJEMTk2NTAzNUE2MTczQzY3OEM2MDNEMkZBMkNCMzlCQkExMDVCNENCQjNFREM2OTA1NUQ3QjQ3M0JCODM4ODlDODhEQ0M2Cis2RDFCM0YwNQorQ0VCNjIyOTNFQjE3MEE1RkUxOTgxQUVDRTgKK0QxM0RDNjUzN0VDMURBNzY1RTlDQ0M4QTU4MDJCRTE5NUUxRkQyMzIyOUI0NzkwMDU1REFDODE1NEMyRURFREQ4MzZDMjZBRjU4MjVCOEUyODcxQzY2OTI1NjU4OEJEN0FFNDNBMTdERkIzNDFFNEFGREM4OTgzQTQ0ODBENTgzQjY0M0JFMjY4MQorQkVCN0VGNTgKK0M4QjAzM0FGQTBCMjA1ODgyODA3M0NGQUM5CiszOUZERjc1MEEyOUI0NEEyNkNDMjUzNjk2NkEyOTYzMzI2NkNGNUM3RjdENjI0NDI3NkM1Q0E0QkU5MDE0REI1REE5NEVCMDA3MTE4QjUwODlFMDY0Mjg0QjE5NzNCM0QxQUE5M0NFMTMwRDI4NUQwNkQwM0Y4NkQ3MDY1MTQyODNDM0JDMUZBODI0NjBEMTk2OUJEODdBMEVFQkZBMUJFNjlEOUUwNUI1Q0IxNkVCRTA2RENERUVDQkUzNzczRUY0QTQyCitDQThGRjZFNQorNTNFOTYzMjI1MDhBOTY5NDE4QzZGOTEzRTYKKzY2QzI3RjA4NTRDNzA0MkZCRjgxQzc1MkMyREYxQTZDMDI5MEMzMTE2MzI4NjgzOTcxNkYwMTIwQzhBQzM0Q0JBNUMzRDE4QzAxRDQ5REIzNkNEMDU1NENDODdCRkRDNERCMTI4QTk4Mjk0NjhDOUZBMTg1NkYyNjM5N0E5Q0YyNUEwMjYwRUU3OEFCNUEyREFDMTI1MTdCRjkzMjExQkMxOUEzNUM5MTE5NEJENDVGNjAKK0FDOTRFNjAyCis1Rjk5QzFGMEE2NDA4RTQ3NDE3NzI2NEM1MDk4CisxNjBDQzY0NEU5RTAzQjVGRUYyQjI5ODU1Q0Q4MTcyNTE0N0M1NTgxMzg3ODA0RjAzQ0EzOTBBMjRBRDM5NUZDRjBCMUU4N0U5NThFQUJCNUJDM0JENDU1NDc5MzhGQkY1QUU1MEVDMjU0NjgzNEIwMUEwMEZCMUE3N0FDQjdGQTE2NTFGMDg2OEM5NDI3NTU0MDY4NURENkUwNUEzMEMwNEQ1QjkzNEE3NTQwMTVCMDE0OEZDMTI0REIwQjhERkJBMjg5M0Y4MDAyOEE0MkI5NzFEQzAwM0YwRDBFRTI1NTNCNzJDOUY5OTBFQTQ0QUU5QTg3MzEwRUE3MEUKK0RCMjEKKzkyRkNENTgxQzY5QkZFMTdDMUZFODRBRkE3OEEKKzUyNzM1MzA0Cis4QkREQjRFMDBCRUM5QTRDQTczREU0Nzc0RjY2CitERjc3Mzk1RjMzRDkzNDA1RDQ0MEJBMTg3MkE4N0Y5M0QyMDc3REYzRkYxQTFFNzhCQUJDM0NFQjI2MEYxODE2NjE2QkNGQzg3MThFQjYwRjM5RDI4NEUzQkE5RkQ2NzkwNTZFQTQ4QTRCREVBRTk3NDVDQ0M5OTE1ODI3NUZBNjE4Qzk4RjFFMDQ5Q0JGRDI2OTA1M0U2M0U2MUMyOTNENDExMzNCMDZFRDQxNDUyMDJGRDI3RkM3QTY5QTdCQTAzOERCRjlGRDQyMDBCNzJCNDE4MTAxOURFNzBGMDFGRDUxNUE1N0NCQjMzNzJFQTlERENCRDk0MTg4QzEKK0RDOUYKKzI2NTRDMDU3QUM3M0JDNDNDN0Q0NDgzQjc2NkRDMjEyQjQyOTkxNzUxRTUyMENFQkQ3CitEQ0UwMjlBQworRDYxQkFENUEwNkQ3OUExQkNENkY5QUE3MENFQworNEI5QTQ1MUE2RjA3RjMxODkyMjY0REE0Nzg4MDA4QTFFMDM2Nzc3Mjk1MEE5QzkwRjQ0QTk2MDBBNTlGMkU5MzAwNzM5M0FDMDM4RTVGMDZBQUY1MzI5QjQyNDUwQkNFQjg5ODJGNDBFMzBFN0I3NEIyMzhBNzYxQTIwNEI1NDU0ODZBNDcwMTNGNkVERDZGQ0M2OENBMDkyQzlBMjZGMEUzQ0JEMjZFMDUzNUZFMjVFMzVDQUU2OUIxODUwRDgzRkNGMURGQjAyN0JFQTBGMDQzMDYzNzZDRDk5NEVGOTJCQjJCRTVFMkYzOTczQUEzNTIwOEVDNkFFRDMyCis5ODQyCis0QkJCRTREMgorM0VBMEY0OThGRDU0QkVGRjA4OEI0OTA5QzMKKzdDRUJBQ0VFRUVCQTJGRTcwREM5QUM3QUQzQTM0MjE5Q0I0M0UyQjY1OEU1RjAzMDUwOEM4MzJFOUQ0QTk1ODJDNDgyOUUwMEE2M0ZGRjNBREY4Qjg0NjZBMDA1OEU0RDc2NDE4MDUxQzNDMUFDNDI2NDY3OThDNjRDOTk5OQorQkU2NTdBRTQKK0NBQTlGRTk1NDU2NDkxQzBDREU1NkE3ODNCRDUKK0UwOTM1QjlBNjAxMEE0MDcKK0IzNjYzRTk5Cis3MUExRERGQTI3MDAwNzEwNjZBQTlBMjU1NUNGM0UzRDFGOTMyRTZFRTA3QTFGODg5NDhDNDdGMDc5Njc0ODk5QTFCNQorMDBENTRGOUQxMEIwQzIyRTZDQ0RCOTVDQjI1ODRGODI2Qjg5QkJFNTc4RTE0MDlDNEZDRTg5ODgyNDcyQjgyNzUzRTJEODcwMzNEOAorQ0FGNENFNTM2NTc3RkIwQTVCODc2NDA5MzIxNzY4MUYwRDFFOUJBOEQxQTU2RTU3RDhFNzZCCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2hiCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoYgorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaGIgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ2IHB1dAorZHVwIDMgL0MwMDU2IHB1dAorZHVwIDQgL0MwMDU4IHB1dAorZHVwIDUgL0MwMDY5IHB1dAorZHVwIDYgL0MwMDc4IHB1dAorZHVwIDcgL0MwMDc5IHB1dAorZHVwIDggL0MwMDgzIHB1dAorZHVwIDkgL0MwMDg0IHB1dAorZHVwIDEwIC9DMDA5NyBwdXQKK2R1cCAxMSAvQzAwOTkgcHV0CitkdXAgMTIgL0MwMTAxIHB1dAorZHVwIDEzIC9DMDEwMiBwdXQKK2R1cCAxNCAvQzAxMDUgcHV0CitkdXAgMTUgL0MwMTA4IHB1dAorZHVwIDE2IC9DMDEwOSBwdXQKK2R1cCAxNyAvQzAxMTAgcHV0CitkdXAgMTggL0MwMTExIHB1dAorZHVwIDE5IC9DMDExMiBwdXQKK2R1cCAyMCAvQzAxMTQgcHV0CitkdXAgMjEgL0MwMTE1IHB1dAorZHVwIDIyIC9DMDExNiBwdXQKK2R1cCAyMyAvQzAxMjAgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMCAtMjA3IDc5OCA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjlCMDA4QkRFQTc0NTYwMjUyMjYwRkI0MEUzMTBEMTczN0EKKzg1NDUwQ0RFMjNFOEEyNDk2NzU4QjQ5QworNEI3NUU5NzBBNjc5MzdGQ0RECitCREQ0NTUwQgorNTVGOTc0NTkzREE0MDdBMEMyRTJDODhGQTkKKzMzNjA4MkM4RDA4MjBCNDQ0NEZDQzEyOEY3QUFEQzAzMkJGODE1NUYwMjJFODcyMUYwMjdDMkQ3NTE3QjNGCitDNEYxMkE2MworNTM5NjUyMUU0MkEyRDI2QjZBRjIyNjE1NThCMgorREI5Q0M0MEFCQTUyNUU0OEM1REI3RjU2MkE3NzQyOEFEMTgxOTE2NjY0NzM5MDI1NkZCNDYwQTUxN0ZCNDc5QUE0RTIyMTMzQzkyNkQ5MDVDRjFENzk4Q0M4NjMzQjMzRjY0OTVDOTE1OUQyQzEyRThCOTdCOERFNzFFMTRFQjYxRjlENEVFOTE5NjQ1MzFBODEzNUZDRUFCNTIyNjk4NUYxMzdDQTk3QzlFOURBRkQyMkYwMzI4MUI4RjQzQUZENEY5MzMwRjYxMzAwNTNGNkE1NDhGRjMwMzFFRENFNTc1MjBBODUwMjI4MjkyMEVGMjcyOAorQzEwRDg0RjEKKzIzNDAxMTM1MDBCM0NCNjQ4MEM1OTA1QTYwCisyNEJEMzIwODREODdGRTgzQjIwNkY3QjZCQzYwNjlDNUEwMjg2RDJFNDQ2RDI5QUY5RjNCRkY5MUYzQTNFMjVFQTU1RUIxMTcyMTczRjFGNEM3RDI5NkQ5MUU2MDM4Q0ZEQ0I1QkJCMUI3QkEKKzM3Njg0MkYxCiswN0YzOEJBRTkxRTczODQzQjhGN0E4MDU1MEUzCitBODlBQThBMTI1RkIyNTZFMjA5MjMzNDM3QTIwQjVCNzY2ODU3MzYyOTYzNDMwM0YzRDNGNjkwREZDNzdFRTUyMjM3OTA4NkZCN0I1OTcxNkMwN0JCODQ2MzZGOTI3MDNDMDE1ODM3NENFNDdGNThDN0ZCM0JGRDQwMjE5MDA0QjlCMTQ0MTk3MDY2OTlGNTM2NDQwNzAyNDhCQTE1NjhBODNGNzgzQzBENUFEQTJCMTIyOEZFREVCNTY5MjM5Q0M1MTVGQ0NCMjk2MjAwQ0U2RDI4Q0Q4NTlCMzBFCis1NjFCOUEzMQorRUFFOTJGRTkyNTNGRjFGRkZEOTVDODI5QkEKKzE5MjQ3MzNBQzE4ODM5OTYyNzUyRjFFNEFCN0U4QzlENzU4NjIwNUVCREQxRDYwNDI1Q0NERkREMjRBMTQ0RDUyMDc0QTlBMTZFQTY3NjExMDcwMkMyQjVGQTZDNEU0QjY5NDFFQjM1RTYxQzQ2Nzc5N0JGMzU1QkI4MjM5ODYxODlFQ0JCMkQ3QUREQTMyOUVCNTc4RUMzNTRFQjgyMkNFQkJBMEQzQkVDM0QxMTdDNkNDQTg1M0MyQzVGMDYKK0U1RTIyNjVBCitBQzBCQjE4QkJCQjk2QjExRTFEMkZEQTdCODUxCis2RkYzMjk1N0RCOUIyNUFGQURDNDdDNUVGRERCRTA1OUI0M0QwQjY4ODk5OUZGOUIwMTMxMkRCOTY5MjVENjBDRTYxMkU5Q0I5QjlGNDRDREM4NkI2QkIyRDUyRjRCODM3MzE1NDgwNEExNkZENkRDQUFFNTU0RDk2QTQ3NUFGRjIwMUQ2MkIyNDlCRTAzRjVBNDFBMkM1NTZFRTZFRTU5RDQ2RUNDMUFFREJDQzIxOERDODc3MDg1N0UyRjIxRENENUIzNjM3RkU3Rjk5QkI2OUUKKzc5N0Y3MjJDCis3NEI0MEEzRUU4RDY1RDZEMjc4OTE2ODI0RTQ1CitFNjU0MUFBQ0ZCRDQ5ODE5ODUzNzJBMkE5QTdEQzFBNTcxRTU5OUY5MEY4OEE2NzRGNzIyMURGRTZBNzREQzk1NTA3NzUzQjgwRTU5MTI1NDI1N0I2OTBERjRCRUMzNDg3RjNBQURBRUJDQ0FGMzQ2QTJFRTVDNjg4OUY4QzBCMjQ4MjkzQ0JEOERGMEIwQTg0RTFDMjEzODU2NDNFMTlGMUI3MkM1MzIxMTkxQzEwM0U3NEQ0QkM3Nzk3ODY2OEMzOUJCMDk4MjhEMzE5MUM4MTgwQkIzNTBGNTUxNTI5MzcyOTE0RjNFRjJGQjg1QjEyOTFENTgxQ0M5NkMKKzM0NjIKKzA2RDdGMkQ5CisxMUMyRjRCODc4MjVBQ0U4NDhGNjRCMjBDMgorNEFERUFBQjQ5RDI3N0Y2QUQwQzY1RjYyNzAxNDU0Q0Q0OTY5QTRBMkNBNDhCQkNBNUFDQTU1Q0E2MDM0NjlBQzZBNDM3Q0VDQ0M5RDAyNkU1RTRDNUY2OTI0RDY5MzE1Q0Q0NDEwNEU2Mjk0MkVENzhERTg4QTU3QkNGMjI0QzBFNDczRTVEOTk3QzVBRDBFNTcKK0I1QzQzMUJECis5RkMyQkVGODk4NEIwMTc4QTI5ODJEQ0I0NTMzCisxMjA3M0M3RTAzOUNCNUExQTlBRjYzQzRCRkY0QTVGMzZDODQ2OUU5RTkyQTk0OUZEQTBGQ0VBNjlFQ0I3MTM4ODNGRDkxMjMzMjkxQzVGQUNCNDRFNjUyMzMyQzI3Q0EwOEMxNTM3RDYxNjdCRjVDMERBQjJBNEJEMDBGNDEzNDhCMjA3MEU3RUNGQzBEM0RFRjc5MUI0MzlFREZEQzdCQ0Q4MUVFQzI4NkRCMTlGOTdFNUI3NzYxMjM2NTA5NTk3OUY0NkM3MTI3ODA1NjFDRkVCNUE4N0ZBQkE3NjVCRTMxRkEyRDM5NDRDQUE2M0NFRjk1NUQ2RkQ0RUYKKzE4MEEKK0JGQ0VGMEIxCitEMDI3MDREQQorODRCN0I2RkRGMjU1RjkzNzkxRjk0Rjk0QTUKKzc0RDRFNzI3Q0M3RDFDOUJBNTcyNzY3NTQwMDg1NDdGNjUxM0UyMTAwNENBMzdEQjg3MkM0NDEwMzI4MEIwNDhGQ0I5MURFMTVBNjkyMEZGMEM1MzFFMUI2QjI4OTRCREQ1Nzk1QjdGRjk1MkIzNzlBM0ZBNTFDRjU5MENDQjAwN0M1NDI1Qzc0NTU1OTM3NjMzRjcyNjA3NjkyRkZGMDhFNEIwCis4RTE3QTI2OQorNERFQUZENEY5MzczRDc1MjA3MjI1NTcwMUYKKzJCQURFMjgzRjQyOUVFMzM2QTNDMzkyNkQ1OUJBMjgxN0Y4NjM5NUU1RTkzRTM3OTQ5QUZGRDRDQzhERDlDOTBDODY1QUJBMTQ5MjJGMEJDMTgwNkExNTk2QzYyREY1MUIwMzdCREUzNDQ4OTk1Q0M1NkJFN0RGRjBENDM2MzVEQkZCQTIxNjBFNDhEMUE4QTFERTVDRUZFRDkxRTI4MjEyQUU4RjA2OUUxMTA4RkQ4NkU2QUI0NTUKK0Y3Q0FERTEwCis0RTUyRTc0RjMyNjZBRkQwOEU0MjZEQzQzMworMzkxQUI2MjJGQTc3RENGMTlGQTExMjhBRUEzMzExQ0ZGN0QzRUQyRjQ2MjBFODQ5RTg5Qjc2Qzc0QzdFQUZGMjU2RDU0OUJDQ0Q5Q0I3NjZENjJGNzFEQ0E1NTNGQTQzODEzNDcwOEVFMENBMjBDQTVGRDNEREU5Q0MzQkNENTU4MzFBODUwNEQyNDE2QkEyOEMyMTA1NTU4RDdCRDcxQUI4QUM2OTAxNDc0MERBOTU5NjQ5MTMxMzk0Cis0NTdCOTg0NAorMjdDMjM0MEQ4RUY2NjY4MzlEOEVEOUZFNzkKKzU5RUUyRUU1ODQ2NDdCM0YwMjM4NDVBNkNENTkxMzEyOTQ0NUQ5MTdFMkJGMUVGMzQ5MEMxODFFMzk5MUE0RDc0QzEwQzdENjQzQTBDN0I5MTZDNERFOTMwNDlCMjNEQkEzOEU1NjM0QUExNjU1NTg5MTI3M0NGNTU4OTExRUEwM0Q1NDRBN0NDOUEwQTExRkYyNjk1QzJFOTk4RAorQkQwNkM0Q0EKKzA2MzJEMUZFQzQ1RjVEQjQwNjFENTE3MThBCis0MTdEQUE5N0RFOUVDRERGQTI2OUFDRDZERTU3NjIxODk1MTcxQjY3OEQ1NzMyMzEyRjgyQzM0NDAzNTg4RkUyREU3RjlDRjZFM0YxOEUwQjYyRkVCMUQyREZGM0VEQzRFODAxRDRFOAorRDdDNUY2MjUKKzFGNUQxQjhCNEJFNUEwREJCODQyRjA3ODEwNkQKKzU0QTMzRjk3NTJENzZENEM2Q0U1QTEyNjdENTZFQUQ0NzQwNTczOEMwMEMyNkQ5ODJERTYwRThGQzEzMkU4QkFCNDBFNzdCRjQ1QjM5MkZCMDM4Rjk3OUExRThCRTBENDg4QjdFRkRDNURGNEFDNDMyOUVDNkEzMjM0NUVENEE5QTNBQjVDQjkzN0M2QUQ3NTFDMEU1MDVCQ0RBMjVGQzY5NzMwOUI0OUFBRDRFQkJBM0RDRjdCQzRGRDQ0QUI5NTY2NDg4MEU1NDIzQUU4REIyOTQ5OTAyRUQxRUMwNDY2RDM0N0NFRjNDQUQ0MjQwNEFFMzMxMjU5OEJFMQorQUJCNAorMTFFQkRFOUZFQjc4MzJGRTQ4NUQ5MzI0OTJDNkMzOEU5MDg5RDE4NTk2NDU5MTdEMkExRjE1NjcKKzNFNkFGMzdFCitCQjVGN0VCNkVBRDU3QUY3MTlGMzU1MkQ4MDIwCis0MjFFREUwREQyOTc1QzE4RUY4QzA5NEQ4N0QxMjlBOEE5QUMyRUYyM0UyRkUzM0UzQzYxNEM3MUNFQzkwQkM0RkE4ODNBOUIyRkQxRjhCNDdBMUYxRTUwRjZDMjg2QUMzNEY2ODBBQUMxMzgwQUUwOEZEMjg4MjU4MDZFOTZBOTUwNzZBMjQwQTM1RDNFQTE5QTIzMkJERTkzODg4QzAyM0UyQzg1NTZCQkQzOUQzQTFGQ0RFQjIwM0EyODdCQjEwRkE3RDU5QzIzMkQ0QQorNzU2OTk5QjUKKzcwNjNDQzk2M0JDRjgyMkU3MDNFODZGOEEzCitDNDMyNkM0Q0FBQTY5RjM2QTFDMDg3N0QxNjZFN0QyMzczQ0JBQjVENkQ1NTZBNzlEREU1QUREQkU4NDdCMUYyOEYzMkI0MEQ4QzJBMEVGMDcyNUQ2NkFGRUU3MTg5QTREOEVBOTU2NTFEQzQwRTJBNTgyQkREOUQzQTMzMjJCMTgxRDgzMjc5QUYyMQorMjVCNTUwNUEKKzQzNkZCQ0ZDOUE4NjEwQkZFMTJBMzkxOTc1NUMKKzQ4QjRGNzExOTkyRTYwNEQ0Rjk1ODE5OUI0MDAzMzg0RjBBOTQwQTQ1OUY4MDEyNURFMkQwN0VDQzJBQkJENEE0NjAwQ0Q1MDBCRTEwQzQzMzI3MTY5Q0MzNjc2NjEyNEQ3MzAxRjJBNkE3NkQxQTY0QjE1OURENTI4RDYzODg2MDM5OTM0Mjg4NDE5MTIzNzEyMTdFRDdCQTMyNDA1NkIzRDVBNzAxRjJGNDAwNTQ1Q0NFQzQ3ODAwRTY1RDkzQUVDQUNERDk3RTk5RDJFN0Q1NzgxOTJGNzlDQUZCQjY0RjAKKzMxNTZGN0M0CitBREU3Q0M0Q0NDODc1NzYxQkREOEEwNkRGRAorNzBDRERCOTNDMkQ3MURFMTc2NzE0MUU1RDYwQTgzOTRFOUZCRDk4N0RDQjU3RTg0Q0I2NjhDRTc4MkI1N0U4RUY3QjNGOEU4NUZCMTkzQjE3QkZEQkIwN0MxN0Q0QjgyQTE4QzlDQ0M4MTEyNjQzRTc2NDYzNkU3NjU0OTM3MEVBQURGN0Y2OTRFQzgyQTE1RDJCMTc3MzFCMTg0OTFGMTZBN0JGRjU1MTQ4Q0Q3NjU0OAorMjM4ODc2MDQKKzg0MjBGODBFMzVEOEMwOThCQkMzQjY3NkNCNEMKK0NBN0I1QUU4QkE3MzRFNUMyODBBQjM5NkE1OTY2NTQzRDI5NzgwOUVDQkRFQ0E0MDcyNzk0MERGQjI0RjU0NjdGOTI1RThFRDkyNkQ2Nzg0QjA4RkQzOTNFOUVGNzY0NDI2Njg3N0U1NkY2ODZBOUI3MkM4QjlGOEJFMUMzMzJFOEM1M0U2RTVENzYwQjIxNTFGNkRBOTcwMUVGMUQyMjM2MjdCRDY0ODVDNTg2RDg4QjQ1RDE5RDM0NjFGMDNEMkMzNTIyQTg1NjIzNTBGRTNBRDlGOEIwODIzODNDNDg3NjZFMDE3RDg2RTlBNDJFMDM2CitDQzVEOTEzNworQTZDMTk4RkI5RkM1MTNERTdGQUZERjM3ODQKK0RDMjZCODVCN0YwQUNBMzg4MjREOTY0NkRDRDQyQjk5QjFCQ0Y3RjBERDJFNzM4NUIzQkE2MDA3MURFNzNBNTlGOTMyNjE3NTQyREY5OENFMTEzQkI0RThCQTAyNkJBMjUxNzgwRjMyQjg1MzI2MzFENEU3MkY1MkI0RURBQTQyNUQ1NkZFMEUKKzU2M0M0QzAwCitBMjJENDc2NzQxOTc3M0NDMzFDQTk3QjBEODZGCitGMkJDMzk5QjcwQTNERTE4REQ0QUIxREJCODAxMURGMTM5NkI0OTAzMEZCMjc3NDY1MUIyM0QyOTJFOTMyRTY2ODlCNTNDRjBENDAwM0U1QUY5QzdEQzZBMDAyRURDQjNENkYxMzNBMEE2NjNEMTAwMDJFNjkxNEY5NjEyQTQ3Q0QwNDVBNzFBQTI4REMzNkQ0MTFDNEM4RDQzMTNGOTQ3NzUwMzY1MjJBNDYwNjI1MEU1MkY5RkE4NjJBNEMyNjU0NTE1QURFQzEzNDlGMTY4RkNFQjg2QUZDOTNFQzQzQjVFNkFFMzY4RDQwMjBBQUU5RjRFOEEwREYxQUYKKzUxQzAKK0JFOTcwQkIyMzUzMUU2RjY2RUMyOUZCNDEyNTQ3MDQ1ODg4NUNCNjcwNDg1CitFNjVFNEQwRQorNDMzQTdFODFDNTU3NjA1QUE3NTIzQ0UxODVDMgorRENFQkYxNEFFNUZBQUI2MworOEI3REJFMTYKKzI2Mzc4MTU5OEJGRjUwNjNBREU1RUQ3MDNFMUQ5QzA2RTgyRTNENkIzOTk0NTk1Q0FDOThDMUEzNTdCQjdCNEU0RjYzCiswOEQ0MUIzN0Y0NkMzRDkyODY3RTlENzFDNkQzNzhBQUQyMkIwMUZFQzQ5REZFREYwOTUzRkYwNTlFM0M3MDE0MjE0NUIxRkJCRUZFCisxNzNGOTU1QUMzRDAzOEQ5Mjk2MDgzMjE4Nzc3MzZENUJBMTdFQzBDMzYyNkRBNzYxRTA0RDEKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMTA2IDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjhGMTYxOTU0ODk2NDg5OTNCOUM0RDNCNTM0RkE4ODdDCitERUY2MDVGQTg3Qjk5MUY0RDIwQThGNzhEQUNFCis1QTU0QzA3MEUwM0Q1QzU5RDlEMkQzRTA2QjA5Q0VFMDI4RDY4QjYyQUIzQUVDNDNDMUREMjBCQTcwRDI4ODU5N0Q5QkQ4RTA2ODE4RkY3NjRFQkFCNDM2NzIzOTg4RThEN0NBNTlFMTZEMzkwMzI1MTZCRkM1RDU1MkFDREVFQzZCRTkzOEJFRjJGNDNDRkZCQzgxMUMzNjI2QzRERjVGOENGMDgwNjc2NTIwQjUxQzYwQ0VEQUQxRkU2QzkyRDE0MzFDNzAyMTc0Q0U1MTdBOEZBOTM3N0QwNzVBMEI2ODMzREFCMTAxREI2NTM5N0YxNDE5RUY1RjAwMTYKKzAwNEYKKzZGMDgyNEY5NjU3QkI0RjFDOEY5ODE3MDk5NTY4NjVGNjg1NUVGQUUKKzkyNDJBRDU1Cis5MUJCQkVFMTYzRDg0NEREQTg5NEUxMzE5MEM5CisyNDgwNDM5RTRDNzFDQURBCitCRDA0M0E5QgorQTMxNUNBRjcyNjUyQUE3RkU2REIyRTg0RDgyQTYxMTFDRTRERTkwQzAyREEwQUZGRTI2MjA5MjIyNjJBNDVBQjRFRDAKK0VFQzlGNDUyMEREMTI3MDM0NDJGN0QwMjhENDUyNkJEOEI3NzFFMDlGQkUxMUIyNzQ5RTJEMzkwNjg5NEU4RDRCRkQzRjM3OUYxNEMKKzNDODc0RjU1MDYwNjk2NUUyMkZFNDg3QjI0N0I1QzJEMDY3Mjg0OTBDOEYyQTNCNTg4Q0RGQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTJiIDEyLjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNGIgMTQuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgQ291cmllcgorL3dzdDpjb3VycHMxMCAxMC4wMCAvQ291cmllciAvd3N0OmNvdXJwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwwZTE4MjYyMzE4MjQxOTA3MDEwODAxMDkxODIxMTYxYjIwMTQyNDFlMDExOTIyMjQwMTBkMTgxNDI1MjcyNDFjMjExYTAxMGUxODI2MjkyMjI0MWUwMTBmPiAyMjA3IDU1OCAwIDczODQgLTEgcworPDE4MjQxOTIyMjQyMDE0MjExNjE4PiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwNTA2PiA5MzQ2IDEzMzAwIDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjgwIDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyODAgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI4MCAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyODAgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDE0YiBTRgorPDA4MGMwYjE2MGUxMjExPiAxMjcxIDE0NTggMCAyMDU1IC0xIHMKKzwwMDAzMDIwMDA2MGMxNjEzMGMxNDBkMDAwYzE3MGExMDEzMGYwYzE1PiAyMDU1IDE0NTggMyA0MjIyIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDYwNzA5MDU+IDEyNzEgMjA4NiAwIDE4NjYgLTEgcworPDA0PiAxODcwIDIwODYgMCAxOTI4IC0xIHMKKzwwMD4gMTkyOCAyMDg2IDEgMTk4NCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MDAxMjFiMTgyNTE4MDAxODJhMTQyMDIzMWYxODI1MDAxNDI0MTgwMDE5MjQyMjIwMDAxNDIxMDAyMjFmMTcxODI0MDAyODE4MjQyNTFjMjIyMTAwMjIxOTAwMjExODI2MjMxODI0MTkwMDE0MjExNzAwMTcyMjAwMjEyMjI2MDAyNDE4MjMyNDE4MjUxODIxMjYwMDI2MWIxODAwMjUyMzFmMWMyNj4gMTk4NCAyMDg2IDE1IDk1MzEgMCBzCis8MTUxODI2MjkxODE4MjE+IDEyNzEgMjMzMCAwIDIwMjcgLTEgcworPDAwMWExZjIyMTUxNDFmMDAxNDIxMTcwMDI2MTgyNTI2MDAyNTIzMTgxNjFjMTkxYzE2MDAxNjIyMjAyMDE0MjExNzAwMWYxYzIxMTgwMDIyMjMyNjFjMjIyMTI1MDQ+IDIwMjcgMjMzMCA3IDYyNDIgMCBzCis8MTIxYjE4PiAxMjcxIDI2NzcgMCAxNjMxIC0xIHMKKzwwMDIxMTgyYTI2MDAxOTE4MjkwMDIzMTQxYTE4MjUwMDE2MjIyMTI2MTQxYzIxMDAxNDIxMjEyMjI2MTQyNjE4MTcwMDI1MTYyNDE4MTgyMTAwMTcyNzIwMjMyNTAwMjIxOTAwMTgyYTE0MjAyMzFmMTgwMDIxMTgyNjIzMTgyNDE5MDAyNDI3MjEyNTA0MDAwODE5MjYxODI0MDAxODJhMTQyMDFjMjExYzIxMWE+IDE2MzEgMjY3NyAxMyA5NTMxIDAgcworPDI2MWIxODI1MTg+IDEyNzEgMjkyMiAwIDE3NDcgLTEgcworPDAwMTgyYTE0MjAyMzFmMTgyNTAyMDAyYjIyMjcwMDI1MWIyMjI3MWYxNzAwMWIxNDI4MTgwMDE0MDAxOTE0MWMyNDFmMmIwMDFhMjIyMjE3MDAxYzE3MTgxNDAwMjIxOTAwMWIyMjI5MDAyNjIyMDAyNDE4MTQxNzAwMjYxYjE4MDAyMjI3MjYyMzI3MjYwMDIyMTkwMDIxMTgyNjIzMTgyNDE5MDAxNDIxMTc+IDE3NDcgMjkyMiAxNyA5NTMxIDAgcworPDI5MWIxNDI2MDAxODE5MTkxODE2MjYwMDE2MTgyNDI2MTQxYzIxMDAyMjIzMjYxYzIyMjEyNTAwMWIxNDI4MTgwMDIyMjEwMDI2MWIxNDI2MDAyMjI3MjYyMzI3MjYwNDAwMGMxYzI0MjUyNjAyMDAxMjBhMGYxMzExMTIxMDBiMDgwZDAwMjYxODI1MjYyNTA0PiAxMjcxIDMxNjcgMTAgODA5NyAwIHMKK0dSCitHUworMTI2MyAxMDQ3NyA5NTIyIDEwNDc3IDk1MjIgMzM3MCAxMjYzIDMzNzAgY2xwCit3c3Q6Y291cnBzMTAgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MjQ+IDE0NDkgMzUwNCAwIDE1NTUgLTEgcworPDIwNmU2NTc0NzA2NTcyNjYyMGIxNzQyMDU0NDM1MDVmNTM1NDUyNDU0MTRkMjBiMTQ4MjA2ODcwNjk3MzcyNjQ3MT4gMTU1NSAzNTA0IDUgNTA1MyAzMiBzCis8NTQ0MzUwMjA1MzU0NTI0NTQxNGQyMDU0NDU1MzU0MjA3NDZmMjA2ODcwNjk3MzcyNjQ3MT4gMTQ0OSAzNjgwIDQgNDIwNSAzMiBzCis8NTI2NTYzNzYyMDIwMjA1MzY1NmU2NDIwMjAyMDIwNTM2NTZlNjQ+IDE0NDkgMzg1NiA3IDM0NjMgMzIgcworPDUzNmY2MzZiNjU3NDIwNTM2ZjYzNmI2NTc0MjAyMDRkNjU3MzczNjE2NzY1MjAyMDQ1NmM2MTcwNzM2NTY0PiAxNDQ5IDQwMzEgNSA0NzM1IDMyIHMKKzw1MzY5N2E2NTIwMjAyMDUzNjk3YTY1MjAyMDIwMjA1MzY5N2E2NTIwMjAyMDIwMjA1NDY5NmQ2NTIwMjAyMDIwMjA1NDY4NzI2Zjc1Njc2ODcwNzU3ND4gMTQ0OSA0MjA3IDE3IDYwMDcgMzIgcworPDYyNzk3NDY1NzMyMDIwNjI3OTc0NjU3MzIwMjAyMDYyNzk3NDY1NzMyMDIwMjAyMDczNjU2MzczMmUyMDIwMjAyMDMxMzA1ZTM2NjI2OTc0NzMyZjczNjU2Mz4gMTQ0OSA0MzgzIDEzIDYyMTkgMzIgcworPDIwMjAzODMxMzkzMjIwMjAyMDM4MzEzOTMyMjAyMDIwMzgzMTM5MzIyMDIwMjAyMDMxMzAyZTMwMzAyMDIwMjAyMDIwMjAyMDM3MmUzMTM0PiAxNDQ5IDQ3MzUgMTkgNTY4OSAzMiBzCis8MjQyMDZlNjU3NDcwNjU3MjY2MjBiMTc0MjA1NDQzNTA1ZjUzNTQ1MjQ1NDE0ZDIwYjE0ODIwNjg3MDY5NzM3MjY0NzEyMGIxYjEyMGIxNzMyMDMxMzYzMzM4MzQyMGIxNTMyMDMxMzY0YjIwYjE2ZDIwMzE0Yj4gMTQ0OSA2MTgxIDEyIDc3MDMgMzIgcworPDU0NDM1MDIwNTM1NDUyNDU0MTRkMjA1NDQ1NTM1NDIwNzQ2ZjIwNjg3MDY5NzM3MjY0NzE+IDE0NDkgNjM1NyA0IDQyMDUgMzIgcworPDUyNjU2Mzc2MjAyMDIwNTM2NTZlNjQyMDIwMjAyMDUzNjU2ZTY0PiAxNDQ5IDY1MzMgNyAzNDYzIDMyIHMKKzw1MzZmNjM2YjY1NzQyMDUzNmY2MzZiNjU3NDIwMjA0ZDY1NzM3MzYxNjc2NTIwMjA0NTZjNjE3MDczNjU2ND4gMTQ0OSA2NzA5IDUgNDczNSAzMiBzCis8NTM2OTdhNjUyMDIwMjA1MzY5N2E2NTIwMjAyMDIwNTM2OTdhNjUyMDIwMjAyMDIwNTQ2OTZkNjUyMDIwMjAyMDIwNTQ2ODcyNmY3NTY3Njg3MDc1NzQ+IDE0NDkgNjg4NSAxNyA2MDA3IDMyIHMKKzw2Mjc5NzQ2NTczMjAyMDYyNzk3NDY1NzMyMDIwMjA2Mjc5NzQ2NTczMjAyMDIwMjA3MzY1NjM3MzJlMjAyMDIwMjAzMTMwNWUzNjYyNjk3NDczMmY3MzY1NjM+IDE0NDkgNzA2MSAxMyA2MjE5IDMyIHMKKzwyMDMxMzYzMzM4MzQyMDIwMzEzNjMzMzgzNDIwMjAyMDMxMzAzMjM0MjAyMDIwMjAzMTMwMmUzMDMxMjAyMDIwMjAyMDIwMjAzNzJlMzMzMj4gMTQ0OSA3NDEyIDE3IDU2ODkgMzIgcworPDI0MjA2ZTY1NzQ3MDY1NzI2NjIwYjE3NDIwNTQ0MzUwNWY1MzU0NTI0NTQxNGQyMGIxNDgyMDY4NzA2OTczNzI2NDcxMjBiMTUwMjAzMD4gMTQ0OSA5MDM1IDcgNTU4MyAzMiBzCis8MjAyMDM4MzEzOTMyMjAyMDIwMzgzMTM5MzIyMDIwMjAzODMxMzkzMjIwMjAyMDIwMzEzMDJlMzAzMDIwMjAyMDIwMjAyMDIwMzgyZTMwMzc+IDE0NDkgOTIxMCAxOSA1Njg5IDMyIHMKKzwyNDIwNmU2NTc0NzA2NTcyNjYyMGIxNzQyMDU0NDM1MDVmNTM1NDUyNDU0MTRkMjBiMTQ4MjA2ODcwNjk3MzcyNjQ3MTIwYjE1MDIwMzAyMGIxNzYyMDMwPiAxNDQ5IDEwMDcyIDkgNjExMyAzMiBzCis8MjAyMDIwMzcyZTMwMzU+IDE0NDkgMTAyNDggMyAyMTkxIDMyIHMKKzE3IExXCitOCisxOTMxIDQ4ODYgTQorMTkzMSA1Mzk0IEwKK2RwCitOCisxOTg0IDUwODIgTQorMTg3OSA1MDgyIEwKKzE4NzkgNTA4MiBMCisxOTMxIDQ4ODYgTAorQwore30gLTEuMCAtMS4wIHNvbGlkRmlsbAorZHAKKzAgTFcKK04KKzE5MzEgNDg4NiBNCitDCit3c3Q6ZHV0Y2gxMiBTRgorPDI0MTgxNjE4MWMyODE4MDEyNTIyMTYxZTE4MjYwMTE1MjcxOTE5MTgyNDAxMjUxYzJjMTgwMTIyMjEwMTI2MWIxODAxMjQxODIwMjIyNjE4MDEyNTJiMjUyNjE4MjA+IDE4NTYgNTY0OCAwIDYxMTIgLTEgcworMTcgTFcKK04KKzI1MzIgNDg4NiBNCisyNTMyIDUxNDAgTAorZHAKK04KKzI1ODUgNTA4MiBNCisyNDgwIDUwODIgTAorMjQ4MCA1MDgyIEwKKzI1MzIgNDg4NiBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorMjUzMiA0ODg2IE0KK0MKKzwyNTE4MjExNzAxMjUyMjE2MWUxODI2MDExNTI3MTkxOTE4MjQwMTI1MWMyYzE4MDEyMjIxMDEyNjFiMTgwMTFmMjIxNjE0MWYwMTI1MmIyNTI2MTgyMD4gMjQ1NyA1Mzk0IDAgNjI2OCAtMSBzCisxNyBMVworTgorNDQzOCAzNjE1IE0KKzYwMTUgMzYxNSBMCitkcAorTgorNDYzNCAzNTYyIE0KKzQ2MzQgMzY2OCBMCis0NjM0IDM2NjggTAorNDQzOCAzNjE1IEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCis0NDM4IDM2MTUgTQorQworPDI2MWIxODAxMjYxODI1MjYwMTI2MmIyMzE4MDExNDIxMTcwMTE3MTgyNTI2MWMyMTE0MjYxYzIyMjE+IDYwOTAgMzY2NiAwIDg2NDcgLTEgcworMTcgTFcKK04KKzU4ODYgNDcxNiBNCis2ODYyIDQ3MTYgTAorZHAKK04KKzYwODIgNDY2NCBNCis2MDgyIDQ3NjkgTAorNjA4MiA0NzY5IEwKKzU4ODYgNDcxNiBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorNTg4NiA0NzE2IE0KK0MKKzwyNjFiMTgwMTIzMTgyNDE5MjIyNDIwMTQyMTE2MTg+IDY5MzcgNDc2NyAwIDg0NDIgLTEgcworMTcgTFcKK04KKzE4NjIgNzUxMiBNCisxODYyIDgwMjAgTAorZHAKK04KKzE5MTQgNzcwOCBNCisxODA5IDc3MDggTAorMTgwOSA3NzA4IEwKKzE4NjIgNzUxMiBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorMTg2MiA3NTEyIE0KK0MKKzwxNjFiMTQyMTFhMTgxNzAxMTUyYjAxMDMxMT4gMTc4NyA4MjkxIDAgMzE0OCAtMSBzCisxNyBMVworTgorMjUzNiA3NTEyIE0KKzI1MzYgNzc2NiBMCitkcAorTgorMjU4OCA3NzA4IE0KKzI0ODMgNzcwOCBMCisyNDgzIDc3MDggTAorMjUzNiA3NTEyIEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCisyNTM2IDc1MTIgTQorQworPDE2MWIxNDIxMWExODE3MDExNTJiMDEwMzI1PiAyNDU3IDgwMjAgMCAzNzgzIC0xIHMKKzE3IExXCitOCiszNjc1IDc1MTIgTQorMzk4OCA3ODUxIEwKK2RwCitOCiszODUxIDc2MTQgTQorMzc3NyA3Njg4IEwKKzM3NzcgNzY4OCBMCiszNjc1IDc1MTIgTAorQwore30gLTEuMCAtMS4wIHNvbGlkRmlsbAorZHAKKzAgTFcKK04KKzM2NzUgNzUxMiBNCitDCis8MTYxYjE0MjExYTE4MTcwMTE1MmIwMTAzMjA+IDQwNjcgNzkzNiAwIDU0ODYgLTEgcworMTcgTFcKK04KKzU4NzggODkwMSBNCis3MzA1IDg5MDEgTAorZHAKK04KKzYwNzUgODg0OSBNCis2MDc1IDg5NTQgTAorNjA3NSA4OTU0IEwKKzU4NzggODkwMSBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorNTg3OCA4OTAxIE0KK0MKKzwyMTIyMDEyNjE4MjUyNjAxMWIxODE0MTcxODI0MjU+IDc0NTUgODk1MiAwIDg4MjYgLTEgcworMTcgTFcKK04KKzYzMzYgMTAwMDMgTQorNzM4NyAxMDAwMyBMCitkcAorTgorNjUzMiA5OTUwIE0KKzY1MzIgMTAwNTUgTAorNjUzMiAxMDA1NSBMCis2MzM2IDEwMDAzIEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCis2MzM2IDEwMDAzIE0KK0MKKzwxZDI3MjUyNjAxMjUxYjIyMjkwMTI2MWIxODAxMjQxODI1MjcxZjI2PiA3NjEyIDEwMDUzIDAgOTM1MCAtMSBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgQ291cmllcgorJSUrIGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMjUpIDI1CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzQgcHV0CitkdXAgMyAvQzAwNDAgcHV0CitkdXAgNCAvQzAwNDEgcHV0CitkdXAgNSAvQzAwNDQgcHV0CitkdXAgNiAvQzAwNDUgcHV0CitkdXAgNyAvQzAwNDYgcHV0CitkdXAgOCAvQzAwNTAgcHV0CitkdXAgOSAvQzAwNTMgcHV0CitkdXAgMTAgL0MwMDU4IHB1dAorZHVwIDExIC9DMDA2NSBwdXQKK2R1cCAxMiAvQzAwNjYgcHV0CitkdXAgMTMgL0MwMDY4IHB1dAorZHVwIDE0IC9DMDA2OSBwdXQKK2R1cCAxNSAvQzAwNzAgcHV0CitkdXAgMTYgL0MwMDc3IHB1dAorZHVwIDE3IC9DMDA3OCBwdXQKK2R1cCAxOCAvQzAwNzkgcHV0CitkdXAgMTkgL0MwMDgwIHB1dAorZHVwIDIwIC9DMDA4MiBwdXQKK2R1cCAyMSAvQzAwODMgcHV0CitkdXAgMjIgL0MwMDg0IHB1dAorZHVwIDIzIC9DMDA4NSBwdXQKK2R1cCAyNCAvQzAwODkgcHV0CitkdXAgMjUgL0MwMDk1IHB1dAorZHVwIDI2IC9DMDA5NiBwdXQKK2R1cCAyNyAvQzAwOTcgcHV0CitkdXAgMjggL0MwMDk4IHB1dAorZHVwIDI5IC9DMDA5OSBwdXQKK2R1cCAzMCAvQzAxMDAgcHV0CitkdXAgMzEgL0MwMTAxIHB1dAorZHVwIDMyIC9DMDEwMiBwdXQKK2R1cCAzMyAvQzAxMDMgcHV0CitkdXAgMzQgL0MwMTA0IHB1dAorZHVwIDM1IC9DMDEwNSBwdXQKK2R1cCAzNiAvQzAxMDcgcHV0CitkdXAgMzcgL0MwMTA4IHB1dAorZHVwIDM4IC9DMDEwOSBwdXQKK2R1cCAzOSAvQzAxMTAgcHV0CitkdXAgNDAgL0MwMTExIHB1dAorZHVwIDQxIC9DMDExMiBwdXQKK2R1cCA0MiAvQzAxMTQgcHV0CitkdXAgNDMgL0MwMTE1IHB1dAorZHVwIDQ0IC9DMDExNiBwdXQKK2R1cCA0NSAvQzAxMTcgcHV0CitkdXAgNDYgL0MwMTE4IHB1dAorZHVwIDQ3IC9DMDExOSBwdXQKK2R1cCA0OCAvQzAxMjAgcHV0CitkdXAgNDkgL0MwMTIxIHB1dAorZHVwIDUwIC9DMDEyMiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTI1NiA5MjAgNzM5XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjE5NjMzQkZENzUzMzVDMjk3NUZBRjQyOTExRTM2Qjg4NjI1CisxMUI3ODlCNEVBMzJDMDNCOThGOTAwQTQKKzY3OTEwRDUwM0IzRjdFNDlCMQorQzM1N0Y4QUEKKzI4OEIwNUU3RDYxRjE1RUVCRTA5MDJBQjY2MEYKKzJGQ0QwNTYzODhGMTAzQThDMEU2NDgxQ0Y2RjM4MEVFOUUxODVDMDBFNDc3OTNBQzAwRTc4MjEzNUY5REU0NjYyNkE0RTJDQzJGQUYzNkE4MEJGOTlCOEFEOUM0MERDRUY3MTMyNzY4OTZCMDkzNDk4RTNDRDNBNEQwMUU4NUY3NEZGQTRFMzY1RjNFNEU4REFDRjI2Qjk0NTczMEIzODg4RENGNDZBOTI3OEExMzI4OEFDODM4NkQyQTE2QTY3NzI1MzRDQTMzNDVCQTQ4CitEQ0JEOTJBQgorNTcwRkExRUFDMzRBMEY4M0REQkVGMzNFMkIKKzEzOTk0QzEwQTI3MkZBMEIwNjFGM0VCMDg4RkQxRDQwODYwQjk2QTg3MENEMjQ5Q0QyRDdCMEZEMkMwRDg2RDIwMTQ2MDNFMDI0MDJFM0NDNUIyMDdBREU3QkNCRTY1MkY4MkNFMDlBNTM1NjBBNDYyRjY4Mzk1RjgyOUEyNzQ1Cis0ODVGNDU4NgorRjBBRDJBNUIxRjhDNUU1NzE1MTJDMjkwNjkKK0JFQTY1MDExQTBEMzBGRTc4MzJFOEJDMEMwNDE4MDc2Nzg5QkRBMURCOEM5OEE3RTlBQ0E2QkNFNEZEN0RGNkNCMDk1MjAxOTJBNjEzMUQwRjk0MzczNDAxMDA2M0U4RTM5NEVEMUM1OEIwNjk1NzVDMkUyOEU2Q0UyMkExRAorQkRFODJGM0YKKzA2NzlBRkRBNDFGNDg4QUJENEM5QzJGRTc2CitCODNCRERCMjczRjE5N0QzMzgyNDI4RTNFM0I3QTQxQ0IyREU4QTk1QjYyQzA3NEE1MTBCNTgwNjgzQzMyMzM4NkUyMjlGOUM2M0Q3NDZGODIwRDM2ODgzN0Q2MDZFNzY5MERDMzhGQkMxRDk5MjUyRjQKKzU2NTlFMDgyCitEMEE1NkFFRjNCQkU0NDU3REQ4NTQzOThCQQorOThBRkFFQzlBRENGMDhEMEU0QUYzOEExNTE4ODQyRDM0RDg2ODYyMzUzNEVDNworRjBCOEU1RjgKKzg3QTNFRDUwOTA1QjZCRkI5M0UxRTU0RDYyCiswNDlDM0U2NDQ1NzY4RUI4QTMzMTEwRTM5RTBCNkMxQTY4MEI3NUVDMDQxNzBDNjMyNTVGMjJBNjAzODdDNgorNjk1RDBDOEUKKzk4QzcxQzk3MERGOTY2NUIwQkQ4OEJBNTA1CiszNDY1REQ0ODlERTVEM0YzOEMzRUQ3MTRFQzdCQ0E3MjVERkI0MEZCOTVBODk0NkYzRkI2QjBCNjY5M0U2RUFBRTc3MDYxNzMyRDIyMjdGNTA4Qjk3QTFBOTZGMTY4MTNDMTEwNDEyOTgyMTlERjM1MjM3QjJEMjg1OTZFOEEzOUM2MUNBMThBQzcwRjgyMzExRTY0NjZDNjVGOTU3MDM3NTExMjIzOTg0MkVBNzc1NzFFODcKKzI4RDI5QUE5CiswQzY1NzY4Q0RGQjA0MkI4NTBDOTM0OUMzNgorMkZENTk1QTQxOERDMkUyMjY4NTlFRTU0M0E4NEU0MkIxMDhFQTNBQjg4RkVDMzZFRTM2M0Y5OTE0MDg5M0REQUJFQTg3OUEzQzI4N0YzNTc2RjhCNTMyRkU1OEI2MTM1MDMwQzk0RDlEMjM5OTg4MUVGN0YzMDhEQzcyOEI2MjM4N0M3MEFEQzc4QzMyMzY2NEFDNEI0ODBFMTlDQkJCMkQ5NENBRjgxRjFBREMyOEI5QjM0NzVGNzEwQjUzOUEyOUMKKzE1MjkxQTBGCis2MjEzREJGOTFCMTIxOUE5RDQyMkREN0ZCNQorQzVCQzZGMUY0Q0YyNERCMUUxMDIyQTU3RTgyOUYyNkJCMTg4MDM1RUJBM0I5MEYxNzhBNEY1OTc1QTBGNTBGRTMzQzgzQjAzRDgyNUM0OUIxQ0FCODg0NzBFNjZCOEIwQkI3RUU3OTZDRUQ1CiszNTA2RTkyNgorNDc2Qzk1ODE3MjE1MzA1NkM0RDAyRDVCMTRCQworOThCMTkwMDFGRTU3QzBCMjdBN0U0MTM1RjlGNkQ5RkFGQzZBNjc4QUE4NDU3QUZEMEQ4Rjk4MzkxRUM1NzQ1MTkxQzg5QTA4ODg5NjJCNUU4NzY3N0VDODk4QzkyMEE2MjAxNEVCQTM1Mzg1MTMyN0NCMUY0ODQ2QjhGQjNFRTIyN0JFRjAwQTkwOUQ5MDdBMTFFQzM0QjRBOERGRkREMzQzMDg1NjZFREJBQzIwRkYwQjA3MDQ1REI1QTk1MjU4MzJFNEQxNTA3OEVERjExNjA5Q0NDODBFQjhFNzc5ODc3NENENUIKKzBCOTg3QzU3CitBN0Y5NjI2M0E4MzY3QzYzODJDNkE3RkZFMDk4Cis5NzEzOEMyN0RGMTRGMUJFOTI3MTRDQUQzQkEwMjMzQUZDREEzN0QxMDQzQUQ5QUE3Q0Y4RjUwN0I3N0UxQTJCMTY4RkFCM0EzNTM0NTA5RUI0ODIzQ0I3MzQwNDc5MTgwMDcwNDRDRTRDNDM0OUVBNjE2NTU4OURDRTBGMzlFNkQwRjA2RkZERDk2REIzNzlDOEMxMzc0QjgwQjVDNEY4QTAxMUQ4N0QxNTk3NUFFOEMyMDM4QkVDNjcxNkI4ODYyRjY5OTMzMkVBMzhGQzY1MkU3NTEyMTdCRDcxN0VBNUFFOUExNUVBNTkxNzk3RDczMDMzRUUwQzI1RDEKKzVBMkQKK0I1Cis3MzE2NEQxNQorMkFFNkFGODhDN0FENjhFMDBBQkY3MUEzOUUKK0Y1OUM5RTk3QzQ2MzIyRjU2MTVGMTQ0QURCQ0YxNEFGMUU5NDBCNDc2RDVDRjkxMDM4RkI0MEQ3RDFEMTk2NkYyMEFCQUNCNTIxRjQyREY2QjNBOUFENjFGQUEzQjc0NzhGM0RDRjEwOTkzQTlDNkEwOEM3NEEwRUMzOTA2RTI3M0JBN0IyOEZCMTcwMzBBQjMyNTI3NTkzNDU1NzExNjY3QjlBMzI0OTJGMjU0RjFBNzY5RTZGMjAyMUJBN0NCQ0Q4QUZCNQorQ0I5RERBMjEKKzQ1NkRFOEFGRkVFQkExOTZEMjI3MjVBMUI0OTMKKzZBNUZDNDJENkM3N0JFN0ZFRjc5RDdBNEY4RDFEQUM0RUMzQzMyOTIxRTUwQ0MxODU2MkJDOEFBQzgxMUM2N0VDQjlEMTI0RjlDNTI4NzNERjkwNTIzRUU1RDdDRTA3MTJBMjY5OEQ1QTIzOTQwMzZGRTgzQjE4RjZBQ0E4NDhCMjgyQ0Y4QTgzNjAyNkUxQTFCQkI1RTQ5QzQ4QTVCNTcwRjdBQzU0ODI0QjZENjY5QzVCNEI0QzI4QzREOEMxRTFCMTlGRUQ5OTg1NDIwMzUyMjM1NjIzQUZGOTE4RTc1ODhCQURDNkY4OTUyMjlDMkFCRTk1NUJEMEFCMgorRkU2QTBENEQKKzgxQThGRERCOTRFRTJENkI1MEI1OTEyQTFBNDAKKzg3QjQwNTg1NTk0QjM1MEIzQjdBOTdGMDYyQkYwQTM4RDZFRDA2REM1QzcxRTM4QUNCNkUwNDY4MzYxQjNEMUQyRDVFNjVBOUE2NDFEQTZENkI1OTM1M0YwRjk5RjI0NzUxRkU1OTYzRkUyMTQ0RDIwNkFGQkI1NDJDQjE1NUZCRDgzMTBDMkYwNkI1ODdENUM0MTgyQTYyMDE5NzEyODUzNTIyNzU0N0Q0NTlFRENEMzQwMThCNTExMjE1QTJGODYxMzUzNjg5RjRCMEYxN0QyQworMjM2NDA3MDkKK0ZBQ0Y5ODQ2OUNCOTAzRUJDQkU0MDI4QjAwQzQKKzM4OTY5QzJFMUYxNUI1QTE3NDRDREE2OUY5NDg3MkY3ODFCOEM3NDVFQzg3NjdBQ0VENEIyRjEyMUZBRTA3RTcxQjA5NEEyNjM4RUYyRDVCMkYyQkM3RENCOTI4MDY4Njc3MTlBRkExRUU3RURCOEY1RjMwRDQxQzYwRUI4RkQwMDJDNDc5RUMwRTlFQ0Q2OEQ1NkIwRDZCQjREMkNGNTNBRDRCOEZBMDA1M0VBMjg5QTkxQjNEMzM2QzNGQ0VGQzZDNEFDQTgzRDkzNEM3Q0JEM0RFMTU1OEI0RDk5NAorRjVGNjIwQjUKK0M4MzA0MzdBNzVFQTBCODJCNDlGOEM4NDA5CitDRDEyMzFDMTNFOTY2MENBREJEN0U5Rjc3QTMxQTc2NzgzQzlCNkZBRDQ5MzRBOTdCMzczNzA1OTAwNDVFOUMxRkMyNjFCQzI2NEQxMUExRTlDQUE4MzdBREFCOUFEOUMwMDE3Njc0NEMzRTUxRjk2MUU2RTc2QTZBOEVBMDFBREVEQTQ4Njg4QUFBNTFDODMxRkVGNzM1MEYwQTRFNkY4MTg1OUNBQjcyQTkyQUU5QkRDQjg1M0E4Cis2RkVBRTEyRAorNkMzNTEzODg0Qzk1MTNCODNCOTExRTJDMDEKK0UwMzFEMzAyNTk4M0Y1MjZCQjNCNzkwOUUzODIwMTEzNzA4OTVBOTBFQzRDNTE3MURGQzZGMDAyQzY5NTEyQjlEQzJCNTNCQUFDRUI5NDAyRDZCMkRCODM5NDFEQUFBMjkxMDhFMkE0NEM5MEY1OURFREFDRjQzMDY5NEY2QkUwRTcxODBBMDI1MTk5QTVBRjNDOUMxMjdERDAxMzU0NTRCQzExOTcKKzFFQkIwNDVGCis4OUY0MkI0QURCMTc2MTgxRTczODA2MDE3Q0E2Cis0MEZGMUNBN0JGMkVGMURCNkQ1RkUxQzlGQUI4MkFGQjdEQUYyNEMwMDIzOTg5NkZBMjc0RDhBNjE0NDRERjM0MzQyREEwQ0YzOUYyREQxODFFQjZGNDdFOTUyMDdDMkU1REExOURDMkY2OEY3RDVEMEQzQTU1ODcwMDY5NDQ4MUEyMUUzNTcwNEFCNjY3OTVCMDA1MjIwNzZCREU5MUU0RDJBODQ2QjVBQjhBNUVCRUI4NkE2QjJFRjVCMTdFRDlFQkY1OTk1QTJCNzE2N0JDQUJERAorNzg1REU3M0EKKzNFMUE0MjE3NEU3NEM3NEI5MEJCRTUzQUQxRTkKK0MxRUEwQUJDQTY1OEFEM0QwNjg2MUQ5OTM4MjA1NkY0MTkxOEQwOTVBNjQ1MDlEMzU4MTk5NTY1ODQ2RUVGQTA0NUMzMTNBNEJFQTU5RUQ0MzM2OTRFNjIxRDdDNUIwREM3MjczNUIxNjA3NjQ4ODk5N0E2OUEzQjYwQjY0NDEzQzkzMkE5NzQ5MjQxMkU3QUI5RDUwRUUyOTAwQkM4ODM1MERBMDgxNzREODZDREY5QkRGREFFODJDRjRBNjM5QzIyOTUwQjg3NEM1ODA2Mjg2RDA1M0M5QjQ3QkI1RkMwODcwQUFGNkEyRDlEQTcyNEJDQkZCN0Y1NkU3NQorNzJENzVDMUEKK0QzQjIyMDVEM0JCQUI3NUU3MzdGOUMyRDY4NjAKKzgxREU2QTI2NDE3OUQ3MTE1N0E1NTAxREU4RjlBMzQ5MDgwRTJBNEEwRTQ0QUEyNzQ3OTkzODE0Qjc0OUEyMzg1QzVEOEQ3NjAyMkIyQjdBQ0U5QTlCQjc5NjdDMjI5MTZBRDZGQUVCNDE4MjM4MTU5QzUzMUYzQ0Y2OUQwRTJEMThBQjIxRDdFNUJERjcwQUM2QjUzMjQ5MzlENzFFNEE4N0JBOTAwQUYxN0IxMkU5ODMzMTBFQzE5MkZCRkFBODgzOEQ1NUQ4NjlENUZFMDNENEEwMjE3ODc1NjY2OTg3MkJCNTcyNDZDNjFDMjVBRTlBNkIyMkYzNkVERgorREVDQworNDM1NENDCitEM0FCQzEwOAorMEFENjU3QTkzMzE5OENFMkJBM0IxRUMwMjYKKzlBREM5QjY5NURGN0VCNDY1NzZCM0YwQTQ5MDVDN0IzMjY3Q0FCNDA2NTcyQjU2MDc0RUExNzM3MUY4Rjg0Mzc4RDM2Mzk3QUQwRTgwRTQ2Rjc4NzFGMEE4MTZBNzU1QjcwRUI2RjNGQUM5M0Q1NzIwNjc5RDc2MTlERDQ2MTVCRTMyNzk5NkVFRUFDRjg1QTg0NzY2RjBDQzlGRTNDOURGNgorMzk1RDcyNjQKKzc1RDEwODU5OTQzRkM3OEMyNDJBRjE4MEEzRDcKK0U4RUE5MTdEM0M3NjFEQTM0NjQ1QjMyRDExQ0RERUNEMkQ0RjAyQUVDMDg2NEQzRjZEQTA4OTJENTE5NUIzNjQ4RjE5NEVGMDZFODIyOEU1RUZGQUU5Qzc3Q0IyQjkyODI0OUYzMjc1MUI0Q0Y1OEMzNjMzMjJCMjU3NjRBNTJENzhFMDgwQzA5QjVDNTkwNjJCOTlGNEE2NzgxODNBNDEzNUNENUI1QTlFODMxRDgxN0NFNURCQTE5RkMxMkVDODI5NzdFRTE5CiszREI2RjMxOQorREQyMkQ1RDNCQTRFMjYxRkUyOTg0MEZGQjZFRQorMEIwQTdENzAzMDcwNzVCOUE2NTEyMzkzMDA4RTM3QjJGMjg1NUQ0REQwODEwMUYxNkNCOTBDMDZDQ0UzNERCMjZEMDNFRDA5RTY3NjgwOTU5N0MxMTlDREU0MzVGMUUxRkYyRDQ1OUZCOEI5Mzg0OEY2RDkxQTVBMUEwMUUwMDk5QkRBQ0QyOUNCODUxQzJFOEM4OTQ1NTBFNzAwM0E5RkQ1QTlDQUM3OTE4RkI5RUQwOTZDNTgzQjYyRTg1NTQ5RkU3ODc4RkQ1OTBFODU1MUM2NkExRDlENjdGMDlDRTU0QTMyMDAKK0VEQTk1OTgwCis1QTNBMTM4NjdBNzYxRkQ2OUQ4QkM1NjVEMgorQ0VCN0UzQjgxNjhCQkZDNUM0ODZBRjJEREZGMzk4OTc4RUJBNzBBQjhCRjAKK0VENzQ2MDU1Cis1NEU5NjQxRjBGNjUxNUE1NTdDRDRGNkREMgorOUNGRTU4NENFQzdBRjE1QjU2RjU2OTI0QTVGQTE5NERDMEQwOTEwRDE2MUY4ODUyRjE5QUY2QTcyQzBFQzk4MDkwNUQyQTlDRTQ4MTk2RDY3QTA3NDg2NjE1MUMwMUZBOEIzNDc4NUU5NERGQTA5RDUzOTYKKzVDQzQyOTM1CisyQkNDQjVBMUExOUIyRTgyRjk4QzJFNUNBOTg2Cis2QkVFMDEyNDIwQkJDRjlEM0MyOTNEQzkzNTQ1RDUzMzExOEM1RTY4NzlBRjkyRTZDMERDRDYxNjc0NjY3MkU4Qjk2OEJGODhFOTk3OTMxNjQyNDhENEU5NjY2NTBFMTIyNDI2N0RBNDlGRkE4ODk4M0YyODYwRjU2REVGQjIyMjJBNjkxNjQ5MUIxOTcwNzhFODcwQzgyMzIxRDUyOEQ3RUVGM0RCNzhDNjU1QTY5MzNGMjc2M0FGMDlGMjJDOURERjc0MzUwQTYwQUFDREY1ODZCMUVCQzZBOTNCNjIwMDI2QzA2QTZGMUJDRDJDN0E0ODMxQjJFNjY3QjIKKzIyNDEKK0Q2ODgxMworNkQ0RDEyNjcKKzAwN0NCOUI2Qzc5RDMzRTREOUU0OTY2M0E1CitDQTczQ0EzNEZFRjYxMEI1OTUwRUM0RjVGNEJBM0JFMjJCMUUwQjZFMzZDNzY5RDI5NEVGNzZFMTU3NDA0NUVBQjlCNDA5RTM0RkMxN0NGNENDMjdFNDg2MTFCNzA5RkMwQjlFQkI4NzBCRkM2NjA4Rjk0MDI5NjQyNTZCREZGRDBGREZGNDhCQzNFRUIyOTExODg4OTMwOTQwOTQ3MDcxMkQxMzEyNjIzNDkzNjFBNAorNjQzRjUyMDgKKzc3ODQ4QzIxNDNFNkEzQjA1MjVERDQ5NkFDCis2MjA5QkZENTI1MjU3NkJDRkNEQUNGQ0E2QzNDQjU4OEQ5OENEODE4NjQ4MzY2RUUxREJBMUJEMkZCNUY2RUIwRTRFRkVBRDQ0QjAwQjhBQjZCM0NGNTg4MTRERkVDRjlBODY0REY5RTQxMDlERjkzNUMzQTIwMUY4NTk2MEEyQjNEQjUwNjkyREI3MDlGOEFGRDQzNkFDNzlCMTE4MjQwMUVBQworQTRFQkM1NDcKKzJGQjNCRjgxQUY1NUUxQ0FBODVFODU2QThDMzQKK0JDNkIxREZCMENCREE2OTcwRjQwREIzMTIxMDZEMTc2MjJERTY5NTU2RjREMUM3NTcxOTA1NUQ1NjA3RkIzRTkwOUZEMTNBNDZGMDQ4OTg5ODI4REIxOTc4OUY2NTg0Nzc4QkZFMkM3QjlGRDg5RTQ3QUExMzExMDMyMDI5RUU4MjQxRTUzMjM0Mzc2QzI2RDBBOUQ2RTdFMTJGMDRGMTgwMDY1QTVFRkJENDJDMTREQkJBMjcyRDUxMUZFREE2N0Y3QURDQ0QzNjY3MzVERUQ2OEMzMEQxNzVGNDMKKzA5QUQwRDg0Cis2QUQxMUQ1RDVFQTMwQjc3QjIwMzdCQUZCQworNzlGMzNFMDcwODdDNTQ0OUQyNkMxQUQ0MDIxNkI0REI0OTQ4OTJCNjAzQjAwQkE4QUE5QTMxMzhBMEQ4RTY0Qjk4MDA3M0RGM0RDRkM3RUNBOTZFQ0QxNzNGQkU0Q0Q0REQwMkZCNUJGOTY5NjJCMzExNjEwREZEQkJGMkI2MUExQUJDMUM1MjFFOTEwQkZCMjg1NDFGODRBNEE2OTEwM0Y3NDZFQjMwRDI2QjE2RDQ2QgorQ0RDMDc3NjEKKzI2NDZEMTMzQzZDRTBFNDlGRDg4QThDODQ5Cis5QTg5MTdDQTI3NDlDNTM0RjRBQUYwQTIxQkU1NDIyNjcxNTJGNTM5ODREQjU4MzAzMDUyNDAxMzRCNDBEQ0JFRjAyRjkyNDM4RTlDMDlBOEExNjA0QzMwMjQyMTg5Q0IxOUVDRjkwRTg1NjA3QjQ3QUYyNDRFQkRBQUM1RDhDRERDMDdCRDEwQjZFRTg1RjA3RDg0ODFDNDk1NjQ3NEYxRjNFNDJBNjM5MTAxMUYwRjBGOEE4MUEyCis5MUE2QkRFMgorNUFBODNGMTIyOEM2OTk1QjU5QkVBNzJENTk5QQorMjdDMEVFRDZDRDRERTBGNzFBRjI1NzZBMzk5NEFBNjFERjZGREFCQzE1MzY4OTYzMEJDOUUxNTMzRUFBMjk4MDY1NDQ1OEM0OTkxMDFDM0UyQjJBOUU2RTRFMUJFNzk4MUE0MEI4MDQyOUVFNzBEOTAxMTBEQTg0MjBGMjVDN0JBOUM5RDNGODQyQTVDRTVGOTg5NEEyMDBFODJFQzkwQ0Y2MUY4NzNFMDE0OTczQzg5MkNDRjk2OUIxQzg5MDRDQzkxNzBDMTREMDAzMEFFNzJBODc1Nzg5QzE3NjYzMTI4MTJBRTkwRDg0RjNEQTM0NDE4N0Y1Qjk1MkYxCis2ODA0Cis1MUEzMzU5MkVFMjZFNjU4NTVFNjA5OUIyODc0OUE5NTk1RjAwREVDMjk1RDM3MThERjEyRkY5MDdDRUNDNjNDRjhGMEY2NjU5RTZDMzJDMjQxRkQ1ODYyRjUwQzFBCitBOUM1Nzc2NworNTQ0NDk5MzhDNjlFMjQ4ODIxRjM3OERBOTgzMworOENBN0I5QTNGMjI5M0I4NzAxOTA1RUI4Mjg0MzlDQjBFMDFCRUYzMUMxQUFDMTNGQzNCREI0RDY3NzU0MDZFRjZBQkIyQ0M0MEYwQUU4M0Y2ODFCMTFCMTM2MTZFMjk3MDkxQkE3QzM5MzI2MDUyMkQ2MjdENkIzNzNBQTJGMUI5Rjc4NjYwODZCOUQ1RTZEOERCRTlCMjg3NUY1OUNCQkQ3REU0NTk1RjlEQ0I3NzgxNkU5NzUzM0Y3NEYxMEI0MjZCOUFDMjkxMTFGQzJDODdBNzg1RTA1NkQKKzIyNDU4QThBCitGRkFFNzA4Q0I5OThCNEJCNEQ3NEU0NjRBRAorQjNEM0YwN0YwRERGQzg5MTNENUE2QkY0Mzg1MDU3NERFQUY5REREQ0ZFNTkxQ0NGRTA4MjBBOTQyNDg2RkNEMjFDRjczODVFM0FFNTVGODBDMUEwQkNFRDcyQjYwREUyM0Y1N0JENzNDMEYxREYwREU2REJERjYxQkNGQTc1RkExQzM1QkY1OTM3MjcyNzU1QTY3Mzg1QzA3RjBEMzg0MgorOUE4NTM4M0IKKzM5NUNDMEYwRDU2NDcyMkRBNDAwNTQ4RDU1M0QKKzRBNkVEQjI0NkE2MTM5NTFENDFCN0MyNkZGQzY4MTUwNzE3MUUzRUU2ODgwRUJEQTQyMjk0OTU3OTA0NkZDNzI4QzQ3MzBDMTgzRTcwQkFCRDA0QjE4QUU1MkFCQjJEMkY4RTEyNEYyOENGNjNCQ0U0MUZBQjgxQzRFNUVFOTYzRTkxMUI4MjkzRTU3RTA2NDM5MjQ4MjM3MjQ4MTRBNUM2NUM3OEUwNzg5REU1NjIzODVDRTAzQUM4MTU3QjkyQUI2NjExMDY5MkE2RTE4MDRCRTkzMTlFOTkwMDU1OUE3NDE1MTlFRDNFRDhEQjE1RkVBNDNCM0EyQkE5MgorMjNBMgorMDMwN0E0QkZDM0Q2RkMwNTZCNTJDN0U0ODIzOEQ5OUQwOEEzQTZFNTlEN0E0RUEyQTFBN0FDNkU5RUNEQ0U3QUY0RTRFOQorNUJFMjBFRTAKK0E3QjMyNjUwODFFMjFCM0Y1RTgwRTIzQThGCis1MjA2QzgxNzczODJFQThBRTFDQTU3RDNGNkM0Nzc2MDdERUZDRjVFNjA1MkM4NkI1NDdDRDhDN0JGRDc3M0E4Nzg0NUE1RDcxNTQ1MEVGMzJDQzBGRjRCMEMyMjk2NkZDRERDMTI3MDVDNjAKKzI0NUM4NzgwCisyRkVGQUI5QTk0NDhFODMzREJERUIwNjUyQzM1CitCNUM4MkJCMDdFNkE4MjM4QkFFNDU3OTM3MEEzQ0MxMEE0NDlGOTU1QUI4MEY5M0U3MUMxNjkwNzJDQjUwNERGMEFDMzVFQUFEOTAyMTJBQ0ZGNzdGMkRBMUI5NUZGNzU4MUYxOUFEQzc4Q0Y5MDdGNEUzRjZCOTJDM0ExQUY0NjZBNTU3NjA4RDIxNkM5ODY5MkVEMzVBMTlEQjgzNTMwNkFGMzI3MjZENzVFRjI1QzU2MDcwRDFCQjU1REMwRkYwQ0JBOTQxNDRBQzdENkQxODE0MzRDQjNGMDhBMkRGMzI2QjI4NzZCNzdGOTZGRkVBODg3QkU1QkFDQzkKKzQxMzkKKzJDNzBBRUQ2NzJBMUJGQUQwMDA2OTM5Mjg5RjE4MUJGN0Q1OTdDM0UxQjUwQzU4Q0MzMUNBRjkyNDk1MEQxCis0RjNEMzFBNAorMTlDOTZBNURCMzY5ODM5OEZENDc1REQ4QzkyNgorOTU4MThCQTQ5RUJDRDQ3M0JGQkY3REU4QkE5NjIxOUFCRjEyRkFFQjMxNEVEQUVFN0M0NEMzQ0JENkY4MjhEOUZGN0UwNTUyQkYwOTNGNDkwODhENTJGQjYyMDI4NDlENTU3MDBBMUFDQzU4QUI3MDIyQUEwMTJDODE1OUUyMENBMDJBNjY5MUY5MTA5RTdFMUI0NTFBQTVBOUYxOTVCODYyNjg2RDRGNEQ3REE0QkFBMDAzMjhBMTZDNjZEQUY1OTI1NDU2Q0FBQjNEMUYxOUI5RkUzM0E1CitBMTQ0QzlFQQorNEI4Q0VGQkI3REFGOEExNjdBRTkzOUJEOUYKKzRBMTIxOTFCQjVFMzYyNTQyOTQ3ODUzOEQyRDU1Njc4NEFBQkQ5NkMyNTMzQzIzMTk4QzU1M0NEQkJCODFBMTRGQjlFNUEyQzg4MjAyQzAyQjRBMUE5RTBEM0IyNjFGRUE2NUVDNkVDMTFBRkQyRjA3QUFDNTY3RkEyQjRDNDYxMTkzQkRDQzMwMzAwCitDQ0VFQTkyRAorNzJCNzQwQjM2NjYyNkIzRUY0NjE2REE2MUI4NAorRDAwQ0JDOUYzMEI0M0VEQjZFQzk1QTVFQTc0OTczQzMzQ0NGQ0M3OUJDMEREOUJEQTRFMUU2QkNFRUIxRjQ0MUM1MDhEQUI1RDI0MThDMDRBQzM2RDNBOTNFRjQxOTkwQzdFMTA5MDY1MUU0NzlDOTc4RDlGNTFFQjdGMUE3MjZGQzFBQzhBNjcxRkZGRjUwOEE1Mjk1OUM3OEUzRjhCOTRFMjZCQTFBOEFFMThDRDg0NkI1Qjk1NTQ4RTM0NjU4RTk5OEM2OUFBNUI5N0JDNkJGN0EwMEEwM0VFMjVFRDNGNEM0MjdFQTVBM0UxNgorRjQwODA2QUIKK0Q2RUIwMTU1QzU4MUFFQzgzNjUwNDYyQUMxCitGQjc1M0E0MTcyM0I2RUU5MjZFQjFGMzk5ODEyMUU5QkJBQTcwNkI1RTkzNDk0OTExREYzMzIwMTUyNUZDQkUwRTBFQTAwNTZGMzRCNDgzM0Y1NzIyRjc2N0M1MTI5MkE5N0NGRTI5QzgzMUQ0Mjg4RENGNTg0NTFBQTg0OTNFNzMwMkEzNUZFNDk2NUM3QUU3MDA3MjlDRDE0RjQwMURBMTgyRDIyMzU4QkRBOEUKKzlBNUI4NjY3CitEMkEyNUU4RTExNzgzNDA3RUIzMkRDODZGRTUzCis1QjYyMkJFMkRDRTQ3RkQzRTc2NkRGODkwOTU2RjRGQjQ3MEZFMDUzRTk4ODVFMEEwMDA0NzVENTVDNzcyMkJGNDU1NURBODU2NEEwNTA2QUY4MjUyREY5OTlBODIzNUVCRjE4MkJBMEM3ODM4RTY3Q0U2QzU2NDY2QjdFQzUzMDgxODIzQzE1RkQxRTQ1NDkyQjc1MTAzRTBGNUY1QzQ3MTA5ODI2RTI0OTExN0U1MjNFQzhEMkVEOUY4QjUwMDIzODc3RjExQjA0MjYyOTY4NTg5Q0JGRjYzNkI2REFFMUEwMEU2MzY2MjBFMjBCNkM3MEQzMzZCOQorM0QwMTRDNUMKK0U3NkU0REVDNDBGMEFFN0QzOEExRThBQjQ1CitGRkUzMzQ1Mzg0MjNBMkZFNjAzRjBDMTlBNjFGNThCOUVEODQwNTM4NUY2RkRBOENEM0Q5RDk3MDQyNzAzQkQ0NkZBNEVFNDM5RThCRDI2MkE4RUI3OEQ2NzE3MUQzNkEzN0NFRkJCQ0NGRUE2NDQ4MTU3QkRFNTA0MEQwOUNERURCNTVCMzhFRUYKKzBFQkVDNDQwCiswOEI5NTlDMTk4RDMzMzczNDJBMjUyN0M5RgorMDVEODQ5MzREQTc4MThEOUU1ODkyMTYyQTYyRjk5QzNFOTY5RDQ3NDAzNjQzQ0Q4NTUzRjYwRjk5NzA1NzdGNkFGNjc2ODZENEI4M0RCQ0RBMDk4QTgzNkY0MTlBODY2OUYxQUMwNEVFQTFGNEE2Mjc2OUVCNzA3NDU3OEFERDczNzczRkM2MUIyNjFGNTUzMTY2NzA0OTVBRTMxOUI2RTY2Q0M5M0Y4MDcwQUM4MEFBQjdGRTg2MzYzMUREQjRCQTU5OAorOEYxMzY5QUQKKzg4MEE4MzY3RDM4QjhBNDFCMDIyOUU0OUI1CitEMjMxRkU1RTU4NjlBMEVCNUE1RkNFQ0Y2M0NBNjk5NjNGN0ZGQkIxMzVGOTZFRjIwODlBMTA3ODM4REM3MDZFNUU0ODhEQzQ0NUM4QzQ2QkQ2Q0NBQTMyMUZBRTczRTgxRkM1MkQ0ODlCNjIyN0I5ODg4NzdCRjE5MkJBMjk0NjczNjQ4QzY4NDZERjU4RTk1RUYwRDE0MDdGN0EwM0FDRDRENzE1QzQzQUVDMUY5NzIwCis5ODIxODIyMworRkY2OTBCMDg3MDFBNkY1QTJBRkJGQzg2MTU4OQorMkM0MzA0NjgxRENEODQ3NkI1MTQwQjZCNEM0OURDN0RGMTY3RDY4OEJGNTA1QkQ1NUREMEExOEEwOTFBQjA5MkJBQkM5OEY1MjUzMzVBNUExREI5MEVFRjAzRTZGRTJDNjRCNEQzNkJDQzFBRTZDODE3ODVBRTMyMjRDNzREODhFMjlCOEQ0QkNBNDM5N0VCNUI4MzhFNjczQkRCNERGMEU3NTVBQjRGQjdFNDgxNjdENjZGMzA2OEJBQTc4ODU5MTBCQjkzOTc4MDVBMkFDMkE2NTU0NjI5QzdBNUE4NEUxN0VEREU4RDlBN0REMjEwNDFGOEFCRTdFRkZBCis2MEY2CitDN0FFQTU0M0ZGODI4Nzc3MjYwQjU0NThGRDczCis1RkRBODNBMAorQTAwQkVGODc5NTEwNTY4Q0EyNzE4RjgwM0JBMAorNjgyNkYyRDczQ0NFREEzNTFCMzdEN0Y1RTc1MTA3RkM2MTgyREFGOTQ4OUI4MjkxNTJCM0ZDMTg5Njk5NDRFNTdDMThCRUMyOUJGNjgwMTM4Rjk4MTc4MzlGQUVEN0JEQzgxOEY4REE1MkE4QzVCNDRCNDI3RkZGNjI0RjVCRjA4RUJBRDE1ODcxRkZEN0YwNDVCRDAyRDBERDlEMkQ4MTM3QzMyMkI1NTA0OTc1RDJDN0JBRTE3NkIzMDJFNDVDRkY2QkYzMkE3Mzg2OTg5MjNERTRBQjQ4OTFFMzkxNTc3NjRGRkEyOUYxMEYxRTg0QUZDRkFCODlFMjQwCitCRTlBCitGRjhGNkEyNTI4NEYwM0I4MEI5MkE0RTIzQ0ZBNkE2NUYyNTgzOEQ2MTMxOEMyMDc3QworQUQxRkRCNjUKKzY5MTlDRjM0ODM2MDlDNEM3MTdCNjdBNThERTQKK0FCN0I4NTE5QkVFMDNBMDFERkVFQUEzRkRBMzYwODk4RDgyMEMwQ0UzMDZGRUIzQ0Q1NDlGREFCM0EyODA0Qjg2QzlGQTc1MDRDNEJBQ0RDRkEwMDcyNUU3Q0IwNUQ1NjgzRUIyMUE3N0JDMDU5NDVDMjY0RTk3MkIxNDg0OTRFOUQ5M0Q5ODlCRTQzOEM1Njg5RDUwM0UwMTgzNUEwRTM2RDBCNThERDUwRUQ4RUQ2RjNDQjUxMkUwOTcyN0MwRTNFNUM5NzkyOUQ4MDIyRDVERjBCNDIyQTU0NjgwNTNBOUNEMjVBNDcyQTIxNERGOUJFMTZEMjFDMUVEOQorNTM3QgorOEY4MEY0MUYKKzJENkNCNkU2MThBQkNDMjFDNTE4RUNENTY1CisyQjdGQTJDRUIxMEZDMTEwNDYzRDg4RDY3MTlFRDQyODE5MkEzQkQ5NTEwNDFGNzBCMDREQ0MxRkFCNUU1RjkyQjkzNTRGNjg3NUNENzE5RUVCRkVGN0VFODlGNkI2MEZGOUFBMDU4NTJDREUyMzREODMxQjJDMEIwQkExNzAKKzdFRkQ4NENDCitCMzVEQ0E1MkZGODQ0MERFRjJGMzE4NUMxNDZDCiszQjI1NDhBMzgxNUE0MzI1Cis5MjAzQUI5MworQjFGRDRFOUFGMTdFQTM4MjdFOEFGMTJCMEM1QTJFRkVBRDA0QTQwODU5QkVCOTAxOTVGRDdEREFGM0U4MkQ1OTA3OEEKKzNBRjhBOTYzMzE0Q0IwMTVDMjI2Nzg4QzBGQUE3QUQwRDFDODYzQTNFMzlBRkE2NTI5M0E4REI2ODIzMURDMTg0QjAxRkQ0QTcyMjcKKzI1NjA2Mzc3RjFCMzE5NTVCNDc2Rjc1RUZCOTk0NUY4RjI3MjRFQjFDNDE2N0IxM0U0Qzc0OAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IENvdXJpZXIKKy93c3Q6Y291cnBzMTAgMTAuMDAgL0NvdXJpZXIgL3dzdDpjb3VycHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTExZjJjMjkxZjJhMjAwYTAxMGIwMTBjMWYyNzFkMjIyNjFiMmEyNDAxMjAyODJhMDExMDFmMWIyYjJkMmEyMzI3MjEwMTExMWYyYzJmMjgyYTI0MDExMz4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwxZjJhMjAyODJhMjYxYjI3MWQxZj4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MDgwOT4gOTM0NiAxMzM4NSAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI2NyAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjY3IDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyNjcgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjY3IDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE2MjIyMzJiPiAxMjcxIDE0MzEgMCAxNjY1IC0xIHMKKzwwMDI3MWYzMDJjMDAyYjFmMmMwMDI4MjAwMDFmMzAxYjI2MjkyNTFmMmIwMDIzMmIwMDJjMWIyNDFmMjcwMDIwMmEyODI2MDAyYjI4MjYxZjAwMTcwZDEzMTkxNTE2MTQwZTBiMTAwMDJjMWYyYjJjMmIwNzAwMTg+IDE2NjUgMTQzMSAxMSA3NTg0IDAgcworPDI4MmQwMDJiMjIyODJkMjUxZTAwMjcyODJjMjMxZDFmMDAyYTIzMjEyMjJjPiA3NTU4IDE0MzEgMyA5NTMxIDAgcworPDFiMmYxYjMxPiAxMjcxIDE2NzYgMCAxNzE5IC0xIHMKKzwwMDJjMjIxYjJjMDAyYzIyMWYwMDI4MmQyYzI5MmQyYzAwMjAyODJhMjYxYjJjMDAyMzJiMDAyYjI1MjMyMTIyMmMyNTMxMDAxZTIzMjAyMDFmMmExZjI3MmMwMDFiMmIwMDJjMjIxZjJhMWYwMDFkMWIyNzAwMWMxZjAwMTcwZDEzMDAyYjFmMjcxZTJiMDAyYzIyMWIyYzAwMWExYTIwMWIyMzI1MDI+IDE3MTkgMTY3NiAxNSA4ODAzIDAgcworPDAwMmYyMzJjMjIyODJkMmM+IDg4MDMgMTY3NiAxIDk1MzEgMCBzCis8MmMyMjFmMmExZj4gMTI3MSAxOTIxIDAgMTc0NyAtMSBzCis8MDAxYzFmMjMyNzIxMDAxYjAwMWQyODI3MjcxZjFkMmMyMzI4MjcwMDI1MjgyYjJiMDcwMDBiMjUyYjI4MDUwMDJiMjMyNzFkMWYwMDFmMmUxZjJhMzEwMDE3MGQxMzAwMWUxYjJjMWIyMTJhMWIyNjAwMmIxZjI3MmMwMDIzMmIwMDI3MjgyYzAwMWIyNTJmMWIzMTJiMDAxYTFhMmIxZjI3MmMwMjAwMjgyYT4gMTc0NyAxOTIxIDE1IDk1MzEgMCBzCis8MmExZjFkMWYyMzJlMWYxZTA1PiAxMjcxIDIxNjYgMCAyMDgzIC0xIHMKKzwwMDJjMjIxZjJhMWYwMDFiMmExZjAwMjYyODJhMWYwMDJiMmMxYjJjMjMyYjJjMjMxZDJiMDAxZTIzMmIyOTI1MWIzMTFmMWUwMDA2MDAyODI3MWYwMDI1MjMyNzFmMDAyMDI4MmEwMDI1MjgxZDFiMjUwMDJiMmMxYjJjMjMyYjJjMjMxZDJiMDAxYjI3MWUwMDFiPiAyMDgzIDIxNjYgMTMgODE4OCAwIHMKKzwwMDJiMWYxZDI4MjcxZTAwMjUyMzI3MWYwMDIwMjgyYT4gODE4OCAyMTY2IDMgOTUzMSAwIHMKKzwyYTFmMjYyODJjMWY+IDEyNzEgMjQxMSAwIDE5MjEgLTEgcworPDAwMmIyYzFiMmMyMzJiMmMyMzFkMmIwNz4gMTkyMSAyNDExIDEgMjc5MSAwIHMKK0dSCitHUworMTI2MyAxMDU3NyA5NTIyIDEwNTc3IDk1MjIgMjUzOCAxMjYzIDI1MzggY2xwCit3c3Q6Y291cnBzMTAgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MjQ+IDE0NDkgMjY3MiAwIDE1NTUgLTEgcworPDIwMmUyZjZlNjU3NDcwNjU3MjY2MjBiMTc0MjA1NTQ0NTA1ZjUzNTQ1MjQ1NDE0ZD4gMTU1NSAyNjcyIDMgNDA5OSAzMiBzCis8NTU0NDUwMjA1NTRlNDk0NDQ5NTI0NTQzNTQ0OTRmNGU0MTRjMjA1MzQ1NGU0NDIwNTQ0NTUzNTQyMDc0NmYyMDZjNmY2MzYxNmM2ODZmNzM3ND4gMTQ0OSAyODQ4IDUgNTc5NSAzMiBzCis8NTM2ZjYzNmI2NTc0MjAyMDRkNjU3MzczNjE2NzY1MjAyMDQ1NmM2MTcwNzM2NTY0MjAyMDIwMjAyMDIwNGQ2NTczNzM2MTY3NjU3Mz4gMTQ0OSAzMDI0IDEwIDU0NzcgMzIgcworPDUzNjk3YTY1MjAyMDIwMjA1MzY5N2E2NTIwMjAyMDIwMjA1NDY5NmQ2NTIwMjAyMDIwMjAyMDIwMjAyMDRmNmI2MTc5MjA0NTcyNzI2ZjcyNzMyMDIwMjA1NDY4NzI2Zjc1Njc2ODcwNzU3ND4gMTQ0OSAzMTk5IDIyIDcxNzMgMzIgcworPDYyNzk3NDY1NzMyMDIwMjA2Mjc5NzQ2NTczMjAyMDIwMjA3MzY1NjM3MzIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIzMjAyMDIwMjAyMDIwMjMyMDIwMjAzMTMwNWUzNjYyNjk3NDczMmY3MzY1NjM+IDE0NDkgMzM3NSAyOCA3Mzg1IDMyIHMKKzwyMDIwMzkzMjMxMzYyMDIwMjAyMDM5MzIzMTM2MjAyMDIwMzkyZTM5MzkyMDIwMjAyMDIwMjAyMDIwMzEzMDM1MzAzMDIwMjAyMDIwMjAyMDMwMjAyMDIwMjAyMDIwMzczNzJlMzQzNz4gMTQ0OSAzNzI3IDI5IDY5NjEgMzIgcworPDIwMjAzOTMzMzYzMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAzOTJlMzkzOTIwMjAyMDIwMjAyMDIwMjAzMTMwMzMzMTM0MjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAzNzM2MmUzMTMwPiAxNDQ5IDM5MDMgMzQgNjk2MSAzMiBzCis8MjQyMDJlMmY2ZTY1NzQ3MDY1NzI2NjIwYjE3NDIwNTU0NDUwNWY1MzU0NTI0NTQxNGQyMGIxNjYyMDRiPiAxNDQ5IDU3MDEgNSA0NjI5IDMyIHMKKzw1NTQ0NTAyMDU1NGU0OTQ0NDk1MjQ1NDM1NDQ5NGY0ZTQxNGMyMDUzNDU0ZTQ0MjA1NDQ1NTM1NDIwNzQ2ZjIwNmM2ZjYzNjE2YzY4NmY3Mzc0PiAxNDQ5IDU4NzcgNSA1Nzk1IDMyIHMKKzw1MzZmNjM2YjY1NzQyMDIwNGQ2NTczNzM2MTY3NjUyMDIwNDU2YzYxNzA3MzY1NjQyMDIwMjAyMDIwMjA0ZDY1NzM3MzYxNjc2NTczPiAxNDQ5IDYwNTMgMTAgNTQ3NyAzMiBzCis8NTM2OTdhNjUyMDIwMjAyMDUzNjk3YTY1MjAyMDIwMjAyMDU0Njk2ZDY1MjAyMDIwMjAyMDIwMjAyMDIwNGY2YjYxNzkyMDQ1NzI3MjZmNzI3MzIwMjAyMDU0Njg3MjZmNzU2NzY4NzA3NTc0PiAxNDQ5IDYyMjkgMjIgNzE3MyAzMiBzCis8NjI3OTc0NjU3MzIwMjAyMDYyNzk3NDY1NzMyMDIwMjAyMDczNjU2MzczMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjMyMDIwMjAyMDIwMjAyMzIwMjAyMDRiNDI3OTc0NjU3MzJmNzM2NTYzPiAxNDQ5IDY0MDQgMjggNzE3MyAzMiBzCis8MjAyMDM5MzIzMTM2MjAyMDIwMjAzOTMyMzEzNjIwMjAyMDMxMzAyZTMwMzAyMDIwMjAyMDIwMjAyMDIwMzkzODMyMzIyMDIwMjAyMDIwMjAzMDIwMjAyMDIwMzgzODMzMzkyZTMwMzY+IDE0NDkgNjc1NiAyNyA2OTYxIDMyIHMKKzwyMDIwMzkzMzM2MzAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMzEzMDJlMzAzMDIwMjAyMDIwMjAyMDIwMjAzOTM1MzMzNDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAzODM1MzczOTJlMzgzOD4gMTQ0OSA2OTMyIDMyIDY5NjEgMzIgcworPDI0MjAyZTJmNmU2NTc0NzA2NTcyNjYyMGIxNzQyMDU1NDQ1MDVmNTM1NDUyNDU0MTRkMjBiMTQ4MjA2ODcwNjk2ZTY0Njk2ZjIwYjFiMTIwYjE2ZDIwMzEzNDM3MzI+IDE0NDkgODU1NCA4IDY0MzEgMzIgcworPDU1NDQ1MDIwNTU0ZTQ5NDQ0OTUyNDU0MzU0NDk0ZjRlNDE0YzIwNTM0NTRlNDQyMDU0NDU1MzU0MjA3NDZmMjA2ODcwNjk2ZTY0Njk2Zj4gMTQ0OSA4NzMwIDUgNTU4MyAzMiBzCis8NTM2ZjYzNmI2NTc0MjAyMDRkNjU3MzczNjE2NzY1MjAyMDQ1NmM2MTcwNzM2NTY0MjAyMDIwMjAyMDIwNGQ2NTczNzM2MTY3NjU3Mz4gMTQ0OSA4OTA2IDEwIDU0NzcgMzIgcworPDUzNjk3YTY1MjAyMDIwMjA1MzY5N2E2NTIwMjAyMDIwMjA1NDY5NmQ2NTIwMjAyMDIwMjAyMDIwMjAyMDRmNmI2MTc5MjA0NTcyNzI2ZjcyNzMyMDIwMjA1NDY4NzI2Zjc1Njc2ODcwNzU3ND4gMTQ0OSA5MDgyIDIyIDcxNzMgMzIgcworPDYyNzk3NDY1NzMyMDIwMjA2Mjc5NzQ2NTczMjAyMDIwMjA3MzY1NjM3MzIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIzMjAyMDIwMjAyMDIwMjMyMDIwMjAzMTMwNWUzNjYyNjk3NDczMmY3MzY1NjM+IDE0NDkgOTI1OCAyOCA3Mzg1IDMyIHMKKzwyMDIwMzkzMjMxMzYyMDIwMjAyMDMxMzQzNzMyMjAyMDIwMzEzMDJlMzAzMDIwMjAyMDIwMjAyMDIwMjAzNzM2MzMzNDIwMjAzNDM1MzUzMjM1MjAyMDIwMjAyMDIwMjAzODJlMzkzOT4gMTQ0OSA5NjA5IDI2IDY5NjEgMzIgcworPDIwMjAzOTMzMzYzMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAzMTMwMmUzMDMwMjAyMDIwMjAyMDIwMjAyMDM3MzUzNzMyMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDM4MmUzOTMyPiAxNDQ5IDk3ODUgMzUgNjk2MSAzMiBzCisxNyBMVworTgorNjE0MiAyODE3IE0KKzc3MTkgMjgxNyBMCitkcAorTgorNjMzOCAyNzY0IE0KKzYzMzggMjg3MCBMCis2MzM4IDI4NzAgTAorNjE0MiAyODE3IEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCis2MTQyIDI4MTcgTQorQword3N0OmR1dGNoMTIgU0YKKzwyYzFmMmIyYzAxMmMzMTI5MWYwMTFiMjcxZTAxMWUxZjJiMmM+IDc3OTQgMjg2OCAwIDkzNzAgLTEgcworMTcgTFcKK04KKzI3NTAgMzg1NyBNCiszMTM1IDQzMDggTAorZHAKK04KKzI5MjYgMzk1OSBNCisyODUxIDQwMzMgTAorMjg1MSA0MDMzIEwKKzI3NTAgMzg1NyBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorMjc1MCAzODU3IE0KK0MKKzwyNjFmMmIyYjFiMjExZjAxMmIyMzMyMWY+IDI3MjkgNDU2MiAwIDM4NzIgLTEgcworMTcgTFcKK04KKzY0MzkgNTMyNCBNCis3MjYwIDUzMjQgTAorZHAKK04KKzY2MzUgNTI3MiBNCis2NjM1IDUzNzcgTAorNjYzNSA1Mzc3IEwKKzY0MzkgNTMyNCBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorNjQzOSA1MzI0IE0KK0MKKzwyYjFmMjcxZTAxMjkxZjJhMjAyODJhMjYxYjI3MWQxZj4gNzcxMCA0MzkzIDAgOTM0MyAtMSBzCisxNyBMVworTgorNTIwOSAzNjU0IE0KKzU2NzYgNDEzOCBMCitkcAorTgorNTM4NSAzNzU1IE0KKzUzMTAgMzgzMCBMCis1MzEwIDM4MzAgTAorNTIwOSAzNjU0IEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCis1MjA5IDM2NTQgTQorQworPDJiMmQxZDFkMWYyYjJiMjAyZDI1MDExZDFiMjUyNTJiMDEyYzI4MDEyYjFmMjcxZT4gNTQ0MiA0MzU5IDAgNzQ5MyAtMSBzCisxNyBMVworTgorNzIwMSAzNzE1IE0KKzc2NjkgNDIwMCBMCitkcAorTgorNzM3NyAzODE3IE0KKzczMDMgMzg5MSBMCis3MzAzIDM4OTEgTAorNzIwMSAzNzE1IEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCis3MjAxIDM3MTUgTQorQworMTcgTFcKK04KKzE4NjQgNzEwNCBNCisxODY0IDc2MTIgTAorZHAKK04KKzE5MTcgNzMwMCBNCisxODEyIDczMDAgTAorMTgxMiA3MzAwIEwKKzE4NjQgNzEwNCBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorMTg2NCA3MTA0IE0KK0MKKzwyYTFmMWQxZjIzMmUxZjAxMmIyODFkMjQxZjJjMDEyYjIzMzIxZjAxMjgyNzAxMmExZjI2MjgyYzFmPiAxNzk2IDc4NjYgMCA0NDQzIC0xIHMKKzE3IExXCitOCis1NTkyIDk3MzAgTQorNTU5MiAxMDIzOCBMCitkcAorTgorNTY0NCA5OTI2IE0KKzU1MzkgOTkyNiBMCis1NTM5IDk5MjYgTAorNTU5MiA5NzMwIEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCis1NTkyIDk3MzAgTQorQworPDIwMWIyMzI1MWYxZTAxMmIxZjI3MWUwMTFkMWIyNTI1MmIwMTAzMGUxMTEyMGMxNzBmMTUwND4gNTUyMyAxMDQ5MiAwIDgyMTggLTEgcworMTcgTFcKK04KKzcxNzQgNjg4MyBNCis4MDY1IDY4ODMgTAorZHAKK04KKzczNzAgNjgzMSBNCis3MzcwIDY5MzYgTAorNzM3MCA2OTM2IEwKKzcxNzQgNjg4MyBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorNzE3NCA2ODgzIE0KK0MKKzwyYTFmMWQxZjIzMmUxZjAxMjkxZjJhMjA+IDgxMzMgNjkzNCAwIDkyMDEgLTEgcworMTcgTFcKK04KKzQ5OTkgNzAwOSBNCis1MjUzIDcyNzMgTAorZHAKK04KKzUxNzUgNzExMCBNCis1MTAxIDcxODUgTAorNTEwMSA3MTg1IEwKKzQ5OTkgNzAwOSBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorNDk5OSA3MDA5IE0KK0MKKzwyYjJkMWQxZDFmMmIyYjIwMmQyNTAxMWQxYjI1MjUyYjAxMmMyODAxMmExZjFkMmU+IDUyNTMgNzUyNyAwIDcyNjEgLTEgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IENvdXJpZXIKKyUlKyBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDI2KSAyNgorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQyIHB1dAorZHVwIDMgL0MwMDQ0IHB1dAorZHVwIDQgL0MwMDQ1IHB1dAorZHVwIDUgL0MwMDQ2IHB1dAorZHVwIDYgL0MwMDQ4IHB1dAorZHVwIDcgL0MwMDQ5IHB1dAorZHVwIDggL0MwMDUwIHB1dAorZHVwIDkgL0MwMDUyIHB1dAorZHVwIDEwIC9DMDA1MyBwdXQKK2R1cCAxMSAvQzAwNTQgcHV0CitkdXAgMTIgL0MwMDU4IHB1dAorZHVwIDEzIC9DMDA2NSBwdXQKK2R1cCAxNCAvQzAwNjYgcHV0CitkdXAgMTUgL0MwMDY4IHB1dAorZHVwIDE2IC9DMDA2OSBwdXQKK2R1cCAxNyAvQzAwNzcgcHV0CitkdXAgMTggL0MwMDc4IHB1dAorZHVwIDE5IC9DMDA4MCBwdXQKK2R1cCAyMCAvQzAwODIgcHV0CitkdXAgMjEgL0MwMDgzIHB1dAorZHVwIDIyIC9DMDA4NCBwdXQKK2R1cCAyMyAvQzAwODUgcHV0CitkdXAgMjQgL0MwMDk1IHB1dAorZHVwIDI1IC9DMDA5NyBwdXQKK2R1cCAyNiAvQzAwOTggcHV0CitkdXAgMjcgL0MwMDk5IHB1dAorZHVwIDI4IC9DMDEwMCBwdXQKK2R1cCAyOSAvQzAxMDEgcHV0CitkdXAgMzAgL0MwMTAyIHB1dAorZHVwIDMxIC9DMDEwMyBwdXQKK2R1cCAzMiAvQzAxMDQgcHV0CitkdXAgMzMgL0MwMTA1IHB1dAorZHVwIDM0IC9DMDEwNyBwdXQKK2R1cCAzNSAvQzAxMDggcHV0CitkdXAgMzYgL0MwMTA5IHB1dAorZHVwIDM3IC9DMDExMCBwdXQKK2R1cCAzOCAvQzAxMTEgcHV0CitkdXAgMzkgL0MwMTEyIHB1dAorZHVwIDQwIC9DMDExMyBwdXQKK2R1cCA0MSAvQzAxMTQgcHV0CitkdXAgNDIgL0MwMTE1IHB1dAorZHVwIDQzIC9DMDExNiBwdXQKK2R1cCA0NCAvQzAxMTcgcHV0CitkdXAgNDUgL0MwMTE4IHB1dAorZHVwIDQ2IC9DMDExOSBwdXQKK2R1cCA0NyAvQzAxMjAgcHV0CitkdXAgNDggL0MwMTIxIHB1dAorZHVwIDQ5IC9DMDEyMiBwdXQKK2R1cCA1MCAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yMzggOTIwIDcyMl0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIxOTYzM0JGRDc1MzM1QzI5NzVGQUY0MjkxMUUzNkI4ODYyNQorMTFCNzg5QjRFQTMyQzAzQjk4RjkwMEE0Cis2NzkxMEQ1MDNCM0Y3RTQ5QjEKK0MzNTdGOEFBCisyODhCMDVFN0QxMTFDN0Y0Q0Q3QjE1QjFBNDQ5CisxMjkwQkZBMEI4QjczMjhEQzU5Njc5NTRCODMzNjNDNTQwQjhGRUU3MzY1MzUyOEQ4QUQ1RjlENDcxNTU1MzgzODY5RkE5QTk5NUREQzI5QTAzQkRCMkQxNjBEMjFCMEIyQzI4NUJFNUMyNzkwMTAwNjAzNzBGQ0FEOTIxNjJEOEUyMDczNEREQkRCNDlFRUUyRUFEMzQ1MkU2NUQ4MjBBOEYxMjY0QzUyNzEwRDYzNThERkFCRUI3Q0QyMEQ2RUJDQzUzMkNFRjQwNzNDMzM2RDJBQkU1MUUwQTk3RDg5QjdCRTZCODQxNDI3RkRFQTVFMjZGREUzMjdEMUQKKzAyNEMKK0U1RjkxMkU3Nzg2QTc4QUM1RkZGOTNGQkQwMjE2OTg2MDRDOTI0MjE1NENGMjU3Q0M1Njg2NDg1ODg0RDE4NUNCQzQ3REE4NjAwQkZEMjBBRkFGMTgwNzczNzQ4NTBBOTdGNzI2N0QyNDRFOTMyNTkzMkM1Njg5NUJEMjA3NworQ0UyQ0Q2RTQKKzcyNzYxNkRDQjVGQjM4MjM5MDFCMUEzQkRBCitENzNBNUU5NzZDOTI2Mjc5RkVBMkNFQjI3RUNBRDQ4MzkyNkRFMzU0OTAxMTRFNTA1MTdBODFFRTREQTVFMjY0QUQxOTE5MkNDNDFBNzQ3RDdDNzZGQTY3QUUxRjQ2QjkyQzQzQzEzOEUyMEFDRkY1RTIKK0Q0NURDNzU4CisxOTVCMTEzRjA1ODhEMzE0RDBBMzZCNkI1OAorOEVEMEVEMzgzQUVFNzQ1QzgzN0IyMTMxNEI3NjU4QTgzOTkxRTI3RDQxNTFEOQorODI1NzBCNjIKKzg2OUEwMTQ1NTc1NjcxNkUyRDFEQTg0RkM0CiswREZCODUzMkQxNDU0QkEyMDAyNDY3RkUzMjI2RDJDODVBMzE3QjQzMUMzNTU0MERCMTkyRjU5NkI3MzFEQgorMDcxNkIxM0QKK0Q1MUJBQzdGRkRCMUI3NTg1RUUwOEU4NjQxCitDMzAyNDRCQ0UwNURGMkUxMDM3QTc3MTc0OEUzMTNEQjUzRDdEQjA1NkIyQzlDRjkxNkM3RDUyNjBBQjZENzZGMTdGODAyRjY0MzlBQ0UzQjRCMEEyQjBCNzEyNUI5MDZEMEEyMTk2MjQ4QzM1MENFRjVENDkxQjA4Mjk2NkM1NjI3ODdFRjU1NDI4QUU1QTdBNzYxCis2ODJBNDAzOAorNTBEMURCMDM2MDQ1QTFENUNDM0ZENjI2Q0MKKzQ3RDI0N0NDQkYxQjhENDlFOUZGRTIwM0ZDRTVBNDE2NTc1RDNENzk1MkEwOTIyMkZDNTg5NTQzREVFRjE0QTZCNzU5NkIyOUQxRDg2QzY1RDZFQzkwQTRCRDM0NDQzOEUzMzM4RjVEMzlCNUYwNzU5MTIyMzkwREM3QTA5RQorNUQwQ0MwNTMKK0NCOUIxMjhFODk5QjA4OEZCMjgzNUU5N0VCCis2NjkyOEY0NTQ4MDc5NTU5RjUyNDE1OThFNDEwQzdFMkE5ODgzOTIzQ0JDNTZBNDAzQzdGMzQ0QzMwQ0RBMzM5QUYxNUI2MjFEQ0IwRUYwRUY5RDI3MEM5NUQ5RUNFQjBGMDExMThCRTk5RTBCREU0NzQ5MzE2RTY5RTEyRTRGMTIyMjM0NTA4N0EwMjU2OEQ3NkM0OURCQzE5OUFDMUUxNzAxNUY2QUYzRkNENjUzN0UxOTEKK0FGREYwN0RFCiszN0JCRjI0RDNCRTJFMTIyNUEyRDJEQjdGNworQkQ4QzIwNTY4MkVDODcyRDUxMEVDNzBDRUU3NkNEOUVFNjI0QkJFMTlGMUM2NTFBQUJBMjgyRTU4MDU5QjZGN0U3RTlEMjI2NkVGRENGNERDMEI0RkZGMzFFNEFDQ0M3RDY3ODBCOEQwM0IwODhGQkMxRDQKKzdBQTA4RDFECisyNzM3MkI2RDc1QTJERDREMUJFQjZBM0UxQgorRjc2RjkwQzY2QkYwRDNERkQ1RDVGMEUzQ0FCOTc3NDgyQjdBNDRCNzJBREQxOUUwMjhDMjYxNkQxN0I4OTIyQzkzRjY2OURFQzdBN0U1NzZGQkQxQTFDNTIwQkYzQzAzMTczMjgyRDJCQTM3QjY1MEQwNTE0RTU1MzY2NTQ3MjE4NUY5QTc3NzI3QjNCMDYwMEY2Nzk0Mjg0NTgxRDk3NjVGQTg0NzE2RjU3NzkwMTY1NjRBMzk0MjYyODIzQjEyOTQKK0RGOENBODc5CisyRjE1RUI2NkYwMEQzQkI3N0QwQjgwMDMyMENFCis5RDEzODhFQkIwQTBERTVBQzQ4QzcwNjcwNkVCOEMwRjMzQTJFQ0YzMkQ1OUFFRDU3MjVCRTU1MjRFNkZERTM3RDUxNTU5MTkyRjQ1NkZBQTFGQjg0MzNEMkYyQzZBOEIxN0U4NTZBOUI3MjA0QTNFNTcxQ0ExMDQ3MkY2QTQ0QkJEMjQ0N0I5ODdGNzgzNUY4QUNBNDU5N0ZENjVDNjZBNTQ4RjI5QzdFQkQyNkJFNUQzOTIyODcwMzc4RjkxNzVEMDg3RTUwMQorMjk0NDUwQTYKKzM5RDVCOTc5MDVEOUFBQTM4MDIxNDEwODNBCis2N0FFMjAwMTJDNkZDNTQzRjU0M0VFRjUwMTM2QzdGRDBBMTE4QzY5MzMxRUEyMTQ5NUQzMTRDRkUzQUY4NTQ0NjNDQkRBQUVCMjU2MUI5ODI3OUNGQzczNTg4RkY0QzY0ODFENEVGOEZFNzUKKzExQkMzOEU5Cis1RjY1NkREQzc3Qzg5REUyMUU3NERERkVGMUU0Cis3MzAyQzY5MEQ1NjQxNjI3N0I0NTE4REI5Mzk1Mjc1RTk3Q0M3NTg2QjcxQjc0MzE0MzYwQzBGOUM4Q0Q0OEJGOUM5RjhFNURCMDcwRDU2RERGRTAxOUNENDUxMDBCQjQ4OTkzNUQwNEFFOURFMzQ4MDNCRkY5MzNDODI2RkQ2NzM2MzA5NDM5MDQzQTNCNUIzQkFBMzdEQzlDMTUxRTNFMjJBN0JDNDZBMzJBQjY4MTZGQzFCQjdEMzFDN0Q3MkFBQ0QzQTlGNDU2OEQ4MzY5MTIwOTRERDc5OTg3MDBEQjRFREM1MgorRjc1OTgyNkQKKzQ4MkQyMkZEQUJDRDcxMEM2NkM2MzQzRTIzNjgKKzY5MTc1NzI4QjdCNkQ3QjM1OTVFMTNCOThCQzQ0OTUzOEIyQ0NDOEI3MTU3Q0YzNUY2RjUxQ0YyMzU2OTkzMEU3NDFEMTdCOEYwN0I4MUVBOTIwNTg5MTYxMjlGNDI5NzA4N0Q0Mzk2MUQ5QjFBRUI5MjQ4QkIxQjVGQzAyQkU3NUU0NDg1MzZFOUQ3NEIzRTEzRUExQ0Y2QTk3QjMxMURBMkM4NzI1MTZENUM3NDU1OUU2RTY3RTI2NDc3NDU4RDdCNEM1MTlGNUMwNUUxMjhEOTBCMTBGQjhERDJEN0FBQzg3NzlBNjY4NkNGQURFMEVGMkVCQTBGNEUyRQorRDBGMAorQ0UKK0VBRTIxQjM2Cis2RUMwM0RGRThENzgwMDQ4OUQ2MzBGOUM0QQorNjA3NDUwRTg4RDU0RjMwMDY1QTFERjcxN0YwODJFMkJBNDlFNEQ5NUMzNjI2RUQ5NUMyQkQyMDNBNTgyRkJBREI3NDRCQTNGQUUxQ0VCQTYzODI3MzAwODVEN0VCNTRGNzU4RTkxRjdGQ0JBMDI0QTQ4MzBDQzJGOTk5QTU0Qjk5NEJFMTVGOTAwRDc1NTUwRDdBOUY1Q0ZDQ0MyREMzOEI2Q0QxQzNBMkY4NkNFNDRFODUxODFFRERCQjg4QTJBRDExMTA1CitDMjhDQTI4QQorRjZCRUJGM0Q0Rjc4NkY1RUVCRjI0MEU0M0E3RQorQTE0OTU4MDE5ODEyODBDNEUxMjY3RTg1NkRGMTE0QTZGODE0NUMxRURBNzZCQzM3QjczQUVENkJEMDAyQjNEQ0FDOEQ1NUI0QUM5MEFCQ0M1RUY0MTI1RTRCQjc1ODkwMEZBMUUwNDZEN0Q0MEI2ODM1QzM0MjU1RUQ3RDM3NkRENzA5OEZCMDFERTlBNUY4QUM1ODc5N0JFRUFENUVBQ0JBOTdCRTNGMDZGODY4NDc2M0Q3MEQ1MkE5MjQ2MjJCMTY5RjdGRjU5MEMwNzQ3QzRGQzBFQUU5NUY4MTBERDlFN0NDQThCRUZFQ0YwQkNDNDE0N0Q4NDFBRjgxCis3MDg1MUI0QgorRDA4ODMzQjdBNUU3Q0QwRTVCNzU1MDJDQkRFQgorMzk4MkY4NTc4QTMzMjFFMTc4NkNFOTlCRkVCMDZGNDUzNDMxRDg1MjczRkNGMENGNzk1NENDNEE1MDBCODFFQjA0Njc0QkVCNjA0OUY2MDMwOENBNTFBOUM1QUU3NTFDNTlDREMwREIxMjNBMjhGMDdCNUU4QTMxNkY0Q0ZDNzczNTgxQUM5QzlGNzZERDY2RUQxRUIwMjFDQjk1QzQ4RTU4M0Q2MjE3RkNDRTExNUNEMUNGRDVDOEJCRTM3QkQ5NzI1QTUyMUZDQUVBQUE5RkVFNDFEQzk2NjYzNzQ5CitFMjE0NUI4MQorQTBEMjRBNkQ4NjBBODFGOUY3OEUxM0U0ODMKK0QzRUIyMjYzN0NFNTAyMzU4MkY5RUJBMjM0M0Q0MjQwRTBCOTMzRjQ3QjQ0Qzc2RjFEMDlDQ0NENEUyRkVDNkJBQjU4REMzN0NBMjlFRjM3Q0E4RTQ1NDNEMUIxQkUzNDRBNzUzMEZCQUYwNTFCQjBCMjc2NzlFMjFERDIzMDE0RjY5Q0Q4QkU3QjBEOUI4MzM2MEYyRjVGRUNCOEQzQzk1QzZDOUQ0NTJFRENFQTNDQUQwRDU2OTcKKzdGMDQ1NERCCis0N0ZGNkJBODdDNDU0RTY5Q0RGOTg1MDgyOTBFCisyQzZEODBBNjAxQUIyODE4MTkxQzEwMzNFQzdFRDBCN0Y4MjBBQzQ4MTdFREE5QjhCMEFCRkJENDYyNDcxMUNCRTMzNjM3QzY3N0U4REIxMjE2N0VDRTdENkQyRkQ5NDgyNjIzRTUxNzg3QUZGM0Y1RENCQzJCNTc5ODJDODUyM0JDNUE5NEEyRTM0NkVGNDUyNkQxMUI2NDU3RDRDRjg5Qzg1NDA3MzkzREVENUZGRTJBN0FERjdGRkE3QTJGQjYzQjVCNEIyNEVFODNGRTBDRjRFMAorOUFCNEQ3MzMKKzREMDRFOUYzRDkzQjAwODBBREYxMjlDN0QxMDkKK0Q4MEI4QjcyMDJCRDdFOEQ0QURBQzVBNjE4RUY0N0IzMTc5RjQwRUM4OEU1OTFFOTQ1REJDNTFBNUFENkI4N0U3NzRBNzIyNDk0NEQyMjQ1MkE1RkM5M0QxQzQ0M0IwRUIzQTlDNDA0OUJFNTJGMUFCQjZGRUZFMzM0QkZBNkUzRkRFNDJDOTg1NTc4QjAzMjQxOTgxN0Q3NzUyNERBMEMyRjJGODUyREQ3NzQyMTEzMTQzNjM3NEQxNDA2MjdDOTJDRDE2RDlBRUM0OTRBQ0JGMDM3MDY3MTI1QjY3OEY4NkYxN0ZCMkQ3RjA0QkQxREI2QkFBRjNDQjJFQgorMEMxMzEyRUIKK0VGNjM1QkVBN0RDRkU1RDcwOUQ1MTE1QURGMkQKK0UwOEFGN0IzQUY0QkQ2NkVCNjE5Mjg3OUE4NzgxRThDOEYzNTU5NzA0MTlGQkM0NzE1QTRDMEY0RjlFNkYyOTY5NkQzQkRCNDgwRTE5OTkwRUQ5QUNGQThGM0YzRTBENEZGOUQzMkI0RjE4NjZEQ0MwRTQ5RTg4RDc2QTRFQkRGM0E1Mzg5OTQ4RTY0MEVBRjVDMDk3Njc1RkNDNzk4RkJCRjUyM0EyMTBCMzRCNkRDQjQ5M0MyN0ZGNEU0MTIyRUU2OTcwRTU0NTQ3QUE2NjVFNkM1M0FGRUQ0RTIwQTJDNjBERDYwMTVGQTM2MDc0Q0ZCRDk5MzhFOTI4NAorNjE3QgorQ0I0NjQwCis2NUNFOTZENworNjk2NUNBMkVCREJDOUZFNTA2QjdGQjA3RkQKKzc4NTUxOEQ2MDUxNDRFMUJFOTM4OTNDNjA0Q0YyQzY2ODNFMUNENTlFN0E4MTBFNjRDMDc1MzVGNjYzOTE2N0JGNUNEQjgyMTVGRkU4OUM3QzUzQzhBMzBGNENCMENFQUVDODc1QTAwMTg1MjhBMzY5MkRCRkQxMUE1RjNBOUE1QkUyMDQzMTAzQUU1OEE0MjY4MUE0MTBBMUYzMEMzODkzQgorNjIwRkRDMjEKKzk0NDk2MzA3RDkwREE3ODgwNTRCMjY3OTM5OUQKK0VBQTNDNEJDQjMwMjI5MUY4NDlFOTU5NEY4MUQwMjNCNUZEODE0NTg2Q0E2QUJEMkM4MjcyQ0FCMDBCRjk1NDFFQ0U0MkQxNzE1ODQ3OTg3MUREOTRBNTk5QzcyMEE5N0ZDRUUyQjc3OEE4M0RFQjU1RjE1ODFDNzNCRDREQUVCREU1MjY2MzJDMURBNDk0RkI0OTMyQjg1OTVDRUI0REUyNzUyQzY4MDNENUY4NEIyM0E5NkQwRjk4ODZEQjdERjYyMjc1Q0FGCis2NTgzQkI2QQorN0U5QTVFNkZCMzM1MTVGODI2MzQyNTNDMDQKK0ZDRUU5Q0IyQjM2RkE3ODNBQTQ5MTU2QjM5RUNGMkM0RkM3QkY3NzVFQjkzCitCMEMwNEE0OAorMzU4MTI0MjcwOTYwMjBCNTNDRDc3M0U1NzhDRQorMzk0RUZGQTE3RDlEREJDODkxODkwNDM3Mjc0NjU4NjNBNkUyOTkxOEM5RjU1Njk1OTg0RjRDNTk0Q0I0MTA3MkQ2NDRENDNGMkRBOTgzNkRCOURFMTI4NERCRUFEQUJBNEQ1NjRBQ0ExOUM1QjNDNDMwNDk5Q0VCQzkyOTFBN0NCNTFFMEI4MzJFN0ZCMDJDRUQwMTJGRDZFOTZDNjFBQUU3NDk5ODgzMTFFRUU0MzAwRUY1ODQ1MEIzQzFDOThCMDQwRDIyMDI3MzE3MDI0MEQ4RkY4NDU3Q0Y2REVCNTJBMEM0NDUwMUQ0Njc3QzRBMUIzODRFNzZBMkJGCis0RUFFCitDMEE0QjUKKzdDMjk4NzQ1Cis0NjIwNkNCQzEyQ0ZDRkUzMjlEMkQxRThFRAorODYwMzBCNkY4RjkzOTc2QTVCMDMzREY0MDA3Q0EwODcxQTU5N0YyOUNBQjIwNzk4MUM1NzA0MDRGQTE4RkQwOUUzNDVGNTU4MTI3RDg3RUE3QUREM0Y0RDY3N0VEMDY0OERGNzg2RkRFQkU0MkEwN0QzOTI2MDM0OTk3NjZERTQ0QzhFOTM3NUE4NDBCMjY4MTg1RDNCRDJDREJENEMxQTQ5RDFDMzBDM0UwQzhGNjIKKzBBODQ5QkRCCis4QkExMUFEMkJBRkM2N0Y2Mzc3OTMzRkRGQgorNEU5RTFCNkQ0M0Y1Njc0QjEwM0UwQjBDRTc2QTYwNjM2M0JGMEFCMzU1QTdFRjA5NzQ4MjY2QzZBMjE5Rjk2OENGRUMyQTZERTVBQkQ3NUQzODlEQ0RGREI4QUI3RjEzQjJBNTZBOUVEOEJCRDNEMUNCRjQ5RDI0MTkxMTdDMkJGQzM3QjE2MTkxOTNCNjQ1OTZBMTQ5MzVGQzJBQUZENkZGRTkKK0E5NUZGMzExCitBQzc5MjMxNkI0OTY2NDQ2MTQxMDcxQTNGOEE5CitENzA0RkRGQzA0QzQwQkM5MTEwNUFCNzY1M0JBN0YyRTkyN0YwRDc0QjNDOTgyMzhENDk2ODEwQUNGRjZBQ0EzQUZCREE1M0RFRUNENkEyQTU3RTNGN0RGQjQzRUJGRkE4NEY1MzdGMEI1NTg5MDAzQzBDRkYxMzBERUJFNDU3NkQyNjVGNzhFOEFBQ0M1QUE5QUFEQjM2NDMwRUEwQkNFMDFFMDA1QUVGNjU3REU5RENERUNBNkM3OUMxRUE3RjdCMDMzQzQzMDQ1RkIzNDMxNzNDNThBMEI1QjFECisyODEwQzAxOAorM0IyODNGN0IwRDE3NDg3NzdFQzA0Rjg4NzYKKzEzNEU1QjVERTY5OUY0NkQ2MzU4RkQxMzVDQjhDRkI0MUFEODdCNjM3N0M3RDQ4N0Q1NDM2NkEwOUQ1OUExMzYwMDg5NTE3MDFEMTE1Q0ZENENDQTJBMzk3QTg0RTk2RjMwNzQ1QURBNzlBNjMwQjQ5OEUzODAwOTA0MzI5MjQxQUU2MzQ1NDVCRDU0QjY3Q0ZFMjZBOTI1RUU2Q0Q0MEYyRDRFMjJGQkE3OTA0MTU1NjUKKzc1Q0ZEMkU2Cis3Mjc1OTU1MTU3QjlGMUE1RTczQjM0REY1RQorQkIzODg1RERGNjk0NUE3Nzc1OEIyRjRCMUM5OUIxQzI3RTVDRUZBN0EzNTY5NkQxNzVERUI5RUFGQkM0MEI1RTU3M0RBODQyN0Y3MkY4QjQ5MzY4NzFERjBBRjQxN0FFNUVFMjlDQTFERTlGRjA5MjExMkFCNkE0NDQ1N0E5MjYwODhCQUI0RTc2MTkzNTdFODgyQUIxNTNDODdCMjlENEZGODQwM0U5RjRCNTAyQjhEMTdCMTc0RAorNTE5N0ZENUUKKzlCRUE3NkEyQTQ3NDE5OTBCMTc5OTQ1QkNBNkEKKzcxRTQzMjlEMjNCQ0E5RjJEMEVCNjRFQ0ZENjZBMEMzNUM1RkE3NzQxRDRBODJEMDM5MkRGRDAwNzM4Nzg2OUJBMkRGODE2MUI2ODY0REQxNjdFQjE0NjA5RDE0M0E2RjQzOTdBNDAzOEE5NDA4REZCMTE1OTEwOTY0RjBFNDY1MzQ2MEU5MjcxMjA0RDg1QzFCRDY4NkM1QTA3QjE4RTI5MkYyMUY1NjY5MEM0OTg4NDU0QUE5NDhCNTAwM0M3M0RGMUM3RkQ3QzMyQTI3MjdGQjVCQjVGOUQxRTE2RjEyNzZCNDdGRDA0QUEzRTU5M0Y3RTVCMjY5MTEzMQorMEYxOQorQTEzNEVGMDM5NjI1NjEyQzUyQjIxMjUxNkVCQTQwQjQxRjI2MTZCN0ZDQUFCQjM3RTQ4RTI1MzUxRDE1MkZDQjUwOUY5QUM1RUIxQ0IwMDQ1NTVBRjkzODNFN0M5MQorMkM2RDNGRjUKKzcwQ0U5RDdDRTFDRUMwNjIzNUFBNkU5RjA0RDEKKzZBRjE1NjEyNDY1NDlBN0U5MzRBQjlBMkQ3MzYzRDM4RUVBNzc2OTZGQjcyRDQ4MzA0RTdDQzZGQjk4QTU0MjRGREE4OTYyODU1NUNBMzkxQzM4MDQwQTIwN0ZGNkExMTVFOEI5QUMxNDREMDk4NjZEMDI5MkE2NkQzQzc3MERFOTA5ODAwNkZDQTNEM0QxNDk4MEU3OTM4ODlCMkM0NjI5NTA4QzIxN0NGRjc0QkYyOTkxOTk3OTNBRDlBMzRBMTI5NzJBQUNCRkM2Nzk5ODg0RjE3Q0ZEM0RBCis3OUU1RjZFRgorOEZCMTU5NzMwOTNGNEFGNUFFMjFFOTc2NDMKK0M1RkYzMjk2NjkxRDdGRUExMTlEMzhCMTI3N0NBN0MzRDc1NzYyQzNGNTAzMDJENkVGRUYzNzdGNDExQjI5QjJENzg4Q0FBREQxRUM1NEE4NjBCMjJFOEE2MUNBNkVDRjJFNDUzNjRCOEIxOTAxNzBBOTA2MkQxOTgzMjI5QzI3MEVBQzI2OTE4MUZGQTI4RTBBMDBDNEREQjE2MjEzNkQKKzlBQzhBNDQ5CiswREM3Nzg1NUNENEUzNzA2NjAyNzk1MzdBQzk4CitFMTY2NkM3NjlEODJGMjM5RDA4RkM4NTE2RDZFODUxMkJFMUVDQUYxN0MyNTcyMTNFNDQ2RUZENjBBQkQ4QzQ4M0E3MEIyMTBCRjJFMDc3OUU5QjE3MUI3OUNDMzFGRTVBRTQyMDQxMTM0MTZCN0YwQTkxNzA2NkU4RkFEN0IzNUNDQzM4OUQ0NEQ5OUUxQzdCRTU1OTVDQzk3RDVCMTk3QUFFRjE0OTY4MjkyNDA5NTgyQUExRjMxNUE5QjRCMDVGMDM0NURCNUYwOTY5RDNFQjBENzk5Qzg1REM3M0QzNEI3MDRGOEJCNjcxQ0U5QTBEQzUwQjYyRDZERUIKKzlFQzcKKzdBRDg1M0MxNEU3NjdBRjAxRjBBMjczNjU2MTM3RkFBRjJCQjY2QTc2QjMzRkJBOTJFNEEwMTgyNTVGQTU3NkY5NjkwMzYKKzUwMDQyRUFDCis2OEE2NzJBNTdGRjdFRkI3ODc2RUQxNUJDRgorMkZCQTQ4RDFDNzNBM0ZDRkU4ODQwMzJDOTA1NEQ1NTE3NzEyMDJCMDlFQ0Q1OUE3MTJDN0E0MzRBMTEyRkI0RDRBQjQ3RjRBOERGQjk0RjYwQjAwRUMzNTFEOTREN0IwMDU4RTg5ODJFODU1Cis5OUQzNzU5QQorQkNFNzY2ODk2OTVBMzM0MEUxQUY1QUExMkZERQorM0IzQkY1MjVEQTI3RTJBOUIwQ0MxN0E0OEFFREU5OTk1NUM4RDNBRTg2NjNDNzAzM0M0MENDNDhDMzdGOTIzMjFFQTZDNURFOTUxRjA3NjAzNEEyQjI0NDVEM0E4MTMxMUM1QTM0NDU2N0FBODYzN0IyQTU2RUM2RDIzRENCOUJFNENCQ0MwRDk4QzgyMDI3NEQzNkM3Qzc2ODFBNzNBNENCNzFFQTA0QzE2MjQ5QTZCNEY2NzBCOUI4MzZCRjlDRTUwMkY3Q0ZFOTFCRjIxQkI0OEU3MTVGN0FFODYzMkRDMEM1OUQ5ODU3RDY4NkQwMDkyQzQwQUJGQUUwCiszODRGCitDRTE1QTI0NUQxQjA2MjY2MDRCNkQ4QzQwMDM4NzM0RkQ1MUZENDAyQjlBMzcxRDc2NjY1ODVFMTcyMUI5MworRTIxREVFRjIKK0I0NDdEMzA4RkE5RTA0OUE0OEQ4QTgwREM4QTkKK0E1QUI3OTE4NTEwRkJCQUY1NzgzQjczMzRFMzc0QzY2OUYwN0Y2OTdFRjE0MDdDQjQzNUZBNUNGNDRFMkQyRTUwRTI0NkY2NkVENTM2MTg4QUY4MTk4NTYzMjcxMzNFQjQwNDNBRkFGMjAwNTE0QjdBMzg5NzkxN0U0MEJBQjVGNjA5QTE3NjVEMDc2NjczNDlCM0FFQUU1RjRDOUQ5NUQ2MDNGOTE4MEVBNDQ5MjRCMDI1RDQzRjNBNjA3OUJDRDU1NEYzNkI0QTZCOEJEMEFDMzlEMEVBMgorODI1NDc1QjIKKzJERkZCOTlDRkY1NzJBQjgyM0JFMDMyMTJBCis4MDg3MTEwODk5NjM1M0U5QzMyM0M2N0MyNjZCOTA0MjJGQTVBOUFGRDUzMjZFOTFDREZBRUVFNkU5MjJGQ0UzNzZBMkQwREE3NDQzMzU1Nzc2RjM5MjI4NTdBQTBGMUU4RjE2QUIwNzgzMTM2NDkwOTcyNUQ3QTkxMjA3MTE2MDdBOTZBQkVGNEQ1NworQ0RFNDhDOUIKK0YwREVGMjM4Q0ZDMjg4ODE5Njc5QzM1REUyN0YKKzIwNDI2NzhCOTlFRkEyQzdDQUFBMzQ5ODQzRTkyMkQ0QzAyNDFGODAzODUxNkZDMzg4MDIwODZCMjc0RjBBOTg3QjZGNzNENEQ0QTYxM0ZDQzQ2RUFCQzQwMkIzMTA3M0YxNjk4Q0M2RDEzRjM3RTJDMkUxMEUzNTY1QTc3OTU0NDkwNjVDRDZGQ0Y2RTU5RTc4MjAzN0U1NUZEMDlEREQ3Nzc5OTdDQkZDMDA3Q0U4ODY2M0JBRTg4QzQxNTdDRDExQ0VEODgwNEZGMjNDNjg1NkMxNDYyRjI5NjhDQzUxMUI1MUYyMEQ5MENFN0QKKzlBM0ZENDE4Cis1REM3MjA5MTk1RDFGRjRDQzg2QjFDMTlEQ0Y3CisyQTY4NEIzNzQyRUNBRUZBQzBGQTY0RjhBMUI3OTcwODNFMzQxQkVEQTUyMzJDMDQyMjMwOUNBMUY5ODk0OUVEQzIxMEJBQkQxNjNBRDE2RDNEODI2OUJGMUEwQzlBNkJDNDAzRTMyRTRFRUZGQTcwMDgzQTlEQzM1M0MxRjVDMzBERjlDQ0RBMTNDRTk2NzY3OEIzQzlEOURENzNDRUYzMDdFODE5MTJFNEQ1NkFBOUUyNTczNzA0OTc1OTFFMzhEMUE5NzQ4Q0MwMjJDMzRGMzcxNgorOTUwNEMzNTAKK0VCQTFEMDAzM0ZDNkY4RjI0QTcwMTU3MEQ5Cis1NjMxNjhGMEM2ODczRUVDOTU5RkMwQzFFQTQ2NDZENTdCQjhGRTU4MzQzOEM4MjkxMTlDOEYwQTM0Rjg3OTYzMkVENTAwMkMwMTYyNTJDOTVFMTM5RTU4RjI5Rjk0MEEyN0I1NUVDMzhGQThENDQyQTMzMTlGMkYzOTA0QTE2NDI4RjkyOTM2OENDMjIzMjY1MEMzMzBBRTQwNTE0NTM3NTJEOUJGNUI4NDM5NTIKKzQ2Qzc3MDZFCitFMkRFNTg1MzAxOUE3OEIwQTdDN0U4ODhGNUZDCitEQjM1RDcwRUE4M0UzREU1N0Y4MjVCRDQ0NDlDQjVDQTAxNkU5NUNDQjVBRjU3MTA5MEVDMjgyMzc4QjM4MjRCOEE0QjlCRTVGMzdENTIzQjYyRUVBRkY3QjgwQjI0OURBNERDRTA5MUVBMENFMDgxQUE3NUY5Q0E1NjgxMTYwMDRFQTAyQ0IxNzkzQzlBQ0RFOTI1N0VFNkE0RTZBQkFBQ0EyQTQwMUM5MTQ2RUQ0NzAwMUUyMTA4RjU5MzA0MDczMDU3QzBCNDNFQzlDRTA4RDEzQkU4MjVCQUUzQzA4MEE3QTFBMkI1ODJGQkJFRjc1MTIzRDFFRQorODFBNzQzQUQKKzZEOTJBQjZFRkUyQTZFOTY1RUM5RTY0MjVECis0RkE2N0ExODUyN0I2NzIwQTk5NTFDMDc2RTJGODg5QzIyNzY4OUJBMjhEMUJEMEE5ODQ2QkQwQUU4RkFEOThERURCNDQyNDAyRUM1Nzc2QUNEQTY3QTI1QTk0MTA5NDIzODVGQzc4RDI1RTMwNDFBM0IzQjJCNERCOUFFMENENkFFQkNDRThFMDMKKzg1REEzRTZBCis1NEU5Mzc3MUEyRDJBN0NBRUZDQzgwQTkxNworQjgzRjk1NUM5M0M3N0FCOTM5QTg0MDE2M0FBQUIyQzczREM3ODE4RDQxQjBENjRFMzc3NEI2NEY4QjIwMEEzOEEwNzY1RTc4NURCQzE5OTZBMUQ5N0ExNjc0RTVFQTRENUM2MDJCRjhCNkY1QzE3Qjk4OTM1MTc3RjcxNjM0QkQzRDJDQzhGRjQwMjhGOEZGOUJBQjA2MDM1ODYwQzU0QUUxRTAxOERGQTdFRkQyNDhGMUNGQ0U1NTAxRjhGMDA2QUFCMAorRDRCQzQ5NEQKK0RENjE0OTQ0OUU5NUFGNjY4OEVFMzM3MDkzCitGNUM4QjY0RjMyNzE4QUIyMTcwMTY4QjkxQkZBNDQwOTU2OTM0MkM2RUI2REVBMTc0MjQ0RjBCRjhCNTQ2NkMwRDUxNjYzRjAyOTk3MjA5NTdCQzU4MDRENzZBNUM0NzkwRjVCQjlDRjE4QTJCRDZDOTJGRDFDMjFFQzI3NTRFRkRFMUMwN0U4QUNFQUZDQTYzMjY1ODZFRUI1RDMzRjcwMzEyMUE4N0I1OTA5MzRBNDA0CitFNjY2Q0Q5NgorOEQ5NTc2OTYxNThBNjhBMUJCNjE1MDg4Nzg4MworQjNDOUFDMjM5QkRBMEEyQTMxNTlGOUM5MkFBQzlGMDU5MDE0Qzg0RUYyRjZDMzQyMEY1RjJGNjMzQUFCNjYxMzA3REZGMDE2Nzg5MzlDNjI1ODgxQ0JDRDgwRjdGODVCMEFDNzAzODk3QjE3MUYwQjkwRTAwN0JGMjE2NjdERUY2MzQ0N0YzMDQxMzYyRDM0RThEQ0I5REVGQjhCQUNGMTNGM0Q2RUE3RUFDMjU2NDdERTVENTZFQUM0RkJDMEJCRjY5M0M2N0EwNzg5OEM4N0U2OUFGMTI5QkE5MzRGNjZGQjJFNjA1RTREMzdCOUZGQjhBNTVFQTFCMzdBCitFMDYxCitCRUIyNkE1RUQ0Mjk4OEE5QkI3QkY5REE3N0VECiswRkY0OTJFOQorQ0IxRUZENTk3MEZGQzVGOTA3QkZDN0M3QTRCRgorNERGNkQ2RTA2NUIzRERBNzU2MkUyQTczMEZCNjZFNDk3M0I5NjU3QTAyNENEMDhGNThFMEI3RTk1OEYzRTczMEZENzk0REE3RjkwNjBFOUE4RDRCRjgwMzEzOENGMUVFRDFDNTc0REUyMEM5QURGQzY3RDZCRTFERDk3REVDRTQzM0I5NzkwNzEwRjIyMjgyNEQzMTM1QjVGMDg4NDdCMUQxQTgzQzExNDc5MTM2NDNBQjhCOTA5RDJFNzdGMDQ0RjEwNzE3MDZENzYwNjFBNDgyNkY0NDdFQ0M2NkEzREY5QTQ1RjIwMDREMUUxM0QwMzYzODk0QzgwNjVDCiswMjNGCitCN0JCNDA4REI4QTBCOTI3NUVEQUZBMTAwN0ZGRTI1MjQxQjdENUFBQjYzQzBGOTdFMgorRTg1MDlCOUQKK0MwRTMzREU1OUQ2MUQyQzA5Q0Q0QzI3QzU4QUEKKzQzMkYzMDA3NkE3NTU0Nzk4MjJBMzYyOEFDNTE0NDVGRjY4MkMwNUNDREFBNjlDNEU2NjhDNUNDRjlCMjZERkQ2NDgxREY4Q0I2OTcxRUE0OUQ1MzQ5M0Y5NjlGM0VEQzRDMEMxMTVBMTBERjNCOUY5MkQyMDk4NkU0QzdDRTM0QzhCMjZFQzE0NDczNTZENzExRUE5NEJEQ0ZEMjcyNTlFRUM2OEQ2MDcyQzg4RTJCMzVENzBDN0NCNDFDOUEyNzM0RkRCMEExQzMwNUI3QjNCOTcyQkJBQzkyQzc4QjA0NEEwQkI0NDJBMjU5M0JBMzUzODlGMjJDRTZEQgorRjhCQgorQjYzNDBCODEKKzhFRjNENjI1N0VDMDlEMTEzNkRGMjZGQzM4CisxRDhEODcxRDkxRDE3Q0I3RDU2NEVBQ0UxQ0E4NzJBMTdCQTJBOTVGRjA0NURBMkY1QjQxRjNCNzcwMjQ4QjU2MkZFOEM3QkNEQjlFMDVEMEY2NDgwRkIwNTQxNjA1RkUwM0VFQUM2OTNGRkM1MDk2ODg5QTI5OEM4RTA1Q0EKK0UwMUNENDUxCitBMzQwNzgwRDI2M0YxQ0IxQ0E4OTJCNURFMworNzc3OTA4NjJFM0ZDNTAzOTMyOThGRDg2QkJDM0Q0QzFGNTY5MEE5MTA5MjQKKzA3NjkzOUNBCis1NzdFRkFFQzc0MzA2M0NGQjU5OTFCMUU3RjU3CiszRDhDMDk2NDk5MjA4NDJFCis5MDNCNjlCQQorMTE2RkVGMUQxQzVEMEVBMkQ3Q0FFNzU3OUY1RjI3RkE1RTI1RTlGNTc1QTAzODMxQUI3RjRGMkYyMzVCODM0QzhGMzgKK0I1QjNCREM5QUEzMjU0NDFFQzRCMEQ1NjdBQTZGMUZFRkI2QzgwMzYwODI1MUYyN0I5MjAyMzY5MEJFMjRBM0JFM0ZCODZDMUNGRkMKKzcxOTI5MkU2MERFQURBMTUxQUMxM0UyRjBGMEVDNEVFRDk2QTYzNUZDNjhBQUFDNzg5RDc1QworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IENvdXJpZXIKKy93c3Q6Y291cnBzMTAgMTAuMDAgL0NvdXJpZXIgL3dzdDpjb3VycHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTIxZDJiMjcxZDI5MWUwYzAxMGQwMTBlMWQyNTFiMjAyNDE5MjkyMjAxMWUyNjI5MDExMTFkMTkyYTJjMjkyMTI1MWYwMTEyMWQyYjJlMjYyOTIyMDExMz4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwxZDI5MWUyNjI5MjQxOTI1MWIxZD4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MDgwYj4gOTM0NiAxMzMwMCAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI4MCAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjgwIDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyODAgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjgwIDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE2MjAyMTJhPiAxMjcxIDE0MzEgMCAxNjY1IC0xIHMKKzwwMDAwMmIyMDIxMjkxYzAwMmExZDJiMDAyNjFlMDAxZDJmMTkyNDI3MjMxZDJhMDAyMTJhMDAyYjE5MjIxZDI1MDAxZTI5MjYyNDAwMmEyNjI0MWQwMDAwMDIxODE0MTQwMDJiMWQyYTJiMmEwNTAwMDAxNjIwMWQyYTFkMDAyYjFkMmEyYjJhMDAyYzJhMWQwMDE5MDAyYjJlMjYwNDIzMjEyNTFkMDAyOTFkMmEyYzIzMmIyYT4gMTY2NSAxNDMxIDE5IDk1MzEgMCBzCis8MWUyNjI5MjQxOTJiPiAxMjcxIDE2NzYgMCAxODg2IC0xIHMKKzwwMDI0MmMxYjIwMDAyMzIxMjIxZDAwMmIyMDE5MmIwMDI2MWUwMDJiMjAxZDAwMTcwZjEzMTgxNTE2MTQxMDBkMTEwMDJiMWQyYTJiMmEwNTAwMTYyMDFkMDAyNjI1MjMzMDAwMWQyZjFiMWQyNzJiMjEyNjI1MDAyMTJhMDAyYjIwMTkyYjAwMmIyMDFkMjkxZDAwMTkyOTFkMDAyNTI2MDAyNzI5MjY+IDE4ODYgMTY3NiAxNiA5NDYxIDAgcworPDMyPiA5NDYxIDE2NzYgMCA5NTMxIC0xIHMKKzwyZDIxMmEyMTI2MjUyYT4gMTI3MSAxOTIxIDAgMTg3NyAtMSBzCis8MDAyNDE5MWMxZDAwMWUyNjI5MDAxYzIxMmEyNzIzMTkzMDIxMjUxZjAwMjMyNjJhMmIwMDI3MTkxYjIyMWQyYjJhMDMwMDE5MmEwMDJiMjAxZDI5MWQwMDE5MjkxZDAwMjUyNjJiMDAyYjI2MDAxYTFkMDAxOTI1MzAwNTAwPiAxODc3IDE5MjEgMTMgNzMyMSAwIHMKK0dSCitHUworMTI2MyA3ODE2IDk1MjIgNzgxNiA5NTIyIDIwNDggMTI2MyAyMDQ4IGNscAord3N0OmNvdXJwczEwIFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDI0PiAxNDQ5IDIxODIgMCAxNTU1IC0xIHMKKzwyMDJlMmY2ZTY1NzQ3MDY1NzI2NjIwYjE3NDIwNTQ0MzUwNWY1MjUyPiAxNTU1IDIxODIgMyAzNjc1IDMyIHMKKzw1NDQzNTAyMDUyNDU1MTU1NDU1MzU0MmY1MjQ1NTM1MDRmNGU1MzQ1MjA1NDQ1NTM1NDIwNzQ2ZjIwNmM2ZjYzNjE2YzY4NmY3Mzc0PiAxNDQ5IDIzNTggNCA1NDc3IDMyIHMKKzw0YzZmNjM2MTZjMjAyZjUyNjU2ZDZmNzQ2NT4gMTQ0OSAyNTM0IDEgMjgyNyAzMiBzCis8NTM2ZjYzNmI2NTc0MjA1MzY5N2E2NTIwMjAyMDUyNjU3MTc1NjU3Mzc0MjAyMDUyNjU3MzcwMmUyMDIwMjA0NTZjNjE3MDczNjU2NDIwMjA1NDcyNjE2ZTczMmU+IDE0NDkgMjcwOSAxMSA2MzI1IDMyIHMKKzw1MzY1NmU2NDIwMjAyMDUyNjU2Mzc2MjAyMDIwNTM2OTdhNjUyMDIwMjAyMDIwNTM2OTdhNjUyMDIwMjAyMDU0Njk2ZDY1MjAyMDIwMjAyMDUyNjE3NDY1PiAxNDQ5IDI4ODUgMjAgNjExMyAzMiBzCis8NjI3OTc0NjU3MzIwMjA0Mjc5NzQ2NTczMjAyMDYyNzk3NDY1NzMyMDIwMjAyMDYyNzk3NDY1NzMyMDIwMjA3MzY1NjM3MzJlMjAyMDIwMjA3MDY1NzIyMDczNjU2Mz4gMTQ0OSAzMDYxIDE2IDY0MzEgMzIgcworPDM4MzEzOTMyMjAyMDIwMzgzMTM5MzIyMDIwMjAzMTIwMjAyMDIwMjAyMDIwMjAzMTIwMjAyMDIwMjAyMDIwMzEzMDJlMzAzMDIwMjAyMDIwMzEzNDM4MzAyZTM1MzU+IDE0NDkgMzQxMyAyNSA2NDMxIDMyIHMKKzwzODMxMzkzMjIwMjAyMDM4MzEzOTMyPiAxNDQ5IDM1ODkgMyAyNjE1IDMyIHMKKzwyNDIwMmUyZjZlNjU3NDcwNjU3MjY2MjBiMTc0MjA1NTQ0NTA1ZjUyNTIyMGIxYjEyMGIxNzIyMDMxMzAzMjM0MmMzMjM1MzY+IDE0NDkgNTIxMSA2IDUyNjUgMzIgcworPDU1NDQ1MDIwNTI0NTUxNTU0NTUzNTQyZjUyNDU1MzUwNGY0ZTUzNDUyMDU0NDU1MzU0MjA3NDZmMjA2YzZmNjM2MTZjNjg2ZjczNzQ+IDE0NDkgNTM4NyA0IDU0NzcgMzIgcworPDRjNmY2MzYxNmMyMDJmNTI2NTZkNmY3NDY1PiAxNDQ5IDU1NjMgMSAyODI3IDMyIHMKKzw1MzZmNjM2YjY1NzQyMDUzNjk3YTY1MjAyMDIwNTI2NTcxNzU2NTczNzQyMDIwNTI2NTczNzAyZTIwMjAyMDQ1NmM2MTcwNzM2NTY0MjAyMDU0NzI2MTZlNzMyZT4gMTQ0OSA1NzM5IDExIDYzMjUgMzIgcworPDUzNjU2ZTY0MjAyMDIwNTI2NTYzNzYyMDIwMjA1MzY5N2E2NTIwMjAyMDIwMjA1MzY5N2E2NTIwMjAyMDIwNTQ2OTZkNjUyMDIwMjAyMDIwNTI2MTc0NjU+IDE0NDkgNTkxNCAyMCA2MTEzIDMyIHMKKzw2Mjc5NzQ2NTczMjAyMDQyNzk3NDY1NzMyMDIwNjI3OTc0NjU3MzIwMjAyMDIwNjI3OTc0NjU3MzIwMjAyMDczNjU2MzczMmUyMDIwMjAyMDcwNjU3MjIwNzM2NTYzPiAxNDQ5IDYwOTAgMTYgNjQzMSAzMiBzCis8MzkzMjMxMzYyMDIwMjAzOTMzMzYzMDIwMjAyMDMxMzAzMjM0MjAyMDIwMjAyMDMyMzUzNjIwMjAyMDIwMjAzMTMwMmUzMDMwMjAyMDIwMjAzMTM0MzIzMTJlMzMzNT4gMTQ0OSA2NDQyIDIwIDY0MzEgMzIgcworPDM5MzIzMTM2MjAyMDIwMzkzMzM2MzA+IDE0NDkgNjYxOCAzIDI2MTUgMzIgcworMTcgTFcKK04KKzY3MjAgMzM5NCBNCis3NDU1IDMzOTQgTAorZHAKK04KKzY5MTYgMzM0MiBNCis2OTE2IDM0NDcgTAorNjkxNiAzNDQ3IEwKKzY3MjAgMzM5NCBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorNjcyMCAzMzk0IE0KK0MKK3dzdDpkdXRjaDEyIFNGCis8MmIyMDFkMDEyOTFkMmEyYzIzMmI+IDc1MTIgMzQ0NSAwIDgzNjUgLTEgcworMTcgTFcKK04KKzI3MDUgMzM2NyBNCiszMDUwIDM4MTggTAorZHAKK04KKzI4ODEgMzQ2OSBNCisyODA3IDM1NDMgTAorMjgwNyAzNTQzIEwKKzI3MDUgMzM2NyBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorMjcwNSAzMzY3IE0KK0MKKzwyMzI2MWIxOTIzMDEyOTFkMWIxZDIxMmQxZDAxMmEyNjFiMjIxZDJiMDEyYTIxMzExZD4gMjczNCA0MDcyIDAgNDg3NiAtMSBzCisxNyBMVworTgorMTk1MCAzMzYwIE0KKzI1NjAgNDE1NyBMCitkcAorTgorMjEyNiAzNDYyIE0KKzIwNTIgMzUzNyBMCisyMDUyIDM1MzcgTAorMTk1MCAzMzYwIEwKK0MKK3t9IC0xLjAgLTEuMCBzb2xpZEZpbGwKK2RwCiswIExXCitOCisxOTUwIDMzNjAgTQorQworPDIzMjYxYjE5MjMwMTJhMWQyNTFjMDEyYTI2MWIyMjFkMmIwMTFhMmMxZTFlMWQyOTAxMmEyMTMxMWQ+IDIxODIgNDQxMSAwIDQ3MDcgLTEgcworMTcgTFcKK04KKzE2MTAgNjc4MyBNCisxNjEwIDc1NDUgTAorZHAKK04KKzE2NjMgNjk3OSBNCisxNTU3IDY5NzkgTAorMTU1NyA2OTc5IEwKKzE2MTAgNjc4MyBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorMTYxMCA2NzgzIE0KK0MKKzwyOTFkMjQyNjJiMWQwMTJhMWQyNTFjMDEyYTI2MWIyMjFkMmIwMTJhMjEzMTFkPiAxNTQ0IDc4MDAgMCAzNjgxIC0xIHMKKzE3IExXCitOCisyNDgwIDY4MTggTQorMjg4MSA3MjY5IEwKK2RwCitOCisyNjU2IDY5MjAgTQorMjU4MiA2OTk0IEwKKzI1ODIgNjk5NCBMCisyNDgwIDY4MTggTAorQwore30gLTEuMCAtMS4wIHNvbGlkRmlsbAorZHAKKzAgTFcKK04KKzI0ODAgNjgxOCBNCitDCis8MjkxZDI0MjYyYjFkMDEyOTFkMWIxZDIxMmQxZDAxMmEyNjFiMjIxZDJiMDEyYTIxMzExZD4gMjgzMCA3NTIzIDAgNTE5MiAtMSBzCis8MmMyYTFkMDEwNzA2MDgwOTAxMWEzMDJiMWQwMTI5MWQyODJjMWQyYTJiMmEwMTE5MjUxYz4gNjUyNSA1MDA0IDAgODkzNSAtMSBzCis8MDgwYTBiMDExYTMwMmIxZDJhMDEyOTFkMmEyNzI2MjUyYTFkMmE+IDY1MjUgNTIwNyAwIDgyOTQgLTEgcworMTcgTFcKK04KKzU1OTIgNTE3MyBNCis2MzI3IDUxNzMgTAorZHAKK04KKzU3ODggNTEyMSBNCis1Nzg4IDUyMjYgTAorNTc4OCA1MjI2IEwKKzU1OTIgNTE3MyBMCitDCit7fSAtMS4wIC0xLjAgc29saWRGaWxsCitkcAorMCBMVworTgorNTU5MiA1MTczIE0KK0MKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBDb3VyaWVyCislJSsgZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgyNykgMjcKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNCBwdXQKK2R1cCAzIC9DMDA0NCBwdXQKK2R1cCA0IC9DMDA0NSBwdXQKK2R1cCA1IC9DMDA0NiBwdXQKK2R1cCA2IC9DMDA0NyBwdXQKK2R1cCA3IC9DMDA1MCBwdXQKK2R1cCA4IC9DMDA1NSBwdXQKK2R1cCA5IC9DMDA1OCBwdXQKK2R1cCAxMCAvQzAwNjUgcHV0CitkdXAgMTEgL0MwMDY2IHB1dAorZHVwIDEyIC9DMDA2OCBwdXQKK2R1cCAxMyAvQzAwNzEgcHV0CitkdXAgMTQgL0MwMDcyIHB1dAorZHVwIDE1IC9DMDA3MyBwdXQKK2R1cCAxNiAvQzAwNzcgcHV0CitkdXAgMTcgL0MwMDc4IHB1dAorZHVwIDE4IC9DMDA3OSBwdXQKK2R1cCAxOSAvQzAwODAgcHV0CitkdXAgMjAgL0MwMDgyIHB1dAorZHVwIDIxIC9DMDA4MyBwdXQKK2R1cCAyMiAvQzAwODQgcHV0CitkdXAgMjMgL0MwMDk3IHB1dAorZHVwIDI0IC9DMDA5OCBwdXQKK2R1cCAyNSAvQzAwOTkgcHV0CitkdXAgMjYgL0MwMTAwIHB1dAorZHVwIDI3IC9DMDEwMSBwdXQKK2R1cCAyOCAvQzAxMDIgcHV0CitkdXAgMjkgL0MwMTAzIHB1dAorZHVwIDMwIC9DMDEwNCBwdXQKK2R1cCAzMSAvQzAxMDUgcHV0CitkdXAgMzIgL0MwMTA3IHB1dAorZHVwIDMzIC9DMDEwOCBwdXQKK2R1cCAzNCAvQzAxMDkgcHV0CitkdXAgMzUgL0MwMTEwIHB1dAorZHVwIDM2IC9DMDExMSBwdXQKK2R1cCAzNyAvQzAxMTIgcHV0CitkdXAgMzggL0MwMTEzIHB1dAorZHVwIDM5IC9DMDExNCBwdXQKK2R1cCA0MCAvQzAxMTUgcHV0CitkdXAgNDEgL0MwMTE2IHB1dAorZHVwIDQyIC9DMDExNyBwdXQKK2R1cCA0MyAvQzAxMTggcHV0CitkdXAgNDQgL0MwMTE5IHB1dAorZHVwIDQ1IC9DMDEyMSBwdXQKK2R1cCA0NiAvQzAxMjcgcHV0CitkdXAgNDcgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yNSAtMjM4IDkyMCA3MjJdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMEUwMDU0RTg3RUMzQzQxQ0Q2QjlFNTBEODlFMDg2MTk1RkQKK0RCRTdGNTY3RTU5RDZFRUFGNkRDRjlBMworQzNDRUQ2ODRBQzhDRDdCMzM1Cis4NDczNjNGNworQjM3MDEzN0QyOUY0MTUzRThCM0M4NjYyMTQyMQorRTJCMERFM0E4MTg1QkZCRDZBMEM1RkVENzU5MDE1ODAxRjg5ODM1QkMwNzUxNTc0OTc4QkEyNTc2OTIyNkNBMkEzOTIxMTJCODU3QTEyMkM5OTY4MTlGMURBNEI5QjQ0RUM2ODQzQzRBNERCQUQ2RDUyOTIwN0IyQTVCNzAxRTdDN0I3ODczQTU0NkUwNUUwMjcwRUY3NzcxRUY1Nzg2QTQzMjY1MTIxNjUyMDQxQUMwMjExMUQ2RTQ2REY5RDVCMzFBMDZBQThFM0E2MTEKKzBFMzFBN0UzCitBODMxQjQ4RUU5NDUzQjcwREFDOTZFQUEwMgorRjEzN0MyMTNGNzYyRENCRDMwMzlCRkE4MUJCRDc5RkZFNEZCMUE5MDYxMUI2OEFBQjg2REIxOENBMDJFNzg2NDhDRUY1MzdGRTgzNzdFRjcwQUJFOUY0Q0NFQUNGMjFDODY0NkVDOUJEMkQ3Q0RBNkE5CitFQ0YxNUNDOQorNUU3RjQ3NzU1M0EyRUIzNTZCRTk0NzBGMDMKKzdGREQxNUU2RUQzNzlFQUMwNUQ0RUJCRTBEM0NDRjE2REUyRjJGNTg3NTgwMjMKK0IwNzU5NTUyCitCQ0RCMTM1RDNCMzkyMDU5MDg4MDAwMDJCNAorNzRBQkIwQUQ5OEI2Qjg1NUNEMDA4NDE5NjEzREE3NTI0NTkyREVDNDYyQzYwNTRFMzUwNEQ3MzQ1NjBFNkUKKzlBQjlGNzEyCis0MzVDODQzRTdDMTNEMkVFMDM4Rjg1MTMwNworQzYyMDRBNzdCQUM2QzA1RkREMDVCRTlDQ0U1Q0IyRjdDRkNDNDAxQjE0MTQ4MDk5QTZGMUEwRkEKKzY4QzczOUU4CisyOEE1NjUzN0ZEMTE2NjFGMEIxQ0M0QzM1MQorMTRERUU2MDdEMTNFODZFOTEzODFBQjM4OTk4QTUyNUEzRjJENTM1RTg2QjBFRUY5NDc2QzczRERGMjRFNkQ5QzgxMTQzMEZGRkE0MTcyMzVDRDFDODVFN0FEREQ2RTU4Njc5NkI2N0NCQTAyOERBRUE2REQ0NDZFQUQ1NjAzRTE0QTUxNDVFMjM5NzU4RUIyREY5NDk1MUFDQUYzMDk0MTk1NTIwQ0ZFMzcyRTJGQzEwMEIwCitDNkI0QjBBMworRUYyMTYzQ0E0QUM5OEMyMjM5RkY3QzJGOUIKKzc5RUY2NjMwQTZCOTgyQzMzNjk5MjE1NzEwRUEwNjcwODA0MUJCQ0NBN0RDNDA0RDZEOTMwOTNGNDA1RTI4MTY5RjBCN0I4RkI3MjRBQzhCQzJEODAwCis3NEM1NjE4NQorRDU4RUY1OEJDMzEwNjIyRDgwMDdBOThCNjEKKzJBNEJDM0MyMzU2RDRGRDVCQUJBNjIxMUFFMjBFRTkwMTRCODE5MTRDODQyNjA0QjlCQUQ5MDhFNkFFQkFGRkVFMTQ5NjFFNTNCMzRCMkVDRkQwRUY2QjcyQjg1MTFBRDJCRUQwMTUyQ0JEMworMkJBNEZENkIKKzJCMDdEQzA5NzAwQTg1MTcwOTgyOEY1MjBGMzgKKzUwRURDMDZFMDdGMkE4RTZENEE0QTU2QzQyN0E5MDZGNEYzNjZCMTE4NEYzQTcyRkZCMkE4NUUwNzc0MjQ1NTEyRDNBNEU4NkQ1NDQ5MDU5RUYzQjgxOENDQzBCMjNGQThCNDFENkE4QjA1RjVCNTI1MTRBOUIyNTc0MkVFODEwOEQyODcyMjc3RTk3OUU0QzlENTlCMUI4RDFCMTUzMDlFQjgxRTRFMEVCRTMyNUQ1MjRFNDc1NTJBMTZCRTdFREMxOTAxMjcxQkM5NDQxM0E5ODZGRDExMDY1RTUwNkI1NTAwQzAxCis3OTUwMjQ5QworODNGNTdCRjgwMDVGQTMzRjM3RkZGODNBQUFBMworRjRGNjhBOEUyMTM5RjQwMDE2MzgwQkE3MUJDQkY1NEQxQTM2QkY5NzhERTA4N0E1Q0QyRDcxQkRGMDUyRjAwQjNENDY0MTAzOEQ4MDZEMTY2NUM5MzMxNkFBNDMyQjc0RUYyQjE4MEUzQjc3QzQwQUJCQzVCRDI0Rjk2RDJFRjY3REU1MjdENDdBNTg3MjE5REEzOEEyQjk4RDgxNEMzQjYxNjIxNDkzNkY5NDE5MUUzNzcyNDE3NDA2NzQ2NjM5NTdBNjk5NDhBQUNDODFFRUE2NkI2RDRGOEM5NkMwRDUwM0NGRkNFRTBGNDE1MTk0MTc0RUU4QURENURDCitGMEU0CitFMAorMzRGQUNEMkIKK0FDNzU2NzY0NUMyNTU0RUY0MUJENUEyREYyCisxM0Q4NUE1NjE5NEZBQTA0REMxNEZGN0Y2MzUyRDRGNTgyNDYzNzU0Qjk1RDg1OUMxM0VDMEY4NjczNjJDOTQ1ODJGQTE2Njk5MzIxREE0MDQ4M0RCNkFFRDQ5REJEODQ2RjkxMEY5QzA4QjEyMjE3Nzg5RjQzRDkxRTc3NjBDOTg3RUJENDdCQzc3QUQzRjNEOTU4MDg5NTVBNUNBODBCMTNENkYyRjE4M0Y4QjIxMEMyQjhENDEwMkNCMThGMDFDOTk5NTkKKzNGOTU3QUQzCis3NkQ3Qzc3QTUyRUYwMDdGNjEzNkU2QUYyRUFGCitFNDc2MEIwQ0NBNUY5NjU5ODBFQTA2QUY2RTY2NEJGRDZBNDc5RTZFOTY5MkVEMjNDQkE1MTc0NkMwQTM4OUYyNzI2M0I0NkQyMjg0RDhERDFENTI3RjkwODI3Q0E2MjkxOUQzNTE5OEJDRDAwNjAxQkE3NTZBMjg3MTQzNDBERTgzNzU4MUZDMTI4MzAwMEIyNzM5ODBEMTk2RTdEODRDRDhGMEJCN0VBQkJGODdEMTg5NkQ4QjVDM0NCNTZDOTlDMUFERjI4NTU5MDI2NEIzMEVEMkIyMzRFNTRFQjFCRURCNzZDRDE5NDc5MkY1RDcyRjBGCiswQjkxQTAwQgorNDk5M0UwODY0QUNBREFDMzUyQTAzQURGMDIyMworREE2QzU0NzJDQkU2Qjc0NTQ3RkEyMUE4Njk4N0I0QzZGNzk2NzM5N0MwNTFBRkFBODBBQTgwREVFMUYyODUzQkVBNTkwOERDRDJGN0U4NzgyQjQ0ODZEOUQyMjdFN0M5MkY2OEMxNjA5QTJCRUFFOTE3QTg2ODNBODcyNkVDOTFGRkQ5QTcyNkE4NzA0MDAwMkZFNDJEQzkzMzdFQ0E1NEFGNEYzOTgyQjQ5N0YwNDA1OTRERURBQkQxRDZFOUNDQzI4QkNFNEY4MDUyRDU0MjRCRkY4RkY0NzlDRDFEQjExM0I2RTI0OTU4OTdENzZFNkM4MUMwRjg2RjM2Cis4OUMwCitGRTBCNUI1QTI1Mzk1OEVBNUE3NDcxCis1REUzMjAxOQorNTU1N0ZGRTIwQzc3REIxMzRDN0RDOTUwQzAKKzFFMzFEOTE1NjE0M0Y0NDA0N0EzQzc3MTQ3RUYzRTAwRjQzRUEwMzcwMTIyOUFDNzNDNUE5QUU2OUVBQkQzNTJDQUVDMzBFRjE2QjRCQTNBOTVDQzcxMzJGNjM1NTFDMTQ4NzUyNDJBQUE5OEM1MTREMjc1NTAKK0RFQTc2ODA1CiszN0Y2QUEwQzE3Qzg4MjI4MkRFMjgwNjBBODFFCisxNEVFMzIzMDI3ODAyQzYwQzkzNTk0NzU2OEEwMjg2NTMwNEY3QzhDQzA4QUYwMTc0RDlEODg0NkQ0MTkxRjhCMERBREIwMzBBRkVBODZDQ0QxOTQ0MTFFOTg2RDA0RjVFQ0RBRDYyNkQ0MThEQjZDRUQwMjQ2MDk5NzA1NzY0RTVGQjExQkRDMDMyMkIzQzU5NjUxMTM5NjlFRDExNDIwMjc0RkIxNUEzMjdEMTY2MUQyRjlFRjlBRDg0MTExRDMwMzRGNURDNjUzNDYwMjg2MEJBQjlGN0U0OTREQjMKKzQ4OUNFRkU0Cis0QUJCRTk5RDUyOEE0NzUyODE0RTk3ODhCMworQzEyOTVGQjMxNUIzNTE4MDVGRTlGRjY1NUY3OUVGODY0RkUzNUM2NjM2NUFDNzc0NTQzMzE5NkZCQURDREYzNUJFODg4RThBQUJBQjg4NEVBMTUzMENGREU5NzM5Njg2M0RBNjk0NTU4MkU3Njg0RjQwOUNDQzJCRkJDQTcwNkE2Mzc3OUIyNTQ1NzRGNUY2NjU3MTgxODk3MDQ4RjVCRjk2RERCN0Y4QTcxRjEwNzRFNkJGMUY5MQorQTdFREM2NjAKKzk5QkUxNzc4QzQ3RkNFRUQzNjE4NDgyQzMwCitERTU0MjUzODAzRDEyNzI3MjdDODU1RTc1NzVGQTY2QjhGQjgyQjNGMzA2MzkyMUZGQjBCMjE4NkQ1QTlEN0M4RTk5RkI2RjYwMTA4QjVFMEZGNzI5RUZDRDEyRjJBNEUyODdBRjA3OEZGREIyMkQ0NjQ3QzAwOUE2NjgxODY5Rjg3QjA5ODJDODFCOTA3MEZGREY5RTkxOTZGQTRERUVBODEyNjMxCisyRTdFNDY1NAorODVFRkU3NkUwNzczMDQxQjJCNzU3QTZBRjRDNAorRTY3QjQwN0I4RTU3MzhDMDVGQkMxMjQ3NDBBMkVCNzIzN0YzNTlCQTMyNzE4QTAwRTk4NTk2RThGMDA5MjlFMkExMkU3MkQ0MzNEQkM0NTlCMkVENTI1NDY2NEQ1NDQxRjRGNTBCMEE0N0U4NjY0REEzQ0VEMzk1MDFBRUM2RDk2RDlBMTczRTg4NEI3OUIzOENGMUQ5Mjk2MDMwNTUwRDA1REFDMDQwNTdFMTkzNjMyNkYxNTMxNTM1MjI5N0EwOTdFMkQyREMzMkZGOTRGNkEzMzYKKzA0RUY1MjE5Cis0QzIzMDE3QTFDRDczMTIzMUI0M0VCMDBFQzU0Cis0QTJCNzQyMTdGQTgxNzAwNUMxOERGODY0MUVBOEZDQUQ0NzZEQkY5Qzc2NTRCOEFBQzA0MTEzOENEQkVGQjk5MEUwNjVCMThGMTA0M0M2NkQzQTlBRjNDMzcxRTlEMzk3OTA5NDEwQzUxMEM2NEYzQkQ1ODlENjdEMUEwRTQ1NzY4MjI3REZENEVFM0U0NjFGRjMwNzIyRTA0NkFDQTNBNDdDQUNCMTE0RUYyN0M1OThENzVCMUQxNkNEN0JDNjcxMTdCNUM5NzA3NUQ5MkVDNTYyQjZDNkUyODNFODI0QTUxOTIyNkVDMzM3Nzk2OEZEODVFQjA5REU5MTMKK0VBMDQ5QUQ3Cis4QjAzOEZFQ0I3RDc2NTdGOEFGN0JBMkYzRDFDCisxNEVDMzBDQjQzMDQ4NTI3M0REMDM1RUVBMDY4RTEwQzlDM0Q5MzZEOTUzNjAzNkEwQ0Q1QUZBNUJFMjA0RkRCRThBQjM5QzhBODkwNjFGMUY5RUM3RUQ0MkQ4M0Q2MjJGRTQ1RTBDQTUzQzZCRTZGRUE5N0JBMkU0QjYwNjY1OUJGNDdCODQ3N0I3Qzc0Qzg2NzU2MENFNDQ3OUU5OTZBNDE2RkNGRjc2MTQ0RTQ0RDZBRkUyMTM1NkQ0REZDMjg2MDExNjc5OTg3MTA0Qjg3NTcyMkYwMDVDREExMEUwMTA1Q0Y5NDI3MzNENDgyRjgyN0E5MTI4RUM4M0MKK0UwMUQKK0I0MkE3RgorMjc3NkExOUIKK0NBNTY1QTIyMjVDQjJGQUQ3Q0U4MUNGODhFCitGMUI0QUJGMTAzMDk0ODAyQzFGQzY2MTExQTUwMEUyMjBERTY1MDMxQTI4QjgyQjdGQjlENjBCM0M2NUJCNUFDNTcxQ0Q0QjM1MTA1QTUzMjFCNUY3NkIxOTU3QkNENDdBNTA1QjRCRDc5NkM4OTg0Nzc0OEZCMDg3RjFEM0IzNkIxMUE0QjgyQ0FBQTBGRkMwMUFDRThBNzM0RUUyNjVCRDEKKzBGMUMxOTlCCis3MTAyMTM5QUU3MjE2QzVDOTc1RUJFMjVGNDcyCis5RTU3RUUwNjU2RTc4QUU0ODU1MEM2QUNCNkFGOTFFMzRBQzBBMENBN0U1RTFEMTI0RTgzMTdFNzg1NTNGMkZGOUNGNkU5RkU2MTRCNTA4N0ZCNDlERUU1RjFERkUxRjVFNkMwRDdDQjczNzYwNzdCNzJGMTYwQTY1RUQ0OTRFRDQyQUZGMDQwM0I1RTUwMUYyOUU5MUMzRDExM0U3N0MxRDU4RjAyNTBFQkI1NzBBRDlCMDM0QjI3QTU5OTM0QzkzMkM1RDQzOTc1OTRDNzQ2MkI0QkUxQTFGOTcwQTc3MTAzQzcxQThDRTdFRjkwQ0MyNUYxMUI2RkVFNDMKKzAxNTcKKzI3MjFENAorQUY3MkYwRDcKKzZFMjMxRkE0NENFM0M3OTJDM0JEOEQzMDMyCitBMDdDQkIzNjM4NkQ3RDk1RDY4MDU2NUJBRjVGMTBEODRCQUNGQjRGNzk2MERGNkFFRkVGODZCRkFCMUMwRjJFOEI4MzFGNzY2REEwRDEyODE4QzQ0REQwNkQ4MkVBODIyMEU3NjI5NTlBQ0U5Rjk1ODcxQTE5ODVGQzVCRDQ2NjBEMUJCRjE2OURCNjNERjhDMzk4RUMyQTgxNTdFQjZCRUI3RjhBQTZGNzkyNUEwQgorNTZGNDdBMjkKKzk5RDZENzQ2MjFGMDZFRTIyQkI0NTY0NEU2CisxMEEzQzAyRERBOTI5MkQ3MERBNjMxMTA0OTU3M0I1MkY5QzFBNDc4NkEzMkM3RDg2QzA1NThGQzY5QTYzQTM5N0ZBNTc2QzZGMDRFRkUxM0M3NjQ3MTM0RUREMUY5RjBDNTVBNkEzMzlEMjU4QjUwNDI0OTUzRThBMDI5REY5OEU2MDNGMjMxNkNGNUZGMkVCRkM4RjdGN0ZDRDcxREFCQjg3MQorODI4NzZEMjYKK0JERjQzRjUwMzI3RkJCNUM4ODFFQ0QzNkNGQjAKKzAyMEIxMUQxNzUwMDExOUFGQjRDRDNFNUFBNzY4RUYzMzBERUNEOTUyNkY5OEU3ODc4M0REODJDOURBRkM0NUMzOTcxNEFDMEJFNkRCQjRFNUQ5NkQ4NDJCOTY3ODY0NEI1NzczMkU0QzgxRTVCRDQxQzE5N0ZDMTEwODE3QzgwQjdDOTVFREQwQzRFNjdGQUIxOTU4MkFFMjM0REVCNEYzNEI4REQ0MEU3NkZEQTM0NUQ2RjUxRTI3NDEzQjhGMUQyRjdBQTU3NjlGOENGNEMwN0Q4MzRGQTJDNzAKK0JFRDM2RTNFCis4REZBRUNBMjQ3OERFQTY5M0ZEMUVFNkY3NAorRkZCREQ2NThFQTVBRTc0RTk3MTk2NkFDRUY4RjY4ODY3QzREMEMyNTlCQjIyODBCNERDOUZGREM2Q0I2NjE2N0I3MjgyMUQyRUQ3MDM4MDc0RjMwN0Y3QTUyNkJFOThBQkQ1NTE2MjU3OTk1QjgxNDMyREYyOTYzQkY3QjYyOTk1NThCQjkxNzIwOEVDNTZGRTFBMTQxRjU5N0E5MTY0MTE3QUJFRDkxQzFEMUIwQkRDQworOTkzQzM3OTcKKzlCODFDNTE2NEY1NEE5Njg0QzJGRUU3NDBCCitDRjhGNjZBNzkyRjMxNTRFRERCQzdBNjVGQkU2NzFEQTIxQzE2OUYyNkI1RUFDMzEyQkNDMzQzNkYzMkI2Mzk0RUZGN0JENEJERDZFRDU5M0QwMUExOTZEMzYyNjY3NUNFRTYxRDI5NDY1NEUzMDdFNjFENDYxMkU4MTJDQzNDNzlGNThFMEFBODk1N0M5RTJFRERDNTZBODg5Q0Q0NjM3NTNFQThBNjMwMTg2NDhCMDJBRDJDOEJECis4QURFQTRGQQorRTQ5NDE4ODMzNkUxMERDMzQ2QzFGODlBQTlBQgorMUY4QzAyRDA0OEM1M0MxNUNBM0Q5RTFGOTVERUQ2RDFEQzkyRDkyNDkwQkJBNDc0MEQzRUNDQTU2NThEQzIzQTZFOERGQUEzNzEyRjIyMEQyMzk0NEI1MDFFQ0YzMTg1QUY4Qjc5REREMjlBMDcyRThCMDc4NkRFRTIxQ0M1QzFFMkI1NjhCNjNBNzIwMTNBODZGRTI4RTY0OEFCNERCOTlFQjc5RENGMkY4OEEzQ0MxMjJBNTcyNDQ4ODMwNTM5ODNCNDk2RTNERUVBMzk3RkRCOUREOTIzM0E4MjdCQjlGNTI3REU1OEQzRjZCOTlCRjY2MTA2NzNFNDBGCitGMUFDCis4NDYwQzBCRkIxNzA5REFBMUFFRDA3NkE4MjRFMTc0QkVEOEJEODUzOEY0OTE4RDNBNDg4QzdFOUNGNjZBNEYyMUM5RjBBQjZEMzc2QkQ0RjYyQjc0MDVGRTY3ODk0Cis4RjA5RUY2MworMTc1RDE2RDM5MUVBRjVFMUIxQjY4MjFGMzFEQgorMjc1NEQ0OTdGMDg2Mzc4MjM3RjUwNjA5QUEyNzlGMDY3MjNCNTUxM0EyNTlBMzlDOTg1MEVGNjZCNTZDNkFFODQ1MTNBNDE0OTc3MTdEQkE0NTY3NEU4MDFBN0RBNURGRjM1OTM4MDQ0MThGN0VFNEJBRUVEMzNBOTM4NzNEODAxMUEzRjlGOEM1N0NDMjQyMDMxMjgxREYxQTRDMzIwQ0Q3NUM1MTYwRjA1OTRFOTJGMERDOThBMUVEMTE2MDRBODU2QkZEQTk3MTAxQjc5NkEwOEQ1MkQyQzgKKzU4OTFCRjc4Cis2Rjg2ODdEQzYwRUJGQzE0QzY3RkFBMzExNgorNzFCQ0QyMUI4NjA0N0VENkJDQTc3RjkzRkNDNTRGMDRFMTE5OEIxOEJEQUJDRjMwMkQxRUQwRTJFNTNBRDBBRDA4QjcwMjM4RDVCQkQ3QkQ2MUVCQzE1QUVBNzg0OERDNEQ2M0VCRTM3MjFBMTI4NEI2QkMxNzREMEY1QkEzOTQ3Q0FGRTYyQkE0NEVCMDkxRTIwREI0NkIxMzUzNjQ5RgorMjBGMzZFRTAKK0ZFNzg5ODlFOEMzRjdBNEFERDQ5MjNERTkwNkMKKzEyOTY3OUNGNEVFMDExMjQzQzQwREY2MzI3NkY5Nzc2QUJCQTQxOEZCNjZENjVGQUQzMkU0MUI2MTREOTJGNDAxMDU1MzE4MDM2RjI4REExQUUzRUUzRjJCODcwMjdFN0ExMDM5NThFNDkzQjY4NUQ3M0Y1Q0RGQjJDQTI5REVDRUQ1NTMyQjdFRURBMTlEMTI1ODg3MUVDODkzOEQ1MzlGQ0I3MjNCQjM2RENGMzZBQUI4QzdBMTM1NTEzRTQ5NkZCOEVDMDIwMjUxQjcxMUUxQzNDQjUxODU4ODE3NzZGMjhDMjM2OUMwRjM4MzMwMTlBMkQyNzA3OTA2MworNjk0RgorMUU1MzM1QjMzMkNGMUM5RTU0QUMwMzFGMEE1RkE3OEU3NDE5NUFGRjI0NTA2MEE0MzlFN0M3NzMwRUVDN0M5Qzg1OTM5NworRDE1NzVDM0QKKzgxRDM4MjY0MUE2NkIyREMyRkU0RDAzQTZGCitDRUM1OTM4NzM0MTU4MjJBQjk3MkQxQUZERjJFMjNBMDY0MDJDNTU4MjAyMjg4MzE5QzEwRThEQzU5QzY0RkY4RDQ0REQ1MENBNzkzOTI1QjI3RDI3QTQwMDNFREU1QzU0RDdEMDkyN0IxQzYKK0YyQTM1N0Y0Cis1RDNCOTZENjg1NTJFOTVFMzZCOTU4Mzc2ODE5Cis4QUY5RTg4NUY5M0I5NThGQUUwMjNBQTRGMjUzQkRGRkU2Mjg1ODc4OTNDMkYyRTA0RDY4RjhERDgxOTY5QUYxODk3OTMzQkFBRjk3QUExQ0IzMDA5ODhDNjNBRThFNDY1OEIxMzA0QzA0ODk3NTg3NjQ5MzBCNDlGODNCQThCQTAxNkIzMDJCOTI0NDA2NTFGQzI1NTEzOTcxRDEyODg5MjQzOEQ2QjNFN0FGOEJFMzE3MkQ0N0FBNkMzMTNBMjc5NzMyNEJDOEU2ODY0NzgzNzE0OEFGNTM5NkVBMEI0MTQyQzI2ODc4RDE2NUUyNTVFNkVBM0FDMkU0NEUKKzQ0N0IKKzU2MTk4MjgxODgyQTIzNEZDNkY2NjVFNTRERkI1MTREMTFGQUM4Qjk4OTEzRDExMDQzNzUwMjhGMkM2MjIzCisxMzUyRjQyMQorRUM0N0NBNUJFQjUyRkQ1Q0U3QzkxNjZFNDIyNAorNjkzNEREMDA2QjY2RjE2NUI3RkE5QTI4QzQxMjY3ODk0MUNGQTcyQUQxQzg2QzQ0NTA1ODI0RjVGRUQ1OEY5NUNGN0VERTg2MzlDODRCNDc5Q0ZERTRDNTA2QTNERkMwN0NDMzNDRDdENTM2NzMwRkFFN0M1NUQwQUFBMTVERjlCREQ2QkY5NTUxMzg1QjlCREI5NzlDRTkwOEMyNEYyMDdCM0JEMUYzODc1RUZDQ0RCNjA0ODAwNzMxNTVBRkJEMkY0RDE2MDk4QTdGQjY3OEY5QTMyRTkxCitFMEUxODg4MworNTE5NDIxQjNEN0IzRjBFNDE0NjVFOUQ4QkQKK0FDOTE5N0VDRUFCMzYzRjg5NkJFRUVBMEZFQzc4RDFDNEY2RkJEQUE4MjQ3MjJEMjcxODA2OTY1NjdFMUM1NTk5RkMzNjFFQUVGQkVDNDdBQ0JBRkZERTI0RDY3NjIxQjRFQkY3NEU1OTYwRDFBRjBCQTY0OUI0MkRDRjk1NTMwOTczNTZFQ0VFOEZFCitGQzM3Q0Q2RQorQkQ4MDNDMkUxRDkxRkYzRUM2OUY3MDBGQzc0QgorMDQzOTM3NEZCQjY3Qjg3MjE0MTJCRkIyQjQ3MTY0NzVCQzU2NDcxQjI0QzFEQ0IzNDZFMEM5RThBMzQ4OERDQkM0N0MyNTM4NkY3MEE0NTY3OTVCOEZDQjg4NkM2QUE4ODg3MzkxNDlDRjVBMThBOUY2MTA2QjE0Qzg3MDQ0ODI2QkZFQjIyM0U0Q0JEQkM4NjhGNjJBRUU1OEFCRUY4OTlCN0UyNDk4MEY2NTg0OEREMjU5RkI0MTVDRjZENjM0OThCNTI1QUQ5QUQ2NDhERjE1QzI3NUIwOEZEMkM3M0Y2QTMyRDM3MTJFRDhGMAorODgzQjNCMDQKKzVBREQxNEI0QzU1ODJERUUxQUQ1QTk3OTEwQkEKK0E0Qjk0MzVGQzlEMzlFODBCNEY0MTYyRUUwNEFGOEZCMzg5MjNBRUVFRkU1RDY3NDUwRTdCMTkwMzZBNjgzNTIzQUJBQTlBOEYzNUVCRTI3NTY0RTE4QzFCNEY1REYzNzQ0NjBFQjg4OEVCRjIzMTg5RjA5RDQ3MTNENEZEOUIwODVBRThBRDBEMEM5RDE2OEIzMTU1RDQ1MkJGNkVDNzRCNzk2ODRCM0UxMUI1NkVFN0I2MUM5M0Y5QkU1QjM2RThFQkVBQzcwMzFCNTc2NUM0RENDCis0QTYyMUI2OQorRjU4MDE2MTBEQUFGNzJCQjY4RDA0N0Y0MTAKK0NEMTcwOUZGRTAxQUM0N0YyODFCODY2N0IxMDMyNkQzRkEyRkRBNUFFQkVCQTA2OUZEMkI1OEQ5NDY0Njc5MTFFQkU4N0ExNkQ3OEEyMkI4N0Y0ODZCNDkyQjY2RkZCNEI0MzM4MzZFRTU5QTMwREVDMkIxQjczMTQ0Nzc0NkQ2MDAxNkJDRERFNDc1QUZGNTgzQjdBQkE3MTJFRkYxQjYyOEZFQjlENDgyMzNERQorRUEyQzY4MzAKK0VGQTA5Rjc5QTRGQzAzQTcyRUZFQjUwNTM2NUIKK0I5QkE3OTdDQ0NBOEFDRUY4NEIxOEY1NUM4RjJCRTZDRTIwMTY4M0VCNjg5MDBENjQ4MTcwRDgyRTdFMzI2MzBGQzkxRjg3NDAxOTNGNDU1RUMxNzIyRURDRDExQkQyQ0JBQTRDMTU1RUFBMjlGMjczMzdFMUEyRDlGNkI5MUJCOEUxRTZFNjQ3QjM4RTY3MDE5NUM3MEMyQjJBOERENjdGQzM1NzYzMzU0NkE2REI0MTA4QzdDREZGN0ZEOENGNDBBNEE4MzgzQzM1RkExMjRCREYwRDBERkUzMzBCNzhDMjkwQTRCMkI1RkZDQTlDRUI1OTI1Njg3Cis1NDVDQ0FGQworMjRDNDhCMEFBRkFCQzk0MjdCNzg1M0I0N0QKK0Q1OUNDODQ2QkVFNjVEOTBFMzA4REI5M0FGRjdDRkQxRDYyQzNENTE1MkFDRkVGQjlBMEQzMDkyNjcxQkU0OUVBMjYxNUM2MjkwNUJFRTBDNjJEQjg5Rjg4QUNCQ0YwMTQzNjM0QjlFMEE2QzIyRUExQUZFOUU0OUY5NDc0ODE2RjIxOTg3QjNBMworNjFBQjBBMzQKK0NCOTI0NzE4MTgyNTNDMDRFQTBFMDkxODAzCitEOUQxNDAzNzNGNjZGNzA2MUUwMUUzNTE2RjQxMzg1MDAwQUREOThGMzJBMUE3RUQwOTRCMkUxRjZDRUQ1Njg5NjI1MUE4QjU3MDExNzFCMDY0NDQ2NjdEODU1RkE1NjgyMTVFQTQ1Q0QyRTJFQzQ0QzZGQTBCOUFEQjQ4NDQ4QzhFQTdDNjJCM0FCREEyQ0Q1NTZFMzc5RkE2MjE1NDJBNTJCODMyNTNBNDhFOTE3NDUwRDhBOTUxNDkyRDcyREZGNEFECisyM0UzN0Q2OAorMjM5NzI4RUVFN0VCNTk3RUNGN0I2RkMzREQKK0Q3M0I5MjUzMzNFQ0QzNzgyQUM3OUJGOUEzNzZCMkVCQjdGNTFGMzA5MzE3RDc0RkIwQjkwRTJDRjcyQ0ZBN0EzNEJBMDYyQ0I5QkUyMEFFQUU2MkU4REQ4MkZEQ0VFNkQ0ODNCRUFBNjkwRUFGNjJERTY0NTlCRUNEMTk4QjI2QzQzNzhBNTk5QjYzNjg2Nzc4MEUyODc1QTRCRDg1QURDNDc1RDgxOTY0RTQ0QTZFQTkKKzc2NEVEOTI5CitGNTQ5M0EzMjE3OTMxNzBDNzhGRUFFQUJCNDQxCisyM0YwRkFDODIwM0MxNEU1QTRBQUVBOUJDMjUxMDNGNDQwMzExNUVGNUMyNEEyQUZBNzFENEQyN0YyMjExNkEyOUVGRTk4NEIwQTVEMzY4RjREODgxMjFEMjY5OTEwOEUxQjBBQTk0M0I4QzRDM0RENTQ2RDM1ODI0MkE5OEE2QTgwMDcyQzc3RTlDRjk1N0U2OTc1ODVGMkYwQzJENzQyREI4NjEwQ0Q0NDQyQkY2RDhGQjdCMUYxRkJBOTk4N0JFODc1RTdFNjVGQ0Y2NzNDOTVDNkM3RjU2NkJEMjM0MjE3RDNGOTZBODhEODkxQzJDMUExMkVDODFGNDYKKzVEQjEKKzM0NTBERThDMUM0MzhBN0FFMkI0QkNDRDgzRTUKKzdFMjhFMkRGCis3QjVFNTAyMEI1NjA3QUE1OTcxOENCRDFCQTBCCiswQzJFRjE4NjcyQ0FGNEE4QTMxNzIyODU1NTdGODBCMTE4ODY0Q0ZBREZGOTNFQ0E2NzBCNDg2NkIxNUQyQUVBQjA4OTU4MDQ3MjhCRjA1NTVFRURDRDdFNUI2NkU4ODBGRTkxM0NDOEIzQ0ExQzZDOUY0OTRGN0RDM0VGOEU3OTM2NzA4N0QzNEMxNTE5OTlBNjkxQzM0Qzc5RTBEMDc2QTk3NDUyRDY5MkZCOUFFRjU3M0I2Q0I3Rjc2OTFCRDQ0OTJCQjE4MkY4RkFCQkEzMkU4Njg4MTA2REJBMUE3MDhDOEYwNERGQ0EwMjhGMTMyRkVEQTA4RkMzMjcKKzlBRUQKKzVERDczRDRCCisyOTlBNjZGNzRCQTg5MzgyNjY1NDc2RDM4QkU5Cis1MjdGNzA4N0FEODVFODFGMkVGNkRDMUYzQ0UxNDVDRUY3NDBGNkU1NjMxMUE0OEM4OURFNjVBNjJBN0Y4RjQ1QUZFNEZEMjhGOThBNkY1QTVDOUMzMDQxMjJGNTkyRjM5NEFDMDk1RTBGQTMyNzExOTY2RDU4RjU0MjY5RUYzMDUwMUI1NTJERDQ1MTA1MzkwMTMyMUI3Q0E1ODAyMUI1QjI4NjAxOTkwMDNEMzI5QTkxRDIwNDQzMTREOTM4NjNFOEFCNTA0MjIxMDg3RjM5Q0YKKzlCMEIxRDk1Cis4NEQ0MEFBRjY2REZCQzU1OTg4QkI1NTIwRgorODQxODkxQTQ4MTY0MTIyMkU1MkQ3OUM0RkFDRDE3MTZFNzc1MzI0OUVFODkKKzQwNjg2NDA2CisyODY0RDk4Qzk2NjMxQzE1QzFBMjBCRkQ2QkQyCisyQjQ1MDkyNjM2M0Y5M0JCCisxRDJCODUxMworNTQ3M0ZGQzVERkEwNEQ3QzFBOURDN0Y0Q0ZBNzlCQTdCMjdGM0ZGQTRBQ0FGRkFGQkQ4RjM1NDAyNDcwRTU5NDcyNEYKKzIyQzJENzJBNjdDM0FGMEUxM0Y4RkJFMTBCN0FGREQzQTdDRDk1N0Q1MDREREE2MjAyRUJENEMwNTQyODU2MTFCNUE4MkI1NDU3NTgKK0E5Q0UwNUUyODFFMTBCQzRDN0Y3MjEyNURDMTc0RUNFNDdERkUyRTJBQzdENzNFNzNCMkI1RAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgQ291cmllcgorL3dzdDpjb3VycHM5IDkuMDAgL0NvdXJpZXIgL3dzdDpjb3VycHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDExMWIyOTI1MWIyNzFjMDkwMTBhMDEwYjFiMjMxOTFlMjIxNzI3MjAwMTFjMjQyNzAxMTAxYjE3MjgyYTI3MWYyMzFkMDExMTFiMjkyYzI0MjcyMDAxMTM+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MWIyNzFjMjQyNzIyMTcyMzE5MWI+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDA3MDg+IDkzNDYgMTMzODUgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyNjcgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI2NyA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjY3IDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI2NyAzIDcxMzMgMzIgcword3N0OmR1dGNoMTIgU0YKKzwwZjFjPiAxMjcxIDE0MzEgMCAxNDIyIC0xIHMKKzwwMDJkMjQyYTAwMWUxNzJiMWIwMDE5MjQyMjI1MWYyMTFiMWEwMDIzMWIyOTI1MWIyNzFjMDAyYzFmMjkxZTAwMDQwYzBlMGYxNTE2MTIwZDE0PiAxNDIyIDE0MzEgNiA1NjcyIDAgcworPDBhMTAwMzAwMWYyOTAwMWYyODAwMjUyNDI4MjgxZjE4MjExYjAwMjkyNDAwMWQxYjI5MDAxNzAwMWUxZjI4MjkyNDFkMjcxNzIyMDAyNDFjMDAxZjIzMWExZj4gNTY2NCAxNDMxIDkgOTQ2MSAwIHMKKzwyZj4gOTQ2MSAxNDMxIDAgOTUzMSAtMSBzCis8MmIxZjFhMmExNzIxPiAxMjcxIDE2NzYgMCAxODIwIC0xIHMKKzwwMDI3MWIyODI1MjQyMzI4MWIwMDI5MWYyMjFiMjgwMDFjMjQyNzAwMTcwMDI3MWIyNjJhMWIyODI5MDYyNzFiMjgyNTI0MjMyODFiMDAyOTFiMjgyOTA1MDAxNj4gMTgyMCAxNjc2IDcgNTg3MCAwIHMKKzwyNDAwMWIyMzE3MTgyMTFiMDAyOTFlMWIwMDFlMWYyODI5MjQxZDI3MTcyMjAwMTkyNDFhMWIwMzAwMmQyNDJhMDAyMzFiMWIxYTAwMjkyND4gNTgzOSAxNjc2IDcgOTUzMSAwIHMKKzwyODI1MWIxOTFmMWMyZD4gMTI3MSAxOTIxIDAgMTg4OSAtMSBzCis8MDAxNzAwMmIxYjI3MTgyNDI4MWYyOTJkMDAyMTFiMmIxYjIxMDAyNDFjMDAyOTJjMjQwMDI0MjcwMDIyMjQyNzFiMDAyYzFmMjkxZTAwMjkxZTFiMDAyZTA0MmIwMjAwMWQyMTI0MTgxNzIxMDAxOTI0MjIyMjE3MjMxYTA1MDA+IDE4ODkgMTkyMSAxMyA3NzUzIDAgcword3N0OmNvdXJwczkgU0YKKzwyND4gMTE0MCAyMTY4IDAgMTIzNSAtMSBzCis8MjAyZTJmNmU2NTc0NzA2NTcyNjYyMGIxNmMyMDM2MzAyMGIxNzQyMDU0NDM1MDVmNTI1MjIwYjE0ODIwNjg3MDY5NmU2NDY5NmYyMGIxNzYyMDMyPiAxMjM1IDIxNjggOSA1MjI1IDMyIHMKKzw1NDQzNTAyMDUyNDU1MTU1NDU1MzU0MmY1MjQ1NTM1MDRmNGU1MzQ1MjA1NDQ1NTM1NDIwNzQ2ZjIwNjg3MDY5NmU2NDY5NmYyMDNhMjA2ODY5NzM3NDZmNjc3MjYxNmQ+IDExNDAgMjMyNiA2IDU3MDAgMzIgcworPDRjNmY2MzYxNmMyMDJmNTI2NTZkNmY3NDY1PiAxMTQwIDI0ODQgMSAyMzc1IDMyIHMKKzw1MzZmNjM2YjY1NzQyMDUzNjk3YTY1MjAyMDIwNTI2NTcxNzU2NTczNzQyMDIwNTI2NTczNzAyZTIwMjAyMDQ1NmM2MTcwNzM2NTY0MjAyMDU0NzI2MTZlNzMyZT4gMTE0MCAyNjQyIDExIDU1MTAgMzIgcworPDUzNjU2ZTY0MjAyMDIwNTI2NTYzNzYyMDIwMjA1MzY5N2E2NTIwMjAyMDIwMjA1MzY5N2E2NTIwMjAyMDIwNTQ2OTZkNjUyMDIwMjAyMDIwNTI2MTc0NjU+IDExNDAgMjgwMSAyMCA1MzIwIDMyIHMKKzw2Mjc5NzQ2NTczMjAyMDQyNzk3NDY1NzMyMDIwNjI3OTc0NjU3MzIwMjAyMDIwNjI3OTc0NjU3MzIwMjAyMDczNjU2MzczMmUyMDIwMjAyMDcwNjU3MjIwNzM2NTYzPiAxMTQwIDI5NTkgMTYgNTYwNSAzMiBzCis8MzgzMTM5MzIyMDIwMjAzODMxMzkzMjIwMjAyMDMxMjAyMDIwMjAyMDIwMjAyMDMxMjAyMDIwMjAyMDIwMjAzNjMwMmUzMDMwMjAyMDIwMjAyMDM3MzczOTJlMzUzNT4gMTE0MCAzMjc1IDI2IDU2MDUgMzIgcworPDM4MzEzOTMyMjAyMDIwMzgzMTM5MzI+IDExNDAgMzQzNCAzIDIxODUgMzIgcworPDQxNmM2OTY3NmU2ZDY1NmU3NDIwMjAyMDIwMjAyMDRmNjY2NjczNjU3ND4gMTE0MCAzNTkyIDYgMzEzNSAzMiBzCis8NGM2ZjYzNjE2YzIwMjA1MjY1NmQ2Zjc0NjUyMDIwNGM2ZjYzNjE2YzIwMjA1MjY1NmQ2Zjc0NjU+IDExNDAgMzc1MCA2IDM4MDAgMzIgcworPDUzNjU2ZTY0MjAyMDIwNTI2NTYzNzYyMDIwMjAyMDUzNjU2ZTY0MjAyMDIwNTI2NTYzNzY+IDExNDAgMzkwOCAxMCAzNjEwIDMyIHMKKzwyMDIwMjAyMDM4MjAyMDIwMjAyMDIwMzAyMDIwMjAyMDIwMjAyMDMwMjAyMDIwMjAyMDIwMzA+IDExNDAgNDA2NyAyMyAzNzA1IDMyIHMKKzw0ODY5NzM3NDZmNjc3MjYxNmQyMDZmNjYyMDcyNjU3MTc1NjU3Mzc0MmY3MjY1NzM3MDZmNmU3MzY1MjA3NDY5NmQ2NTczPiAxMTQwIDQyMjUgMyA0NDY1IDMyIHMKKzw1NDQ1NGU1NDQ4NWY0ZDUzNDU0MzIwMjAyMDIwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAzMDNhMjAyMDIwMjAzMD4gMTE0MCA0MzgzIDQzIDgwNzUgMzIgcworPDU1NGU0OTU0NWY0ZDUzNDU0Mz4gMTE0MCA0NTQxIDAgMTk5NSAtMSBzCis8MjAyMDIwMjAyMDNhMjAyMDIwMjAzMDNhMjAzNDM1MzczNzMxM2EyMDIwMzUzODMyM2EyMDIwMzEzNDMxM2EyMDIwMjAzNDMyM2EyMDIwMjAzNDM4M2EyMDIwMjAzNDM4M2EyMDIwPiAxOTk1IDQ1NDEgMjUgNjc5MCAzMiBzCis8MjAzMzM4M2EyMDIwMjAzMjM0M2EyMDIwMjAzMTMwPiA2NzkwIDQ1NDEgNyA4MTk3IDMyIHMKKzw1NDQ1NGU1ZjRkNTM0NTQzPiAxMTQwIDQ3MDAgMCAxOTAwIC0xIHMKKzwyMDIwMjAyMDIwMjAzYTIwMjAyMDIwMzAzYTIwMjAyMDM1MzEzYTIwMjAyMDIwMzgzYTIwMjAyMDIwMzEzYTIwMjAyMDIwMzEzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzEzYTIwMjAyMDIwMzEzYTIwMjAyMDIwMzA+IDE5MDAgNDcwMCA0NSA4MTcwIDMyIHMKKzw0ODU1NGU0NDUyNDU0NDVmNGQ1MzQ1NDMyMDIwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMyM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMxM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwM2EyMDIwMjAyMDMwPiAxMTQwIDQ4NTggNDIgODE3MCAzMiBzCis8NTU0ZTQ5NTQ1ZjUzNDU0MzIwMjAyMDIwMjAyMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMDNhMjAyMDIwMjAzMD4gMTE0MCA1MDE2IDQ2IDgxNzAgMzIgcworPDU0NDU0ZTVmNTM0NTQzMjAyMDIwMjAyMDIwMjAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzAzYTIwMjAyMDIwMzA+IDExNDAgNTE3NCA0NyA4MTcwIDMyIHMKKzwzZTMxMzAzMDVmNTM0NTQzNTMzYTIwMzA+IDExNDAgNTMzMyAxIDIyODAgMzIgcworPDQ4NDk1MzU0NWY1NDRmNTQ0MTRjM2EyMDIwMjAyMDIwMjAzNDM2MzczNzMwPiAxMTQwIDU0OTEgNiAzMjMwIDMyIHMKKzE3IExXCitOCis2NTI0IDIzMjcgTQorNzI1OSAyMzI3IEwKK2RwCitOCis2NzIwIDIyNzQgTQorNjcyMCAyMzgwIEwKKzY3MjAgMjM4MCBMCis2NTI0IDIzMjcgTAorQwore30gLTEuMCAtMS4wIHNvbGlkRmlsbAorZHAKKzAgTFcKK04KKzY1MjQgMjMyNyBNCitDCit3c3Q6ZHV0Y2gxMiBTRgorPDE5MjQyMjI1MWYyMTFiMWE+IDczMTYgMjM3OCAwIDgxNTIgLTEgcworPDA0MGMwZTBmMTUxNjEyMGQxND4gNzMxNiAyNTgxIDAgODY4MSAtMSBzCis8MGExMD4gODY3MyAyNTgxIDAgOTAzNyAtMSBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgQ291cmllcgorJSUrIGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMjgpIDI4CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzQgcHV0CitkdXAgMyAvQzAwNDAgcHV0CitkdXAgNCAvQzAwNDEgcHV0CitkdXAgNSAvQzAwNDIgcHV0CitkdXAgNiAvQzAwNDQgcHV0CitkdXAgNyAvQzAwNDUgcHV0CitkdXAgOCAvQzAwNDYgcHV0CitkdXAgOSAvQzAwNDcgcHV0CitkdXAgMTAgL0MwMDQ5IHB1dAorZHVwIDExIC9DMDA1MCBwdXQKK2R1cCAxMiAvQzAwNTEgcHV0CitkdXAgMTMgL0MwMDUzIHB1dAorZHVwIDE0IC9DMDA1NCBwdXQKK2R1cCAxNSAvQzAwNTYgcHV0CitkdXAgMTYgL0MwMDU3IHB1dAorZHVwIDE3IC9DMDA1OCBwdXQKK2R1cCAxOCAvQzAwNjUgcHV0CitkdXAgMTkgL0MwMDY2IHB1dAorZHVwIDIwIC9DMDA2NyBwdXQKK2R1cCAyMSAvQzAwNjggcHV0CitkdXAgMjIgL0MwMDY5IHB1dAorZHVwIDIzIC9DMDA3MCBwdXQKK2R1cCAyNCAvQzAwNzIgcHV0CitkdXAgMjUgL0MwMDczIHB1dAorZHVwIDI2IC9DMDA3NiBwdXQKK2R1cCAyNyAvQzAwNzcgcHV0CitkdXAgMjggL0MwMDc4IHB1dAorZHVwIDI5IC9DMDA3OSBwdXQKK2R1cCAzMCAvQzAwODAgcHV0CitkdXAgMzEgL0MwMDgyIHB1dAorZHVwIDMyIC9DMDA4MyBwdXQKK2R1cCAzMyAvQzAwODQgcHV0CitkdXAgMzQgL0MwMDg1IHB1dAorZHVwIDM1IC9DMDA4NiBwdXQKK2R1cCAzNiAvQzAwODcgcHV0CitkdXAgMzcgL0MwMDg4IHB1dAorZHVwIDM4IC9DMDA5NSBwdXQKK2R1cCAzOSAvQzAwOTcgcHV0CitkdXAgNDAgL0MwMDk4IHB1dAorZHVwIDQxIC9DMDA5OSBwdXQKK2R1cCA0MiAvQzAxMDAgcHV0CitkdXAgNDMgL0MwMTAxIHB1dAorZHVwIDQ0IC9DMDEwMiBwdXQKK2R1cCA0NSAvQzAxMDMgcHV0CitkdXAgNDYgL0MwMTA0IHB1dAorZHVwIDQ3IC9DMDEwNSBwdXQKK2R1cCA0OCAvQzAxMDcgcHV0CitkdXAgNDkgL0MwMTA4IHB1dAorZHVwIDUwIC9DMDEwOSBwdXQKK2R1cCA1MSAvQzAxMTAgcHV0CitkdXAgNTIgL0MwMTExIHB1dAorZHVwIDUzIC9DMDExMiBwdXQKK2R1cCA1NCAvQzAxMTMgcHV0CitkdXAgNTUgL0MwMTE0IHB1dAorZHVwIDU2IC9DMDExNSBwdXQKK2R1cCA1NyAvQzAxMTYgcHV0CitkdXAgNTggL0MwMTE3IHB1dAorZHVwIDU5IC9DMDExOCBwdXQKK2R1cCA2MCAvQzAxMTkgcHV0CitkdXAgNjEgL0MwMTIwIHB1dAorZHVwIDYyIC9DMDEyMSBwdXQKK2R1cCA2MyAvQzAxMjIgcHV0CitkdXAgNjQgL0MwMTI3IHB1dAorZHVwIDY1IC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTI1NiA5NzggNzM5XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjI0M0UwRUM1OTM0NENFRjM2OTY1MEEwMzdCNDM4M0IwM0Q2CisyNEMzMDZFODdFRkRENDc3NUVDNzg3NDIKK0ZFRkNFNDRCNzY1NTc0NDY2QworRDFBRjdBODIKK0NGRTE5RkVDMDcwNTUxNzE4MDNCRTM1RkI2MUYKK0RGQTVBNEM3MzlBNEUzOTU3RUI3QzY2MjMzODQ0QUM1MUE2QTkxQjQ1Qjc1RTZBRjFGNzY3NzlBNEVBMzlENTU0QzY3MUYwMzlGNkVBMDkwMkVFQUJDMTMzNjNCRERBNTEwMUNBMTJCQjgxNTZFRUM1QUYwQkY5RTZGRkQ0MUUzRTgyOTc4OTVFMTU1NEY1NzMxNERFNUU1RTcwQzMyREE0N0ZEMzBBODUyNUQ3RUU5QzYwNjA3RURCNkZEOUY4MTZCQkE5NDE3Mjc2Rjg1Cis2MEY1RERCNAorQTM5NDhCMzNFQjIyQjgyN0RGNjgxREJCMTkKKzI5OTNCNTUzQzZEMTcwNzZCNEI5RkIxOTNBNzlDOEEzNkVFQ0Q1RDRFRjBGNTMyNDM0MjkyREVGOThCQzBCN0VENzhGRDg0MDFDQkU4ODMyNTgwN0EzNEI5RUNFN0QzMTI5MDhCMkJENkE1NjU0MDkwREI0NkQ2Mzc0MDY2NjhDCis1MUZGNTg2QgorMEE0NTU3MjdDM0Q4MjFFNTM3OUIxOEU3Q0YKKzczQTBCRTg0M0NCODQwNUNDNDFBNzVBODA0ODZERjk1NTkxNDAxQUIyNDdEOUZCQUFFRTZGMUVFNTVBRkNBQjE2NzM5RjkyQzE3RjlEQzQzMTczMEE4NDc5NTA3QUZEOTU5QUM5MTlGNkExNjk3OENERDRDMEQxNDY3RDZFMQorMzk2MkRDMkEKK0VDRTYwM0RCRjc0NzEyOTRBREQyQ0QxOThCMjkKKzUzMjkwOEM0QTUyNjVBNEY3NDYzRUNENTlCREE1NUQzNEM2QUE0NkVCQkE5OUI0MTdGNUM0Q0Q5MDdGMTIxREYwM0Y3QjQwMjI3MDFFRjc0QjgxQjI5NzZDODZBQ0ZGOTU1QTU3OEFERDhCOEE5N0ZGNzE1M0U1MDI0QzFEMTZFRUM0NkM0OUM4MTYxRTgwOTA4RjY3NEU0RDk4MkI3RUU4Mzg4MTZFMzRCNDcwQjQyOThBQTk1MEY5MUM3Mzg0N0FFNTEzQkQ5MjhFMUFDM0JCNUI3RUM1NDVDQUY4NTQ5RjlBM0QzQzY1MUNFMDk4RjhDQkQzQ0ExREFDOQorQjFFQQorRDExRjUzRjI5RTY4MzZEM0Q1QjI4NTY0Q0FFNjM5MzIyREZCQzk5QzRFMDkzNUJEQUU3NjU5NTJCNzBENTBBNTRFMEIyMzIwQjY2MDIwMzAxOTYwRkM3NkI4NjdGQTg1RjFGOTFGMzI5NEYwODNFMzY4NDgxNEUzMjE3RjA0CitCMzVFQkU2RAorNTlEMjQyRDY2REM5QjQ3RTQ5ODg2MUYxQjkKK0FBRjgzRjM5MkY0NzMwMTM0MEIyRDAxNDBFRUE1RENFMkRFNDczQ0RFRDQyNzIxQzI4RUQxMEU4MjhENzQ2MjA3MUY0Qzg2OUVBREI1RkRBMjQxQzlGNkI4OEM3NzQ0RTlEMjNCN0Y2ODM5NTVEQ0JGMworMjgwODE1N0UKKzVBMkMwQjY1RjlCNTVEQkJFRTk4MTc0MzNBCis0QTlGOUYxOThFNjE0QzAxMjUyMjM2QjkxNEVGM0ZFMTY3QzMxMDBBMzY1QUNECis0RTlEODYwQgorOUU1QTI3RDBDN0Q2NDJDMDI1ODlEMjY4MUYKK0NBREM4RTA0REJCQzZBNkQ3NUJCNDhCRTE5Qzk4RkQ3QjEzRDM1MjE5RjBBQkY3QUJDMENFRTgxNzE0MzVBCis5QTFFRDNGMgorNkRBNjc1MDREMDFBRThBQTk2ODFCQjlGNjAKK0RBRkUxMjU4MTdFN0NCRUVENDlERkU5NzQ5NTYyMEE1NUZBQkQ5Q0VENjhBNkMyNzUyMzU5N0UzCis4NkUyRUY4MgorODMxQTYyRDQ1OEM2M0RDOUYzMzIyOUEzQTEKK0ExMTQ5MUEyNjcyQjY0MEE3MUQwMDJEOTc3NEQzREY5MEU3NzgxMzkwNzY4OEU1QjlGQTI0NDgwQjQwNUMwNzY0QUNFN0M1Nzk2Q0NGNUFFQzVGQzkzRDJEQTk1ODE5RjRCNTcyNjM0QTczRDlGQzlDQjBDOEVCMkU5MTU5QQorRkM1RjZCMUUKK0VFRjNBQ0Y0QkE3NkFDRDQ0QUYwOEIzOUQ3CiszODNEMjcxMzQwRjY4RTA2MTdEM0Y2MEU3NTBDMzg2MkE2ODNEMjVCRkQ4QjUxRjRCODA2ODJDQTREMjA5NzZDRjQxNUYzQ0FCQUExOUFFQjcyNDBBNEUyMDQ1OUNBNkFBNzUzOUQzNkUzMkUwN0EzQzVGQ0VFRDcwQjc4RkQyNEM1MjhDNUNDQUMxNzlBQTVBRkY3RjZENUVDNzNCMTc1MjlCREZEM0NCMkIxMkFDQUEzMzkKKzlENEY5MjQxCisyOUM2RjBGQURENkEwQjczNEU2MTBFNjQ5QUE0CitCNTQ5OEVENzVDMDM2REE4MTRCODVCOTY4MzQ0RkFGNUJDN0UwOUUwQTVFOEE4QjU3MzlEMTZDOUQ5QTVEOTExOUIyRkYyNjU4RjI2NkJGQjY3NjQyOTFENjM5RTA0QjY2MTdGMDdBQjNFOEU5QkQ3RDNFM0JBNDIwMjY3QzJENjY4NDM1RDMxNjg3Mjc5QUE1ODEyNjEzMkFDNTlBMUI2OTZBQTdFODI3MUI4QjJDNThENzhFRTI0RDQyMTgwRjczQURDNDhEQ0E0N0FDN0E2RTAyOENDMDlFMjk5M0QKKzY4NDVBRUMzCis4Qjc3M0ZCQUJBRTU0RTQzMzNFMEVGQzdGQQorOTFEMkU5QUJGRjBFRjA4RTEyMjVDOEI2RDQ4MjE4MDhBQ0M3RTZGMjE1OEQxQTY3MzA3ODA4MkI1MDkzNTM0Mjg4RTBBMTY0QzcyQkMyMEUwRTdEMDJBMDM1Njg2NDc0MDFENDAwMjRBMkQ5MThEMzMwMjY3MzU4RkU3MDAxRkRBQzVBOTA4NEEzQzIxOTA1MUE3OUQxMzEzMjE4QzZBMzNGN0FEMjBDNzhCRjcyMENDM0JFRTE4NkEyNjlGQkM4NTYKK0YwRkEyODMzCitEMURDNDcyOUUzOTE5NUQ2MjFFRDUxOUE1ODk4CitBMzFEQTE3MzI0QUVGNzc2RUY5QUZEMzY1QjM5MDNCNEVFRkMxMEIzRTNGODdFRDlGMjdBRjNDNUY5MDkxNUM0MDFBNTlENENEQ0FENzgxNDAxRDBDQjU5QzczQTJCRDY3NTFFNkM1REMyMjRBNTVFQzZBQTM2MjkwNkZFMjMyOTVBMkI5QjlDN0ZCQUEzNTEzQTJENjdBMUNGMUMyRDU5Rjg1NThEMzU0REUwODk2RTkzRDJBQURCRjdBMENGQkVFMzkxNkVENAorMjczRTdCMkMKKzc5QTE1MkJCOEFBOEVFNjQwMjEyQjk4NUJCMkQKKzAwMTk3QUVFODVDRTNGRUUzQjUxOTJEQkM4RDExOUFEOTNGMThDOTlEQzMxMDk2RjlFRjUwNEU4QUE0MUY4QjIwOTdFNzYwNDUwMDRCODcxOTExN0VGMURDMEI5RTgyMUExQ0E3NEY3QkZEQjk0QjgzMTRFNUFEQzdGM0RCQzVFNTUwNDM1MzcxMEM5RUI5QUZGQzRBRDk2OUZCRjlBQTc1ODM2MDdENjU1NjQ4MkZFM0I3NTI2RTY4Q0Y2NUJDN0YxNDRGN0FGQ0Q1Rjc2OEYzRUIzNzc0QUI4REE1N0YwNzU5MUIxODkzNDk1RUREM0E5RTMKK0ZBQzhEMkUzCis5MkRGNzIxRDkwOUQ0RTI5RUMzNTVFMkUxQzYzCis1NjE4QkJGRTUyQjJDQjM1Q0Y1RjlDQkI3N0JENzlENTEzQzRBQTc2QUQ4MEU2OUYxN0Y5OTI2ODNCOTcwMzNBNzJBOUU2REM0NTE2MkE4RTc2MzIwMzI1RTAxRTdEQkYwOEVFRDc5NjMxNENBMTI2MzlCQjNGODI4MzQwRDA2MjcxNENGMjM2OUIyMkRCMzQ5MUFGNzAyQTA3RTJGRjRCQjdFNkY3QzE1QUUwQjdFOTAzMkVFRTFDMzc5MEY4NEU5M0JDMTczOEYwCis3NkZCMTlCOAorRkZCRDUwNkE2MjhBMkE5MjE5QUI5QjdCQzgKK0Y3MDM3RjQzRTdGOEYyNTZBOUYzNzNCNzI3N0Y2MkVGODNGQzAzMjAwQTMyREY2NERFQjZFQjIzNkQyMTY2N0VDM0M5MUZEOEY0NUJDNDAxRjcwOTc2NDE2MjgzM0Q5OEFBRTFBRTE5NjY4NQorMDFCRjdCNDYKKzAzODMxNERDRTZBN0Y0QUNGNEVFQUQ2OEY5OUYKKzhFMzVFNUE4Mzc3NUQyOTlFQjIxNUNFNzAzNDI0RkI5NERGMTgzMkUzOTBGQTUyQzQzRDBCQjQ4NkREQTdGNEVFNTBFRkQ0QzY5MjgzNEFEMDVCMTlCRTk2QkJBMEUxRjI2NUJCQkExMERGNTYyOUU0RTNBMkVCRDU0QTIxNEZGNERCODIzOEZGMkFFQkFCMTIxNUQ5RTIzQkIwMjM2QjdFOUQ0RjQ5NzlFNzUyQzY4N0VDQjVDNjExRDY4NkZDQzU5NkFDQ0YzNjJFODE4QzU1QUQ0NzlDREI4NzAxNEE3Q0FDNkUzCiswRUIyMUVBQgorMkRGN0Y0QTgyMkZDQjhDN0M5QjI3RTVDRjFDNgorQ0RGRTRDNjk3MTNDN0FENUNCQjE0NkMwMjJBQjhENkNGMEUwQkFDMTBCNjg5NzNCNkUxODQ5QTc0OTQ5MTQ3MTIwOUVERThEMEIxODNDRUUyMTUyMzEyMTFFMTM4RUJFMUYyRTI0OThDRDk0MTU2RDJGOEQ5RTJFNTRFM0Q3RjEyQzZGRDg4QTk1RDgzNjMwODM4OEUyQjkxOUIyRDUwNjRGNDNBMTREQkVCQzU2OEI1NTk4MjJDMUY2QTEwQUUyNTg4QkNCMTVERjc4MjhCMDlGQjZGNUFEMTgyOEFEODY2QjU5MDNDNEQxMEU2MjQ1Q0I4MEQyRUEyNUYzCiszNzMwCisyRgorMkI3NEQ2ODAKKzhEM0VDMjVBOURDOTg4MzVGNjU1MkNFQ0Y2CiszQzg0RjgwNUUyODc0MkE3NjJFMUU5ODk1MzlBMjMyOTZBODZBQ0I0QUZGQUVCMjM1QTdDMEM0NUY1NDE1MzYzODdCQTcwQ0REODBDRDFERjg3QjE0NUMwMzkxMjhFNUFFMzY0MjYzRThCMkQ2M0E1QjMwQThCQTA4QjQ1MkM2MUExQTU0RkUzQTNFODFBMEFBMzlGRkZBRjI0MDM5MDdBNzIzNDlENjJENzc0MzQwQzlFNDRFRDUyREJGMDFGRjA4MworRjMxNjZCNzYKKzdGMjNFODUyMUE5QjgyOUZCMkI5RjdDMjkxCis2NDFFNjYyNUJCNDhFMzZGNEU1OEYzMDAyMkU3MTQ5NjI2NEI1NDNBMjVCMjZENTFFNTlDNDlERDcxMjBDRjY5NzUyNEMzMTQ1QzVBMjUxRDk1RkEwMkI3NTFCQTgzNjg3RjlENEFBQ0VCODI0QzE5OEFCODBFRDVGOUQ1NEQzMTREQTVGMzRBRTIzMDQ3NTY4Nzc2QTFGOENBQjMyODlERjRDRTU2RUQxODZBNDhBNDNCMEVCNzQ4RjZFMkVBMEY4NkJCODgKKzQ1QjEzQkVBCisyODc3MDFEOUJCMTQ1QjBFREMxMjkwQkJDMEI3Cis2M0MxRkVBM0U4MjVCOEE3MEQxRENGRjRFMTY1OTg1ODc5NUVGQzlFMEY0NDVEMEZCNUIyMEY1ODMyODQ1QzdENEQ5NDU3RTQ1QjQ5RkM0NzQ0OEMyRDAxMzJFNkVCOUE1MUI0QTRCODQyM0YxQTQ5N0E2Njk5REJGRkE5Q0Y4REJFN0Y1NDQwOUFERTMyQzk1M0Q3Q0M3OEM1N0NGQUVGN0QwOTA0Mjc4NEQ1N0JBNUI2NEYxRjhEMjc3OTlBNUUzRTE2NjFBMTRFN0Q3RDMzRkZCMDcwMjczNkFGMUJCQjE0MUVCMUYwRUE3MDQ0QzVBRDU1NTZENDgwMEUKKzVGRjMxNUFBCisxNkU5RDk4ODhBMjhGNkM5OTBGOEVBRkVFMTAyCitENzU1QUI2QUE1OTdCMzlENjJBNTcyQTgyNzRCM0U0OTQzNkM4MkRDMzU4RDlDNkJBMEE5QkIyNDNCQUQ0NEMwRjNCRDgzMTBENUVFNkM2NUFDRDhDQ0UwQ0E4MzUzQzFGRkZFNjJDMTc0RDJFNzIwQ0IxNzU3RDQ3NkFCN0ZDQkM3NTlFM0E4OTQyNDE5MEY2MENDMzExQzBGOEUwMzM4MTkyOTk2NTUxODZCRUQyNEE4RDU1MUVCRDUwRUZGNEExOUU1Q0QwQUY1QTQ0RUQ1RDIKK0ZFMUYyMjJGCitGNzQ4QjlGNDAyODlGODhEMEEzQThDMkFFQkUyCis2RDMxNTdFRTJGNjE2MzcwMjVGMkIwMURDQUY3QUE1OEE5MzUzRTMyMTIzMUUwMkIxRTEzQTdGMjZCRDgxM0M3NkRCRUY2MEFCQkJFMjQ2MjI5NzkxMEJERTAxOEI0QjJGQzI4QzFGNERBQzkxODdDMkRCMEExRjNBMTU5MkY1RjE5N0QxNjdERjAyQkE5RDUyNjA2MTJCMzcyNzNBQTIzMTIxNkQ4RjQwOUFGRkFCN0M4REFDRThGNDMwNDA2OEZEQUJDMTk2RjA1M0Q3RkNCRDRCN0U4NkIxQkJFMDQ3OUNGNDJCREQ5QkU4RDc2NTI0RkJDQjc2QTNFODEKK0U3Q0IKK0JBM0U0OUQ4RENEREEyQThGRTA1NDIKK0JGRjVGOTlECisxNTNGOTM3NDU3MjhCOUVGOTQwMjI3Q0Q5NAorRDQ3NTk2OEFGN0I4NDgzRkU0MDhDOTg3NjQ3RUIyRDM5N0E2RUM4REFEOUFEOTgzNTEyNkQ4OTdGQzg0NUJBRTFBREYzMjg0M0Q1MzYxRTUxNDU3QkI0QTgzQkIxMjQzOTczMDc5MjU4NjBCOUY5NkQ2Q0JCRAorNkU0RjRFQ0UKKzQ1MUYxNEZDQjlFRUI5NTgyRDZBQjdFREUyCitERTZBNTFCNjM4NkM4MTY5ODJFOERFMjZBN0FENDhBNUVCM0NGQUEzRDBBMjRCMDEyMUYxNTRCQ0FDRkRBQTkzMzdGRTQxRkUxOTBEMEI2NDVCRTZENDc3OTE1NUNBNUVERjQ1M0FFMDdDMDgyNTJENzVCMzYwNUZENEMxMkI3QTgwQzZGOEFFQjU0MzYxCitDRDdDMEVCNQorMDJGOTFERTAxRTEwOTg2RUU0NzA2RjczNjZCMworODU1QzQ5Q0IyNDhCMDUzQjQyOUQ1MjdENEUyNEE3NjYzQzFCOUI5RDIzMkQzQzJFMkY1M0UyMTY2QzZFNkYxOTkxOTM0QzA3MkEwRjMxNTVDNEQ1MzhBNTYwMzZGMDg5QzE4RUMzMDY3NENGODMyNEQxMDBGODBCNEZFOEFCRDFERjQ4MDQ5QzIxNTRBQjgzOEVCQURCMENDQjlDODAwRTM3MUM0REVDMjNGMzVCMUFGNUNCRDQ0QjEyQkU3ODQ1RjdDRjI3NzhCNUUwOTIxRDU4MEREMkFFMTlEQ0YyCiswMkMxMTk0NworNjM3QjM5Q0E1MUFERTNBODk5MDk4MEVFRjIKKzdGRjMzQUNCQzA5QzQxNUJCOEFBREYwQkM1Q0M0MTUxQjlBRTQ2MjhDREM5NTkzOTM2NkY0NkEwQkY4MkZDOERFODI2MDYwQzg4MUE5RkRFQjU2Qzc2NTdCOTdDOUQ4OUVCNjRDRjMxMDgxNzRENzlGQUNDQjk5NDk3NTI5QjUwQzNBN0U4MUQ4MDYzNzEzMkFDRDdGQzMxQkI1MzE1RkQ4NkJGRThBMkNCQjM3NzczRDQxN0I0MkUKKzZDOTQ3MjY5CiswNThGNjg5MDBBNDYwRTcwNDhEM0U5OTA4QgorNTlEQjNCMzVCN0Y0MzM2MTNDQkU3QzhENTY5NUI5RUUwRUU2OTAyQjQ0RUQ4NEFFQkY5OTQ0OEM0NzIwN0EwREZDRjVCNDE4M0Y4REQwNzBENDVEOEY3Mzc4RTQyOUFCNEREOUM0OTEzMEEzREYxMkQyNzg3MDA3QkVFOEJFRkIzNkVCRTUxMkRGMDExNTY0RkNDRDE4OENBMjc4NzNBRkNFMkE2MgorRjIwNUUzM0QKKzFGODgyNUEyMEU5NTQwODA2QUU2NDA0MUY5N0EKKzcyNkQyNzA4NDJFRDkxRkMyRDUyQ0YwMTQzQkNDQzk0N0Y1MzIwMzgyQjU2RTY4NDZGREMyQzk0Qjg1MUM2RDdGNjRBRDI2NjA5QjQ1OEZEREQ2MzVCN0FFOEU1QTRGMDlDMEU0MDc3MDhFRTY5QUE2MkRBNTQ4RUE0M0ZCOTVDRDhFQThDNkZGODM0RDE0NzBFNjVBMTZFQTkxRjgxRDA4OTQ2RDgxNjJDMjRGMkUzRTFDMkFCRkVGNjVDRDA3NjU1MURCNjEzOURGQjhBRDRDQUMwCitDQ0ZBNjFGOAorQUY0RjY0NjEyMTgyNjFCMkYxQjc5QjIxQkQ0RAorRDU3NDE0OTU4NDg2QkI1OUU0MTIyMDFGNjVBNDU2RDNDQjBGQzA0MzdGRTI0MzhBMENGRjEzNzgyMjI0QzE1NjFBMERBODkzMkQxQUQ4QTcwQjBBQTZBNkI4MTFGQzZEN0E1QTJFQzlEOUIwQzI2RDVGRkQyNEQzQUI5REJBRjUwQzI4QzJFNEI5RjgyMzY1RkZGRjlFMTc5QTAyNTZEQ0RGOUMxMDJDQTYxMTE1MkExNkQwQUQ4OERFOTAyMEYzOEM0NTU5ODhDNzVEMDYyNUNEMDc5N0IxNDNBNEI1RUUzNjVGRTI5RkU4OEY3NDdCMjczNUIyOTlBRUFCCiszQkNDRkVGMworM0Q1NEY4NDQxMUI1MkRENEFGMEZGNzJCNjhCMgorQzg0REI0NDFEQjYxRTE5MEU4OUZFNTRCMzcxRTM1NzI0MTE0RUU1MzlFODJFRjc2RDNFRjM3OTAzRUVGNzZFNDc0MjI2NDg0QTNDNDQ2NUE3NDg2QjA2MjczRkIxRjlFNjEzMzY0M0Q4RDAxRTg1QjJFNUE5NzA3M0VDNjlGRTI2QkRCOUMzRkQ1NkJFMkE5RDVEMkQwQTRCNzgxMzlGQzY3MzlBQkQ5MEM3RkJFRkRGMzRFQTkxOENENjZCMDY4NkUyQUE2RjM3REIxMDc1NUI2RURCRERFRTE3QkRENTQ2NDhEQ0ZERTlERUNBREZEQjg5QzkyRDRDQTMzCis2NDlDCis4RUQ4NkQKKzA2RjIzMDU0CiswODExRTE5QTJGRTA4MDQ3MkREMjdDODAxOAorQkVDRDgyOUE1QjRENjVEQTMwQjc2RTg1NEZDREU4MjQ1RUVEQTg0MTU3RTQ4NjEzMkJEQUM2NTM2NkQ0QkY1NEQ1NUY4RkQ1OUJEMDJBRUU0NENDMDRBMTNENzNCMTlEMkM2RENBOEJBN0ZCRTIwMzk5Mzg2Q0ZGNDQzREFFMzEwMkJBRUNBREJFM0QzQUUwMUY1OUJBMjU0MEI4NkM2QjY1Cis0MzU4NkJDOQorRTdCOUM3NUE2MzZCOEJFMUUyREQwNUQzRkIzMAorNTRERkY0NkYyOTMxRjBBMjY1QkJEOEQyQTk5ODVBNEU1NkE1RjAzQUYxOEEyQUM0MzlGMjA1RUE1OTRGOTdGNjI3RDk3NThDQzZEODU5NTEwNjJCNEQwQTI0MUU3QUNBRkFBMjc4NDJENTM3OURFMDdBNDg4QjIwRUVFNUUwNkZGMzM1OEUyQkQxNkI1NTE2QTE4OUFFNjExOEUxQUZCMTE2RjFEMzE0NTg5MTEzRDFBRDI2RTBCMDJGREQwNDgyQzZCQkY4RDIKKzVEOEQ2QjQwCis0RjE1N0I5NTUyMTc4QzQ1N0FBNDk2RkUzNworQjM0RDQ2MkVFODlDNkJFRjhEMDBBNUFDMzg5RENFNTk2RTAyMkUzMkVDRDgyN0M4RTI2Q0UxRTkyMjAxODU2MzY4QkY1RDk0QjczMzU1NzAyQTI3Rjg3MDU0QjY0QjhGNTI0ODhEQzQ2NDA1RDExNzA0NzVFNjUzN0VFN0ZENjE4RUIyRTEzMkRGNjU0N0RBNEM5QThDRjI3QkU0RTE4MUI1NzU0QjNERjM2RjZFMjgzOQorNzczOUYxMDkKKzdFRjdFOUEwQ0M1OTMwNEMzREE5NDlDNUYyRjUKKzdENzlEODgwN0MxQTFCRTkzRjA2REJGQjNBOTI5NUYwQkI3NUJBQzhCREMxQUU1NzREQjRFMTVENUQ3Q0E0MjcyRjVFRjhFRjY1NkI1OEVCQTM4OTBBNzQ4RTM1RTUwMkI3NjIwQjY1NkUyMTQ5RjI2N0ExNTczRDQxREQwOTFDNzhGMUE0MkY3ODVEQTQ1ODIzRjIzQTU1QTIyMEQxQkEyNEI3OUI4RjE5QjY4MTIwQ0YyRUM0RUQwMzA4ODdBNkU2MzYwRTVEMzBFODRERDM2QjY3OUQ5MUMxQUMxQzlFQUZGMzQyMENBNjgyMDA1NzExODZBQUMzNUNFOQorMTZERQorODJCNkQ5QjA0QkNFNTJGRTkyRDU2MjcyQzQzRkNFQUEKK0U0MUNDQTY5CitDMzU2RkJGOTQwNDkxNTc5Mjg0RjIyMjBCRDRFCitGMTIwMTdGQTUxOTJFRUI1ODAwM0I5QzA2NDI2MDVGRjJCRkZGQjdBQTRFRERFRTNGNTEyMTQ5MTc1RTkxMDJGRjhERUU1QzM0N0RBRjY3MEVGNDY0MTQzNDQ1MERGQkVCRTAxMThFNzE2RjY1M0Q1QjAxQjRCMzU4MEI4MjU5M0MzREE5NUE5NDFDNzQwMzM2RTVEREYzRkVCODc5QkFEMjFGNTk5QjFBMDk2MDc3ODkwRDhEQzU4OTVFNjIzMzBEQ0NCMDI3M0JERTcwQzgwOTUwRUVBMkRCRURGNzVDNkUxQTczMjNCQzAwRUI5Q0U3NkE2N0VGMjYyOTYKKzNDQzUKK0QwMDA1NTEzQzg1OERCOEFFMEExQjFDMEU1NTY5NzY5N0NEQkNDRTdDRUE2QzMxRkQwMTFGMjcwQTIyMjgwMDE2MkEwMzI4MkQ2MEQyQworMTc1MTgzM0EKK0VBQkQzMjFEMDFDNzI5Q0E0RDQ5QjJDQzQ3CisxN0VBQ0RGM0JBRUY5OTk0MEY0RDdERjk5NEJBRDBGMEQ5QjY3RjlFNzVFRQorQkE1RDRCM0UKK0M3RjlGMjNGODZCRTk0RjU1NUYwMzNDNzA2NDkKKzM0RkI1MzBCODY2RkFBODNCOTFERkY0QkM1M0NFMjI1NjA3MTNCNTEwODVDRkE4Mzc0MTNFN0M5NkQ1OEUxMEZEOUZBMTUwNzhDNEQyNTZDODcyNUY2NTcyQUZGNzZEOTgwQTI3MUFBMkQxQkNEMkM0N0U3NkQwREJDRDI1Q0JGMjVENTM5MEE3RUFFQTUzQUVCNTUwREYxRjQ2QjJBRDMzNUZEOTc5OTA0MEZEMzcxOEM5NTA3OUY2MjJENEZCMjkzNzBFOTdGNzIyMkJEQzk4MjZBRTE2QjI5NkFENzM0Nzk1QTQ2Q0UzQkFEQjhBMDY0Q0Y5OTlDMzFDMgorQTYwRgorMTlGM0U3CitBQTM3ODY4NAorNDAyMDY4RTBCMzQ1QUUwQUQ0OUE4QTFDOTUKKzBEOEQyMDU3OTY4Q0QyQUE2N0E2NkMyQ0FBMEE4OERDNjJGQzM2QTlBODE4QTIwN0JENzQ1RDhDMzU4OTgyMDdFODM3OTc0NkZEMzA0NDgxMDI4N0M4QzhEMjlCQ0EyNkFEMTA2QzAyNzNGRDg4RTk0NENGOEMyM0EwM0I2RTZBNjQ0RDA4RDU3OTNFQzhGNEYxQ0RFQ0Q4RUY0MjNFOERCQzkxRkFFNzExQzAwRjBCCis5MEE2MDNFQQorRDQyMzIzQkREOTk2Mjg0OTg1Rjg1RUE1MTUKK0Q2NjVGNkJFNTE2NEFDMDY3RDNDM0Q1RDcxQTREQ0FGNEI0RkFDNkVFREE0MEQxNjhCQkIyOEZBOUI1MTIwODlBQTZDQ0VEM0JBRUU3MEY0OUUwNTE3NUMwMDk5QzJBNTU1N0MzQzIzRTgwMEUxNTBFRjRGNDNCNkEyMzUzRENCNzI5MDEyQzA3MUNGMEY5QjY5MTNENzc4QkUyQTY3Qjk3Q0Q0Cis4QkE0MEM2NAorOUJGMzBGNEMyQjNBN0QyQjg5RDk0MjAwOURGOQorQ0Q1QjZFOTkxMjIxMTA3MDk5MjA3RjM0RjdDNzUzMTY5NzEwQzMwMTQ0NDFEMTQ5QzNCOUE0NTIwQkFCMDIzNEZFQTI2MDMxMUU4OTZCREVGMjlEMkREOThERkVFQzAxMjUyRDQ0RUIyMkE5QzIwRDc0QTVBRjVEQ0JGRTkwNENBMjMwNEY1NDRENUYxQjNBQTQyNzVFNDU4OTlBNkNBQTRGODE0ODVCM0E0RkU3MzlEQjE1Q0YzMDZFNjE1NjIyMkY2NTVENThERDI3QkU2ODdGQzlFMkVCMEZFQworNTI1QkVDMEMKKzY4NEE2ODZEOUY0MjE4QTFCQzEwMjlBODc4CisyRDIxRkMyMzlENkQ0NDAwM0ZBODVGQjZDMDkzMzE3OTk5OUU0MTlGOUVFMzZFOUJBRDE5N0ZFNEY2RUM3MDRBQTNGM0Q2QUZDQjNFNjRFNDdCOENBMUU3RTkxQTJFM0RDODhFOUY3ODZBNDNBM0I3QUM3QjEzNTc2NEZEQUM5NDQ1Rjc0QjAzQzFERDMzMzc0NDA5MDVBMTA1OEUxRjM2NDFENjE2ODEwMzFBRkE2REVCCitCQUQxMzM0QworOEE5RjQwRjY4MjI3MDc1Mjc0QTkxRjY0NTEKK0Y2Q0EwQUYzNUM1MTA4ODAwOTYxQkNDNDMwNjk4NEVDOEQyOERGQTJGNzk0Mjc1NEEzQTQ0NzMwOTU2MDU0NzlBQzhFRTY5MzhBRTcxNDM5MTkyNDcyNTFGQTZEOTRBNTAwMkY1REUzOTQ3MTIzMkNFOTkxQkYxMUYwMERFOEM3MDExNEI5QkRGODlCRjQ2OTE4OTdFNjZGMzA2NTA0MEQ5MEQzNDQxNjUzNjI5MkMwQzlGRTkxQzUKKzhGQTBDQTQ5CisyMTJCRDQ0NDREQzRGNjczOEU5NjNFRkFCOTU1CisyQUJDNEYxNDM5MTM4QTVENzEzQUM0MjI5RDI3MzE3NUNENDJEQTE2NkI4OUNENzlEOThCRDI2MEJCRTNENUUwQzg3QkFGNjAwNjNFNzZFQTUxRkQ1MDc0NTUyMkE5MDRGNDY4MjJBNjI5Q0M2MzdFQzc1RjkzNDk5RTdDNDNGNTI4NTI5NUUzNjUwNTFDM0Q5RTg3Q0VDNUI5RkFCRjdGQTI3REY0ODVBRkI1MUVBNDA2QURDRDMxQkIxMTM1NzlDOTYyQjI2RjdDMURGQ0MyMjc2RjBBM0EzNzNBRTVBOEQyMEVGOUI2QkE5RTlGMUVDNjU3MEYzOTI4RDAKK0MwNzcKK0U0RjA2RDVBOEIwQkI5QUNFNzdDMkMzNURFNDIxQ0U2ODdCQjc0MEY4NDZFNjg2Q0RDNjA0Q0JDOEMxM0IwODA0NDQ1MjkxQkVEQkZFQ0VBQkZBQ0M4QkFCRjlDNDcKKzg1Q0YxQUI1CisxN0ExOUE0MDM0RDUxQzEwQzQ0NTMwOEI3M0VCCitGNERDNUEwNjA2MTA4QzBGRDY0RkMxMUZCOTcyQjI0QTU1MzA2REU2OUY1MzE3QThCODNCODE3MUI0NEI2NEZFRTk5MjQwNzY4NTkzQTZCRUVBREM5RDM4NDNERTdDNEQzMjlGMDI1QjNBMTM2MEI5RUI0OUYyNkExMjM3RjQxOUM1Rjk4NzZDOTYzOTQyN0VEMkMxOEI3OTU2RkREOTlCRDE0RDFFMzdFNEY2RUE0NzVGQTNCRUZBNjIxNzQzMzdFODMxOUYzRDY3MEE4MTM2MUQ4RUJENEMzOAorQTU2QTkxOUQKKzZDQjc4NkQyOTJDQ0I3RDVDNDRDQTg1OEU4CisyREEzNTE5MURCMDE3MzlFQjhBM0MyNkU4MDE4N0RCM0IxNThEQzFCRDY5NTk3RkUxNDEyMEZENUZENTg4NTM3RkY2NkM0RTJDMTA5NjNCOTcwQjVDRkNFQjIyQkFBQ0VDOUZGRENENDNEQTEwMDZCNjE5M0E0OUFBNTQwNDA1NTc3QkIyQTY1QzFEQzE0QzcxQ0M5NzlDMUNFNTU4MzJFCitBMzk2QkMyRQorOEM5RUMxNDNFNzk2MUI3REUwQ0ZEOUQ1NTIyQworRUU1MTkzMDRCN0E0NjY4QTVDMEM2RDEzMUQ4Nzk1NDVCRDA1QzhDNkZENjlEMDBFODI0OUI5QTJFMUFCNzlENzVEQTkwOEZCREU3RDVBREE0RkE2QjEyMjhDRTNDRjVDMEQwMzE1QTMwRTU0QkU2REU1QjJCNDI2RDg1MzAwM0M4MjRDODFEOTYzQjUyOUZEODU1MEU0QjJFNTQzQ0E1RUI5NEZEMjQ5ODVFNjM1RTE3MUIzNUQ0QjRDMDFCMDFCNzc2OEY4RTJENjBCNjg1RURDOEQ5NEUyMTVBMDI2MUIxMDY1RkQ4NjhGQTYxNENBMzg2MkRDQzY3NkQxCitCREM0Cis2M0E3ODA5QTA0M0E1RkUzNzMxNjNFMTAzQTZFMUFBODdENjMzNDIyOTAxQjEzQTREQzg1NTI4MjM1MjkyRjlEN0ZDNzNBCis0QUZCMkQwNgorMEVCQTBCMTk5MDE0MUE4M0Q2NjFDNkFGOTgKK0IyREFDRjY1RTdBMTQ1N0QwNjdCMUY1QUE5MDM1MEU0N0ZGRDY2NzQ5NDhFNTg5NTNDQTZBNTkwOERBMEI3NTgyQTZGRkIwRTUwMTA4RTI5OUY0QjdDQzk4REVCRTE4NTM1Q0NFMzNBMkVDQgorQUIzQzI0NTEKKzU0QjkxRTY4MjAwNzBERjA2MDc1NEFCOTIyMjYKK0M0REEzRjcwODA0MEEwRkQzNTU1REYzNjc3QjMzODkxQ0Q4MEE2NDRFQkNBODk3NTI4MThFQzJBNzk5ODM0Q0YwRDhFQjU1OEQ5QjkyODI5QTNBRDBBQzMxNzlERDExRDI1NDFGQzgzQjI1RkVBMDhERjMxNEExOEE5Mjc0QTg2RkUzOURERDQ0QzkzRTBCQTFEMENGRDlCNDg5OTg2MEEzRkI3RDYzQjg0NTdFQjU3NUUxNzcwNzIzOUY1QzI5NDIwMkIzMTgzMzRGN0M5M0U4NjNCOUFGRjkzRUZENjJDOTFFRDRGMjY5RkM5RTI5MkZEREEzMzMzN0UyNgorNUJDOQorQjVCMzM5NTM1MjkzQzU0NDI4NkRBRkJDNEY4MDM5QkIwOTIwRTYwMTk4QTkzMzNCNEY4MzdBQzkwRTc3NDIKKzlFQTkzMUQ2Cis5NkI1MURCQzI4MjIyOTlFRUZFQzYxQjhERUNDCiswNjVDQUUyOTkyRDgyMEMwOUM4NDZBRkQ5NDg0QTg0NENCRjc3ODREQTI3N0Y0OTcxNDcxNDZFQzYzQkRCOUE4OTY5NkE2MzY0OEQwMDQ4RUE3M0NBMDE4QjcyRjdDMzlFRjg0OTk3Nzk1N0U3NEVBOEQwQjkzQ0VERjJDNDQ5NzZDNjhEQ0NDOTBDRTZBM0Q5QzY5NUVCMzQwQkNFMUQyRTI3QkM1NTNCMkI0NTg1NkRCQjUyQkJFMUZEQjc5RkY2NzZBMUZGQTY4NEM5QUIxNDM1QTREM0IKK0UyMkEzRkIyCiszNEY4NjIzNEY0OUQ5Rjc0MjlFNzc2RTRDQQorOUQ0M0NBMjZCOTRFMkU4QjBEQkZFNjMxQTU3QTE3RTM4RTQzMUZCN0UzNDZBNTAxQTAxM0NBRjdEM0E1OENEM0QwQUE4QTAwMjMxODhCRTQ4RDI1NDE5OTVGREI2MjlCNkQ2OThFNEM5MTNBMUQyQjg4OEI4RkI0MTg2M0Y0MDI0MkQwMjU5NjJDRDQKK0MwQ0FCRUU5Cis2NTVEMDMyNjJCNjJGREY0NzlBNjI1MjRGN0QzCiszREUyQzNGMjlDOTI2MEI1RUY3QUI4RTAyOUE3MzMwNzUxQzdEOTE0OTAwQTg5NUVFMkNEMzkwRDhDQjZGNzIxRjM1ODNERTYzMDBCRDVBOTk0N0ZCOEZFNDJBQTlGNDQ0NENENEU3MkZFNkNEN0M1QTlGRDQ1OUU1ODk0NEY4OTIyRjJGMEU5MDVEQTEzM0Y2ODdDMTFCQzM2MjA4NkE3NjNCQ0M1MzBGMDc4NEVBODA3NUI4MDE4RkY4ODM0NzQ4OEUxNkI1MjY0MjJCNTcxNTI2N0YxQjIyRkZFOTNGRjE0NDc0NEY5NjE0MTkwCis4QzYzQTI0NAorMkRBRTYxQ0I3RTJDREE2NkY5Q0I4RjNCRTNDRgorMDNGRTBDODgxNTFERDQxNEY0RkU5RTUwMTVFNDg3MEIxQUVFNEQ2NDg4MjM3MzVERUJCNEYwQkE0QzkzNkE2QTZBOUVFODUyRTE1ODU4NUMwRUZCOUYyMzVCQzE5NzAyMzhENUIxRDAzNjlDREQ4QjZDNTY1QTg1MzFDRjlFN0E1OTM4REVBMTZBRUUxQTVFM0MxQjNENjhBNUUwMERENjlGMDFDNDE2RThFMThGNTQxODVCMUI1MEM4NDA2Njk4MENFQzdGMDNFRTY2RTE1NURDNjAKKzJCRjBGQ0VFCisxQjBFQzM0NTZCMDQ5QTdCRjZBMjNBNkU1MworMDYwNzI5ODUxQzFFN0NENkFDREJBRDY5NkUzRkVEOEIyNzZCRTM4MDdCNjI3NEJBOUU0NDRGRERFMTI3RDA5MDQ0QzRCOTg2RDhCMjc2OUI2OEI0MkRCNTBFNjJFMkQyODY3NTJCRUY5NzkyMzk3NzcwM0IxNDAyQTNENTY5RjZBQUVBQ0NFNTRBRENEOUQzN0VBMDNGQjRCMjYwRDk5MjZDMTkwNjA4NEY4NzQ0Cis3OTYyNDA3OAorQzJBQzczNkQ2NkRFQzIxRjVFREIyNDcwQThCNgorMzhBQzc3NDE4MzJEOUY2RUYwNkVFNzA2RDY4REUyRTlDNzg4M0EyNzRDM0M0MUU4MzJCNjM5QjI3MzE0NzBBMUQ5RDUxMkVENUQyOTQ5MENCQjcxNjEyRkJBRTQ0NzdGNjZEQTg5NDBBODUzNkI3RkEyRjE3NDA5QjdERkM2RTg3RTI4QzBFMzU3NkYzNDIzREE4NDg3RjQ0REQwOUY0NTJDQ0I5MjFBODY2MzYwNjdDREY5QzM0OTQwOEVGNTQ3ODJBNjk3QTAzRDg1RTYyMTc0OERBRTQ3QzdGNUZGNzNENjhBRTQwNkNDRTE1MkNCNzExOTg1NjYKKzMxMzE2RTc2Cis4RTE3NUMzNDRFRDRDNDMwMzIwREUzNUFDNQorQ0UxNUIzNjRBQTE2MzgxRDEzOUU4OUNFRUQwQjA2QTc4MUM4MDE4NEZFNjExMzYxNDhENTU1OUMzQkMwRjhENEFCMzM2RkU3QjIxQTZBMkE1NTVGNzRFMDdGRDUxQzdFRjdDMkM3MzY0MkJDQzM4M0Q1QkIwMkREMERFRTBFOUVERDczODQ1ODVBCis2RDdDMjk3NworMDdDQjgzRjI1MERENTM2NTdCNkYzQzY1QUYKK0NBOTREMEU4REYwNzM4NjBFRDc2RDBGODIzREMwNzc0QTUxNUYxRjFDNjhGMDMxNUYyNjQ5NDg5ODg5MzM5RTRFOEVBQzVFQUI1MEFFNTUyRTA4RjMyMjI2NDZBMkQ3RTVCMkRFODVDM0EzMjZCNzdFRTVENTQ0REJENjAzRkJDMTM1N0JEOEI0ODY0Q0Y1MzI5NkVBMEY2M0ZFNUM1QjQyQkZEM0NBQTRBMTk3QkI0QTY0MzMzNTFDMzUwODg0RDMwOEUKK0IyOEJDMTQ2CitCQTc0MDBGRDhCMzJFOERDMzUxMDAzRERDRgorQTdBMjY3OEUxQUVGQkZFNkVBNTNBNzFGOEYzMjhFRjc3RDFDNTlDRjVFRjhGRUM1RDgxMDU0OEIyRUQ5MzgxMDVDNDVCQjAxNTJERjI5Rjg2MEI2RTEwNDdGMkQ1N0VEM0UyOUFFMEY2RkMzQjM2MTlGMDM5MEI5NDM0NTIxMEUxQzQ3MTA4RTcyNEVEMjQwQTdFQTRBM0U0MkZCMEY3RDE4MDFCRkNFMDJGNUIyODgwMQorMEE2MkUxRjYKKzc1NTZBNzNDNjlFMjMzQUMwNzQ1REMwM0NFM0MKKzc5Q0MyNzc3Mjk5NTQ4NTlGNUJDODlGMTVGQzAzRTQzM0Q1RDM1NEQ0REY1MUQzQzIzQzk2QUQ1MTc5QzY2QjQ1OURFQzU3ODU3NDM2MEM1M0ZBRTNFRTUzMERDMTMwMTg5MTAxODcxNkVEM0Y3QkI2RUNBRDRGODM2QUM3MDg0MTY3OTdBNTU4RDNBNUE0MDg1MEM2NzlDMjlCNDQ3NERFNzhCOEE0QzM2RkU5NzJEQ0MzNURCRjM3MDg1Rjk4RTk5MEIxQjdGNDBENzE3MzVGMEM5M0ZDQ0QzRjFEQTc1ODJCRDY0NjNCNkE1QkM3MThDOUU1QzNFRTg1NAorRTk1NgorNjlBM0QzNzM1MDVDNENENjlFQzA5ODE4NjkxQworMTZGNkMzMkMKKzVGRDE3MkZGQUE2RDQ5MUE4MjM2MTQwQ0U4M0EKK0Y3NzJFOThFRkMwQ0IxODE3QTIxMDQ2RkIzQTUwMENBN0ZFQTFCQUQwQ0EwMUUzQ0FBNEU3RDhCRTVCRDk3QzFCQjlDRDY1NEE1QzU3N0ExMkI2QTJFNEVDRjZFNEVCMDBEODBGOEJCN0E2NUFGNDQxQTc1OUM3OUM0NzBCMzdBQTA2OEI1M0RFQjg1ODdCMzJFODAwRDc0OTQ2RUMwRUYwMTBDNkY5M0UzNzM2NzMwOTUyMjA5OEVDNUNDQTAyODg3RUIzMDUyQ0VENTlCNjlDREM5RTMxQTc3MTZENDU2MDM3NjhDNkU0MTY4Q0VEMUM1NTk5NzlERkVFQgorNkFBMAorQzY0Mzg3QjFGRTdEMkIxNEI3RTQwNkZEQzk0NjYwNDlCQ0M5NzAxOUQ1NTU0OEE0NUYKKzBERkZGNjk5CiszMERFMUY3RTFDQjBDNTMxNUQ3Qjg5QzAwRjZCCis3MDREM0NCQzZFQTc4NkY5MDY5ODA2RDJGNDQwRkYzMzk3QjFENzQ4QjkxQ0FCOEQxNDE3MzUyMzBGREJCMDkzRDdEMEM3NkI2OEMxQkM3NTQyMzlBNkQ1OUY5RTQ3MEY3QkRDREVERTc1RDIwMjRCMkQwRTFEQjcyRkI2RkQ1REM5QTY3OTc0OENFMjRBNDM5MDY0MjY4NzFDQzQyNjQ3MUU0NDZBMTA4NUExOUExODI5M0RFNEQ4N0JDQ0I5RUZCM0Y1NTM3MDlFMEY5OThBNUMyRTMxRDVBNjM5NEUwOUZGREYwOTc4QjUxOEVDNjE5N0M4REMyQTQwRTMKKzI2OEEKKzRGRDhGM0ZBCis5QTQ1RDgzRTk2MUQ0MTk2RjI0RDU0QTJDQQorQjk2RTgzRkZCODJCOTNFQ0U2MTcyRUU3NTkzRUNCMURBNzA2OEEyRUJFMDQyMzMyMEE2NEEyMkVDNjdGRDk3MkYyMDc5NTgzQTUyQUE5NjUxQzVFQ0U3MEQ2RTIwNEZCNzkyRTBGQjg1RDMyRERBRUY3NDhEN0ZEQkExMzMxCis4ODg3OTNBMgorQjA3QkZGMDg0MEUzMTJGOTdBMzBGREE4REU2NworN0NDQTIwRTFGRjFDQjVCQkUyOTQ2MUQwMTM3RTVDMkRBN0IxQzU0RjQzRDA4OTlDQUMyMDkzN0JBOTFDMzk2ODVGNzU3RDFFMUY2MjE5NDMyMEY4Qjk3QkJBMjYyQkY4ODlBNzM1NEM5MzRFOTZERDg2QjUwMEQzQUM2NTYxRjE0QTI0QTYxREI3QTYwNEI3RUNGNjFEMzIzODVFNDcwNTBBQjVBRjI0QUNFMkVDRUMwNUNBMjJCNkUyQzQwRDNGQkMwRjRCNkU2RERDODU4MTI3CitCNThGN0ZBRgorMjlCQTA0RkVCMEEwMzYxMUNBQTZCNkI4MzcKKzFFMjM0MDJBNTI3QzQ3NDkyNUIxQkM0NjRDOUMwQzUxMDBDMjMwQjJGMDI4CitFQjA3RUE5RgorQkM3RDZGQkE4NjFBMjg2NTkwQjgxMDlFNUIyOQorMUIyMEI4NTcxMTEzQTU1NworQjc5Q0Y5QUIKKzQ3RDVBM0ZENUEzOThERDc4NDdEN0U2ODYyMTZEQzNEOTA5REYyNkYxRDk1Njk2QTM2RUJGMTczOTM5OTJGNzI3Q0E4CiswRTNCM0E2MTRCNzk0NDExNjMyRjc1OTUwQkZCRjQ4NkQwRkY2QjhCRjE4RjQ5OTk1RUEzMDAwNUZFNEI1RTU3M0NDQjQ0NjRFMUI2Cis4Qzk2QURERDIwQ0I2NzVDREYwNEY2QUM2QkMzOEY5NTc4NTgwRTE2QjE1RkVGMDg3MjRFRDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDYgcHV0CitkdXAgMyAvQzAwNTcgcHV0CitkdXAgNCAvQzAwNjcgcHV0CitkdXAgNSAvQzAwNzAgcHV0CitkdXAgNiAvQzAwNzggcHV0CitkdXAgNyAvQzAwODIgcHV0CitkdXAgOCAvQzAwODMgcHV0CitkdXAgOSAvQzAwOTcgcHV0CitkdXAgMTAgL0MwMDk5IHB1dAorZHVwIDExIC9DMDEwMCBwdXQKK2R1cCAxMiAvQzAxMDEgcHV0CitkdXAgMTMgL0MwMTAyIHB1dAorZHVwIDE0IC9DMDEwMyBwdXQKK2R1cCAxNSAvQzAxMDQgcHV0CitkdXAgMTYgL0MwMTA1IHB1dAorZHVwIDE3IC9DMDEwOCBwdXQKK2R1cCAxOCAvQzAxMTAgcHV0CitkdXAgMTkgL0MwMTExIHB1dAorZHVwIDIwIC9DMDExMiBwdXQKK2R1cCAyMSAvQzAxMTQgcHV0CitkdXAgMjIgL0MwMTE1IHB1dAorZHVwIDIzIC9DMDExNiBwdXQKK2R1cCAyNCAvQzAxMjAgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbMCAtMjA5IDcxNSA2OTRdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjlBNzExNzczQjFGMDYyRUZEQ0U5MzE5OEE3NjVGOEY1NUEKKzZFOUY2MEI0M0FEMjEzQjZGOTk2NzVENAorQUU5NzZFMjMxOTAxMkRCOTZCCiszM0NCMzdGQworMkFCN0NCMUFBOUU3QzZEMUE2MEVDQzEwMzYKKzc4MTczQTVFREJGQTcxRjFFQkQwQzAzMkNDRDEzOEI2RDRDRTY2ODAxRENERkVCNkJEODIwQTExRUQzNkRDCis4RTREM0NGQworOUI3NEQ3MzU0MjA2N0M1MjYwNjlCMzA3MzJFNQorMDJDOTJEMzUwNzczQTBGMTMwNDNGN0U3RjJGRDIzNjVDODExQjExMURFRDYzMDg0MjU0MjQ0MjVDODVFRDRFQ0Y4M0RBRDlBNjlENkRDMEIzMjZCNjZENUQ2MDk4MkMyNUY3OTc0MTVFNUUwNDI5NUQ4QjgyODAxNkFDMzQ5MkI3QzlCRTYxN0UyNzQ2QUYyRTk1MjREQ0QzMzk0NURDNjVEOTRCMkUwM0QwRDcxMzI1OTNFREM2N0E0QjIwMkFDODcwRUYxQzYKK0VBNzkwMjg3Cis0QUNCNUY1NkZENERBNjhEMTY0MDM1NTE5NUI5CitEMTlDNzk2MURBQTc5MDAwRDQ2RUMzRjI5MURBMkUyQjE5QUM2Q0I2MzBCMTA1RTNFMTM5RTkxOTg3OUU4MTQ4QzY1NUJGMjc4NzNDMjQwMjJCMzMwODk2MTJDNDg4Q0U5MEUyNTREMUM3NUZDMzZCREExMkQwMzM3QjMyQzYwN0U1MERBMTY1NTRDMDQ3OTI1MzdFQzIxOTVFODA2N0RDMTlDMzM0RUJEQTI3NEYwMEQ4MEVDMDlEN0M1NjgwODMwRjBFMjREOEVENkNDOUEyCitDREZCMDRFMgorRjFEN0ZEMTdERDU4NTlGNDE4NjdEODhEREVBRQorRjk3MkU3Qjc1NjU1QTdFRUE5MEI5MkRCMzE2RDBBQjRGREQzOTlCQjMyMjM4QjlFNDY4OEVFOEMyMDY5MTkwM0RFRTNEMTQ1MUMwMzlERDMxQzM0M0Y3NjgyQzU5NzU1RkE3RkEwMDQyN0NDNjZCNjU2MjgxOTQ2MURGQ0QzODM2NzZCQTIzMEZFODExNEMwRjYzNjVDODc3MkVCODc1ODEyQTA0NzM5NDYzRjU1NUVFMTY0NDQ2NjhFNEJDM0Y5RTQ4RjMzRjkKKzg0QTVGMTc1CisxMDc4MTgyRjM3NjlFN0RBMTc1MjUyOTk3QgorMjU2OEZCN0Q4NUZEMkM3MEQ3NEY0OUYzMUFDNjk3MjhBN0U3ODA2MzIwRTREMkEyRUVEMTYzRkRFOEMzQzEyRUM3OUNDQzY0MURCRDFBMDE4NDc2N0QxNzk4NzU1MzE1RUQxQTczQTBDQUNDRDgyQkYzM0IwNDY3OTlDNzBGOTk2MUM4MjAzQjcwQTM1MUM4Q0I1OThGNDY5NzlDQjhEMzA2OTZFNzU2N0RBNjA5OTFFMDg2MjI5RDYzM0Y1MAorQUY5RDNEQjgKK0Y4ODE5OUFGOEVFREM1MTI4NDZFOUI5MEY4MEEKKzU4OUMyQzhFQzI3NTNDRDk4NEREMUJFRDZBMTI0RTlDMzBGMDI5Rjc0NDA5RDRCNkU0RDU1MTZEMUEyMTI3NjBBMUQ4RUM4RTBGNTIzRjNENzExOEQ1NDRFRDVEMkU3RDA2NUU0MTg4NTIyQzZFRjA1NDNCOTM0MThBMEMwQ0I4NzQ4Nzk3RDJEOTNCODMzQzZEODkzN0JFN0I4RTZFRTg0Nzk4REY5NEM3OUFDRDM5RDgzM0MxRjI5NTA2MjFFNEFCRDZDN0IxMzBBNTUwRTVCN0ZBMTVGQUZDOUI5MUZFMUM0QTU4N0RGRgorQzIyMTZEQjIKKzdBRDU3NDMyQUUzOEE1RTUxQUE1QzY4NkY0RTQKK0EzRjI5NzIzNDJBNDUzMkRFQ0JGRkQzNDhEREZFNEREOTRCODNEOEIyNDBCM0UxNzVGNzRCNzFDREQzOTJDMDNCNzkwQ0Q2NkVDMUU5QjQxMjcwMTQ1RkNGM0VEQjE4Mzk4QzNERjM0MDQyQzRBMTg3NEQxRUFDNjU3MUY4MkU5QTUyMkRBN0JDNUVENjdGMDBERTZFQjU4MzQyQTY4RTFGOTRBNzlGRTJDMjhGRDZGMzZBMTgxNkY0NEFFOEY1NjVDMTRFREQ4QzQ0QzdDQTNDODhEOTkxNzlCNTc1QkQ5REM2MzZDMzA2RURGMTZEM0IzQUEzNzFEREU4RAorMUJCNworQURFQzUxQTMKKzU5QkZERjhGRkUwQ0M2ODNENEYxODExMjYzOEUKK0EwMUMyMEQ1MTNBRTFGNTU4MEVFNDcyRkFBRjFCMDNBQ0ExMzQ2N0E0QzQyQjQ4QjM2MjM2RkU0MUFDRTdDMzk3RDYzRTM1MjkwOTUxMjhEMkIwNkVBNUEyNDQ4NUMxNjQzMDQxQkNBMzRFODUwNUJENjQzMjQyRDc2MDQ3RkVBNjgxNjRBQjk0MDA4QTkyQjIzRjk2NDlEODA0M0I3NkMxODM1NjM1RjY5QkRBM0UzQjUyOUFEOThFNTM2REJCRTAyNEYwQjIyM0NDM0FGMjM4OTRFRUY0MjRGRkREMEYyMzg0NTE5MjNGQzRERkVGMzNFRUY2N0Q0QTZBQgorNTM2OAorMkZCN0IxQkMKKzU0MEZFQzEwCisyNDc4NTYzOTYzRDY4MTlBMzMxQzhBNzRDNAorQzA0QkU3NUM1MzVEMDg3QUNEMDhCQTk5Mjk3ODdDRDg1MEIyOERCNzRFOTFFQzQ0REE1MkM1QzdGRTM1REU3QTk0ODFENjE4M0VERTI2QjVGNzhFMDU2NUFDQTg2OTIzQzVFRjE0OTZFOTQ5QzIwRDQyNTgzRDA3MkM3RDUwN0VGMUY3QTBGRkJFNTM5NTM5MjYyNjVCMzVGRDU3RTZDRjA0Q0YKKzM5NDE2NDA4CisyQURDNDM2QzA1MzgwRTJERUUwMTA5MDRDRDkwCisxOTE5N0VEODBGODhGQjc3RDVBRDY1MDc0QUQ1Q0M3RUU0OTUyRjVEQkNFMkQ4QzNCMkY2RjlBMzk2QTJCRkIxRkZBRUQxOEZEOTlDRkE0RjlCRjU4NEIwQjAzQ0Q1QjdGM0VBOUI5NDE2Rjk5QTZBODI5RTNENUU2RTdBRUI4MkQyNUEzMjVGM0MzQkY0QzFGMkMzNkIxODZFRUE1MzJGMUYxQzkyQTE0REFGMDkxRjMwRjcyNkZCMDhEQzNCMjZENjc0QUU5RjA4M0JCNTI0QUFENkM2QTkKKzdERUQ1QkFGCisyRjI1RkE0NUM3QTVBMzQ5NzQxOEQ0MkNGRQorMjc4Q0E2ODZDODFDOUIzMTg0NkQ0ODlBMTM4NkUxODdFMEJEQUE2QjcwQ0Q0QkIwRkU0MTU5RjRDNjAzMjQyQ0E0QjZGQjg0NDMyQTZERDNGMDMxODE0NjdBNDIyNzRFRTBCQzFDQzBFQ0JFOTg3NDg1MEVFQkE1N0Y3MzYyNTc0M0UwODc2NTE5RTU4NTk4ODY3QzJCRkI3RTA5OTUyNUVCMzJBRTUxM0MzQkYxNDQ1OTdEMTVGRgorMzBCMjExNUMKK0NGRDJCRjBFQzkzOTU0NDI0RDYwMDVCRUVGCitGM0ZBNDVBMzFBRDVEMTkxQjc1MkU0NDNFRjRFNDlENzNDNEQyREE1OTY1RkI2MDRGQTQyMDU2NjgwMEFDRDFDMjM1NjhBMURBNjk5MzY2RjFCRUZGQkFBMUI5NkJFRTc0MjYxNUMzNTA2N0EyOTkzQTgzMjlCMjE5NUQ5OEZBM0MxQUVFOUM3QUE2ODJDODA3QjkwNUNDRDBEOUVERDc0QTQ3QTA0NEQyNTdGNjZBQkM2NjhENDMzRjAKKzUwRkNCQjUzCisyMTMxNjk3OUUxNzg0M0VGMTQzRjM0NEE0MDM5Cis1MUQyMkUzRUI4MDFDNDg3Q0I1NDJDMjU5ODJDRjA0REZCNDgyMkY0MzYxODA5OUE1RTcxQTFFNjRDODk4MDdGMDQ0ODdGRjVCREYyODY4QUJDMENBNDQzRTU2NzI1Mzc3QjZDRUI2NDgzRDA1MUE3Nzg4ODc3MURBOEYxNUUxNzc3RjQ1NkZENDczOUREOTc4MjY3NjA3NjQ5QTlERkEyNzdFMUVGQzIxMUM0QTZFM0YzRDc3MjdDN0YzQzkyOTVGN0NDMjczMTBERjk1QjM2Nzc2NjRGNTI1RDU2NjEyMjFCMUI3MzA4Mjk1RkY5RUVDNkVGRDkxODkwNjMKKzlFMEQKK0E1MDlGMEYyRTNFNDhCQ0NBMjkwQTBGQ0IzNkQ1QjQyM0VGMTUyOEExMTAxOTE5OTE2N0QwRjcxRTI1RDg0RUI5OEEzQzQxM0I1Cis5RTJCQTMyMworQTkyM0E4NzBBMzUxMDk4NjBGNEQ0N0E4NjQ4QQorNTY3QTg5NTVBMkZFMDA1RTA1MzBCMEFEMDA1NzYyM0M5MTRBREE1MzdGMkI5MzJDRDAwNERCQzNFMEYyNEI3RUIyRTVFRDk5QTI4MDZEQzJCMzU4MTdGNTYyN0I1RjFGQUM1NTg1RkVCM0Y5NkRCNTI1QzIyMjRGOTM1ODkyODNERkRCMDEwNzQzQzk3MDU2ODFDNTQ5MzVEMjI4RDgyQTMzQUI1QjQ3NEVCMTc1ODJBM0I0NEY1QTE0MkZERTEzOTE5NURBMTM0OTk2QjY3MgorNUJBM0Q5MUQKKzg5MEE4NDQwODAyQzIwRkVCN0Y3REVGQjlDCitFQzFFMUIzNENFRDQyRjQ5NUUyQjEwNTlDNUExNTg2Q0NGODY5NUU5MDA1NDIxNDgzNUQ2RUQxNjBEOEYxNkQ1QjFCNzJCRkI3OEE1MEI3QTBFRTdCMjBDRDExQzE2OUY1RTQ0QTgzOUM1Nzc0MTQ2REQxNTc1MEFDNTg0RDBCREYxMTBEQkZENDYzNDdEODI0NjQxMkY5NEIxNEQKKzE5MTFGNDlDCitFRUM0OTJCNzEyQ0Y2MjhGOEM2RTdDN0NGMgorRTI0MzJBNjUxNzNGNThEOENBODQ1RjI2REQ4OEEzRUEzREI1M0VENUU4QjgzMUEwREY5ODY5QUJCOUM4MDk5NDVEODk2NTkwQUZGN0QwNjA2QjIxOTZEQTg2QzA0RTM3MzY3OTcwMDYKK0MwNTJBRTI5CitERkZEMUM1NDQ2QkQ2RTJDNTAyMjA0OUY5OUI4Cis0MEYzMzdCRTI2NjI4ODdFMEE5NTMxNDMzREYzOUY5NzZDQ0I0MTY3NTRDRUFGMURBRkMwQThCRDE0NzA4RjdDMzlEQkMwNEQwQTkyNTNFQkI5RjZGMjhFQ0I3MjY5NDYwOTdCMkY2NDI4RDU3NTAzMjM4RkYxMkU0QzcwOTZBMjZBQjAyMkExNEYwNTQwQUM4MzgyMDE0MEY5MzAxN0QyM0QxOUI1QTU4M0Y4MzY1MUZDRTIxMTRCMDQ5QUQxMENEMzEwRUQyN0MzNkQ0OAorQUJENTkwQTIKKzhFRjY1REJFM0I5Njk0RkU0NzVDMjZBNjAxCis3OEI4RThGOEIwNkVDNDQxMjYwNjI0QTEzRDU1OTMwMzYzMzFEODIwMEVDM0JGREZFMjUyRTZDNjVGMkU2QjlFMUVFREMzRENGNzUxMkVGQzU0NjZBNzJDRTM2NUFBQ0IwNzE3NUNGODM0N0JDMUMyNDU4MDkxOEZCQ0ZCRTY4Q0FGQzk1RkUwM0Q2NQorOEZBOTVENDgKK0VBMTREOUMzMzZCOThFRTFGRUFBRDdCMzYzQUEKK0VGNUNBNERBQTE1QTkxNDBBNjU3MTUyNTRCOEM1NUY5RkJFMzQyNjc5Njc3N0EyQTEzNzRCNDg4OTRBRTNCMzY2NEFCNEQ4NTczMTU5MDJGRTc2MDE3RkNGMjc3MDI0RjIzQ0I4MkJGQkU1OTYzQzY2MzY0RjJCNTczRTY1MzAwOTQ4NThBNEI2MTYzQ0YyM0ZFNzcxQjhFM0IxMURBMDg1QThEQjVGOTNFN0M0RkU4NUY1MEY2OTBFMEM2RTQwMDg0NzZFMTI3ODlFRjRGQjI0MDhFRTdFMUVCQURERTFEMEEKKzMxQ0M0QUVGCiszQjQ5RjhGQjgwMUNBNkNEMTJFNzJDMkFERQorQ0JBQzFGMERBMDM5MkJDRTEzRkZFNjhFNzRDNDQ0ODNFNTVDMTFFNUNGQ0VBQkUwQUM1MjY0Q0Y0NTIzNjZCM0Y4MDY2NzY4OTkzRkQ3MTE3NzI2NTE0RTA4NkM2RjFCODk4QjA3NURDQzAyQkIxQUM2RTVFMzA2M0ZFRjFCRDJDQjg4RTUyQjY1MjY1Mzk5RTZBQUYyMzIxQjI2QkY1OENBNTlEMTFDOUI2M0I4Rjg0NQorQ0I2MEM2MzcKK0VDMURBNjhGMzRBNjM0QUU1OENEQUUwQjcwNzMKKzkwQzJDQkMwMDkyQ0ZEQjE3MjdEOEVENThEQ0YyODA0OTAzMEY3RjQ0MkYzOURFQTIwREE1M0IwQzNEMEM1MDNBMERCRDhGN0NCODYxMTlEMkZGNEE1RjY2MkQzNTNFQkM3MDczMDdGMEVGNEJFNjg5NjFDQTE5Mzk3QzZENUJCMEI3RDFGOTEwMDAzQjU3ODRDRDgyOEY4M0ZGQ0RGNkIwMUFFNTJFMDYyMEY2M0FGRDcyOEE2NTI2NzRCM0IyOEY0M0U0Q0Y1RDJBRjlFMTUxQjk4RDFCNkE3NzgxMURFRkVDMENGNERFMkI4MTkzMEMxCitCMkRCNzgzMworQzNGMTc5QTI3NDY0NTZGODhERjY4NERCNjQKK0Q5NjkwMTVCMzlDMkM5RTdGNDg3RjYyRTNGRDlDQ0Q0RjhBRkU0NEU1ODE0Nzc0MzQxNjZEMTM2MkE1MzlENzQ5REM4MzE1QTI4OUFEMkFBQjM0NTVBMjVDQ0M5MDFCQkNCRTZERTIyREM5MTRCRkYxM0I5ODM0NjA4RDJEQkMxMUY2NTZDQUEKKzhDRjEyNkEzCitBMjA4OUE3Mzk0MEM1RTBBMDVCNDczMUFDQzE3CitDNTYxNUFEMDg3RTAwMTg4OUIxODgxNEEwRUYyNzBBNzgxMUI3Q0I1MTVERUY5ODlCMTc2NjQ1RDY5QjIxQTgxMDU4RkU0MDI0MkVDRjYyNTA2RDlFNjA5QTUwQjZCNjUzNDc2MjQ5QkEyNUU2OENDQUQ3REI5NEUzRUIxQjYwQzg0RjIyODVBRTcwQUE4MkIwNTQ5NkIxMzcxNzI4MjkzNTEzNThCM0JCMDI0NzYyNTE2MjVBOTU5QjQ4QzZDODdBQzE4MjNDNjQ1QUYzQkMzMUM1RDlFMjgzMDkwQzdFNTQwQkY3NkU2RjA4QjNFODFGQkJGMEExRDFCQkMKKzlEMTIKKzU5MzkwRDM4NTdGOTAxMTE4RENDMzg5OUU5MUExNjUwMDhCNjBGQjJGMEQ4CisxRDhFMTkxQgorQUVCRURFRjM3MUE0M0UyQUJFMzdDNjAzQzQ0RAorOEFFQTFGOThBMTREMjlCRgorNEM4MjBDNjMKKzcyMDE3OUMwREVGMzk5Njk2MDdENDRENDY0RDdBQ0NGREYyRTcyN0Q5RUY0RkE4OUJEQzU4OTFFRjBGNURBREE2ODlDCitFQkMzMzE1RUM0MTY1QkQ5QUM4QUU0RUI2RTQ3NEEzMTkzMTVBNzBBQUM2MkE3M0Q0MDg1NjNDMDk5NkM5NzMwODJCQUZGQkI4NjBBCitDODEzNzk1MDA1RkIwNDNBN0ZGMkUyNEIxRTVERDQ3ODU4Mjc4QjA4REZFMzlBMURBQTdGNEUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU09zeW1jbGFzCislIUZvbnRUeXBlMS0xLjA6IFBTT3N5bWNsYXMKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPc3ltY2xhcyBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNjkgcHV0CitkdXAgMiAvQzAwODMgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbNTAgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI3NUREODlBODc5MEVBRDE4RUZDNzdEM0ZGQUU4NERBNUQKKzMxMjA3NEM0RDU0MkRENUJFQzcwOTY4Rjc1REMKKzI1MEMzOTU0RThERkI4RjQ4NTdCRkVGMDkyRUJBNDlEMjQ4OTU1QTg1OEM1QTVGNTVGN0I5ODdFQTA2RUM4NDI4RDkzOTA4NEM4OEY1QjE1N0Q4MEFCMkQ3MDZBN0VCOTM2QzM0MjkxNzM1ODhEMkFCQTZBMjdEQzk0QzBCNDg0RjMxNjY2MzU1NTc5NzAwNENCRkE3OUU3Qjg1NDVDODEwQkY5Q0E5MkY2MUFCRDlFMjAyRUQ5RTk1OTQzREY3QTVBQkJGM0MyMEJERTNCNkVFQzlDMEI5NUE0QzlDMUQzOEFBN0M2Nzg2QURCQkI3OUVFMTgzQkRERjE5NAorMTk1MworNjQ0OURCQjdBRTQ3RTlGQzZGM0FCRjFEQ0Q3QTFFMjc0RTg3REFFOQorQTIyNzM3RkEKKzY0MDRCMjE1QTI3QkZBRjZEMEI1MEU5NEQyCiswNzEyM0E1QkIzODBDODZEQjUwMzNFRTc0MzE4MUJCRkNDMDM1NjU3MUY3Mjk3QTIwN0MyM0YxRTU4ODI1N0ZERUY1REYyMjkKK0NBQkYzQjNDCis5RTA5ODhDNjNCMzU4QUNBNEI0RkVCMDMzREZCCitFMkUzODdBMDZBMjNDQUNBCis4RTEwNEI5MAorREZEQkQ0MUYwNjNFOEE4REZBMEFCQTRERDc0NDMwMTU1MjZBRTUyNTUzMTU1OTc3NzlFMDREODU4NDkzMDVFQTRGMzEKKzVDREFEMDZFNTg0MUUxQjgwNzQ3NjBDOTk3MDJCOENGNDQzRDc1MjE3NEQ5OTZDOTRFNjkwNzk3QTk1ODdDRjUwMTdERUIxMUU1RkUKKzAyNTc2RTlFMDhCMzk2ODhCQkU5OUExODZBQThGQzdFMjIyRjVFNTJCMjlBN0ZERjM3OUVGNQorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKy9EUEl4IDEyNzAgZGVmIC9EUEl5IDEyNzAgZGVmCis3MiBEUEl4IGRpdiA3MiBEUEl5IGRpdiBuZWcgc2NhbGUKKzAgLTEzOTcwIHRyYW5zbGF0ZQorMS4wMCAxLjAwIHNjYWxlCisvd3N0OmR1dGNoMTIgMTIuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvc3ltOmNsYXMxMiAxMi4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0YiAxNC4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDFjMmIzOTM1MmIzNzJjMTEwMTEyMDExMzJiMzMyOTJlMzIyNzM3MzAwMTJjMzQzNzAxMWIyYjI3MzgzYTM3MmYzMzJkMDExYzJiMzkzYzM0MzczMDAxMWU+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MmIzNzJjMzQzNzMyMjczMzI5MmI+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDBiMGY+IDkzNDYgMTMzMDAgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyODAgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI4MCA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjgwIDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI4MCAzIDcxMzMgMzIgcword3N0OmR1dGNoMTRiIFNGCis8MDgwYzBhMTcxMDEzMTI+IDEyNzEgMTQ1OCAwIDIwNTUgLTEgcworPDAwMDMwMjAwMDQwZjA5MTIwZTBjMTYwMDA5MTIwYjAwMDUxMDE4MGMxNjAwMTAxMjAwMTcwZjEwMTYwMDA3PiAyMDU1IDE0NTggNyA1MzM4IDAgcworPDBjMTEwYzA5MTYwYzAwMTMwZDAwMDYwYzE3MTQwYzE1MGQ+IDUzMzQgMTQ1OCAyIDcxMDkgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFmPiAxMjcxIDIwODYgMCAxNDM0IC0xIHMKKzwyYjNiMmYzODJmMzQzMz4gMTQyNiAyMDg2IDAgMjA1NiAtMSBzCis8MDAwYjA4MGEwMDM0MmMwMDMzMmIzOTM1MmIzNzJjMDAyOTM0MzMzOTI3MmYzMzM4MDAzOTJlMmIwMDJjMzQzMTMxMzQzYzJmMzMyZDAwMjkyZTI3MzMyZDJiMzgwMDI3MzMyYTAwMmMyZjNkMmIzODExPiAyMDU2IDIwODYgOSA3MDUwIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDI0MzIgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MWMyYjM5MzUyYjM3MmM+IDE1ODkgMjQzMiAwIDIyOTggLTEgcworPDAwMzMzNDNjMDAzODNhMzUzNTM0MzczOTM4MDAzNzJiM2IyZjM4MmYzNDMzMDAwYzA4MGQwYTAwMzQyYz4gMjI5OCAyNDMyIDUgNTAzNyAwIHMKKzwwMDM5MmUyYjAwMjQ+IDUwMzcgMjQzMiAyIDU2NjMgMCBzCis8MmYzMzJhMzQzYzM4MDAxYzIxMDAzNDM1MmIzNzI3MzkyZjMzMmQwMDM4M2UzODM5MmIzMjAwMDMyMTE0MWUwMDI3MzMyYT4gNTY1NSAyNDMyIDUgOTIxMyAwIHMKKzwyMjE1MWU+IDE1ODkgMjY3NyAwIDIwNjIgLTEgcworPDAwMzgzNDI5MzAyYjM5MDAzOTJiMzgzOTM4MDAzNDMzMzEzZTA0MDgwMDIxMmUyYjAwMzgyNzMyMmIwMDI5MzQyYTJiMDkyODJmMzMyNzM3MmYyYjM4MDAzMjI3M2UwMDI3MjkzOTNhMjczMTMxM2UwMDM3M2EzMzAwM2EzMzJhMmIzNzAwMjQ+IDIwNjIgMjY3NyAxMSA4MzI2IDAgcworPDJmMzMyYTM0M2MzODEwMGQwNj4gODMxOCAyNjc3IDAgOTIxMyAtMSBzCis8MjgzYTM5PiAxNTg5IDI5MjIgMCAxODg3IC0xIHMKKzwwMDM5MmUyNzM5MDAyZjM4MDAzYTMzMzkyYjM4MzkyYjJhMDAyNzM4MDAzNDJjMDAzOTJlMmYzODAwM2MzNzJmMzkyZjMzMmQwOD4gMTg4NyAyOTIyIDcgNDkxMCAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSAzMjY4IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDIxMmUyYj4gMTU4OSAzMjY4IDAgMTk0OSAtMSBzCis8MDAyNTIxMTkwMDM5MmIzODM5MDAzODNhMmYzOTJiMDAyZjM4MDAzMzM0M2MwMDI5MzQzMjM1MzEyYjM5MmIwMDI3MzMyYTAwMzgzYTM1MzUzNDM3MzkyYjJhMDAwMzI3MzkwMDMxMmIyNzM4MzkwMDM0MzMwMDE4MWUwNzIyMjUwNDA4MDAyMTJlMmYzODAwMmYzODAwMmMzNDM3MDAyNTIxMTk+IDE5NDkgMzI2OCAxNiA5MjEzIDAgcworPDIzPiAxNTg5IDM1MTMgMCAxNzUxIC0xIHMKKzwyYjM3MzgyZjM0MzM+IDE3MjggMzUxMyAwIDIyODUgLTEgcworPDAwMGIwODAwMDMwNzE1MTUxZDI2MjUyMTE5MDAyOTM0MzIzNTJmMzEyNzM5MmYzNDMzMDAzNDMzMzEzZTA0PiAyMjg1IDM1MTMgNCA1NDYyIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDM4NjAgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTcyZjNkMmIzODAwMzkyZTI3MzkwMDI5MjczMzAwMjcyYzJjMmIyOTM5MDAwNzE1MjIyMDE2MjYxYTFkMWQxZTE2MWYwMDE0MWUyMjAwM2EzOTJmMzEyZjNmMjczOTJmMzQzMzA4PiAxNTg5IDM4NjAgNiA2NzkyIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDQyMDYgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjAzYTM1MzUzNDM3Mzk+IDE1ODkgNDIwNiAwIDIzMTkgLTEgcworPDAwMmMzNDM3MDAyMTE0MWUwMDI3MzMyYTAwMjIxNTFlMDAzNDNiMmIzNz4gMjMxOSA0MjA2IDUgNDc3NiAwIHMKKzwwMDE5MWUzYjBlMDAwMzE5MWU+IDQ3NzYgNDIwNiAyIDU3MDIgMCBzCis8MzMyZDA0MDAzYTM4MmYzMzJkMDAzOTJlMmIwMDEzMjAxNTAwMzgzNDI5MzAyYjM5MzgwMDJmMzMzOTJiMzcyYzI3MjkyYj4gNTY5OCA0MjA2IDUgOTIxMyAwIHMKKzwwMzA3MTUxNTFkMjYxOTFlMjMwZT4gMTU4OSA0NDUxIDAgMjk0NCAtMSBzCis8MDAyOTM0MzIzNTJmMzEyNzM5MmYzNDMzMDAzNDMzMzEzZTA0PiAyOTQ0IDQ0NTEgMiA0NTk1IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDQ3OTggMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTQzNDMyMzUyZjMxMmIzNz4gMTU4OSA0Nzk4IDAgMjQ0NyAtMSBzCis8MDAzODNhMzUzNTM0MzczOTAwMmMzNDM3MDAyNzAwNDAzMTM0MzMyZDAwMzEzNDMzMmQwMjAwMmEyNzM5MjcwMDM5M2UzNTJiMDAyZjM4MDAzNDMzMzEzZTAwMzcyYjM2M2EyZjM3MmIyYTAwMmMzNDM3MDAwNzE1MjIyMDE2MjYxZTIwMjE+IDI0NDcgNDc5OCAxMiA4NDY5IDAgcworPDEyPiA4NDQ5IDQ3OTggMCA4NjEyIC0xIHMKKzwyMTAwMjkzNDMyPiA4NTkyIDQ3OTggMSA5MTQzIDAgcworPDQxPiA5MTQzIDQ3OTggMCA5MjEzIC0xIHMKKzwzNTJmMzEyNzM5MmYzNDMzPiAxNTg5IDUwNDMgMCAyMjg1IC0xIHMKKzwwMDM0MzMwMDE4MWUwNzIyMjUwOD4gMjI4NSA1MDQzIDIgMzQ5MiAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA1Mzg5IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDIxMmUyYj4gMTU4OSA1Mzg5IDAgMTk0OSAtMSBzCis8MDAyNzMzMzMzNDM5MjczOTJiMmE+IDE5NDkgNTM4OSAxIDI5MDQgMCBzCis8MDAyYjNkMjczMjM1MzEyYjM4MDAyZjMzMDAzOTJlMmIwMDMyMjczMzNhMjczMTAwMjczNzJiMDAzMzM0MDAzMTM0MzMyZDJiMzcwMDJmMzIzNTMxMmIzMjJiMzMzOTJiMmEwMDNjMmYzOTJlMDAzODI5MzcyYjJiMzMwMDJhM2EzMjM1MzgwNj4gMjkwNCA1Mzg5IDExIDkyMTMgMCBzCis8MzIyNzMwMmYzMzJkPiAxNTg5IDU2MzQgMCAyMjU1IC0xIHMKKzwwMDM5MmUyYjAwMzIyNzMzM2EyNzMxMDAwNTMyM2EyOTJlMDUwMDM4MzIyNzMxMzEyYjM3MDg+IDIyNTUgNTYzNCA0IDQ4NTcgMCBzCitHUgorZW9wCislJVBhZ2VUcmFpbGVyCislJVBhZ2VSZXNvdXJjZXM6IGZvbnQgSGVsdmV0aWNhCislJVBhZ2VQcm9jZXNzQ29sb3JzOiBCbGFjaworJSVQYWdlQ3VzdG9tQ29sb3JzOgorJSVQYWdlOiAoMjkpIDI5CislJVBhZ2VSZXNvdXJjZXM6IChhdGVuZCkKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IChhdGVuZCkKKyUlUGFnZUN1c3RvbUNvbG9yczogKGF0ZW5kKQorJSVCZWdpblBhZ2VTZXR1cAorYm9wCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaAorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaAorMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU093c3RkdXRjaCBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzQgcHV0CitkdXAgMyAvQzAwNDAgcHV0CitkdXAgNCAvQzAwNDEgcHV0CitkdXAgNSAvQzAwNDQgcHV0CitkdXAgNiAvQzAwNDUgcHV0CitkdXAgNyAvQzAwNDYgcHV0CitkdXAgOCAvQzAwNDkgcHV0CitkdXAgOSAvQzAwNTAgcHV0CitkdXAgMTAgL0MwMDUxIHB1dAorZHVwIDExIC9DMDA1NyBwdXQKK2R1cCAxMiAvQzAwNTggcHV0CitkdXAgMTMgL0MwMDU5IHB1dAorZHVwIDE0IC9DMDA2NSBwdXQKK2R1cCAxNSAvQzAwNjYgcHV0CitkdXAgMTYgL0MwMDY3IHB1dAorZHVwIDE3IC9DMDA2OCBwdXQKK2R1cCAxOCAvQzAwNjkgcHV0CitkdXAgMTkgL0MwMDcwIHB1dAorZHVwIDIwIC9DMDA3MSBwdXQKK2R1cCAyMSAvQzAwNzIgcHV0CitkdXAgMjIgL0MwMDczIHB1dAorZHVwIDIzIC9DMDA3NiBwdXQKK2R1cCAyNCAvQzAwNzcgcHV0CitkdXAgMjUgL0MwMDc4IHB1dAorZHVwIDI2IC9DMDA3OSBwdXQKK2R1cCAyNyAvQzAwODAgcHV0CitkdXAgMjggL0MwMDgyIHB1dAorZHVwIDI5IC9DMDA4MyBwdXQKK2R1cCAzMCAvQzAwODQgcHV0CitkdXAgMzEgL0MwMDg1IHB1dAorZHVwIDMyIC9DMDA4NiBwdXQKK2R1cCAzMyAvQzAwODcgcHV0CitkdXAgMzQgL0MwMDg4IHB1dAorZHVwIDM1IC9DMDA5NSBwdXQKK2R1cCAzNiAvQzAwOTYgcHV0CitkdXAgMzcgL0MwMDk3IHB1dAorZHVwIDM4IC9DMDA5OCBwdXQKK2R1cCAzOSAvQzAwOTkgcHV0CitkdXAgNDAgL0MwMTAwIHB1dAorZHVwIDQxIC9DMDEwMSBwdXQKK2R1cCA0MiAvQzAxMDIgcHV0CitkdXAgNDMgL0MwMTAzIHB1dAorZHVwIDQ0IC9DMDEwNCBwdXQKK2R1cCA0NSAvQzAxMDUgcHV0CitkdXAgNDYgL0MwMTA3IHB1dAorZHVwIDQ3IC9DMDEwOCBwdXQKK2R1cCA0OCAvQzAxMDkgcHV0CitkdXAgNDkgL0MwMTEwIHB1dAorZHVwIDUwIC9DMDExMSBwdXQKK2R1cCA1MSAvQzAxMTIgcHV0CitkdXAgNTIgL0MwMTEzIHB1dAorZHVwIDUzIC9DMDExNCBwdXQKK2R1cCA1NCAvQzAxMTUgcHV0CitkdXAgNTUgL0MwMTE2IHB1dAorZHVwIDU2IC9DMDExNyBwdXQKK2R1cCA1NyAvQzAxMTggcHV0CitkdXAgNTggL0MwMTE5IHB1dAorZHVwIDU5IC9DMDEyMCBwdXQKK2R1cCA2MCAvQzAxMjEgcHV0CitkdXAgNjEgL0MwMTIyIHB1dAorZHVwIDYyIC9DMDEyNyBwdXQKK2R1cCA2MyAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTI1IC0yNTYgOTc4IDczOV0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIyNDEwNDg5NTkxNTg4QjZFNzgyM0QzRDc0QzJFQTMyRkU5MworOUVCODhBQUIzQjU5MTU3NTQ2MkYyRTk2Cis1NUI4NDM1RTE0MTk2OTlFODMKKzQxMTEyNjMzCitCMEZBMUE0RUM5Mjc4N0NEN0EyNkE4NzNEN0JECisxRUNGMTc1QUQ0RUE0OEI4N0FFQzNBQ0M4QjM4RTNCMzhGMURERkM1NzgwRDJCMDkwOTQyRTk5N0Q2NzlBMTMwODJGMENGNTdGQTc3MzUyOTlGNUMyRjdDMDVGRkE1QkUzMEY5QjJCRTUxRDZBNEEyREU4REE3RjU0M0FERUMyOUJGNTBCNzA1MjQzRkFGQjUwMkE4Q0NCNTNCOTk3NEJGNUI0QUY2ODJCQjNFRkU1NkE2NTlBNzEyRUZFNzU3MDY3MjhGMzA0MjgzNEIxQQorRkJDQjIyM0UKKzcxNUU4RjE4OUQ5Q0NBMEYyQTk5OUNCNDZECiszMzlEREQyMkYzRTM2RDVEQ0Q5QkZEOUQ5MzE5MkE3MUNDNzdDMTY5QzJFOUUwRkYwNzRBNjlCMTc1QTAyRjAzNTlBQTkwN0MyMjBBMTI3NDJBMEVENUM4NkM1QzE4QUQ4RjRENTc0QThBNTc1RjIwRjY1QzI1NjZDRjMyNjFDMQorQTIyMEQ5RkEKKzRFMjI4MkM2RDM2RUM3QjQ2MkRBMzUwQTM2CitBQTlEMkQ0MkI5MEIxNjlEQzMyNjYyOERFQ0Q4RTYwMzk4NTgzQjJERjAxQkExNzQxNEM5OThEODAyM0JGRDFDNUJBRTY3NEQ1MkE0RUMwMzhCMEEwQjYxMDA3RTYwQjYxMTY2MjhEOTU2MDIzNzM4OTU0Q0E1RkZCREVBNjcKKzdCQjY2MDRCCis2RUMzNzNBMEYwOUVEM0Y4QTdDRUJERUVGOAorNzE2MURFNDlENjBFNTc5NEQxMUNCMzZCNjc2N0QxNTdENDdEMDZERDI2NDlERkRDNjMzMEUyRDA2RkFEOTY4RUE1RUE3ODBDMkYxMzUxNTNFNjk3RjI4OTNBRDJBNTQwRDdBMDg5MTA2QzYzQkVGOUZECitGQkNEMkRGMQorQjgyRTk1MkYxRDVCOUMwNzI1REM3RDdCOUEKK0ZDM0VCQ0FGMzMyNTIzNkJDQUZDMjhCQzQ1MDUxMEY4N0M3RkFBQjA0MDZFRTkKK0VDN0VEMjJGCitDNjlFNjkyNjRBODNERTcwN0RBMzVCMzkyOQorNkQ0OEU4NUQxQkE3MEREMjA3NDE0QUI5QzlDMjExRTRDQjc2REQ3NDgwQkRBOENFOEUwMzg5RjM3RDMzMTYKK0NGQTU4QTc3Cis2NUJDNjdBNEVDOTJCRjc5OTc0QUZDOEFFMAorRUREM0IyQTc0NzhFQTE5NzNDQzIyRDI5Qjg4RTc0OTkzMDNGOTFFOTE2RTkzQjQyOTY1Q0NDRjFENThCQzk4QjcxODQ2MjM3OEJFQzQyREE5RTBEMjVBMjREMTgzMDUxRjdDREVGQUU1MkFBOTQ2MjRFMjgzNTNBRkNEQzk0CisyNEUzN0QxRgorQTY5MjMzMDY4NTU1M0M4RkU3MkEwQkVGRTMKKzhCNTg4QzY0RUU3MTY2NUEzOENGQUFGNDcwOUY2NEQ2NkYyOTJERDQyNDMzNTQ0NDMwNDk3QjgyQzZFMzYwMDdCOUY1RDNFNDA2QkUwNjk0Qjk0NDNDQTFCNTcyMUVERjEwMzE0N0NFREQzODA3NDZBMkUwNkMwQjFFNjE2MkU4MEQzMjAyMjM5NkREQURDNkFBREY2ODk3MEM0OUE4RkJCNDk5MzBCMzg0NDlERUExNDc3NAorQ0IyOTAxODkKKzRCMUVDNERCNjM1NjdFNkIxNkFFRTM2RkUwMUEKKzNFNUU2Q0M0M0Y5MkRFNzcwMDlEMDNERTQ3MzA1MDQ3MTFCMDE0NTkxMEI1QTdGRjY5OTE0RTU1MzQwRUEyQzYyMTVDOUMzODc0M0E4QkU3OTQ1NTIzRDNDQjYyM0M5NjYwRjlBNzYwMzU5ODI0NzUxRUQ0NkU3MUMyNjRCMDY3MDc1RDJBMUMyQTZFNUJGODJEMzE3Q0U4MTBCQUY3RDAwQjJFREI3NEVCQUYwNTM2QkNEQUM1RjlDMjU1NDdDQzQ0MEQ3NDA4RkU4REYwRTA1MDVGNjg3QTE5NkMwRQorNTJFRTg3MDcKK0QyRkRFNkFDMUNGRjUzQzUyMTA4MENGQTFFRkIKKzJCNEY5QkVDRjNBQ0Y5NDJCRTkxMkM4M0ZCQkE3MTRDMDUyRERGQTkzMTA1QzA5NUJGNDAyRjRBQzJDQjEyMUM3QzlFNTVFQzRDRTAxMUExQzIxODRGNzVERjVBNkQ2ODM4OTQxNjM0MjExOTNFQjlDOUM1MEJBMEFENTkzMENBMTcyMTU5OEM2QTdDNDEwRDhEMTZBOTNCNjIzRDRGNENFNUI5NjczNkQ5QTAyMUQ1Qjc4N0NEREUzQUU2MzhFOEFDOEM2NDMzMDgKKzg0QjI5MEMwCis1MzA2QTY4NkY1QUU3Mzk3RjlCN0RFNDFERQorMUI0QzI1ODY5RjhCMEI3MDdDRjk1MTk4MzUxQ0JGQTVFOUQwRjgwQjM2NjQ3QURDRDBGNTlFNzQ4NzQ1MDBCMTMwQzM3MEE2RTM3RTVDNUM5QkRBMUY2NEE2MThGRkVGQTg3OUVFODE0NTQwCitGMEM3MTQ3RgorRjBENDc4OEUxNUJFMUM5NTIyQTg3MDg2RUEKKzEwQTU5N0UxQUFGNTgxQTVDOTA1NkVFRkNDQ0M1MUUyNTEzQzM2RjA2NTYzNkE2Q0MxNjFCQzcwOUYyQkE0Njc4RkJGNEJFNzU0OTAyQjE2NDhCMTI4NjlBN0Y1MTlEQTYyRTVDOEJFOUQ2M0IyQTFFN0U1NUI5MTgxQkEwNUI2RDQ1Mjg0RTA3QTY3ODk4MDk5MjVBRUJCMjU5MEU1QUEKK0YyOEM5QzgyCisyMjQ2RUY3QjFENUY1MjU5RkU0OUM0QjU5MDlGCitFNTQ5Qjc5ODM5NTk1Q0ZFQkIxNzI5Q0QxODJDMkQ3MUZGQkU5RjREN0NGNTFGRDUzNzhEQzgxNkU1ODA5RjY1NzM0RUVGNEU5NkIwNTZDODFERkY5RDA3RDU3NzlFNEEzMzBENDQ1RDc2QjJDMEU5MEUyMjM3MUY2MUFBNkY3RkQ0OEEzNTg2MEZBN0Q1QTlCNkQ3QkRFQUYyRTY1MDVENURBM0UxQ0JGNkQ1RjM0RUM2QzhENzExMTYwQTAzMDRERDgyREM2RjZGOUI4MTQ2NkRBQUZGQzJFQ0Y4QkM4QTEzQjEwRQorNTRBODA0RjMKK0M3QkVEQUQ3REJBNTFEMTZENTM0OEMyM0U0OTQKK0RFQzY0QUQxRjkxMzVGNDlDQzI5MDY4MTkwRUI5MDQ1NDIzMTg4MUFFQjMxMTQ4NDNEQTFGQkQxQkUzMkFBQjQxRDdBOUFCN0I5MkM2QzY5QUNCNUQzQkFEMzJERDVFQUM3RjAxRDdCOEUyQzhFOEQzMzJDQjZDQzNCQzk3RTlDNDMyNTk3OUI1ODVDMkNDODk4RTM5N0FDQzYyQUJEMTk1MUM4NDMzMERDMjY4NEMxREE5M0NGNUYzOUM0NDNDMDUwRjg2QTM2Qjk2RjE0QzE3QkQ5NTJCOEM0M0Q1MUY1N0VBOUVBQzUwMEExQzk3ODMwQTZCN0RCMTA4OAorMjNDQQorMjcKKzhDMzRFMjI3CitGQUFDRERFRDNDQkI2OTdFMDY2QTZGNjhGNQorRjcwRjQ0MUVFODkwOUVFN0MyNzUxMkE0MDlCRUNDNEREMzdFQzUwQUU0MzE5NjJDM0Q3ODgyMDAzNEMyNzgyNUM3QjZDQjdCOTkzRTkwNjFGN0Y1MzQzMzNCMDAyMzk5MUUwMDQ4NzYwNEJGOThDNDQxRjU1MDA1NEM2REUzNUY3QzU5M0Y4NUYzQTk4RTIxQjc2MDVENkI4N0M2MTZBOTA5REYzOTE2NUUxQURGNEFCQ0NGQUI1OEI0NEQ4ODk4QzAKK0YxQzFEMjQzCis2MDQ3RkI4QjkyNDVCNUI0RkE0RjZFODBCNQorQjg0RTk5MTU4M0M0RkZGMUEwRjU4NzMyMjA4M0FEMjhCNjcyQUI2Q0ZGQjNCRjk3NzNCQjU4OUE1NTYxRTg1NTVCMDQ1MjVDOEUxMURDNjI2RkJFQjY0NTk4RkY1MTVFQUYxOEMyQjRBQzBGQjIzREI3MzUyMEVBN0FFOEY4M0YwNTM2NDIyMUY3RDQ0QTBDRUE4NDg1QTE2MTY0NjgwNjcwMTNDQThFRDc3QjVBMjYzNTZBQTE4MkUyNjEzOUM2QzQ5Nzc4CisyNUM4QkQ3MgorRkJDQkREOEZGRjlEOThCNjk5NEIzQkYxQUFEMworRkFCNzRDMkJDMzczQ0VEQzU5ODA3Q0VDNTc5OEEwREZDM0Q4OTMzQzAwNDkyRUE0QjUyMUU2NjY0MDg3MTgyQjlDRTJGNTc4MThENTJFOEZBOUEyMTdGMTVCMjFDMTYyRDdBQ0Q3OEMyNTEwOEYyNjAxNTM2ODVFRkVCNENFMUFBQTQ2NUVBQkI3Mzk4RDhCOTQ0RUUwOTc2MUU1MTMyNjdBRjRGMEU1Njk5OTFEMEFFMTJBN0IyRDczNDUyRkI0NjAyMjAyMjIxODk2NzUzMkQ1QjEyQUU5RUJDQTNCMjFGQjNBN0QwQjM5RDMwMEJFMkFFNTNCQ0UwQ0U1CitCQUY1NDk4RAorNEY1MTY3OTAwOUNFQzM5NUNGMkJFOTBBOTJFMgorRjFEQkREQ0UxODExODYwQUVCQTZDNDAyNEU0RjAwRUNBNURGNDFFQjMyMTgzRUU4NzkwRDdFMjAzNEY4OTdEMTA3QkZDMTJENkYwMDI1MjdBMEMyNzYzMzY5RjQ2MDJGQURERUNFMzU4NEFBRUYyMzlGMkM1MjU2REYyN0MyOTlFMTVCMjRCRUM5OEIyNzQ2RkY0RTdFOUNEMjJBMzI3MEI5QTE5NTYyMTgwOENFMjYyOTY4QzQ2NTcyODZCQ0QzOEY3MTgxNDY5QTZBM0YxNTE3CitFQjFDNzhDNAorNzkyRjhBMjlDMzgyRTM3ODJEMjhCMjlFQ0FBRAorNjBDMTJGNUFBNUEzMjQ0M0Q2RjM3N0ZDMENEM0QyRjVCMTMyOURDNjFDN0RDRDkxNkVCQzAyOUMyNUZCMEEwMjRFMEVDN0NEMzZCNzUwQzQ4RTQxNDNGNUFFNzY5QTVGMzQ4OEZCMjA3RTQwOUVCRjA5Rjc0RDUwRTk3MEQwRkE3M0QyOTVCODJDRDYyMUM3QjdGOENDRjdFMTU5RDQ5MjRCNTI4RTQ3QkZEMDVGNTc2NTA1RURCQ0VCQkZGQTM0RDQ0NkU0NThFQ0M4OUI5NTFFQTQ4NTc4N0NFRjA4NUFCMjM0QURCQUQwOTc1RDA2NTJFRQorMjM0RTkzNjIKKzFGOUZDNjdBMkU0QzIzQjg3QjQ2RjkzQjRENTkKKzQ0RUVGQUM2MzhGQ0VCRkQ5MEE0QTM3MTM5MDFGNURCQjE5MEZCMzI4NzZGMDA1NDRCRjI2MTMzOTMxRjEwODc5NDc3OTk5REU1QjZBQ0MzQTgyQjhCMzQwQ0YyQzY3MzIxMDFBMjFGRTQ0NDc5ODIzOUQwODBENkRCMTJGRUUzQjlDQzU0RUQyQzdBOTYxNTM0NjIzMEY0QTA5Mjg3QkZGRjE4ODI1OEMxNEQxRkNDQUFFRjQwNDFGQjczQzhFNzM0REM4NjYzQUI0MUYyNUNFOEJGOEYzRTU3QkQxNjU0ODk4RUY5NTZCM0E3RDY3N0MwOEU4OTk1MTYwNQorNkMzNgorQTUyRTdCMzJDMzcxRkRDMzMxMjNGMQorNjZERDYzN0UKKzNEQ0NEMDVCNUE4RDI1NEZEOEY0RTFFMkNDCis2NEUxRTg4RTc5REM3MzEyMjA5RjIyMzQzRkZCMzBDNURCN0JFNjAxQzFGOTYwM0I5QTNCMUU1NDQ2NTUyQUE1QkZGRjgyNTIwMjg2OUI4RTA4RjQ5RjAwMjM2MUMwNDc2MjhFOENDMjI5QzhENUE3NjgyMDJDCitFREU0NTY3RAorNDFDRTY2OUU5RTc5NzBEMDU5NjlCM0E5QjMKKzk2OTVBQzRDM0E5Rjc1NDFEN0Q1MDFFOTc3Mzk5NDlCMzM5RkEyQTY3QjJERjFFREU5MTY5NkFBM0VFNDE3MDA0RkY1NEZEMUY0MDdDMzFCMUVCODlDRjk0NjJDODg4RjVGQjA1MjlGMTNCNDRGRkM2Rjg2N0FFMjc2Mzk5QTVFMkUzRjI2Q0JGQzhGRTEKKzE5MEU5NEU2CiszNDg5MEU1OTZDOTYzMkY1QkFGNTIzRjY3RUYxCis5ODcwQ0VDMTBERjlDNzBEOTU1RTA5MzE2NDEyQjM3RTVERjRCQjExRTVGOEM5RjI2N0Y3RDc0OTQzMEJFMjUyREUzQTAxM0VFRjE3MzlGRjYyMkRFQzg5NkYyNjBDQ0RGQTZGMDQzRjlBMTFCM0Q0NjQzMkY0QUQzOTREODFFM0Y1RDE4QzFEMTcwQ0VBQkY0QzY1RUNERUMxNTk1RjFDRTU4NDk0RTM1MTk3NzBCMEY4M0E5MTkxRUJFREZFQUFFRjlBRjBBMEFENkJDQzBGMTA2NEU2NkRFNjcyNzIKKzk3NDJEQzYwCitFRkI2M0ZFMDEzNDEyMTZDODY0QzEzNzA2QQorRkRBMUQzODM2NzM5NDFENEFGRDFDRDk4NkY0QTUzMEM5OURFOEEyMzQ0MERDRjVGODMyNTI1RUU3MTI0RTFDM0M3MjQxMjJFNEM1NjlCQzlCNDdDNEE5N0QwNEJGRTBEMDNEODgwRDczNTk5RjA2QUM3M0YyQUVFQTUzMDFCQjFBQjgxQjZGQjc1QkVBQjVFMTY3NzQ0MDQ0Q0EyMjNDMDRBQkNGMjM2NjU2QUQzNzk3NzhBQTVBNQorOEQ2MDgzRDMKK0YwRjQxNkYzQ0VEMEFDNDIwOTM3MkYxMTVDCisxQzg4NENDQjYyNkEyNkZENDI0RjQzRTFFMUM1MUQ4RkZFREFEMzAzNTU2QTZFMzlBOEVGNzA5QkE2ODc0RTQ4OUIwMDgyRDc4MzI3QzUyNkE2QzE5MjhEQkQ2ODAwNzYyMUNFMjg5MDg2NTVCQzZEQUU5MjRBQkI4NkQ5NEM2ODhFNzE5RjkyNDM4RDk2NkZFN0I1M0NFMDcwMDc1M0VCMjgxNDA5CitFNDYzQUFDQworODE1MTEwQzcyNUM3M0ZCODMxQTFGRTFCNkMxOAorOTEyQ0VDQjg0RDMwNDY4ODRBM0Q3ODg4RkUwQzdGRjI2QUM0QzM4Q0I4QkFGRjY2RTg2NkE3NDZGMTU2ODI1NTBFRDZENzM4NDk1QUE4OEFBQkVBRTg4NjAwOUExQ0I1MDBCQUE2RDU5QTU4RjVBQkY4MDI0MEQ2MUNGREI0RTI0N0ZDMEU5Q0IxM0QzRDZFRTc1RkEyNDQyRjg2NURCRDdGNTJDQ0U1OUYwQ0RERUZBRjY2QTE1MTUzRTlGQjc3NkZGN0I3NTA4REExODE5ODZBNzUKK0YxMkJCN0RBCitCQkNDODk1NDk1NDQyQjM3MjcwQzQyM0EzMEM3Cis5QzVDRkE0ODlFMTlGRjE3MDk1QTk4NTRCRkQzN0VFNERCRjFERTVFMTQwMUQzMTAxQjA2N0M5MUI1Q0M5NkNDNzUzNkU1QkI4QzQ0MjNCRjA2NDhFNkEzNzJBNTI0OENBRTE5MDU3MDEyMkM1ODdCMTBBMkFFMTc5MjdDQzZGMTQ0RDMzMUI3MkI2RDdFNDg3NkUyQzkxQzhDN0RENzFBNUQxRTZEN0IyNTc2RERBNDU2QzE5N0M4MjdDNjM1NDlBMEE0NEU4QTc1ODc5NEUxMTA5RjBEQTIxRDgxNjc5QTVDQUUzMDhENTI4OTUzOTdFRTdCRkVEREIxMDcKKzQ2MDI0RDc5CisyQTI5MDRBN0ZDMzZGRTI3RTZGNEJBMkMxRkMyCitCRDYwQjdFMUE3MDUwRjgzRkNERkEwQzM2MTA4NTM0QUZBQjEwNTI0QzhBRDE0REI3MUU4NzlGM0QxNDRDOTgxNzc0QTY1QTA4NkI0RUZFQUQ1RkEyMDg0RUYxMUNGOUQxQzc1RDdGRjNERjcwODQxNDlEM0UwOUY3OTMyNzg4MjBBOEJGMjhDRUEwNjIwMEYzMkU4OUU1N0IzQUQ3OUU2M0JGRjJGMDc0M0M4RUYxRkI3RTRBRjM2NUVDOTM3NDFBNkU2Mzk4MEM0QUEwMjAzODU5RUQ4NUE4Q0NFRjk2MkQ4QTAxQkY5Q0Q5QkY3RTYwMEJBQ0U2NzU0MjAKKzNERDQKK0Q3QkZCNQorNkY3NEI5QTMKKzQyNUM1NjMzNUZFRDkzNDhFNkYzQjk3MTgxCitBRURDODhGMTQ4ODhBMzAwNTBCMEIwNkQwMkRGMEM3MTc2RjhCMTMyNDMzODI1QjUzREUxRkUwQ0I3MEM4RUJFNDZEQTkzQTVDMDczNjJCMzc0MjIzQTMxODFCOEFCMzI3QTlBQjQ1QzU2NTFGMjEwNzI5MjUwNkFCN0NGRERCMDMwRkI4M0MzOURGMUVCM0Y2OEQ3QTMzODM5QTI1NTEyMTAKKzhDMDQ2MzUxCis1RkUzMDMwQkRFMzhDNzhBRUQ5RDM1OTA3NEZBCitBQzU1REVFN0E2Njc0MzEyRjA4QTk1M0IxNzlDMUIyNDEyQUVDQ0QzRDA2OTk1MjE5MURBNUU5Mzk0MDRFNzQwQTFCMDc2NTRDNkZFNDRCRkE3RkJFQTNDODc1QUE3RUIwMEFDODA4N0QyRUFEMTMwQzU1OUQzNkE1QzREMTFENkQ3RjMyRUI4ODMyMjU2N0FFQUFCMDEwM0VCOThENkY5M0Y0MTJFNDU5MTAwNTUwOUM0MDc1QUQ0OTQzMzc2NEVBNDgxREQyQgorRjY3MDVEMEYKKzFGRjg2QzMyNkFENEE0NkQ2MDZFNUQzMUFECis3ODZCMjE0NjlFRkYzRTg0MDREREYzMjNCNkYwQkEzMTVFRjI2RjQwOTI1NUZFMTZFNUYyNjg3NkRFNEZFQkU4NjdBQ0NDQjVEQjhDNERBQTg2NkQ1QjYwMDc0OTA3OUNCQUY3NzIyRkE1NTA0OUNENTM2QzVGNDlEMTE2QUM4NjEwOUQwMEUxOUY0MkE1NzFENzBEMDIxM0E5NkIxODUwNzBDOTJCRDJBOENERUNGMEFBCis4M0ZFODc2MgorMEFGNzQ5OTg1M0RBQkMyQjEyOThGOTk4QUU3RAorMDZERTAwMEJERkY3RTMyRTAwMUNCNzk3MkZBMUU5MTUyNzA1Q0NBQTQwMThDRjk3MTVDM0M5QUJCNjNENzRBM0U3MjQyRUIxRkRDNUEzQTk0RjFCRjc5RjE3RTRDMTk0REMwRUNCMDQwMDc1NUMyMDRFODJCQzZCNzJDMjg3OEFBMEJERDQ2REM5RjM1OTVBOTRDRDBFODU0RDk3NzFGQzVDOEQ3Qzg3ODQ3N0IyOEQ2RTE0QzdCMkI3MkRCRjI3RkNCMUY0OUI5RTE0OTlCNzU2MkZEODM5NDE4MTk2MjdFOEZBQUVBMkMxMDVBMjNEQ0ZGMkM3RDQyMzVDCitENzU0Cis2QTI2ODY1NUE5MDJBOTY1ODNEOUM5NTAzQUY5MkREMworNTQ2RTc2ODkKKzI1Q0VEOEQ0QTQyQTgxMzg3RjFBQzhERjcyNkIKKzE4RDVENTMyOUMzNkM2NEY0NTI3RDRCN0NERjgyMDVDNUZGNDJGRDdGNzlBNzRGRDFENTAyREY4QkNEMjE4RjQwQjI1NjkxNTZFMzVBRkM0M0NDRTA3MzEzNjRGRUE0RkE3MDM1ODA3RjBDMzYyMEU0Njk2QjlEMTI5OThFNUYxMDc0NjAzNjY1QzlCNjVDQzQ5QTQxQTUyMTU1RjBCMjg5QkVDRTVDMDU4MTMxNjEyNkUzQjAxQjAyRTM2RDM5RUVERUFDOUI4Nzc3NjFFQTIyN0NCRDI5N0Q2NjdGMDM5NjhBMjc0NDFGNzJGNjQ4Rjc1QTNGNEE0NjQ2NworNUFDOAorQUZGNjMyQkM4NTgxRTZCNjBCOTYwRDZEMjRCNDcwNjc0QkY2RkJCNTk0MjAxNjA3RjA2MTdCRjkxNDdGRTAyNjM3NUM4OEU3NzQxMTdECitERjdCNEU4RgorNEE5OEY1MjhCQUU2OEExRDIyNTk1MUUwNUQKK0UwMENEREE0RjY5OTlGNjQzOUUxQTI1MTI5QzVBOTcwMDU3QTEyQzg4REI5Cis2NzY0MjRGRQorODE2N0ZEOTlDNzNCN0JBMTI1Rjc5MTk5Q0MKKzkxQzUwMTc0MTlFMEMyMEZBRjQwNUIxQTBDOENENkMyODRCNkRCRjJGMjEyMkJBQzRCQTM1Q0Y2QUJEMjQwOEYzOERFQzZDNTY4NEU0RDBCOTAyREJBQjJGODgwN0JERTdDQjhCMjBDNDEzQ0I4MjY0MTFGCisxQjlCRjVENQorQTE5NDg5RkI5QTg2NkQ4NzQ3MEFBNDk4MzA5QgorRDlFRjQ4Nzc4MDQzNkUyQTE2NjBFMzE2QjQ0MDI3MjVGMDNEQjI3OTAxRkYyMTkzMzNBRTUyQUUzRERDM0I4MkQwNTgzMTJBNjVDNUUzMTA4RDdDOEJFOEIzRTQwOTJEODE3RTIyNDFCODAzRkZFQzVCQ0JCRTg2RTcxNTlFNDMxNjc4M0U5NkM1ODEyQ0Q2NDFFQkQ5M0IzRTgzQTU5Rjg1MDkxQzRFMkVGOUVFQzE5M0QyN0RBQ0MzMENEOEU5OEYyMkZEMkQzNUFEM0UxMkM4M0M5RUUxRjhCODg0RTMwMzkxQTdBRkVDQUU4RDIzQ0VCQkI1Q0I1Q0RGCitGNTZFCitEOUNGQjUKKzc0QkVBMjk5CitDRDA4NUVFQ0ZFNzhFQjdDMEZEODdBRkUxNworRjUyNEJGRUU1NjYwRENCN0JEMDVCRDY1NjZFRUU2QzNGMTlDQjdCODA1OEM2QThEMDQwQTRCQTJGMDMzRTY5OUVFREFFOTY3NkM1NTY1RjRDNDg4NzAxODVBMTI3RUMyQzM0NEM4NTkwRDA5QjZDRTU5OTNDQ0EwNkI2NDAxMzE0OTc1QjlFODhDRTQxQjhBMzA5N0IwOTA3NzUwMzNFNUM4QjMxMjhEOTBDMzlBQUEKKzM0MERDNzZFCitCOTRGNkUzMDIzRUEzNTFFOUI3REY4MjMyMworMjJCMDlCMjMyQ0Y1NDYwOUQ1RkM3NkNFQUU5NEZBQzAwMTEyMzE3ODRFNjZFMzREQ0U4QjU0QzJCQ0ZENkZBMEY3M0I3QjNGMzg0NUNGQzAwRDUxQ0MzN0U2OTlDQTEyQjE0RDc3QzU0QUE4QTc3QUZDRTQ5ODEzMkM0OEFBQTM4RDZDODYwODdDOEZDMzQzQUI4N0ZCM0E1MUY4RThFNjExN0IKK0RGNkFCQjI5Cis2N0NFOTNBRjVEMDkzRjczMTExNDdEODY2RUQ0CitEMjQwRTJFQUNGRTJBREI0NzU5REY1M0ZBQUVEN0RCMDRCMkFGMEJDM0MzMUJGMUY0MDE0QUY3MTc2OTQ2NTY0NUZEMDIxQkVBQjEyMjAyMzAyODM0QkQyRkFBOTg0NjI2RTIzQTMwMTBCQzAzMThDOUUyM0ZGRTBCNzhCODgxODE0RDkzOTY3ODZEQUNBMjRBMzEyMkE3RjExRENGOUE0NTYzRTlDRkMxNjU4QjdCNDBENDgzNzYyRTYwMkYzOEFDQjRDNkU2QTg1OUI1M0E3MzAwQjA4MjE1MDJBCitGN0JDNDM1RQorRTRCNDM1MkU0RTdFRDZDMkEwREJCODM5NzEKKzczRkUzNDFBNUUzMkJGMTUwNzMzMTBEMDM3NTAzMUUzOTYyMkQ4MjFDRjE3QjdDQkNGOUU2NjU2QzNBNEI3QUExODAwQUI3RTRDREE4NDE0MUZDOEY3NDNDM0QxQTg1OTJEMjI0NTVEOEVGNTQwRkY3RjIwQ0ZFOENBQTYxQTVBNDUwQzRBOTQzMzAwMTcwQTAzMEQ0QjNFNDRBNTBBMkQwRkM5MzM3MjZBMkM2Rjc0ODkKK0IyOTNGMzUzCitEQzBCQ0Y5QUY0RDhBQjY3QjBCMUQzN0JBMQorMzc1MkI2QzlGM0RBMDA5ODI1MzgyQTVGRjQ0RUZEOTZDN0IxQUUxQzE0NzM5MEFEMjRGOEM0RDFEOTQ3OUEzRkY1ODAyMjhGQjVDNDA3RjI4Q0MxQzBGNTI3NzRGNUFCMjY1MUFBQTM4MDY4RkM4NEE3RTA4RjE0NTkxMDQ2OEIwNDM2OTc4Mjc2ODM3MkI0QzVENTRCQThCNEVGNDk5QjNGOUZGQzY1MjE2NDc0NkQzNzI5RTdFQgorNURBMkM0NDcKKzlCRUU3RjEyQjRDNkE2MDNEMDU2MkZFNEYzODcKK0M2Qzc5QjAwNzZBMjBFRkE3Q0E2Qzc5QTc1NzIxMjE0NDkxQjI3NzJDNjgyQUVBM0FEMUJDMjhEQ0ZBRTVDRTNDNUY5MzVFNzEwM0EwOENENTU0QTBGRUE5NzU2OEM2RjA5RjgxQzY2QUNERDA0MDg3QTg4RDEzQTAyRTM3MzIxODY0Q0I2NEJEMEUxNDJDRDFBMDM1QkIzQ0RGQjI2Q0MxRjg3MDZFMkY5RTJGQjBGNDYwNDEwQjMwN0U3NzBDQ0M5N0VDNjBENkVCQTc1RjA2Q0QzOEVCQ0E0MUZFNTAxQkUyNEE0MDNBNzk3RTcyOTYxODA0MTBDQ0Q3OAorOUZBOQorQjQ5QkQ2NjFDREVCNTc1MDVEQTg0MTQ2REZEOTJDODlERDc5MENCQjVDNkZFOTMyQ0Q4NzRBOTI1MEI0MDQ0NTdGQzA4RDhDRkFGODIyNkY2OUE5Qjk2QkJFMTYwRQorNDA2QzkzMTcKK0Q4OTc4RjNGNDRBNzhFNEZBRjZDNjRFMjRGMzgKKzk2MEI3RkY1NUM1QzFFRTcxMDg0RTE5QUJCMDRFNEFFNTA4NTY4ODVDNjA0QTkwRDlFMTBBQ0M3MEQ2NzNCOTY1OTRGNzIwMEI1Q0MwQjVGODQxQ0VCRjk1OTU1MTE0MERCODMzMDhDRjRDRTY0RUUyMDU2QTBFMEI2NkU0RDI0REI5OTAwNjhGOEY1NDUzMzExNTg4NEJGREQ4MENBODlEQjdDNDI2NTI0OEQyMDM1NTQzOEU2RkI0MEZERUZBOTdEQjU0QjZCMzFBRkI3RDU1MTRDQzNBMjcwCitGRDVBMUYxOAorOUUzNzY3MjEzRDk1QzBBQUFCODQ2MjE2MTkKKzEwMjZBOUJFRjMwRTBBNTI4ODU1MkY4MjU3REMwMDAyQ0M4MjhFRTEzNjAzOTcyQjM4Q0Q0QTU5Njk5QTE5QkQzODZEOERCNTMzQTMyNzIzNTNGRDlDNkU5N0VDNjhCMDJBREI4QUU4QUVBNzg3MUU0NEEwOUUwNkJBM0M1OTYwMkJGQ0ZDODU0MEYzRkYzM0YzM0ZGMTAyN0IyNzZCMEYKK0M4RTVBMzk4CitFQTVDMTgyOEMyN0RGNEIyQzMyRjlDM0Q0RjdGCis0MTE2QjA3Rjg0QTlCQTM2MDZGRUMwRkFBNjUyQkZGMkIzRTIwOTQ5RDUzQ0JEQkY0RjRCMTc0REFDMDc5NjQ3ODE4RDY4RjEwRkIwOTQzQzlDREEwNUQzREVERjkzNEI4NURERkE3Rjg0MzNDOTlDRkU5RjFCRjcyNDgyODA2M0YwNDI4MjlDNDk3RTk3QzM0RjVCNTk2QUU4NTBBNkEyN0U4MUQ3OERGRDNEOUU3M0I0NzQyQzBBNjZGQ0I0Mjc5RURBRDVDMjI0QzQ4MjFCREJERUIwMTg1QkYxOThDNUQzQUQ4RkI2NDMzQURCNTU3Q0RCOUIxMTY2MEIKKzI2NkQKK0E4MENBQkFERTAyNUMwNjJBQzEzMzVBQUFEMTk2QUEzODIwNDdGNTU2QzQzMEEyRDFCODJFQ0FERjdGRDEzQjcyQjg5QkYKK0QxODQ2NDkyCiszOEZGQTQ5QjQ3RkQ0QjRBRjNEMEI3NzBGNworREMxNjZDODVENDg5MTZGRjg5QTM2MTU1MzE1NjQ3MEI1MkQ3NkVGMzc4N0E4RTRBMkNDMjU4OTg1OEI0RjFGQzk4NDNDRUUwMDY3NjVCMEU5OEQwRUMyNjQwNjYyMURGRTY1REVBRkIxQTE4CiszNzAxMUU2RAorQjU0NjUzNkQzRUJGMzdBNTBGQ0RFNjA2MkUyNQorQTU4MUZBREI3MzI1NUJCMzZDNDcxQzMyNUY2MTZFQjkwRjY1NDE2OEZCRDg4QUEzRDhBNkMzQjlFMDE4OTkyQTJEOEEyN0QwM0YxRDAyNTlCREMxRENDNUFCMjc2OTczREY0NUMzNDc5QzAzNkRFMzcxNkNGOEMwREE1Qzc0NTQxQTQ0MkU5RUU0NUVBRjFFNjgxNjAwNjY3MTY0Mzk2NTRGRTM4RDg5OTVDODREOThEMTVDNTY5QzMzMkY2OUQzNzgyNDY2NzcwRkRENDM3RTI4NjQ2OEI3MUZERjc2QjA1MURBNTYxOUZEMThERTkzRDgyQkFGNDJEQTQxCis0OERGCis3RUY2OERBOTQ3NTBFOUEwN0Q3RTk1NDUzRDcwN0UwMUE5M0NCREM0NTlCMUQzMzA1RjRDQ0RCQjg5RDg0NgorODM2MUMwMEEKK0Y1RTA0RTQyRTg2NkU2NDc0RTJBQkM5RjEyN0YKKzc5NjIyRkVCOTEyQjJGQ0U2OUZGNkJCRjI0NEE4MDdGNUYxOEZFRTQxRkMyQzJGN0ExRTY2RUJFMTUzNDA4NDU5RjlGMEUzMUNFMDI4RkRCQ0VEQUE4Rjk5NTQ5QTA1RUM0NUVENENFRDI4MTQ2NTg0REVEQzcxQjk3ODU2OEQyRkYxNUUzMzdCRDNEM0IxNEQ3QTE2QzFFOEZCNTNEMUVBMEUwOTY5NkM4Q0REQjMwRDE0M0NERjg3RjFDMTZDNzVEODI2NENGQzBDQkY2MEJBNUZGQTNCNworQzBCNzUyODMKK0I4N0RFQTAzNkUzMUM3NjlBMjIyMkJDQTM1CisxQTVFQzc2NUQ2NzU4RjdDQjU0MENGRDlBREQ0Q0FCNkZGRUIxMEIwM0RDMjYwMzgxOEU0RTE0NUE0QURGQzZEM0YwNzRGMDBFRjRDNzgxQjU2QkFENzg2ODM3N0REMkNGRTI4N0Q4NUIzRDcxRjc1NTRDMzIwMzA3MTFBQkY4MDdCNUY0Mjc4QzJBOQorNzkxNjQxRTUKKzZEN0I2QzFCRUJDN0VCNDhEMkRGNDUxMDJDNTQKK0ZFMjIwODEzQjc4RUMzQzk4MTA1Q0M3OTE1QzM0MzA0MjU3RUVCREZBNjREMDZBNDRENkZDMzc4MERCQ0RBRTEyNjRBREEyNzk5NTUyNTY2MDM3M0MxODU1MzY5M0EwNjNBNTdFMTVEQ0VCMTUwQjUzRTk1NTU5REZFQjUzNDAxOTY1NENFOEQ0QTZENEIyODk5NEYxRDhBMkE3NEIzOThDMkQ4NzZCNEM5MkQyRjkxNzU0MDRDNzAxNjVDNUU5QjdFQzRFODk4NDQ5MTNGNkExRDA0OUM5NjVCQjVBMjU0RjE2OTdFRjg5NUJEMTEKKzA4RjQzMUMyCisyMUIyNUE5RDdBQTlCRkM1MTUyMTk1MzYzQjk0CiswOUM4QTc5MURBQzdCNkY3NTc5NUY1QjBGN0FEQTRCMzkzM0ZDMUVGQURCMUEyMTFGQzUwOTFBQTFFMjNGN0E3QUU0NkE3RUY5NEZGNzg4MENDMUMzNDkyMzAwQTFENzZFMzJCQUZBMjA4MzBBNjUxMTRGMzM1NDY2RURCRTAyMTc5RDFCQjhEMTYxNkVCQkU5RDQyNDVCN0U3NDAwODlBRUQxQzAzMDI4MkRFQkM2QjU1OEU4MzMyQ0I2RTA3QTAxQkM4NkY2MkUwNURBNzIwMjc2QworRTI2MjkwMjMKKzAzMUExQjQ2MkM0MkNDODg4MTlGQTI2NDZCCitFRDgwODBENEU4NEE3REY2M0QyQzUwOTQ5NTM3ODBBOTIwMjczMTAzRTE0QUU4MjQ3NTA2QkExNzJDQUI2MjEzMjk5NDREREEzMkRFRjBDQ0QyNDgzOUVBM0ZFNzU1RkM1QzI2N0I2MDY2OEYxOTNEOTFBQkM3M0ExMTI1RUNGNUU5QzZFNjI1RTI0RkJFRUU1RDgwODAzQjdGNDYzRTk1MDEzQjlDNzBDNTIyMTUKKzMzRkJCNzlECis2N0Y4ODI4N0E1RkZGQzEwQjEwQTM0ODg4RUZBCis4RENBMTMxQjYwNzNFRjJEMzZCRTQyQkJCOUUwNDRBMEJBMTJDMDA3QkQyMjczNDAwN0Y4NTQzNDkwRTRDMjkwQzBBQkYxM0VCNzMzMzg1ODg3REFCMzIwMzBENDZEQTk4NkY3NjlGRDlBMEJFRTRCODk5ODVCQzM2NzU5Mjc0MTZDQjQ3RUZGNEQ5RTU3MDZDNjcyMTQ5MzczQkI2QzM1MkY4MzM5MDE0QzBCQzBCNTA0QTYzRDFFQUNBNDY4NTFCNkE3QjY2NUI2Mzk1OEJFOTQ2MDYyNTE1QzA4MDg4QzMwNDZFNDQ0MzUzQ0VBREUxMTEzN0YyQworRjc5OTlFMTIKK0ZGNUVCOUUxNUI0MUEyNzlEMkE3RjAxNjIyCisxQ0IzNEFBNDQwNTcwREVBNDMxQzIxQUEzMjZDNkNEMjBCQzhGQUQ4MEE1NzI1MkI3QjNGQUI4MDkzMDgyNzdFODBCNUZFOEMwNEUzRjQzNDEzODYyRTI4QzFCQTgyODYyMTFFRkMwNTQ2NTdCQTgyQkM4MTRCNjlEMEYwRTAzOTU4MThGMDEyNzIKKzIyRUNENDI4Cis0RTMyOTA3NENEMUYyOTNGQjI1MEM4NDAxRgorMzkwNkMwODBBQzAwM0U5NkIwOThBQUM4MEJEMTBBNTRFQkM2RUQ4QkI5NEREM0VDNUQxOUJENDA4RjQ2MTNDRjhBMDM1MTQxQzIxMDhDMjRCNUZDQUVGMUY1NkIyRDdEREMzRDlFODkyQ0YyRENBMUUwNTlFRDY0RTYwRkJBQzYxMjdFQUY5NkY3MEI4QkFDNDlDQzJGNzE3REI4Qjk2N0FGNUY3MkVDMDRBQTVFRUY4RUU3QjNCNUI5RTQ2MUFCQ0EyNQorOUVGREE3RkQKK0M0ODQwQzAyN0M5RjMzRTNGQzlDQUFBMzdDCitFREYyOEUxQTg3NjlFQUQ3RDA0QTQ4M0U4ODNDRkYwQkM4RDY1NTlEMDMyNkM3MzNEMEMyN0ZEQjhDNTM4NDEyQjVFRkYwRTJGNjlFQUI5RkFDOTU5RTdBODEwQjNBNTM1QkZBNkZEOTE3QUIxRDk1MzAyMEI4RkRCMzQyNjNEQTU1QzVBNTk1QTc0Nzg0Q0I1NjY1NjkxQzg4RURGMUYwRENDNkQ4MDJBRUMwRjhBODk0CitGN0ZGQTk4QgorOEMwRDBFNzE2MjRGNTU1NEU5Q0UwNkFCOTY3NQorRjM3MTk3MDkzMTREMDg3NUFFQTYxRDdEMDg5MDQ5MDJFMEUwMTdGQkFENzRCQTcxNUVFNjdEMjVCQzUxNEQ1RkIxRUU3REZBMzgyQUI0Q0YyNDYwQ0QxNDE5RTczQkY0MTc1RUI4ODE5QTg3MzhDMUU5Mzg4QzUwODM1MDc3OUE3QjgyOUFFOUI0NzY1MTA2NTNGOTNEQzA0NTdBOUM1Q0RFRDA2NjZDQUQzM0I2REZFRUI3MjJFRkMxQUZGMkQ2MUQ5QkUxMkI4MjgxNkQyMjhFQTVERDlERjg4NDcxMTY5RDRBRkIwMDBFODI3MkNFQTE2MDZFRDk2NkQxCisyQ0MzCis1RUMyMzJFQkYwOTRDMzc1NDYwMkZENkFDOUU4CitGQTkzNUE0RAorNjM3RkY1MEJGRTA0OTgzODY3MTdGODg4NDgwMworMTI3OTJBNzcyRkI0RTUyNDU5NDRGOTg5QzM5MzA3NkRCNEU0OUUwNERDMUI5RDQzMzc1NDIzRTk2OTAzRjAyRkQzNEY0NkEyMjU5MTNDRDhGNjYyQTAzMUZCMDc1NDYxODg0QjgxQkY1QkYxNjhFQzVCNDdGRUJDMDY5NDMxNjVDQTMzQzlCOEY3RkJGNzA2OEI3RTIwQzM3QzdGOUVEMTY4MkYyQ0Q4MEZFQUY4QzhFRDE2QUEzNkMwQzY2NjQ5MkNDMTNGNjg5QjQ5RjJBNjUyRTkwNkVBN0E4NDMyMTdBMzg1QTJBNEMyRUZEQzg1NzEzMEQwRDEwNUE1CiszOTQ4Cis4OTQ3ODI5RUVERDRDNDgzMEExNDVDMkE0RkUzQUUxNUQwODlGMjMyQUY2NUU1NDkzQworMTA4RDIyQTgKK0ExMkEwQ0YzODRCMjFEMjlGOTEyMzczRDNBNjMKK0U4RDIzNDBFN0VDRTk4QzYyMTE1MTU1NUU4MDlEODE2QzE3OEQ3OEExQzdCQTIyOUQ3NTRGQjE2QkVGQUM2MDQwRDNFRTRBM0QyQjVBNDk5RjEyMEJBNjhCQjNCRTU5NEUwNjFCN0ZENzUwRTJCOTI0MTFEQUFCOTM5QjE0NjZGMkM1MDI5OTk3NjM4NzkzRkMzMkUxNDMzNjE2QzZFRTMxNjhDQTIwMTgxMUU2NUVCQ0IzNDI5NUJGNDlFQkRFNzNFNDVEODcyQThEQTNGMzNBMUZGOTc0RjNDOUY3OTU1QjFBMDA5OEJFNkYyQzM0MTg1OEM4RjI3QjBBQworMDM0RAorQzNCMjA0NUEKK0UxODc1RERENTkxQ0E3M0IxQzQzOEFEMTY3CitBRDZDMzlBQUIzQzJEMjhERTM3Njg2MTRGNTlBQjBFQ0Q1OTAyQTUyQTI0RTg3QUZBQkJBOTAxQjQ2NEJBMTdBRDI5Mjg5ODE1QTc2MDQxOUEyMjQ3RjRCREQzOENCNkZGOTg1NzM1NjM1OTNCRUJFRjdFRkE5MDk1NTJCRjQKKzVEMkQ3NEJECis2OEIwNDQwRkYzMkQ1NjNFRUExNTYwQjQ2ODMxCiszREREODhGMjdBRUQ1MkU0NENEMDhGRTE5NTQyNDgxMEI1M0E4MkVDNjUwRDM4OTg3RjE5NTc4NzgwM0JERkMzQkIxMDUxQUQzNTFBMTFFNTUzQjkxMzIxRDZCQjY5NDYyQ0EyRUVGQ0Y4NDQ0N0M3MTZCQjRCMzRENzc2REEyQTg1QzU0N0QwRDZCMjQ3QTQzRjAwNDNERjczMTE3Njk0RTRCQURFODQ4MTRGQ0ZGRkE2OUUzOEQ0QkMyODAyNjc0NjRFRUM3ODhENDE3RUJFQkUKK0NEN0EwM0YyCis1NEM4NzIyRDVENDU5QkY1Q0VFRkM3OTNCOQorNjA2MzdGOTlFRTU4RTQ5MTA2MUI3QjlDRjBCMkIxRkE1MDAwNkYxNUYwNDYKK0VDNEExQkY1Cis4OURDQUIxQTlDMUUzRDQ4ODg1MzFBMjJGRTgwCiszQUZCMjE3MTdFRjg4MjM0Cis4NDcwNEQxRAorMTAzQzIyNDJBMDBEMTk4RkUyQUYzQzkyRURDRERCMzgwMkQ3NTI2M0NCNEQ5ODg2MjQxRUQ0QkRBRDI1NDAyMkMxNDEKKzM1ODRDRDBBNjhGQkQ3MzI0QTA1MTczRTU1MkZDMUE2Q0ZFQ0IzQTE4QTBDOEZFQ0IzMDk0RDcyQjA4RjAxRDNBODlCOTY0Qjg4NDcKKzQwNUREMUJFMjdEODVFRURGRkY5NDk1RUI1REE2RTEyNUU5QUZFMzA1N0I0Mjg3RkZCMUVENAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoYgorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGIKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hiIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NiBwdXQKK2R1cCAzIC9DMDA0OCBwdXQKK2R1cCA0IC9DMDA0OSBwdXQKK2R1cCA1IC9DMDA2NiBwdXQKK2R1cCA2IC9DMDA3NSBwdXQKK2R1cCA3IC9DMDA3NyBwdXQKK2R1cCA4IC9DMDA4MyBwdXQKK2R1cCA5IC9DMDA5NyBwdXQKK2R1cCAxMCAvQzAwOTkgcHV0CitkdXAgMTEgL0MwMTAwIHB1dAorZHVwIDEyIC9DMDEwMSBwdXQKK2R1cCAxMyAvQzAxMDIgcHV0CitkdXAgMTQgL0MwMTAzIHB1dAorZHVwIDE1IC9DMDEwNSBwdXQKK2R1cCAxNiAvQzAxMTAgcHV0CitkdXAgMTcgL0MwMTExIHB1dAorZHVwIDE4IC9DMDExNCBwdXQKK2R1cCAxOSAvQzAxMTUgcHV0CitkdXAgMjAgL0MwMTE2IHB1dAorZHVwIDIxIC9DMDExNyBwdXQKK2R1cCAyMiAvQzAxMTkgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTE2IC0yMDkgOTE5IDY5NF0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OUNDRUMxQTk5MTI2OTEwMTJBNEJCNTQwMEYyNEJCMkExOQorRUNCOEY2MDc2RkE0NEYxMDlCRTMxMDAyCisxMTE0ODc5NjVFQjg0NkE5RkIKKzE2RDI3QTYxCis5QTczOUU3M0M0NTdEMDIwOTI3ODc2NjU1NgorQUNBODhFREExRjI2OEZGM0MyQjhDOTBBMjNEMEE2MzgzRDVBNUEwNjFGRDM1MTFFMUQwRTcyQkQ1RkFFQzEKKzE5NzZCMThBCisxQUVGNkM5NkQ0OTdGNjFGNkU3MEM3RjQ3NgorNTkxRjQ3QkNFRUFGRjIwQTM0MEYxMTVGQ0JFNEQ4RUFCQjFFODMwRDM0RDMwOUNFODcwQTVGQ0NBREJEOUMyN0NDNDdCNTQ1M0U5M0NDQTQ2REIzRkRGNjBDMDNFNjlDRjBCMzI2QUZGREE0RDQyREVEQjcwNUFBMzMyNjBFQjczMkQzRTYzODUyQUE2NjhFNjc1QUVENDA5MDZDNTYKKzc0NUZFRDJFCitGNTRBQkJDQ0Y2OERGRDA1NzcxNUI3REFBNAorMjg2NTc1NEJFQTE3MDFERTM1MzJCOTg1Q0ZCRDEwQkYxOUFBQ0Q0QzY2NzMzNzc5Nzk0NzI2MUY1MTM2RTQwODA3OEJEMEYzMjFDMTk2Q0JGRDRDREFFMzgyNkIxOURDMURFNUU3RDM2OUY0REZFNjQwM0EwMDQ2Cis2Q0FFRDI1NworRDZDODJDQjE5MUVFODE3QURERDk5QzBDNzYxRQorN0Q1QzUzMjkwMkEzRjU5ODdCMjQ0MTZFMUVEMUNFQ0YxMkY5NTZGMDkzNzM1QTI1NzlEM0Y1NDY3N0M3QUYzOTY3ODQ0RDE0MjY3RjA4QzM5OTcxOTIyQTk3NzA1RTY3NEYwQkUyMEIzMzA2MjMyMjM5OUJFQjBDNjEzMUEzMThGNEQ0RDUzN0E3RjI0MkZCQTBDNzA5NkJGRkUzQ0IwREI0MDQ2Nzc3MjNCRTNCRDQ1M0JFOUU3OThCOEM2MzAxREY1N0YyMzU3RjZEQThCQzBDRDNGQkMwQzlDQTVGMzY2NUZCMjVFNEM3REJERDg5MzFDNQorREM0MzU5RkEKK0E3RENDRERBQUQ1QzE4MEI3Q0I2QjJDOEZEQjkKK0E4N0Q4OEQ1ODMyODdFMTZEMDgzMDQzNDExNTRGNDlDM0JCNjY5ODlEMEIwMjM5NTk5REUxMENFRDQ0MjgxNDUwQ0U5QTJGM0RGOUNDNkU1NDAyNzE4QzU2QjZFNURFNEZCQ0M2NTZDQkU5MEYyQkVDOUFGOEQxNzZEQkVEOUMzRkE2NjA2M0ZCMzQ1QjFFQjlBRTcwODczMjMwRDdBRDlENDAyNkEwREQ2NTdEMEREQ0ExNEVBMzdBNUQ1ODM0QTdFRUM0MjUzM0FFOUYzNTAwNTkwQTYwOTJCNTRFNDdEMjZCRDMzREYyMDJCMkExOEU5MzJDNEFBRjBFNAorRTM0RQorQTA2MDVFMjk4MzIyMjI2MEU2NTU3NUJBCis1RkE5NDNBMworRTM3ODlCN0YxMjI4N0U3MTY3OEE3NzMxNDE2RAorNkM0NzY4M0Y5MTExNkE5NzU0QjRGMjU2MUI3QjlCRENGOERGMDA3MDMxQzdGRjk1Q0VGQjVDODIyMUQ2NjM1NjMwMUFERjk4RkZCRUMwNzlEQ0IyN0ZERTUwMEYzNzQ1NDkwRTNEM0ZERDg3MUVENzY2QUQ0NEVGQjdCNUYyNDczMjMwRUZEMTlFNkIxNUE1Njk1M0ZGOTVFRDVBRDg2OEM2REUzNDUyNkNDRjc4MDUxQzREMEVDOUU1QTQyQjVBREVGQkRDMUQzRkE2RDIzM0IyQjhCNjAzMDUKK0QyRkM5MjNGCis2QTVFMzQ1OUE0MDUzMDQwRTREMTg2MkY5M0IwCiszQTI0Qzk0MUYxRTdDQkRDRTIxMjlGOTI3NzZBRkRBMUZENzgwNENGNTJCODJDMzY2OUREREIxRTM4MTJDNkI3OTFFNjUwRENFRjVEODA0MzcwNjA3QUU5NTA3RTlERTkxREMxRjQ0QjY3Rjg2MzI1RTI4OUUyMkRFNjZCQTA5M0U0OThGRTE5MUY2OTc4NDI0NTY0MTVGRTFGQ0I0MUVBN0NBMEY2QjI5MjRGQTA4QUFEQTgxNDYwNjUzMjc5NzAyNEVFNDc2RTgyRkI5M0RDNzNDRThGRUE4QkQwNUUyRTg0QUExMTVBNjlFN0QzRDFBMzhGQTUzQ0VBMTEKKzlFRjQKKzkzMEEwNkE4CiswNzc4MkYzRDk3REM5QjczMzM0QzY4OURDQUFDCisxNzA0MDgxOEZDMUZGMTU2RDIwMkQ0MjY5REJERTI1QjhGQUU0MTg2MTE0QjU0RDdDRjdFQ0FFNTBDMTdCNDA0NUQ4M0VBRTlFNkQzNTAxNTJERjQzNTYyQzI2NzI1MkJGRkY5Q0MyM0FDNzAzNjZFRTIzN0FDOEEyNUVBMkE2MkQ2NUE0MDBGNTlFOUMwMzU3NjZEMTdCNkZBNkZCNTFBOEY1NkRCRkUyMjNERUQ3NDEwNUVENkMwMTU0RDdBODhCQjAwN0U1NDI3Mzk1MkNGNjhGMDNCQUQ3MDFENzhCNDdFRDMyNTgzNzE1NUQzNDM5MDlBNDhERUQxMUYKK0I2Q0YKK0RCNDQ2MDQ1Cis5NUFCOEU4RgorRDc2MDk3MEU4Q0JFMDE5RjMyRjBGREZGMDgKKzAxNzZDMzIxNTQyQzVENzZENDEzNEY4QjZCRDA2OUQ5QkVCNzE4RkQwNEFBODg5REYzQzQ1NkYxQ0Y0N0FCNjQwQzYyRDlDQ0Y3RDY3QzJCM0IwNzBFMEU1Qjg2QzNBODdDRTdFQTBDQzdGMDgzMzE4RUM5NjNEODFDNzIzNkUzMkU3NUJGRjI3RkY4MTcxNkJENUU4M0ZBREUzNkJDMzZCMzhFCis3MzlGRkEwMAorMDk0QzZDRjY5NkNDNUM3QjhEM0M0QzA0Qjc1NAorNjI0NDQ3NEZGMjM4NDAyNjY5NzIxNUJENEU2OEMyRDUzQTY5ODFGQkY2MzQ2RjRCREMwODY3Nzc3OTgzOTJERDVDRUVGMTM4MzIxRDI2QjAzQkQyQjJFMEI5Qjc2NTMwRDM3NEVDQjNCRUU4MTFENDI5NjNDQ0M2NjA3QzY2M0Q5NTkyOTNCNUVBMTdCRjY3MkIxRjBFNUEwMUY5QzI0MEI0QjIwNDhDRkQ0NDYyQkE2NTY4MDlFNEZCQkZFNzQ2M0I0QTc1MTQ0MEEzMTc0MUUwNUEzQUJGCisyMEJFMkEyNworRTU4NEI3RTQ5NTBDRUJBQUVGQzYxMzFCNEYKKzBENzUyQzRDQzk5M0JGNUE5OUUxOTA0MjRBNkNBQTVFNjVBOUM1QkE0MEM3OTE2MjE4MEY5QTY1REFEODE3NTYxMzJDOERENUIwRjIwREI5NDRCNjMwRjFBRDUxNDBEMzI0NTA1M0FBRDUwQTFEODA2NEQ1OUE3NjY1RkVDRTY3MkY5MDc5RTg1REYwMzI4QUI5Q0IxOUY1REZFMjZBNTYwNjc2NDM5NjU0MDJENjM4OTcwODUzMzgKK0U3NkQ1NTgyCis1MDE1MzI5MjdCOEUxN0FFNTQwQzVBQUYxMworMkEyN0I4MDlBQjMwQ0U0MEZFQjYwRjdCNDc3RDAwQkFGREQyNjBENzM4RjRDMDE1QjQ2M0Y3MTE1QzE3RERDRDFGQzM1MTNEOEI5NjYzODBDNkI4QzM2NDdGQjY5MzYwNDgwNzlEMkE1NzM3ODUwM0JFMTA1QzRGQUExMjFDODgwMTFFMTVFNkMxNUFBQjVBOENCOEI2NDVENEVBRUEzQjREQUJBNUE5QjM4REFEMDFENUNCMzZEMzlFCitFREJEMzNCNAorMEJCQURDMTBFRjYyNEMyRUFBQzFDREY0NjkyRAorNjAxQURFNUQyODk3Rjk2NTYxNUIxMTU4QjRDQjAxRjkwM0ZGRjM3OUZGRDdGMTIxMUFERERCQ0I3NDFCNDQ0NjEyNTQxNjZGNEJDMDlGMzk2MDM2NkRENTJCOTFCNkIwREQ4REE3MEMwQzI5ODJDMkZBRUU4RDlFMEZBQzI0ODY5OEZFODE5RDAzMkRCMzU4RERGNEIyNTgwMTkzRDE5MUU1NEU2NjM0QkExMEUwQUZERjM0RjNENkYzMTI2QkUxMjE2MzgzMkFGMEQwNTg5NDlCRTUyRTEzOEQzQkE3NzBCNjZFQzU3RkY1MDhBRTg0QjdGMkY0QTFBNEU1CisyN0YwCitGQjM1OTk2NUU4N0EyNUVCREJCQzM4QjFFMzVEMkZCOURFQjNBNUI0NjcyNzk0OEZDN0I3NjEwRTkyRjgzNTY4RjQ5NzRGQjZFNQorNzhFMkQxMzkKKzM0QTZEMTdBNkIyRTUyOTdBNEQ2OTFBNTNCCitEMzNGOUFFRDk4Qjg0QzJGRkFENDc0ODVFMDE4ODM5NDc0NEMyNzU3RUJDMjJCRTcxMzA1QTg1MDI1OEM1OEVENDNGMUQxRjcwMUIzMDMxQTY3NTNDQUIwNkYyOERDODgyNDk0MzgxRTc4QzZCOUVBNUUxQjk5MkFEMDg0REFCOUUyNjNDQjg4NDI0QkU2NDY4RUM0QjA1RDFBOTEKK0FFMzVGOTIxCiswRjNERDYzNTFCNTVCMzMxOTkzREVFODZFMzlECis0QzhERkE4RjYwMDgwN0U5NjE1MDM5QkU5Q0M2NTJEQkEwOTVFNTQ3MkEzMTAyOEU1MzRCOUJBQjVCOURDMjQxQ0JFOTA0MENGOTM1MjJCMzM1MDc0QUY2QjVCNTMxMDY2MzJDNzI2NjNENEZFOEVCNzlDMzdDM0RFODg4QkM4NDU3RDgyNzhERUJEMjA4RUQ4Qjk5OUMyMENEOEY2QjM2MEIxRkNDQzJBNDU0OEQzRUJGRDdGRDhFREZGQUM0RTE2MTQ4Q0RGMUI2MUNGMworQTkwREI5QUUKKzAwQkM2MTY1QjgzRTEzOTUxREU4Q0EzODAyCis3NUQ5M0Y4RkNBMjM1MjlBRUE1RDEyNzI3NDk4MkRFQjBGNUEyMjVDRjg3MkFGMzI5MDQzMzY3MzQ2NDcwNkQ0MjU4NDQ4MUE4NDdEMzM2MzQwMjkyMjg5RjIzRTUyQTAyRkUzQzE1MEE3MDlERkExRUY2NkVDQ0Q1MTdDNjc2MDkxRDhDQjM1NDdEMgorOTRDMjMzRTcKKzVBRDk4NjhEQjU5MUNGMkQ4MDY1QkU0Q0M3CisxQ0JBNThCRDIzRDBBREEzNTg3QjdEQUFBNzEwRjlBNjA0MjM0NUQ4NzUyMTdEODIwMzcyRkU0NEE1M0M2REZGQ0M3NDExQTZBQzVDNEE3NkZBODc2MTE4MUE5MTc1RUREODBEMjU4MjBBNUNBM0Q2MDE0MjAzNzZFQTA0RTA0MzhGMDU5QTZEMEQ0MEE3QTQ5MDk4MUY3N0UyMkU3NTlGOUFFNjY4RTIxQzgyQkE2REVGCitFNUYyMTVBQQorQTk5QTRDQ0REOTA0QUE2RkM0RTM0RTJFQjkzNQorOTkxQzlEN0E0OEUzREM5NzU4QjBBQTlEQjk5MzAwQUI1REZDMDFDNzI4NEE3RUQ5NjJCOEQzOUREODgxNDlGMzA3M0NDMDgxMzk4QTk3ODAxNTIwQTNFOEE3MUVBQUJCOTg0MTFDQ0Y2Mjk4M0ExNDZEODZERjU5NUZDOEFGNzUyMjE0NjQ4QzkzNkI1MUQ4MzI0MDFFMjVBOEMyMDhCOENFQUFCQTFEOTFEQ0NGNjU5RERBNTIxNEM3OEVBOURDRjMyQUQ5REFGNTYwOTVBOTY0Nzc2RTk3RDhBOEQ0M0NFMkUxODA3RTM3Njk2MzVDOTYKK0Y3Mzk5ODY2CitCMzQzRUE0NjM5NUUyODNGMzUxMDAyMzk1MQorNDhFMEFFRjE0MUQ0RkNFNzE5QUY0M0U3MDU0OTQ2OUM0NTQ1MzQ3NTg3MkIzMUU2MjI4NTgxNUYzMDhDQkQ0MTcxMzA1NzcyNDkyODhGNTVBOTQ0QjcwNEU1QjNFNzAwNzA2REE3ODU3NDNCMzgwMDBCMjM4RkI1ODM0QzQxODM4NTA1MzlEQworM0Q3RDMzNzIKK0QzNEQ0QUI3NDA2NzdCODhFMUVFNEFERjQ4Cis2REE0N0YyNkM4MkEyQ0ZGNTg1RTM4MjEyOEVCN0YzNzVFRjhBMzRDRTJDOTRENDRFMzU2MkNBRUVGRDcxODcxN0MzMUJBRjUxMTY3RkU5NDRERkIzMjI0Q0VFNzg5MTMyQUQyMTdFREMwNzNENTU1Rjc4QkM5RDE4MzY3MUIzREY5Q0E1QTc2NTVDN0Y1N0ZDMDJEQjIwNzU5QkUzNkMxMjg1N0ZBNEEzM0QwMzM5OUVDOUQwNgorMzQwMDA0MUQKK0FERkQ1MDkxODgwNDkwMEU5REVCNUFFMjg4QTgKKzE3MDJCNUQ1NERBQkUzQjY0RDAyODM5RjNBRjAyQTkyMEM0Mzk1MDZDRDFFRjE1MjgyNDc2Q0QwRjlGMDM2Nzg0RTczMDgwM0RGODc3MDIyNThBQ0QxNkMzRDE3MERDRDZGQUY3Nzk3OTg2MzkyQjlCNUIwNDNDMzY4RkE1MTMxQjA2QkQyNkRBOUIxMTVFODUzQUU2RTY1RTczODQ3QTEwOTE3NjgwREVCQzkxQTRBMzRDOTY4RUFGMjZBQTA1NTYwMDlCMjlBQkJEMDkzM0Y1MjQ2NjFCQzBCNkQzNUE3RTNGNkJCNjdENjNDQ0IxMzFDQzc3MUYzMzhBNworQThCMAorREYxMUNGQTRBREM0RkE4QjkyMjU4OAorNkM0RDEzODMKKzJDNTlEM0I5Mjc3NzhFOTAzQTM4MDMwNUIyNzMKKzAzQUI4QjAxRUI4M0M0MkUKKzNEQkZDQjU2Cis4NkY2OUE0ODhFRDQ4RjZGRDkzQ0RDNzdENTczMDIzNUY2NzY1NTQ5MDVGOUU4Mjc0OThCQzk5RDU3NzM1NTU2ODNGMgorRDc4OTUwQThFM0MzRjhCNUYwQTEyNkFBMzFFODlBNDg5QzMzOUYxRTE2NTY5M0Y1MDI3NzM1MDI3QTgzMzc0OEQwNkFDOEE4NDQ1RAorMjhGQjdEMzE2Q0I0NkVGNjQwN0RCNTI5OTgzNTdGREI1NjhCQTg3RTU1NjBCOENEMUJGRUQyCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorZHVwIDIgL0MwMDgzIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzUwIDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzVERDg5QTg3OTBFQUQxOEVGQzc3RDNGRkFFODREQTVECiszMTIwNzRDNEQ1NDJERDVCRUM3MDk2OEY3NURDCisyNTBDMzk1NEU4REZCOEY0ODU3QkZFRjA5MkVCQTQ5RDI0ODk1NUE4NThDNUE1RjU1RjdCOTg3RUEwNkVDODQyOEQ5MzkwODRDODhGNUIxNTdEODBBQjJENzA2QTdFQjkzNkMzNDI5MTczNTg4RDJBQkE2QTI3REM5NEMwQjQ4NEYzMTY2NjM1NTU3OTcwMDRDQkZBNzlFN0I4NTQ1QzgxMEJGOUNBOTJGNjFBQkQ5RTIwMkVEOUU5NTk0M0RGN0E1QUJCRjNDMjBCREUzQjZFRUM5QzBCOTVBNEM5QzFEMzhBQTdDNjc4NkFEQkJCNzlFRTE4M0JEREYxOTQKKzE5NTMKKzY0NDlEQkI3QUU0N0U5RkM2RjNBQkYxRENEN0ExRTI3NEU4N0RBRTkKK0EyMjczN0ZBCis2NDA0QjIxNUEyN0JGQUY2RDBCNTBFOTREMgorMDcxMjNBNUJCMzgwQzg2REI1MDMzRUU3NDMxODFCQkZDQzAzNTY1NzFGNzI5N0EyMDdDMjNGMUU1ODgyNTdGREVGNURGMjI5CitDQUJGM0IzQworOUUwOTg4QzYzQjM1OEFDQTRCNEZFQjAzM0RGQgorRTJFMzg3QTA2QTIzQ0FDQQorOEUxMDRCOTAKK0RGREJENDFGMDYzRThBOERGQTBBQkE0REQ3NDQzMDE1NTI2QUU1MjU1MzE1NTk3Nzc5RTA0RDg1ODQ5MzA1RUE0RjMxCis1Q0RBRDA2RTU4NDFFMUI4MDc0NzYwQzk5NzAyQjhDRjQ0M0Q3NTIxNzREOTk2Qzk0RTY5MDc5N0E5NTg3Q0Y1MDE3REVCMTFFNUZFCiswMjU3NkU5RTA4QjM5Njg4QkJFOTlBMTg2QUE4RkM3RTIyMkY1RTUyQjI5QTdGREYzNzlFRjUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3N5bTpjbGFzMTIgMTIuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNGIgMTQuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxOTI5MzczMzI5MzUyYTBjMDEwZTAxMGYyOTMxMjcyYzMwMjUzNTJlMDEyYTMyMzUwMTE4MjkyNTM2MzgzNTJkMzEyYjAxMTkyOTM3M2EzMjM1MmUwMTFiPiAyMjA3IDU1OCAwIDczODQgLTEgcworPDI5MzUyYTMyMzUzMDI1MzEyNzI5PiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwOTBiPiA5MzQ2IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3dzdDpkdXRjaDE0YiBTRgorPDA4MGMwYTE0MGYxMTEwPiAxMjcxIDE0NTggMCAyMDU1IC0xIHMKKzwwMDA0MDMwMjAwMDYxMDExMTYxMDAwMDUxNTBlMTMwMDA5MTAwYjAwMDcwZjEzMGQwYzA5MTQxNTEyMGMxMz4gMjA1NSAxNDU4IDUgNTYyOSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MWM+IDEyNzEgMjA4NiAwIDE0MzQgLTEgcworPDI5MzkyZDM2MmQzMjMxPiAxNDI2IDIwODYgMCAyMDU2IC0xIHMKKzwwMDA5MDcwODAwMzIyYTAwMzEyOTM3MzMyOTM1MmEwMDI3MzIzMTM3MjUyZDMxMzYwMDM3MmMyOTAwMmEzMjJmMmYzMjNhMmQzMTJiMDAyZTMxMzIzYTMxMDAyNjM4MmIzNjAwMjUzMTI4MDAzMDJkMzYyYTI5MjUzNzM4MzUyOTM2MGM+IDIwNTYgMjA4NiAxMCA4MDM1IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDI0MzIgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjA+IDE1ODkgMjQzMiAwIDE3NTEgLTEgcworPDI5MzUyNjMyMzYyOT4gMTcyOCAyNDMyIDAgMjMyOSAtMSBzCis8MDAxYTM4MzczMzM4MzcwMDA2MDAzNzJjMjkwMDJmMzIyYjJkMjcwMDJhMzIzNTAwMmIzNTI5MjUzNzI5MzUwMDM3MmMyNTMxMDAzNjM3MjUzMTI4MjUzNTI4MDAzOTI5MzUyNjMyMzYyZDM3M2MwMDJkMzYwMDJhMmYyNTNhMjkyODAwMmQzMTAwMjUyZjJmMDAzNzI5MzYzNzM2MDAyOTNiPiAyMzI5IDI0MzIgMTUgOTE0MyAwIHMKKzwzZj4gOTE0MyAyNDMyIDAgOTIxMyAtMSBzCis8MjcyOTMzMzc+IDE1ODkgMjY3NyAwIDE5NzIgLTEgcworPDAwMzcyYzI5MDAxZTEwMWIyMzFkMWUxYzEyMGUxODAwMzcyOTM2MzcwNzAwMWUyYzI5MDAzOTI5MzUyNjMyMzYyOTAwMzIzODM3MzMzODM3MDAyYTMyMzUwMDM3MmMyOTAwMWUxMDFiMjMxZDFlMWMxMjBlMTgwMDM3MjkzNjM3MDAyNzMyMzgyZjI4PiAxOTcyIDI2NzcgMTEgOTIxMyAwIHMKKzwzODM2Mjk+IDE1ODkgMjkyMiAwIDE4OTEgLTEgcworPDAwMzYzMjMwMjkwMDJhMzIzNTMwMjUzNzM3MmQzMTJiMDAyYzI5MmYzMzA3MDAyMTJjMjkzMTAwMjczMjMxMmEyZDI4MjkzMTI3MjkwMDJkMzEzNzI5MzUzOTI1MmYzNjAwMjUzNTI5MDAzNTI5MzQzODI5MzYzNzI5MjgwNTAwMzcyYzI5MDAzOTI5MzUyNjMyMzYyOTAwMzIzODM3PiAxODkxIDI5MjIgMTEgOTE0MyAwIHMKKzwzZj4gOTE0MyAyOTIyIDAgOTIxMyAtMSBzCis8MzMzODM3PiAxNTg5IDMxNjcgMCAxODkwIC0xIHMKKzwwMDNhMmQyZjJmMDAyZjJkMmUyOTJmM2MwMDI2MjkwMDJhMmYyNTNhMjkyODA3PiAxODkwIDMxNjcgNCAzNzcxIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDM1MTMgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MWEzMT4gMTU4OSAzNTEzIDAgMTg3NyAtMSBzCis8MDAzNjMyMzAyOTAwMzYzYzM2MzcyOTMwMzYwNTAwMzcyYzI5MDAxZjExMWIyMzFjMWMwMDM3MjkzNjM3MDAzYTJkMmYyZjAwMmEyNTJkMmYwMDNhMmQzNzJjMDAzYTJkMzcyYzAwMzcyYzI5PiAxODc3IDM1MTMgMTAgNjY1MSAwIHMKKzwwMDMwMjkzNjM2MjUyYjI5MDAyNDI0MzYyOTMxMjgyMzM4MjgzMzIzMzUzNTBjMDAyODI1MzcyNT4gNjY1MSAzNTEzIDMgOTIxMyAwIHMKKzwzNTI5MjczOT4gMTU4OSAzNzU4IDAgMTk2NCAtMSBzCis8MDAyOTM1MzUzMjM1MGMwMDEwMzIzMTMxMjkyNzM3MmQzMjMxMDAxYz4gMTk2NCAzNzU4IDMgMzgxOCAwIHMKKzwyOTJhMzgzNjI5MjgwNzAyMDAxNjM3MDAyZDM2MDAzODMxMmUzMTMyM2EzMTAwMmQyYTAwMzcyYzJkMzYwMDJkMzYwMDI1MDAyNjM4MmIwMDJkMzEwMDM3MmMzMjM2MjkwMDM2M2MzNjM3MjkzMDM2MDAyYTMyMzUwMDI3MzIzMT4gMzgxMCAzNzU4IDEzIDkxNDMgMCBzCis8M2Y+IDkxNDMgMzc1OCAwIDkyMTMgLTEgcworPDMxMjkyNzM3MjkyOD4gMTU4OSA0MDAzIDAgMjE5MyAtMSBzCis8MDAxZjExMWIwMDM2MzIyNzJlMjkzNzM2MDUwMDMyMzUwMDI1MDAyNjM4MmIwMDJkMzEwMDMxMjkzNzMzMjkzNTJhMDc+IDIxOTMgNDAwMyA3IDUyNjggMCBzCitzeW06Y2xhczEyIFNGCis8MDI+IDEyNzEgNDM1MCAwIDEzNTkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxZDMyMzAyOTAwMzcyOTM2MzcwMDM2MzgyZDM3MjkzNjAwMzYzODMzMzMzMjM1MzcwMDJhMzIzNTAwMzEyOTJkMzcyYzI5MzUwMDJjMmQzNjM3MzIyYjM1MjUzMDM2MDAzMTMyMzUwMDI3MzIzMTJhMmQyODI5MzEyNzI5MDAyZDMxMzcyOTM1MzkyNTJmMzYwNz4gMTU4OSA0MzUwIDkgODEzMCAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA0Njk2IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlMmMyOT4gMTU4OSA0Njk2IDAgMTk0OSAtMSBzCis8MDAyNjI5MzEyNzJjMzAyNTM1MmUwMDJkMzYwMDMxMzIzNzAwM2EzNTJkMzczNzI5MzEwMDM3MzIwMDBlMTkxZDE2MDAxMDA3MDAxNTMyM2EyOTM5MjkzNTA1MDAyNTMxMDAwZTE5MWQxNjAwMTAwMDI3MzIzMDMzMmQyZjI5MzUwMDJkMzYwMDM1MjkzNDM4MmQzNTI5Mjg+IDE5NDkgNDY5NiAxNCA5MjEzIDAgcworPDJhMzIzNT4gMTU4OSA0OTQxIDAgMTg1NiAtMSBzCis8MDAwNjExMTUxNjFkMWUxYTE0MWM+IDE4NTYgNDk0MSAxIDMyOTIgMCBzCis8MGUxODAwMjczMjMwMzMyZDJmMjUzNzJkMzIzMTA3MDAxMz4gMzI4NCA0OTQxIDIgNTA1MyAwIHMKKzwzODM3MzgzNTI5MDAzOTI5MzUzNjJkMzIzMTM2PiA1MDQ1IDQ5NDEgMSA2MzM3IDAgcworPDAwMzIyYTAwMzcyYzI5MDAyNjI5MzEyNzJjMzAyNTM1MmUwMDMwMjUzYzAwMzUyOTM0MzgyZDM1Mjk+IDYzMzcgNDk0MSA1IDkyMTMgMCBzCis8MGUxOTFkMTY+IDE1ODkgNTE4NiAwIDIxMTIgLTEgcworPDAwMTAwMDJhMzIzNT4gMjExMiA1MTg2IDIgMjY0NSAwIHMKKzwwMDI1MmYyZjAwMzAzMjI4MjkzNjAwMzIyYTAwMjczMjMwMzMyZDJmMjUzNzJkMzIzMTA3MDAwNjExMWYxZDEyMjMxYjFkMWU+IDI2NDUgNTE4NiA1IDYzMzggMCBzCis8MGU+IDYzMTggNTE4NiAwIDY0ODEgLTEgcworPDFlMDAyNzMyMzAzMzJkMmYyNTM3MmQzMjMxMDAzMjMxMDAxNTFiMDYxZjIyMDAzNTI5PiA2NDYxIDUxODYgNCA5MTQzIDAgcworPDNmPiA5MTQzIDUxODYgMCA5MjEzIC0xIHMKKzwzNDM4MmQzNTI5MzY+IDE1ODkgNTQzMSAwIDIxNDUgLTEgcworPDAwMzYzODMzMzMzMjM1MzcwMDJhMzIzNTAwMzcyYzI5MDAzZTJmMzIzMTJiMDAyZjMyMzEyYjAyMDAyODI1MzcyNTAwMzczYzMzMjkwNz4gMjE0NSA1NDMxIDcgNTU4NSAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA1Nzc3IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlMmMyOTAwMzAyNTMxMzgyNTJmMDAyODMyMjkzNjAwMzEzMjM3MDAzNjJjMzIzYTAwMjkzYjI1MzAzMzJmMjkzNjAwMmEzMjM1MDAzNzI5MzYzNzM2MDAzMjM3MmMyOTM1MDAzNzJjMjUzMTAwMWYxMTFiMDAzMjM1MDAxZTEwMWI+IDE1ODkgNTc3NyAxMiA3OTI0IDAgcworPDA3PiA3ODg5IDU3NzcgMCA3OTQyIC0xIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA2MTI0IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlMmMyOT4gMTU4OSA2MTI0IDAgMTk0OSAtMSBzCis8MDAxMTE3MWIxNjAwMWU+IDE5NDkgNjEyNCAyIDI3NDYgMCBzCis8MjkzNjM3MzYwMDI1MzUyOTAwMzEzMjM3PiAyNzE1IDYxMjQgMiAzNzg1IDAgcworPDAwMmEzODJmMmYzYzAwMjgyOTI2MzgyYjJiMjkyODAwMmEzMjM1MDAzMDM4MmYzNzJkMzkyOTMxMjgzMjM1MDAzMjM1MDAzMTMyMzEwNjEyMzcyYzI5MzUzMTI5MzcwMDI5MzEzOTJkMzUzMjMxPiAzNzg1IDYxMjQgNyA5MTQzIDAgcworPDNmPiA5MTQzIDYxMjQgMCA5MjEzIC0xIHMKKzwzMDI5MzEzNzM2MDc+IDE1ODkgNjM2OSAwIDIxODcgLTEgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDY3MTUgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MWUyYzI5PiAxNTg5IDY3MTUgMCAxOTQ5IC0xIHMKKzwwMDEzPiAxOTQ5IDY3MTUgMSAyMTMzIDAgcworPDMyMzUyOTAwMGUxYjE2MDAxZT4gMjEyNSA2NzE1IDIgMzA0NCAwIHMKKzwyOTM2MzczNjAwMzEyOTI5MjgwMDI2MjkzNzM3MjkzNTAwMmMyOTI1MjgyOTM1MzYwNz4gMzAxMyA2NzE1IDMgNTI1NCAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA3MDYyIDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlMmMyOT4gMTU4OSA3MDYyIDAgMTk0OSAtMSBzCis8MDAyOTM1MzUzMjM1MzYwMDM1MjkzMzMyMzUzNzI5MjgwMDJhMzIzNTAwMzUyOTMwMzIzNzI5MDAzMTI5MzczMzI5MzUyYTAwMjkzNTM1MzIzNTM2MDAyZDMxMDAyNTAwMTM+IDE5NDkgNzA2MiA5IDYyNzEgMCBzCis8MzIzNTI5MDAwZTFiMTYwMDM3MjkzNjM3MDAzYTJkMmYyZjAwMjUyZjMwMzIzNjM3MDAyNzI5MzUzNzI1MmQzMTJmM2M+IDYyNjMgNzA2MiA1IDkyMTMgMCBzCis8MjYyOT4gMTU4OSA3MzA3IDAgMTgwNyAtMSBzCis8MDAzYTM1MzIzMTJiMDAyNTM2MDAzMTI5MzczMzI5MzUyYTAwMjgzMjI5MzYwMDMxMzIzNzAwMjgyZDM2MzcyZDMxMmIzODJkMzYyYzAwMjYyOTM3M2EyOTI5MzEwMDI1MzE+IDE4MDcgNzMwNyA4IDYyNTAgMCBzCis8MDAyNTM3MzAyMzI5MzUzNTMxMzIwMDI1MzEyODAwMjUwMDM2MzcyNTMxMjgyNTM1MjgwMDI5MzUzNTMxMzIwNz4gNjI1MCA3MzA3IDUgOTIxMyAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA3NjUzIDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlMmMyOT4gMTU4OSA3NjUzIDAgMTk0OSAtMSBzCis8MDAzMDI1MzEzODI1MmYwMDMxMjkyOTI4MzYwMDI1MjgyODJkMzcyZDMyMzEyNTJmMDAzNzM1MzIzODI2MmYyOTM2MmMzMjMyMzcyZDMxMmIwMDI5M2IyNTMwMzMyZjI5MzYwNz4gMTk0OSA3NjUzIDUgNjY1MiAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA4MDAwIDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDEwMWIxZjAwMzgzNzJkMmYyZDNkMjUzNzJkMzIzMTAwMzAyOTI1MzYzODM1MjkzMDI5MzEzNzM2MDAyZDMxMDAyMT4gMTU4OSA4MDAwIDQgNDg2MyAwIHMKKzwyZDMxMGEwOTAwMDMwNjExMWYxZDEyMjMxNzFhMWExYjEyMWMwNDAwMzEyOTI5MjgwMDI3MjUyZjJkMjYzNTI1MzcyZDMyMzEwNz4gNDg1NSA4MDAwIDMgODg0MCAwIHMKKzwxNjJhMDAzYzMyMzgwMDI1MzUyOTAwMmEyOTI5MmYyZDMxMmIwMDI1MjgzOTI5MzEzNzM4MzUzMjM4MzYwNTAwMmEyZDNiMjkzNjAwMmEzMjM1MDAzNzJjMjkzNjI5MDAzMzM1MzIyNjJmMjkzMDM2MDAzYTMyMzgyZjI4MDAyNjI5MDAyYjM1MjkyNTM3MmYzYzAwMjUzMzMzMzUyOTI3MmQyNTM3MjkyODAwMGQwNjA0PiAxMjcxIDgzNDYgMTMgOTI3NyAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgzMCkgMzAKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0MCBwdXQKK2R1cCAzIC9DMDA0MSBwdXQKK2R1cCA0IC9DMDA0NCBwdXQKK2R1cCA1IC9DMDA0NSBwdXQKK2R1cCA2IC9DMDA0NiBwdXQKK2R1cCA3IC9DMDA0NyBwdXQKK2R1cCA4IC9DMDA0OCBwdXQKK2R1cCA5IC9DMDA1MSBwdXQKK2R1cCAxMCAvQzAwNTggcHV0CitkdXAgMTEgL0MwMDY1IHB1dAorZHVwIDEyIC9DMDA2NiBwdXQKK2R1cCAxMyAvQzAwNjcgcHV0CitkdXAgMTQgL0MwMDY4IHB1dAorZHVwIDE1IC9DMDA2OSBwdXQKK2R1cCAxNiAvQzAwNzAgcHV0CitkdXAgMTcgL0MwMDcyIHB1dAorZHVwIDE4IC9DMDA3MyBwdXQKK2R1cCAxOSAvQzAwNzYgcHV0CitkdXAgMjAgL0MwMDc3IHB1dAorZHVwIDIxIC9DMDA3OCBwdXQKK2R1cCAyMiAvQzAwODAgcHV0CitkdXAgMjMgL0MwMDgyIHB1dAorZHVwIDI0IC9DMDA4MyBwdXQKK2R1cCAyNSAvQzAwODQgcHV0CitkdXAgMjYgL0MwMDg1IHB1dAorZHVwIDI3IC9DMDA4NiBwdXQKK2R1cCAyOCAvQzAwODcgcHV0CitkdXAgMjkgL0MwMDg4IHB1dAorZHVwIDMwIC9DMDA4OSBwdXQKK2R1cCAzMSAvQzAwOTUgcHV0CitkdXAgMzIgL0MwMDk3IHB1dAorZHVwIDMzIC9DMDA5OCBwdXQKK2R1cCAzNCAvQzAwOTkgcHV0CitkdXAgMzUgL0MwMTAwIHB1dAorZHVwIDM2IC9DMDEwMSBwdXQKK2R1cCAzNyAvQzAxMDIgcHV0CitkdXAgMzggL0MwMTAzIHB1dAorZHVwIDM5IC9DMDEwNCBwdXQKK2R1cCA0MCAvQzAxMDUgcHV0CitkdXAgNDEgL0MwMTA2IHB1dAorZHVwIDQyIC9DMDEwNyBwdXQKK2R1cCA0MyAvQzAxMDggcHV0CitkdXAgNDQgL0MwMTA5IHB1dAorZHVwIDQ1IC9DMDExMCBwdXQKK2R1cCA0NiAvQzAxMTEgcHV0CitkdXAgNDcgL0MwMTEyIHB1dAorZHVwIDQ4IC9DMDExMyBwdXQKK2R1cCA0OSAvQzAxMTQgcHV0CitkdXAgNTAgL0MwMTE1IHB1dAorZHVwIDUxIC9DMDExNiBwdXQKK2R1cCA1MiAvQzAxMTcgcHV0CitkdXAgNTMgL0MwMTE4IHB1dAorZHVwIDU0IC9DMDExOSBwdXQKK2R1cCA1NSAvQzAxMjAgcHV0CitkdXAgNTYgL0MwMTIxIHB1dAorZHVwIDU3IC9DMDEyMiBwdXQKK2R1cCA1OCAvQzAyNjIgcHV0CityZWFkb25seSBkZWYKKy9Gb250QkJveCBbLTUwIC0yNTYgOTc4IDczOV0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDIxOUVBNzVDQUU4N0E0NDA3MDg0NzIzRjU3REM0REY3NkRFMQorQTdBQzEzMDA0MDQ2MjJGODkzM0E3RjVFCisyQjczMkYzMEY5MDg3RUFBMjUKK0RBN0NCMDYyCisxOTYyNTVBOTM4RTA1MzYzREJEQTE3MzcxRAorNjE2Q0MwODcxOUQwQzUyMDgyNkZBQzk1RkE4RkFEOEU1RkJFQTQ4NTc0MEVFODkzNUI3RUE4RjVERDAyNkI4MTNCN0E1OUQ5NDQzRjZFRkVGNUU0QTRFNTNFMDc3QTkzNDNERTQyMUUwMDZCMEE4NDc2OUJGNDUzM0ZGMEM0MTYKKzg5OURDNDRFCis3QkFBNkJDOEMxQ0JGQjIxQTgyRjI3NzRFMworQUY4QzVBMTU0QjM2RjQ2MTk0RjA3M0NBMEI1OTJEM0NFRDY1QTgxOTdGQzU0ODJDNzczNzNGRTBGNUJFRUMyQjQ3MTY0Q0QxNzQzQTVBMjk3MTMzRUNDNUJCNjBGMEYzMDQyMEM5MTU4RDAyRERCRkNDMzc5QjI4N0Q4RTg5CisyNTdERjhBRAorMDZGNEMyMTg4Qzg1RjdDMUMwMzZBNEQ5RTQKKzRBRTNFNUI0RjY2OUMzN0MyMjBGNUQyRDIwREY4NTAyNUM5M0Y2Q0NBREYwQUQ1RDlBMzUwRDUyRUUzMkI3NDcyNUFGNEVFNDYyRkIzNkYxNUNBMkRFNDMyRkQzRTdDNDIwQUE3MDgyNDZEQ0Q0MkMwRgorODFCRUI5OUEKK0ZEMDVFODk4QjkxMTlFOTNGNDUzQTc2OUY2CisxMjQzNDZDRDA1MjcxNjExQzU2OUZGRDdEODYyNkY1RTZFRDVDMjg0QTAxMDJECis5RDMwMERCMQorNUVDQzM0RDZFREVDOEVBQUM1NTZGQkNBRjkKK0Q1RjQzMzYzOEY0OERCMjdCOUY5OTg4Q0FGMDc4OUNCNjI4QzUzNzM3MjY5Mjk5QkVGNzBEOEVCOTQ2RDhCCitFNkE5NjZEQworNEY5ODI1MEJENUNCNEIwREZDQjA4MjM5NkEKKzE3RjA4NzAyOEVBNzhCOTVCMjAzQ0Q5OUI3RUY3QkM3OTczMkMzRUI1NTU2RDZGNzlGMkU4RTNDCisyRkY3N0EyRQorMjRBQjQ2Mjg1QUFCMTk4RjQzQzhGNDNBMjIKKzdFRkM5RUVEMjY1MjlERTY0MzQ3M0QyQTkyRjFFOUU4RUE1QUZCOTU1M0Y0QjVBM0VFMjU0RTU2M0VCRjE5RTZDMTU3MDA5MzYxN0EwMTE4OUI2RTQ1OTk2Q0Y5NEFCQ0JGQjI1NUMxOUFCRjZDQUNENjU5MzZEQTNFMkNDMDZGMzFDRThFNDU3MzExNUY5OUQxMjIKKzUzQzE2MTM1CitDNTU1QTgxODcxRkE3QThFRjlCMUI0NzA2NDJFCiszRjU3NUY0QzAwRTM2QUMxODc5Q0MxMEIyN0ZEQkQwODM4MTI3MzVBM0Q4M0I0QzU3OUE4MjNENzUzOTIyM0ZFMEVDMDE0ODNDMEVEMzJCN0ZDODBENUVGMTQ4OTMwNDNDRkY0RkExNzAyQTBENzEyNzgzNjUzRjk2NDI1OTMyOEM5RkJGNTdGNEJGM0MwRjZEMTdCOUFDOEVFNjBBNjU5QjgwNjFGRUI5QkU2RTk4REMwOTVGNzA4MzkyQzZERTU3ODRBOTk3NUNGMzQwMTc1RTFCMjRFMkI5QUZCMjgKK0JBQjY5QkVFCitDOUU0RDU3QjEyMzE1QTQ1NTQzMTZFMTZDMworNzkwQkE3MjBFOUJCNDIyNkI1MEE2Mzc1MEQ4ODVGNzZERkI4NUUzNkUxRUIwMTdENDAwNDFFRjZGODNBMEY1RENCNTVBMzA0NTAyOEQxN0VBNkI0ODgzMjJCQUEyN0E5NkM4MDUyQ0E4ODlCCisyMDc0NzA0NAorRTQwQTJBQTJEMDBDOTYwNDlFNzRGNjA5RERCQgorOTYzNUZBMDVEQzkzMDQwNzk0N0UxNDQzNDFGNTdEQjAxMDEwQjVCMEM0MTlBMEQyRjYxQ0VDRTQxOTgzQTdDNUNGNzdCNjk3MUI5REU5QkVCN0ZDMzgyMDdBMzJCRUVBN0I0MjBCRTU3OTIyN0Y3NzdEMDMxNkM2RUQ2OTlBMzNGNjdGQkIxNjU0NTE2QTUyM0FFRTYyQUFEMzY4QjQ5NUFEOTA5RTU5RDlDMkM3NkMwQjg3RTk4QkY5QzJFOERFNTk4QzMwNjg5NkFFMjMzMTU1RjJEMjlBN0RDMzc5OUQ5NzhDMjEKK0UyRkI5QTU0CitEOTgyRDFBN0M4Qjc1OUIxNEQwNEQzNTJGMUE5CiswOUFBRDk0QTUxMTQzQ0MxNTdCM0Y1MEVFRkU3RTczNzdFNUZCQUVERDVGQkU2MzVGRTlBREZDRURCMjg3RDA0RDk4RkI5RTE5QjAwRTRGQUZENkUxMTIxRDdCQzc1QkE1NERDNzlDODU2Q0QwNjkxNkU3OTU1MEEzNDQ5ODVGRkVGREY1QTc3NzNFNUMxNkJBOTE5ODM2NkZFRjE2NDY1NEVFMkJEQjNGRTU1RTI2RjM1MkJFMEYyQkI2NzIxQkZCMEJGRDlBMkE5OTJDQkJCMzEzQTBBMUVCRENFQ0E0MTI1MEFBNzFBRDFDRUI2RThDQzExNDA5NDU4REYKK0I1MzAKKzU2Cis2NTgyQTdGNQorNTM0NjlCNzE4RDU4RjFBRkZFNTJEOTBFQTEKK0MzQ0NENDFFNkE3NkExQzk5QjREMUZBQTlCMUQ4QThFRDY4QzRBMzE0NzUyMUE0OTlGNDU3MjUwNDgwMzM0NzQyRkVDMTdFRTQwMTU0RUYyNThBNzgwQjcyQTg3MTU5OUZEN0ZEQjNEOUZGNERDNTRFMzFGREJCQUVDQTk3MDcyQThENDY2MTk5NDg0RUJBNzY5QjgyREY5MzdEODYzQjhERUY3NTMwODg5OTU4MUZDNjlCRDY4MUM4QjlEOTREMDI1Cis3MDE5NkRCQQorRUIxQkVDNDBGMTkyRDdCMDEwRTJGQTc4QjIKKzkxQjk1MkZDMjRGQThDRDAyRDExMzc1RTk3NDA1QzdGQ0IzOTE0MzQ3NDVBRjYzMzY1NDQ0MjI1NzkwNjE2MUI3OTMxMUQzREJCRjIwMTNEOEVFODEzNDlFMjdEMURCNTY4MTQ3ODBDNjhCODFCQ0E2QzFDMzdEOUUwMEI1NDNGNEIyOTQ0NEY0OTQzMERBNDVFNjZERkM3MkI0QzNGMzkxQjgyNUU4QzI3NDQ4MjJGMDBGOTZDMzAzRjkxOThEOTdDMzNCMworMEZERjk3NTkKKzQ4NTY3Mjk2RUY4NDY0QjE4Qzc0RUQyODI2NjEKKzdENURBNzEzMTE0REM2RjJCMTU2QkY1ODVBNDNDREU0RUNGNTYzREUwMTY5OUU0REREQTEwOUMxNkJGNDlEOEZCMzZEMzlDNzdGREEzMUM5MTA5NUQ3MTc4QTIxRDZBOEM0NEQwNUQwNjRBRDMzOUQ3N0U1Qjc1QTUwOTdGQ0NEQTA1OENBMEVEREQ4REMwQjg3MUFERDVBQTc3NzgyMThBNzZBQ0FGMTkzMEI4MTEwRkFFNzNFNjk5Q0I5MzY0M0RDMDMzMDVFQUE5MzZDM0ZDQjM3N0Q2N0ZDQTg2N0MzMjdENERFMUMwOERBNzkyRTM5ODUwNDNERjI3RQorN0E2QzZDRDkKKzk0RDcyODQyOEM4MUJCQkUyQzRBOTE5NDhGQ0EKK0UwM0YzREYzNEUzMDczQTc1ODlDRjQ3QjIyNzM3QzFEMTkyQjEzQTVBMjZCOEI2MUE4NkMwNzZDNzkwRkE4OTAyNzkzOTcwRTA3MkY1RjI4NDhFQ0UwQ0U4NUU3QzU5MkQwQzhCNjFDRjYwRTE5MDJDODk1QzMwMjhBOURBNkEyNkIxMzMxRUU1NEQ3NjM0NzM5MTI4MDFBOTY0RUEyOEY4MzkzOTkwQzFEMDNBNEQ1NzIxM0Y1OTRCMjY5MDI0RkEwQkMwMUNBMDMxMDYyRkI5MgorNTBGNzI0N0MKKzMzOEQ3Njc2NDUwQUJEQUFCMjc2QTFEMDU3MEYKK0YzRDY4MzAxQjRCNDVCRDdEMDM5NTU1RjU4MTU4RDIyNjdBNDEwRkM4QjA5NkRBM0YwMTc3NDJEMjQwNDg0NzJCMUQ0NjE2MTAzMzU3QzE4Q0I4MkM5OUI4NTNDNDgyODk0NDg4RkIxNEU2Q0UxREY2NzRBMTVDQTM3RUFDNzM5OTQ2OEI5MTJGMTQ1ODU3MzI1QzYxMTU5NTFBRDk4N0MwRjJBNDEzRDM4RjFDODUzMDZDODZGQ0U2OUZEMTY3MDBDRDYwMEYwQjlFM0IzQzdGNkM4MzQ5NDc5OTdFNjlDQURFNDk1NDU0NDJEMjI4QThDMjNBRjc4NTcwNAorNDM0MQorQTBCM0MzNjYxNERGNzIyNjIyRDlBNgorNEQyMEQ2OTIKK0JDMTJFMjI0MTI1MTU2MUMyRjhGMjMxNUE5CitFOTRFOEQzMTI0MzY1N0IwOTZBOTM4NzVEM0U5MEM3NUVFNzgwRDU3RkI1QUZFOUMyNTU4MjcwNUFDRTRCMDQ0RjdCNUI0Qjg2MkJGNDZEQjhBNUQ1NEYxNjczRDlDMjM3NzA0NjE2OUU0QkUzREM2N0I4RkEyCitDRDg5MDdFOAorNjc2MjQxQ0YzOTZFQzJDQjVCRjk0M0FGQjMKK0M1RUU5MjYzQzRBRkMxMTVBNDNFNTgzRjE3MUI5MzYyOTkyQUQzNDZCQjQzQzI4MjJDODNFQjNBRDY2Q0Q2MEY3M0Q2MzhEN0I5OTQ0QUY5OUE2NTdEQjkxQTZEOEY0MjMwRkIwMEMzOEZERUM0REIwRkJERjM3REM5OUREMUFGQjEzRTM5OTZCNUE3QUUKK0ExMzBDOTU2CitDQjk1ODE2NUNFNURFNEE5RDMyRjZBQjE3MzU4Cis1QjMzNjk3MjYzRjVEMjFGOEYyQUJBMkZFNDM2MTQ4RDI1QjNFNDJBNDQyRERDNkRFNUIxRDU1MkNGOTFCODNBNTg1QkQxRTEyQ0RFNEFEQzNFN0U2Nzg4QzAxQ0E0QzY5QjI2QzE5RjdERTk4MUEzNkE2Q0E5RDdBM0I3MDVCQkI3NUIzN0Q4MDE4Q0I0QjI3RkYzRjBDQkZENTVGNjExN0I0RDlBQTRGNkYwQTMwRTg4RDZBOUI5MkE2MjRFRENCNkEwRTIzRDBGREFEMTJBNTk5MEE4NTc0QUQ0OEEKK0REOEQxMkI5CisxMTg4NDFCODREMjNCODg3QTJGODA4MzlGMAorQzdGQjdCOERCQUE2MzZEMjNBOEI3QjBGNUMwRjc3REYxNThEMjNGMjE0ODg0Q0UzMkU1RjY5QzQzNzEwMkUwQUY2MjNFRkFBMTc1QzM0QzI0MjhFQ0IwREUwMjg4OEMyQzU3MzhGMUUwOEVDNEEzMTlFMzQ1MkM0MzcxN0Q1NDMwQUEwMzUxMDVCREQ3OEE0RDE2REY3OTY4NjNCNDExMjFDRjc2ODg0RjUyNzU2ODM3MkYzNTRFOAorNDc0RDU0QkMKKzVBOTlERURFQzFFMDM5MDA1MUIwRTQwMzhGNTAKKzE2MjY3NkY2NzhCMjdEMjJDNTk0OTJDMEVCNTA1QkY2OTBBNjJFNEJBQzhFNjUwN0VFN0U5QzAzNDAyNzkyMkYwN0JFNDNCNDVGREFFRkUxMTFCNTdCNEEzMjQzNDI1M0IxNkFEMjIyMUEzQUY4ODUyNTBGNzRGNUZFRTlFMzBERTlBOTIwRjJBQ0U2REVFMkIzOUYwMjQ2QTA3MzY2QzNCN0IwNkMwMzgwMzg4MjM2RjY4RDlBNjczNDQ5NTZDM0ZENjJGNEYxMjI4OTk0QjY2QjAyCis1RjZGQkRBQworNTNEMjVFQzdERTkwN0E5ODgxRUE2NzhBQ0ExOQorQUJGRkNENUJGREE0RjIyMTdGQTkyRDlERUY4NjY0MTcxMkI2QzdFNEVDRjdENUJDNjgzODI1QzFCRUVFOEZENUQwREJDMTM0QUNDRkE0RDQzOUZEMTUwRTEyMTFCQjE4NzhEOEY2MTgxMTZGOTVERTZGMUMyQUE4RTMzRjdFNkJBODMzQzcwN0I5NkRGRjI5OTNENjY0RUE0OTRBMDMyRDAwNTM3QjUxNEU2RTVBMkNGRTAwN0NBRTQ5QTAwMDU2NkM3NzRCQzEwRDYwQjRDRDcxNTBBMDMxQzUwQkQzMUFGNzJEQUFENEVFNjlBNUIxRTYzOUU0QkMxQ0JFCis5NUY4MjcxMgorOEEzRjQyQkU1NTU5MjdEREFBOUU0MTJCQkJDOAorNkExRkU1NUZFODQxMzFGNjZBQjMzRkUwQTk0QzY2MDNBMjFDMDkxRTc3QUZDMjJCNTdENTkwNTA2M0IxOEUzNTBDMEJEODgxRjY0MENEQkRBN0ZEN0NGNzQ1NzQ1MkY3NDdEREM5RTAxNjAzMUNBNzA1QTc4ODkyQTc3NDQ0QTM5NUZFMTZDOThGMTgxMzM2N0Y3OUI4NEZENzJGREE4QTI0OUIxNEExMDRBQUNDOUJEMDI2MzFCRjBGNENBQkI2NkU4MkI0OTZBOTA0Q0Y5NDk4NDEzRkNBNjcyREI0NkZGMTAyRkU3RDVGOEFFQkRCQ0IxNDg3RUU2RURDCitEOEIyCitDOTIwOTIKKzMyM0VBRUUzCisxQTNGOTZENDA4NEQyQzE4OEQ3NDIyODZCMworNjIwREM5NEFDMTBGRjY4NUQ2RDA3NUVBQThBNEI2MUUxOTMxMDE5MDRBNDRBMDIwODUwODc3NjlCM0RFODE5RDNFOTQ4QUY0RTU2M0Q0MTgzNDA0MUMzNjA2NDNBQzcwNkYzRkMzNzREMUMxQUI0NzA2QjlCNjUyQUY4NUNBM0NDMjA2NkZCNDY3Rjk2QTNENDdFMkZBODAyOTRBMjU1NzEzCitBNzMwN0Y4MgorQ0UyRDBDOEZFNzVCODM4MkNCM0JFMkEyNUE3MworNjZCRUMxRkJEQzRBQTFCMEM4MzlEREIxNzYwMjVCQjI3MTlGMzc1MkY2Qzg5OTg2N0VDNjI2NzJGMTFEQkRFNzZDNzBBRTI4OUE3QzMzNUNCNEVERjVFQjY4RDFFMUI0NEQ1QkZDM0IyRjRGMzc0M0YyMzRGQTBBOEQyQzIxNTgxNkRGMEEwQzlDRjg3QjYxNUM5RkM1MzA2RkFDNEY0Q0ZDQzhBNTU1Rjk4NDNCMzVCMTQ4MkY0NDg2RUE4REU5REJBQjI1QjUKKzUwNjA0ODkxCiswQTgwMEZFNjRFMDcwQ0MzRkExQzRFNjA4NworQjNDQ0UyNjU0MDJDM0E3RDUwQUQ2Q0ZGOEI3MDkzMUJENTg5NURGNTlFRTI1NEJGODI0MkVDODg0NjQyNkJDODQzNkU5NkZDODM5RjczN0JCRkRDMjc5NUVFQUM0MTdCNUY3OTU4QzRBRkYzQjk1MUY5RTY2MEY1QjBDQTRBQzA5REQ1M0ZERDNGOEM0NTQwOENEQThFNTYyQzIwREZFNTAzNURGMzM5QzAxOUMxMjRCOAorNDNBOTBCMDEKK0VCOEZCNjU5NEQ3RjhFNTRBRkZFOUNGQUM5MkIKKzRDNDNEQTQ1NDJEQ0UwNDdGODY5QUVDQ0U5NDM3NDU3MjMwOTU4MTdGNjM4QTYwRDk3ODAyMEU0MkFEMEU1MjI2RkU2MTgyNkQwRDQxNzAxMkYwOUYzMzE3MDBDNUE4ODlDMzREOEU1RUEyQ0I0QjVBNkM4QzUwMDQyMjcxQ0IzRUFFMENFNUUyQTFCQzE3NkRCNkQzREJEM0YxMTY1NUY2NzQ0N0I4MTVBOTQ4MDc0QkQ0MUVGMEQ3NUZBRENFNjk0NzlEMTVDM0U1NDYxRjExREE5MDVGRTRCNDEwMDAwN0QzNTFGNTRFN0Y3MkJFRERDMDIzNTgzMjUxRgorNEE4MgorOTExQ0ZERDY0NTE3MEE1OEQ0QjkyRjM4MTBCMDU2RjUKKzFCNDcwNjM4CisxNjY4QkFBNjI3MzUxQjJBQjU0QjQ5N0Q0OEM4CitDN0YyNjg2MzFDMjY3RUFBMDU5QzY3QjU3QTRCMjJBMzRENTI3MEMxQUE2RTM5ODZBNUE1NDVDRUEzQjdCNTU2RDBBRjA1OUMwQjk2RTVCNDkzQTMzNjMyNjhDREZGNDkzNzAzMkM0RkExQ0U2OTM1ODVFMDU5NUI2Q0MwOTNDMTYwREU3Q0M4NkJBNzY1MUYyMDU4Q0Q5RjkwNENEQzNGOUNFNjIwN0REMTZCNkFDNjc5OTFGN0M0MDVEMzNBN0Q2ODZDNzdCQkE0NDQ2Njc5MkYyQTNEMENEMTJBREYyNEMyRDUxOTQ2OEZCNDhDNUQ3QkYwOTExNzJGNTgKKzQ3QjIKK0I2NDFGMDNEQUNBQTZBMDVFNDQxOTI1MDYyRDVFNzNDRjdEOEFCNTRGNTA1OTNDNzJBNUQyRUQyMzM0NkMwQzc5MDdDN0ZDN0IwMTY4RAorNjk0RDFEM0UKKzlCQjBDMzMwNzM1NDVGNTZGMDI3QkJFMDNCRUEKKzg2MDFCNDUzQzQ5NDZCNDdFM0E0NUQ3Qjg5Q0I5QUU1NzdDM0JCNTQ2RDJDNzFDMDJDODZCQzM5NDFBQ0JBQzgxOTgyRjFBQjQ5RURGNkY5NTM1OTkzNzA2QUIxOTk5REI5M0JEREIzMDAwRjM4RDcxN0RBNkYwMkExQjUxNDMxNDg4RjQwMEEwMEU4MDI2ODIyQjFGQzYyRDIyQjJBQzI0NTUzMUE4QTQzRDJGNjNFNTJENEY5MTkwN0I5QThDQkE5QTBENUMzNEY3MUY2NjE5NEU5QUFCOTI5OUY1QTQ0QjZEOUIyCitENzE2RDI4MAorOEY3MTY0MzQxMEQ5MzUxQzIyRTYwOTdBMjAKKzZDOTEwODkzRDUyM0YzOTMzM0IwRTg0MDRBRDhDMjkwNTE4MUZCMTBDNkY4Cis1RjU2M0JFMworNDk4NDU2QkRDQUIyQjRFMEE3NUMyQkY0QTE3RQorOTJERkIxMDZFMUNDQTgyOEVDQjM3OTU0OUIzRTg1QUYwNEIwMEM2NThFMEFCQTlBQjJEMTE1Rjg5NDE5NjBEQkNCNDVDNzcwMzQ1QkI0Q0E1NDRDMzc3NzFDNUQwOTMyMDcwMDc3MEM2ODFEMEE4QTkxOTFEOUUyMDNGMDdDNjQwOTRFNEQyNkEyQTUwQTJCNUJCNkNGM0QwMzJBMzJCNzYyQTlFNjBDOEUwRTdBNkJCN0ZDMzgzRUU2QkU0RjNGNDRDMURDQTNDOUVCNkE4NjgwRjg5OTA5NjZBRjYyODNENTQwQzBCMTZGM0JEMzc2MUIyQjU1QURFMUQ4Cis4QTUyCitGOTI2MkMKKzk2RTI0MkRBCis4RkQ5MjgxMTM2RDc4NTI4RjE0RkI5NTEzMAorMTgxMjUzRTk4RUNDNDhBMkE1RTUwNkIxQjE4OUI3NjA5MkFDQkJFMTIyRTYzNTBBQkFGMDA2NjA3MDY2N0UyMUJBRjRCODg1OTk2Njc2Q0IyMTE3OUQ1NjM5QjI0NENGOTE2REYyNUU2MUQ5OURGMzUzQzFGMkE1NjU0RjczREJCRDY0M0VGMEU5RTc5NTY1NTBBOUIyRjZFQUI3RENGQUYyRTg2MzE5MUU3NUYwOEQKKzY2QjAxQjVCCis4RjgyMkQ5QjczOTBDNDcwMjYxQzYwM0I4MworNEJCMDNDRjQ2QzlCNjY5OUFFMTc0N0E5Qzc3NTNCMDk5RjY0QkYwQTlFQ0U4OEI4MURGMTNGMDY1M0FEQzZBRDUwQUE4OThFM0E4RDJDMDFGMzA2QkVBMUJCNTBCQzRDNUYwQjcwMjFBNDM2RDZEMjQ5QUZCQ0FGMjY0NzEzQTRDMDJBNTFFNzg2NjcxREI0MDU1RjQ2MkI4Q0M1NzRENDY2OTcKKzkwMzIxMDZCCisxRUVGOUNEOTVBODI4MzJGQTExRDRFQTMzMUE4Cis4MUM0M0JFQzk0MjM4REI5M0JGNzNDQUQ5OTQyM0I3NENFRDVCOUI1NUJDMTVEQzE4NjFGMTYyQ0RGRTIxODlEQkVDRjgwNjlCREI3Q0JDMEM0MkFCOEMxRTA5M0VBQTNCODkxRTMwRUIxMUM4NkM3RkUzQ0Q4QkE3OTY2MkQwNDg3RDdCQkYyNDcwMzA0RjdDQzkyNkQ0RjhEQTlDMEE5Mjk1NjUyMjlDNjhCQ0MxRTlERkNCNUM1RUQyNzI1RTdGRTI3NEVGM0NGOEI4QzJEODE2RkQ4Q0NFQjBCCis4OTE3QUQ3RAorOTIyRTNBMTUxMThCRUYxMjJDODgzMTg4NTEKKzdFQjAyODlBNDdENjUwNzlDNjI0NUNGQjE1QjY3Q0ZEMDFCRUFFRERDRjE1NEFFMkE1MEEwRUY2MzVDOUYwNjIxN0Q4RTJDOENGQUZFQThBRUY5QzJDNkNBNkQ5Q0FCNTgwQzQyQjE1RTk4NkM5MEY4QkUxMTI1RTUxRUQ1NEUyNzdDMzU4NTdDN0E2Nzc2NjI4MEFEMTVCNUExMkU2NkI3RUQwODY3Nzg1ODEwQzU4MTcKKzg0QTBBNjkzCis1ODYzMzUwNzREQjg5RkUyMDMzMThGRTExMworQzJGRUUwQkUwRjg0MjRDNzlCNUQ4NDgzOTYxRjE2NkVBNEMzODYxQTdBNDM2MzM5MkNCN0ZCMjg4NkEwMjlFRDNGRDQxRTI4OTFERDNCMDg3Q0IxREVCNkQ1NzEwRUY4M0RBMjgwMDAzRjc2MkJBNjQxQjk4RjJFQkI4MTU2RkNBOEQ3OTU4MjcwRjRBREE5Q0RBQTA5NEYwNkQ2NEUxMkEzQzI4RTQzRjZGN0ZDNDZFNTExOTg5OAorNUIzNzIzQUYKKzQ3MTk4NEZEQTBBNEVCMzYxMDM2Mzg3NEY2MkYKKzZFN0U0REIxRjAzQTk4RDVGQzEwNUZDNjcyQzY0RjA4MkUyMzBCNUIyMzUwQjg1RjZDNDg2NTU0RTE5OEVGNUU0OEFBNjRCNEVGREQ4NTdGNEY0M0Q4NEQzMkZDQjU3RUJDQzNCNUUxNTQ0MEUzQjk5NzBEQTZBRDFEMkQyRjE3QzhDNjk0OEJDM0U2NkFEMDQ2NTg0ODA0NkExOTA0QkNBRDVFNDBFMURFRjY5MkQ0QjUzRjBBNzEwOTAyOTE0REU0Q0NCQjQ2NjUzQjg2RkE1OERCQjRCNDM0QjNGQUEwMERBMDc5QTcwMURCRTZBNENBRDJFNkI3RjdCRAorMzZBNAorODQ5NkFCOUQwQTNCNjM2QjNDREQ2NDVEMTNFQTJBOTA5NTQxMTQwQUUwOEQ3N0EzNkU3QzE1QTI5QTg5QUZCQzU2ODc5OTU0MEY2NEMwOTI2NzVCODQxODAxODlFNworOUE5OTkyOTYKKzQyMzY4QUY3N0NCODY5NzY4RTE4NjBCNDlBOUMKKzEwMDJFNEMzMjdGOUU4NEVBQzhCOEU2NTg5NzM0OEI3RUE2NTExNEEyQkM0RUQ0NDY5QUZGRUJCQ0YzRjkxOEI4QkM1NzZFRkNERUYwQTYyRUY0N0VDMjA3OTIzOEI4QkY3RjE0RUM5RkU4NTUyNzEzNTkwRjNDRUQ4NUMwRDU2OTQ2ODdBNTVFQUEzMzczRTE4OTdBMDc5NUQ2MkI3OEVDQTBFQjAwQTkwMjU4ODg0ODY4QUIxMkRGNTE1QzUyM0RDRDQ2QzU1OERFRTkxOEU4Qzg3ODk1MDFFCitDRTZEODdFRgorRDQxRUU2MUMzOEI1MUJBRUZBRjMxMjczQkQKKzhDMjJGMTI0QzhDRURBQjg1MjcwQTg4MDA0NUI5MzFGOTlERjAzODkxNjE3ODNCQzhBQUI0RDkzMzE0RUZBMzEzRjk0OEM4QTNBMDRGRDBFMDI0Qjg2Q0JFOTJBQ0FCOThDMEQ1NjczRkVERkI0NjlCMDFGMjU2MkU4NERGQkQ4OTREMTcwQTFDMzI0NjIwN0NBOTgwRURENzRFRkFDNjQKKzk0MEY1MTgyCis1Mzk5N0YwNjUyNjYxMDgyMEZGOEI1NkQxMQorNjFDQUYxNEQ5MEE3RjU3MzU1QjMwOTQwNjFBNUNGMjY2OTI1RDk1MDk4MTkzMDkwNjhBNDkzMERDODY4OTQzRDlFMkNBMEMyRkI0RTMyNTQ0OTFDMzExNjJCMTIyNzU5NTA3NzY0Rjk1RTlEOUNCRUQxMkQyNDhCOEQ5NjQ2NUU1QTY5MUM4MTEzNjA2RTIxM0MyMEYxNjhFNjFCQTFBMzIwODAwREQyNDlCNDQ3RDI2QzRENzE4MkRGMjNGOEJCM0YwMTA0Cis1RUUxRUE2RgorNEU5RjM3NjE4NTBDQUNCRUY3Mjg5QjA2RkFDMgorREUzM0QzQjEwNERBODVGODQ1NkExMDI5MDBBRkU2NzgzRDE3ODdCRTFGREEyNDEwQ0Q1NjE4MzkxRUYxM0M1RkExRkRCQzQ1NzNDQzA2QjZGMjE0NkVEODlCMjQyMTBCMzkxQzI5OTA4Q0QyRUUzNUYzMDY4NTc3NjNDQ0NBMTBGMUM2NERFQTVFRjk5N0ZBRDlGODgwMjAzOTc3QjRGRjdFQ0I0MkRDMDlEN0NDQjQwOUYxN0VFOTFFMzBCNDREMkUwQzJCMjNGNjgyRkJDNjYwODMxRDBDNjBCM0JDMEE5RTAwNERCMTFFRTA5OUVDRjdDNUJGNzI3RjdECisyMTExCisyODAzNzg5RDFCQTM4Q0VEMzQ2Q0Q4N0Q4M0M0NUYwQkVBRUYwM0RDQTg5OThCMUU3MkVEQjkzQzAwMkJCRTNGNTRFQkM4Cis0QjQ4N0YwNAorNzc2NzM5REU3RTFFNDcwNkRDOEE2QkE1NjgKK0UwNERCRjExMzE4RUMwOTE3RkM0Njc0NjczQTJFOEE2QzBDMUM5MzRBRTkwQzgzNjhCQTUxOTZFOTg1QzZDNzcxNDlERjRBQUExRjEyQUU3NDEwQUQ0RTA1MjgxQjA2MkQzNThDRDkwMEY2MworQTY2ODk2NjMKK0IzMENGMUU5OTAyRkZCRTEwNThDMEFDOEFEQzIKKzIwNkFCMzA2Qzc5NzRFRTNGMzI4NjIzODUwMzhFN0ZBRUIzQzc5NjJDMTRFMDI1NTNDMkU3NTVDQTIzMDkwRjcyMzI1MjVBMzBCQzRFRUEyOUFBMDBFNjI1NEU1OEM0REJGQzVDMzdEMjU2QTA1MTlFNkJBRTFEM0E0NUMwNkZBMjQ4MjhCMTgzREVGOTUwMTBCQkU4NDVEQ0JBOThDQTI5NUY3NzdFQUI3QzI1NTYxQTM1NEQ4QkYyMzcwMTJDQjY5MkFBRkU5MTREM0Q1NUJBM0E5NDcyQjA0NDU5RUNBRkM3RDA0RUQzRjE2RTM0Mzk4OUE3NUNFM0Q2NgorNUEyNAorRDE4RTcxMTFCQzdFOEQ4NkM1ODc3QTlERjA2NjJBRDVCNUQwMEVFODFGODQ5QTUwOTU3OTc2Q0ZBMUYyQUUKKzFCMjRBOTEwCiswNzJCQUZDRkU1NjM1NjJCRjBDM0Q0RTJCMjM1CitDQkEyOENBNUNCMDdGMjQ5NTBDNjBDOUNFQjFDQTAzQTVBOEY0ODJDMDQwMzJCREE3RkExNUFCODA4ODI2MzdFOEFGNTAzQzBGQ0Y0MzdBNjY4MjgxQUFGQTZCMTkyN0IxNDFFNDQ5M0MzMzFGNzJBQTQ4ODI2MDY4QTI0RDRBNTEyRDY1Qzc2RUQ2QjNEOEYzNDFFMEU2NEE1MzYzQzAxNTFDNjdEMERGODA1M0U1MDY1MDYzNzU1NTI5QzU1RjMwQzVCNjQyMDkzMzhDQ0FBQ0ExMzEzNTcKKzI2RTA1RDg5Cis2MDgxRTUwMEM2NkQxRkRCOEI3QjJENEVCRQorQjQ1RDY0RjkyMTIyRjdGM0FGQjA3MjI0QzJCQzNERDlGODlDRjU1NzdGRjhERDQwMDE1NzMwQTc0ODdGNTVBQTUyOEZDNDVBQjEzNkFFRUEzMUZEQjcxQjgyQzZCQTIwRERCOTQ2OUExREEzRjFBMUFBOTBDMTQ1MzQwODAyMTJDMzA2NzYzNUI5QUEKKzVGQzM5NjMwCitEMDVFQUI0NzJEQ0FGODQ5M0VFMDU1RDU3QjVECitDMDlDOTVDOTMwODY2NkNDNkZFMkU5MTE4RTFGMURCOEFCQTEyQjU1NzRFNjJBOUJCNDNENzQ0MDc3MEJFQkQzQThEMkVENzMyODY2M0VBMDAwNjMyMUZGMTUxQjlFNkUzRTZBQjk0QUE2OTIwMTc0NEE3QzNCMkFGODUwOTBCM0IxMDM0NEI3OERBMDU1MDFEMzBDNDc2NDBBMUE4RkQ1RjM1RjM2NDJGRjU2Nzc5QkM0OTQwQkMwNUQzN0NBOEE5NTNGMzE0MUM4NDYzQjlCMUYyRkQ5MTc5MDU0MEIyQzREMzNCRUUzMTk0MDAyCis1NTlDMTE0QQorMTg3RjhBMzZGRDk3QjI2MzQxMjYzRTI0RkY0QQorQTcyQUQ5MTFDM0VEQkQ4Q0Q1NjJBRTgxNzBDM0MxRDFBMkNFQkFGQUE2RjQzOTZCQjJGRjJCMjUwMEIyRjg2ODIxOUIwNTM5NDE2QzRGMTA5RjAwRDM0MTJERUJFNzM3MjA0MUM0RkE4Q0UxQkIzQ0FEOTlCQzQxMUQ0NkVEQTg1MDM5QTA3Q0E3MDk4M0EzQUEyMDFERkZDNDQ1QzdBQ0RFRUZFNDNDM0VCQTk2OTU0M0M4QUMzMzAxNjZDQkY3NzJENDYzMjFFMDAwNEREMEE3NDcKK0NFMDRENkVGCitDNUFDNzVBMkE1NTczNzE1RjgxNkQ1OTc4NworOUY3NjJCRjc2NEQ0MUNEODM2NUVERkEyNjFDNjREMTkyQ0M3OEVFNDQ0RjMzQkI0MTUwRTc5NjIyNDc3QUREQjE3OTRGQ0Q2QkI2MzM2QzRFRjk3RDZDNThCREY1OTI4RUEyNUIxQjhCRTI0NkM2RTJEMzMxNEFEMERCREE1MjVENDg0NDk5N0Q0NUZGNEU4MTE2MTRCODE0RjEzQUMxODJGMUY2NDgzRTdCMjY5CitCRDAxNkI4QgorNzNBQkJBMUE1RDQ1MjMxQzJFOTlCNkU4MDNBMAorQTk5Q0FCQThEOUQ3QjIwNUE1MTNBOERBNkZBMzY4QUY5REFFRTc0RkVBODYyRkVGQkYzRDgyQ0M3MkM3NkYwRTAwMkQ3NTgwQUM4MDNFNTE2MEQ4MjA4NjdERTg1Q0UxNzA5N0RDQUE2QkJDNTNENzJBNkM2Q0UxNjY3NzY2QTRBNUZENjE5NEM1NUFBNzMyMTgxNEMyNUY4MEI5RDdGNEE0M0RBRTc4MUNGMDlGM0RBNjQyMDkxQjkzQ0RFOUVGMzUyRjhBMjJBRTU1M0I1REVDMTNFRkZBRkI5RDJGRkUyOTFGNkEzNkU1NzY1REYzODkzMkNCOEQKK0UwQjJDODYyCiszNzY5NjZCQ0Y4MEQ5M0E1NDZEMTY2NjA5MAorMjc2QzAyMERBMjQ4RDMzNDhGODY3RTYyMDMwNjZGNUQ4N0NENTQ4OURFRjlCQzg0QjA5QUIyMzI3Rjk5NkM1RUNBNDA1MzhBMTQ0M0IzMkJCMTQwMTU3RERCNzk2NDBBMDk3Q0QwMDUxRkY5RTQ2NzEzQzFDMUI4RTgwNjAzNUJBMkFDM0Q5OTRCCisxNkU2REM0MworNjE3QjM4RUZDRDNFQjNCNEZENTU3Q0Q4NDcKKzcwNDc5MUVCODNFMzY2QzY4MEJGRUJDRjY5MzUwRjRCOEVEODFEMUQwRDVDNjBDQUVERTU4Q0Y2N0M3NTU0N0Q2QzVCMTMyRDlGMzYzNTIxNzJBNDYwNkEzNDEwODAxNTQwNkU5NUY0QzJGRjNCQkIyRjczNENERDhBODdFODUwMDZCNENCNzkxMjlCNUVEREVBQTFCQTEzMjk3M0MxNUQ4RDUxQUY5N0I0QkEzNUU0QUMyRUU1RjQ4RkQ0RDUxOUM4MTkKKzZEMUU4RTVGCiswNEFEMDMzNEYwQzlGRkUxMEJGMzBERTBDRgorNzJCQ0QzOUQxMDY1QzVDQjUyMDUzMEI4MTlDQ0YzQjlFNDYxOEEzRDEwMTM3QzZCRUZBODVDRUEzOEEzNDY1RTQ0QTM3ODVFNzg1NTg1ODRGNTBGRUQ1REMzMDJGMEQzQ0VBRTA4MEREMDkwRTU4MDFFQUI0ODcwQjA2NkFCNjBCNjFFM0NGNENEMzA5QUVGMzZEMEVCNjQxRDVEQTI5OUFFREU4NjI1MTQ0RUY1NzdGQQorODAyNTZDRTcKKzgzNjg2NDM5ODIyMkE4RkU0Qjg3MTdCQjRGRjcKKzc5QjYxNUE0MUM3N0ExOEQzRUJBRkFEMkQwMUQwRTM4RTM1MzAyQUFBNjZBQTNDQzI3MUU1NzRCRTBFMURBMkUyODA0RTc4ODk3MzM3NjY1ODEwRTc2MDlDMDlCRkVEMDY4OEEyOTE5RDZDNUJCQTkyRkY5RTIxNDc2NEU5NTlBQTI2NkY3ODlDMTU3Mzk2RjNFNDVEMDBGQUIxRjg4RkEzRUFGMjAyNTY1QjFGNkU4ODZFMDM3QzM2OEIzQUJFQzU5N0VDMzAwREJDN0M4MTFCNUNFNzBGMDdGODUzNTFCM0JCRTc0MzZERjZFQTQwOUFEMUU3NjM4NEYxMworNkQwQgorQkZFQkQ0NkY3REM4QTczQkU1NEM3REVBMzA5MgorMzMwNkU5NzAKKzk1MTc0NDlFOUNCMUZBQjI5MTkxOUUyOTJCM0IKKzU3RTFGN0E5OEJEMDZBNjM4NTE1QjU5MzRFMTgzQkYwRkNFNDg1RTAwQzU4MUQ4RUNFODFERENCRTcyQzMxQjYyRUUwM0RBMzVENzA1MDEzNTc4MTFDQTQ1MDJERDc1NDVGMkVDNzExNjRBRUQ2QkIyQjVFODEzNDBGMENDRDM1REQ4NjQ4RTEzREExNTEzODBGNTUwNkIwRUYyNDNDMTIzRDdBMDUwNEVCQjZDMEQyQUVENzFEODlDNTgwQzZGRTUxRDFCN0ZCMjM2MDdGRjkxMzRCODQ4MzNCMjlBN0RCMjNGRDI2MEJDMzhFQUZCRkUwOEUzRUI5NTM0QworQTYzOQorMzc5NUYwNEMwN0RBQ0M1N0EyREFDRDMzRDBBQzdDNUVBQURBMDE1QzJGMDNCMDE0MUYKK0MzRjU2M0QyCitDODM4REJFQzBGNzI3N0E5NTAxQkYyQkE4QkM3Cis1RDMwRTI2Q0IwOUJBM0EyNzFDNTdDQjc1RTgxOTFERTQ0N0I1RTRDQTFCNDBDMTI5RUJDQTQ4MUJBQURBQTRGQTMzQ0I2OTZDQ0Y5ODhEOTc1QjIxRjRBNjBFNTNENEY0QkEyMUVBNDFGN0YzRjBCQUU1M0UxQzQ3QTlGODlCQzZENDk1MjIzREQ1RDU3OTNGRUIyMDM4M0VDQUQ4RjU4RkUxNTEzNzU4RTJEOUZEOTQ2NTJBRjlENEYyRkYxOEE2MjBCNEJEOTg2OTI3RjYxNkM4NEU1RTNCQjcxNTU5Nzc3NUYzMEMwOEQwNjNCNDhBOTRBODNFODM4QUEKKzM1NkUKK0MyRDkwQTJECitFMkExQkQyRDdDRDgzMUY3NzMzNDhBODhDQworMzYxRkYwNkUwNEUyNDJGQjMxOTkxODE1NUIyNTczQTM3ODc1OUMxMzg5Q0U5MDM4NDk0QzQzQUM2QTcyNUFCRThFNjhGODRGMDJDQkIyMUQ2ODEwRTMyNkIxNTY4MDU2OTg1OUM4RjM4M0UxNDA5MThFOEI2QUZDMDgxMEY0CitDMjc0NkI3RAorMDk5Rjc5NzEwNTU0OUYxQTc3MUMxMDQxQjgKK0E1OUNBRjM3MkNGNThGNThBRDEzRDNCNjQ3MzNDMUEzM0RCQjE0QkE5RTM1Cis3MUVCRkJDRQorN0Q1NkRCMkEyRjZFNjNGNjhFNDdFNjc1NDMzNgorNDE2MjI3QTYwRThCNkY5RQorOEUzODRCQTkKKzUxNzFGMzk0MEJEMDZGNjI2MEREQ0JGNkJBMURBQjRGM0Q3QzA5QzNBM0I5OEM4NEQ0NjQ1Njg5MkMyOERBMDcyRjE0CitENTVFODMwNDNBMDI5RkI3REFBQ0Q0MDJBQ0NGQUY1NkY5RDhGQTgxN0NEMEY5NDM2QUVBNDUwQTFCRkYwMjQ3NjJBMTYxQzk5NzNGCitGMjIwQ0RFN0Q4OEYyMkU1MDU1NkE4NjU5QTkzMEU2OEU1MjI2MkJDMjIxNjJEQUM2QTdDRjIKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDQgcHV0CitkdXAgMyAvQzAwNDUgcHV0CitkdXAgNCAvQzAwNDYgcHV0CitkdXAgNSAvQzAwNDcgcHV0CitkdXAgNiAvQzAwNDggcHV0CitkdXAgNyAvQzAwNDkgcHV0CitkdXAgOCAvQzAwNTAgcHV0CitkdXAgOSAvQzAwNTMgcHV0CitkdXAgMTAgL0MwMDU0IHB1dAorZHVwIDExIC9DMDA1OCBwdXQKK2R1cCAxMiAvQzAwNjEgcHV0CitkdXAgMTMgL0MwMDY3IHB1dAorZHVwIDE0IC9DMDA2OSBwdXQKK2R1cCAxNSAvQzAwNzcgcHV0CitkdXAgMTYgL0MwMDc4IHB1dAorZHVwIDE3IC9DMDA4MyBwdXQKK2R1cCAxOCAvQzAwODQgcHV0CitkdXAgMTkgL0MwMDk1IHB1dAorZHVwIDIwIC9DMDA5NyBwdXQKK2R1cCAyMSAvQzAwOTggcHV0CitkdXAgMjIgL0MwMDk5IHB1dAorZHVwIDIzIC9DMDEwMCBwdXQKK2R1cCAyNCAvQzAxMDEgcHV0CitkdXAgMjUgL0MwMTAyIHB1dAorZHVwIDI2IC9DMDEwMyBwdXQKK2R1cCAyNyAvQzAxMDQgcHV0CitkdXAgMjggL0MwMTA1IHB1dAorZHVwIDI5IC9DMDEwNyBwdXQKK2R1cCAzMCAvQzAxMDggcHV0CitkdXAgMzEgL0MwMTA5IHB1dAorZHVwIDMyIC9DMDExMCBwdXQKK2R1cCAzMyAvQzAxMTEgcHV0CitkdXAgMzQgL0MwMTEyIHB1dAorZHVwIDM1IC9DMDExNCBwdXQKK2R1cCAzNiAvQzAxMTUgcHV0CitkdXAgMzcgL0MwMTE2IHB1dAorZHVwIDM4IC9DMDExNyBwdXQKK2R1cCAzOSAvQzAxMTggcHV0CitkdXAgNDAgL0MwMTE5IHB1dAorZHVwIDQxIC9DMDEyMSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIzNiA5MTkgNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjBFQTE1N0M2MjU4M0ZBQTAxOEYzNjlGMTBDMjY3RTVBNjg5CisxNEIzQ0YwNUQ3RTNFNzMwMUExRDExM0MKK0I4Nzk2OUIwQjdBMzNERkRFNQorNjEwNDFDOEEKKzc5RTBDNTVGMDc1MTk5MDMxMzcwNjEwNDMwCiswRDE5OTkzQzY2QTkwNEUwQTM5MzA5N0MzM0UyQjUzM0M3NTFCMDNEQjI5MkQzRjE2QTM3QUVFNjQwQjNDQjhGN0Q0N0YyRTQ0QjJBQkZCNEM4M0NGRTE3OTYyMjg5MDUxNkJFQzlFQzQxRTI4N0ZBQjE4RgorNDY3NTJBOTgKK0I1MjQxOTdGNzk3NDk0OThGMUI4MUI0OTlFCis1QjE3Mzc4NERGOERBOUU0NTNDRDA4MzlCMzNCQTBENjdFNjEzRkNCNDE2RUVFCis5QTUxREE0OQorNDY0NjYyMkYyMkIxMzQ3M0VCREY5NkEwREEKKzhBMzQ5MzIyRThEOTRDRDBFOTFDOTlFQTBDM0JDMDk0NjI4OTlDNkJEREU2MTg3NEJDREI1MDEwMUM0OUYxCitFMTc0M0REQgorQUEyOEVBNzVCRDU5NjIwNkI1QTQ2MzQwMDEKKzBEQkZDQzRENzMyNUY5Qzg5NDg0NzA4MkM5QTAzM0Q1M0Q1MzU5MTNBMkVFNTJGNUU1RDEKKzhCNzE5Nzg3CitDNzZDNEVDNzc1ODczQjM4QTk2NDNGRDA3RAorOEY2RTM3MjdGRjQ4MTE5MTc2NEFFMDYxQkU2QTAxQzY5QjQwOTZGMEYyOEQ2RDI0RTRCMUYxRkYzRTlGMkYxMTIzNDQyNzBEMEI5OTAzQkNDRUZGQjE5NjNFQzJDN0ZCODI0ODcyNzk5QTc1MTMwNTQyRUY0RTVGNkNDN0IzNDUzNzE3MDFFNkQyNUVEMTBERDRFQUUyREFEMzUwMzgKKzNEMDkzQzE5CitBQTk0M0M0ODM3OTcxRUExN0M1QTg4QUQ2RgorQkMyRTcwOTVBMDM0NDE1REFCQTk1NkVBNkU0QjgwRTI4NjY4NDAzNDQzOTQ0MEI1MkUzMzJFNUE3RTZEMzg4MDU2NDIyNzJBOTEyNzc5RDUxMjAyNEQyMUI2MUMwOEExRkQwNzQzREU1REM1RDE2NUU1M0JBMjIwCis5Q0YxNEYyQworNjhGQzVFNjcyNjdCMUE4MkExRkJBNTBDRUIKK0UyQkUyOEZEMTJBNzUxMDdENjcyNzJCMzVDNkRFMTNEQ0Q2QTQ2MjJDQUI2NTIxOEJDMTMwODVERjYwOTFFOEE0NjRBODY5M0E2RjIyNDY3ODVGNzA0OUFFQjdDRDZEQjUwRDE1NjYxNDVCQUE4QzcyRUZGMDYwRUU4NDc3OUE0QzEzNzU0NUIxOTUxN0Q0QzdEMzRFOEZGNzJDNUNGQTdFOTMyM0REMgorMzA3RjU4ODIKKzA1M0NGNEJBNDIzNEU1QUI5OThBMjk1MjhFCis0NUM0N0YwOTZENDM1MTE0QUU5NjkyNTczMUI0N0Y0M0NDOTAwOTBCOTY3ODAwRDEyNDEzNkMzOURGQTMzRTZCNUJBN0NBRDhCMEY0RjE5QjkzQjdCNTNENDJCQjBFQzU4OTcwNzM2N0NBMzYyMEZCNjRGMzQyMzRCQjlFRjIwQkZGOUYyRUEwNUVCM0UxNDdGREQ4MzQ3OEVCMTVEN0Y1N0U0NDE5NDExMEFGCitDNzBDNDIwQgorMzQ2MUVDODBERDYwNDQ5NzlBODU4RjFEOEIyNgorRTAzOEUxMUIyOTFCREMwQUY3NjE1QTg5RTVBOTU3NkUzRkVEMkMyRUM0MDE4QkY4N0Y0REJFMTg3QzhGRTk5MjNENDJERTUyRThBMDc5Qzg4MzA5MDkyQzQyNkYyMEVDM0Y0QzEyNzgwMjk5MDUxMDQxM0IxN0UyMTVCRDA3MUI1MDc5MDZGRUNEMDRCODU3MDM2QTNDRDI5QzI5QTlBN0YwREJCNzVDMzc1QjYzMDQ0RjdEM0Y4Q0Y0OERGRDU3ODgxQkNBMzMKK0Q5NEEzN0RCCitBNkY3QTgzNkZGNjI0NThCOEYxNDE3NzVFRAorN0RBNzQ3MzRGQjNDNEE1M0JDRjkzNUVBNkU0MkQ2QjY2NDFBMEFGNDNBOUVBQkQwNjZGNDczMUJBOUUzQkIyNDU5NkQ0NjlERjg5REQ4MDk5RkI5NzZFN0VDRjMyRkRDM0Q2NUE3MEY4QTIyCitGNDE3MEU3QgorNUJCMTM4RjNDMjVDMEUwRjQ2RTFGNUFDMDQKKzdBODIwNEY0OTg2QTUwQ0EzMTE2QzA3Qzg4QkRCNEZDQUVDNjlBQjFCRDYyNEM0MzAwNURDQUE5QUU3NEM5N0Y2Q0E0RUJGMworMjVFMTcyMEEKKzNEODUxMzRGODNDQUY1RTQ1RTU2NkE1MjNEMzMKKzZDODUyM0FBNzU0M0RDMDIzQzUzNDVCQUExNjg3MUE4NkZEMUJENTAzQzJENTM4QUI1OUM2MjBENzJFODMxQ0UyM0U0MzAwMUE3NEVEOEQwOEI3N0Y1NjMyN0Q0NTQ1NTVGRDQ5Qjk1Qjk4M0RBRUU5OTk0RjQ3RUUxNjAwQzczNkYyODkzOUU4QzJFMEQwMUI0NEQzNDYxMDhBNTQ1QjRBQ0RGRDE3MkVBMjMzMDZFMDNGNzk5NDc5RjM3ODVFRDYxODhGRDBEQkJCRTI2QUQKKzZFMDJGNzlBCis5NjlDNzY2NDM5NTM5RkU5OTMyQ0FCM0RCRUFCCitBQTIyNDZFQTRGMjdBMDlDRkRBQUNBNTI1RkIxMkM2RUZDMDMzMTg5QURFNTk1MTcxMjFDRUNGNjRDRDc5N0M3RDM3MDJEQ0Q3RjI3RTQ0NkUwNDdENEQ4MTgzMEI5ODE5OEI1M0YxQjE2M0ZFNzkwNzRGQjJBQzMwRURFQ0U2Q0E3MkQzQ0NDOEFCODcxQkQ5NUU2NENGQzRFQjIxNUM2Njg1MjJBNEQ3M0IwOTJFRUE2ODNFRkY1QkM3RDRBMzk4QjM0MkNENkEzN0QyMkUwQ0I5MkMxREE5NzI5Cis1NkVENjMxNgorOEMzRjQyRUI2QkRFRDdDNzJFRURFQTA4OTdCNAorRjhERjYzMTBEN0FEN0Q0NjkzRTdFNTY5NjJFNkRFMzRDMUNFMDM3RTFFRkExQTg0Qjc0MUI0RTNDNTYxMUIxRDY5NUI2MkMyODFBQUEyOEI4MkM5OUZFMjYyODk4MjY2RTkyOTk3Mzg4NTc5NTdFOUYyMTQ3ODU5QTlBQ0U5NUNFOTlCN0Y5RUJDMTI2MzIxRDU3OTFFRUQxNDRCMUMyNDUyQjc0Qjg2NDMzQjE0MkU2RTM2RUEyOEE2MzUyRjhGQjk4NzAyODdGNENDQjYwQTlGQTkyQzIyMjAKKzVBMEJBOTZDCis5RkY5MzRDQTgwNkVBNUQ1N0I5REM5NzMzMQorOUM0NzMwRTU5RjYzQzBBQkREQjg0Q0MwM0VENTgwREIzRjlBRTZFMDdBQ0RFQzVBQUU1OUJEMDEwMEM2RUM0NzM3NkEzRTg4RTZBNTlDRTU2OUJCRjY0NjlGNUVERkJCNTdFRkZDQjJFMDA1MzE3NjI5QkJGREQ3Qzg4OUE0N0Y1QzA3RkU3RkVGRjYxNzIxQUM2RTcyRjZFNzg0OTJFN0Q3NzMxQ0I3NjI2QTYyRjNEMDA1Q0NCMjQ2NTkxMworMjlGMEZENDcKKzVEMDI0QjgxRDk4MzIyNEY1NzkwQkYwMjBEODkKKzUwNkNEMTI3Q0M5MDA4NDg4ODhCRTBGOUEyRjkyOTAxOEE1QTZFQTU0N0U1QzZBMjFEOEVGNjZBQzExMkVBMDYxRDg4RUU1QjMzMUFGMTVGMTFBQ0I1OEM2NDU0NDMzMUIzNzY1M0NFNUNGNzI1RTZCOUNGNDhDNDE5QTQ0M0YyMjExNzhEOTZEOTU1NDRDNDYwMjM1MkY1RkJDNTVFMEVDMDExMENCQTBDODgwQkZEMDk2OUI0NjI1NjE3Q0NBNDY0MDVGN0NBQjQ5QThFMDk0ODk3NEE3MTk2RjI4OTIwQTk0QkYwNjRBNDA1ODJCNkY0QzQ1MzQ5N0QxQworNzYzOQorRkZGNTZEREEKKzdCMkQ4OEQwRjYwMDEwODIyOUIxRTNCNTQzCis3OTY0RTI0MzhGMUJGODFBQ0UxQTJERThCOTIwMTE1ODA3RDQ4OUI3RTNDNjRDMTY1REZBM0NDRDM0MUQ2NUU4QzQ5RjQ1MUFGOEQ2MkM4QkJFQjUxNEQ3NkEwMjQzNzQyMEFFN0U2QzEzOTZDRDQ0MzEyQUNCQTkzNEQ3QzdFRTdBMDBEN0Q4MjBBMzQ4QThCMAorQzI1MzQwMUMKKzg2NTBERkY4Mjk3RUQ0Rjc4RThFQjM0OUNECitCRTE5MTlDQ0I3N0I5NzEyOTIwRkVGRkZGNTE3RjFFMDY1ODNEOTNCREQwMworQTNGMEE3QTkKK0ZEREM1MjVERjAyNThCMzQwQTJGNTREQUE3QjUKKzRGOUUxODE0ODYyRUMzQ0ExNjI3QjM5QTlENTRENjI1NTNGMTdGQTgyQ0ZBQ0NFNUU4M0FBNDlGMTZDNTRCQzc0NzhCQUNDMzYwRkFCNDkyMzkyQ0UzNDQxM0QxNkE1NjYxMjJERjkxM0E0MTg2ODE2QjVENkIzMTkyODZFOTgwQjIyRDc1Nzk0OTQ1OEQzNjZBOTUzMDFDN0M4ODREM0E1RTk0QjRCRUE0Nzc4NjYxM0YxNjJEMzI3QjI1NjUwQkZEMTE4QTIwOEU2RDRBQkZDNUM0Q0VBMUQwMzY3MkQyQ0VDRUMyMDY1MjJBM0U3QTBDQzk4Mjg1RjA5NgorNUIyNgorMDU0OTI0MTIKK0Y3RTE2NjFDCis0RTU3Rjc2QjdBRjc1MTI3NkVGOEM4NjY5RQorQjJERTg0QjcyQUEzNTkwMENEQjBGMjdEMEMxQTNFQzVERjFDMUMzNTE4N0IxQkY5NkQ0MzE0QkIzMEREQUM3QzdCRkI4Q0NCMUQwRjgzRjY5NUJFMjU3NjMwRTgzNzQxMDk0NjVGRjdDNjMyMzhGRjEyQzg4RTJCODBBMjg1NTAzREVEQTdBODE2NDJBOUQ5OUQ1NjdBN0M0MjFGRDAyNDQxRUU4Mzc0OTYzMEE2QzU4OEU3NTVEMkQxMjIKKzc0Q0E4MEE1Cis0NzQ0NjBENkM4RkFBRjhENUIwMzI2MjlDOAorNTcyNENDMUJEMDA5QkY4NTUyREYyQjAxMEYxMUY1NDAxNTdBRjdEODQxODBDQ0I4MkE4QTZEQUFCNUYxQUJFMTNDMzdENTNDODdFQUQ2RDAwQzI0MzNGNTc3MjQxODU4RjVBMTM0MzE0RjU5QjM3RDY3QTNGRDBBRTFFQ0EzQTdBNkY3Mjg4NTMyRTZGQUQxMTBDRUU5QjgyQUVGNkVERUI5MjUKK0JEMkI3Njk1Cis2OTI4NUQxODRERUZFNEY0NzA2MUU0NkZFN0IyCis0MjZBMDlEMzJGRUJFRjVDQTMwNzcyQjAxMzJCOEMzNDhFRTAyODg5MTNENjg0RDY1REQyNUNBNEEzNDA0QjI5N0RDNjlGNkE2NzQwNjM0RkU1NzlEQkU2QkRFQ0NCODM3MEQ1MUMwNEFCRDY5NTcwNUE3QTFFMUNENDk3NTJBMjBDOTc1NjQ1MjlCMDc4RDUyRjc1OUQzNTVFRDFCQzI0RTA1OTdCQ0Y2QjMxNzNBNUYzNzYyQTkwMjE1OEY5Mzc0MEVDMEFBNDRFQjA4QkJGNEE3NTc3MDAKKzIxQzFFM0FCCiszN0FCMTBEMzk1QUI5MDVBQkJGNjI3MzUzNworOUFDRjMzMDk3RTgyQUREMEE0NDU0REM2OTA1OEQ3RjczQjYwMDg5MEI5N0FFM0UyNTI5NDNDNjZGOTcwMUVDRjZDQzQ3QTM3N0FBQzZBMzEzQ0QyRDkwNDVFM0JEOTg3RTA5NzdGQ0NGNkQ5QTM0Q0Q4ODk2MkU5QzZGNzUwNzFDMkEzRjc1MTRFQzQ4NkM4QzJBOEJDRUMxQzdFNkFCNzJGOUJBN0E1Q0Q2NTQ1NDExODc1NDU0NgorMEM0NUEwNjkKKzRDNkI0MTlDNDlDOTQzMkYyQzFDQzJDNUQ2CitBREIzNTRCMDc4M0QwMkNDNTk5QjlFNkU1MURBQzRBQjgyOEExMDI2RTJDRTAyODlFN0FBMkQwRjQzNDUyMTczODAwNTBERjczNEY1NjFEOUQwNTRFNDRFOTBBN0RGMkU5MDBCNUU3RjQ1MzBBMjg5NDM3MkIxMEU2REVBODA1QUNDM0VEQkRBOURGOEJFOEUwNzhDNEMyNUYxMzhFRjU0NEQxRDU5MEI1QUY2RDMwRjlGRDBFM0U5MTIKKzI2OENERkFFCisyMjRGQkFFRTYyOEFFNDUxNURENkUzRjVBMjU5CitCMENDMTI5QjlGNUFFODkwNEE4NDJENzE3M0EyMkYwRDg2OEQ0NDhDQkEyNzQ0NDZEODg1RUM1QTE1Nzk3RkE2ODA4NDEzMTkyQjc5MDFGRDVBRjY3MEQ5RjVDQ0QxMUZBMDg5RjUwNzRBOTI0QTVDMjA3OURGODNCOEIwQzk2MUY1MUQ0MkE4RkRCMjlEOUJGODcwQUVGNjIwQjAyNkM2QkJCNjM1N0JGMzZFRjYyMjJCRDQwQ0JDQTNCOUNGNDM2NkY5MTAzRjdDQzQ4NEYzMjFDM0RGMEYzOEFGQzcyODQ1M0M3OUUwQzRCNzcyNkVDRkIxNEFCMjA1QjcKK0E4MzEKK0ZENDBEQUMyMjU1NTcxOUVGMkZCMTk2MzU0RURBMEVGMUU1MTBEQkMzMTE4MEVFMUYwQzNDQkRBMjQzMzQ1MENBNkQwNkNCMkVCCis2NDFFNTk1MQorM0VGODk1MDQ5MTkwRjlGRkY4MzlERUVCNzI4QworQzVCMzVGODBCQkFGRjBDNzNFQ0U0REQ3MDJDRTkxODFGNDZFOEI4MEVGQ0IzMTBCMzM5QzMxNzc4MEFEODQxNjQ0NThGQjAyNzZFMUJDRjNDNDNCQzg5MzgxOTE1QzMwOTEyOTA0MDk3RjhBMjFBMEEwRTgzMENGMTMxMDgyQjYxODMwMUJDMzM3ODY5MDRBMjg2Q0MyOTA3QjY5NDJCM0FCRjZBOTE0MDFGRUZDMUQyRjNFMjA3Qjg4REY2RDFCNDkwOTk5Rjc2RjU2Q0I1OQorMjVEMzBENzgKKzc4M0JERDUyRTE2NDhDQjkxQTM4OEYxN0ZCCis5Qzg4OTVCNEY1NjREQjBDNjg4RkI3MzY4RjFFNkQxQzFGQTcyNjgwNjZDMkI3RjMxQUE0MEYwMDRCM0VENzIzMzg1MTZEODlEQ0Q3NUFBQzcyREYyODA1NEFENzVEMUI1NTE1NzZEMUFGOUM1OTQ0RjgyQ0MyMjM5NUZENThBMEExRTJDMjkyOTYwRDVBQkFBMzlEMTFDMjU0MkIKKzdEMjgxREE4CisxRTVCNDFBRUVCOEFFQ0I5OEZGMTg1QUZGMUFCCis0MDUwMDRDQUEzRkZEQUI2QkU1MTY2MDBCQUUyMDlCMUNERDk4MjgzOENFMzIyRDg0N0ZDNTg3Rjg2OTk2MjQ0QjAxODBEMDQ0NkVBQ0ZDNzI2QURBRkQ3NUM0RDU2REI4RjVFNDBFRkY5QkU1QkE0OEYzN0UzNUNBQzIyRjYxMDg3NkU3NTY1NzJDQTgyMzMzRjREMDlCRjRBQTNDRDQ1ODU2MDY5MkE5QkRGNzM3MjJBNzlEQTc0RUY5RDM2NTM1Qjg3M0Q4QTkzMkYwMjQxODJFMTNGNjI2MThBQjJENkREMjlBRjY2RjA4ODk5NDlCMEE1N0Y0ODY4MTgKK0Y0RjAKK0QxQjEKK0M5MUFCNTM1CitBMjNGNTlGOTNBQUZGNTgzRjNCMzIwM0RGRAorNjVENTgwQzhDRDc0MUZBNjczMkNCMEU1NTEwRTQ2NjU0MTgyQzFCRTFEMDZFNkY3RkM5NTI1RjcxQ0NFNkY1NDJFODg4NkY4Qzc2NzQ0RjFDODcwN0VGNkU1QTkzQ0Q0MURCREJDMDcKKzUwNjAxRDlGCiszMzkwMDM3QTVGQ0VBQTkxRkJFNkFEODkxOTM3Cis2RTAzMDA5RjY2Mjg5QUJBQjI0MTk4RDI0RTE2MUM3NDgzMUMxQkNCOUU3MDg1QzM5NEE0NDFEODdDQjI5MkMzMUM1NDJFMDVFMkFBRDM2NDI4RTZEMDhBMDVDODVGQTIwQ0QwODQ1OTYxMEI3QzAzQTlDMENFMjdGOTI5M0M5Q0Y1Q0JEMjQ4QkI2NkFFODZBMkZBMEU5OTdBODgwMzQ3RDkzNzAwODNFMEIyRDUwOUI0Rjk3QkQ0OUZDRjY0MDBGQzQzQ0QxMDU1NkZEOEI2RkZEMjlGQTI4MkNDRUUwNkQ1N0REQTVBRDBERTc0QzBGNjA5NjZENjZCNDkKK0NDNEIKKzNENzIzMUFDODA0NzY4OTJCNzVBNUQwOTA2RDUxMjFBNjhCMjFDRkNGRjk2MDA1RjlDNkJDMDAzCitFRUJBMUNCNgorMEM2RDhFMjgxMjQ3MUVCODM1NjFCREYwRUQ4NAorQzlBNTczNTNDNURGQ0UxQjY5RDgzN0VGOThERkZERjI5RkEyNTY2RUZGM0JBQzQ5MTk4QjNGQzIzNzM1RTU2RDNFRTBCNTZCNTVGNkI2NDc5RTg1QzAzQzMzNjYxMUEyQkI3RkFERDIwRjlEOTVFN0UwNTBBQjE0QkY4MzI3NkNBNzQ4NUI0NEIxQzU2MTEyNzlDNEI1OEE5OUJFMTkyNUIwOUU3NjBEM0YzN0FBNTREQzI4NDQ2QTM5QUFFQzVEN0U2ODExODE3NzhFNzAKK0FDNDI3Mjc5CiszNjE3RDVCNzBFQThGODYzRjFBNzZENzc3NQorMTYyRDA0Mzg1NEI1NDVDMzhBMzk1MDVGNEU0MTU3MENDMjI0QkQ3M0Y4RDc0OUQ4NTZBQzFBN0JGQzg5NTM3NUZGMDlBOTBENTQ0MDVCOTkzOEU0ODQ2NjU4QzE5MjJCNkFFQTEyMTUzOUQ0ODYyMDUxNTgzRTQ0RTUzN0MxOUI3QUQ2NjM3ODAwQkEKKzkwMjM4QUE4Cis4MzUwRERBMEFCNjVGOEFEQzYxOTNFMkYxNDM4CitGRjJDOThDRjEwOTVCNDlGQzg2QjIxMDQ1NjA4NDcyODhBMUUxOUZCNkZBNzI3QUY3NUE2RDNGNTgyODY1OEZCREE5MDNFMzc5QUNCMTlCRUQ2MzNDQTkwODlFOUMyQzcxODVEOUNBMzE0QUE5Q0EzODQyNUM4MTM1Q0U0QjIxRTEwRkY3NTg1MjA5MTJFOUY4MEYxMUM2RUI0MENDNTgwMUI1N0FBN0M2NzUzM0M1OERDOTNGODQ3NDgyMkRGRTI4NTc5MDgxQzg1MzE4RkNDQkZERjNEQjBFN0Y3MkNEN0YwCitGNjc1QThFMQorNTFCQkQxNjZGMDgzMjM3MEYyQzRGRDU3QjAKKzg5MUZCQTJFRDhEMzc1QkMyNTNGNDUyRjYzNDIxQTQ5RjdDMjdGMTgwQjU5RDgyNTYzMDZCRTYxNTVGOUZGNEI2ODVCNzY0NUNGQTVGRTA5MjNGMjMyRjVCQzdDMjA3OEQ5MEZFRDlFOUFDQjZCRUQ0MDMwQzIxOTY3QTQ3NjkxNDkzODJBOTdBNUU3REU5Mjc2OTAzQTU3RUJDQTQ3QjY1ODVERURDRjI2OEUzQ0I5MzgKK0Y3ODAyNEM0Cis5MzI3MjQ5N0E0REIzQTM0OEI0REU3MTcyN0JCCis2OUQxOUJCNDYyMTBFRDY1N0Y5QkIwQjE3MkY4MjMzOTUyQzg5QkNDNzcyQ0UyRUZFODhGOTA0NzBEQjY3QjNCOTBCQjgzOEYzNDZCNEM2QzgxQjRCN0IxRTQ4QkM4RDUyQzY3NDAzMDNBN0Y4NUNDQTZEMzVCQUY2NzE5QTg3MEIzRUQ3NzQ0MjZDQkUyNEM3NUZFNUJCODcwMTM1NzJCRDZCQUY0MjI5MUYzMDFBN0Y0QUUyOTM0RDIzOTYwQTQzQzc4Mjk3OTdGQzVGQUE4Q0VDMkU0RjhBNDUwMjIxMDk2REExQURCMTk0MzYxRDAwRgorRjJGMTUwOTkKKzZFMDU5NEFFREFGNDlEMjA0M0ZDNUVENjBBCitGNkIyNzY3MTlDQTk2NzhBRUZDM0UxRjFDRUNFQjcyNzU3RENDQ0NFNTRGRDU0MjlCMjBFNzBCRjRENDdFM0QzOUU3QjJCNzU2NTRBNkY1REMyRkZBOThFMTE0QTFDMUI0MUY1MEQwREE4QTMwMzY2Q0ZCMDgxNERGRDM2NDFENEM1NkNFRUU1CitGRUVEQjNEOQorODU2NTJBMUI1RTQzQjlBNTI3NEE3OURBODAKKzYyQjAyNzQ0NEUwMjJEMTdFQ0E2MkMzOUQ2NDg2MTY0NTc5MzhEM0Q3N0Q0M0FBMkU1QTcxOTA5NEZBOERBMTJCN0QxMDA2RjIzRjU1Q0YwNjczRjEwNUIyQTBEMEVDMTg3NDlDMzg0RDNDNEE1MDJGN0IzM0YxRTVBRTFBOTUwNkFEMjBFQTFDQUJDOTVGMjk5QzY3MEMxM0I4OEVEN0QxNjI2MkUwODU0QTFENkVBMjE0NkE1CiswNzlFQjE2OQorOTFEMEU3NjdBN0U3MkIxQUJDMjdGMjZBNUEKKzMzODkzOThDNzY1RkFCRTBCNzAzNzJEN0IzRjlEQTU5RjNCODMzNjExOEU0RUM2NEU0N0JDRkQ3OUQyMUU3MDgwMEM1ODEzN0IzNkU2Q0JDMDdFOTRBRDgyNEE1OTMzQjM2MDU1MjI1MUE5QjhDREY3ODE1QUFFRTU2RDY3OTNBNzQ0OTVBNzYwQjIxQzA2MkE2QzQwRDg5QUIwQzA2RTFGQ0ZBMEI2MTY2NkZGNDFBQjlBQUMyRjYKKzlCQkQyRkY0CitDN0VGQTIyOTczNEI3RjEwOUFBQjdDRDc3RUVECitEQ0Y1RDVGQ0M0QzcwQTNCNTE4MEU4NkFBMjQ3RERGRjk2MzYwRDEyMDBBQ0Q1QzlBODNDOTcxOEIyN0I4QUZFMTY0NUU4MDMyNTEwRTk5RUUzRjlGQUFBQjk4MjU5N0UzNDU2MjNDMjFCNDREOEJENjZDQkE4RTBDN0E1OUUzMEIyREQ1NTJEQzgwRDBDRjE0Qjk2OTI1MjQ1ODM4ODhCMzRGRThFNkNCQTQyRDZCOTY0NzU4RDQ1QjIxQjM3OTg0QTIyMkRBNjMwQ0UxMkY0NjJGRDFBRTVGQjM0REE1M0UzQTRDQjVFMTc2OERGOTBEMDZCOTg0RTM4RDMKKzI1QjgKKzc1NzhCMkYxQUYzNTE2QUZDMkMxNDcKK0Y0MjEzQjU1CitDMTIxODM2RjZCRTg2RTA0RUM5REUzQkYwRjlGCiszMUQ3OTA5NTcyRDJERUIzRDBCQkJGN0M3NzIwQTU2OTYzOUVFMzdENTI1RjkzMUI1RkM3NDI3ODVDMUUxRkNGRTNCOTcxQ0VEMkI0MThERjVFM0VFNzhERUY1MUVBNzI1MjM5RERCMUIzRDREOTJDQTQ1ODQwNjYyODNDMjg0MkQ1Mzk3NEE5NjRDNDIzOTI5NDgzRkQ1MzA2MTZENDcxNzM3OEFENDUyQ0I0MjBDQ0QzNzhGQjJFMzI2MUM5MUEwRjNCRjFGQzk3MTlCQjI2NzA2MzM3NDU5MEIyMjE2RkNFQUVBQzY1RDY2QkM5NTgzMTFBMkE5MDNFNzkKKzgzQTYKK0QxCitBQTVCRjU5MworNDk5Qzg3RkI0NjJFRThGRjM1OEQxRTE2ODU0MworNDgwQTM5QTU4NkVBRUQzMQorOThENjhBQkQKKzQwM0JGM0UyMTE2MDlENUY0QkQ0MDJGN0I5OUYzNTRERUQ2RUNBQ0U5M0Q0QjAwNDQ5RkNDM0U3RDQxOEQ4MzlCQTU5CitEMzczQzEyMjFGRkJDMDExOTlDNTY3OURFNUM2N0M0Q0QwREIyRDFDNjQwNTQxNkE5ODlGQThFQTc0Q0Y5QzFBREFFMjBEMUQ3NEMzCitDMTE3QjAwNkU1RDFCQzMyMkE3QkFFMDc5OUVCREYyNkE4RTJDNkE1MjdEMzBENEM4NkVBQTcKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGkKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hpCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoaSBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwNDYgcHV0CitkdXAgMiAvQzAwNDcgcHV0CitkdXAgMyAvQzAwOTkgcHV0CitkdXAgNCAvQzAxMDAgcHV0CitkdXAgNSAvQzAxMDEgcHV0CitkdXAgNiAvQzAxMDIgcHV0CitkdXAgNyAvQzAxMDUgcHV0CitkdXAgOCAvQzAxMTAgcHV0CitkdXAgOSAvQzAxMTEgcHV0CitkdXAgMTAgL0MwMTE0IHB1dAorZHVwIDExIC9DMDExNSBwdXQKK2R1cCAxMiAvQzAxMTYgcHV0CitkdXAgMTMgL0MwMTE4IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0xMzYgLTIyOCA1MTMgNzI0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjVENDVCMTEyOTMxMkQxMDBDMzhFMzhDOUJBNDlBMTY2MkFECitERTUwNjZCNDgzQTM1QUM3NkRBRTI5MTlENQorRkVDQTA3MzhDMTI5M0U5MkJCNzdDRUNDODJFN0YyOUJENEYyRjExMkVCNTg3NDFFNTM4RTVGQTk1QUQ5NjkKK0U3QjFFNTU4CisxNDlDMkU0RUE5QTE1MDc2MEU3RTE1RDVFQgorNDg2Q0Q4M0Q0QzZCMjQ5QTBFNUY5QTdGNDdBQkUyMjg1NEMyNTlCMkE4NzIwRjk1QjkKKzg1OUI4OTVECiswOTY1QzY4MEQ2NUM1QkM3Q0M3NzJDQjU3NAorMjEwNEFBRjc3N0IxQTAxMjZGN0JFNzY4NDdFMTQ5MkE0RUM5QTk3N0Q3OURGMTM2NkY3RDkxMTQ5MTY3OTFFNDZFMjc1QTYyQzkwNDk3NzI0OEM4QUE2RkIwMjU2QzAwOTYwMDMwQ0Y5MjlEODMwOUQ2NTg5RDg1MUQ4ODZCMEE5MEFBN0Q4MTU4NUNEQkQxQ0MxQjcyQjg1OEQyQjdCMjNDNkM2ODZEOTU4Q0E5OUE4ODgzMEY4OUE4RkYzMEE1Cis3OEYyQzA4OQorMzEzNTQwOTkwRkZGMTU1QTUzRkUzNTlBRUUwNgorMjMyREE3RUJCMTUxNjA1NEU1OEE1OUU1MTVGREI4RThGOEY1NEJDMjk4MDA1RUJBODQwRTFFNEM0QTM0REMzRUY3NDlBOUI3ODdFNzQzRUVEMEEyQTYyOEQ0OTc0RkZDQkYwQzdEMkREREQzREE3ODI4MzY4MEVEMTQ0QTk0NDQ2NEVCRTBDOTA5QjZGQ0I2NTUwMEE5MkRDNDZDQ0Y4MjlDQTkxM0I2QUU4NDc5NTE4MzlBNjI5MkI1NDA4QTBDNjE1RUI5MjMyQTIwOUUzMjM1MzBDQzhEQkRGMTQzNUExRTMwRDVGMDNBRDE5Q0REODY5MTAwRDZGNUU5CitGNjE3CitEM0U1RTAwOTE0MzIzNDVFMUFDM0E5QkNDN0I5OERFQTRFOTE0MkIwOUYyRDhCMEZBREY1QzlDQzFCMTY5QjA0NkUwMkY1RTQyRkY2RDRGNDU0REY4N0FENkM0N0YyQzQKK0ZFOTJGNzFCCis2QkE4Q0UyQzdCRDY2MjZFNkI0MjUyNDdDQzA4CisxMjdDNjBCOUM0RjNCNEIzM0Y3ODc3RUNDQ0VFQUI0MjY0RkVDOTY2QkRENTRCNzRBMjhFNjdDQUU5RjRCRTBBMTc3MzdDRDY4MzI5ODgzRDRCNDBERjlDQjVBMzZCNDgzOTkxQTU4ODBBN0VENjEwRDM4NzM2QkM5QjQ4OEQzREYxNUY2QzJFMERDQzMwRDc3MDQ5NzMwMEQ5MkY4RUFCNUVCQUVCOEM5MUE4QjkzNUY5OUJDQjIxMEE1MUUwODBFRkM4MzM1REM4Cis1MDY1Njg3MQorRDJDODJBQ0M3NTBGMzRFQTJFMDFFODE1MjREQQorRDM3NTk5QzMxQ0I0MEJEQjNDODI0NkNBMEU4REY0MTc5NEE1REIwMUNENUNCQTM0NDNEMjg5NjFDRjU5MUMxQjM2MDY5OTY0NTNFOEI4RTE4MkRBMTRBRDIwNTUxODY0NjEzOURGODlDQTRDRjZDQjEyNkQ5NTY4NDhGMDRDNzc3NDc2QTM4OTQyODBBMjE4NEU2QzY4MUNGNUQ5Qjk0QUIwRTU0OURCQkQ1OTJENDA3ODU3RkQ3RDg2Rjg2RDZFRjA2NTM5M0JDNURCMjIzQzA2QkQzMTg3OUNDMUMyODdCNDlGRDhDN0I3NUU1QzlBOTFGM0Y4QkM4RUU0Cis1RDM0CitDQzk1MDg2MQorRjJBQTIzNzkKKzU4Rjk3NUUzMDc4RjQwMzhFRjUxNTM4NURFQzAKK0YzRUM3QUE4QzIzOTJEMUI4RjRBRkYwQzk1QzZFNjhDQTVERTFDNjgzMzA2Qzk3QUY2NzgwQTdCMzlBMkU2RTRGMzcwMDQyMUYyQUNDMjZCODIxNjNFODA5RjE2OUQ2REQyNTVCMkI3RDI5Q0MzMzI2QjlGREJBNTZGNjg4RkY2Mzc0MjBGRkI4Rjg5RkUzNUQ4MjkwNTk0ODgyMThEQTI5OTVGMTQwQzBBMUYyMTgyMzg0QTIyRkMzOTRBODIyNDVBQkVENjFEOTZCODk2NTI4NTkxOUY5RkY4M0EzMjIxOUYzRDRGNzlBQTA1ODBCOUVCCis4RjgxNUQzMworQUE3RkIzQTUzOTJGNkFEMzYwMzFGNkYzN0Q5NworOEQ3Rjg1QzkzOTk3MzlEN0IxNEU3QTQwMTQxOUM3MzExRTdCREJCNzgzNzQyQ0M3NEU4RTQyM0E5NzlGMTVDODA4NEIwMThCMUUxMTEyREJGMjAyOTlGRTg1NTIwNDBDNDBFNEEzMUQwQjE3OUMxNkFENUFCMzY5REU5RkI2QkU1OEM3NzNCRTIyRjk5REI1MzJDNjYxQjc2NTZFNjE1QzIyRUQxMjRDMjlEM0EwRjEyQTI0NjhGMDUwMDUxQzg1NUZENDlFRDQ0MzFFMzgzODFBRDI1NUIzMkY2OTM5MkI2RDMwNzY2NzUxQTBDOTYyMEI4NDJFNUFCQjFGCiswMzM4CiszNDVDNkI2OTlCQkI4NTg2MDc3MzQ0NzFCOTFDMkQxRDcxQzM2OEQ5M0M1ODQ1RkZCQQorQThBQkYyRTEKKzVGNjE2NDZEODMyNDlDRjg3RjQwNkMyMkVDCiswMkNFNjRDRTExNTZFMUEzNURDREU4RTc1NDM2REI5QjY2NjBBOTYzQTc2RUJBREQ4Q0UwQjcyQUQxMzZDODcxNkJBMjcyNkFFNkRDQUIwNkE0RDM4NUVGQzAxMTNBQkUyQkI0RUUwMjg0MDQ0RDI2NDZCQTczMENENzYyRTIwOEM4REVEQkVGMjA0QkIwRDNCMEE4QzQyM0IwODc1MzJBNDhCMEU4RUIxMDM0QjJDRUQ0OTk2RTAzMUNDRUQ1Cis1OUI1MDdBRQorQjc4MDhBRUQ1MTQwRjI5NjlBREMwRDQzMDIKK0Y5NDAwOTc1QURGOEVCRkM5QjBCMjg1NjE2RTk4MDU3RkI2M0I1RDVGRjkyN0VCQjJDNUYyNDcxNTNFREY5OTNFMjAxOTAwODlDQjdBMkJBOEEyMjIyRURGNkZBMTgyMDY1QjU5NDc3RjM0RTlDRDQ3RkYzMjVDNkFERUE0RUY1Q0FBRDEyODdCREYzODY3MEUwNzlCRjM4M0Q2QTgyRjhGNkE0NDEyRERGOUM3RjZCRjQyMTU2Cis5OTE3RDUyRgorQzI5QjJDQTk5NDg2QzYxREE2NzA2QTE0NTk4RgorMzAxQjZBN0VGNjY3NEIzM0VFQ0M0MzMzOUM1NEY1QUFCMzU4MUIzNTdBMUMyNTI3RjcwOTJCMzJCNUYyN0U2QTM4RDQ5MUQwQ0MyOTMyM0Q0MUM2MjU4NTA5RUQyRkU0ODQyMUYwNjkwMDQzQTQwRjFEREVCODBGMzlGN0MzNEY4MTVCQjc4N0ZENDMxRURDMjFDRUY1RTZGRjk0QkRDREU1RjY3NjJFOEQ2NkY4Mjg1Q0FERDFGNUI1QTYwN0ZFNzBFQUI1Mzk2NzJGM0MwQkE3NDU3QzJCOEIxNjM5QUZCQkQ5NUY5NjdBRDcKKzgzNUI0M0IxCisyOTQwNDM0RjAxODNDODU5RTgzODIzMkE3MworMkVCNTcxRTFCNjZEODg3NjAzQTQxMkIyNDg5REI2MzQ5MDY3RDBBRURFMzQ3OTUzQzA2RTQ4MjA3RUIxNTM1RkJDNDdFN0JEMTk4MTQ1QzY4NTU2MUNBOUUzOTM2NDdENDc4MDNDMjZFQzQ0MDNEQ0I4RjAxODFFM0M4MDA5NTQ0N0Q2MjE1QTlFRTM3MjlEQzlDNEQzQUUyNUEwNzdEMjBCMjM3MDNBRkE0ODlDCis1QkU3NTlDNQorOTRENEE1NTE2ODI3QkU5NkFEQzFBRjYwRDEKKzYzODAxRDI5RTFDNEIzQUM0QkRCRUM3QTMzMEUzMEREMkYyMzFGMDE0MDdEODFFQTYzQjI3MkU4MEYwRTE4RkVEQzQwRUMyOEFGNUI4MDNFQzMzMTczQjMxODAwQzFFQUNDQUYwMkZDMDkxMTdBRDk5NUMwMTNDNjNCQTBBQUEwMzA3MzQzQ0U2MTkyRUIwMkM1QzdFNjI0RjA1RjM0RkREMDNCM0I4N0Q5QTI1Njg0RTVFQworNkY4NTI0REEKKzREMDc3MkJENUJEQkFDNjVGOTA3OUFDREIxNzIKK0JBQjRCQzE0QzkyMUU2OUYKKzYyREU1NDMzCitFRTQwMjA1N0U4QzM5NUM1MEMzRDRBMzk5NTAxN0IxOTI5QjRCNDU2QTk4OEE1NzEzQTIzMTBDNjJCNDc4NkY0OEY0NgorQTY4RkM4OTI4RkQwNjhEOUIxQzE4QTg4RkFCRjk2NkZDQzY3MTQxMDkxQjVCMjc0REQ5RjMxMzQ3QTVCOTg4MTgyRUVCQjdERDA2NQorRkZDNjlEQTlEM0I1QUZCQzAxRTBFQkM5NDQ2MTg4NkY3QTE5QTE1MTFFMkMwNkFFRjkxRUQ1CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorZHVwIDIgL0MwMDgzIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzUwIDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzVERDg5QTg3OTBFQUQxOEVGQzc3RDNGRkFFODREQTVECiszMTIwNzRDNEQ1NDJERDVCRUM3MDk2OEY3NURDCisyNTBDMzk1NEU4REZCOEY0ODU3QkZFRjA5MkVCQTQ5RDI0ODk1NUE4NThDNUE1RjU1RjdCOTg3RUEwNkVDODQyOEQ5MzkwODRDODhGNUIxNTdEODBBQjJENzA2QTdFQjkzNkMzNDI5MTczNTg4RDJBQkE2QTI3REM5NEMwQjQ4NEYzMTY2NjM1NTU3OTcwMDRDQkZBNzlFN0I4NTQ1QzgxMEJGOUNBOTJGNjFBQkQ5RTIwMkVEOUU5NTk0M0RGN0E1QUJCRjNDMjBCREUzQjZFRUM5QzBCOTVBNEM5QzFEMzhBQTdDNjc4NkFEQkJCNzlFRTE4M0JEREYxOTQKKzE5NTMKKzY0NDlEQkI3QUU0N0U5RkM2RjNBQkYxRENEN0ExRTI3NEU4N0RBRTkKK0EyMjczN0ZBCis2NDA0QjIxNUEyN0JGQUY2RDBCNTBFOTREMgorMDcxMjNBNUJCMzgwQzg2REI1MDMzRUU3NDMxODFCQkZDQzAzNTY1NzFGNzI5N0EyMDdDMjNGMUU1ODgyNTdGREVGNURGMjI5CitDQUJGM0IzQworOUUwOTg4QzYzQjM1OEFDQTRCNEZFQjAzM0RGQgorRTJFMzg3QTA2QTIzQ0FDQQorOEUxMDRCOTAKK0RGREJENDFGMDYzRThBOERGQTBBQkE0REQ3NDQzMDE1NTI2QUU1MjU1MzE1NTk3Nzc5RTA0RDg1ODQ5MzA1RUE0RjMxCis1Q0RBRDA2RTU4NDFFMUI4MDc0NzYwQzk5NzAyQjhDRjQ0M0Q3NTIxNzREOTk2Qzk0RTY5MDc5N0E5NTg3Q0Y1MDE3REVCMTFFNUZFCiswMjU3NkU5RTA4QjM5Njg4QkJFOTlBMTg2QUE4RkM3RTIyMkY1RTUyQjI5QTdGREYzNzlFRjUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3N5bTpjbGFzMTIgMTIuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyaSAxMi4wMCAvUFNPd3N0ZHV0Y2hpIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTRiIDE0LjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTUyNDMzMmYyNDMxMjUwYTAxMGIwMTBjMjQyZDIyMjcyYzIwMzEyYTAxMjUyZTMxMDExNDI0MjAzMjM0MzEyODJkMjYwMTE1MjQzMzM2MmUzMTJhMDExNj4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyNDMxMjUyZTMxMmMyMDJkMjIyND4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MDkwOD4gOTM0NiAxMzMwMCAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI4MCAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjgwIDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyODAgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjgwIDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxNGIgU0YKKzwxMTE4MTYyNTFjMjEyMD4gMTI3MSAxNDU4IDAgMjA1NSAtMSBzCis8MDAwNzA3MDQwMDEyPiAyMDU1IDE0NTggMiAyNjQ1IDAgcworPDIzMjEyNjE1MWUxODI0MWIyMTIxMjUxYzIwMWE+IDI2MjEgMTQ1OCAwIDQyMTcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxNTI0MzMyZjI0MzEyNT4gMTI3MSAxOTg0IDAgMTk4MCAtMSBzCis8MDAyODMyMDAyMDAwMzEyMDMzMjcyNDMxMDAzMjI4MmMyZjJiMjQwMDMzMmUyZTJiMDQwMDMyMmUwMDI4MzMzMjAwMjQzMTMxMmUzMTAwMjIyZTJkMjMyODMzMjgyZTJkMzIwMDM2MjgyYjJiPiAxOTgwIDE5ODQgMTAgNjMxMCAwIHMKKzwwMDIxMjQwMDMxMjQyYjIwMzMyODM1MjQyYjM4MDAzMjI4MmMyZjJiMjQwMDIwMmQyMzAwMjUyNDM2MDAyODJkMDAyZDM0MmM+IDYzMTAgMTk4NCA3IDk0NjEgMCBzCis8M2E+IDk0NjEgMTk4NCAwIDk1MzEgLTEgcworPDIxMjQzMTA2PiAxMjcxIDIyMjkgMCAxNjIzIC0xIHMKKzwwMDAwMTkyNzI4MzIwMDMyMjQyMjMzMjgyZTJkMDAzNjI4MmIyYjAwMjIyZTM1MjQzMTAwMzIyZTJjMjQwMDJlMjUwMDMzMjcyNDAwMmMyZTMxMjQwMDIyMmUyYzJjMmUyZDAwMjQzMTMxMmUzMTAwMmMyNDMyMzIyMDI2MjQzMjAwMjAyZDIzMDAzMjI4MzMzNDIwMzMyODJlMmQzMjAwMzgyZTM0MDAyYzI4MjYyNzMzPiAxNjIzIDIyMjkgMTYgOTUzMSAwIHMKKzwzMjI0MjQ+IDEyNzEgMjQ3NCAwIDE1NjIgLTEgcworPDAwMjAyZDIzMDAyZTI1MjUyNDMxMzIwMDIwMjMzNTI4MjIyNDAwMjAzMjAwMzMyZTAwMzYyNzIwMzMwMDJjMjgyNjI3MzMwMDIxMjQwMDM2MzEyZTJkMjYwMDIwMmQyMz4gMTU2MiAyNDc0IDEwIDU4MjMgMCBzCis8MDAyNzJlMzYwMDMzMmUwMDIyMmUzMTMxMjQyMjMzMDAyODMzMDYwMDAwMTkyNzI0MDAyNDMxMzEyZTMxMDAyYzI0MzIzMjIwMjYyNDMyMDAyMzI4MzI+IDU4MjMgMjQ3NCA5IDk0NjEgMCBzCis8M2E+IDk0NjEgMjQ3NCAwIDk1MzEgLTEgcworPDJmMmIyMDM4MjQyMz4gMTI3MSAyNzE5IDAgMTg2NiAtMSBzCis8MDAyZTJkMDAyZDJlMmQwNTExMTYwNTFhMWQwMDMyMzgzMjMzMjQyYzMyMDAyYzI4MjYyNzMzMDAyZDJlMzMwMDIxMjQwMDMzMjcyNDAwMzIyMDJjMjQwNj4gMTg2NiAyNzE5IDggNjM5NiAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDE4MjQyNTE0MTUxZTFjMjQxYjEzMTYyMTIwMjUyMzIxMWUwYjAwMTYyMTIwMjUyMzIxMWUwMDI0MjExNjFkMTgyNTAwMTYyMTIwMjAxODE2MjUwMDE5MTQxYzFlMTgxNzBiMDAwZDIxMjAyMDE4MTYyNTFjMjEyMDAwMjMxODE5MjYyNDE4MTc+IDEyNzEgMzEzOSA2IDc0MzEgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFjMjcyNDJkMDAzMzI3MjgzMjAwMmMyNDMyMzIyMDI2MjQwMDI4MzIwMDIzMjgzMjJmMmIyMDM4MjQyMzA0MDAyODMzMDAyMjIwMmQwMDJjMjQyMDJkMDAyZTJkMjQwMDJlMjUwMDMzMjcyNDAwMjUyZTJiMmIyZTM2MjgyZDI2MGE+IDEyNzEgMzUxMyAxMSA3MTcwIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDM4MzEgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTUyNDMzMmYyNDMxMjU+IDE1ODkgMzgzMSAwIDIyOTggLTEgcworPDAwMjcyMDMyMDAyZDJlMzMwMDIxMjQyNDJkMDAyODJkMzIzMzIwMmIyYjI0MjMwMDJlMmQwMDMzMjcyNDAwMzEyNDJjMmUzMzI0MDAzMjM4MzIzMzI0MmMwNDAwMmUzMTAwMzgyZTM0MDAyNTJlMzEyNjJlMzMwMDMzMmUwMDMxMzQyZDAwMzMyNzI0MDAyZDI0MzMzMjI0MzEzNTI0MzE+IDIyOTggMzgzMSAxNSA5MjEzIDAgcworPDJmMzEyZTI2MzEyMDJjPiAxNTg5IDQwNzYgMCAyMzY1IC0xIHMKKzwwMDI0MzcyZjJiMjgyMjI4MzMyYjM4MDYwMDBmMjgzMzI3MjQzMTAwMjgyZDMyMzMyMDJiMmIwMDJkMjQzMzJmMjQzMTI1MDAyNTJlMmIyYjJlMzYyODJkMjYwMDMzMjcyNDAwMjgyZDMyMzMzMTM0MjIzMzI4MmUyZDMyMDAyMDMzMDAzMzI3MjQwMDIxMjQyNjI4MmQyZDI4MmQyNjAwMmUyNT4gMjM2NSA0MDc2IDExIDkyMTMgMCBzCis8MzMyNzI4MzI+IDE1ODkgNDMyMSAwIDE5MTMgLTEgcworPDAwMjMyZTIyMzQyYzI0MmQzMzA0MDAyZTMxMDAzMTM0MmQwMDJkMjQzMzMyMjQzMTM1MjQzMTAwMjQzNzJmMmIyODIyMjgzMzJiMzgwMDJlMmQwMDMzMjcyNDAwMzEyNDJjMmUzMzI0MDAzMjM4MzIzMzI0MmMwNj4gMTkxMyA0MzIxIDkgNzMzMSAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA0NjQwIDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlPiAxNTg5IDQ2NDAgMCAxNzUxIC0xIHMKKzwyZTM0PiAxNzI1IDQ2NDAgMCAxOTU3IC0xIHMKKzwwMDJjMjAyMzI0MDAyMDAwMzMzODJmMmUwMDI4MmQwMDMzMjcyNDAwMjUyODJiMjQzMjAwPiAxOTU3IDQ2NDAgNyA0MTM3IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDIwNTBjMDMwMjBiMDUwYTBkMDcwMzA1MGI+IDQxMzcgNDY0MCAwIDUxNTAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwNDAwMmUzMTAwPiA1MTUwIDQ2NDAgMiA1NDk5IDAgcword3N0OmR1dGNoMTJpIFNGCis8MDIwNTBjMDMwMjA3MDgwNTBjMDQwMTAzMDkwODA2PiA1NDk5IDQ2NDAgMCA2NzI4IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MDYwMDBkMjcyNDIyMmEwMDM4MmUzNDMxMDAyNDJkMzMzMTI4MjQzMjAwMjAyNjIwMjgyZDMyMzM+IDY3MjggNDY0MCA0IDkyMTMgMCBzCis8MzMyNzJlMzIyND4gMTU4OSA0ODg1IDAgMjA3NiAtMSBzCis8MDAyODJkMDAzMzI3MjQwMDI4MmQzMjMzMjAyYjJiMjAzMzI4MmUyZDAwMzIyNDIyMzMyODJlMmQwNjAwMTIyNTAwMjIyNzIwMmQyNjI0MzIwMDIwMzEyNDAwMmQyNDI0MjMyNDIzMDQ+IDIwNzYgNDg4NSA4IDY1NDEgMCBzCis8MDAyYzIwMmEyNDAwMzMyNzI0MmMwMDIwMmQyMzAwMzMyNzI0MmQwMDMxMjQyMjJlMmQyNTI4PiA2NTQxIDQ4ODUgNSA5MTQzIDAgcworPDNhPiA5MTQzIDQ4ODUgMCA5MjEzIC0xIHMKKzwyNjM0MzEyNDAwMjgyZDI0MzMyMzAwMjAzMjAwMjMyNDMyMjIzMTI4MjEyNDIzMDAyODJkMDAzMzI3MjQwMDI4MmQzMjMzMjAyYjJiMjAzMzI4MmUyZDAwMzIyNDIyMzMyODJlMmQwNj4gMTU4OSA1MTMwIDcgNjA0NyAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA1NDQ4IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlPiAxNTg5IDU0NDggMCAxNzUxIC0xIHMKKzwyZTM0PiAxNzI1IDU0NDggMCAxOTU3IC0xIHMKKzwwMDI1MmUzMTI2MmUzMzAwMzMyZTAwMzEyNDIyMmUyZDI1MjgyNjM0MzEyNDAwMjgyZDI0MzMyMzA2MDAxNz4gMTk1NyA1NDQ4IDUgNDc1MSAwIHMKKzwyNDIyMmUyZDI1MjgyNjM0MzEyNDAwMjgyZDI0MzMyMzAwMjUyZTJiMmIyZTM2MjgyZDI2MDAzMzI3MjQwMDI4MmQzMjMzMzEzNDIyMzMyODJlMmQzMjAwMjgyZDAwMzMyNzI0PiA0NzQzIDU0NDggNiA5MjEzIDAgcworPDI4MmQzMjMzMjAyYjJiMjAzMzI4MmUyZD4gMTU4OSA1NjkzIDAgMjU5OCAtMSBzCis8MDAzMjI0MjIzMzI4MmUyZDA2PiAyNTk4IDU2OTMgMSAzMzQyIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDYwMTIgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MWU+IDE1ODkgNjAxMiAwIDE3NTEgLTEgcworPDJlMzQ+IDE3MjUgNjAxMiAwIDE5NTcgLTEgcworPDAwMzIyZjI0MjIyODI1MjgyNDIzMDAyMD4gMTk1NyA2MDEyIDIgMjk2MiAwIHMKKzwwMDJmMmUzMTMzMDAyZDM0MmMyMTI0MzEwMDM2MjgzMzI3MDAzMzI3MjQwMDA1MmYwMDJlMmYzMzI4MmUyZDAwMzMyZTAwMmQyNDMzMmYyNDMxMjUwMDMzMjcyMDMzMDAyODMyMDAyZDJlMzMwMDMzMjcyNDAwMzIyMDJjMjQwMDIwMzIwMDMzMjcyND4gMjk2MiA2MDEyIDE1IDkyMTMgMCBzCis8MmYyZTMxMzM+IDE1ODkgNjI1NiAwIDE5NzEgLTEgcworPDAwMmQzNDJjMjEyNDMxMDAyMTI0MjgyZDI2MDAzNDMyMjQyMzAwMjEzODAwMzMyNzI0MDAyZDI0MzMzMjI0MzEzNTI0MzEwMDJmMzEyZTI2MzEyMDJjMDAyZTJkMDAzMzI3MjQwMDMxMjQyYzJlMzMyNDAwMzIzODMyMzMyNDJjMDY+IDE5NzEgNjI1NiAxMSA4MTE1IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDY1NzUgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTIyZDI0MzMyMz4gMTU4OSA2NTc1IDAgMjA3NiAtMSBzCis8MDAzMjI0MjIzNDMxMjgzMzM4MDAyZTJkMDAzMzI3MjQwMDMxMjQyYzJlMzMyNDAwMzIzODMyMzMyNDJjMDAyODMyMDAyZDJlMzMwMDIyMmUyZDI1MjgyNjM0MzEyNDIzMDAzMzJlPiAyMDc2IDY1NzUgOSA2NDkyIDAgcworPDAwMjAyYjJiMmUzNjAwMjIyZTJkMmQyNDIyMzMyODJlMmQzMjAwMjUzMTJlMmMwMDMzMjcyNDAwMmIyZT4gNjQ5MiA2NTc1IDUgOTE0MyAwIHMKKzwzYT4gOTE0MyA2NTc1IDAgOTIxMyAtMSBzCis8MjIyMDJiPiAxNTg5IDY4MjAgMCAxODQ1IC0xIHMKKzwwMDMyMzgzMjMzMjQyYzA2MDAxMD4gMTg0NSA2ODIwIDIgMjc0MCAwIHMKKzwyZTJiMmIyZTM2MDAzMzI3MjQwMDI4MmQzMjMzMzEzNDIyMzMyODJlMmQzMjAwMjgyZDAwMzMyNzI0MDAyYzIwMmQyZjIwMjYyNDAwMjUyZTMxMDAyODJkMjQzMzIzMDYzMjI0MjIwNj4gMjczMiA2ODIwIDcgNzM0MiAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA3MTM5IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDE1MjQzMzJmMjQzMTI1PiAxNTg5IDcxMzkgMCAyMjk4IC0xIHMKKzwwMDI3MjAzMzI0MzIwMDM4MmUzNDA2MDAxMjMzMDAyNzIwMzIwMDIwMmIzNjIwMzgzMjAwMjcyMDMzMjQyMzAwMzgyZTM0MDYwMDBkMmUyZDMyMzQyYjMzMDAzMzI3MjQwMDI5MmUyMTAwMmIyODMyMzMyODJkMjYzMjAwMjgyZDAwMmMyODMyMjIwNjI5MmUyMTMyMDYyZTI1MjUyNDMxMjQyMz4gMjI5OCA3MTM5IDEzIDkyMTMgMCBzCis8MjAyZDIzPiAxNTg5IDczODMgMCAxOTI2IC0xIHMKKzwwMDMyMzMyMDMxMzMwMDM4MmUzNDMxMDAyYjI4MjUyNDAwMmUzNTI0MzEwMDBhMDM+IDE5MjYgNzM4MyA1IDM4MzIgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwyNjE3MjIxMzI0MTgyMDE3MGIwMDE3MTQyNTE0MDAyNDE4MjAxNzAwMTgyMzIzMjEyMzBiMDAwZjE4MjQyNDE0MWExODAwMjUyMTIxMDAxZTIxMjAxYTAwPiAxMjcxIDc4MDMgNyA1NDAzIDAgcworPDAzMjEyMzAzPiAxMjcxIDgwNDggMCAxODIyIC0xIHMKKzwyNDE4MjAxNzEzMjYxNzIyMTMyMzIzMGIwMDE3MTQyNTE0MDAyNDE4MjAxNzAwMTgyMzIzMjEyMzBiMDAwZjE4MjQyNDE0MWExODAwMjUyMTIxMDAxZTIxMjAxYT4gMTI3MSA4MjkzIDYgNTYzOCAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTkyNzI0MzIyNDAwMmMyNDMyMzIyMDI2MjQzMjAwMjgyZDIzMjgyMjIwMzMyNDAwMzMyNzI0MDAyNTJlMmIyYjJlMzYyODJkMjYwYT4gMTI3MSA4NjY3IDQgNDc3MCAwIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSA4OTg2IDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlPiAxNTg5IDg5ODYgMCAxNzUxIC0xIHMKKzwyZTM0PiAxNzI1IDg5ODYgMCAxOTU3IC0xIHMKKzwwMDI3MjAzNTI0MDAzMTI0MzAzNDI0MzIzMzI0MjMwMDIwMDAzMjI0MmQyMzAwMzIyODM5MjQwMDAyMDUyYzAwMmUyZjMzMjgyZTJkMDMwMDJlMzE+IDE5NTcgODk4NiA4IDU4MjQgMCBzCis8MDAzMTI0MzAzNDI0MzIzMzAwMzIyODM5MjQwMDAyMDUzMTAwMmUyZjMzMjgyZTJkMDMwMDMzMjcyMDMzMDAyODMyMDAyYjIwMzEyNjI0MzE+IDU4MjQgODk4NiA3IDkyMTMgMCBzCis8MzMyNzIwMmQ+IDE1ODkgOTIzMSAwIDE5OTUgLTEgcworPDAwMzMyNzI0MDAyYjJlMjIyMDJiMDAzMjJlMjIyYTI0MzMwMDMyMjQyZDIzPiAxOTk1IDkyMzEgNCAzODYzIDAgcworPDAwMjEzNDI1MjUyNDMxMDAzMjI4MzkyNDAwMDIwNTMyMDAyZTJmMzMyODJlMmQwMzAwMzYyODMzMjcwMDIwMDAxYTBlMTYxZjE4MTkxNzBmMGIxNDAwMmUzMTAwMWEwZTE2MWYxNzE3PiAzODYzIDkyMzEgOSA5MjEzIDAgcworPDMzMjQzMjMzPiAxNTg5IDk0NzUgMCAxOTEzIC0xIHMKKzwwMDAyMDUzMzAwMmUyZjMzMjgyZTJkMDMwNjAwMWU+IDE5MTMgOTQ3NSAzIDMyODMgMCBzCis8MmUzNDAwMzIyNzJlMzQyYjIzMDAyNDI4MzMyNzI0MzEwMDI4MmQyMjMxMjQyMDMyMjQwMDMzMjcyNDAwMzIyODM5MjQwMDJlMjUwMDMzMjcyNDAwMzIyZTIyMmEyNDMzMDAyMTM0MjUyNTI0MzEwNDAwMmUzMT4gMzI1NyA5NDc1IDEwIDgzNzEgMCBzCis8MDAyMzI0MjIzMTI0MjAzMjI0PiA4MzcxIDk0NzUgMSA5MjEzIDAgcworPDMzMjcyND4gMTU4OSA5NzIwIDAgMTg3OSAtMSBzCis8MDAzMjI4MzkyNDAwMmUyNTAwMzMyNzI0MDAzMjI0MmQyMzA3MzEyNDMwMzQyNDMyMzMwNj4gMTg3OSA5NzIwIDQgNDEwNCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDIyMjYyNTEzMTYyMTIwMjUyMzIxMWUwYjAwMTQxNjFkMjAyMTI4MWUxODE3MWExODFmMTgyMDI1MDAxODIzMjMyMTIzMDAyODE0MjAyNTE4MTcwMDBhMDAxYTIxMjUwMDA5PiAxMjcxIDEwMTQwIDYgNTk0MSAwIHMKKzwyMDE4MjUyMjE4MjMxOTBiMDAxNzFlMTMyMTIyMTgyMDBiMDAxNjIxMjYxZTE3MDAyMDIxMjUwMDI0MTgyMDI1MDAxNjIxMjAyNTIzMjExZTAwMWYxODI0MjQxNDFhMTgwMjAwMTgyMzIzMjAyMTAwMGMwMDA2PiAxMjcxIDEwMzg1IDkgNjY2NyAwIHMKKzwyMDE4MjUyMjE4MjMxOTBiMDAyNDE4MjAxNzEzMTcxZTIyMWMxMzE2MjExMzI0MjUyMzE4MTQxZjBiMDAxNzFlMjIxYzEzMjQyNTIzMTgxNDFmMDAxNzE0MjUxNDAwMTcxODI0MTYyMzFjMjIyNTIxMjMwYjAwMGUyMzIzMjEyMzAwMDY+IDEyNzEgMTA2MzAgNiA3NDE5IDAgcword3N0OmR1dGNoMTIgU0YKKzwxOTI3MjgzMjAwMzIzMzMxMjQyMDJjMDAyZTI1MDAyYzI0MzIzMjIwMjYyNDMyMDAyODJkMjMyODIyMjAzMzI0MzIwMDMzMjcyNDAwMjUyZTJiMmIyZTM2MjgyZDI2MGE+IDEyNzEgMTEwMDQgNiA1NjA2IDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDExMzIzIDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFlPiAxNTg5IDExMzIzIDAgMTc1MSAtMSBzCis8MmUzND4gMTcyNSAxMTMyMyAwIDE5NTcgLTEgcworPDAwMjcyMDM1MjQ+IDE5NTcgMTEzMjMgMSAyNDI2IDAgcworPDAwMzIyZjI0MjIyODI1MjgyNDIzMDAyMDAwMGUxMzE2MTIwMDE2MTY+IDI0MjYgMTEzMjMgNCA0MjkxIDAgcworPDBiMDAzMzI3MjAzMzAwMjgzMjAwMmQyZTMzMDAzNTIwMmIyODIzMDYwMDFiPiA0MjY0IDExMzIzIDUgNjEwNiAwIHMKKzwyNDMxMjgyNTM4MDAzMzI3MjQwMDIyMmUzMTMxMjQyMjMzMDAxNjE2PiA2MDgzIDExMzIzIDMgNzgxNiAwIHMKKzwwYjAwMjAyZDIzMDAzMzMxMzgwMDIwMjYyMDI4MmQwNj4gNzc4OSAxMTMyMyAzIDkyMTMgMCBzCis8MWI+IDE1ODkgMTE1NjcgMCAxNzUxIC0xIHMKKzwyMDMxMjgyMDMzMjgyZTJkMzI+IDE3MjQgMTE1NjcgMCAyNTEzIC0xIHMKKzwwMDJlMmQwMDMzMjcyODMyMDAzMjMzMzEyNDIwMmMwMDJlMjUwMDJjMjQzMjMyMjAyNjI0MzIwMDIyMjAyZDAwMjEyNDAwMzIyNDI0MmQwMDI1MmUzMTAwMjQyMDIyMjcwMDJlMjUwMDMzMjcyNDAwMGUxMzE2MTIwMDMzMjQzMjMzMzIwNj4gMjUxMyAxMTU2NyAxNCA4NTIyIDAgcword3N0OmR1dGNoMTJiIFNGCis8MjAxODI1MjIxODIzMTkwYjAwMTcxZTEzMjEyMjE4MjAwYjAwMjEyMjE4MjAwMDIxMTkwMDA1MTcxODI3MDUxOTIxMjEwMDE5MTQxYzFlMTgxNzAyMDAxODIzMjMyMDIxMDAwYzAwMDg+IDEyNzEgMTE5ODcgOCA1ODU4IDAgcworPDIwMTgyNTIyMTgyMzE5MGIwMDI0MTgyMDE3MTMxNzFlMjIxYzEzMTYyMTEzMjQyNTIzMTgxNDFmMGIwMDE3MWUyMjFjMDAyNDI1MjMxODE0MWYwMDE3MTQyNTE0MDAxNzE4MjQxNjIzMWMyMjI1MjEyMzBiMDAxMDIxMDAyNDI2MTYxYjAwMTkxYzFlMTgwMDIxMjMwMDE3MWMyMzE4MTYyNTIxMjMyOT4gMTI3MSAxMjIzMiAxMCA4ODkzIDAgcword3N0OmR1dGNoMTIgU0YKKzwxOTI3MjgzMjAwMzIzMzMxMjQyMDJjMDAyZTI1MDAyYzI0MzIzMjIwMjYyNDMyMDAyODJkMjMyODIyMjAzMzI0MzIwMDMzMjcyNDAwMjUyZTJiMmIyZTM2MjgyZDI2MGE+IDEyNzEgMTI2MDYgNiA1NjA2IDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDMxKSAzMQorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQyIHB1dAorZHVwIDMgL0MwMDQ0IHB1dAorZHVwIDQgL0MwMDQ1IHB1dAorZHVwIDUgL0MwMDQ2IHB1dAorZHVwIDYgL0MwMDQ3IHB1dAorZHVwIDcgL0MwMDQ5IHB1dAorZHVwIDggL0MwMDUxIHB1dAorZHVwIDkgL0MwMDU4IHB1dAorZHVwIDEwIC9DMDA2NCBwdXQKK2R1cCAxMSAvQzAwNjUgcHV0CitkdXAgMTIgL0MwMDY2IHB1dAorZHVwIDEzIC9DMDA2OCBwdXQKK2R1cCAxNCAvQzAwNjkgcHV0CitkdXAgMTUgL0MwMDcwIHB1dAorZHVwIDE2IC9DMDA3MiBwdXQKK2R1cCAxNyAvQzAwNzMgcHV0CitkdXAgMTggL0MwMDc2IHB1dAorZHVwIDE5IC9DMDA3NyBwdXQKK2R1cCAyMCAvQzAwNzggcHV0CitkdXAgMjEgL0MwMDc5IHB1dAorZHVwIDIyIC9DMDA4MCBwdXQKK2R1cCAyMyAvQzAwODIgcHV0CitkdXAgMjQgL0MwMDgzIHB1dAorZHVwIDI1IC9DMDA4NCBwdXQKK2R1cCAyNiAvQzAwODYgcHV0CitkdXAgMjcgL0MwMDg5IHB1dAorZHVwIDI4IC9DMDA5NyBwdXQKK2R1cCAyOSAvQzAwOTggcHV0CitkdXAgMzAgL0MwMDk5IHB1dAorZHVwIDMxIC9DMDEwMCBwdXQKK2R1cCAzMiAvQzAxMDEgcHV0CitkdXAgMzMgL0MwMTAyIHB1dAorZHVwIDM0IC9DMDEwMyBwdXQKK2R1cCAzNSAvQzAxMDQgcHV0CitkdXAgMzYgL0MwMTA1IHB1dAorZHVwIDM3IC9DMDEwNyBwdXQKK2R1cCAzOCAvQzAxMDggcHV0CitkdXAgMzkgL0MwMTA5IHB1dAorZHVwIDQwIC9DMDExMCBwdXQKK2R1cCA0MSAvQzAxMTEgcHV0CitkdXAgNDIgL0MwMTEyIHB1dAorZHVwIDQzIC9DMDExMyBwdXQKK2R1cCA0NCAvQzAxMTQgcHV0CitkdXAgNDUgL0MwMTE1IHB1dAorZHVwIDQ2IC9DMDExNiBwdXQKK2R1cCA0NyAvQzAxMTcgcHV0CitkdXAgNDggL0MwMTE4IHB1dAorZHVwIDQ5IC9DMDExOSBwdXQKK2R1cCA1MCAvQzAxMjAgcHV0CitkdXAgNTEgL0MwMTIxIHB1dAorZHVwIDUyIC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTIzOCA5MjAgNzIyXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjE5NDU3Q0FCMzM1MzdFQzNBRDAyNzE3QTdDMEU5NDFDOTg2Cis0NDVGREI4OTE3OUI3RTJBMTJEMTIyMTUKKzhDNzIzQzY5MkNFNkRBQkY0MAorNjE2ODJDQjEKKzA3MDA1MDQ3OThEQ0QxODJGREVCRjU3MkNBNzMKK0U0RTU1OEUyNUVDNUI1OEM3MTc1NTk1NkVDN0E1MDBGODA5MDkyMDU0QUZERDdENTRGOEVGOENENjMyQzA5ODdBQTRENUZENEU1Qzk5MEE1OTgwNUJFNjM4MEI3NkM0QzI5MEUwOTlDQzMxREVEODE2QTVENjBGQzE4M0NFNUIwMEU1RjFGMEQ2RDUyNTYyQjVCM0JEODcyRTNGODRCNDdBMDIwQTE4MTU0QTRENkI2RUMwOTNERjA4QkJDQjQ5MDQzMDIzRTk0RTMyOUM2OEYwNDMzNkQ4OTZCQ0RFMEM0OTk1MzZENDlCMTEzNDMxRTdDQkIzQjdBNzU4RQorN0I5NAorNUUwNjNEOUM0MUM2RUU0N0REN0NENjgxRDQyRUJDNDkyM0IzRjM4RjE3MjNBMDdDMUFFQTI5NEFBRkU2QjBCNERFRTAxQkQ4NDQ5MkUwRDQ1QTdFRDgxMjM0MDkyNUI2NUIzMThBQ0E2Mjk5ODVEQzI2Q0E3Qjc2MTg1MURBCitCQTE5Q0I3NgorNUM1QzUyNzdBMDc3MDI5MzgwRkY0OTRCQzIKK0YzRUU3QzJENDYzQjMxMzFBOTNDNERCNzM0OTJCNjc4REU5MTAzNUZEQzY5RkMzQTJCRUZEQzYzNzY4QjA3ODg1NTg1M0ZDNDQ1NUEzRDQ1M0I1M0UyQzcyQkJGQkExMjRFNTMwNDY0NEZBQzc4NDRFQworODI2MzdFNTIKKzRDM0VCNUI1MDY2NjI2RjU1MkE0MkU0MjlGCitBODk3NTIzMkQxMkFGMTFDQ0UxMDBFOTdDOEFGQkNGNjFBOTQ5QTIwQTA4MjU4Cis0Q0NDQzZCRgorM0ZGMzgyM0I5REM1QTQ5Qzg4QjlFQUJFRDEKKzRERTIzMjlDMEI0RUMzOUY5OUQ1NTczMkYyMzkyOUIxMDMyNjBDOEZBMjkzQTE1ODRFNkY0RUQ3Qzg3RjY5CitBMTMxRUNERgorN0MxMjU2MjQ2MzUxOUE2M0JGM0MzOEUwNkUKKzM3NjI4MkM5QzBBQUM1OTBFMUY5NEQ4OEJCNEZCOUU0RUNFQjA0QTE5QTA3NTI3RkU2MjFFMzQwCitEREU2OUQ5NworQTk5OEY3QUNGOUQxOEI5NEU0Njc4OUIxMkUKK0RENkU1N0NCMDY1NzI2Q0I2NkYzNDhFQjVBMTQxOEY3N0Y3QjE5RUQ0MTg1MjM0NDQxQkZEMTE1QURFNjdFRUYyNUIxMkI0NUY5MzZFNTM5Q0QzOUI2NTU2NDY2NDhCRUE4RTNFRDA3MTI1MzAzOENBQ0RCNTE2QzhGMzQ3RAorRjc3RjE5RDEKKzc1MUM3NDczMTU2QzRGMkMyN0ExNUY0RTA1MDMKK0QzOTE2NUE1OTMyQ0YxNzJGNDlCRTM0QUNCMTI4MkUwMDIwRDdBQTRFQkM4OTRDNTMzOEQ3MzNBREM1QjM2MDEwOEZGRTgwRkQ3NEY0ODhGOTFGQTg0NThFNjM0QkM3OTdFMDU2QkQyQjI4REY4Njk4NEUxMTUwRjVFNDhGRTNERDVBMTBFNjZBM0FFNkM2NkQ3QjY0OTgxRTFCMzJBMjkzREZCMEUyNTAxODZFQzExRjc0Q0YwOTBGRjU5NUIyMjVBRjIwRUU4MDUzNjY1NDY0MzRGQUZGQjZGMTY4OQorMTY4QjU2NzUKKzlFMDJEOEZERDk5OURFREZEQTJGNjhBNzVGCitGMkFBMTZGMjJERTJGREY5MTIwMkFBRTc4M0ZFMDNGMTk5NDlCMkQ2RDM1RkU3RkE0MzU4M0Y3MjY4MzE4MERBQjk0Qzg3NzAzNzdGMzg3RkQzQ0JFNjNERUJBODcwRTA1MUI1MjA2NzBCQTMKK0VDMTE3NEIzCiszMUM3N0I4NzI2QjJCQUY2MTg0MUZFQjA0NDMxCitEQ0Q4NkYzMjA2M0JERjQwODA3OUNCQzNBNEM3MkY1MkM5MUZBRkM5ODk4MDUxRUJCQTU2NkZDRDNDRkVEQjY1RERERTlGNEEzOEE1RTFGODY2RjRBREM5QkYzNzNFRTUxQUZCQjJGQUZGRTdENzUyMTU3QTU0MzIwN0MxNzhGOTAyMUYwQTc2MTM4RkRDNzcxRDU3MUYxNDZGRDRGRDA1RDc1QkY2QkQ2QkVGM0Y2NTJFMThENDhCODcyREJGOEE0NTcyNjQ0QTQwMkMyQ0RENzQwQTI2OUUzODgyQ0REMkI0RUE0QTQ4REZDNTAyNkE2NzkxMDJDMEVEN0EKKzZDNUMKKzJCNzU1M0FGNTlENjc0M0UzMUMwQjU1MjFFMDU5MTM3ODQ3OUZCOTlGRENDNUM0N0NEQjI1REQ5NDg3QjE1NTcyQ0EyQTlFNTJDODYwQzQ2QTMzNUUwRkM4NkFGQjc5NDY5QjQxNkYyRDNCQ0QyRTQzQTNCM0ZDMjIzRjVGRkQ4RTNEOUNBRkY2NkU0NTZBMjJFNzk4NDY2NEU2RjgyRkI3ODAwODQyOTM4OTg4OUU1OTNBOTEzNjQ4Qjg2RjVCMDYyNUQ3NDdBMkIzMDdFM0UzNEVCOEI3RDdGMkVBRDIzREY4MkQyQTZCNThCMjI1NjUxOTUxODc3OTI0MworQzcKK0ZGNzcwQTA5CitBRkY2NUFERkJBNDY5RDdGRDVCRjE1MDI2OTZBCisyRkM2Qzg4QTFCOEFCREE1QTc3MDFDQ0ZCN0I1MTA3OTY1RjEyRkMxNEUzRTNFMEMzNEQ4NEFEM0Y1MTA3ODQyMzQ3NjUzN0EzRjE0MkIyNkU0RTlFREQ2MjQ1MzlCREMwRkNCQkNBMjMxQUYxOEE3NUU2RTc0MTE3OTBFQTgzRDg4OTc0NTU1NkZCODg2NDdGQzZGNzExQzc0QjVDODRFMEFGM0RGRDM0OEMwQzUyNkEwMUM5MkE2ODRCQzc0N0ZGNDAwQUY4MTY4OEI1M0U2RjRDRjRFNkQxNjMyNzIwNUI3NjY2NAorQzQzRkI3MjQKK0FFRDU2OEEzNTkwRDFGMDcwOUMzRjI2NUMyMTIKK0VGRDE0RUMxMkIwMjg1M0Q5NDlCNEU1MDJFQjIzNzdFOTlGRUIzNjQwRjVFQTdCNEI5MjA2M0M0NTcwNjNFMTA2NDJGMEU2NDYzNzVDNDczMUY0QTEzREUwREMzMjc4RTk0RTVFREQzNDY5QzRDM0I3RTQ5MDkyNjVGQ0U5QTlEQkVDOTkwNEIwMDYxODk0MEY2MEQxNkEyQjYwNDg0MDM3N0M2RjE5QzI0MzhDNERCMzU1MzdFQTJGMjc2NDQxM0Q1OTZFQkY1MDRBREFDQTA5N0QyQURGQUVBRDFCOEVFRDRDOEQ4QTYzMzlCMzcwRkE5MEM4MTBFNkRCNQorODEzQQorMDgKK0QyOUJEM0M0Cis1M0I2QzM4MTZDODM0NzIxNTQ0Rjk0MjRGMworQUY2NEE2RjAwMTYwNjk4Mzg4M0M1OEJGREIwRTdDQUE2OEUzQjc1NzMyNEIxQ0M1M0UwOTQ1OThEQ0UwODU0MEJDNEE4Mzc1QUYyM0EzRjBFRkE5NkNDNDhGQTBGRUFFMDRGNEUwRThDN0IzM0JBOEZFQzI1MzI4MjdFMUJBRDE5MkU4M0I0MERCRDQ3NjMyMUU5ODAxMTI0M0Y1ODZENjg3ODJEMkMyQjU3Qjc4RjI2NzdBQjMwNDEzNEU0Njk3NkRCNTdECitBQzNFNTE5MAorNDYzOEYzNDA4OEMyMDc1MjcwMjkxMTk3NTREQQorRUI0Qzg4QzY1Q0IxODc1OEZGRDE5NUM4NTM2NUE0MTFDQTgxQ0I3RUVDRTlDOURDMzQ5QzlEMzk5Q0YzMTRFOTFBNDk1MUIyQUM5MTJBM0M4QTJENjQ0QTY4RkNDNTFFRTgzRkZGMEZGNDQ5NjhDM0EwQ0IxMTUyOUFEMzhEMTg3MTA2NjY5RDIxRTUyMEI5MUM1QUU1QkFENzZFMzAyMUVDOEU3MjQzREQzNDRDMjVBNjQ4MzYwRUQ5MDEzOTMyQkVCNDI1MDA3Q0U1QTc0RkFCNTMzNkYwRjc4MzI5MERCRjhGNUYyNTFGQTkwQTJGRDE1RkY0QkRCQkM4CisyNjUwREYxQworRjY2RDY2QkIyNDhERDdBNDMyNjg1RDg3Qjg0RQorQ0YyNTUxNzg3QUVCNjA5REVEQTAzM0MxQTU5M0Y0QUQ3N0VFRkZCRkNGMTI1QUU2NDQ2OTg2Q0VBMzJEMTIwQzAxM0VGNjNFRTc0NUZEM0QzNDY1NjYwNTcyRDhEQzI0QjVGQTMxQzg3NDYxNUZGMzhDNjkwM0RGNkZBMjRGRjFDNjcwRUEzRDRGQjQ0NjY4MjEwM0U4MUM3RDI1NDQwRTU5QzFCQkYzOTZBNEY5MkM3MEIwQTY1QjcxRkM2Qjk3ODREMjA3QzA2Q0RFREI4ODBDCis3NjkxMDJDMAorNjgwRkIwQURGOTA3MDI3QjdBQThBMUJDODY5QgorQ0ZEQkRDRkEyNDJEODRCNTAyQzU3OEM1MEIxNTQ2RTAwMDM0NkY4QzFBMTVCMDREOTY4OTNFRTExMzJCN0IxQjEyM0Y0QkE2MUE2NDM4QTZBQTc2RDQyRUVCMERBODYwRUVGMDg5MkI4NDQwMzFCRjQ5OUFBMzlFOUI2NDBGMzI5QkQ1NjlFNDFGNjY1MzZGNDMzODIwMzVGOUY0OUMyOEEzMjIzQ0JDMkM4NDNGMjBDQzk2NDE5NEE1NzA2OEU0QzZBRjY2REZFNjhGMkY4N0M0QjUxOEE1QTEyQkMzMzBEOTQ5ODE3NjZBQzRENzU3MDY2NTE2MjBFRDJBCis5REU1CitBQzVDNzRCMDMyRTdCMEFFRTQ4MzMyCisyNDEzRTEwNworRDdCQjNCMjI5QjBBODhGRkQxOEVBN0FFOUUKK0YzMjE2OEFCRTdEQUU5QUVEODI2NUNDQ0ZBNkVBMjZBNTREQ0FEREVBNDVEREVBQ0MwRkI2MjUyNjhCRUZFNUJFRTg0MEE5MTI0MDNCMjZFMzc0NkQ1NTFGMkEwMUQ4NTkwNjhEOThFRkNCRTI0NDA3MkIxOEUKKzJBQTYyQUM3CisxODgzRkYzREQyMzY1NzQ3N0RCNkNBMkZGOAorRTU0MTI2Mjg0OEFFMzY3NTFEM0ZCRDRCMzhEMkZEQzNCQUFCMDQ1MUIyMENEM0ZEODI2MTYyRTU5QkJDNkU1OTU5MERFRTBCRUM1MkIzMzJCOTg4RjAzQzgzRURCNjBEMTAyMkQ1M0VDQ0E1RjkyQTY4NzQ3MjM0RkQ4OTYwMTc0M0QzMUQyRkE4MzRENQorRDgzNTlEODMKKzA3NzA5N0Q2NTA4QzczNjQzNjlDOEEyRkNDRDkKKzFCRkNFQTVFNjM1NkVGQTRCRjFBN0Y4MzdDMkU3REZEMTVGMTcyNDYzM0QxOTM5NTExQTVERDczOEZEODA1QzREQjVDOTA3OEM3MEJCNjAzRjQzQTMxRkM0RTczNzdBOTIzNTQzQTdDMjI1RTczOEUzN0VGNTY4REQ1NDVDQjE1REFGNDlCRDUzODA1QURGMUQ0M0RGMzUzMTA0RUU5QjA1REIwNUI1RjE1QTk3NkIyNjUzNkYxNDgyRDg2M0I1NkJERTlGQjYwOEFBQjU0RDNDNjE1OTNFQzU1REU0MworNjUzRjUxRUMKK0RFQzM0QjJFNjk2QTc0OTgzMjAxNERDN0RDCitFQjRERERGRjIwOTAxMzU1OEE0Nzc4QkJGMDI4MjBGMUUxNjgyMzJEOTM5MTlGQ0Q4RTdCQkQ5NTYxMDc4RDNDMjFCQzQ5RDU1Q0NGNkU2NjE5N0U4N0Y1MzQ2NTRGNDVFRDRGQzlFNjQwM0RBRkE0QkMxRDUxNDQxQTUzQzM3MTJEOUREMzhEMjYxMUM3MDBCODE5OUFEQjEzRTBGNUZERTBGQzZDMTFCOThFRDBCREY1QzcxRUZECitBNEFDRTQ3NAorMzdDMjZGQTYzQzQ4QkE4MjhCMzZEQkM5MjcKK0IxQURDMzFBOEI2RThGQUUzNTY2NUM5NTk4NDlGRkMwQzExQ0VFODAwRTgxM0IzRDlEQTBDMEJCM0Y5RTA0NTgwMUM2MkI2QzIzOThCOUE3REI3NjMyRTdFMUZCQUE4MDZCN0I3QURDMUZCMTFGQzUxN0RGNENEMkM2MjlGMzQ4RTc0ODg5MkQ0MTI4QUM3NTc1MDc4NEZGQkIxMkU1OTJFOUFBMUUKK0MyRDY3NDdECiswQTFFMDlGNDU2QTNFNjAzNjNERUREQjg2QjhGCis2OTc4RjQ0RTAyNTMxNTJGNDI4NENEN0FDNkEwRjg5QkE0QUJGN0FFMUU2NDJERUQ1RERGRTYyNEE1NzIxQUFBQjBENTY0NDQ3NEI0REY1NjkwNzQ3MTA5RTg2MkIxREJBQTBDOUYyRDI5RDBFQzNCMjFBQjUxQzE3QkQwRjA3NDgyQTE4MUJBMzVENDY5RjM0MjU5MTVFOUNCMEVDRTNFNkY2ODFBMEZCRjc1MEU5NTY1Nzk4NzU3MTk3NDcyMjQ1QkFGNDc4QkFCMEU2MkY0Nzg3MQorNTVDQTY4RkEKK0NDQ0FGN0U2QzQyODBCRTdEOTM3QUY3NkE1MUUKKzQ5RDM5ODdENDEyRDYwNEM3N0ZFQzVFQUU2QUNDQzk3RTAzMEJGNjFEN0E1NkVDNkU3MzI4NjY1MjlBNDIxNjQ2NTMyNDE1RENBRkZCQzVDOUZGQkI4NTNCNjhDQTg5NDA2REE2MTNFQThENDM3MzhGMTAwQzlCNUM2QzRDQjk0REUyMUYzNkJFMzJBOTU4MTg4QjFCNjUxMjE3ODc5OTUzN0M5RTU3NTQxMjlDNzMwOTI0M0FFQTY3OTdFNzhEOEU1ODExNTNBQzE5RTk0RjlFNkY2N0VGNTYwMURENzdEMTgyQkRGODdDMEUzRkY4Q0I2NkFEOTlGOUM1NgorMTg1QkFGOUIKK0JDRTA1NDY1MDhDNDlGOThFMDA4NTA4MUE0N0IKKzIyM0JGMTNDQjZCQkVFNDdEMkI4QTc5Qzk3NUU3MTBFNTVCQUVGNUVGNDAyRUI5NDc2Q0I2MzAzQTJBRTI4M0RBNUU3QkU1M0M1MkM0Nzk5Q0E1RDJCNkZGMDgxMDk4MjYxODhGRENBNTg3NUQ0NTJFQUU0ODgwNUVGNzM1RDNENThFMUIzOTQ4Nzg4RDNBNkM1MTM1MTQ0Mzc2NzY1QjNERDFBQjNFNDFERUM5MDMxNjRFM0ZENEJGNDQ2RDlDMzY1MDMwQzk5MjFBMEU4MEI5QjhBN0IyNUVDMkI5MTdFQUQ4OEVFNTlBODE4QTMzNTIzQ0ZFQjlBNzJGNworM0VGNAorOTgzNDQzCisxQkE5QUYzQQorNTYwRTZENjA5MkZGMTNCQ0Y1MjczMjkzQUIKKzE1M0I2RUI2RDU1RTMyNUU1MzU5MjM5NEQ5RTZDQ0FBMkM5MTk3ODY1QzU4OTUyN0IwQjg1NzA5MDY3MjUwMTM1RUVDMkU2OENEMjIwMTU2QjQxMjkxNjJGOUQ3QjREOUMyODZGNjY2ODJFNTY3MUIyMUQ1Q0E3MERCNDZFNDVDNTE4NUM0MDIyRDlERUY3RjlCNUZGRTczQzA0QjQxMkZBNworM0RGMDgwQjEKKzYyQzc2QzcyRjhFNTZBRjM1QUIwMzMzRDE2CiswMTlBNkE5N0I4RkQ5NjJGRkE3RTM3NTM3MTRDOUQwNEI1MkQzNkIwNEE2MEJGMjRBRjQyOTgwQkM3QTNFMDQzODNGMEUwNEQxMkQ5OEREMEFEM0I0NTRCN0REN0M5QThGRDI5QUEyOEJFRjZBRkFGOUFBOTAxMTAxRDg2QTI0MkYzMUVCRjlCNDlCRUNDRDA4NDk3QzIwRDQxQUEzQTBGMkE4OTg4ODY3OUU3QUE2QjM2CiszNTYzRjIwQworOEJFNzgxNzQzMjc0RjBGNERBMTJDNkY1REVFRQorNDgzQjE0QkFEMUQ1MUU4REVDRTZFMjFEM0ZDNDA1NjVBQkRGMDc5NTg0NjM0NUJFRDIzRDkxODkwMEI4RjU1QTkzRjJBMDI2RDEyREMzNDk0NTgwQzU0MjJENTAxMkFCQzQxQkI0NTBEMUIyMUVCRTY5QzU1RjM2NDU4MkQ5OTg2NDNDRDY4ODEwOTM3RTk2RjBGOTg1RDBBQ0M4QTM3Q0NBN0IyRkM3NEY4M0ZDOEY3QTA1OUY4NzZCQUE0RUEzMDRCNTIyNjJFQzAzMTRBMjNGRDA4NkQ0NzgxODgyOUMyRENBNUYKK0YxMjQ1OTY4Cis3QzYxQUIxNjg3RjBEMjVCMUY2ODMxMTM4NTQ2CitCQjhEQTU4MzBCMjc0MTE3RTFGQ0E4OTY5OThDNjUwRDBBMDhCREZCM0E5MTJBRTc2NDk3RDdCQzUxN0NFRURDM0FFRDM1NkU0QzE3RTVBOEU3ODlDMUE4MTIzMzA4QzFERUJDRjE1MzM2RDg0MkZDRDU0OUZEMTFBNDE2RURBMkE5QTQwMTc2M0YwQzc0OTlEMDBFRUEwMjA0QTExQTJGREUyNTVGNEM2OTQ3QUQ2QzkyOEYxRDkxRjIxRENERThDRDU5OTFBODc3OTY5RDRGRDczRDYwOEM5Qjk1QUUzRjE0OEJEMzgyQ0RBNENGM0U0NkJGMDg4MDRFMzAKKzJCODgKK0I0ODFDRQorOTJDRkZGMUYKKzgyMUY3MTk1MzIzMkFGRTlFMUY1NzNFRUJCCis4M0U2RjlERUI5MUJCNTNDOTcwRDdBQTExQjIxRDc2RjlCMjk5NkMxNTdGODJBQUQzOTlGNEM2NTg2RDY2MkY3NEFBQjI2RjdDRDFDQzBFNzk5RkU4NjJDODY4M0ZEODRENjFEQkQ1NzQ2Q0VFRTAzMjhBRjk2MTc1RjUyODk2OTJEQkNFMTZBNjJFN0ExODExRDY5NkM4ODIyRDk5MTE1NkExNDcwRERFRDNGOEYxNworRTA4NTZGNjgKKzlGRkVDMzcwNTUzRTU3MjYwOEY1QzM4RUUwCitFRjRFNUE4OTg0RTZBMDFDMDIzRkQ1MTZCRDZFQ0QzNkE3NjEzMzM0QzdFQzNCRThGRkYxMTgyQkY1ODJFQTBFRDgwM0Y2MDQwNkY3MTI3NUY2MDEwOUEyREQ0QjlEQ0Y1RjcyRERCQ0JGNjc2M0I4QzM4QUVGNUE0MUUwNkU5MDNEOUY2MkUzQ0NDQzkzMTExQkEzQUVDRTFDMzhEMTAxQTc2MgorN0NFM0VBNkQKKzcxNkYxRkUzMURFOTlDMzVGOURBRjg0RUYxQjAKKzM3RjZFODgzMUQ5OEE5QkFCMjQ1RkU3N0I2REE2MzMwNjQxNDM3NkQwNjA2NDhGRDM0OUJGQjY2ODNFMkJBNkZFNEQ3NEU2NDY0ODBENEQ0NzRGNTI5RTVFOEQ3ODc0NTM3Q0Y3NjQwODZGNTA2QTM2RkU1N0U3QzU3QjQwRDE5RDk4QTE2RTdBQ0U0MDUzNzIwOEQ4QjYxNDcwMzY3MEFCMzA0QjQ4MzMzRUM5MkFEMEMyNUIyMjVCMEJCMDZEMEQ3RDhFQTAwNUE1MzdFQzk2QzcyRUJFQzk1REIKKzM0OTg2QTMxCitBMjhGNDk4MDUyNEIzQUIxOTQyRTM0N0I1QQorNkUyRjUyMTBEMDM2OTJEM0MzMDk0NjA5NDNGMEJGOTY2QjQxNTVENDZDNEM0RUI3QTI2MzI0M0EyRTZCMzIyNkFDRDNBODk2NzM1MzEyQzEzNkZCMEI0RjU1NUU1RTBCNDA4RDBBNUU0NUM1MTE5MTE2NTQ3QTZFQTIzRkQ5RDc4QkYyM0IwMzYzMDQ2MDZGODFGNTA1MDBGNTg5QTcxOTZDMzI5NUQyMjRGMkYyQ0MyNAorRDkzMzkyN0YKKzQ5MEYwNzAyNjA3QUQzNjc5MkE5OTM4RUYyCiszNkY0MTQ3Q0IwMDZGNTgxNTg4NzFGNDRBRUQ0MTI5REM0MUU0QkREMzIxOEI4ODFBMUVGMEJCMkFEMkI4MEMwRjM4OEMyRjZBNkQyNDE5OEJBNUIzMURBNzA4MkIyNkNENERBMkVBNjQ2RjFENDIzNTUzN0M2MzdGQ0VGN0NFRjgxQkM4Njc5QUZGNkVDNUQ0RkM3NzQ0QzY5RUU1MDNFRTUwMTYxRjZDOTczRjRGNDUwMTYwODVDCis4NDQ5NTFDMAorQzY1RjIzMTM3QTQ5NTRDQjM0NTI3RTA4MTc5NworNDhDNDdEMzJBNzVBRkE1RDgyMzUxQUExRUI1RjgyQ0ZCRTVDQUZDNERDQjVDNTNDMUM4ODQ3RkVDNzZCMThENTc4NjMyMTkyQjM2NkYzNTA2OTQ5Njg5MDhBNkZCMzYyODcwRjMxRTYxRUJBMDNCQzcxMDUxMzU3OEVGQzlCRThCRDY4MEM5RTdCM0I4QjkwOERDQkE1NjhERTcxMEQ1QzE3OThFOTNDQkJEM0M2RDE2QTg0MkFGRDlCNkYxRDgzREE1QUI3NzA2QzE2MjZCOUJFRUNBQTdDM0IxRUI0RUQwOEEyRTUyMTg0Q0M5MDlBOTQwRTZCMEFGNjVECitERUNGCitENEYyMjQ1MzlDNEI4NEZENTQ0NzkyODA5MjBBNDg3MDdGMTY4MDQxMUMzODYwQzg5NDMyNEMzNkY5MEU0MEM1RUFDQzUwNDAwRTM5RDMxQjZFQ0I1MjNGNkFFRTJDCitEQTFBMEZENAorN0MwODA5NUJBNTc5N0QwNjhFMkE4MzEyOUM5MQorMkFDREI0N0E0N0YyOERBOTU2M0VFNTQwNjQ2ODEyNzk0RDA3NTZFOEMwODJDRTlFQjMyQzE1MDM0MTg1NURFRkZENUY4RDU2NTYwMjA2QTI3MTE1NUJGRjUwNzcyODJBQzU2RUNBNjY5QkQ0OTFDNTNEOEM4NTlFNEVDMkJGQjlDMzAxRTkzQkI5QTY4MEM5RjcyMDYzQjg1Q0JCNUQ4QkQ4NTExNDE1N0ZDNDI5RTlFOEYzODZFM0JFOTMzMjg3MjQxQTkxNzE1MEM2MzMyMTQ1RTMxREQyMzgKKzQzM0FCRTgyCis1QThCODRBOUU0ODdFNzNEMDQ1NzJEODYxQworN0EyRDY0MDQ0NDM0Njk4MzczODYxMzcxNzAxRDIzMDBDQzgzNDJFQjcyRTVGRTU4RTJERDNEODIyRUE4MzI4NDg2RkJBQjZENzRBNzUxMUFEODk3QTE4M0ZGQ0RGQkY1QkZEOTcwQjgwNzEzMUUwMzQ3NDUzNzNEOTUyRjIxRDBFMEEwRTc0M0Q4RTA1MzcxRDFGMTYxRjc2RjEzQTA1NQorQTFFNTUyQjUKKzMyRjdGQjk3NEJCNDNFQzNGRUFCNUMyNDY4QjMKKzUxNUI0RTVDRjhGQjJBNUUxRURENTFBMzJERUQ4Qzk3MzhBQkYwMjc3NEFGMDY5RkJBRkZFNDZFNEIzQTY3NDhBRDYwNDgyRkRENkQ3RkYyNjlGNEExNEMwNzJERUY4NDY1MEQ4OTZCODMzREM4MEM4REZGNTRFQ0I5MTVEOTlDMzgxMEE1QTUwRjlBRDFENTJEQ0I0OTBBREI4MDZEMThFRUIwMUJFRUM2RjhBQzgzRTdCRjVCOUVCOEFEOUJCOUYyRjU4RUU0OEZERkNDNkE0MTY3RkJDNkNCNjI2QkUzRjRDOTZBMkRBQUIxNDI5NDAzNkM2QUQ4RDUzRAorNTJGQQorREFDQjFEMTRGRTk5QzdCNzE5NjhBQzgxMkM0RjhDQUFFNDA1QjZENkZDRUNCNzk2RkZCNDI0NzcwQzQ3QjNEQzA3NTUyNgorMUY0OUIxN0EKKzY5MTk4Mjc5NzY0OTA1NkNBODM1MzU0QzdGCis0MkFEMTg3OTU3NDVCMUE1RTcxMjM2MkFFRTlGRjg4QTg4MzlCMURFRDc5NjY0NDZGNTdCNkIwRkIxQjZCMEYzREUxNjQ2RjJBRTczRDg5QzNCQTA1NUVERDg1RTQ0NkI0ODVCQ0QyNjg1RUEKK0U4MERGQ0IwCitGQkIwQzY5MUFDNTBBQTJDRkE0RTNENzlDMzgzCitBQkIwMDE5OTlFMDRDM0U5NzhBM0Q3MkEzODBBQjJGNkYxOTYzODM5NjkxNjlDNjVGMUZFMDZDOThGNDMzM0E2NTQ4MjQzNkNDN0UzOEM2MkMwQjk0OTNGMTc0QzUzNzM5NTg2QTlEMkQ2MTlFRDdBNTY5QkFBNzgyMDM0ODVGMkY2RDAwOEQyRjE3Q0EyQjdCMTQ5RDJBMjZFQ0FDQjA1QkZENjA2RUNBQTdBQTgzMUNEQzE0RTJERTQ4MDE1NzIxMTU1MEFENUUwRTlENzFGQUMzQzBBN0Y4MUVFQUFDNTBBOUIzRjIxRUEyNzNGMEZCQTQ3OTY4MjQ3OTMKKzc4NTIKKzg1RjUyQTkxODc2RTVBMzUyNzFDNzA4MUM3NDBGNTVGNUMyOUIyRjNBQkExRTAwNDc3OUMyN0ZDMDgwNUE3CitDRjk4M0UxMAorODQ0RDgzQTlFNDMwNjYxMkU4Q0NBODM5MDRGMAorMEM2RjgxMjk0ODJFMjUzQjFDNDc3QkUyQTA3QzQ4NjM0OEJERUU4MEM3MUJBRjI1QjFENkEwMjNFNjk5MjMzRDc0OThGMTVBREY1Rjk0OUY2REQ0Qzc1MUYwQzNBMzY2OEQ3Nzc1RDNCNzMzNDJBOTgxRTE5NzA5M0M0NzNGRjBCMzJFNzA5M0Q3RUIwRDIxNUYyNjkzNDBFREZCNDJDMEVFMjJENDk5RjU3RjYzRDhEQUEzNEM4NUE4Q0YxNEM3NUMwMTZEOTAzNDEzRTE4NjVCQzc0OTc3CiswM0Y0M0RBMAorNTYzQjY1MEFGQ0Q1NDMzQjFFOTM2NEYwMEUKKzQ2MDJBODcwMkI0MzBBNEU0QjJDQUI3OTk2QjU2NTNDOUNEMzc0MTYwNTNDMTEwNjU4RkU2RkRCNzFGRUIzNTc5QkFGMjg5RTY5MkExMjgzNUZEMDBEMzM1QTYwMTkzNzEyRDM2MzgyMjA4RTQ4OTNGQUVBOERDMjk1RDcxQzRCNTBBOTRBNDM2MUZECisxQTc3ODdFNQorRjgzRDRGRUEwOUFDMTMxNTA2MzlENzUyMjE2MworQjI4NzFEREJFODAxMUEyMDBFRENFQzdGNkZEMzEwRjE5MTYzRjdGRkY1MDZBM0M5RTNDRTgzMkM0REE2MEM2NEQyRTI0NTdCNUQwREY0MTdFMEY4MTZCQjIxM0QxRjM3NTNDRkEyMUQxNEJFNTRCQjMyMUI1NjcxOEY2MTYxNDU1RUE3Q0MyNTg1QkIwOERGOTc2MEUwMjlGQUJDNkZEMjFBMkY4NzFEREFEMDBDRTRGRjlCRjhGMjRGODg3ODhDMjFBRDkwQzUyRDlFQTBDM0QxMENERERFOTU4RUU3QjkwNzhBNUE5ODMzQzJDOQorODc4NDQzRkEKKzUyNkI0ODM5NTY3NEY4QkY2OTc4M0YxRjE0MjcKK0Y1ODI2RjVEQjkwODBGQzYyMkMwMjhCMEQzRDJBQzQ2QUI2MjgyQjM3N0I3RjI2NEM4NkI0M0MyQjRENzU1OTVBMjdDMzBBMEJDOUJGRUM1MjFGRTVFNUI2QTY2OTZCODY5MTE1MEJFMTRCQUNDRTM0RUZENjNGREJBMUYyQjUzRkYyRkVCNkJBNjFCQTE3MTJDQjQyOTFCODcxNDMzQzJDMjA0MUNGN0Y5RDFGMDBDMTg0MUJEQkY2QUQyMTIzMTQxRjlBMENDRDVFRjdDMUZFMDE0Cis2NzMzRTQ1NQorOEI1QkRFNkRFRTBCODJCRTREM0Q3ODVBMzEKK0MxQ0Y1QjI0N0JEQUVCNjE1ODYwMTI2QUMxMzMyNDQwRURFMjJFNkZCODlDM0U2MzFCREFFQjBGQ0RFREQ5QzEzMUFFRDZFNzg0RkY2NzNDNzVFNzRGRUJDNzNCNjAwOTY5N0I5RkI5OTZBRTFBREIwMDhDMzRBNzhGN0NCMjhENkY5MzVERTRBRjk5MDYyMUUwMzNFNDhFNEZCMzA5NTY1QUZDMjE2Q0Y2RTU5MworMEFDMTRGMUYKKzU5ODlDRkIzRTg1MUQ4MEQyMTA4MzJGNkQyODEKK0YwRjlDNDVGM0Q3REJCMkQ3M0QxRjRBOTNDNTRFMjQ0RUUzNjdFNkQ0QzA3RTU2RjVCNTg2OTI2MjY1MTFGMkI4NjEyMjVERDg4RDJFQzY5RjQ4M0E3QTAxNDA3NEZFQTQ1N0Y4NEY1OUE3RDlFQTI4RjE2OTkzOTkxQkFFM0EzQUE5MTdGMkZGNjZBMTAxQTQ4OUNBOENFRjRCOUI5RDEyMTJCNjJEREE0NDhEQUJEODVFNzFBQ0JCNUVBQkJCOEMyMTA2RjY5RjhGMzVGMTBFN0I4MTE5MDJBRjUyRkE0QTdGRDFCOENFQzY1Q0Q0NkI0RTE5NUE3CitCQTdCQUUyMQorQUVENDE0Qjg4MDU5NjBDQUY5MThFMjI1QzUKK0VDQkJCRkNCRDYwOEY2QjZEQTM0QTYxMDRGMjBFNDY0QTE0MkZEOEZDMDIxRDNBODgwQTk3N0JDOEQyRkEwNjgwRjhGRTlBMTAwMUREODNCRUMxNUZDODA0RDQzRjg5MkI2MTJBQjlENDMyNzgyQUI0QTdEQTgzM0QwODQxRDE3RkM0OTZEMzc2NgorMDc1NDRDNEQKKzZERUQzNEFDRTYwMzY4OEYwMDg5NjFGMDVECis1QjgzQ0UwRTIwQkJEMTI0QjA3NEVFNzQxNTQwNTM2QzI2ODFENkEwMjIzMjYzRUMxMjc4Rjc4MzE5RDVFMERERDVEOEI2MDlENEI4RUVCRjAzNUY3OTA2QUIzQzhENjk0NEE1OTRGNzA0NzExQTBERUQ5QjhCNzdEMTE0NzZBRkU4Q0NFMjVFQjc1Q0NCOTM0ODhDNjcyMDkwRDg4OEExRjk1NUI2MEE4NkU2MTA3QUJBMzQzRURDOTA2MjNDNzUwMzM2CitBNzVCNDQyQQorQ0Q4REI4REQ0MDU3Qzk1QTk0OEEyRkNDRDkKKzFCRkNFQTVFQkE2RkJGQkNGNDEzODJEMTIwQTNGMzEzODkzM0M4QkU1MEVCQTJBMTNBNjhENjExQTgyNTNCMEEyQUNBNTk3NDUyQjREMkEwMjAyRkExMDg2NjRDMUQyMkUxOEVGQzNEMUQ5RUY2NTk0MEQ0NUZCNjBDRUMxRUUzODRCNkMzQzBFOUQ4NUFCMEIwQjM2QkEzODMwMUM4MUJGRDNGNjc0RDkzMDI2NkI1QjQKK0M1ODQzMTJFCitFNEE1QThGOEFCNURDQUUzRjc1RkE4QjFFMUMyCitENkFCOTIyNzA2N0M4RkNEMUZDODRCNTUxNEFBREIxRDg0OEU4OTUxMzk2MTIyOEM4MTEwNEQ5N0FEQzEzODJGQTlBNUEyQzZCNzk3NjMyRkU5ODZGMjY1M0FEQTZGMDdFMDQ0NjFGMEFDOUUwMkFFNjMxOUVCMzE2Rjg0NjQ0MDkyOTY2Qjg2MEEwNkMwOUE1OThEMDEwQUQzQTNBQkQ2QzRGMzJCNEZERUQ3RDU5QUYxOTZCODBBNDI0NzAwQ0UyRDQ3NkU1QTZFNDY4NUNENzdFRjUzRjg1QTM5QjI1NTk5NDkwNzc2REUyMjE3MzFCNkI2N0MyNzE5QzQKKzA5NTQKKzBFMkZGRUZBOUFGODdBRDNEQUZBNTI3MjBBRUEKKzA2NjU1N0IzCis0OTJCNkE4NkFDM0RGNTAxNEQ4RDkxNjE1MTBCCiszNkIyMzBFRjRFNzZENTUwQjZCOTI5NEM0RkJGNDdFMEZFMTUyOEJGMzY1MTA4RkRCNTgwODE5NkY5NjkxQjU0NTVFN0ZDMjkwQzg1Rjg4MUM4NDJDREVERDA2RUUwN0NGQkVENTdCQjUzNURBMjlBMDNFMDVDRDkyOUIzM0NENjY2M0E2OEJFNTA1OEFFRkQwOUQ1MjI2OTAzQTUyMkQ4NTUyM0FDRjlFODgwMkFEMDQ0NEY0RTFEQkE2NUZCMDIyOUQ5OUI3OTA4Q0YyMkFEMThDMjVDNDVDN0NFNzREMkNFRjJDMUVBQURCOEQ1MDUzNjBGOTRCQzcyRTcKKzJFOEMKK0QzMjkzNkMxQUQwMURBODk5RDI5OUM5RDMzN0MwNzYzRUNBNzAyMjdBRDQ4NkY2NEIyCiszQjhFRTNCOAorQzY1MDk5NTZFNDBDRkNBRjE5Q0VGM0YwMkUzQgorODc1MUUwNzgyRjc3Q0YyOUU4MkE5NTAxNjE0NUFCNDkxMkExRDU2RkJGQzVFMzkyNTE5RTQ1NEQyREEwNDk4RDZCRjFFQjY1OTM0RDU0QTI5MEUyNEVGNjlERDFBQ0M0RTQwQkUyMDY0NDlDMzg4MEQxRjZFODk0MUQxQjc4QTJGM0U3Njg5MjBDM0FFRUNFM0Q3MDNFNEI1ODkzNjZEREZERkE2Mzc4NjgyQzExMUI1NTYwMjVBQTM5RDEyQTJFREFCNTRFRjFBNkE2OTE4OTJENTgyRDU1NTVEQTlGREVCNDE0M0U1MjlCQUU4OEJBMDA5QjU2NkNGQjEwCitBMTBBCisyOTU3NjVDMAorQkMyMkYxMDBERDlDMUQxQzE1OUQ2NDI0QkYKKzI2MTVDOUZDRTJCRTFBMTYxRjM1QTQ1MTYyMDEwNjQ1QzNGMzY5ODMzQjVFCiswRTlDQTkzRAorNjNDRkVFMTA3OUU0QjUyNDc3QTExQzU1QjUwNworQTZCMTMwRUVEMjcyQzdFMAorMkQ0MzNDNUYKKzAwNzBFOENCMzREQzFFQjg5MDdEQTc1ODEzNDkxOEFBQ0U3QzY4N0QzNjNFQjdFNTAzQTgyNDI5OUEwNDE5Q0RGM0QxCisxNDhBQzlFQThGQUQxNzc5MDQ5QkRFQUNEN0QwQkQ3QTEwOEEwNjY3RkJBQTZCRTg5QkJGQTJGQkFEQjNFMDJCQjEzMjA3MjcxQThECitCRTc4OEY3RTk0MkFBQkUxMzBGMDBEMUY4NTFBRDRCRDU4NDRENzBGRjUwREI5ODgxRUMzOEIKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDYgcHV0CitkdXAgMyAvQzAwNTggcHV0CitkdXAgNCAvQzAwNjQgcHV0CitkdXAgNSAvQzAwOTUgcHV0CitkdXAgNiAvQzAwOTcgcHV0CitkdXAgNyAvQzAwOTkgcHV0CitkdXAgOCAvQzAxMDAgcHV0CitkdXAgOSAvQzAxMDEgcHV0CitkdXAgMTAgL0MwMTAyIHB1dAorZHVwIDExIC9DMDEwNCBwdXQKK2R1cCAxMiAvQzAxMDUgcHV0CitkdXAgMTMgL0MwMTA2IHB1dAorZHVwIDE0IC9DMDEwOSBwdXQKK2R1cCAxNSAvQzAxMTAgcHV0CitkdXAgMTYgL0MwMTExIHB1dAorZHVwIDE3IC9DMDExMiBwdXQKK2R1cCAxOCAvQzAxMTQgcHV0CitkdXAgMTkgL0MwMTE1IHB1dAorZHVwIDIwIC9DMDExNiBwdXQKK2R1cCAyMSAvQzAxMTcgcHV0CitkdXAgMjIgL0MwMTE4IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy04MyAtMjM2IDkyMiA3MTJdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNjlDQ0VDMUE5OTEyNjkxMDEyQTRCQjU0MDBGMjRCQjJBMTkKK0VDQjhGNjA3NkZBNDRGMTA5QkUzMTAwMgorMTExNDg3OTY1RUI4NDZBOUZCCisxNkQyN0E2MQorOUE3MzlFNzNDNDU3RDAyMDkyNzg3NjY1NTYKK0FDQTg4RURBMUYyNjhGRjNDMkI4QzkwQTIzRDBBNjM4M0Q1QTVBMDYxRkQzNTExRTFEMEU3MkJENUZBRUMxCisxOTc2QjE4QQorMUFFRjZDOTZENTQ1NzI0Qjc0NThBQTM5OEUKKzM3QkY5ODRGMjAwQ0U1MUM0RTE3RDEzODYzMzRDOTM3RTg5NEI1MjRCN0IyRUI1RjAzRTg5Q0VGQTgxMTc2QTJGMDc3ODM3QjU0MEI2OUU0NUQ0MjQzQ0Y2Q0ZGMjM1OENCRTE5Mjc1MUQ1NgorMjAwMTQ3NzUKKzdBNjZFN0I5ODM2ODM5ODRDRUU5RDk4MDBGOTgKKzAzOEI4MTVDOUEwOTcyODQ0QkEyQkYxNERDMDFBRjQyRTU2NjY4RjM1MEFCNDcwQ0VFMzU4OTkyMEIwODZDRTJDMjFGODdBM0E1NjUzQUFBMDQ2OTk4NzM1RDYwREQ5NTg5MDA4MDJFMkIxRjE1RTVEMjlFMzFFOEVDMEY5MjJENEI4MjAxNjBGOTAxMjgwNzBEOEZEMURDREY4RkMzQzNGOTU2RjYwMDgyM0I5M0NCQjc3MDJBMzg3Nzc2NzhFMUVCQjE4M0NEQzU1Q0U4REY2NzQ1NDE4NEUzMUEzODRGMENGQzBCQkNCQjEyQjE2NTA5NzQwOURBRkZFRQorNDk1RQorMjM3ODAzMzBBMUM4OEVFNDlCRDU2QUNCNTlEMzcxOTA5MjEwNzE1QTFEMzQxODg4MEZGQURBMEFDQjZCMTQ5RTlGMjhENzIxOENGMENEMjlGM0Q2RjNFNUNERDJFOTZCOTE5RkI2MEUyMDdBQjEzNjRCODg2NTQ4QjQ2NUVEQkFFRDk4QUJBMkIyNEM0NTQ1Rjc4MTJDODZBQjBFMkE1Q0YwMTk5NzcxMjdBNzg0MDZBMTQ4MzA1RkU3RjEwOTE3ODhBMTc4OTQzRURFMkZENjYwNDY4NjYyMEMzRkNBNEQ1RTEwNUUKK0I0NjQzMkJBCitBMjA0REQ5MTA1MUM4NkQ4QjVDRDhBMjMzNQorQjYyQ0ExRDhCODZCNDNBMjNCRjczQzlBODI3NzA1OENFMTMxQzlENDZGMkMKKzBDRUQ0QTkwCis5NTE0MERFMUE2RUZFMUY1RjAyQzA4NjFDQkU4CitBOTgyN0IzRjNDQkY0NUE4OEVBNjA5OUJEMjZEMzBFRjQyODM2QzYwMDAyNjNCRkRBQkRDN0IyNUYyM0FEMEIxQUIwMUQwMkMxRTgxOTBCREMyQURGNEUzNjY4QUVEM0FCMDRDM0JDQkI2NTdBMzY3QzNENTJENkUwOTAxQTI2MjhEQkI1MTI2QkI4Q0JGMjc1NUFCQUJDMTJFODQ5RTJGREFBNjVEOTc1RTJGOTVCQUZBMkU5MjZDQ0Q0MENBMDZGNkE5MDI1MzRCNzQ5MDQzRDNFRjg5MTZCNDdCREJGMjRERTEyMzkwMzA0RkI3Rjc0QjA3OTk0MkE1RkIKKzA5NDcKK0NGMDA1MTQxCisyQ0NDMUJEMAorREU5NTNFQ0Q4RkVCNTVFMDc1MDQ4OTA0QkIKK0Q0N0QyNzZERTRERUMwRTBGRUI0OTVCMjQ5MDc2MDU3NzlDMERCQTQ2MTU4MUI3MkU1Q0U3RTkyQjRCODI0OTIxMkVDM0E2MzZDOTkxOUYxNjdFQTcwOUNBNEE5RjdCMTEzMUJBOEI1NTJDRDAzMTAzNTdDNzVCNzA4MEY2RjQzQzA5RUNBRkMxMkEwMjc2NEE2QjhCRDU3Qjk5Q0MyMUVDQzc0Cis3RjBBMzlDQworMUU4RjM2RThCOTU2RjMxMEU3RTJCRkZDQ0FGNgorMzRBRTdBMUQ4MjA3RkE5RkZBQjRBMjQ5NjRDQUM5NjQ0OEI0RUEyMDFBNDc5NUZENjlBNjQ2RDJCNEM5NTk5QkZBNjlCRkYwOEQ5RUM2RjhCNkQ2OTk5QUNFQjlGMkI1Q0U3OTNCMUJBMkE3MUZGQjQ2NjEzNEEzNTJCNDY4NzhGMTE0RDg5RjQ0QUYyMEVCM0NBRjAwQkZEQ0JDMDkzMEY0MTFDREVFQ0ZGQ0YzMzBBN0UxREQ0RjgyRTc1QzA0MzQzRkE3RDBCQUU5QjBERjZEQ0FCQzBBCis0MjQ0OTJBMQorMjlFQkJFNEIxRDU1RDcxOTREM0FENEY0REEKK0M3MTlCREI1RUVEQTc2RDhFOUYwMzlCNjQ0QjdENDE5RDkyNjY4REUzNzJGMjcwNzlFNEU3NUZFMTA2NjY3RTk4OUMzMjFGRjkzMTE3MTc1RUM5NDg2NDAzRkY4OUQyM0MxOTU2QzFFQzFCMjc4MjEyOUVEQUM4OEZDM0NBMTIwRUI0MzFGQzAzOEZDRjVFNjUxRkREQzRBMkRGODU4RkE4ODJCRjA5RjlFOTU3MjAwNDJFQUE3NDQKKzlFNDIwMjIxCitEQUE2NEM2ODE2NjBBNTA1MTBBRjhCNTU0RQorMjcwQTM1MTc5OTQ3QjI5RkRCNEFBMTk5RjIyNTMxRDlBMTI4RDMwQTdEQjQxNjgyMzNDOEU5MzMxNEEyOURBRThGQUNGMTQzNTZFREY3QkZDNkI5RTZFRDkwOTI0NEFCMTBDNEU4OTU4MUQ5OUE5NkMyRUEzNUYyMzM3QjM2RTUyQkI3MzkzQ0YyQzQ3QkJENkQzODc5NEU2NDJBOEQ5OTc0QjRDRTA1MDQ5MUZGODc2QjIxMUYwN0FCCitDQzI1MDREQQorNzFCRkQ2MURBNzIzRUVCMEYyMzczNDRFODRCNgorMDM3MzhCMjdEQkMwQkNGRThFQjYxQjBEQjkzMTdGRkY2MkJFNzVDRDM3RjI3Qjk1RkUxQzUyNDM0NzUwMENEODI5Q0JDMzg4NjQ0RjMwN0VDODI1RUNCMTFEMTk3REQ5NkNFRTI1NTZBQTE3NDJGM0QzRkI2Q0JFNEUzOTczMzIwRjYwMEY1MzRERUQ2N0M4ODRDNzAwMzI1NjA1RTlDRjkyRUUzODQ0MDE1RkE2N0I5QUE0NjMxMzY2OTUwNUFCNjIxNUE1REY4MDdFMDNFMQorNkU2Qjc1MUMKKzI1RkM4M0IzRjFEMkEyRkE5N0VBQTZDM0MzCiszQURFQkI1NDkzQkU4Q0NDRkQxQ0MyRDAxNkJCNUNGOUZFRTA1Q0RDOUFFMjNEOUY2ODc3OTBDMzU4MkNDOEExNkI3RDkyQTcyMDJGNUM0OENCODE5RDE5OTQ4MEZDOTc0MzFFM0FCQjhGOTFCNjdGOENBNERCRkRGQzA2M0Y1Q0ZGMkJCNzZFNTJBQjQxOUZGMkIzMDRENjFGOTIKKzg3NURGRDFCCitEQ0EzNzM4MkJCQjAwNkY1RDIwRDE4NjQ5RgorMUMxRUI3NTM2NEEyMkM2QjAwQ0IzOUI3MTlFMzFDRjM2OEZFMjNFMDg3MDdGRDRDM0NBN0RGNTcyMTBGRDY0RDJDREI5NTcwRjBBNUYyREU4NzAzNDg4NzI5M0FCMDJDRDQ0NDFFQzRBQUUyOTJBRDA1RjE4QTQ5M0FFMkIyRTI2MUEzRkU1MTg4RkQ1MzI2NjdEMkU4QzcwOUJFODQyODU4OEM4QUI4N0UwNTQ5QzBCQjhENjMwQjUzNUJBNgorMzQ4MUFGN0YKKzkxQUY1NzZEM0EyRTA5OTAxRUNCRjE0QkYwNTYKK0ZGMDgwNERFREI3QjkwOUQ3RjZFMkU5NjE3NjRFRTE4QUYxMzk3QTExOUJDNTgwRDVGQTUzNTJEQjZCRDlBNUM2RUREOTQ4MTJBRUJGNUFCQjlENTU4NzJBNENFNTg0NEIxNTdBMzZGRjA2NkEwMjE1MEQ2OTZFN0UwQjI4QkI4RTAwNzdBMDU3QjBDNDM2ODExQTMyMEQ1NEZBNzIzRjJFOEYwMzUyRUMwRDI1NEY3NjM4RUNGRjdEMEI3QzBCNEU0OTVGMkY2RUJCMkZCMzA4NkNFNjZFQjFBRUNCNzYxRDQxNjY1QkI4NTZCNEZERTJBNjQ2RDg1RUNCOAorOERBQworNzg5QjAyRTg1RTJFNkI0MEZFNjM1ODNEQUE5Q0NBRUUzMjI4NzU3OURDNUFCOEQxRDk4ODNBMzcKKzFGREExRkUxCis2NDA5OEZCOTZGNzQ2MzBCOTY0QTNBODU2MTg3Cis0NTcyOTQwNDhFQjI2NzhEMzUyNEMwMEFCRjgwNjUxOUNEN0IxNjVFQkJCMjhDQjE3RTMwMDQ3ODBDMUE5Qzk5MTc4M0U1RDg2MkVDOUI5QkNBNTIxNDI5RTI0RUZGNzJEODdCRjc0ODY3RkE2Q0RCMjQ3MzczRTE4RTNDNjcwQjVEQzJDMDczNjM4MUM3MEVFNEU5Njc0NTEwQjM5RkY3MURGQjg1RTgwRDRGMEQ5NzMyNDM1ODlGNjBBNjZFNUFBNkM4RDcyMjFGNjAyNworQjk2QUE0MjgKKzA3MjE0MTg5NkVFNDYxMDE1MzREQzdGMkY2Cis5ODczMDQ3NjEwRkQxM0NBNkQyMTZBNUY4Qzg2OTYwMjA5MkEwRDU2MTA3MDI4NTZENUJGMjA2MDg3QTQyRDhFMjg3RDY4QzQwRTIxNzhFRjlBMTZBQzQxQTAwRjZGMzY5REQ0RjI5N0Q0NUFGMTNGNkZBMkNBMTE0MTU3MEEyNEU5NDQ1REE3NTE0RQorMjM4NDNFNjQKK0VBMkYwOTExNDkxODA4RUY4M0RGNTE3NjZFOUMKK0RDMURBOTBCREM1RDIyMDA0RTE1MzIyNjRGN0IwOUNBQkQxNTFCRTJERjA3RkQ0NjE0OUJFMTYyOUM2NTVFNThCMjZGQjRCNkE3NkU3RTAyMzdGRkE5NkNGMTVBQUE2RDMzRjE2QkQ1ODIyNjhGNjQ2N0IzRUEwM0FBNjlBM0NFNUZEOEIyQjQyNUIzMUUzM0UxMkJFRDBGNEYzQzBCMjBGMjdFQ0U1NjM2NUI3QTdGQzgwRjk5OUM1N0IwN0Y5QkE3OTlCQTgxRUFBMEVEODM5NzE4NUM1Qjc5MTJEMEREMzUKKzNCQ0UyQjEyCisyRDZFQjkxQThCNEYzNkY1RTA3NkZFMzM4MworNzAwQTU5NEE3MzQ0MjZEREY5NjhCRENDMUNCNzUzMkVCNTI5MzdCRjQ3ODg5NDZDMDQxOUFCNEFGQkNFOThENDZDOTNERkNGRTYyN0ZEOTg0MTIxODA1RkYwMUNFRDlCNjFGQzE0MTdBMzExQjUyQzBGRTcyNzdBOTlFNDQ4RUI3REU0OEVCMjJEQUQ4MUUyMEY5NTc4OTYyMDYzNDBDRTAzRDhCNkFBRTdGNUI1RTNBMgorODM2QkVDNkIKKzg2OUQ1Q0JCRTE1Q0Q4MDhFNzc5REFFODIzN0UKKzRBMzREOUM0RDhFQkNGOEZBMTAzOTA4MjQ0RUYyRTIzMjhFMzZDODgzNjU1RTg0MkYwNTM0NzA5OTlBM0M2Njc3Q0U4NjczNDE4MUYxM0NCMUQxNDQ2MzZGMzY2NTg0QzJFRUM4OTBFMzFDNTI4MTNBQTU3QURBNjUwNzcwNjEzRjNEQzQwNUIzRTMxQzhFMEM4MjA2MTg4RUE5NTk4N0UyNURFODI5NjQ2NDc5MENGRUMyMDM0RkMyRDQ0NzVFN0ZBQzQ4MDYxRDgzOUNFQkNDQUExRENBNDhGMTcyQzgzNTM1QjUyRjFBRUU5MjBFRTMzCis5MzRBNEU3RgorNTlBRUZDRkM1NUU1MDU0QzE0RjVCNTNDQ0YKKzExNTc2QTVCOUYzMjZBNzg1RkYwMDBDRTE3Njc5MzYzMjU4OUM2M0U1MkEyNTM5NjZDREI2RUQ1RjcxMjdGNTA3NzI4RUMzOEEyRjc1Q0QxOUVDQUY4RDE3NkZDN0VGREFEODBDOTdGRDU1NENBMTdDQTYyNjlDNjgyRUY4RTQ3REE3NTFBM0MKKzlFMjU2OTVCCitCRjJFQzZGQTcyRUQ2Q0M3QUIwNUVFN0ZENQorOTY0MUE5OURBMjQ3NDU4RkE3QjQ3QjQyNURCMEM1RUY3RjQ5NUVBQTQ5QTQ4QjUwNkI5MDBCRjBCMDZDNjA2OTQyQTY4NkUzOUM0MjgxRTE4RkUzNUU3NzYwMjNBMDU0RkE5QTdEMzI5N0Y1NkM3NTRCODY2MzdCQ0RDMzFCMEUwOUM5N0YwNUZGRjU2M0VCNkY0QkMwOTBGM0RCQTcyNzM2QUQyREVCQjhERUM1QUM2MjcyNUIKKzM2QTg1ODY1Cis5M0IwOTEwODUxQTFDOUZEQThEQkJCREY3NQorQzYwRDI4MDg2NzEzNjVDQTZEQkE1NDEwRTVGMkQ4RjJGMkUxNEREQTc1RjQ2RUUxNEU1MjA2OTcwNENBMzkwQjc4NDUzMkQwMkMxOTQwRjUyNzA2MUZDMkZDQ0ZCMEVEN0ZFMDgyMDg1QkQ2Q0E1NUY1ODU1RDRFNjk2MjI3N0JDRTE1OUEyQUE1MjgwN0UwRTdFNzY4NkFFOTM2QzNCQ0I0M0ZCQzBFMTRBMEI5QUE4MzIxNkI2QgorOUY5QTI4RTUKKzRFODA0QTcyMDRFMDVGN0Q5REUwNDE4RjI5MjYKKzkxNkZCMzA5MzM0NkI2MkIKKzk3ODAxOUIxCisxODM4NThERTdEQTIzNDhFNjFDNDZFOTQ4M0RFNjNDMjNCMkU3QkMwMzZFNUVBRkY4OTQ2NUU1QUQ2M0ZCMzE2QjRCRQorMDY0NUExODdCRkEyRTdCMjdFOEJEMEMzOTdFRTdDQjY1MkZFQTk0Rjc5NTE0ODNGQzM0QzFGMzM1OTFERjMyQTcyNDc0MDE2QzJFRAorODYwRkNBQTA2M0EyQjMwMEM5NEFERDk1RUFBNTVCQTJBNUQ0RkIzOEUzNDZCOTFFQThGNjdECiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorZHVwIDIgL0MwMDgzIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzUwIDQ1IDc3NSA3MTNdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyNzVERDg5QTg3OTBFQUQxOEVGQzc3RDNGRkFFODREQTVECiszMTIwNzRDNEQ1NDJERDVCRUM3MDk2OEY3NURDCisyNTBDMzk1NEU4REZCOEY0ODU3QkZFRjA5MkVCQTQ5RDI0ODk1NUE4NThDNUE1RjU1RjdCOTg3RUEwNkVDODQyOEQ5MzkwODRDODhGNUIxNTdEODBBQjJENzA2QTdFQjkzNkMzNDI5MTczNTg4RDJBQkE2QTI3REM5NEMwQjQ4NEYzMTY2NjM1NTU3OTcwMDRDQkZBNzlFN0I4NTQ1QzgxMEJGOUNBOTJGNjFBQkQ5RTIwMkVEOUU5NTk0M0RGN0E1QUJCRjNDMjBCREUzQjZFRUM5QzBCOTVBNEM5QzFEMzhBQTdDNjc4NkFEQkJCNzlFRTE4M0JEREYxOTQKKzE5NTMKKzY0NDlEQkI3QUU0N0U5RkM2RjNBQkYxRENEN0ExRTI3NEU4N0RBRTkKK0EyMjczN0ZBCis2NDA0QjIxNUEyN0JGQUY2RDBCNTBFOTREMgorMDcxMjNBNUJCMzgwQzg2REI1MDMzRUU3NDMxODFCQkZDQzAzNTY1NzFGNzI5N0EyMDdDMjNGMUU1ODgyNTdGREVGNURGMjI5CitDQUJGM0IzQworOUUwOTg4QzYzQjM1OEFDQTRCNEZFQjAzM0RGQgorRTJFMzg3QTA2QTIzQ0FDQQorOEUxMDRCOTAKK0RGREJENDFGMDYzRThBOERGQTBBQkE0REQ3NDQzMDE1NTI2QUU1MjU1MzE1NTk3Nzc5RTA0RDg1ODQ5MzA1RUE0RjMxCis1Q0RBRDA2RTU4NDFFMUI4MDc0NzYwQzk5NzAyQjhDRjQ0M0Q3NTIxNzREOTk2Qzk0RTY5MDc5N0E5NTg3Q0Y1MDE3REVCMTFFNUZFCiswMjU3NkU5RTA4QjM5Njg4QkJFOTlBMTg2QUE4RkM3RTIyMkY1RTUyQjI5QTdGREYzNzlFRjUKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3N5bTpjbGFzMTIgMTIuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEwIDEwLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0IDE0LjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorJSVJbmNsdWRlUmVzb3VyY2U6IGZvbnQgSGVsdmV0aWNhCisvd3N0OmhlbHZwczEwIDEwLjAwIC9IZWx2ZXRpY2EgL3dzdDpoZWx2cHMgSUxFbmNvZGluZyAwIGRlY2xhcmVORm9udCBkZWYKKy9zeW06Y2xhczEwIDEwLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCislJUVuZFBhZ2VTZXR1cAorR1MKKzAgMTM5NzggMTA4MDEgMTM5NzggMTA4MDEgMCAwIDAgY2xwCit3c3Q6ZHV0Y2gxNCBTRgorMC4wMCAwLjAwIDAuMDAgMS4wMCBzZXRjbXlrY29sb3IKKzwxNDIwMmUyYTIwMmMyMTA5MDEwYjAxMGMyMDI4MWUyMzI3MWMyYzI1MDEyMTI5MmMwMTEzMjAxYzJkMmYyYzI0MjgyMjAxMTQyMDJlMzEyOTJjMjUwMTE2PiAyMjA3IDU1OCAwIDczODQgLTEgcworPDIwMmMyMTI5MmMyNzFjMjgxZTIwPiA3Mzc1IDU1OCAwIDg1OTMgLTEgcword3N0OmR1dGNoMTAgU0YKKzwwODA3PiA5MzQ2IDEzMzg1IDAgOTUyMiAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzw0ZTY1NzQ3MDY1NzI2NjNhPiAxMzIyIDEzMjY3IDAgMTk0OSAtMSBzCis8MjA1MjY1NzY2OTczNjk2ZjZlMjAzMjJlMzEzYjIwNDM2ZjcwNzk3MjY5Njc2ODc0MjA+IDE5NDkgMTMyNjcgNCAzODY4IDMyIHMKK3N5bTpjbGFzMTAgU0YKKzwwMT4gMzg2OCAxMzI2NyAwIDQwMTkgLTEgcword3N0OmhlbHZwczEwIFNGCis8MjAzMTM5MzkzM2IxMzEzOTM5MzUyMDQ4NjU3NzZjNjU3NDc0YjE1MDYxNjM2YjYxNzI2NDIwNDM2ZjZkNzA2MTZlNzk+IDQwMTkgMTMyNjcgMyA3MTMzIDMyIHMKK3N5bTpjbGFzMTIgU0YKKzwwMj4gMTI3MSAxNDMxIDAgMTM1OSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFiPiAxNTg5IDE0MzEgMCAxNzUxIC0xIHMKKzwyOTJmPiAxNzI1IDE0MzEgMCAxOTU3IC0xIHMKKzwwMDIzMWMzMDIwMDAyZDJhMjAxZTI0MjEyNDIwMWY+IDE5NTcgMTQzMSAyIDMyNjcgMCBzCis8MDAxYzAwMGQxMjE2MTEwMDFmMjAzMDI0MWUyMDAwMjEyNDI2MjAwMDJlMjMxYzJlMDAyNDJkMDAyODI5MmUwMDMwMWMyNjI0MWYwNTAwMWE+IDMyNjcgMTQzMSA5IDY1ODEgMCBzCis8MjAyYzI0MjEzMzAwMmUyMzIwMDAxZjIwMzAyNDFlMjAwMDIxMjQyNjIwMDAyODFjMjcyMDAwMDAxYzI4MWY+IDY1NTggMTQzMSA2IDkyMTMgMCBzCis8MmUyYzMzPiAxNTg5IDE2NzYgMCAxODM0IC0xIHMKKzwwMDFjMjIxYzI0MjgwNTAwMGQyMDIxMWMyZjI2MmUyZDAwMjEyOTJjMDAwZDEyMTYxMTAwMWYyMDMwMjQxZTIwMDAyMTI0MjYyMDJkMDAzMTI0MjYyNjAwMzAxYzJjMzMwMDIxMmMyOTI3MDAxNTE4MDAyZTI5MDAxNTE4MDUwMDFhPiAxODM0IDE2NzYgMTMgNzc3NCAwIHMKKzwxYzJjMjQxYzJlMjQyOTI4MmQwMDI5MjgwMDJlMjMyNDJkPiA3NzQ3IDE2NzYgMiA5MjEzIDAgcworPDJkMmUyYzIwMWMyNz4gMTU4OSAxOTIxIDAgMjIwNCAtMSBzCis8MDAyOTIxMDAyNzIwMmQyZDFjMjIyMDJkMDAxZTFjMjgwMDFkMjAwMDJkMjAyMDI4MDAyMTI5MmMwMDIwMWMxZTIzMDAyOTIxMDAyZTIzMjAwMDBkMTIxNjExMDAyZTIwMmQyZTJkMDU+IDIyMDQgMTkyMSAxMSA2ODgzIDAgcword3N0OmR1dGNoMTJiIFNGCis8MGYwOTE0MTEwOTEyMGEwMzAwMTIwOTA3MDkwYzE2MDkwNTEyMDkxMzExMTAwZjEzMDkwMzAwMGYxMDAwMTIwOTEzMTExMDBmMTMwOTAwMTIwOTA3MDkwYzE2MDkwOD4gMTI3MSAyNDA3IDQgNTU3NSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTkyMzI0MmQ+IDEyNzEgMjgzMCAwIDE2NjUgLTEgcworPDAwMjcyMDJkMmQxYzIyMjAwMDI0MjgxZjI0MWUxYzJlMjAyZDAwMmUyMzFjMmUwMDI4MjAyZTJhMjAyYzIxMDAzMTFjMmQwMDIwMzIyYTIwMWUyZTI0MjgyMjAwMmUyOT4gMTY2NSAyODMwIDcgNTkwMSAwIHMKKzwwMDJjMjAxZTIwMjQzMDIwMDAxYzAwMmMyMDJkMmEyOTI4MmQyMDAwMjkyODAwMjQyZTJkMDAxZTI5MjgyZTJjMjkyNjAwMWUyOTI4MjgyMDFlPiA1OTAxIDI4MzAgNyA5NDYxIDAgcworPDM0PiA5NDYxIDI4MzAgMCA5NTMxIC0xIHMKKzwyZTI0MjkyODAzPiAxMjcxIDMwNzUgMCAxNjgzIC0xIHMKKzwwMDFkMmYyZTAwMjgyOTI4MjAwMDMxMWMyZDAwMmMyMDFlMjAyNDMwMjAxZj4gMTY4MyAzMDc1IDQgMzcwNiAwIHMKKzwwMDMxMjQyZTIzMjQyODAwMmUyMzIwMDAyZTI0MjcyMDI5MmYyZTAwMmEyMDJjMjQyOTFmMDUwMDExMjgwMDAwMmQyOTI3MjAwMDFlMWMyZDIwMmQwMzAwMmUyMzI0MmQwMDFlMjkyZjI2MWYwMDFkMjAwMDJlMjMyMDAwMmMyMDJkMmYyNjJlPiAzNzA2IDMwNzUgMTMgOTUzMSAwIHMKKzwyOTIxPiAxMjcxIDMzMjAgMCAxNDU3IC0xIHMKKzwwMDJlMjMyMDAwMjkyYTIwMmMxYzJlMjQyODIyMDAyZDMzMmQyZTIwMjcwMDJjMjAyZDJlMWMyYzJlMjQyODIyMDAyZDMzMmQyZTIwMjcwMDFlMWMyNjI2MmQwMDJlMjMxYzJlMDAyODIwMmUyYTIwMmMyMTA2MjgyMDJlMmQyMDJjMzAyMDJjMDAyMDMyMmEyMDFlMmUyZDAwMmUyOTAwMjAzMjI0MmUwMDMxMjQyZTIzMDAxYzI4PiAxNDU3IDMzMjAgMTMgOTUzMSAwIHMKKzwyMDJjMmMyODI5PiAxMjcxIDM1NjUgMCAxNzcwIC0xIHMKKzwwMDI5MjEwMDBlMTExNDE5MTcwNT4gMTc3MCAzNTY1IDIgMjgwOSAwIHMKKzwxNTIxPiAxMjcxIDM5MTEgMCAxNTEzIC0xIHMKKzwwMDFlMjkyZjJjMmQyMDAzMDAyZTIzMjAyYzIwMDAyNzFjMzMwMDFkMjAwMDI5MmUyMzIwMmMwMDJhMmMyOTFkMjYyMDI3MmQwMDJlMjMxYzJlPiAxNTEzIDM5MTEgNyA1MjQ1IDAgcworPDAwMWMyYzIwMDAyODI5MmUwMDFlMjkzMDIwMmMyMDFmMDAxZDMzMDAyZTIzMjQyZDAwMmQyMDFlMmUyNDI5MjgwNTAwMGY+IDUyNDUgMzkxMSA3IDgyMjggMCBzCis8MjkyYzAwMjEyZjJjMmUyMzIwMmMwMDJkMmYyYT4gODIyMCAzOTExIDIgOTQ2MSAwIHMKKzwzND4gOTQ2MSAzOTExIDAgOTUzMSAtMSBzCis8MmEyOTJjMmUwMz4gMTI3MSA0MTU2IDAgMTcwNiAtMSBzCis8MDAzMzI5MmYwMDFlMWMyODAwMWYyNDJjMjAxZTJlMDAyMDI3MWMyNDI2MDAyYjJmMjAyZDJlMjQyOTI4MmQwMDJlMjkwMDJlMjMyMDAwMWMyZjJlMjMyOTJjMDk+IDE3MDYgNDE1NiA4IDU3ODYgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwxMjA2MGQwNDA3MTUxMTAyMGIxMTAyMDcxMDBlPiAxOTA2IDQ2NDMgMCAzNDI2IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTkyMzIwMmMyMD4gMTI3MSA1MTI5IDAgMTgxNyAtMSBzCis8MDAyNDJkMDAxYzI2MmQyOTAwMWMyODAwMTEyODJlMjAyYzI4MjAyZTAwMjcxYzI0MjYyNDI4MjIwMDI2MjQyZDJlMDAxZjIwMzAyOTJlMjAxZjAwMmUyOTAwMmUyMzIwPiAxODE3IDUxMjkgOSA1Nzc1IDAgcworPDAwMWYyNDJkMWUyZjJkMmQyNDI5MjgwMDI5MjEwMDI4MjAyZTJhMjAyYzIxMDUwMDExMmUwMDI0MmQwMDFlMWMyNjI2MjAxZjAwMjgyMDJlMmEyMDJjMjEwND4gNTc3NSA1MTI5IDcgOTUzMSAwIHMKKzwyZTFjMjYyNT4gMTI3MSA1Mzc0IDAgMTYxMyAtMSBzCis8MDAxYzI4MWYwMDI0MmQwMDIzMjkyZDJlMjAxZjAwMjkyODAwMjgyMDJlMmEyMDJjMjEwNTFlMmYyYTA1MjMyYTA1MWUyOTI3MDUwMDE5PiAxNjEzIDUzNzQgNiA1MjI2IDAgcworPDI5MDAyZDJmMWQyZDFlMmMyNDFkMjAwMzAwMmQyMDI4MWYwMDFjMjgwMDIwMjcxYzI0MjYwMDI3MjAyZDJkMWMyMjIwMDAyZTI5MDAyODIwMmUyYTIwMmMyMTA0PiA1MTk1IDUzNzQgNyA5NTMxIDAgcworPDJlMWMyNjI1MDQyYzIwMmIyZjIwMmQyZTBhMjgyMDJlMmEyMDJjMjEwNTFlMmYyYTA1MjMyYTA1MWUyOTI3MDU+IDEyNzEgNTYxOSAwIDQ0ODUgLTEgcworPDAwMTYyNjIwMWMyZDIwMDAxZjI5MDAwMjI4MjkyZTAyMDAyZDIwMjgxZjAwMmQyZjFkMmQxZTJjMjQyYTJlMjQyOTI4MDAyYzIwMmIyZjIwMmQyZTJkMDAyZTI5MDAyODIwMmUyYTIwMmMyMTA0PiA0NDg1IDU2MTkgOCA5NTMxIDAgcworPDJlMWMyNjI1MDAyNDJlMmQyMDI2MjEwNT4gMTI3MSA1ODY0IDEgMjE2MCAwIHMKKzwwYjI2MmUyMDJjMjgxYzJlMjQzMDIwMjYzMzAzPiAxMjcxIDYyMTAgMCAyNTAyIC0xIHMKKzwwMDJlMjMyMDAwMWMyZjJlMjMyOTJjMmQwMDI5MjEwMDI4MjAyZTJhMjAyYzIxMDAxZjI5MDAyZTJjMzMwMDJlMjkwMDJjMjAxYzFmMDAyZTIzMjA+IDI1MDIgNjIxMCA5IDYyNDEgMCBzCis8MDAxMTI4MmUyMDJjMjgyMDJlMDAyODIwMzEyZDIyMmMyOTJmMmEyZDAwMWUyOTI3MmEwNTJkMzMyZDA1MjMyYTA1MDIwMz4gNjI0MSA2MjEwIDMgOTUzMSAwIHMKKzwxZTI5MjcyYTA1MmEyYzI5MmUyOTFlMjkyNjJkMDUyZTFlMmEwNDI0MmEwMz4gMTI3MSA2NDU1IDAgMzQwNCAtMSBzCis8MDAxZTI5MjcyYTA1MWQyMDI4MWUyMzI3MWMyYzI1MmQwMDFjMjgxZjAwMmUyMzIwMDAxMDE2MDAyNDI4MmUyMDJjMjgxYzI2MDAyODIwMzEyZDIyMmMyOTJmMmEyZDAwMmEyMDJjMmUxYzI0MjgyNDI4MjIwMDJlMjk+IDM0MDQgNjQ1NSA4IDkxMzcgMCBzCis8MDAyODIwMmU+IDkxMzcgNjQ1NSAxIDk0NjEgMCBzCis8MzQ+IDk0NjEgNjQ1NSAwIDk1MzEgLTEgcworPDMxMjkyYzI1MjQyODIyPiAxMjcxIDY3MDAgMCAxOTk4IC0xIHMKKzwwMDFjMjgxZjAwMmEyMDJjMjEyOTJjMjcxYzI4MWUyMDA1MDAwYjJkMDAyNjI0MjUyMDI2MzMwMDFjMmQwMDI4MjkyZTAzMDAyZTIzMjAzMzAwMzEyNDI2MjYwMDFjMjYyZDI5MDAyZDIwMjAwMDJhMjkyZDJlMmQwMDFjMWQyOTJmMmUwMDI4MjAyZTJhMjAyYzIxMDAyNDI4MDAyOTJlMjMyMDJjPiAxOTk4IDY3MDAgMTUgOTUzMSAwIHMKKzwyMjJjMjkyZjJhMmQ+IDEyNzEgNjk0NSAwIDE4ODQgLTEgcworPDAwMWMyZDAwMzEyMDI2MjYwNT4gMTg4NCA2OTQ1IDIgMjU5MyAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgzMikgMzIKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzNCBwdXQKK2R1cCAzIC9DMDA0MCBwdXQKK2R1cCA0IC9DMDA0MSBwdXQKK2R1cCA1IC9DMDA0NCBwdXQKK2R1cCA2IC9DMDA0NSBwdXQKK2R1cCA3IC9DMDA0NiBwdXQKK2R1cCA4IC9DMDA0NyBwdXQKK2R1cCA5IC9DMDA0OCBwdXQKK2R1cCAxMCAvQzAwNTAgcHV0CitkdXAgMTEgL0MwMDUxIHB1dAorZHVwIDEyIC9DMDA1MiBwdXQKK2R1cCAxMyAvQzAwNTggcHV0CitkdXAgMTQgL0MwMDY1IHB1dAorZHVwIDE1IC9DMDA2NiBwdXQKK2R1cCAxNiAvQzAwNjcgcHV0CitkdXAgMTcgL0MwMDY4IHB1dAorZHVwIDE4IC9DMDA3MCBwdXQKK2R1cCAxOSAvQzAwNzMgcHV0CitkdXAgMjAgL0MwMDc2IHB1dAorZHVwIDIxIC9DMDA3NyBwdXQKK2R1cCAyMiAvQzAwNzggcHV0CitkdXAgMjMgL0MwMDc5IHB1dAorZHVwIDI0IC9DMDA4MCBwdXQKK2R1cCAyNSAvQzAwODIgcHV0CitkdXAgMjYgL0MwMDgzIHB1dAorZHVwIDI3IC9DMDA4NCBwdXQKK2R1cCAyOCAvQzAwODUgcHV0CitkdXAgMjkgL0MwMDg2IHB1dAorZHVwIDMwIC9DMDA4OCBwdXQKK2R1cCAzMSAvQzAwOTYgcHV0CitkdXAgMzIgL0MwMDk3IHB1dAorZHVwIDMzIC9DMDA5OCBwdXQKK2R1cCAzNCAvQzAwOTkgcHV0CitkdXAgMzUgL0MwMTAwIHB1dAorZHVwIDM2IC9DMDEwMSBwdXQKK2R1cCAzNyAvQzAxMDIgcHV0CitkdXAgMzggL0MwMTAzIHB1dAorZHVwIDM5IC9DMDEwNCBwdXQKK2R1cCA0MCAvQzAxMDUgcHV0CitkdXAgNDEgL0MwMTA2IHB1dAorZHVwIDQyIC9DMDEwNyBwdXQKK2R1cCA0MyAvQzAxMDggcHV0CitkdXAgNDQgL0MwMTA5IHB1dAorZHVwIDQ1IC9DMDExMCBwdXQKK2R1cCA0NiAvQzAxMTEgcHV0CitkdXAgNDcgL0MwMTEyIHB1dAorZHVwIDQ4IC9DMDExNCBwdXQKK2R1cCA0OSAvQzAxMTUgcHV0CitkdXAgNTAgL0MwMTE2IHB1dAorZHVwIDUxIC9DMDExNyBwdXQKK2R1cCA1MiAvQzAxMTggcHV0CitkdXAgNTMgL0MwMTE5IHB1dAorZHVwIDU0IC9DMDEyMCBwdXQKK2R1cCA1NSAvQzAxMjEgcHV0CitkdXAgNTYgL0MwMTIyIHB1dAorZHVwIDU3IC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstNTAgLTI1NiA5MjAgNzM5XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjE5Rjc1RTUzQUMyQUI3NTI0RTYxREQyOTQyQUQ0M0M4NjBDCisyRTE3RUNGMDBDODgzQjY2QTMzMEI5N0IKK0ZCNEE2QUE2RUExMEFFQzY1MQorQzkzMzNGQ0EKKzU2OENEQUI3QkE4RjUzN0I2REFDMTM3MTVEREYKKzZGNzAzNEQwNURDMTM1MzRBRkZGRUYyMkYwQzNCMkJERDIyQTE4MzYwOTI3N0JBNDM1OTQxMzRBOUFEM0M4MTk5RUY0QzBGMDZFQTBCODVFRTY4ODE0RjdDRjM2QTYxQURERUYzMzE0NDYxNUU1NDc5MzVCNjQxOUQ4NDg1REM4MzdFNzI1ODg5NDZCRUM1QzQ4RTBFNDM0RUQyMzQ1QzEyQ0VEMUNCNzBCRDVGNzYzOTMwODQ3ODk2MDExOUVBOUUwNUQzMjAwOEVGNjk0CisxNDA5OEIwMQorQzUxNjM0MTkxQTRGMzQ3MEI4QkE5MjRDRjMKK0VDMTUwQkI1RDU5RTkzQzQ3OEE1NEQzOEQ0MTQ2QUY5RUM4OThBQjI5RDcwMkM1RjhCOEZGQTdFRTNBMTA3MDNCNzcxNEExMjkxQkIxQjVBQTUzMDc4Nzc1NDRFOTFGQjNFNDFGMUI4QzcxRThBQ0IxRDc0QTI1QjU4RENERUQ1CiswRDBCOTI2MworNjIzM0Y5MzU4QkQ0QTZCQzk1NTI4NURGREMKK0E3NzdDRTczQjhGNEJFQkVDMDFBMDU4QjlCQTQwOTY5NUQxQzlBMkUzMEM3OEMxQjZFOTFBNDNEN0M3RUFDMjlFNDBCODg3MDQ1MDVERjE0QUIzQzU1MzVENzI5QzkyMUVCNENFNDE1OEIzRTJFOUJCQkU1RkI1QTU0NTNBNgorNDZGNzQ1QzMKKzgxODBGNTNGOEExQzEwNjI2NzczRDVDRTA5CiswQzJEQkRDQTJFQTAwRDBFRENFMTQ1NUFCNUIyREIxQThFOTNERkVBMzFEMUMwQUFFQkNCNzcyOEFCOTEyNUU4NUZCMjJCNzU0MTA3NjFGQzVFNTE1MTVCRjlFNTRCOURBNzk0RDA1MThFMDg3NTE0OUMKKzkzRDlBQkJCCiswRTkxODE5NDU5Q0UyRDUyNjBCMDU0MEE4NworQTkzN0JFNjEwNzZDMkE5QkEwNEIwQTZEMDU3QUE3RTYxNEVCQzg1RTMxQkRENAorQ0M5NDU2ODMKK0M4RjBGQjk3RkNENTM5QjhERDUwRTlCQUNBCitFRkVDNjFCQzNGNzkzNjg3OTZBRDY5MjA2NTI0MzczMkRDODZGNzcyNDNERDY2M0I4RDVDMjFDOTc2M0Y4NAorNDc1NjMzN0IKK0E4MDVGMDNGM0FCNUE0MDA0NTM5M0U1MzAxCiszOUJFMTdEQkUwQ0FEODM3MkNENzQ4OUMxNDA0NDJBQkMzMTBEODlCMUQ4OEYzQ0Q2NjRCM0MzMQorMkVCQzhDQTEKKzg2MDcxQTM0RjI5MjY1NzQ5Njc2QkY4RjZFCitDOTFDRjBCRjdFMDhBOTRFQzM4NzVDRTEwNTBBRDUyNjU1MzlCQzRGOEJGQTAzNjI4MTgyM0QzQkUwQzFCNzQyMjAyNUEwN0YxQ0Q4NjEyMTFCMkQ2QkZGN0E1NkNBQjdCNjc5NjFCMzI2MzVBN0M1OTQ5QjI2NjU1MkIzOTM3NUQyMDM2RDlBMjMyNEQyNTlFRUU2Cis1OTczODJDNgorQkU1Njk0QkU0OTQ4RUU5QTlGRkJBRDM2MjUKKzczOTY1QjQ5NTI2OEE5RjNDOUE5QkQ1OTE4OTA3Qjk4QzEyOTcxQTg4MDIxQkY5MDQ4NTBGRDJENTNCRUFGNjFCQTMyNUFEODMzRTNCQkRBOENDREYxQ0ExQzVCQjcwMTQ3QUYxNTFBNDBDQUM1MENCQzQ2NTRCQkI4RjcwOTM3MUIyNkZEMTdGMUI3QjJENUNFNzEzNDAxRUIzM0E4NTY5N0MzNDc3N0RBQ0RGMUY4RUVFMQorNEM2RUMxQ0EKK0Y3QTgxRjU2NkI2NzRCODIwREM3QTgzQjA2NzUKKzcyNkFEMTI1RTc4QjQwREVDNTVEMDA2MDY2QUVDNDA0NDZBOTQwM0NBNjFGQjJGRUFCN0Q2RUU0QkZDMzhCNDIwNDMzMTAwNUM5QTRDRTMyNzA3NkE0QzdDN0QxRkU3OEExQzhGN0Y3QTM5RkJCNzU5MEIzRTZFMzBGODkwMDE1MkMyRjBENTY3NDIwODkzMkVBRjJCQ0ZEREZDOEMzOTUzNTE4QzUxQTZEMzAxQTkyMkI4NDhFRERCOTEwNzUwNjhCQkU0OTc2NkRCOTNBM0Q0QTIzNUI2QTg3MEFBMgorNkMwNzkxRjcKK0ZBOUUzMDcxMDc4NTRCMTY0RjkxNEFEMTIxCis0QjhCRkI0M0JBQ0QyQTNFNzlENUVDRkUxMEVDRTIyODdERDlEMTlEREJCRTcxQjU4NzczQTVBNjQ2OUQ5RjgyNDYyRkI2NEY0Q0EwMUY2MzE3MDQwNTlFOUUzQTZENzA3OUJFRDc2MkNERjg3QjYxNUQwRgorNEI5RjNFMTcKK0FBQzcyQjg4RjhFQkVCRjZDNEE4M0ZCQTAyCisyQ0NBMzE4MUFGMTc4QTJFOEQ1MjI2QkU4RTg1Q0E5RjhEODhDMjAyMjU4QzI2NzVENkVEMERFMTRCMUI5RDBGQ0FDNjZERUJBQUJCOTlGRTYzNjBCMkYzQTIzMEU4REVBOTEwM0U1MDgwOUIKKzcyODFFMkY4Cis3NzVEQkYyMDdEMTNBQTMxQ0Q4QTRBM0E2NkRDCis5QzUyOTZERjUzNDIwNDNFNTdBRTgxMzUzM0JFOTI0OTRFQUM0MjJGMzVDQUYwNTE0RDcyQzc0RTJBNkVDMjQyNTYwNTExMzA0NzI0MjRFMjdGRUJDOTlERUFCNzYwRTk4ODc4RERCMDQ5RkY4RTk0NkZDOThGMTYwNUUzRDM4RkQzNDExNEJCQzFGOERBNzUzMTk0QjFDRTU5RTlERTQ1RDA2Q0NCMUYzQzhEQjc4OTAxQzY4Mjk0QzBCODEyOUQwRjUzM0RFMUJGRUQzQURFNDBDNzNDMkE3MjM4REMwMjA2RjRCMgorQzBFQkIwRUYKKzIyNjlDOEE3MzE2QkI4MUI3OEIyNTQwNkU3QkMKKzEwQjgzODZCOEQ3RUI0MTlEMkY5RTY5M0JDODAyQTcyNEJBRkQyRTRFRjEyRTdDQzI5RTBENEIyOUI0QjUzNjE5OTFCOEY2RTFGMDA4REI1NzdENkMyOTA3MjFGMUNDQTYxN0RERTA0QjMyRjBBRDREOUIxOTA4NTk0NzYwODA0RDc4MkM0Njg1OTc4N0I3RUE0NDVCMzRGMTJEQ0FGQjMzNjhFQzYxRTZGQTFCMDI3ODBDRThDNkNENkEyMEFFMDAwMDI4QjcwNzFFMTA4NjYyNTcwMEJGQjg3MUE1NDc2RUM3NDYxMDgzMDQ4MkI0RjgxMTM4NDEzMTMwMAorMjRBNgorNjgKKzNBMzVDQkU4Cis0RkM1ODREMEU0RDI2Mjk0QzQ0NkU5MTY5RAorODg1QUYwNEFEMEU1MDNFRTAyN0MwMkU3ODJFNTJERDFENDQxM0UwMThGMzVGOUZERkIyM0YwQTM0NkZDNDE4MERBMEY2QUI1QkQ4NEI3NDY3OTU0ODE5MTY2RDkyODRERTlGQ0VDNjlBMjdFMjU3MkEzRUZGOUU5NDNGQzVEREUzNjM3NDU4OUU4MEFBNUNCQzNFMkMyNkYxOTk2MDE0MkRCNkJFODNDNDdEMzA0RDI4NkRCNDE5OUEzMDQzNTA3MEIKK0YxRTY4MTc0CitFMzlBQTg1QzU4ODM5RkQ1MzIwNTY4QTkyOAorQ0ZDNDExOTJEODA0RTcxQzZCMkZENzIyMUMyQkZCRUVCQjUyNEIxQjY3ODM1REM3NjZFRjFDQzU3RDAzQjdBOTdEOUVCRjNDRkUxNjYxRUVGRTM4MUVBNzg0OTdBQkU5QUIwRTYyMkE4RTBGNkZFNkFCMDI2MjFCNjE3MjIyMEZFQkVBOUQxNDA2NkEyQjNGNzg1QzY4M0FCQjA1OUEzMjQxQzM4MDFBQjAzRTVGQUE5REY3MEMzNkVENTAxODY4OUFBMkMxCis4MkE3RkRBNQorOTMxQzg0NEIxQUM4QjU4NjNERTg5OTMzOTg0MgorRTY1MjQ3OTM0QUNEOTcwQzgzRDREOUVBQUVFNEE1M0NDMUMwMDNBRDkzRjYwMTlERTQxRkUyNUQ0NUFBQzUwQjBGOEE0QUM5NjUwN0M3QjcxNEQ2QTgzMzQwNzc1QkNERDg4ODhDRjQ0QzkzODgzQ0VCMTBCQzMxRTVFRkI3RDU0N0I0NUExMkIxQzUxQTIxQzA0MkZFNEU3QkQ3MkY5MUQzOUJDMTc4NTREN0U0MUM0RUJEMTQyQUE1MUM0N0FCNzEwNjVBQzJGNzk4NkVBODcwCitCQUQ4OEZEMgorRUVCMTJGQzMyMzY5MDMyREM0MDA1N0FBMzUKKzNFOTExMkJGQ0Q1NEJBNDJBNDdDQTNEODY3NkZGNzNBQkFBOTIzOUNFRjhBN0I3REVFMkE1MUE4RkRDQzNBNkI5NzY3MTFGODYxMDhBMTBEMTJDN0I2QUYyODk4QzlDQkFGMDM2MzlBMjhGMzc0OUJDNjZCRUYKK0ZGQzZENDExCiszMUU1MTY1OTY1OUNGQUQxNUZBQTQ4NkE4NQorREJDMkY0NTVDOUQ5RUZDNTkxNjgxOEVFRUZENjc5QThGMDIxQjA2MzJBQUMwRDkzOTQyMzQ2QTU2ODlDMjhFOEYyRTk5OUNFNDcwQUI5NUVDNjU2MEM1OEMxNDQzRUIwMTlGMjRDMzhDMzRGMjEyRDI1OEYxQjE0MDhENkE1NDc4Rjg2MTg0QkFEM0JCNAorMkYxMzE0NjgKKzM5NzNFMTcyMEMyNzBDNzRCMDBEQjlDMkI2MzYKKzU2MkM1QzdDMUEwRTVCRkE3Q0JFQkU0ODlFMkI1MTNBNjA0RjI0QzlCRjZFRUM4RDk2RUY2REU1N0M0RjZDQzQxOEZFMjI4MjQwNEZCRjg1OEU2NkZCMTFGQkUyOTlFNEJGQzkwQzVGNzZCNTYyNTYxNkQzODRCQUIwRERCNjgyMEQ3QkMwNTgzMjYyQTBBODQzRTA1ODcxRTA4NUFFODk1NkI5RkZDN0IzMjZDOTRFOTMwNkYwM0IxM0ExQzlDRTZBQUFBRjJDMjhGMEY2QkQ5NUREMTU1OUQxQTQyOQorOTVGNEVGRUYKK0RDM0MzNEJCN0E0Nzc3NkMxOEUxRDk1NkUxCisyNTQ5NzBDNzkyM0M4MjVDRDUyNDE4MUZGMDlDODUzRjAzRkU5RkMxM0M5M0U2RTU2MzE4NTRGNTkxOEJFMTkxMEUxRjE0REZBNDA4NDU5MjlDNDMyRkIzQkQ3NDVFOEZDRUMxNEQwQjExRTEyRTEyNTU5MkEwMTQxMDBGRjNBQjZBNDVEMTY0MTc1MTgyMDE1RjJBMUExMzBFQzlEMzJEQkQ0RTZEQzIzNUI5MjUxMDU5QzFFRjI3Cis2NkRBNEQ4NworRDk5MEZFQ0Q3RThBREI5Q0M5NTc5MzJCQTQKK0M5REIwRjE1NEI5NkQ0QTQwOTlDRTQwNjgyM0VEQ0ZFNjhDNEIwRUVBMTg5QkM3MEQ0NTI2OEY5MjZFRjVGNEMzNkMwOTlBOUNFODcwMkEyMzI0N0UzRDIyMzZFNzJFQjE4NUVDNzMzODQ3MjhCOEQ5QjZBMjE0ODM4RDMyNDVDREM5RDZFMjQwMURCQjJGMzg1RkE2OEM1MDdGRUFCOUUwRDg4QUMKKzA0RDlGRTBFCis3OTM4NTkyNkUxMEZDMDQxNzU4RjRGQzJENEU5CitDNDQ5RTE0N0YyQ0Q0QzM5M0UxRTBFRjM4ODQyMjkwMTExRDA5NzE4MTY1RDZENTdGN0ZEOTU4RjBCMEI5RUFFMjY1MkY0RjA4MjE5MzMxQTM2MkVDRDYzRjg2NzlFREQxOEExNkRBQzAxODU2MEJFNUU3MkI1RTAxM0UxMzg1OEJBMDA1OEY3ODFEQzAwOUNFMjk4NzYzOEFBQjkzMzY1OERFN0UxQjlGNzNDOTExRDczNTZFQTk0RERDMkI4RTA4MDkwN0VEQkFDMDA3MkQxRTU4MQorOTM3QkI2QTkKKzAxQzI1OUY1QTM3MkIzQUI2NDU5QTA0RkVERUYKK0RGMjRCNTgwQTU4QkMyNTgzRjlDMkU2RUYwMzc3QTIwMEI2Q0NBODc0MEU5OEU0QzJERjI0NTA2RDY0RkUzNzY1NDkwMUM4QzhCQkVFMTFBQjlFOEQ0RDlENEQ4NjEwNUU0NDJEODU1Q0NDREExQzI2MTk2OEI5NzIwMkFDNTMzRTQwM0ZCOTNCRkExMTZERDcxMTRDRDM0RThBRDNBMDAyQjNFOTczNEUxNzA1REZBNzNFMUYzNjk4RjEzQkI1MUFCNkQ4MDI4RTI5NjIwRTAyOTMwMjgzQzY2NkI1RUQ2OThDNkFENzhGNDhEQzQxNUNFMTk5NzU4RTM3QQorQkIwNDNCRjAKKzE4NjIyNjhGNDFEMkRFOTRCNzA4N0FERUQzOTQKKzMxMDMzQ0NFMEUwNEVEMUZFMjJEQjhFMEYxODRBOEY5MDFFQkMxQUMxNjdFRkZCRTQ4NDY4RjRCRjYyMDQwNzkxQUZGRkU3N0M3RTFGNzkxODY4MEE0NDQyNTU3MjFCRUU1ODI1QjI5MTYxRUUyMjgyMUZDMEM2RTcxOUE2NDYxRkIyRTgyMkNGQzBFMzgxQjIxNjVFOUU4Q0E0NTAxMzcwOEJBQkY5OUY4NUY0REI5ODIxNkNDREY4ODE3QjhCOUZFOEQ5QjgwNTZCNkM1REU1MkFCNkNGNjZDQURENDAzOUMzQzIzMTc2OEI2QTJBODYxRTdFQ0VENTQ3RgorRTA4RQorMEZBNjBDCis1MjE0NEY1RgorQjg2Qzg3M0EwNTczODgxRUVEMEY4NDUxOTkKKzMxRDNEQjQ0NjJGMTk0NUFBREUyRUJDRkJFNURCMUQ3QzFGRUM2MjgzQTFBNDJBMjE3RjlGQTNENTAwMDJBMEE4MzY2QjQ0NzUyMjM3OEE2MENEN0UzMzdFMDc1QjQ0NzQzQTRCODJEMTY4RjMyOUQ2QzFGMjM5N0ZGNTY5RDk5NTFDNkU5RDE5N0M1RkMxQTEwODg0Mzk1QjVBMjZEODM4RAorOTkyMTNDQ0UKKzE4NTA0M0U5MURCNkQ3RTY5OEJFNUExN0RFN0YKK0MzMDFDMjAxMDNDRDc5OTMxRTQzOTNBMEM4ODE2OTREQzA2M0U3RjQ5ODJEMUY2QUZEQzE0MDM0RDIzRDMwQUYyNUUwN0M4RkNBNkE4ODA2NzlBMTQxQTkwMDVDODIxRjFBMUVDNEM1ODZFRDEwODc5QkVBMTUyMTFGM0YzNDdDN0U4MkFGNzhDQTkzNzFEMTdBNEIxRTBEODU4Qjc3MDA1RkFDODM5QTIyMjAxRUI2MTY2RTE1OTYwQjdFQkMyNDBDMTBFMUEzCitEM0ZCQUI2MworN0E4RDM1NUZCNzUyOEQzQkNDQTU5QkQ1ODMKKzc4NjAyQ0U0REUzNDMxOEE1RDA5RThCNUFEMEE5NkJDRTg4NTZFMjlDM0MzNDk2QzIwRDI0MjZDQTlGMkU4QzNBMDUxQjdCRjIzRDAzRTVBMkVFMUJBQTFCQUZCQzgzRUY1ODlEREE4ODQ5QjI1MjdBQkYyN0UxODhDOTg0NEM2NDREMEZBOTkxQkRBNDEwNkU5Qzc5RjAxNEQyMjg0ODM1QzUyQzA0RTEwRjRBMkI0NzYKK0JEODY1NEYyCis5NEI5QUE5NkEzQjFBNUNEQTNENEE5NzkxMEJBCitBNEI5NDM1RkVDQkNFQThBOEI5REI5QTM3RkNBMzVDNDYwRjAzMTU0QjUxMTQxMzcyQ0QyRDA0MEVGREVENkFCNEQ0NDVGOEIwNzc4RTYwREMwRjFBRjg3NTM2RjZFQjhFNzRFMDgzQjUxODIwODBDMTIyQzhFMzE1QTk5RTQxQUQ3MkZCNjk0NjAxNDY2MjhDOURCRkM1MDYyNTY0RjUxNzA1Qzk1ODM0REYwQkZGREZGQkQxMTc5NUJCRjMzMDQzNTNEMzJFMEQ2QTU1MzcxNjdGMkQ2MTk0MEY1N0MwNDhGRTI1NjU0NzhFNUUwQUVBMzBGRjBCNkQyMkUKK0EzN0MKKzAwRUM5QzU0NTRDNDRBM0U3ODUxMURGMkYzN0ZDRTFBNURFQUJEMEMxQTU0NjRENDMzODdCMzAzOUUxREUwMDQ3NjBCRjFFMUZEOUVBQworQjJGNTFCRUYKKzA3RTY2NDAyMzAzQzgxNjlCNzJCNUNBQjBCCis2MzQyRjFCNDFEM0JDQzFFOEREQTdFRURGRkIzNzRCNkE5RjA0NjNDM0IzNzc2NjAwMjk5RjJFQzY0OTYzNUE1NDNGOEJEODExMEM0NDBDMjIzNDUwNzcyMjM3RkI5MkFCRkREMDM0OTM4NENGQzdGNjVBQgorRThDN0U3NTYKKzE0QzhCOEIxNENCNTgzM0QwNDZCRTJFQTE5OTAKK0U1MjU1QTQ2MjM5MDlENUMyREMyNkIxNUFDRDg2NkQ5QkUxNDJCN0NCMTc3MTY4NEFENkE0RTkyMjcyRkFGODVDNDgxQjQ3NzVGMTJDN0RGRkQyRTg3QTQyOEFGREI2N0E2QUM1QzlGQkI3QUU0MzNBRkI5RDY2NzdCOURFNTA2NEQ0QjZDNjlDRTUzMzRDRTNBRDExQjAzRjQ1MUFEMUQ0NTQyRjE1QjQ5NzlCNDg2NTM3NjhBMzE3OERENDIwOUUxQjQ4QjMyQjkxNUI1OTA0MjFFQTRGQTIzQUNERUY3RTk2Njk4NTRDMTBFNDdCMDM5NkZENEU1NkE2MgorNTVFQgorODAzODNBCiswRUI1NkVBQworQTJEOThGMzJGODVFMjU4MDY4NjRFNjNFNDQKKzQ4QkQ4NkFBNzZFQUFBRURDNTVCOTBBRTk0Qzk1RTIyNkNFNkZFRUUyQzg5QUJFQzdGQTRDMTRENEFCRUM1NkNCRTcyMThDRUQ4NDM5MjQ5NzRBM0I2Q0VBMjRBREI3OEM0QTA2MkZCNUY2QTk5NzVGNEVFNEQxRDUxRDU1NDNFQkRGNkI4MkEyN0JFQzkzNjg5MkNEMkJBMUQ1NzkyQzkzOTQxOTkzRkU3NTEzQ0FBCis2MkM1OEYyNworMTQzQTU1NkMwN0NFNUEyREJFNDBGQkMwMEEKKzk5MTJCNjNEMDRCQzczOEM0MENCMkM0QzFCOUY0M0YxM0Y1MjI3OTc5RTFFREUwQzg2OTMyRDgxRDk1MzdBRDlDQjZDNzcwODkwQjREMzkzQkZDN0IyRTYyRkI5RDNFQ0Y0NjI4Mjk2NDAzRDVCQ0Y0MEQ1MTU3RTA2NEQwQTg5OTFFMTdFOEM2NEI3NzUyOTVCRjM5MzUxMDAwQzNDQTI1MjFBCitFQkJCODc4RgorRDJBOTU0OEMwRDkzQUFFQUE2MDNBRjY2NDY3QworMTM1MjEwQUVEQTk2RkRCOTBEM0E2RDE3Mzk3M0FGREM0QjIwN0E4QTVFMjk4NzQyMjAwODFFQUQzOEUwMjc0QThEQTU0RjA4MkNBMEMzRkY0RTBGRjREQTRGQjUyOUU5NTZFNzdEQjQyODA2MDVEQjc0MzhGRjE5Nzg3RDgyMDg0NDlEMUIxN0I1RjZEREYzNEEzMjQ2NDBFMzA2NUQyNDI2MzFGNjYyMUE5MTQ4QTkwQTk2RjdEODk1NThCMUU2RkQzRkQzOEY1Qjk0OEZDMjlBNUFFNzU3NzZCMQorN0FBRUI3RjAKKzlDMkI0MDdBRUU3QjBDM0EzQjAwRTQ1NkY2CitFQ0U0RDI1RUE4ODhGRjIxMjQ3Q0E5RDk1NkUwMjZFMzNDMzYyMjMzQjE0RDQ3NDkzMkM3MTM5RjBGMTA4RjZENDc1NzI2MzNBNzhBNUE4NzRFNUE2OTg5RjEyQjk5RkE3Qzg5QUVEMTdENjIxNjZGMEQzNUUxN0IzODhGM0M4MTA2MkZGNkEwNThCMzhERjk4QTZFNDZDOENEQUFGODczNTZGMjNBOUUyRUNBMENBNTQ3CitGOEIyRDFGMQorODVDOUU1NDA1NTlDNDhFRjI5QjQ1MUVGREYKK0EyNTFFOUM0MkREMEUzRUJGOUJFMzBCNDQ5MDQ1RjcxNDdDNDZDMEQwQzk3MkE4QUVFQTZCRERCMkJFMkFCQzQ4NjlEMUM1ODFGQzFDNTU3MjQyMDIxRTJBQUIyMkQ1MEE3MTU5MjNFMjc5OTVBNTVDREExMUJDQTk1MTU2RjRENzFCOTFFRUMyQTNFREZCNUY4RkUyRDA1N0VBQTc2N0UwNzM4NzJEMjVFNzZDN0NCRjEyRkUyMkQKK0FFOUIzMkUxCisyQjU0MkVCQjM3QkFCNURBMjE5Q0YwNkE2RTM0CitERjA4NEVCQjI3NkQ0Q0REOTZBOUQ4RDFDNDc0NTg5MTEyQjZBOTczNThERDE0ODlCOTI0REMxM0JCOUEyQ0ExRDA3ODgzMjRBQkRFOTUxMkE2QzM3NDg0OUU2RTcwQ0E4NTVBRTFCRjI3OEY2MTRGMzhGMEM3RkZGQUJDODU3MzdERjQ5NEVCRUU0QzcyRDQ0OEM1MkQ0RDA1RkJENzAxQ0M0NzZFNjdBQkFGMDk4OUI3MDZFNjBFRkE5QTdGMzk0MUVFNkU2RkJGMUIxQTAxRUNFNDc1RjdFQkNFQThDMzlEQzQwQTI3NDlERUUxNjJENEI5ODcxMjNGQTQKK0RGRkIKKzBEMzE5MUU5M0JDMDI1RjlCQTZCMTJDRUJBOTZFQjFDODE4NDE2Q0EzRDEwOUFGQjE2Q0MzODNCNUFERkU4MEVBNTU1OUI5MDUzMkM1M0Q3MTBGODRDNUY4NDYyQjkKK0RENjQwM0Y1Cis3RjdCODlERjM3OUQ2MzNEMjQwOTc5OTE0NzhDCitENTg3RDA4NUREOThDOTk0MUREQTcwMkU2Q0JCQTJBQkRCRDgyMUNDQTA5MkRDRDc5REFCQUVBQTFDOUY1QzVFMjFEMjRGMTJFMEUxNjlEODQ4RTBDQzcwMDdCNjYxN0IwMjhBRDg4RjE3NEZDQzcyMjhFRkQxNzFDOTJEMDVCOThGQkNCOEZENkRGMjc5M0VGMjQ5RTZDMTg1ODA3NzJFN0NERDIyODk4QjE2MEZDMDYxRDBDREYwNERFMzEyNTBDRjk4MDI3MjE2MjE4MEExRjgwQjA3QUY0QQorOUFFMzVCNUIKKzFCOEQzMjJERkE2RThENkVFODIzQUY5RDQyCitFN0U5MkUzNTVDMkJBODdFNjhCREUyRjJGQ0U4OUVGQkMzQ0RBQjg3OTZEQTJDRjNCNjhERUMwRDRFRDQ3NjE2QUZCQ0RCQjE2RDRCQzQwRTYzNkYyODA2MUE2RTQ2RjdFNzBFNTM4NjU2QkRBODNERTRFRjQwOTFERTU3QjIwQkJGRUQzRjQzODk3MjMwMkVEOUNDQUM1RTY4QTgzMzVFCitFMTI0ODZFRgorRDM5RkQ2NDdENzQ0NjZENDI4NUU4QkYzN0MKK0ZCNEJFRDFDNDRGOTVCRUE3NjQwMTM1NjgwRDlBOEU4MUE1NDZBMjRFQjE2QTdBMEJBNTRGRjE5OUI3NEVDNzdDNzQ4MzI3OUFENTRDRUYzOTY5RjI0QTkyN0I0MjBCOERGMjI5RDMzMUJEMUFCNTBBOTUwNzBDMUU1Q0IwMTA3MDJDM0U0Rjk2MEY0NjYxRDk5NjgzN0REM0QyQTQxQTBBMDBFRDE5RkY5OTY2NUUxMjBFQjE4RkNBOTU4MjlCMzkxRDFDRAorREQyRDEzQTYKKzFCQ0QyNzZBMERGODYzOEU4OEY3NDJCRjZEQzAKKzc1RjdGOTI0MjA4REU5RDg0MDBCNEYxMDA1M0I0MTI1NTY2MTM1NTgyQzY1NzI4MDY5RDQ3MUY0QTI4MDUwMjdEOUU2NjBEMDU3RjkwNUEzMzI2NTM0M0JEQUZCRTMzQ0IxODVBNzdBMjU0QjM4NDMwMUU0QjE2NjRGQjFCODY1NzhFRDg5NzI2NDE2M0VBNTk5QjM4QUREOTQ0RkVDRkQ1OTA1OEM2OUYzODA1NUEyMjZEQjcyOTQzRDU1RDlFREQ4MTZBODY3QTAwOTMxMkI3QzRFMENGQTg4MUU0MURCOEE3NzZBRkNBODFFODc1RTcxNDEzMDRFMjhDNQorRDYxOQorRjFCODcyRDI5OEYzM0M2QzA4MUQ5RkNDOEI0MUNCNTg0RDE5NTI2Q0Y3NDEyN0RFNDVFQjk5REU2REM0QUY3NzVCMUEwMgorNDRGOEQ4RTQKKzI2OUZBMTNGNTJENUM2RENFQjc4QzFFNDQ5Cis4NTNGQTlCNjQwQzFFMkU2NzBCMzYyOTVGODQwQjNBQkYxODYyREUxRTk1NzEwNTkzN0Q2OEIwMjI3QkNFOUQyNjI4Q0JCQUYwQzc1MUNEQjE0MTdCQzk1NEFBOTIyNkI2OTlBMUNCNTFDNkMKK0I3OUQ2MkNGCitBMzkxQjAxNEZEOTA5Q0MyMTAyOTUxOEI0ODA0CiswRDQwQ0JGOURBMTExMkM2QzJGODk2RTgyOTU1MDIyQ0NBMTk0OEMwQ0E3RDZGMTdBOEZGQUIyOTdFREExMjYxOUUzODE0MEZBRTczNkNBMzJCOENBNTNEODc1QzJDQzQzMkM5NDY3Q0UyQUU2MkFGNkExMTkzMDY0RTNBRTUwOUI4QzA2Q0I4QTM1QjJCNTMyQTI2RUVFODJDREVGMTY2MEVCRjVGNUY2REZGMDg5RTA4NUQ0QjcyN0Y5QURDNzk1RUE2NTFCQkY1MDA4NTQ2NTNGNjRGMDNFM0FCNDAzMjQ3MjY4NEU4NTBFQUYzRTQ0RTZGMEY1RjJCNEUKKzA3MEMKKzIxNUQwQjQ2NTk5RDNENzFCRjQ1RUExMTRBMkVBMTA3OUJCQUY0RjJFQkQ0QTVFRDRBQjA0RUJCN0VDRkE4CisxNjBGN0VCQQorMzE5NERFQzE0RUI5NjA4N0ZBQjI5MkRGNkM3NAorMkVCNkYwOUQ3REE2OTU4MjExQUM2MkE3ODgyRThBQjk0NUYxMzNDN0JCQzY1NTIwRDlENUFBNERGQkMzMUU0MzI1MDgyOUU0N0M1RTlGMUQwNTY2ODNDODQyNzNENTA3MTlGQUM4RDVCMjJCOEE1QTkwRjU2RkM5QjEzOTBDNDc0MDU4MzJBQ0Y5MUMwQTVDNUM5RDc2NjQ0QjEyNkU1MEQ1ODgzREFBNEY5NjA4MzA5NzdENkJCNkZCMjM2MEJDNzY0MURCRTJCNkFCNzk4NDBFNTRCMzU3CitDMzRDNUFBNworRjE2N0VFRDdDNDNEREU4RDg3QUY1OTYxOTYKKzM4QTkzRUM2OEExMEZCOTI2QTdBREU0RDNEMkI1MEVGQzJEOEU1OUUzM0FDNzI3NUFBNkJCOEIwRDdGNTY4RkY0QTIwQjg5NkFFMzhEMTRDQjM3NzI4MUE4RkEzRkUyNjNBNUM3QTA1Qzc3RjNGQUI0Q0FEMEE2OTk1ODZDQUU5RDUwRDFDMEZBNDhFCis3MTYyMTNFNgorOEM1RTE5MDcwMDI4Q0MwQzAyNzU5NDA0NDk0OAorNTdDQTlBNEUyQUIyMTlBMjlBQ0IwM0JEODJFRkVGRERGOTI0RjFBMTY3MjU3OThCOTI5ODMxQzFBQTE3OTE1QjY3RDVBNDY0NTlBRUM5RjEwM0Y1NTM0M0M1NkRENDk0Q0Q3ODZFQjc4Q0IwNkQ0RDJCQ0ExQzA1QTM4NzAzQjk3MDg3MEU1NzFFNzNEOUM1MDc0MURBM0VDQUE5RUI0RkE1MURBRTk2NUQwMzc4MkRFQUU2NDJGM0Q1QkVGRDgxNDZCQzUzQUE5NjZDNDZGRDNGQzY5OEJFMTU4RTFEQUVGMDQwODkxRTY5NEVCRgorMUE0RUQzM0EKKzlDMzU5MTIxNDUyNjIzODNDNkU1NjlBMUFGCis3Qjk5N0Y3MkMyNjRDMUNCQzJFODkyMDBGNzY0MEI4RjM5NDQ2M0RCNjJCQTU3MjY0QjhFMjU3QjJEOERCRjdEQ0IwNkNDRDY4QTNBNTM0OUJDQkQ1NDRBOTM2MTQwRjE1MDU3NEM0NEY5OEEzRjg5RjcwNTFDOUEyNjExOUQxM0E3QjU3MDIyNkQyQTAyMzBDQTAyOTE3MTY0NkE0MTE0RTY5N0U0ODhBOTEzNTQKKzJBQzExMTgyCisxODE1RDhFNjdEODEyNDU0MjFBQjZDMTIyNkEyCis1NTQ3QThDRURFN0RDMzZDRDYwRENEMEI0NTkwMDEyNTU2REY4QkNGMUJGMEYyM0U5MzdGNzY5Q0VBNzgzQUIzQ0UzMzFGNjdGRkQxODBBMzA1N0FCQjBGN0I1QkM0MkY5MEU4NDMxMTE4RUE2RkMwNDgxNzA1QjU2MUZDNENDNkMyNkIwMjczMUFGMzFERThGOUFCREU2M0RENjI2REU1NEU4NUE2REI2NDkxMkRBRTlGMUQ3MTRGMDhEOTkyMjEzN0E3OTFEMkZCOTI4QTQ4OEE0NUQwQUU0RjNFMzRCRUQwNkFDNURFMURCRjhDMzE0MjIzNkFCNgorMUY4MDc2QjYKKzkyQ0JENDFBMUNGQjk5MzA5MEU4OTM3Mjg4CitEQkM0Rjk2NkNBRDhDNThGQzYzM0Q5RjRCMzc0MDZBMDhGMkU1NDc5MTYxQjUwOTg4REYzNEE5REM5RUQ0MTA2NEI5MkNBMkRBNDREOUY2M0JERDRFODkxNzg5Q0M0OUUzRUZCOURDRTlFRjc4OUE5RUY4RkVFQjREMTg5NUIwRUVCRTZBRENERUYKK0UyODgzQzMwCitBNEMxNkE4RUY5Qjc0QjJGRjVGOTJEQTBCMQorQjNBMzRFOUIyQUFEQ0I5RkFCNkJERTFFNEJBQTFBQzU3RTI1Qzg5NDMwRkVCMzMwNjIzOUNBRkYyRTU0RDg4QzNDNzhGRjVFMjUxODU2NUQ5QjlENDdEMjJDQTUxOEEzRjYzNDg3MDI2NUY2N0FGNUIzOEI0MUVEQ0RCRjUwMjNFNkZFOUM0MjAwNjVFMkVFRjgxMERFMjg4NzQ0MUM2RDEyMzgxMUM2QzM2NDkyMzlBRjg4RThBNkJFNzZDNDZGMUM1QgorQTI3NjRBQzYKKzg0QjQ3RjBERTc3RTNBRjA4Qjc2QTk2QUNFCis2RkNCREQ2OTE4RjE1MjdDNDlFNEQxMkE5OThGNEIwREIwQUU2OTUwRjNGOUZENDVCRTNCRDUzRTU1QTExQjJCRTI1RTE5NjYzMTI2OEEwMTc1NTNFNDc3NUFGODY4NzEyMTU2NzZDQTQ1NkQ5OTA5RDU2NDA1RDg5NjdFMjQ5QTVDMzM5M0M0NkRGNEJGOEExQzJDNUU4N0M5QTI4NjUwNTE5QzQ3NEQ5RjdBQjMyQTU0CisxNzJDRTgxMgorOTEzOTM5NTQzRUY1RkQwQTY3QjBDNjlGMkJDMQorRkExMTE5MUE1MEVCNkRFMkRBOUQ3NkZEOUU5RTM5MjM5REZFQzcwQ0ZBQjc4MkU5MzdGNDc1Mzc3RDE4NDI5MzdFQjM4Qjg0MkNERjc5NjY3MUQyQkVCQ0REQkQxNjg0QzAwMzQyRjk1MkJDMzI5MURDMjFCMkQ3ODBDMUU3MDk2N0Y2RTBEMDU0NUZGQjNCRkEzM0ZFQzc3MTRBOUYzOEM5MkM4NTMzMzg0QkUyOTdGMDE3RkFDMDM0NzJBRDRBRjYzREY1OTQwNDg1RkI1OUZDNTBDQUIzNjkxRkQ2MDBEOUUyQkQ2NDY5NkNGQzJDRDk2MUE1RkREMjY3Cis2NjJCCis2NzNENzE0NTVDRjgwN0Q3NUQ4OTVGMENGRjhFCis0RjAzOTZDNAorMTY0OTRCOTUxRDUxQTcyQ0U0NjY1RTExOUQ1RAorRUVENDg3NUNEQTBFMDNEODA5RTNFM0M0NURFMEQ0NTZGQzY5QkI2QzY2NzY0Q0E5NkM3NDZBNDczQTI1RTZENkRDRjdBQUFCRkE2NkQ3MDAxOTY3MTQzOTNDQjczREI0NDMzREU0OEI5QzM3QjhCQTY4ODgzODhBNDIzQTBFRjNBRjI5NDY1OTYyM0JDNzc1MEI2NDc0QTRCQTc3QkQ4MjEwNEU2RkRCMUYzQ0E2OUMwQkJFNUE2MUQyRTdFMDIwNDlDQjhDNTQ3NDlBN0YxOUIxODc1Qjc5NUJCMDMxQUZBMzBGQzFBOUQyRDAzOEJDOUE5QzA1OUU5QkI1CiswQ0RECis4ODQ4MTk5MzgyQzM3MEMwMkMxNjM1NEM0NjVDQTU4MzA3NkFBQzMwRjJCMzgyNjY2RAorMTkwQTUzMDAKK0M3MUI3MjIwQjA0QkYwRTg0OUNFQkJGOTdBRTcKK0M2QzQ0MjU4RkQxNEZGQTEwNEZBMzM4NDZBOTdBNDlGMEQ3OUJGNjhFNUU0MjVEQTJBNkY4NTg3Qzc3QkYwNkJCQUYzRDIwMTRGNDdEQkYyQUFGOERCNENCRTY4Q0Q2MzVDRDc4MEUxRUJEOTQ0RjhGOTEwNDExNUIzMzYxMTQ2QTdBRjI0OUVDNEUzOTFFMzRGODgwOUJFOTk5NEQ1QkJCMEY0MjU0QUYxNTcxMzAxQkI1NkZBQkEzNkVENDQ1Qzc4NEFFNzYwMjk1QTMyMTZEOUFDNjA0MTBDODI1OUUzMzFEQ0QyNjEwRUU4RUVEODAxMjEyRkMwRkYyMgorMTJGNworNDg2ODVFMTIKK0E0OEZGNzcxMTQ5RjM5NEJENDIyNkY1NjhCCitBOEEzRTY3RTJGMDI4QjlGRTNDOTFERDZFRDcxMEVCRTlERkYwMUQyOEU0MDUxMkZEMjc0MjkwMDU2NjFFMEQxMkJDQjJCQ0U1MTlFOEVGQ0IwN0E2RjZDQTJFQUE0ODMwMDNCQkIwNkUyMDE3ODdBRUM1RjYxRTk5QjZCRUIKKzJCNkMyNDRDCitCM0Q5MkE5NEVFOTA5MTFGRjNFMDAwQjhDNAorRDA5RjRFOTlGRjYyMzJCNTBBRTE5RTNFNDI4MjY0QTdFMkRBNzlDMTBBMTAKK0FGMERCRDUxCis3M0FBMzg4NUE2RjdDNzg4QTlFMDcyQTBEQUMyCiswOEQxQjkzQTg3RjU1NjhGCisxRTYyQkE2MgorODdBQTlCQzY5M0I4MjA5NDI5NjVCOTNEODNBMzNCNzA3ODg2QUQ3NDM5MkQyMjBFQzU0MzJDMzkwNkJFMDNCNkU3NkEKKzUxM0E3OEEzQzM4REREMUQ2NkQxOTA1RTAxQ0FCNUM5RTM3MTBGMkRENEVFQTYwMjAzNTczQUUyNDY4NzYxRkE2Mzk4NzNBNjNBNjAKKzk1ODUzNkE1OTdBRDgxMTBERjE0NTc3NkE2OTA1NjMxQjEwRENCMkJGMzkzRDBCMkEzODFBQworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoYgorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGIKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hiIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NiBwdXQKK2R1cCAzIC9DMDA0OSBwdXQKK2R1cCA0IC9DMDA1MCBwdXQKK2R1cCA1IC9DMDA2NyBwdXQKK2R1cCA2IC9DMDA2OCBwdXQKK2R1cCA3IC9DMDA3MSBwdXQKK2R1cCA4IC9DMDA3MyBwdXQKK2R1cCA5IC9DMDA3NiBwdXQKK2R1cCAxMCAvQzAwODAgcHV0CitkdXAgMTEgL0MwMDgzIHB1dAorZHVwIDEyIC9DMDA4NCBwdXQKK2R1cCAxMyAvQzAwODUgcHV0CitkdXAgMTQgL0MwMDk3IHB1dAorZHVwIDE1IC9DMDA5OSBwdXQKK2R1cCAxNiAvQzAxMDEgcHV0CitkdXAgMTcgL0MwMTA1IHB1dAorZHVwIDE4IC9DMDEwOCBwdXQKK2R1cCAxOSAvQzAxMTAgcHV0CitkdXAgMjAgL0MwMTExIHB1dAorZHVwIDIxIC9DMDExNCBwdXQKK2R1cCAyMiAvQzAxMTUgcHV0CitkdXAgMjMgL0MwMTE2IHB1dAorZHVwIDI0IC9DMDEyMSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTAgLTIwOSA3NDUgNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY5QTcxMTc3M0IxRjA2MkVGRENFOTMxOThBNzY1RjhGNTVBCis2RTlGNjBCNDNBRDIxM0I2Rjk5Njc1RDQKK0FFOTc2RTIzMTkwMTJEQjk2QgorMzNDQjM3RkMKKzJBQjdDQjFBQTlFN0M2RDFBNjBFQ0MxMDM2Cis3ODE3M0E1RURCRkE3MUYxRUJEMEMwMzJDQ0QxMzhCNkQ0Q0U2NjgwMURDREZFQjZCRDgyMEExMUVEMzZEQworOEU0RDNDRkMKKzlCNzRENzM1NDNDNkU4QjJENDVCNzdCNkRBCis1NEI3QzNDRDE4OUQyMjA2QTE1MkQ2RUNEMENGNDA3NTRGNzNEQUNEMjhDNkZFRDlCQzI5OEU0MEM1QzIxREVBMjU1NjFCNDRGQTlEMjlFRDdBRkI3QTRFQkNFOTNCQzEzOTY5QjgyMDVEMjJBRTM2Mjk1Mzg3REYKK0E4RjFCODY5Cis5Njg4RDg2MjUzOTdENTZCQUI5ODg1NDcyNQorODcyODRDQUVEQUMzRTQ3MzNGNDA0REFFQUI4MzAwQTlBREEwMUUxNzQ5Qzg3QURGQUJFNDM2QjA4QzI0QUQ1QThDMzQzNUFFRjU1MkZGRjc4NjIxODZBMDIyQTJBMTJBRTNBNUFENzdCODY1QkY1RUUzRTE2MTI3RTVFNDJDQUJGMzlFN0VCRTA3QjNGQjM2MDQ0MkQxOTkzNDU2MDAyNTNGQzU5NTdDCiswNDYwQjBCMworNEQ2M0NBNUYwNjU2QUY3NkU5RjczQjU5QjM4NAorQjJFNTkyQjBBNjc4N0Y5MzQyNjY2NzE5NjNBNjc3MzA5MkZGQkI0ODk2MzVGRTgxQ0Y1QjkwQTJDM0QxMDdBMDIzNTU3NkM3RDE1MEIzQUI1QkJENTdFNDI0RDkxNDc2RDIxNUNFNDM2REJCRkMwN0YzNDM5NUQzNTM0RUJDNjAzODM1NTA4REZERkJEMUM4RjMxNUQ4MkExMUNCMzVFNjIzNzdBNkU3MjdEQjVGRjU4NjM4ODg1NkZGNDQ4MzI1REZCNjJFQTM5QTdGM0FCRAorQ0U2MjcyMjMKKzYwNDJCRjNCQzM5Q0RFRDEzRDk4RjU3RUVGCis0MEU2NkY5NUM0NjUyNTI1OEQ2M0QxOTVCNEFBOTA5QjlCQjNCNzAxMEVEN0NCQkREOUJDNzNENjJCNzkwRDJBOTY4QjEwOTcxNjQxMTFBNDk5NDRENjAyQThEQ0ExNDJCMkI2QjY0NDI3NjFGMjlENUQ4NUI4NzU0RTc2MzREMTA0NzZDQjY2NjQ2RUY1QTRGRDMxRTAxQTIyRUVCODZGN0QzNjI2OTlCRENGNEQKK0U5QzkxMzU1CitBNUY1QTU1NTIzRTY0MUVDODkxNEIwRjM1OTRGCitBMDg5QkFGRjZEQkY1OTMyOEVBMUNCODU1Q0I0MUVCMDJDQzQ4N0YwNDJCMUZFMDgwRDY4QkVDMzQ4ODIxODlGQzRCRDdEQjJBMTdDQjNGMUVCQkUxRkY3QkE2MjY4QTZFNTFFNjBDNzVBQUY4QUVGM0JCQkYxMjQyOTBEOUMwNjlGQjgwRTA3MjcwRDZBRjU4QjZBQ0U1OTFFNUE1NEFEMDk3QjVGNUFEN0EyNzNDMzQ5RjZCMjg5NjFENzg0N0E4NjEwNzhFNjg2QTFGM0UwRkJFNkE1NzYyREI3NTY1RTBBRjU3MTA4NzU1RTQxCis5NjQ0REYwMQorRjRDMzE0QjBEQjE0QTJCMUQwNzhDM0U2Q0UKKzU4RDkzOTdEMkQxNjlFNzQxRkNDNUExNDA1NTc4RDQ4QTUyMDVDQjhEOUQyNjRFNTJDOEFBODU5NjMyOEEzQzc0RUMyQ0IwRTI0RkNGODg1MEQ4RjRERjY1MEZFQUE0MEU4MDQ3MTdGRTI2NDdGNDkxNEMzM0I4Nzk5NjMKK0FDRkI1QTlDCis2RUJCMTUyNDBGMDJCREE5REI3QzFCMTQyOQorNzlEODBEQUYzRjg0OTgzODI0MzMyMjE1OEZBMTI1NTM1QjJGN0VBQTUwMjlCOTYzRTVCOENFRjA0REJEMzE3N0M5NUY5ODlFMzExMzZDOEE5RjgxMzYxQzFGQzExQTk5NDVEQ0FDRTE2NURDOTZEMTMxMzEzQ0UyNEQzNkRGRERCQTY2Q0VGQUU5M0E2NUQ2QjgKKzlCQTRCNTJCCis4RTZEQTcyNUU4QTNDN0ExNUNGMEUxRTk4MDlDCitFOUJFRjY0MzZCOTc2NUI2QUUxNDg5OEIxNjM2RDk0MEMzNUE1N0U1MUFBMDY0NjE0OERFM0U3MjM1M0ZDOTI5MjQ0QjJDQTBBQUFCNzM5ODQ2NTMzQ0FCN0Y3ODk3NzdEODAzMDFDRDMxQjRFOTk0REI1MzNEQ0RBNUQ5NkEzREIzM0YyNERCQkFBM0Q1OEVFOTE3NjE2N0JBMjc4MkM5NzEzQjYwNTEyNTY1Q0M2NDMzMEQwQkQ3RDIyRjUwQ0I5QUU3MENDMworNDVEMzI4M0EKKzdEMDVDRkM5QTY5MUUyRTJFQ0JBNUFCQTFFQjUKK0M5MDFERUYzMjExRTc1NzU1ODg2RkQwRThCQzNGRUI1MTc3NTk1RTQ1MDBBMzA4Q0UzMEEwMkUwMDk3M0EwQTMyRUE3ODM0MEY3NjkwQTBFNDA5RDQ5OThCQjRCQkU2RjAzNTk4RDkxREZCNEQzQjFGOTQ5NkFGOTgzMzZCMThDQzRBNjAzOTA3Mjk0MTlFQTI3MDc5MjM0QkU1OEEwOTY5RjdEOTQ3QjgxREU1MUJCMjMwQ0JGOTMwQzlFQjlEN0IwNUQyQkUzNjM4OEVEQ0QxNzVGQkM1Mzk0QUM1QjU2QUQ2NzIzNkMyRkYwQzFFMTlDNDFENzhBOUNENQorQkNCRAorQjBFQzgyRTEKKzM2OEU0QzYxNDVFNDBBOTYzMjRFOEVCRkUxCiszQkFBNzBDQkQzQkIyMUY0NkYxMzdGM0U4MDEwRDk3RTk3RjA3NkJDNTcxQjQ5NzY1OENGNkI2REYwOENENDE1RkIwMDNDNkFBNDUzQjdGQzRCRTRENjMzM0VDODMzQUUyRDgzNTRGRTc3QjIwMTY4MEI5MTI1QjRGREY0NjhFRDRERTNEMUZERUM3NTY0RUFDQgorMjlBOTlFNzkKKzhBN0U4OEIyOUE3Rjg5NzExMkJDNzUyQTdDMTgKKzM5QjUwNzVDMjlENEFBNzU3NTVCODRGN0Y0RTZDRkNDNkE4QjUzM0M4NUVGMkI2QjBFOTlBOEU4MUIzMzVEMzM3RDk1NzY0RDIxMDhEQzVDNEJEMjVEQTA1MkQwNzI2M0Y3MTlDQ0Y5RjBERkRCMzVERDEyQjdFQkI3NDY4MjRFOTFFQzNDOTczMEI3ODAwOUJFMDgzMzQxRUM5QzgzNkRDMkNFNkY5Nzg0MDI1MkUzRTI0MzY3RDJCNkU1MEU3NkU1MzI5NjgxNEY0NjYxCis5N0UxMjg4MworNzQ1NEQyMTlGRkJCRkVEQTFDQzk2QTdEMTJBMQorNkUzNEFEOTA3NjQwNTcwQ0ZBMTExQjgwMUMzREJDRTI5OEQyNDM0MTA4RDQ1QkNERTRERkY2MEFEN0UyMjI3QjcwNThDMDlFMTdBOUU4MTRGRjZBNDEyQTUzMUUyRjRBOTIyNTNFQzdGNTY3NkQ0RUI1RTA0QzIzMjNCNkQ5RkM1M0Y1NTcwRkI5RTgxNUIwRjRFQjE1NjgzNjM0MjUxMzU1M0ZDNUIwRUFBQjdENjg4REU2MENGM0NDN0I4QjZEQkIwNjg4NDAyMDZFNDk5NTVCMTg5MkNCN0Q4MjdDMzhEM0E5NEIzMEY5QjE5MDRBQUE1Rjk3MDBEMkVCCis1MTVBCiswNDQ2MThERgorQUQxMjRCOTYKKzA0NEE2MzA4QzU2MTJDOEZGQjlEOTYzRDc2Cis5QTk1N0M4QUIyMDkyRDAzMDhEMEUxODNEODQxOTM5QjUyM0Y1NzVCNEYxNDgyOUFFRjA1QzQ5NzdGQjhEMzE0MDhDRDZENzk4NTIyODEyQTA3QTc2OTk0NTc5Nzg5NDg4NUU4REFFQzIwNTYxMTlEMEJBREQ1QTFDQkNCRUVEM0FFMUFEREM0QjZBRkNGNEY5NTZGNDA3QzE5MzBFREQxODY5NAorODdCMDhCRkIKK0Y1QkFFMkFGNEZBMDNCQzJBODlCMjkzNUU2Cis2RTE4QTc4M0E4MjQzOTREMDQ3NUJBMkZBM0ZFRUM0NDI2ODVFMTBDMTJFNEE5MzEzMkE0RDQyNUYyNEFBQzQ4RTgzNTFCMEY0NjczMTlBQTJCMDAzRUUzM0Q2QTg0ODcyMTUzODNGNTcyNzREQ0NBQkNCMjA0NjFDNTFDOTVDRTk3RThDOTkwQzgwRkE1RTY0QUIzMjIwMkExMDgwRjE5MTU5QzcxMDk2NzY5QjEwQ0JEMjlBQ0FCCitFQTBDMEE2OQorQUY5QjMxOUNDQUM2MzlEMUU0QTBCODEwQzAKK0Q4MjUzQjI0RTM0MTJEODE1NERBNUY0RDFDQThFMDEwQjkxM0RGMzE0RjEwMzkxQkYzMUE4MjY3QTJEMDlGMTM0OTY1NkJEMjM1Mzg3MDZCQjExQUU0RjVBMUY2MDAzOTM5NkJGODE3RjI2ODVDRDFDMDJCQkMxNUQxNzU3NzExM0Y5OTRFRkUyMUMzQkJDOTJFQ0UxRUQyMjUyMgorNTZCNDMyNUEKK0YzMkJCNkE3MEQwNjUyMzI0QjJDNzIwQURCCitDMjNFRTIwMkUyOTZGRjM5OEMzMDMxQzFERDZBNUREREQ5ODUxRjRBQzFDNTcyNUNBMDlGQ0Y2MDI5RjcxRDBCNzcxRDMxOTBCQ0M4REFDMUEwQzcyODM3MEI4NjlFRTJENDdGQzI2RAorOEI1RDJFOTMKKzYzNDE2RDA5NDY0QTc2MERCNENFREUwRkY4MkEKKzQzRDY0RjQ2MjFBOTk0MEVBOERBRUM0NjVCRTlDQjBGMzdFN0MxN0ZEODc2OEIxMkE4MzEyOTgwNDk3N0MyOTA0Q0ZBNEUzRDBGRkQyRUUwOTg3RjM4QjczQ0JDODEzNTJDNDY5QjBGOUM4OUYyQjlFMTY0MzI1Qzg2MjVEOEVBNjM0MDVFMTJENTZGMUYxQTkyNTExNzUxRjgxQTRGMjYzNDZCREQ0MDhBRDBERkQ3REFEOUM5MTJDRTdCRERGNzM4Nzk1MzM3RjU0Q0YyCitDOEMyQzJBMworREM1MzBFRTNCOEQ4QTE4NzI5QjQwM0ZEQTAKKzI2MTk4MTg2Q0ZBRjQ2ODY2NUQ0NDA4NkYyQ0Y3QUM2RTcwNEZEODU3MkJBMDA0MzVBRDhBMjNCMTA2MjNCM0EyOTYzREU5REYwMUU0QjdGMkZDNDMzOUY3ODg5ODlCQUMxQzRBRDNDQjQ5MUFDNjE2MUVFODYwMzE0M0M4RjdDMzBCMEREN0QwRDAyCitBNzE0MjdBRgorOTg3QTY2RDg0MzFEMTVEODUyMEJDRjMxRTMKK0NCRTkyODIyODhCRDlCNDEzMzZDRUM4NUY2QjdGMDYwMzAwRTUyRjhDRENBRTREMThBQ0Y0NTMzMURBRTA5REQwMDQzQjY4OEMyQkMxNDhFMDVGMzI2MTA1MDhGQ0YyRkE3RkU0RjE4RThDRjc1NzZDMEU0QjAyNjY5OTk3N0VDQ0M5NDUxM0VDMzIzNkU2NERGREY1RDIyRDA5NjE4OUFCOTJFNDg3Q0NENEY4REQwM0IKKzgwMTc3ODc3CiszOEY1MkE2RUM2OEU1MTIyMkEwNjc1RTQ2NDYwCitGNkRCQUFCM0I5NEM1NTg2RTk5NzI0MDU3REVBNzc0MTM2NjI1QkE4RDBDQTc3MjQ1Mjc1N0IxNDg4RTFEQkE5NTg4RUZFMjcyNkQxRjE1OUYwOTAyNEE5MkFCQjg3NzBENERBQjEyMTY2MDhCRTdCMDhCQzBDRTlGMTExQ0JBOUM2NTQwRDJDNkU0NUI0NkFBMkMyNzIwNTVBMDdENzBFNTVFQUI3RTU3MEIyRDI3NUJBRUU2MUQwNzREMTZGNjRFNzhDMzZGQ0FFMzM5OTZFRjU1MEJBMzBFOUYzMTk3NTlCRUQ4OTVFNzk5MDQ3OUYxQQorMzkzNDYzNjYKKzJFMzA0QTk0Q0FBNEVCM0MwQTQzODcwNTI3Cis5OTQ2QjNBRDA4Q0I5RTlCRUI2N0FCRTMwQjhCQTQ1OUYxRjczNDNERDE0NzZBQUIzQzFGRURCQ0ZFMUM1REU2ODdFMzEzMUFBOENDMzZGM0ExQTE2RTQxNzRCNTJCQjdCRERGRjc3MDJGQTY5MDE1NDQ5RTJFRTYyMTcyQUEyMjRCMUY3M0YyCitEREM4MEZBQQorQTU2MTZCODZBRjFBRTU3NzU1MEEwMjE5RDQ4RAorNzQ3MDdBM0Y2QTdENDdDMTRBMTczMDUxNjA0RTkzNkNCQkMyQkJFMzJENkM0NjEwNDFBNDEyOEUwQjI4RTc4Q0VEOTJDMkRGNjFFNTQwRERDNkU1MTNBNUM2NjJBMTk5OTM3OTJBREE0OTk1RTBBMjg3NUE4REVEMDU1NDg3NzQ0QjBBMzgzMjlDQUE3RkM3NDg0MkRCMERBN0FFRjVFREUwMDNFODUyMzUyNUM4NTgxRTAxRjJDNjMxQ0QwNDY3RkI5QTE1MEIwOEQzQjQyRUVBMzc1NjgwMDVCNzg3QzJEQzRGOTY0N0E5MTQ2Njc5NDgzMEI2NzFDMEM0CitGQjIwCis1NworRTNCM0UyMEYKKzQ4RDEyMkQ3RTUxOUE0NDcwNDEwNzYyNDNFODkKKzhGMjQ0MkFGMDVEMTA3NzAKK0ZBQzEwN0RDCis3MzFFN0VERjFCQUIyM0Q5RUQxOTdGQzkyNjk4NkMyNDhBQzUzRjEzOENGNjUxM0YxQkUzQjRCMjkwRTgwRjJDMDFGOAorMkNFRUFGRkZFM0JEMTMwMzRCOEYxNjIxNzNDQjQzNTEzMTA4RkRDNzFBMDZEOTM1NEY3QjA5QkY4QzM1MDZBQjlCMEEyODQ1Q0M4QQorMUE3OEY4NTFBMDNGOEU2QTBFMEU1ODk5NDVFQThBMEUyNUQ2MUZDMUU5M0U4MTdCNjY0RThCCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyYiAxMi4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTRiIDE0LjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTYyNDMyMmYyNDMwMjUwZDAxMGUwMTBmMjQyZDIyMjcyYzIwMzAyYTAxMjUyZTMwMDExNTI0MjAzMTMzMzAyODJkMjYwMTE2MjQzMjM1MmUzMDJhMDExOD4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyNDMwMjUyZTMwMmMyMDJkMjIyND4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MGIwYT4gOTM0NiAxMzMwMCAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI4MCAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjgwIDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyODAgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjgwIDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxNGIgU0YKKzwwYjEwMGYxNzExMTQxMz4gMTI3MSAxNDU4IDAgMjA1NSAtMSBzCis8MDAwMzA0MDIwMDA3MTIxNDE2MTYwZTE1MTg+IDIwNTUgMTQ1OCAyIDM0MjcgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDExMTQxODEzPiAxNTg5IDIwODYgMCAyMTA1IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA2PiAzMTc3IDIwODYgMCAzMzMzIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjAzMjIwPiAzMzMzIDIwODYgMCAzNjEyIC0xIHMKKzwwMD4gMzYxMiAyMDg2IDEgMzY1MCAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDA5PiAzNjUwIDIwODYgMCAzNzg1IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MjgyZDJhMDA+IDM3ODUgMjA4NiAxIDQxMDcgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYT4gNDEwNyAyMDg2IDAgNDIzOSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMwMmUzNDI4MjMyNDMwMDA+IDQyMzUgMjA4NiAxIDQ5MjYgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwOD4gNDkyNiAyMDg2IDAgNTAwOCAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDJkMzIyNDMwMjUyMDIyMjQwNzAwMWIyNzI4MzEwMDI4MzEwMDIwMDAzMTMyMjAyZDIzMjAzMDIzMjgzODI0MjMwMDE0MjgyZDJhMDYxND4gNTAwOCAyMDg2IDUgODUyNyAwIHMKKzwyNDM0MjQyYj4gODUzMSAyMDg2IDAgODg5NSAtMSBzCis8MGU+IDMxNzcgMjMzMCAwIDMzNDAgLTEgcworPDIyMjIyNDMxMzE+IDMzMzYgMjMzMCAwIDM3ODkgLTEgcworPDAwMDMxND4gMzc4OSAyMzMwIDEgNDA0MCAwIHMKKzwyNDM0MjQyYjAwMGEwMDJlMjUwMDMyMjcyNDAwMTcxYTEzPiA0MDQ0IDIzMzAgNCA1NDk1IDAgcworPDAwMTk+IDU0OTUgMjMzMCAxIDU2OTEgMCBzCis8MjQyNTI0MzAyNDJkMjIyNDAwMTUyZTIzMjQyYjA0MDAwZTE4MTMwNzAwMWIyNzI4MzEwMDI4MmQzMjI0MzAyNTIwMjIyND4gNTY4MyAyMzMwIDQgODg5NSAwIHMKKzwyODMxPiAzMTc3IDI1NzUgMCAzMzE2IC0xIHMKKzwwMDIzMjgzMTIyMzMzMTMxMjQyMzAwMjgyZDAwMmMyMDJkMzcwMDIxMmUyZTJhMzEwMDJlMmQwMDFhMzIzMDI0MjAyYzMxMDAyZjMwMmUyNjMwMjAyYzJjMjgyZDI2MDcwMDFiMjcyND4gMzMxNiAyNTc1IDggODMzNCAwIHMKKzwwMDExMTQxODEzPiA4MzM0IDI1NzUgMSA4ODk1IDAgcworPDFkPiAzMTc3IDI4MjAgMCAzMzM5IC0xIHMKKzwyNDMwMzEyODJlMmQ+IDMzMTYgMjgyMCAwIDM4NzMgLTEgcworPDAwMGEwMDE5PiAzODczIDI4MjAgMiA0MjU0IDAgcworPDI0MjUyNDMwMjQyZDIyMjQ+IDQyNDYgMjgyMCAwIDUwMjYgLTEgcworPDAwMjIyMDJkMDAyMTI0MDAzMDI0MzIzMDI4MjQzNDI0MjMwMDM0MjgyMDAwMjAyZDJlMmQzNzJjMmUzMzMxMDAxMjFiMTgwMDI1MzAyZTJjPiA1MDI2IDI4MjAgNyA4ODk1IDAgcworPDIyMmUyYjA3MjcyZjA3MjIyZTJjMDc+IDMxNzcgMzA2NSAwIDQyMTggLTEgcworPDFiMTAxOD4gMTU4OSAzNDEyIDAgMjAwNiAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYz4gMzE3NyAzNDEyIDAgMzMxMSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMwMjAyZDMxMmMyODMxMzEyODJlMmQ+IDMyODQgMzQxMiAwIDQzNTEgLTEgcworPDAwPiA0MzUxIDM0MTIgMSA0NDMyIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDU+IDQ0MzIgMzQxMiAwIDQ1ODAgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyZTJkMzIzMDJlMmIwMD4gNDU4MCAzNDEyIDEgNTIxNyAwIHMKK3dzdDpkdXRjaDEyYiBTRgorPDBhPiA1MjE3IDM0MTIgMCA1MzQ5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MzAyZTMyMmUyMjJlMmIwNzAwMWIyNzI4MzEwMDIzMjQyNTI4MmQyNDMxPiA1MzQ1IDM0MTIgMiA3MjU0IDAgcworPDAwMjAwMDMwMjQyYjI4MjAyMTJiMjQwNTAwMjEzNzMyMjQwNj4gNzI1NCAzNDEyIDMgODg5NSAwIHMKKzwzMTMyMzAyNDIwMmM+IDMxNzcgMzY1NyAwIDM3OTIgLTEgcworPDAwMmYzMDJlMzIyZTIyMmUyYjAwMjUyZTMwMDAyNDM2MjIyNzIwMmQyNjI4MmQyNjAwMjgyZDI1MmUzMDJjMjAzMjI4MmUyZDAwMjEyNDMyMzUyNDI0MmQwMDMyMzUyZTAwMjcyZTMxMzIzMTA3PiAzNzkyIDM2NTcgNyA4ODgzIDAgcworPDFjMTExOD4gMTU4OSA0MDAzIDAgMjA2MiAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwZD4gMzE3NyA0MDAzIDAgMzMzMiAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMxMjQzMD4gMzMzMiA0MDAzIDAgMzU5OSAtMSBzCis8MDA+IDM1OTkgNDAwMyAxIDM2NTcgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwNj4gMzY1NyA0MDAzIDAgMzgxMyAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDIwMzIyMDI2MzAyMDJjMDA+IDM4MTMgNDAwMyAxIDQ2MTMgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYT4gNDYxMyA0MDAzIDAgNDc0NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMwMmUzMjJlMjIyZTJiMDc+IDQ3NDEgNDAwMyAwIDU0NDMgLTEgcworPDAwMWIyNzI4MzEwMDIzMjQyNTI4MmQyNDMxMDAyMDJkMDAzMzJkMzAyNDJiMjgyMDIxMmIyNDA1MDAyYzI0MzEzMTIwMjYyNDA2PiA1NDQzIDQwMDMgNSA4ODk1IDAgcworPDJlMzAyODI0MmQzMjI0MjM+IDMxNzcgNDI0OCAwIDM5NDMgLTEgcworPDAwMmYzMDJlMzIyZTIyMmUyYjAwMjUyZTMwMDAyNDM2MjIyNzIwMmQyNjI4MmQyNjAwMjgyZDI1MmUzMDJjMjAzMjI4MmUyZDAwMjEyNDMyMzUyNDI0MmQwMDMyMzUyZTAwMjcyZTMxMzIzMTA3PiAzOTQzIDQyNDggNyA4ODk1IDAgcworPDFiMTQxMz4gMTU4OSA0NTk1IDAgMTk0NSAtMSBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYz4gMzE3NyA0NTk1IDAgMzMxMSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMwMjAyZDMxMmYyZTMwMzI+IDMyODQgNDU5NSAwIDQwNDkgLTEgcworPDAwPiA0MDQ5IDQ1OTUgMSA0MDkyIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDk+IDQwOTIgNDU5NSAwIDQyMjcgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyMDM3MjQzMDAwPiA0MjMxIDQ1OTUgMSA0NjYwIDAgcword3N0OmR1dGNoMTJiIFNGCis8MDg+IDQ2NjAgNDU5NSAwIDQ3NDIgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyZDMyMjQzMDI1MjAyMjI0MDcwMDFiMjcyODMxMDAyODMxMDAyMDAwMzEzMjIwMmQyMzIwMzAyMzI4MzgyNDIzMDAxYj4gNDc0MiA0NTk1IDUgNzY5MiAwIHMKKzwzMDIwMmQzMTJmMmUzMDMyMDAyYjI0MzQyNDJiPiA3NjY1IDQ1OTUgMSA4ODk1IDAgcworPDAzMTQ+IDMxNzcgNDgzOSAwIDMzOTQgLTEgcworPDI0MzQyNDJiPiAzMzk4IDQ4MzkgMCAzNzYyIC0xIHMKKzwwMDBjMDAyZTI1MDAzMjI3MjQwMDE3MWExMzAwMTk+IDM3NjIgNDgzOSA1IDUwNjYgMCBzCis8MjQyNTI0MzAyNDJkMjIyNDAwMTUyZTIzMjQyYjA0MDAwZTE4MTMwNzAwMWIyNzI4MzEwMDI4MmQzMjI0MzAyNTIwMjIyNDAwMjIyMDJkPiA1MDU4IDQ4MzkgNSA4NjQwIDAgcworPDAwMjEyND4gODY0MCA0ODM5IDEgODg5NSAwIHMKKzwzMzMxMjQyMz4gMzE3NyA1MDg0IDAgMzU5NSAtMSBzCis8MDAyODJkMDAyMjJlMmQyOTMzMmQyMjMyMjgyZTJkMDAzNTI4MzIyNzAwMmMyMDJkMzcwMDIzMjgyNTI1MjQzMDI0MmQzMjAwMzIzMDIwMmQzMTJmMmUzMDMyMDAyZjMwMmUzMjJlMjIyZTJiMzEwNTAwMjgyZD4gMzU5NSA1MDg0IDggODgyNSAwIHMKKzwzOT4gODgyNSA1MDg0IDAgODg5NSAtMSBzCis8MjIyYjMzMjMyODJkMjY+IDMxNzcgNTMyOSAwIDM4MzcgLTEgcworPDAwMWIxMDE4PiAzODM3IDUzMjkgMSA0MzA1IDAgcworPDA1MDAyMDJkMjMwMDMyMjcyNDAwMTcxYTEzMDAxYj4gNDI3MCA1MzI5IDQgNTY2MiAwIHMKKzwzMDIwMmQzMTJmMmUzMDMyMzEwMDAzMWIxODA5MDAzMjI3MzAyZTMzMjYyNzAwMWIxODBjMDQwNzAwMTcyNTMyMjQyZD4gNTYzNSA1MzI5IDQgODg5NSAwIHMKKzwyNTJlMzMyZDIzPiAzMTc3IDU1NzQgMCAzNzExIC0xIHMKKzwwMDI4MmQwMDFhMzIzMDI0MjAyYzMxMDAyODJjMmYyYjI0MmMyNDJkMzIyMDMyMjgyZTJkMzEwNz4gMzcxMSA1NTc0IDMgNjM0OCAwIHMKKzwxZTFiMTM+IDE1ODkgNTkyMSAwIDE5NzIgLTEgcworPDFlMDgxNzJmMjQyZD4gMzE3NyA1OTIxIDAgMzkwNyAtMSBzCis8MDAxYj4gMzkwNyA1OTIxIDEgNDA5NyAwIHMKKzwzMDIwMmQzMTJmMmUzMDMyMDAxMzJkMzIyNDMwMjUyMDIyMjQwNzAwMWIyNzI4MzEwMDI4MzEwMDIwMDAxYjE0MTMwNjJiMjgyYTI0MDAwMzM0MjQzMDM3MDAxYjE0MTMwNjJiMjgyYTI0PiA0MDcwIDU5MjEgNyA4ODk1IDAgcworPDIwMjIzMjMzMjAyYjJiMzcwND4gMzE3NyA2MTY1IDAgMzk1NyAtMSBzCis8MDAxYj4gMzk1NyA2MTY1IDEgNDE3OCAwIHMKKzwzMDIwMmQzMTJmMmUzMDMyMDAyYjI0MzQyNDJiMDAwZTE4MTMwNzAwMWIyNzI0MDAyMzI0MjUyODJkMjgzMjI4MmUyZDAwMmUyNTAwMWUxYjEzMDAyODMxMDAyYzIwMjgyZD4gNDE1MSA2MTY1IDggODgyNSAwIHMKKzwzOT4gODgyNSA2MTY1IDAgODg5NSAtMSBzCis8MzIyMDI4MmQyNDIzPiAzMTc3IDY0MTAgMCAzNzQ2IC0xIHMKKzwwMDIxMzcwMDFlMDgxNzJmMjQyZDA3PiAzNzQ2IDY0MTAgMiA0ODQzIDAgcworPDEzMTg+IDE1ODkgNjc1NyAwIDE3OTggLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDg+IDMxNzcgNjc1NyAwIDMyNTkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwyZDMyMjQzMDJkMjQzMj4gMzI1OSA2NzU3IDAgMzkyMCAtMSBzCis8MDA+IDM5MjAgNjc1NyAxIDM5NTMgMCBzCit3c3Q6ZHV0Y2gxMmIgU0YKKzwwYT4gMzk1MyA2NzU3IDAgNDA4NSAtMSBzCit3c3Q6ZHV0Y2gxMiBTRgorPDMwMmUzMjJlMjIyZTJiMDcwMDFiMjcyODMxMDAyZjMwMmUzMjJlMjIyZTJiMDAyODMxMDAzMjI3MjQwMDFmMWYyNjJiMzMyNDAyMDAyMTI0MzIzNTI0MjQyZDAwMWIxMDE4MDgxYzExMTg+IDQwODEgNjc1NyA3IDg4OTUgMCBzCis8MjAyZDIzPiAzMTc3IDcwMDIgMCAzNTE0IC0xIHMKKzwwMDMyMjcyNDAwMTQyODJkMmEwNjE0PiAzNTE0IDcwMDIgMiA0NjA3IDAgcworPDI0MzQyNDJiMDcwMDEzMzIwMDJmMzAyZTM0MjgyMzI0MzEwMDMyMjcyNDAwMzEyNDMwMzQyODIyMjQzMTAwMmUyNTAwMzAyZTMzMzIyODJkMjYwMDIwMmQyMzAwMmYyMDIyMmE+IDQ2MTEgNzAwMiA4IDg4MjUgMCBzCis8Mzk+IDg4MjUgNzAwMiAwIDg4OTUgLTEgcworPDI0MzI+IDMxNzcgNzI0NyAwIDMzNTEgLTEgcworPDAwMzEyNDI2MmMyNDJkMzIyMDMyMjgyZTJkMDAyMDJkMjMwMDMwMjQyMDMxMzEyNDJjMjEyYjM3MDAzMjJlMDAyNDM2MmYyZTMwMzIwMDMyMjcyNDAwMjgyYjJiMzMzMTI4MmUyZDAwMmUyNTAwMjAwMDMxMjgyZDI2MmIyND4gMzM1MSA3MjQ3IDEwIDg4OTUgMCBzCis8MjcyZTJjMmUyNjI0MmQyZTMzMzE+IDMxNzcgNzQ5MiAwIDQzMzYgLTEgcworPDAwMmQyNDMyMzUyZTMwMmEwMDMyMmUwMDMyMjcyNDAwMjcyODI2MjcyNDMwMDAyZjMwMmUzMjJlMjIyZTJiMzEwNz4gNDMzNiA3NDkyIDUgNzI5NCAwIHMKK0dSCitlb3AKKyUlUGFnZVRyYWlsZXIKKyUlUGFnZVJlc291cmNlczogZm9udCBIZWx2ZXRpY2EKKyUlUGFnZVByb2Nlc3NDb2xvcnM6IEJsYWNrCislJVBhZ2VDdXN0b21Db2xvcnM6CislJVBhZ2U6ICgzMykgMzMKKyUlUGFnZVJlc291cmNlczogKGF0ZW5kKQorJSVQYWdlUHJvY2Vzc0NvbG9yczogKGF0ZW5kKQorJSVQYWdlQ3VzdG9tQ29sb3JzOiAoYXRlbmQpCislJUJlZ2luUGFnZVNldHVwCitib3AKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoCislIUZvbnRUeXBlMS0xLjA6IFBTT3dzdGR1dGNoCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDAzMyBwdXQKK2R1cCAzIC9DMDA0NCBwdXQKK2R1cCA0IC9DMDA0NSBwdXQKK2R1cCA1IC9DMDA0NiBwdXQKK2R1cCA2IC9DMDA1MSBwdXQKK2R1cCA3IC9DMDA1OCBwdXQKK2R1cCA4IC9DMDA2NSBwdXQKK2R1cCA5IC9DMDA2NiBwdXQKK2R1cCAxMCAvQzAwNzAgcHV0CitkdXAgMTEgL0MwMDczIHB1dAorZHVwIDEyIC9DMDA3NiBwdXQKK2R1cCAxMyAvQzAwNzcgcHV0CitkdXAgMTQgL0MwMDc4IHB1dAorZHVwIDE1IC9DMDA4MCBwdXQKK2R1cCAxNiAvQzAwODIgcHV0CitkdXAgMTcgL0MwMDg0IHB1dAorZHVwIDE4IC9DMDA4NSBwdXQKK2R1cCAxOSAvQzAwODcgcHV0CitkdXAgMjAgL0MwMDk3IHB1dAorZHVwIDIxIC9DMDA5OCBwdXQKK2R1cCAyMiAvQzAwOTkgcHV0CitkdXAgMjMgL0MwMTAwIHB1dAorZHVwIDI0IC9DMDEwMSBwdXQKK2R1cCAyNSAvQzAxMDIgcHV0CitkdXAgMjYgL0MwMTAzIHB1dAorZHVwIDI3IC9DMDEwNCBwdXQKK2R1cCAyOCAvQzAxMDUgcHV0CitkdXAgMjkgL0MwMTA3IHB1dAorZHVwIDMwIC9DMDEwOCBwdXQKK2R1cCAzMSAvQzAxMDkgcHV0CitkdXAgMzIgL0MwMTEwIHB1dAorZHVwIDMzIC9DMDExMSBwdXQKK2R1cCAzNCAvQzAxMTIgcHV0CitkdXAgMzUgL0MwMTE0IHB1dAorZHVwIDM2IC9DMDExNSBwdXQKK2R1cCAzNyAvQzAxMTYgcHV0CitkdXAgMzggL0MwMTE3IHB1dAorZHVwIDM5IC9DMDExOCBwdXQKK2R1cCA0MCAvQzAxMTkgcHV0CitkdXAgNDEgL0MwMTIxIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yNSAtMjM4IDk3OCA3MjJdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMEVBMTU3QzYyNTgzRkFBMDE4RjM2OUYxMEMyNjdFNUE2ODkKKzE0QjNDRjA1RDdFM0U3MzAxQTFEMTEzQworQjg3OTY5QjBCN0EzM0RGREU1Cis2MTA0MUM4QQorNzlFMEM1NUYwMEYzMDE4NTc4MkQ5QjVDMDIKKzU0MDU0N0EzNDczNDYwQUJGRkEwRTQ5NUY1M0U3NTg0QkY0REQ1QkZDRkYyNjBBMTQ5QkMxNjQ0RkY1NzM2REY1NjI1ODhGMkE3OTE3NDdBMEI0RkVBQTM4RTdDNEQ2QTIxNzlCMTMyNENBMzMxQzNBMURBMTg0MUZGREZBRjFDOUM3N0IyQzIzNgorNTFBRjIxMzQKK0MyNkQ5RjUxNTQ4MjU4NDY1M0UzRDI3NzJGCis0NkI4NEU5MDMxQTlDQzc5MUYyRTkxMzM3RDYyMkFBQzY1NzYxMkU0NTFFNUU0NEQ2RUExNDBFODcwOTczMkRFNjQzNTdBQjk3RjM4QkIyN0FDMkFDQjVDMjc1MUEwMzBFRUYwNkNDRjJCOTlDNTU1MUQKK0E1NUVEOUMxCitGNzBBRjRGOUZFRkE0NEUyQjYzOTRCOEJEOQorMzY0Mjk4RkUxMTAyMjk4MjcwMkM4MzExMzY5MjRGRDY1OUYxMkY4NkQwRTk0RAorNDIzNDA1NEQKKzJFODMzRkYxNUZEOTk0RDAzNzkxMUY5NTkyCitCODE2QzcyNkRBQzdBODU0ODk4MjgyNDI1M0E0QzMzODUwMjJENzAyRTZDNUI3N0UyMUQ1RTQ3NzI0QTlCMgorMjI4Njc0ODMKK0IwQzIwNDYzQUYxMkJENzJGNkFGMDBCMDI4QjkKK0ZFRjA5QzYwQzRFMDk5M0YxQjc3N0RCREUxMkUyMTAzQTc2RjNFNDA5NDRFQjY3REQxRTNGMDlCRTgzNzczODc3ODhDOUI0Q0M5RTY5NDQ2MzM0MjUxRUUwQkI5Q0MzN0NDQzQwMjNFOUE2ODBFNUVFRDE4QTNFRUE3QjU4RERBNDFCMUU5NkE4MDdGMzAzMTNCNTY4MDJGQkFDNDI3REY0RDBBNzA2MjAzMTNCRjQ4OEE0QjAyRTE4NDZCNDMzRUE3NkE1RTU3M0ZBNDNGQUNDQUQ0NjNBOTEzOTc5QworMDUyQzE2OUMKKzdGNTk0M0U1MkVEMjBCRjE2RDY4NEVDNUU3Cis1MTFBRUNBNTZCMzYyQTkwM0NEQzIzQzVDMkQ3NEVBOTAzOUVCMzVCMTZEMjRGRkY0MDJDMTZDMjQ3OEVDMzgyMUY5NUI2NjRBQjFDODFENURFRTk2M0Y2NTIzODVCODFERjc3ODY2MjAxRjQKKzJDQjBFNkI2CisxNEVENjY1NEJBREFDQjhFNzlDNTBERjgxMkQ4CitDRjlGMDdGNEU5MzFFMjdEMTA0QTlEQ0Y5MkJCM0FBMjdBOUU0QkUyOUQ3OTVDNDE1NEU4OTg3Q0VDMEZFNUE2NUZEMTcxQTYwREMxMjUxMkZCMjY3QUNENjcwN0JFRDQyMjc3OUIyREE5N0NBODY2Nzk3NEVGQUJCNEMyNUY2QTE5Njg4M0MxRjlBOERERURFRDEzNDMwMTJDMkU5NzFBMUQyRkU5QUFCRUZCRTU4Rjk0ODM1QjYyQUZERkIzMURCMzU0RjIwNUZDNkZDMjhBQTE3QjNEOERDRUJDNjAxRkU4MzdCMgorNTZFNDBCOTYKK0NBODJCNzE2ODQxNEQ1NEY4OEVGQzFFOTNGMEUKKzg4REM2NUU1OEU1MUQ5NzE3Q0FBMUM5RjI4OUE1NDVBNTA0N0IwNkI2NzlBNzlENDUxM0FEOUZFMEEzNDFGQzc2NUM4RDEzQTk5QUFGOTFGN0NCQzFFNTAzNTU2QjQ2MTUxNzhFNzhDQ0U5QTEyNjJBMEE0NTg2Njc3QTczMDc5RDE5RkM1RTUxMTQ1REY3RDgwQjExODg4QzlERjMxOTI0MDFDMkZFMzU4QUYyRTI4MURBNUY2RUJCRUQyQzY4OUM3MjI3MTlGMkE0MjM3MzNDMUQ4MDQ0QTQzQkQ5REVBMUZEMzFGNzE3MDk4Q0IxQTgzNjg0Qzk1OEI5MQorQkY4NgorRDUKKzRDQkFDMDQ4CitCQjRGNkY1OTI3MEVGMjkwODUzNzNDQjBGOEMwCis4OEYzNUYyQzFFMzA2MjA3MUJDMkU5RDNFNDMzMTFFMDEwRjU1RTVDNDhCMkIxQkE0MTMxOTc4RjMxNzk1QUJFNUYxQUIzM0E3RThGQzMwNjdDNzI2NDk3Q0M1Q0IzRjQxMkEwRjMwOTRBMTI0Mjc5MUUyOEUzNjVBNjc0QUU3NDYyQzM4QzE1RDk3NzQ5OUYyRDdCNzNDRDYyMzg4RjdCRjQ1QkY3QTY0MzExRDdDOTI3NzgxNzZEOEFDNkIxNTREQjMxOTdFMTEwQ0RCOTQ2NjQKK0QxRjIyMUQyCis4RDA2NzhDN0I3NEUwNEFFQTlFOEVBMUQ0OAorMDE4QTRENEQ4Q0YwMjcwNTczMjU5NDM5MzAzQzkwRkE0OUExQTczQTgzOUExQzFDNEVBMTZCQzMyQjg4RERCOUQwRTkxQjdBRkVDMThBMTRCMTUwMEZFNDgzRTc2MDhENDExRUQyMDE2OUUzODcwNEUxMzZGOQorRTFDQkU4QzYKK0E2RjQ1MjQ2QjhENjYyODc5RDk0MkIzQzAzCitDMDEwOTFGMjYyNjVDNDMwMjBDN0RGQTMwREExREU2MkRDNzVGODY3ODgwMzk5NEY3MjlDOUE4NEIwQkY1NkFFOUQ2RDI5ODQ4MjIwRDIwMjk5MkU0MTQyMkY5RTc0NEJGQTZEMjI5RERCNDRGQkY1QUFEQjlFMDIwMDNBMDIxQjVFNzc2RDhCN0JBOTNGCis4NUIyQzE1MworQ0MxQTIxOTcwNjVBNkU1NjgxMEE2MEJGMzA0RgorNjQzQzZFQjc4NkVCRTk3QzgwNDNCRTM5NkY1OEU5MDlCN0Y5RURENEE5QjJEOTEyMTlGNTkzMjAwRTE4RUNCMURCMDZGQ0I2RDA2MDREQzQ2NzY0Q0Y1RTY3NjdBOEM1MzAzQ0JGMERGMkFBMTlCNzM5RDFGRUEyOUQ0ODUwOEZDQ0VEMDkyQUQyMjNBOUQxRTgzRTRDNTRBODhBNDE1ODg5QzA3Rjg1MDZDQTAyMDQ1OUNERTNEMERCNDhCMTkzQjEyNzRENTEwOUQxNzkwRTE1NzMyOTYzODc0MzgyCis5NzI5NzMwOAorMjA2RDU1NzNFMTUyMTFFN0FDOUZCNTY1OUEKK0Y3MTVEMzA4M0M4RDBCNDM5MUEwNTA5NDlENDM1QTY2Mzk3RjFEMUU1NzY3RUFGNDk4MzdDMTlFQUUxOTQ5QzYyNDhEMkIxNDE5NjIwMDVCQjkyMDZDMUQzN0VFQTc5NDQzNDE1N0ZGNzFBMjFGMEU2RTE2NjI1RkYzMkRCNDBDMjk2RDQwN0Y2MEI4QzNGNTk1MEU4MjFEN0REMkVGNUJFMEMzMkE4MEY2NzY2MEE4MDI1MzBDODgKKzc4QTA4RjQ0CitENDZFQkREN0YxOEQwQjUyNzAwRTU5RTZDQzI1Cis3Q0I1NjIxOTlDQThEMDZBQTM0ODhCOTg4MTdEMEQ1QzM0Mjk0MTUzRDY3M0JEODA4Q0M4OUJGMkJFRDMwQUU1QkZCMTlGMDIzODZCMjFGNkVDRkUyMUQ2MkM2QTkzMEY4MDUxM0IwNjUyOUI4NENERTY0ODc1MDc1RTQ5OUVCRUE3NzZCOTlEMTUwQ0ZBNjY5NkMzRDhGMURFM0M5QjA1REVCNzAzOUUwMzk2M0E5OTlEODRDMzgwODE2QTU4M0U2Mzk2QjQ4RkI5RjhDNEIxNzJCQgorMjMyMjNERUIKKzVCRkVCNEU2QTlFMURGMjdFQTA1QjdGOUNBRjcKKzlEMUQxQTA1OTE2ODlCMDJBQzdDNzgyQTMzQkI2NkFFMzQ5NjU3RjM1RTNBNEU2M0YzN0Y3Mjc2MTA0NDNBNUFCNkVEQUM5M0ZDOTIwQkU2MzYwMDAxM0Y2MkNEMUQ0MDc5MzYyNUI1QzA3QjQyM0NDMDU3NTM3QUJDODA0RkZFQzM3RjJDRkU0QUE1RjA5MEQxMzg5NEJFOEFEODk2QTA0QTU3MTUzODNEMjJEOUJENjMzNUY3RUE5OTY5OURBMDZBREI0ODAwQ0RBQTM3RDNDNzFCODZGQTFFNDIzQUIwRjI3MkI0RDkxMTQxNEI2NkQ0M0M1NzgyMDc1RQorQzE4RDE0MzkKK0QwMkQ3MUNGQzRGRkRBQTlCN0U3QTI1RjA2CitFRTE3REZERDYzNUQyRDc3QzZFMTkwMzkyQTE4REI3NzdBMkVEOTc5RTdBRDhGNkQ5MTI5ODI0MDMyQUUwNTU3OUYwQUM0QUFCNzkxNkIzNTI5MzAzN0Q2MDIzNzEzQTI2MTMzM0FFRTk1MkY2Q0UzNTVBMDBENzAzNkNDNjFFNjlCMTcyQThGNTA3NzZFQTg2NjI2MTc2MDM5Q0Q1QTgyMUUKKzgxOThGNkYwCis2ODFENURGREZCOUZFMkZDODgzMzBFNERBNTYxCis4NEJFOTY3Nzc5OTdGNjc0NjJBRDQzQjVFMTdERjZDMTcwOUYzNjM2REI0RDNFODdBNjcwNjIzN0VGNDlGQzYwMDc3QTc1NzEyRTIyQjZGMkY4M0VERjQ3MkYwQjM2OTRFNTkxRUM3MzI4RDlBN0M3QTc5N0QzMzYwNjZCNEMyQjRBM0Q4QTYxRDE3MjUzQzY1MzQ4RUQ4RTE1NDMzNDdDODI3NDg4NzNFNUU4MUZCNjRCN0JGQjk4QjgzODMwOUY3NzZBQzg2MQorQkZCQzBDMTEKKzJCNkE0RTc4OEUyQjM1QkZGREMyMjQ4MkJERkYKKzk2NEEwRDY1OUQ5NkYxOUExOTZBMjQwRjc0MkIzNTY5OEQ3NjYyOEQ1ODczRTU5QURBMEEzRTI2QzYyNEUwQTQ5MjVCQjVFRjE1NzQzMzMxQTBFQUFGMkExNTE0RDBDNzUyMzdFQTg1NDMwMTE4NzkwQzBEMTE3OTlFNTFGNTNFRjA2OTc5Q0M5NTM5Qjc5OUQ3RDc1NzkwMjcxQUM3QTdCQjAyM0QwMDZDREQyMUQxODE5NkM5NEU0MDBCNTI4M0E1MjE2QUFFMkRFNDEwOTE1NTYzNEJDQzFEMTUyQUZDNkNEMjg0Mzg0RENCQjc4NzZCNDAzREE2MzZGOQorRkUyMAorOTE3QkI4MUNFMjQ1ODEyMjEwMDRFNUNCMDYyMkYzQkUKK0VDNkQ4NTZCCis5REY4QjI2MkFENUQ4NTBCMjU5REE3QkFGMzI1Cis2RURERkNFNTQzQ0VGMDUwN0Q3REI4NjA0MjgwQzUwOEU1RkQ2ODY5NTIwMzdDM0NENTVGNTA2NzMyNjcxNTEwOEY2N0VDQTkxRkU0MTA5MzVCNThBMzA1NTEzQzhFRTIzMTU4NERDNkVEM0E3MDNGNDIyOEEzQTA3QUVBNTAxMDc1MzcyNkRGOTA1NjI5MDNFNUM2NTlDNkMxNDEyREQxMzZEQUQxQjVFMkU3NERFOUU2NjlBOURDNDhDMTYyNTIxQUY2NjdCOUQxN0UyOThBNTcxRDk5RTkxNzc5NjJDRjdGREMwNEZFMDNFQUE2NjAzRDk1NUU0QkRCOEMKKzUwQ0IKKzhGM0MyQworMjg2QzI2QzEKKzM0NTc5Qzg5NTNDMzExMkFCRDBBREE4RTMzCis1MzRBMkZENEYwMzc4NkVEQjE4NTgyRDdCRjJBM0FFMUFBMzkxMTcwQjJBQjA0NjFEMzU5MEM3OEQ5MDA1NTA2MTIyMjNERjlCNzFGODI3NkMwMThDNEE1RkEyRDg2NjdCM0ZCQzEzMkQzQ0YzMTkwMjJFRThFMjVBQ0VCQTJDRjg1NTU4Qzc3NThEOTlBNTA0NUNBODhGRDA1QzY1RkFFQjg1NTFFRjc0QjlDMjYxMQorQjI3QzkyNTYKKzY0OEI2MjgwNUIzMzAwODhGNDE1RURCOTVGCitGOUNFQzBBNUZERDBGRDQ2MUIxRDMyN0VDOUQ0MTFFRDExQzdGNkYxRDMzMDY2QTM4N0U3NTZDQjhERDY1QzM2RTI0RDRCMzY1Q0Q2QTAyNDlEQTE2MjBDQzdFQjhBODU4NERDQzM5QTBEREYxREFEOUIyRkFCMERERjIyNzhGNzlERkI0Nzk2MkRDNTE0M0QwMjlDMTBEQjUzRTcxN0Q1N0U0OQorRThCQjgxOUMKK0UzQTI2REIzQ0QwMTA5OTkxNTgyQTdCNkJGNEYKK0VCRDAzMTMyNDAzODI3NDk4RDA2MDMxMjQ3QzZGNkVBODgwRDg2NUM0RDIxRjUwMDIwRjNFOUU1NTJEMkVFNUU2NzZCQUQ5RjgzMjM0NEIzREM0NUU5RDE1OTMwRkRBRkRDN0VGNUZGMDEzQTIwQjNFNUFGMEZFRkQ4MEUxMzgzODRGODdGNjc2QjQxQUM0MkJDMjYyOTExQkYxMTZEQUQwNjI2Qzg0MDg1NjEwMTkwOTAxQUUyQUUyMTFFOEE1QjQxOTNCODcxOUEyM0JFRDg1MkY1NkY1NUVGNTkKKzYzNUM3NEE4CitFMUM5MEM0NjQ4RTBBRUNFQ0E4M0RCNTU3OQorMUQyMThEMEMxOTIyM0MwNTBCNEUxNzFGN0IxREM5ODU1NTlCMTNBMjg0MzQwMEFGQjczM0FGQTA1RDkxNDU5RUZCMUE5RTA3Q0EyNUM2OUQ3ODMyOUQzNDNDRjI3QkQ1MDlDNzI1MUMwRUU4QjU5RTQ2REVCRTA1OTU3NENGRTFCQ0Y0MDMyNUM4ODk0N0Y3Q0E0ODM3MTY0M0QxNzQ5OTQ1NTcyQURDNjc4N0VFN0JCRgorQTQ3QkE0NzYKK0E3NjAxOUQ0NjYxNjlBREM3ODAxNkI0OTkwCitDRkI5QjczM0NGQTRGRUY2NDYzQjJGMDM3QUMyODVGMDRERDRCMUM0NDkyRDkyNjJEREU4N0U3MEIxMjNBRDVGQUVDMzVCQTkwRkU5MjY5Q0VBRDhFMzNFOEE2NTY0NzFFNkJFREE1RDE4ODg5MzcxRUU1NTUyQUE1MTZDNDNBNDQ2MUJGQjUyOTBBQjg0QkY4MTFDNzU1NDI1QzQwRjE4RjgzQUNGNDg0M0IzRTM1RUYxNUQ2MUFFCiswRTVCQzg3QQorNTk3RDE1MDE3MTc3OEE5QzAwODU0NDRCQTM3RgorOEM4RkRDMEIzRDUyMTMzNjE3RkUwRDMyNTUwN0QzNkYwNDA2MkU3NTAyMjgxNjlEQzBBRDEwMUIwMjMyNDAwREY3M0U0RjkwMjcyNzlCOTc2MzM3ODkyOTk4NzBGMDRCRTlCQkMzMTlCOTVFMDI2Q0VBQ0VGMEQ2OTRDNDVEODk4RUZCREVGNjU0NDYzNDk2RjE1MjczMzYyM0E2QzNCQTA2Q0I5NEEwMzA4MTY5N0RCODBGQTc1MTVBRjQzQUNCNzZGNTlDNEU0NTI2Q0M5QkM5MzdDODlFMzYzRUQzRTI1ODM2MzZFREJDN0NFMDk1NzA5RkYwMkQ5QTkyCitDM0RBCis3Qjc1REFCQkY0MTg4NjBGOTgwQTI5M0E2MEJFRDNBNDc5QTkzMTE1MDRCRDk3MjlFQzExREZCMTM4RDVFMUJEMTU4RUFGMTZFNTdCODI4N0M3REQyNDM0QjY0QjQ3CiswRTc5NUU3OQorNEZGOURGNjI5RkYyQzYwNjc1OTc4QTJFMjg1QQorQ0U2M0ZDQjAxQTEwNTg5RTZDMDc4QjU0NDdENDRFOTRGMDYzMDA4RDA0RjNGMkI5QkQ4NzM0MzU4MUVBRDI5Qjc4RkJCRUQ4OUVGQUNCNTA2QjI4NEI2RDMzRDc3QkUzRDI4N0FBM0VBMTc0QzkyQTc2QTdEN0JGRkYwM0ZEQjg5MzJCMjYyRkFFNzdBRkFERDUwMTNFN0JGMUFFRTMyQTQ2NDFGQUREMTBGRkZGMjQyNUEwN0Q1MTdEOEU3QjkxMzIyNjNDRjkxRkRBNDFERjQ0NTgxRjFGOUMKK0Y1MkZFQ0RBCis1NDM2MjYwOTNGMEVCREExOTQ0NEU5MTYyQQorOTQ2REZBQUQzQTZFQ0JCNjA4RkY5RjQ3NjA2MjA1M0Y1RjkxM0U2RERBNUYxNzg4MzE0RTAxRkM4OEZFNkNFNzExNURDRjUwM0UzODgxQjJFOEFDMzIzODNDMDQ1MEFFNTgzRDJFNTk3RTU1NTNBNkUwQzQ2OTEyQzQ4RDIxMzdDQTExNkFGNjZENzI1MDQwNEEzRjg1RjE0MDdBNzEzOAorMTUxN0ZGNkUKKzhENTRDQzc2OTZFMTFFQ0I3NTY0NjZCNDlFNTQKKzBENzkxMDBBOUM4NjA0OUQzRTY4MkFGMDY3OTQwQUM4N0U0MTM0MEEzQ0FDNDMyQzZENTkzN0EwNjBCNTIyQUIzNTkxOTdEOEQ0RDNFOUFFMkE0NEFGQ0QxRUM0Mzc4ODU3MTRGODVDOTFCOThEQTM4M0I4NTBDRTQ1REJGQzIxNENCNTgzNTE2OTlGMDZDRDVFNUE5RTMzOTlGRjg4ODNFMjQ1OTg0ODM0ODFEMjhGODU1MTRDRTQ5ODRGQ0E5OTk1MDY4N0U2NzREMjJDODIwMDE0OTQ4RTZGMDg1NkQ1RTgxMDBBRjJBQjk5MjAwRjFDMTg0MEM3NkFCMworMzg0QQorRkI4RDgzODVGM0JERDkxQTVFMDBDRjFEMzU2RjM1NkM3Qjk1RDlCMkE4RkZEMkU3NzI1NEM5N0JEODNCNDhDRDM2RjFFRgorRTM2MUE5NTYKKzdCQjE2MUM2MjI2QzU0QTBDNUIxQURFMzNGCitEMTQ2NzBDNkZCN0Y3RDdFMDNDQTMxQ0FBQjg3Qzk3QzFEMTQxMUExRERERUQwRTY5Q0IwNDZFRjVCNkQwQzk3RDQ4ODgwOEI0OTMyQjY3NjRGQTlENUNGNThGMjkzNTNDQ0VCRTRGNjlGRUMKKzZGNUE5QzVBCis5RjIwRjRFMTE2RjIwRjRBQkM5NDdCNzEzOTMwCitDOTU3QzYzMjY4MjJBMUM4ODAwM0MwN0E5NUZDMkJEMzE0RkEwNUYwNEJFRkQyNDhGMjc1QTc1Q0QzQjc4NUEwNjk2MDNCOUM3QUQxRDk0NzI2QjI5MTU4QUVFMUFFOTFDQTRDQUUzOTExNzY5QzAwQkI3NjkwMUVGNjk2RUZFRUNGRDNFQkJEMUYyNkM5RTgzN0ZEMjUyRDg3RUEwN0U4QkZDRDBENTk3QUM0OUM4NzMzOURDRDI0Q0VEQjkzRTQ1Q0YwQjJGNUNCMUU5MTJCQ0E4RkQ1RURGM0NGMjE4QTg5OEZFRjZBOEYzMENCRjlCODY2RjBDNUM3OEQKKzQyN0QKKzFEN0EzQTJBNTZCMjRCNzlFQTQ1OUMxN0NCMUVCRDI3QjgxNzgxODMzMDc5MjQ1ODc5ODgzQ0JCQjQwRkQwCis4NUFBMTc4MworN0NDNEU1NDU2NDhENDIwRUQ1NDNFQUI3OEJDOQorOTRENkJGRkRBMDFGRDc5OUM2OUVEQTM4OTM2MEZERENGNThCM0Q4MDFEQTU2NTYxODdDNUYzOEVCNjcxMUYxNTE0MDVGRThGQ0RFQkE0RUI4MkE2RTFFOTQ2NkY5MkJFQUQ5M0Y0QkMxNTE0Q0RDRkU5NUUxMjY5Q0Y0RTNBNjFBRjI5Q0UyNTgxOTE1QkFBQkRBMUY4NTNFRDEyNERCNkUzMzgyM0M1NjVFMkI0REI0QzU4OTQ2RDU3MTA5MzgxRUQ2NEE2RkIwRTg4ODdFNjFDNjZCMDA4CitGNzgwMjRDNAorOTMyNzI0OTdBNERGNzM1MjBFNjkyQ0QwOTcKKzAwNUQxNTAwMUYzNDIyNkFFODEwNzIwN0U3Q0VFN0QxQjRCNTk0NEYxOEVCRUYwMERBOEYzNDBGQTdFNzFGRkMyQTM0RTIyNEY4NDk3MEE4OEY5NkUzMzRDNUU0NjdGMDFFMkEwOUI0MzBCQTFBOTkxMjZDNEQ2N0NEMkE1NTJBRDlGQjg0QkQzQTA0CitEMkFEN0Y1MAorODIzQjUzMTQyNTM1NTI3NjEwNkFDNkU5M0NBRQorMjU1OEFGQTcwMTBBRUFGMTdFRUU2NjkyQTdBRDQwQzFFNkU2NjUzN0UyMERCQkRDOTE2RDJCNzMwRjVGMzc1OTExQjUwNTVCOEQ5QzU4QzUwQzM4MDlENTQ0OUM0N0U0QkE2QzEyRUJGQkFEMjk4OTc4NzRGMjZCNDJERDdCNjc2MDkzOUNCNTY1MjM4NTBGRkNBMDgzMEVCOUZDNzg5NjFGQzlFREQ2RjExRDM3QUM0NzYwOUNCNzBDMEM5MzM2Mzk5OEQ3NzJGRTVENDE1MTAwRUNFOUI3REM5MTE3MkREM0M1NUVCRUUyQ0M4QworRjhBQjNBQjcKK0RGRERBQjdGNEM0MjdEQTI2MzI2MkJDOEIwCiswMTI2OTRDMzQ1ODZGOUZDREI4MTQ5RjM3NEIwMjc3ODMzQTAxODNBREFBQTJFNzcxREM4QkVBRDc5NzU3NDgyRDExODY0NTAzMkY1NDgwMzE5QjY0QUI3MTBBNDY0NEUzNTU2M0EyNTQ2MTRGM0ZGQkM2MDk1RkQzMEZGRUZENTM3NjEwODI3NjIyMDE4NTg0QkVEM0MwMjcwODBCQTBCNkU2RjU2OTM1QTRCNUIKKzgzNEFFQjRECitBRjkxRTVCRDE1Q0M0RjdCNTJGNkE4MDhGMURECiszN0FBQTA4RTUwRjM5NEM3NTMwNjkxNUZCOEQ2NUQ4QUIxQ0IyRTdDNDgzMUE5MkVBNEZDNzRDOUI2NDcxMEVCOTk4RDIxMzdCMkYwRTBFREM1NERCNkRDMTlDQzUzQTJEODczMTJDMDBGOTYzNjMyNEQ4QzcyMTdDOTEwQkUyRUQwQ0RCMjgzNjNFN0VCRTc3MzU1QUI1NjE0MDVGMkYwRTY2NDRCRDAxMDI5RTA4Qzc3OTVBRTU1QzBBMzlBQUIwOUE5ODE5RDJEMzVCNzgwRkQ5MkVGRDJGM0IyNDMzMTZFMURCNTMzMTAwM0M0QUM4MkIyOUFDOAorMkY1NEY2NkUKK0RBQjI1MTI4ODE0NTc1NDVEQkZGMkZEMTAxCis0MDlGMzA4OUU2RTVGQTBBNTA2OUYyQzcwMjFBMDJDNzE5RjlBMThGRDA4MjZBQjQ2Q0JGQzUzRUVCRTg2REVEQTAxMjNFRTA2QkM3RUM0NUVGNUQzQjYyQkFGNzI5MEQ5RkZENDI2NTIyRUQ4QzIxMzhGNUM1RDdGNEE4QTYyNEJGNUI4QkQwOEUKK0UyQTYxMEU4Cis4Q0ZEMjUwNDExNEQ2QjRCODcwQzJDQ0JDMAorOTQwMzFDNzFBQUQ0OEE4QkYyOUM3RDkzM0ZCOUE4QTJCMTRGMkEwMTcxNThGRjkzQzExNzZCRDgzMDlEMTM2NDJBRDIwNkU5Q0IyNUVENDRCN0QxNDAzMDk0MkE3NjU4MDk5MEVBRTEyRTRCMzFDOEMyN0E1ODMyMDgzRTEwOUFFNDFGODgzMTMzNERCN0ZERjk1RkUzNUIyRTQ0RTJFRDRCMjBERjhGNDYyNzNDRkE2NUZGM0FEQjkyMTM4NjdBRDREQQorQ0FBMjQ0QjcKK0U3MDg1NjU0MDU1MTFCQjUyNzMyQkUwMTc5CitERUJBQ0FDNUQ4RDJCNjU2QkFGREMzRUZDNkE2MTM3OTRBRDc2MUE0OEY5RDFGMjU3QjFCRDU3NEJGRUUzQUI5NjI0RDNBNTU3OTE5Q0QwMENCMjkyRDU3NDUwRjYzNjk0RkFGMDNDQTM1OEI4MDJDQjBCQkYyNjJERkYyOEM4Q0YyRURFNzA4RkYzMkVEQ0Q0QThGNjVCOTBCOEY1Q0RCMjMzRjYwREQ2QzkxOEQ1RjRBCis1NjU5RTA4MgorRDBBNTZBRUU3MDk3OEMzMUNBMDkxQTBEMzI1MQorQkE3RDNFODI4MjdFMkZGOTUwOUYyM0M0QjdFQjFDMTZDNDVDRDM3QTkwNURFQ0Q4NjA2RkMzOUIzMTc4OEY1MTUxQkZBMUJFQzhBM0M2Rjc1NEJFOUQwNzEwOTEzRTZCODcyMTU2NTc0QThGRUYyN0QyNTI4RDlCRTFDOTM0QUI3Q0Q5QURCRjMzNDREQjdEOTlCNDVFMjgzNDI0N0VDQkQ1MUExNDdERjQ5MzUyQjQxN0ZCN0MxNTYxOTE3N0VCM0FGNEU0QzYxQUUyOTY5RUQyMDA2MDQ0N0I3NzY5MURFMUQxNDgyNjkxQUQ5MUY0NDYxQUY2NkI2QjcxCitGN0ZDCiszM0I3REY0MTMwNzkwOUY2MTU4M0Q2RkUyOTUwCisxRjkyOTI5MgorRDE4MTNFOTU5QzEzMDk3RDQ5ODcwNTNEOUYzNgorMkQ4RDI1MTNFRUIxODk2MDQ4OUUwMzI0OEU1OEY1RTIxMDMxMjI4QkFCMjI5MDcyMTg1M0RBOUVGQzQ2MUJDMjRDRTYyMTQ4MzY1QkFBQkMzNjAwRTRDRjREQ0ZCQzM5MEE3MkY1OUZCOEFCOEYyRTlBREY0QjNFRTY5ODU0MTMwNUZFRTcwRkY3RTZERTVDMkM5RTY1MTlBMjVERUIyQzFDRTE1MkU0OEY4QjRBQzQ1QTM5M0ExNkZDMzFDMTlDNkEyRTYxNkVGMURCNDcxREREMDUwQkQ5Nzc5MTZEMjI1MkM0MEJGNzIwRTYwQjU4Mzg1NkRGRDkwQjFBCis5ODc5CiszNTc0N0E0MAorOTQyMEFCMTNEOTMwNUFCN0UwOTVDOTlEMkU1QworMDc4QjUxOTkyOEU4RkY0OQorNzg5RTE2MUYKK0Y0RDQxMzEyMzJGNUY3QjVFNTgxODY4QUUwRjUzRDU1RkI1NzVCOUQ1QkJCODQxOTA0QzQ5NDFCODQxMDM2RjUzMDJFCitERUNGQTI2ODY4MzJBMjMzQzY1NEVEMkY3RDE2ODlCMjc5RDU0MzAzRkZDQzFEQUI0OTMwNjg4RkE5NTNENjNBRDlEMDVCOUEzQUM2CiswNUU2RUFCNkNDRTJCRTE1NTMzOEVFREM4QkNBNzZGRTQ1NEE0Q0MwRDNEQzlGM0VFNTZDMjQKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwNDYgcHV0CitkdXAgMyAvQzAwNDcgcHV0CitkdXAgNCAvQzAwNDkgcHV0CitkdXAgNSAvQzAwNTEgcHV0CitkdXAgNiAvQzAwNTggcHV0CitkdXAgNyAvQzAwNjggcHV0CitkdXAgOCAvQzAwNzggcHV0CitkdXAgOSAvQzAwODAgcHV0CitkdXAgMTAgL0MwMDgzIHB1dAorZHVwIDExIC9DMDA4NCBwdXQKK2R1cCAxMiAvQzAwOTcgcHV0CitkdXAgMTMgL0MwMDk4IHB1dAorZHVwIDE0IC9DMDA5OSBwdXQKK2R1cCAxNSAvQzAxMDEgcHV0CitkdXAgMTYgL0MwMTAyIHB1dAorZHVwIDE3IC9DMDEwMyBwdXQKK2R1cCAxOCAvQzAxMDQgcHV0CitkdXAgMTkgL0MwMTA1IHB1dAorZHVwIDIwIC9DMDEwOCBwdXQKK2R1cCAyMSAvQzAxMDkgcHV0CitkdXAgMjIgL0MwMTEwIHB1dAorZHVwIDIzIC9DMDExMSBwdXQKK2R1cCAyNCAvQzAxMTIgcHV0CitkdXAgMjUgL0MwMTE0IHB1dAorZHVwIDI2IC9DMDExNSBwdXQKK2R1cCAyNyAvQzAxMTYgcHV0CitkdXAgMjggL0MwMTE3IHB1dAorZHVwIDI5IC9DMDExOSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIwOSA3OTggNjk0XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0Mjc0REY1Q0EyMjM1QjUwNTQ1MkVGODJDMTkzNzhBNzg2RTBCCiszMDI4OEIwNTQ5MkVFNEJCNjEyM0MwNEMKKzNGQjMxRTNEQTUxNTFERUNBNAorMjM4MDMyRkEKK0QyRkE3RkIxODI0RDVCNjVCNzJCMzNFN0Q5CiswMjNCM0I4QzQ1QTlEODBCMkZCNjVGOUJFRUEzQ0Y3NDM1Qjc0RjJBQTI2MUVFN0E4QjhFNkNBRjRGMTZBMworNzdEMkIwM0QKKzY3REI2OEExMDM1NTlCOEUzNDdGRjYyNDNFCis5QjM4ODE0RkVFQkVGNjVCRDVEMEI0QzkxMTk3NTU1MTE3ODBFNjJBNkI3Q0UyRTRGNTI5CisxNjRGNDY0NgorOTI0OTYxMzA1QjlGNUI4MTdCRTc2Njg1MjgKK0RCMjE2MTk1RENCQTA3RjFGQTBGNEI3NjREQzlBNzM0QzgzQUQwQTUwRkFFQTlFMDAyRTQ0MTU5RkEwODY4MTYxMTRFNTBENkM0RjZFM0EyMzk0M0RFMTQ5MjIyNTdFQ0Q2NDE0MEQyRDQ1QzkwREVFNzE0QTI2OAorNzU1NDVGODMKK0JCMzdBRjk4RkFDRDhEMDM3QTQ1NkQxODkyNDUKK0Y3NUFCQjhCNzA3QUQ1RTFGRUNCNEEzQTg5RkJGQkMyQkM5MTA5MDk2MzlDM0E5RTY3MDBGMjNDRTMwQzg3MkI0MUFFMTE2NjZBN0IxMTE0NjYzMTRDQzUxODk5NDU1MkJGOUM1MkE5RjM4N0Q3RkRGQUUzODE2NzlBNkQ0NkREQTE0NzYzOUE1QTBFNDkyMzkzMzhBNDVCOTIxMkZBMUZGNkNCRkM3REI5RTM1MjcyNUQ0NzY4MDk5OTAwRUEzMUE1REI4Q0ZCMzk0QzlCRUU3QjdERURCRjE0QTQzOEEwNURCMEEwCis1OUQ5M0JDOAorNUI0NTRDM0Y5MDlFNEUyOTI1MDU2NDc1NTEKKzlFMjA1MDQ3OTI0OTJDMjc2RDkwMTQxNjJBNTBGQkZDQUY3RjlGRTVGNTRGQkVGRjhBMENENjhGQzA0QTE4QzYzNzMxRUEzMDBFMEM0QUE2QjcyRjUzODA3Mjg2QkFEQ0UyNTU1ODJDRkRFQQorQkEwQjExQjcKK0EyRTA4NTMwRUI0MUM1NkFFQzU0M0I3MzIwCitERTJGNDlEOEVBODQzNUIyQzE4Q0M3M0E0OEY5MDBFNTAyQ0VGQjc2RTlFRjgzNEIzRjU3MEQxNDYyNTg4RTk4Mzg5NjdCMjA2MTJCRjAwMjJDQUQ3OUMyMjE3REJFNzM2QUM1QjIyRjFGQTg3QTc5OThFMjZCRUJENzdFMUM5ODI5RTY5NTIwMzQ2RTgwNTcxRTMwMDIxREQ2NDMwQzk2RjdGNUU1MTI1QzhEQ0QKKzMyQkI5QTEyCitFMTQ2MTQ2NkU4NTUxMUU1NTI4Q0NBODc3RgorMjY0RjlDRDAwNDNCRjFFMDJDNEJGNkVBNTUwQjhGNTQ3RERGOTQ2NDEyNUY1REU4REE1NzU5MzQ4RjYwRDRDMUM5QUQ5MjQ2NTdFMjc1MTVGMUMyMzY1REQwQ0VFMUNCMDQwMjNGMURERTEwNkRCQjBDN0VDQjQ0MjRCODI5REFENThENzFGQ0QzRkU3NkUzNTRBNjQwNzRDOUZBNjE1MjNCMTVCMkU0NEJFNjRBQTk0RDY4NEQwREU1MjBFRQorN0FGQ0IwODQKK0UyRjFBMkY3MERBOEZGNTVEMDNBODAxMjYzREIKKzdEQzdFQkNENzAzMDRFN0I5NkNDNUU3MEI5QkE2MjY2Nzg3QUExQUU5OTJGMTRENjVEMDM1N0NGNENEQThENzExMDJCMzVBRDM1RjQwOEIxREQ4ODhEQkI3QjkyNzA4OTMwNkZCODY4OUJGMDZCMzBBOTJFOUI2QzFDQzE1REM1OTM1QkMxQzBGNzI2Q0E2ODE2RjEyRTE3RUQyMUZGMTdGNjc4RTIzNkRBODVGQUVCQTEyMTUyNDc5NkRENDIwRUQwQkY1MEQwCisyODMxMzk4OQorMEMzMzU3RDZDMzZBQ0ExNERCRjQ3QzExOTI5NworNkI0Nzk3QUJGNkJGQzBDNjJENjc0RTAxNDE4RkI1Q0NDQ0M1MENBNEZENkI0QUE5Qjg2NTg5Nzc2NDUxQTVGQUZEMDRBOTA1REY3RUNDQUM5NEZBQUY0QjgzOUNBMDQyOUIzREREQkI0RTQxNTlBOTRDN0REODMyMTEyQ0Q2QzNGNzVCOTA5NzY0Q0Q0QUIyNzhDMjJEQzc4Mjg1NDFDQ0RBMDU5MzVGNUIzMTc5NzdFMUYwQzc3RkFDMDlENjE2RDAyODkyN0IyRkMwOEMwQUYwRjZENjJGOEU1NTAyODFERTc0NEIxNkM0N0RGQzI5RThGOUNBMDMyRkI4CitCQkJCCitGQzBDRTM4MAorRDU1RURDRTQ0MEZCOTkzMzQ5MkI1MTYxOUIKKzEwMDE2NTI3MTlDRTM2M0FEMEQzRjI5QkI4MUI0MUVFM0M0OUExMjIzNTY2MzJBM0EzQUJCQUY2RjAxNENDNjAyOTc5RENERDZGNjY3MUE2QUEwQzM0OEUxOEE0REE4OTJGRDQyOURCRjFFOTUzN0M0RTNBREFDNEM0ODQ5MENGN0Y2QkVGQzU2RTk4MjAwQ0FBCitGODRDRkIzQworMzI2REYxMTI4RDc5OEUyNUJFOUNFQzdFNTA0MQorODkzMTVERTA0QkFEQUMwRDQzREM2M0YwRUQ5OERDOTQzRTFBOTA0MDdCMDk2RDgyQUE4NDg0QkQ4NDM0NTExMTVDQUI2MDFCNDEyODg5MkU2MEE0OTA5NENFNTBEMEYyNDEyNkRFQTI2QjBDMzhFQzRCRTFDQzQ0N0RBOEEwRjg0MDM2M0I2Mjg3RjUzNTFGOERCNURGRTI5MDAyMEZGNEExQzRBQzNEODVCRjFGNUNCNTUzODJDN0Y4NDBBNkJEQkE2NTYyQ0E4NTlEQUU1MzI2RjA2NkJGMjc4NDY0RjUyNTY4QzgzQTRDNDNFNEZGNTVGNzNDQTdBRjcyCis3NUU0CiswNDE0OTkwQworNkZFNzRDQzMKKzg2QjgzQzFCNTk4ODEyNUJENkU5Qzg4MjFECis5NDVEQUVENzY3RDBGNUIyNUQ4OTJBQTMxRERBOTk3QkYyOUQ0MzI3NTQwRERENTAwRDcyOTIyREJBNzYyMDBEQzRFNUZEODMyNkU4MjU3RjcxREQxRUFDM0Y2MjJFOTM0Nzk1RkM3NDY2RUJBNjQ2RUE2Qzk5QzY2MEE3MDM5NjUxN0QwMDE4RjFENjBDNkM2MUNCNTNBMjhGMzRCMkEwRDY2NEJBRjNERjE5OTVFMkRCREMxMkRERkY0NAorQ0Q5QTg4RTQKKzQ2QjE5QUZDNUE3QjkxMzIyOTgzNjk3NDI1CitFNzVDRDYwMUZGNUY2RjEyRkQ2Q0Y5RDkwM0RGQkZDRTk4REZENkQ4OUYyQUM0QkYwODdBMjQwOTU4OERGRjc0Mzk2Q0Y1MzM5ODNGQUFDMDRFQzA3QjA4RjI0QTMxNkUxMDc3QjMzQ0ExRUQxQzc1MjM3NzVEQUM0OThDMDA0NEJBODY0NDk1QzcyMUZFMEM3QjU4NUM0NEZGNTEyQjk4QkE1OAorQUUxNTY4RDAKK0NGRjZFQTlBMjExMTM0MUI4RTAxRTc2QjgwCitFM0I4OUEwMTZDNzU5M0IxNTQ3QzE2OTg5Q0NFRTc0OUEzQkMzMDBEOEMzRTRFNzAxNzE4OUVDMDlERkVCOTYzRkNGOTU5MTVGNDhENzNGNzc4NEY1MEE1NUM1MDQ1RUY4QkQ0NThFMUIzQjExQ0Y3RTM5ODdFNjcwNTIxRThEQUYxOUE1NDYxQzIyMDU0QUI5MTMzRjAxMzU5MDY2OTdBQTNERDVENURGQzYzQkZDREMxQTFENkRGCis5RDlEQ0Y1NgorMUQzODMzNDMwMTk3MjA3N0VGNURGREIxREEKK0U0MjhERUExQkU1QzM0RTQxQjY2RDMyNkI3RDE5MEJFQUIyRDc2RURGODMwNTcyMEFDQkMyNDMyQjE4M0NBMzgxODNBRTU4Njk4QkUxODE4NjdEQUYzNEYxRUVBNkZGODRFOUZBOURFMTIwRTg1QzMxM0VEMzcwRjc5ODM0MzQ2QkM5RjlCMEVEODIyM0ZCRjE0MEI1RjRCNzBENzFCMzMyQzI2QkI0MjhGMDhFOEFENTdCNzdEMjk3QQorMUQyOEU3RkMKKzM5MjEyODUyRDcyQTAzNkU5MjNGMTlCNzBBMUUKKzM2RDhFMzlDNzNGNkE5NEVCQTk4MDM5RjY1RUM5MTJFMTVENDc2OTgyQTk5RTAxRjdDQTFCRjE3ODYxRjlDQUYxMkI5NTVBODdFQzcxQzY5QzlFQzE4QjdDRTk1RDVBNzE0RDk5QzQwRTg1Qzk4MkZGOEExMzQ2N0JFMjcxQzk4RjA4QjM5NzAwMzk0RkRBNzFGRTY0MzI3RjA0MzI2NDI2MDc1QkY1RUE0NEEwMzlGMDEyQUQxNEEzMUNEQUU2REVEQzRBMEUwNUY1Mzk2NEEzMkYwNzgxMTRGMDM3MTFBRjg3QkFDMzE0NTVBQTQzRTI1NDAzRkQ5RkMwRQorQTQ4NgorOENERkZGOTgxQjhFQUE4OTNDNTlEMkU0NkM4MzM2MjZBOUMyMUNFRUExRDUyNjY0MTUyNjFEMzVGRjcwMDM5QzRDNEEwQkZBNTcKKzA3MEUzMTk0CitCQUJFNDI4MkRBRkFFRENGMDQ0RkFFNjBENkZDCiswNUEwRjcxQ0IyMDEyMDc0RjEzN0Q3OUE1QTQwMzIyNDM2MkZCNDA1QjE1M0YzMkEzQjEwOTE4MTkxNDEwRDRFOUQxM0NDRDg2QTczRUVDN0UzNzY1REQ1RkUwOTdEQzdEMkM4Qjg0RDgyQ0Q5Njk4OUM0RjI3RjQ2QzQyMTE2MDI2MUFCRjYyOUY1MkYxRDY1QzZCOUE0Njk1MUI0MThEQzI2Q0QyQURBNzMxODA0RUNCNzAzMUVENDg5Mjc1RDIyMkMwQTlGRjdCQzAwMjFCCitDNjI2M0NDMgorMjNCMDg2MDA3MDEyOEIyNzkyMzEwN0RBMjMKKzJGRTFGQjkyOTBBNTZDOEUzM0YwRTRGMzVBRTk5MjhEOTREQjE2OEJBNzhDQUUxNDkxM0ZDNTczNDA4OTIwNzlFNjY0Mjk2MDEwQkE5N0U2NThFRUY3NzhEQkMzM0NBMkNDQTE3MTlBMzc0MzNERTY3RDg1NDM5ODdBRTgwM0I4MzcyRkYzQ0U5Rjk0QjhCQjQwMEVGRkIzQTQ2MQorREMxMUIwQzAKKzFDMzkwNzc0MUQ2REM0MDBFNzZBOUI5NzdGCis4MUE3RUMyMTUwMTI3OTI1QkNDREJGOUFFQTRDNkM0MTkzREEwRkJFOEYxNURDODI5Q0U3NTZDQzJBOTRGRThCM0FBMURGNTc5RDI5NTU1Njc3NURCNEI1QTM2MTRBNTk3MTM4QjEyQQorQzE3MDNDNkMKKzE5NjA1Mjc0NzFBNTczQUY5MDFFNThBMjQyQ0QKKzEwNzE5RDFDOEEwODE5OURGNUYzREFCMUQ5MEY4MUY5M0U2OTVBQzBCMjc0RkE5QTMwNkUyNEIwQUY4RDdEQjE0RjkxRjA4NjhFNDNEOUY5NzIyMUMzODQ3MkRDMUI5RUY0QzgwM0IyMzI1Q0JEOTk4N0FBMzM5RkIzRjUwRTkzOTI2MTI1OTM1QjYxQTZBQjZCOTJEOUFDOTM3RDg2RTA0RTM1RkZGMTNCQjA1OEVCRjI5MUVBQjEzNjQ0MTM2MzAwMjJFMUQwOEI3MDJDQTBDQzBGQjg1NTJERDhGNjc0NkRERkM3REQwMjI4MDFFNzk3M0E0NDIzMjE4MQorMEI1MAorRDUxMEZFNDYxQkU2QzEzMjg1M0Y0RTBDNTU2QjJCMkExQTAxNTJDREYwNkYxNUMyMjEzNjNCMEIKKzdFRkQ4NENDCitCMzMwNkI0RTY4RTdCOTQxRUREMUNBQUI1MTRECitEQzY2QzY5NkMwMDNFQzQ1ODk1M0EyRkU0NzI0RUEwMDNDNjFGRDhCNDM4NEVDRDQ3ODk1MTU4OTIwQjZBODBCMjZGQ0Y5QjhCREREQTM5OUMwMjFENkM1MjM2MzYyRDQyNkI2OUZGNjNBODVENDRBOUU4NkMyOThFNzBENkM1Qzg5NkIzNkM5OUUxMkNCNzlDODQ4RUJCRTJFOTIyRENFNEM5QjY5MzhCMjk5N0U4N0JFQjlENDc2OEVGMzBFNDI0OUY5RkIwNDVCRjE4OAorRTk1NjBGMkIKKzM5ODdFNTAxMUFDOEM0Mjc1OEZGMDE4Qjk3Cis5MDIxMDk5M0Y4QTM2RUFCNjU5RDY0MUJCQUU1MkY3MDhBNjFEMTIwRDg3N0IwNjYyNkZGM0M4RDk1ODZBMzE1MkVDODYwRjFFQzFGNzQxNTkzMDA4NURFRkQ0RTU5N0ZFRTY3MUJFMUFFNEZFQUZDMDc1RENDMzkxNDI2MkJEOUYwRDYxRDdDNzI5RAorRkFDMDlFQkIKKzM4ODdFNDI1QzA4MkZDMkJBMzg3RDY5RUVBNEIKKzY2MDNFMDg4RDAzMURBN0NDNzJCQ0VENkM5NzJFRUYzREExNjgyRTBFQjJGNTY3NjJGMzI4NUNENjRBRTAzRUY3OUFCMjNENzVFMDcwNTI5QzA2MTQ1MjlBRkI1Q0M4M0NCOUYyMjVGMjEyNkZEQkQ4QkRCQjk0OEFCN0FBOTJCODRFMzBBRjM3MjA4MEIwRjhEMEE2RDQ2MENBNUYwMkZCNEEyODY0QTIzMjE4RTY0NzI3NTM4MzJDMDYxNzFGNzYxQ0Q4NkFCRUU4N0E3NjhGMUZCNDI4N0E5NTZBMjMyMzUKKzFDREY3NEMzCisyMjMyRUI2QzM0MTc1NEJDMDlGNzRFNDc0RgorQjkxNzE4NEFFRDJEQzRGMzcyNDdGNEQ2ODg1MDU2OEIzQ0FBOEM2MDIxMUI1MEQ0OTZEQjJDNTM4QUI1REU4RThBQUM4QkQ2M0RCRTEzMzA1QTg3RjBENkIzOUQ3NDUwNDcwNEVBMjFCRUYwN0MwMkVCQTVDRDcwRTkxREM2RENBODk1RjcxRjQyRDQ2NDBCMDVDQjlCREQ4QzIwMTNBMkY5NDQ0M0FBRDBEQkYwRDBBMgorMjQyMDMyQzcKK0NBOTFDNUIzRUU5MEI0QjlDRjRDOEZDMkI4NzEKKzlBOTIyNjFBNDRBODBDMzRCRDc2Q0MyODkwQTMyQTA4NkFGOERCQjc4NjJDNDM2OTJENERFRTc3QTI5Q0YyMzU4NjFFQzdENzZGMTNBRkY2OTM0RUZFQzE4QTZCQjJFOUQzOTU1MDQwODQzRUM2QjRFRjMyN0VBMEE5QUIzNjIwRUNDRkJERkQ5MTNENkVDRkFEQjVEMTE2RDhDQjg3RDY2MjY5QjU0Njg2QzdERTlGOUM5QjNGQzVGMzc5QkE3OUVGNEZGQTY4REE2MEFBQjZDN0EwNUY0MTNBOEUxMDk2M0MyODg5MkI4NjIxMThEMzI0Cis0NzRCMUZCRAorODZFMURGN0E4Njc0RjEwMEYxRjRGOEE1RTUKKzNERjZFNDQ3MDgzRjVEQ0I4NTU3MUQxNjZFN0M3RkYwODFGQUMwMjhDNjA2RjE0OEEwRkVFMkQ3N0NBNzdDNTBDNzI1QjI0RUM4QjA2MDEzQjBGRDE0RDRGMjlCRjI5NDk1MEU1ODc2MzFEMTE3ODA2NEE3ODVCOTk4MEVGRkJDNEM5NjZCMjcKK0M2NUNGOTUxCis4RjYzNTgwQjZCNDQzMDE1RTU5MzkzNjg4QgorMUREQjdGMUYzNDgxRjNENUU0QUIwNTc2MjM4OUU0ODkyMTNGODQxRjBGNENGOTRFNzI5OTM0OTdCMzFENjQ1NTE4RjYyOUUyNTAyOTE5QzI1NTM4QUIzOTY1RDJEMzA4OUVBMjBGMjAwODM5QzBGM0VENjlCRTBGREZBMTVDNkIyM0YzQjYwQjY3RDQwMjE4MkQwNkI0NzAwMUEyRjU4ODEyMkI0QTAyQ0Y1NzU2NDZCRDYzQjAKKzBCNjBBQkVCCis4RTM3Q0M4QjJBOTNBQkMzQTY5QjUyNzUwNkNBCiswQzlBODg2NDMxMTY3QThENDc4MkU1QzVCRDg1NzQ3RDU5NTVDMkE1NjE4RTJBQUQ0OTUyOTkwOTlFOEI4QkY3RDI4Qjk5MDg0RDc4RkJBNkVEQzI0RDU3OTA4NjA2NTFEODU5NzBDNkMzMjE0RTEzRjNDQjhGMTg0NkY4MjQ0MEYzODE4NTA4RkZBRTMwNDEzOUVDODJCOTkyNTQ4MUFBMkY3QkZBQkJFQkVEQTA5NjBDQUZFNjg0OTMyMUFFNjgyRjkzNjBENzFCRTA1MUE4MDgwMDZFQjNEODY1RkI1MDg4Q0FDRkQ4QTQ4QTlERTQ1NzlGQzhBNTQ3QzMKK0M4Q0IKK0E5QTlCNzg4OTc0REYzNjI0OEQ3MzEKK0ZDNEU2MEU1CitENjkwOUExMjRBRDA2QkY3NTc5QjI4OTRDQkRBCiszMkZGMkI3MDMyQkZCM0E3CitGOERGNEI1NgorNkZFODEyMjdGRDY3RTY3NzIwOUZCMjUyODlCREQwM0E3NjBDRkMzQzkyNENCRjgwQzAzQzFDOUIyRkM1M0RCNjVBRjEKK0U4NDNDM0I3RkRCMjhENzFBNDUzQ0E1RDIwNTUzMjBGMjdEODRBMTc4MDczQ0FEQzEyRDQwNTZGQkI3NDA1QjZDOUM4N0ZBRjk2REUKK0M4M0NFMjY4QTZFQzVGMDBGREIxODhFMUJFRkI1MTA3RjIzNkE1MkMxQUVFNTlBQkM5QjQ3OQorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFsxMDYgNDUgNzc1IDcxM10gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI2OEYxNjE5NTQ4OTY0ODk5M0I5QzREM0I1MzRGQTg4N0MKK0RFRjYwNUZBODdCOTkxRjREMjBBOEY3OERBQ0UKKzVBNTRDMDcwRTAzRDVDNTlEOUQyRDNFMDZCMDlDRUUwMjhENjhCNjJBQjNBRUM0M0MxREQyMEJBNzBEMjg4NTk3RDlCRDhFMDY4MThGRjc2NEVCQUI0MzY3MjM5ODhFOEQ3Q0E1OUUxNkQzOTAzMjUxNkJGQzVENTUyQUNERUVDNkJFOTM4QkVGMkY0M0NGRkJDODExQzM2MjZDNERGNUY4Q0YwODA2NzY1MjBCNTFDNjBDRURBRDFGRTZDOTJEMTQzMUM3MDIxNzRDRTUxN0E4RkE5Mzc3RDA3NUEwQjY4MzNEQUIxMDFEQjY1Mzk3RjE0MTlFRjVGMDAxNgorMDA0RgorNkYwODI0Rjk2NTdCQjRGMUM4Rjk4MTcwOTk1Njg2NUY2ODU1RUZBRQorOTI0MkFENTUKKzkxQkJCRUUxNjNEODQ0RERBODk0RTEzMTkwQzkKKzI0ODA0MzlFNEM3MUNBREEKK0JEMDQzQTlCCitBMzE1Q0FGNzI2NTJBQTdGRTZEQjJFODREODJBNjExMUNFNERFOTBDMDJEQTBBRkZFMjYyMDkyMjI2MkE0NUFCNEVEMAorRUVDOUY0NTIwREQxMjcwMzQ0MkY3RDAyOEQ0NTI2QkQ4Qjc3MUUwOUZCRTExQjI3NDlFMkQzOTA2ODk0RThENEJGRDNGMzc5RjE0QworM0M4NzRGNTUwNjA2OTY1RTIyRkU0ODdCMjQ3QjVDMkQwNjcyODQ5MEM4RjJBM0I1ODhDREZDCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMmIgMTIuMDAgL1BTT3dzdGR1dGNoYiBuZXdGb250IGRlZgorL3dzdDpkdXRjaDE0YiAxNC4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTAgMTAuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTQgMTQuMDAgL1BTT3dzdGR1dGNoIG5ld0ZvbnQgZGVmCislJUluY2x1ZGVSZXNvdXJjZTogZm9udCBIZWx2ZXRpY2EKKy93c3Q6aGVsdnBzMTAgMTAuMDAgL0hlbHZldGljYSAvd3N0OmhlbHZwcyBJTEVuY29kaW5nIDAgZGVjbGFyZU5Gb250IGRlZgorL3N5bTpjbGFzMTAgMTAuMDAgL1BTT3N5bWNsYXMgbmV3Rm9udCBkZWYKKyUlRW5kUGFnZVNldHVwCitHUworMCAxMzk3OCAxMDgwMSAxMzk3OCAxMDgwMSAwIDAgMCBjbHAKK3dzdDpkdXRjaDE0IFNGCiswLjAwIDAuMDAgMC4wMCAxLjAwIHNldGNteWtjb2xvcgorPDBlMTgyNTIyMTgyMzE5MDcwMTA4MDEwOTE4MjAxNjFiMWYxNDIzMWQwMTE5MjEyMzAxMGQxODE0MjQyNjIzMWMyMDFhMDEwZTE4MjUyODIxMjMxZDAxMGY+IDIyMDcgNTU4IDAgNzM4NCAtMSBzCis8MTgyMzE5MjEyMzFmMTQyMDE2MTg+IDczNzUgNTU4IDAgODU5MyAtMSBzCit3c3Q6ZHV0Y2gxMCBTRgorPDA2MDY+IDkzNDYgMTMzODUgMCA5NTIyIC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDRlNjU3NDcwNjU3MjY2M2E+IDEzMjIgMTMyNjcgMCAxOTQ5IC0xIHMKKzwyMDUyNjU3NjY5NzM2OTZmNmUyMDMyMmUzMTNiMjA0MzZmNzA3OTcyNjk2NzY4NzQyMD4gMTk0OSAxMzI2NyA0IDM4NjggMzIgcworc3ltOmNsYXMxMCBTRgorPDAxPiAzODY4IDEzMjY3IDAgNDAxOSAtMSBzCit3c3Q6aGVsdnBzMTAgU0YKKzwyMDMxMzkzOTMzYjEzMTM5MzkzNTIwNDg2NTc3NmM2NTc0NzRiMTUwNjE2MzZiNjE3MjY0MjA0MzZmNmQ3MDYxNmU3OT4gNDAxOSAxMzI2NyAzIDcxMzMgMzIgcword3N0OmR1dGNoMTRiIFNGCis8MGEwZjBlMWIxMzE3MTY+IDEyNzEgMTQ1OCAwIDIwNTUgLTEgcworPDAwMDQwNTAyMDAwYjEyMGYwMDA4MGYxYjE4MGYxOTEwMDAwNzBjMWIwYzBkMGMxYTBmPiAyMDU1IDE0NTggNCA0ODI0IDAgcword3N0OmR1dGNoMTIgU0YKKzwwODIwPiAxMjcxIDIwODYgMCAxNTUwIC0xIHMKKzwwMDIxMjAxZTFjMjAxODAwMTcxNDI1MTQxNTE0MjQxODAwMjExOTAwMjAxODI1MjIxODIzMTkwMDIzMTgyNDI2MWUyNTI0MDAxYzI0MDAxNDI3MTQxYzFlMTQxNTFlMTgwMDI1MjEwMDE0MjAyOTIxMjAxODAwMjgxYzI1MWI+IDE1NTAgMjA4NiAxMCA3MjAzIDAgcworPDAwMTQwMDE5MjEyMzFmMjQwNDE2MTQyMjE0MTUxZTE4MDAxMzEzMTM+IDcyMDMgMjA4NiAzIDk1MzEgMCBzCis8MTUyMzIxMjgyNDE4MjM+IDEyNzEgMjMzMCAwIDE5OTEgLTEgcworPDAwMTQyMDE3MDAxNDE2MTYxODI0MjQwMDI1MjEwMDI1MWIxODAwMGIyMDI1MTgyMzIwMTgyNTA1MDAxMTFiMTgwMDEyMTAwYzAwMjUyMTAwMTkyMTFlMWUyMTI4MDAxYzI0MDc+IDE5OTEgMjMzMCAxMCA2NDYyIDAgcword3N0OmR1dGNoMTJiIFNGCis8MTIxYjFiMTgwNjAzMDMxZDFkMWQ+IDEzOTggMjY3NyAwIDIzNjIgLTEgcworPDAyMGUxYzE4MDIxMjE4MDIwZTE3MTUwMzE2MGYxYjE4MGYxOTEwMDMwODBmMWIxODBmMTkxMDA5PiAyMzQ1IDI2NzcgMCA1MDM5IC0xIHMKKzwwYzExMGYwMjEyMWIxNTE0PiA1MDMxIDI2NzcgMCA1ODIxIC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MGE+IDEyNzEgMzAyNCAwIDE0MDIgLTEgcworPDIzMjExZj4gMTM5NCAzMDI0IDAgMTc2NSAtMSBzCis8MDAyNTFiMTgyMzE4MDAyOTIxMjYwMDE2MTQyMDAwMjQxODE0MjMxNjFiMDAyMTIzMDAxNTIzMjEyODI0MTgwMDI1MWIxODAwMTcxNDI1MTQxNTE0MjQxODAzPiAxNzY1IDMwMjQgOCA1ODAxIDAgcworPDAwMjEyMzAwMTUxODI1MjUxODIzMDAyNDI1MWMxZTFlMDMwMDI0MjYxNTFmMWMyNTAwMjAyNjFmMTUxODIzMjQwMjAwMTExYjE4MjMxODAwMTQyMzE4PiA1ODAxIDMwMjQgNyA5NTMxIDAgcworPDE0MTcxNzFjMjUxYzIxMjAxNDFlPiAxMjcxIDMyNjggMCAyMTg4IC0xIHMKKzwwMDFlMWMyMDFkMjQwMDI4MWIxYzE2MWIwMDI4MWMxZTFlMDAxNDFlMWUyMTI4MDAyOTIxMjYwMDI1MjEwMDE3MjEyODIwMWUyMTE0MTcwMDE2MjEyMjFjMTgyNDAwMjExOTAwMjUxYjE4MDAxNTE4MjAxNjFiMWYxNDIzMWQwMDIxMjMwMDE5MWMyMDE3MDAyMTI1MWIxODIzPiAyMTg4IDMyNjggMTQgOTUzMSAwIHMKKzwyNDIxMjYyMzE2MTgyND4gMTI3MSAzNTEzIDAgMTk0NCAtMSBzCis8MDAyMTE5MDAyMDE4MjUyODIxMjMxZDAwMjIxODIzMTkyMTIzMWYxNDIwMTYxODAwMWMyMDE5MjEyMzFmMTQyNTFjMjEyMDA1PiAxOTQ0IDM1MTMgNCA1Mzc2IDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDM0KSAzNAorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDQ0IHB1dAorZHVwIDMgL0MwMDQ1IHB1dAorZHVwIDQgL0MwMDQ2IHB1dAorZHVwIDUgL0MwMDQ5IHB1dAorZHVwIDYgL0MwMDUwIHB1dAorZHVwIDcgL0MwMDUxIHB1dAorZHVwIDggL0MwMDUyIHB1dAorZHVwIDkgL0MwMDU4IHB1dAorZHVwIDEwIC9DMDA2NSBwdXQKK2R1cCAxMSAvQzAwNjYgcHV0CitkdXAgMTIgL0MwMDY4IHB1dAorZHVwIDEzIC9DMDA3MCBwdXQKK2R1cCAxNCAvQzAwNzIgcHV0CitkdXAgMTUgL0MwMDczIHB1dAorZHVwIDE2IC9DMDA3NiBwdXQKK2R1cCAxNyAvQzAwNzcgcHV0CitkdXAgMTggL0MwMDc4IHB1dAorZHVwIDE5IC9DMDA4MCBwdXQKK2R1cCAyMCAvQzAwODMgcHV0CitkdXAgMjEgL0MwMDg0IHB1dAorZHVwIDIyIC9DMDA4NSBwdXQKK2R1cCAyMyAvQzAwOTcgcHV0CitkdXAgMjQgL0MwMDk4IHB1dAorZHVwIDI1IC9DMDA5OSBwdXQKK2R1cCAyNiAvQzAxMDAgcHV0CitkdXAgMjcgL0MwMTAxIHB1dAorZHVwIDI4IC9DMDEwMiBwdXQKK2R1cCAyOSAvQzAxMDMgcHV0CitkdXAgMzAgL0MwMTA0IHB1dAorZHVwIDMxIC9DMDEwNSBwdXQKK2R1cCAzMiAvQzAxMDcgcHV0CitkdXAgMzMgL0MwMTA4IHB1dAorZHVwIDM0IC9DMDEwOSBwdXQKK2R1cCAzNSAvQzAxMTAgcHV0CitkdXAgMzYgL0MwMTExIHB1dAorZHVwIDM3IC9DMDExMiBwdXQKK2R1cCAzOCAvQzAxMTQgcHV0CitkdXAgMzkgL0MwMTE1IHB1dAorZHVwIDQwIC9DMDExNiBwdXQKK2R1cCA0MSAvQzAxMTcgcHV0CitkdXAgNDIgL0MwMTE4IHB1dAorZHVwIDQzIC9DMDExOSBwdXQKK2R1cCA0NCAvQzAxMjAgcHV0CitkdXAgNDUgL0MwMTIxIHB1dAorZHVwIDQ2IC9DMDI2MiBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMjUgLTIzOCA5MjAgNzIyXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjBFRjFERjRCODM2NjNERTAxMDM0QUEzOUU5OEY4NjI2MTlCCis2OENEMTNGMTQ0NTFBOTZCQTQ3MjgzMEYKK0RCRUY0OTRCRTRDQjVFODAzRgorREI0NkZFOEIKK0NFMzFDOENGRDY5QzA2QjQ4ODc1RDg2RDlGCis3QzFFOTg2QzkwNEE4QzQxNjU1OEE2MTg4NkM1NDdGNUZFOTkyMzE3OEM1Q0JDQkYzMDdENkQ0NzVGRjE0QjEzQTA4NUVCQjc3OTY0M0Y4RTFDRkQyOTlGRjNEOUIxREVDRTVBMjlEMjc5NENBMjg1QUUKKzAzM0FDOUY3Cis0MkE3MTk0N0Q5MUVFNzRDMEZBNTYwQTFDMgorOTAwRDkzQzcyNDg5NTlGNzBDQzBBOEM4NjU2RTI4QkZGOEVERjc3NDk4RTZGNworMjdGMkY5OUMKKzMxOENGNDYxQTM3NTE2NjJEMzIzRkI1NTdDCitCQzUxRUQwMEU3M0JCRDQwQ0I1RTBENzI4QTJDODBCRjAwMDdGM0UzNjI5QzE0MzdBNjU5Rjg1MUY2REJGRQorMTgyRjhFQTUKKzM4ODVFMkJFRTg3RDQwQjk5NjgyRjY1MzBDCis1MDE1OTVGRTNGRUIyN0QxNjY0QTYwMzc4OUI1MTlGRjAwMTczNDY3Mjc2Nzk5RjZDOEYxQkFBRjA0MjEyNkY0NEI3NzczRjQyQURFQkJDNzBFOTk2Q0RDMzNFQzA2NjlEMEZERDE2Njk3RTBDQUE3QjQ0NjQwQzYxMzVBRDMKKzdEMTU1RjQ5CitCRDREOUJERUU5MDUwRkExQkI1RTAyRDdEQworNDYxM0M4N0ExODA1Mjk1NjI2REFGNkYzRkU4MTQyQjE1MERCRDlCNDc0OEVDMEI3Q0E2MEM2Qzg5OEFEMjMxRkU1QzlCNzQ4M0JGNTEzMTQ4MEU5ODcwQTZFQUFGNTRGODMyMDExNUIwQkQ3Q0Y1MzI1QkQ5QjZDMjBEQ0YyNjU3Mzg2QTBDNDFCQzUzQjYwMjM3MkU1NzRGMzg1OUMyRDhGMzJBQzI1NjhEMDNBOTc3OTc0CitCNzc4NUY4NQorNjI2MURDRTFFMjM4MjkzMEMxQkEwNjJFRDEwMgorN0M3RDkwMkE4MDc2REZEMTk5OUJCMkVFN0M2NTIxQzNEODQ3MjhFQjlDRjRCNUUyNERFNjc3RjUxMTEwRjgyQ0JFRTlDNDZFRUM3MUJGMUQ5RUY1RTVGMENERDQxRTA2RTcyRDBCRDk4NUFCMDREMTlBQUEzOTdGNjBEMUI2NEUzNDE4RjI1MkRCMDhBM0I1MkQwREM0RDdDMTgxMzMzOEI3Qjg4NzUyRTQ5QzU1NkI5OTEyQzJBM0RCQTBDOEVFNTI5QUU1QkE1MTMwNkFFOTE5ODJERTg5MTAxRDAyCisxNzQ1RDRGOQorNDUyRDIwQTZDMDhGRkM0MkY1REM5NTA4MjIKKzAwNDQ2NDM0QUFGRjBDQzdBNzEzNUZCRjAyNkRCMDU1NERBODhGOTM2NkZGMjZFREQwNEJGRjlENjIyQTREQTQyNUEyRTBDQTgzNjQ3N0NCRjEwNEI4QjQ2QjEyQURGOTQyQjE2NjMwRUM0QjlFMjhFNjYwCitENTI0OTVCMgorQkU0OUMwNTlBNEM1MzlBN0RBNkQ3N0Q2MTIKKzRENzVCODRDNDU2NjEzRDQxMEI2QjQ5REFCMjE5QjY2MkFCOUNDMkE1NDVDQzVCQzJBNzkwMERENkE4RDlGQzdGQjg2OEVEOUY2NTYzNkEyQzEwMThFNUVENTczQjM0NzUwODZDOUQxM0IxMQorMkNENkQ3MUMKKzA0QzMwOTQ4NTVGNzc0MkU3N0U5RDhFNkVCNUUKK0E3MUY3MjA4MDA1QzY4REVENjQxQUQ0RUNCQUY3Q0E3Q0RDN0QyQTI2MDYxOTFCNkQ2NjdFN0Q0RDRCQkU2RjMwMzBGMjgxRUVEOEREOEQwNkFERDVGM0MzQUI4NUFFOEU3M0UwQ0E5MDRDRkM1QUQ3MkYwNkQzMkQ1RkZENzlBQTc2MjVGRDc3NjMxNUI4MUI3NTdEMEQ2MDg3QkY2QkQwRTc1QTNBNDM0NUY3RTBFNUE1NUIzQkEyRkQ5NTVGMzQ5RDRFMTU1RkM1QTVEN0Y0MjlGMzY4RTRCNDRGRjExN0YxRDQwCis2NTQ5RTAyNworRjhBRjQwRTQ3OTg3ODQwODZDRkQzNkI0OEQ0OQorRTg5RjBGOEJBNDVGQzcyODAzMTE5Mjk1Mjg0QkUwQjJDQzJFMTcyNzdGM0UyRkZGOEQyQ0QxQTM2N0Q5Nzc1MTU1MTY4RTQzNUUyMDJFRDhGRDZCN0QwM0E4QjRDMkJEMTRGMjczMTRBRDcyQTdDQjZGRUQ4OEQwQjhFMUY0NjVBOTJENkFCMUM2MTFFOUQ4MTc3NjNBRDI2MUM3QUE5QTFGRTFDNUNFMjQ1MjRBMjY5QTU3ODkzRDBBRjE2RDBDMzMwMzY4QzVBODdGRUZEMjlDQUE0QUIzRjNDRkM5NUY5REIxODdCNjYwQTk4RjA4QzE0N0I3NEFEREI4CisxMjZFCis2QgorRDc1MzRCRUIKKzc3ODA3RTIyMjE2M0M2NTExRDk5MkU1MTY0Cis1M0VDNUY3QjhBMTFFOUVDQjI5NzY3NEJCREMzOTE3NkIxQzI0NzJGNjI2RkJBM0FDMkQ2RUQyOUIwRDRBODRGQjgyNzdFNDZGMzQzNkE0NjA5N0YyM0NGOUMwMTlGMDZDRkM5ODM5RDNEMkMyNTE1MzEyQkE5MjYyQ0EyNjE0RjI2RkU1MjlGNzY5NTlDNEIxMkVFQzRCQUI4OUU0NjkxMEIyQkFBQTJGQkM2NjM4RTYwQUVFREEzNTJGNDc2MEJBMzExMzMKKzJBRDA2Q0E0Cis0MjhEM0UzMkJFMkYwMjBFNDkxQjM1QkE3RTFCCis2QjNERUREMTlBMDM4QUU2RkRFQjIwNUVBMDk0MEYyRkU4RURCRTQ3MzM3RUIxRDM0RDU5N0ZERjgyMUVCNTdCNjVGOUNCN0FBRUMyM0VCNDMzOEUyRURGQ0QzMzNFNENCQURBRDBCRkVGRUZDQ0I0NjAxRjlDNDI1RUQ4OERGOUNGQjA4MTNFOEIxQ0VEQTBERjRBQTY3MTM0RkIwN0I3NzlBREUxRTM3MzQ1RkRFNDVDMDBDMzUxRTg1QjAyNTgxQTdEOEFDRUZERDI2RTY5REQKKzZGMDc5NzMzCiszMzIzRjk5QTVFMDI1OTg4QkY4MkQ2Mjg1NjQ2CitBRkIwRDE2MzFGMjk5ODIyMkZCRDBERkUzNTU0OTJEOTE5QUVDQUQxNzhBQjdFRTRGNjk4QjdDODhGQUM0Q0U3ODFEMUQzMDI5NEIwOTk5RTE5Q0VFQTBBNkIzMkQzOEMzQTFBNUQ2MTA4QTU5MTMwRUI5MjFEQzM3MzI1RjVDNTg0RTk0RDIwRjQ0OENDMDQxQUYwMzdDOTNGMkVEM0FBMjE1QTU0NEYyMUQ5NTQ2NjUwMjVFRjEzQTI1MjYwNzFCMTgxMDUzNEFFNDFGRjk3M0QwOENBRjFEMEJGQjgwQTlFODIzQzk4NzZCMzNCRTlENThBNzhFOUQ1MkEKK0Q4OUQKK0REMTA5QkJCMDJFMjM4MTVDOTBFOEQKKzY3MEU2RjIxCitDMjk3NTBDN0JFNDBDOEMzQjAwQTZCRkY4RQorRjI5ODc3RkFCNDU0Rjk5NDA4Mjg2M0NCQTNDNUU2ODBFRTgwQTVCQUUxNTJEMjhFOUE2ODAyNEExQzExRTY4Q0I1MjdDMEU1RUU2NjU5MEU5OThFODkwNkVCRjU5OEQ5NEMxMkIzQUZEQjAyQjQ5ODREMDY2NworMDU0MDI3ODQKKzYzRTcwQjUzNUUyMzAxMUQ4QURCMDBGRUJCCitGRUYwNTE4MEM0RTNDN0M3N0NGMkY1NDQ3N0NGMURDNzUyRTU2NEFGN0QxMDVBNTk4MUExNDIxNUI5NDE5RTQ3RUJBOUQ5RTNCRTA2MzU3ODIxRjA5NTczQ0MwNDBFNTk3NkNEQUZDRTI2Mjk3OTVGQjc5Mzg4N0E0QTA1REZBMTIzRTRBNjMzQ0M1NEEzCisyQzI0OUY2RAorNUQwQTk1ODk4QzJFNjg5RUFCM0VBRTM3NzJDOAorMkFDMEVEODBFNTBERjY5NUEyRTY4RTFEMTA5MjgwQ0ExMkY2QjMyNjg4Qjc1QjFCMEY1Q0FCOUYyNkJDNTZERTFDOUE5MzJEQjUzRTNEQjM1MThCMThERTg5NzhGRTAxQjgwQjA1MjJDNzA4NjhCOEM3NEZENjhDMDJGN0NEMTFEMDY4NjQ3MEM2M0JGNkRGQUM5OUI4NkQ3NkU0MkNFRTA2RDE1QzE0MjE0QjhGMEFEMjAyNDJEMUVBRkJFQTU5NjA1OTc5MTI4Q0FCODUzODcxNkQ0RTA4NkFFOUY5Cis0RDNCODY5QQorM0JEMTJDMUY0MENFQ0IxOUU3RDNCMDFENUQKKzM1MDc0NUVENjFGNTUxQzNEM0ZDMDMxNTczQjAwNzNGMkI3NDJENTk2OTgwQkVGRDk4NkFERTUyRDZEMUVCQjc3RkU3RjQ1RDVDNDY5NkZBQjZDRUY1NEZERUE3OUQ3OTgzOEVCODk4NEFBN0I5OEY3RjYxM0NDMDk1QjI3MTEzNzcwREU0NjVFRDcwQThFQjk4NDc1QUQ3QUQ4Q0JEQ0M1MDFBQkUwN0U0Njk3RjI4MzkxOUY3RkUKKzM1MTNCQkU4CiswNDMyQTM0Nzg0QjhCMkE5MkY0OEU1NUVDQzVCCitBMkE3QTNDNTE0NjY3QTQ2NzAyMEZBNEQ4MEZDOTdCOEMzODM2QTM2NDdGOEY3MTg0RkYyMTdENDNERUZGOUI5N0M4RTNFRUM5QzA4NjI5ODU5NUQ2NTI1QzE5MjA3REM0MjJDRDVCNkEwOEE1REJBQzg0MEUxQkQ2OTdERTc4Mzg2MDEzMUI5OTg0MUE5OTYwQ0Q5ODEzNEIyRDYzQjQzRUI3NzM4RkM3QjU5QzM3NkFFNTY3Q0FGMDIwMkM1MkMyNUM5NzhFNEYxNEVDQ0QxOEJCRAorMUUyNEFGNUMKK0VEQTQ1OUQ0NEM5MDBCNkQ3Qzk1M0I1NTc4OTYKKzIyNDc3MTQ4N0NDNjM0QjA0MjdCRjEzOTFDMTI1QkJERTVFNzJDRDAzMjU3OTFEMkRCMzI1OEY4RTk1NzRGNDFDMEFGRjZBODk1NjZGQzM1QzhDNkUwMzk3OThFRDdGREFDNkUxRTE1MDJGNERFRURGQkQ5MEYyNkI3RDFEMjFCNjg2QkU4MDJFODU1RDQ2RkYyNzk2MzQ2RUU2RTgwOEU3RUQ3NDZGREE4MTNEOTEyQTI4MDY1MDQwQTBFQ0M4MEY3QTIzN0VGRjI4NzJBODRCMkUyMDk3QUVGQzRCRkU5MUUwNjY5QzQ5NEU2QTA5RDY5QUU5Njc0RTlBQgorRDU4NAorNkYxMDFFCitCQzk2NDQ2RgorRjRCN0E3Njc0RTYzQTc0ODQ0MjIyMTI2QjIKK0Y2OTVGMUE3NzIwRDNCNjM4M0E2MkI4NTMxRkFDRUM1MkY2RTcyQzU0OTIxREZGNDVDNDJDNDk2QTQ1NjIxNEU3RTQzNTQxOUVDQzFCOUNFQ0QyRDdGRUNBQTM0MTkyRkMyM0Y0QkU5RUNFREEzNzdEMzNDRTIxQjUzOEQwN0RERkMwMjc3RDFBNDI5QzMzODI2QzlCQTdBNjQwMzREMzI1MgorRjQxNUQxNjYKK0FGQzZEQkI5MzU2MzRBQTk1RkYxRkM3NDA3MjUKKzQxOEFEOENDNDAxNzBGMjkwMkYxNjhFRjNCMTcwMjZDODEzQjYzODBEQTRGQzBDQjU4RTBCQkMxMDUzMDIyQjIzMzkxMDQ0MDkxQUZENTFDNkQ5RkEwNjZBNkJENEZCQUI3NjY0NjNDOUZBMUQ4ODYxRjAxQjg1NkM2NjlGQ0YwQjAzOEExRDVDNTEyREZDM0FEMTQyRDM2MzZCN0ExREU5QUY0NEIwODhFMkMxMEQ4RjAzOTY1MTA2REQwQzE5Nzg1NzVBQjI5CitCMTA5QjcxMworREIxOTA4OUEwRjRCODA4QzlGOUYxQkE0MTQ2MworODhEMTUwNTZEMTdBNzVEODUxQzAyNzk0NzZGQzFCODcwQkY1RjEwMTI5MjI3QTNGQkVENjIxMUUzMDU4MEU2MzY3Q0M0RERDNkZEMTJCNzc1NEEzN0IyQjVBNTlGNDBEM0Y1MUQwRDlCNDUyMzM2MDgwRkZEMjVBQjAyNUY4QUJERkU0MjlERENCNTczREE1NUU1RTU2QzFDRDFBRDZFMjZBNjQzRTQyQTlCNUVGMDU3Njk1OEU3OERBNzIzNDBDRUQ2MkNDQTJCMzgwM0ZFMTQ1N0I5QUM2QjY1MTkxREMwRjY5MUMzNEM3QjdDOEMwQ0JFNzVGNTBEMDk0Cis2RTlCCiszQkU1Q0MKK0FFODAwM0QyCitDNTA3RDNDMzlEMjM4REQyNjYwNUFEOUUwRQorMTk3MkVCRjI4QjA4Mzc0QkE5MEM0RTE0Q0MyRjRDMDNEMzA1QTRBMUFERjI3OTUyREY2QjdDMkQyQThDNDZFQjhFRTE0M0M4NkZENTkzM0MxNkQ3N0NCQ0JGQUFBOTkwMUJGRjkyMzJCM0Y5MUEyRUZFRjJBQ0EyOUYzQ0FDODhGOEM0MTQyQUVBQUVBOTJFNUVBQ0JGQUREMTkwQkJGRDM0NUE4REUwMTFDMTg5NTQKK0UzQzQ5MUJDCis5OEQ3MkJGNUVCRTlENkVBMjE0Q0UwMjk4MworMTE2RTE5QTFBRjQ1QjU1REZGOEY4QkY2RDVFNzg4QUJGRUU2M0RDOUE0ODBFOTEzOUI5NzFENTNDRTZDNTIwREVCRUJEQjI5Nzc1QTFCOTc1RTQwOTQ5OUE3RkE4NTc0NkJFN0IwQ0FBRTE2RTczOUQ4NEU1MUU5MjE2NkFFMkMxRTdDN0E0QkYzNjg5MkIzRjdFMkVDNEM3QTQxNjFFNEE5OUMKK0YzQkIzNDI4Cis3MjA3NTA0NzZGMDg4NzlFOEM2NTg0NDYzOEI5CitFQzUyMTRFQjMyNjk2NjIyOUVBRDE1MEFDNUY5OUU5MkU3QjUzNkZGQzFGQzkxQzExQzRERDA5QkI5RTI0QjE2ODAwOUNBOTNERTY5RTI2NURFMDY3QjZGNTkwQTBBOEQ0M0Q2OTc4ODU3OTNCMEYyQkE4MjQ3MjdEQUFBNUU4M0VEMTVEOUFGQzEwNTU3MDIzQjlGNTBENUE4OTA1NEFEN0MzMTQ4NjM3OEM0NDlCMEZFNTJDNkI3Q0UzNkUzNUE0QTlDOUZGODZGNkQyRURBRTg0MEIyRjRFMjNBCitDOTZDRUZCQworN0FBNkFGMTRFMUE3NzUxRTJDRDgyMUYxMjUKK0REOUI0Mzk2NDkyRDFBNDRFREM3RjlFOTE1NUQ4REY4RDA3QTZEQUZEQjYyOEI3MTBBOEQ1ODE1NEU5RTUyM0JCOEEyMjg4OUYxODQ2RDg1NjFFOTI3MUVFQUZBMzUyNkIzQjBDMzdCMDI1QzFFODkwMzc1QzExNDA1RTY0RjRFQ0I0NTU0MjZERTFCQjFFRTM3NTc4N0RBQ0Q0REE2MzE0RTBDRjI2QjFDRUE2REMyQjIKKzNCMDgxQTA4CitFRTE2REUyOTg1NEVDNTNBRDQxRDY4QjE1RgorMkI3NDkxNEI2RDczMzQwMEM3OUY4QTNGM0UzQUI3MjA3M0Q1MjY1NDg1QkI5QURDRTBEQzZFNEY0MDNDMDNDRDdGQzI0Q0FBMUQ1MzVDNjFDN0JGRjU3QzA2NjI0NTg4MUVENzMyQTI1Njk0NzYyMTQwRkFERDBENDc2QTlBMUY0Rjg1MjlCM0NDNUU0RjMyOUM5RjdFODIwMEYyNEQzNjJENjBBRUYzMjc1M0U2OEFDNEYzRDFFNworOEZFODgxQzcKK0Q1Q0I2MjcyOUY1OEQxRUE4MjYxNTA4QjFFMTkKK0VBRkE0QzY3RjE0MjVBN0UxREFGNkZBREEzMzRCOUNFOUFDMzA3MENFQzY2MDVDODcwMTdDQTFGMjY2OEVEOTE0MTI1ODIxNTQxMDQ4NEVGRTlGM0VEOUMyQ0E5NEQ5NEQ5QTBDMzQwQkVFMzk3MUI1MEQ4ODRDRjkwOTJFQzU1NkYxOEM1MDcyMUJFM0E0NTZGNkY0REI3NkY2OTI1MzM0QTM3Nzk4MEVFQkE2NDQ5RkQzNzkwRkY5MTQxMTJCRThCQ0I5M0M5ODZBQkEyNDdFNEM0QURBOTJFRTNDMDhGRkIwQ0Y0NDM2ODNBM0MzNjg3QUQ4MjNGMzk0OQorNUIyRgorMTJFMjc5OUQxQTJBQjM2RUE0MDVERkFEODdDQ0M5RjRDRTM1ODg4MTVBNTY2NEYxNTYyRUU2QzJDQThDRjdCNDcyMEU1RDBBREVDNzZENThDOUQzNTY5NjdFNTAyQgorMkNFN0RBQzIKKzVFQUY2MUNBRkU1NUJFMkIxNDk3RDRDQkJERjIKKzI3NkE0Rjc0NzU4NjAwNEYxNzE2RDcyMjBFQTQ0Q0U0MDhCNzg3RDhEMjlGNTI4REEwMzgzMUFGNzQzRjE3QTY4M0E0NjUyOTdENkE5NUYyQ0NFOUQ1NjJFMjM5NkIyOTc3NDI0QzdCNTVFNjEzQzc1MjJCRjZGOTA3N0VEMzA3M0Y4OTE1M0I1QUZDQzZBNTVDRkZGOUJBNDEyRDUyREZENDZDNkNDNjQ0RDg1QTNBRTlEMEIxOTcxOEZDQjJEOEY1QUYwNTQ3MTQzNzEzQ0Y2QkJENUFCMEIzCitFNkNEMUFCNworMTU2REY3MjQyNEE1OUE4Qjc2NjAxOUQxMzEKK0VEOEI5NEUyNTMzMDkwMUFCODk0ODgyREI3NTgyNDk1NzZFODU0OTRFRDY0OTc5MEE3MjZCRUNDQzEyQTc1QzYxNERBMEMzREZEMjU0QzZDMDcwNjgxMzhCQkM3NzQ3QjJCNkYzQUY2QzFCQTk2QTE1Qzg5RTZBOUJEMzRFNkI3NDdCNkFBNTcwMTcxMTAwRTFBMDY3RjRBMDRGOTM1MjQKKzlGQTJEQTM5CitFNzNCNUEwNTI4NjdDNjhDMjNBQTMzNjA1RkZGCis5OEM3RDAxMTQ4MDI2RUFCRUQyNzU3RkJCRkExRjk1NjdFOTI4NEY0QTkyOEM2RDI0Rjc3MUIzOENCOTVBMzUzMEU3QkI0QTZFRUMzNDgxQTNEQUI2NUFBOUE5RUVCNTdDQTA3MUI5Rjg1MDIwNTZFNTg0NzdCMzQzRDgxNkQyNjBERUE2ODI5Q0JERUNFQ0RCMTQzOUI1NkVDNUM1NDlFQUUwMEU1ODlFOThGMTE4ODRCMDU0NTNGMEQ0OTgyMDNFNjQwMkQ4MDQzQTI5MjQ4RThEQzU3MTg1RjBEMUIzMjM3OTYyREVGNDcwMTc2NjMwQjVGRUE1ODAyNjUKK0I0MDYKKzVEQjVGNzIwQTM5QzQ4NjhCREQyNENFNDA4MUZENzM3NDFEQTQyRDk2NDc5NkE4REQzMzkyRTExNDAxNEU4MkZDQTM4RDgKKzY5N0E0M0I1CitFRTc0QTFCMDYzODhGNThCMEQwMDkxQjNBQQorQjA3MTBEQzA5OTcwNkQ5Q0I3NzAxQjE3MUM0N0NCNERDODM5MjU4MUMyQjZCNzQ4RUQxQTc2OUUwQjU4RUVDNzE5RTg0MTY3MkVERTk4N0JDRUFBOTdEMUU3QjNFQjMzNzlENDc0RUIyMTQwCitBNzk3NTQ1OQorRkFFMkUxOEU3MUZGQjU2ODFCNjc3RUZGMDU3NgorNkU5NjQwQUQyQjUyMEVEODU1RUVGMjExQTQ0M0JFQkVGNjY0RUY2NTJCQ0YzRjE3OUU2REMyNjY4OUU3OTIxMEIwQ0FENDA1M0JCNUJGRUYwNDBFMkE1M0U4QkNBOUIwM0IyMkY4RUQ1QUZBOTk1RTBGQTI5MDdDNUIxMjAyMkY4MzM1NkFGRTE1MDUyOEU0MjkyNzExQTkwQTBFN0RBOTBGMUZDNUJCMDkyRUQwNTgzMjA0MTZFMDVBOUI4OTRDMjVEODY0ODBGQjhGMjI3Q0Q2NzVDOTQ5N0E1M0M5RjVDMEFGQjcwRjgyNTBCN0NERUE3MjEwQjQ2Qjc1Cis1RUM4CitGOTU1MkU2ODlFMDFDNzkyMENGQTREMjI4RjczOTkzQkMyMjk5MjYzMjQwMjUxNDU0RjU2MjM0QjE5MzI3RAorRUZBRTJBRDgKKzkzNTcwQkQzOURGNENBQzUwRDg4NUVFNURBNTIKKzM5NzdGQjE0M0U2QTdFMzZERjlFOTE3RDhBQ0Y0MUYzQjUzMDI3MDIzQjI3ODQ4MDA2MUQwNzlGMTU0RkZFRkJGRjcwRjQzMUE4QUFCODU0MTdDRjE3OEYwNkQ1Njg2MzA3MDlDOTc4NzhEQUZERThEQ0ZGQUUxN0EzQjk0MTNBODhEQjRFREUwNDM3MTVCNjk5NUREQkRDMzgwQzBFODNCMTczQUU1RTczREQ0NjY3Njg5Qzc0M0Y4QUNGQzI1NjdGM0NGMEYwNDE5OUMwNzRFQTIwQzU2QQorNDRCRTA1Q0IKK0Y4Mjg5MDc4ODlDQUNDMEZFMEE3QzkzMjBECis5MDc0MzhEQjgzNkJFQzJFNTBEMkZCMUMxNEYyRkY3OEFENDVERTI1OTZENzEzOTVFNjJBNUY2M0MyRDM3RDdFNEYzQkI3MTBBQTg4QkM4NDQ0Q0U2RDhGNDJEMEUzOEUzQzI5NTcwNEJBQ0I0QzQ3NEQ4NTBCNUZGNkRCRTY0NzRERUQ2MEM5N0RCMQorNjVFNjA0ODEKK0Q4RTIwOTFGRDM3RDY4NDEyNzZGRTQ2REU1MkMKK0MwMUEyMzJDQkEzRTRBRTE2MDdFODk0RkNGQjMxRERGMTQzRkVBQTkwMjE5ODY0NTI5MENFRDQyRENDODZGMEU3MEQ5RTQ5MTI3Mjc0NDQxMTMxQjFGNDkxQTQwRDZCQTgzQzEwOUQxODVGOUJGQjY2OEE5MzE2RTlGMEVCNzBCNDdCMUM0Q0IyMTg1NDY0OUIxRDFFNjJDOUI1OTE4MEEzNUU5Mjk5MDc4MzQzNkUwMEI2N0Q1ODg4MDE3QUJCOEU4NEU0MzRFOEUxNTdDMzNDQjcyN0FDMUQxNjBBOEUxMjlEN0Q2MENCOEJCNkQKKzg2NkMwNEJDCitBODIxRDJCRUI0Rjc3NjlCMzM1MDQzNUZGQworRjkyQTc3Nzk2QzQ4MURGNDE4NTU2MTdGQkQ5OTMzRkVERkQ0MUFCNkZFRDE1MERFMzM5NURCMzMxNzJEQ0Y2NTJBNkM5MDgyRUY3OTUzM0E0MzQxQ0IyNTI3QkM1MTlENDJCNzIxQkQxRjEzMTY0MTNENzhDNkE5RDlGMzQwM0MyMTE5NkQ4RTM2Q0M0QkE0NUIzNEVEODRDRUU2NURFNkNGMDIyQjhFOUJFNUM4CiszNDIxN0VDOQorMDlCMDhFNkRCMDcwMkI3M0ZBMTJDNTZEMTM2NQorREE4MTEyNUFCNDZEMTNFQkE2RUJDQzgxN0RENTg2NTJDNjQyQzRDOTA4MERCQTJEMzEyQkI0Nzc1NUI5NDUzMkJGMDZDOEFCNzNENzc4QUQwMDRFNDk0RTY5QUY0MkUxMjM2RTYzOEMyQkZDMkVFQkVFMEE4QjA4MzU2OTZGNjZCQTg0MkFCNTIzNjNFRDMxMTgxNEIxMkM3QzQ1RkFEOEVBNDM0Q0E0MEVGMDc1NTYwQkVDREVDMEVDNkRCRjc2MDk5Nzk0MTE3QTFGQ0E3RDNDOEMzNEU3MzdGNjAyMzdCNDBBQUJCNEI5RDJFNkY2MTk5MzNEQjkKKzUyRDJFQTA3Cis4QTVEOTY0MzNEMTA5MjVBRTBDN0ZFRUZBOAorNDFCMjI3NDVEQjBFNDQ2NTdBQTY1QzlBMkU1RDMzMjRCRENENUMzNDFFRUFGQzQyNTJFRTc3RkZDMjNFQTg4QUY4QkNDNDBFQjNBQjQ1N0RDRjA0NUI3ODJBMzdBNjFFQzYzNDMxRjA0QzQ0NkZFNkQ3NDJBN0MwMENDNzIzMDY4RjlDNzI3NjBECitGNjIyNTM2NAorOEMwMTNBM0U2ODZGRTkyQ0JEMDg1Njc2RUEKK0RCOTBGQ0Y2Njk0ODIyQ0I0NTY1MDJDQTE1MEEzNjFGRDU5OTdFREI4MjYwOTNEMEI5REY1NjczQ0QzQTY0MDZCNDY2NTg2RDY0RDBGNUIwMEZEQUMzQjQyNENENDRGRkZFQUJCRkI2NUI1OTZEQTJFQjVDQjJFMUZFODY3NDc3OTkyNkE2M0JFQkRDNEVCODQ0MzcyMzFFQThEQjc1NEQzOUUxNTQwNUYxQUI2MDc0RjM2MDg3NjQ1OUZDRkIyQ0RERTYKKzlCMzM1RkYyCiszNjY5NjU0M0M2MkQ0N0I0MkZGMEVBNDNCNgorM0VFQzUyRDM1MDZERTFDODc5RTVFNzRFMTM3OEI3NjAzN0VGQjQ2RjAyODRDMTlFNzYwMTlERDExRjE2OURERjdCNTNEQTcyMEVEQkRFRUMyOTkyM0RGOURGODVDMzNEQUUyRDY1NEE3RTk3NTY2NDQ5QjFFOEIxNTgzRTZDNkY4RkIxRTNCMTg4MTk1NURGMkJGNDU4M0JENjcxQkZFMkZGN0Q5MTA5OEI3RTlDNTcxMAorNjYwRTNEQzcKK0NEMTY5M0VFNkJDNkUzNTE1ODFBRURFRDZGMjQKK0NGQzFBQzcxMEI0ODhFM0Q0NDM5MzQ0MEE2RDU5MjQwOEZDNjk1M0I4QjJFMzQ2QkE2MDY5MDM2NDVCMjRDNDkwMjQzOTM4NzU4QTBFQkQ2NjI2RkU4RDZFQzFCRDE3MEJFQTE1QUJDNjNBMDEzQ0JDQkMxQ0U1QkU0RDE2OEY2OUUzMkExOTI1NDIyRjgyRjZBNjNBMzc3M0M5QjYwODY3MDc0NzFFODk1M0M3QzIyOEZFRTU2MjVDQUIyMUQ2Nzc2NzJCNEQ5NEZBNDVGNThGMjYxRkY5QzE5Njc5QTgxRjcyNjcxNEM4RjYwQjI2MkNEQUU3RUUxODgxQQorNUFCMAorQjY3Q0UyREYzRjAzNUVDREM5MDUwNDkxNEI5RgorQzlDMEM3NzEKK0VGMEM0NENFMEZDOEQwNzJCOTg0MzBDNDYxMUIKKzMzNzY3RDI5NzNFODgwQkYwNDZDMTQ1MkNFM0IzNTdERTY5NTgwMzhGMTdEREQ4M0QyRUY0NDE2MkQ2QkZBNzQ5NUQwOTFBNDMyRTIxMTQ3NjhFRTE3NENCQURCQzZENDI0RjIxMjZBQzJGNTBFRjM2QTY0ODBGNTE2OUJDMDVFMUU4QUZFREZBMTI0N0NBRjk5MDBFRkVEMjM0QkU1MzM4N0IzM0U0M0FCMzg1NkRBQkZEN0I1NkM2REQxRjU0NkE4NDAwNUNFNENBMEFDRkMyRDk1Q0YzN0Y0QUYxQzQ2QzcwRTk0OERFNjMzNjU3MzdDRTU5QUNBMEMxRQorNjA5RgorQkI1REM5NUE5RUNFQjE2NjJEQzMyNjhCNzI3QzkzMUFBNEE0N0Y3NTQyRjUwMEVCN0IKKzRGNDUwQkI1CitGMzc3QjE4MTcxMzQzQ0EyMDNDRkJEN0Q1RkMxCiszNTM0MTY4REE1N0I5OEZGNDEzN0NENzc1Rjc3NDdDRkUwRTA2QjI0RjRFODBCRTdBQ0IwRTE1N0QwNDZFNzFBMjQxMzg1NUU3MTQ3NjE5RTgxQzkyMEVDNzUwNzZFMTA3MzY4MDk1MTUyMDA1MUE5NDZEMzVGMDk0NjhCRUE4OUJERjcxODk0RkE4MjY1NERBOTQzMkQzMDFGOEJDMkNFNTNEOUFFQzRFNDhFMjY5OUI4NzA1QURDMzgxRDAzREQ0OEExNTdBOUExNDAwQjYwRTM3MjlGRjk2NjUwQUE3NDIyOTk5Qzc5QkVCOUE2NzYzN0YyODMxRDcxRDMKK0U4RUMKKzdCNTE2OTMzCitCRjI3MzBGQTNFMDQzMDQzNzNCQUZBOUNBMQorNDY4OTI5QTA3MjMyRTVDQjU0NjU1QjYyRjBFODcwQUExQUJDOTM5MDBCQTAKKzZCQUE5QkQzCitDN0Q3QjFDRTY0MUU2Q0I0QzEzMzY3NkExMjVDCitBRTQyRTkyRDQzNkQxNEE4CitBNkU3OEM5QgorNDlGNDA2MDhGOEJEQzZBQzEyRjdFQUQyMzM2MDUxRjUzREYzMEMxMzJDQTgwRjg0RjAzNDNDOEJCNDZFQUM1Q0E1RUYKK0MxNjZERkQ1MkVCRkUyQzBBNzBFRDEzNDIzRkVFNTQyMDk3OUJGRjQ0RTI4NDgzMjNGOTgzNzI0QkIxRjQyNTVFMUJEQjA4NUQxMkQKK0ZFREU3QTgwNkQxMEIxNTc0RjlDQUQ1MkI2RjUzQjlENkJGQUNFMkU3NEM1ODMxN0U4MzI2QQorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3dzdGR1dGNoYgorJSFGb250VHlwZTEtMS4wOiBQU093c3RkdXRjaGIKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2hiIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDAzMiBwdXQKK2R1cCAyIC9DMDA0NiBwdXQKK2R1cCAzIC9DMDA0OSBwdXQKK2R1cCA0IC9DMDA1MiBwdXQKK2R1cCA1IC9DMDA3MCBwdXQKK2R1cCA2IC9DMDA3OCBwdXQKK2R1cCA3IC9DMDA4MyBwdXQKK2R1cCA4IC9DMDA5OSBwdXQKK2R1cCA5IC9DMDEwMSBwdXQKK2R1cCAxMCAvQzAxMDIgcHV0CitkdXAgMTEgL0MwMTA1IHB1dAorZHVwIDEyIC9DMDExMCBwdXQKK2R1cCAxMyAvQzAxMTEgcHV0CitkdXAgMTQgL0MwMTEyIHB1dAorZHVwIDE1IC9DMDExNCBwdXQKK2R1cCAxNiAvQzAxMTUgcHV0CitkdXAgMTcgL0MwMTE2IHB1dAorZHVwIDE4IC9DMDExNyBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFswIC0yMDcgNzE0IDY5NF0gcmVhZG9ubHkgZGVmCitjdXJyZW50ZGljdCBlbmQKK2N1cnJlbnRmaWxlIGVleGVjCitEOUQ2NkY2MzNCODQ2QTk4OUI5OTc0QjAxNzlGQzZDQzQ0NUJDN0M4QTk1OUEzOUEzMkU5RENFN0ZBRUYxN0VFM0JFQzlGCis1MEUxQTZGQ0E2NTFGQzRCMzc2OUEwQTkxMDQxNTU3NTAyRTI1QTVENjE4MEZFMjVBM0QxMUJGMDc5RTFERjY2RTU0RUU5QjdDMjI5QUY4OTE3Mzk3MDdBMkEwRUMxNDAzMDZCNUU0M0U1MkI3OUJGQjg5RTQ1OUU1MAorNkVDNkY2MTBBNzA3NzVBMzFDNDYwOTc2QzRGNzk0NDlEODZFNTdBQ0U0OTFFNUM2QkYyMENDNDMwN0IxREFGNzYzMDI1MgorRTlBRjhDRkI2OUI1MEVEQUU5RDM2QTYxMDRBRkVGODgzMkY5MjBGRDIzNDZCMkM3MTA0Q0QxMUUzQkVFOTk5Q0ZBOUY1QQorNDlEQjMxNzNFRTQ4RDFDODI5OTQyMzdGMzYwNDA3QjAyMkUwQjQKKzUwMkU5NEVBOEI0OTM2NTFFRjJEMDNGMEI1MTNENjU1MDQ3NTY4MzI1QjUxMkFFNgorNkFDNkY1M0YzODQ4Q0Y3MERFMjU0ODFDQzY1RDhCMUE1NzkzQUEKKzNDNDI4MkQxMTExMTJCRUUyOEFGQ0E3QTM4MDhENDQ0NEM0NjY5Q0EKKzg0RUFBQUY5ODkyMTlGNTFBQjM0NzZBMUIwQjVGMjI0NkJDMzA2RTYKKzYyNUM2Njc5QzQxN0VEMkE4RTlCRDAxMERFMzdENDAyNjUwNzRDMjY4NDI1RDlBNDMyN0RBMzlDQjJERkQ3NDg4REMzMEE4M0JENjUzNgorNTQwMDE1MURBQzEwNDI2NkJFNEVCQ0FFCis0QjA4MzIxMDE2RTI4QUI0QzgKK0Q1NjRERDM3CiszNTUwNUQ4NDExNDY5NzZFREZCNEJENzI5QQorMkY0OURDQ0Q2QjRFQ0UxREFDMzJFQTU2Nzk2MTNCNzg5NEVFNjFDNzIwNTBCNkRDQTA4MzM0MDAwQzRBMTYKKzY4MEEzNzgxCisyODMyRUYyOTkyQjA0MjA2ODcyQTA0OTY1QgorREM4OUEzMUMxNTlBRjc4NzZFRkRFOUM1NjZDMDM4QzY4RjM3MDBDNjc2Q0Y2QzBBMzU1QjczRTBEOTFGNkI5ODAwNzk3MTA3REY1N0MwMTAyRTI5QjMzMzNFOTlENkEzQUJFQTdENDQwNEVBM0MxRjM3MjQ2QThDCis3NkI4NkVBMworQUUzMUU1NTlCRjNFREU4RjZDREU3MzQ5N0EKKzNCNDgyMjlFNDFEMkExOUNCNDMxRkM3MDUwOTYyMUU0RjM1QzEzQTM0NjVENzBERkFEMDE5RjZENTEyQkRFNkVFMTRFMkFBOUQ3RUNFODM2Qzk2MEMwNUEyRjU4MEJEMkU1OEU5NTkwMjgxRDBDQkVGMTkzCiszQjhGNTQ0MAorNzM5RjY3RDA2ODUyMjE3QTZGRTYwQ0Q1NjJEQgorMzE2ODQzQTBGOEExNTBGNTYxMTdBNDlFRjEzMUFFODVGMzIwMTBDMTZCMjlGNEZFMkFBNUY0ODExRjI0RjIzM0VFNDVCNjU5NEI4RkFBMzkwOTY4MTk5M0E1RTM0QzNFMEQxMkZDMTIwNTNBRTRGQjhGNzM5RTlBNUY2OTc0RTUxMEY3MUYyMjQ2M0U0MDY5M0Q2NEMwNDdCNzAzQkJDOEE3QTQ4NkRGREQzOEM2NTZGMzk2QjhDREIwQ0M4RUQ5RUYzRERFRkEKK0NDQ0NFQzhGCis2Q0Q5OTZBQkNCNzc1OTQ5QUU3QjlCNkFGRAorNERCQjgwOTYyQ0FBMjFBQkJCOEUyNjMzOTBDNzhERjZFMzg4MEVBQ0NGMkZCNDA1M0NENzk0QzA3RTVBMTQzOUY0RjE4MjJBQjJBMEYzNTNERUM0MjMwMjdFN0M1NjY1ODk2QzQ5RjhCRjY5MDk3MEEyNTQxNTVFOTNBQUZDMkI2RTRBQTRCNzZDRTY1RjFFQzdGMzNCNEJDOTMyREQxNEJFMjVBQUYwMUE0NDVGQTRDQjExOEEyNUI1QTkwRgorNEJGQzQ2M0MKK0E2QzU1NEFERjBFNDhCNzlBNUI4RkJDREIzRjUKKzM2RjZFQkRDQUY3QjAyOTBGOTg1NjI3QkQzODkyOTdGRTA4QjU3MUUyNzgzMUVERDMxRUU3MDc5QUFEN0ZFMDU3QjkwOEZBRDg3NTAxRDUyN0JERDA3QUJCNEI4NTcwMkE4Q0UzNDU2RjEyNzQ1QkE3MUYyODdBNjA1Qzc0QzQyQzlGMzQ1N0Q3NTRGRkZCREQxRTMwOEM2QjY2NTlFMUIzODQ0NzhERUJEQjMxOUM5QzhEM0M4RDMzMUE3MjNGRDk5REU0N0QxMjdBODYzOERFODlFNjlCNTRCMjMxMzkxOTE3MTY4REZFNkZCRURGNTNDQ0RGQzhBNjdFRgorMEI0MgorQ0FEMzA2MUMKKzRBMUYxNzVDQzhBMDZFRjFFRUY4MjBEMkIxCitDOUIxNTk4QjBEQ0QwQ0MxQ0MwNjQ3NkU2ODc5NzFDREZBRkVFQ0M1Qzc2REQxQkQ4NUEwQkNGMjVFNERDNTY2MDAzMUJEOUFCNjg1OENEQTFERUUyQkNCRTY2QkY0NTVBNzRCMUY5NDc0REI2NUI0MTE1NTM1NjExNjM4QTAzOUI4MEJBRTQzODZGMzk3NTRDQzMzOUYwQjcxNTRCMDI3NjM5OAorRDE4MjVBQUEKKzA2NEE2M0I0NjQ0REQ0RUZBQzMxRjgxNDBCCitGMzA2QjZEQkVGRTE4NzFFNUU4Qzc5OUM4MkUxQzUxQ0Q2NUMxMTMwMzg2QzYyODNDMkY2QkRFODNDQzVBMTYxNDk2NjU0QjNFNjQ2QTQ3OTJBOTE3M0FFRjIzMjI3RUFDMzZGODE5RjRFQjgwOTFDNDg1OEUwNUNDRUIwMEJBQjQ3Rjk2MTg0NjdFODU5NDQ2REM5MEE0QkFBRDM2ODc3RTVFMzc1MTk5NkM5QjkxNTFCQzlFMzA5Cis0QUNEQUY1NworNUU1REE3OEI3OTczQzkzQjI0OTk0RDIxRDkKK0I0RUFFQUY4QjYzMzkzRkQ4NThBMjM4NTJDMDdERDU4QjZBREZCNUZGOUZEMjY1ODFGRENDQzk5RkM3RUI4NUZBNUI4Nzc0MDZDODlBMDREMkE4QTM0QzA3MTQwRDY4QTRDNTBFQjlFQUM2MDY0RjdGRTBBMkQ0Mjg3Q0YyQ0M2MzkyQ0YzMUQ2MDUyQTE3MjZCRjlGMTYzNDNDOUU1MEE3NURBMzIwNzI5MDg4OUE1NkEwMTNDNUJDRQorRTZFNjVEREYKK0ZGRjE3MkI1NEJGQjNERDk2OTRDM0ZCQzc1Cis1ODNBNzk0MzQwODRGQUEwRjg1NDEzRjY2RUIzMzc2RTBBOTZGRkQwOEJDRDYyQjA3MERFQTNGOEM4MEIxMjNBNzhERDg1OTRGQkJCRkVDOTUxODcxNEM4QkY2QzE4QUE0MkNCOUU4MkQ0REJBMTU1OTVFOTZFNkY2MzVDNUUwRkM3RDMxNDA4NTQ4MDdCQjJENDM0ODlBNkU1MTUKKzQ5MUE1Q0ZFCitCQzg3ODBFRTM0Q0JBNTQ4RjhBNTJCNUIxNTk4CitEMTk4QTFBOTE1M0NFODlCRTE5RUQ3Q0ExMzIyOEU0Njg5QTNEREQ5NjUwNzU2NzdDNDE1NTMxOEVDQ0U1OEY2RjUxMUIwRjU4RDg4NDE4RjYzOENFQ0VGMEIwQTMwMUFDNTRCRDVGRThCMEJDMjc2NTZEMDVCNDk4Njg4MEUyMkNFNDEwN0ExNDI2NUJFQkY0OEZFRTczMDBEMzU5QjMzNkE5MzI5OEY5NDE2QzZCNzFDQUM5ODE4NDk5OEVDMzE1MzBFNDc1RTQyRTYwMgorMkZBRTlFQ0YKKzVCRjQ2ODc5RTMwNDk0N0FEMjE3MUJBRjcyCis1Qjk4Mjc0Q0IxRjk3MkQxQUZBQUM2OTAyNDYzNjgxNUI3ODBDQzIxM0UwNzEwOEU3ODQ0RkE5NkM3NUY0MTgwRUU0QjhDRUE0NTA1NDhFNDZGRkFDQUFGNTMwMDBBRTlDQzJBQUJGODBBM0M1QjVDNTI0RkU1NzAzM0UzOUYzN0Y4NjQ0Mjg1NjI3OAorM0E2NzU5RkMKK0ExQTMxM0I2NEI0REFFMDEyMTk5OTZBRDQ5ODQKK0VBQUI1NTlGQTNGMUIxQ0I5NzU1QkFBQTU3Mjk4NTFEN0QxMUNBQzAzRDUzMDFCRTBEREExREI3RDMzREM5RTk2MDU3NjM3NUUzODE5MkIwMEI4RTdBRkZEREZBMjBFQkJCREM4QjU4RTJGQ0YzN0I5QTM4MEUyMzYzMUI3MEExOTc1RkI3ODI0N0VBQTA2ODc3Mjk2QkJBRTQ5NjRENEUyNjlFODc3OEREQkY4NkYyQTRGOEU3N0JBRjRGRjlBQkFCNDczREExMjdDRDVEOTM5MjI2RjhDRjVFMjcxMDMzN0IKKzdGRjRBM0U0CiswRDgzNDcyQzQ3QzFGNTFGNkVCRDAwMEMxRgorODM1OUExMUQxNTcyM0M0NEE1RkIyNTY3Nzg2MDYwMkUxMTBENkJBNjk0MDM4MTc1Q0QyQzkxRDRFQ0NGQkRBMjhFN0MzRTQxNzM2NkFFMTBFMDY2OEI5NUU1MjU3NEU4MUM2NDU4NkVCMkU1N0JEQzAyQjIxRTRFNkUzMERDQkRDOTk2OUFCNEYzNUM0Q0Q1NzFGODcxM0Q5QjdCOTU4MjlGMEI2OTYwN0U1MjI3MjcwQworMzFBMEY0QzEKKzFFMzgzNEJGNUYyMDQ1NjVEMDc5ODVENzEwRTAKK0MzNUY1QjUwNjc2QUVDMENBQkQ2NjYzODBDQTRDNjNBQjJBNDA3NDFDNzhDMzYyQzVFRTYxQkY1NTAyMzk2QTA3MDI3Mzg4RUMzNjE3NUY2QjhDRDdBQTA1NzRFNzJBRDVBRkEyOTNDMEJFQUJFQzk2QkRDRDQyQjM2MTVDQkI3NjhBMDdDNkRDQjE2MzlGMzRDQUNGNzFFQkY3NUQyQzcxRDgyMTM5QjAzMTIwQjI4MDhDMzkzQzNGMjI3Q0NCRDlBRDg0RUZCMkFDQ0E3QjNFQkQwNDQzMERGRDNBMkFDRkZCMTY3Qzk0M0Y0MjVDRUE0Cis4MTE0NTkwRAorMDMxNTBDODcyQjFCODQ4NkM3NzVBNDEzMEIKKzgxRTk3QzJBMzlENDk2NUM1OUVGMjRDMkVBNDkwMDFCQUY1QTZENDJGNEU0MjA3MUVFN0VFNkY1NjdGRjNBNDYxNDI3Qzk4MTlFMjBFNTVDN0I3OUU3QzA2MzM3RTVGRkI2M0Y4NDg2RThGOEE4NEU1MkMzRENBQUY2NTRDNkNGNEJGQ0FEMEYKKzI5NDMzRUQzCiszQTY5OTU4NTgzRTA0ODAwMUZDMkM4QzU4MgorRTEzRDM5NjNEQzE3OEZFRDZBQzk4MDA1QjlCNDJBODAxMDY0OEU1NDA1QTBBRDFERkJDMTMyNTVCMUQ1MzIwNTk3QUIyRTUwOENCMUY4OTdCRTZCMzNGOTU2QjgyQjA2MDQ0M0RBMDg4QTJEMTdEQUIzOEYxQTE3RjkzRjU3NURGNEVCQUEzMDIxQkZFM0FEODc3NzNFMzU2MjVEQjEyMTk3NTlBODdFMzJCMEExOTkzODZFRjUKKzRCNDVEQTNECitBQzZFM0YzOUREQzNFODZEQjQ5RjVCRTVFNDNECis5RTk3MzFBQTUwOUYzRUZGCitBQTFEQUY0NgorMDMxOTI3Qzg4MUMwRjIzQkQ5MkZCNUQyQUM4Mzg2RkEyRTIwOEM0MjQ1NjRDRDkwNTI3RjlGNjBFRTRCNkIzRUMzNzgKK0IxMEVDMkM1M0Y4NzlFRUVBRTc1OEJDQzdBODUwODIxQzVENjdFNTk3OEM1MzE2MUM3MERBNUExRkI3MTBFMTYwMkU1NjJCMEFCODQKK0E4OEI1NTg1RDQzMDc4MjJFNTE5NEQwRDc1REQ0Qjc4RDY4OUY2RkM5OEJBRTFENTU4QTlGMQorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY2xlYXJ0b21hcmsKKyVEZWZpbmluZyBmb250IFBTT3N5bWNsYXMKKyUhRm9udFR5cGUxLTEuMDogUFNPc3ltY2xhcworMTAgZGljdCBiZWdpbgorL0ZvbnROYW1lIC9QU09zeW1jbGFzIGRlZgorL1BhaW50VHlwZSAwIGRlZgorL0ZvbnRUeXBlIDEgZGVmCisvRm9udE1hdHJpeCBbMC4wMDEwMDAgMCAwIDAuMDAxMDAwIDAgMF0gcmVhZG9ubHkgZGVmCisvRW5jb2RpbmcgMjU2IGFycmF5CiswIDEgMjU1IHsxIGluZGV4IGV4Y2ggLy5ub3RkZWYgcHV0fSBmb3IKK2R1cCAxIC9DMDA2OSBwdXQKK2R1cCAyIC9DMDA4MyBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFs1MCA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0Mjc1REQ4OUE4NzkwRUFEMThFRkM3N0QzRkZBRTg0REE1RAorMzEyMDc0QzRENTQyREQ1QkVDNzA5NjhGNzVEQworMjUwQzM5NTRFOERGQjhGNDg1N0JGRUYwOTJFQkE0OUQyNDg5NTVBODU4QzVBNUY1NUY3Qjk4N0VBMDZFQzg0MjhEOTM5MDg0Qzg4RjVCMTU3RDgwQUIyRDcwNkE3RUI5MzZDMzQyOTE3MzU4OEQyQUJBNkEyN0RDOTRDMEI0ODRGMzE2NjYzNTU1Nzk3MDA0Q0JGQTc5RTdCODU0NUM4MTBCRjlDQTkyRjYxQUJEOUUyMDJFRDlFOTU5NDNERjdBNUFCQkYzQzIwQkRFM0I2RUVDOUMwQjk1QTRDOUMxRDM4QUE3QzY3ODZBREJCQjc5RUUxODNCRERGMTk0CisxOTUzCis2NDQ5REJCN0FFNDdFOUZDNkYzQUJGMURDRDdBMUUyNzRFODdEQUU5CitBMjI3MzdGQQorNjQwNEIyMTVBMjdCRkFGNkQwQjUwRTk0RDIKKzA3MTIzQTVCQjM4MEM4NkRCNTAzM0VFNzQzMTgxQkJGQ0MwMzU2NTcxRjcyOTdBMjA3QzIzRjFFNTg4MjU3RkRFRjVERjIyOQorQ0FCRjNCM0MKKzlFMDk4OEM2M0IzNThBQ0E0QjRGRUIwMzNERkIKK0UyRTM4N0EwNkEyM0NBQ0EKKzhFMTA0QjkwCitERkRCRDQxRjA2M0U4QThERkEwQUJBNERENzQ0MzAxNTUyNkFFNTI1NTMxNTU5Nzc3OUUwNEQ4NTg0OTMwNUVBNEYzMQorNUNEQUQwNkU1ODQxRTFCODA3NDc2MEM5OTcwMkI4Q0Y0NDNENzUyMTc0RDk5NkM5NEU2OTA3OTdBOTU4N0NGNTAxN0RFQjExRTVGRQorMDI1NzZFOUUwOEIzOTY4OEJCRTk5QTE4NkFBOEZDN0UyMjJGNUU1MkIyOUE3RkRGMzc5RUY1CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworL0RQSXggMTI3MCBkZWYgL0RQSXkgMTI3MCBkZWYKKzcyIERQSXggZGl2IDcyIERQSXkgZGl2IG5lZyBzY2FsZQorMCAtMTM5NzAgdHJhbnNsYXRlCisxLjAwIDEuMDAgc2NhbGUKKy93c3Q6ZHV0Y2gxMiAxMi4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy9zeW06Y2xhczEyIDEyLjAwIC9QU09zeW1jbGFzIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTRiIDE0LjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTIxYjI4MjUxYjI2MWMwOTAxMGEwMTBiMWIyMzE5MWUyMjE3MjYyMDAxMWMyNDI2MDExMTFiMTcyNzI5MjYxZjIzMWQwMTEyMWIyODJiMjQyNjIwMDExMz4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwxYjI2MWMyNDI2MjIxNzIzMTkxYj4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MDcwOD4gOTM0NiAxMzMwMCAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI4MCAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjgwIDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyODAgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjgwIDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxNGIgU0YKKzwwNzA5MDgxMTBiMGQwYz4gMTI3MSAxNDU4IDAgMjA1NSAtMSBzCis8MDAwMzA0MDIwMDA2MDkxMTBlMDkwZjBhMDAwNT4gMjA1NSAxNDU4IDMgMzUxMCAwIHMKKzwxMjExMTIwZjA5MTA+IDM1MDYgMTQ1OCAwIDQxODkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwxNTFlMWI+IDEyNzEgMjA4NiAwIDE2MzEgLTEgcworPDAwMjMxYjI4MjUxYjI2MWMwMDE4MWIyMzE5MWUyMjE3MjYyMDAwMWYyNzAwMTgxYjE5MjQyMjFmMjMxZDAwMmExYjI2MmQwMDIxMTcyNjFkMWIwNDAwMGYyMzAwMWMxNzE5MjgwMjAwMWYyODAwMWYyNzAwMTcyMTIyMjQyNzI4MDAyMTE3MjYxZDFiMDAxYjIzMjQyOTFkMWUwMDI4MjQwMDE4MWI+IDE2MzEgMjA4NiAxNSA4ODkzIDAgcworPDAwMjkyMzI4MWIyMz4gODg5MyAyMDg2IDEgOTQ2MSAwIHMKKzwyZT4gOTQ2MSAyMDg2IDAgOTUzMSAtMSBzCis8MTcxODIxMWI+IDEyNzEgMjMzMCAwIDE2NTIgLTEgcworPDAwMDMwMDFmMjgwMDE5MWIyNjI4MTcxZjIzMjEyZDAwMTcyNTI1MWIxNzI2MjcwMDFhMTcyOTIzMjgxZjIzMWQwMDI4MjQwMDE3MjMyZDI0MjMxYjAwMmIxZjI3MWUxZjIzMWQwMDI4MjQwMDI1MjQyNjI4MDAxZjI4MDAyODI0MDAyMzFiMmI+IDE2NTIgMjMzMCAxMyA3NjI0IDAgcworPDAwMjUyMTE3MjgxYzI0MjYyMjI3MDQwMDE0MjQwMjAwMjkyMzIxMWIyNzI3PiA3NjI0IDIzMzAgMyA5NTMxIDAgcworPDI0MmExYjI2MmIxZTFiMjEyMjFmMjMxZD4gMTI3MSAyNTc1IDAgMjU0MiAtMSBzCis8MDAyNjFiMjcyNTI0MjMyNzFiMDAxZjI3MDAyNjFiMTkxYjFmMmExYjFhMDAxZjIzMDAyNzI5MjUyNTI0MjYyOD4gMjU0MiAyNTc1IDUgNTM2NSAwIHMKKzwwMDI0MWMwMDI4MWUxYjAwMWMyNDIxMjEyNDJiMWYyMzFkMDAyODFiMjcyODAwMjcyOTFmMjgxYjI3MDIwMDI2MWIyYTFmMjcxZjI0MjMwMDA2MDQwNTAwMmIxZjIxMjEwMDE4MWI+IDUzNjUgMjU3NSA5IDk1MzEgMCBzCis8MjgxZTFiPiAxMjcxIDI4MjAgMCAxNTYxIC0xIHMKKzwwMDIxMTcyNzI4MDAyNjFiMjExYjE3MjcxYjAwMjQxYzAwMjMxYjI4MjUxYjI2MWMwMDJiMWYyODFlMDAyODFlMWIwMDFjMjQyMTIxMjQyYjFmMjMxZDAwMjgxYjI3MjgyNzA5PiAxNTYxIDI4MjAgOCA1NzYzIDAgcworc3ltOmNsYXMxMiBTRgorPDAyPiAxMjcxIDMxNjcgMCAxMzU5IC0xIHMKK3dzdDpkdXRjaDEyIFNGCis8MTYyMzFmMmMwMDBjMjQyMjE3MWYyMzAwMTQyNDE5MjAxYjI4Mjc+IDE1ODkgMzE2NyAyIDM1NjcgMCBzCitzeW06Y2xhczEyIFNGCis8MDI+IDEyNzEgMzUxMyAwIDEzNTkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwZTEzMDAwZTFmMTMxMzBmMDAxMDEwMGE+IDE1ODkgMzUxMyAyIDMwMDEgMCBzCis8MGQ+IDEyNzEgMzg2MCAwIDE0MDIgLTEgcworPDI5MjYyODFlMWIyNjAyMDAyODFlMWIwMDFjMjQyMTIxMjQyYjFmMjMxZDAwMTcyNjFiMDAxNzIxMjcyNDAwMjIxZjIxMWEyMTJkMDAyOTIzMWExYjI2MDAxOTI0MjMyNzFmMWExYjI2MTcyODFmMjQyMzAwMWMyNDI2MDAyNjFiMjIyNDJhMTcyMTAwMWYyMzAwMjgxZTFiMDAxYzI5MjgyOTI2MWIwOT4gMTM5NCAzODYwIDEyIDg4MzQgMCBzCitzeW06Y2xhczEyIFNGCis8MDI+IDEyNzEgNDIwNiAwIDEzNTkgLTEgcword3N0OmR1dGNoMTIgU0YKKzwwZD4gMTU4OSA0MjA2IDAgMTcyMCAtMSBzCis8MjQyNjFiMDAwYT4gMTcxMiA0MjA2IDEgMjIzMCAwIHMKKzwxNTExMDAwYTEzMGY+IDIyMTAgNDIwNiAxIDI5NzUgMCBzCis8MGE+IDEyNzEgNDU1MyAwIDE0MzQgLTEgcworPDAwMWQyNDI0MWEwMDJiMTcyZDAwMjgyNDAwMjcxZTI0MmIwMDI0MmExYjI2MmIxZTFiMjEyMjFmMjMxZDAwMjcyOTI1MjUyNDI2MjgwMDFjMjQyNjAwMTcyMzJkMDAyNDFjMDAyODFlMWI+IDE0MzQgNDU1MyAxMCA2Mzg0IDAgcworPDAwMjgxYjI3MjgwMDI3MjkxZjI4MWIyNzAwMjExZjI3MjgxYjFhMDAxNzE4MjQyYTFiMDAyYjI0MjkyMTFhMDAxODFiMDAyODI0PiA2Mzg0IDQ1NTMgNyA5NTMxIDAgcworPDI3MjkxODIyMWYyOD4gMTI3MSA0Nzk4IDAgMTg4MiAtMSBzCis8MDAyNjFiMjcyOTIxMjgyNzAwMjkyNzFmMjMxZDAwMjgxZTI0MjcxYjAwMjcyOTFmMjgxYjI3MDAyODI0MDAyODFlMWIwMDIzMWIyODI1MWIyNjFjMDAyNjFiMjcyOTIxMjgyNzAwMWExNzI4MTcxODE3MjcxYjA0PiAxODgyIDQ3OTggOSA3MDAxIDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlUGFnZTogKDM1KSAzNQorJSVQYWdlUmVzb3VyY2VzOiAoYXRlbmQpCislJVBhZ2VQcm9jZXNzQ29sb3JzOiAoYXRlbmQpCislJVBhZ2VDdXN0b21Db2xvcnM6IChhdGVuZCkKKyUlQmVnaW5QYWdlU2V0dXAKK2JvcAorJURlZmluaW5nIGZvbnQgUFNPd3N0ZHV0Y2gKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2gKKzEwIGRpY3QgYmVnaW4KKy9Gb250TmFtZSAvUFNPd3N0ZHV0Y2ggZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDMyIHB1dAorZHVwIDIgL0MwMDM0IHB1dAorZHVwIDMgL0MwMDM2IHB1dAorZHVwIDQgL0MwMDQwIHB1dAorZHVwIDUgL0MwMDQxIHB1dAorZHVwIDYgL0MwMDQ0IHB1dAorZHVwIDcgL0MwMDQ1IHB1dAorZHVwIDggL0MwMDQ2IHB1dAorZHVwIDkgL0MwMDQ5IHB1dAorZHVwIDEwIC9DMDA1MCBwdXQKK2R1cCAxMSAvQzAwNTEgcHV0CitkdXAgMTIgL0MwMDUzIHB1dAorZHVwIDEzIC9DMDA1OCBwdXQKK2R1cCAxNCAvQzAwNTkgcHV0CitkdXAgMTUgL0MwMDY1IHB1dAorZHVwIDE2IC9DMDA2NiBwdXQKK2R1cCAxNyAvQzAwNjggcHV0CitkdXAgMTggL0MwMDY5IHB1dAorZHVwIDE5IC9DMDA3MCBwdXQKK2R1cCAyMCAvQzAwNzMgcHV0CitkdXAgMjEgL0MwMDc3IHB1dAorZHVwIDIyIC9DMDA3OCBwdXQKK2R1cCAyMyAvQzAwNzkgcHV0CitkdXAgMjQgL0MwMDgwIHB1dAorZHVwIDI1IC9DMDA4MyBwdXQKK2R1cCAyNiAvQzAwODQgcHV0CitkdXAgMjcgL0MwMDg1IHB1dAorZHVwIDI4IC9DMDA4OSBwdXQKK2R1cCAyOSAvQzAwOTcgcHV0CitkdXAgMzAgL0MwMDk4IHB1dAorZHVwIDMxIC9DMDA5OSBwdXQKK2R1cCAzMiAvQzAxMDAgcHV0CitkdXAgMzMgL0MwMTAxIHB1dAorZHVwIDM0IC9DMDEwMiBwdXQKK2R1cCAzNSAvQzAxMDMgcHV0CitkdXAgMzYgL0MwMTA0IHB1dAorZHVwIDM3IC9DMDEwNSBwdXQKK2R1cCAzOCAvQzAxMDcgcHV0CitkdXAgMzkgL0MwMTA4IHB1dAorZHVwIDQwIC9DMDEwOSBwdXQKK2R1cCA0MSAvQzAxMTAgcHV0CitkdXAgNDIgL0MwMTExIHB1dAorZHVwIDQzIC9DMDExMiBwdXQKK2R1cCA0NCAvQzAxMTMgcHV0CitkdXAgNDUgL0MwMTE0IHB1dAorZHVwIDQ2IC9DMDExNSBwdXQKK2R1cCA0NyAvQzAxMTYgcHV0CitkdXAgNDggL0MwMTE3IHB1dAorZHVwIDQ5IC9DMDExOCBwdXQKK2R1cCA1MCAvQzAxMTkgcHV0CitkdXAgNTEgL0MwMTIwIHB1dAorZHVwIDUyIC9DMDEyMSBwdXQKK2R1cCA1MyAvQzAxMjcgcHV0CitkdXAgNTQgL0MwMjYyIHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWy0yNSAtMjU2IDkyMCA3NjZdIHJlYWRvbmx5IGRlZgorY3VycmVudGRpY3QgZW5kCitjdXJyZW50ZmlsZSBlZXhlYworRDlENjZGNjMzQjg0NkE5ODlCOTk3NEIwMTc5RkM2Q0M0NDVCQzdDOEE5NTlBMzlBMzJFOURDRTdGQUVGMTdFRTNCRUM5RgorNTBFMUE2RkNBNjUxRkM0QjM3NjlBMEE5MTA0MTU1NzUwMkUyNUE1RDYxODBGRTI1QTNEMTFCRjA3OUUxREY2NkU1NEVFOUI3QzIyOUFGODkxNzM5NzA3QTJBMEVDMTQwMzA2QjVFNDNFNTJCNzlCRkI4OUU0NTlFNTAKKzZFQzZGNjEwQTcwNzc1QTMxQzQ2MDk3NkM0Rjc5NDQ5RDg2RTU3QUNFNDkxRTVDNkJGMjBDQzQzMDdCMURBRjc2MzAyNTIKK0U5QUY4Q0ZCNjlCNTBFREFFOUQzNkE2MTA0QUZFRjg4MzJGOTIwRkQyMzQ2QjJDNzEwNENEMTFFM0JFRTk5OUNGQTlGNUEKKzQ5REIzMTczRUU0OEQxQzgyOTk0MjM3RjM2MDQwN0IwMjJFMEI0Cis1MDJFOTRFQThCNDkzNjUxRUYyRDAzRjBCNTEzRDY1NTA0NzU2ODMyNUI1MTJBRTYKKzZBQzZGNTNGMzg0OENGNzBERTI1NDgxQ0M2NUQ4QjFBNTc5M0FBCiszQzQyODJEMTExMTEyQkVFMjhBRkNBN0EzODA4RDQ0NDRDNDY2OUNBCis4NEVBQUFGOTg5MjE5RjUxQUIzNDc2QTFCMEI1RjIyNDZCQzMwNkU2Cis2MjVDNjY3OUM0MTdFRDJBOEU5QkQwMTBERTM3RDQwMjY1MDc0QzI2ODQyMTkyRkE4REU4OTI2QzlBNUU3QjcwQ0QzMzg3REM5NjVFRDMKKzgwREU1NDk2RThDREFERDQ1OUM5ODg1RQorN0Y2QTBDQUQ0MUJGMEY4QUYxCis2MDc0RTUxQQorQUQ1M0YxNUI1QTA4RjY2RjNFQjcyOTc5NkFERgorQzdFOTU4RTQ4MzY4NEQxOTc4ODA5NUI2QkQ4RTUzQjkwOUE2OTE0RTFBNzVBMTY1MjMyNjY2RDRCNTFFQkVEQkM3OTM2MzBDNzVFRTMxMDEwMEYyREE2MjJBQ0IzNkMwN0JBRDlBNkE2N0FGNzk2QUQxMzc3QjU3QzZDMjVDNzYxOTEwMjcxRUE1MUIwRTRDNTUzM0E3Q0QwQUNFNEFGNjk5Qjk0MDc2OTY2MUE3QjI0NjkyQTIxN0MxNzM3NkFFMDFFOTMxM0I4OThDMTYKKzQxMDEzN0UzCisyNjlDNkI3QzhFRTc2Rjk1RjlBNkE5MzBFODM4Cis3MkQ4QkZBQ0FFQUQ3MjhBODE5QzY1OUYxNTk4MTlCODczQjZDNEM0NkU0ODlFQUE1NEE2NTBERENFQjE5MzUyOTY5NURFODAxOTM0QzAyQzM4MjNCOEFFQ0VCNzUxRjBBOTMzQ0ZEQzAyRDE0QkE1Q0RDQTlFNzAzNTQ0NUJFRjc0NzY2MjM1QkIzMjMyNTIxQ0MyQ0MwN0U3RjdEQkQ3MzhFMUI1ODZCNEM5MEY1MENDNkUwNDEyOUYyN0EzMUM4NTlEQzg5OEYwQzYwQTZFODRDNEQyOTQ2QTVCMjc1RjA1QzczNTFFRTJEMjk1QTE2QkQwNzg4QTQ3NDMKK0ZGMkIKK0ZEM0RCOUY4Qzg2NTZCQUIzRUNGMjM2QgorREY2QUJCMjkKKzY3Q0U5M0FFQUE4NTcxMTRCMkQ0Njc3QTZECisyQUVENzM0MEZFRDVBMTFFRUYxM0I4MEQ5MDg1RkNBQTlFODc2RDI3M0VGNjY2NUUwNzI3OTI0MDgzOEZBQTE3RjQ2QTcwNjNEOEExQUY1NTEyM0E3QkE0MUQ0Njk4RkI5RTc3QkIwRTNCMUEwMkNGRDIyQkYyMjMyNDg1MDhEMAorOEFDRjQ5QzAKKzE0NDk0QUI4MTNBMkZEMDZEMkM1NzE0NjIyCitFNzU5NTVGRjlCNjNDODlCQURDMEI5QzQzQjY0NjZBODEwMTQzRkQxQzhGNjE5ODM2MDM3NTUyNTgzMjlGNjc4M0VCMzAxN0JDQTNDREJERkZEMDJDN0JENTdGQjVFREUzQTM0Nzg4MDI2QzIwMjJEMkZGRDdCQzJBNTU3OTEKKzU5NzczOTEwCis4NTAxODlBQjNDQjMyN0M3Q0Y1REU3RTVBNgorN0Q0MjIwMTVCNEI0REM1NEM2Q0VGN0EzMzQyRDQ0Q0JCODFCRUVEQjIyNUVGRUU2MzY4NEU2OENFRTlFNzlENzBBNEI1MDY4M0IyQTA3ODUwRDAyQUYyMjZBODE1QjRGRkRBQUU1MEEyMUQ2QjZDNUUzCis0QkVDMjQ2NgorRUZFNTg0RDM0NUZGMDg1RjlBODlFM0JFRDYKKzI1QkI3Q0U0QzJDMDVGMDBGREUzQUZBRkMzNTM1OTI2NDA5OTBGODQ1MURCMDIKK0EzRUEyMkUxCis4NkYyMjIwOEE0QTlGN0Q0NDdDNjIyQjE2MAorOTQ1RjkzQkFBRkFGQ0Q4Q0I3RjEwNkMwNkY1QUExRkUzRjIwM0YyRTEzQzA5NzQ4MkMyN0QxN0MxNDFBMDgKK0Q0MjA1RTM5CitERURCQTQ3NDMwQUQ3NDNBMzBBODk0RjFFQgorQUVBQzE4Q0I5NUUxRDlCMEVCMUM2OTAyQ0VDQzdDRDg5QUE2MjM4RkQ4QUE5MDI0Q0VGN0Y4OTBBNEMzRkU4MTE4OTc5MEZCRTFBQTAxRkEyMjgwODFFOTE3MTRFNDczQTgyMTQ2NUM1RDgxRTk0RTREMDlBMEFFRERBMjI4CiszQzA4MTlFRAorMDcxNDNCMDY2QkM4ODYxRjlCRDdEQUZFN0EKK0EyQUFGOEIzQjA5RkUzQTkzMDFEOUEwOTI4MkJCQzYyNzgxQzcyRDRFNzNCQUUxQ0IzMDBGMkFCNTJGOUY1QjNEMDE2M0Y0MDM5QTUwRTFCNjkyRjAwOUU4RTQyN0QzRTY3MDA4QjNGMEEyRjdEMDc3RDA5NkE4NzcxODRFOUYxOTY0Q0MwQjgwMzM4RDFEMjc5Q0Q3N0JFMDJGRTUyRjkwMzA3REZEQjE1QjE5OTAxMTkwNgorMkY5QzczREEKK0QxOEQ3MTEyQkIwQjlGRjZGOTFDOEM4OEJEMUUKKzcyNzNFMUE0OENERDA0MkIyQjg3RTFGQzQ4MzEyNkFEQjZEMTFCODJDRjU5Nzg1RTFCOUE2Q0FFMUM4Rjc4QjM4NkExRjEwM0I5RTk5QjBGMTEzMDNBQkJBNDI0QzhBRTEzMjIwNkFGODYzN0M0NTZFQzM1QUM4REJEM0MxMTMxRDlEQ0Y4MjRBNEIxMjdCQTdCNDg3N0E1RkY1QjdBQTIwRDNCMzNBNTE4OUExMEFDQ0VFN0YyNTMzQ0QwRjZFMzE0ODRFNjM2RTFGMDlBMkFCRjlCQTlFMUE5MTVDMworNDQzMENDRjIKK0M4NzIwRDVCRUE1MkFEMzY4QUZCMDlEMkE4CitFOTREMEFEQjg3NDlBMkVCQzQ1NDFEQjg4RUIyNDFDQUEyOUJEN0YzQTU3Q0U1ODJFQzdEODQwRjg5QjYzMUEyRDY0RUE5OURCOTBCQjMwMjQ0QUMyREYyNUM5MDk2QzM2NkI5NDExODMyMjI4MDlBMjYzNjMwQTgxNjM5QzE5MzhBMURCMDY1OUM0RUY4QkE3M0UzODFEMTBGMjdEQjgyMjk1ODMwOUJEOTBBN0YxN0VCNzNDNTJGNkIwNzJERjMxRAorQTlFNjFBMkUKK0VEOTQ0QUY2MjRBQThDQ0ZDODI4NjkxNDhECitCQUMxRUE0ODRGNjQ4NjgyRDI0RDE4NzI5NERBNzM4NzYxOThDRENEQ0Y1MjBEMEJCREFCQjg4MjgzRUE5REFFNDgyQURGMTI2NTUxNTcyMEQzNTZBNzlFMTU0NUVBOUEyRjQyRDIwMUI5MDEKKzYyRTFCNUJCCiswRjQ1ODc5NzVBNUJCRTIxRjcyQUFDRjJEMworM0FCNUQ5RkVCM0RCQTUxREQwREYyMkM3MkU3QUVERjQyNDBEQUVCMUY2NjczMzQxODFDNDc5QUUzMzgzNEVEQkE3RDJGOEE0REFBNzY0Rjk5M0E3QTc1ODMxNDg5MDRGNDg0MjUyM0M5NDQ5MENCQTg4OTVCMkI0RjZGMDlEODQxOUEzOUI2RDA3RjM5Q0I5QTQzOTVDRkE5OUM5MTM3QQorQUMwMTkwRDcKKzZBMTkzMDJDQ0I0MDZCRjMyMDlENzU2MUI0M0YKKzM4NTlGMzgyOUYyNzAwNTg0RDE1NTRGNkFCOTRBRDY3NzQyMUUwQkUwQUVEMDMyNzE1Q0EyNkQyOTFDOTFBMzJEMDBBMUJGOEQyMDJENjY1MjkwQjc1RTBDM0YxOTQxQTIyMUM4QkE1Njk0NjBGODk0NDc2M0NENjk3RjUyQTUxMkI4QzkzNzQwMTREQjkxOEQ1QjEyNzQ1QUE0MjIyNjFCRUZFMjBGNURDNTc4NDc5NEFCQkQ3MDY3MjUwREQ3NUI4NDA1QzY5NENEMkZCRTE1RURGODkyN0IwNzhGRkFDNzA2NkEzCitENjYyQTcyOAorMDhENUQ0RTVEMDk1OTAyMUUyRjlGNzAyNEM3NQorQjMxMjcwOUI4MEI3RThCOTY4RUI4M0YxMTM2NjFBRTg0QkM4NkYyNDY3NkY1MDlDQzM0MTg5MEU2NkFCMDY2NDkyRTQwQjY5N0Q0RTEzQ0VDRjc2RjJGMDczQjQ4NkU4N0Q0NTlDQjBBRkU3MjkzNjg2MkE0OEZBRTlGMEExN0NGNjEwRjdGOEIxOUFDMDRDMTFBMTdCM0MzNjE5RERGMkRGMjA1MUY0QzVGRUU4MjMzOTNEQTJFMjQ3NjRBNkYzRDc5NzMxQzgzMjlDMEZDM0UwRDdEMDk2MDdDNTNBRUE3RUEzMTU4NzlGMkU5OUQwRTExMjIzODA4NzI4CitEMkJCCisyOQorRTUwOEEyNUQKKzAxRjU0MDI0MzUwNjk0OTQ0OTg5QTAyNTcwCis1MUM1NDcxNjdBNzg1OTNFREMxRkYyN0FGOTc4NjEwNzNFNjJCMDI1N0EzNTRFNUNCMTA0NDREMzE2MENBNzIxMjlBM0Q0RUY4N0ZGNjFFNzA0OTNDOTA5MzQzODFDODlCRUYzODk4MjUwQjczNzU2Njk1Q0MwRThEODc1QTBCM0UxNjIyQTlCNkZEQkM3MDY1NThDNzZBRjNBOTg1ODZBOEZFN0I3Mzg3NzYxRjlERUYxMjhCQjk2RTA0REQ2NjM1NUQ2NTYKKzdGRUI1RjUxCiszRDc5Nzk1OEFCMTAzQkVGM0EzMUZCMjYxNjgyCitDRkUzNkNBRTVBMUE2QUMzRUJBQTYyRUZEM0JCMEFDREMwMjIwRDU5MjZBMjg2RENEMzcwQjE5Q0JENzlGQzFERUE1MkM4QjFDNjAyNTI5NEU3MzVCQzY4MjgxMTU5NTA0N0M1QzdEODc5NkE3Q0EzQjFBMjkxRThBQzlFMzdGRDA0Mzk2MTQ2RUJERUIxQUQwQTYxQjI1NkY2ODFEQTVBODhEOEU4MTc4MjJDMzcyOTQwNzBCQjU3RTQ0OEUzODgzNUI0N0VDODZGRTQ4MjAyOTFERjQ5MDU0QzAwNTc5QjE4OEM5ODEyMURERjE4NzJFNzgxODlEOUEzNEUKK0NDMzdBMEU4CiswQTlEQTVGOTVDRDVBRjVBQkEzNjE5NjVFMTg3Cis2QjIyM0I3NEZEODNCMTM0REU5OEQ2RDMxRDhEQkI1OTVCMkQ4RkQxNDk0MzQ2NzM4OTRBMzMzREU1RERBOEUwRTQzMkY5RURCRUU3NjZCRTJEMTZFODQ4Njc2NjE1NDkyMUNBRTAwNDYyMkVFODU2QkZDQkVCMzMyQjE2RkExNEM1ODE4MTkyMzM0NEQxOUJBMURBOTM0QTQzQTE3NzQxMTREMDY4RTdCMTdCMjJCRUIwNjQyNDhDMTQ4NTY2MzJCRDZDMEE0Q0JCMkI2MUQxOEQKK0U0NkY1MkU3Cis3RDZCMjYxMEMyMUU3QzUwQTI2RTk1NTc2QworN0Y3QTJBMjUyNThBQjNBODg4RjREMTVDQzAwOTY5RDhGRkE3QTNBMzc0MjRFNzU0NUExOTIwOEM3RTc5QUJFMjBBQzg2OTlCRjc0Q0Y3ODhDOURFNzFEOThDRTEzQUM4RDExQTE4OTgzMUM1MThGMEJBOTdFMAorRkUzRjAwQ0MKKzVDN0I1RDU3MDI3RUUwMTcwRTE4M0QzMDY4MUEKKzEzODdBRDE3RjI0ODA3RThDMTcxOEYzMUJBMUEwNzA1ODI2RDBGODIzRjc3QkU3QUFBQkMzQThGMDIxNzM3OTVBMDYxQ0JDQTM5OEZBQTFEQjQ4OTFDNjQzQjM0MzBEMDY3N0FFRDBFMUYwMkI2REZGOEJDMjk1NkRFMDc1Mzc3QTZGQkNFQzg1RkE2Q0VBQzNFMTM1N0FFQzQ5QzU0MkQ0RTA4QUM3QjNGRTlFNjM0MDA3MTRFQzFBN0UzNzFBNTA2QzA4NTQ1RjJDRUZFOUM3QjM3MDVCRENCMTZBNworOUMwQjFDODkKKzkyODkyOUFDQTM0QjUyMkNGMEM2RDVGOUE4CitCQjU5QTgxMzUyQzA1M0E1ODE5RkY3RDAzQzZCNjVBODYyQjM5RDhCRTc5RkI5NUQyMkYwN0RBQjcxMzg5MTZFNTEzQ0NCOEUzM0U5RTYzRjMwNkRFNTRDN0M1QjNDNDQ5N0E0N0EwQzZDNjNGNEU4RjA3QUU3Njc5NkRDMTcxNkVDMDRGNDNDMDYwNTI3Q0I3NkFGRkQzMDZFMUM5OTg2MTU5NTc0RjlGQ0RFRjExMDcxNzJBNzkwCitENUYxOERCRAorNTkxQTc1NTMyMUVDQkMyOTBCRENCNjMyNjcKK0E5QTc3MDFENjRGOTc0OUEwNDY0Q0UwMTkwOTc0MjVENjQ5OEVGMTJENkQxQjIyQjY4NDM1QzRGNDU1MkE2MDU5OTE0RTk4RTc3MzE0MjkwN0JGMUNGMDZDNkZCNjdDQjY0MzdBQ0IzN0ZCQkZCM0QyMjRFN0E0NTE5NjIzNjc1RjczRUJDQkY5NkZGNEYwQkY5ODQ0NUQ4NzY2NEE1OEVERDA5NjgKK0Y3NjhERDg3CiswNTZENUM2MjA1OUU4MUQ4MEQzMkEzQkQ5OEM1CiszNjFCNjYyMkMxN0MwODJCNTJFMDVBMUYxREI2QTZDRjBGODJBN0M2M0NBNjQ2NTQyNkM4MkZGOEZDNzk1MTIyREE4MzhGMzM2NTA4QzczMjdGNkREOTY3NUY3QTkwMDQxNDk5NEMxRDFFNTM2RjUwMTc2NkJCNDk3MUYzREY0RDFGRjlGNjkzODVEMEVENEE0RjA0OTJFNjcxQUY0MUM1MzZCRUZFRDRCNzhBNDNCMTI3OEQ4RjNEQkREMzEyMTZGQzI5MDAxOTIwMkU0MThCMTlCQworQUQwODlFOUQKKzEwRDMwM0QwQzExNTQxQzJDQzRCRDhDMTM4NTIKK0QyNjVGQkNFQTNBRUQyQTBCQjAzMzgyNjYyRDZGODk4QUUxQzBDOUJDRjcxRDcxNUZBODY0MDhDQTBGOUE3QjU2MjNERjY3NkI5RTEwNDgwQjk4RTg0RDBCODAzRkM0NDE0N0ZCREM0N0E1ODVGMTlGNDdFQTUzRTZFOUY3QTlGNTZBQ0E4ODRFQjE4MTQyQjY0MDM4NzU5MDhGMjc3RDk2NTJGOURBNUY1NkUxNUIyNzJGMDJFNTYyNUM1RTZGRjVGRDgyRkU0RDJDMzRDREM4MUU0NENBQzk3ODQzMDU5RjQ5QjY1QkQ5Rjg5MjMyNDEyRjc3MkE4NzUxQQorNTRCNgorQTdCNzNFCisxNkRBRUE1NQorMkYwODE2QzY4ODU2MjI1RkVCNDMzMkI4NjAKKzZGODQ3M0FBMkU1M0VFQzFEMTZGQTJEQjZGQzgxNTUzRUU4MzNEQ0E1Mjc4MDdBNkFEM0E5RjE0RjRBNEYxNkZDMDA4MjI4MjRCNzEzRjUxQjYxRjQyNTg4NkFCOTIzODg1RjU4OEIwQzFENUU4NTg1QUVCQUQ3REIwMThGOTM4N0U0OTc0QkM0NjY5N0MxRkE5OUU0M0FBQjZERDU0NjhGRgorNjFGNTBGQTUKK0RGQjY1RTI4Rjg0NUU4MzMwQkU1N0NBMkJCMzUKKzk4ODU0MUM5QzU0NTk1MjU3MTA0MUUwMTRDNTA5QzI3Nzc5NEVBMUI0RkJCRjIwNDQ2QzQ1MTcyNzkwNDZFQTk1NDNEQ0NFMjNEQkEwRDk3NzVCRkExMTVEQzZCRjJGQTE3QjRCNDU4NkQwN0E3NzVCQzY4NkM3MTA1RjNCMzk3MERGRDkwNzY1QUUzNEU2OTZCQjQ3NTI1MDBERTAzODRBNTZGOERBODVCOUZGRTA3QjMzRTQwRjA5Qzc3NDRFMTAzMDU3RTY3CitFNThBM0Q1QworQkNBNUJCQTUzQUU4QTdBQkM5MDRCODlCRDk0MworQjQ5QUJGNTQxQzhFRTE2ODZFREFCMUE3NjY0NEU5MjQzOTBCODJBOTUyQkMzRkE4NUZEMEJCNUUxMzcwRkYzMTEzMUM0NEVGNTdBNjFEMzE4Qjg0RjkwNkMyQ0Y2MDQzOTczN0RGNTEzM0VDRTE3ODY3NzBDQkNCNTJCQTg2NEM2QkYwQkE3OTE2QUU2REMzOTBDOUY1RUQ4MTZDNTRFRDA3MEMzNDNERjYzOEI1QjVFNEU0MUNFMzRDQzJFMDQwMjYwNTExNURBQjUzNUNCQzUyNTM4QUYzOUNDQzA5ODQ1RTUwOTYKKzU4RDJFRUNFCis2OERFQTNFODRCNzVBMzlCRkM3QTIxMTEyN0JECitBMEY3MUY0RDQzQjU1QkJDNDM1QzRCMTJCOEYwMDAyNjc3OUEyMDY5OTM5NUVCMTcyQjU4RkIxMzFEQzE5RTg5NDA3OEFGMEYxN0FEOEY1MzFERTBGREExN0MwNEY3RDhFOTkzMjQ1MzU3NEM3NEU3NUFGMDJEQzcxNDVGQ0FFOUVDMDVEQkIxQ0NGMjlDQTY4NEE5MTkxQkQzRDg1OTM3MDhEQjNEOENFNkQ4M0E0QTY5RUY2NjcwNUFDRkExNjQ3NzQwQUUwNUY2RjhEN0NDQjQ4RTgzMTVBOTJFQTM0QzUyNDM5QUU1OEFEM0YwOTRCNERGMjkwOTk1QkUKK0M5RUQKKzM5NkMxQworNjQ4RDM1MjcKK0U4MDg1N0IxNEJGNDEwREIzNkM2Q0QxMTExCis5NjAzRUUxMzIyOEUyNUVDRjNEMUQ1RDIzMDREMjYxQUI5NUYwMTY4NzBFRkNGM0I1OTVGQzIxMUJCMjkxQjlERDMzOTRGRDU2NTg2QjM3MzNCMUQ4NjlBQjIzRTM4RjVCOEY2Rjg2QUIyMzhFRUQ0OEYwRjExNzYzQ0YyODRDOTc4OEU0OTc2NkRFMzc0MERGRkEwREI2NkEzMEY3NTU1MzA2OUIzRkU3Q0RDOTdGMworRURFOUExNTcKK0VERDY3NTJGODA5RDdEQzI4QTk0ODU0MjEyCitDOTIxOUNBQTQwRDAyOENBOTRBREU5NzgxRUE0MjAxMENCOEVFNjkxRjFDMjlEOUQ2QzlCRUJFRTFFNTI4OTc2QkIwRUY4RUY4ODQ4NzNFQjEyQzM3QUU1N0FFRkI3MERCQTM4NEJBRTZFOTI3NTBFMjFERUZENTYyODI3RDA5RTIzRDc5RkUwQTI0Qzg4ODUxNjEwODZGNjY1RkU4NTU4NzY5QgorRTMxODkzRDQKKzBBNkQ1RkMzRUNBRTdEQ0Y4NzZFQTlGMTI4MEMKK0E4NEFBOENGQUM2QzUwNzk1OEEzNEM1NjAzNTRFMDg4MkU1QTQzOEM3NUUzNkU1MjI3QTYyMTc4RkQxMjkwNUI5OTc0MDk0QkVCNzM1ODFGOTRFRjBFNjMxQzJFRkUzNUIxMjJBNjRCRkJGMTI4MzUzRDhFNDNFODlBN0Y2RjhDRThDMjVFNkYzMzI2MjZCQTM2OTc3QzJFN0ZGRUUxMDYxNDU2QkFFN0Y1RTI3QTExRjA5REVCNTk1RTg5NzMyQzE2ODIyRThBODIzRjY2NDBCRUU1QUQwRUZDNkUKK0FBQkY0Qjc1CisyRTNDOUUzREQzRDY1MTFGMDFENkY2RDRGNAorRkMzN0FFOTU0MUE0NUJEMUIzNEY3QjYyMjk1RTk1RDY3RkI2NkJDOTg3QUQ2MTY5MzY4RjEyMUFDM0I1MjdDRkZENkQ1RUQyNEE5Q0VGOEIwNzUzOEVBRDVGRDBERERGNkVGRjQ5RjFCQzc0RTM0MjMwOTlENUI3RDA0MkMzRDAyNzM4RTFCNUNDQjBEMDUwOTQyNDQyQzE1NkYyMjkxNUU1NzYzMTc3MDRCMDc1RDUyNworNDhBREYxREIKK0RCQjExRUM5NTNDQ0Q5QkM2MUU0MTNCMzQ0Cis5MTRDQkYxMTYzRTYwNjgxRDlEQTgwQTI5OTAzODYzQkY5MjZCNEVGMzkwMjhEOTAyQjJGODVEODdDMTQ5NjkxNTgwQTk3Q0Y0RUYxMDIyMTZDNjU5MjYyNkQ0Nzk5NEUzN0VFM0Y0MzRFMEY0RUZFNkIyMTg3RUQxMDEzOTc0NDA4MzM2Nzc4Q0I3QUY0RjE2NTZENjI3QzFBOTc4Qjg0QTMxMzhCMUY4MDBGQTRDNjJCNkM0M0FDCis1NDM4MTZBQgorOEU0NDNFM0ZCQUVFOTcxOEEyNDNDNjIyQjE2MAorOTQ1RjkzQkFGQjZEMDJCMjkzODZBQzhCQURCRjQxODk3Njc4OTlEOUY2MjAzMTFEQkM3QTM5M0NEMzZDNzY5ODc5NUY2Q0IxRkFEQjNGNzcwNzFCRjYwMDJBRUUwNEFEQzhBOUQ4NTg2NDNDRjQ3OTA1RjEyQzYwMDRENkJCRTcwRDMxRUQzRkY2RTgwM0NBRThGMEE0QTgxNzcxNzNGMUM5Njk1MEQxQ0M2NDMyMDkzQTNDOTUxNURDQTA5OTREQkI4MDYwQTNDRENFNEY1MzYxODEzMUU5NTlBMkFDNTA2QTAyOEJBMkQ3RjQyMEVENDMyMTM3MDYyOTU2CitBNDIwCis3OTlBM0YzQkZBMkU2QjQ2Qzg2REU5REE3OUEwQjZBMjFBRUEyNDFGODNCMDYyRENGQzI4NTgwQkM4RUQ5M0JBNzQzOEMzMzUzMjJBNTVFREY4RDYxNUUxMEY4QjRECitBNTkxRTFFRQorMDdFNUUyRTk5RDUxMTFEMDc3ODJBQzNBOTMxOQorQzU2MTJGM0Q5RENFNTcxQTVEQkQzNTIwQjBDODNBRDFDRDM4Q0YzOUU3ODAzQkUyRURENzZDNURCMzIzMzgyQjE3M0UyMEM2RDJBMTlCREZGRjUyNzQyQURCODQxMEVGODFBMkMxQTk0Q0Y1RDUyMzQ3MjkwNzg0MTVGNzhEMTUzMDMxNDlGNjVFMTczRUQ4NDA1MUE3OThDMTE1NTlDRkU0Mjk5NjMzQjNEMzlEOTU0RDI5RkQzQTdEQTE2MEM5NjE0RTFFQURFQTcwRDc3OERFRkQ0Q0UwOTQKK0FENjdBMzY3Cis0Qzk2M0RBNDNEMURFOEEzMEU3NjlGQTkxQQorNThDMThCMzAwOTM4QkI0QTQ5RTgwQTQwMDg1OTZGNzdBRTM5NTI0QjRDQ0MwRTIzODE2NUE2RDU2MDI1MjQzNENGMjk2RTg2RjRGOEMzOTEwMzRFRkM2NkVCRDE1OTNFRTgyRTZFNkMxMjI3MjRGMDY2MkM3QzJEQTZFOEI3N0E3RUI3MThEMUJEQTk0RjNEMzAwQUJCOEFBRDMxNDhCNworRTA2RUI4REUKKzgwQUVCQkM3NjE5MEQ5RjM3RDNDMDg4NUM2NTkKK0RDM0I5MTUwN0Q4NDA2RUIwQUUzOUNCMUFDMjZBNDYzMjBFNUFBM0MyMDUwRTRFNUU0NTAzMDY2NzdENzc4NEQyMDRENkUyMjRBQjlEREFCMjdDNkMwNThDMjdBRDZDN0NCNTcwQjc2QTM3RjVFQTVFOTAxMjVBMUQxM0Y3RDMzMDEzMjVCRjU3MjU1REVBNUM0MkFFOTgyRjREQjFBRTdGNUExMkVDNUYwNEZCQjIwRDlGOUQ3REYxMDM2RDAzMDNERjg1M0ExMDk4ODMxMDI4QTNGNTMzMTgwQzExRDc3N0IwMTQzOUUzNTdDMTkyRUQxRTVFMzhBMTFDMAorNjFBNAorNzVFMjhERkY5REFCOTMxN0E2OEI5N0RCMTA5NjIwNjM4RTY4Rjc1NDE1QjRDRDQ1Mzg2MEM0MTREMjZBQUJFQ0Y1RUFEOQorQUQyRTYxMjQKK0JERjVBMTZBODVERjczNUMyQUVBMjZFRThFCis5NzQwMjdBODk2QzBCNjJCODM1NUU5QTFBQkQ2ODcxOThDQjE5NDZEMTdFRkVFMzUzQTA4NDIyMTFDRjA3NjQzQjJDNzlGNjQxQUM5Qjk0QjZFNzVCOENCNkNDQ0Q2MjM4QjM1RUZFNjgzQTcKKzVDM0NGMzgxCis1RTczNzVDRTFDRThDQUFFMzM2MjRGM0U5RTY5Cis0RDZENTY0OTYxMTU5MzZGNTE3MEM3MTlEMjU3QkU2M0VBOUVDMEIxODg2REJCRERBREU3MDJGRTBFRkU4ODdEQjY2M0I2NDZBQTI0RTQ4MzQ2N0EzOUE5NjlENDlDREQ4MTZCQzNCOTU1NkE2RThCMUU4Q0VEMDNEMzAzMTlCMDYzRTlDNjEwNTVDNzg0MEQ5MUIwQTdBRDNGOEYyMDJCOUVCRkEyQ0E4M0I1MDhBODM4MDRGQTFCRDFCQ0REQUY3NkY0QzUzODYyRTYxOEQwNDc1NDUxMkUwOEI4NEE4MzIyMEQxN0NCMEYzMDIyMkQ0QjkzNDVBMjFFMUMKKzE2QUIKKzc4REU2OEMyMjA2NTMxNTk5Q0JCN0YzNTQzNUU4NDkwRTM4QzQwQUVDRDNGRTg2Qzk4Q0U1OUY4QzRDNTlECisyMjREN0EzNworODg2RUY4NEUxNDJCNjc3NEI4MjE1MDRGNDVDQQorQTBFMDI1MDdBODNFREMyMzA2NkJBOTQwNTUwN0E0NjUzQzM3NDRCMDk3QTZEQTcyNDkyRjhCMjA3MjIwRjRFNEIyM0JGOThCMDFCMkM0QzU0ODlFRTBDMkQzNUVEQzQ3NTY1RjZBNTM1QzBCRDk0MkNBRTdFQjUxNzVCM0MzMTAyRDA1N0IwNUZGNjJFQTE1Nzg1NzY3MkMwNzFDRTBEQTZCQzY4MzlDMzIyM0IwNjUxNjM0Rjk1NTk1RjBCRjhFNkQ0ODg1NjUxMTUzRjBCMkVERjdDODFDCitENTdBMDY0QworQ0FCRTBBOEQ2QTI2NUQ1QTI4MkVEMDBEOTkKKzNGOUMyNEY2MzI3M0ZDQTA4MDM4MUYxNDY1M0IyODUyODcyQjdBRkNDM0JCNzQ0OUI4RDExRTYxOUFFRDQ3MTBFMTk1QjEwMUQ1MkYxQkY2N0REMTg3NkMyNzZFRTkzMzIxRUFEODJENjVERjI0RTFDM0ZBMzE5RDUzQkFEOTE1QzYzQzZGM0IwQTZBCitDRTgyMjg4NQorM0JEMEFCOTIxRDQ4ODAzQUZGQjJERDk3NDQ3OAorODZGRTI0NEU3QUM5QjdBQTQ3NzAzNzQ0NTZFMUJFMTdBMjQ0RjM4RkRBNTRCRUEzRTc5NTM3NUMxQUU4NDc5MzIzRjNBQjk4M0M4QTkxQTkyNDFFRjExN0RCOUZCOEQ0NzlCQUE5NTYxN0NGQUFDNDE2OTIwQTNGNjQ3QTM5NTA3MEY0NkNFQ0IzOUNFMkJEOUQ4MjdFRDgxNTNGQTFBNUUyNUI5NUZDNTBGNDRDNTk2NzVGMzZCMTZEOUY0QjM2ODdGODk4REIxMDRFOTE0MTQzQThGNzdEOERDMzk5QkI5QkYyNTA5OUFFNjc5RgorRkZBRDZCQjkKK0Y2NEZGOEY4OUQ1QzhGRDdEM0I3OUZCMzJDNzEKKzQ4MTZEMEIxMkY3RkIzNDBDMTAyMzQ3Mjk5RkI2MEY2NzQ5MDQzRTNEMEIyMzcyQjhENDlFMDE3RkEwQjMzRjIwNkY1REI4ODIyQUMzREFEMzY1NDYwNkU5QzBENzA1RTE4NENDRTBCQjNFNkRBOTI1N0I3Qjc3MTY4RUY4MzQxMDk1NDZDREQwMDQyNzQzNDUwNDQ2NkVBNzQ4QzgyQkFCQTU4MjJEQTNERkYyRUEyMThEMEJCQkMwQjRBMjVCQzNBQkQ2NDM1ODM1RjQ5RkYxNTlCCitFOTQ1ODZDQgorOUZBM0U4Qjk1NjE0RDZBMzY2MUNGMjc5MjAKKzZERjUyRDk0OTE0RkUzNzRDMDFDRkM4QjhBQjMwNEFDRkFCOTI2OUFFNzQ2MUE1RTM5MzFDQUYwMTUwREVGMEQ5MUJDNTJBNjNDNkI4NUFGM0E4RkU2QkU2MzlDOUFDRDJBMzE4ODAxNzM4MTVDQzY4MzY1RTc5OUYxRTU5MTIzMkVBMEEwQjdBMUJGNzIyRkQ2NjcxRDFDREFGRDRFNDZERDFBM0Y3RTA0RkEyRAorMjRDRjhCQzMKK0IxMkNBRUExMzdERTNCNUUyQTY4MUE0NkU5NEEKKzRCQkI4MjZFRTVBREU0RjY5RThEMUQ5QjNGOTRDMUQ5MkY0QkI0RkQyMDFDMjAxNTFEOEFERjA0MjA5NDYwRTg2MkZERjNEOTg0NkVGQzI4MjIwRjNCMTY3NjA1MkRDMzhCMjA4RkI2M0RDNDA0NDQyQUI4NjNDMUY1NTYzODBDNjk5Njk3QkY4MDExNUE4M0JFOEMxNjdCOTE2RTU3RTE0Q0Q2RDg1RjFGMzQwMEYwODA2NDQwM0MxMDEyM0JGRjdCODA4ODZFMzQyQ0REOEQyREExNDlEQTI5RjUyRkY3NTIxRTQxMDI5M0NBMjIxOEVFOEE3NDU0CisxNEY2OTFDMgorNTEwMDE0RjVENDAzMUZCMTQxQTc3NDNBMDkKK0FGRUNBNkRDMkI4MDMzRTM4OTMzM0RBOUY2QzdBMEVFODM0MTQ3NDhBOEZCOUQ3MkYzQ0JBQjIwMTlCREUyMDk4MUI5M0E2MEQ0NkUzMTNFQjMyMEUzQzU0RUEzRjlGRUJCOUVBNDg4NzRGOTQzODEwQzJENjAwRDZGNjcwMzAxODJFMEYxNEJDMgorMTJGMTdDNTkKK0E4MDJCNkQ1NzhFMjZFMDE5MDFFQzk1NEI4CiswM0MxOURENDY2QTYyNTRFODdFRTFGNDhDOEVCMEY2NjJDNDMyNzRBMDBGRjQ1QTdCREIyRjI2MzI2MUU4RDkxMDk0NTk5NDQ0QTdCMjczRDc5RTBBMDExM0MzNTBCMkU0Njg1NDgzMEYzOEFEQTk3M0MzRjYyNzQwRkQ2NjYzQ0E1N0M5RUUxNzYwQkFDOEU1MkZFMjVCMEJERDAyNEFFNjFBNEU4QUQ2MjAxMDlFMTI3QTBFNjk5RDJCRTA0ODNGOEE3CitFMDEzN0VCRAorREMyRkE5OEI3OUNCMTg4NzgyOThDMzgxNTUKKzZCMzJEOUMzMDYyNTNEMTI2RkJCMzAzNTc2NDdFRDJBMTk3QzgzMjJEQkRGRUIxMEI5QjQ0MTJEOTM1QjQyMjMzREUxQkU5Qzc4MzMxMTYwMjA2OEVERjg2Q0RCNzI1QjhEMjlFOTJBQTg2MEQ3OUE3ODY2MkMwMkNCQjgwQkJCRjlEODgwN0VDM0FDMEY2OTU0NDgwMTFFOTNBRUYzODhEOTVCODc3RTFCRjI3MTQ0MUUKKzZGOUFBQTBFCis0OUMyNDUxQkQyRTk3MTE5QzNBMkI2RTZDQUE0CitDREEwMzcxRDNDRTE2QjBEMDRCOUE1MjNFMUI2RjAwRDgwQjk0QkM3Q0E5ODU0NzMyQzVCNzgzMDFGQUYwMDM3MDU0MTE3QTJFNURDMTk4NTQ5RTJFQjM0MjM1RDhCNTE0ODdDREYyNjFEOEM2QTc2QjQxMDQ5RTdBRDAwQUQ3NUEwMTk4NzVCRjJBRDUwNDlDNDBDRjA4MjdGNTYxQTJBMEI4QkREQTNBRjA5Q0FGMUI1MjI0RUU3MUI3OUExQzlFQTU5QzA0MTRFMEI4MTA1RkYyMEQzMDcwMkVEMkRFMTNDMDkyNTlCQkQ5REQxMjg3MzlFRkZFMUIyQUIKKzFDREQKKzlCNkRDNDkzN0Y1QTJGMTNCQTZDMDQwNDhFNjgKKzlDOEREOUJFCitENEJEMjBGQkZFODY1RkZFQjA3MDAxRDg1RTE5Cis1MEI3QzUzMkREMUVBMDM3RUFFQzc1QjgxMzRFM0E4QUM3REEyMDc3ODJGRjNCOTBGRDY2QjI4N0Y2NEI5RTBEMzM1RkRDREZCMTgyOTEwOTgwNkNBQzQ2N0E5QjhBMUI5RDA2RDQ4NzYxRTg4QkE1ODRENEQ2RjM3QkQ1NUI0QUVCQzhBMzMwRjQ4NUUzN0MwRkY4MzMwQURFMEUwNjAwOTY3QjUyMzdBMTBCNjA4MTg3RENGOTg3QzRGNTA2QjBGNTk5OTdFQ0Q5RDY0MjRBNzUwMThEQkE3NTY0QTlBMzc1QkE5QTExQUZDMEIwQTlFOEE4M0ZEODc5NzkKK0E1QkIKKzJBQzFDNUNEMDU3QzU1MERGMDBFMDU3REU0MkEwN0E3QjZGOTgyMjhFRkE3QUVGNjAzCiszRDhDQjVCNworNDI2OTJCQzdFMTJGQ0U0MDVGRkE0Q0NGQTU0OQorMTFBQ0QwRkY2ODdFMEJGQUU1MDcwNjA3MjFEQkFBNDgyOUIxRjI1MTY4OEE4QTU1Q0VFRUVFRDJENDgxMUVENkYzQTZCOUI3NzAwQUY2M0IzMTBBRDkxQjVBOUQ1QzI2OUIxNkU1NjI4MzQ2NDlGQ0QyQUYxQ0JENkYwMUZBMzM2NDc5MEJCQ0VFRDg2NENCQzJGRDYxQ0U2QTFDRTM1MEZEMDEyOUI2MzdDM0RCRTkzN0NGOTM3MEI0QUMzNzlEREI0Q0M5OTE3NEE2M0ZCQTNDQzZBQzMwMUE2MkZBMjE0NkEyNDZEREVDNkY1QjcxMDVBMEJFNjcwNUJECis1MkI3CitFMEY5NkUzMQorRjI5RjFGM0JCNkJENTU4RjdGNEI2MkRERTM4MQorMkFBOEQ5NDg4RkE3RjM3NTU1M0UxRjc4MTM4NENBMTI1MDkyOEU1QTE3MjJFMjRCOTlFMkY2RkQ4NEY4MkFFNUFBQkMzNTk4ODY3Q0Y5NzNFOTFCMDczMDczMzcxMjA4NkE0QTBENUM0NDg0RUU2MkMyNjM3RjAzNEVDRDQ5MzhFMDg3RTFBMDA0MURCODhDM0YwOUQwRThGQkE4NzVBNDAzQUNCQ0Y0MjE5MkE1RDAzOTRFMDMwOTFEMTA3MzM1MUUxMUUzMEQ4Qjk5ODBBRkU2Cis3ODc2MUJDOAorNUU3RUM2OEIyOTZDOURDNEM0OTRDMEIzMEMKKzJEODIxMDg0RDcwRUIxQjM3NUI4RjIwQjI3NUY0QkVBQUI5NTY5RjFENDBDCiswQzJDNDQzMgorM0JGRTNGQjg3MTE5RUVGRThFMTVERjhBMzc5QworMjIxOTMxNzJCMTY3REM1QQorM0FCQTM0MjgKK0NFNzQzQkY4MkY4OTFEMUQxRjdERjkxMzEzOEE0RUIzMzc4RTk2MkVFQ0RBQ0VDRjI3OTY3Q0VEOTU3MDY3RkREREJDCitDNzlBRDZEQjY4MUJFQzJGQTU3NTVDMTNBNEYzODYxMkJDMTY0MzRDNTg5NEE1QTE4MDFGQjVBMzk5NjgyRjY3NzkyNTMzQTQ3MkIzCis2MTI5RjRGQTJFQ0VEQzNDQTE5QzlBOTlERTdBNDU2MEFGNDI2NzlGQkVBOENGRTBBQkU4Q0IKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCislRGVmaW5pbmcgZm9udCBQU093c3RkdXRjaGIKKyUhRm9udFR5cGUxLTEuMDogUFNPd3N0ZHV0Y2hiCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3dzdGR1dGNoYiBkZWYKKy9QYWludFR5cGUgMCBkZWYKKy9Gb250VHlwZSAxIGRlZgorL0ZvbnRNYXRyaXggWzAuMDAxMDAwIDAgMCAwLjAwMTAwMCAwIDBdIHJlYWRvbmx5IGRlZgorL0VuY29kaW5nIDI1NiBhcnJheQorMCAxIDI1NSB7MSBpbmRleCBleGNoIC8ubm90ZGVmIHB1dH0gZm9yCitkdXAgMSAvQzAwMzIgcHV0CitkdXAgMiAvQzAwMzcgcHV0CitkdXAgMyAvQzAwNDAgcHV0CitkdXAgNCAvQzAwNDEgcHV0CitkdXAgNSAvQzAwNDMgcHV0CitkdXAgNiAvQzAwNDUgcHV0CitkdXAgNyAvQzAwNDYgcHV0CitkdXAgOCAvQzAwNDcgcHV0CitkdXAgOSAvQzAwNDggcHV0CitkdXAgMTAgL0MwMDQ5IHB1dAorZHVwIDExIC9DMDA1MCBwdXQKK2R1cCAxMiAvQzAwNTEgcHV0CitkdXAgMTMgL0MwMDUyIHB1dAorZHVwIDE0IC9DMDA1MyBwdXQKK2R1cCAxNSAvQzAwNTQgcHV0CitkdXAgMTYgL0MwMDU2IHB1dAorZHVwIDE3IC9DMDA2NSBwdXQKK2R1cCAxOCAvQzAwNjYgcHV0CitkdXAgMTkgL0MwMDc4IHB1dAorZHVwIDIwIC9DMDA4MCBwdXQKK2R1cCAyMSAvQzAwODQgcHV0CitkdXAgMjIgL0MwMDk3IHB1dAorZHVwIDIzIC9DMDEwMCBwdXQKK2R1cCAyNCAvQzAxMDEgcHV0CitkdXAgMjUgL0MwMTAyIHB1dAorZHVwIDI2IC9DMDEwNSBwdXQKK2R1cCAyNyAvQzAxMDggcHV0CitkdXAgMjggL0MwMTEwIHB1dAorZHVwIDI5IC9DMDExMSBwdXQKK2R1cCAzMCAvQzAxMTIgcHV0CitkdXAgMzEgL0MwMTE0IHB1dAorZHVwIDMyIC9DMDExNSBwdXQKK2R1cCAzMyAvQzAxMTYgcHV0CitkdXAgMzQgL0MwMTE4IHB1dAorZHVwIDM1IC9DMDEyMCBwdXQKK3JlYWRvbmx5IGRlZgorL0ZvbnRCQm94IFstMTggLTIwNyA3NjQgNjk2XSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0Mjc0QjE4MjE1NjhEQ0EyRUE0N0QyNjFEREJEODlCMzlBOTM4CisyMENGNTZFMEQ0NDhBNEJENzlEQTk4RTYKKzVDMDE1REQyMTFEOTYyQTUyOQorNDg5NDdGRjAKKzM1RTRDNTJGQzI5QzI0MzcyQkNGNjc4REY0NEYKKzIwRTcxODU0Q0NFRjgwRTM0QUMyOUM5QTk2RjczNzg2NzcyNjlFMjk5NzA3QTg2MzE4MEMwQjI1NEI2M0JEODNBMzJFOTIyMDA1RjU1MTBFODhGQTc1REY5NzFCRDAzREVGQkM3QzQxNkMzN0M4MTIxRDkxREFDOEY3M0M5OEVFRUZEQ0IyN0RDMzJDNzk3MzZGQzAxNTY3ODJFQ0Y3ODc0NjQ5NTAwRjI0QkZGREUyOUFBRTlFRjM0MEVCMEQ5N0U0MjI1M0RBRDNBMEVFQ0MxRUJCNjIzMERFMUREMTBCRDc4QjZFNjQxQkNCOTgxMjk0MUVENEY1NkM2MAorMkU1QworMkE4MDA1Q0U1QzlEMjEwMTRFRjU4QzVGNEI5NERFM0EzNzRFQjkwQUU2MkZCQzA2MDZBNDY0OUMzRjQzRUNCRDk0RTcxRjAzNkU4NTFENTRENTI3MkVDNTg5RjNEMjRFNEREMzI3RkYzNDcxQzE2RUFFNEQ2MkVGNDZENERDNDExMjkxNkRGRjZDNjNDQjFCNjlGOUE0RDg5MDQwQzBCMDdBQUMzODQ1NUEyNUQ5MEUxRDhFMzM4MUY3Mzg1NkYyQ0RCRDEyRjREMQorQkRDNDY2QkEKKzNBODRBRjVFNjAwQTEzMzJFNDQ5MDc1NzNDCisyQzdBNjg0RkI3MzdFQjhGRjJBREE1MUNCMTRGQjM4RDE3NDE4NUFBNkRCNDNBRkQxRjAwQTMzREMxM0IxMTM3NzY3RURBQUQwMzgyNjRCMTM0QTQyQzVCMEY4MkE3MEJEMTZDRkU4OTE1NzAxNDA1MjZDNzlEREM5MDI5M0MKK0M3RjU2MDhGCiszMEI3MzJCMTk0QkNCNURFNTk2OUMxRDVDMgorQUFERjBFOTZBMzE4NjNBN0ZDOTBBNDgxRUU1MTQwOTU2NzQ3QTc5MkY0MDIwNUFEMUMwMTAwODRDMEM0RjU2OTNEM0ZDNzJEQ0YxOUY3RkUzM0U0OTFCOEIxNkYzN0I0MTM5RUY3MDY4MERBMUM0N0M2MEFGODcyOEYKKzE5NzExMjIwCitDODAxNDU0MDlDQzQxODQ0MTE4MTMwRjE4QgorODNEOEFFMENBN0EwNDYwQTk5RjBBN0MwMDcyMzg2QjNBQzdDNjgwRkMxQUE0OTZEQjY3NEJBOEIzRkRDNjdBRDVENjUzMTQ0MzhCRkY4Njc3QzlFRDI2OTM2NzlCNQorQzk3MzAwQjIKKzIwNTZCMEEwQjRDNkNGMTk4RTNCMEYzMDFCCisyOTYyRjE3RTQ0RjI3MDI5Njg2QzE5RDYyQzEyOUMxN0E5MEI1Q0VDNUY5MTNFCitDNEYwNDEwNAorNjVDM0MwRDMxQTIzNDQwQTcwMDM5MUIyMDEKKzYzRUVCMzIyRUIwMEI2NTFCMzFFMDJFNUQyNTc5NTY3OTE3M0QxQzExNzFFNTNGRjMwNjQwNjhGREY5ODM2CitFODk5M0IyNQorNDBCMTY5MTE0RjAyNzU4QTFFRjEyRTk0ODkKKzA1RTJEODUwQTQyNTNFQUI2ODM1RjlGRTY1QTlENUE4N0IxMTJFMjdFODYzNkI3MzY4MzgKK0FGQTZENUFECitFODM2MUQ4NUIzN0FCNkRCMDg1NEIzMTRDQgorRjI1Q0JFRjU3QUZFMDc2ODA3MTMwMDhDRDVDMjlEMzBENTA2ODUzMDVBNDMxQzM3NTE3M0EyQzdGOEZEOTkxOUU5OUIwNDBEQzcxNUVDMTExOUFGMTk4MzUxNTMxQzE4MUFGMjMxQjRFMkY3RDBEQjZBQzU3MkU2RTZCNEY2MEU4NzExMkE4QTAzNzBDQTJBNEMwMEREMTE2RTIxRDMKK0UyQkNGNDc2CiswNjE2OEZEN0I4MTBFMDQ2QTcxMzI0ODE5QworRTg1QUQ1MUNEQTZBREM4MTg4MTdBOUUxQTM1QTA0OThCMDVCQzM2MzBDRDI2Qjc5M0Y1NTBEN0U0RUY3MkI5MDFFODBDQkI3Q0UwMzdCNjNDQzRFMjg3NjYxNDNCNDVCOEVCOUVFMDA0QUM3QjI2MzkwQjM3OTg4Cis2NzUxNjY5RgorMjBFREM0Q0YwNzdCMUU0RDA3MzMzMjcwMjEKK0ZCNzE2Mjg5QUQwMjEwQ0E2N0FBRjJBRTEwQTAyMUZCRDI3QTI3MzEyNTQyQTlDNDBFMkExN0U0REZDODVGM0QwMzQzNUUxRDg1N0M1QTIyQjkwRTlBMDIzN0U3QjQ4NTdDN0NBNDYyOTA5RDMyNjVEQzU1RTAxRDY1QjYzOTZFMjJFQ0E5NDI4MzlDQUU4MDU3RUVDOEVEMjZFRUE3RTc4MjdBMjA4MgorOTc2QUExOEMKK0JDQjQ3Njk5NDMwRUQxNEFGQ0FCQjUxMUQwNjgKK0M5MTgzQkMwOTg0REI4RTI3MTEyRERFODUxNjRBRjdDNDQzQjU4MDg4MTEyODRERkYyODQwMkQyNEU3RDlCOUY2MTk2ODlDQzVBNEVEMDMzMEEwMTAxOTNGODU2RjkyQzRENzFEMDdCMjk5REZBOTBFN0E3OEE4QzAzRDlBOUYyQkQ3N0NEMDI0N0U2OEJEM0IyQ0VDNDg4MURGMDRENjVFMTNGMTJFM0ZERTQxRUIyQkM2RERGQTk1MDU2RUUxRjUzNDlDNjAzMjgzQTMxQkUwRTRGMUUzNUE4NjdCNzEzRTk4MjJECitCRTJCQTcyNQorNkU2NDRDRjVDMUFGQzdEQTk0RkZFRTVCN0YKK0I5RjM0QTMxOTI5NUJFNzY3NEE5NDI2NEIzNkVBNEIwNUM3OTk5RkFEQjJDNjhEMjA2MzgwRkJCQzVGQzY3RkZBNEQ4MDA5NUY3MjA2RUM1MTRDOUJCN0JDOEJBN0Q3NjVBNkY5M0E1NTc3QTEyMjEwNjdFCis4RERFRDYwQQorQUJCQzI1OTFEQkY3RTA2OEM3RTU2OUExQUYKKzdCOTk3RjcyQzA2NEQ4OTlGNzZGRjZFMjYyNzQ3RkI5MDI4RTE2NkZEQzM5MjMzNjY2RUIzMUM1RUUyNEJDNTA3ODQ5RjA1RkQ1QTAyQjE2RUM5Mjg3QUM3RjEzNTRDMTdCNERDMjc4OTg2Rjg3QkZFNjIyMEQwNEJFMzE5RTNCMUMxNTM4NTRFRkQ3QTc2NTEzMUZBQzg0MENDNDQyMjZGM0NDNkRCQTNCRTAKK0YzQTRFRjRFCis0NkY0OUNBNDdBMjAzNDQ2MjQ4MTMwQjU3MUQxCitERTU4RkM2Rjg0NDg5QzlCQUJERkEzMzA0QTM1QzEyOTg4Qzk5REQxMUQ3RDJFMjQ5Nzk2QjJBMDY5MjE2M0UyMDFCNkJEODQwNjQwMEYwQkY5NkM4NDBDMjNEMEFCQzJEODg2N0RFOThGREYzQUNDOEJERjUzMzQ2NkM5NjQxNTRBNDVCOTI0MDdCQjlFM0VBNjg2NTZDMjQ0QTNBOTNGNzg3Qzc1NkM4QTAyRTVGNDYyMDY0OEJEQkQ2MzJGRTVDQTk4NjQ4OAorOEVBNzIwREEKKzNERjc1RDczMDI0QkNDNkYyQTMwQjk4MDZDOUUKKzQxQTU4QUVGMDZDRkY2MThEMDEzNUFBOThCMkFENUVENDhCRjRBQzI5ODFFQjgyRUI2MzM2RDY2QTYwQTc0NjMzNkNBNDdGMTYzRDNDM0UwMjI5MURGOURGRDIwQjBDMDk2RTdEMDdGNDcwN0RCOUIxMDg4OUZDMEE4QzdENzYxRkZCRDQ5RURBNzdFNzBENEI0REExMDMxMzAzQTJCMUQyM0ZBQkQ4M0E0MjZCNDRBMTZCNkVFMEZFRkE2RDg3RDlFNkVGNzAxOTExRjJGMEQ3QjRFQjgyNzVGQTQ0RDQyQTU0MkNDMDMyQTcwQUQ3MTA5MkEKKzY2MDc2MjRBCitGNzg2QTg1MTYwRjE5QkExM0MzOEEyNjM0MUFBCis1QUMyRENFMjkzMDk2QUYyMTJDRDM3M0QzNTEwMTdGODQ1QjVFRjg2N0E0RkQ2QjU5NTdBQzQ0RkExRTVBRUJFOUM1REIyQzlFNTMxMDc4QTAzQjM1QzE2NzM3RTk3NDRFNzQ3MUY0RjFBQjE3MDg3RTU4MzBCQUVENzRBQTM2MEZFMTc4RTc3REFGMzhDMjg4OUVFM0UxRDFBNzNERTI5OEVGQTYyOUI0N0FDNzhFQjZCMTg0MTc5REMxQzBCQUZDMDhBQTk5M0QyMzk5MjE1QkQ2NkQyCiswNTUxMjk3QgorRjREQ0YyMzg4NzBEOEIyQTdDRDkwREE4RjQwOQorOTJFRDlCQ0U4RTg2QkM1OTI3OEMyMDQwODY2RUI1RjEzNDBBQTg5RUQ5MjgyNTEwNkRCNTczMkU4OTU4ODY1MkI0Q0NDNDgxOEIzNjRGNjI0NjUzNzVFM0RFQ0VGNUJEMDUyMUVBNjcwQURCMUQzM0UxOTdEM0QxMEFBMEVBQUFCNDkzNzUwNTNCNTlCQzNDNEM0OTg5Nzg2NEM2QUQwMzAwN0ZDN0JEOEE0OTFCRDg5RjY1RkRFMUM5QUY1MzE2MENBRTg5QUU1MDgxNkFFMDJBMjJGNUYzNDU0QTYyREYyQzU4MjhBMUNCREYzMjZDNUQ3NgorMzBGRUQ1OTEKKzgyNzI0RjIxM0I1RkE2ODk1M0VDNDAyQjZCCitENjhFMkE1MzhCMEUzNzcxMjg3QTU1QjI4MDFGOTI0NENDOENBRTMwMkE4NTkyMjEwQUJEMDU1NjNCRUY2OUFGNzU5MEVCNkUzQTcwQzc0NkRFNjY0MDFCQTVDNDUyMTVFREM4OUI0ODY1RDBBOTI3OEI5MEQ1Mjc3RjBENDBFMTY0RDQwRkIxMDdGODA0NDdFREM0M0MyRDFGQjA5N0M1OEE1ODdERjhBMDZCNDlDRjlFNDkyMzZFOUQ4OEQ3Cis1QzUxNzQ0NgorRkY5QzdGRDczNkE3MzIyNjgxRjFEQUI3QTVBMworMkFERjI4QzEwQjA5RkFFM0Q1RUFCOTIzMjA4OUNDQzhENzQ1RjRBMTU5RDE0ODNGRkE2NEEyRDIxNEQ2NUVDOEFDNEU3ODdDNzAxMkVDRUIxQTFDNzAxRjhBNjdFRTI1Mzc3NjAxNzE4REYxNDEzOEUwQkUyODNGNDI0RkMzRjU5NkJBNDY5RTBDRUJCRkUwMjQ3RTMzQTYyRTdGQUQ5MDVCODhFRjM2NzAwNENGQ0E4MUNENkQzM0Q3NDk1NENDODQ1ODFGMUQKK0I5Q0E5QkJDCis0QjJFQTU3QjY3NTYxQkU4NTVFODA0MjJGNQorQjVCNTZGNkRCRUFBRTc2MkNBNURBRkIwOERCOEIzMkFDMzI0ODdFNzY1M0JDOTBBRkVFRTUzNDAxRkZDMzQxRjZDNEM4MENBRjZFMEUxQ0U3RkNFQTBDNjM0RTJGMDQwQjBFQkQ1RTc1M0QxMDc0NDk4M0MzMzBCOTJDNEQxOTE5QjJCQTQ4MUFGOUVBQTBBRkUKKzgwN0JEREUzCis0MTQ4OEIyMkRENzYxNEZGRENDNjlCQkRBQ0FCCis3MEUxRkYyMEQ3NDFBQTMzNjExQzM0OTZCRkU3MkFCRjgyRDlBQzREM0ZEMTI3OTBDN0IyQjMwODQ2REJGQjBDRUJBMkMyQUI5MkNBMkU3MzRGMkExODBGMjQ1RUU5Q0M5ODAyOUNERTdBMzg0MTk5MzIzRDg3OTIwOTlGNEI2NUIxOEJDNTZFQjA3QTQ5QjZGNzM3NDRDMTVEMTE3NDRGQjQyRUJDN0FEMzdCQTQ4ODgwMjc5NDEzMTNEN0IxRkMwRjZDMDUzQ0QzQjM5QzkxMkFBQjYyMTI0Nzc0QjJEREE2MkE4Q0I4OTVBQTA0NzI1MjUxOTI4QTk2RDQKK0FEQjUKKzEzMTM2MjdFCis1NEUxNDYzMgorM0MxMkM5NTQ1NjVDN0U2NkQ5MDczNUE3RjgxOQorMEI2RDlGRDEzMTFDMjNCNjI0MTBCMjhFNkVBQUVDRUU0MEExOTM2MjcyMkI1NDU2REFDODNEMEQ2QkQ3OUE4RkEwQjM4NDRGMDk1MkEyMUVFQTI3RjY2RTdEMkQ4MjZGQkM2REEyOTQ1NkIxRDc5ODk5NEMyMzhBRTVGQUFGRUNDQjAwRTBGMDI1MkE3RTRBMEVDNjlGRkRDMjhFRUIxOURBNDczQzQwMzY1N0JBN0QzRjAzODMxNURDM0Y3MUM1RkM4OUVEMTVGRTc4MTVGOTVENzAzQzE1CitDQjkzM0RBNgorQzYyNkM0QThGMEU0NDQ0NkEwNDg0RjE3NjgKKzdEMkYzOTAwMUFGNTFBMDU1NTQyREI1ODkzNkVCMjE5OTEwMDQ3ODI0QzkxQzVBOUREM0U4QjYzRjZGMDhGRDM1QjA3NEYwQzc0REYzQkY5Mzk1QTMxNEFBQjQwNUM2MjdCNUE2NUVBQzBCNzRBMjdGRkNBNjRCMTJCMzA3NUNGNjE3Qjc2MDEzRjdBMzQwRDUwRTExODdGQkIxNDFEMUNDNzM1RDIyQ0JGNDJDREZERTE1M0Q3NEMKKzAxRDEwOUIzCiswQkJGMTlCMTg3RTM0NjZBN0NENzQ0MDQyQgorNTY1NzQ2QzJCQjlDREUwMzM0NzNDRjRDNzM3QUU2MThENjI1RjBGOUY5MUIwMEM5M0FGOUYzOUYwQjA4NTA0MzQ3ODZCMzMwRDlFQkZERjgxMzhCQTU2QTU1REVCRDBEMzJGNDNFNTU4NUY0MzJFRDYzOEUxMjFGMzMyMzAxMDk5NzBGMjQ5MzkzQzg2NjA5Mzc3MzE5Njg4OTU4RDYyMjY0NDk2Nzg0NkIzOTUwM0QzMjgxMDRBOEI1Cis4QThERDREMgorMkM3QzE3ODVCQjBERTM1QjM5NzIwNzRFMUMKKzk1RjRBNEI3Q0NCNDhBMzY2QkMzNzI4RjkwOEJEQjYzODMyMDA1OUM4QzA5MzFBQUEzQTk3MUU0MTNBREU5RERBRjk5RDVCQUNCQTM1MjRFNjI2NUFCMUEwRUMxN0E5Mjg0NkU4QjM2NDNBRDhCNjlERURDREFCNUMyMjlBMUVGQjRGQUMwNDFDQTU2NDQwMkMwRDgzNERGODRCMgorMzgwMTFENDEKK0YxNDAzRTIwNDMxMDRCOTRFMjYxNkI1NUIxCisxNDc1MjVFM0I5Q0VBQ0U4QzU0MEQ5NTQ3MDA3MUIxQzdENkU0MjVFN0I5OTNFM0M1NjAwM0FCQkE3OTM4ODJBQUZGN0I4NzVFNDNFMzE1NDA3OEY3OTkwMjZBQUI3OTVDRjNEM0NERAorNkExMTRGMEUKKzQ0RDZGRjlBNTRBRUMzQjBGQzMzMjQyRjBEOUMKK0MwMkYxQkVERjI2QjNEQjEzQ0Q5NDNFODk4MDhBMDAyNTY3OTc5ODU1RjVBMzRGMEM1QTkwOUUyQUY5M0ZDMUY5RDM5MTQyMjRCODE5RTUwNEEwRDc5NEJENjA4NUI4MUJCMzRBOUE4MzhFMUU0NjI1NzVCRjM2QUVGN0NFMTYwMzRCMTA0REUzRjYzOEUwNEYyQUUxQUU5NTdEQzAzN0E2QjhFM0RCMjhDOTBGNjc2RTU4NkFGNTVCRkZBMEE1NUNGMUQxOUM5NTQyMDkwCisyMDk3NzhBOQorQkIzODE0RTE3QkIzODQxMDFGRjVCNDRCMDEKKzZCNzdBMTE4M0ZDMkQ0OUQ5NEQ4OENGOUYwOTVCMTBFOTkxQkYzQTRCQ0EzMjgwQzkxNzgwNTdFOUE1Q0ZFMzcyMkFFNTFDM0MyQUM3MTNBOTY3M0NBMjQ1Njk2RkIxNkFFODBENUYzMTAwRkQwMjU3NkUxMTUxM0ZFRTREMkU0RTYxNzAzQkZBNTk0CitGQ0YxODUzNQorRTZFMTk1MUNDNjk5NjhEMzY3NzJFNDY2NTRFNgorNEJDOUIyRjNDRjI0QjJBNTM5NEFGM0IyMTVFRDE3Nzg1REEzMDI4QkY5OEFDOEI2OTA3Q0VENjYzQTgzQjZFNjUwQzI1MDVEN0Y1NDIwQUFCOUE1NUQwNTREMkE3QkNDQjhCNDhBMzcxNDJFN0I3MTUwRjhDQzc2NjE3MUNGRDdGQ0ZGMDc2QkVFNUZFM0U5MDkyNzE4M0FGNENGM0NEOUIwODY3NDIxMUZCNjY1NTA2NDNBMDQ0MkE2ODc1ODgwMDlFODA5NjQ4MzNDNTIyOTcyQzE0QzFFQzUzOEVGNDAwNQorODI2NTc4NjAKKzYxQUREN0RBRUQ4QjE0Q0Q1RDhCMkNGMkVECitFNTFGODEzODg5N0U2MUMxMjUyMEQ3NDlDOUZEOEE3MjQzQkNBOEI5NjUyMzhEQjNFMDIxNTY2MzRGRTJGOEE4RkNERkI0MDE4Q0Y1REZGOEUwRUI2NkU4OEQzODdDNzY5Q0RDNEEyMDUyRjIwNDc3NTRCNTk2ODczNTkyQUJDODdFN0FDMTM5MkNFODk2Q0EzNkU2NjYxMTc5Mzg2RDBFQUIzNzU4ODg5MzkwRUIwNDgyCitBMUUwMDc4NgorQjZBRjg1MkI0QTRCNzYwQjMyMzI1QTkzMkEzQgorNTcxMzYxMzE5RUJFN0Q1NDg4NTdBNUEzNjgxQTkwNzQ5RkQ1Njk1RjM0NjRENzI3QTU5MDhERkNGQTBCRTA4NDM1RDc5RjMwMDEzRkRBNDZEMTVFMjQ5OTNCNjgzNTY3Q0U2NDI4Njg1M0FCNEZFMzlGRjEzQzY3MkY4RTU4RDYwQkIxMkRGOTE4OEUzMzU0MkEzRDkzNzQ0RkY0OTJENUJCOTA3NDc5M0ZGRjVEMUY2NDA0NEY4RTY2N0UxQkU0ODVCQzIwMkFEMzIyRkE4ODkwRDhDODZFNDRCOEQ3Nzk3MDVFRjkzNUMyMTFEMEI1QjAKKzUyRUY5QjY0CitDQjZDRkU0MURBODcxNkU2OTQwOEU0RkIzRgorREEzMzAzRTYxRUZGRkZGMzZCRkU4MjUzNzNDODFERkI3RkMzQjkxMjYzRkEwNjY5NzhGRkY5QkRDNkVFNkIyQThBQzI5QTZERDY4NTA0RkFGNTlBQkE0Qzg4RDRDRDY3NTUwRjRBOUE0OTFFMTJDNDBGOTdERDA3MjhCNzU4MjE1REZGNDIyRAorMTY0N0Q3OUUKKzkxRTBGNjQ1Qzg3MzlGMTgwRDhCNEI0Njc1CitFNTk4NjM5RjkyNDgyOTlFNzhDOEM5MjNCMjEzQkQ3RkU2QkFDODFENUY1MDVEMEY5NzExREYwMzU2MDY1OURENEIyRkM4RTVGMDJBQzc5RTQ1MjAxOTc0QkYxQjRCNTlCMjQzNDk4Q0QwNUU3OTgxRjM1QzdCN0IwRjBFQzhCRjA2QzAwQUZDMDgzMjlFNEJGRjcyQzA3RkYxMkJBNDEzNjJCMTQwRTRGMjg2MzE5N0Y3NkRDNEY3CitDQjhGRjVEOQorQTBFOEVFOEFEMDU3OTA2NTk4QjdFRUFENTIxOAorMzc2QjY3OTU4QTRBMDBDNUU1MTZFQUMzNzgyQkExQTU1QjI3NTY3RjgxN0I4REZGOUNFNTM2Mjk1RkZDRjM2MUYyRDQ4RkU5RDY1MzY5N0FFMUEyRjUwNDNEN0U0QzI1MDk1RjdCMDY4QkRGNzAxRTI1QjZCQzJENEYwQ0ZDNkM1REFGMzNCQUZEMUNGOEQ3RjJDNUE5M0Q0NkJCOTQwOEI1NTZFMUU2MTk1OTY4ODlDRjVDN0QwRkE5MUU0MjE1QzVCMTRBNUY2RUZEREFENzk0QzQxMkI3MEIzNEM3NTY5N0Q0MTJCNDJBMkNDRDBEQkZGMTM2NzkyODlGCiswOUU0Cis0QkVDQ0VGNUIzNzg3NUMxMUExMEZGRDQ3OTdGMEFBRkNGNDQxOTJCRDMzMgorQTQ3RjBFMDQKKzQ4ODJCQjI2MkVGQjhDMjU1QTQzREM1MzNBNTcKKzVCMzJFNkE5MjVDMkU0QTUKKzQzN0ZBNjA5CitENzM1Q0FGM0VEMzY4MTVBN0I4RTI4MkE0MzM3QjcxRjFGRTg1MzQ4MjYxRUQwMzYzNDg5NkVGQjExOEQyMjc4RUFDNQorRjdEMUU4NjY3RTU5OUIwMDM4MEM0N0ExNEUzMzAyMzUyQjkxNzU0NUJEMDM1OTEyQ0VCOTIyREFBREJGRDI0NzVFRjEwQTQxQzlENworNTMwNDNDMDJBRjk2NDRGMTk1ODFDMUM2ODcyQUJBQ0U2RjVEOUU5QUFBODcyNEQ4MjYyNDNFCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitjbGVhcnRvbWFyaworJURlZmluaW5nIGZvbnQgUFNPc3ltY2xhcworJSFGb250VHlwZTEtMS4wOiBQU09zeW1jbGFzCisxMCBkaWN0IGJlZ2luCisvRm9udE5hbWUgL1BTT3N5bWNsYXMgZGVmCisvUGFpbnRUeXBlIDAgZGVmCisvRm9udFR5cGUgMSBkZWYKKy9Gb250TWF0cml4IFswLjAwMTAwMCAwIDAgMC4wMDEwMDAgMCAwXSByZWFkb25seSBkZWYKKy9FbmNvZGluZyAyNTYgYXJyYXkKKzAgMSAyNTUgezEgaW5kZXggZXhjaCAvLm5vdGRlZiBwdXR9IGZvcgorZHVwIDEgL0MwMDY5IHB1dAorcmVhZG9ubHkgZGVmCisvRm9udEJCb3ggWzEwNiA0NSA3NzUgNzEzXSByZWFkb25seSBkZWYKK2N1cnJlbnRkaWN0IGVuZAorY3VycmVudGZpbGUgZWV4ZWMKK0Q5RDY2RjYzM0I4NDZBOTg5Qjk5NzRCMDE3OUZDNkNDNDQ1QkM3QzhBOTU5QTM5QTMyRTlEQ0U3RkFFRjE3RUUzQkVDOUYKKzUwRTFBNkZDQTY1MUZDNEIzNzY5QTBBOTEwNDE1NTc1MDJFMjVBNUQ2MTgwRkUyNUEzRDExQkYwNzlFMURGNjZFNTRFRTlCN0MyMjlBRjg5MTczOTcwN0EyQTBFQzE0MDMwNkI1RTQzRTUyQjc5QkZCODlFNDU5RTUwCis2RUM2RjYxMEE3MDc3NUEzMUM0NjA5NzZDNEY3OTQ0OUQ4NkU1N0FDRTQ5MUU1QzZCRjIwQ0M0MzA3QjFEQUY3NjMwMjUyCitFOUFGOENGQjY5QjUwRURBRTlEMzZBNjEwNEFGRUY4ODMyRjkyMEZEMjM0NkIyQzcxMDRDRDExRTNCRUU5OTlDRkE5RjVBCis0OURCMzE3M0VFNDhEMUM4Mjk5NDIzN0YzNjA0MDdCMDIyRTBCNAorNTAyRTk0RUE4QjQ5MzY1MUVGMkQwM0YwQjUxM0Q2NTUwNDc1NjgzMjVCNTEyQUU2Cis2QUM2RjUzRjM4NDhDRjcwREUyNTQ4MUNDNjVEOEIxQTU3OTNBQQorM0M0MjgyRDExMTExMkJFRTI4QUZDQTdBMzgwOEQ0NDQ0QzQ2NjlDQQorODRFQUFBRjk4OTIxOUY1MUFCMzQ3NkExQjBCNUYyMjQ2QkMzMDZFNgorNjI1QzY2NzlDNDE3RUQyQThFOUJEMDEwREUzN0Q0MDI2NTA3NEMyNjg0MjY4RjE2MTk1NDg5NjQ4OTkzQjlDNEQzQjUzNEZBODg3QworREVGNjA1RkE4N0I5OTFGNEQyMEE4Rjc4REFDRQorNUE1NEMwNzBFMDNENUM1OUQ5RDJEM0UwNkIwOUNFRTAyOEQ2OEI2MkFCM0FFQzQzQzFERDIwQkE3MEQyODg1OTdEOUJEOEUwNjgxOEZGNzY0RUJBQjQzNjcyMzk4OEU4RDdDQTU5RTE2RDM5MDMyNTE2QkZDNUQ1NTJBQ0RFRUM2QkU5MzhCRUYyRjQzQ0ZGQkM4MTFDMzYyNkM0REY1RjhDRjA4MDY3NjUyMEI1MUM2MENFREFEMUZFNkM5MkQxNDMxQzcwMjE3NENFNTE3QThGQTkzNzdEMDc1QTBCNjgzM0RBQjEwMURCNjUzOTdGMTQxOUVGNUYwMDE2CiswMDRGCis2RjA4MjRGOTY1N0JCNEYxQzhGOTgxNzA5OTU2ODY1RjY4NTVFRkFFCis5MjQyQUQ1NQorOTFCQkJFRTE2M0Q4NDREREE4OTRFMTMxOTBDOQorMjQ4MDQzOUU0QzcxQ0FEQQorQkQwNDNBOUIKK0EzMTVDQUY3MjY1MkFBN0ZFNkRCMkU4NEQ4MkE2MTExQ0U0REU5MEMwMkRBMEFGRkUyNjIwOTIyMjYyQTQ1QUI0RUQwCitFRUM5RjQ1MjBERDEyNzAzNDQyRjdEMDI4RDQ1MjZCRDhCNzcxRTA5RkJFMTFCMjc0OUUyRDM5MDY4OTRFOEQ0QkZEM0YzNzlGMTRDCiszQzg3NEY1NTA2MDY5NjVFMjJGRTQ4N0IyNDdCNUMyRDA2NzI4NDkwQzhGMkEzQjU4OENERkMKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2NsZWFydG9tYXJrCisvRFBJeCAxMjcwIGRlZiAvRFBJeSAxMjcwIGRlZgorNzIgRFBJeCBkaXYgNzIgRFBJeSBkaXYgbmVnIHNjYWxlCiswIC0xMzk3MCB0cmFuc2xhdGUKKzEuMDAgMS4wMCBzY2FsZQorL3dzdDpkdXRjaDEyIDEyLjAwIC9QU093c3RkdXRjaCBuZXdGb250IGRlZgorL3dzdDpkdXRjaDEyYiAxMi4wMCAvUFNPd3N0ZHV0Y2hiIG5ld0ZvbnQgZGVmCisvd3N0OmR1dGNoMTRiIDE0LjAwIC9QU093c3RkdXRjaGIgbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxMCAxMC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKy93c3Q6ZHV0Y2gxNCAxNC4wMCAvUFNPd3N0ZHV0Y2ggbmV3Rm9udCBkZWYKKyUlSW5jbHVkZVJlc291cmNlOiBmb250IEhlbHZldGljYQorL3dzdDpoZWx2cHMxMCAxMC4wMCAvSGVsdmV0aWNhIC93c3Q6aGVsdnBzIElMRW5jb2RpbmcgMCBkZWNsYXJlTkZvbnQgZGVmCisvc3ltOmNsYXMxMCAxMC4wMCAvUFNPc3ltY2xhcyBuZXdGb250IGRlZgorJSVFbmRQYWdlU2V0dXAKK0dTCiswIDEzOTc4IDEwODAxIDEzOTc4IDEwODAxIDAgMCAwIGNscAord3N0OmR1dGNoMTQgU0YKKzAuMDAgMC4wMCAwLjAwIDEuMDAgc2V0Y215a2NvbG9yCis8MTYyMTJmMmIyMTJkMjIwZDAxMGYwMTEwMjEyOTFmMjQyODFkMmQyNjAxMjIyYTJkMDExNTIxMWQyZTMwMmQyNTI5MjMwMTE2MjEyZjMyMmEyZDI2MDExOD4gMjIwNyA1NTggMCA3Mzg0IC0xIHMKKzwyMTJkMjIyYTJkMjgxZDI5MWYyMT4gNzM3NSA1NTggMCA4NTkzIC0xIHMKK3dzdDpkdXRjaDEwIFNGCis8MGIwYz4gOTM0NiAxMzM4NSAwIDk1MjIgLTEgcword3N0OmhlbHZwczEwIFNGCis8NGU2NTc0NzA2NTcyNjYzYT4gMTMyMiAxMzI2NyAwIDE5NDkgLTEgcworPDIwNTI2NTc2Njk3MzY5NmY2ZTIwMzIyZTMxM2IyMDQzNmY3MDc5NzI2OTY3Njg3NDIwPiAxOTQ5IDEzMjY3IDQgMzg2OCAzMiBzCitzeW06Y2xhczEwIFNGCis8MDE+IDM4NjggMTMyNjcgMCA0MDE5IC0xIHMKK3dzdDpoZWx2cHMxMCBTRgorPDIwMzEzOTM5MzNiMTMxMzkzOTM1MjA0ODY1Nzc2YzY1NzQ3NGIxNTA2MTYzNmI2MTcyNjQyMDQzNmY2ZDcwNjE2ZTc5PiA0MDE5IDEzMjY3IDMgNzEzMyAzMiBzCit3c3Q6ZHV0Y2gxNGIgU0YKKzwxMTFlMWUxODFjMTcxYTIzPiAxMjcxIDE0NTggMCAyMjgzIC0xIHMKKzwwMDExPiAyMjgzIDE0NTggMSAyNTA2IDAgcworPDA3MDAxMzE4MjExZTE4MWYxOTAwMWQxYzAwMTMxNT4gMjUxNSAxNDU4IDMgNDE3NSAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MTYyMTJmMmIyMTJkMjI+IDEyNzEgMjA4NiAwIDE5ODAgLTEgcworPDAwMjUyZTAwMjkyYTJmMDAyZDMwMjkwMDJjMzAyNTJmMjEwMDJmMjQyMTAwMmUxZDI4MjEwMDJhMjkwMDE2MWEwMDFkMmUwMDI1MmYwMDI1MmUwMDMwMjkyMDIxMmQwMDFiMjkyNTMzMDgwMDFhMjQyMTJlMjEwMDIwMjUyMjIyMjEyZDIxMjkxZjIxMmUwMDJlMmYyMTI4MDAyMjJkMmEyODAwMWQ+IDE5ODAgMjA4NiAxOCA5NTMxIDAgcworPDA0MmIyMTJkMWYyMTI1MzEyMTIwMDU+IDEyNzEgMjMzMCAwIDIzMDggLTEgcworPDAwMjcxZDFmMjYwMDJhMjIwMDFmMjEyZDJmMWQyNTI5MDAyZTIxMmQzMTI1MWYyMTJlMDAyYTIyMDAxYjI5MjUzMzAwMDcwMDI5MWQyODIxMjczNDAwMmYyNDIxMDAyNTI5MjEyZjIwMDgwMDFhMjQyMTAwMjcxZDFmMjYwMDJhMjIwMDI1MjkyMTJmMjAwMDJlMzAyYjJiMmEyZDJmPiAyMzA4IDIzMzAgMTUgOTUzMSAwIHMKKzwyODIxMWQyOTJlPiAxMjcxIDI1NzUgMCAxODUyIC0xIHMKKzwwMDJmMjQxZDJmMDAyOTIxMmYyZTIxMmQzMTIxMmQwMDI4MzAyZTJmMDAxZTIxMDAyZDMwMjkwMDIxMzMyYjI3MjUxZjI1MmYyNzM0MDAyMjJhMmQ+IDE4NTIgMjU3NSA3IDUzNTggMCBzCis8MDAyMTFkMWYyNDAwMjUyOTMxMmExZjFkMmYyNTJhMjkwMDJhMjIwMDI5MjEyZjJiMjEyZDIyMDgwMDE3MjkyMTAwMmUyNTI4MmIyNzIxMDAyODIxMWYyNDFkPiA1MzU4IDI1NzUgNyA5NDYxIDAgcworPDM2PiA5NDYxIDI1NzUgMCA5NTMxIC0xIHMKKzwyOTI1MmUyOD4gMTI3MSAyODIwIDAgMTcwMCAtMSBzCis8MDAyZjJhMDAyZTFkMzEyMTAwMmYyNTI4MjEwMDI1MmUwMDJmMmEwMDMwMmUyMTAwMmYyNDIxMDAzNTIyMmEyZDAyMDAyMjMwMjkxZjJmMjUyYTI5MWQyNzI1MmYzNDAwMmEyMjAwMmYyNDIxMDAxNTE5MDcxMTE3MTkwMDFmMmEyODI4MWQyOTIwMDAyZTI0MjEyNzI3MGQ+IDE3MDAgMjgyMCAxNCA4NzM5IDAgcworPDAzPiAxMzk4IDMxNjcgMCAxNTA0IC0xIHMKK3dzdDpkdXRjaDEyYiBTRgorPDAwMTkxZDFmMDAwMjFhMDAxYTFjMDAwMzBhMDAwYjAwMGMwMDA3MDcwNzAwMTMwNDAwMTcxZDAwMWMxODIxMjAxODFmMjIxODFmMDAwNjFlMDAwYTBiMTAwZjBlPiAxNTA0IDMxNjcgMTIgNTUwNiAwIHMKK3dzdDpkdXRjaDEyIFNGCis8MzIyNDI1MWYyND4gMTI3MSAzNTEzIDAgMTc5NyAtMSBzCis8MDAzMjI1MjcyNzAwMmQzMDI5MDAxNjAwMjkyMTJmMmUyMTJkMzEyMTJkMmUwMDI1MjkwMDJlMzAxZjFmMjEyZTJlMjUyYTI5MDYwMDJhMjkyMTAwMWQyMjJmMjEyZDAwMmYyNDIxMDAyYTJmMjQyMTJkMDgwMDFjPiAxNzk3IDM1MTMgMTEgNjk3NSAwIHMKKzwyYTMwMDAxZjFkMjkwMDJmMjQyMTI5MDAyZDMwMjkwMDE2MDAyZTMwMWYxZjIxMmUyZTI1MzEyMT4gNjk0OSAzNTEzIDUgOTUzMSAwIHMKKzwyNTI5MmUyZjFkMjkxZjIxMmU+IDEyNzEgMzc1OCAwIDIwOTUgLTEgcworPDAwMmEyMjAwMjkyMTJmMmIyMTJkMjIwMDJhMjkwMDJhMmYyNDIxMmQwMDJlMzQyZTJmMjEyODJlMDAxZTIxMjIyYTJkMjEwMDI0MWQzMTI1MjkyMzAwMmYyYTAwMmQyMTA3MmQzMDI5MDAyOTIxMmYyZTIxMmQzMTIxMmQwMDI4MWQyOTMwMWQyNzI3MzQwODAwMTQyMjAwMzQyYTMwMDAxZDJkMjE+IDIwOTUgMzc1OCAxNCA5NTMxIDAgcworPDMwMmUyNTI5MjM+IDEyNzEgNDAwMyAwIDE3NDUgLTEgcworPDAwMmUxZjJkMjUyYjJmMmUwNjAwMzQyYTMwMDAyODFkMzQwMDMyMjUyZTI0MDAyZjJhMDAyNTI5MmYyZDJhMjAzMDFmMjE+IDE3NDUgNDAwMyA2IDQ3MTEgMCBzCis8MDAyZTJhMjgyMTAwMjAyMTI3MWQzNDJlMDAxZTIxMmYzMjIxMjEyOTAwMjUyOTIwMjUzMTI1MjAzMDFkMjcwMDI1MjkzMTJhMWYxZDJmMjUyYTI5MmUwMDJhMjIwMDI5MjEyZjJiMjEyZDIyMDg+IDQ3MTEgNDAwMyA3IDk1MzEgMCBzCis8MTIzMzJiMjEyZDI1MjgyMTI5MmYxZDJmMjUyYTI5PiAxMjcxIDQyNDggMCAyODAxIC0xIHMKKzwwMDI0MWQyZTAwMmUyNDJhMzIyOTAwMmYyNDFkMmYwMDE2MWEwMDI4MWQzNDAwMjkyYTJmMDAxZTIxMDAxZDFlMjcyMTAwMmYyYTAwMjMyMTJmMDAyZjI0MjEwMDI5MjEzMzJmMDAyOTIxMmYyZTIxMmQzMTIxMmQwMDJkMzAyOTI5MjUyOTIzMDAxZTIxMjIyYTJkMjE+IDI4MDEgNDI0OCAxNSA5NTMxIDAgcworPDJmMjQyMT4gMTI3MSA0NDkzIDAgMTU2MSAtMSBzCis8MDAyOTIxMzMyZjAwMjkyMTJmMmIyMTJkMjIwMDFmMmEyODIxMmUwMDFkMjcyYTI5MjMwODAwMGYwMDJiMWQzMDJlMjEwMDJhMjIwMDJmMzIyYTAwMmUyMTFmMmEyOTIwMmUwMDJhMmQwMDJlMmEwMDJlMjQyYTMwMjcyMDAwMWUyMTAwMmUzMDIyMjIyNTFmMjUyMTI5MmYwOD4gMTU2MSA0NDkzIDE0IDg0ODEgMCBzCis8MTQyMj4gMTI3MSA0ODM5IDAgMTQyMiAtMSBzCis8MDAzNDJhMzAwMDMyMjUyZTI0MDAyZjJhMDAyZDMwMjkwMDFmMmEyOTFmMzAyZDJkMjEyOTJmMDAyNTI5MmUyZjFkMjkxZjIxMmUwMDJhMjIwMDI5MjEyZjJiMjEyZDIyMDYwMDI1MmYwMDI1MmUwMDI5MjExZjIxMmUyZTFkMmQzNDAwMmYyYTAwMWYyYTI4MWUyNTI5MjEwMDJmMjQyMTAwMzUyMjJhMmQwMjAwMWQyOTIwPiAxNDIyIDQ4MzkgMTYgOTUzMSAwIHMKKzwzNTJlMmYxZDJkMmYwMj4gMTI3MSA1MDg0IDAgMTg3NCAtMSBzCis8MDAxZjJhMjgyODFkMjkyMDJlMDAyYTIyMDAyZjI0MjEwMDE1MTkwNzExMTcxOTAwMWYyYTI4MjgxZDI5MjAwMDJlMjQyMTI3MjcwODAwMTcyOTAwMmYyNDIxMDAyZTM0MmUyZjIxMjgwMDJkMzAyOTI5MjUyOTIzMDAyOTIxMmYyZTIxMmQzMTIxMmQwMDM0MmEzMD4gMTg3NCA1MDg0IDEyIDk1MzEgMCBzCis8MzIyYTMwMjcyMD4gMTI3MSA1MzI5IDAgMTgyMCAtMSBzCis8MDAyMTI5MmYyMTJkMGU+IDE4MjAgNTMyOSAxIDI0MDcgMCBzCis8MDM+IDEzOTggNTY3NiAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAxOTFkMWYwMDAyMWEwMDFhMWMwMDAzMGEwYjEwMGYwZTAwMGEwYjEwMGYwZjAwMDcwNzA3MDAwYTBiMTAwZjBlMDUxMzA0MDAxNzFkMDAyMDIxMTYxZjIxMDAwODEyMDAxYzE4MjEyMDE4MWYyMjE4MWYwMDA2MWUwMDAyMWE+IDE1MDQgNTY3NiAxMyA3MzQwIDAgcword3N0OmR1dGNoMTIgU0YKKzwzMjI0MjUxZjI0PiAxMjcxIDYwMjIgMCAxNzk3IC0xIHMKKzwwMDMyMjUyNzI3MDAyZDMwMjkwMDE2MDAyYjFkMmQxZDI3MjcyMTI3MDAyNTI5MmUyZjFkMjkxZjIxMmUwMDJhMjIwMDJmMjQyMTAwMjkyMTJmMmUyMTJkMzEyMTJkMDYwMDIxMWQxZjI0MDAzMjFkMjUyZjI1MjkyMzAwMWQyZjAwMmYyNDIxMjUyZDAwMmEzMjI5MDAyYjJhMmQyZjAwMjkzMDI4MWUyMTJkMDgwMDFhMjQyMT4gMTc5NyA2MDIyIDE2IDk1MzEgMCBzCis8MmIyYTJkMmY+IDEyNzEgNjI2NyAwIDE2NTMgLTEgcworPDAwMjkzMDI4MWUyMTJkMmUwMDM0MmEzMDAwMzAyZTIxMDAxZDJkMjEwMDMwMmIwMDJmMmEwMDM0MmEzMDA2MDAxZTMwMmYwMDJmMjQyMTM0MDAyODMwMmUyZjAwMjgxZDJmMWYyND4gMTY1MyA2MjY3IDExIDY0NDEgMCBzCis8MDAyZjI0MmEyZTIxMDAzNDJhMzAwMDMwMmUyMTAwMjUyOTAwMmYyNDIxMDAyNTI5MzEyYTFmMWQyZjI1MmEyOTAwMmEyMj4gNjQ0MSA2MjY3IDcgOTUzMSAwIHMKKzwyOTIxMmYyYjIxMmQyMjA4PiAxMjcxIDY1MTIgMCAxOTg2IC0xIHMKKzwwMDEzPiAxOTg2IDY1MTIgMSAyMTUzIDAgcworPDJhMmQwMDIxMzMxZDI4MmIyNzIxMDYwMDI1MjIwMDM0MmEzMDAwMWQyNzJlMmEwMDMyMWQyOTJmMjEyMDAwMmYyYTAwMmQzMDI5PiAyMTQ1IDY1MTIgNyA1MzcxIDAgcworPDAwMTYwMDJiMWQyZDFkMjcyNzIxMjcwMDI5MjEyZjJiMjEyZDIyMmUwMDA0MmIyMTJkMjQxZDJiMmUwMDJmMmEwMDI4MjExZDJlMzAyZDIxMDAxZDIzMjMyZDIxPiA1MzcxIDY1MTIgNyA5NDYxIDAgcworPDM2PiA5NDYxIDY1MTIgMCA5NTMxIC0xIHMKKzwyMzFkMmYyMTAwMjcyYTJhMmIxZTFkMWYyNjAwMmIyMTJkMjIyYTJkMjgxZDI5MWYyMTA1MDAzNDJhMzAwMDMyMmEzMDI3MjAwMDIxMzMyMTFmMzAyZjIxMDAyZjI0MjEwMDIyMmEyNzI3MmEzMjI1MjkyMzAwMjUyOTAwMWQyOTJhMmYyNDIxMmQwMDE1MTkwNzExMTcxOTAwMWYyYTI4MjgxZDI5MjA+IDEyNzEgNjc1NyAxMSA5NTMxIDAgcworPDJlMjQyMTI3MjcwZD4gMTI3MSA3MDAyIDAgMTc0NyAtMSBzCis8MDM+IDEzOTggNzM0OCAwIDE1MDQgLTEgcword3N0OmR1dGNoMTJiIFNGCis8MDAxOTFkMWYwMDAyMWEwMDFhMWMwMDAzMGEwYjEwMGYwZTAwMGEwYjEwMGYwZjAwMDcwNzA3MDAwYTBiMTAwZjBlMDUxMzA0MDAxNzFkMDAyMDIxMTYxZjIxMDAwODEyMDAxYzE4MjExZTE4MWYxOTAwMDYxZTAwMDIxYTAwMDAwNjE0MDAwOTAwMDYyMjAwMDkwMDA2MWIwMDBiMGQwOT4gMTUwNCA3MzQ4IDIwIDg4NzQgMCBzCit3c3Q6ZHV0Y2gxMiBTRgorPDFkMjkyMD4gMTI3MSA3Njk1IDAgMTYwOCAtMSBzCis8MDAyZjI0MjEyOTAwMjgxZDI5MzAxZDI3MjczNDAwMmYxZDFlMzAyNzFkMmYyMTAwMmYyNDIxMDAyZDIxMmUzMDI3MmYyZTAwMDcwMDFkMjIyZjIxMmQwMDFlMjEyNTI5MjMwMDFmMjEyZDJmMWQyNTI5MDAyZjI0MWQyZjAwMWQyNzI3MDAyZjIxMmUyZjJlMDAyMjI1MjkyNTJlMjQyMTIwMDAxZjI3MmEyZTIxMjczNDAwMmYyYT4gMTYwOCA3Njk1IDE1IDk1MzEgMCBzCis8MmEyOTIxPiAxMjcxIDc5NDAgMCAxNjA4IC0xIHMKKzwwMDFkMjkyYTJmMjQyMTJkMDg+IDE2MDggNzk0MCAxIDI0MjIgMCBzCis8MTYyYTI5MjE+IDEyNzEgODI4NiAwIDE3NzEgLTEgcworPDAwMmEyMjAwMmYyNDIxMDAyZTFmMmQyNTJiMmYyZTAwMmIyZDJhMzEyNTIwMjEyMDAwMzIyNTJmMjQwMDI5MjEyZjJiMjEyZDIyMDAyNDFkMzEyMTAwMWUyMTIxMjkwMDJiMmEyZDJmMjEyMDAwMmYyYTAwMTUxOTA3MTExNzE5MDAxZjJhMjgyODFkMjkyMDAwMjIyNTI3MjEyZTAwMjIyYTJkPiAxNzcxIDgyODYgMTQgOTUzMSAwIHMKKzwyZjI0MjE+IDEyNzEgODUzMSAwIDE1NjEgLTEgcworPDAwMGEwODA5MDAyZDIxMjcyMTFkMmUyMTA4MDAwZjI5MzQwMDFkMmUyZTI1MmUyZjFkMjkxZjIxPiAxNTYxIDg1MzEgNCAzOTExIDAgcworPDAwMzQyYTMwMDAyODI1MjMyNDJmMDAxZTIxMDAxZDFlMjcyMTAwMmYyYTAwMmIyZDJhMzEyNTIwMjEwMDI1MjkwMDJmMjQxZDJmMDAxZDJkMjExZDAwMzIyYTMwMjcyMDAwMWUyMTAwMjMyZDIxMWQyZjI3MzQwMDFkMmIyYjJkMjE+IDM5MTEgODUzMSAxMyA5NDYxIDAgcworPDM2PiA5NDYxIDg1MzEgMCA5NTMxIC0xIHMKKzwxZjI1MWQyZjIxMjA+IDEyNzEgODc3NiAwIDE4MTcgLTEgcworPDAwMWUzNDAwMmYyNDIxMDAxZDMwMmYyNDJhMmQyZTA4PiAxODE3IDg3NzYgMyAzMjExIDAgcworR1IKK2VvcAorJSVQYWdlVHJhaWxlcgorJSVQYWdlUmVzb3VyY2VzOiBmb250IEhlbHZldGljYQorJSVQYWdlUHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlUGFnZUN1c3RvbUNvbG9yczoKKyUlVHJhaWxlcgorSWxlYWZfNi4wLjAgL3Rlcm1pbmF0ZSBnZXQgZXhlYworJSVQYWdlczogMzUKKyUlRG9jdW1lbnROZWVkZWRSZXNvdXJjZXM6IGZvbnQgQ291cmllcgorJSUrIGZvbnQgSGVsdmV0aWNhCislJURvY3VtZW50U3VwcGxpZWRSZXNvdXJjZXM6CislJURvY3VtZW50UHJvY2Vzc0NvbG9yczogQmxhY2sKKyUlRG9jdW1lbnRDdXN0b21Db2xvcnM6CislJUVPRgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9kb2MvbmV0c2VydmVyLm1hbiBiL25ldHBlcmYtMi40LjUvZG9jL25ldHNlcnZlci5tYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2ZWVjZgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL25ldHNlcnZlci5tYW4KQEAgLTAsMCArMSw1NiBAQAorLlRIIG5ldHNlcnZlciAxICIiCisuU0ggTkFNRQorCituZXRzZXJ2ZXIgXC0gYSBuZXR3b3JrIHBlcmZvcm1hbmNlIGJlbmNobWFyayBzZXJ2ZXIKKworLlNIIFNZTk9QU0lTCisKKy5CIG5ldHNlcnZlcgorWy1wIHBvcnRudW1dCitbLW4gbnVtY3B1c10KKworLlNIIERFU0NSSVBUSU9OCisuQiBOZXRzZXJ2ZXIKK2xpc3RlbnMgZm9yIGNvbm5lY3Rpb25zIGZyb20gYQorLkMgbmV0cGVyZgorYmVuY2htYXJrLCBhbmQgcmVzcG9uZHMgYWNjb3JkaW5nbHkuCitJdCBjYW4gZWl0aGVyIGJlIHJ1biBmcm9tCisuQyBpbmV0ZAorb3IgYXMgYSBzdGFuZGFsb25lIGRhZW1vbiAod2l0aCB0aGUgLXAgZmxhZykuIElmIHJ1biBmcm9tCisuQyBpbmV0ZAordGhlIC1wIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQuCisKKy5TUyBPUFRJT05TCisuVFAKKy5CIFwtaAorRGlzcGxheSBhIHVzYWdlIHN0cmluZywgYW5kIGV4aXQuCisuVFAKKy5CIFwtbiBudW1jcHVzCitTcGVjaWZ5IHRoZSBudW1iZXIgb2YgQ1BVJ3MgaW4gdGhlIHN5c3RlbSBvbiB0aG9zZSBzeXN0ZW1zIGZvciB3aGljaAorbmV0cGVyZiBoYXMgbm8gd2F5IHRvIGZpbmQgdGhlIG51bWJlciBvZiBDUFUncyBwcm9ncmFtYXRpY2FsbHkuIAorLlRQCisuQiBcLXAgcG9ydG51bQorTGlzdGVuIG9uIHRoZSBzcGVjaWZpZWQgcG9ydC4KK1RoaXMgaXMgdXNlZCB3aGVuIHJ1bm5pbmcgYXMgYSBzdGFuZGFsb25lIGRhZW1vbi4KKworLlNIIEJVR1MKK05vIGtub3duIGJ1Z3MgYXQgdGhpcyB0aW1lLiBJZiB5b3UgdGhpbmsgeW91IGhhdmUgZm91bmQgYSBidWcsIHBsZWFzZSBzZW5kIGVtYWlsIHRvIFJpY2sgSm9uZXMgPHJhakBjdXAuaHAuY29tPi4KKworLlNIIFNFRSBBTFNPCisuQyBuZXRwZXJmCisuYnIKKy5JCitOZXRwZXJmOiBBIE5ldHdvcmsgUGVyZm9ybWFuY2UgQmVuY2htYXJrCisuYnIKK2h0dHA6Ly93d3cubmV0cGVyZi5vcmcvCisKKy5TSCBBVVRIT1JTCitIUCBJbmZvcm1hdGlvbiBOZXR3b3JrcyBEaXZpc2lvbiAtIE5ldHdvcmtpbmcgUGVyZm9ybWFuY2UgVGVhbS4KKy5icgorUmljayBKb25lcwk8cmFqQGN1cC5ocC5jb20+CisuYnIKK0thcmVuIENob3kJSFAgSU5ECisuYnIKK0RhdmUgU2hpZWxkCTxkYXZlc0Bjc2MubGl2LmFjLnVrPgkobWFuIHBhZ2VzKQorLmJyCitPdGhlcnMgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24gaGVyZSAtIHNlZSB0aGUgQUNLTldMREdNTlRTIGZpbGUKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvZG9jL3RleGluZm8udGV4IGIvbmV0cGVyZi0yLjQuNS9kb2MvdGV4aW5mby50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjODEyMQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvZG9jL3RleGluZm8udGV4CkBAIC0wLDAgKzEsNjc0NCBAQAorJSB0ZXhpbmZvLnRleCAtLSBUZVggbWFjcm9zIHRvIGhhbmRsZSBUZXhpbmZvIGZpbGVzLgorJQorJSBMb2FkIHBsYWluIGlmIG5lY2Vzc2FyeSwgaS5lLiwgaWYgcnVubmluZyB1bmRlciBpbml0ZXguCitcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbXRuYW1lXGVuZGNzbmFtZVxyZWxheFxpbnB1dCBwbGFpblxmaQorJQorXGRlZlx0ZXhpbmZvdmVyc2lvbnsyMDAzLTEwLTA2LjA4fQorJQorJSBDb3B5cmlnaHQgKEMpIDE5ODUsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCislIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyUgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyUgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAorJSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorJSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorJSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCislCislIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCislIGFsb25nIHdpdGggdGhpcyB0ZXhpbmZvLnRleCBmaWxlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUKKyUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorJSBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyUKKyUgSW4gb3RoZXIgd29yZHMsIHlvdSBhcmUgd2VsY29tZSB0byB1c2UsIHNoYXJlIGFuZCBpbXByb3ZlIHRoaXMgcHJvZ3JhbS4KKyUgWW91IGFyZSBmb3JiaWRkZW4gdG8gZm9yYmlkIGFueW9uZSBlbHNlIHRvIHVzZSwgc2hhcmUgYW5kIGltcHJvdmUKKyUgd2hhdCB5b3UgZ2l2ZSB0aGVtLiAgIEhlbHAgc3RhbXAgb3V0IHNvZnR3YXJlLWhvYXJkaW5nIQorJQorJSBQbGVhc2UgdHJ5IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0ZXhpbmZvLnRleCBiZWZvcmUgc3VibWl0dGluZyBidWcKKyUgcmVwb3J0czsgeW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb206CislICAgZnRwOi8vZnRwLmdudS5vcmcvZ251L3RleGluZm8vdGV4aW5mby50ZXgKKyUgICAgIChhbmQgYWxsIEdOVSBtaXJyb3JzLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL29yZGVyL2Z0cC5odG1sKQorJSAgIGZ0cDovL3R1Zy5vcmcvdGV4L3RleGluZm8udGV4CislICAgICAoYW5kIGFsbCBDVEFOIG1pcnJvcnMsIHNlZSBodHRwOi8vd3d3LmN0YW4ub3JnKSwKKyUgICBhbmQgL2hvbWUvZ2QvZ251L2RvYy90ZXhpbmZvLnRleCBvbiB0aGUgR05VIG1hY2hpbmVzLgorJQorJSBUaGUgR05VIFRleGluZm8gaG9tZSBwYWdlIGlzIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLgorJQorJSBUaGUgdGV4aW5mby50ZXggaW4gYW55IGdpdmVuIFRleGluZm8gZGlzdHJpYnV0aW9uIGNvdWxkIHdlbGwgYmUgb3V0CislIG9mIGRhdGUsIHNvIGlmIHRoYXQncyB3aGF0IHlvdSdyZSB1c2luZywgcGxlYXNlIGNoZWNrLgorJQorJSBTZW5kIGJ1ZyByZXBvcnRzIHRvIGJ1Zy10ZXhpbmZvQGdudS5vcmcuICBQbGVhc2UgaW5jbHVkZSBpbmNsdWRpbmcgYQorJSBjb21wbGV0ZSBkb2N1bWVudCBpbiBlYWNoIGJ1ZyByZXBvcnQgd2l0aCB3aGljaCB3ZSBjYW4gcmVwcm9kdWNlIHRoZQorJSBwcm9ibGVtLiAgUGF0Y2hlcyBhcmUsIG9mIGNvdXJzZSwgZ3JlYXRseSBhcHByZWNpYXRlZC4KKyUKKyUgVG8gcHJvY2VzcyBhIFRleGluZm8gbWFudWFsIHdpdGggVGVYLCBpdCdzIG1vc3QgcmVsaWFibGUgdG8gdXNlIHRoZQorJSB0ZXhpMmR2aSBzaGVsbCBzY3JpcHQgdGhhdCBjb21lcyB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBGb3IgYSBzaW1wbGUKKyUgbWFudWFsIGZvby50ZXhpLCBob3dldmVyLCB5b3UgY2FuIGdldCBhd2F5IHdpdGggdGhpczoKKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXhpbmRleCBmb28uPz8KKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXggZm9vLnRleGkKKyUgICBkdmlwcyBmb28uZHZpIC1vICAjIG9yIHdoYXRldmVyOyB0aGlzIG1ha2VzIGZvby5wcy4KKyUgVGhlIGV4dHJhIFRlWCBydW5zIGdldCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGluZm9ybWF0aW9uIGNvcnJlY3QuCislIFNvbWV0aW1lcyBvbmUgcnVuIGFmdGVyIHRleGluZGV4IHN1ZmZpY2VzLCBhbmQgc29tZXRpbWVzIHlvdSBuZWVkIG1vcmUKKyUgdGhhbiB0d287IHRleGkyZHZpIGRvZXMgaXQgYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkuCislCislIEl0IGlzIHBvc3NpYmxlIHRvIGFkYXB0IHRleGluZm8udGV4IGZvciBvdGhlciBsYW5ndWFnZXMsIHRvIHNvbWUKKyUgZXh0ZW50LiAgWW91IGNhbiBnZXQgdGhlIGV4aXN0aW5nIGxhbmd1YWdlLXNwZWNpZmljIGZpbGVzIGZyb20gdGhlCislIGZ1bGwgVGV4aW5mbyBkaXN0cmlidXRpb24uCisKK1xtZXNzYWdle0xvYWRpbmcgdGV4aW5mbyBbdmVyc2lvbiBcdGV4aW5mb3ZlcnNpb25dOn0KKworJSBJZiBpbiBhIC5mbXQgZmlsZSwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyCislIGFuZCB0dXJuIG9uIGFjdGl2ZSBjaGFyYWN0ZXJzIHRoYXQgd2UgY291bGRuJ3QgZG8gZWFybGllciBiZWNhdXNlCislIHRoZXkgbWlnaHQgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgaW5wdXQgZmlsZSBuYW1lLgorXGV2ZXJ5am9ie1xtZXNzYWdle1tUZXhpbmZvIHZlcnNpb24gXHRleGluZm92ZXJzaW9uXX0lCisgIFxjYXRjb2RlYCs9XGFjdGl2ZSBcY2F0Y29kZWBcXz1cYWN0aXZlfQorCitcbWVzc2FnZXtCYXNpY3MsfQorXGNoYXJkZWZcb3RoZXI9MTIKKworJSBXZSBuZXZlciB3YW50IHBsYWluJ3MgXG91dGVyIGRlZmluaXRpb24gb2YgXCsgaW4gVGV4aW5mby4KKyUgRm9yIEB0ZXgsIHdlIGNhbiB1c2UgXHRhYmFsaWduLgorXGxldFwrID0gXHJlbGF4CisKKyUgU2F2ZSBzb21lIHBsYWluIHRleCBtYWNyb3Mgd2hvc2UgbmFtZXMgd2Ugd2lsbCByZWRlZmluZS4KK1xsZXRccHRleGI9XGIKK1xsZXRccHRleGJ1bGxldD1cYnVsbGV0CitcbGV0XHB0ZXhjPVxjCitcbGV0XHB0ZXhjb21tYT1cLAorXGxldFxwdGV4ZG90PVwuCitcbGV0XHB0ZXhkb3RzPVxkb3RzCitcbGV0XHB0ZXhlbmQ9XGVuZAorXGxldFxwdGV4ZXF1aXY9XGVxdWl2CitcbGV0XHB0ZXhleGNsYW09XCEKK1xsZXRccHRleGd0cj0+CitcbGV0XHB0ZXhoYXQ9XgorXGxldFxwdGV4aT1caQorXGxldFxwdGV4aW5kZW50PVxpbmRlbnQKK1xsZXRccHRleG5vaW5kZW50PVxub2luZGVudAorXGxldFxwdGV4bGJyYWNlPVx7CitcbGV0XHB0ZXhsZXNzPTwKK1xsZXRccHRleHBsdXM9KworXGxldFxwdGV4cmJyYWNlPVx9CitcbGV0XHB0ZXhzbGFzaD1cLworXGxldFxwdGV4c3Rhcj1cKgorXGxldFxwdGV4dD1cdAorCislIElmIHRoaXMgY2hhcmFjdGVyIGFwcGVhcnMgaW4gYW4gZXJyb3IgbWVzc2FnZSBvciBoZWxwIHN0cmluZywgaXQKKyUgc3RhcnRzIGEgbmV3IGxpbmUgaW4gdGhlIG91dHB1dC4KK1xuZXdsaW5lY2hhciA9IGBeXkoKKworJSBTZXQgdXAgZml4ZWQgd29yZHMgZm9yIEVuZ2xpc2ggaWYgbm90IGFscmVhZHkgc2V0LgorXGlmeFxwdXR3b3JkQXBwZW5kaXhcdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkQXBwZW5kaXh7QXBwZW5kaXh9XGZpCitcaWZ4XHB1dHdvcmRDaGFwdGVyXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmRDaGFwdGVye0NoYXB0ZXJ9XGZpCitcaWZ4XHB1dHdvcmRmaWxlXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRmaWxle2ZpbGV9XGZpCitcaWZ4XHB1dHdvcmRpblx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRpbntpbn1cZmkKK1xpZnhccHV0d29yZEluZGV4SXNFbXB0eVx1bmRlZmluZWQgICAgIFxnZGVmXHB1dHdvcmRJbmRleElzRW1wdHl7KEluZGV4IGlzIGVtcHR5KX1cZmkKK1xpZnhccHV0d29yZEluZGV4Tm9uZXhpc3RlbnRcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50eyhJbmRleCBpcyBub25leGlzdGVudCl9XGZpCitcaWZ4XHB1dHdvcmRJbmZvXHVuZGVmaW5lZCAgICAgIFxnZGVmXHB1dHdvcmRJbmZve0luZm99XGZpCitcaWZ4XHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2ZcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z7SW5zdGFuY2UgVmFyaWFibGUgb2Z9XGZpCitcaWZ4XHB1dHdvcmRNZXRob2Rvblx1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRNZXRob2RvbntNZXRob2Qgb259XGZpCitcaWZ4XHB1dHdvcmROb1RpdGxlXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmROb1RpdGxle05vIFRpdGxlfVxmaQorXGlmeFxwdXR3b3Jkb2ZcdW5kZWZpbmVkICAgICAgICBcZ2RlZlxwdXR3b3Jkb2Z7b2Z9XGZpCitcaWZ4XHB1dHdvcmRvblx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRvbntvbn1cZmkKK1xpZnhccHV0d29yZHBhZ2VcdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZHBhZ2V7cGFnZX1cZmkKK1xpZnhccHV0d29yZHNlY3Rpb25cdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZHNlY3Rpb257c2VjdGlvbn1cZmkKK1xpZnhccHV0d29yZFNlY3Rpb25cdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZFNlY3Rpb257U2VjdGlvbn1cZmkKK1xpZnhccHV0d29yZHNlZVx1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZHNlZXtzZWV9XGZpCitcaWZ4XHB1dHdvcmRTZWVcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRTZWV7U2VlfVxmaQorXGlmeFxwdXR3b3JkU2hvcnRUT0NcdW5kZWZpbmVkICBcZ2RlZlxwdXR3b3JkU2hvcnRUT0N7U2hvcnQgQ29udGVudHN9XGZpCitcaWZ4XHB1dHdvcmRUT0NcdW5kZWZpbmVkICAgICAgIFxnZGVmXHB1dHdvcmRUT0N7VGFibGUgb2YgQ29udGVudHN9XGZpCislCitcaWZ4XHB1dHdvcmRNSmFuXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUphbntKYW51YXJ5fVxmaQorXGlmeFxwdXR3b3JkTUZlYlx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1GZWJ7RmVicnVhcnl9XGZpCitcaWZ4XHB1dHdvcmRNTWFyXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU1hcntNYXJjaH1cZmkKK1xpZnhccHV0d29yZE1BcHJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNQXBye0FwcmlsfVxmaQorXGlmeFxwdXR3b3JkTU1heVx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1NYXl7TWF5fVxmaQorXGlmeFxwdXR3b3JkTUp1blx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KdW57SnVuZX1cZmkKK1xpZnhccHV0d29yZE1KdWxcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSnVse0p1bHl9XGZpCitcaWZ4XHB1dHdvcmRNQXVnXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUF1Z3tBdWd1c3R9XGZpCitcaWZ4XHB1dHdvcmRNU2VwXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTVNlcHtTZXB0ZW1iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNT2N0XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU9jdHtPY3RvYmVyfVxmaQorXGlmeFxwdXR3b3JkTU5vdlx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1Ob3Z7Tm92ZW1iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNRGVjXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTURlY3tEZWNlbWJlcn1cZmkKKyUKK1xpZnhccHV0d29yZERlZm1hY1x1bmRlZmluZWQgICAgXGdkZWZccHV0d29yZERlZm1hY3tNYWNyb31cZmkKK1xpZnhccHV0d29yZERlZnNwZWNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZnNwZWN7U3BlY2lhbCBGb3JtfVxmaQorXGlmeFxwdXR3b3JkRGVmdmFyXHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmdmFye1ZhcmlhYmxlfVxmaQorXGlmeFxwdXR3b3JkRGVmb3B0XHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmb3B0e1VzZXIgT3B0aW9ufVxmaQorXGlmeFxwdXR3b3JkRGVmdHlwZXZhclx1bmRlZmluZWRcZ2RlZlxwdXR3b3JkRGVmdHlwZXZhcntWYXJpYWJsZX1cZmkKK1xpZnhccHV0d29yZERlZmZ1bmNcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZERlZmZ1bmN7RnVuY3Rpb259XGZpCitcaWZ4XHB1dHdvcmREZWZ0eXBlZnVuXHVuZGVmaW5lZFxnZGVmXHB1dHdvcmREZWZ0eXBlZnVue0Z1bmN0aW9ufVxmaQorCislIEluIHNvbWUgbWFjcm9zLCB3ZSBjYW5ub3QgdXNlIHRoZSBgXD8gbm90YXRpb24tLS10aGUgbGVmdCBxdW90ZSBpcworJSBpbiBzb21lIGNhc2VzIHRoZSBlc2NhcGUgY2hhci4KK1xjaGFyZGVmXGNvbG9uQ2hhciA9IGBcOgorXGNoYXJkZWZcY29tbWFDaGFyID0gYFwsCitcY2hhcmRlZlxkb3RDaGFyICAgPSBgXC4KK1xjaGFyZGVmXGVxdWFsQ2hhciA9IGBcPQorXGNoYXJkZWZcZXhjbGFtQ2hhcj0gYFwhCitcY2hhcmRlZlxxdWVzdENoYXIgPSBgXD8KK1xjaGFyZGVmXHNlbWlDaGFyICA9IGBcOworXGNoYXJkZWZcc3BhY2VDaGFyID0gYFwgJQorXGNoYXJkZWZcdW5kZXJDaGFyID0gYFxfCisKKyUgSWdub3JlIGEgdG9rZW4uCislCitcZGVmXGdvYmJsZSMxe30KKworJSBUcnVlIGlmICMxIGlzIHRoZSBlbXB0eSBzdHJpbmcsIGkuZS4sIGNhbGxlZCBsaWtlIGBcaWZlbXB0eXt9Jy4KKyUKK1xkZWZcaWZlbXB0eSMxe1xpZmVtcHR5eCAjMVxlbXB0eW1hcmtBXGVtcHR5bWFya0J9JQorXGRlZlxpZmVtcHR5eCMxIzJcZW1wdHltYXJrQntcaWZ4ICMxXGVtcHR5bWFya0F9JQorCislIEh5cGhlbmF0aW9uIGZpeGVzLgorXGh5cGhlbmF0aW9ue2FwLXBlbi1kaXh9CitcaHlwaGVuYXRpb257ZXNoZWxsfQorXGh5cGhlbmF0aW9ue21pbmktYnVmLWZlciBtaW5pLWJ1Zi1mZXJzfQorXGh5cGhlbmF0aW9ue3RpbWUtc3RhbXB9CitcaHlwaGVuYXRpb257d2hpdGUtc3BhY2V9CisKKyUgTWFyZ2luIHRvIGFkZCB0byByaWdodCBvZiBldmVuIHBhZ2VzLCB0byBsZWZ0IG9mIG9kZCBwYWdlcy4KK1xuZXdkaW1lblxiaW5kaW5nb2Zmc2V0CitcbmV3ZGltZW5cbm9ybWFsb2Zmc2V0CitcbmV3ZGltZW5ccGFnZXdpZHRoIFxuZXdkaW1lblxwYWdlaGVpZ2h0CisKKyUgU29tZXRpbWVzIGl0IGlzIGNvbnZlbmllbnQgdG8gaGF2ZSBldmVyeXRoaW5nIGluIHRoZSB0cmFuc2NyaXB0IGZpbGUKKyUgYW5kIG5vdGhpbmcgb24gdGhlIHRlcm1pbmFsLiAgV2UgZG9uJ3QganVzdCBjYWxsIFx0cmFjaW5nYWxsIGhlcmUsCislIHNpbmNlIHRoYXQgcHJvZHVjZXMgc29tZSB1c2VsZXNzIG91dHB1dCBvbiB0aGUgdGVybWluYWwuICBXZSBhbHNvIG1ha2UKKyUgc29tZSBlZmZvcnQgdG8gb3JkZXIgdGhlIHRyYWNpbmcgY29tbWFuZHMgdG8gcmVkdWNlIG91dHB1dCBpbiB0aGUgbG9nCislIGZpbGU7IGNmLiB0cmFjZS5zdHkgaW4gTGFUZVguCislCitcZGVmXGdsb2dnaW5nYWxse1xiZWdpbmdyb3VwIFxnbG9iYWxkZWZzID0gMSBcbG9nZ2luZ2FsbCBcZW5kZ3JvdXB9JQorXGRlZlxsb2dnaW5nYWxseyUKKyAgXHRyYWNpbmdzdGF0czIKKyAgXHRyYWNpbmdwYWdlczEKKyAgXHRyYWNpbmdsb3N0Y2hhcnMyICAlIDIgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFx0cmFjaW5ncGFyYWdyYXBoczEKKyAgXHRyYWNpbmdvdXRwdXQxCisgIFx0cmFjaW5nbWFjcm9zMgorICBcdHJhY2luZ3Jlc3RvcmVzMQorICBcc2hvd2JveGJyZWFkdGhcbWF4ZGltZW4gXHNob3dib3hkZXB0aFxtYXhkaW1lbgorICBcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZFxlbHNlICUgZXRleCBnaXZlcyB1cyBtb3JlIGxvZ2dpbmcKKyAgICBcdHJhY2luZ3NjYW50b2tlbnMxCisgICAgXHRyYWNpbmdpZnMxCisgICAgXHRyYWNpbmdncm91cHMxCisgICAgXHRyYWNpbmduZXN0aW5nMgorICAgIFx0cmFjaW5nYXNzaWduczEKKyAgXGZpCisgIFx0cmFjaW5nY29tbWFuZHMzICAlIDMgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFxlcnJvcmNvbnRleHRsaW5lc1xtYXhkaW1lbgorfSUKKworJSBhZGQgY2hlY2sgZm9yIFxsYXN0cGVuYWx0eSB0byBwbGFpbidzIGRlZmluaXRpb25zLiAgSWYgdGhlIGxhc3QgdGhpbmcKKyUgd2UgZGlkIHdhcyBhIFxub2JyZWFrLCB3ZSBkb24ndCB3YW50IHRvIGluc2VydCBtb3JlIHNwYWNlLgorJQorXGRlZlxzbWFsbGJyZWFre1xpZm51bVxsYXN0cGVuYWx0eTwxMDAwMFxwYXJcaWZkaW1cbGFzdHNraXA8XHNtYWxsc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS01MFxzbWFsbHNraXBcZmlcZml9CitcZGVmXG1lZGJyZWFre1xpZm51bVxsYXN0cGVuYWx0eTwxMDAwMFxwYXJcaWZkaW1cbGFzdHNraXA8XG1lZHNraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktMTAwXG1lZHNraXBcZmlcZml9CitcZGVmXGJpZ2JyZWFre1xpZm51bVxsYXN0cGVuYWx0eTwxMDAwMFxwYXJcaWZkaW1cbGFzdHNraXA8XGJpZ3NraXBhbW91bnQKKyAgXHJlbW92ZWxhc3Rza2lwXHBlbmFsdHktMjAwXGJpZ3NraXBcZmlcZml9CisKKyUgRm9yIEBjcm9wbWFya3MgY29tbWFuZC4KKyUgRG8gQGNyb3BtYXJrcyB0byBnZXQgY3JvcCBtYXJrcy4KKyUKK1xuZXdpZlxpZmNyb3BtYXJrcworXGxldFxjcm9wbWFya3MgPSBcY3JvcG1hcmtzdHJ1ZQorJQorJSBEaW1lbnNpb25zIHRvIGFkZCBjcm9wbWFya3MgYXQgY29ybmVycy4KKyUgQWRkZWQgYnkgUC4gQS4gTWFjS2F5LCAxMiBOb3YuIDE5ODYKKyUKK1xuZXdkaW1lblxvdXRlcmhzaXplIFxuZXdkaW1lblxvdXRlcnZzaXplICUgc2V0IGJ5IHRoZSBwYXBlciBzaXplIHJvdXRpbmVzCitcbmV3ZGltZW5cY29ybmVybG9uZyAgXGNvcm5lcmxvbmc9MXBjCitcbmV3ZGltZW5cY29ybmVydGhpY2sgXGNvcm5lcnRoaWNrPS4zcHQKK1xuZXdkaW1lblx0b3BhbmRib3R0b21tYXJnaW4gXHRvcGFuZGJvdHRvbW1hcmdpbj0uNzVpbgorCislIE1haW4gb3V0cHV0IHJvdXRpbmUuCitcY2hhcmRlZlxQQUdFID0gMjU1Citcb3V0cHV0ID0ge1xvbmVwYWdlb3V0e1xwYWdlY29udGVudHNcUEFHRX19CisKK1xuZXdib3hcaGVhZGxpbmVib3gKK1xuZXdib3hcZm9vdGxpbmVib3gKKworJSBcb25lcGFnZW91dCB0YWtlcyBhIHZib3ggYXMgYW4gYXJndW1lbnQuICBOb3RlIHRoYXQgXHBhZ2Vjb250ZW50cworJSBkb2VzIGluc2VydGlvbnMsIGJ1dCB5b3UgaGF2ZSB0byBjYWxsIGl0IHlvdXJzZWxmLgorXGRlZlxvbmVwYWdlb3V0IzF7JQorICBcaWZjcm9wbWFya3MgXGhvZmZzZXQ9MHB0IFxlbHNlIFxob2Zmc2V0PVxub3JtYWxvZmZzZXQgXGZpCisgICUKKyAgXGlmb2RkXHBhZ2VubyAgXGFkdmFuY2VcaG9mZnNldCBieSBcYmluZGluZ29mZnNldAorICBcZWxzZSBcYWR2YW5jZVxob2Zmc2V0IGJ5IC1cYmluZGluZ29mZnNldFxmaQorICAlCisgICUgRG8gdGhpcyBvdXRzaWRlIG9mIHRoZSBcc2hpcG91dCBzbyBAY29kZSBldGMuIHdpbGwgYmUgZXhwYW5kZWQgaW4KKyAgJSB0aGUgaGVhZGxpbmUgYXMgdGhleSBzaG91bGQgYmUsIG5vdCB0YWtlbiBsaXRlcmFsbHkgKG91dHB1dHRpbmcgJydjb2RlKS4KKyAgXHNldGJveFxoZWFkbGluZWJveCA9IFx2Ym94e1xsZXRcaHNpemU9XHBhZ2V3aWR0aCBcbWFrZWhlYWRsaW5lfSUKKyAgXHNldGJveFxmb290bGluZWJveCA9IFx2Ym94e1xsZXRcaHNpemU9XHBhZ2V3aWR0aCBcbWFrZWZvb3RsaW5lfSUKKyAgJQorICB7JQorICAgICUgSGF2ZSB0byBkbyB0aGlzIHN0dWZmIG91dHNpZGUgdGhlIFxzaGlwb3V0IGJlY2F1c2Ugd2Ugd2FudCBpdCB0bworICAgICUgdGFrZSBlZmZlY3QgaW4gXHdyaXRlJ3MsIHlldCB0aGUgZ3JvdXAgZGVmaW5lZCBieSB0aGUgXHZib3ggZW5kcworICAgICUgYmVmb3JlIHRoZSBcc2hpcG91dCBydW5zLgorICAgICUKKyAgICBcZXNjYXBlY2hhciA9IGBcXCAgICAgJSB1c2UgYmFja3NsYXNoIGluIG91dHB1dCBmaWxlcy4KKyAgICBcaW5kZXhkdW1taWVzICAgICAgICAgJSBkb24ndCBleHBhbmQgY29tbWFuZHMgaW4gdGhlIG91dHB1dC4KKyAgICBcbm9ybWFsdHVybm9mZmFjdGl2ZSAgJSBcIGluIGluZGV4IGVudHJpZXMgbXVzdCBub3Qgc3RheSBcLCBlLmcuLCBpZgorICAgICAgICAgICAgICAgICAgICUgdGhlIHBhZ2UgYnJlYWsgaGFwcGVucyB0byBiZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV4YW1wbGUuCisgICAgXHNoaXBvdXRcdmJveHslCisgICAgICAlIERvIHRoaXMgZWFybHkgc28gcGRmIHJlZmVyZW5jZXMgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFnZS4KKyAgICAgIFxpZnBkZm1ha2VwYWdlZGVzdCBccGRmbWtkZXN0e1x0aGVccGFnZW5vfVxmaQorICAgICAgJQorICAgICAgXGlmY3JvcG1hcmtzIFx2Ym94IHRvIFxvdXRlcnZzaXplXGJncm91cAorICAgICAgICBcaHNpemUgPSBcb3V0ZXJoc2l6ZQorICAgICAgICBcdnNraXAtXHRvcGFuZGJvdHRvbW1hcmdpbgorICAgICAgICBcdnRvcCB0bzBwdHslCisgICAgICAgICAgXGxpbmV7XGV3dG9wXGhmaWxcZXd0b3B9JQorICAgICAgICAgIFxub2ludGVybGluZXNraXAKKyAgICAgICAgICBcbGluZXslCisgICAgICAgICAgICBcdmJveHtcbW92ZWxlZnRcY29ybmVydGhpY2tcbnN0b3B9JQorICAgICAgICAgICAgXGhmaWxsCisgICAgICAgICAgICBcdmJveHtcbW92ZXJpZ2h0XGNvcm5lcnRoaWNrXG5zdG9wfSUKKyAgICAgICAgICB9JQorICAgICAgICAgIFx2c3N9JQorICAgICAgICBcdnNraXBcdG9wYW5kYm90dG9tbWFyZ2luCisgICAgICAgIFxsaW5lXGJncm91cAorICAgICAgICAgIFxoZmlsICUgY2VudGVyIHRoZSBwYWdlIHdpdGhpbiB0aGUgb3V0ZXIgKHBhZ2UpIGhzaXplLgorICAgICAgICAgIFxpZm9kZFxwYWdlbm9caHNraXBcYmluZGluZ29mZnNldFxmaQorICAgICAgICAgIFx2Ym94XGJncm91cAorICAgICAgXGZpCisgICAgICAlCisgICAgICBcdW52Ym94XGhlYWRsaW5lYm94CisgICAgICBccGFnZWJvZHl7IzF9JQorICAgICAgXGlmZGltXGh0XGZvb3RsaW5lYm94ID4gMHB0CisgICAgICAgICUgT25seSBsZWF2ZSB0aGlzIHNwYWNlIGlmIHRoZSBmb290bGluZSBpcyBub25lbXB0eS4KKyAgICAgICAgJSAoV2UgbGVzc2VuZWQgXHZzaXplIGZvciBpdCBpbiBcb2RkZm9vdGluZ3h4eC4pCisgICAgICAgICUgVGhlIFxiYXNlbGluZXNraXA9MjRwdCBpbiBwbGFpbidzIFxtYWtlZm9vdGxpbmUgaGFzIG5vIGVmZmVjdC4KKyAgICAgICAgXHZza2lwIDJcYmFzZWxpbmVza2lwCisgICAgICAgIFx1bnZib3hcZm9vdGxpbmVib3gKKyAgICAgIFxmaQorICAgICAgJQorICAgICAgXGlmY3JvcG1hcmtzCisgICAgICAgICAgXGVncm91cCAlIGVuZCBvZiBcdmJveFxiZ3JvdXAKKyAgICAgICAgXGhmaWxcZWdyb3VwICUgZW5kIG9mIChjZW50ZXJpbmcpIFxsaW5lXGJncm91cAorICAgICAgICBcdnNraXBcdG9wYW5kYm90dG9tbWFyZ2luIHBsdXMxZmlsbCBtaW51czFmaWxsCisgICAgICAgIFxib3htYXhkZXB0aCA9IFxjb3JuZXJ0aGljaworICAgICAgICBcdmJveCB0bzBwdHtcdnNzCisgICAgICAgICAgXGxpbmV7JQorICAgICAgICAgICAgXHZib3h7XG1vdmVsZWZ0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICAgIFxoZmlsbAorICAgICAgICAgICAgXHZib3h7XG1vdmVyaWdodFxjb3JuZXJ0aGlja1xuc2JvdH0lCisgICAgICAgICAgfSUKKyAgICAgICAgICBcbm9pbnRlcmxpbmVza2lwCisgICAgICAgICAgXGxpbmV7XGV3Ym90XGhmaWxcZXdib3R9JQorICAgICAgICB9JQorICAgICAgXGVncm91cCAlIFx2Ym94IGZyb20gZmlyc3QgY3JvcG1hcmtzIGNsYXVzZQorICAgICAgXGZpCisgICAgfSUgZW5kIG9mIFxzaGlwb3V0XHZib3gKKyAgfSUgZW5kIG9mIGdyb3VwIHdpdGggXG5vcm1hbHR1cm5vZmZhY3RpdmUKKyAgXGFkdmFuY2VwYWdlbm8KKyAgXGlmbnVtXG91dHB1dHBlbmFsdHk+LTIwMDAwIFxlbHNlXGRvc3VwZXJlamVjdFxmaQorfQorCitcbmV3aW5zZXJ0XG1hcmdpbiBcZGltZW5cbWFyZ2luPVxtYXhkaW1lbgorCitcZGVmXHBhZ2Vib2R5IzF7XHZib3ggdG9ccGFnZWhlaWdodHtcYm94bWF4ZGVwdGg9XG1heGRlcHRoICMxfX0KK3tcY2F0Y29kZWBcQCA9MTEKK1xnZGVmXHBhZ2Vjb250ZW50cyMxe1xpZnZvaWRcdG9waW5zXGVsc2VcdW52Ym94XHRvcGluc1xmaQorJSBtYXJnaW5hbCBoYWNrcywganVoYUB2aWlzYS51dWNwIChKdWhhIFRha2FsYSkKK1xpZnZvaWRcbWFyZ2luXGVsc2UgJSBtYXJnaW5hbCBpbmZvIGlzIHByZXNlbnQKKyAgXHJsYXB7XGtlcm5caHNpemVcdmJveCB0b1x6QHtca2VybjFwdFxib3hcbWFyZ2luIFx2c3N9fVxmaQorXGRpbWVuQD1cZHAjMSBcdW52Ym94IzEKK1xpZnZvaWRcZm9vdGluc1xlbHNlXHZza2lwXHNraXBcZm9vdGluc1xmb290bm90ZXJ1bGUgXHVudmJveFxmb290aW5zXGZpCitcaWZyQGdnZWRib3R0b20gXGtlcm4tXGRpbWVuQCBcdmZpbCBcZml9Cit9CisKKyUgSGVyZSBhcmUgdGhlIHJ1bGVzIGZvciB0aGUgY3JvcG1hcmtzLiAgTm90ZSB0aGF0IHRoZXkgYXJlCislIG9mZnNldCBzbyB0aGF0IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZW0gaXMgdHJ1bHkgXG91dGVyaHNpemUgb3IgXG91dGVydnNpemUKKyUgKFAuIEEuIE1hY0theSwgMTIgTm92ZW1iZXIsIDE5ODYpCislCitcZGVmXGV3dG9we1x2cnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGgwcHQgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnN0b3B7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVydGhpY2sgZGVwdGhcY29ybmVybG9uZyB3aWR0aFxjb3JuZXJ0aGlja319CitcZGVmXGV3Ym90e1x2cnVsZSBoZWlnaHQwcHQgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVybG9uZ30KK1xkZWZcbnNib3R7XHZib3gKKyAge1xocnVsZSBoZWlnaHRcY29ybmVybG9uZyBkZXB0aFxjb3JuZXJ0aGljayB3aWR0aFxjb3JuZXJ0aGlja319CisKKyUgUGFyc2UgYW4gYXJndW1lbnQsIHRoZW4gcGFzcyBpdCB0byAjMS4gIFRoZSBhcmd1bWVudCBpcyB0aGUgcmVzdCBvZgorJSB0aGUgaW5wdXQgbGluZSAoZXhjZXB0IHdlIHJlbW92ZSBhIHRyYWlsaW5nIGNvbW1lbnQpLiAgIzEgc2hvdWxkIGJlIGEKKyUgbWFjcm8gd2hpY2ggZXhwZWN0cyBhbiBvcmRpbmFyeSB1bmRlbGltaXRlZCBUZVggYXJndW1lbnQuCislCitcZGVmXHBhcnNlYXJnIzF7JQorICBcbGV0XG5leHQgPSAjMSUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcb2JleWxpbmVzCisgICAgXGZ1dHVyZWxldFx0ZW1wXHBhcnNlYXJneAorfQorCislIElmIHRoZSBuZXh0IHRva2VuIGlzIGFuIG9iZXllZCBzcGFjZSAoZnJvbSBhbiBAZXhhbXBsZSBlbnZpcm9ubWVudCBvcgorJSB0aGUgbGlrZSksIHJlbW92ZSBpdCBhbmQgcmVjdXJzZS4gIE90aGVyd2lzZSwgd2UncmUgZG9uZS4KK1xkZWZccGFyc2Vhcmd4eyUKKyAgJSBcb2JleWVkc3BhY2UgaXMgZGVmaW5lZCBmYXIgYmVsb3csIGFmdGVyIHRoZSBkZWZpbml0aW9uIG9mIFxzZXBzcGFjZXMuCisgIFxpZnhcb2JleWVkc3BhY2VcdGVtcAorICAgIFxleHBhbmRhZnRlclxwYXJzZWFyZ2Rpc2NhcmRzcGFjZQorICBcZWxzZQorICAgIFxleHBhbmRhZnRlclxwYXJzZWFyZ2xpbmUKKyAgXGZpCit9CisKKyUgUmVtb3ZlIGEgc2luZ2xlIHNwYWNlIChhcyB0aGUgZGVsaW1pdGVyIHRva2VuIHRvIHRoZSBtYWNybyBjYWxsKS4KK3tcb2JleXNwYWNlcyAlCisgXGdkZWZccGFyc2VhcmdkaXNjYXJkc3BhY2Uge1xmdXR1cmVsZXRcdGVtcFxwYXJzZWFyZ3h9fQorCit7XG9iZXlsaW5lcyAlCisgIFxnZGVmXHBhcnNlYXJnbGluZSMxXl5NeyUKKyAgICBcZW5kZ3JvdXAgJSBFbmQgb2YgdGhlIGdyb3VwIHN0YXJ0ZWQgaW4gXHBhcnNlYXJnLgorICAgICUKKyAgICAlIEZpcnN0IHJlbW92ZSBhbnkgQGMgY29tbWVudCwgdGhlbiBhbnkgQGNvbW1lbnQuCisgICAgJSBSZXN1bHQgb2YgZWFjaCBtYWNybyBpcyBwdXQgaW4gXHRva3MwLgorICAgIFxhcmdyZW1vdmVjICMxXGNccmVsYXggJQorICAgIFxleHBhbmRhZnRlclxhcmdyZW1vdmVjb21tZW50IFx0aGVcdG9rczAgXGNvbW1lbnRccmVsYXggJQorICAgICUKKyAgICAlIENhbGwgdGhlIGNhbGxlcidzIG1hY3JvLCBzYXZlZCBhcyBcbmV4dCBpbiBccGFyc2VhcmcuCisgICAgXGV4cGFuZGFmdGVyXG5leHRcZXhwYW5kYWZ0ZXJ7XHRoZVx0b2tzMH0lCisgIH0lCit9CisKKyUgU2luY2UgYWxsIFxjeyxvbW1lbnR9IGRvZXMgaXMgdGhyb3cgYXdheSB0aGUgYXJndW1lbnQsIHdlIGNhbiBsZXQgVGVYCislIGRvIHRoYXQgZm9yIHVzLiAgVGhlIFxyZWxheCBoZXJlIGlzIG1hdGNoZWQgYnkgdGhlIFxyZWxheCBpbiB0aGUgY2FsbAorJSBpbiBccGFyc2VhcmdsaW5lOyBpdCBjb3VsZCBiZSBtb3JlIG9yIGxlc3MgYW55dGhpbmcsIGl0cyBwdXJwb3NlIGlzCislIGp1c3QgdG8gZGVsaW1pdCB0aGUgYXJndW1lbnQgdG8gdGhlIFxjLgorXGRlZlxhcmdyZW1vdmVjIzFcYyMyXHJlbGF4e1x0b2tzMCA9IHsjMX19CitcZGVmXGFyZ3JlbW92ZWNvbW1lbnQjMVxjb21tZW50IzJccmVsYXh7XHRva3MwID0geyMxfX0KKworJSBcYXJncmVtb3ZlY3ssb21tZW50fSBtaWdodCBsZWF2ZSB1cyB3aXRoIHRyYWlsaW5nIHNwYWNlcywgdGhvdWdoOyBlLmcuLAorJSAgICBAZW5kIGl0ZW1pemUgIEBjIGZvbworJSB3aWxsIGhhdmUgdHdvIGFjdGl2ZSBzcGFjZXMgYXMgcGFydCBvZiB0aGUgYXJndW1lbnQgd2l0aCB0aGUKKyUgYGl0ZW1pemUnLiAgSGVyZSB3ZSByZW1vdmUgYWxsIGFjdGl2ZSBzcGFjZXMgZnJvbSAjMSwgYW5kIGFzc2lnbiB0aGUKKyUgcmVzdWx0IHRvIFx0b2tzMC4KKyUKKyUgVGhpcyBsb3NlcyBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogYWN0aXZlIGNoYXJhY3RlcnMgYmVzaWRlcyBzcGFjZXMKKyUgaW4gdGhlIGFyZ3VtZW50IC0tIF8gXiArLCBmb3IgZXhhbXBsZSAtLSBzaW5jZSB0aGV5IGdldCBleHBhbmRlZC4KKyUgRm9ydHVuYXRlbHksIFRleGluZm8gZG9lcyBub3QgZGVmaW5lIGFueSBzdWNoIGNvbW1hbmRzLiAgKElmIGl0IGV2ZXIKKyUgZG9lcywgdGhlIGNhdGNvZGUgb2YgdGhlIGNoYXJhY3RlcnMgaW4gcXVlc3Rpb253aWxsIGhhdmUgdG8gYmUgY2hhbmdlZAorJSBoZXJlLikgIEJ1dCB0aGlzIG1lYW5zIHdlIGNhbm5vdCBjYWxsIFxyZW1vdmVhY3RpdmVzcGFjZXMgYXMgcGFydCBvZgorJSBcYXJncmVtb3ZlY3ssb21tZW50fSwgc2luY2UgQGMgdXNlcyBccGFyc2VhcmcsIGFuZCB0aHVzIHRoZSBhcmd1bWVudAorJSB0aGF0IFxwYXJzZWFyZyBnZXRzIG1pZ2h0IHdlbGwgaGF2ZSBhbnkgY2hhcmFjdGVyIGF0IGFsbCBpbiBpdC4KKyUKK1xkZWZccmVtb3ZlYWN0aXZlc3BhY2VzIzF7JQorICBcYmVnaW5ncm91cAorICAgIFxpZ25vcmVhY3RpdmVzcGFjZXMKKyAgICBcZWRlZlx0ZW1weyMxfSUKKyAgICBcZ2xvYmFsXHRva3MwID0gXGV4cGFuZGFmdGVye1x0ZW1wfSUKKyAgXGVuZGdyb3VwCit9CisKKyUgQ2hhbmdlIHRoZSBhY3RpdmUgc3BhY2UgdG8gZXhwYW5kIHRvIG5vdGhpbmcuCislCitcYmVnaW5ncm91cAorICBcb2JleXNwYWNlcworICBcZ2RlZlxpZ25vcmVhY3RpdmVzcGFjZXN7XG9iZXlzcGFjZXNcbGV0ID1cZW1wdHl9CitcZW5kZ3JvdXAKKworCitcZGVmXGZsdXNoY3J7XGlmeFxwYXJcbGlzcHBhciBcZGVmXG5leHQjIzF7fVxlbHNlIFxsZXRcbmV4dD1ccmVsYXggXGZpIFxuZXh0fQorCislJSBUaGVzZSBhcmUgdXNlZCB0byBrZWVwIEBiZWdpbi9AZW5kIGxldmVscyBmcm9tIHJ1bm5pbmcgYXdheQorJSUgQ2FsbCBcaW5FTlYgd2l0aGluIGVudmlyb25tZW50cyAoYWZ0ZXIgYSBcYmVnaW5ncm91cCkKK1xuZXdpZlxpZkVOViBcRU5WZmFsc2UgXGRlZlxpbkVOVntcaWZFTlZccmVsYXhcZWxzZVxFTlZ0cnVlXGZpfQorXGRlZlxFTlZjaGVja3slCitcaWZFTlZcZXJybWVzc2FnZXtTdGlsbCB3aXRoaW4gYW4gZW52aXJvbm1lbnQ7IHByZXNzIFJFVFVSTiB0byBjb250aW51ZX0KK1xlbmRncm91cFxmaX0gJSBUaGlzIGlzIG5vdCBwZXJmZWN0LCBidXQgaXQgc2hvdWxkIHJlZHVjZSBsb3NzYWdlCisKKyUgQGJlZ2luIGZvbyAgaXMgdGhlIHNhbWUgYXMgQGZvbywgZm9yIG5vdy4KK1xuZXdoZWxwXEVNc2ltcGxle1ByZXNzIFJFVFVSTiB0byBjb250aW51ZS59CisKK1xvdXRlclxkZWZcYmVnaW57XHBhcnNlYXJnXGJlZ2lueHh4fQorCitcZGVmXGJlZ2lueHh4ICMxeyUKK1xleHBhbmRhZnRlclxpZnhcY3NuYW1lICMxXGVuZGNzbmFtZVxyZWxheAore1xlcnJoZWxwPVxFTXNpbXBsZSBcZXJybWVzc2FnZXtVbmRlZmluZWQgY29tbWFuZCBAYmVnaW4gIzF9fVxlbHNlCitcY3NuYW1lICMxXGVuZGNzbmFtZVxmaX0KKworJSBAZW5kIGZvbyBleGVjdXRlcyB0aGUgZGVmaW5pdGlvbiBvZiBcRWZvby4KKyUKK1xkZWZcZW5ke1xwYXJzZWFyZ1xlbmR4eHh9CitcZGVmXGVuZHh4eCAjMXslCisgIFxyZW1vdmVhY3RpdmVzcGFjZXN7IzF9JQorICBcZWRlZlxlbmR0aGluZ3tcdGhlXHRva3MwfSUKKyAgJQorICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBFXGVuZHRoaW5nXGVuZGNzbmFtZVxyZWxheAorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFxlbmR0aGluZ1xlbmRjc25hbWVccmVsYXgKKyAgICAgICUgVGhlcmUncyBubyBcZm9vLCBpLmUuLCBubyBgYGVudmlyb25tZW50JycgZm9vLgorICAgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICAgIFxlcnJtZXNzYWdle1VuZGVmaW5lZCBjb21tYW5kIGBAZW5kIFxlbmR0aGluZyd9JQorICAgIFxlbHNlCisgICAgICBcdW5tYXRjaGVkZW5kZXJyb3JcZW5kdGhpbmcKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEV2ZXJ5dGhpbmcncyBvazsgdGhlIHJpZ2h0IGVudmlyb25tZW50IGhhcyBiZWVuIHN0YXJ0ZWQuCisgICAgXGNzbmFtZSBFXGVuZHRoaW5nXGVuZGNzbmFtZQorICBcZmkKK30KKworJSBUaGVyZSBpcyBhbiBlbnZpcm9ubWVudCAjMSwgYnV0IGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQuICBHaXZlIGFuIGVycm9yLgorJQorXGRlZlx1bm1hdGNoZWRlbmRlcnJvciMxeyUKKyAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgXGVycm1lc3NhZ2V7VGhpcyBgQGVuZCAjMScgZG9lc24ndCBoYXZlIGEgbWF0Y2hpbmcgYEAjMSd9JQorfQorCislIERlZmluZSB0aGUgY29udHJvbCBzZXF1ZW5jZSBcRSMxIHRvIGdpdmUgYW4gdW5tYXRjaGVkIEBlbmQgZXJyb3IuCislCitcZGVmXGRlZmluZXVubWF0Y2hlZGVuZCMxeyUKKyAgXGV4cGFuZGFmdGVyXGRlZlxjc25hbWUgRSMxXGVuZGNzbmFtZXtcdW5tYXRjaGVkZW5kZXJyb3J7IzF9fSUKK30KKworCislJSBTaW1wbGUgc2luZ2xlLWNoYXJhY3RlciBAIGNvbW1hbmRzCisKKyUgQEAgcHJpbnRzIGFuIEAKKyUgS2x1ZGdlIHRoaXMgdW50aWwgdGhlIGZvbnRzIGFyZSByaWdodCAoZ3JyKS4KK1xkZWZcQHt7XHR0XGNoYXI2NH19CisKKyUgVGhpcyBpcyB0dXJuZWQgb2ZmIGJlY2F1c2UgaXQgd2FzIG5ldmVyIGRvY3VtZW50ZWQKKyUgYW5kIHlvdSBjYW4gdXNlIEB3ey4uLn0gYXJvdW5kIGEgcXVvdGUgdG8gc3VwcHJlc3MgbGlnYXR1cmVzLgorJSUgRGVmaW5lIEBgIGFuZCBAJyB0byBiZSB0aGUgc2FtZSBhcyBgIGFuZCAnCislJSBidXQgc3VwcHJlc3NpbmcgbGlnYXR1cmVzLgorJVxkZWZcYHt7YH19CislXGRlZlwne3snfX0KKworJSBVc2VkIHRvIGdlbmVyYXRlIHF1b3RlZCBicmFjZXMuCitcZGVmXG15bGJyYWNlIHt7XHR0XGNoYXIxMjN9fQorXGRlZlxteXJicmFjZSB7e1x0dFxjaGFyMTI1fX0KK1xsZXRcez1cbXlsYnJhY2UKK1xsZXRcfT1cbXlyYnJhY2UKK1xiZWdpbmdyb3VwCisgICUgRGVmaW5pdGlvbnMgdG8gcHJvZHVjZSBceyBhbmQgXH0gY29tbWFuZHMgZm9yIGluZGljZXMsCisgICUgYW5kIEB7IGFuZCBAfSBmb3IgdGhlIGF1eCBmaWxlLgorICBcY2F0Y29kZWBceyA9IFxvdGhlciBcY2F0Y29kZWBcfSA9IFxvdGhlcgorICBcY2F0Y29kZWBcWyA9IDEgXGNhdGNvZGVgXF0gPSAyCisgIFxjYXRjb2RlYFwhID0gMCBcY2F0Y29kZWBcXCA9IFxvdGhlcgorICAhZ2RlZiFsYnJhY2VjbWRbXHtdJQorICAhZ2RlZiFyYnJhY2VjbWRbXH1dJQorICAhZ2RlZiFsYnJhY2VhdGNtZFtAe10lCisgICFnZGVmIXJicmFjZWF0Y21kW0B9XSUKKyFlbmRncm91cAorCislIEFjY2VudHM6IEAsIEBkb3RhY2NlbnQgQHJpbmdhY2NlbnQgQHViYXJhY2NlbnQgQHVkb3RhY2NlbnQKKyUgT3RoZXJzIGFyZSBkZWZpbmVkIGJ5IHBsYWluIFRlWDogQGAgQCcgQCIgQF4gQH4gQD0gQHUgQHYgQEguCitcbGV0XCwgPSBcYworXGxldFxkb3RhY2NlbnQgPSBcLgorXGRlZlxyaW5nYWNjZW50IzF7e1xhY2NlbnQyMyAjMX19CitcbGV0XHRpZWFjY2VudCA9IFx0CitcbGV0XHViYXJhY2NlbnQgPSBcYgorXGxldFx1ZG90YWNjZW50ID0gXGQKKworJSBPdGhlciBzcGVjaWFsIGNoYXJhY3RlcnM6IEBxdWVzdGlvbmRvd24gQGV4Y2xhbWRvd24KKyUgUGxhaW4gVGVYIGRlZmluZXM6IEBBQSBAQUUgQE8gQE9FIEBMIChwbHVzIGxvd2VyY2FzZSB2ZXJzaW9ucykgQHNzLgorXGRlZlxxdWVzdGlvbmRvd257P2B9CitcZGVmXGV4Y2xhbWRvd257IWB9CisKKyUgRG90bGVzcyBpIGFuZCBkb3RsZXNzIGosIHVzZWQgZm9yIGFjY2VudHMuCitcZGVmXGltYWNyb3tpfQorXGRlZlxqbWFjcm97an0KK1xkZWZcZG90bGVzcyMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGltYWNybyBccHRleGkKKyAgXGVsc2VcaWZ4XHRlbXBcam1hY3JvIFxqCisgIFxlbHNlIFxlcnJtZXNzYWdle0Bkb3RsZXNzIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBpIG9yIGp9JQorICBcZmlcZmkKK30KKworJSBCZSBzdXJlIHdlJ3JlIGluIGhvcml6b250YWwgbW9kZSB3aGVuIGRvaW5nIGEgdGllLCBzaW5jZSB3ZSBtYWtlIHNwYWNlCislIGVxdWl2YWxlbnQgdG8gdGhpcyBpbiBAZXhhbXBsZS1saWtlIGVudmlyb25tZW50cy4gT3RoZXJ3aXNlLCBhIHNwYWNlCislIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIHdpbGwgc3RhcnQgd2l0aCBccGVuYWx0eSAtLSBhbmQKKyUgc2luY2UgXHBlbmFsdHkgaXMgdmFsaWQgaW4gdmVydGljYWwgbW9kZSwgd2UnZCBlbmQgdXAgcHV0dGluZyB0aGUKKyUgcGVuYWx0eSBvbiB0aGUgdmVydGljYWwgbGlzdCBpbnN0ZWFkIG9mIGluIHRoZSBuZXcgcGFyYWdyYXBoLgore1xjYXRjb2RlYEAgPSAxMQorICUgQXZvaWQgdXNpbmcgXEBNIGRpcmVjdGx5LCBiZWNhdXNlIHRoYXQgY2F1c2VzIHRyb3VibGUKKyAlIGlmIHRoZSBkZWZpbml0aW9uIGlzIHdyaXR0ZW4gaW50byBhbiBpbmRleCBmaWxlLgorIFxnbG9iYWxcbGV0XHRpZXBlbmFsdHkgPSBcQE0KKyBcZ2RlZlx0aWV7XGxlYXZldm1vZGVccGVuYWx0eVx0aWVwZW5hbHR5XCB9Cit9CisKKyUgQDogZm9yY2VzIG5vcm1hbCBzaXplIHdoaXRlc3BhY2UgZm9sbG93aW5nLgorXGRlZlw6e1xzcGFjZWZhY3Rvcj0xMDAwIH0KKworJSBAKiBmb3JjZXMgYSBsaW5lIGJyZWFrLgorXGRlZlwqe1xoZmlsXGJyZWFrXGhib3h7fVxpZ25vcmVzcGFjZXN9CisKKyUgQC8gYWxsb3dzIGEgbGluZSBicmVhay4KK1xsZXRcLz1cYWxsb3dicmVhaworCislIEAuIGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBwZXJpb2QuCitcZGVmXC57LlxzcGFjZWZhY3Rvcj0zMDAwIH0KKworJSBAISBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgYmFuZy4KK1xkZWZcIXshXHNwYWNlZmFjdG9yPTMwMDAgfQorCislIEA/IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBxdWVyeS4KK1xkZWZcP3s/XHNwYWNlZmFjdG9yPTMwMDAgfQorCislIEB3IHByZXZlbnRzIGEgd29yZCBicmVhay4gIFdpdGhvdXQgdGhlIFxsZWF2ZXZtb2RlLCBAdyBhdCB0aGUKKyUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLCB3aGVuIFRlWCBpcyBzdGlsbCBpbiB2ZXJ0aWNhbCBtb2RlLCB3b3VsZAorJSBwcm9kdWNlIGEgd2hvbGUgbGluZSBvZiBvdXRwdXQgaW5zdGVhZCBvZiBzdGFydGluZyB0aGUgcGFyYWdyYXBoLgorXGRlZlx3IzF7XGxlYXZldm1vZGVcaGJveHsjMX19CisKKyUgQGdyb3VwIC4uLiBAZW5kIGdyb3VwIGZvcmNlcyAuLi4gdG8gYmUgYWxsIG9uIG9uZSBwYWdlLCBieSBlbmNsb3NpbmcKKyUgaXQgaW4gYSBUZVggdmJveC4gIFdlIHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94IHRvIGNvbnN0cnVjdCB0aGUgYm94CislIHRvIGtlZXAgaXRzIGhlaWdodCB0aGF0IG9mIGEgbm9ybWFsIGxpbmUuICBBY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvcgorJSBcdG9wc2tpcCAocC4xMTQgb2YgdGhlIFRlWGJvb2spLCB0aGUgZ2x1ZSBpbnNlcnRlZCBpcworJSBtYXggKFx0b3Bza2lwIC0gXGh0IChmaXJzdCBpdGVtKSwgMCkuICBJZiB0aGF0IGhlaWdodCBpcyBsYXJnZSwKKyUgdGhlcmVmb3JlLCBubyBnbHVlIGlzIGluc2VydGVkLCBhbmQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGhlYWRsaW5lIGFuZAorJSB0aGUgdGV4dCBpcyBzbWFsbCwgd2hpY2ggbG9va3MgYmFkLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IHRoZSBncm91cCBtaWdodCBiZSB2ZXJ5IGxhcmdlLiAgVGhpcyBjYW4KKyUgY2F1c2UgdGhlIGdsdWUgb24gdGhlIHByZXZpb3VzIHBhZ2UgdG8gYmUgdW5kdWx5IHN0cmV0Y2hlZCwgYmVjYXVzZSBpdAorJSBkb2VzIG5vdCBoYXZlIG11Y2ggbWF0ZXJpYWwuICBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGFkZCBhbgorJSBleHBsaWNpdCBcdmZpbGwgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgYXQgdGhlIGJvdHRvbS4gIFRoZQorJSB0aHJlc2hvbGQgZm9yIGRvaW5nIHRoaXMgaXMgaWYgdGhlIGdyb3VwIGlzIG1vcmUgdGhhbiBcdmZpbGxsaW1pdAorJSBwZXJjZW50IG9mIGEgcGFnZSAoXHZmaWxsbGltaXQgY2FuIGJlIGNoYW5nZWQgaW5zaWRlIG9mIEB0ZXgpLgorJQorXG5ld2JveFxncm91cGJveAorXGRlZlx2ZmlsbGxpbWl0ezAuN30KKyUKK1xkZWZcZ3JvdXB7XGJlZ2luZ3JvdXAKKyAgXGlmbnVtXGNhdGNvZGUxMz1cYWN0aXZlIFxlbHNlCisgICAgXGVycmhlbHAgPSBcZ3JvdXBpbnZhbGlkaGVscAorICAgIFxlcnJtZXNzYWdle0Bncm91cCBpbnZhbGlkIGluIGNvbnRleHQgd2hlcmUgZmlsbGluZyBpcyBlbmFibGVkfSUKKyAgXGZpCisgICUKKyAgJSBUaGUgXHZ0b3Agd2Ugc3RhcnQgYmVsb3cgcHJvZHVjZXMgYSBib3ggd2l0aCBub3JtYWwgaGVpZ2h0IGFuZCBsYXJnZQorICAlIGRlcHRoOyB0aHVzLCBUZVggcHV0cyBcYmFzZWxpbmVza2lwIGdsdWUgYmVmb3JlIGl0LCBhbmQgKHdoZW4gdGhlCisgICUgbmV4dCBsaW5lIG9mIHRleHQgaXMgZG9uZSkgXGxpbmVza2lwIGdsdWUgYWZ0ZXIgaXQuICAoU2VlIHAuODIgb2YKKyAgJSB0aGUgVGVYYm9vay4pICBUaHVzLCBzcGFjZSBiZWxvdyBpcyBub3QgcXVpdGUgZXF1YWwgdG8gc3BhY2UKKyAgJSBhYm92ZS4gIEJ1dCBpdCdzIHByZXR0eSBjbG9zZS4KKyAgXGRlZlxFZ3JvdXB7JQorICAgIFxlZ3JvdXAgICAgICAgICAgICUgRW5kIHRoZSBcdnRvcC4KKyAgICAlIFxkaW1lbjAgaXMgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIGdyb3VwJ3MgYm94LgorICAgIFxkaW1lbjAgPSBcaHRcZ3JvdXBib3ggIFxhZHZhbmNlXGRpbWVuMCBieSBcZHBcZ3JvdXBib3gKKyAgICAlIFxkaW1lbjIgaXMgaG93IG11Y2ggc3BhY2UgaXMgbGVmdCBvbiB0aGUgcGFnZSAobW9yZSBvciBsZXNzKS4KKyAgICBcZGltZW4yID0gXHBhZ2VoZWlnaHQgICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxwYWdldG90YWwKKyAgICAlIGlmIHRoZSBncm91cCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLCBhbmQgaXQncyBhIGJpZyBiaWcKKyAgICAlIGdyb3VwLCBmb3JjZSBhIHBhZ2UgYnJlYWsuCisgICAgXGlmZGltIFxkaW1lbjAgPiBcZGltZW4yCisgICAgICBcaWZkaW0gXHBhZ2V0b3RhbCA8IFx2ZmlsbGxpbWl0XHBhZ2VoZWlnaHQKKyAgICAgICAgXHBhZ2UKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxjb3B5XGdyb3VwYm94CisgICAgXGVuZGdyb3VwICAgICAgICAgJSBFbmQgdGhlIFxncm91cC4KKyAgfSUKKyAgJQorICBcc2V0Ym94XGdyb3VwYm94ID0gXHZ0b3BcYmdyb3VwCisgICAgJSBXZSBoYXZlIHRvIHB1dCBhIHN0cnV0IG9uIHRoZSBsYXN0IGxpbmUgaW4gY2FzZSB0aGUgQGdyb3VwIGlzIGluCisgICAgJSB0aGUgbWlkc3Qgb2YgYW4gZXhhbXBsZSwgcmF0aGVyIHRoYW4gY29tcGxldGVseSBlbmNsb3NpbmcgaXQuCisgICAgJSBPdGhlcndpc2UsIHRoZSBpbnRlcmxpbmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAorICAgICUgYW5kIHRoZSBmaXJzdCBsaW5lIGFmdGVyd2FyZHMgaXMgdG9vIHNtYWxsLiAgQnV0IHdlIGNhbid0IHB1dCB0aGUKKyAgICAlIHN0cnV0IGluIFxFZ3JvdXAsIHNpbmNlIHRoZXJlIGl0IHdvdWxkIGJlIG9uIGEgbGluZSBieSBpdHNlbGYuCisgICAgJSBIZW5jZSB0aGlzIGp1c3QgaW5zZXJ0cyBhIHN0cnV0IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLgorICAgIFxldmVyeXBhciA9IHtcc3RydXR9JQorICAgICUKKyAgICAlIFNpbmNlIHdlIGhhdmUgYSBzdHJ1dCBvbiBldmVyeSBsaW5lLCB3ZSBkb24ndCBuZWVkIGFueSBvZiBUZVgncworICAgICUgbm9ybWFsIGludGVybGluZSBzcGFjaW5nLgorICAgIFxvZmZpbnRlcmxpbmVza2lwCisgICAgJQorICAgICUgT0ssIGJ1dCBub3cgd2UgaGF2ZSB0byBkbyBzb21ldGhpbmcgYWJvdXQgYmxhbmsKKyAgICAlIGxpbmVzIGluIHRoZSBpbnB1dCBpbiBAZXhhbXBsZS1saWtlIGVudmlyb25tZW50cywgd2hpY2ggbm9ybWFsbHkKKyAgICAlIGp1c3QgdHVybiBpbnRvIFxsaXNwcGFyLCB3aGljaCB3aWxsIGluc2VydCBubyBzcGFjZSBub3cgdGhhdCB3ZSd2ZQorICAgICUgdHVybmVkIG9mZiB0aGUgaW50ZXJsaW5lIHNwYWNlLiAgU2ltcGxlc3QgaXMgdG8gbWFrZSB0aGVtIGJlIGFuCisgICAgJSBlbXB0eSBwYXJhZ3JhcGguCisgICAgXGlmeFxwYXJcbGlzcHBhcgorICAgICAgXGVkZWZccGFye1xsZWF2ZXZtb2RlIFxwYXJ9JQorICAgICAgJQorICAgICAgJSBSZXNldCBeXk0ncyBkZWZpbml0aW9uIHRvIG5ldyBkZWZpbml0aW9uIG9mIFxwYXIuCisgICAgICBcb2JleWxpbmVzCisgICAgXGZpCisgICAgJQorICAgICUgRG8gQGNvbW1lbnQgc2luY2Ugd2UgYXJlIGNhbGxlZCBpbnNpZGUgYW4gZW52aXJvbm1lbnQgc3VjaCBhcworICAgICUgQGV4YW1wbGUsIHdoZXJlIGVhY2ggZW5kLW9mLWxpbmUgaW4gdGhlIGlucHV0IGNhdXNlcyBhbgorICAgICUgZW5kLW9mLWxpbmUgaW4gdGhlIG91dHB1dC4gIFdlIGRvbid0IHdhbnQgdGhlIGVuZC1vZi1saW5lIGFmdGVyCisgICAgJSB0aGUgYEBncm91cCcgdG8gcHV0IGV4dHJhIHNwYWNlIGluIHRoZSBvdXRwdXQuICBTaW5jZSBAZ3JvdXAKKyAgICAlIHNob3VsZCBhcHBlYXIgb24gYSBsaW5lIGJ5IGl0c2VsZiAoYWNjb3JkaW5nIHRvIHRoZSBUZXhpbmZvCisgICAgJSBtYW51YWwpLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBlYXRpbmcgYW55IHVzZXIgdGV4dC4KKyAgICBcY29tbWVudAorfQorJQorJSBUZVggcHV0cyBpbiBhbiBcZXNjYXBlY2hhciAoaS5lLiwgYEAnKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWxwCislIG1lc3NhZ2UsIHNvIHRoaXMgZW5kcyB1cCBwcmludGluZyBgQGdyb3VwIGNhbiBvbmx5IC4uLicuCislCitcbmV3aGVscFxncm91cGludmFsaWRoZWxweyUKK2dyb3VwIGNhbiBvbmx5IGJlIHVzZWQgaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUsXl5KJQord2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0IHByb2R1Y2VzIGEgbGluZSBvZiBvdXRwdXQufQorCislIEBuZWVkIHNwYWNlLWluLW1pbHMKKyUgZm9yY2VzIGEgcGFnZSBicmVhayBpZiB0aGVyZSBpcyBub3Qgc3BhY2UtaW4tbWlscyByZW1haW5pbmcuCisKK1xuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgorCitcZGVmXG5lZWR7XHBhcnNlYXJnXG5lZWR4fQorCislIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KKyVcZGVmXG5lZWR4ICMxe1xwYXIgJQorJSUgVGhpcyBtZXRob2QgdHJpZXMgdG8gbWFrZSBUZVggYnJlYWsgdGhlIHBhZ2UgbmF0dXJhbGx5CislJSBpZiB0aGUgZGVwdGggb2YgdGhlIGJveCBkb2VzIG5vdCBmaXQuCisle1xiYXNlbGluZXNraXA9MHB0JQorJVx2dG9wIHRvICMxXG1pbHtcdmZpbH1ca2VybiAtIzFcbWlsXG5vYnJlYWsKKyVccHJldmRlcHRoPS0xMDAwcHQKKyV9fQorCitcZGVmXG5lZWR4IzF7JQorICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgJSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICAlIElmIHRoZSBAbmVlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gb25lIGxpbmUgc3BhY2UsIGl0J3MgdXNlbGVzcy4KKyAgXGRpbWVuMCA9ICMxXG1pbAorICBcZGltZW4yID0gXGh0XHN0cnV0Ym94CisgIFxhZHZhbmNlXGRpbWVuMiBieSBcZHBcc3RydXRib3gKKyAgXGlmZGltXGRpbWVuMCA+IFxkaW1lbjIKKyAgICAlCisgICAgJSBEbyBhIFxzdHJ1dCBqdXN0IHRvIG1ha2UgdGhlIGhlaWdodCBvZiB0aGlzIGJveCBiZSBub3JtYWwsIHNvIHRoZQorICAgICUgbm9ybWFsIGxlYWRpbmcgaXMgaW5zZXJ0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBsaW5lLgorICAgICUgQW5kIGEgcGFnZSBicmVhayBoZXJlIGlzIGZpbmUuCisgICAgXHZ0b3AgdG8gIzFcbWlse1xzdHJ1dFx2ZmlsfSUKKyAgICAlCisgICAgJSBUZVggZG9lcyBub3QgZXZlbiBjb25zaWRlciBwYWdlIGJyZWFrcyBpZiBhIHBlbmFsdHkgYWRkZWQgdG8gdGhlCisgICAgJSBtYWluIHZlcnRpY2FsIGxpc3QgaXMgMTAwMDAgb3IgbW9yZS4gIEJ1dCBpbiBvcmRlciB0byBzZWUgaWYgdGhlCisgICAgJSBlbXB0eSBib3ggd2UganVzdCBhZGRlZCBmaXRzIG9uIHRoZSBwYWdlLCB3ZSBtdXN0IG1ha2UgaXQgY29uc2lkZXIKKyAgICAlIHBhZ2UgYnJlYWtzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGFmdGVyIHRoZSBlbXB0eSBib3guICBTbyB3ZSB1c2UgYSBwZW5hbHR5IG9mIDk5OTkuCisgICAgJQorICAgICUgVGhlcmUgaXMgYW4gZXh0cmVtZWx5IHNtYWxsIGNoYW5jZSB0aGF0IFRlWCB3aWxsIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhdCB0aGlzIFxwZW5hbHR5LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmVhc2libGUgYnJlYWtwb2ludHMgaW4KKyAgICAlIHNpZ2h0LiAgKElmIHRoZSB1c2VyIGlzIHVzaW5nIGxvdHMgb2YgYmlnIEBncm91cCBjb21tYW5kcywgd2hpY2gKKyAgICAlIGFsbW9zdC1idXQtbm90LXF1aXRlIGZpbGwgdXAgYSBwYWdlLCBUZVggd2lsbCBoYXZlIGEgaGFyZCB0aW1lIGRvaW5nCisgICAgJSBnb29kIHBhZ2UgYnJlYWtpbmcsIGZvciBleGFtcGxlLikgIEhvd2V2ZXIsIEkgY291bGQgbm90IGNvbnN0cnVjdCBhbgorICAgICUgZXhhbXBsZSB3aGVyZSBhIHBhZ2UgYnJva2UgYXQgdGhpcyBccGVuYWx0eTsgaWYgaXQgaGFwcGVucyBpbiBhIHJlYWwKKyAgICAlIGRvY3VtZW50LCB0aGVuIHdlIGNhbiByZWNvbnNpZGVyIG91ciBzdHJhdGVneS4KKyAgICBccGVuYWx0eTk5OTkKKyAgICAlCisgICAgJSBCYWNrIHVwIGJ5IHRoZSBzaXplIG9mIHRoZSBib3gsIHdoZXRoZXIgd2UgZGlkIGEgcGFnZSBicmVhayBvciBub3QuCisgICAgXGtlcm4gLSMxXG1pbAorICAgICUKKyAgICAlIERvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBrZXJuLgorICAgIFxub2JyZWFrCisgIFxmaQorfQorCislIEBiciAgIGZvcmNlcyBwYXJhZ3JhcGggYnJlYWsKKworXGxldFxiciA9IFxwYXIKKworJSBAZG90c3t9IG91dHB1dCBhbiBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgorJSBXZSBkbyAuNWVtIHBlciBwZXJpb2Qgc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgc3BhY2luZyBpbiBhIHR5cGV3cml0ZXIKKyUgZm9udCBhcyB0aHJlZSBhY3R1YWwgcGVyaW9kIGNoYXJhY3RlcnMuCislCitcZGVmXGRvdHN7JQorICBcbGVhdmV2bW9kZQorICBcaGJveCB0byAxLjVlbXslCisgICAgXGhza2lwIDBwdCBwbHVzIDAuMjVmaWwgbWludXMgMC4yNWZpbAorICAgIC5caHNzLlxoc3MuJQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjVmaWwgbWludXMgMC41ZmlsCisgIH0lCit9CisKKyUgQGVuZGRvdHN7fSBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgZWxsaXBzaXMuCislCitcZGVmXGVuZGRvdHN7JQorICBcbGVhdmV2bW9kZQorICBcaGJveCB0byAyZW17JQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjI1ZmlsIG1pbnVzIDAuMjVmaWwKKyAgICAuXGhzcy5caHNzLlxoc3MuJQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjVmaWwgbWludXMgMC41ZmlsCisgIH0lCisgIFxzcGFjZWZhY3Rvcj0zMDAwCit9CisKKyUgQHBhZ2UgZm9yY2VzIHRoZSBzdGFydCBvZiBhIG5ldyBwYWdlLgorJQorXGRlZlxwYWdle1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KKworJSBAZXhkZW50IHRleHQuLi4uCislIG91dHB1dHMgdGV4dCBvbiBzZXBhcmF0ZSBsaW5lIGluIHJvbWFuIGZvbnQsIHN0YXJ0aW5nIGF0IHN0YW5kYXJkIHBhZ2UgbWFyZ2luCisKKyUgVGhpcyByZWNvcmRzIHRoZSBhbW91bnQgb2YgaW5kZW50IGluIHRoZSBpbm5lcm1vc3QgZW52aXJvbm1lbnQuCislIFRoYXQncyBob3cgbXVjaCBcZXhkZW50IHNob3VsZCB0YWtlIG91dC4KK1xuZXdza2lwXGV4ZGVudGFtb3VudAorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBmaWxsIGVudmlyb25tZW50cyBzdWNoIGFzIEBkZWZ1bi4KK1xkZWZcZXhkZW50e1xwYXJzZWFyZ1xleGRlbnR5eXl9CitcZGVmXGV4ZGVudHl5eSAjMXt7XGhmaWxcYnJlYWtcaGJveHtca2VybiAtXGV4ZGVudGFtb3VudHtccm0jMX19XGhmaWxcYnJlYWt9fQorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBub2ZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUuCitcZGVmXG5vZmlsbGV4ZGVudHtccGFyc2Vhcmdcbm9maWxsZXhkZW50eXl5fQorXGRlZlxub2ZpbGxleGRlbnR5eXkgIzF7e1xhZHZhbmNlIFxsZWZ0c2tpcCBieSAtXGV4ZGVudGFtb3VudAorXGxlZnRsaW5le1xoc2tpcFxsZWZ0c2tpcHtccm0jMX19fX0KKworJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKKyUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgorJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislCitcbmV3c2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlubWFyZ2luc3BhY2luZz0xY20KK1xkZWZcc3RydXRkZXB0aHtcZHBcc3RydXRib3h9CislCitcZGVmXGRvaW5tYXJnaW4jMSMye1xzdHJ1dFx2YWRqdXN0eyUKKyAgXG5vYnJlYWsKKyAgXGtlcm4tXHN0cnV0ZGVwdGgKKyAgXHZ0b3AgdG8gXHN0cnV0ZGVwdGh7JQorICAgIFxiYXNlbGluZXNraXA9XHN0cnV0ZGVwdGgKKyAgICBcdnNzCisgICAgJSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBsaW5lcyBvZiBzdHVmZiB0byBwdXQgaGVyZSwgeW91J2xsIG5lZWQgdG8KKyAgICAlIG1ha2UgdGhlIHZib3ggeW91cnNlbGYgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuCisgICAgXGlmeCMxbCUKKyAgICAgIFxsbGFwe1xpZ25vcmVzcGFjZXMgIzJcaHNraXBcaW5tYXJnaW5zcGFjaW5nfSUKKyAgICBcZWxzZQorICAgICAgXHJsYXB7XGhza2lwXGhzaXplIFxoc2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGZpCisgICAgXG51bGwKKyAgfSUKK319CitcZGVmXGlubGVmdG1hcmdpbntcZG9pbm1hcmdpbiBsfQorXGRlZlxpbnJpZ2h0bWFyZ2lue1xkb2lubWFyZ2luIHJ9CislCislIEBpbm1hcmdpbntURVhUIFssIFJJR0hULVRFWFRdfQorJSAoaWYgUklHSFQtVEVYVCBpcyBnaXZlbiwgdXNlIFRFWFQgZm9yIGxlZnQgcGFnZSwgUklHSFQtVEVYVCBmb3IgcmlnaHQ7CislIGVsc2UgdXNlIFRFWFQgZm9yIGJvdGgpLgorJQorXGRlZlxpbm1hcmdpbiMxe1xwYXJzZWlubWFyZ2luICMxLCxcZmluaXNofQorXGRlZlxwYXJzZWlubWFyZ2luIzEsIzIsIzNcZmluaXNoeyUgbm90IHBlcmZlY3QsIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nLgorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIGJvdGggdGV4dHMKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMn0lCisgIFxlbHNlCisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIG9ubHkgb25lIHRleHQKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMX0lCisgIFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8KKyAgICBcZGVmXHRlbXB7XGlucmlnaHRtYXJnaW5ccmlnaHR0ZXh0fSUgb2RkIHBhZ2UgLT4gb3V0c2lkZSBpcyByaWdodCBtYXJnaW4KKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlubGVmdG1hcmdpblxsZWZ0dGV4dH0lCisgIFxmaQorICBcdGVtcAorfQorCislIEBpbmNsdWRlIGZpbGUgICAgaW5zZXJ0IHRleHQgb2YgdGhhdCBmaWxlIGFzIGlucHV0LgorJSBBbGxvdyBub3JtYWwgY2hhcmFjdGVycyB0aGF0ICB3ZSBtYWtlIGFjdGl2ZSBpbiB0aGUgYXJndW1lbnQgKGEgZmlsZSBuYW1lKS4KK1xkZWZcaW5jbHVkZXtcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgXGNhdGNvZGVgfj1cb3RoZXIKKyAgXGNhdGNvZGVgXj1cb3RoZXIKKyAgXGNhdGNvZGVgXz1cb3RoZXIKKyAgXGNhdGNvZGVgfD1cb3RoZXIKKyAgXGNhdGNvZGVgPD1cb3RoZXIKKyAgXGNhdGNvZGVgPj1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIKKyAgXHBhcnNlYXJnXGluY2x1ZGV6enp9CislIFJlc3RvcmUgYWN0aXZlIGNoYXJzIGZvciBpbmNsdWRlZCBmaWxlLgorXGRlZlxpbmNsdWRlenp6IzF7XGVuZGdyb3VwXGJlZ2luZ3JvdXAKKyAgJSBSZWFkIHRoZSBpbmNsdWRlZCBmaWxlIGluIGEgZ3JvdXAgc28gbmVzdGVkIEBpbmNsdWRlJ3Mgd29yay4KKyAgXGRlZlx0aGlzZmlsZXsjMX0lCisgIFxsZXRcdmFsdWU9XGV4cGFuZGFibGV2YWx1ZQorICBcaW5wdXRcdGhpc2ZpbGUKK1xlbmRncm91cH0KKworXGRlZlx0aGlzZmlsZXt9CisKKyUgQGNlbnRlciBsaW5lCislIG91dHB1dHMgdGhhdCBsaW5lLCBjZW50ZXJlZC4KKyUKK1xkZWZcY2VudGVye1xwYXJzZWFyZ1xkb2NlbnRlcn0KK1xkZWZcZG9jZW50ZXIjMXt7JQorICBcaWZobW9kZSBcaGZpbFxicmVhayBcZmkKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVxsZWZ0c2tpcAorICBcYWR2YW5jZVxoc2l6ZSBieSAtXHJpZ2h0c2tpcAorICBcbGluZXtcaGZpbCBcaWdub3Jlc3BhY2VzIzFcdW5za2lwIFxoZmlsfSUKKyAgXGlmaG1vZGUgXGJyZWFrIFxmaQorfX0KKworJSBAc3AgbiAgIG91dHB1dHMgbiBsaW5lcyBvZiB2ZXJ0aWNhbCBzcGFjZQorCitcZGVmXHNwe1xwYXJzZWFyZ1xzcHh4eH0KK1xkZWZcc3B4eHggIzF7XHZza2lwICMxXGJhc2VsaW5lc2tpcH0KKworJSBAY29tbWVudCAuLi5saW5lIHdoaWNoIGlzIGlnbm9yZWQuLi4KKyUgQGMgaXMgdGhlIHNhbWUgYXMgQGNvbW1lbnQKKyUgQGlnbm9yZSAuLi4gQGVuZCBpZ25vcmUgIGlzIGFub3RoZXIgd2F5IHRvIHdyaXRlIGEgY29tbWVudAorCitcZGVmXGNvbW1lbnR7XGJlZ2luZ3JvdXAgXGNhdGNvZGVgXF5eTT1cb3RoZXIlCitcY2F0Y29kZWBcQD1cb3RoZXIgXGNhdGNvZGVgXHs9XG90aGVyIFxjYXRjb2RlYFx9PVxvdGhlciUKK1xjb21tZW50eHh4fQore1xjYXRjb2RlYFxeXk09XG90aGVyIFxnZGVmXGNvbW1lbnR4eHgjMV5eTXtcZW5kZ3JvdXB9fQorCitcbGV0XGM9XGNvbW1lbnQKKworJSBAcGFyYWdyYXBoaW5kZW50IE5DSEFSUworJSBXZSdsbCB1c2UgZW1zIGZvciBOQ0hBUlMsIGNsb3NlIGVub3VnaC4KKyUgTkNIQVJTIGNhbiBhbHNvIGJlIHRoZSB3b3JkIGBhc2lzJyBvciBgbm9uZScuCislIFdlIGNhbm5vdCBmZWFzaWJseSBpbXBsZW1lbnQgQHBhcmFncmFwaGluZGVudCBhc2lzLCB0aG91Z2guCislCitcZGVmXGFzaXN3b3Jke2FzaXN9ICUgbm8gdHJhbnNsYXRpb24sIHRoZXNlIGFyZSBrZXl3b3JkcworXGRlZlxub25ld29yZHtub25lfQorJQorXGRlZlxwYXJhZ3JhcGhpbmRlbnR7XHBhcnNlYXJnXGRvcGFyYWdyYXBoaW5kZW50fQorXGRlZlxkb3BhcmFncmFwaGluZGVudCMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcZGVmYXVsdHBhcmluZGVudCA9IDBwdAorICAgIFxlbHNlCisgICAgICBcZGVmYXVsdHBhcmluZGVudCA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorfQorCislIEBleGFtcGxlaW5kZW50IE5DSEFSUworJSBXZSdsbCB1c2UgZW1zIGZvciBOQ0hBUlMgbGlrZSBAcGFyYWdyYXBoaW5kZW50LgorJSBJdCBzZWVtcyBAZXhhbXBsZWluZGVudCBhc2lzIGlzbid0IG5lY2Vzc2FyeSwgYnV0CislIEkgcHJlc2VydmUgaXQgdG8gbWFrZSBpdCBzaW1pbGFyIHRvIEBwYXJhZ3JhcGhpbmRlbnQuCitcZGVmXGV4YW1wbGVpbmRlbnR7XHBhcnNlYXJnXGRvZXhhbXBsZWluZGVudH0KK1xkZWZcZG9leGFtcGxlaW5kZW50IzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxsaXNwbmFycm93aW5nID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxsaXNwbmFycm93aW5nID0gIzFlbQorICAgIFxmaQorICBcZmkKK30KKworJSBAZmlyc3RwYXJhZ3JhcGhpbmRlbnQgV09SRAorJSBJZiBXT1JEIGlzIGBub25lJywgdGhlbiBzdXBwcmVzcyBpbmRlbnRhdGlvbiBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoCislIGFmdGVyIGEgc2VjdGlvbiBoZWFkaW5nLiAgSWYgV09SRCBpcyBgaW5zZXJ0JywgdGhlbiBkbyBpbmRlbnQgYXQgc3VjaAorJSBwYXJhZ3JhcGhzLgorJQorJSBUaGUgcGFyYWdyYXBoIGluZGVudGF0aW9uIGlzIHN1cHByZXNzZWQgb3Igbm90IGJ5IGNhbGxpbmcKKyUgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQsIHdoaWNoIHRoZSBzZWN0aW9uaW5nIGNvbW1hbmRzIGRvLgorJSBXZSBzd2l0Y2ggdGhlIGRlZmluaXRpb24gb2YgdGhpcyBiYWNrIGFuZCBmb3J0aCBhY2NvcmRpbmcgdG8gV09SRC4KKyUgQnkgZGVmYXVsdCwgd2Ugc3VwcHJlc3MgaW5kZW50YXRpb24uCislCitcZGVmXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR7XGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xuZXdkaW1lblxjdXJyZW50cGFyaW5kZW50CislCitcZGVmXGluc2VydHdvcmR7aW5zZXJ0fQorJQorXGRlZlxmaXJzdHBhcmFncmFwaGluZGVudHtccGFyc2VhcmdcZG9maXJzdHBhcmFncmFwaGluZGVudH0KK1xkZWZcZG9maXJzdHBhcmFncmFwaGluZGVudCMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorICBcZWxzZVxpZnhcdGVtcFxpbnNlcnR3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmaXJzdHBhcmFncmFwaGluZGVudCBvcHRpb24gYFx0ZW1wJ30lCisgIFxmaVxmaQorfQorCislIEhlcmUgaXMgaG93IHdlIGFjdHVhbGx5IHN1cHByZXNzIGluZGVudGF0aW9uLiAgUmVkZWZpbmUgXGV2ZXJ5cGFyIHRvCislIFxrZXJuIGJhY2t3YXJkcyBieSBccGFyaW5kZW50LCBhbmQgdGhlbiByZXNldCBpdHNlbGYgdG8gZW1wdHkuCislCislIFdlIGFsc28gbWFrZSBcaW5kZW50IGl0c2VsZiBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgdGhlIG5leHQKKyUgcGFyYWdyYXBoLgorJQorXGdkZWZcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdkZWZcaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXGluZGVudAorICB9JQorICBcZ2RlZlxub2luZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxub2luZGVudAorICB9JQorICBcZ2xvYmFsXGV2ZXJ5cGFyID0geyUKKyAgICBca2VybiAtXHBhcmluZGVudAorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgfSUKK30KKworXGdkZWZccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdsb2JhbCBcbGV0IFxpbmRlbnQgPSBccHRleGluZGVudAorICBcZ2xvYmFsIFxsZXQgXG5vaW5kZW50ID0gXHB0ZXhub2luZGVudAorICBcZ2xvYmFsIFxldmVyeXBhciA9IHt9JQorfQorCisKKyUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCislCitcZGVmXGFzaXMjMXsjMX0KKworJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCislIFdlIGRvbid0IHVzZSAkJ3MgZGlyZWN0bHkgaW4gdGhlIGRlZmluaXRpb24gb2YgXG1hdGggYmVjYXVzZSB3ZSBuZWVkCislIHRvIHNldCBjYXRjb2RlcyBhY2NvcmRpbmcgdG8gcGxhaW4gVGVYIGZpcnN0LCB0byBhbGxvdyBmb3Igc3Vic2NyaXB0cywKKyUgc3VwZXJzY3JpcHRzLCBzcGVjaWFsIG1hdGggY2hhcnMsIGV0Yy4KKyUKK1xsZXRcaW1wbGljaXRtYXRoID0gJCUkIGZvbnQtbG9jayBmaXgKKyUKKyUgT25lIGNvbXBsaWNhdGlvbjogXyB1c3VhbGx5IG1lYW5zIHN1YnNjcmlwdHMsIGJ1dCBpdCBjb3VsZCBhbHNvIG1lYW4KKyUgYW4gYWN0dWFsIF8gY2hhcmFjdGVyLCBhcyBpbiBAbWF0aHtAdmFye3NvbWVfdmFyaWFibGV9ICsgMX0uICBTbyBtYWtlCislIF8gd2l0aGluIEBtYXRoIGJlIGFjdGl2ZSAobWF0aGNvZGUgIjgwMDApLCBhbmQgZGlzdGluZ3Vpc2ggYnkgc2VlaW5nCislIGlmIHRoZSBjdXJyZW50IGZhbWlseSBpcyBcc2xmYW0sIHdoaWNoIGlzIHdoYXQgQHZhciB1c2VzLgorJQore1xjYXRjb2RlXHVuZGVyQ2hhciA9IFxhY3RpdmUKK1xnZGVmXG1hdGh1bmRlcnNjb3JleyUKKyAgXGNhdGNvZGVcdW5kZXJDaGFyPVxhY3RpdmUKKyAgXGRlZl97XGlmbnVtXGZhbT1cc2xmYW0gXF9cZWxzZVxzYlxmaX0lCit9fQorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbjogd2Ugd2FudCBcXCAoYW5kIEBcKSB0byBvdXRwdXQgYSBcIGNoYXJhY3Rlci4KKyUgRllJLCBwbGFpbi50ZXggdXNlcyBcXCBhcyBhIHRlbXBvcmFyeSBjb250cm9sIHNlcXVlbmNlICh3aHk/KSwgYnV0CislIHRoaXMgaXMgbm90IGFkdmVydGlzZWQgYW5kIHdlIGRvbid0IGNhcmUuICBUZXhpbmZvIGRvZXMgbm90CislIG90aGVyd2lzZSBkZWZpbmUgQFwuCislCislIFRoZSBcbWF0aGNoYXIgaXMgY2xhc3M9MD1vcmRpbmFyeSwgZmFtaWx5PTc9dHRmYW0sIHBvc2l0aW9uPTVDPVwuCitcZGVmXG1hdGhiYWNrc2xhc2h7XGlmbnVtXGZhbT1cdHRmYW0gXG1hdGhjaGFyIjA3NUMgXGVsc2VcYmFja3NsYXNoIFxmaX0KKyUKK1xkZWZcbWF0aHslCisgIFx0ZXgKKyAgXG1hdGhjb2RlYFxfPSI4MDAwIFxtYXRodW5kZXJzY29yZQorICBcbGV0XFwgPSBcbWF0aGJhY2tzbGFzaAorICBcbWF0aGFjdGl2ZQorICBcaW1wbGljaXRtYXRoXGZpbmlzaG1hdGh9CitcZGVmXGZpbmlzaG1hdGgjMXsjMVxpbXBsaWNpdG1hdGhcRXRleH0KKworJSBTb21lIGFjdGl2ZSBjaGFyYWN0ZXJzIChzdWNoIGFzIDwpIGFyZSBzcGFjZWQgZGlmZmVyZW50bHkgaW4gbWF0aC4KKyUgV2UgaGF2ZSB0byByZXNldCB0aGVpciBkZWZpbml0aW9ucyBpbiBjYXNlIHRoZSBAbWF0aCB3YXMgYW4KKyUgYXJndW1lbnQgdG8gYSBjb21tYW5kIHdoaWNoIHNldCB0aGUgY2F0Y29kZXMgKHN1Y2ggYXMgQGl0ZW0gb3IgQHNlY3Rpb24pLgorJQoreworICBcY2F0Y29kZWBeID0gXGFjdGl2ZQorICBcY2F0Y29kZWA8ID0gXGFjdGl2ZQorICBcY2F0Y29kZWA+ID0gXGFjdGl2ZQorICBcY2F0Y29kZWArID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRoYWN0aXZleyUKKyAgICBcbGV0XiA9IFxwdGV4aGF0CisgICAgXGxldDwgPSBccHRleGxlc3MKKyAgICBcbGV0PiA9IFxwdGV4Z3RyCisgICAgXGxldCsgPSBccHRleHBsdXMKKyAgfQorfQorCislIEBidWxsZXQgYW5kIEBtaW51cyBuZWVkIHRoZSBzYW1lIHRyZWF0bWVudCBhcyBAbWF0aCwganVzdCBhYm92ZS4KK1xkZWZcYnVsbGV0e1xpbXBsaWNpdG1hdGhccHRleGJ1bGxldFxpbXBsaWNpdG1hdGh9CitcZGVmXG1pbnVze1xpbXBsaWNpdG1hdGgtXGltcGxpY2l0bWF0aH0KKworJSBAcmVmaWxsIGlzIGEgbm8tb3AuCitcbGV0XHJlZmlsbD1ccmVsYXgKKworJSBJZiB3b3JraW5nIG9uIGEgbGFyZ2UgZG9jdW1lbnQgaW4gY2hhcHRlcnMsIGl0IGlzIGNvbnZlbmllbnQgdG8KKyUgYmUgYWJsZSB0byBkaXNhYmxlIGluZGV4aW5nLCBjcm9zcy1yZWZlcmVuY2luZywgYW5kIGNvbnRlbnRzLCBmb3IgdGVzdCBydW5zLgorJSBUaGlzIGlzIGRvbmUgd2l0aCBAbm92YWxpZGF0ZSAoYmVmb3JlIEBzZXRmaWxlbmFtZSkuCislCitcbmV3aWZcaWZsaW5rcyBcbGlua3N0cnVlICUgYnkgZGVmYXVsdCB3ZSB3YW50IHRoZSBhdXggZmlsZXMuCitcbGV0XG5vdmFsaWRhdGUgPSBcbGlua3NmYWxzZQorCislIEBzZXRmaWxlbmFtZSBpcyBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgdGV4aW5mbyBmaWxlLgorJSBTbyBvcGVuIGhlcmUgdGhlIGZpbGVzIHdlIG5lZWQgdG8gaGF2ZSBvcGVuIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0LgorJSBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG1ha2UgYSAuZm10IGZpbGUgZm9yIHRleGluZm8uCitcZGVmXHNldGZpbGVuYW1leyUKKyAgIFxpZmxpbmtzCisgICAgIFxyZWFkYXV4ZmlsZQorICAgXGZpICUgXG9wZW5pbmRpY2VzIG5lZWRzIHRvIGRvIHNvbWUgd29yayBpbiBhbnkgY2FzZS4KKyAgIFxvcGVuaW5kaWNlcworICAgXGZpeGJhY2tzbGFzaCAgJSBUdXJuIG9mZiBoYWNrIHRvIHN3YWxsb3cgYFxpbnB1dCB0ZXhpbmZvJy4KKyAgIFxnbG9iYWxcbGV0XHNldGZpbGVuYW1lPVxjb21tZW50ICUgSWdub3JlIGV4dHJhIEBzZXRmaWxlbmFtZSBjbWRzLgorICAgJQorICAgJSBJZiB0ZXhpbmZvLmNuZiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0sIHJlYWQgaXQuCisgICAlIFVzZWZ1bCBmb3Igc2l0ZS13aWRlIEBhZm91cnBhcGVyLCBldGMuCisgICAlIEp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgY2xvc2UgdGhlIGlucHV0IHN0cmVhbSBiZWZvcmUgdGhlIFxpbnB1dC4KKyAgIFxvcGVuaW4gMSB0ZXhpbmZvLmNuZgorICAgXGlmZW9mMSBcbGV0XHRlbXA9XHJlbGF4IFxlbHNlIFxkZWZcdGVtcHtcaW5wdXQgdGV4aW5mby5jbmYgfVxmaQorICAgXGNsb3NlaW4xCisgICBcdGVtcAorICAgJQorICAgXGNvbW1lbnQgJSBJZ25vcmUgdGhlIGFjdHVhbCBmaWxlbmFtZS4KK30KKworJSBDYWxsZWQgZnJvbSBcc2V0ZmlsZW5hbWUuCislCitcZGVmXG9wZW5pbmRpY2VzeyUKKyAgXG5ld2luZGV4e2NwfSUKKyAgXG5ld2NvZGVpbmRleHtmbn0lCisgIFxuZXdjb2RlaW5kZXh7dnJ9JQorICBcbmV3Y29kZWluZGV4e3RwfSUKKyAgXG5ld2NvZGVpbmRleHtreX0lCisgIFxuZXdjb2RlaW5kZXh7cGd9JQorfQorCislIEBieWUuCitcb3V0ZXJcZGVmXGJ5ZXtccGFnZWFsaWdubWFjcm9cdHJhY2luZ3N0YXRzPTFccHRleGVuZH0KKworCitcbWVzc2FnZXtwZGYsfQorJSBhZG9iZSBgcG9ydGFibGUnIGRvY3VtZW50IGZvcm1hdAorXG5ld2NvdW50XHRlbXBudW0KK1xuZXdjb3VudFxsbmtjb3VudAorXG5ld3Rva3NcZmlsZW5hbWUKK1xuZXdjb3VudFxmaWxlbmFtZWxlbmd0aAorXG5ld2NvdW50XHBnbgorXG5ld3Rva3NcdG9rc0EKK1xuZXd0b2tzXHRva3NCCitcbmV3dG9rc1x0b2tzQworXG5ld3Rva3NcdG9rc0QKK1xuZXdib3hcYm94QQorXG5ld2NvdW50XGNvdW50QQorXG5ld2lmXGlmcGRmCitcbmV3aWZcaWZwZGZtYWtlcGFnZWRlc3QKKworXGlmeFxwZGZvdXRwdXRcdW5kZWZpbmVkCisgIFxwZGZmYWxzZQorICBcbGV0XHBkZm1rZGVzdCA9IFxnb2JibGUKKyAgXGxldFxwZGZ1cmwgPSBcZ29iYmxlCisgIFxsZXRcZW5kbGluayA9IFxyZWxheAorICBcbGV0XGxpbmtjb2xvciA9IFxyZWxheAorICBcbGV0XHBkZm1ha2VvdXRsaW5lcyA9IFxyZWxheAorXGVsc2UKKyAgXHBkZnRydWUKKyAgXHBkZm91dHB1dCA9IDEKKyAgXGlucHV0IHBkZmNvbG9yCisgIFxwZGZjYXRhbG9ney9QYWdlTW9kZSAvVXNlT3V0bGluZXN9JQorICBcZGVmXGRvcGRmaW1hZ2UjMSMyIzN7JQorICAgIFxkZWZcaW1hZ2V3aWR0aHsjMn0lCisgICAgXGRlZlxpbWFnZWhlaWdodHsjM30lCisgICAgJSB3aXRob3V0IFxpbW1lZGlhdGUsIHBkZnRleCBzZWcgZmF1bHRzIHdoZW4gdGhlIHNhbWUgaW1hZ2UgaXMKKyAgICAlIGluY2x1ZGVkIHR3aWNlLiAgKFZlcnNpb24gMy4xNDE1OS1wcmUtMS4wLXVub2ZmaWNpYWwtMjAwMTA3MDQuKQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQKKyAgICAgIFxpbW1lZGlhdGVccGRmaW1hZ2UKKyAgICBcZWxzZQorICAgICAgXGltbWVkaWF0ZVxwZGZ4aW1hZ2UKKyAgICBcZmkKKyAgICAgIFxpZnhcZW1wdHlcaW1hZ2V3aWR0aFxlbHNlIHdpZHRoIFxpbWFnZXdpZHRoIFxmaQorICAgICAgXGlmeFxlbXB0eVxpbWFnZWhlaWdodFxlbHNlIGhlaWdodCBcaW1hZ2VoZWlnaHQgXGZpCisgICAgICBcaWZudW1ccGRmdGV4dmVyc2lvbjwxMworICAgICAgICAgIzEucGRmJQorICAgICAgIFxlbHNlCisgICAgICAgICB7IzEucGRmfSUKKyAgICAgICBcZmkKKyAgICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0IFxlbHNlCisgICAgICBccGRmcmVmeGltYWdlIFxwZGZsYXN0eGltYWdlCisgICAgXGZpfQorICBcZGVmXHBkZm1rZGVzdCMxe3tcbm9ybWFsdHVybm9mZmFjdGl2ZSBccGRmZGVzdCBuYW1leyMxfSB4eXp9fQorICBcZGVmXHBkZm1rcGduIzF7IzF9CisgIFxsZXRcbGlua2NvbG9yID0gXEJsdWUgICUgd2FzIEN5YW4sIGJ1dCB0aGF0IHNlZW1zIGxpZ2h0PworICBcZGVmXGVuZGxpbmt7XEJsYWNrXHBkZmVuZGxpbmt9CisgICUgQWRkaW5nIG91dGxpbmVzIHRvIFBERjsgbWFjcm9zIGZvciBjYWxjdWxhdGluZyBzdHJ1Y3R1cmUgb2Ygb3V0bGluZXMKKyAgJSBjb21lIGZyb20gUGV0ciBPbHNhaworICBcZGVmXGV4cG51bWJlciMxe1xleHBhbmRhZnRlclxpZnhcY3NuYW1lIzFcZW5kY3NuYW1lXHJlbGF4IDAlCisgICAgXGVsc2UgXGNzbmFtZSMxXGVuZGNzbmFtZSBcZml9CisgIFxkZWZcYWR2YW5jZW51bWJlciMxe1x0ZW1wbnVtPVxleHBudW1iZXJ7IzF9XHJlbGF4CisgICAgXGFkdmFuY2VcdGVtcG51bSBieSAxCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIzFcZW5kY3NuYW1le1x0aGVcdGVtcG51bX19CisgICUKKyAgJSAjMSBpcyB0aGUgc2VjdGlvbiB0ZXh0LiAgIzIgaXMgdGhlIHBkZiBleHByZXNzaW9uIGZvciB0aGUgbnVtYmVyCisgICUgb2Ygc3ViZW50cmllcyAob3IgZW1wdHksIGZvciBzdWJzdWJzZWN0aW9ucykuICAjMyBpcyB0aGUgbm9kZQorICAlIHRleHQsIHdoaWNoIG1pZ2h0IGJlIGVtcHR5IGlmIHRoaXMgdG9jIGVudHJ5IGhhZCBubworICAlIGNvcnJlc3BvbmRpbmcgbm9kZS4gICM0IGlzIHRoZSBwYWdlIG51bWJlci4KKyAgJSAKKyAgXGRlZlxkb3BkZm91dGxpbmUjMSMyIzMjNHslCisgICAgJSBHZW5lcmF0ZSBhIGxpbmsgdG8gdGhlIG5vZGUgdGV4dCBpZiB0aGF0IGV4aXN0czsgZWxzZSwgdXNlIHRoZQorICAgICUgcGFnZSBudW1iZXIuICBXZSBjb3VsZCBnZW5lcmF0ZSBhIGRlc3RpbmF0aW9uIGZvciB0aGUgc2VjdGlvbgorICAgICUgdGV4dCBpbiB0aGUgY2FzZSB3aGVyZSBhIHNlY3Rpb24gaGFzIG5vIG5vZGUsIGJ1dCBpdCBkb2Vzbid0CisgICAgJSBzZWVtIHdvcnRod2hpbGUsIHNpbmNlIG1vc3QgZG9jdW1lbnRzIGFyZSBub3JtYWxseSBzdHJ1Y3R1cmVkLgorICAgIFxkZWZccGRmb3V0bGluZWRlc3R7IzN9JQorICAgIFxpZnhccGRmb3V0bGluZWRlc3RcZW1wdHkgXGRlZlxwZGZvdXRsaW5lZGVzdHsjNH1cZmkKKyAgICAlCisgICAgXHBkZm91dGxpbmUgZ290byBuYW1le1xwZGZta3BnbntccGRmb3V0bGluZWRlc3R9fSMyeyMxfSUKKyAgfQorICAlCisgIFxkZWZccGRmbWFrZW91dGxpbmVzeyUKKyAgICBcb3BlbmluIDEgXGpvYm5hbWUudG9jCisgICAgXGlmZW9mIDFcZWxzZVxiZWdpbmdyb3VwCisgICAgICBcY2xvc2VpbiAxCisgICAgICAlIFRoYW5oJ3MgaGFjayAvIHByb3BlciBicmFjZXMgaW4gYm9va21hcmtzCisgICAgICBcZWRlZlxteWxicmFjZXtcaWZ0cnVlIFxzdHJpbmd7XGVsc2V9XGZpfVxsZXRcez1cbXlsYnJhY2UKKyAgICAgIFxlZGVmXG15cmJyYWNle1xpZmZhbHNle1xlbHNlXHN0cmluZ31cZml9XGxldFx9PVxteXJicmFjZQorICAgICAgJQorICAgICAgJSBSZWFkIHRvYyBzaWxlbnRseSwgdG8gZ2V0IGNvdW50cyBvZiBzdWJlbnRyaWVzIGZvciBccGRmb3V0bGluZS4KKyAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0e1xkZWZcdGhpc2NoYXBudW17IyMyfX0lCisgICAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRlZlx0aGlzc2VjbnVteyMjMn0lCisgICAgICAgIFxhZHZhbmNlbnVtYmVye2NoYXBcdGhpc2NoYXBudW19fSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZGVmXHRoaXNzdWJzZWNudW17IyMyfSUKKyAgICAgICAgXGFkdmFuY2VudW1iZXJ7c2VjXHRoaXNzZWNudW19fSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7XGFkdmFuY2VudW1iZXJ7c3Vic2VjXHRoaXNzdWJzZWNudW19fSUKKyAgICAgICUKKyAgICAgICUgdXNlIFxkZWYgcmF0aGVyIHRoYW4gXGxldCBoZXJlIGJlY2F1c2Ugd2UgcmVkZWZpbmUgXGNoYXBlbnRyeSBldAorICAgICAgJSBhbC4gYSBzZWNvbmQgdGltZSwgYmVsb3cuCisgICAgICBcZGVmXGFwcGVudHJ5e1xudW1jaGFwZW50cnl9JQorICAgICAgXGRlZlxhcHBzZWNlbnRyeXtcbnVtc2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzZWNlbnRyeXtcbnVtc3Vic2VjZW50cnl9JQorICAgICAgXGRlZlxhcHBzdWJzdWJzZWNlbnRyeXtcbnVtc3Vic3Vic2VjZW50cnl9JQorICAgICAgXGRlZlx1bm5jaGFwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXHVubnNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubnN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBcaW5wdXQgXGpvYm5hbWUudG9jCisgICAgICAlCisgICAgICAlIFJlYWQgdG9jIHNlY29uZCB0aW1lLCB0aGlzIHRpbWUgYWN0dWFsbHkgcHJvZHVjaW5nIHRoZSBvdXRsaW5lcy4KKyAgICAgICUgVGhlIGAtJyBtZWFucyB0YWtlIHRoZSBcZXhwbnVtYmVyIGFzIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2YKKyAgICAgICUgc3ViZW50cmllcywgd2hpY2ggd2UgY2FsY3VsYXRlZCBvbiBvdXIgZmlyc3QgcmVhZCBvZiB0aGUgLnRvYyBhYm92ZS4KKyAgICAgICUgCisgICAgICAlIFdlIHVzZSB0aGUgbm9kZSBuYW1lcyBhcyB0aGUgZGVzdGluYXRpb25zLgorICAgICAgXGRlZlxudW1jaGFwZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntjaGFwIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntzZWMjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXtjb3VudC1cZXhwbnVtYmVye3N1YnNlYyMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXN1YnN1YnNlY2VudHJ5IyMxIyMyIyMzIyM0eyUgY291bnQgaXMgYWx3YXlzIHplcm8KKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e317IyMzfXsjIzR9fSUKKyAgICAgICUKKyAgICAgICUgTWFrZSBzcGVjaWFsIGNoYXJhY3RlcnMgbm9ybWFsIGZvciB3cml0aW5nIHRvIHRoZSBwZGYgZmlsZS4KKyAgICAgIFxpbmRleG5vZm9udHMKKyAgICAgIFx0dXJub2ZmYWN0aXZlCisgICAgICBcaW5wdXQgXGpvYm5hbWUudG9jCisgICAgXGVuZGdyb3VwXGZpCisgIH0KKyAgJQorICBcZGVmXG1ha2VsaW5rcyAjMSx7JQorICAgIFxkZWZccGFyYW1zeyMxfVxkZWZcRXtFTkR9JQorICAgIFxpZnhccGFyYW1zXEUKKyAgICAgIFxsZXRcbmV4dG1ha2VsaW5rcz1ccmVsYXgKKyAgICBcZWxzZQorICAgICAgXGxldFxuZXh0bWFrZWxpbmtzPVxtYWtlbGlua3MKKyAgICAgIFxpZm51bVxsbmtjb3VudD4wLFxmaQorICAgICAgXHBpY2tudW17IzF9JQorICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0KKyAgICAgICAgZ290byBuYW1le1xwZGZta3BnbntcdGhlXHBnbn19JQorICAgICAgXGxpbmtjb2xvciAjMSUKKyAgICAgIFxhZHZhbmNlXGxua2NvdW50IGJ5IDElCisgICAgICBcZW5kbGluaworICAgIFxmaQorICAgIFxuZXh0bWFrZWxpbmtzCisgIH0KKyAgXGRlZlxwaWNrbnVtIzF7XGV4cGFuZGFmdGVyXHBuIzF9CisgIFxkZWZccG4jMXslCisgICAgXGRlZlxweyMxfSUKKyAgICBcaWZ4XHBcbGJyYWNlCisgICAgICBcbGV0XG5leHRwbj1ccHBuCisgICAgXGVsc2UKKyAgICAgIFxsZXRcbmV4dHBuPVxwcG5uCisgICAgICBcZGVmXGZpcnN0eyMxfQorICAgIFxmaQorICAgIFxuZXh0cG4KKyAgfQorICBcZGVmXHBwbiMxe1xwZ249IzFcZ29iYmxlfQorICBcZGVmXHBwbm57XHBnbj1cZmlyc3R9CisgIFxkZWZccGRmbWtsbmsjMXtcbG5rY291bnQ9MFxtYWtlbGlua3MgIzEsRU5ELH0KKyAgXGRlZlxhZGR0b2tlbnMjMSMye1xlZGVmXGFkZHRva3N7XG5vZXhwYW5kIzE9e1x0aGUjMSMyfX1cYWRkdG9rc30KKyAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCisgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKKyAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKKyAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxuZXh0c3B9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXtcZmlsZW5hbWVsZW5ndGg9MFxleHBhbmRhZnRlclxza2lwc3BhY2VzIzF8XHJlbGF4fQorICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZhbm5vdGxpbmsKKyAgXGVsc2UKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZnN0YXJ0bGluaworICBcZmkKKyAgXGRlZlxwZGZ1cmwjMXslCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlXGRlZlxAe0B9JQorICAgICAgXGxldFx2YWx1ZT1cZXhwYW5kYWJsZXZhbHVlCisgICAgICBcbGVhdmV2bW9kZVxSZWQKKyAgICAgIFxzdGFydGxpbmsgYXR0cnsvQm9yZGVyIFswIDAgMF19JQorICAgICAgICB1c2Vyey9TdWJ0eXBlIC9MaW5rIC9BIDw8IC9TIC9VUkkgL1VSSSAoIzEpID4+fSUKKyAgICAgICAgJSAjMQorICAgIFxlbmRncm91cH0KKyAgXGRlZlxwZGZnZXR0b2tzIzEue1xzZXRib3hcYm94QT1caGJveHtcdG9rc0E9eyMxLn1cdG9rc0I9e31cbWFrZXRva3N9fQorICBcZGVmXGFkZHRva2VucyMxIzJ7XGVkZWZcYWRkdG9rc3tcbm9leHBhbmQjMT17XHRoZSMxIzJ9fVxhZGR0b2tzfQorICBcZGVmXGFkbiMxe1xhZGR0b2tlbnN7XHRva3NDfXsjMX1cZ2xvYmFsXGNvdW50QT0xXGxldFxuZXh0PVxtYWtldG9rc30KKyAgXGRlZlxwb3B0b2tzIzEjMnxFTkRUT0tTfHtcbGV0XGZpcnN0PSMxXHRva3NEPXsjMX1cdG9rc0E9eyMyfX0KKyAgXGRlZlxtYWtldG9rc3slCisgICAgXGV4cGFuZGFmdGVyXHBvcHRva3NcdGhlXHRva3NBfEVORFRPS1N8CisgICAgXGlmeFxmaXJzdDBcYWRuMAorICAgIFxlbHNlXGlmeFxmaXJzdDFcYWRuMSBcZWxzZVxpZnhcZmlyc3QyXGFkbjIgXGVsc2VcaWZ4XGZpcnN0M1xhZG4zCisgICAgXGVsc2VcaWZ4XGZpcnN0NFxhZG40IFxlbHNlXGlmeFxmaXJzdDVcYWRuNSBcZWxzZVxpZnhcZmlyc3Q2XGFkbjYKKyAgICBcZWxzZVxpZnhcZmlyc3Q3XGFkbjcgXGVsc2VcaWZ4XGZpcnN0OFxhZG44IFxlbHNlXGlmeFxmaXJzdDlcYWRuOQorICAgIFxlbHNlCisgICAgICBcaWZudW0wPVxjb3VudEFcZWxzZVxtYWtlbGlua1xmaQorICAgICAgXGlmeFxmaXJzdC5cbGV0XG5leHQ9XGRvbmVcZWxzZQorICAgICAgICBcbGV0XG5leHQ9XG1ha2V0b2tzCisgICAgICAgIFxhZGR0b2tlbnN7XHRva3NCfXtcdGhlXHRva3NEfQorICAgICAgICBcaWZ4XGZpcnN0LFxhZGR0b2tlbnN7XHRva3NCfXtcc3BhY2V9XGZpCisgICAgICBcZmkKKyAgICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmkKKyAgICBcbmV4dH0KKyAgXGRlZlxtYWtlbGlua3tcYWRkdG9rZW5ze1x0b2tzQn0lCisgICAge1xub2V4cGFuZFxwZGZsaW5re1x0aGVcdG9rc0N9fVx0b2tzQz17fVxnbG9iYWxcY291bnRBPTB9CisgIFxkZWZccGRmbGluayMxeyUKKyAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSBnb3RvIG5hbWV7XHBkZm1rcGdueyMxfX0KKyAgICBcbGlua2NvbG9yICMxXGVuZGxpbmt9CisgIFxkZWZcZG9uZXtcZWRlZlxzdHtcZ2xvYmFsXG5vZXhwYW5kXHRva3NBPXtcdGhlXHRva3NCfX1cc3R9CitcZmkgJSBcaWZ4XHBkZm91dHB1dAorCisKK1xtZXNzYWdle2ZvbnRzLH0KKyUgRm9udC1jaGFuZ2UgY29tbWFuZHMuCisKKyUgVGV4aW5mbyBzb3J0IG9mIHN1cHBvcnRzIHRoZSBzYW5zIHNlcmlmIGZvbnQgc3R5bGUsIHdoaWNoIHBsYWluIFRlWCBkb2VzIG5vdC4KKyUgU28gd2Ugc2V0IHVwIGEgXHNmIGFuYWxvZ291cyB0byBwbGFpbidzIFxybSwgZXRjLgorXG5ld2ZhbVxzZmZhbQorXGRlZlxzZntcZmFtPVxzZmZhbSBcdGVuc2Z9CitcbGV0XGxpID0gXHNmICUgU29tZXRpbWVzIHdlIGNhbGwgaXQgXGxpLCBub3QgXHNmLgorCislIFdlIGRvbid0IG5lZWQgbWF0aCBmb3IgdGhpcyBvbmUuCitcZGVmXHR0c2x7XHRlbnR0c2x9CisKKyUgRGVmYXVsdCBsZWFkaW5nLgorXG5ld2RpbWVuXHRleHRsZWFkaW5nICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKworJSBTZXQgdGhlIGJhc2VsaW5lc2tpcCB0byAjMSwgYW5kIHRoZSBsaW5lc2tpcCBhbmQgc3RydXQgc2l6ZQorJSBjb3JyZXNwb25kaW5nbHkuICBUaGVyZSBpcyBubyBkZWVwIG1lYW5pbmcgYmVoaW5kIHRoZXNlIG1hZ2ljIG51bWJlcnMKKyUgdXNlZCBhcyBmYWN0b3JzOyB0aGV5IGp1c3QgbWF0Y2ggKGNsb3NlbHkgZW5vdWdoKSB3aGF0IEtudXRoIGRlZmluZWQuCislCitcZGVmXGxpbmVza2lwZmFjdG9yey4wODMzM30KK1xkZWZcc3RydXRoZWlnaHRwZXJjZW50ey43MDgzM30KK1xkZWZcc3RydXRkZXB0aHBlcmNlbnQgey4yOTE2N30KKyUKK1xkZWZcc2V0bGVhZGluZyMxeyUKKyAgXG5vcm1hbGJhc2VsaW5lc2tpcCA9ICMxXHJlbGF4CisgIFxub3JtYWxsaW5lc2tpcCA9IFxsaW5lc2tpcGZhY3Rvclxub3JtYWxiYXNlbGluZXNraXAKKyAgXG5vcm1hbGJhc2VsaW5lcworICBcc2V0Ym94XHN0cnV0Ym94ID1caGJveHslCisgICAgXHZydWxlIHdpZHRoMHB0IGhlaWdodFxzdHJ1dGhlaWdodHBlcmNlbnRcYmFzZWxpbmVza2lwCisgICAgICAgICAgICAgICAgICAgIGRlcHRoIFxzdHJ1dGRlcHRocGVyY2VudCBcYmFzZWxpbmVza2lwCisgIH0lCit9CisKKyUgU2V0IHRoZSBmb250IG1hY3JvICMxIHRvIHRoZSBmb250IG5hbWVkICMyLCBhZGRpbmcgb24gdGhlCislIHNwZWNpZmllZCBmb250IHByZWZpeCAobm9ybWFsbHkgYGNtJykuCislICMzIGlzIHRoZSBmb250J3MgZGVzaWduIHNpemUsICM0IGlzIGEgc2NhbGUgZmFjdG9yCitcZGVmXHNldGZvbnQjMSMyIzMjNHtcZm9udCMxPVxmb250cHJlZml4IzIjMyBzY2FsZWQgIzR9CisKKyUgVXNlIGNtIGFzIHRoZSBkZWZhdWx0IGZvbnQgcHJlZml4LgorJSBUbyBzcGVjaWZ5IHRoZSBmb250IHByZWZpeCwgeW91IG11c3QgZGVmaW5lIFxmb250cHJlZml4CislIGJlZm9yZSB5b3UgcmVhZCBpbiB0ZXhpbmZvLnRleC4KK1xpZnhcZm9udHByZWZpeFx1bmRlZmluZWQKK1xkZWZcZm9udHByZWZpeHtjbX0KK1xmaQorJSBTdXBwb3J0IGZvbnQgZmFtaWxpZXMgdGhhdCBkb24ndCB1c2UgdGhlIHNhbWUgbmFtaW5nIHNjaGVtZSBhcyBDTS4KK1xkZWZccm1zaGFwZXtyfQorXGRlZlxybWJzaGFwZXtieH0gICAgICAgICAgICAgICAld2hlcmUgdGhlIG5vcm1hbCBmYWNlIGlzIGJvbGQKK1xkZWZcYmZzaGFwZXtifQorXGRlZlxieHNoYXBle2J4fQorXGRlZlx0dHNoYXBle3R0fQorXGRlZlx0dGJzaGFwZXt0dH0KK1xkZWZcdHRzbHNoYXBle3NsdHR9CitcZGVmXGl0c2hhcGV7dGl9CitcZGVmXGl0YnNoYXBle2J4dGl9CitcZGVmXHNsc2hhcGV7c2x9CitcZGVmXHNsYnNoYXBle2J4c2x9CitcZGVmXHNmc2hhcGV7c3N9CitcZGVmXHNmYnNoYXBle3NzfQorXGRlZlxzY3NoYXBle2NzY30KK1xkZWZcc2Nic2hhcGV7Y3NjfQorCitcbmV3Y291bnRcbWFpbm1hZ3N0ZXAKK1xpZnhcYmlnZ2VyXHJlbGF4CisgICUgbm90IHJlYWxseSBzdXBwb3J0ZWQuCisgIFxtYWlubWFnc3RlcD1cbWFnc3RlcDEKKyAgXHNldGZvbnRcdGV4dHJtXHJtc2hhcGV7MTJ9ezEwMDB9CisgIFxzZXRmb250XHRleHR0dFx0dHNoYXBlezEyfXsxMDAwfQorXGVsc2UKKyAgXG1haW5tYWdzdGVwPVxtYWdzdGVwaGFsZgorICBcc2V0Zm9udFx0ZXh0cm1ccm1zaGFwZXsxMH17XG1haW5tYWdzdGVwfQorICBcc2V0Zm9udFx0ZXh0dHRcdHRzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXGZpCislIEluc3RlYWQgb2YgY21iMTAsIHlvdSBtYXkgd2FudCB0byB1c2UgY21ieDEwLgorJSBjbWJ4MTAgaXMgYSBwcmV0dGllciBmb250IG9uIGl0cyBvd24sIGJ1dCBjbWIxMAorJSBsb29rcyBiZXR0ZXIgd2hlbiBlbWJlZGRlZCBpbiBhIGxpbmUgd2l0aCBjbXIxMAorJSAoaW4gQm9iJ3Mgb3BpbmlvbikuCitcc2V0Zm9udFx0ZXh0YmZcYmZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzbFxzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dHNsXHR0c2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorCislIEEgZmV3IGZvbnRzIGZvciBAZGVmdW4sIGV0Yy4KK1xzZXRmb250XGRlZmJmXGJ4c2hhcGV7MTB9e1xtYWdzdGVwMX0gJXdhcyAxMzE0Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcDF9CitcZGVmXGRme1xsZXRcdGVudHQ9XGRlZnR0IFxsZXRcdGVuYmYgPSBcZGVmYmYgXGJmfQorCislIEZvbnRzIGZvciBpbmRpY2VzLCBmb290bm90ZXMsIHNtYWxsIGV4YW1wbGVzICg5cHQpLgorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHR0XHR0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGxpdFxpdHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2Zcc2ZzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2Ncc2NzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9CitcZm9udFxzbWFsbGVyaT1jbW1pOAorXGZvbnRcc21hbGxlcnN5PWNtc3k4CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2U6Citcc2V0Zm9udFx0aXRsZXJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDN9Citcc2V0Zm9udFx0aXRsZWl0XGl0YnNoYXBlezEwfXtcbWFnc3RlcDR9Citcc2V0Zm9udFx0aXRsZXNsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDR9Citcc2V0Zm9udFx0aXRsZXR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDN9Citcc2V0Zm9udFx0aXRsZXR0c2xcdHRzbHNoYXBlezEwfXtcbWFnc3RlcDR9Citcc2V0Zm9udFx0aXRsZXNmXHNmYnNoYXBlezE3fXtcbWFnc3RlcDF9CitcbGV0XHRpdGxlYmY9XHRpdGxlcm0KK1xzZXRmb250XHRpdGxlc2Ncc2Nic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xmb250XHRpdGxlaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMworXGZvbnRcdGl0bGVzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwNAorXGRlZlxhdXRob3JybXtcc2Vjcm19CitcZGVmXGF1dGhvcnR0e1xzZWN0dH0KKworJSBDaGFwdGVyIChhbmQgdW5udW1iZXJlZCkgZm9udHMgKDE3LjI4cHQpLgorXHNldGZvbnRcY2hhcHJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH0KK1xsZXRcY2hhcGJmPVxjaGFwcm0KK1xzZXRmb250XGNoYXBzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXGZvbnRcY2hhcGk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDIKK1xmb250XGNoYXBzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMworCislIFNlY3Rpb24gZm9udHMgKDE0LjRwdCkuCitcc2V0Zm9udFxzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9CitcbGV0XHNlY2JmXHNlY3JtCitcc2V0Zm9udFxzZWNzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXGZvbnRcc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMQorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMy4xNXB0KS4KK1xzZXRmb250XHNzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY2l0XGl0YnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NsXHNsYnNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3R0XHR0YnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9Citcc2V0Zm9udFxzc2VjdHRzbFx0dHNsc2hhcGV7MTB9ezEzMTV9Citcc2V0Zm9udFxzc2Vjc2Zcc2Zic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xsZXRcc3NlY2JmXHNzZWNybQorXHNldGZvbnRcc3NlY3NjXHNjYnNoYXBlezEwfXtcbWFnc3RlcDF9CitcZm9udFxzc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwaGFsZgorXGZvbnRcc3NlY3N5PWNtc3kxMCBzY2FsZWQgMTMxNQorJSBUaGUgc21hbGxjYXBzIGFuZCBzeW1ib2wgZm9udHMgc2hvdWxkIGFjdHVhbGx5IGJlIHNjYWxlZCBcbWFnc3RlcDEuNSwKKyUgYnV0IHRoYXQgaXMgbm90IGEgc3RhbmRhcmQgbWFnbmlmaWNhdGlvbi4KKworJSBJbiBvcmRlciBmb3IgdGhlIGZvbnQgY2hhbmdlcyB0byBhZmZlY3QgbW9zdCBtYXRoIHN5bWJvbHMgYW5kIGxldHRlcnMsCislIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBcdGV4dGZvbnQgb2YgdGhlIHN0YW5kYXJkIGZhbWlsaWVzLiAgU2luY2UKKyUgdGV4aW5mbyBkb2Vzbid0IGFsbG93IGZvciBwcm9kdWNpbmcgc3Vic2NyaXB0cyBhbmQgc3VwZXJzY3JpcHRzIGV4Y2VwdAorJSBpbiB0aGUgbWFpbiB0ZXh0LCB3ZSBkb24ndCBib3RoZXIgdG8gcmVzZXQgXHNjcmlwdGZvbnQgYW5kCislIFxzY3JpcHRzY3JpcHRmb250ICh3aGljaCB3b3VsZCBhbHNvIHJlcXVpcmUgbG9hZGluZyBhIGxvdCBtb3JlIGZvbnRzKS4KKyUKK1xkZWZccmVzZXRtYXRoZm9udHN7JQorICBcdGV4dGZvbnQwPVx0ZW5ybSBcdGV4dGZvbnQxPVx0ZW5pIFx0ZXh0Zm9udDI9XHRlbnN5CisgIFx0ZXh0Zm9udFxpdGZhbT1cdGVuaXQgXHRleHRmb250XHNsZmFtPVx0ZW5zbCBcdGV4dGZvbnRcYmZmYW09XHRlbmJmCisgIFx0ZXh0Zm9udFx0dGZhbT1cdGVudHQgXHRleHRmb250XHNmZmFtPVx0ZW5zZgorfQorCislIFRoZSBmb250LWNoYW5naW5nIGNvbW1hbmRzIHJlZGVmaW5lIHRoZSBtZWFuaW5ncyBvZiBcdGVuU1RZTEUsIGluc3RlYWQKKyUgb2YganVzdCBcU1RZTEUuICBXZSBkbyB0aGlzIHNvIHRoYXQgZm9udCBjaGFuZ2VzIHdpbGwgY29udGludWUgdG8gd29yaworJSBpbiBtYXRoIG1vZGUsIHdoZXJlIGl0IGlzIHRoZSBjdXJyZW50IFxmYW0gdGhhdCBpcyByZWxldmFudCBpbiBtb3N0CislIGNhc2VzLCBub3QgdGhlIGN1cnJlbnQgZm9udC4gIFBsYWluIFRlWCBkb2VzIFxkZWZcYmZ7XGZhbT1cYmZmYW0KKyUgXHRlbmJmfSwgZm9yIGV4YW1wbGUuICBCeSByZWRlZmluaW5nIFx0ZW5iZiwgd2Ugb2J2aWF0ZSB0aGUgbmVlZCB0bworJSByZWRlZmluZSBcYmYgaXRzZWxmLgorXGRlZlx0ZXh0Zm9udHN7JQorICBcbGV0XHRlbnJtPVx0ZXh0cm0gXGxldFx0ZW5pdD1cdGV4dGl0IFxsZXRcdGVuc2w9XHRleHRzbAorICBcbGV0XHRlbmJmPVx0ZXh0YmYgXGxldFx0ZW50dD1cdGV4dHR0IFxsZXRcc21hbGxjYXBzPVx0ZXh0c2MKKyAgXGxldFx0ZW5zZj1cdGV4dHNmIFxsZXRcdGVuaT1cdGV4dGkgXGxldFx0ZW5zeT1cdGV4dHN5IFxsZXRcdGVudHRzbD1cdGV4dHR0c2wKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ319CitcZGVmXHRpdGxlZm9udHN7JQorICBcbGV0XHRlbnJtPVx0aXRsZXJtIFxsZXRcdGVuaXQ9XHRpdGxlaXQgXGxldFx0ZW5zbD1cdGl0bGVzbAorICBcbGV0XHRlbmJmPVx0aXRsZWJmIFxsZXRcdGVudHQ9XHRpdGxldHQgXGxldFxzbWFsbGNhcHM9XHRpdGxlc2MKKyAgXGxldFx0ZW5zZj1cdGl0bGVzZiBcbGV0XHRlbmk9XHRpdGxlaSBcbGV0XHRlbnN5PVx0aXRsZXN5CisgIFxsZXRcdGVudHRzbD1cdGl0bGV0dHNsCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3syNXB0fX0KK1xkZWZcdGl0bGVmb250IzF7e1x0aXRsZWZvbnRzXHJtICMxfX0KK1xkZWZcY2hhcGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cY2hhcHJtIFxsZXRcdGVuaXQ9XGNoYXBpdCBcbGV0XHRlbnNsPVxjaGFwc2wKKyAgXGxldFx0ZW5iZj1cY2hhcGJmIFxsZXRcdGVudHQ9XGNoYXB0dCBcbGV0XHNtYWxsY2Fwcz1cY2hhcHNjCisgIFxsZXRcdGVuc2Y9XGNoYXBzZiBcbGV0XHRlbmk9XGNoYXBpIFxsZXRcdGVuc3k9XGNoYXBzeSBcbGV0XHRlbnR0c2w9XGNoYXB0dHNsCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxOXB0fX0KK1xkZWZcc2VjZm9udHN7JQorICBcbGV0XHRlbnJtPVxzZWNybSBcbGV0XHRlbml0PVxzZWNpdCBcbGV0XHRlbnNsPVxzZWNzbAorICBcbGV0XHRlbmJmPVxzZWNiZiBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc2Vjc2MKKyAgXGxldFx0ZW5zZj1cc2Vjc2YgXGxldFx0ZW5pPVxzZWNpIFxsZXRcdGVuc3k9XHNlY3N5IFxsZXRcdGVudHRzbD1cc2VjdHRzbAorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTZwdH19CitcZGVmXHN1YnNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc3NlY3JtIFxsZXRcdGVuaXQ9XHNzZWNpdCBcbGV0XHRlbnNsPVxzc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc3NlY2JmIFxsZXRcdGVudHQ9XHNzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc3NlY3NjCisgIFxsZXRcdGVuc2Y9XHNzZWNzZiBcbGV0XHRlbmk9XHNzZWNpIFxsZXRcdGVuc3k9XHNzZWNzeSBcbGV0XHRlbnR0c2w9XHNzZWN0dHNsCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxNXB0fX0KK1xsZXRcc3Vic3Vic2VjZm9udHMgPSBcc3Vic2VjZm9udHMgJSBNYXliZSBtYWtlIHNzc2VjIGZvbnRzIHNjYWxlZCBtYWdzdGVwaGFsZj8KK1xkZWZcc21hbGxmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxscm0gXGxldFx0ZW5pdD1cc21hbGxpdCBcbGV0XHRlbnNsPVxzbWFsbHNsCisgIFxsZXRcdGVuYmY9XHNtYWxsYmYgXGxldFx0ZW50dD1cc21hbGx0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxzYworICBcbGV0XHRlbnNmPVxzbWFsbHNmIFxsZXRcdGVuaT1cc21hbGxpIFxsZXRcdGVuc3k9XHNtYWxsc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbHR0c2wKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezEwLjVwdH19CitcZGVmXHNtYWxsZXJmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxsZXJybSBcbGV0XHRlbml0PVxzbWFsbGVyaXQgXGxldFx0ZW5zbD1cc21hbGxlcnNsCisgIFxsZXRcdGVuYmY9XHNtYWxsZXJiZiBcbGV0XHRlbnR0PVxzbWFsbGVydHQgXGxldFxzbWFsbGNhcHM9XHNtYWxsZXJzYworICBcbGV0XHRlbnNmPVxzbWFsbGVyc2YgXGxldFx0ZW5pPVxzbWFsbGVyaSBcbGV0XHRlbnN5PVxzbWFsbGVyc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbGVydHRzbAorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7OS41cHR9fQorCislIFNldCB0aGUgZm9udHMgdG8gdXNlIHdpdGggdGhlIEBzbWFsbC4uLiBlbnZpcm9ubWVudHMuCitcbGV0XHNtYWxsZXhhbXBsZWZvbnRzID0gXHNtYWxsZm9udHMKKworJSBBYm91dCBcc21hbGxleGFtcGxlZm9udHMuICBJZiB3ZSB1c2UgXHNtYWxsZm9udHMgKDlwdCksIEBzbWFsbGV4YW1wbGUKKyUgY2FuIGZpdCB0aGlzIG1hbnkgY2hhcmFjdGVyczoKKyUgICA4LjV4MTE9ODYgICBzbWFsbGJvb2s9NzIgIGE0PTkwICBhNT02OQorJSBJZiB3ZSB1c2UgXHNtYWxsZXJmb250cyAoOHB0KSwgdGhlbiB3ZSBjYW4gZml0IHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorJSAgIDguNXgxMT05MCsgIHNtYWxsYm9vaz04MCAgYTQ9OTArICBhNT03NworJSBGb3IgbWUsIHN1YmplY3RpdmVseSwgdGhlIGZldyBleHRyYSBjaGFyYWN0ZXJzIHRoYXQgZml0IGFyZW4ndCB3b3J0aAorJSB0aGUgYWRkaXRpb25hbCBzbWFsbG5lc3Mgb2YgOHB0LiAgU28gSSdtIG1ha2luZyB0aGUgZGVmYXVsdCA5cHQuCislCislIEJ5IHRoZSB3YXksIGZvciBjb21wYXJpc29uLCBoZXJlJ3Mgd2hhdCBmaXRzIHdpdGggQGV4YW1wbGUgKDEwcHQpOgorJSAgIDguNXgxMT03MSAgc21hbGxib29rPTYwICBhND03NSAgYTU9NTgKKyUKKyUgSSB3aXNoIHdlIHVzZWQgQTQgcGFwZXIgb24gdGhpcyBzaWRlIG9mIHRoZSBBdGxhbnRpYy4KKyUKKyUgLS1rYXJsLCAyNGphbjAzLgorCisKKyUgU2V0IHVwIHRoZSBkZWZhdWx0IGZvbnRzLCBzbyB3ZSBjYW4gdXNlIHRoZW0gZm9yIGNyZWF0aW5nIGJveGVzLgorJQorXHRleHRmb250cworCislIERlZmluZSB0aGVzZSBzbyB0aGV5IGNhbiBiZSBlYXNpbHkgY2hhbmdlZCBmb3Igb3RoZXIgZm9udHMuCitcZGVmXGFuZ2xlbGVmdHskXGxhbmdsZSR9CitcZGVmXGFuZ2xlcmlnaHR7JFxyYW5nbGUkfQorCislIENvdW50IGRlcHRoIGluIGZvbnQtY2hhbmdlcywgZm9yIGVycm9yIGNoZWNrcworXG5ld2NvdW50XGZvbnRkZXB0aCBcZm9udGRlcHRoPTAKKworJSBGb250cyBmb3Igc2hvcnQgdGFibGUgb2YgY29udGVudHMuCitcc2V0Zm9udFxzaG9ydGNvbnRybVxybXNoYXBlezEyfXsxMDAwfQorXHNldGZvbnRcc2hvcnRjb250YmZcYnhzaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udHNsXHNsc2hhcGV7MTJ9ezEwMDB9Citcc2V0Zm9udFxzaG9ydGNvbnR0dFx0dHNoYXBlezEyfXsxMDAwfQorCislJSBBZGQgc2NyaWJlLWxpa2UgZm9udCBlbnZpcm9ubWVudHMsIHBsdXMgQGwgZm9yIGlubGluZSBsaXNwICh1c3VhbGx5IHNhbnMKKyUlIHNlcmlmKSBhbmQgQGlpIGZvciBUZVggaXRhbGljCisKKyUgXHNtYXJ0aXRhbGlje0FSR30gb3V0cHV0cyBhcmcgaW4gaXRhbGljcywgZm9sbG93ZWQgYnkgYW4gaXRhbGljIGNvcnJlY3Rpb24KKyUgdW5sZXNzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIHN1Y2ggYXMgbm90IHRvIG5lZWQgb25lLgorXGRlZlxzbWFydGl0YWxpY3h7XGlmeFxuZXh0LFxlbHNlXGlmeFxuZXh0LVxlbHNlXGlmeFxuZXh0LlxlbHNlCisgICAgICAgICAgICAgICAgICAgIFxwdGV4c2xhc2hcZmlcZmlcZml9CitcZGVmXHNtYXJ0c2xhbnRlZCMxe3tcaWZ1c2luZ3R0XHR0c2xcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KK1xkZWZcc21hcnRpdGFsaWMjMXt7XGlmdXNpbmd0dFx0dHNsXGl0ICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKK1xsZXRcaT1cc21hcnRpdGFsaWMKK1xsZXRcdmFyPVxzbWFydHNsYW50ZWQKK1xsZXRcZGZuPVxzbWFydHNsYW50ZWQKK1xsZXRcZW1waD1cc21hcnRpdGFsaWMKK1xsZXRcY2l0ZT1cc21hcnRzbGFudGVkCisKK1xkZWZcYiMxe3tcYmYgIzF9fQorXGxldFxzdHJvbmc9XGIKKworJSBXZSBjYW4ndCBqdXN0IHVzZSBcZXhoeXBoZW5wZW5hbHR5LCBiZWNhdXNlIHRoYXQgb25seSBoYXMgZWZmZWN0IGF0CislIHRoZSBlbmQgb2YgYSBwYXJhZ3JhcGguICBSZXN0b3JlIG5vcm1hbCBoeXBoZW5hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZQorJSBncm91cCB3aXRoaW4gd2hpY2ggXG5vaHlwaGVuYXRpb24gaXMgcHJlc3VtYWJseSBjYWxsZWQuCislCitcZGVmXG5vaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IC0xICBcYWZ0ZXJncm91cFxyZXN0b3JlaHlwaGVuYXRpb259CitcZGVmXHJlc3RvcmVoeXBoZW5hdGlvbntcaHlwaGVuY2hhclxmb250ID0gYC0gfQorCislIFNldCBzZmNvZGUgdG8gbm9ybWFsIGZvciB0aGUgY2hhcnMgdGhhdCB1c3VhbGx5IGhhdmUgYW5vdGhlciB2YWx1ZS4KKyUgQ2FuJ3QgdXNlIHBsYWluJ3MgXGZyZW5jaHNwYWNpbmcgYmVjYXVzZSBpdCB1c2VzIHRoZSBgXHggbm90YXRpb24sIGFuZAorJSBzb21ldGltZXMgXHggaGFzIGFuIGFjdGl2ZSBkZWZpbml0aW9uIHRoYXQgbWVzc2VzIHRoaW5ncyB1cC4KKyUKK1xjYXRjb2RlYEA9MTEKKyAgXGRlZlxmcmVuY2hzcGFjaW5neyUKKyAgICBcc2Zjb2RlXGRvdENoYXIgID1cQG0gXHNmY29kZVxxdWVzdENoYXI9XEBtIFxzZmNvZGVcZXhjbGFtQ2hhcj1cQG0KKyAgICBcc2Zjb2RlXGNvbG9uQ2hhcj1cQG0gXHNmY29kZVxzZW1pQ2hhciA9XEBtIFxzZmNvZGVcY29tbWFDaGFyID1cQG0KKyAgfQorXGNhdGNvZGVgQD1cb3RoZXIKKworXGRlZlx0IzF7JQorICB7XHR0IFxyYXdiYWNrc2xhc2ggXGZyZW5jaHNwYWNpbmcgIzF9JQorICBcbnVsbAorfQorXGxldFx0dGZvbnQ9XHQKK1xkZWZcc2FtcCMxe2BcdGNsb3NleyMxfSdcbnVsbH0KK1xzZXRmb250XGtleXJtXHJtc2hhcGV7OH17MTAwMH0KK1xmb250XGtleXN5PWNtc3k5CitcZGVmXGtleSMxe3tca2V5cm1cdGV4dGZvbnQyPVxrZXlzeSBcbGVhdmV2bW9kZVxoYm94eyUKKyAgXHJhaXNlMC40cHRcaGJveHtcYW5nbGVsZWZ0fVxrZXJuLS4wOGVtXHZ0b3B7JQorICAgIFx2Ym94e1xocnVsZVxrZXJuLTAuNHB0CisgICAgIFxoYm94e1xyYWlzZTAuNHB0XGhib3h7XHZwaGFudG9te1xhbmdsZWxlZnR9fSMxfX0lCisgICAgXGtlcm4tMC40cHRcaHJ1bGV9JQorICBca2Vybi0uMDZlbVxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlcmlnaHR9fX19CislIFRoZSBvbGQgZGVmaW5pdGlvbiwgd2l0aCBubyBsb3plbmdlOgorJVxkZWZca2V5ICMxe3tcdHRzbCBcbm9oeXBoZW5hdGlvbiBcdXBwZXJjYXNleyMxfX1cbnVsbH0KK1xkZWZcY3RybCAjMXt7XHR0IFxyYXdiYWNrc2xhc2ggXGhhdH0jMX0KKworJSBAZmlsZSwgQG9wdGlvbiBhcmUgdGhlIHNhbWUgYXMgQHNhbXAuCitcbGV0XGZpbGU9XHNhbXAKK1xsZXRcb3B0aW9uPVxzYW1wCisKKyUgQGNvZGUgaXMgYSBtb2RpZmljYXRpb24gb2YgQHQsCislIHdoaWNoIG1ha2VzIHNwYWNlcyB0aGUgc2FtZSBzaXplIGFzIG5vcm1hbCBpbiB0aGUgc3Vycm91bmRpbmcgdGV4dC4KK1xkZWZcdGNsb3NlIzF7JQorICB7JQorICAgICUgQ2hhbmdlIG5vcm1hbCBpbnRlcndvcmQgc3BhY2UgdG8gYmUgc2FtZSBhcyBmb3IgdGhlIGN1cnJlbnQgZm9udC4KKyAgICBcc3BhY2Vza2lwID0gXGZvbnRkaW1lbjJcZm9udAorICAgICUKKyAgICAlIFN3aXRjaCB0byB0eXBld3JpdGVyLgorICAgIFx0dAorICAgICUKKyAgICAlIEJ1dCBgXCAnIHByb2R1Y2VzIHRoZSBsYXJnZSB0eXBld3JpdGVyIGludGVyd29yZCBzcGFjZS4KKyAgICBcZGVmXCB7e1xzcGFjZXNraXAgPSAwcHR7fSB9fSUKKyAgICAlCisgICAgJSBUdXJuIG9mZiBoeXBoZW5hdGlvbi4KKyAgICBcbm9oeXBoZW5hdGlvbgorICAgICUKKyAgICBccmF3YmFja3NsYXNoCisgICAgXGZyZW5jaHNwYWNpbmcKKyAgICAjMSUKKyAgfSUKKyAgXG51bGwKK30KKworJSBXZSAqbXVzdCogdHVybiBvbiBoeXBoZW5hdGlvbiBhdCBgLScgYW5kIGBfJyBpbiBcY29kZS4KKyUgT3RoZXJ3aXNlLCBpdCBpcyB0b28gaGFyZCB0byBhdm9pZCBvdmVyZnVsbCBoYm94ZXMKKyUgaW4gdGhlIEVtYWNzIG1hbnVhbCwgdGhlIExpYnJhcnkgbWFudWFsLCBldGMuCisKKyUgVW5mb3J0dW5hdGVseSwgVGVYIHVzZXMgb25lIHBhcmFtZXRlciAoXGh5cGhlbmNoYXIpIHRvIGNvbnRyb2wKKyUgYm90aCBoeXBoZW5hdGlvbiBhdCAtIGFuZCBoeXBoZW5hdGlvbiB3aXRoaW4gd29yZHMuCislIFdlIG11c3QgdGhlcmVmb3JlIHR1cm4gdGhlbSBib3RoIG9mZiAoXHRjbG9zZSBkb2VzIHRoYXQpCislIGFuZCBhcnJhbmdlIGV4cGxpY2l0bHkgdG8gaHlwaGVuYXRlIGF0IGEgZGFzaC4KKyUgIC0tIHJtcy4KK3sKKyAgXGNhdGNvZGVgXC09XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICUKKyAgXGdsb2JhbFxkZWZcY29kZXtcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlYFwtPVxhY3RpdmUgXGxldC1cY29kZWRhc2gKKyAgICBcY2F0Y29kZWBcXz1cYWN0aXZlIFxsZXRfXGNvZGV1bmRlcgorICAgIFxjb2RleAorICB9CisgICUKKyAgJSBJZiB3ZSBlbmQgdXAgd2l0aCBhbnkgYWN0aXZlIC0gY2hhcmFjdGVycyB3aGVuIGhhbmRsaW5nIHRoZSBpbmRleCwKKyAgJSBqdXN0IHRyZWF0IHRoZW0gYXMgYSBub3JtYWwgLS4KKyAgXGdsb2JhbFxkZWZcaW5kZXhicmVha3N7XGNhdGNvZGVgXC09XGFjdGl2ZSBcbGV0LVxyZWFsZGFzaH0KK30KKworXGRlZlxyZWFsZGFzaHstfQorXGRlZlxjb2RlZGFzaHstXGRpc2NyZXRpb25hcnl7fXt9e319CitcZGVmXGNvZGV1bmRlcnslCisgICUgdGhpcyBpcyBhbGwgc28gQG1hdGh7QGNvZGV7dmFyX25hbWV9KzF9IGNhbiB3b3JrLiAgSW4gbWF0aCBtb2RlLCBfCisgICUgaXMgImFjdGl2ZSIgKG1hdGhjb2RlIjgwMDApIGFuZCBcbm9ybWFsdW5kZXJzY29yZSAob3IgXGNoYXI5NSwgZXRjLikKKyAgJSB3aWxsIHRoZXJlZm9yZSBleHBhbmQgdGhlIGFjdGl2ZSBkZWZpbml0aW9uIG9mIF8sIHdoaWNoIGlzIHVzCisgICUgKGluc2lkZSBAY29kZSB0aGF0IGlzKSwgdGhlcmVmb3JlIGFuIGVuZGxlc3MgbG9vcC4KKyAgXGlmdXNpbmd0dHtcaWZtbW9kZQorICAgICAgICAgICAgICAgXG1hdGhjaGFyIjA3NUYgJSBjbGFzcyAwPW9yZGluYXJ5LCBmYW1pbHkgNz10dGZhbSwgcG9zIDB4NUY9Xy4KKyAgICAgICAgICAgICBcZWxzZVxub3JtYWx1bmRlcnNjb3JlIFxmaQorICAgICAgICAgICAgIFxkaXNjcmV0aW9uYXJ5e317fXt9fSUKKyAgICAgICAgICAgIHtcX30lCit9CitcZGVmXGNvZGV4ICMxe1x0Y2xvc2V7IzF9XGVuZGdyb3VwfQorCislIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKKyUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCisKKyUgQGtiZGlucHV0c3R5bGUgLS0gYXJnIGlzIGBkaXN0aW5jdCcgKEBrYmQgdXNlcyBzbGFudGVkIHR0eSBmb250IGFsd2F5cyksCislICAgYGV4YW1wbGUnIChAa2JkIHVzZXMgdHRzbCBvbmx5IGluc2lkZSBvZiBAZXhhbXBsZSBhbmQgZnJpZW5kcyksCislICAgb3IgYGNvZGUnIChAa2JkIHVzZXMgbm9ybWFsIHR0eSBmb250IGFsd2F5cykuCitcZGVmXGtiZGlucHV0c3R5bGV7XHBhcnNlYXJnXGtiZGlucHV0c3R5bGV4eHh9CitcZGVmXGtiZGlucHV0c3R5bGV4eHgjMXslCisgIFxkZWZcYXJneyMxfSUKKyAgXGlmeFxhcmdcd29yZGRpc3RpbmN0CisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHRzbH0lCisgIFxlbHNlXGlmeFxhcmdcd29yZGV4YW1wbGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHRzbH1cZ2RlZlxrYmRmb250e1x0dH0lCisgIFxlbHNlXGlmeFxhcmdcd29yZGNvZGUKKyAgICBcZ2RlZlxrYmRleGFtcGxlZm9udHtcdHR9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAa2JkaW5wdXRzdHlsZSBvcHRpb24gYFxhcmcnfSUKKyAgXGZpXGZpXGZpCit9CitcZGVmXHdvcmRkaXN0aW5jdHtkaXN0aW5jdH0KK1xkZWZcd29yZGV4YW1wbGV7ZXhhbXBsZX0KK1xkZWZcd29yZGNvZGV7Y29kZX0KKworJSBEZWZhdWx0IGlzIGBkaXN0aW5jdC4nCitca2JkaW5wdXRzdHlsZSBkaXN0aW5jdAorCitcZGVmXHhrZXl7XGtleX0KK1xkZWZca2JkZm9vIzEjMiMzXHBhcntcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKK1xpZnhcb25lXHhrZXlcaWZ4XHRocmVleFx0aHJlZSBca2V5eyMyfSUKK1xlbHNle1x0Y2xvc2V7XGtiZGZvbnRcbG9va319XGZpCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaX0KKworJSBGb3IgQHVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KK1xsZXRcdXJsPVxjb2RlCitcbGV0XGVudj1cY29kZQorXGxldFxjb21tYW5kPVxjb2RlCisKKyUgQHVyZWYgKGFiYnJldmlhdGlvbiBmb3IgYHVybHJlZicpIHRha2VzIGFuIG9wdGlvbmFsIChjb21tYS1zZXBhcmF0ZWQpCislIHNlY29uZCBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSB0ZXh0IHRvIGRpc3BsYXkgYW5kIGFuIG9wdGlvbmFsIHRoaXJkCislIGFyZyBhcyB0ZXh0IHRvIGRpc3BsYXkgaW5zdGVhZCBvZiAocmF0aGVyIHRoYW4gaW4gYWRkaXRpb24gdG8pIHRoZSB1cmwKKyUgaXRzZWxmLiAgRmlyc3QgKG1hbmRhdG9yeSkgYXJnIGlzIHRoZSB1cmwuICBQZXJoYXBzIGV2ZW50dWFsbHkgcHV0IGluCislIGEgaHlwZXJ0ZXggXHNwZWNpYWwgaGVyZS4KKyUKK1xkZWZcdXJlZiMxe1xkb3VyZWYgIzEsLCxcZmluaXNofQorXGRlZlxkb3VyZWYjMSwjMiwjMywjNFxmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgXHVuc2Vwc3BhY2VzCisgIFxwZGZ1cmx7IzF9JQorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXHVuaGJveDAgJSB0aGlyZCBhcmcgZ2l2ZW4sIHNob3cgb25seSB0aGF0CisgIFxlbHNlCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcaWZkaW1cd2QwID4gMHB0CisgICAgICBcaWZwZGYKKyAgICAgICAgXHVuaGJveDAgICAgICAgICAgICAgJSBQREY6IDJuZCBhcmcgZ2l2ZW4sIHNob3cgb25seSBpdAorICAgICAgXGVsc2UKKyAgICAgICAgXHVuaGJveDBcIChcY29kZXsjMX0pJSBEVkk6IDJuZCBhcmcgZ2l2ZW4sIHNob3cgYm90aCBpdCBhbmQgdXJsCisgICAgICBcZmkKKyAgICBcZWxzZQorICAgICAgXGNvZGV7IzF9JSBvbmx5IHVybCBnaXZlbiwgc28gc2hvdyBpdAorICAgIFxmaQorICBcZmkKKyAgXGVuZGxpbmsKK1xlbmRncm91cH0KKworJSBybXMgZG9lcyBub3QgbGlrZSBhbmdsZSBicmFja2V0cyAtLWthcmwsIDE3bWF5OTcuCislIFNvIG5vdyBAZW1haWwgaXMganVzdCBsaWtlIEB1cmVmLCB1bmxlc3Mgd2UgYXJlIHBkZi4KKyUKKyVcZGVmXGVtYWlsIzF7XGFuZ2xlbGVmdHtcdHQgIzF9XGFuZ2xlcmlnaHR9CitcaWZwZGYKKyAgXGRlZlxlbWFpbCMxe1xkb2VtYWlsIzEsLFxmaW5pc2h9CisgIFxkZWZcZG9lbWFpbCMxLCMyLCMzXGZpbmlzaHtcYmVnaW5ncm91cAorICAgIFx1bnNlcHNwYWNlcworICAgIFxwZGZ1cmx7bWFpbHRvOiMxfSUKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDA+MHB0XHVuaGJveDBcZWxzZVxjb2RleyMxfVxmaQorICAgIFxlbmRsaW5rCisgIFxlbmRncm91cH0KK1xlbHNlCisgIFxsZXRcZW1haWw9XHVyZWYKK1xmaQorCislIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgYSB0eXBld3JpdGVyIGZvbnQuICBTaW5jZSBhbGwgdGhlCislIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnRzIGhhdmUgemVybyBpbnRlcndvcmQgc3RyZXRjaCAoYW5kCislIHNocmluayksIGFuZCBpdCBpcyByZWFzb25hYmxlIHRvIGV4cGVjdCBhbGwgdHlwZXdyaXRlciBmb250cyB0byBoYXZlCislIHRoaXMgcHJvcGVydHksIHdlIGNhbiBjaGVjayB0aGF0IGZvbnQgcGFyYW1ldGVyLgorJQorXGRlZlxpZm1vbm9zcGFjZXtcaWZkaW1cZm9udGRpbWVuM1xmb250PTBwdCB9CisKKyUgVHlwZXNldCBhIGRpbWVuc2lvbiwgZS5nLiwgYGluJyBvciBgcHQnLiAgVGhlIG9ubHkgcmVhc29uIGZvciB0aGUKKyUgYXJndW1lbnQgaXMgdG8gbWFrZSB0aGUgaW5wdXQgbG9vayByaWdodDogQGRtbntwdH0gaW5zdGVhZCBvZiBAZG1ue31wdC4KKyUKK1xkZWZcZG1uIzF7XHRoaW5zcGFjZSAjMX0KKworXGRlZlxrYmQjMXtcZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZGZvb1xsb29rPz9ccGFyfQorCislIEBsIHdhcyBuZXZlciBkb2N1bWVudGVkIHRvIG1lYW4gYGBzd2l0Y2ggdG8gdGhlIExpc3AgZm9udCcnLAorJSBhbmQgaXQgaXMgbm90IHVzZWQgYXMgc3VjaCBpbiBhbnkgbWFudWFsIEkgY2FuIGZpbmQuICBXZSBuZWVkIGl0IGZvcgorJSBQb2xpc2ggc3VwcHJlc3NlZC1sLiAgLS1rYXJsLCAyMnNlcDk2LgorJVxkZWZcbCMxe3tcbGkgIzF9XG51bGx9CisKKyUgRXhwbGljaXQgZm9udCBjaGFuZ2VzOiBAciwgQHNjLCB1bmRvY3VtZW50ZWQgQGlpLgorXGRlZlxyIzF7e1xybSAjMX19ICAgICAgICAgICAgICAlIHJvbWFuIGZvbnQKK1xkZWZcc2MjMXt7XHNtYWxsY2FwcyMxfX0gICAgICAgJSBzbWFsbGNhcHMgZm9udAorXGRlZlxpaSMxe3tcaXQgIzF9fSAgICAgICAgICAgICAlIGl0YWxpYyBmb250CisKKyUgQGFjcm9ueW0gZG93bmNhc2VzIHRoZSBhcmd1bWVudCBhbmQgcHJpbnRzIGluIHNtYWxsY2Fwcy4KK1xkZWZcYWNyb255bSMxe3tcc21hbGxjYXBzIFxsb3dlcmNhc2V7IzF9fX0KKworJSBAcG91bmRze30gaXMgYSBzdGVybGluZyBzaWduLgorXGRlZlxwb3VuZHN7e1xpdFwkfX0KKworJSBAcmVnaXN0ZXJlZHN5bWJvbCAtIFIgaW4gYSBjaXJjbGUuICBGb3Igbm93LCBvbmx5IHdvcmtzIGluIHRleHQgc2l6ZTsKKyUgd2UnZCBoYXZlIHRvIHJlZG8gdGhlIGZvbnQgbWVjaGFuaXNtIHRvIGNoYW5nZSB0aGUgXHNjcmlwdHN0eWxlIGFuZAorJSBcc2NyaXB0c2NyaXB0c3R5bGUgZm9udCBzaXplcyB0byBtYWtlIGl0IGxvb2sgcmlnaHQgaW4gaGVhZGluZ3MuCislIEFkYXB0ZWQgZnJvbSB0aGUgcGxhaW4udGV4IGRlZmluaXRpb24gb2YgXGNvcHlyaWdodC4KKyUKK1xkZWZccmVnaXN0ZXJlZHN5bWJvbHslCisgICRee3tcb29hbGlnbntcaGZpbFxyYWlzZS4wN2V4XGhib3h7JFxzY3JpcHRzdHlsZVxybSBSJH1caGZpbFxjcmNyXE9yYn19JQorICAgIH0kJQorfQorCisKK1xtZXNzYWdle3BhZ2UgaGVhZGluZ3MsfQorCitcbmV3c2tpcFx0aXRsZXBhZ2V0b3BnbHVlIFx0aXRsZXBhZ2V0b3BnbHVlID0gMS41aW4KK1xuZXdza2lwXHRpdGxlcGFnZWJvdHRvbWdsdWUgXHRpdGxlcGFnZWJvdHRvbWdsdWUgPSAycGMKKworJSBGaXJzdCB0aGUgdGl0bGUgcGFnZS4gIE11c3QgZG8gQHNldHRpdGxlIGJlZm9yZSBAdGl0bGVwYWdlLgorXG5ld2lmXGlmc2VlbmF1dGhvcgorXG5ld2lmXGlmZmluaXNoZWR0aXRsZXBhZ2UKKworJSBEbyBhbiBpbXBsaWNpdCBAY29udGVudHMgb3IgQHNob3J0Y29udGVudHMgYWZ0ZXIgQGVuZCB0aXRsZXBhZ2UgaWYgdGhlCislIHVzZXIgc2F5cyBAc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZSBvciBAc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlLgorJQorXG5ld2lmXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorIFxsZXRcc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZSA9IFxzZXRjb250ZW50c2FmdGVydGl0bGVwYWdldHJ1ZQorXG5ld2lmXGlmc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgXGxldFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UgPSBcc2V0c2hvcnRjb250ZW50c2FmdGVydGl0bGVwYWdldHJ1ZQorCitcZGVmXHNob3J0dGl0bGVwYWdle1xwYXJzZWFyZ1xzaG9ydHRpdGxlcGFnZXp6en0KK1xkZWZcc2hvcnR0aXRsZXBhZ2V6enogIzF7XGJlZ2luZ3JvdXBcaGJveHt9XHZza2lwIDEuNWluIFxjaGFwcm0gXGNlbnRlcmxpbmV7IzF9JQorICAgICAgICBcZW5kZ3JvdXBccGFnZVxoYm94e31ccGFnZX0KKworXGRlZlx0aXRsZXBhZ2V7XGJlZ2luZ3JvdXAgXHBhcmluZGVudD0wcHQgXHRleHRmb250cworICAgXGxldFxzdWJ0aXRsZXJtPVx0ZW5ybQorICAgXGRlZlxzdWJ0aXRsZWZvbnR7XHN1YnRpdGxlcm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDEzcHQgXG5vcm1hbGJhc2VsaW5lc30lCisgICAlCisgICBcZGVmXGF1dGhvcmZvbnR7XGF1dGhvcnJtIFxub3JtYWxiYXNlbGluZXNraXAgPSAxNnB0IFxub3JtYWxiYXNlbGluZXMKKyAgICAgICAgICAgICAgICAgICBcbGV0XHR0PVxhdXRob3J0dH0lCisgICAlCisgICAlIExlYXZlIHNvbWUgc3BhY2UgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBwYWdlLgorICAgXHZnbHVlXHRpdGxlcGFnZXRvcGdsdWUKKyAgICUKKyAgICUgTm93IHlvdSBjYW4gcHJpbnQgdGhlIHRpdGxlIHVzaW5nIEB0aXRsZS4KKyAgIFxkZWZcdGl0bGV7XHBhcnNlYXJnXHRpdGxlenp6fSUKKyAgIFxkZWZcdGl0bGV6enojIzF7XGxlZnRsaW5le1x0aXRsZWZvbnRzXHJtICMjMX0KKyAgICAgICAgICAgICAgICAgICAgJSBwcmludCBhIHJ1bGUgYXQgdGhlIHBhZ2UgYm90dG9tIGFsc28uCisgICAgICAgICAgICAgICAgICAgIFxmaW5pc2hlZHRpdGxlcGFnZWZhbHNlCisgICAgICAgICAgICAgICAgICAgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDRwdCB3aWR0aCBcaHNpemUgXHZza2lwNHB0fSUKKyAgICUgTm8gcnVsZSBhdCBwYWdlIGJvdHRvbSB1bmxlc3Mgd2UgcHJpbnQgb25lIGF0IHRoZSB0b3Agd2l0aCBAdGl0bGUuCisgICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCisgICAlCisgICAlIE5vdyB5b3UgY2FuIHB1dCB0ZXh0IHVzaW5nIEBzdWJ0aXRsZS4KKyAgIFxkZWZcc3VidGl0bGV7XHBhcnNlYXJnXHN1YnRpdGxlenp6fSUKKyAgIFxkZWZcc3VidGl0bGV6enojIzF7e1xzdWJ0aXRsZWZvbnQgXHJpZ2h0bGluZXsjIzF9fX0lCisgICAlCisgICAlIEBhdXRob3Igc2hvdWxkIGNvbWUgbGFzdCwgYnV0IG1heSBjb21lIG1hbnkgdGltZXMuCisgICBcZGVmXGF1dGhvcntccGFyc2VhcmdcYXV0aG9yenp6fSUKKyAgIFxkZWZcYXV0aG9yenp6IyMxe1xpZnNlZW5hdXRob3JcZWxzZVx2c2tpcCAwcHQgcGx1cyAxZmlsbGxcc2VlbmF1dGhvcnRydWVcZmkKKyAgICAgIHtcYXV0aG9yZm9udCBcbGVmdGxpbmV7IyMxfX19JQorICAgJQorICAgJSBNb3N0IHRpdGxlIGBgcGFnZXMnJyBhcmUgYWN0dWFsbHkgdHdvIHBhZ2VzIGxvbmcsIHdpdGggc3BhY2UKKyAgICUgYXQgdGhlIHRvcCBvZiB0aGUgc2Vjb25kLiAgV2UgZG9uJ3Qgd2FudCB0aGUgcmFnZ2VkIGxlZnQgb24gdGhlIHNlY29uZC4KKyAgIFxsZXRcb2xkcGFnZSA9IFxwYWdlCisgICBcZGVmXHBhZ2V7JQorICAgICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorICAgICAgICAgXGZpbmlzaHRpdGxlcGFnZQorICAgICAgXGZpCisgICAgICBcb2xkcGFnZQorICAgICAgXGxldFxwYWdlID0gXG9sZHBhZ2UKKyAgICAgIFxoYm94e319JQorJSAgIFxkZWZccGFnZXtcb2xkcGFnZSBcaGJveHt9fQorfQorCitcZGVmXEV0aXRsZXBhZ2V7JQorICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorICAgICAgXGZpbmlzaHRpdGxlcGFnZQorICAgXGZpCisgICAlIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGUgcGFnZSBicmVhayBiZWZvcmUgZW5kaW5nIHRoZSBncm91cCwKKyAgICUgYmVjYXVzZSB0aGUgaGVhZGxpbmUgYW5kIGZvb3RsaW5lIGFyZSBvbmx5IGVtcHR5IGluc2lkZSB0aGUgZ3JvdXAuCisgICAlIElmIHdlIHVzZSB0aGUgbmV3IGRlZmluaXRpb24gb2YgXHBhZ2UsIHdlIGFsd2F5cyBnZXQgYSBibGFuayBwYWdlCisgICAlIGFmdGVyIHRoZSB0aXRsZSBwYWdlLCB3aGljaCB3ZSBjZXJ0YWlubHkgZG9uJ3Qgd2FudC4KKyAgIFxvbGRwYWdlCisgICBcZW5kZ3JvdXAKKyAgICUKKyAgICUgTmVlZCB0aGlzIGJlZm9yZSB0aGUgXC4uLmFmdGVydGl0bGVwYWdlIGNoZWNrcyBzbyB0aGF0IGlmIHRoZXkgYXJlCisgICAlIGluIGVmZmVjdCB0aGUgdG9jIHBhZ2VzIHdpbGwgY29tZSBvdXQgd2l0aCBwYWdlIG51bWJlcnMuCisgICBcSEVBRElOR1NvbgorICAgJQorICAgJSBJZiB0aGV5IHdhbnQgc2hvcnQsIHRoZXkgY2VydGFpbmx5IHdhbnQgbG9uZyB0b28uCisgICBcaWZzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyAgICAgXHNob3J0Y29udGVudHMKKyAgICAgXGNvbnRlbnRzCisgICAgIFxnbG9iYWxcbGV0XHNob3J0Y29udGVudHMgPSBccmVsYXgKKyAgICAgXGdsb2JhbFxsZXRcY29udGVudHMgPSBccmVsYXgKKyAgIFxmaQorICAgJQorICAgXGlmc2V0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgICBcY29udGVudHMKKyAgICAgXGdsb2JhbFxsZXRcY29udGVudHMgPSBccmVsYXgKKyAgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICAgXGZpCit9CisKK1xkZWZcZmluaXNodGl0bGVwYWdleyUKKyAgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDJwdCB3aWR0aCBcaHNpemUKKyAgIFx2c2tpcFx0aXRsZXBhZ2Vib3R0b21nbHVlCisgICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCit9CisKKyUlJSBTZXQgdXAgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MuCisKK1xsZXRcdGhpc3BhZ2U9XGZvbGlvCisKK1xuZXd0b2tzXGV2ZW5oZWFkbGluZSAgICAlIGhlYWRsaW5lIG9uIGV2ZW4gcGFnZXMKK1xuZXd0b2tzXG9kZGhlYWRsaW5lICAgICAlIGhlYWRsaW5lIG9uIG9kZCBwYWdlcworXG5ld3Rva3NcZXZlbmZvb3RsaW5lICAgICUgZm9vdGxpbmUgb24gZXZlbiBwYWdlcworXG5ld3Rva3Ncb2RkZm9vdGxpbmUgICAgICUgZm9vdGxpbmUgb24gb2RkIHBhZ2VzCisKKyUgTm93IG1ha2UgVGV4IHVzZSB0aG9zZSB2YXJpYWJsZXMKK1xoZWFkbGluZT17e1x0ZXh0Zm9udHNccm0gXGlmb2RkXHBhZ2VubyBcdGhlXG9kZGhlYWRsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGVsc2UgXHRoZVxldmVuaGVhZGxpbmUgXGZpfX0KK1xmb290bGluZT17e1x0ZXh0Zm9udHNccm0gXGlmb2RkXHBhZ2VubyBcdGhlXG9kZGZvb3RsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXGVsc2UgXHRoZVxldmVuZm9vdGxpbmUgXGZpfVxIRUFESU5HU2hvb2t9CitcbGV0XEhFQURJTkdTaG9vaz1ccmVsYXgKKworJSBDb21tYW5kcyB0byBzZXQgdGhvc2UgdmFyaWFibGVzLgorJSBGb3IgZXhhbXBsZSwgdGhpcyBpcyB3aGF0ICBAaGVhZGluZ3Mgb24gIGRvZXMKKyUgQGV2ZW5oZWFkaW5nIEB0aGlzdGl0bGV8QHRoaXNwYWdlfEB0aGlzY2hhcHRlcgorJSBAb2RkaGVhZGluZyBAdGhpc2NoYXB0ZXJ8QHRoaXNwYWdlfEB0aGlzdGl0bGUKKyUgQGV2ZW5mb290aW5nIEB0aGlzZmlsZXx8CislIEBvZGRmb290aW5nIHx8QHRoaXNmaWxlCisKK1xkZWZcZXZlbmhlYWRpbmd7XHBhcnNlYXJnXGV2ZW5oZWFkaW5neHh4fQorXGRlZlxvZGRoZWFkaW5ne1xwYXJzZWFyZ1xvZGRoZWFkaW5neHh4fQorXGRlZlxldmVyeWhlYWRpbmd7XHBhcnNlYXJnXGV2ZXJ5aGVhZGluZ3h4eH0KKworXGRlZlxldmVuZm9vdGluZ3tccGFyc2VhcmdcZXZlbmZvb3Rpbmd4eHh9CitcZGVmXG9kZGZvb3Rpbmd7XHBhcnNlYXJnXG9kZGZvb3Rpbmd4eHh9CitcZGVmXGV2ZXJ5Zm9vdGluZ3tccGFyc2VhcmdcZXZlcnlmb290aW5neHh4fQorCit7XGNhdGNvZGVgXEA9MCAlCisKK1xnZGVmXGV2ZW5oZWFkaW5neHh4ICMxe1xldmVuaGVhZGluZ3l5eSAjMUB8QHxAfEB8XGZpbmlzaH0KK1xnZGVmXGV2ZW5oZWFkaW5neXl5ICMxQHwjMkB8IzNAfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZ2RlZlxvZGRoZWFkaW5neHh4ICMxe1xvZGRoZWFkaW5neXl5ICMxQHxAfEB8QHxcZmluaXNofQorXGdkZWZcb2RkaGVhZGluZ3l5eSAjMUB8IzJAfCMzQHwjNFxmaW5pc2h7JQorXGdsb2JhbFxvZGRoZWFkbGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZ2RlZlxldmVyeWhlYWRpbmd4eHgjMXtcb2RkaGVhZGluZ3h4eHsjMX1cZXZlbmhlYWRpbmd4eHh7IzF9fSUKKworXGdkZWZcZXZlbmZvb3Rpbmd4eHggIzF7XGV2ZW5mb290aW5neXl5ICMxQHxAfEB8QHxcZmluaXNofQorXGdkZWZcZXZlbmZvb3Rpbmd5eXkgIzFAfCMyQHwjM0B8IzRcZmluaXNoeyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xnZGVmXG9kZGZvb3Rpbmd4eHggIzF7XG9kZGZvb3Rpbmd5eXkgIzFAfEB8QHxAfFxmaW5pc2h9CitcZ2RlZlxvZGRmb290aW5neXl5ICMxQHwjMkB8IzNAfCM0XGZpbmlzaHslCisgIFxnbG9iYWxcb2RkZm9vdGxpbmUgPSB7XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319JQorICAlCisgICUgTGVhdmUgc29tZSBzcGFjZSBmb3IgdGhlIGZvb3RsaW5lLiAgSG9wZWZ1bGx5IG9rIHRvIGFzc3VtZQorICAlIEBldmVuZm9vdGluZyB3aWxsIG5vdCBiZSB1c2VkIGJ5IGl0c2VsZi4KKyAgXGdsb2JhbFxhZHZhbmNlXHBhZ2VoZWlnaHQgYnkgLVxiYXNlbGluZXNraXAKKyAgXGdsb2JhbFxhZHZhbmNlXHZzaXplIGJ5IC1cYmFzZWxpbmVza2lwCit9CisKK1xnZGVmXGV2ZXJ5Zm9vdGluZ3h4eCMxe1xvZGRmb290aW5neHh4eyMxfVxldmVuZm9vdGluZ3h4eHsjMX19CislCit9JSB1bmJpbmQgdGhlIGNhdGNvZGUgb2YgQC4KKworJSBAaGVhZGluZ3MgZG91YmxlICAgICAgdHVybnMgaGVhZGluZ3Mgb24gZm9yIGRvdWJsZS1zaWRlZCBwcmludGluZy4KKyUgQGhlYWRpbmdzIHNpbmdsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBvZmYgICAgICAgICB0dXJucyB0aGVtIG9mZi4KKyUgQGhlYWRpbmdzIG9uICAgICAgICAgIHNhbWUgYXMgQGhlYWRpbmdzIGRvdWJsZSwgcmV0YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCislIEBoZWFkaW5ncyBhZnRlciAgICAgICB0dXJucyBvbiBkb3VibGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBAaGVhZGluZ3MgZG91YmxlYWZ0ZXIgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIHNpbmdsZWFmdGVyIHR1cm5zIG9uIHNpbmdsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEJ5IGRlZmF1bHQsIHRoZXkgYXJlIG9mZiBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudCwKKyUgYW5kIHR1cm5lZCBgb24nIGFmdGVyIEBlbmQgdGl0bGVwYWdlLgorCitcZGVmXGhlYWRpbmdzICMxIHtcY3NuYW1lIEhFQURJTkdTIzFcZW5kY3NuYW1lfQorCitcZGVmXEhFQURJTkdTb2ZmeworXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcaGZpbH0gXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9fQorXEhFQURJTkdTb2ZmCislIFdoZW4gd2UgdHVybiBoZWFkaW5ncyBvbiwgc2V0IHRoZSBwYWdlIG51bWJlciB0byAxLgorJSBGb3IgZG91YmxlLXNpZGVkIHByaW50aW5nLCBwdXQgY3VycmVudCBmaWxlIG5hbWUgaW4gbG93ZXIgbGVmdCBjb3JuZXIsCislIGNoYXB0ZXIgbmFtZSBvbiBpbnNpZGUgdG9wIG9mIHJpZ2h0IGhhbmQgcGFnZXMsIGRvY3VtZW50CislIHRpdGxlIG9uIGluc2lkZSB0b3Agb2YgbGVmdCBoYW5kIHBhZ2VzLCBhbmQgcGFnZSBudW1iZXJzIG9uIG91dHNpZGUgdG9wCislIGVkZ2Ugb2YgYWxsIHBhZ2VzLgorXGRlZlxIRUFESU5HU2RvdWJsZXsKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1xmb2xpb1xoZmlsXHRoaXN0aXRsZX19CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK30KK1xsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorCislIEZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcsIGNoYXB0ZXIgdGl0bGUgZ29lcyBhY3Jvc3MgdG9wIGxlZnQgb2YgcGFnZSwKKyUgcGFnZSBudW1iZXIgb24gdG9wIHJpZ2h0LgorXGRlZlxIRUFESU5HU3NpbmdsZXsKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KK1xkZWZcSEVBRElOR1NvbntcSEVBRElOR1Nkb3VibGV9CisKK1xkZWZcSEVBRElOR1NhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1Nkb3VibGV4fQorXGxldFxIRUFESU5HU2RvdWJsZWFmdGVyPVxIRUFESU5HU2FmdGVyCitcZGVmXEhFQURJTkdTZG91YmxleHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcZm9saW9caGZpbFx0aGlzdGl0bGV9fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCit9CisKK1xkZWZcSEVBRElOR1NzaW5nbGVhZnRlcntcbGV0XEhFQURJTkdTaG9vaz1cSEVBRElOR1NzaW5nbGV4fQorXGRlZlxIRUFESU5HU3NpbmdsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxvZGRoZWFkbGluZT17XGxpbmV7XHRoaXNjaGFwdGVyXGhmaWxcZm9saW99fQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorfQorCislIFN1YnJvdXRpbmVzIHVzZWQgaW4gZ2VuZXJhdGluZyBoZWFkaW5ncworJSBUaGlzIHByb2R1Y2VzIERheSBNb250aCBZZWFyIHN0eWxlIG9mIG91dHB1dC4KKyUgT25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZCwgaW4gY2FzZSBhIHR4aS0/Py50ZXggZmlsZSBoYXMgc2V0CislIHVwIGEgZGlmZmVyZW50IGZvcm1hdCAoZS5nLiwgdHhpLWNzLnRleCBkb2VzIHRoaXMpLgorXGlmeFx0b2RheVx1bmRlZmluZWQKK1xkZWZcdG9kYXl7JQorICBcbnVtYmVyXGRheVxzcGFjZQorICBcaWZjYXNlXG1vbnRoCisgIFxvclxwdXR3b3JkTUphblxvclxwdXR3b3JkTUZlYlxvclxwdXR3b3JkTU1hclxvclxwdXR3b3JkTUFwcgorICBcb3JccHV0d29yZE1NYXlcb3JccHV0d29yZE1KdW5cb3JccHV0d29yZE1KdWxcb3JccHV0d29yZE1BdWcKKyAgXG9yXHB1dHdvcmRNU2VwXG9yXHB1dHdvcmRNT2N0XG9yXHB1dHdvcmRNTm92XG9yXHB1dHdvcmRNRGVjCisgIFxmaQorICBcc3BhY2VcbnVtYmVyXHllYXJ9CitcZmkKKworJSBAc2V0dGl0bGUgbGluZS4uLiAgc3BlY2lmaWVzIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1lbnQsIGZvciBoZWFkaW5ncy4KKyUgSXQgZ2VuZXJhdGVzIG5vIG91dHB1dCBvZiBpdHMgb3duLgorXGRlZlx0aGlzdGl0bGV7XHB1dHdvcmROb1RpdGxlfQorXGRlZlxzZXR0aXRsZXtccGFyc2Vhcmdcc2V0dGl0bGV6enp9CitcZGVmXHNldHRpdGxlenp6ICMxe1xnZGVmXHRoaXN0aXRsZXsjMX19CisKKworXG1lc3NhZ2V7dGFibGVzLH0KKyUgVGFibGVzIC0tIEB0YWJsZSwgQGZ0YWJsZSwgQHZ0YWJsZSwgQGl0ZW0oeCksIEBraXRlbSh4KSwgQHhpdGVtKHgpLgorCislIGRlZmF1bHQgaW5kZW50YXRpb24gb2YgdGFibGUgdGV4dAorXG5ld2RpbWVuXHRhYmxlaW5kZW50IFx0YWJsZWluZGVudD0uOGluCislIGRlZmF1bHQgaW5kZW50YXRpb24gb2YgQGl0ZW1pemUgYW5kIEBlbnVtZXJhdGUgdGV4dAorXG5ld2RpbWVuXGl0ZW1pbmRlbnQgIFxpdGVtaW5kZW50PS4zaW4KKyUgbWFyZ2luIGJldHdlZW4gZW5kIG9mIHRhYmxlIGl0ZW0gYW5kIHN0YXJ0IG9mIHRhYmxlIHRleHQuCitcbmV3ZGltZW5caXRlbW1hcmdpbiAgXGl0ZW1tYXJnaW49LjFpbgorCislIHVzZWQgaW50ZXJuYWxseSBmb3IgXGl0ZW1pbmRlbnQgbWludXMgXGl0ZW1tYXJnaW4KK1xuZXdkaW1lblxpdGVtbWF4CisKKyUgTm90ZSBAdGFibGUsIEB2dGFibGUsIGFuZCBAdnRhYmxlIGRlZmluZSBAaXRlbSwgQGl0ZW14LCBldGMuLCB3aXRoCislIHRoZXNlIGRlZnMuCislIFRoZXkgYWxzbyBkZWZpbmUgXGl0ZW1pbmRleAorJSB0byBpbmRleCB0aGUgaXRlbSBuYW1lIGluIHdoYXRldmVyIG1hbm5lciBpcyBkZXNpcmVkIChwZXJoYXBzIG5vbmUpLgorCitcbmV3aWZcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcAorCitcZGVmXGl0ZW14cGFye1xwYXJcaWZpdGVteG5lZWRzbmVnYXRpdmV2c2tpcFxub2JyZWFrXHZza2lwLVxwYXJza2lwXG5vYnJlYWtcZml9CisKK1xkZWZcaW50ZXJuYWxCaXRlbXtcc21hbGxicmVhayBccGFyc2VhcmdcaXRlbXp6en0KK1xkZWZcaW50ZXJuYWxCaXRlbXh7XGl0ZW14cGFyIFxwYXJzZWFyZ1xpdGVtenp6fQorCitcZGVmXGludGVybmFsQnhpdGVtICIjMSJ7XGRlZlx4aXRlbXN1YnRvcGl4eyMxfSBcc21hbGxicmVhayBccGFyc2VhcmdceGl0ZW16enp9CitcZGVmXGludGVybmFsQnhpdGVteCAiIzEie1xkZWZceGl0ZW1zdWJ0b3BpeHsjMX0gXGl0ZW14cGFyIFxwYXJzZWFyZ1x4aXRlbXp6en0KKworXGRlZlxpbnRlcm5hbEJraXRlbXtcc21hbGxicmVhayBccGFyc2Vhcmdca2l0ZW16enp9CitcZGVmXGludGVybmFsQmtpdGVteHtcaXRlbXhwYXIgXHBhcnNlYXJnXGtpdGVtenp6fQorCitcZGVmXGtpdGVtenp6ICMxe1xkb3N1YmluZCB7a3d9e1xjb2RleyMxfX17Zm9yIHtcYmYgXGxhc3RmdW5jdGlvbn19JQorICAgICAgICAgICAgICAgICBcaXRlbXp6eiB7IzF9fQorCitcZGVmXHhpdGVtenp6ICMxe1xkb3N1YmluZCB7a3d9e1xjb2RleyMxfX17Zm9yIHtcYmYgXHhpdGVtc3VidG9waWN9fSUKKyAgICAgICAgICAgICAgICAgXGl0ZW16enogeyMxfX0KKworXGRlZlxpdGVtenp6ICMxe1xiZWdpbmdyb3VwICUKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgXGFkdmFuY2VcaHNpemUgYnkgLVx0YWJsZWluZGVudAorICBcc2V0Ym94MD1caGJveHtcaXRlbWZvbnR7IzF9fSUKKyAgXGl0ZW1pbmRleHsjMX0lCisgIFxub2JyZWFrICUgVGhpcyBwcmV2ZW50cyBhIGJyZWFrIGJlZm9yZSBAaXRlbXguCisgICUKKyAgJSBJZiB0aGUgaXRlbSB0ZXh0IGRvZXMgbm90IGZpdCBpbiB0aGUgc3BhY2Ugd2UgaGF2ZSwgcHV0IGl0IG9uIGEgbGluZQorICAlIGJ5IGl0c2VsZiwgYW5kIGRvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGF0CisgICUgbGluZS4gIFdlIGRvIG5vdCBzdGFydCBhIHBhcmFncmFwaCBoZXJlIGJlY2F1c2UgdGhlbiBpZiB0aGUgbmV4dAorICAlIGNvbW1hbmQgaXMsIGUuZy4sIEBraW5kZXgsIHRoZSB3aGF0c2l0IHdvdWxkIGdldCBwdXQgaW50byB0aGUKKyAgJSBob3Jpem9udGFsIGxpc3Qgb24gYSBsaW5lIGJ5IGl0c2VsZiwgcmVzdWx0aW5nIGluIGV4dHJhIGJsYW5rIHNwYWNlLgorICBcaWZkaW0gXHdkMD5caXRlbW1heAorICAgICUKKyAgICAlIE1ha2UgdGhpcyBhIHBhcmFncmFwaCBzbyB3ZSBnZXQgdGhlIFxwYXJza2lwIGdsdWUgYW5kIHdyYXBwaW5nLAorICAgICUgYnV0IGxlYXZlIGl0IHJhZ2dlZC1yaWdodC4KKyAgICBcYmVnaW5ncm91cAorICAgICAgXGFkdmFuY2VcbGVmdHNraXAgYnktXHRhYmxlaW5kZW50CisgICAgICBcYWR2YW5jZVxoc2l6ZSBieVx0YWJsZWluZGVudAorICAgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5MHB0IHBsdXMxZmlsCisgICAgICBcbGVhdmV2bW9kZVx1bmhib3gwXHBhcgorICAgIFxlbmRncm91cAorICAgICUKKyAgICAlIFdlJ3JlIGdvaW5nIHRvIGJlIHN0YXJ0aW5nIGEgcGFyYWdyYXBoLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGUKKyAgICAlIFxwYXJza2lwIGdsdWUgLS0gbG9naWNhbGx5IGl0J3MgcGFydCBvZiB0aGUgQGl0ZW0gd2UganVzdCBzdGFydGVkLgorICAgIFxub2JyZWFrIFx2c2tpcC1ccGFyc2tpcAorICAgICUKKyAgICAlIFN0b3AgYSBwYWdlIGJyZWFrIGF0IHRoZSBccGFyc2tpcCBnbHVlIGNvbWluZyB1cC4gIChVbmZvcnR1bmF0ZWx5CisgICAgJSB3ZSBjYW4ndCBwcmV2ZW50IGEgcG9zc2libGUgcGFnZSBicmVhayBhdCB0aGUgZm9sbG93aW5nCisgICAgJSBcYmFzZWxpbmVza2lwIGdsdWUuKSAgSG93ZXZlciwgaWYgd2hhdCBmb2xsb3dzIGlzIGFuIGVudmlyb25tZW50CisgICAgJSBzdWNoIGFzIEBleGFtcGxlLCB0aGVyZSB3aWxsIGJlIG5vIFxwYXJza2lwIGdsdWU7IHRoZW4KKyAgICAlIHRoZSBuZWdhdGl2ZSB2c2tpcCB3ZSBqdXN0IHdvdWxkIGNhdXNlIHRoZSBleGFtcGxlIGFuZCB0aGUgaXRlbSB0bworICAgICUgY3Jhc2ggdG9nZXRoZXIuICBTbyB3ZSB1c2UgdGhpcyBiaXphcnJlIHZhbHVlIG9mIDEwMDAxIGFzIGEgc2lnbmFsCisgICAgJSB0byBcYWJvdmVlbnZicmVhayB0byBpbnNlcnQgXHBhcnNraXAgZ2x1ZSBhZnRlciBhbGwuCisgICAgJSAoUG9zc2libHkgdGhlcmUgYXJlIG90aGVyIGNvbW1hbmRzIHRoYXQgY291bGQgYmUgZm9sbG93ZWQgYnkKKyAgICAlIEBleGFtcGxlIHdoaWNoIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50LCBidXQgbm90IHNlY3Rpb24gdGl0bGVzOyBvcgorICAgICUgbWF5YmUgc2VjdGlvbiB0aXRsZXMgYXJlIHRoZSBvbmx5IHNwZWNpYWwgY2FzZSBhbmQgdGhleSBzaG91bGQgYmUKKyAgICAlIHBlbmFsdHkgMTAwMDEuLi4pCisgICAgXHBlbmFsdHkgMTAwMDEKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXBmYWxzZQorICBcZWxzZQorICAgICUgVGhlIGl0ZW0gdGV4dCBmaXRzIGludG8gdGhlIHNwYWNlLiAgU3RhcnQgYSBwYXJhZ3JhcGgsIHNvIHRoYXQgdGhlCisgICAgJSBmb2xsb3dpbmcgdGV4dCAoaWYgYW55KSB3aWxsIGVuZCB1cCBvbiB0aGUgc2FtZSBsaW5lLgorICAgIFxub2luZGVudAorICAgICUgRG8gdGhpcyB3aXRoIGtlcm5zIGFuZCBcdW5oYm94IHNvIHRoYXQgaWYgdGhlcmUgaXMgYSBmb290bm90ZSBpbgorICAgICUgdGhlIGl0ZW0gdGV4dCwgaXQgY2FuIG1pZ3JhdGUgdG8gdGhlIG1haW4gdmVydGljYWwgbGlzdCBhbmQKKyAgICAlIGV2ZW50dWFsbHkgYmUgcHJpbnRlZC4KKyAgICBcbm9icmVha1xrZXJuLVx0YWJsZWluZGVudAorICAgIFxkaW1lbjAgPSBcaXRlbW1heCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxpdGVtbWFyZ2luIFxhZHZhbmNlXGRpbWVuMCBieSAtXHdkMAorICAgIFx1bmhib3gwCisgICAgXG5vYnJlYWtca2VyblxkaW1lbjAKKyAgICBcZW5kZ3JvdXAKKyAgICBcaXRlbXhuZWVkc25lZ2F0aXZldnNraXB0cnVlCisgIFxmaQorfQorCitcZGVmXGl0ZW17XGVycm1lc3NhZ2V7QGl0ZW0gd2hpbGUgbm90IGluIGEgdGFibGV9fQorXGRlZlxpdGVteHtcZXJybWVzc2FnZXtAaXRlbXggd2hpbGUgbm90IGluIGEgdGFibGV9fQorXGRlZlxraXRlbXtcZXJybWVzc2FnZXtAa2l0ZW0gd2hpbGUgbm90IGluIGEgdGFibGV9fQorXGRlZlxraXRlbXh7XGVycm1lc3NhZ2V7QGtpdGVteCB3aGlsZSBub3QgaW4gYSB0YWJsZX19CitcZGVmXHhpdGVte1xlcnJtZXNzYWdle0B4aXRlbSB3aGlsZSBub3QgaW4gYSB0YWJsZX19CitcZGVmXHhpdGVteHtcZXJybWVzc2FnZXtAeGl0ZW14IHdoaWxlIG5vdCBpbiBhIHRhYmxlfX0KKworJSBDb250YWlucyBhIGtsdWRnZSB0byBnZXQgQGVuZFtkZXNjcmlwdGlvbl0gdG8gd29yay4KK1xkZWZcZGVzY3JpcHRpb257XHRhYmxlentcZG9udGluZGV4fXsxfXt9e317fXt9fQorCislIEB0YWJsZSwgQGZ0YWJsZSwgQHZ0YWJsZS4KK1xkZWZcdGFibGV7XGJlZ2luZ3JvdXBcaW5FTlZcb2JleWxpbmVzXG9iZXlzcGFjZXNcdGFibGV4fQore1xvYmV5bGluZXNcb2JleXNwYWNlcyUKK1xnZGVmXHRhYmxleCAjMV5eTXslCitcdGFibGV5XGRvbnRpbmRleCMxICAgICAgICBcZW5kdGFibGV5fX0KKworXGRlZlxmdGFibGV7XGJlZ2luZ3JvdXBcaW5FTlZcb2JleWxpbmVzXG9iZXlzcGFjZXNcZnRhYmxleH0KK3tcb2JleWxpbmVzXG9iZXlzcGFjZXMlCitcZ2RlZlxmdGFibGV4ICMxXl5NeyUKK1x0YWJsZXlcZm5pdGVtaW5kZXgjMSAgICAgICAgXGVuZHRhYmxleQorXGRlZlxFZnRhYmxle1xlbmRncmFmXGFmdGVyZW52YnJlYWtcZW5kZ3JvdXB9JQorXGxldFxFdGFibGU9XHJlbGF4fX0KKworXGRlZlx2dGFibGV7XGJlZ2luZ3JvdXBcaW5FTlZcb2JleWxpbmVzXG9iZXlzcGFjZXNcdnRhYmxleH0KK3tcb2JleWxpbmVzXG9iZXlzcGFjZXMlCitcZ2RlZlx2dGFibGV4ICMxXl5NeyUKK1x0YWJsZXlcdnJpdGVtaW5kZXgjMSAgICAgICAgXGVuZHRhYmxleQorXGRlZlxFdnRhYmxle1xlbmRncmFmXGFmdGVyZW52YnJlYWtcZW5kZ3JvdXB9JQorXGxldFxFdGFibGU9XHJlbGF4fX0KKworXGRlZlxkb250aW5kZXggIzF7fQorXGRlZlxmbml0ZW1pbmRleCAjMXtcZG9pbmQge2ZufXtcY29kZXsjMX19fSUKK1xkZWZcdnJpdGVtaW5kZXggIzF7XGRvaW5kIHt2cn17XGNvZGV7IzF9fX0lCisKK3tcb2JleXNwYWNlcyAlCitcZ2RlZlx0YWJsZXkjMSMyICMzICM0ICM1ICM2ICM3XGVuZHRhYmxleXtcZW5kZ3JvdXAlCitcdGFibGV6eyMxfXsjMn17IzN9eyM0fXsjNX17IzZ9fX0KKworXGRlZlx0YWJsZXogIzEjMiMzIzQjNSM2eyUKK1xhYm92ZWVudmJyZWFrICUKK1xiZWdpbmdyb3VwICUKK1xkZWZcRWRlc2NyaXB0aW9ue1xFdGFibGV9JSBOZWNlc3Nhcnkga2x1ZGdlLgorXGxldFxpdGVtaW5kZXg9IzElCitcaWZudW0gMCMzPjAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5ICMzXG1pbCBcZmkgJQorXGlmbnVtIDAjND4wIFx0YWJsZWluZGVudD0jNFxtaWwgXGZpICUKK1xpZm51bSAwIzU+MCBcYWR2YW5jZSBccmlnaHRza2lwIGJ5ICM1XG1pbCBcZmkgJQorXGRlZlxpdGVtZm9udHsjMn0lCitcaXRlbW1heD1cdGFibGVpbmRlbnQgJQorXGFkdmFuY2UgXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luICUKK1xhZHZhbmNlIFxsZWZ0c2tpcCBieSBcdGFibGVpbmRlbnQgJQorXGV4ZGVudGFtb3VudD1cdGFibGVpbmRlbnQKK1xwYXJpbmRlbnQgPSAwcHQKK1xwYXJza2lwID0gXHNtYWxsc2tpcGFtb3VudAorXGlmZGltIFxwYXJza2lwPTBwdCBccGFyc2tpcD0ycHQgXGZpJQorXGRlZlxFdGFibGV7XGVuZGdyYWZcYWZ0ZXJlbnZicmVha1xlbmRncm91cH0lCitcbGV0XGl0ZW0gPSBcaW50ZXJuYWxCaXRlbSAlCitcbGV0XGl0ZW14ID0gXGludGVybmFsQml0ZW14ICUKK1xsZXRca2l0ZW0gPSBcaW50ZXJuYWxCa2l0ZW0gJQorXGxldFxraXRlbXggPSBcaW50ZXJuYWxCa2l0ZW14ICUKK1xsZXRceGl0ZW0gPSBcaW50ZXJuYWxCeGl0ZW0gJQorXGxldFx4aXRlbXggPSBcaW50ZXJuYWxCeGl0ZW14ICUKK30KKworJSBUaGlzIGlzIHRoZSBjb3VudGVyIHVzZWQgYnkgQGVudW1lcmF0ZSwgd2hpY2ggaXMgcmVhbGx5IEBpdGVtaXplCisKK1xuZXdjb3VudCBcaXRlbW5vCisKK1xkZWZcaXRlbWl6ZXtccGFyc2VhcmdcaXRlbWl6ZXp6en0KKworXGRlZlxpdGVtaXplenp6ICMxeyUKKyAgXGJlZ2luZ3JvdXAgJSBlbmRlZCBieSB0aGUgQGVuZCBpdGVtaXplCisgIFxpdGVtaXpleSB7IzF9e1xFaXRlbWl6ZX0KK30KKworXGRlZlxpdGVtaXpleSMxIzJ7JQorICBcYWJvdmVlbnZicmVhaworICBcaXRlbW1heD1caXRlbWluZGVudAorICBcYWR2YW5jZVxpdGVtbWF4IGJ5IC1caXRlbW1hcmdpbgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcaXRlbWluZGVudAorICBcZXhkZW50YW1vdW50PVxpdGVtaW5kZW50CisgIFxwYXJpbmRlbnQ9MHB0CisgIFxwYXJza2lwPVxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGRlZiMye1xlbmRncmFmXGFmdGVyZW52YnJlYWtcZW5kZ3JvdXB9JQorICBcZGVmXGl0ZW1jb250ZW50c3sjMX0lCisgICUgQGl0ZW1pemUgd2l0aCBubyBhcmcgaXMgZXF1aXZhbGVudCB0byBAaXRlbWl6ZSBAYnVsbGV0LgorICBcaWZ4XGl0ZW1jb250ZW50c1xlbXB0eVxkZWZcaXRlbWNvbnRlbnRze1xidWxsZXR9XGZpCisgIFxsZXRcaXRlbT1caXRlbWl6ZWl0ZW0KK30KKworJSBcc3BsaXRvZmYgVE9LRU5TXGVuZG1hcmsgZGVmaW5lcyBcZmlyc3QgdG8gYmUgdGhlIGZpcnN0IHRva2VuIGluCislIFRPS0VOUywgYW5kIFxyZXN0IHRvIGJlIHRoZSByZW1haW5kZXIuCislCitcZGVmXHNwbGl0b2ZmIzEjMlxlbmRtYXJre1xkZWZcZmlyc3R7IzF9XGRlZlxyZXN0eyMyfX0lCisKKyUgQWxsb3cgYW4gb3B0aW9uYWwgYXJndW1lbnQgb2YgYW4gdXBwZXJjYXNlIGxldHRlciwgbG93ZXJjYXNlIGxldHRlciwKKyUgb3IgbnVtYmVyLCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBsYWJlbCBpbiB0aGUgZW51bWVyYXRlZCBsaXN0LiAgTm8KKyUgYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgYDEnLgorJQorXGRlZlxlbnVtZXJhdGV7XHBhcnNlYXJnXGVudW1lcmF0ZXp6en0KK1xkZWZcZW51bWVyYXRlenp6ICMxe1xlbnVtZXJhdGV5ICMxICBcZW5kZW51bWVyYXRleX0KK1xkZWZcZW51bWVyYXRleSAjMSAjMlxlbmRlbnVtZXJhdGV5eyUKKyAgXGJlZ2luZ3JvdXAgJSBlbmRlZCBieSB0aGUgQGVuZCBlbnVtZXJhdGUKKyAgJQorICAlIElmIHdlIHdlcmUgZ2l2ZW4gbm8gYXJndW1lbnQsIHByZXRlbmQgd2Ugd2VyZSBnaXZlbiBgMScuCisgIFxkZWZcdGhlYXJneyMxfSUKKyAgXGlmeFx0aGVhcmdcZW1wdHkgXGRlZlx0aGVhcmd7MX1cZmkKKyAgJQorICAlIERldGVjdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBzaW5nbGUgdG9rZW4uICBJZiBzbywgaXQgbWlnaHQgYmUgYQorICAlIGxldHRlci4gIE90aGVyd2lzZSwgdGhlIG9ubHkgdmFsaWQgdGhpbmcgaXQgY2FuIGJlIGlzIGEgbnVtYmVyLgorICAlIChXZSB3aWxsIGFsd2F5cyBoYXZlIG9uZSB0b2tlbiwgYmVjYXVzZSBvZiB0aGUgdGVzdCB3ZSBqdXN0IG1hZGUuCisgICUgVGhpcyBpcyBhIGdvb2QgdGhpbmcsIHNpbmNlIFxzcGxpdG9mZiBkb2Vzbid0IHdvcmsgZ2l2ZW4gbm90aGluZyBhdAorICAlIGFsbCAtLSB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIHVuZGVsaW1pdGVkLikKKyAgXGV4cGFuZGFmdGVyXHNwbGl0b2ZmXHRoZWFyZ1xlbmRtYXJrCisgIFxpZnhccmVzdFxlbXB0eQorICAgICUgT25seSBvbmUgdG9rZW4gaW4gdGhlIGFyZ3VtZW50LiAgSXQgY291bGQgc3RpbGwgYmUgYW55dGhpbmcuCisgICAgJSBBIGBgbG93ZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIG5vbnplcm8uCisgICAgJSBBbiBgYHVwcGVyY2FzZSBsZXR0ZXInJyBpcyBvbmUgd2hvc2UgXGxjY29kZSBpcyBib3RoIG5vbnplcm8sIGFuZAorICAgICUgICBub3QgZXF1YWwgdG8gaXRzZWxmLgorICAgICUgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgaXQncyBhIG51bWJlci4KKyAgICAlCisgICAgJSBXZSBuZWVkIHRoZSBccmVsYXggYXQgdGhlIGVuZCBvZiB0aGUgXGlmbnVtIGxpbmVzIHRvIHN0b3AgVGVYIGZyb20KKyAgICAlIGNvbnRpbnVpbmcgdG8gbG9vayBmb3IgYSA8bnVtYmVyPi4KKyAgICAlCisgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPTBccmVsYXgKKyAgICAgIFxudW1lcmljZW51bWVyYXRlICUgYSBudW1iZXIgKHdlIGhvcGUpCisgICAgXGVsc2UKKyAgICAgICUgSXQncyBhIGxldHRlci4KKyAgICAgIFxpZm51bVxsY2NvZGVcZXhwYW5kYWZ0ZXJgXHRoZWFyZz1cZXhwYW5kYWZ0ZXJgXHRoZWFyZ1xyZWxheAorICAgICAgICBcbG93ZXJjYXNlZW51bWVyYXRlICUgbG93ZXJjYXNlIGxldHRlcgorICAgICAgXGVsc2UKKyAgICAgICAgXHVwcGVyY2FzZWVudW1lcmF0ZSAlIHVwcGVyY2FzZSBsZXR0ZXIKKyAgICAgIFxmaQorICAgIFxmaQorICBcZWxzZQorICAgICUgTXVsdGlwbGUgdG9rZW5zIGluIHRoZSBhcmd1bWVudC4gIFdlIGhvcGUgaXQncyBhIG51bWJlci4KKyAgICBcbnVtZXJpY2VudW1lcmF0ZQorICBcZmkKK30KKworJSBBbiBAZW51bWVyYXRlIHdob3NlIGxhYmVscyBhcmUgaW50ZWdlcnMuICBUaGUgc3RhcnRpbmcgaW50ZWdlciBpcworJSBnaXZlbiBpbiBcdGhlYXJnLgorJQorXGRlZlxudW1lcmljZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257XHRoZVxpdGVtbm99JQorfQorCislIFRoZSBzdGFydGluZyAobG93ZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcbG93ZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgbG93ZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0lCisgICAgXGZpCisgICAgXGNoYXJcbGNjb2RlXGl0ZW1ubworICB9JQorfQorCislIFRoZSBzdGFydGluZyAodXBwZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcdXBwZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgdXBwZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0KKyAgICBcZmkKKyAgICBcY2hhclx1Y2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgQ2FsbCBpdGVtaXpleSwgYWRkaW5nIGEgcGVyaW9kIHRvIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgc3VwcGx5aW5nIHRoZQorJSBjb21tb24gbGFzdCB0d28gYXJndW1lbnRzLiAgQWxzbyBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgaW5pdGlhbCB2YWx1ZSBpbgorJSBcaXRlbW5vLCBzaW5jZSBAaXRlbSBpbmNyZW1lbnRzIFxpdGVtbm8uCislCitcZGVmXHN0YXJ0ZW51bWVyYXRpb24jMXslCisgIFxhZHZhbmNlXGl0ZW1ubyBieSAtMQorICBcaXRlbWl6ZXl7IzEufVxFZW51bWVyYXRlXGZsdXNoY3IKK30KKworJSBAYWxwaGFlbnVtZXJhdGUgYW5kIEBjYXBzZW51bWVyYXRlIGFyZSBhYmJyZXZpYXRpb25zIGZvciBnaXZpbmcgYW4gYXJnCislIHRvIEBlbnVtZXJhdGUuCislCitcZGVmXGFscGhhZW51bWVyYXRle1xlbnVtZXJhdGV7YX19CitcZGVmXGNhcHNlbnVtZXJhdGV7XGVudW1lcmF0ZXtBfX0KK1xkZWZcRWFscGhhZW51bWVyYXRle1xFZW51bWVyYXRlfQorXGRlZlxFY2Fwc2VudW1lcmF0ZXtcRWVudW1lcmF0ZX0KKworJSBEZWZpbml0aW9uIG9mIEBpdGVtIHdoaWxlIGluc2lkZSBAaXRlbWl6ZS4KKworXGRlZlxpdGVtaXplaXRlbXslCitcYWR2YW5jZVxpdGVtbm8gYnkgMQore1xsZXRccGFyPVxlbmRncmFmIFxzbWFsbGJyZWFrfSUKK1xpZmhtb2RlIFxlcnJtZXNzYWdle0luIGhtb2RlIGF0IGl0ZW1pemVpdGVtfVxmaQore1xwYXJza2lwPTBpbiBcaHNraXAgMHB0CitcaGJveCB0byAwcHR7XGhzcyBcaXRlbWNvbnRlbnRzXGhza2lwIFxpdGVtbWFyZ2lufSUKK1x2YWRqdXN0e1xwZW5hbHR5IDEyMDB9fSUKK1xmbHVzaGNyfQorCislIEBtdWx0aXRhYmxlIG1hY3JvcworJSBBbXkgSGVuZHJpY2tzb24sIDgvMTgvOTQsIDMvNi85NgorJQorJSBAbXVsdGl0YWJsZSAuLi4gQGVuZCBtdWx0aXRhYmxlIHdpbGwgbWFrZSBhcyBtYW55IGNvbHVtbnMgYXMgZGVzaXJlZC4KKyUgQ29udGVudHMgb2YgZWFjaCBjb2x1bW4gd2lsbCB3cmFwIGF0IHdpZHRoIGdpdmVuIGluIHByZWFtYmxlLiAgV2lkdGgKKyUgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgd2l0aCBzYW1wbGUgdGV4dCBnaXZlbiBpbiBhIHRlbXBsYXRlIGxpbmUsCislIG9yIGluIHBlcmNlbnQgb2YgXGhzaXplLCB0aGUgY3VycmVudCB3aWR0aCBvZiB0ZXh0IG9uIHBhZ2UuCisKKyUgVGFibGUgY2FuIGNvbnRpbnVlIG92ZXIgcGFnZXMgYnV0IHdpbGwgb25seSBicmVhayBiZXR3ZWVuIGxpbmVzLgorCislIFRvIG1ha2UgcHJlYW1ibGU6CislCislIEVpdGhlciBkZWZpbmUgd2lkdGhzIG9mIGNvbHVtbnMgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemU6CislICAgQG11bHRpdGFibGUgQGNvbHVtbmZyYWN0aW9ucyAuMjUgLjMgLjQ1CislICAgQGl0ZW0gLi4uCislCislICAgTnVtYmVycyBmb2xsb3dpbmcgQGNvbHVtbmZyYWN0aW9ucyBhcmUgdGhlIHBlcmNlbnQgb2YgdGhlIHRvdGFsCislICAgY3VycmVudCBoc2l6ZSB0byBiZSB1c2VkIGZvciBlYWNoIGNvbHVtbi4gWW91IG1heSB1c2UgYXMgbWFueQorJSAgIGNvbHVtbnMgYXMgZGVzaXJlZC4KKworCislIE9yIHVzZSBhIHRlbXBsYXRlOgorJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gLi4uCislICAgdXNpbmcgdGhlIHdpZGVzdCB0ZXJtIGRlc2lyZWQgaW4gZWFjaCBjb2x1bW4uCislCislIEZvciB0aG9zZSB3aG8gd2FudCB0byB1c2UgbW9yZSB0aGFuIG9uZSBsaW5lJ3Mgd29ydGggb2Ygd29yZHMgaW4KKyUgdGhlIHByZWFtYmxlLCBicmVhayB0aGUgbGluZSB3aXRoaW4gb25lIGFyZ3VtZW50IGFuZCBpdAorJSB3aWxsIHBhcnNlIGNvcnJlY3RseSwgaS5lLiwKKyUKKyUgICAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMKKyUgICAgICB0ZW1wbGF0ZX0KKyUgTm90OgorJSAgICAgQG11bHRpdGFibGUge0NvbHVtbiAxIHRlbXBsYXRlfSB7Q29sdW1uIDIgdGVtcGxhdGV9CislICAgICAge0NvbHVtbiAzIHRlbXBsYXRlfQorCislIEVhY2ggbmV3IHRhYmxlIGxpbmUgc3RhcnRzIHdpdGggQGl0ZW0sIGVhY2ggc3Vic2VxdWVudCBuZXcgY29sdW1uCislIHN0YXJ0cyB3aXRoIEB0YWIuIEVtcHR5IGNvbHVtbnMgbWF5IGJlIHByb2R1Y2VkIGJ5IHN1cHBseWluZyBAdGFiJ3MKKyUgd2l0aCBub3RoaW5nIGJldHdlZW4gdGhlbSBmb3IgYXMgbWFueSB0aW1lcyBhcyBlbXB0eSBjb2x1bW5zIGFyZSBuZWVkZWQsCislIGllLCBAdGFiQHRhYkB0YWIgd2lsbCBwcm9kdWNlIHR3byBlbXB0eSBjb2x1bW5zLgorCislIEBpdGVtLCBAdGFiLCBAbXVsdGl0YWJsZSBvciBAZW5kIG11bHRpdGFibGUgZG8gbm90IG5lZWQgdG8gYmUgb24gdGhlaXIKKyUgb3duIGxpbmVzLCBidXQgaXQgd2lsbCBub3QgaHVydCBpZiB0aGV5IGFyZS4KKworJSBTYW1wbGUgbXVsdGl0YWJsZToKKworJSAgIEBtdWx0aXRhYmxlIHtDb2x1bW4gMSB0ZW1wbGF0ZX0ge0NvbHVtbiAyIHRlbXBsYXRlfSB7Q29sdW1uIDMgdGVtcGxhdGV9CislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZiBAdGFiIHRoaXJkIGNvbAorJSAgIEBpdGVtCislICAgZmlyc3QgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiCislICAgdGhpcmQgY29sCislICAgQGl0ZW0gZmlyc3QgY29sIHN0dWZmIEB0YWIgc2Vjb25kIGNvbCBzdHVmZgorJSAgIEB0YWIgTWFueSBwYXJhZ3JhcGhzIG9mIHRleHQgbWF5IGJlIHVzZWQgaW4gYW55IGNvbHVtbi4KKyUKKyUgICAgICAgICBUaGV5IHdpbGwgd3JhcCBhdCB0aGUgd2lkdGggZGV0ZXJtaW5lZCBieSB0aGUgdGVtcGxhdGUuCislICAgQGl0ZW1AdGFiQHRhYiBUaGlzIHdpbGwgYmUgaW4gdGhpcmQgY29sdW1uLgorJSAgIEBlbmQgbXVsdGl0YWJsZQorCislIERlZmF1bHQgZGltZW5zaW9ucyBtYXkgYmUgcmVzZXQgYnkgdXNlci4KKyUgQG11bHRpdGFibGVwYXJza2lwIGlzIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gcGFyYWdyYXBocyBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVwYXJpbmRlbnQgaXMgcGFyYWdyYXBoIGluZGVudCBpbiB0YWJsZS4KKyUgQG11bHRpdGFibGVjb2xtYXJnaW4gaXMgaG9yaXpvbnRhbCBzcGFjZSB0byBiZSBsZWZ0IGJldHdlZW4gY29sdW1ucy4KKyUgQG11bHRpdGFibGVsaW5lc3BhY2UgaXMgc3BhY2UgdG8gbGVhdmUgYmV0d2VlbiB0YWJsZSBpdGVtcywgYmFzZWxpbmUKKyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiYXNlbGluZS4KKyUgICAwcHQgbWVhbnMgaXQgZGVwZW5kcyBvbiBjdXJyZW50IG5vcm1hbCBsaW5lIHNwYWNpbmcuCislCitcbmV3c2tpcFxtdWx0aXRhYmxlcGFyc2tpcAorXG5ld3NraXBcbXVsdGl0YWJsZXBhcmluZGVudAorXG5ld2RpbWVuXG11bHRpdGFibGVjb2xzcGFjZQorXG5ld3NraXBcbXVsdGl0YWJsZWxpbmVzcGFjZQorXG11bHRpdGFibGVwYXJza2lwPTBwdAorXG11bHRpdGFibGVwYXJpbmRlbnQ9NnB0CitcbXVsdGl0YWJsZWNvbHNwYWNlPTEycHQKK1xtdWx0aXRhYmxlbGluZXNwYWNlPTBwdAorCislIE1hY3JvcyB1c2VkIHRvIHNldCB1cCBoYWxpZ24gcHJlYW1ibGU6CislCitcbGV0XGVuZHNldHVwdGFibGVccmVsYXgKK1xkZWZceGVuZHNldHVwdGFibGV7XGVuZHNldHVwdGFibGV9CitcbGV0XGNvbHVtbmZyYWN0aW9uc1xyZWxheAorXGRlZlx4Y29sdW1uZnJhY3Rpb25ze1xjb2x1bW5mcmFjdGlvbnN9CitcbmV3aWZcaWZzZXRwZXJjZW50CisKKyUgIzEgaXMgdGhlIHBhcnQgb2YgdGhlIEBjb2x1bW5mcmFjdGlvbiBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIHdoaWNoCislIGlzIHByZXN1bWFibHkgZWl0aGVyIDAgb3IgdGhlIGVtcHR5IHN0cmluZyAoYnV0IHdlIGRvbid0IGNoZWNrLCB3ZQorJSBqdXN0IHRocm93IGl0IGF3YXkpLiAgIzIgaXMgdGhlIGRlY2ltYWwgcGFydCwgd2hpY2ggd2UgdXNlIGFzIHRoZQorJSBwZXJjZW50IG9mIFxoc2l6ZSBmb3IgdGhpcyBjb2x1bW4uCitcZGVmXHBpY2t1cHdob2xlZnJhY3Rpb24jMS4jMiB7JQorICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7LiMyXGhzaXplfSUKKyAgXHNldHVwdGFibGUKK30KKworXG5ld2NvdW50XGNvbGNvdW50CitcZGVmXHNldHVwdGFibGUjMXslCisgIFxkZWZcZmlyc3Rhcmd7IzF9JQorICBcaWZ4XGZpcnN0YXJnXHhlbmRzZXR1cHRhYmxlCisgICAgXGxldFxnbyA9IFxyZWxheAorICBcZWxzZQorICAgIFxpZnhcZmlyc3RhcmdceGNvbHVtbmZyYWN0aW9ucworICAgICAgXGdsb2JhbFxzZXRwZXJjZW50dHJ1ZQorICAgIFxlbHNlCisgICAgICBcaWZzZXRwZXJjZW50CisgICAgICAgICBcbGV0XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgIFxlbHNlCisgICAgICAgICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICAgICAgICAgXHNldGJveDA9XGhib3h7IzFcdW5za2lwXHNwYWNlfSUgQWRkIGEgbm9ybWFsIHdvcmQgc3BhY2UgYXMgYQorICAgICAgICAgICAgICAgICAgICUgc2VwYXJhdG9yOyB0eXBpY2FsbHkgdGhhdCBpcyBhbHdheXMgaW4gdGhlIGlucHV0LCBhbnl3YXkuCisgICAgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7XHRoZVx3ZDB9JQorICAgICAgXGZpCisgICAgXGZpCisgICAgXGlmeFxnb1xwaWNrdXB3aG9sZWZyYWN0aW9uCisgICAgICAlIFB1dCB0aGUgYXJndW1lbnQgYmFjayBmb3IgdGhlIFxwaWNrdXB3aG9sZWZyYWN0aW9uIGNhbGwsIHNvCisgICAgICAlIHdlJ2xsIGFsd2F5cyBoYXZlIGEgcGVyaW9kIHRoZXJlIHRvIGJlIHBhcnNlZC4KKyAgICAgIFxkZWZcZ297XHBpY2t1cHdob2xlZnJhY3Rpb24jMX0lCisgICAgXGVsc2UKKyAgICAgIFxsZXRcZ28gPSBcc2V0dXB0YWJsZQorICAgIFxmaSUKKyAgXGZpCisgIFxnbworfQorCislIEBtdWx0aXRhYmxlIC4uLiBAZW5kIG11bHRpdGFibGUgZGVmaW5pdGlvbnM6CislCitcZGVmXG11bHRpdGFibGV7XHBhcnNlYXJnXGRvdGFibGV9CitcZGVmXGRvdGFibGUjMXtcYmdyb3VwCisgIFx2c2tpcFxwYXJza2lwCisgIFxsZXRcaXRlbT1cY3JjcndpdGhmb290bm90ZXMKKyAgJSBBIFx0YWIgdXNlZCB0byBpbmNsdWRlIFxoc2tpcDFzcC4gIEJ1dCB0aGVuIHRoZSBzcGFjZSBpbiBhIHRlbXBsYXRlCisgICUgbGluZSBpcyBub3QgZW5vdWdoLiAgVGhhdCBpcyBiYWQuICBTbyBsZXQncyBnbyBiYWNrIHRvIGp1c3QgJiB1bnRpbAorICAlIHdlIGVuY291bnRlciB0aGUgcHJvYmxlbSBpdCB3YXMgaW50ZW5kZWQgdG8gc29sdmUgYWdhaW4uICAtLWthcmwsCisgICUgbmF0aGFuQGFjbS5vcmcsIDIwYXByOTkuCisgIFxsZXRcdGFiPSYlCisgIFxsZXRcc3RhcnRmb290aW5zPVxzdGFydHNhdmVkZm9vdG5vdGUKKyAgXHRvbGVyYW5jZT05NTAwCisgIFxoYmFkbmVzcz05NTAwCisgIFxzZXRtdWx0aXRhYmxlc3BhY2luZworICBccGFyc2tpcD1cbXVsdGl0YWJsZXBhcnNraXAKKyAgXHBhcmluZGVudD1cbXVsdGl0YWJsZXBhcmluZGVudAorICBcb3ZlcmZ1bGxydWxlPTBwdAorICBcZ2xvYmFsXGNvbGNvdW50PTAKKyAgXGRlZlxFbXVsdGl0YWJsZXslCisgICAgXGdsb2JhbFxzZXRwZXJjZW50ZmFsc2UKKyAgICBcY3JjcndpdGhmb290bm90ZXNcY3JjcgorICAgIFxlZ3JvdXBcZWdyb3VwCisgIH0lCisgICUKKyAgJSBUbyBwYXJzZSBldmVyeXRoaW5nIGJldHdlZW4gQG11bHRpdGFibGUgYW5kIEBpdGVtOgorICBcc2V0dXB0YWJsZSMxIFxlbmRzZXR1cHRhYmxlCisgICUKKyAgJSBcZXZlcnljciB3aWxsIHJlc2V0IGNvbHVtbiBjb3VudGVyLCBcY29sY291bnQsIGF0IHRoZSBlbmQgb2YKKyAgJSBlYWNoIGxpbmUuIEV2ZXJ5IGNvbHVtbiBlbnRyeSB3aWxsIGNhdXNlIFxjb2xjb3VudCB0byBhZHZhbmNlIGJ5IG9uZS4KKyAgJSBUaGUgdGFibGUgcHJlYW1ibGUKKyAgJSBsb29rcyBhdCB0aGUgY3VycmVudCBcY29sY291bnQgdG8gZmluZCB0aGUgY29ycmVjdCBjb2x1bW4gd2lkdGguCisgIFxldmVyeWNye1xub2FsaWdueyUKKyAgJQorICAlIFxmaWxicmVhayUlIGtlZXBzIHVuZGVyZnVsbCBib3ggbWVzc2FnZXMgb2ZmIHdoZW4gdGFibGUgYnJlYWtzIG92ZXIgcGFnZXMuCisgICUgTWF5YmUgc28sIGJ1dCBpdCBhbHNvIGNyZWF0ZXMgcmVhbGx5IHdlaXJkIHBhZ2UgYnJlYWtzIHdoZW4gdGhlIHRhYmxlCisgICUgYnJlYWtzIG92ZXIgcGFnZXMuIFdvdWxkbid0IFx2ZmlsIGJlIGJldHRlcj8gIFdhaXQgdW50aWwgdGhlIHByb2JsZW0KKyAgJSBtYW5pZmVzdHMgaXRzZWxmLCBzbyBpdCBjYW4gYmUgZml4ZWQgZm9yIHJlYWwgLS1rYXJsLgorICAgIFxnbG9iYWxcY29sY291bnQ9MFxyZWxheH19JQorICAlCisgICUgVGhpcyBwcmVhbWJsZSBzZXRzIHVwIGEgZ2VuZXJpYyBjb2x1bW4gZGVmaW5pdGlvbiwgd2hpY2ggd2lsbAorICAlIGJlIHVzZWQgYXMgbWFueSB0aW1lcyBhcyB1c2VyIGNhbGxzIGZvciBjb2x1bW5zLgorICAlIFx2dG9wIHdpbGwgc2V0IGEgc2luZ2xlIGxpbmUgYW5kIHdpbGwgYWxzbyBsZXQgdGV4dCB3cmFwIGFuZAorICAlIGNvbnRpbnVlIGZvciBtYW55IHBhcmFncmFwaHMgaWYgZGVzaXJlZC4KKyAgXGhhbGlnblxiZ3JvdXAmXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDFccmVsYXgKKyAgICBcbXVsdGlzdHJ1dFx2dG9we1xoc2l6ZT1cZXhwYW5kYWZ0ZXJcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1lCisgICUKKyAgJSBJbiBvcmRlciB0byBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlcgorICAlIHdlIHdpbGwgYWRkIGEgXGxlZnRza2lwIG9mIFxtdWx0aXRhYmxlY29sc3BhY2UgdG8gYWxsIGNvbHVtbnMgYWZ0ZXIKKyAgJSB0aGUgZmlyc3Qgb25lLgorICAlCisgICUgSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiB1c2VkLCB3ZSB3aWxsIGFkZCBcbXVsdGl0YWJsZWNvbHNwYWNlCisgICUgdG8gdGhlIHdpZHRoIG9mIGVhY2ggdGVtcGxhdGUgZW50cnkuCisgICUKKyAgJSBJZiB0aGUgdXNlciBoYXMgc2V0IHByZWFtYmxlIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplIHdlIHdpbGwKKyAgJSB1c2UgdGhhdCBkaW1lbnNpb24gYXMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4sIGFuZCB0aGUgXGxlZnRza2lwCisgICUgd2lsbCBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlci4gIFRhYmxlIHdpbGwgc3RhcnQgYXQKKyAgJSBsZWZ0IG1hcmdpbiBhbmQgZmluYWwgY29sdW1uIHdpbGwganVzdGlmeSBhdCByaWdodCBtYXJnaW4uCisgICUKKyAgJSBNYWtlIHN1cmUgd2UgZG9uJ3QgaW5oZXJpdCBccmlnaHRza2lwIGZyb20gdGhlIG91dGVyIGVudmlyb25tZW50LgorICBccmlnaHRza2lwPTBwdAorICBcaWZudW1cY29sY291bnQ9MQorICAgICUgVGhlIGZpcnN0IGNvbHVtbiB3aWxsIGJlIGluZGVudGVkIHdpdGggdGhlIHN1cnJvdW5kaW5nIHRleHQuCisgICAgXGFkdmFuY2VcaHNpemUgYnlcbGVmdHNraXAKKyAgXGVsc2UKKyAgICBcaWZzZXRwZXJjZW50IFxlbHNlCisgICAgICAlIElmIHVzZXIgaGFzIG5vdCBzZXQgcHJlYW1ibGUgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemUKKyAgICAgICUgd2Ugd2lsbCBhZHZhbmNlIFxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlLgorICAgICAgXGFkdmFuY2VcaHNpemUgYnkgXG11bHRpdGFibGVjb2xzcGFjZQorICAgIFxmaQorICAgJSBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxsIG1ha2UgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2U6CisgIFxsZWZ0c2tpcD1cbXVsdGl0YWJsZWNvbHNwYWNlCisgIFxmaQorICAlIElnbm9yaW5nIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBhdm9pZHMgYW4gb2NjYXNpb25hbCBzcHVyaW91cworICAlIGJsYW5rIGxpbmUsIHdoZW4gVGVYIGRlY2lkZXMgdG8gYnJlYWsgdGhlIGxpbmUgYXQgdGhlIHNwYWNlIGJlZm9yZSB0aGUKKyAgJSBib3ggZnJvbSB0aGUgbXVsdGlzdHJ1dCwgc28gdGhlIHN0cnV0IGVuZHMgdXAgb24gYSBsaW5lIGJ5IGl0c2VsZi4KKyAgJSBGb3IgZXhhbXBsZToKKyAgJSBAbXVsdGl0YWJsZSBAY29sdW1uZnJhY3Rpb25zIC4xMSAuODkKKyAgJSBAaXRlbSBAY29kZXsjfQorICAlIEB0YWIgTGVnYWwgaG9saWRheSB3aGljaCBpcyB2YWxpZCBpbiBtYWpvciBwYXJ0cyBvZiB0aGUgd2hvbGUgY291bnRyeS4KKyAgJSBJcyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHdpdGggaGlnaGxpZ2h0aW5nIHNlcXVlbmNlcyByZXNwZWN0aXZlbHkgbWFya2luZworICAlIGNoYXJhY3RlcnMuCisgIFxub2luZGVudFxpZ25vcmVzcGFjZXMjI1x1bnNraXBcbXVsdGlzdHJ1dH1cY3IKK30KKworXGRlZlxzZXRtdWx0aXRhYmxlc3BhY2luZ3slIHRlc3QgdG8gc2VlIGlmIHVzZXIgaGFzIHNldCBcbXVsdGl0YWJsZWxpbmVzcGFjZS4KKyUgSWYgc28sIGRvIG5vdGhpbmcuIElmIG5vdCwgZ2l2ZSBpdCBhbiBhcHByb3ByaWF0ZSBkaW1lbnNpb24gYmFzZWQgb24KKyUgY3VycmVudCBiYXNlbGluZXNraXAuCitcaWZkaW1cbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKK1xzZXRib3gwPVx2Ym94e1h9XGdsb2JhbFxtdWx0aXRhYmxlbGluZXNwYWNlPVx0aGVcYmFzZWxpbmVza2lwCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZWxpbmVzcGFjZSBieS1caHQwCislJSBzdHJ1dCB0byBwdXQgaW4gdGFibGUgaW4gY2FzZSBzb21lIGVudHJ5IGRvZXNuJ3QgaGF2ZSBkZXNjZW5kZXJzLAorJSUgdG8ga2VlcCBsaW5lcyBlcXVhbGx5IHNwYWNlZAorXGxldFxtdWx0aXN0cnV0ID0gXHN0cnV0CitcZWxzZQorJSUgRklYTUU6IHdoYXQgaXMgXGJveDAgc3VwcG9zZWQgdG8gYmU/CitcZ2RlZlxtdWx0aXN0cnV0e1x2cnVsZSBoZWlnaHRcbXVsdGl0YWJsZWxpbmVzcGFjZSBkZXB0aFxkcDAKK3dpZHRoMHB0XHJlbGF4fSBcZmkKKyUlIFRlc3QgdG8gc2VlIGlmIHBhcnNraXAgaXMgbGFyZ2VyIHRoYW4gc3BhY2UgYmV0d2VlbiBsaW5lcyBvZgorJSUgdGFibGUuIElmIG5vdCwgZG8gbm90aGluZy4KKyUlICAgICAgICBJZiBzbywgc2V0IHRvIHNhbWUgZGltZW5zaW9uIGFzIG11bHRpdGFibGVsaW5lc3BhY2UuCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA+XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcbXVsdGl0YWJsZXBhcnNraXA9XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlcGFyc2tpcC03cHQgJSUgdG8ga2VlcCBwYXJza2lwIHNvbWV3aGF0IHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSUgdGhhbiBza2lwIGJldHdlZW4gbGluZXMgaW4gdGhlIHRhYmxlLgorXGZpJQorXGlmZGltXG11bHRpdGFibGVwYXJza2lwPTBwdAorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZml9CisKKyUgSW4gY2FzZSBhIEBmb290bm90ZSBhcHBlYXJzIGluc2lkZSBhbiBhbGlnbm1lbnQsIHNhdmUgdGhlIGZvb3Rub3RlCislIHRleHQgdG8gYSBib3ggYW5kIG1ha2UgdGhlIFxpbnNlcnQgd2hlbiBhIHJvdyBvZiB0aGUgdGFibGUgaXMKKyUgZmluaXNoZWQuICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24gaXMgbG9zdCwgaXQgbmV2ZXIgbWlncmF0ZXMgdG8gdGhlCislIG1haW4gdmVydGljYWwgbGlzdC4gIC0ta2FzYWwsIDIyamFuMDMuCislCitcbmV3Ym94XHNhdmVkZm9vdG5vdGVzCislCislIFxkb3RhYmxlIFxsZXQncyBcc3RhcnRmb290aW5zIHRvIHRoaXMsIHNvIHRoYXQgXGRvZm9vdG5vdGUgd2lsbCBjYWxsCislIGl0IGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlIGluc2VydGlvbiByaWdodCBhd2F5LgorXGRlZlxzdGFydHNhdmVkZm9vdG5vdGV7JQorICBcZ2xvYmFsXHNldGJveFxzYXZlZGZvb3Rub3RlcyA9IFx2Ym94XGJncm91cAorICAgIFx1bnZib3hcc2F2ZWRmb290bm90ZXMKK30KK1xkZWZcY3JjcndpdGhmb290bm90ZXN7JQorICBcY3JjcgorICBcaWZ2b2lkXHNhdmVkZm9vdG5vdGVzIFxlbHNlCisgICAgXG5vYWxpZ257XGluc2VydFxmb290aW5ze1xib3hcc2F2ZWRmb290bm90ZXN9fSUKKyAgXGZpCit9CisKK1xtZXNzYWdle2NvbmRpdGlvbmFscyx9CislIFByZXZlbnQgZXJyb3JzIGZvciBzZWN0aW9uIGNvbW1hbmRzLgorJSBVc2VkIGluIEBpZ25vcmUgYW5kIGluIGZhaWxpbmcgY29uZGl0aW9uYWxzLgorXGRlZlxpZ25vcmVzZWN0aW9uc3slCisgIFxsZXRcYXBwZW5kaXg9XHJlbGF4CisgIFxsZXRcYXBwZW5kaXhzZWM9XHJlbGF4CisgIFxsZXRcYXBwZW5kaXhzZWN0aW9uPVxyZWxheAorICBcbGV0XGFwcGVuZGl4c3Vic2VjPVxyZWxheAorICBcbGV0XGFwcGVuZGl4c3Vic2VjdGlvbj1ccmVsYXgKKyAgXGxldFxhcHBlbmRpeHN1YnN1YnNlYz1ccmVsYXgKKyAgXGxldFxhcHBlbmRpeHN1YnN1YnNlY3Rpb249XHJlbGF4CisgICVcbGV0XGJlZ2luPVxyZWxheAorICAlXGxldFxieWU9XHJlbGF4CisgIFxsZXRcY2VudGVyY2hhcD1ccmVsYXgKKyAgXGxldFxjaGFwdGVyPVxyZWxheAorICBcbGV0XGNvbnRlbnRzPVxyZWxheAorICBcbGV0XHNlY3Rpb249XHJlbGF4CisgIFxsZXRcc21hbGxib29rPVxyZWxheAorICBcbGV0XHN1YnNlYz1ccmVsYXgKKyAgXGxldFxzdWJzZWN0aW9uPVxyZWxheAorICBcbGV0XHN1YnN1YnNlYz1ccmVsYXgKKyAgXGxldFxzdWJzdWJzZWN0aW9uPVxyZWxheAorICBcbGV0XHRpdGxlcGFnZT1ccmVsYXgKKyAgXGxldFx0b3A9XHJlbGF4CisgIFxsZXRcdW5udW1iZXJlZD1ccmVsYXgKKyAgXGxldFx1bm51bWJlcmVkc2VjPVxyZWxheAorICBcbGV0XHVubnVtYmVyZWRzZWN0aW9uPVxyZWxheAorICBcbGV0XHVubnVtYmVyZWRzdWJzZWM9XHJlbGF4CisgIFxsZXRcdW5udW1iZXJlZHN1YnNlY3Rpb249XHJlbGF4CisgIFxsZXRcdW5udW1iZXJlZHN1YnN1YnNlYz1ccmVsYXgKKyAgXGxldFx1bm51bWJlcmVkc3Vic3Vic2VjdGlvbj1ccmVsYXgKK30KKworJSBJZ25vcmUgQGlnbm9yZSwgQGlmaHRtbCwgQGlmaW5mbywgYW5kIHRoZSBsaWtlLgorJQorXGRlZlxkaXJlbnRyeXtcZG9pZ25vcmV7ZGlyZW50cnl9fQorXGRlZlxkb2N1bWVudGRlc2NyaXB0aW9ud29yZHtkb2N1bWVudGRlc2NyaXB0aW9ufQorXGRlZlxkb2N1bWVudGRlc2NyaXB0aW9ue1xkb2lnbm9yZXtkb2N1bWVudGRlc2NyaXB0aW9ufX0KK1xkZWZcaHRtbHtcZG9pZ25vcmV7aHRtbH19CitcZGVmXGlmaHRtbHtcZG9pZ25vcmV7aWZodG1sfX0KK1xkZWZcaWZpbmZve1xkb2lnbm9yZXtpZmluZm99fQorXGRlZlxpZm5vdHRleHtcZG9pZ25vcmV7aWZub3R0ZXh9fQorXGRlZlxpZnBsYWludGV4dHtcZG9pZ25vcmV7aWZwbGFpbnRleHR9fQorXGRlZlxpZnhtbHtcZG9pZ25vcmV7aWZ4bWx9fQorXGRlZlxpZ25vcmV7XGRvaWdub3Jle2lnbm9yZX19CitcZGVmXG1lbnV7XGRvaWdub3Jle21lbnV9fQorXGRlZlx4bWx7XGRvaWdub3Jle3htbH19CisKKyUgQGRpcmNhdGVnb3J5IENBVEVHT1JZICAtLSBzcGVjaWZ5IGEgY2F0ZWdvcnkgb2YgdGhlIGRpciBmaWxlCislIHdoaWNoIHRoaXMgZmlsZSBzaG91bGQgYmVsb25nIHRvLiAgSWdub3JlIHRoaXMgaW4gVGVYLgorXGxldFxkaXJjYXRlZ29yeSA9IFxjb21tZW50CisKKyUgSWdub3JlIHRleHQgdW50aWwgYSBsaW5lIGBAZW5kICMxJywga2VlcGluZyB0cmFjayBvZiBuZXN0ZWQgY29uZGl0aW9uYWxzLgorJQorJSBBIGNvdW50IHRvIHJlbWVtYmVyIHRoZSBkZXB0aCBvZiBuZXN0aW5nLgorXG5ld2NvdW50XGRvaWdub3JlY291bnQKKworXGRlZlxkb2lnbm9yZSMxe1xiZWdpbmdyb3VwCisgICUgRG9uJ3QgY29tcGxhaW4gYWJvdXQgY29udHJvbCBzZXF1ZW5jZXMgd2UgaGF2ZSBkZWNsYXJlZCBcb3V0ZXIuCisgIFxpZ25vcmVzZWN0aW9ucworICAlCisgICUgTWFrZSBzdXJlIHRoYXQgc3BhY2VzIHR1cm4gaW50byB0b2tlbnMgdGhhdCBtYXRjaCB3aGF0IFxkb2lnbm9yZXRleHQgd2FudHMuCisgIFxjYXRjb2RlXHNwYWNlQ2hhciA9IDEwCisgICUKKyAgJSBJZ25vcmUgYnJhY2VzLCBzbyBtaXNtYXRjaGVkIGJyYWNlcyBkb24ndCBjYXVzZSB0cm91YmxlLgorICBcY2F0Y29kZWBceyA9IDkKKyAgXGNhdGNvZGVgXH0gPSA5CisgICUKKyAgJSBDb3VudCBudW1iZXIgb2YgIzEncyB0aGF0IHdlJ3ZlIHNlZW4uCisgIFxkb2lnbm9yZWNvdW50ID0gMAorICAlCisgICUgU3dhbGxvdyB0ZXh0IHVudGlsIHdlIHJlYWNoIHRoZSBtYXRjaGluZyBgQGVuZCAjMScuCisgIFxleHBhbmRhZnRlciBcZG9kb2lnbm9yZSBcY3NuYW1lIzFcZW5kY3NuYW1lIHsjMX0lCit9CisKK3sgXGNhdGNvZGVgQD0xMSAlIFdlIHdhbnQgdG8gdXNlIFxTVEBQIHdoaWNoIGNhbm5vdCBhcHBlYXIgaW4gdGV4aW5mbyBzb3VyY2UuCisgIFxvYmV5bGluZXMgJQorICAlCisgIFxnZGVmXGRvZG9pZ25vcmUjMSMyeyUKKyAgICAlICMxIGNvbnRhaW5zLCBlLmcuLCBcaWZpbmZvLCBhLmsuYS4gQGlmaW5mby4KKyAgICAlICMyIGNvbnRhaW5zIHRoZSBzdHJpbmcgYGlmaW5mbycuCisgICAgJQorICAgICUgRGVmaW5lIGEgY29tbWFuZCB0byBmaW5kIHRoZSBuZXh0IGBAZW5kICMyJywgd2hpY2ggbXVzdCBiZSBvbiBhIGxpbmUKKyAgICAlIGJ5IGl0c2VsZi4KKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0IyMxXl5NXGVuZCAjMntcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NIzFcU1RAUH0lCisgICAgJSBBbmQgdGhpcyBjb21tYW5kIHRvIGZpbmQgYW5vdGhlciAjMSBjb21tYW5kLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKyAgICAlIGxpbmUuICAoT3RoZXJ3aXNlLCB3ZSB3b3VsZCBjb25zaWRlciBhIGxpbmUgYEBjIEBpZnNldCcsIGZvcgorICAgICUgZXhhbXBsZSwgdG8gY291bnQgYXMgYW4gQGlmc2V0IGZvciBuZXN0aW5nLikKKyAgICBcbG9uZ1xkZWZcZG9pZ25vcmV0ZXh0eXl5IyMxXl5NIzEjIzJcU1RAUHtcZG9pZ25vcmV5eXl7IyMyfVxTVEBQfSUKKyAgICAlCisgICAgJSBBbmQgbm93IGV4cGFuZCB0aGF0IGNvbW1hbmQuCisgICAgXG9iZXlsaW5lcyAlCisgICAgXGRvaWdub3JldGV4dCBeXk0lCisgIH0lCit9CisKK1xkZWZcZG9pZ25vcmV5eXkjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eQkJCSUgTm90aGluZyBmb3VuZC4KKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0enp6CisgIFxlbHNlCQkJCQklIEZvdW5kIGEgbmVzdGVkIGNvbmRpdGlvbiwgLi4uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAxCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dHl5eQkJJSAuLi4sIGxvb2sgZm9yIGFub3RoZXIuCisgICAgJSBJZiB3ZSdyZSBoZXJlLCAjMSBlbmRzIHdpdGggXl5NXGlmaW5mbyAoZm9yIGV4YW1wbGUpLgorICBcZmkKKyAgXG5leHQgIzElIHRoZSB0b2tlbiBcU1RAUCBpcyBwcmVzZW50IGp1c3QgYWZ0ZXIgdGhpcyBtYWNyby4KK30KKworJSBXZSBoYXZlIHRvIHN3YWxsb3cgdGhlIHJlbWFpbmluZyAiXFNUQFAiLgorJSAKK1xkZWZcZG9pZ25vcmV0ZXh0enp6IzF7JQorICBcaWZudW1cZG9pZ25vcmVjb3VudCA9IDAJJSBXZSBoYXZlIGp1c3QgZm91bmQgdGhlIG91dGVybW9zdCBAZW5kLgorICAgIFxsZXRcbmV4dFxlbmRkb2lnbm9yZQorICBcZWxzZQkJCQklIFN0aWxsIGluc2lkZSBhIG5lc3RlZCBjb25kaXRpb24uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAtMQorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHQgICAgICAlIExvb2sgZm9yIHRoZSBuZXh0IEBlbmQuCisgIFxmaQorICBcbmV4dAorfQorCislIEZpbmlzaCBvZmYgaWdub3JlZCB0ZXh0LgorXGRlZlxlbmRkb2lnbm9yZXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfQorCisKKyUgQHNldCBWQVIgc2V0cyB0aGUgdmFyaWFibGUgVkFSIHRvIGFuIGVtcHR5IHZhbHVlLgorJSBAc2V0IFZBUiBSRVNULU9GLUxJTkUgc2V0cyBWQVIgdG8gdGhlIHZhbHVlIFJFU1QtT0YtTElORS4KKyUKKyUgU2luY2Ugd2Ugd2FudCB0byBzZXBhcmF0ZSBWQVIgZnJvbSBSRVNULU9GLUxJTkUgKHdoaWNoIG1pZ2h0IGJlCislIGVtcHR5KSwgd2UgY2FuJ3QganVzdCB1c2UgXHBhcnNlYXJnOyB3ZSBoYXZlIHRvIGluc2VydCBhIHNwYWNlIG9mIG91cgorJSBvd24gdG8gZGVsaW1pdCB0aGUgcmVzdCBvZiB0aGUgbGluZSwgYW5kIHRoZW4gdGFrZSBpdCBvdXQgYWdhaW4gaWYgd2UKKyUgZGlkbid0IG5lZWQgaXQuICBNYWtlIHN1cmUgdGhlIGNhdGNvZGUgb2Ygc3BhY2UgaXMgY29ycmVjdCB0byBhdm9pZAorJSBsb3NpbmcgaW5zaWRlIEBleGFtcGxlLCBmb3IgaW5zdGFuY2UuCislCitcZGVmXHNldHtcYmVnaW5ncm91cFxjYXRjb2RlYCA9MTAKKyAgXGNhdGNvZGVgXC09MTIgXGNhdGNvZGVgXF89MTIgJSBBbGxvdyAtIGFuZCBfIGluIFZBUi4KKyAgXHBhcnNlYXJnXHNldHh4eH0KK1xkZWZcc2V0eHh4IzF7XHNldHl5eSMxIFxlbmRzZXR5eXl9CitcZGVmXHNldHl5eSMxICMyXGVuZHNldHl5eXslCisgIFxkZWZcdGVtcHsjMn0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lID0gXGVtcHR5CisgIFxlbHNlIFxzZXR6enp7IzF9IzJcZW5kc2V0enp6ICUgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZSBcc2V0eHh4IGluc2VydGVkLgorICBcZmkKKyAgXGVuZGdyb3VwCit9CislIENhbid0IHVzZSBceGRlZiB0byBwcmUtZXhwYW5kICMyIGFuZCBzYXZlIHNvbWUgdGltZSwgc2luY2UgXHRlbXAgb3IKKyUgXG5leHQgb3Igb3RoZXIgY29udHJvbCBzZXF1ZW5jZXMgdGhhdCB3ZSd2ZSBkZWZpbmVkIG1pZ2h0IGdldCB1cyBpbnRvCislIGFuIGluZmluaXRlIGxvb3AuIENvbnNpZGVyIGBAc2V0IGZvbyBAY2l0ZXtiYXJ9Jy4KK1xkZWZcc2V0enp6IzEjMiBcZW5kc2V0enp6e1xleHBhbmRhZnRlclxnZGVmXGNzbmFtZSBTRVQjMVxlbmRjc25hbWV7IzJ9fQorCislIEBjbGVhciBWQVIgY2xlYXJzIChpLmUuLCB1bnNldHMpIHRoZSB2YXJpYWJsZSBWQVIuCislCitcZGVmXGNsZWFye1xwYXJzZWFyZ1xjbGVhcnh4eH0KK1xkZWZcY2xlYXJ4eHgjMXtcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lPVxyZWxheH0KKworJSBAdmFsdWV7Zm9vfSBnZXRzIHRoZSB0ZXh0IHNhdmVkIGluIHZhcmlhYmxlIGZvby4KK3sKKyAgXGNhdGNvZGVgXF8gPSBcYWN0aXZlCisgICUKKyAgJSBXZSBtaWdodCBlbmQgdXAgd2l0aCBhY3RpdmUgXyBvciAtIGNoYXJhY3RlcnMgaW4gdGhlIGFyZ3VtZW50IGlmCisgICUgd2UncmUgY2FsbGVkIGZyb20gQGNvZGUsIGFzIEBjb2Rle0B2YWx1ZXtmb28tYmFyX319LiAgU28gXGxldCBhbnkKKyAgJSBzdWNoIGFjdGl2ZSBjaGFyYWN0ZXJzIHRvIHRoZWlyIG5vcm1hbCBlcXVpdmFsZW50cy4KKyAgXGdkZWZcdmFsdWV7XGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcLT1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyCisgICAgXGluZGV4YnJlYWtzIFxsZXRfXG5vcm1hbHVuZGVyc2NvcmUKKyAgICBcdmFsdWV4eHh9Cit9CitcZGVmXHZhbHVleHh4IzF7XGV4cGFuZGFibGV2YWx1ZXsjMX1cZW5kZ3JvdXB9CisKKyUgV2UgaGF2ZSB0aGlzIHN1YnJvdXRpbmUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGF0IGxlYXN0IHNvbWUgQHZhbHVlJ3MKKyUgcHJvcGVybHkgaW4gaW5kZXhlcyAod2UgXGxldFx2YWx1ZSB0byB0aGlzIGluIFxpbmRleGR1bW1pZXMpLiAgT25lcworJSB3aG9zZSBuYW1lcyBjb250YWluIC0gb3IgXyBzdGlsbCB3b24ndCB3b3JrLCBidXQgd2UgY2FuJ3QgZG8gYW55dGhpbmcKKyUgYWJvdXQgdGhhdC4gIFRoZSBjb21tYW5kIGhhcyB0byBiZSBmdWxseSBleHBhbmRhYmxlIChpZiB0aGUgdmFyaWFibGUKKyUgaXMgc2V0KSwgc2luY2UgdGhlIHJlc3VsdCB3aW5kcyB1cCBpbiB0aGUgaW5kZXggZmlsZS4gIFRoaXMgbWVhbnMgdGhhdAorJSBpZiB0aGUgdmFyaWFibGUncyB2YWx1ZSBjb250YWlucyBvdGhlciBUZXhpbmZvIGNvbW1hbmRzLCBpdCdzIGFsbW9zdAorJSBjZXJ0YWluIGl0IHdpbGwgZmFpbCAoYWx0aG91Z2ggcGVyaGFwcyB3ZSBjb3VsZCBmaXggdGhhdCB3aXRoCislIHN1ZmZpY2llbnQgd29yayB0byBkbyBhIG9uZS1sZXZlbCBleHBhbnNpb24gb24gdGhlIHJlc3VsdCwgaW5zdGVhZCBvZgorJSBjb21wbGV0ZSkuCislCitcZGVmXGV4cGFuZGFibGV2YWx1ZSMxeyUKKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lXHJlbGF4CisgICAge1tObyB2YWx1ZSBmb3IgYGAjMScnXX0lCisgICAgXG1lc3NhZ2V7VmFyaWFibGUgYCMxJywgdXNlZCBpbiBAdmFsdWUsIGlzIG5vdCBzZXQufSUKKyAgXGVsc2UKKyAgICBcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZQorICBcZmkKK30KKworJSBAaWZzZXQgVkFSIC4uLiBAZW5kIGlmc2V0IHJlYWRzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBiZWVuIGRlZmluZWQKKyUgd2l0aCBAc2V0LgorJQorXGRlZlxpZnNldHtccGFyc2VhcmdcZG9pZnNldH0KK1xkZWZcZG9pZnNldCMxeyUKKyAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUIzFcZW5kY3NuYW1lXHJlbGF4CisgICAgXGxldFxuZXh0PVxpZnNldGZhaWwKKyAgXGVsc2UKKyAgICBcbGV0XG5leHQ9XGlmc2V0c3VjY2VlZAorICBcZmkKKyAgXG5leHQKK30KK1xkZWZcaWZzZXRzdWNjZWVke1xjb25kaXRpb25hbHN1Y2NlZWR7aWZzZXR9fQorXGRlZlxpZnNldGZhaWx7XGRvaWdub3Jle2lmc2V0fX0KK1xkZWZpbmV1bm1hdGNoZWRlbmR7aWZzZXR9CisKKyUgQGlmY2xlYXIgVkFSIC4uLiBAZW5kIGlmY2xlYXIgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIG5ldmVyIGJlZW4KKyUgZGVmaW5lZCB3aXRoIEBzZXQsIG9yIGhhcyBiZWVuIHVuZGVmaW5lZCB3aXRoIEBjbGVhci4KKyUKK1xkZWZcaWZjbGVhcntccGFyc2VhcmdcZG9pZmNsZWFyfQorXGRlZlxkb2lmY2xlYXIjMXslCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZVxyZWxheAorICAgIFxsZXRcbmV4dD1caWZjbGVhcnN1Y2NlZWQKKyAgXGVsc2UKKyAgICBcbGV0XG5leHQ9XGlmY2xlYXJmYWlsCisgIFxmaQorICBcbmV4dAorfQorXGRlZlxpZmNsZWFyc3VjY2VlZHtcY29uZGl0aW9uYWxzdWNjZWVke2lmY2xlYXJ9fQorXGRlZlxpZmNsZWFyZmFpbHtcZG9pZ25vcmV7aWZjbGVhcn19CitcZGVmaW5ldW5tYXRjaGVkZW5ke2lmY2xlYXJ9CisKKyUgQGlmdGV4LCBAaWZub3RodG1sLCBAaWZub3RpbmZvLCBAaWZub3RwbGFpbnRleHQgYWx3YXlzIHN1Y2NlZWQ7IHdlCislIHJlYWQgdGhlIHRleHQgZm9sbG93aW5nLCB0aHJvdWdoIHRoZSBmaXJzdCBAZW5kIGlmdGV4IChldGMuKS4gIE1ha2UKKyUgYEBlbmQgaWZ0ZXgnIChldGMuKSB2YWxpZCBvbmx5IGFmdGVyIGFuIEBpZnRleC4KKyUKK1xkZWZcaWZ0ZXh7XGNvbmRpdGlvbmFsc3VjY2VlZHtpZnRleH19CitcZGVmXGlmbm90aHRtbHtcY29uZGl0aW9uYWxzdWNjZWVke2lmbm90aHRtbH19CitcZGVmXGlmbm90aW5mb3tcY29uZGl0aW9uYWxzdWNjZWVke2lmbm90aW5mb319CitcZGVmXGlmbm90cGxhaW50ZXh0e1xjb25kaXRpb25hbHN1Y2NlZWR7aWZub3RwbGFpbnRleHR9fQorXGRlZmluZXVubWF0Y2hlZGVuZHtpZnRleH0KK1xkZWZpbmV1bm1hdGNoZWRlbmR7aWZub3RodG1sfQorXGRlZmluZXVubWF0Y2hlZGVuZHtpZm5vdGluZm99CitcZGVmaW5ldW5tYXRjaGVkZW5ke2lmbm90cGxhaW50ZXh0fQorCislIFRydWUgY29uZGl0aW9uYWwuICBTaW5jZSBcc2V0IGdsb2JhbGx5IGRlZmluZXMgaXRzIHZhcmlhYmxlcywgd2UgY2FuCislIGp1c3Qgc3RhcnQgYW5kIGVuZCBhIGdyb3VwICh0byBrZWVwIHRoZSBAZW5kIGRlZmluaXRpb24gdW5kZWZpbmVkIGF0CislIHRoZSBvdXRlciBsZXZlbCkuCislCitcZGVmXGNvbmRpdGlvbmFsc3VjY2VlZCMxe1xiZWdpbmdyb3VwCisgIFxleHBhbmRhZnRlclxkZWZcY3NuYW1lIEUjMVxlbmRjc25hbWV7XGVuZGdyb3VwfSUKK30KKworJSBAZGVmaW5pbmZvZW5jbG9zZS4KK1xsZXRcZGVmaW5mb2VuY2xvc2U9XGNvbW1lbnQKKworCitcbWVzc2FnZXtpbmRleGluZyx9CislIEluZGV4IGdlbmVyYXRpb24gZmFjaWxpdGllcworCislIERlZmluZSBcbmV3d3JpdGUgdG8gYmUgaWRlbnRpY2FsIHRvIHBsYWluIHRleCdzIFxuZXd3cml0ZQorJSBleGNlcHQgbm90IFxvdXRlciwgc28gaXQgY2FuIGJlIHVzZWQgd2l0aGluIFxuZXdpbmRleC4KK3tcY2F0Y29kZWBcQD0xMQorXGdkZWZcbmV3d3JpdGV7XGFsbG9jQDdcd3JpdGVcY2hhcmRlZlxzaXh0QEBufX0KKworJSBcbmV3aW5kZXgge2Zvb30gZGVmaW5lcyBhbiBpbmRleCBuYW1lZCBmb28uCislIEl0IGF1dG9tYXRpY2FsbHkgZGVmaW5lcyBcZm9vaW5kZXggc3VjaCB0aGF0CislIFxmb29pbmRleCAuLi5yZXN0IG9mIGxpbmUuLi4gcHV0cyBhbiBlbnRyeSBpbiB0aGUgaW5kZXggZm9vLgorJSBJdCBhbHNvIGRlZmluZXMgXGZvb2luZGZpbGUgdG8gYmUgdGhlIG51bWJlciBvZiB0aGUgb3V0cHV0IGNoYW5uZWwgZm9yCislIHRoZSBmaWxlIHRoYXQgYWNjdW11bGF0ZXMgdGhpcyBpbmRleC4gIFRoZSBmaWxlJ3MgZXh0ZW5zaW9uIGlzIGZvby4KKyUgVGhlIG5hbWUgb2YgYW4gaW5kZXggc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyIGNoYXJhY3RlcnMgbG9uZworJSBmb3IgdGhlIHNha2Ugb2Ygdm1zLgorJQorXGRlZlxuZXdpbmRleCMxeyUKKyAgXGlmbGlua3MKKyAgICBcZXhwYW5kYWZ0ZXJcbmV3d3JpdGUgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcb3Blbm91dCBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZSBcam9ibmFtZS4jMSAlIE9wZW4gdGhlIGZpbGUKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUgICAgICUgRGVmaW5lIEAjMWluZGV4CisgICAgXG5vZXhwYW5kXGRvaW5kZXh7IzF9fQorfQorCislIEBkZWZpbmRleCBmb28gID09ICBcbmV3aW5kZXh7Zm9vfQorJQorXGRlZlxkZWZpbmRleHtccGFyc2VhcmdcbmV3aW5kZXh9CisKKyUgRGVmaW5lIEBkZWZjb2RlaW5kZXgsIGxpa2UgQGRlZmluZGV4IGV4Y2VwdCBwdXQgYWxsIGVudHJpZXMgaW4gQGNvZGUuCislCitcZGVmXGRlZmNvZGVpbmRleHtccGFyc2VhcmdcbmV3Y29kZWluZGV4fQorJQorXGRlZlxuZXdjb2RlaW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUKKyAgICBcbm9leHBhbmRcZG9jb2RlaW5kZXh7IzF9fSUKK30KKworCislIEBzeW5pbmRleCBmb28gYmFyICAgIG1ha2VzIGluZGV4IGZvbyBmZWVkIGludG8gaW5kZXggYmFyLgorJSBEbyB0aGlzIGluc3RlYWQgb2YgQGRlZmluZGV4IGZvbyBpZiB5b3UgZG9uJ3Qgd2FudCBpdCBhcyBhIHNlcGFyYXRlIGluZGV4LgorJQorJSBAc3luY29kZWluZGV4IGZvbyBiYXIgICBzaW1pbGFyLCBidXQgcHV0IGFsbCBlbnRyaWVzIG1hZGUgZm9yIGluZGV4IGZvbworJSBpbnNpZGUgQGNvZGUuCislCitcZGVmXHN5bmluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvaW5kZXh7IzF9eyMyfX0KK1xkZWZcc3luY29kZWluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvY29kZWluZGV4eyMxfXsjMn19CisKKyUgIzEgaXMgXGRvaW5kZXggb3IgXGRvY29kZWluZGV4LCAjMiB0aGUgaW5kZXggZ2V0dGluZyByZWRlZmluZWQgKGZvbyksCislICMzIHRoZSB0YXJnZXQgaW5kZXggKGJhcikuCitcZGVmXGRvc3luaW5kZXgjMSMyIzN7JQorICAlIE9ubHkgZG8gXGNsb3Nlb3V0IGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIGl0LCBlbHNlIHdlJ2xsIGVuZCB1cAorICAlIGNsb3NpbmcgdGhlIHRhcmdldCBpbmRleC4KKyAgXGV4cGFuZGFmdGVyIFxpZnhcY3NuYW1lIGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSBcdW5kZWZpbmVkCisgICAgJSBUaGUgXGNsb3Nlb3V0IGhlbHBzIHJlZHVjZSB1bm5lY2Vzc2FyeSBvcGVuIGZpbGVzOyB0aGUgbGltaXQgb24gdGhlCisgICAgJSBBY29ybiBSSVNDIE9TIGlzIGEgbWVyZSAxNiBmaWxlcy4KKyAgICBcZXhwYW5kYWZ0ZXJcY2xvc2VvdXRcY3NuYW1lIzJpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lXGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSA9IDEKKyAgXGZpCisgICUgcmVkZWZpbmUgXGZvb2luZGZpbGU6CisgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcdGVtcFxleHBhbmRhZnRlcj1cY3NuYW1lIzNpbmRmaWxlXGVuZGNzbmFtZQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWU9XHRlbXAKKyAgJSByZWRlZmluZSBcZm9vaW5kZXg6CisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMyaW5kZXhcZW5kY3NuYW1le1xub2V4cGFuZCMxeyMzfX0lCit9CisKKyUgRGVmaW5lIFxkb2luZGV4LCB0aGUgZHJpdmVyIGZvciBhbGwgXGZvb2luZGV4IG1hY3Jvcy4KKyUgQXJndW1lbnQgIzEgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjYWxsaW5nIFxmb29pbmRleCBtYWNybywKKyUgIGFuZCBpdCBpcyAiZm9vIiwgdGhlIG5hbWUgb2YgdGhlIGluZGV4LgorCislIFxkb2luZGV4IGp1c3QgdXNlcyBccGFyc2Vhcmc7IGl0IGNhbGxzIFxkb2luZCBmb3IgdGhlIGFjdHVhbCB3b3JrLgorJSBUaGlzIGlzIGJlY2F1c2UgXGRvaW5kIGlzIG1vcmUgdXNlZnVsIHRvIGNhbGwgZnJvbSBvdGhlciBtYWNyb3MuCisKKyUgVGhlcmUgaXMgYWxzbyBcZG9zdWJpbmQge2luZGV4fXt0b3BpY317c3VidG9waWN9CislIHdoaWNoIG1ha2VzIGFuIGVudHJ5IGluIGEgdHdvLWxldmVsIGluZGV4IHN1Y2ggYXMgdGhlIG9wZXJhdGlvbiBpbmRleC4KKworXGRlZlxkb2luZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVpbmRleGVyfQorXGRlZlxzaW5nbGVpbmRleGVyICMxe1xkb2luZHtcaW5kZXhuYW1lfXsjMX19CisKKyUgbGlrZSB0aGUgcHJldmlvdXMgdHdvLCBidXQgdGhleSBwdXQgQGNvZGUgYXJvdW5kIHRoZSBhcmd1bWVudC4KK1xkZWZcZG9jb2RlaW5kZXgjMXtcZWRlZlxpbmRleG5hbWV7IzF9XHBhcnNlYXJnXHNpbmdsZWNvZGVpbmRleGVyfQorXGRlZlxzaW5nbGVjb2RlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17XGNvZGV7IzF9fX0KKworJSBUYWtlIGNhcmUgb2YgVGV4aW5mbyBjb21tYW5kcyB0aGF0IGNhbiBhcHBlYXIgaW4gYW4gaW5kZXggZW50cnkuCislIFNpbmNlIHRoZXJlIGFyZSBzb21lIGNvbW1hbmRzIHdlIHdhbnQgdG8gZXhwYW5kLCBhbmQgb3RoZXJzIHdlIGRvbid0LAorJSB3ZSBoYXZlIHRvIGxhYm9yaW91c2x5IHByZXZlbnQgZXhwYW5zaW9uIGZvciB0aG9zZSB0aGF0IHdlIGRvbid0LgorJQorXGRlZlxpbmRleGR1bW1pZXN7JQorICBcZGVmXEB7QH0lIGNoYW5nZSB0byBAQCB3aGVuIHdlIHN3aXRjaCB0byBAIGFzIGVzY2FwZSBjaGFyIGluIGluZGV4IGZpbGVzLgorICBcZGVmXCB7XHJlYWxiYWNrc2xhc2hcc3BhY2UgfSUKKyAgJSBOZWVkIHRoZXNlIGluIGNhc2UgXHRleCBpcyBpbiBlZmZlY3QgYW5kIFx7IGlzIGEgXGRlbGltaXRlciBhZ2Fpbi4KKyAgJSBCdXQgY2FuJ3QgdXNlIFxsYnJhY2VjbWQgYW5kIFxyYnJhY2VjbWQgYmVjYXVzZSB0ZXhpbmRleCBhc3N1bWVzCisgICUgYnJhY2VzIGFuZCBiYWNrc2xhc2hlcyBhcmUgdXNlZCBvbmx5IGFzIGRlbGltaXRlcnMuCisgIFxsZXRceyA9IFxteWxicmFjZQorICBcbGV0XH0gPSBcbXlyYnJhY2UKKyAgJQorICAlIFxkZWZpbmVkdW1teXdvcmQgZGVmaW5lcyBcIzEgYXMgXHJlYWxiYWNrc2xhc2ggIzFcc3BhY2UsIHRodXMKKyAgJSBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIGl0cyBleHBhbnNpb24uICBUaGlzIGlzIHVzZWQgb25seSBmb3IgY29udHJvbAorICAlIHdvcmRzLCBub3QgY29udHJvbCBsZXR0ZXJzLCBiZWNhdXNlIHRoZSBcc3BhY2Ugd291bGQgYmUgaW5jb3JyZWN0CisgICUgZm9yIGNvbnRyb2wgY2hhcmFjdGVycywgYnV0IGlzIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgY29udHJvbCB3b3JkCisgICUgZnJvbSB3aGF0ZXZlciBmb2xsb3dzLgorICAlCisgICUgRm9yIGNvbnRyb2wgbGV0dGVycywgd2UgaGF2ZSBcZGVmaW5lZHVtbXlsZXR0ZXIsIHdoaWNoIG9taXRzIHRoZQorICAlIHNwYWNlLgorICAlCisgICUgVGhlc2UgY2FuIGJlIHVzZWQgYm90aCBmb3IgY29udHJvbCB3b3JkcyB0aGF0IHRha2UgYW4gYXJndW1lbnQgYW5kCisgICUgdGhvc2UgdGhhdCBkbyBub3QuICBJZiBpdCBpcyBmb2xsb3dlZCBieSB7YXJnfSBpbiB0aGUgaW5wdXQsIHRoZW4KKyAgJSB0aGF0IHdpbGwgZHV0aWZ1bGx5IGdldCB3cml0dGVuIHRvIHRoZSBpbmRleCAob3Igd2hlcmV2ZXIpLgorICAlCisgIFxkZWZcZGVmaW5lZHVtbXl3b3JkIyMxeyUKKyAgICBcZXhwYW5kYWZ0ZXJcZGVmXGNzbmFtZSAjIzFcZW5kY3NuYW1le1xyZWFsYmFja3NsYXNoICMjMVxzcGFjZX0lCisgIH0lCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7JQorICAgIFxleHBhbmRhZnRlclxkZWZcY3NuYW1lICMjMVxlbmRjc25hbWV7XHJlYWxiYWNrc2xhc2ggIyMxfSUKKyAgfSUKKyAgJQorICAlIERvIHRoZSByZWRlZmluaXRpb25zLgorICBcY29tbW9uZHVtbWllcworfQorCislIEZvciB0aGUgYXV4IGZpbGUsIEAgaXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIuICBTbyB3ZSB3YW50IHRvIHJlZGVmaW5lCislIGV2ZXJ5dGhpbmcgdXNpbmcgQCBpbnN0ZWFkIG9mIFxyZWFsYmFja3NsYXNoLiAgV2hlbiBldmVyeXRoaW5nIHVzZXMKKyUgQCwgdGhpcyB3aWxsIGJlIHNpbXBsZXIuCislCitcZGVmXGF0ZHVtbWllc3slCisgIFxkZWZcQHtAQH0lCisgIFxkZWZcIHtAIH0lCisgIFxsZXRceyA9IFxsYnJhY2VhdGNtZAorICBcbGV0XH0gPSBccmJyYWNlYXRjbWQKKyAgJQorICAlIChTZWUgY29tbWVudHMgaW4gXGluZGV4ZHVtbWllcy4pCisgIFxkZWZcZGVmaW5lZHVtbXl3b3JkIyMxeyUKKyAgICBcZXhwYW5kYWZ0ZXJcZGVmXGNzbmFtZSAjIzFcZW5kY3NuYW1le0AjIzFcc3BhY2V9JQorICB9JQorICBcZGVmXGRlZmluZWR1bW15bGV0dGVyIyMxeyUKKyAgICBcZXhwYW5kYWZ0ZXJcZGVmXGNzbmFtZSAjIzFcZW5kY3NuYW1le0AjIzF9JQorICB9JQorICAlCisgICUgRG8gdGhlIHJlZGVmaW5pdGlvbnMuCisgIFxjb21tb25kdW1taWVzCit9CisKKyUgQ2FsbGVkIGZyb20gXGluZGV4ZHVtbWllcyBhbmQgXGF0ZHVtbWllcy4gIFxkZWZpbmVkdW1teXdvcmQgYW5kCislIFxkZWZpbmVkdW1teWxldHRlciBtdXN0IGJlIGRlZmluZWQgZmlyc3QuCislCitcZGVmXGNvbW1vbmR1bW1pZXN7JQorICAlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICUKKyAgJSBDb250cm9sIGxldHRlcnMgYW5kIGFjY2VudHMuCisgIFxkZWZpbmVkdW1teWxldHRlcntffSUKKyAgXGRlZmluZWR1bW15bGV0dGVyeyx9JQorICBcZGVmaW5lZHVtbXlsZXR0ZXJ7In0lCisgIFxkZWZpbmVkdW1teWxldHRlcntgfSUKKyAgXGRlZmluZWR1bW15bGV0dGVyeyd9JQorICBcZGVmaW5lZHVtbXlsZXR0ZXJ7Xn0lCisgIFxkZWZpbmVkdW1teWxldHRlcnt+fSUKKyAgXGRlZmluZWR1bW15bGV0dGVyez19JQorICBcZGVmaW5lZHVtbXl3b3Jke3V9JQorICBcZGVmaW5lZHVtbXl3b3Jke3Z9JQorICBcZGVmaW5lZHVtbXl3b3Jke0h9JQorICBcZGVmaW5lZHVtbXl3b3Jke2RvdGFjY2VudH0lCisgIFxkZWZpbmVkdW1teXdvcmR7cmluZ2FjY2VudH0lCisgIFxkZWZpbmVkdW1teXdvcmR7dGllYWNjZW50fSUKKyAgXGRlZmluZWR1bW15d29yZHt1YmFyYWNjZW50fSUKKyAgXGRlZmluZWR1bW15d29yZHt1ZG90YWNjZW50fSUKKyAgXGRlZmluZWR1bW15d29yZHtkb3RsZXNzfSUKKyAgJQorICAlIE90aGVyIG5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZpbmVkdW1teXdvcmR7QUF9JQorICBcZGVmaW5lZHVtbXl3b3Jke0FFfSUKKyAgXGRlZmluZWR1bW15d29yZHtMfSUKKyAgXGRlZmluZWR1bW15d29yZHtPRX0lCisgIFxkZWZpbmVkdW1teXdvcmR7T30lCisgIFxkZWZpbmVkdW1teXdvcmR7YWF9JQorICBcZGVmaW5lZHVtbXl3b3Jke2FlfSUKKyAgXGRlZmluZWR1bW15d29yZHtsfSUKKyAgXGRlZmluZWR1bW15d29yZHtvZX0lCisgIFxkZWZpbmVkdW1teXdvcmR7b30lCisgIFxkZWZpbmVkdW1teXdvcmR7c3N9JQorICAlCisgICUgQWx0aG91Z2ggdGhlc2UgaW50ZXJuYWwgY29tbWFuZHMgc2hvdWxkbid0IHNob3cgdXAsIHNvbWV0aW1lcyB0aGV5IGRvLgorICBcZGVmaW5lZHVtbXl3b3Jke2JmfSUKKyAgXGRlZmluZWR1bW15d29yZHtndHJ9JQorICBcZGVmaW5lZHVtbXl3b3Jke2hhdH0lCisgIFxkZWZpbmVkdW1teXdvcmR7bGVzc30lCisgIFxkZWZpbmVkdW1teXdvcmR7c2Z9JQorICBcZGVmaW5lZHVtbXl3b3Jke3NsfSUKKyAgXGRlZmluZWR1bW15d29yZHt0Y2xvc2V9JQorICBcZGVmaW5lZHVtbXl3b3Jke3R0fSUKKyAgJQorICAlIFRleGluZm8gZm9udCBjb21tYW5kcy4KKyAgXGRlZmluZWR1bW15d29yZHtifSUKKyAgXGRlZmluZWR1bW15d29yZHtpfSUKKyAgXGRlZmluZWR1bW15d29yZHtyfSUKKyAgXGRlZmluZWR1bW15d29yZHtzY30lCisgIFxkZWZpbmVkdW1teXdvcmR7dH0lCisgICUKKyAgXGRlZmluZWR1bW15d29yZHtUZVh9JQorICBcZGVmaW5lZHVtbXl3b3Jke2Fjcm9ueW19JQorICBcZGVmaW5lZHVtbXl3b3Jke2NpdGV9JQorICBcZGVmaW5lZHVtbXl3b3Jke2NvZGV9JQorICBcZGVmaW5lZHVtbXl3b3Jke2NvbW1hbmR9JQorICBcZGVmaW5lZHVtbXl3b3Jke2Rmbn0lCisgIFxkZWZpbmVkdW1teXdvcmR7ZG90c30lCisgIFxkZWZpbmVkdW1teXdvcmR7ZW1waH0lCisgIFxkZWZpbmVkdW1teXdvcmR7ZW52fSUKKyAgXGRlZmluZWR1bW15d29yZHtmaWxlfSUKKyAgXGRlZmluZWR1bW15d29yZHtrYmR9JQorICBcZGVmaW5lZHVtbXl3b3Jke2tleX0lCisgIFxkZWZpbmVkdW1teXdvcmR7bWF0aH0lCisgIFxkZWZpbmVkdW1teXdvcmR7b3B0aW9ufSUKKyAgXGRlZmluZWR1bW15d29yZHtzYW1wfSUKKyAgXGRlZmluZWR1bW15d29yZHtzdHJvbmd9JQorICBcZGVmaW5lZHVtbXl3b3Jke3VyZWZ9JQorICBcZGVmaW5lZHVtbXl3b3Jke3VybH0lCisgIFxkZWZpbmVkdW1teXdvcmR7dmFyfSUKKyAgXGRlZmluZWR1bW15d29yZHt2ZXJifSUKKyAgXGRlZmluZWR1bW15d29yZHt3fSUKKyAgJQorICAlIEFzc29ydGVkIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgXGRlZmluZWR1bW15d29yZHtidWxsZXR9JQorICBcZGVmaW5lZHVtbXl3b3Jke2NvcHlyaWdodH0lCisgIFxkZWZpbmVkdW1teXdvcmR7ZG90c30lCisgIFxkZWZpbmVkdW1teXdvcmR7ZW5kZG90c30lCisgIFxkZWZpbmVkdW1teXdvcmR7ZXF1aXZ9JQorICBcZGVmaW5lZHVtbXl3b3Jke2Vycm9yfSUKKyAgXGRlZmluZWR1bW15d29yZHtleHBhbnNpb259JQorICBcZGVmaW5lZHVtbXl3b3Jke21pbnVzfSUKKyAgXGRlZmluZWR1bW15d29yZHtwb3VuZHN9JQorICBcZGVmaW5lZHVtbXl3b3Jke3BvaW50fSUKKyAgXGRlZmluZWR1bW15d29yZHtwcmludH0lCisgIFxkZWZpbmVkdW1teXdvcmR7cmVzdWx0fSUKKyAgJQorICAlIEhhbmRsZSBzb21lIGNhc2VzIG9mIEB2YWx1ZSAtLSB3aGVyZSB0aGUgdmFyaWFibGUgbmFtZSBkb2VzIG5vdAorICAlIGNvbnRhaW4gLSBvciBfLCBhbmQgdGhlIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gYW55CisgICUgKG5vbi1mdWxseS1leHBhbmRhYmxlKSBjb21tYW5kcy4KKyAgXGxldFx2YWx1ZSA9IFxleHBhbmRhYmxldmFsdWUKKyAgJQorICAlIE5vcm1hbCBzcGFjZXMsIG5vdCBhY3RpdmUgb25lcy4KKyAgXHVuc2Vwc3BhY2VzCisgICUKKyAgJSBObyBtYWNybyBleHBhbnNpb24uCisgIFx0dXJub2ZmbWFjcm9zCit9CisKKyUgSWYgYW4gaW5kZXggY29tbWFuZCBpcyB1c2VkIGluIGFuIEBleGFtcGxlIGVudmlyb25tZW50LCBhbnkgc3BhY2VzCislIHRoZXJlaW4gc2hvdWxkIGJlY29tZSByZWd1bGFyIHNwYWNlcyBpbiB0aGUgcmF3IGluZGV4IGZpbGUsIG5vdCB0aGUKKyUgZXhwYW5zaW9uIG9mIFx0aWUgKFxsZWF2ZXZtb2RlIFxwZW5hbHR5IFxATSBcICkuCit7XG9iZXlzcGFjZXMKKyBcZ2RlZlx1bnNlcHNwYWNlc3tcb2JleXNwYWNlc1xsZXQgPVxzcGFjZX19CisKKworJSBcaW5kZXhub2ZvbnRzIGlzIHVzZWQgd2hlbiBvdXRwdXR0aW5nIHRoZSBzdHJpbmdzIHRvIHNvcnQgdGhlIGluZGV4CislIGJ5LCBhbmQgd2hlbiBjb25zdHJ1Y3RpbmcgY29udHJvbCBzZXF1ZW5jZSBuYW1lcy4gIEl0IGVsaW1pbmF0ZXMgYWxsCislIGNvbnRyb2wgc2VxdWVuY2VzIGFuZCBqdXN0IHdyaXRlcyB3aGF0ZXZlciB0aGUgYmVzdCBBU0NJSSBzb3J0IHN0cmluZworJSB3b3VsZCBiZSBmb3IgYSBnaXZlbiBjb21tYW5kICh1c3VhbGx5IGl0cyBhcmd1bWVudCkuCislCitcZGVmXGluZGV4ZHVtbXl0ZXh7VGVYfQorXGRlZlxpbmRleGR1bW15ZG90c3suLi59CislCitcZGVmXGluZGV4bm9mb250c3slCisgIFxkZWZcIHsgfSUKKyAgXGRlZlxAe0B9JQorICAlIGhvdyB0byBoYW5kbGUgYnJhY2VzPworICBcZGVmXF97XG5vcm1hbHVuZGVyc2NvcmV9JQorICAlCisgIFxsZXRcLD1cYXNpcworICBcbGV0XCI9XGFzaXMKKyAgXGxldFxgPVxhc2lzCisgIFxsZXRcJz1cYXNpcworICBcbGV0XF49XGFzaXMKKyAgXGxldFx+PVxhc2lzCisgIFxsZXRcPT1cYXNpcworICBcbGV0XHU9XGFzaXMKKyAgXGxldFx2PVxhc2lzCisgIFxsZXRcSD1cYXNpcworICBcbGV0XGRvdGFjY2VudD1cYXNpcworICBcbGV0XHJpbmdhY2NlbnQ9XGFzaXMKKyAgXGxldFx0aWVhY2NlbnQ9XGFzaXMKKyAgXGxldFx1YmFyYWNjZW50PVxhc2lzCisgIFxsZXRcdWRvdGFjY2VudD1cYXNpcworICBcbGV0XGRvdGxlc3M9XGFzaXMKKyAgJQorICAlIE90aGVyIG5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZcQUF7QUF9JQorICBcZGVmXEFFe0FFfSUKKyAgXGRlZlxMe0x9JQorICBcZGVmXE9Fe09FfSUKKyAgXGRlZlxPe099JQorICBcZGVmXGFhe2FhfSUKKyAgXGRlZlxhZXthZX0lCisgIFxkZWZcbHtsfSUKKyAgXGRlZlxvZXtvZX0lCisgIFxkZWZcb3tvfSUKKyAgXGRlZlxzc3tzc30lCisgIFxkZWZcZXhjbGFtZG93bnshfSUKKyAgXGRlZlxxdWVzdGlvbmRvd257P30lCisgICUKKyAgJSBEb24ndCBuby1vcCBcdHQsIHNpbmNlIGl0IGlzbid0IGEgdXNlci1sZXZlbCBjb21tYW5kCisgICUgYW5kIGlzIHVzZWQgaW4gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBhY3RpdmUgY2hhcnMgbGlrZSA8LCA+LCB8LCBldGMuCisgICUgTGlrZXdpc2Ugd2l0aCB0aGUgb3RoZXIgcGxhaW4gdGV4IGZvbnQgY29tbWFuZHMuCisgICVcbGV0XHR0PVxhc2lzCisgICUKKyAgJSBUZXhpbmZvIGZvbnQgY29tbWFuZHMuCisgIFxsZXRcYj1cYXNpcworICBcbGV0XGk9XGFzaXMKKyAgXGxldFxyPVxhc2lzCisgIFxsZXRcc2M9XGFzaXMKKyAgXGxldFx0PVxhc2lzCisgICUKKyAgXGxldFxUZVg9XGluZGV4ZHVtbXl0ZXgKKyAgXGxldFxhY3JvbnltPVxhc2lzCisgIFxsZXRcY2l0ZT1cYXNpcworICBcbGV0XGNvZGU9XGFzaXMKKyAgXGxldFxjb21tYW5kPVxhc2lzCisgIFxsZXRcZGZuPVxhc2lzCisgIFxsZXRcZG90cz1caW5kZXhkdW1teWRvdHMKKyAgXGxldFxlbXBoPVxhc2lzCisgIFxsZXRcZW52PVxhc2lzCisgIFxsZXRcZmlsZT1cYXNpcworICBcbGV0XGtiZD1cYXNpcworICBcbGV0XGtleT1cYXNpcworICBcbGV0XG1hdGg9XGFzaXMKKyAgXGxldFxvcHRpb249XGFzaXMKKyAgXGxldFxzYW1wPVxhc2lzCisgIFxsZXRcc3Ryb25nPVxhc2lzCisgIFxsZXRcdXJlZj1cYXNpcworICBcbGV0XHVybD1cYXNpcworICBcbGV0XHZhcj1cYXNpcworICBcbGV0XHZlcmI9XGFzaXMKKyAgXGxldFx3PVxhc2lzCit9CisKK1xsZXRcaW5kZXhiYWNrc2xhc2g9MCAgJW92ZXJyaWRkZW4gZHVyaW5nIFxwcmludGluZGV4LgorXGxldFxTRVRtYXJnaW5pbmRleD1ccmVsYXggJSBwdXQgaW5kZXggZW50cmllcyBpbiBtYXJnaW4gKHVuZG9jdW1lbnRlZCk/CisKKyUgTW9zdCBpbmRleCBlbnRyaWVzIGdvIHRocm91Z2ggaGVyZSwgYnV0IFxkb3N1YmluZCBpcyB0aGUgZ2VuZXJhbCBjYXNlLgorJQorXGRlZlxkb2luZCMxIzJ7XGRvc3ViaW5keyMxfXsjMn17fX0KKworJSBXb3JraG9yc2UgZm9yIGFsbCBcZm9vaW5kZXhlcy4KKyUgIzEgaXMgbmFtZSBvZiBpbmRleCwgIzIgaXMgc3R1ZmYgdG8gcHV0IHRoZXJlLCAjMyBpcyBzdWJlbnRyeSAtLQorJSBcZW1wdHkgaWYgY2FsbGVkIGZyb20gXGRvaW5kLCBhcyB3ZSB1c3VhbGx5IGFyZS4gIFRoZSBtYWluIGV4Y2VwdGlvbgorJSBpcyB3aXRoIGRlZnVucywgd2hpY2ggY2FsbCB1cyBkaXJlY3RseS4KKyUKK1xkZWZcZG9zdWJpbmQjMSMyIzN7JQorICBcaWZsaW5rcworICB7JQorICAgICUgU3RvcmUgdGhlIG1haW4gaW5kZXggZW50cnkgdGV4dCAoaW5jbHVkaW5nIHRoZSB0aGlyZCBhcmcpLgorICAgIFx0b2tzMCA9IHsjMn0lCisgICAgJSBJZiB0aGlyZCBhcmcgaXMgcHJlc2VudCwgcHJlY2VkZSBpdCB3aXRoIHNwYWNlLgorICAgIFxkZWZcdGhpcmRhcmd7IzN9JQorICAgIFxpZnhcdGhpcmRhcmdcZW1wdHkgXGVsc2UKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhlXHRva3MwIFxzcGFjZSAjM30lCisgICAgXGZpCisgICAgJQorICAgIFxlZGVmXHdyaXRldG97XGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWV9JQorICAgICUKKyAgICBcaWZ2bW9kZQorICAgICAgXGRvc3ViaW5kc2FuaXRpemUKKyAgICBcZWxzZQorICAgICAgXGRvc3ViaW5kd3JpdGUKKyAgICBcZmkKKyAgfSUKKyAgXGZpCit9CisKKyUgV3JpdGUgdGhlIGVudHJ5IHRvIHRoZSBpbmRleCBmaWxlOgorJQorXGRlZlxkb3N1YmluZHdyaXRleyUKKyAgJSBQdXQgdGhlIGluZGV4IGVudHJ5IGluIHRoZSBtYXJnaW4gaWYgZGVzaXJlZC4KKyAgXGlmeFxTRVRtYXJnaW5pbmRleFxyZWxheFxlbHNlCisgICAgXGluc2VydFxtYXJnaW57XGhib3h7XHZydWxlIGhlaWdodDhwdCBkZXB0aDNwdCB3aWR0aDBwdCBcdGhlXHRva3MwfX0lCisgIFxmaQorICAlCisgICUgUmVtZW1iZXIsIHdlIGFyZSB3aXRoaW4gYSBncm91cC4KKyAgXGluZGV4ZHVtbWllcyAlIE11c3QgZG8gdGhpcyBoZXJlLCBzaW5jZSBcYmYsIGV0YyBleHBhbmQgYXQgdGhpcyBzdGFnZQorICBcZXNjYXBlY2hhcj1gXFwKKyAgXGRlZlxyYXdiYWNrc2xhc2h4eHtcaW5kZXhiYWNrc2xhc2h9JSBcaW5kZXhiYWNrc2xhc2ggaXNuJ3QgZGVmaW5lZCBub3cKKyAgICAgICUgc28gaXQgd2lsbCBiZSBvdXRwdXQgYXMgaXM7IGFuZCBpdCB3aWxsIHByaW50IGFzIGJhY2tzbGFzaC4KKyAgJQorICAlIFByb2Nlc3MgdGhlIGluZGV4IGVudHJ5IHdpdGggYWxsIGZvbnQgY29tbWFuZHMgdHVybmVkIG9mZiwgdG8KKyAgJSBnZXQgdGhlIHN0cmluZyB0byBzb3J0IGJ5LgorICB7XGluZGV4bm9mb250cworICAgXGVkZWZcdGVtcHtcdGhlXHRva3MwfSUgbmVlZCBmdWxsIGV4cGFuc2lvbgorICAgXHhkZWZcaW5kZXhzb3J0dG1we1x0ZW1wfSUKKyAgfSUKKyAgJQorICAlIFNldCB1cCB0aGUgY29tcGxldGUgaW5kZXggZW50cnksIHdpdGggYm90aCB0aGUgc29ydCBrZXkgYW5kCisgICUgdGhlIG9yaWdpbmFsIHRleHQsIGluY2x1ZGluZyBhbnkgZm9udCBjb21tYW5kcy4gIFdlIHdyaXRlCisgICUgdGhyZWUgYXJndW1lbnRzIHRvIFxlbnRyeSB0byB0aGUgLj8/IGZpbGUgKGZvdXIgaW4gdGhlCisgICUgc3ViZW50cnkgY2FzZSksIHRleGluZGV4IHJlZHVjZXMgdG8gdHdvIHdoZW4gd3JpdGluZyB0aGUgLj8/cworICAlIHNvcnRlZCByZXN1bHQuCisgIFxlZGVmXHRlbXB7JQorICAgIFx3cml0ZVx3cml0ZXRveyUKKyAgICAgIFxzdHJpbmdcZW50cnl7XGluZGV4c29ydHRtcH17XG5vZXhwYW5kXGZvbGlvfXtcdGhlXHRva3MwfX0lCisgIH0lCisgIFx0ZW1wCit9CisKKyUgIFRha2UgY2FyZSBvZiB1bndhbnRlZCBwYWdlIGJyZWFrczoKKyUKKyUgSWYgYSBza2lwIGlzIHRoZSBsYXN0IHRoaW5nIG9uIHRoZSBsaXN0IG5vdywgcHJlc2VydmUgaXQKKyUgYnkgYmFja2luZyB1cCBieSBcbGFzdHNraXAsIGRvaW5nIHRoZSBcd3JpdGUsIHRoZW4gaW5zZXJ0aW5nCislIHRoZSBza2lwIGFnYWluLiAgT3RoZXJ3aXNlLCB0aGUgd2hhdHNpdCBnZW5lcmF0ZWQgYnkgdGhlCislIFx3cml0ZSB3aWxsIG1ha2UgXGxhc3Rza2lwIHplcm8uICBUaGUgcmVzdWx0IGlzIHRoYXQgc2VxdWVuY2VzCislIGxpa2UgdGhpczoKKyUgQGVuZCBkZWZ1bgorJSBAdGluZGV4IHdoYXRldmVyCislIEBkZWZ1biAuLi4KKyUgd2lsbCBoYXZlIGV4dHJhIHNwYWNlIGluc2VydGVkLCBiZWNhdXNlIHRoZSBcbWVkYnJlYWsgaW4gdGhlCislIHN0YXJ0IG9mIHRoZSBAZGVmdW4gd29uJ3Qgc2VlIHRoZSBza2lwIGluc2VydGVkIGJ5IHRoZSBAZW5kIG9mCislIHRoZSBwcmV2aW91cyBkZWZ1bi4KKyUKKyUgQnV0IGRvbid0IGRvIGFueSBvZiB0aGlzIGlmIHdlJ3JlIG5vdCBpbiB2ZXJ0aWNhbCBtb2RlLiAgV2UKKyUgZG9uJ3Qgd2FudCB0byBkbyBhIFx2c2tpcCBhbmQgcHJlbWF0dXJlbHkgZW5kIGEgcGFyYWdyYXBoLgorJQorJSBBdm9pZCBwYWdlIGJyZWFrcyBkdWUgdG8gdGhlc2UgZXh0cmEgc2tpcHMsIHRvby4KKyUKK1xkZWZcZG9zdWJpbmRzYW5pdGl6ZXslCisgICUgXGxhc3Rza2lwIGFuZCBcbGFzdHBlbmFsdHkgY2Fubm90IGJvdGggYmUgbm9uemVybyBzaW11bHRhbmVvdXNseS4KKyAgXHNraXAwID0gXGxhc3Rza2lwCisgIFxjb3VudDI1NSA9IFxsYXN0cGVuYWx0eQorICAlCisgICUgSWYgXGxhc3Rza2lwIGlzIG5vbnplcm8sIHRoYXQgbWVhbnMgdGhlIGxhc3QgaXRlbSB3YXMgYQorICAlIHNraXAuICBBbmQgc2luY2UgYSBza2lwIGlzIGRpc2NhcmRhYmxlLCB0aGF0IG1lYW5zIHRoaXMKKyAgJSAtXHNraXAwIGdsdWUgd2UncmUgaW5zZXJ0aW5nIGlzIHByZWNlZGVkIGJ5IGEKKyAgJSBub24tZGlzY2FyZGFibGUgaXRlbSwgdGhlcmVmb3JlIGl0IGlzIG5vdCBhIHBvdGVudGlhbAorICAlIGJyZWFrcG9pbnQsIHRoZXJlZm9yZSBubyBcbm9icmVhayBuZWVkZWQuCisgIFxpZmRpbVxsYXN0c2tpcCA9IDBwdCBcZWxzZSBcdnNraXAtXHNraXAwIFxmaQorICAlCisgIFxkb3N1YmluZHdyaXRlCisgICUKKyAgXGlmZGltXHNraXAwID0gMHB0CisgICAgJSBpZiBcbGFzdHNraXAgd2FzIHplcm8sIHBlcmhhcHMgdGhlIGxhc3QgaXRlbSB3YXMgYQorICAgICUgcGVuYWx0eSwgYW5kIHBlcmhhcHMgaXQgd2FzID49MTAwMDAsIGUuZy4sIGEgXG5vYnJlYWsuCisgICAgJSBJbiB0aGF0IGNhc2UsIHdlIHdhbnQgdG8gcmUtaW5zZXJ0IHRoZSBwZW5hbHR5OyBzaW5jZSB3ZQorICAgICUganVzdCBpbnNlcnRlZCBhIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCBhbnkgZm9sbG93aW5nIGdsdWUKKyAgICAlIChzdWNoIGFzIGEgXHBhcnNraXApIHdvdWxkIGJlIGEgYnJlYWtwb2ludC4gIEZvciBleGFtcGxlOgorICAgICUgICBAZGVmZm4gZGVmZm4td2hhdGV2ZXIKKyAgICAlICAgQHZpbmRleCBpbmRleC13aGF0ZXZlcgorICAgICUgICBEZXNjcmlwdGlvbi4KKyAgICAlIHdvdWxkIGFsbG93IGEgYnJlYWsgYmV0d2VlbiB0aGUgaW5kZXgtd2hhdGV2ZXIgd2hhdHNpdAorICAgICUgYW5kIHRoZSAiRGVzY3JpcHRpb24uIiBwYXJhZ3JhcGguCisgICAgXGlmbnVtXGNvdW50MjU1Pjk5OTkgXG5vYnJlYWsgXGZpCisgIFxlbHNlCisgICAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgaGFkIGEgbm9uemVybyBcbGFzdHNraXAsCisgICAgJSB0aGlzIG1ha2UtdXAgZ2x1ZSB3b3VsZCBiZSBwcmVjZWRlZCBieSBhIG5vbi1kaXNjYXJkYWJsZSBpdGVtCisgICAgJSAodGhlIHdoYXRzaXQgZnJvbSB0aGUgXHdyaXRlKSwgc28gd2UgbXVzdCBpbnNlcnQgYSBcbm9icmVhay4KKyAgICBcbm9icmVha1x2c2tpcFxza2lwMAorICBcZmkKK30KKworJSBUaGUgaW5kZXggZW50cnkgd3JpdHRlbiBpbiB0aGUgZmlsZSBhY3R1YWxseSBsb29rcyBsaWtlCislICBcZW50cnkge3NvcnRzdHJpbmd9e3BhZ2V9e3RvcGljfQorJSBvcgorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY317c3VidG9waWN9CislIFRoZSB0ZXhpbmRleCBwcm9ncmFtIHJlYWRzIGluIHRoZXNlIGZpbGVzIGFuZCB3cml0ZXMgZmlsZXMKKyUgY29udGFpbmluZyB0aGVzZSBraW5kcyBvZiBsaW5lczoKKyUgIFxpbml0aWFsIHtjfQorJSAgICAgYmVmb3JlIHRoZSBmaXJzdCB0b3BpYyB3aG9zZSBpbml0aWFsIGlzIGMKKyUgIFxlbnRyeSB7dG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGEgdG9waWMgdGhhdCBpcyB1c2VkIHdpdGhvdXQgc3VidG9waWNzCislICBccHJpbWFyeSB7dG9waWN9CislICAgICBmb3IgdGhlIGJlZ2lubmluZyBvZiBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRoIHN1YnRvcGljcworJSAgXHNlY29uZGFyeSB7c3VidG9waWN9e3BhZ2VsaXN0fQorJSAgICAgZm9yIGVhY2ggc3VidG9waWMuCisKKyUgRGVmaW5lIHRoZSB1c2VyLWFjY2Vzc2libGUgaW5kZXhpbmcgY29tbWFuZHMKKyUgQGZpbmRleCwgQHZpbmRleCwgQGtpbmRleCwgQGNpbmRleC4KKworXGRlZlxmaW5kZXgge1xmbmluZGV4fQorXGRlZlxraW5kZXgge1xreWluZGV4fQorXGRlZlxjaW5kZXgge1xjcGluZGV4fQorXGRlZlx2aW5kZXgge1x2cmluZGV4fQorXGRlZlx0aW5kZXgge1x0cGluZGV4fQorXGRlZlxwaW5kZXgge1xwZ2luZGV4fQorCitcZGVmXGNpbmRleHN1YiB7XGJlZ2luZ3JvdXBcb2JleWxpbmVzXGNpbmRleHN1Yn0KK3tcb2JleWxpbmVzICUKK1xnZGVmXGNpbmRleHN1YiAiIzEiICMyXl5Ne1xlbmRncm91cCAlCitcZG9zdWJpbmR7Y3B9eyMyfXsjMX19fQorCislIERlZmluZSB0aGUgbWFjcm9zIHVzZWQgaW4gZm9ybWF0dGluZyBvdXRwdXQgb2YgdGhlIHNvcnRlZCBpbmRleCBtYXRlcmlhbC4KKworJSBAcHJpbnRpbmRleCBjYXVzZXMgYSBwYXJ0aWN1bGFyIGluZGV4ICh0aGUgPz9zIGZpbGUpIHRvIGdldCBwcmludGVkLgorJSBJdCBkb2VzIG5vdCBwcmludCBhbnkgY2hhcHRlciBoZWFkaW5nICh1c3VhbGx5IGFuIEB1bm51bWJlcmVkKS4KKyUKK1xkZWZccHJpbnRpbmRleHtccGFyc2VhcmdcZG9wcmludGluZGV4fQorXGRlZlxkb3ByaW50aW5kZXgjMXtcYmVnaW5ncm91cAorICBcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwezEwMDAwfSUKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgXHRvbGVyYW5jZSA9IDk1MDAKKyAgXGV2ZXJ5cGFyID0ge30lIGRvbid0IHdhbnQgdGhlIFxrZXJuXC1wYXJpbmRlbnQgZnJvbSBpbmRlbnRhdGlvbiBzdXBwcmVzc2lvbi4KKyAgXGluZGV4YnJlYWtzCisgICUKKyAgJSBTZWUgaWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGFuZCBpcyBub25lbXB0eS4KKyAgJSBDaGFuZ2UgY2F0Y29kZSBvZiBAIGhlcmUgc28gdGhhdCBpZiB0aGUgaW5kZXggZmlsZSBjb250YWlucworICAlIFxpbml0aWFsIHtAfQorICAlIGFzIGl0cyBmaXJzdCBsaW5lLCBUZVggZG9lc24ndCBjb21wbGFpbiBhYm91dCBtaXNtYXRjaGVkIGJyYWNlcworICAlIChiZWNhdXNlIGl0IHRoaW5rcyBAfSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UpLgorICBcY2F0Y29kZWBcQCA9IDExCisgIFxvcGVuaW4gMSBcam9ibmFtZS4jMXMKKyAgXGlmZW9mIDEKKyAgICAlIFxlbmRkb3VibGVjb2x1bW5zIGdldHMgY29uZnVzZWQgaWYgdGhlcmUgaXMgbm8gdGV4dCBpbiB0aGUgaW5kZXgsCisgICAgJSBhbmQgaXQgbG9zZXMgdGhlIGNoYXB0ZXIgdGl0bGUgYW5kIHRoZSBhdXggZmlsZSBlbnRyaWVzIGZvciB0aGUKKyAgICAlIGluZGV4LiAgVGhlIGVhc2llc3Qgd2F5IHRvIHByZXZlbnQgdGhpcyBwcm9ibGVtIGlzIHRvIG1ha2Ugc3VyZQorICAgICUgdGhlcmUgaXMgc29tZSB0ZXh0LgorICAgIFxwdXR3b3JkSW5kZXhOb25leGlzdGVudAorICBcZWxzZQorICAgICUKKyAgICAlIElmIHRoZSBpbmRleCBmaWxlIGV4aXN0cyBidXQgaXMgZW1wdHksIHRoZW4gXG9wZW5pbiBsZWF2ZXMgXGlmZW9mCisgICAgJSBmYWxzZS4gIFdlIGhhdmUgdG8gbWFrZSBUZVggdHJ5IHRvIHJlYWQgc29tZXRoaW5nIGZyb20gdGhlIGZpbGUsIHNvCisgICAgJSBpdCBjYW4gZGlzY292ZXIgaWYgdGhlcmUgaXMgYW55dGhpbmcgaW4gaXQuCisgICAgXHJlYWQgMSB0byBcdGVtcAorICAgIFxpZmVvZiAxCisgICAgICBccHV0d29yZEluZGV4SXNFbXB0eQorICAgIFxlbHNlCisgICAgICAlIEluZGV4IGZpbGVzIGFyZSBhbG1vc3QgVGV4aW5mbyBzb3VyY2UsIGJ1dCB3ZSB1c2UgXCBhcyB0aGUgZXNjYXBlCisgICAgICAlIGNoYXJhY3Rlci4gIEl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgQCwgYnV0IHRoYXQncyB0b28gYmlnIGEgY2hhbmdlCisgICAgICAlIHRvIG1ha2UgcmlnaHQgbm93LgorICAgICAgXGRlZlxpbmRleGJhY2tzbGFzaHtccmF3YmFja3NsYXNoeHh9JQorICAgICAgXGNhdGNvZGVgXFwgPSAwCisgICAgICBcZXNjYXBlY2hhciA9IGBcXAorICAgICAgXGJlZ2luZG91YmxlY29sdW1ucworICAgICAgXGlucHV0IFxqb2JuYW1lLiMxcworICAgICAgXGVuZGRvdWJsZWNvbHVtbnMKKyAgICBcZmkKKyAgXGZpCisgIFxjbG9zZWluIDEKK1xlbmRncm91cH0KKworJSBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgYnkgdGhlIHNvcnRlZCBpbmRleCBmaWxlIGl0c2VsZi4KKyUgQ2hhbmdlIHRoZW0gdG8gY29udHJvbCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5kZXguCisKK1xkZWZcaW5pdGlhbCMxe3slCisgICUgU29tZSBtaW5vciBmb250IGNoYW5nZXMgZm9yIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisgIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcdHQ9XHNlY3R0IFxsZXRcc2Y9XHNlY3R0CisgICUKKyAgJSBSZW1vdmUgYW55IGdsdWUgd2UgbWF5IGhhdmUsIHdlJ2xsIGJlIGluc2VydGluZyBvdXIgb3duLgorICBccmVtb3ZlbGFzdHNraXAKKyAgJQorICAlIFdlIGxpa2UgYnJlYWtzIGJlZm9yZSB0aGUgaW5kZXggaW5pdGlhbHMsIHNvIGluc2VydCBhIGJvbnVzLgorICBccGVuYWx0eSAtMzAwCisgICUKKyAgJSBUeXBlc2V0IHRoZSBpbml0aWFsLiAgTWFraW5nIHRoaXMgYWRkIHVwIHRvIGEgd2hvbGUgbnVtYmVyIG9mCisgICUgYmFzZWxpbmVza2lwcyBpbmNyZWFzZXMgdGhlIGNoYW5jZSBvZiB0aGUgZG90cyBsaW5pbmcgdXAgZnJvbSBjb2x1bW4KKyAgJSB0byBjb2x1bW4uICBJdCBzdGlsbCB3b24ndCBvZnRlbiBiZSBwZXJmZWN0LCBiZWNhdXNlIG9mIHRoZSBzdHJldGNoCisgICUgd2UgbmVlZCBiZWZvcmUgZWFjaCBlbnRyeSwgYnV0IGl0J3MgYmV0dGVyLgorICAlCisgICUgTm8gc2hyaW5rIGJlY2F1c2UgaXQgY29uZnVzZXMgXGJhbGFuY2Vjb2x1bW5zLgorICBcdnNraXAgMS42N1xiYXNlbGluZXNraXAgcGx1cyAuNVxiYXNlbGluZXNraXAKKyAgXGxlZnRsaW5le1xzZWNiZiAjMX0lCisgIFx2c2tpcCAuMzNcYmFzZWxpbmVza2lwIHBsdXMgLjFcYmFzZWxpbmVza2lwCisgICUKKyAgJSBEbyBvdXIgYmVzdCBub3QgdG8gYnJlYWsgYWZ0ZXIgdGhlIGluaXRpYWwuCisgIFxub2JyZWFrCit9fQorCislIFRoaXMgdHlwZXNldHMgYSBwYXJhZ3JhcGggY29uc2lzdGluZyBvZiAjMSwgZG90IGxlYWRlcnMsIGFuZCB0aGVuICMyCislIGZsdXNoIHRvIHRoZSByaWdodCBtYXJnaW4uICBJdCBpcyB1c2VkIGZvciBpbmRleCBhbmQgdGFibGUgb2YgY29udGVudHMKKyUgZW50cmllcy4gIFRoZSBwYXJhZ3JhcGggaXMgaW5kZW50ZWQgYnkgXGxlZnRza2lwLgorJQorXGRlZlxlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgJQorICAlIFN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBuZWNlc3NhcnksIHNvIG91ciBhc3NpZ25tZW50cyBiZWxvdyBjYW4ndAorICAlIGFmZmVjdCBwcmV2aW91cyB0ZXh0LgorICBccGFyCisgICUKKyAgJSBEbyBub3QgZmlsbCBvdXQgdGhlIGxhc3QgbGluZSB3aXRoIHdoaXRlIHNwYWNlLgorICBccGFyZmlsbHNraXAgPSAwaW4KKyAgJQorICAlIE5vIGV4dHJhIHNwYWNlIGFib3ZlIHRoaXMgcGFyYWdyYXBoLgorICBccGFyc2tpcCA9IDBpbgorICAlCisgICUgRG8gbm90IHByZWZlciBhIHNlcGFyYXRlIGxpbmUgZW5kaW5nIHdpdGggYSBoeXBoZW4gdG8gZmV3ZXIgbGluZXMuCisgIFxmaW5hbGh5cGhlbmRlbWVyaXRzID0gMAorICAlCisgICUgXGhhbmdpbmRlbnQgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSBlbnRyeSB0ZXh0IGFuZCBwYWdlIG51bWJlcgorICAlIGRvbid0IGJvdGggZml0IG9uIG9uZSBsaW5lLiAgSW4gdGhhdCBjYXNlLCBib2Igc3VnZ2VzdHMgc3RhcnRpbmcgdGhlCisgICUgZG90cyBwcmV0dHkgZmFyIG92ZXIgb24gdGhlIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBhIGxhcmdlCisgICUgaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgd2hlbiB0aGUgZW50cnkgdGV4dCBpdHNlbGYgaXMgYnJva2VuIGFjcm9zcworICAlIGxpbmVzLiAgU28gd2UgdXNlIGEgc21hbGwgaW5kZW50YXRpb24gYW5kIHB1dCB1cCB3aXRoIGxvbmcgbGVhZGVycy4KKyAgJQorICAlIFxoYW5nYWZ0ZXIgaXMgcmVzZXQgdG8gMSAod2hpY2ggaXMgdGhlIHZhbHVlIHdlIHdhbnQpIGF0IHRoZSBzdGFydAorICAlIG9mIGVhY2ggcGFyYWdyYXBoLCBzbyB3ZSBuZWVkIG5vdCBkbyBhbnl0aGluZyB3aXRoIHRoYXQuCisgIFxoYW5naW5kZW50ID0gMmVtCisgICUKKyAgJSBXaGVuIHRoZSBlbnRyeSB0ZXh0IG5lZWRzIHRvIGJlIGJyb2tlbiwganVzdCBmaWxsIG91dCB0aGUgZmlyc3QgbGluZQorICAlIHdpdGggYmxhbmsgc3BhY2UuCisgIFxyaWdodHNraXAgPSAwcHQgcGx1czFmaWwKKyAgJQorICAlIEEgYml0IG9mIHN0cmV0Y2ggYmVmb3JlIGVhY2ggZW50cnkgZm9yIHRoZSBiZW5lZml0IG9mIGJhbGFuY2luZyBjb2x1bW5zLgorICBcdnNraXAgMHB0IHBsdXMxcHQKKyAgJQorICAlIFN0YXJ0IGEgYGBwYXJhZ3JhcGgnJyBmb3IgdGhlIGluZGV4IGVudHJ5IHNvIHRoZSBsaW5lIGJyZWFraW5nCisgICUgcGFyYW1ldGVycyB3ZSd2ZSBzZXQgYWJvdmUgd2lsbCBoYXZlIGFuIGVmZmVjdC4KKyAgXG5vaW5kZW50CisgICUKKyAgJSBJbnNlcnQgdGhlIHRleHQgb2YgdGhlIGluZGV4IGVudHJ5LiAgVGVYIHdpbGwgZG8gbGluZS1icmVha2luZyBvbiBpdC4KKyAgIzElCisgICUgVGhlIGZvbGxvd2luZyBpcyBrbHVkZ2VkIHRvIG5vdCBvdXRwdXQgYSBsaW5lIG9mIGRvdHMgaW4gdGhlIGluZGV4IGlmCisgICUgdGhlcmUgYXJlIG5vIHBhZ2UgbnVtYmVycy4gIFRoZSBuZXh0IHBlcnNvbiB3aG8gYnJlYWtzIHRoaXMgd2lsbCBiZQorICAlIGN1cnNlZCBieSBhIFVuaXggZGFlbW9uLgorICBcZGVmXHRlbXBhe3tccm0gfX0lCisgIFxkZWZcdGVtcGJ7IzJ9JQorICBcZWRlZlx0ZW1wY3tcdGVtcGF9JQorICBcZWRlZlx0ZW1wZHtcdGVtcGJ9JQorICBcaWZ4XHRlbXBjXHRlbXBkXCBcZWxzZSUKKyAgICAlCisgICAgJSBJZiB3ZSBtdXN0LCBwdXQgdGhlIHBhZ2UgbnVtYmVyIG9uIGEgbGluZSBvZiBpdHMgb3duLCBhbmQgZmlsbCBvdXQKKyAgICAlIHRoaXMgbGluZSB3aXRoIGJsYW5rIHNwYWNlLiAgKFRoZSBcaGZpbCBpcyBvdmVyd2hlbG1lZCB3aXRoIHRoZQorICAgICUgZmlsbCBsZWFkZXJzIGdsdWUgaW4gXGluZGV4ZG90ZmlsbCBpZiB0aGUgcGFnZSBudW1iZXIgZG9lcyBmaXQuKQorICAgIFxoZmlsXHBlbmFsdHk1MAorICAgIFxudWxsXG5vYnJlYWtcaW5kZXhkb3RmaWxsICUgSGF2ZSBsZWFkZXJzIGJlZm9yZSB0aGUgcGFnZSBudW1iZXIuCisgICAgJQorICAgICUgVGhlIGBcICcgaGVyZSBpcyByZW1vdmVkIGJ5IHRoZSBpbXBsaWNpdCBcdW5za2lwIHRoYXQgVGVYIGRvZXMgYXMKKyAgICAlIHBhcnQgb2YgKHRoZSBwcmltaXRpdmUpIFxwYXIuICBXaXRob3V0IGl0LCBhIHNwdXJpb3VzIHVuZGVyZnVsbAorICAgICUgXGhib3ggZW5zdWVzLgorICAgIFxpZnBkZgorICAgICAgXHBkZmdldHRva3MjMi5cIFx0aGVcdG9rc0EgJSBUaGUgcGFnZSBudW1iZXIgZW5kcyB0aGUgcGFyYWdyYXBoLgorICAgIFxlbHNlCisgICAgICBcICMyJSBUaGUgcGFnZSBudW1iZXIgZW5kcyB0aGUgcGFyYWdyYXBoLgorICAgIFxmaQorICBcZmklCisgIFxwYXIKK1xlbmRncm91cH0KKworJSBMaWtlIFxkb3RmaWxsIGV4Y2VwdCB0YWtlcyBhdCBsZWFzdCAxIGVtLgorXGRlZlxpbmRleGRvdGZpbGx7XGNsZWFkZXJzCisgIFxoYm94eyRcbWF0aHN1cnJvdW5kPTBwdCBcbWtlcm4xLjVtdSAke1xpdCAufSQgXG1rZXJuMS41bXUkfVxoc2tpcCAxZW0gcGx1cyAxZmlsbH0KKworXGRlZlxwcmltYXJ5ICMxe1xsaW5leyMxXGhmaWx9fQorCitcbmV3c2tpcFxzZWNvbmRhcnlpbmRlbnQgXHNlY29uZGFyeWluZGVudD0wLjVjbQorXGRlZlxzZWNvbmRhcnkjMSMye3slCisgIFxwYXJmaWxsc2tpcD0waW4KKyAgXHBhcnNraXA9MGluCisgIFxoYW5naW5kZW50PTFpbgorICBcaGFuZ2FmdGVyPTEKKyAgXG5vaW5kZW50XGhza2lwXHNlY29uZGFyeWluZGVudFxoYm94eyMxfVxpbmRleGRvdGZpbGwKKyAgXGlmcGRmCisgICAgXHBkZmdldHRva3MjMi5cIFx0aGVcdG9rc0EgJSBUaGUgcGFnZSBudW1iZXIgZW5kcyB0aGUgcGFyYWdyYXBoLgorICBcZWxzZQorICAgICMyCisgIFxmaQorICBccGFyCit9fQorCislIERlZmluZSB0d28tY29sdW1uIG1vZGUsIHdoaWNoIHdlIHVzZSB0byB0eXBlc2V0IGluZGV4ZXMuCislIEFkYXB0ZWQgZnJvbSB0aGUgVGVYYm9vaywgcGFnZSA0MTYsIHdoaWNoIGlzIHRvIHNheSwKKyUgdGhlIG1hbm1hYy50ZXggZm9ybWF0IHVzZWQgdG8gcHJpbnQgdGhlIFRlWGJvb2sgaXRzZWxmLgorXGNhdGNvZGVgXEA9MTEKKworXG5ld2JveFxwYXJ0aWFscGFnZQorXG5ld2RpbWVuXGRvdWJsZWNvbHVtbmhzaXplCisKK1xkZWZcYmVnaW5kb3VibGVjb2x1bW5ze1xiZWdpbmdyb3VwICUgZW5kZWQgYnkgXGVuZGRvdWJsZWNvbHVtbnMKKyAgJSBHcmFiIGFueSBzaW5nbGUtY29sdW1uIG1hdGVyaWFsIGFib3ZlIHVzLgorICBcb3V0cHV0ID0geyUKKyAgICAlCisgICAgJSBIZXJlIGlzIGEgcG9zc2liaWxpdHkgbm90IGZvcmVzZWVuIGluIG1hbm1hYzogaWYgd2UgYWNjdW11bGF0ZSBhCisgICAgJSB3aG9sZSBsb3Qgb2YgbWF0ZXJpYWwsIHdlIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIHRoaXMgXG91dHB1dAorICAgICUgcm91dGluZSB0d2ljZSBpbiBhIHJvdyAoc2VlIHRoZSBkb3VibGVjb2wtbG9zZSB0ZXN0LCB3aGljaCBpcworICAgICUgZXNzZW50aWFsbHkgYSBjb3VwbGUgb2YgaW5kZXhlcyB3aXRoIEBzZXRjaGFwdGVybmV3cGFnZSBvZmYpLiAgSW4KKyAgICAlIHRoYXQgY2FzZSB3ZSBqdXN0IHNoaXAgb3V0IHdoYXQgaXMgaW4gXHBhcnRpYWxwYWdlIHdpdGggdGhlIG5vcm1hbAorICAgICUgb3V0cHV0IHJvdXRpbmUuICBHZW5lcmFsbHksIFxwYXJ0aWFscGFnZSB3aWxsIGJlIGVtcHR5IHdoZW4gdGhpcworICAgICUgcnVucyBhbmQgdGhpcyB3aWxsIGJlIGEgbm8tb3AuICBTZWUgdGhlIGluZGV4c3ByZWFkLnRleCB0ZXN0IGNhc2UuCisgICAgXGlmdm9pZFxwYXJ0aWFscGFnZSBcZWxzZQorICAgICAgXG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xwYXJ0aWFscGFnZX0lCisgICAgXGZpCisgICAgJQorICAgIFxnbG9iYWxcc2V0Ym94XHBhcnRpYWxwYWdlID0gXHZib3h7JQorICAgICAgJSBVbnZib3ggdGhlIG1haW4gb3V0cHV0IHBhZ2UuCisgICAgICBcdW52Ym94XFBBR0UKKyAgICAgIFxrZXJuLVx0b3Bza2lwIFxrZXJuXGJhc2VsaW5lc2tpcAorICAgIH0lCisgIH0lCisgIFxlamVjdCAlIHJ1biB0aGF0IG91dHB1dCByb3V0aW5lIHRvIHNldCBccGFydGlhbHBhZ2UKKyAgJQorICAlIFVzZSB0aGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3Igc3Vic2VxdWVudCBwYWdlcy4KKyAgXG91dHB1dCA9IHtcZG91YmxlY29sdW1ub3V0fSUKKyAgJQorICAlIENoYW5nZSB0aGUgcGFnZSBzaXplIHBhcmFtZXRlcnMuICBXZSBjb3VsZCBkbyB0aGlzIG9uY2Ugb3V0c2lkZSB0aGlzCisgICUgcm91dGluZSwgaW4gZWFjaCBvZiBAc21hbGxib29rLCBAYWZvdXJwYXBlciwgYW5kIHRoZSBkZWZhdWx0IDguNXgxMQorICAlIGZvcm1hdCwgYnV0IHRoZW4gd2UgcmVwZWF0IHRoZSBzYW1lIGNvbXB1dGF0aW9uLiAgUmVwZWF0aW5nIGEgY291cGxlCisgICUgb2YgYXNzaWdubWVudHMgb25jZSBwZXIgaW5kZXggaXMgY2xlYXJseSBtZWFuaW5nbGVzcyBmb3IgdGhlCisgICUgZXhlY3V0aW9uIHRpbWUsIHNvIHdlIG1heSBhcyB3ZWxsIGRvIGl0IGluIG9uZSBwbGFjZS4KKyAgJQorICAlIEZpcnN0IHdlIGhhbHZlIHRoZSBsaW5lIGxlbmd0aCwgbGVzcyBhIGxpdHRsZSBmb3IgdGhlIGd1dHRlciBiZXR3ZWVuCisgICUgdGhlIGNvbHVtbnMuICBXZSBjb21wdXRlIHRoZSBndXR0ZXIgYmFzZWQgb24gdGhlIGxpbmUgbGVuZ3RoLCBzbyBpdAorICAlIGNoYW5nZXMgYXV0b21hdGljYWxseSB3aXRoIHRoZSBwYXBlciBmb3JtYXQuICBUaGUgbWFnaWMgY29uc3RhbnQKKyAgJSBiZWxvdyBpcyBjaG9zZW4gc28gdGhhdCB0aGUgZ3V0dGVyIGhhcyB0aGUgc2FtZSB2YWx1ZSAod2VsbCwgKy08MXB0KQorICAlIGFzIGl0IGRpZCB3aGVuIHdlIGhhcmQtY29kZWQgaXQuCisgICUKKyAgJSBXZSBwdXQgdGhlIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHJlZ2lzdGVyLCBcZG91YmxlY29sdW1oc2l6ZSwgc28gd2UKKyAgJSBjYW4gcmVzdG9yZSBpdCBpbiBccGFnZXNvZmFyLCBhZnRlciBcaHNpemUgaXRzZWxmIGhhcyAocG90ZW50aWFsbHkpCisgICUgYmVlbiBjbG9iYmVyZWQuCisgICUKKyAgXGRvdWJsZWNvbHVtbmhzaXplID0gXGhzaXplCisgICAgXGFkdmFuY2VcZG91YmxlY29sdW1uaHNpemUgYnkgLS4wNDE1NFxoc2l6ZQorICAgIFxkaXZpZGVcZG91YmxlY29sdW1uaHNpemUgYnkgMgorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgJQorICAlIERvdWJsZSB0aGUgXHZzaXplIGFzIHdlbGwuICAoV2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHJlZ2lzdGVyIGhlcmUsCisgICUgc2luY2Ugbm9ib2R5IGNsb2JiZXJzIFx2c2l6ZS4pCisgIFx2c2l6ZSA9IDJcdnNpemUKK30KKworJSBUaGUgZG91YmxlLWNvbHVtbiBvdXRwdXQgcm91dGluZSBmb3IgYWxsIGRvdWJsZS1jb2x1bW4gcGFnZXMgZXhjZXB0CislIHRoZSBsYXN0LgorJQorXGRlZlxkb3VibGVjb2x1bW5vdXR7JQorICBcc3BsaXR0b3Bza2lwPVx0b3Bza2lwIFxzcGxpdG1heGRlcHRoPVxtYXhkZXB0aAorICAlIEdldCB0aGUgYXZhaWxhYmxlIHNwYWNlIGZvciB0aGUgZG91YmxlIGNvbHVtbnMgLS0gdGhlIG5vcm1hbAorICAlICh1bmRvdWJsZWQpIHBhZ2UgaGVpZ2h0IG1pbnVzIGFueSBtYXRlcmlhbCBsZWZ0IG92ZXIgZnJvbSB0aGUKKyAgJSBwcmV2aW91cyBwYWdlLgorICBcZGltZW5AID0gXHZzaXplCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IC1caHRccGFydGlhbHBhZ2UKKyAgJQorICAlIGJveDAgd2lsbCBiZSB0aGUgbGVmdC1oYW5kIGNvbHVtbiwgYm94MiB0aGUgcmlnaHQuCisgIFxzZXRib3gwPVx2c3BsaXQyNTUgdG9cZGltZW5AIFxzZXRib3gyPVx2c3BsaXQyNTUgdG9cZGltZW5ACisgIFxvbmVwYWdlb3V0XHBhZ2Vzb2ZhcgorICBcdW52Ym94MjU1CisgIFxwZW5hbHR5XG91dHB1dHBlbmFsdHkKK30KKyUKKyUgUmUtb3V0cHV0IHRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHBhZ2UgLS0gYW55IHByZXZpb3VzIG1hdGVyaWFsLAorJSBmb2xsb3dlZCBieSB0aGUgdHdvIGJveGVzIHdlIGp1c3Qgc3BsaXQsIGluIGJveDAgYW5kIGJveDIuCitcZGVmXHBhZ2Vzb2ZhcnslCisgIFx1bnZib3hccGFydGlhbHBhZ2UKKyAgJQorICBcaHNpemUgPSBcZG91YmxlY29sdW1uaHNpemUKKyAgXHdkMD1caHNpemUgXHdkMj1caHNpemUKKyAgXGhib3ggdG9ccGFnZXdpZHRoe1xib3gwXGhmaWxcYm94Mn0lCit9CislCislIEFsbCBkb25lIHdpdGggZG91YmxlIGNvbHVtbnMuCitcZGVmXGVuZGRvdWJsZWNvbHVtbnN7JQorICBcb3V0cHV0ID0geyUKKyAgICAlIFNwbGl0IHRoZSBsYXN0IG9mIHRoZSBkb3VibGUtY29sdW1uIG1hdGVyaWFsLiAgTGVhdmUgaXQgb24gdGhlCisgICAgJSBjdXJyZW50IHBhZ2UsIG5vIGF1dG9tYXRpYyBwYWdlIGJyZWFrLgorICAgIFxiYWxhbmNlY29sdW1ucworICAgICUKKyAgICAlIElmIHdlIGVuZCB1cCBzcGxpdHRpbmcgdG9vIG11Y2ggbWF0ZXJpYWwgZm9yIHRoZSBjdXJyZW50IHBhZ2UsCisgICAgJSB0aG91Z2gsIHRoZXJlIHdpbGwgYmUgYW5vdGhlciBwYWdlIGJyZWFrIHJpZ2h0IGFmdGVyIHRoaXMgXG91dHB1dAorICAgICUgaW52b2NhdGlvbiBlbmRzLiAgSGF2aW5nIGNhbGxlZCBcYmFsYW5jZWNvbHVtbnMgb25jZSwgd2UgZG8gbm90CisgICAgJSB3YW50IHRvIGNhbGwgaXQgYWdhaW4uICBUaGVyZWZvcmUsIHJlc2V0IFxvdXRwdXQgdG8gaXRzIG5vcm1hbAorICAgICUgZGVmaW5pdGlvbiByaWdodCBhd2F5LiAgKFdlIGhvcGUgXGJhbGFuY2Vjb2x1bW5zIHdpbGwgbmV2ZXIgYmUKKyAgICAlIGNhbGxlZCBvbiB0byBiYWxhbmNlIHRvbyBtdWNoIG1hdGVyaWFsLCBidXQgaWYgaXQgaXMsIHRoaXMgbWFrZXMKKyAgICAlIHRoZSBvdXRwdXQgc29tZXdoYXQgbW9yZSBwYWxhdGFibGUuKQorICAgIFxnbG9iYWxcb3V0cHV0ID0ge1xvbmVwYWdlb3V0e1xwYWdlY29udGVudHNcUEFHRX19JQorICB9JQorICBcZWplY3QKKyAgXGVuZGdyb3VwICUgc3RhcnRlZCBpbiBcYmVnaW5kb3VibGVjb2x1bW5zCisgICUKKyAgJSBccGFnZWdvYWwgd2FzIHNldCB0byB0aGUgZG91YmxlZCBcdnNpemUgYWJvdmUsIHNpbmNlIHdlIHJlc3RhcnRlZAorICAlIHRoZSBjdXJyZW50IHBhZ2UuICBXZSdyZSBub3cgYmFjayB0byBub3JtYWwgc2luZ2xlLWNvbHVtbgorICAlIHR5cGVzZXR0aW5nLCBzbyByZXNldCBccGFnZWdvYWwgdG8gdGhlIG5vcm1hbCBcdnNpemUgKGFmdGVyIHRoZQorICAlIFxlbmRncm91cCB3aGVyZSBcdnNpemUgZ290IHJlc3RvcmVkKS4KKyAgXHBhZ2Vnb2FsID0gXHZzaXplCit9CislCislIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBkb3VibGUgY29sdW1uIG1hdGVyaWFsLgorXGRlZlxiYWxhbmNlY29sdW1uc3slCisgIFxzZXRib3gwID0gXHZib3h7XHVudmJveDI1NX0lIGxpa2UgXGJveDI1NSBidXQgbW9yZSBlZmZpY2llbnQsIHNlZSBwLjEyMC4KKyAgXGRpbWVuQCA9IFxodDAKKyAgXGFkdmFuY2VcZGltZW5AIGJ5IFx0b3Bza2lwCisgIFxhZHZhbmNlXGRpbWVuQCBieS1cYmFzZWxpbmVza2lwCisgIFxkaXZpZGVcZGltZW5AIGJ5IDIgJSB0YXJnZXQgdG8gc3BsaXQgdG8KKyAgJWRlYnVnXG1lc3NhZ2V7ZmluYWwgMi1jb2x1bW4gbWF0ZXJpYWwgaGVpZ2h0PVx0aGVcaHQwLCB0YXJnZXQ9XHRoZVxkaW1lbkAufSUKKyAgXHNwbGl0dG9wc2tpcCA9IFx0b3Bza2lwCisgICUgTG9vcCB1bnRpbCB3ZSBnZXQgYSBkZWNlbnQgYnJlYWtwb2ludC4KKyAgeyUKKyAgICBcdmJhZG5lc3MgPSAxMDAwMAorICAgIFxsb29wCisgICAgICBcZ2xvYmFsXHNldGJveDMgPSBcY29weTAKKyAgICAgIFxnbG9iYWxcc2V0Ym94MSA9IFx2c3BsaXQzIHRvIFxkaW1lbkAKKyAgICBcaWZkaW1caHQzPlxkaW1lbkAKKyAgICAgIFxnbG9iYWxcYWR2YW5jZVxkaW1lbkAgYnkgMXB0CisgICAgXHJlcGVhdAorICB9JQorICAlZGVidWdcbWVzc2FnZXtzcGxpdCB0byBcdGhlXGRpbWVuQCwgY29sdW1uIGhlaWdodHM6IFx0aGVcaHQxLCBcdGhlXGh0My59JQorICBcc2V0Ym94MD1cdmJveCB0b1xkaW1lbkB7XHVudmJveDF9JQorICBcc2V0Ym94Mj1cdmJveCB0b1xkaW1lbkB7XHVudmJveDN9JQorICAlCisgIFxwYWdlc29mYXIKK30KK1xjYXRjb2RlYFxAID0gXG90aGVyCisKKworXG1lc3NhZ2V7c2VjdGlvbmluZyx9CislIENoYXB0ZXJzLCBzZWN0aW9ucywgZXRjLgorCislIFx1bm51bWJlcmVkbm8gaXMgYW4gb3h5bW9yb24sIG9mIGNvdXJzZS4gIEJ1dCB3ZSBjb3VudCB0aGUgdW5udW1iZXJlZAorJSBzZWN0aW9ucyBzbyB0aGF0IHdlIGNhbiByZWZlciB0byB0aGVtIHVuYW1iaWd1b3VzbHkgaW4gdGhlIHBkZgorJSBvdXRsaW5lcyBieSB0aGVpciAic2VjdGlvbiBudW1iZXIiLiAgV2UgYXZvaWQgY29sbGlzaW9ucyB3aXRoIGNoYXB0ZXIKKyUgbnVtYmVycyBieSBzdGFydGluZyB0aGVtIGF0IDEwMDAwLiAgKElmIGEgZG9jdW1lbnQgZXZlciBoYXMgMTAwMDAKKyUgY2hhcHRlcnMsIHdlJ3JlIGluIHRyb3VibGUgYW55d2F5LCBJJ20gc3VyZS4pCitcbmV3Y291bnRcdW5udW1iZXJlZG5vIFx1bm51bWJlcmVkbm8gPSAxMDAwMAorXG5ld2NvdW50XGNoYXBubworXG5ld2NvdW50XHNlY25vICAgICAgICBcc2Vjbm89MAorXG5ld2NvdW50XHN1YnNlY25vICAgICBcc3Vic2Vjbm89MAorXG5ld2NvdW50XHN1YnN1YnNlY25vICBcc3Vic3Vic2Vjbm89MAorCislIFRoaXMgY291bnRlciBpcyBmdW5ueSBzaW5jZSBpdCBjb3VudHMgdGhyb3VnaCBjaGFyY29kZXMgb2YgbGV0dGVycyBBLCBCLCAuLi4KK1xuZXdjb3VudFxhcHBlbmRpeG5vICBcYXBwZW5kaXhubyA9IGBcQAorJQorJSBcZGVmXGFwcGVuZGl4bGV0dGVye1xjaGFyXHRoZVxhcHBlbmRpeG5vfQorJSBXZSBkbyB0aGUgZm9sbG93aW5nIHVnbHkgY29uZGl0aW9uYWwgaW5zdGVhZCBvZiB0aGUgYWJvdmUgc2ltcGxlCislIGNvbnN0cnVjdCBmb3IgdGhlIHNha2Ugb2YgcGRmdGV4LCB3aGljaCBuZWVkcyB0aGUgYWN0dWFsCislIGxldHRlciBpbiB0aGUgZXhwYW5zaW9uLCBub3QganVzdCB0eXBlc2V0LgorJSAKK1xkZWZcYXBwZW5kaXhsZXR0ZXJ7JQorICBcaWZudW1cYXBwZW5kaXhubz1gQSBBJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBCIEIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEMgQyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRCBEJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBFIEUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEYgRiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRyBHJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBIIEglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEkgSSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSiBKJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBLIEslCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEwgTCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTSBNJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBOIE4lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE8gTyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUCBQJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBRIFElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFIgUiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUyBTJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBUIFQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFUgVSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gViBWJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBXIFclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFggWCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWSBZJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBaIFolCisgICUgVGhlIFx0aGUgaXMgbmVjZXNzYXJ5LCBkZXNwaXRlIGFwcGVhcmFuY2VzLCBiZWNhdXNlIFxhcHBlbmRpeGxldHRlciBpcworICAlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgdGhlIC50b2MgZmlsZS4gIFxjaGFyXGFwcGVuZGl4bm8gaXMgbm90CisgICUgZXhwYW5kYWJsZSwgdGh1cyBpdCBpcyB3cml0dGVuIGxpdGVyYWxseSwgdGh1cyBhbGwgYXBwZW5kaXhlcyBjb21lIG91dAorICAlIHdpdGggdGhlIHNhbWUgbGV0dGVyIChvciBAKSBpbiB0aGUgdG9jIHdpdGhvdXQgaXQuCisgIFxlbHNlXGNoYXJcdGhlXGFwcGVuZGl4bm8KKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaX0KKworJSBFYWNoIEBjaGFwdGVyIGRlZmluZXMgdGhpcyBhcyB0aGUgbmFtZSBvZiB0aGUgY2hhcHRlci4KKyUgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MgY2FuIHVzZSBpdC4gIEBzZWN0aW9uIGRvZXMgbGlrZXdpc2UuCislIEhvd2V2ZXIsIHRoZXkgYXJlIG5vdCByZWxpYWJsZSwgYmVjYXVzZSB3ZSBkb24ndCB1c2UgbWFya3MuCitcZGVmXHRoaXNjaGFwdGVye30KK1xkZWZcdGhpc3NlY3Rpb257fQorCitcbmV3Y291bnRcYWJzc2VjbGV2ZWwgJSB1c2VkIHRvIGNhbGN1bGF0ZSBwcm9wZXIgaGVhZGluZyBsZXZlbAorXG5ld2NvdW50XHNlY2Jhc2Vcc2VjYmFzZT0wICUgQHJhaXNlc2VjdGlvbnMvQGxvd2Vyc2VjdGlvbnMgbW9kaWZ5IHRoaXMgY291bnQKKworJSBAcmFpc2VzZWN0aW9uczogdHJlYXQgQHNlY3Rpb24gYXMgY2hhcHRlciwgQHN1YnNlY3Rpb24gYXMgc2VjdGlvbiwgZXRjLgorXGRlZlxyYWlzZXNlY3Rpb25ze1xnbG9iYWxcYWR2YW5jZVxzZWNiYXNlIGJ5IC0xfQorXGxldFx1cD1ccmFpc2VzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIEBsb3dlcnNlY3Rpb25zOiB0cmVhdCBAY2hhcHRlciBhcyBzZWN0aW9uLCBAc2VjdGlvbiBhcyBzdWJzZWN0aW9uLCBldGMuCitcZGVmXGxvd2Vyc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgMX0KK1xsZXRcZG93bj1cbG93ZXJzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIENob29zZSBhIG51bWJlcmVkLWhlYWRpbmcgbWFjcm8KKyUgIzEgaXMgaGVhZGluZyBsZXZlbCBpZiB1bm1vZGlmaWVkIGJ5IEByYWlzZXNlY3Rpb25zIG9yIEBsb3dlcnNlY3Rpb25zCislICMyIGlzIHRleHQgZm9yIGhlYWRpbmcKK1xkZWZcbnVtaGVhZCMxIzJ7XGFic3NlY2xldmVsPVxzZWNiYXNlXGFkdmFuY2VcYWJzc2VjbGV2ZWwgYnkgIzEKK1xpZmNhc2VcYWJzc2VjbGV2ZWwKKyAgICAgIFxjaGFwdGVyenp6eyMyfSUKKyAgXG9yIFxzZWN6enp7IzJ9JQorICBcb3IgXG51bWJlcmVkc3Vic2Vjenp6eyMyfSUKKyAgXG9yIFxudW1iZXJlZHN1YnN1YnNlY3p6ensjMn0lCisgIFxlbHNlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbDwwIFxjaGFwdGVyenp6eyMyfSUKKyAgICBcZWxzZSBcbnVtYmVyZWRzdWJzdWJzZWN6enp7IzJ9JQorICAgIFxmaQorICBcZmkKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBsaWtlIFxudW1oZWFkLCBidXQgY2hvb3NlcyBhcHBlbmRpeCBoZWFkaW5nIGxldmVscworXGRlZlxhcHBoZWFkIzEjMntcYWJzc2VjbGV2ZWw9XHNlY2Jhc2VcYWR2YW5jZVxhYnNzZWNsZXZlbCBieSAjMQorXGlmY2FzZVxhYnNzZWNsZXZlbAorICAgICAgXGFwcGVuZGl4enp6eyMyfSUKKyAgXG9yIFxhcHBlbmRpeHNlY3Rpb256enp7IzJ9JQorICBcb3IgXGFwcGVuZGl4c3Vic2Vjenp6eyMyfSUKKyAgXG9yIFxhcHBlbmRpeHN1YnN1YnNlY3p6ensjMn0lCisgIFxlbHNlCisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbDwwIFxhcHBlbmRpeHp6ensjMn0lCisgICAgXGVsc2UgXGFwcGVuZGl4c3Vic3Vic2Vjenp6eyMyfSUKKyAgICBcZmkKKyAgXGZpCisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50Cit9CisKKyUgbGlrZSBcbnVtaGVhZCwgYnV0IGNob29zZXMgbnVtYmVybGVzcyBoZWFkaW5nIGxldmVscworXGRlZlx1bm5taGVhZCMxIzJ7XGFic3NlY2xldmVsPVxzZWNiYXNlXGFkdmFuY2VcYWJzc2VjbGV2ZWwgYnkgIzEKKyAgXGlmY2FzZVxhYnNzZWNsZXZlbAorICAgICAgXHVubnVtYmVyZWR6enp7IzJ9JQorICBcb3IgXHVubnVtYmVyZWRzZWN6enp7IzJ9JQorICBcb3IgXHVubnVtYmVyZWRzdWJzZWN6enp7IzJ9JQorICBcb3IgXHVubnVtYmVyZWRzdWJzdWJzZWN6enp7IzJ9JQorICBcZWxzZQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWw8MCBcdW5udW1iZXJlZHp6ensjMn0lCisgICAgXGVsc2UgXHVubnVtYmVyZWRzdWJzdWJzZWN6enp7IzJ9JQorICAgIFxmaQorICBcZmkKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBAY2hhcHRlciwgQGFwcGVuZGl4LCBAdW5udW1iZXJlZC4KKyUKK1xvdXRlclxkZWZcY2hhcHRlcntccGFyc2VhcmdcY2hhcHRlcnl5eX0KK1xkZWZcY2hhcHRlcnl5eSMxe1xudW1oZWFkMHsjMX19ICUgbm9ybWFsbHkgbnVtaGVhZDAgY2FsbHMgY2hhcHRlcnp6egorXGRlZlxjaGFwdGVyenp6IzF7JQorICBcc2Vjbm89MCBcc3Vic2Vjbm89MCBcc3Vic3Vic2Vjbm89MCAgXGFkdmFuY2VcY2hhcG5vIGJ5IDEKKyAgXG1lc3NhZ2V7XHB1dHdvcmRDaGFwdGVyXHNwYWNlIFx0aGVcY2hhcG5vfSUKKyAgJQorICAlIFdyaXRlIHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgXGNoYXBtYWNyb3sjMX17WW51bWJlcmVkfXtcdGhlXGNoYXBub30lCisgICUKKyAgJSBTbyBAc2VjdGlvbiBhbmQgdGhlIGxpa2UgYXJlIG51bWJlcmVkIHVuZGVybmVhdGggdGhpcyBjaGFwdGVyLgorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworfQorCitcb3V0ZXJcZGVmXGFwcGVuZGl4e1xwYXJzZWFyZ1xhcHBlbmRpeHl5eX0KK1xkZWZcYXBwZW5kaXh5eXkjMXtcYXBwaGVhZDB7IzF9fSAlIG5vcm1hbGx5IGFwcGhlYWQwIGNhbGxzIGFwcGVuZGl4enp6CitcZGVmXGFwcGVuZGl4enp6IzF7JQorICBcc2Vjbm89MCBcc3Vic2Vjbm89MCBcc3Vic3Vic2Vjbm89MCAgXGFkdmFuY2VcYXBwZW5kaXhubyBieSAxCisgIFxkZWZcYXBwZW5kaXhudW17XHB1dHdvcmRBcHBlbmRpeFxzcGFjZSBcYXBwZW5kaXhsZXR0ZXJ9JQorICBcbWVzc2FnZXtcYXBwZW5kaXhudW19JQorICBcY2hhcG1hY3JveyMxfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlcn0lCisgIFxnbG9iYWxcbGV0XHNlY3Rpb24gPSBcYXBwZW5kaXhzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFxhcHBlbmRpeHN1YnNlYworICBcZ2xvYmFsXGxldFxzdWJzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic3Vic2VjCit9CisKKyUgQGNlbnRlcmNoYXAgaXMgbGlrZSBAdW5udW1iZXJlZCwgYnV0IHRoZSBoZWFkaW5nIGlzIGNlbnRlcmVkLgorXG91dGVyXGRlZlxjZW50ZXJjaGFwe1xwYXJzZWFyZ1xjZW50ZXJjaGFweXl5fQorXGRlZlxjZW50ZXJjaGFweXl5IzF7e1x1bm51bWJlcmVkeXl5eyMxfX19CisKKyUgQHRvcCBpcyBsaWtlIEB1bm51bWJlcmVkLgorXG91dGVyXGRlZlx0b3B7XHBhcnNlYXJnXHVubnVtYmVyZWR5eXl9CisKK1xvdXRlclxkZWZcdW5udW1iZXJlZHtccGFyc2VhcmdcdW5udW1iZXJlZHl5eX0KK1xkZWZcdW5udW1iZXJlZHl5eSMxe1x1bm5taGVhZDB7IzF9fSAlIG5vcm1hbGx5IHVubm1oZWFkMCBjYWxscyB1bm51bWJlcmVkenp6CitcZGVmXHVubnVtYmVyZWR6enojMXslCisgIFxzZWNubz0wIFxzdWJzZWNubz0wIFxzdWJzdWJzZWNubz0wICBcYWR2YW5jZVx1bm51bWJlcmVkbm8gYnkgMQorICAlCisgICUgVGhpcyB1c2VkIHRvIGJlIHNpbXBseSBcbWVzc2FnZXsjMX0sIGJ1dCBUZVggZnVsbHkgZXhwYW5kcyB0aGUKKyAgJSBhcmd1bWVudCB0byBcbWVzc2FnZS4gIFRoZXJlZm9yZSwgaWYgIzEgY29udGFpbmVkIEAtY29tbWFuZHMsIFRlWAorICAlIGV4cGFuZGVkIHRoZW0uICBGb3IgZXhhbXBsZSwgaW4gYEB1bm51bWJlcmVkIFRoZSBAY2l0ZXtCb29rfScsIFRlWAorICAlIGV4cGFuZGVkIEBjaXRlICh3aGljaCB0dXJucyBvdXQgdG8gY2F1c2UgZXJyb3JzIGJlY2F1c2UgXGNpdGUgaXMgbWVhbnQKKyAgJSB0byBiZSBleGVjdXRlZCwgbm90IGV4cGFuZGVkKS4KKyAgJQorICAlIEFueXdheSwgd2UgZG9uJ3Qgd2FudCB0aGUgZnVsbHktZXhwYW5kZWQgZGVmaW5pdGlvbiBvZiBAY2l0ZSB0byBhcHBlYXIKKyAgJSBhcyBhIHJlc3VsdCBvZiB0aGUgXG1lc3NhZ2UsIHdlIGp1c3Qgd2FudCBgQGNpdGUnIGl0c2VsZi4gIFdlIHVzZQorICAlIFx0aGU8dG9rcyByZWdpc3Rlcj4gdG8gYWNoaWV2ZSB0aGlzOiBUZVggZXhwYW5kcyBcdGhlPHRva3M+IG9ubHkgb25jZSwKKyAgJSBzaW1wbHkgeWllbGRpbmcgdGhlIGNvbnRlbnRzIG9mIDx0b2tzIHJlZ2lzdGVyPi4gIChXZSBhbHNvIGRvIHRoaXMgZm9yCisgICUgdGhlIHRvYyBlbnRyaWVzLikKKyAgXHRva3MwID0geyMxfVxtZXNzYWdleyhcdGhlXHRva3MwKX0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXHVubnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnN1YnNlYworfQorCislIFNlY3Rpb25zLgorXG91dGVyXGRlZlxudW1iZXJlZHNlY3tccGFyc2Vhcmdcc2VjeXl5fQorXGRlZlxzZWN5eXkjMXtcbnVtaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIHNlY3p6egorXGRlZlxzZWN6enojMXslCisgIFxzdWJzZWNubz0wIFxzdWJzdWJzZWNubz0wICBcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbnVtYmVyZWR9e1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm99JQorfQorCitcb3V0ZXJcZGVmXGFwcGVuZGl4c2VjdGlvbntccGFyc2VhcmdcYXBwZW5kaXhzZWN5eXl9Citcb3V0ZXJcZGVmXGFwcGVuZGl4c2Vje1xwYXJzZWFyZ1xhcHBlbmRpeHNlY3l5eX0KK1xkZWZcYXBwZW5kaXhzZWN5eXkjMXtcYXBwaGVhZDF7IzF9fSAlIG5vcm1hbGx5IGNhbGxzIGFwcGVuZGl4c2VjdGlvbnp6egorXGRlZlxhcHBlbmRpeHNlY3Rpb256enojMXslCisgIFxzdWJzZWNubz0wIFxzdWJzdWJzZWNubz0wICBcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vfSUKK30KKworXG91dGVyXGRlZlx1bm51bWJlcmVkc2Vje1xwYXJzZWFyZ1x1bm51bWJlcmVkc2VjeXl5fQorXGRlZlx1bm51bWJlcmVkc2VjeXl5IzF7XHVubm1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgdW5udW1iZXJlZHNlY3p6egorXGRlZlx1bm51bWJlcmVkc2Vjenp6IzF7JQorICBcc3Vic2Vjbm89MCBcc3Vic3Vic2Vjbm89MCAgXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vLlx0aGVcc2Vjbm99JQorfQorCislIFN1YnNlY3Rpb25zLgorXG91dGVyXGRlZlxudW1iZXJlZHN1YnNlY3tccGFyc2VhcmdcbnVtYmVyZWRzdWJzZWN5eXl9CitcZGVmXG51bWJlcmVkc3Vic2VjeXl5IzF7XG51bWhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBudW1iZXJlZHN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXHN1YnN1YnNlY25vPTAgIFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXGRlZlxhcHBlbmRpeHN1YnNlY3tccGFyc2VhcmdcYXBwZW5kaXhzdWJzZWN5eXl9CitcZGVmXGFwcGVuZGl4c3Vic2VjeXl5IzF7XGFwcGhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnNlY3p6eiMxeyUKKyAgXHN1YnN1YnNlY25vPTAgIFxhZHZhbmNlXHN1YnNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzdWJzZWN9e1lhcHBlbmRpeH0lCisgICAgICAgICAgICAgICAgIHtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworXG91dGVyXGRlZlx1bm51bWJlcmVkc3Vic2Vje1xwYXJzZWFyZ1x1bm51bWJlcmVkc3Vic2VjeXl5fQorXGRlZlx1bm51bWJlcmVkc3Vic2VjeXl5IzF7XHVubm1oZWFkMnsjMX19ICVub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzZWN6enojMXslCisgIFxzdWJzdWJzZWNubz0wICBcYWR2YW5jZVxzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCislIFN1YnN1YnNlY3Rpb25zLgorXG91dGVyXGRlZlxudW1iZXJlZHN1YnN1YnNlY3tccGFyc2VhcmdcbnVtYmVyZWRzdWJzdWJzZWN5eXl9CitcZGVmXG51bWJlcmVkc3Vic3Vic2VjeXl5IzF7XG51bWhlYWQzeyMxfX0gJSBub3JtYWxseSBudW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnN1YnNlY3p6eiMxeyUKKyAgXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW51bWJlcmVkfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXGRlZlxhcHBlbmRpeHN1YnN1YnNlY3tccGFyc2VhcmdcYXBwZW5kaXhzdWJzdWJzZWN5eXl9CitcZGVmXGFwcGVuZGl4c3Vic3Vic2VjeXl5IzF7XGFwcGhlYWQzeyMxfX0gJSBub3JtYWxseSBhcHBlbmRpeHN1YnN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnN1YnNlY3p6eiMxeyUKKyAgXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKK1xvdXRlclxkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3tccGFyc2VhcmdcdW5udW1iZXJlZHN1YnN1YnNlY3l5eX0KK1xkZWZcdW5udW1iZXJlZHN1YnN1YnNlY3l5eSMxe1x1bm5taGVhZDN7IzF9fSAlbm9ybWFsbHkgdW5udW1iZXJlZHN1YnN1YnNlY3p6egorXGRlZlx1bm51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKKyUgVGhlc2UgYXJlIHZhcmlhbnRzIHdoaWNoIGFyZSBub3QgIm91dGVyIiwgc28gdGhleSBjYW4gYXBwZWFyIGluIEBpZmluZm8uCislIEFjdHVhbGx5LCB0aGV5IGFyZSBub3cgYmUgb2Jzb2xldGU7IG9yZGluYXJ5IHNlY3Rpb24gY29tbWFuZHMgc2hvdWxkIHdvcmsuCitcZGVmXGluZm90b3B7XHBhcnNlYXJnXHVubnVtYmVyZWR6enp9CitcZGVmXGluZm91bm51bWJlcmVke1xwYXJzZWFyZ1x1bm51bWJlcmVkenp6fQorXGRlZlxpbmZvdW5udW1iZXJlZHNlY3tccGFyc2VhcmdcdW5udW1iZXJlZHNlY3p6en0KK1xkZWZcaW5mb3VubnVtYmVyZWRzdWJzZWN7XHBhcnNlYXJnXHVubnVtYmVyZWRzdWJzZWN6enp9CitcZGVmXGluZm91bm51bWJlcmVkc3Vic3Vic2Vje1xwYXJzZWFyZ1x1bm51bWJlcmVkc3Vic3Vic2Vjenp6fQorCitcZGVmXGluZm9hcHBlbmRpeHtccGFyc2VhcmdcYXBwZW5kaXh6enp9CitcZGVmXGluZm9hcHBlbmRpeHNlY3tccGFyc2VhcmdcYXBwZW5kaXhzZWN6enp9CitcZGVmXGluZm9hcHBlbmRpeHN1YnNlY3tccGFyc2VhcmdcYXBwZW5kaXhzdWJzZWN6enp9CitcZGVmXGluZm9hcHBlbmRpeHN1YnN1YnNlY3tccGFyc2VhcmdcYXBwZW5kaXhzdWJzdWJzZWN6enp9CisKK1xkZWZcaW5mb2NoYXB0ZXJ7XHBhcnNlYXJnXGNoYXB0ZXJ6enp9CitcZGVmXGluZm9zZWN0aW9ue1xwYXJzZWFyZ1xzZWN0aW9uenp6fQorXGRlZlxpbmZvc3Vic2VjdGlvbntccGFyc2Vhcmdcc3Vic2VjdGlvbnp6en0KK1xkZWZcaW5mb3N1YnN1YnNlY3Rpb257XHBhcnNlYXJnXHN1YnN1YnNlY3Rpb256enp9CisKKyUgVGhlc2UgbWFjcm9zIGNvbnRyb2wgd2hhdCB0aGUgc2VjdGlvbiBjb21tYW5kcyBkbywgYWNjb3JkaW5nCislIHRvIHdoYXQga2luZCBvZiBjaGFwdGVyIHdlIGFyZSBpbiAob3JkaW5hcnksIGFwcGVuZGl4LCBvciB1bm51bWJlcmVkKS4KKyUgRGVmaW5lIHRoZW0gYnkgZGVmYXVsdCBmb3IgYSBudW1iZXJlZCBjaGFwdGVyLgorXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCitcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKK1xsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworCislIERlZmluZSBAbWFqb3JoZWFkaW5nLCBAaGVhZGluZyBhbmQgQHN1YmhlYWRpbmcKKworJSBOT1RFIG9uIHVzZSBvZiBcdmJveCBmb3IgY2hhcHRlciBoZWFkaW5ncywgc2VjdGlvbiBoZWFkaW5ncywgYW5kIHN1Y2g6CislICAgICAgIDEpIFdlIHVzZSBcdmJveCByYXRoZXIgdGhhbiB0aGUgZWFybGllciBcbGluZSB0byBwZXJtaXQKKyUgICAgICAgICAgb3ZlcmxvbmcgaGVhZGluZ3MgdG8gZm9sZC4KKyUgICAgICAgMikgXGh5cGhlbnBlbmFsdHkgaXMgc2V0IHRvIDEwMDAwIGJlY2F1c2UgaHlwaGVuYXRpb24gaW4gYQorJSAgICAgICAgICBoZWFkaW5nIGlzIG9ibm94aW91czsgdGhpcyBmb3JiaWRzIGl0LgorJSAgICAgICAzKSBMaWtld2lzZSwgaGVhZGluZ3MgbG9vayBiZXN0IGlmIG5vIFxwYXJpbmRlbnQgaXMgdXNlZCwgYW5kCislICAgICAgICAgIGlmIGp1c3RpZmljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4gIEhlbmNlIFxyYWdnZWRyaWdodC4KKworCitcZGVmXG1ham9yaGVhZGluZ3slCisgIHtcYWR2YW5jZVxjaGFwaGVhZGluZ3NraXAgYnkgMTBwdCBcY2hhcGJyZWFrIH0lCisgIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6egorfQorCitcZGVmXGNoYXBoZWFkaW5ne1xjaGFwYnJlYWsgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6fQorXGRlZlxjaGFwaGVhZGluZ3p6eiMxeyUKKyAge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX0lCisgIFxiaWdza2lwIFxwYXJccGVuYWx0eSAyMDBccmVsYXgKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBAaGVhZGluZywgQHN1YmhlYWRpbmcsIEBzdWJzdWJoZWFkaW5nLgorXGRlZlxoZWFkaW5ne1xwYXJzZWFyZ1xkb2hlYWRpbmd9CitcZGVmXHN1YmhlYWRpbmd7XHBhcnNlYXJnXGRvc3ViaGVhZGluZ30KK1xkZWZcc3Vic3ViaGVhZGluZ3tccGFyc2VhcmdcZG9zdWJzdWJoZWFkaW5nfQorXGRlZlxkb2hlYWRpbmcjMXtcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXGRlZlxkb3N1YmhlYWRpbmcjMXtcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorXGRlZlxkb3N1YnN1YmhlYWRpbmcjMXtcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBhIGNoYXB0ZXIsIHNlY3Rpb24sIGV0Yy4gaGVhZGluZyBvbmx5CislIChpbmNsdWRpbmcgd2hpdGVzcGFjZSwgbGluZWJyZWFraW5nLCBldGMuIGFyb3VuZCBpdCksCislIGdpdmVuIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gY29udmVuaWVudCwgcGFyc2VkIGZvcm0uCisKKyUlJSBBcmdzIGFyZSB0aGUgc2tpcCBhbmQgcGVuYWx0eSAodXN1YWxseSBuZWdhdGl2ZSkKK1xkZWZcZG9icmVhayMxIzJ7XHBhclxpZmRpbVxsYXN0c2tpcDwjMVxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5IzJcdnNraXAjMVxmaX0KKworXGRlZlxzZXRjaGFwdGVyc3R5bGUgIzEge1xjc25hbWUgQ0hBUEYjMVxlbmRjc25hbWV9CisKKyUlJSBEZWZpbmUgcGxhaW4gY2hhcHRlciBzdGFydHMsIGFuZCBwYWdlIG9uL29mZiBzd2l0Y2hpbmcgZm9yIGl0CislIFBhcmFtZXRlciBjb250cm9sbGluZyBza2lwIGJlZm9yZSBjaGFwdGVyIGhlYWRpbmdzIChpZiBuZWVkZWQpCisKK1xuZXdza2lwXGNoYXBoZWFkaW5nc2tpcAorCitcZGVmXGNoYXBicmVha3tcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwIHstNDAwMH19CitcZGVmXGNoYXBwYWdlcntccGFyXHZmaWxsXHN1cGVyZWplY3R9CitcZGVmXGNoYXBvZGRwYWdle1xjaGFwcGFnZXIgXGlmb2RkXHBhZ2VubyBcZWxzZSBcaGJveCB0byAwcHR7fSBcY2hhcHBhZ2VyXGZpfQorCitcZGVmXHNldGNoYXB0ZXJuZXdwYWdlICMxIHtcY3NuYW1lIENIQVBQQUcjMVxlbmRjc25hbWV9CisKK1xkZWZcQ0hBUFBBR29mZnslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwYnJlYWsKK1xnbG9iYWxcbGV0XHBhZ2VhbGlnbm1hY3JvPVxjaGFwcGFnZXJ9CisKK1xkZWZcQ0hBUFBBR29ueyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcgorXGdsb2JhbFxkZWZcSEVBRElOR1NvbntcSEVBRElOR1NzaW5nbGV9fQorCitcZGVmXENIQVBQQUdvZGR7JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwY2hhcHNlcG1hY3JvPVxjaGFwb2RkcGFnZQorXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU2RvdWJsZX19CisKK1xDSEFQUEFHb24KKworXGRlZlxDSEFQRnBsYWlueyUKK1xnbG9iYWxcbGV0XGNoYXBtYWNybz1cY2hmcGxhaW4KK1xnbG9iYWxcbGV0XGNlbnRlcmNoYXBtYWNybz1cY2VudGVyY2hmcGxhaW59CisKKyUgTm9ybWFsIGNoYXB0ZXIgb3BlbmluZy4KKyUgCislICMxIGlzIHRoZSB0ZXh0LCAjMiBpcyB0aGUgc2VjdGlvbiB0eXBlIChZbnVtYmVyZWQsIFlub3RoaW5nLAorJSBZYXBwZW5kaXgsIFlvbWl0ZnJvbXRvYyksICMzIHRoZSBjaGFwdGVyIG51bWJlci4KKyUgCislIFRvIHRlc3QgYWdhaW5zdCBvdXIgYXJndW1lbnQuCitcZGVmXFlub3RoaW5na2V5d29yZHtZbm90aGluZ30KK1xkZWZcWW9taXRmcm9tdG9ja2V5d29yZHtZb21pdGZyb210b2N9CitcZGVmXFlhcHBlbmRpeGtleXdvcmR7WWFwcGVuZGl4fQorJQorXGRlZlxjaGZwbGFpbiMxIzIjM3slCisgIFxwY2hhcHNlcG1hY3JvCisgIHslCisgICAgXGNoYXBmb250cyBccm0KKyAgICAlCisgICAgJSBIYXZlIHRvIGRlZmluZSBcdGhpc3NlY3Rpb24gYmVmb3JlIGNhbGxpbmcgXGRvbm9kZXJlZiwgYmVjYXVzZSB0aGUKKyAgICAlIHhyZWYgY29kZSBldmVudHVhbGx5IHVzZXMgaXQsIGFzIFxZdGl0bGUuICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQKKyAgICAlIGhhcyB0byBiZSBjYWxsZWQgYWZ0ZXIgXHBjaGFwc2VwbWFjcm8sIG9yIHRoZSBoZWFkbGluZSB3aWxsIGNoYW5nZQorICAgICUgdG9vIHNvb24uCisgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxnZGVmXHRoaXNjaGFwdGVybmFtZXsjMX0lCisgICAgJQorICAgICUgT25seSBpbnNlcnQgdGhlIHNlcGFyYXRpbmcgc3BhY2UgaWYgd2UgaGF2ZSBhIGNoYXB0ZXIvYXBwZW5kaXgKKyAgICAlIG51bWJlciwgYW5kIGRvbid0IHByaW50IHRoZSB1bm51bWJlcmVkIGBgbnVtYmVyJycuCisgICAgXGRlZlx0ZW1wdHlwZXsjMn0lCisgICAgXGlmeFx0ZW1wdHlwZVxZbm90aGluZ2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUKKyAgICAgIFxkZWZcdG9jdHlwZXt1bm5jaGFwfSUKKyAgICAgIFxkZWZcdGhpc2NoYXB0ZXJ7IzF9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZb21pdGZyb210b2NrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lIGNvbnRlbnRzIGxpa2UgdW5udW1iZXJlZCwgYnV0IG5vIHRvYyBlbnRyeQorICAgICAgXGRlZlx0b2N0eXBle29taXR9JQorICAgICAgXHhkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gIzNcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7YXBwfSUKKyAgICAgICUgV2UgZG9uJ3Qgc3Vic3RpdHV0ZSB0aGUgYWN0dWFsIGNoYXB0ZXIgbmFtZSBpbnRvIFx0aGlzY2hhcHRlcgorICAgICAgJSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgaXRzIG1hY3JvcyBldmFsdWF0ZWQgbm93LiAgQW5kIHdlIGRvbid0CisgICAgICAlIHVzZSBcdGhpc3NlY3Rpb24gYmVjYXVzZSB0aGF0IGNoYW5nZXMgd2l0aCBlYWNoIHNlY3Rpb24uCisgICAgICAlCisgICAgICBceGRlZlx0aGlzY2hhcHRlcntccHV0d29yZEFwcGVuZGl4e30gXGFwcGVuZGl4bGV0dGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgXGVsc2UKKyAgICAgIFxzZXRib3gwID0gXGhib3h7IzNcZW5zcGFjZX0lCisgICAgICBcZGVmXHRvY3R5cGV7bnVtY2hhcH0lCisgICAgICBceGRlZlx0aGlzY2hhcHRlcntccHV0d29yZENoYXB0ZXJ7fSBcdGhlXGNoYXBubzoKKyAgICAgICAgICAgICAgICAgICAgICAgIFxub2V4cGFuZFx0aGlzY2hhcHRlcm5hbWV9JQorICAgIFxmaVxmaVxmaQorICAgICUKKyAgICAlIFdyaXRlIHRoZSB0b2MgZW50cnkgZm9yIHRoaXMgY2hhcHRlci4gIE11c3QgY29tZSBiZWZvcmUgdGhlCisgICAgJSBcZG9ub2RlcmVmLCBiZWNhdXNlIHdlIGluY2x1ZGUgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIGluIHRoZSB0b2MKKyAgICAlIGVudHJ5LCBhbmQgXGRvbm9kZXJlZiByZXNldHMgaXQgdG8gZW1wdHkuCisgICAgXHdyaXRldG9jZW50cnl7XHRvY3R5cGV9eyMxfXsjM30lCisgICAgJQorICAgICUgRm9yIHBkZnRleCwgd2UgaGF2ZSB0byB3cml0ZSBvdXQgdGhlIG5vZGUgZGVmaW5pdGlvbiAoYWthLCBtYWtlCisgICAgJSB0aGUgcGRmZGVzdCkgYWZ0ZXIgYW55IHBhZ2UgYnJlYWssIGJ1dCBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0IGhhcworICAgICUgYmVlbiB0eXBlc2V0LiAgSWYgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcGRmIG91dGxpbmUgaXMgYWZ0ZXIgdGhlCisgICAgJSB0ZXh0LCB0aGVuIGp1bXBpbmcgZnJvbSB0aGUgb3V0bGluZSBtYXkgd2luZCB1cCB3aXRoIHRoZSB0ZXh0IG5vdAorICAgICUgYmVpbmcgdmlzaWJsZSwgZm9yIGluc3RhbmNlIHVuZGVyIGhpZ2ggbWFnbmlmaWNhdGlvbi4KKyAgICBcZG9ub2RlcmVmeyMyfSUKKyAgICAlCisgICAgJSBUeXBlc2V0IHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCBcY2VudGVycGFyYW1ldGVyc21heWJlCisgICAgICAgICAgXHVuaGJveDAgIzFccGFyfSUKKyAgfSUKKyAgXG5vYnJlYWtcYmlnc2tpcCAlIG5vIHBhZ2UgYnJlYWsgYWZ0ZXIgYSBjaGFwdGVyIHRpdGxlCisgIFxub2JyZWFrCit9CisKKyUgQGNlbnRlcmNoYXAgLS0gY2VudGVyZWQgYW5kIHVubnVtYmVyZWQuCitcbGV0XGNlbnRlcnBhcmFtZXRlcnNtYXliZSA9IFxyZWxheAorXGRlZlxjZW50ZXJjaGZwbGFpbiMxe3slCisgIFxkZWZcY2VudGVycGFyYW1ldGVyc21heWJleyUKKyAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkgM1xyaWdodHNraXAKKyAgICBcbGVmdHNraXAgPSBccmlnaHRza2lwCisgICAgXHBhcmZpbGxza2lwID0gMHB0CisgIH0lCisgIFxjaGZwbGFpbnsjMX17WW5vdGhpbmd9e30lCit9fQorCitcQ0hBUEZwbGFpbiAlIFRoZSBkZWZhdWx0CisKKyUgSSBkb24ndCB0aGluayB0aGlzIGNoYXB0ZXIgc3R5bGUgaXMgc3VwcG9ydGVkIGFueSBtb3JlLCBzbyBJJ20gbm90CislIHVwZGF0aW5nIGl0IHdpdGggdGhlIG5ldyBub2RlcmVmIHN0dWZmLiAgV2UnbGwgc2VlLiAgLS1rYXJsLCAxMWF1ZzAzLgorJSAKK1xkZWZcdW5uY2hmb3BlbiAjMXslCitcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKK30KKworXGRlZlxjaGZvcGVuICMxIzJ7XGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzCitcdmJveCB0byAzaW57XHZmaWwgXGhib3ggdG9caHNpemV7XGhmaWwgIzJ9IFxoYm94IHRvXGhzaXple1xoZmlsICMxfSBcdmZpbH19JQorXHBhclxwZW5hbHR5IDUwMDAgJQorfQorCitcZGVmXGNlbnRlcmNoZm9wZW4gIzF7JQorXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCisgICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0CisgICAgICAgICAgICAgICAgICAgICAgIFxoZmlsbCB7XHJtICMxfVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCit9CisKK1xkZWZcQ0hBUEZvcGVueyUKK1xnbG9iYWxcbGV0XGNoYXBtYWNybz1cY2hmb3BlbgorXGdsb2JhbFxsZXRcY2VudGVyY2hhcG1hY3JvPVxjZW50ZXJjaGZvcGVufQorCisKKyUgU2VjdGlvbiB0aXRsZXMuICBUaGVzZSBtYWNyb3MgY29tYmluZSB0aGUgc2VjdGlvbiBudW1iZXIgcGFydHMgYW5kCislIGNhbGwgdGhlIGdlbmVyaWMgXHNlY3Rpb25oZWFkaW5nIHRvIGRvIHRoZSBwcmludGluZy4KKyUgCitcbmV3c2tpcFxzZWNoZWFkaW5nc2tpcAorXGRlZlxzZWNoZWFkaW5nYnJlYWt7XGRvYnJlYWsgXHNlY2hlYWRpbmdza2lwey0xMDAwfX0KKworJSBTdWJzZWN0aW9uIHRpdGxlcy4KK1xuZXdza2lwXHN1YnNlY2hlYWRpbmdza2lwCitcZGVmXHN1YnNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc3Vic2VjaGVhZGluZ3NraXB7LTUwMH19CisKKyUgU3Vic3Vic2VjdGlvbiB0aXRsZXMuCitcZGVmXHN1YnN1YnNlY2hlYWRpbmdza2lwe1xzdWJzZWNoZWFkaW5nc2tpcH0KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ2JyZWFre1xzdWJzZWNoZWFkaW5nYnJlYWt9CisKKworJSBQcmludCBhbnkgc2l6ZSwgYW55IHR5cGUsIHNlY3Rpb24gdGl0bGUuCislIAorJSAjMSBpcyB0aGUgdGV4dCwgIzIgaXMgdGhlIHNlY3Rpb24gbGV2ZWwgKHNlYy9zdWJzZWMvc3Vic3Vic2VjKSwgIzMgaXMKKyUgdGhlIHNlY3Rpb24gdHlwZSBmb3IgeHJlZnMgKFludW1iZXJlZCwgWW5vdGhpbmcsIFlhcHBlbmRpeCksICM0IGlzIHRoZQorJSBzZWN0aW9uIG51bWJlci4KKyUgCitcZGVmXHNlY3Rpb25oZWFkaW5nIzEjMiMzIzR7JQorICB7JQorICAgICUgU3dpdGNoIHRvIHRoZSByaWdodCBzZXQgb2YgZm9udHMuCisgICAgXGNzbmFtZSAjMmZvbnRzXGVuZGNzbmFtZSBccm0KKyAgICAlCisgICAgJSBJbnNlcnQgc3BhY2UgYWJvdmUgdGhlIGhlYWRpbmcuCisgICAgXGNzbmFtZSAjMmhlYWRpbmdicmVha1xlbmRjc25hbWUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc3BhY2UgYWZ0ZXIgdGhlIG51bWJlciBpZiB3ZSBoYXZlIGEgc2VjdGlvbiBudW1iZXIuCisgICAgXGRlZlxzZWN0aW9ubGV2ZWx7IzJ9JQorICAgIFxkZWZcdGVtcHR5cGV7IzN9JQorICAgICUKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3Vubn0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgICUgZm9yIEBoZWFkaW5ncyAtLSBubyBzZWN0aW9uIG51bWJlciwgZG9uJ3QgaW5jbHVkZSBpbiB0b2MsCisgICAgICAlIGFuZCBkb24ndCByZWRlZmluZSBcdGhpc3NlY3Rpb24uCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcbGV0XHNlY3Rpb25sZXZlbD1cZW1wdHkKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bX0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSAoYmVmb3JlIFxkb25vZGVyZWYpLiAgU2VlIGNvbW1lbnRzIGluIFxjaGZwbGFpbi4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZVxzZWN0aW9ubGV2ZWx9eyMxfXsjNH0lCisgICAgJQorICAgICUgV3JpdGUgdGhlIG5vZGUgcmVmZXJlbmNlICg9IHBkZiBkZXN0aW5hdGlvbiBmb3IgcGRmdGV4KS4KKyAgICAlIEFnYWluLCBzZWUgY29tbWVudHMgaW4gXGNoZnBsYWluLgorICAgIFxkb25vZGVyZWZ7IzN9JQorICAgICUKKyAgICAlIE91dHB1dCB0aGUgYWN0dWFsIHNlY3Rpb24gaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCAgJSB6ZXJvIGlmIG5vIHNlY3Rpb24gbnVtYmVyCisgICAgICAgICAgXHVuaGJveDAgIzF9JQorICB9JQorICAlIEFkZCBleHRyYSBzcGFjZSBhZnRlciB0aGUgaGVhZGluZyAtLSBoYWxmIG9mIHdoYXRldmVyIGNhbWUgYWJvdmUgaXQuCisgICUgRG9uJ3QgYWxsb3cgc3RyZXRjaCwgdGhvdWdoLgorICBca2VybiAuNSBcY3NuYW1lICMyaGVhZGluZ3NraXBcZW5kY3NuYW1lCisgICUKKyAgJSBEbyBub3QgbGV0IHRoZSBrZXJuIGJlIGEgcG90ZW50aWFsIGJyZWFrcG9pbnQsIGFzIGl0IHdvdWxkIGJlIGlmIGl0CisgICUgd2FzIGZvbGxvd2VkIGJ5IGdsdWUuCisgIFxub2JyZWFrCisgICUKKyAgJSBXZSdsbCBhbG1vc3QgY2VydGFpbmx5IHN0YXJ0IGEgcGFyYWdyYXBoIG5leHQsIHNvIGRvbid0IGxldCB0aGF0CisgICUgZ2x1ZSBhY2N1bXVsYXRlLiAgKE5vdCBhIGJyZWFrcG9pbnQgYmVjYXVzZSBpdCdzIHByZWNlZGVkIGJ5IGEKKyAgJSBkaXNjYXJkYWJsZSBpdGVtLikKKyAgXHZza2lwLVxwYXJza2lwCisgICUKKyAgJSBUaGlzIFxub2JyZWFrIGlzIHB1cmVseSBzbyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaXN0IGlzIGEgXHBlbmFsdHkKKyAgJSBvZiAxMDAwMC4gIFRoaXMgaXMgc28gb3RoZXIgY29kZSwgZm9yIGluc3RhbmNlIFxwYXJzZWJvZHljb21tb24sIGNhbgorICAlIGNoZWNrIGZvciBhbmQgYXZvaWQgYWxsb3dpbmcgYnJlYWtwb2ludHMuICBPdGhlcndpc2UsIGl0IHdvdWxkCisgICUgaW5zZXJ0IGEgdmFsaWQgYnJlYWtwb2ludCBiZXR3ZWVuOgorICAlICAgQHNlY3Rpb24gc2VjLXdoYXRldmVyCisgICUgICBAZGVmZm4gZGVmLXdoYXRldmVyCisgIFxub2JyZWFrCit9CisKKworXG1lc3NhZ2V7dG9jLH0KKyUgVGFibGUgb2YgY29udGVudHMuCitcbmV3d3JpdGVcdG9jZmlsZQorCislIFdyaXRlIGFuIGVudHJ5IHRvIHRoZSB0b2MgZmlsZSwgb3BlbmluZyBpdCBpZiBuZWNlc3NhcnkuCislIENhbGxlZCBmcm9tIEBjaGFwdGVyLCBldGMuICAKKyUgCislIEV4YW1wbGUgdXNhZ2U6IFx3cml0ZXRvY2VudHJ5e3NlY317U2VjdGlvbiBOYW1lfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfQorJSBXZSBhcHBlbmQgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIChpZiBhbnkpIGFuZCBwYWdlIG51bWJlciBhcyBhZGRpdGlvbmFsCislIGFyZ3VtZW50cyBmb3IgdGhlIFx7Y2hhcCxzZWMsLi4ufWVudHJ5IG1hY3JvcyB3aGljaCB3aWxsIGV2ZW50dWFsbHkKKyUgcmVhZCB0aGlzLiAgVGhlIG5vZGUgbmFtZSBpcyB1c2VkIGluIHRoZSBwZGYgb3V0bGluZXMgYXMgdGhlCislIGRlc3RpbmF0aW9uIHRvIGp1bXAgdG8uCislIAorJSBXZSBvcGVuIHRoZSAudG9jIGZpbGUgZm9yIHdyaXRpbmcgaGVyZSBpbnN0ZWFkIG9mIGF0IEBzZXRmaWxlbmFtZSAob3IKKyUgYW55IG90aGVyIGZpeGVkIHRpbWUpIHNvIHRoYXQgQGNvbnRlbnRzIGNhbiBiZSBhbnl3aGVyZSBpbiB0aGUgZG9jdW1lbnQuCislIEJ1dCBpZiAjMSBpcyBgb21pdCcsIHRoZW4gd2UgZG9uJ3QgZG8gYW55dGhpbmcuICBUaGlzIGlzIHVzZWQgZm9yIHRoZQorJSB0YWJsZSBvZiBjb250ZW50cyBjaGFwdGVyIG9wZW5pbmdzIHRoZW1zZWx2ZXMuCislCitcbmV3aWZcaWZ0b2NmaWxlb3BlbmVkCitcZGVmXG9taXRrZXl3b3Jke29taXR9JQorJQorXGRlZlx3cml0ZXRvY2VudHJ5IzEjMiMzeyUKKyAgXGVkZWZcd3JpdGV0b2N0eXBleyMxfSUKKyAgXGlmeFx3cml0ZXRvY3R5cGVcb21pdGtleXdvcmQgXGVsc2UKKyAgICBcaWZ0b2NmaWxlb3BlbmVkXGVsc2UKKyAgICAgIFxpbW1lZGlhdGVcb3Blbm91dFx0b2NmaWxlID0gXGpvYm5hbWUudG9jCisgICAgICBcZ2xvYmFsXHRvY2ZpbGVvcGVuZWR0cnVlCisgICAgXGZpCisgICAgJQorICAgIFxpZmxpbmtzCisgICAgICBcdG9rczAgPSB7IzJ9JQorICAgICAgXHRva3MyID0gXGV4cGFuZGFmdGVye1xsYXN0bm9kZX0lCisgICAgICBcZWRlZlx0ZW1we1x3cml0ZVx0b2NmaWxle1xyZWFsYmFja3NsYXNoICMxZW50cnl7XHRoZVx0b2tzMH17IzN9JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcdGhlXHRva3MyfXtcbm9leHBhbmRcZm9saW99fX0lCisgICAgICBcdGVtcAorICAgIFxmaQorICBcZmkKKyAgJQorICAlIFRlbGwgXHNoaXBvdXQgdG8gY3JlYXRlIGEgcGRmIGRlc3RpbmF0aW9uIG9uIGVhY2ggcGFnZSwgaWYgd2UncmUKKyAgJSB3cml0aW5nIHBkZi4gIFRoZXNlIGFyZSB1c2VkIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIFdlIGNhbid0CisgICUganVzdCB3cml0ZSBvbmUgb24gZXZlcnkgcGFnZSBiZWNhdXNlIHRoZSB0aXRsZSBwYWdlcyBhcmUgbnVtYmVyZWQKKyAgJSAxIGFuZCAyICh0aGUgcGFnZSBudW1iZXJzIGFyZW4ndCBwcmludGVkKSwgYW5kIHNvIGFyZSB0aGUgZmlyc3QKKyAgJSB0d28gcGFnZXMgb2YgdGhlIGRvY3VtZW50LiAgVGh1cywgd2UnZCBoYXZlIHR3byBkZXN0aW5hdGlvbnMgbmFtZWQKKyAgJSBgMScsIGFuZCB0d28gbmFtZWQgYDInLgorICBcaWZwZGYgXGdsb2JhbFxwZGZtYWtlcGFnZWRlc3R0cnVlIFxmaQorfQorCitcbmV3c2tpcFxjb250ZW50c3JpZ2h0bWFyZ2luIFxjb250ZW50c3JpZ2h0bWFyZ2luPTFpbgorXG5ld2NvdW50XHNhdmVwYWdlbm8KK1xuZXdjb3VudFxsYXN0bmVnYXRpdmVwYWdlbm8gXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IC0xCisKKyUgUHJlcGFyZSB0byByZWFkIHdoYXQgd2UndmUgd3JpdHRlbiB0byBcdG9jZmlsZS4KKyUKK1xkZWZcc3RhcnRjb250ZW50cyMxeyUKKyAgICUgSWYgQHNldGNoYXB0ZXJuZXdwYWdlIG9uLCBhbmQgQGhlYWRpbmdzIGRvdWJsZSwgdGhlIGNvbnRlbnRzIHNob3VsZAorICAgJSBzdGFydCBvbiBhbiBvZGQgcGFnZSwgdW5saWtlIGNoYXB0ZXJzLiAgVGh1cywgd2UgbWFpbnRhaW4KKyAgICUgXGNvbnRlbnRzYWxpZ25tYWNybyBpbiBwYXJhbGxlbCB3aXRoIFxwYWdlYWxpZ25tYWNyby4KKyAgICUgRnJvbTogVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgorICAgXGNvbnRlbnRzYWxpZ25tYWNybworICAgXGltbWVkaWF0ZVxjbG9zZW91dFx0b2NmaWxlCisgICAlCisgICAlIERvbid0IG5lZWQgdG8gcHV0IGBDb250ZW50cycgb3IgYFNob3J0IENvbnRlbnRzJyBpbiB0aGUgaGVhZGxpbmUuCisgICAlIEl0IGlzIGFidW5kYW50bHkgY2xlYXIgd2hhdCB0aGV5IGFyZS4KKyAgIFxkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgIFxjaGFwbWFjcm97IzF9e1lvbWl0ZnJvbXRvY317fSUKKyAgICUKKyAgIFxzYXZlcGFnZW5vID0gXHBhZ2VubworICAgXGJlZ2luZ3JvdXAgICAgICAgICAgICAgICAgICAlIFNldCB1cCB0byBoYW5kbGUgY29udGVudHMgZmlsZXMgcHJvcGVybHkuCisgICAgICBcY2F0Y29kZWBcXD0wICBcY2F0Y29kZWBcez0xICBcY2F0Y29kZWBcfT0yICBcY2F0Y29kZWBcQD0xMQorICAgICAgJSBXZSBjYW4ndCBkbyB0aGlzLCBiZWNhdXNlIHRoZW4gYW4gYWN0dWFsIF4gaW4gYSBzZWN0aW9uCisgICAgICAlIHRpdGxlIGZhaWxzLCBlLmcuLCBAY2hhcHRlciBeIC0tIGV4cG9uZW50aWF0aW9uLiAgLS1rYXJsLCA5anVsOTcuCisgICAgICAlXGNhdGNvZGVgXF49NyAlIHRvIHNlZSBeXmU0IGFzIFwiYSBldGMuIGp1aGFAcGl1aGEueWRpLnZ0dC5maQorICAgICAgXHJhZ2dlZGJvdHRvbSAgICAgICAgICAgICAlIFdvcnJ5IG1vcmUgYWJvdXQgYnJlYWtwb2ludHMgdGhhbiB0aGUgYm90dG9tLgorICAgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxjb250ZW50c3JpZ2h0bWFyZ2luICUgRG9uJ3QgdXNlIHRoZSBmdWxsIGxpbmUgbGVuZ3RoLgorICAgICAgJQorICAgICAgJSBSb21hbiBudW1lcmFscyBmb3IgcGFnZSBudW1iZXJzLgorICAgICAgXGlmbnVtIFxwYWdlbm8+MCBcZ2xvYmFsXHBhZ2VubyA9IFxsYXN0bmVnYXRpdmVwYWdlbm8gXGZpCit9CisKKworJSBOb3JtYWwgKGxvbmcpIHRvYy4KK1xkZWZcY29udGVudHN7JQorICAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRUT0N9JQorICAgICBcb3BlbmluIDEgXGpvYm5hbWUudG9jCisgICAgIFxpZmVvZiAxIFxlbHNlCisgICAgICAgXGNsb3NlaW4gMQorICAgICAgIFxpbnB1dCBcam9ibmFtZS50b2MKKyAgICAgXGZpCisgICAgIFx2ZmlsbCBcZWplY3QKKyAgICAgXGNvbnRlbnRzYWxpZ25tYWNybyAlIGluIGNhc2UgQHNldGNoYXB0ZXJuZXdwYWdlIG9kZCBpcyBpbiBlZmZlY3QKKyAgICAgXHBkZm1ha2VvdXRsaW5lcworICAgXGVuZGdyb3VwCisgICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorCislIEFuZCBqdXN0IHRoZSBjaGFwdGVycy4KK1xkZWZcc3VtbWFyeWNvbnRlbnRzeyUKKyAgIFxzdGFydGNvbnRlbnRze1xwdXR3b3JkU2hvcnRUT0N9JQorICAgICAgJQorICAgICAgXGxldFxudW1jaGFwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICAgIFxsZXRcYXBwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICAgIFxsZXRcdW5uY2hhcGVudHJ5ID0gXHNob3J0dW5uY2hhcGVudHJ5CisgICAgICAlIFdlIHdhbnQgYSB0cnVlIHJvbWFuIGhlcmUgZm9yIHRoZSBwYWdlIG51bWJlcnMuCisgICAgICBcc2VjZm9udHMKKyAgICAgIFxsZXRccm09XHNob3J0Y29udHJtIFxsZXRcYmY9XHNob3J0Y29udGJmCisgICAgICBcbGV0XHNsPVxzaG9ydGNvbnRzbCBcbGV0XHR0PVxzaG9ydGNvbnR0dAorICAgICAgXHJtCisgICAgICBcaHlwaGVucGVuYWx0eSA9IDEwMDAwCisgICAgICBcYWR2YW5jZVxiYXNlbGluZXNraXAgYnkgMXB0ICUgT3BlbiBpdCB1cCBhIGxpdHRsZS4KKyAgICAgIFxkZWZcbnVtc2VjZW50cnkjIzEjIzIjIzMjIzR7fQorICAgICAgXGxldFxhcHBzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXGxldFx1bm5zZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXGxldFxudW1zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXGxldFxhcHBzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXGxldFx1bm5zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXGxldFxudW1zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXGxldFxhcHBzdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXGxldFx1bm5zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgICAgXG9wZW5pbiAxIFxqb2JuYW1lLnRvYworICAgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgICAgXGNsb3NlaW4gMQorICAgICAgICBcaW5wdXQgXGpvYm5hbWUudG9jCisgICAgICBcZmkKKyAgICAgXHZmaWxsIFxlamVjdAorICAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICAgXGVuZGdyb3VwCisgICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorXGxldFxzaG9ydGNvbnRlbnRzID0gXHN1bW1hcnljb250ZW50cworCislIFR5cGVzZXQgdGhlIGxhYmVsIGZvciBhIGNoYXB0ZXIgb3IgYXBwZW5kaXggZm9yIHRoZSBzaG9ydCBjb250ZW50cy4KKyUgVGhlIGFyZyBpcywgZS5nLiwgYEEnIGZvciBhbiBhcHBlbmRpeCwgb3IgYDMnIGZvciBhIGNoYXB0ZXIuCislCitcZGVmXHNob3J0Y2hhcGxhYmVsIzF7JQorICAlIFRoaXMgc3BhY2Ugc2hvdWxkIGJlIGVub3VnaCwgc2luY2UgYSBzaW5nbGUgbnVtYmVyIGlzIC41ZW0sIGFuZCB0aGUKKyAgJSB3aWRlc3QgbGV0dGVyIChNKSBpcyAxZW0sIGF0IGxlYXN0IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gZm9udHMuCisgICUgQnV0IHVzZSBcaHNzIGp1c3QgaW4gY2FzZS4KKyAgJSAoVGhpcyBzcGFjZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4dHJhIHNwYWNlIHRoYXQgZ2V0cyBhZGRlZCBhZnRlcgorICAlIHRoZSBsYWJlbDsgdGhhdCBnZXRzIHB1dCBpbiBieSBcc2hvcnRjaGFwZW50cnkgYWJvdmUuKQorICAlIAorICAlIFdlJ2QgbGlrZSB0byByaWdodC1qdXN0aWZ5IGNoYXB0ZXIgbnVtYmVycywgYnV0IHRoYXQgbG9va3Mgc3RyYW5nZQorICAlIHdpdGggYXBwZW5kaXggbGV0dGVycy4gIEFuZCByaWdodC1qdXN0aWZ5aW5nIG51bWJlcnMgYW5kCisgICUgbGVmdC1qdXN0aWZ5aW5nIGxldHRlcnMgbG9va3Mgc3RyYW5nZSB3aGVuIHRoZXJlIGlzIGxlc3MgdGhhbiAxMAorICAlIGNoYXB0ZXJzLiAgSGF2ZSB0byByZWFkIHRoZSB3aG9sZSB0b2Mgb25jZSB0byBrbm93IGhvdyBtYW55IGNoYXB0ZXJzCisgICUgdGhlcmUgYXJlIGJlZm9yZSBkZWNpZGluZyAuLi4KKyAgXGhib3ggdG8gMWVteyMxXGhzc30lCit9CisKKyUgVGhlc2UgbWFjcm9zIGdlbmVyYXRlIGluZGl2aWR1YWwgZW50cmllcyBpbiB0aGUgdGFibGUgb2YgY29udGVudHMuCislIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2hhcHRlciBvciBzZWN0aW9uIG5hbWUuCislIFRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBwYWdlIG51bWJlci4KKyUgVGhlIGFyZ3VtZW50cyBpbiBiZXR3ZWVuIGFyZSB0aGUgY2hhcHRlciBudW1iZXIsIHNlY3Rpb24gbnVtYmVyLCAuLi4KKworJSBDaGFwdGVycywgaW4gdGhlIG1haW4gY29udGVudHMuCitcZGVmXG51bWNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KKyUKKyUgQ2hhcHRlcnMsIGluIHRoZSBzaG9ydCB0b2MuCislIFNlZSBjb21tZW50cyBpbiBcZG9jaGFwZW50cnkgcmUgdmJveCBhbmQgcmVsYXRlZCBzZXR0aW5ncy4KK1xkZWZcc2hvcnRjaGFwZW50cnkjMSMyIzMjNHslCisgIFx0b2NlbnRyeXtcc2hvcnRjaGFwbGFiZWx7IzJ9XGxhYmVsc3BhY2UgIzF9e1xkb3Nob3J0cGFnZW5vXGJncm91cCM0XGVncm91cH0lCit9CisKKyUgQXBwZW5kaWNlcywgaW4gdGhlIG1haW4gY29udGVudHMuCislIE5lZWQgdGhlIHdvcmQgQXBwZW5kaXgsIGFuZCBhIGZpeGVkLXNpemUgYm94LgorJSAKK1xkZWZcYXBwZW5kaXhib3gjMXslCisgICUgV2UgdXNlIE0gc2luY2UgaXQncyBwcm9iYWJseSB0aGUgd2lkZXN0IGxldHRlci4KKyAgXHNldGJveDAgPSBcaGJveHtccHV0d29yZEFwcGVuZGl4e30gTX0lCisgIFxoYm94IHRvIFx3ZDB7XHB1dHdvcmRBcHBlbmRpeHt9ICMxXGhzc319CislCitcZGVmXGFwcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5e1xhcHBlbmRpeGJveHsjMn1cbGFiZWxzcGFjZSMxfXsjNH19CisKKyUgVW5udW1iZXJlZCBjaGFwdGVycy4KK1xkZWZcdW5uY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMxfXsjNH19CitcZGVmXHNob3J0dW5uY2hhcGVudHJ5IzEjMiMzIzR7XHRvY2VudHJ5eyMxfXtcZG9zaG9ydHBhZ2Vub1xiZ3JvdXAjNFxlZ3JvdXB9fQorCislIFNlY3Rpb25zLgorXGRlZlxudW1zZWNlbnRyeSMxIzIjMyM0e1xkb3NlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzZWNlbnRyeT1cbnVtc2VjZW50cnkKK1xkZWZcdW5uc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMX17IzR9fQorCislIFN1YnNlY3Rpb25zLgorXGRlZlxudW1zdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnNlY2VudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorXGxldFxhcHBzdWJzZWNlbnRyeT1cbnVtc3Vic2VjZW50cnkKK1xkZWZcdW5uc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMX17IzR9fQorCislIEFuZCBzdWJzdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic3Vic2VjZW50cnk9XG51bXN1YnN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIHZhcmlvdXMgbGV2ZWxzLgorXG5ld2RpbWVuXHRvY2luZGVudCBcdG9jaW5kZW50ID0gMnBjCisKKyUgTm93IGZvciB0aGUgYWN0dWFsIHR5cGVzZXR0aW5nLiBJbiBhbGwgdGhlc2UsICMxIGlzIHRoZSB0ZXh0IGFuZCAjMiBpcyB0aGUKKyUgcGFnZSBudW1iZXIuCislCislIElmIHRoZSB0b2MgaGFzIHRvIGJlIGJyb2tlbiBvdmVyIHBhZ2VzLCB3ZSB3YW50IGl0IHRvIGJlIGF0IGNoYXB0ZXJzCislIGlmIGF0IGFsbCBwb3NzaWJsZTsgaGVuY2UgdGhlIFxwZW5hbHR5LgorXGRlZlxkb2NoYXBlbnRyeSMxIzJ7JQorICAgXHBlbmFsdHktMzAwIFx2c2tpcDFcYmFzZWxpbmVza2lwIHBsdXMuMzNcYmFzZWxpbmVza2lwIG1pbnVzLjI1XGJhc2VsaW5lc2tpcAorICAgXGJlZ2luZ3JvdXAKKyAgICAgXGNoYXBlbnRyeWZvbnRzCisgICAgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCisgICBcZW5kZ3JvdXAKKyAgIFxub2JyZWFrXHZza2lwIC4yNVxiYXNlbGluZXNraXAgcGx1cy4xXGJhc2VsaW5lc2tpcAorfQorCitcZGVmXGRvc2VjZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFxzZWNlbnRyeWZvbnRzIFxsZWZ0c2tpcD1cdG9jaW5kZW50CisgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCitcZW5kZ3JvdXB9CisKK1xkZWZcZG9zdWJzZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHN1YnNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPTJcdG9jaW5kZW50CisgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCitcZW5kZ3JvdXB9CisKK1xkZWZcZG9zdWJzdWJzZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHN1YnN1YnNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPTNcdG9jaW5kZW50CisgIFx0b2NlbnRyeXsjMX17XGRvcGFnZW5vXGJncm91cCMyXGVncm91cH0lCitcZW5kZ3JvdXB9CisKKyUgRmluYWwgdHlwZXNldHRpbmcgb2YgYSB0b2MgZW50cnk7IHdlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gYXMgZm9yCislIHRoZSBpbmRleCBlbnRyaWVzLCBidXQgd2Ugd2FudCB0byBzdXBwcmVzcyBoeXBoZW5hdGlvbiBoZXJlLiAgKFdlCislIGNhbid0IGRvIHRoYXQgaW4gdGhlIFxlbnRyeSBtYWNybywgc2luY2UgaW5kZXggZW50cmllcyBtaWdodCBjb25zaXN0CislIG9mIGh5cGhlbmF0ZWQtaWRlbnRpZmllcnMtdGhhdC1kby1ub3QtZml0LW9uLWEtbGluZS1hbmQtbm90aGluZy1lbHNlLikKK1xkZWZcdG9jZW50cnkjMSMye1xiZWdpbmdyb3VwCisgIFx2c2tpcCAwcHQgcGx1czFwdCAlIGFsbG93IGEgbGl0dGxlIHN0cmV0Y2ggZm9yIHRoZSBzYWtlIG9mIG5pY2UgcGFnZSBicmVha3MKKyAgJSBEbyBub3QgdXNlIFx0dXJub2ZmYWN0aXZlIGluIHRoZXNlIGFyZ3VtZW50cy4gIFNpbmNlIHRoZSB0b2MgaXMKKyAgJSB0eXBlc2V0IGluIGNtciwgY2hhcmFjdGVycyBzdWNoIGFzIF8gd291bGQgY29tZSBvdXQgd3Jvbmc7IHdlCisgICUgaGF2ZSB0byBkbyB0aGUgdXN1YWwgdHJhbnNsYXRpb24gdHJpY2tzLgorICBcZW50cnl7IzF9eyMyfSUKK1xlbmRncm91cH0KKworJSBTcGFjZSBiZXR3ZWVuIGNoYXB0ZXIgKG9yIHdoYXRldmVyKSBudW1iZXIgYW5kIHRoZSB0aXRsZS4KK1xkZWZcbGFiZWxzcGFjZXtcaHNraXAxZW0gXHJlbGF4fQorCitcZGVmXGRvcGFnZW5vIzF7e1xybSAjMX19CitcZGVmXGRvc2hvcnRwYWdlbm8jMXt7XHJtICMxfX0KKworXGRlZlxjaGFwZW50cnlmb250c3tcc2VjZm9udHMgXHJtfQorXGRlZlxzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CitcZGVmXHN1YnNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorCisKK1xtZXNzYWdle2Vudmlyb25tZW50cyx9CislIEBmb28gLi4uIEBlbmQgZm9vLgorCislIEBwb2ludHt9LCBAcmVzdWx0e30sIEBleHBhbnNpb257fSwgQHByaW50e30sIEBlcXVpdnt9LgorJQorJSBTaW5jZSB0aGVzZSBjaGFyYWN0ZXJzIGFyZSB1c2VkIGluIGV4YW1wbGVzLCBpdCBzaG91bGQgYmUgYW4gZXZlbiBudW1iZXIgb2YKKyUgXHR0IHdpZHRocy4gRWFjaCBcdHQgY2hhcmFjdGVyIGlzIDFlbiwgc28gdHdvIG1ha2VzIGl0IDFlbS4KKyUKK1xkZWZccG9pbnR7JFxzdGFyJH0KK1xkZWZccmVzdWx0e1xsZWF2ZXZtb2RlXHJhaXNlLjE1ZXhcaGJveCB0byAxZW17XGhmaWwkXFJpZ2h0YXJyb3ckXGhmaWx9fQorXGRlZlxleHBhbnNpb257XGxlYXZldm1vZGVccmFpc2UuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxtYXBzdG8kXGhmaWx9fQorXGRlZlxwcmludHtcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXGRhc2h2JFxoZmlsfX0KK1xkZWZcZXF1aXZ7XGxlYXZldm1vZGVcbG93ZXIuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxwdGV4ZXF1aXYkXGhmaWx9fQorCislIFRoZSBAZXJyb3J7fSBjb21tYW5kLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2sncyBcYm94aXQuCislCitcbmV3Ym94XGVycm9yYm94CislCit7XHRlbnR0IFxnbG9iYWxcZGltZW4wID0gM2VtfSUgV2lkdGggb2YgdGhlIGJveC4KK1xkaW1lbjIgPSAuNTVwdCAlIFRoaWNrbmVzcyBvZiBydWxlcworJSBUaGUgdGV4dC4gKGByJyBpcyBvcGVuIG9uIHRoZSByaWdodCwgYGUnIHNvbWV3aGF0IGxlc3Mgc28gb24gdGhlIGxlZnQuKQorXHNldGJveDAgPSBcaGJveHtca2Vybi0uNzVwdCBcdGVuc2YgZXJyb3Jca2Vybi0xLjVwdH0KKyUKK1xnbG9iYWxcc2V0Ym94XGVycm9yYm94PVxoYm94IHRvIFxkaW1lbjB7XGhmaWwKKyAgIFxoc2l6ZSA9IFxkaW1lbjAgXGFkdmFuY2VcaHNpemUgYnkgLTUuOHB0ICUgU3BhY2UgdG8gbGVmdCtyaWdodC4KKyAgIFxhZHZhbmNlXGhzaXplIGJ5IC0yXGRpbWVuMiAlIFJ1bGVzLgorICAgXHZib3h7CisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgorICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KKyAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgorICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KKyAgICBcaGZpbH0KKyUKK1xkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9CisKKyUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIE9uZSBleGNlcHRpb246IEAgaXMgc3RpbGwgYW4gZXNjYXBlIGNoYXJhY3Rlciwgc28gdGhhdCBAZW5kIHRleCB3b3Jrcy4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gdGV4IEAgY2hhcmFjdGVyLgorCitcZGVmXHRleHtcYmVnaW5ncm91cAorICBcY2F0Y29kZSBgXFw9MCBcY2F0Y29kZSBgXHs9MSBcY2F0Y29kZSBgXH09MgorICBcY2F0Y29kZSBgXCQ9MyBcY2F0Y29kZSBgXCY9NCBcY2F0Y29kZSBgXCM9NgorICBcY2F0Y29kZSBgXF49NyBcY2F0Y29kZSBgXF89OCBcY2F0Y29kZSBgXH49XGFjdGl2ZSBcbGV0fj1cdGllCisgIFxjYXRjb2RlIGBcJT0xNAorICBcY2F0Y29kZSBgXCs9XG90aGVyCisgIFxjYXRjb2RlIGBcIj1cb3RoZXIKKyAgXGNhdGNvZGUgYFw9PVxvdGhlcgorICBcY2F0Y29kZSBgXHw9XG90aGVyCisgIFxjYXRjb2RlIGBcPD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw+PVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCitcbGV0XEV0ZXg9XGVuZGdyb3VwfQorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBkb2VzIGEgXGJlZ2luZ3JvdXAgc28gaXQgY2FuIHJlYmluZCB0aGluZ3MsCislIGluY2x1ZGluZyB0aGUgZGVmaW5pdGlvbiBvZiBAZW5kIGxpc3AgKHdoaWNoIG5vcm1hbGx5IGlzIGVycm9uZW91cykuCisKKyUgQW1vdW50IHRvIG5hcnJvdyB0aGUgbWFyZ2lucyBieSBmb3IgQGxpc3AuCitcbmV3c2tpcFxsaXNwbmFycm93aW5nIFxsaXNwbmFycm93aW5nPTAuNGluCisKKyUgVGhpcyBpcyB0aGUgZGVmaW5pdGlvbiB0aGF0IF5eTSBnZXRzIGluc2lkZSBAbGlzcCwgQGV4YW1wbGUsIGFuZCBvdGhlcgorJSBzdWNoIGVudmlyb25tZW50cy4gIFxudWxsIGlzIGJldHRlciB0aGFuIGEgc3BhY2UsIHNpbmNlIGl0IGRvZXNuJ3QKKyUgaGF2ZSBhbnkgd2lkdGguCitcZGVmXGxpc3BwYXJ7XG51bGxcZW5kZ3JhZn0KKworJSBNYWtlIGVhY2ggc3BhY2UgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBwcm9kdWNlIGEgbm9ybWFsIGludGVyd29yZAorJSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgRG9uJ3QgYWxsb3cgYSBsaW5lIGJyZWFrIGF0IHRoaXMgc3BhY2UsIGFzIHRoaXMKKyUgaXMgdXNlZCBvbmx5IGluIGVudmlyb25tZW50cyBsaWtlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGxpbmUgb2YgaW5wdXQKKyUgc2hvdWxkIHByb2R1Y2UgYSBsaW5lIG9mIG91dHB1dCBhbnl3YXkuCislCit7XG9iZXlzcGFjZXMgJQorXGdkZWZcc2Vwc3BhY2Vze1xvYmV5c3BhY2VzXGxldCA9XHRpZX19CisKKyUgRGVmaW5lIFxvYmV5ZWRzcGFjZSB0byBiZSBvdXIgYWN0aXZlIHNwYWNlLCB3aGF0ZXZlciBpdCBpcy4gIFRoaXMgaXMKKyUgZm9yIHVzZSBpbiBccGFyc2VhcmcuCit7XHNlcHNwYWNlcyUKK1xnbG9iYWxcbGV0XG9iZXllZHNwYWNlPSB9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiwgcS52LgorICBcaWZudW0gXGxhc3RwZW5hbHR5PTEwMDAwIFxlbHNlCisgICAgXGFkdmFuY2VcZW52c2tpcGFtb3VudCBieSBccGFyc2tpcAorICAgIFxlbmRncmFmCisgICAgXGlmZGltXGxhc3Rza2lwPFxlbnZza2lwYW1vdW50CisgICAgICBccmVtb3ZlbGFzdHNraXAKKyAgICAgICUgaXQncyBub3QgYSBnb29kIHBsYWNlIHRvIGJyZWFrIGlmIHRoZSBsYXN0IHBlbmFsdHkgd2FzIFxub2JyZWFrCisgICAgICAlIG9yIGJldHRlciAuLi4KKyAgICAgIFxpZm51bVxsYXN0cGVuYWx0eT4xMDAwMCBcZWxzZSBccGVuYWx0eS01MCBcZmkKKyAgICAgIFx2c2tpcFxlbnZza2lwYW1vdW50CisgICAgXGZpCisgIFxmaQorfX0KKworXGxldFxhZnRlcmVudmJyZWFrID0gXGFib3ZlZW52YnJlYWsKKworJSBcbm9uYXJyb3dpbmcgaXMgYSBmbGFnLiAgSWYgInNldCIsIEBsaXNwIGV0YyBkb24ndCBuYXJyb3cgbWFyZ2lucy4KK1xsZXRcbm9uYXJyb3dpbmc9XHJlbGF4CisKKyUgQGNhcnRvdWNoZSAuLi4gQGVuZCBjYXJ0b3VjaGU6IGRyYXcgcmVjdGFuZ2xlIHcvcm91bmRlZCBjb3JuZXJzIGFyb3VuZAorJSBlbnZpcm9ubWVudCBjb250ZW50cy4KK1xmb250XGNpcmNsZT1sY2lyY2xlMTAKK1xuZXdkaW1lblxjaXJjdGhpY2sKK1xuZXdkaW1lblxjYXJ0b3V0ZXJcbmV3ZGltZW5cY2FydGlubmVyCitcbmV3c2tpcFxub3JtYnNraXBcbmV3c2tpcFxub3JtcHNraXBcbmV3c2tpcFxub3JtbHNraXAKK1xjaXJjdGhpY2s9XGZvbnRkaW1lbjhcY2lyY2xlCislCitcZGVmXGN0bHt7XGNpcmNsZVxjaGFyJzAxM1xoc2tpcCAtNnB0fX0lIDZwdCBmcm9tIHBsIGZpbGU6IDEvMmNoYXJ3aWR0aAorXGRlZlxjdHJ7e1xoc2tpcCA2cHRcY2lyY2xlXGNoYXInMDEwfX0KK1xkZWZcY2Jse3tcY2lyY2xlXGNoYXInMDEyXGhza2lwIC02cHR9fQorXGRlZlxjYnJ7e1xoc2tpcCA2cHRcY2lyY2xlXGNoYXInMDExfX0KK1xkZWZcY2FydHRvcHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY3RsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGN0cgorICAgICAgICBcaHNraXBccnNraXB9fQorXGRlZlxjYXJ0Ym90e1xoYm94IHRvIFxjYXJ0b3V0ZXJ7XGhza2lwXGxza2lwCisgICAgICAgIFxjYmxcbGVhZGVyc1xocnVsZSBoZWlnaHRcY2lyY3RoaWNrXGhmaWxcY2JyCisgICAgICAgIFxoc2tpcFxyc2tpcH19CislCitcbmV3c2tpcFxsc2tpcFxuZXdza2lwXHJza2lwCisKK1xkZWZcY2FydG91Y2hleyUKK1xwYXIgICUgY2FuJ3QgYmUgaW4gdGhlIG1pZHN0IG9mIGEgcGFyYWdyYXBoLgorXGJlZ2luZ3JvdXAKKyAgICAgICAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICAgICAgICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJXdlIHdhbnQgdGhlc2UgKm91dHNpZGUqLgorICAgICAgICBcY2FydGlubmVyPVxoc2l6ZSBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXGxza2lwCisgICAgICAgICAgICAgICAgICAgICAgICAgIFxhZHZhbmNlXGNhcnRpbm5lciBieS1ccnNraXAKKyAgICAgICAgXGNhcnRvdXRlcj1caHNpemUKKyAgICAgICAgXGFkdmFuY2VcY2FydG91dGVyIGJ5IDE4LjRwdCAlIGFsbG93IGZvciAzcHQga2VybnMgb24gZWl0aGVyCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggY29ybmVyIGNoYXIsIGFuZCBydWxlIHRoaWNrbmVzcworICAgICAgICBcbm9ybWJza2lwPVxiYXNlbGluZXNraXAgXG5vcm1wc2tpcD1ccGFyc2tpcCBcbm9ybWxza2lwPVxsaW5lc2tpcAorICAgICAgICAlIEZsYWcgdG8gdGVsbCBAbGlzcCwgZXRjLiwgbm90IHRvIG5hcnJvdyBtYXJnaW4uCisgICAgICAgIFxsZXRcbm9uYXJyb3dpbmc9XGNvbW1lbnQKKyAgICAgICAgXHZib3hcYmdyb3VwCisgICAgICAgICAgICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICAgICAgICAgICAgXGNhcnR0b3AKKyAgICAgICAgICAgICAgICBcaGJveFxiZ3JvdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIFxoc2tpcFxsc2tpcAorICAgICAgICAgICAgICAgICAgICAgICAgXHZydWxlXGtlcm4zcHQKKyAgICAgICAgICAgICAgICAgICAgICAgIFx2Ym94XGJncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcaHNpemU9XGNhcnRpbm5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBca2VybjNwdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcYmVnaW5ncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxiYXNlbGluZXNraXA9XG5vcm1ic2tpcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxsaW5lc2tpcD1cbm9ybWxza2lwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHBhcnNraXA9XG5vcm1wc2tpcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx2c2tpcCAtXHBhcnNraXAKK1xkZWZcRWNhcnRvdWNoZXslCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxlbmRncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBca2VybjNwdAorICAgICAgICAgICAgICAgICAgICAgICAgXGVncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgXGtlcm4zcHRcdnJ1bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIFxoc2tpcFxyc2tpcAorICAgICAgICAgICAgICAgIFxlZ3JvdXAKKyAgICAgICAgICAgICAgICBcY2FydGJvdAorICAgICAgICBcZWdyb3VwCitcZW5kZ3JvdXAKK319CisKKworJSBUaGlzIG1hY3JvIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCB0aGUgQGV4YW1wbGUgdmFyaWFudHMsCislIGluc2lkZSBhIGdyb3VwLgorXGRlZlxub25maWxsc3RhcnR7JQorICBcYWJvdmVlbnZicmVhaworICBcaW5FTlYgJSBUaGlzIGdyb3VwIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgYm9keQorICBcaGZ1enogPSAxMnB0ICUgRG9uJ3QgYmUgZnVzc3kKKyAgXHNlcHNwYWNlcyAlIE1ha2Ugc3BhY2VzIGJlIHdvcmQtc2VwYXJhdG9ycyByYXRoZXIgdGhhbiBzcGFjZSB0b2tlbnMuCisgIFxsZXRccGFyID0gXGxpc3BwYXIgJSBkb24ndCBpZ25vcmUgYmxhbmsgbGluZXMKKyAgXG9iZXlsaW5lcyAlIGVhY2ggbGluZSBvZiBpbnB1dCBpcyBhIGxpbmUgb2Ygb3V0cHV0CisgIFxwYXJza2lwID0gMHB0CisgIFxwYXJpbmRlbnQgPSAwcHQKKyAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAwcHQgJSBkb24ndCB0cnkgdG8gYXZvaWQgb3ZlcmZ1bGwgYm94ZXMKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nCisgICUgYXQgbmV4dCBsZXZlbCBkb3duLgorICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4CisgICAgXGFkdmFuY2UgXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudD1cbGlzcG5hcnJvd2luZworICAgIFxsZXRcZXhkZW50PVxub2ZpbGxleGRlbnQKKyAgICBcbGV0XG5vbmFycm93aW5nPVxyZWxheAorICBcZmkKK30KKworJSBEZWZpbmUgdGhlIFxFLi4uIGNvbnRyb2wgc2VxdWVuY2Ugb25seSBpZiB3ZSBhcmUgaW5zaWRlIHRoZSBwYXJ0aWN1bGFyCislIGVudmlyb25tZW50LCBzbyB0aGUgZXJyb3IgY2hlY2tpbmcgaW4gXGVuZCB3aWxsIHdvcmsuCislCislIFRvIGVuZCBhbiBAZXhhbXBsZS1saWtlIGVudmlyb25tZW50LCB3ZSBmaXJzdCBlbmQgdGhlIHBhcmFncmFwaCAodmlhCislIFxhZnRlcmVudmJyZWFrJ3MgdmVydGljYWwgZ2x1ZSksIGFuZCB0aGVuIHRoZSBncm91cC4gIFRoYXQgd2F5IHdlIGtlZXAKKyUgdGhlIHplcm8gXHBhcnNraXAgdGhhdCB0aGUgZW52aXJvbm1lbnRzIHNldCAtLSBccGFyc2tpcCBnbHVlIHdpbGwgYmUKKyUgaW5zZXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggaW4gdGhlIGRvY3VtZW50LCBhZnRlcgorJSB0aGUgZW52aXJvbm1lbnQuCislCitcZGVmXG5vbmZpbGxmaW5pc2h7XGFmdGVyZW52YnJlYWtcZW5kZ3JvdXB9CisKKyUgQGxpc3A6IGluZGVudGVkLCBuYXJyb3dlZCwgdHlwZXdyaXRlciBmb250LgorXGRlZlxsaXNwe1xiZWdpbmdyb3VwCisgIFxub25maWxsc3RhcnQKKyAgXGxldFxFbGlzcCA9IFxub25maWxsZmluaXNoCisgIFx0dAorICBcbGV0XGtiZGZvbnQgPSBca2JkZXhhbXBsZWZvbnQgJSBBbGxvdyBAa2JkIHRvIGRvIHNvbWV0aGluZyBzcGVjaWFsLgorICBcZ29iYmxlICAgICAgICUgZWF0IHJldHVybgorfQorCislIEBleGFtcGxlOiBTYW1lIGFzIEBsaXNwLgorXGRlZlxleGFtcGxle1xiZWdpbmdyb3VwIFxkZWZcRWV4YW1wbGV7XG5vbmZpbGxmaW5pc2hcZW5kZ3JvdXB9XGxpc3B9CisKKyUgQHNtYWxsZXhhbXBsZSBhbmQgQHNtYWxsbGlzcDogdXNlIHNtYWxsZXIgZm9udHMuCislIE9yaWdpbmFsbHkgY29udHJpYnV0ZWQgYnkgUGF2ZWxAeGVyb3guCitcZGVmXHNtYWxsbGlzcHtcYmVnaW5ncm91cAorICBcZGVmXEVzbWFsbGxpc3B7XG5vbmZpbGxmaW5pc2hcZW5kZ3JvdXB9JQorICBcZGVmXEVzbWFsbGV4YW1wbGV7XG5vbmZpbGxmaW5pc2hcZW5kZ3JvdXB9JQorICBcc21hbGxleGFtcGxlZm9udHMKKyAgXGxpc3AKK30KK1xsZXRcc21hbGxleGFtcGxlID0gXHNtYWxsbGlzcAorCisKKyUgQGRpc3BsYXk6IHNhbWUgYXMgQGxpc3AgZXhjZXB0IGtlZXAgY3VycmVudCBmb250LgorJQorXGRlZlxkaXNwbGF5e1xiZWdpbmdyb3VwCisgIFxub25maWxsc3RhcnQKKyAgXGxldFxFZGlzcGxheSA9IFxub25maWxsZmluaXNoCisgIFxnb2JibGUKK30KKyUKKyUgQHNtYWxsZGlzcGxheTogQGRpc3BsYXkgcGx1cyBzbWFsbGVyIGZvbnRzLgorJQorXGRlZlxzbWFsbGRpc3BsYXl7XGJlZ2luZ3JvdXAKKyAgXGRlZlxFc21hbGxkaXNwbGF5e1xub25maWxsZmluaXNoXGVuZGdyb3VwfSUKKyAgXHNtYWxsZXhhbXBsZWZvbnRzIFxybQorICBcZGlzcGxheQorfQorCislIEBmb3JtYXQ6IHNhbWUgYXMgQGRpc3BsYXkgZXhjZXB0IGRvbid0IG5hcnJvdyBtYXJnaW5zLgorJQorXGRlZlxmb3JtYXR7XGJlZ2luZ3JvdXAKKyAgXGxldFxub25hcnJvd2luZyA9IHQKKyAgXG5vbmZpbGxzdGFydAorICBcbGV0XEVmb3JtYXQgPSBcbm9uZmlsbGZpbmlzaAorICBcZ29iYmxlCit9CislCislIEBzbWFsbGZvcm1hdDogQGZvcm1hdCBwbHVzIHNtYWxsZXIgZm9udHMuCislCitcZGVmXHNtYWxsZm9ybWF0e1xiZWdpbmdyb3VwCisgIFxkZWZcRXNtYWxsZm9ybWF0e1xub25maWxsZmluaXNoXGVuZGdyb3VwfSUKKyAgXHNtYWxsZXhhbXBsZWZvbnRzIFxybQorICBcZm9ybWF0Cit9CisKKyUgQGZsdXNobGVmdCAoc2FtZSBhcyBAZm9ybWF0KS4KKyUKK1xkZWZcZmx1c2hsZWZ0e1xiZWdpbmdyb3VwIFxkZWZcRWZsdXNobGVmdHtcbm9uZmlsbGZpbmlzaFxlbmRncm91cH1cZm9ybWF0fQorCislIEBmbHVzaHJpZ2h0LgorJQorXGRlZlxmbHVzaHJpZ2h0e1xiZWdpbmdyb3VwCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0CisgIFxub25maWxsc3RhcnQKKyAgXGxldFxFZmx1c2hyaWdodCA9IFxub25maWxsZmluaXNoCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IDBwdCBwbHVzIDFmaWxsCisgIFxnb2JibGUKK30KKworCislIEBxdW90YXRpb24gZG9lcyBub3JtYWwgbGluZWJyZWFraW5nIChoZW5jZSB3ZSBjYW4ndCB1c2UgXG5vbmZpbGxzdGFydCkKKyUgYW5kIG5hcnJvd3MgdGhlIG1hcmdpbnMuCislCitcZGVmXHF1b3RhdGlvbnslCisgIFxiZWdpbmdyb3VwXGluRU5WICVUaGlzIGdyb3VwIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgQHF1b3RhdGlvbiBib2R5CisgIHtccGFyc2tpcD0wcHQgXGFib3ZlZW52YnJlYWt9JSBiZWNhdXNlIFxhYm92ZWVudmJyZWFrIGluc2VydHMgXHBhcnNraXAKKyAgXHBhcmluZGVudD0wcHQKKyAgJSBXZSBoYXZlIHJldGFpbmVkIGEgbm9uemVybyBwYXJza2lwIGZvciB0aGUgZW52aXJvbm1lbnQsIHNpbmNlIHdlJ3JlCisgICUgZG9pbmcgbm9ybWFsIGZpbGxpbmcuIFNvIHRvIGF2b2lkIGV4dHJhIHNwYWNlIGJlbG93IHRoZSBlbnZpcm9ubWVudC4uLgorICBcZGVmXEVxdW90YXRpb257XHBhcnNraXAgPSAwcHQgXG5vbmZpbGxmaW5pc2h9JQorICAlCisgICUgQGNhcnRvdWNoZSBkZWZpbmVzIFxub25hcnJvd2luZyB0byBpbmhpYml0IG5hcnJvd2luZyBhdCBuZXh0IGxldmVsIGRvd24uCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxhZHZhbmNlXHJpZ2h0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxleGRlbnRhbW91bnQgPSBcbGlzcG5hcnJvd2luZworICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKKyAgXGZpCit9CisKKworJSBMYVRlWC1saWtlIEB2ZXJiYXRpbS4uLkBlbmQgdmVyYmF0aW0gYW5kIEB2ZXJiezxjaGFyPi4uLjxjaGFyPn0KKyUgSWYgd2Ugd2FudCB0byBhbGxvdyBhbnkgPGNoYXI+IGFzIGRlbGltaXRlciwKKyUgd2UgbmVlZCB0aGUgY3VybHkgYnJhY2VzIHNvIHRoYXQgbWFrZWluZm8gc2VlcyB0aGUgQHZlcmIgY29tbWFuZCwgZWc6CislIGBAdmVyYnguLi54JyB3b3VsZCBsb29rIGxpa2UgdGhlICdAdmVyYngnIGNvbW1hbmQuICAtLWphbm5la2VAZ251Lm9yZworJQorJSBbS251dGhdOiBEb25hbGQgRXJ2aW4gS251dGgsIDE5OTYuICBUaGUgVGVYYm9vay4KKyUKKyUgW0tudXRoXSBwLjM0NDsgb25seSB3ZSBuZWVkIHRvIGRvIHRoZSBvdGhlciBjaGFyYWN0ZXJzIFRleGluZm8gc2V0cworJSBhY3RpdmUgdG9vLiAgT3RoZXJ3aXNlLCB0aGV5IGdldCBsb3N0IGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gYQorJSB2ZXJiYXRpbSBsaW5lLgorXGRlZlxkb3NwZWNpYWxzeyUKKyAgXGRvXCBcZG9cXFxkb1x7XGRvXH1cZG9cJFxkb1wmJQorICBcZG9cI1xkb1xeXGRvXF5eS1xkb1xfXGRvXF5eQVxkb1wlXGRvXH4lCisgIFxkb1w8XGRvXD5cZG9cfFxkb1xAXGRvK1xkb1wiJQorfQorJQorJSBbS251dGhdIHAuIDM4MAorXGRlZlx1bmNhdGNvZGVzcGVjaWFsc3slCisgIFxkZWZcZG8jIzF7XGNhdGNvZGVgIyMxPTEyfVxkb3NwZWNpYWxzfQorJQorJSBbS251dGhdIHBwLiAzODAsMzgxLDM5MQorJSBEaXNhYmxlIFNwYW5pc2ggbGlnYXR1cmVzID9gIGFuZCAhYCBvZiBcdHQgZm9udAorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXGA9XGFjdGl2ZVxnZGVmYHtccmVsYXhcbHF9CitcZW5kZ3JvdXAKKyUKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYiBjb21tYW5kLgorJQorJSBFaWdodCBzcGFjZXMgZm9yIGEgdGFiCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgXGdkZWZcdGFiZWlnaHRzcGFjZXN7XGNhdGNvZGVgXF5eST1cYWN0aXZlXGRlZl5eSXtcIFwgXCBcIFwgXCBcIFwgfX0KK1xlbmRncm91cAorJQorXGRlZlxzZXR1cHZlcmJ7JQorICBcdHQgICUgZWFzaWVzdCAoYW5kIGNvbnZlbnRpb25hbGx5IHVzZWQpIGZvbnQgZm9yIHZlcmJhdGltCisgIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVuZGdyYWZ9JQorICBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFx0YWJlaWdodHNwYWNlcworICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworfQorCislIFNldHVwIGZvciB0aGUgQHZlcmJhdGltIGVudmlyb25tZW50CislCislIFJlYWwgdGFiIGV4cGFuc2lvbgorXG5ld2RpbWVuXHRhYncgXHNldGJveDA9XGhib3h7XHR0XHNwYWNlfSBcdGFidz04XHdkMCAlIHRhYiBhbW91bnQKKyUKK1xkZWZcc3RhcnR0YWJib3h7XHNldGJveDA9XGhib3hcYmdyb3VwfQorXGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgIFxnZGVmXHRhYmV4cGFuZHslCisgICAgXGNhdGNvZGVgXF5eST1cYWN0aXZlCisgICAgXGRlZl5eSXtcbGVhdmV2bW9kZVxlZ3JvdXAKKyAgICAgIFxkaW1lbjA9XHdkMCAlIHRoZSB3aWR0aCBzbyBmYXIsIG9yIHNpbmNlIHRoZSBwcmV2aW91cyB0YWIKKyAgICAgIFxkaXZpZGVcZGltZW4wIGJ5XHRhYncKKyAgICAgIFxtdWx0aXBseVxkaW1lbjAgYnlcdGFidyAlIGNvbXB1dGUgcHJldmlvdXMgbXVsdGlwbGUgb2YgXHRhYncKKyAgICAgIFxhZHZhbmNlXGRpbWVuMCBieVx0YWJ3ICAlIGFkdmFuY2UgdG8gbmV4dCBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXHdkMD1cZGltZW4wIFxib3gwIFxzdGFydHRhYmJveAorICAgIH0lCisgIH0KK1xlbmRncm91cAorXGRlZlxzZXR1cHZlcmJhdGlteyUKKyAgJSBFYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KKyAgXHR0CisgIFxkZWZccGFye1xsZWF2ZXZtb2RlXGVncm91cFxib3gwXGVuZGdyYWZ9JQorICBcY2F0Y29kZWBcYD1cYWN0aXZlCisgIFx0YWJleHBhbmQKKyAgJSBSZXNwZWN0IGxpbmUgYnJlYWtzLAorICAlIHByaW50IHNwZWNpYWwgc3ltYm9scyBhcyB0aGVtc2VsdmVzLCBhbmQKKyAgJSBtYWtlIGVhY2ggc3BhY2UgY291bnQKKyAgJSBtdXN0IGRvIGluIHRoaXMgb3JkZXI6CisgIFxvYmV5bGluZXMgXHVuY2F0Y29kZXNwZWNpYWxzIFxzZXBzcGFjZXMKKyAgXGV2ZXJ5cGFye1xzdGFydHRhYmJveH0lCit9CisKKyUgRG8gdGhlIEB2ZXJiIG1hZ2ljOiB2ZXJiYXRpbSB0ZXh0IGlzIHF1b3RlZCBieSB1bmlxdWUKKyUgZGVsaW1pdGVyIGNoYXJhY3RlcnMuICBCZWZvcmUgZmlyc3QgZGVsaW1pdGVyIGV4cGVjdCBhCislIHJpZ2h0IGJyYWNlLCBhZnRlciBsYXN0IGRlbGltaXRlciBleHBlY3QgY2xvc2luZyBicmFjZToKKyUKKyUgICAgXGRlZlxkb3ZlcmIneyc8Y2hhcj4jMTxjaGFyPid9J3sjMX0KKyUKKyUgW0tudXRoXSBwLiAzODI7IG9ubHkgZWF0IG91dGVyIHt9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBbPTFcY2F0Y29kZWBdPTJcY2F0Y29kZWBcez0xMlxjYXRjb2RlYFx9PTEyCisgIFxnZGVmXGRvdmVyYnsjMVtcZGVmXG5leHQjIzEjMX1bIyMxXGVuZGdyb3VwXVxuZXh0XQorXGVuZGdyb3VwCislCitcZGVmXHZlcmJ7XGJlZ2luZ3JvdXBcc2V0dXB2ZXJiXGRvdmVyYn0KKyUKKyUKKyUgRG8gdGhlIEB2ZXJiYXRpbSBtYWdpYzogZGVmaW5lIHRoZSBtYWNybyBcZG92ZXJiYXRpbSBzbyB0aGF0CislIHRoZSAoZmlyc3QpIGFyZ3VtZW50IGVuZHMgd2hlbiAnQGVuZCB2ZXJiYXRpbScgaXMgcmVhY2hlZCwgaWU6CislCislICAgICBcZGVmXGRvdmVyYmF0aW0jMUBlbmQgdmVyYmF0aW17IzF9CislCislIEZvciBUZXhpbmZvIGl0J3MgYSBsb3QgZWFzaWVyIHRoYW4gZm9yIExhVGVYLAorJSBiZWNhdXNlIHRleGluZm8ncyBcdmVyYmF0aW0gZG9lc24ndCBzdG9wIGF0ICdcZW5ke3ZlcmJhdGltfSc6CislIHdlIG5lZWQgbm90IHJlZGVmaW5lICdcJywgJ3snIGFuZCAnfScuCislCislIEluc3BpcmVkIGJ5IExhVGVYJ3MgdmVyYmF0aW0gY29tbWFuZCBzZXQgW2xhdGV4Lmx0eF0KKyUlIEluY2x1ZGUgTGFUZVggaGFjayBmb3IgY29tcGxldGVuZXNzIC0tIG5ldmVyIGtub3cKKyUlIFxiZWdpbmdyb3VwCislJSBcY2F0Y29kZWB8PTAgXGNhdGNvZGVgWz0xCislJSBcY2F0Y29kZWBdPTJcY2F0Y29kZWBcez0xMlxjYXRjb2RlYFx9PTEyXGNhdGNvZGVgXCA9XGFjdGl2ZQorJSUgXGNhdGNvZGVgXFw9MTJ8Z2RlZnxkb3ZlcmJhdGltIzFAZW5kIHZlcmJhdGltWworJSUgIzF8ZW5kZ3JvdXB8ZGVmfEV2ZXJiYXRpbVtdfGVuZFt2ZXJiYXRpbV1dCislJSB8ZW5kZ3JvdXAKKyUKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFwgPVxhY3RpdmUKKyAgXG9iZXlsaW5lcyAlCisgICUgaWdub3JlIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGZpcnN0IF5eTSwgdGhhdCdzIHRoZSBuZXdsaW5lIGF0IHRoZSBlbmQKKyAgJSBvZiB0aGUgQHZlcmJhdGltIGlucHV0IGxpbmUgaXRzZWxmLiAgT3RoZXJ3aXNlIHdlIGdldCBhbiBleHRyYSBibGFuaworICAlIGxpbmUgaW4gdGhlIG91dHB1dC4KKyAgXGdkZWZcZG92ZXJiYXRpbSMxXl5NIzJAZW5kIHZlcmJhdGlteyMyXGVuZHt2ZXJiYXRpbX19JQorXGVuZGdyb3VwCislCitcZGVmXHZlcmJhdGlteyUKKyAgXGRlZlxFdmVyYmF0aW17XG5vbmZpbGxmaW5pc2hcZW5kZ3JvdXB9JQorICBcYmVnaW5ncm91cAorICAgIFxub25maWxsc3RhcnQKKyAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSAtXGRlZmJvZHlpbmRlbnQKKyAgICBcYmVnaW5ncm91cFxzZXR1cHZlcmJhdGltXGRvdmVyYmF0aW0KK30KKworJSBAdmVyYmF0aW1pbmNsdWRlIEZJTEUgLSBpbnNlcnQgdGV4dCBvZiBmaWxlIGluIHZlcmJhdGltIGVudmlyb25tZW50LgorJQorJSBBbGxvdyBub3JtYWwgY2hhcmFjdGVycyB0aGF0IHdlIG1ha2UgYWN0aXZlIGluIHRoZSBhcmd1bWVudCAoYSBmaWxlIG5hbWUpLgorXGRlZlx2ZXJiYXRpbWluY2x1ZGV7JQorICBcYmVnaW5ncm91cAorICAgIFxjYXRjb2RlYFxcPVxvdGhlcgorICAgIFxjYXRjb2RlYH49XG90aGVyCisgICAgXGNhdGNvZGVgXj1cb3RoZXIKKyAgICBcY2F0Y29kZWBfPVxvdGhlcgorICAgIFxjYXRjb2RlYHw9XG90aGVyCisgICAgXGNhdGNvZGVgPD1cb3RoZXIKKyAgICBcY2F0Y29kZWA+PVxvdGhlcgorICAgIFxjYXRjb2RlYCs9XG90aGVyCisgICAgXHBhcnNlYXJnXGRvdmVyYmF0aW1pbmNsdWRlCit9CitcZGVmXHNldHVwdmVyYmF0aW1pbmNsdWRleyUKKyAgXGJlZ2luZ3JvdXAKKyAgICBcbm9uZmlsbHN0YXJ0CisgICAgXGFkdmFuY2VcbGVmdHNraXAgYnkgLVxkZWZib2R5aW5kZW50CisgICAgXGJlZ2luZ3JvdXBcc2V0dXB2ZXJiYXRpbQorfQorJQorXGRlZlxkb3ZlcmJhdGltaW5jbHVkZSMxeyUKKyAgICAgJSBSZXN0b3JlIGFjdGl2ZSBjaGFycyBmb3IgaW5jbHVkZWQgZmlsZS4KKyAgXGVuZGdyb3VwCisgIFxiZWdpbmdyb3VwCisgICAgXGxldFx2YWx1ZT1cZXhwYW5kYWJsZXZhbHVlCisgICAgXGRlZlx0aGlzZmlsZXsjMX0lCisgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyXHNldHVwdmVyYmF0aW1pbmNsdWRlXGlucHV0XHRoaXNmaWxlCisgIFxlbmRncm91cAorICBcbm9uZmlsbGZpbmlzaAorICBcZW5kZ3JvdXAKK30KKworJSBAY29weWluZyAuLi4gQGVuZCBjb3B5aW5nLgorJSBTYXZlIHRoZSB0ZXh0IGF3YXkgZm9yIEBpbnNlcnRjb3B5aW5nIGxhdGVyLiAgTWFueSBjb21tYW5kcyB3b24ndCBiZQorJSBhbGxvd2VkIGluIHRoaXMgY29udGV4dCwgYnV0IHRoYXQncyBvay4KKyUKKyUgV2Ugc2F2ZSB0aGUgdW5pbnRlcnByZXRlZCB0b2tlbnMsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgYm94LgorJSBTYXZpbmcgdGhlIHRleHQgaW4gYSBib3ggd291bGQgYmUgbXVjaCBlYXNpZXIsIGJ1dCB0aGVuIGFsbCB0aGUKKyUgdHlwZXNldHRpbmcgY29tbWFuZHMgKEBzbWFsbGJvb2ssIGZvbnQgY2hhbmdlcywgZXRjLikgaGF2ZSB0byBiZSBkb25lCislIGJlZm9yZWhhbmQgLS0gYW5kIGEpIHdlIHdhbnQgQGNvcHlpbmcgdG8gYmUgZG9uZSBmaXJzdCBpbiB0aGUgc291cmNlCislIGZpbGU7IGIpIGxldHRpbmcgdXNlcnMgZGVmaW5lIHRoZSBmcm9udG1hdHRlciBpbiBhcyBmbGV4aWJsZSBvcmRlciBhcworJSBwb3NzaWJsZSBpcyB2ZXJ5IGRlc2lyYWJsZS4KKyUKK1xkZWZcY29weWluZ3tcYmVnaW5ncm91cAorICAlIERlZmluZSBhIGNvbW1hbmQgdG8gc3dhbGxvdyB0ZXh0IHVudGlsIHdlIHJlYWNoIGBAZW5kIGNvcHlpbmcnLgorICAlIFwgaXMgdGhlIGVzY2FwZSBjaGFyIGluIHRoaXMgdGV4aW5mby50ZXggZmlsZSwgc28gaXQgaXMgdGhlCisgICUgZGVsaW1pdGVyIGZvciB0aGUgY29tbWFuZDsgQCB3aWxsIGJlIHRoZSBlc2NhcGUgY2hhciB3aGVuIHdlIHJlYWQKKyAgJSBpdCwgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIuCisgIFxsb25nXGRlZlxkb2NvcHlpbmcjIzFcZW5kIGNvcHlpbmd7XGdkZWZcY29weWluZ3RleHR7IyMxfVxlbmRkb2NvcHlpbmd9JQorICAlCisgICUgV2UgbXVzdCBwcmVzZXJ2ZSBeXk0ncyBpbiB0aGUgaW5wdXQgZmlsZTsgc2VlIFxpbnNlcnRjb3B5aW5nIGJlbG93LgorICBcY2F0Y29kZWBcXl5NID0gXGFjdGl2ZQorICBcZG9jb3B5aW5nCit9CisKKyUgV2hhdCB3ZSBkbyB0byBmaW5pc2ggb2ZmIHRoZSBjb3B5aW5nIHRleHQuCislCitcZGVmXGVuZGRvY29weWluZ3tcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfQorCislIEBpbnNlcnRjb3B5aW5nLiAgSGVyZSB3ZSBtdXN0IHBsYXkgZ2FtZXMgd2l0aCBeXk0ncy4gIE9uIHRoZSBvbmUgaGFuZCwKKyUgd2UgbmVlZCB0aGVtIHRvIGRlbGltaXQgY29tbWFuZHMgc3VjaCBhcyBgQGVuZCBxdW90YXRpb24nLCBzbyB0aGV5CislIG11c3QgYmUgYWN0aXZlLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGNlcnRhaW5seSBkb24ndCB3YW50IGV2ZXJ5CislIGVuZC1vZi1saW5lIHRvIGJlIGEgXHBhciwgYXMgd291bGQgaGFwcGVuIHdpdGggdGhlIG5vcm1hbCBhY3RpdmUKKyUgZGVmaW5pdGlvbiBvZiBeXk0uICBPbiB0aGUgdGhpcmQgaGFuZCwgdHdvIF5eTSdzIGluIGEgcm93IHNob3VsZCBzdGlsbAorJSBnZW5lcmF0ZSBhIFxwYXIuCislCislIE91ciBhcHByb2FjaCBpcyB0byBtYWtlIF5eTSBpbnNlcnQgYSBzcGFjZSBhbmQgYSBwZW5hbHR5MSBub3JtYWxseTsKKyUgdGhlbiBpdCBjYW4gYWxzbyBjaGVjayBpZiBcbGFzdHBlbmFsdHk9MS4gIElmIGl0IGRvZXMsIHRoZW4gbWFudWFsbHkKKyUgZG8gXHBhci4KKyUKKyUgVGhpcyBtZXNzZXMgdXAgdGhlIG5vcm1hbCBkZWZpbml0aW9ucyBvZiBAY1tvbW1lbnRdLCBzbyB3ZSByZWRlZmluZQorJSBpdC4gIFNpbWlsYXJseSBmb3IgQGlnbm9yZS4gIChUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCBpbiB0aGUgZ2NjCislIG1hbnVhbCBmb3IgbWFuIHBhZ2UgZ2VuZXJhdGlvbi4pCislCislIFNlZW1zIHByZXR0eSBmcmFnaWxlLCBtb3N0IGxpbmUtb3JpZW50ZWQgY29tbWFuZHMgd2lsbCBwcmVzdW1hYmx5CislIGZhaWwsIGJ1dCBmb3IgdGhlIGxpbWl0ZWQgdXNlIG9mIGdldHRpbmcgdGhlIGNvcHlpbmcgdGV4dCAod2hpY2gKKyUgc2hvdWxkIGJlIHF1aXRlIHNpbXBsZSkgaW5zZXJ0ZWQsIHdlIGNhbiBob3BlIGl0J3Mgb2suCislCit7XGNhdGNvZGVgXF5eTT1cYWN0aXZlICUKK1xnZGVmXGluc2VydGNvcHlpbmd7XGJlZ2luZ3JvdXAgJQorICBccGFyaW5kZW50ID0gMHB0ICAlIGxvb2tzIHdyb25nIG9uIHRpdGxlIHBhZ2UKKyAgXGRlZl5eTXslCisgICAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xICUKKyAgICAgIFxwYXIgJQorICAgIFxlbHNlICUKKyAgICAgIFxzcGFjZSBccGVuYWx0eSAxICUKKyAgICBcZmkgJQorICB9JQorICAlCisgICUgRml4IEBjW29tbWVudF0gZm9yIGNhdGNvZGUgMTMgXl5NJ3MuCisgIFxkZWZcYyMjMV5eTXtcaWdub3Jlc3BhY2VzfSUKKyAgXGxldFxjb21tZW50ID0gXGMgJQorICAlCisgICUgRG9uJ3QgYm90aGVyIGp1bXBpbmcgdGhyb3VnaCBhbGwgdGhlIGhvb3BzIHRoYXQgXGRvaWdub3JlIGRvZXMsIGl0CisgICUgd291bGQgYmUgdmVyeSBoYXJkIHNpbmNlIHRoZSBjYXRjb2RlcyBhcmUgYWxyZWFkeSBzZXQuCisgIFxsb25nXGRlZlxpZ25vcmUjIzFcZW5kIGlnbm9yZXtcaWdub3Jlc3BhY2VzfSUKKyAgJQorICBcY29weWluZ3RleHQgJQorXGVuZGdyb3VwfSUKK30KKworXG1lc3NhZ2V7ZGVmdW5zLH0KKyUgQGRlZnVuIGV0Yy4KKworXG5ld3NraXBcZGVmYm9keWluZGVudCBcZGVmYm9keWluZGVudD0uNGluCitcbmV3c2tpcFxkZWZhcmdzaW5kZW50IFxkZWZhcmdzaW5kZW50PTUwcHQKK1xuZXdza2lwXGRlZmxhc3RhcmdtYXJnaW4gXGRlZmxhc3RhcmdtYXJnaW49MThwdAorCitcbmV3Y291bnRccGFyZW5jb3VudAorCislIFdlIHdhbnQgKCkmW10gdG8gcHJpbnQgc3BlY2lhbGx5IG9uIHRoZSBkZWZ1biBsaW5lLgorJQorXGRlZlxhY3RpdmVwYXJlbnN7JQorICBcY2F0Y29kZWBcKD1cYWN0aXZlIFxjYXRjb2RlYFwpPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKK30KKworJSBNYWtlIGNvbnRyb2wgc2VxdWVuY2VzIHdoaWNoIGFjdCBsaWtlIG5vcm1hbCBwYXJlbnRoZXNpcyBjaGFycy4KK1xsZXRcbHBhcmVuID0gKCBcbGV0XHJwYXJlbiA9ICkKKwore1xhY3RpdmVwYXJlbnMgJSBOb3csIHNtYXJ0IHBhcmVucyBkb24ndCB0dXJuIG9uIHVudGlsICZmb28gKHNlZSBcYW1wcm0pCisKKyUgQmUgc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGEgZGVmaW5pdGlvbiBmb3IgYCgnLCBldGMuICBGb3IgZXhhbXBsZSwKKyUgaWYgdGhlIGZuIG5hbWUgaGFzIHBhcmVucyBpbiBpdCwgXGJvbGRicmF4IHdpbGwgbm90IGJlIGluIGVmZmVjdCB5ZXQsCislIHNvIFRlWCB3b3VsZCBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQgdW5kZWZpbmVkIGNvbnRyb2wgc2VxdWVuY2UuCitcZ2xvYmFsXGxldCg9XGxwYXJlbiBcZ2xvYmFsXGxldCk9XHJwYXJlbgorXGdsb2JhbFxsZXRbPVxsYnJhY2sgXGdsb2JhbFxsZXRdPVxyYnJhY2sKKworXGdkZWZcZnVuY3Rpb25wYXJlbnN7XGJvbGRicmF4XGxldCY9XGFtcHJtXHBhcmVuY291bnQ9MCB9CitcZ2RlZlxib2xkYnJheHtcbGV0KD1cb3BuclxsZXQpPVxjbG5yXGxldFs9XGxicmJcbGV0XT1ccmJyYn0KKyUgVGhpcyBpcyB1c2VkIHRvIHR1cm4gb24gc3BlY2lhbCBwYXJlbnMKKyUgYnV0IG1ha2UgJiBhY3Qgb3JkaW5hcnkgKGdpdmVuIHRoYXQgaXQncyBhY3RpdmUpLgorXGdkZWZcYm9sZGJyYXhub2FtcHtcbGV0KD1cb3BuclxsZXQpPVxjbG5yXGxldFs9XGxicmJcbGV0XT1ccmJyYlxsZXQmPVxhbXBucn0KKworJSBEZWZpbml0aW9ucyBvZiAoLCApIGFuZCAmIHVzZWQgaW4gYXJncyBmb3IgZnVuY3Rpb25zLgorJSBUaGlzIGlzIHRoZSBkZWZpbml0aW9uIG9mICggb3V0c2lkZSBvZiBhbGwgcGFyZW50aGVzZXMuCitcZ2RlZlxvcHJtIzEge3tccm1cY2hhcmBcKH0jMSBcYmYgXGxldCg9XG9wbmVzdGVkCisgIFxnbG9iYWxcYWR2YW5jZVxwYXJlbmNvdW50IGJ5IDEKK30KKyUKKyUgVGhpcyBpcyB0aGUgZGVmaW5pdGlvbiBvZiAoIHdoZW4gYWxyZWFkeSBpbnNpZGUgYSBsZXZlbCBvZiBwYXJlbnMuCitcZ2RlZlxvcG5lc3RlZHtcY2hhcmBcKFxnbG9iYWxcYWR2YW5jZVxwYXJlbmNvdW50IGJ5IDEgfQorJQorXGdkZWZcY2xybXslIFByaW50IGEgcGFyZW4gaW4gcm9tYW4gaWYgaXQgaXMgdGFraW5nIHVzIGJhY2sgdG8gZGVwdGggb2YgMC4KKyAgJSBhbHNvIGluIHRoYXQgY2FzZSByZXN0b3JlIHRoZSBvdXRlci1sZXZlbCBkZWZpbml0aW9uIG9mICguCisgIFxpZm51bSBccGFyZW5jb3VudD0xIHtccm0gXGNoYXIgYFwpfVxzbCBcbGV0KD1cb3BybSBcZWxzZSBcY2hhciBgXCkgXGZpCisgIFxnbG9iYWxcYWR2YW5jZSBccGFyZW5jb3VudCBieSAtMSB9CislIElmIHdlIGVuY291bnRlciAmZm9vLCB0aGVuIHR1cm4gb24gKCktaGFja2luZyBhZnRlcndhcmRzCitcZ2RlZlxhbXBybSMxIHt7XHJtXCYjMX1cbGV0KD1cb3BybSBcbGV0KT1cY2xybVwgfQorJQorXGdkZWZcbm9ybWFscGFyZW5ze1xib2xkYnJheFxsZXQmPVxhbXBucn0KK30gJSBFbmQgb2YgZGVmaW5pdGlvbiBpbnNpZGUgXGFjdGl2ZXBhcmVucworJSUgVGhlc2UgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbiB0aGUKKyUlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXQorXGRlZlxvcG5ye3tcc2ZcY2hhcmBcKH1cZ2xvYmFsXGFkdmFuY2VccGFyZW5jb3VudCBieSAxIH0KK1xkZWZcY2xucnt7XHNmXGNoYXJgXCl9XGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEgfQorXGxldFxhbXBuciA9IFwmCitcZGVmXGxicmJ7e1xiZlxjaGFyYFxbfX0KK1xkZWZccmJyYnt7XGJmXGNoYXJgXF19fQorCislIEFjdGl2ZSAmJ3Mgc25lYWsgaW50byB0aGUgaW5kZXggYXJndW1lbnRzLCBzbyBtYWtlIHN1cmUgaXQncyBkZWZpbmVkLgoreworICBcY2F0Y29kZWAmID0gXGFjdGl2ZQorICBcZ2xvYmFsXGxldCYgPSBcYW1wbnIKK30KKworJSBcZGVmbmFtZSwgd2hpY2ggZm9ybWF0cyB0aGUgbmFtZSBvZiB0aGUgQGRlZiAobm90IHRoZSBhcmdzKS4KKyUgIzEgaXMgdGhlIGZ1bmN0aW9uIG5hbWUuCislICMyIGlzIHRoZSB0eXBlIG9mIGRlZmluaXRpb24sIHN1Y2ggYXMgIkZ1bmN0aW9uIi4KKyUKK1xkZWZcZGVmbmFtZSMxIzJ7JQorICAlIEhvdyB3ZSdsbCBvdXRwdXQgdGhlIHR5cGUgbmFtZS4gIFB1dHRpbmcgaXQgaW4gYnJhY2tldHMgaGVscHMKKyAgJSBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZSBib2R5IHRleHQgdGhhdCBtYXkgZW5kIHVwIG9uIHRoZSBuZXh0IGxpbmUKKyAgJSBqdXN0IGJlbG93IGl0LgorICBcaWZlbXB0eXsjMn0lCisgICAgXGRlZlxkZWZuYW1ldHlwZXt9JQorICBcZWxzZQorICAgIFxkZWZcZGVmbmFtZXR5cGV7W1xybSAjMl19JQorICBcZmkKKyAgJQorICAlIEdldCB0aGUgdmFsdWVzIG9mIFxsZWZ0c2tpcCBhbmQgXHJpZ2h0c2tpcCBhcyB0aGV5IHdlcmUgb3V0c2lkZSB0aGUgQGRlZi4uLgorICBcZGltZW4yPVxsZWZ0c2tpcAorICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZib2R5aW5kZW50CisgICUKKyAgJSBGaWd1cmUgb3V0IHZhbHVlcyBmb3IgdGhlIHBhcmFncmFwaCBzaGFwZS4KKyAgXHNldGJveDA9XGhib3h7XGhza2lwIFxkZWZsYXN0YXJnbWFyZ2lue1xkZWZuYW1ldHlwZX19JQorICBcZGltZW4wPVxoc2l6ZSBcYWR2YW5jZSBcZGltZW4wIGJ5IC1cd2QwICAlIGNvbXB1dGUgc2l6ZSBmb3IgZmlyc3QgbGluZQorICBcZGltZW4xPVxoc2l6ZSBcYWR2YW5jZSBcZGltZW4xIGJ5IC1cZGVmYXJnc2luZGVudCAgJSBzaXplIGZvciBjb250aW51YXRpb25zCisgIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjEKKyAgJQorICAlIE91dHB1dCBhcmcgMiAoIkZ1bmN0aW9uIiBvciBzb21lIHN1Y2gpIGJ1dCBzdHVjayBpbnNpZGUgYSBib3ggb2YKKyAgJSB3aWR0aCAwIHNvIGl0IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIGxpbmVicmVha2luZy4KKyAgXG5vaW5kZW50CisgICUKKyAgeyUgQWRqdXN0IFxoc2l6ZSB0byBleGNsdWRlIHRoZSBhbWJpZW50IG1hcmdpbnMsCisgICAlIHNvIHRoYXQgXHJpZ2h0bGluZSB3aWxsIG9iZXkgdGhlbS4KKyAgIFxhZHZhbmNlIFxoc2l6ZSBieSAtXGRpbWVuMgorICAgXGRpbWVuMyA9IDBwdCAgJSB3YXMgLTEuMjVwYworICAgXHJsYXB7XHJpZ2h0bGluZXtcZGVmbmFtZXR5cGVca2VyblxkaW1lbjN9fSUKKyAgfSUKKyAgJQorICAlIEFsbG93IGFsbCBsaW5lcyB0byBiZSB1bmRlcmZ1bGwgd2l0aG91dCBjb21wbGFpbnQ6CisgIFx0b2xlcmFuY2U9MTAwMDAgXGhiYWRuZXNzPTEwMDAwCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IC1cZGVmYm9keWluZGVudAorICBcZXhkZW50YW1vdW50PVxkZWZib2R5aW5kZW50CisgIHtcZGYgIzF9XGVuc2tpcCAgICAgICAgJSBvdXRwdXQgZnVuY3Rpb24gbmFtZQorICAlIFxkZWZ1bmFyZ3Mgd2lsbCBiZSBjYWxsZWQgbmV4dCB0byBvdXRwdXQgdGhlIGFyZ3VtZW50cywgaWYgYW55LgorfQorCislIENvbW1vbiBwaWVjZXMgdG8gc3RhcnQgYW55IEBkZWYuLi4KKyUgIzEgaXMgdGhlIFxFLi4uIGNvbnRyb2wgc2VxdWVuY2UgdG8gZW5kIHRoZSBkZWZpbml0aW9uICh3aGljaCB3ZSBkZWZpbmUpLgorJSAjMiBpcyB0aGUgXC4uLnggY29udHJvbCBzZXF1ZW5jZSAod2hpY2ggb3VyIGNhbGxlciBkZWZpbmVzKS4KKyUgIzMgaXMgdGhlIGNvbnRyb2wgc2VxdWVuY2UgdG8gcHJvY2VzcyB0aGUgaGVhZGVyLCBzdWNoIGFzIFxkZWZ1bmhlYWRlci4KKyUKK1xkZWZccGFyc2Vib2R5Y29tbW9uIzEjMiMzeyUKKyAgXGJlZ2luZ3JvdXBcaW5FTlYKKyAgJSBJZiB0aGVyZSBhcmUgdHdvIEBkZWYgY29tbWFuZHMgaW4gYSByb3csIHdlJ2xsIGhhdmUgYSBcbm9icmVhaywKKyAgJSB3aGljaCBpcyB0aGVyZSB0byBrZWVwIHRoZSBmdW5jdGlvbiBkZXNjcmlwdGlvbiB0b2dldGhlciB3aXRoIGl0cworICAlIGhlYWRlci4gIEJ1dCBpZiB0aGVyZSdzIG5vdGhpbmcgYnV0IGhlYWRlcnMsIHdlIG5lZWQgdG8gYWxsb3cgYQorICAlIGJyZWFrIHNvbWV3aGVyZS4gIENoZWNrIGZvciBwZW5hbHR5IDEwMDAyIChpbnNlcnRlZCBieQorICAlIFxkZWZhcmdzY29tbW9uZW5kaW5nKSBpbnN0ZWFkIG9mIDEwMDAwLCBzaW5jZSB0aGUgc2VjdGlvbmluZworICAlIGNvbW1hbmRzIGluc2VydCBhIFxwZW5hbHR5MTAwMDAsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFsbG93IGEgYnJlYWsKKyAgJSBiZXR3ZWVuIGEgc2VjdGlvbiBoZWFkaW5nIGFuZCBhIGRlZnVuLgorICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkyMDAwIFxmaQorICAlCisgICUgU2ltaWxhcmx5LCBhZnRlciBhIHNlY3Rpb24gaGVhZGluZywgZG8gbm90IGFsbG93IGEgYnJlYWsuCisgICUgQnV0IGRvIGluc2VydCB0aGUgZ2x1ZS4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwIFxtZWRicmVhaworICBcZWxzZSBcbWVkc2tpcCAgJSBwcmVjZWRlZCBieSBkaXNjYXJkYWJsZSBwZW5hbHR5LCBzbyBub3QgYSBicmVha3BvaW50CisgIFxmaQorICAlCisgICUgRGVmaW5lIHRoZSBcRS4uLiBlbmQgdG9rZW4gdGhhdCB0aGlzIGRlZmluaW5nIGNvbnN0cnVjdCBzcGVjaWZpZXMKKyAgJSBzbyB0aGF0IGl0IHdpbGwgZXhpdCB0aGlzIGdyb3VwLgorICBcZGVmIzF7XGVuZGdyYWZcZW5kZ3JvdXBcbWVkYnJlYWt9JQorICAlCisgIFxwYXJpbmRlbnQ9MGluCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxkZWZib2R5aW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKK30KKworJSBDb21tb24gcGFydCBvZiB0aGUgXC4uLnggZGVmaW5pdGlvbnMuCislCitcZGVmXGRlZnhib2R5Y29tbW9ueyUKKyAgJSBBcyB3aXRoIFxwYXJzZWJvZHljb21tb24gYWJvdmUsIGFsbG93IGxpbmUgYnJlYWsgaWYgd2UgaGF2ZSBtdWx0aXBsZQorICAlIHggaGVhZGVycyBpbiBhIHJvdy4gIEl0J3Mgbm90IGEgZ3JlYXQgcGxhY2UsIHRob3VnaC4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MjAwMCBcZmkKKyAgJQorICBcYmVnaW5ncm91cFxvYmV5bGluZXMKK30KKworJSBQcm9jZXNzIGJvZHkgb2YgQGRlZnVuLCBAZGVmZm4sIEBkZWZtYWMsIGV0Yy4KKyUKK1xkZWZcZGVmcGFyc2Vib2R5IzEjMiMzeyUKKyAgXHBhcnNlYm9keWNvbW1vbnsjMX17IzJ9eyMzfSUKKyAgXGRlZiMye1xkZWZ4Ym9keWNvbW1vbiBcYWN0aXZlcGFyZW5zIFxzcGFjZXNwbGl0IzN9JQorICBcY2F0Y29kZVxlcXVhbENoYXI9XGFjdGl2ZQorICBcYmVnaW5ncm91cFxvYmV5bGluZXNcYWN0aXZlcGFyZW5zCisgIFxzcGFjZXNwbGl0IzMlCit9CisKKyUgIzEsICMyLCAjMyBhcmUgdGhlIGNvbW1vbiBhcmd1bWVudHMgKHNlZSBccGFyc2Vib2R5Y29tbW9uIGFib3ZlKS4KKyUgIzQsIGRlbGltaXRlZCBieSB0aGUgc3BhY2UsIGlzIHRoZSBjbGFzcyBuYW1lLgorJQorXGRlZlxkZWZtZXRocGFyc2Vib2R5IzEjMiMzIzQgeyUKKyAgXHBhcnNlYm9keWNvbW1vbnsjMX17IzJ9eyMzfSUKKyAgXGRlZiMyIyMxIHtcZGVmeGJvZHljb21tb24gXGFjdGl2ZXBhcmVucyBcc3BhY2VzcGxpdHsjM3sjIzF9fX0lCisgIFxiZWdpbmdyb3VwXG9iZXlsaW5lc1xhY3RpdmVwYXJlbnMKKyAgJSBUaGUgXGVtcHR5IGhlcmUgcHJldmVudHMgbWlzaW50ZXJwcmV0YXRpb24gb2YgYSBjb25zdHJ1Y3Qgc3VjaCBhcworICAlICAgQGRlZmZuIHt3aGF0ZXZlcn0ge0VuaGFybW9uaWMgY29tbWF9CisgICUgU2VlIGNvbW1lbnRzIGF0IFxkZWZ0cHBhcnNlYm9keSwgYWx0aG91Z2ggaW4gb3VyIGNhc2Ugd2UgZG9uJ3QgaGF2ZQorICAlIHRvIHJlbW92ZSB0aGUgXGVtcHR5IGFmdGVyd2FyZHMsIHNpbmNlIGl0IGlzIGVtcHR5LgorICBcc3BhY2VzcGxpdHsjM3sjNH19XGVtcHR5Cit9CisKKyUgVXNlZCBmb3IgQGRlZnR5cGVtZXRob2QgYW5kIEBkZWZ0eXBlaXZhci4KKyUgIzEsICMyLCAjMyBhcmUgdGhlIGNvbW1vbiBhcmd1bWVudHMgKHNlZSBcZGVmcGFyc2Vib2R5KS4KKyUgIzQsIGRlbGltaXRlZCBieSBhIHNwYWNlLCBpcyB0aGUgY2xhc3MgbmFtZS4KKyUgIzUgaXMgdGhlIG1ldGhvZCdzIHJldHVybiB0eXBlLgorJQorXGRlZlxkZWZ0eXBlbWV0aHBhcnNlYm9keSMxIzIjMyM0ICM1IHslCisgIFxwYXJzZWJvZHljb21tb257IzF9eyMyfXsjM30lCisgIFxkZWYjMiMjMSAjIzIge1xkZWZ4Ym9keWNvbW1vbiBcYWN0aXZlcGFyZW5zIFxzcGFjZXNwbGl0eyMzeyMjMX17IyMyfX19JQorICBcYmVnaW5ncm91cFxvYmV5bGluZXNcYWN0aXZlcGFyZW5zCisgIFxzcGFjZXNwbGl0eyMzeyM0fXsjNX19JQorfQorCislIFVzZWQgZm9yIEBkZWZ0eXBlb3AuICBUaGUgY2hhbmdlIGZyb20gXGRlZnR5cGVtZXRocGFyc2Vib2R5IGlzIGFuCislIGV4dHJhIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgd2hpY2ggaXMgdGhlIGBjYXRlZ29yeScsIGluc3RlYWQgb2YgaXQKKyUgYmVpbmcgdGhlIGhhcmR3aXJlZCBzdHJpbmcgYE1ldGhvZCcgb3IgYEluc3RhbmNlIFZhcmlhYmxlJy4gIFdlIGhhdmUKKyUgdG8gYWNjb3VudCBmb3IgdGhpcyBib3RoIGluIHRoZSBcLi4ueCBkZWZpbml0aW9uIGFuZCBpbiBwYXJzaW5nIHRoZQorJSBpbnB1dCBhdCBoYW5kLiAgVGh1cyBhbHNvIG5lZWQgYSBjb250cm9sIHNlcXVlbmNlIChwYXNzZWQgYXMgIzUpIGZvcgorJSB0aGUgXEUuLi4gZGVmaW5pdGlvbiB0byBhc3NpZ24gdGhlIGNhdGVnb3J5IG5hbWUgdG8uCislCitcZGVmXGRlZnR5cGVvcHBhcnNlYm9keSMxIzIjMyM0IzUgIzYgeyUKKyAgXHBhcnNlYm9keWNvbW1vbnsjMX17IzJ9eyMzfSUKKyAgXGRlZiMyIyMxICMjMiAjIzMge1xkZWYjNHsjIzF9JQorICAgIFxkZWZ4Ym9keWNvbW1vbiBcYWN0aXZlcGFyZW5zIFxzcGFjZXNwbGl0eyMzeyMjMn17IyMzfX19JQorICBcYmVnaW5ncm91cFxvYmV5bGluZXNcYWN0aXZlcGFyZW5zCisgIFxzcGFjZXNwbGl0eyMzeyM1fXsjNn19JQorfQorCislIEZvciBAZGVmb3AuCitcZGVmXGRlZm9wcGFyc2Vib2R5ICMxIzIjMyM0IzUgeyUKKyAgXHBhcnNlYm9keWNvbW1vbnsjMX17IzJ9eyMzfSUKKyAgXGRlZiMyIyMxICMjMiB7XGRlZiM0eyMjMX0lCisgICAgXGRlZnhib2R5Y29tbW9uIFxhY3RpdmVwYXJlbnMgXHNwYWNlc3BsaXR7IzN7IyMyfX19JQorICBcYmVnaW5ncm91cFxvYmV5bGluZXNcYWN0aXZlcGFyZW5zCisgIFxzcGFjZXNwbGl0eyMzeyM1fX0lCit9CisKKyUgVGhlc2UgcGFyc2luZyBmdW5jdGlvbnMgYXJlIHNpbWlsYXIgdG8gdGhlIHByZWNlZGluZyBvbmVzCislIGV4Y2VwdCB0aGF0IHRoZXkgZG8gbm90IG1ha2UgcGFyZW5zIGludG8gYWN0aXZlIGNoYXJhY3RlcnMuCislIFRoZXNlIGFyZSB1c2VkIGZvciAidmFyaWFibGVzIiBzaW5jZSB0aGV5IGhhdmUgbm8gYXJndW1lbnRzLgorJQorXGRlZlxkZWZ2YXJwYXJzZWJvZHkgIzEjMiMzeyUKKyAgXHBhcnNlYm9keWNvbW1vbnsjMX17IzJ9eyMzfSUKKyAgXGRlZiMye1xkZWZ4Ym9keWNvbW1vbiBcc3BhY2VzcGxpdCMzfSUKKyAgXGNhdGNvZGVcZXF1YWxDaGFyPVxhY3RpdmUKKyAgXGJlZ2luZ3JvdXBcb2JleWxpbmVzCisgIFxzcGFjZXNwbGl0IzMlCit9CisKKyUgQGRlZm9wdmFyLgorXGRlZlxkZWZvcHZhcnBhcnNlYm9keSAjMSMyIzMjNCM1IHslCisgIFxwYXJzZWJvZHljb21tb257IzF9eyMyfXsjM30lCisgIFxkZWYjMiMjMSAjIzIge1xkZWYjNHsjIzF9JQorICAgIFxkZWZ4Ym9keWNvbW1vbiBcc3BhY2VzcGxpdHsjM3sjIzJ9fX0lCisgIFxiZWdpbmdyb3VwXG9iZXlsaW5lcworICBcc3BhY2VzcGxpdHsjM3sjNX19JQorfQorCitcZGVmXGRlZnZycGFyc2Vib2R5IzEjMiMzIzQgeyUKKyAgXHBhcnNlYm9keWNvbW1vbnsjMX17IzJ9eyMzfSUKKyAgXGRlZiMyIyMxIHtcZGVmeGJvZHljb21tb24gXHNwYWNlc3BsaXR7IzN7IyMxfX19JQorICBcYmVnaW5ncm91cFxvYmV5bGluZXMKKyAgXHNwYWNlc3BsaXR7IzN7IzR9fSUKK30KKworJSBUaGlzIGxvc2VzIG9uIGBAZGVmdHAge0RhdGEgVHlwZX0ge3N0cnVjdCB0ZXJtaW9zfScgLS0gaXQgdGhpbmtzIHRoZQorJSB0eXBlIGlzIGp1c3QgYHN0cnVjdCcsIGJlY2F1c2Ugd2UgbG9zZSB0aGUgYnJhY2VzIGluIGB7c3RydWN0CislIHRlcm1pb3N9JyB3aGVuIFxzcGFjZXNwbGl0IHJlYWRzIGl0cyB1bmRlbGltaXRlZCBhcmd1bWVudC4gIFNpZ2guCislIFxsZXRcZGVmdHBwYXJzZWJvZHk9XGRlZnZycGFyc2Vib2R5CislCislIFNvLCB0byBnZXQgYXJvdW5kIHRoaXMsIHdlIHB1dCBcZW1wdHkgaW4gd2l0aCB0aGUgdHlwZSBuYW1lLiAgVGhhdAorJSB3YXksIFRlWCB3b24ndCBmaW5kIGV4YWN0bHkgYHsuLi59JyBhcyBhbiB1bmRlbGltaXRlZCBhcmd1bWVudCwgYW5kCislIHdvbid0IHN0cmlwIG9mZiB0aGUgYnJhY2VzLgorJQorXGRlZlxkZWZ0cHBhcnNlYm9keSAjMSMyIzMjNCB7JQorICBccGFyc2Vib2R5Y29tbW9ueyMxfXsjMn17IzN9JQorICBcZGVmIzIjIzEge1xkZWZ4Ym9keWNvbW1vbiBcc3BhY2VzcGxpdHsjM3sjIzF9fX0lCisgIFxiZWdpbmdyb3VwXG9iZXlsaW5lcworICBcc3BhY2VzcGxpdHtccGFyc2V0cGhlYWRlcmxpbmV7IzN7IzR9fX1cZW1wdHkKK30KKworJSBGaW5lLCBidXQgdGhlbiB3ZSBoYXZlIHRvIGV2ZW50dWFsbHkgcmVtb3ZlIHRoZSBcZW1wdHkgKmFuZCogdGhlCislIGJyYWNlcyAoaWYgYW55KS4gIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KKyUKK1xkZWZccmVtb3ZlZW1wdHlicmFjZXNcZW1wdHkjMVxyZWxheHsjMX0KKworJSBBZnRlciBcc3BhY2VzcGxpdCBoYXMgZG9uZSBpdHMgd29yaywgdGhpcyBpcyBjYWxsZWQgLS0gIzEgaXMgdGhlIGZpbmFsCislIHRoaW5nIHRvIGNhbGwsICMyIHRoZSB0eXBlIG5hbWUgKHdoaWNoIHN0YXJ0cyB3aXRoIFxlbXB0eSksIGFuZCAjMworJSAod2hpY2ggbWlnaHQgYmUgZW1wdHkpIHRoZSBhcmd1bWVudHMuCislCitcZGVmXHBhcnNldHBoZWFkZXJsaW5lIzEjMiMzeyUKKyAgIzF7XHJlbW92ZWVtcHR5YnJhY2VzIzJccmVsYXh9eyMzfSUKK30lCisKKyUgU3BsaXQgdXAgIzIgKHRoZSByZXN0IG9mIHRoZSBpbnB1dCBsaW5lKSBhdCB0aGUgZmlyc3Qgc3BhY2UgdG9rZW4uCislIGNhbGwgIzEgd2l0aCB0d28gYXJndW1lbnRzOgorJSAgdGhlIGZpcnN0IGlzIGFsbCBvZiAjMiBiZWZvcmUgdGhlIHNwYWNlIHRva2VuLAorJSAgdGhlIHNlY29uZCBpcyBhbGwgb2YgIzIgYWZ0ZXIgdGhhdCBzcGFjZSB0b2tlbi4KKyUgSWYgIzIgY29udGFpbnMgbm8gc3BhY2UgdG9rZW4sIGFsbCBvZiBpdCBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZworJSBhbmQgdGhlIHNlY29uZCBpcyBwYXNzZWQgYXMgZW1wdHkuCislCit7XG9iZXlsaW5lcyAlCisgXGdkZWZcc3BhY2VzcGxpdCMxIzJeXk17XGVuZGdyb3VwXHNwYWNlc3BsaXR4eyMxfSMyIFxyZWxheFxzcGFjZXNwbGl0eH0lCisgXGxvbmdcZ2RlZlxzcGFjZXNwbGl0eCMxIzIgIzMjNFxzcGFjZXNwbGl0eHslCisgICBcaWZ4XHJlbGF4ICMzJQorICAgICAjMXsjMn17fSUKKyAgIFxlbHNlICUKKyAgICAgIzF7IzJ9eyMzIzR9JQorICAgXGZpfSUKK30KKworJSBEZWZpbmUgQGRlZnVuLgorCislIFRoaXMgaXMgY2FsbGVkIHRvIGVuZCB0aGUgYXJndW1lbnRzIHByb2Nlc3NpbmcgZm9yIGFsbCB0aGUgQGRlZi4uLiBjb21tYW5kcy4KKyUKK1xkZWZcZGVmYXJnc2NvbW1vbmVuZGluZ3slCisgIFxpbnRlcmxpbmVwZW5hbHR5ID0gMTAwMDAKKyAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDBwdCBwbHVzIDFmaWwKKyAgXGVuZGdyYWYKKyAgXG5vYnJlYWtcdnNraXAgLVxwYXJza2lwCisgIFxwZW5hbHR5IDEwMDAyICAlIHNpZ25hbCB0byBccGFyc2Vib2R5Y29tbW9uIGFuZCBcZGVmeGJvZHljb21tb24uCit9CisKKyUgVGhpcyBleHBhbmRzIHRoZSBhcmdzIGFuZCB0ZXJtaW5hdGVzIHRoZSBwYXJhZ3JhcGggdGhleSBjb21wcmlzZS4KKyUKK1xkZWZcZGVmdW5hcmdzIzF7XGZ1bmN0aW9ucGFyZW5zIFxzbAorJSBFeHBhbmQsIHByZXZlbnRpbmcgaHlwaGVuYXRpb24gYXQgYC0nIGNoYXJzLgorJSBOb3RlIHRoYXQgZ3JvdXBzIGRvbid0IGFmZmVjdCBjaGFuZ2VzIGluIFxoeXBoZW5jaGFyLgorJSBTZXQgdGhlIGZvbnQgdGVtcG9yYXJpbHkgYW5kIHVzZSBcZm9udCBpbiBjYXNlIFxzZXRmb250IG1hZGUgXHRlbnNsIGEgbWFjcm8uCit7XHRlbnNsXGh5cGhlbmNoYXJcZm9udD0wfSUKKyMxJQore1x0ZW5zbFxoeXBoZW5jaGFyXGZvbnQ9NDV9JQorXGlmbnVtXHBhcmVuY291bnQ9MCBcZWxzZSBcZXJybWVzc2FnZXtVbmJhbGFuY2VkIHBhcmVudGhlc2VzIGluIEBkZWZ9XGZpJQorICBcZGVmYXJnc2NvbW1vbmVuZGluZworfQorCitcZGVmXGRlZnR5cGVmdW5hcmdzICMxeyUKKyUgRXhwYW5kLCBwcmV2ZW50aW5nIGh5cGhlbmF0aW9uIGF0IGAtJyBjaGFycy4KKyUgTm90ZSB0aGF0IGdyb3VwcyBkb24ndCBhZmZlY3QgY2hhbmdlcyBpbiBcaHlwaGVuY2hhci4KKyUgVXNlIFxib2xkYnJheG5vYW1wLCBub3QgXGZ1bmN0aW9ucGFyZW5zLCBzbyB0aGF0ICYgaXMgbm90IHNwZWNpYWwuCitcYm9sZGJyYXhub2FtcAorXHRjbG9zZXsjMX0lIGF2b2lkIFxjb2RlIGJlY2F1c2Ugb2Ygc2lkZSBlZmZlY3RzIG9uIGFjdGl2ZSBjaGFycworICBcZGVmYXJnc2NvbW1vbmVuZGluZworfQorCislIERvIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2Ygb25lIEBkZWZ1biBvciBAZGVmdW54IGxpbmUgYWxyZWFkeSBwYXJzZWQuCisKKyUgQGRlZmZuIENvbW1hbmQgZm9yd2FyZC1jaGFyIG5jaGFycworCitcZGVmXGRlZmZue1xkZWZtZXRocGFyc2Vib2R5XEVkZWZmblxkZWZmbnhcZGVmZm5oZWFkZXJ9CisKK1xkZWZcZGVmZm5oZWFkZXIgIzEjMiMze1xkb2luZCB7Zm59e1xjb2RleyMyfX0lCitcYmVnaW5ncm91cFxkZWZuYW1lIHsjMn17IzF9XGRlZnVuYXJnc3sjM31cZW5kZ3JvdXAgJQorXGNhdGNvZGVcZXF1YWxDaGFyPVxvdGhlciAlIFR1cm4gb2ZmIGNoYW5nZSBtYWRlIGluIFxkZWZwYXJzZWJvZHkKK30KKworJSBAZGVmdW4gPT0gQGRlZmZuIEZ1bmN0aW9uCisKK1xkZWZcZGVmdW57XGRlZnBhcnNlYm9keVxFZGVmdW5cZGVmdW54XGRlZnVuaGVhZGVyfQorCitcZGVmXGRlZnVuaGVhZGVyICMxIzJ7XGRvaW5kIHtmbn17XGNvZGV7IzF9fSUgTWFrZSBlbnRyeSBpbiBmdW5jdGlvbiBpbmRleAorXGJlZ2luZ3JvdXBcZGVmbmFtZSB7IzF9e1xwdXR3b3JkRGVmZnVuY30lCitcZGVmdW5hcmdzIHsjMn1cZW5kZ3JvdXAgJQorXGNhdGNvZGVcZXF1YWxDaGFyPVxvdGhlciAlIFR1cm4gb2ZmIGNoYW5nZSBtYWRlIGluIFxkZWZwYXJzZWJvZHkKK30KKworJSBAZGVmdHlwZWZ1biBpbnQgZm9vYmFyIChpbnQgQHZhcntmb299LCBmbG9hdCBAdmFye2Jhcn0pCisKK1xkZWZcZGVmdHlwZWZ1bntcZGVmcGFyc2Vib2R5XEVkZWZ0eXBlZnVuXGRlZnR5cGVmdW54XGRlZnR5cGVmdW5oZWFkZXJ9CisKKyUgIzEgaXMgdGhlIGRhdGEgdHlwZS4gICMyIGlzIHRoZSBuYW1lIGFuZCBhcmdzLgorXGRlZlxkZWZ0eXBlZnVuaGVhZGVyICMxIzJ7XGRlZnR5cGVmdW5oZWFkZXJ4eyMxfSMyIFxyZWxheH0KKyUgIzEgaXMgdGhlIGRhdGEgdHlwZSwgIzIgdGhlIG5hbWUsICMzIHRoZSBhcmdzLgorXGRlZlxkZWZ0eXBlZnVuaGVhZGVyeCAjMSMyICMzXHJlbGF4eyUKK1xkb2luZCB7Zm59e1xjb2RleyMyfX0lIE1ha2UgZW50cnkgaW4gZnVuY3Rpb24gaW5kZXgKK1xiZWdpbmdyb3VwXGRlZm5hbWUge1xkZWZoZWFkZXJ4Y29uZCMxXHJlbGF4JC4kIzJ9e1xwdXR3b3JkRGVmdHlwZWZ1bn0lCitcZGVmdHlwZWZ1bmFyZ3MgeyMzfVxlbmRncm91cCAlCitcY2F0Y29kZVxlcXVhbENoYXI9XG90aGVyICUgVHVybiBvZmYgY2hhbmdlIG1hZGUgaW4gXGRlZnBhcnNlYm9keQorfQorCislIEBkZWZ0eXBlZm4ge0xpYnJhcnkgRnVuY3Rpb259IGludCBmb29iYXIgKGludCBAdmFye2Zvb30sIGZsb2F0IEB2YXJ7YmFyfSkKKworXGRlZlxkZWZ0eXBlZm57XGRlZm1ldGhwYXJzZWJvZHlcRWRlZnR5cGVmblxkZWZ0eXBlZm54XGRlZnR5cGVmbmhlYWRlcn0KKworJSBcZGVmaGVhZGVyeGNvbmQjMVxyZWxheCQuJAorJSBwdXRzICMxIGluIEBjb2RlLCBmb2xsb3dlZCBieSBhIHNwYWNlLCBidXQgZG9lcyBub3RoaW5nIGlmICMxIGlzIG51bGwuCitcZGVmXGRlZmhlYWRlcnhjb25kIzEjMiQuJHtcaWZ4IzFccmVsYXhcZWxzZVxjb2RleyMxIzJ9IFxmaX0KKworJSAjMSBpcyB0aGUgY2xhc3NpZmljYXRpb24uICAjMiBpcyB0aGUgZGF0YSB0eXBlLiAgIzMgaXMgdGhlIG5hbWUgYW5kIGFyZ3MuCitcZGVmXGRlZnR5cGVmbmhlYWRlciAjMSMyIzN7XGRlZnR5cGVmbmhlYWRlcnh7IzF9eyMyfSMzIFxyZWxheH0KKyUgIzEgaXMgdGhlIGNsYXNzaWZpY2F0aW9uLCAjMiB0aGUgZGF0YSB0eXBlLCAjMyB0aGUgbmFtZSwgIzQgdGhlIGFyZ3MuCitcZGVmXGRlZnR5cGVmbmhlYWRlcnggIzEjMiMzICM0XHJlbGF4eyUKK1xkb2luZCB7Zm59e1xjb2RleyMzfX0lIE1ha2UgZW50cnkgaW4gZnVuY3Rpb24gaW5kZXgKK1xiZWdpbmdyb3VwCitcbm9ybWFscGFyZW5zICUgbm90YWJseSwgdHVybiBvZmYgYCYnIG1hZ2ljLCB3aGljaCBwcmV2ZW50cworJSAgICAgICAgICAgICAgIGF0IGxlYXN0IHNvbWUgQysrIHRleHQgZnJvbSB3b3JraW5nCitcZGVmbmFtZSB7XGRlZmhlYWRlcnhjb25kIzJccmVsYXgkLiQjM317IzF9JQorXGRlZnR5cGVmdW5hcmdzIHsjNH1cZW5kZ3JvdXAgJQorXGNhdGNvZGVcZXF1YWxDaGFyPVxvdGhlciAlIFR1cm4gb2ZmIGNoYW5nZSBtYWRlIGluIFxkZWZwYXJzZWJvZHkKK30KKworJSBAZGVmbWFjID09IEBkZWZmbiBNYWNybworCitcZGVmXGRlZm1hY3tcZGVmcGFyc2Vib2R5XEVkZWZtYWNcZGVmbWFjeFxkZWZtYWNoZWFkZXJ9CisKK1xkZWZcZGVmbWFjaGVhZGVyICMxIzJ7XGRvaW5kIHtmbn17XGNvZGV7IzF9fSUgTWFrZSBlbnRyeSBpbiBmdW5jdGlvbiBpbmRleAorXGJlZ2luZ3JvdXBcZGVmbmFtZSB7IzF9e1xwdXR3b3JkRGVmbWFjfSUKK1xkZWZ1bmFyZ3MgeyMyfVxlbmRncm91cCAlCitcY2F0Y29kZVxlcXVhbENoYXI9XG90aGVyICUgVHVybiBvZmYgY2hhbmdlIG1hZGUgaW4gXGRlZnBhcnNlYm9keQorfQorCislIEBkZWZzcGVjID09IEBkZWZmbiBTcGVjaWFsIEZvcm0KKworXGRlZlxkZWZzcGVje1xkZWZwYXJzZWJvZHlcRWRlZnNwZWNcZGVmc3BlY3hcZGVmc3BlY2hlYWRlcn0KKworXGRlZlxkZWZzcGVjaGVhZGVyICMxIzJ7XGRvaW5kIHtmbn17XGNvZGV7IzF9fSUgTWFrZSBlbnRyeSBpbiBmdW5jdGlvbiBpbmRleAorXGJlZ2luZ3JvdXBcZGVmbmFtZSB7IzF9e1xwdXR3b3JkRGVmc3BlY30lCitcZGVmdW5hcmdzIHsjMn1cZW5kZ3JvdXAgJQorXGNhdGNvZGVcZXF1YWxDaGFyPVxvdGhlciAlIFR1cm4gb2ZmIGNoYW5nZSBtYWRlIGluIFxkZWZwYXJzZWJvZHkKK30KKworJSBAZGVmb3AgQ0FURUdPUlkgQ0xBU1MgT1BFUkFUSU9OIEFSRy4uLgorJQorXGRlZlxkZWZvcCAjMSB7XGRlZlxkZWZvcHR5cGV7IzF9JQorXGRlZm9wcGFyc2Vib2R5XEVkZWZvcFxkZWZvcHhcZGVmb3BoZWFkZXJcZGVmb3B0eXBlfQorJQorXGRlZlxkZWZvcGhlYWRlciMxIzIjM3slCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzJ9fXtccHV0d29yZG9uXCBcY29kZXsjMX19JSBmdW5jdGlvbiBpbmRleCBlbnRyeQorICBcYmVnaW5ncm91cAorICAgIFxkZWZuYW1leyMyfXtcZGVmb3B0eXBlXCBccHV0d29yZG9uXCAjMX0lCisgICAgXGRlZnVuYXJnc3sjM30lCisgIFxlbmRncm91cAorfQorCislIEBkZWZ0eXBlb3AgQ0FURUdPUlkgQ0xBU1MgVFlQRSBPUEVSQVRJT04gQVJHLi4uCislCitcZGVmXGRlZnR5cGVvcCAjMSB7XGRlZlxkZWZ0eXBlb3BjYXRlZ29yeXsjMX0lCisgIFxkZWZ0eXBlb3BwYXJzZWJvZHlcRWRlZnR5cGVvcFxkZWZ0eXBlb3B4XGRlZnR5cGVvcGhlYWRlcgorICAgICAgICAgICAgICAgICAgICAgICBcZGVmdHlwZW9wY2F0ZWdvcnl9CislCislICMxIGlzIHRoZSBjbGFzcyBuYW1lLCAjMiB0aGUgZGF0YSB0eXBlLCAjMyB0aGUgb3BlcmF0aW9uIG5hbWUsICM0IHRoZSBhcmdzLgorXGRlZlxkZWZ0eXBlb3BoZWFkZXIjMSMyIzMjNHslCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzN9fXtccHV0d29yZG9uXCBcY29kZXsjMX19JSBlbnRyeSBpbiBmdW5jdGlvbiBpbmRleAorICBcYmVnaW5ncm91cAorICAgIFxkZWZuYW1le1xkZWZoZWFkZXJ4Y29uZCMyXHJlbGF4JC4kIzN9CisgICAgICAgICAgICB7XGRlZnR5cGVvcGNhdGVnb3J5XCBccHV0d29yZG9uXCBcY29kZXsjMX19JQorICAgIFxkZWZ0eXBlZnVuYXJnc3sjNH0lCisgIFxlbmRncm91cAorfQorCislIEBkZWZ0eXBlbWV0aG9kIENMQVNTIFRZUEUgTUVUSE9EIEFSRy4uLgorJQorXGRlZlxkZWZ0eXBlbWV0aG9keyUKKyAgXGRlZnR5cGVtZXRocGFyc2Vib2R5XEVkZWZ0eXBlbWV0aG9kXGRlZnR5cGVtZXRob2R4XGRlZnR5cGVtZXRob2RoZWFkZXJ9CislCislICMxIGlzIHRoZSBjbGFzcyBuYW1lLCAjMiB0aGUgZGF0YSB0eXBlLCAjMyB0aGUgbWV0aG9kIG5hbWUsICM0IHRoZSBhcmdzLgorXGRlZlxkZWZ0eXBlbWV0aG9kaGVhZGVyIzEjMiMzIzR7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyMzfX17XHB1dHdvcmRvblwgXGNvZGV7IzF9fSUgZW50cnkgaW4gZnVuY3Rpb24gaW5kZXgKKyAgXGJlZ2luZ3JvdXAKKyAgICBcZGVmbmFtZXtcZGVmaGVhZGVyeGNvbmQjMlxyZWxheCQuJCMzfXtccHV0d29yZE1ldGhvZG9uXCBcY29kZXsjMX19JQorICAgIFxkZWZ0eXBlZnVuYXJnc3sjNH0lCisgIFxlbmRncm91cAorfQorCislIEBkZWZ0eXBlaXZhciBDTEFTUyBUWVBFIFZBUk5BTUUKKyUKK1xkZWZcZGVmdHlwZWl2YXJ7JQorICBcZGVmdHlwZW1ldGhwYXJzZWJvZHlcRWRlZnR5cGVpdmFyXGRlZnR5cGVpdmFyeFxkZWZ0eXBlaXZhcmhlYWRlcn0KKyUKKyUgIzEgaXMgdGhlIGNsYXNzIG5hbWUsICMyIHRoZSBkYXRhIHR5cGUsICMzIHRoZSB2YXJpYWJsZSBuYW1lLgorXGRlZlxkZWZ0eXBlaXZhcmhlYWRlciMxIzIjM3slCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzN9fXtccHV0d29yZG9mXCBcY29kZXsjMX19JSBlbnRyeSBpbiB2YXJpYWJsZSBpbmRleAorICBcYmVnaW5ncm91cAorICAgIFxkZWZuYW1le1xkZWZoZWFkZXJ4Y29uZCMyXHJlbGF4JC4kIzN9CisgICAgICAgICAgICB7XHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2ZcIFxjb2RleyMxfX0lCisgICAgXGRlZnZhcmFyZ3N7IzN9JQorICBcZW5kZ3JvdXAKK30KKworJSBAZGVmbWV0aG9kID09IEBkZWZvcCBNZXRob2QKKyUKK1xkZWZcZGVmbWV0aG9ke1xkZWZtZXRocGFyc2Vib2R5XEVkZWZtZXRob2RcZGVmbWV0aG9keFxkZWZtZXRob2RoZWFkZXJ9CislCislICMxIGlzIHRoZSBjbGFzcyBuYW1lLCAjMiB0aGUgbWV0aG9kIG5hbWUsICMzIHRoZSBhcmdzLgorXGRlZlxkZWZtZXRob2RoZWFkZXIjMSMyIzN7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyMyfX17XHB1dHdvcmRvblwgXGNvZGV7IzF9fSUgZW50cnkgaW4gZnVuY3Rpb24gaW5kZXgKKyAgXGJlZ2luZ3JvdXAKKyAgICBcZGVmbmFtZXsjMn17XHB1dHdvcmRNZXRob2RvblwgXGNvZGV7IzF9fSUKKyAgICBcZGVmdW5hcmdzeyMzfSUKKyAgXGVuZGdyb3VwCit9CisKKyUgQGRlZmN2IHtDbGFzcyBPcHRpb259IGZvby1jbGFzcyBmb28tZmxhZworCitcZGVmXGRlZmN2ICMxIHtcZGVmXGRlZmN2dHlwZXsjMX0lCitcZGVmb3B2YXJwYXJzZWJvZHlcRWRlZmN2XGRlZmN2eFxkZWZjdmFyaGVhZGVyXGRlZmN2dHlwZX0KKworXGRlZlxkZWZjdmFyaGVhZGVyICMxIzIjM3slCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzJ9fXtccHV0d29yZG9mXCBcY29kZXsjMX19JSB2YXJpYWJsZSBpbmRleCBlbnRyeQorICBcYmVnaW5ncm91cAorICAgIFxkZWZuYW1leyMyfXtcZGVmY3Z0eXBlXCBccHV0d29yZG9mXCAjMX0lCisgICAgXGRlZnZhcmFyZ3N7IzN9JQorICBcZW5kZ3JvdXAKK30KKworJSBAZGVmaXZhciBDTEFTUyBWQVJOQU1FID09IEBkZWZjdiB7SW5zdGFuY2UgVmFyaWFibGV9IENMQVNTIFZBUk5BTUUKKyUKK1xkZWZcZGVmaXZhcntcZGVmdnJwYXJzZWJvZHlcRWRlZml2YXJcZGVmaXZhcnhcZGVmaXZhcmhlYWRlcn0KKyUKK1xkZWZcZGVmaXZhcmhlYWRlciMxIzIjM3slCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzJ9fXtccHV0d29yZG9mXCBcY29kZXsjMX19JSBlbnRyeSBpbiB2YXIgaW5kZXgKKyAgXGJlZ2luZ3JvdXAKKyAgICBcZGVmbmFtZXsjMn17XHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2ZcICMxfSUKKyAgICBcZGVmdmFyYXJnc3sjM30lCisgIFxlbmRncm91cAorfQorCislIEBkZWZ2YXIKKyUgRmlyc3QsIGRlZmluZSB0aGUgcHJvY2Vzc2luZyB0aGF0IGlzIHdhbnRlZCBmb3IgYXJndW1lbnRzIG9mIEBkZWZ2YXIuCislIFRoaXMgaXMgYWN0dWFsbHkgc2ltcGxlOiBqdXN0IHByaW50IHRoZW0gaW4gcm9tYW4uCislIFRoaXMgbXVzdCBleHBhbmQgdGhlIGFyZ3MgYW5kIHRlcm1pbmF0ZSB0aGUgcGFyYWdyYXBoIHRoZXkgbWFrZSB1cAorXGRlZlxkZWZ2YXJhcmdzICMxe1xub3JtYWxwYXJlbnMgIzElCisgIFxkZWZhcmdzY29tbW9uZW5kaW5nCit9CisKKyUgQGRlZnZyIENvdW50ZXIgZm9vLWNvdW50CisKK1xkZWZcZGVmdnJ7XGRlZnZycGFyc2Vib2R5XEVkZWZ2clxkZWZ2cnhcZGVmdnJoZWFkZXJ9CisKK1xkZWZcZGVmdnJoZWFkZXIgIzEjMiMze1xkb2luZCB7dnJ9e1xjb2RleyMyfX0lCitcYmVnaW5ncm91cFxkZWZuYW1lIHsjMn17IzF9XGRlZnZhcmFyZ3N7IzN9XGVuZGdyb3VwfQorCislIEBkZWZ2YXIgPT0gQGRlZnZyIFZhcmlhYmxlCisKK1xkZWZcZGVmdmFye1xkZWZ2YXJwYXJzZWJvZHlcRWRlZnZhclxkZWZ2YXJ4XGRlZnZhcmhlYWRlcn0KKworXGRlZlxkZWZ2YXJoZWFkZXIgIzEjMntcZG9pbmQge3ZyfXtcY29kZXsjMX19JSBNYWtlIGVudHJ5IGluIHZhciBpbmRleAorXGJlZ2luZ3JvdXBcZGVmbmFtZSB7IzF9e1xwdXR3b3JkRGVmdmFyfSUKK1xkZWZ2YXJhcmdzIHsjMn1cZW5kZ3JvdXAgJQorfQorCislIEBkZWZvcHQgPT0gQGRlZnZyIHtVc2VyIE9wdGlvbn0KKworXGRlZlxkZWZvcHR7XGRlZnZhcnBhcnNlYm9keVxFZGVmb3B0XGRlZm9wdHhcZGVmb3B0aGVhZGVyfQorCitcZGVmXGRlZm9wdGhlYWRlciAjMSMye1xkb2luZCB7dnJ9e1xjb2RleyMxfX0lIE1ha2UgZW50cnkgaW4gdmFyIGluZGV4CitcYmVnaW5ncm91cFxkZWZuYW1lIHsjMX17XHB1dHdvcmREZWZvcHR9JQorXGRlZnZhcmFyZ3MgeyMyfVxlbmRncm91cCAlCit9CisKKyUgQGRlZnR5cGV2YXIgaW50IGZvb2JhcgorCitcZGVmXGRlZnR5cGV2YXJ7XGRlZnZhcnBhcnNlYm9keVxFZGVmdHlwZXZhclxkZWZ0eXBldmFyeFxkZWZ0eXBldmFyaGVhZGVyfQorCislICMxIGlzIHRoZSBkYXRhIHR5cGUuICAjMiBpcyB0aGUgbmFtZSwgcGVyaGFwcyBmb2xsb3dlZCBieSB0ZXh0IHRoYXQKKyUgaXMgYWN0dWFsbHkgcGFydCBvZiB0aGUgZGF0YSB0eXBlLCB3aGljaCBzaG91bGQgbm90IGJlIHB1dCBpbnRvIHRoZSBpbmRleC4KK1xkZWZcZGVmdHlwZXZhcmhlYWRlciAjMSMyeyUKK1xkb3ZhcmluZCMyIFxyZWxheCUgTWFrZSBlbnRyeSBpbiB2YXJpYWJsZXMgaW5kZXgKK1xiZWdpbmdyb3VwXGRlZm5hbWUge1xkZWZoZWFkZXJ4Y29uZCMxXHJlbGF4JC4kIzJ9e1xwdXR3b3JkRGVmdHlwZXZhcn0lCisgIFxkZWZhcmdzY29tbW9uZW5kaW5nCitcZW5kZ3JvdXB9CitcZGVmXGRvdmFyaW5kIzEgIzJccmVsYXh7XGRvaW5ke3ZyfXtcY29kZXsjMX19fQorCislIEBkZWZ0eXBldnIge0dsb2JhbCBGbGFnfSBpbnQgZW5hYmxlCisKK1xkZWZcZGVmdHlwZXZye1xkZWZ2cnBhcnNlYm9keVxFZGVmdHlwZXZyXGRlZnR5cGV2cnhcZGVmdHlwZXZyaGVhZGVyfQorCitcZGVmXGRlZnR5cGV2cmhlYWRlciAjMSMyIzN7XGRvdmFyaW5kIzMgXHJlbGF4JQorXGJlZ2luZ3JvdXBcZGVmbmFtZSB7XGRlZmhlYWRlcnhjb25kIzJccmVsYXgkLiQjM317IzF9CisgIFxkZWZhcmdzY29tbW9uZW5kaW5nCitcZW5kZ3JvdXB9CisKKyUgTm93IGRlZmluZSBAZGVmdHAKKyUgQXJncyBhcmUgcHJpbnRlZCBpbiBib2xkLCBhIHNsaWdodCBkaWZmZXJlbmNlIGZyb20gQGRlZnZhci4KKworXGRlZlxkZWZ0cGFyZ3MgIzF7XGJmIFxkZWZ2YXJhcmdzeyMxfX0KKworJSBAZGVmdHAgQ2xhc3Mgd2luZG93IGhlaWdodCB3aWR0aCAuLi4KKworXGRlZlxkZWZ0cHtcZGVmdHBwYXJzZWJvZHlcRWRlZnRwXGRlZnRweFxkZWZ0cGhlYWRlcn0KKworXGRlZlxkZWZ0cGhlYWRlciAjMSMyIzN7XGRvaW5kIHt0cH17XGNvZGV7IzJ9fSUKK1xiZWdpbmdyb3VwXGRlZm5hbWUgeyMyfXsjMX1cZGVmdHBhcmdzeyMzfVxlbmRncm91cH0KKworJSBUaGVzZSBkZWZpbml0aW9ucyBhcmUgdXNlZCBpZiB5b3UgdXNlIEBkZWZ1bnggKGV0Yy4pCislIGFueXdoZXJlIG90aGVyIHRoYW4gaW1tZWRpYXRlbHkgYWZ0ZXIgYSBAZGVmdW4gb3IgQGRlZnVueC4KKyUKK1xkZWZcZGVmY3Z4IzEge1xlcnJtZXNzYWdle0BkZWZjdnggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmZm54IzEge1xlcnJtZXNzYWdle0BkZWZmbnggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmaXZhcngjMSB7XGVycm1lc3NhZ2V7QGRlZml2YXJ4IGluIGludmFsaWQgY29udGV4dH19CitcZGVmXGRlZm1hY3gjMSB7XGVycm1lc3NhZ2V7QGRlZm1hY3ggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmbWV0aG9keCMxIHtcZXJybWVzc2FnZXtAZGVmbWV0aG9keCBpbiBpbnZhbGlkIGNvbnRleHR9fQorXGRlZlxkZWZvcHR4ICMxIHtcZXJybWVzc2FnZXtAZGVmb3B0eCBpbiBpbnZhbGlkIGNvbnRleHR9fQorXGRlZlxkZWZvcHgjMSB7XGVycm1lc3NhZ2V7QGRlZm9weCBpbiBpbnZhbGlkIGNvbnRleHR9fQorXGRlZlxkZWZzcGVjeCMxIHtcZXJybWVzc2FnZXtAZGVmc3BlY3ggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmdHB4IzEge1xlcnJtZXNzYWdle0BkZWZ0cHggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmdHlwZWZueCMxIHtcZXJybWVzc2FnZXtAZGVmdHlwZWZueCBpbiBpbnZhbGlkIGNvbnRleHR9fQorXGRlZlxkZWZ0eXBlZnVueCMxIHtcZXJybWVzc2FnZXtAZGVmdHlwZWZ1bnggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmdHlwZWl2YXJ4IzEge1xlcnJtZXNzYWdle0BkZWZ0eXBlaXZhcnggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmdHlwZW1ldGhvZHgjMSB7XGVycm1lc3NhZ2V7QGRlZnR5cGVtZXRob2R4IGluIGludmFsaWQgY29udGV4dH19CitcZGVmXGRlZnR5cGVvcHgjMSB7XGVycm1lc3NhZ2V7QGRlZnR5cGVvcHggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmdHlwZXZhcngjMSB7XGVycm1lc3NhZ2V7QGRlZnR5cGV2YXJ4IGluIGludmFsaWQgY29udGV4dH19CitcZGVmXGRlZnR5cGV2cngjMSB7XGVycm1lc3NhZ2V7QGRlZnR5cGV2cnggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmdW54IzEge1xlcnJtZXNzYWdle0BkZWZ1bnggaW4gaW52YWxpZCBjb250ZXh0fX0KK1xkZWZcZGVmdmFyeCMxIHtcZXJybWVzc2FnZXtAZGVmdmFyeCBpbiBpbnZhbGlkIGNvbnRleHR9fQorXGRlZlxkZWZ2cngjMSB7XGVycm1lc3NhZ2V7QGRlZnZyeCBpbiBpbnZhbGlkIGNvbnRleHR9fQorCisKK1xtZXNzYWdle21hY3Jvcyx9CislIEBtYWNyby4KKworJSBUbyBkbyB0aGlzIHJpZ2h0IHdlIG5lZWQgYSBmZWF0dXJlIG9mIGUtVGVYLCBcc2NhbnRva2VucywKKyUgd2hpY2ggd2UgYXJyYW5nZSB0byBlbXVsYXRlIHdpdGggYSB0ZW1wb3JhcnkgZmlsZSBpbiBvcmRpbmFyeSBUZVguCitcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZAorIFxuZXd3cml0ZVxtYWNzY3JpYmJsZQorIFxkZWZcc2Nhbm1hY3JvIzF7JQorICAgXGJlZ2luZ3JvdXAgXG5ld2xpbmVjaGFyYFxeXk0KKyAgICUgVW5kbyBjYXRjb2RlIGNoYW5nZXMgb2YgXHN0YXJ0Y29udGVudHMgYW5kIFxkb3ByaW50aW5kZXgKKyAgIFxjYXRjb2RlYFxAPTAgXGNhdGNvZGVgXFw9XG90aGVyIFxlc2NhcGVjaGFyPWBcQAorICAgJSBBcHBlbmQgXGVuZGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IFRlWCBkb2VzIG5vdCBzZWUgdGhlIGVuZGluZyBuZXdsaW5lLgorICAgXHRva3MwPXsjMVxlbmRpbnB1dH0lCisgICBcaW1tZWRpYXRlXG9wZW5vdXRcbWFjc2NyaWJibGU9XGpvYm5hbWUudG1wCisgICBcaW1tZWRpYXRlXHdyaXRlXG1hY3NjcmliYmxle1x0aGVcdG9rczB9JQorICAgXGltbWVkaWF0ZVxjbG9zZW91dFxtYWNzY3JpYmJsZQorICAgXGxldFx4ZWF0c3BhY2VzXGVhdHNwYWNlcworICAgXGlucHV0IFxqb2JuYW1lLnRtcAorICAgXGVuZGdyb3VwCit9CitcZWxzZQorXGRlZlxzY2FubWFjcm8jMXslCitcYmVnaW5ncm91cCBcbmV3bGluZWNoYXJgXF5eTQorJSBVbmRvIGNhdGNvZGUgY2hhbmdlcyBvZiBcc3RhcnRjb250ZW50cyBhbmQgXGRvcHJpbnRpbmRleAorXGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cb3RoZXIgXGVzY2FwZWNoYXI9YFxACitcbGV0XHhlYXRzcGFjZXNcZWF0c3BhY2VzXHNjYW50b2tlbnN7IzFcZW5kaW5wdXR9XGVuZGdyb3VwfQorXGZpCisKK1xuZXdjb3VudFxwYXJhbW5vICAgJSBDb3VudCBvZiBwYXJhbWV0ZXJzCitcbmV3dG9rc1xtYWNuYW1lICAgICUgTWFjcm8gbmFtZQorXG5ld2lmXGlmcmVjdXJzaXZlICAlIElzIGl0IHJlY3Vyc2l2ZT8KK1xkZWZcbWFjcm9saXN0e30gICAgJSBMaXN0IG9mIGFsbCBkZWZpbmVkIG1hY3JvcyBpbiB0aGUgZm9ybQorICAgICAgICAgICAgICAgICAgICAlIFxkb1xtYWNybzFcZG9cbWFjcm8yLi4uCisKKyUgVXRpbGl0eSByb3V0aW5lcy4KKyUgVGhpc2RvZXMgXGxldCAjMSA9ICMyLCBleGNlcHQgd2l0aCBcY3NuYW1lcy4KK1xkZWZcY3NsZXQjMSMyeyUKK1xleHBhbmRhZnRlclxleHBhbmRhZnRlcgorXGV4cGFuZGFmdGVyXGxldAorXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCitcY3NuYW1lIzFcZW5kY3NuYW1lCitcY3NuYW1lIzJcZW5kY3NuYW1lfQorCislIFRyaW0gbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIG9mZiBhIHN0cmluZy4KKyUgQ29uY2VwdHMgZnJvbSBhcm8tYmVuZCBwcm9ibGVtIDE1IChzZWUgQ1RBTikuCit7XGNhdGNvZGVgXEA9MTEKK1xnZGVmXGVhdHNwYWNlcyAjMXtcZXhwYW5kYWZ0ZXJcdHJpbUBcZXhwYW5kYWZ0ZXJ7IzEgfX0KK1xnZGVmXHRyaW1AICMxe1x0cmltQEAgQCMxIEAgIzEgQCBAQH0KK1xnZGVmXHRyaW1AQCAjMUAgIzJAICMzQEB7XHRyaW1AQEBcZW1wdHkgIzIgQH0KK1xkZWZcdW5icmFjZSMxeyMxfQorXHVuYnJhY2V7XGdkZWZcdHJpbUBAQCAjMSB9ICMyQHsjMX0KK30KKworJSBUcmltIGEgc2luZ2xlIHRyYWlsaW5nIF5eTSBvZmYgYSBzdHJpbmcuCit7XGNhdGNvZGVgXF5eTT1cb3RoZXIgXGNhdGNvZGVgXFE9MyUKK1xnZGVmXGVhdGNyICMxe1xlYXRjcmEgIzFRXl5NUX0lCitcZ2RlZlxlYXRjcmEjMV5eTVF7XGVhdGNyYiMxUX0lCitcZ2RlZlxlYXRjcmIjMVEjMlF7IzF9JQorfQorCislIE1hY3JvIGJvZGllcyBhcmUgYWJzb3JiZWQgYXMgYW4gYXJndW1lbnQgaW4gYSBjb250ZXh0IHdoZXJlCislIGFsbCBjaGFyYWN0ZXJzIGFyZSBjYXRjb2RlIDEwLCAxMSBvciAxMiwgZXhjZXB0IFwgd2hpY2ggaXMgYWN0aXZlCislIChhcyBpbiBub3JtYWwgdGV4aW5mbykuIEl0IGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgXC4KKworJSBJdCdzIG5lY2Vzc2FyeSB0byBoYXZlIGhhcmQgQ1JzIHdoZW4gdGhlIG1hY3JvIGlzIGV4ZWN1dGVkLiBUaGlzIGlzCislIGRvbmUgYnkgIG1ha2luZyBeXk0gKFxlbmRsaW5lY2hhcikgY2F0Y29kZSAxMiB3aGVuIHJlYWRpbmcgdGhlIG1hY3JvCislIGJvZHksIGFuZCB0aGVuIG1ha2luZyBpdCB0aGUgXG5ld2xpbmVjaGFyIGluIFxzY2FubWFjcm8uCisKK1xkZWZcbWFjcm9ib2R5Y3R4dHslCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF89XG90aGVyCisgIFxjYXRjb2RlYFx8PVxvdGhlcgorICBcY2F0Y29kZWBcPD1cb3RoZXIKKyAgXGNhdGNvZGVgXD49XG90aGVyCisgIFxjYXRjb2RlYFwrPVxvdGhlcgorICBcY2F0Y29kZWBcez1cb3RoZXIKKyAgXGNhdGNvZGVgXH09XG90aGVyCisgIFxjYXRjb2RlYFxAPVxvdGhlcgorICBcY2F0Y29kZWBcXl5NPVxvdGhlcgorICBcdXNlbWJvZHliYWNrc2xhc2h9CisKK1xkZWZcbWFjcm9hcmdjdHh0eyUKKyAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXCs9XG90aGVyCisgIFxjYXRjb2RlYFxAPVxvdGhlcgorICBcY2F0Y29kZWBcXD1cb3RoZXJ9CisKKyUgXG1ib2R5YmFja3NsYXNoIGlzIHRoZSBkZWZpbml0aW9uIG9mIFwgaW4gQG1hY3JvIGJvZGllcy4KKyUgSXQgbWFwcyBcZm9vXCA9PiBcY3NuYW1lIG1hY2FyZy5mb29cZW5kY3NuYW1lID0+ICNOCislIHdoZXJlIE4gaXMgdGhlIG1hY3JvIHBhcmFtZXRlciBudW1iZXIuCislIFdlIGRlZmluZSBcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1lIHRvIGJlIFxyZWFsYmFja3NsYXNoLCBzbworJSBcXCBpbiBtYWNybyByZXBsYWNlbWVudCB0ZXh0IGdldHMgeW91IGEgYmFja3NsYXNoLgorCit7XGNhdGNvZGVgQD0wIEBjYXRjb2RlYEBcPUBhY3RpdmUKKyBAZ2RlZkB1c2VtYm9keWJhY2tzbGFzaHtAbGV0XD1AbWJvZHliYWNrc2xhc2h9CisgQGdkZWZAbWJvZHliYWNrc2xhc2gjMVx7QGNzbmFtZSBtYWNhcmcuIzFAZW5kY3NuYW1lfQorfQorXGV4cGFuZGFmdGVyXGRlZlxjc25hbWUgbWFjYXJnLlxlbmRjc25hbWV7XHJlYWxiYWNrc2xhc2h9CisKK1xkZWZcbWFjcm97XHJlY3Vyc2l2ZWZhbHNlXHBhcnNlYXJnXG1hY3JveHh4fQorXGRlZlxybWFjcm97XHJlY3Vyc2l2ZXRydWVccGFyc2VhcmdcbWFjcm94eHh9CisKK1xkZWZcbWFjcm94eHgjMXslCisgIFxnZXRhcmdzeyMxfSUgICAgICAgICAgIG5vdyBcbWFjbmFtZSBpcyB0aGUgbWFjbmFtZSBhbmQgXGFyZ2wgdGhlIGFyZ2xpc3QKKyAgXGlmeFxhcmdsXGVtcHR5ICAgICAgICUgbm8gYXJndW1lbnRzCisgICAgIFxwYXJhbW5vPTAlCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxwYXJzZW1hcmdkZWYgXGFyZ2w7JQorICBcZmkKKyAgXGlmMVxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lCisgICAgIFxtZXNzYWdle1dhcm5pbmc6IHJlZGVmaW5pbmcgXHRoZVxtYWNuYW1lfSUKKyAgXGVsc2UKKyAgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgXHRoZVxtYWNuYW1lXGVuZGNzbmFtZSBccmVsYXgKKyAgICAgXGVsc2UgXGVycm1lc3NhZ2V7TWFjcm8gbmFtZSBcdGhlXG1hY25hbWVcc3BhY2UgYWxyZWFkeSBkZWZpbmVkfVxmaQorICAgICBcZ2xvYmFsXGNzbGV0e21hY3NhdmUuXHRoZVxtYWNuYW1lfXtcdGhlXG1hY25hbWV9JQorICAgICBcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgaXNtYWNyby5cdGhlXG1hY25hbWVcZW5kY3NuYW1lPTElCisgICAgICUgQWRkIHRoZSBtYWNyb25hbWUgdG8gXG1hY3JvbGlzdAorICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XG1hY3JvbGlzdFxkb30lCisgICAgIFx4ZGVmXG1hY3JvbGlzdHtcdGhlXHRva3MwCisgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV9JQorICBcZmkKKyAgXGJlZ2luZ3JvdXAgXG1hY3JvYm9keWN0eHQKKyAgXGlmcmVjdXJzaXZlIFxleHBhbmRhZnRlclxwYXJzZXJtYWNib2R5CisgIFxlbHNlIFxleHBhbmRhZnRlclxwYXJzZW1hY2JvZHkKKyAgXGZpfQorCitcZGVmXHVubWFjcm97XHBhcnNlYXJnXGRvdW5tYWNyb30KK1xkZWZcZG91bm1hY3JvIzF7JQorICBcaWYxXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZQorICAgIFxnbG9iYWxcY3NsZXR7IzF9e21hY3NhdmUuIzF9JQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0IFxjc25hbWUgaXNtYWNyby4jMVxlbmRjc25hbWU9MCUKKyAgICAlIFJlbW92ZSB0aGUgbWFjcm8gbmFtZSBmcm9tIFxtYWNyb2xpc3Q6CisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIzFcZW5kY3NuYW1lIFxyZWxheAorICAgICAgXGxldFxkb1x1bm1hY3JvZG8KKyAgICAgIFx4ZGVmXG1hY3JvbGlzdHtcbWFjcm9saXN0fSUKKyAgICBcZW5kZ3JvdXAKKyAgXGVsc2UKKyAgICBcZXJybWVzc2FnZXtNYWNybyAjMSBub3QgZGVmaW5lZH0lCisgIFxmaQorfQorCislIENhbGxlZCBieSBcZG8gZnJvbSBcZG91bm1hY3JvIG9uIGVhY2ggbWFjcm8uICBUaGUgaWRlYSBpcyB0byBvbWl0IGFueQorJSBtYWNybyBkZWZpbml0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIFxyZWxheC4KKyUKK1xkZWZcdW5tYWNyb2RvIzF7JQorICBcaWZ4IzFccmVsYXgKKyAgICAlIHJlbW92ZSB0aGlzCisgIFxlbHNlCisgICAgXG5vZXhwYW5kXGRvIFxub2V4cGFuZCAjMSUKKyAgXGZpCit9CisKKyUgVGhpcyBtYWtlcyB1c2Ugb2YgdGhlIG9ic2N1cmUgZmVhdHVyZSB0aGF0IGlmIHRoZSBsYXN0IHRva2VuIG9mIGEKKyUgPHBhcmFtZXRlciBsaXN0PiBpcyAjLCB0aGVuIHRoZSBwcmVjZWRpbmcgYXJndW1lbnQgaXMgZGVsaW1pdGVkIGJ5CislIGFuIG9wZW5pbmcgYnJhY2UsIGFuZCB0aGF0IG9wZW5pbmcgYnJhY2UgaXMgbm90IGNvbnN1bWVkLgorXGRlZlxnZXRhcmdzIzF7XGdldGFyZ3N4eHgjMXt9fQorXGRlZlxnZXRhcmdzeHh4IzEje1xnZXRtYWNuYW1lICMxIFxyZWxheFxnZXRtYWNhcmdzfQorXGRlZlxnZXRtYWNuYW1lICMxICMyXHJlbGF4e1xtYWNuYW1lPXsjMX19CitcZGVmXGdldG1hY2FyZ3MjMXtcZGVmXGFyZ2x7IzF9fQorCislIFBhcnNlIHRoZSBvcHRpb25hbCB7cGFyYW1zfSBsaXN0LiAgU2V0IHVwIFxwYXJhbW5vIGFuZCBccGFyYW1saXN0CislIHNvIFxkZWZtYWNybyBrbm93cyB3aGF0IHRvIGRvLiAgRGVmaW5lIFxtYWNhcmcuYmxhaCBmb3IgZWFjaCBibGFoCislIGluIHRoZSBwYXJhbXMgbGlzdCwgdG8gYmUgIyNOIHdoZXJlIE4gaXMgdGhlIHBvc2l0aW9uIGluIHRoYXQgbGlzdC4KKyUgVGhhdCBnZXRzIHVzZWQgYnkgXG1ib2R5YmFja3NsYXNoIChhYm92ZSkuCisKKyUgV2UgbmVlZCB0byBnZXQgYG1hY3JvIHBhcmFtZXRlciBjaGFyICMnIGludG8gc2V2ZXJhbCBkZWZpbml0aW9ucy4KKyUgVGhlIHRlY2huaXF1ZSB1c2VkIGlzIHN0b2xlbiBmcm9tIExhVGVYOiAgbGV0IFxoYXNoIGJlIHNvbWV0aGluZworJSB1bmV4cGFuZGFibGUsIGluc2VydCB0aGF0IHdoZXJldmVyIHlvdSBuZWVkIGEgIywgYW5kIHRoZW4gcmVkZWZpbmUKKyUgaXQgdG8gIyBqdXN0IGJlZm9yZSB1c2luZyB0aGUgdG9rZW4gbGlzdCBwcm9kdWNlZC4KKyUKKyUgVGhlIHNhbWUgdGVjaG5pcXVlIGlzIHVzZWQgdG8gcHJvdGVjdCBcZWF0c3BhY2VzIHRpbGwganVzdCBiZWZvcmUKKyUgdGhlIG1hY3JvIGlzIHVzZWQuCisKK1xkZWZccGFyc2VtYXJnZGVmIzE7e1xwYXJhbW5vPTBcZGVmXHBhcmFtbGlzdHt9JQorICAgICAgICBcbGV0XGhhc2hccmVsYXhcbGV0XHhlYXRzcGFjZXNccmVsYXhccGFyc2VtYXJnZGVmeHh4IzEsOyx9CitcZGVmXHBhcnNlbWFyZ2RlZnh4eCMxLHslCisgIFxpZiMxO1xsZXRcbmV4dD1ccmVsYXgKKyAgXGVsc2UgXGxldFxuZXh0PVxwYXJzZW1hcmdkZWZ4eHgKKyAgICBcYWR2YW5jZVxwYXJhbW5vIGJ5IDElCisgICAgXGV4cGFuZGFmdGVyXGVkZWZcY3NuYW1lIG1hY2FyZy5cZWF0c3BhY2VzeyMxfVxlbmRjc25hbWUKKyAgICAgICAge1x4ZWF0c3BhY2Vze1xoYXNoXHRoZVxwYXJhbW5vfX0lCisgICAgXGVkZWZccGFyYW1saXN0e1xwYXJhbWxpc3RcaGFzaFx0aGVccGFyYW1ubyx9JQorICBcZmlcbmV4dH0KKworJSBUaGVzZSB0d28gY29tbWFuZHMgcmVhZCByZWN1cnNpdmUgYW5kIG5vbnJlY3Vyc2l2ZSBtYWNybyBib2RpZXMuCislIChUaGV5J3JlIGRpZmZlcmVudCBzaW5jZSByZWMgYW5kIG5vbnJlYyBtYWNyb3MgZW5kIGRpZmZlcmVudGx5LikKKworXGxvbmdcZGVmXHBhcnNlbWFjYm9keSMxQGVuZCBtYWNybyUKK3tceGRlZlx0ZW1we1xlYXRjcnsjMX19XGVuZGdyb3VwXGRlZm1hY3JvfSUKK1xsb25nXGRlZlxwYXJzZXJtYWNib2R5IzFAZW5kIHJtYWNybyUKK3tceGRlZlx0ZW1we1xlYXRjcnsjMX19XGVuZGdyb3VwXGRlZm1hY3JvfSUKKworJSBUaGlzIGRlZmluZXMgdGhlIG1hY3JvIGl0c2VsZi4gVGhlcmUgYXJlIHNpeCBjYXNlczogcmVjdXJzaXZlIGFuZAorJSBub25yZWN1cnNpdmUgbWFjcm9zIG9mIHplcm8sIG9uZSwgYW5kIG1hbnkgYXJndW1lbnRzLgorJSBNdWNoIG1hZ2ljIHdpdGggXGV4cGFuZGFmdGVyIGhlcmUuCislIFx4ZGVmIGlzIHVzZWQgc28gdGhhdCBtYWNybyBkZWZpbml0aW9ucyB3aWxsIHN1cnZpdmUgdGhlIGZpbGUKKyUgdGhleSdyZSBkZWZpbmVkIGluOyBAaW5jbHVkZSByZWFkcyB0aGUgZmlsZSBpbnNpZGUgYSBncm91cC4KK1xkZWZcZGVmbWFjcm97JQorICBcbGV0XGhhc2g9IyMlIGNvbnZlcnQgcGxhY2Vob2xkZXJzIHRvIG1hY3JvIHBhcmFtZXRlciBjaGFycworICBcaWZyZWN1cnNpdmUKKyAgICBcaWZjYXNlXHBhcmFtbm8KKyAgICAlIDAKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXG9yICUgMQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGJyYWNlb3JsaW5lCisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgXGVncm91cFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcZWxzZSAlIG1hbnkKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgICBcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUKKyAgICAgICAgICBccGFyYW1saXN0e1xlZ3JvdXBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfX0lCisgICAgXGZpCisgIFxlbHNlCisgICAgXGlmY2FzZVxwYXJhbW5vCisgICAgJSAwCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxvciAlIDEKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxub2V4cGFuZFxicmFjZW9ybGluZQorICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgXGVncm91cAorICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGVsc2UgJSBtYW55CisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lIyMxeyUKKyAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUgIyMxLH0lCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmCisgICAgICBcZXhwYW5kYWZ0ZXJcZXhwYW5kYWZ0ZXIKKyAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgXHBhcmFtbGlzdHslCisgICAgICAgICAgXGVncm91cAorICAgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgICBcbm9leHBhbmRcc2Nhbm1hY3Jve1x0ZW1wfVxlZ3JvdXB9JQorICAgIFxmaQorICBcZml9CisKK1xkZWZcbm9yZWN1cnNlIzF7XGJncm91cFxjc2xldHsjMX17bWFjc2F2ZS4jMX19CisKKyUgXGJyYWNlb3JsaW5lIGRlY2lkZXMgd2hldGhlciB0aGUgbmV4dCBub253aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBhCislIHsuICBJZiBzbyBpdCByZWFkcyB1cCB0byB0aGUgY2xvc2luZyB9LCBpZiBub3QsIGl0IHJlYWRzIHRoZSB3aG9sZQorJSBsaW5lLiAgV2hhdGV2ZXIgd2FzIHJlYWQgaXMgdGhlbiBmZWQgdG8gdGhlIG5leHQgY29udHJvbCBzZXF1ZW5jZQorJSBhcyBhbiBhcmd1bWVudCAoYnkgXHBhcnNlYnJhY2Ugb3IgXHBhcnNlYXJnKQorXGRlZlxicmFjZW9ybGluZSMxe1xsZXRcbmV4dD0jMVxmdXR1cmVsZXRcbmNoYXJcYnJhY2VvcmxpbmV4eHh9CitcZGVmXGJyYWNlb3JsaW5leHh4eyUKKyAgXGlmeFxuY2hhclxiZ3JvdXBcZWxzZQorICAgIFxleHBhbmRhZnRlclxwYXJzZWFyZworICBcZmkgXG5leHR9CisKKyUgV2UgbWFudCB0byBkaXNhYmxlIGFsbCBtYWNyb3MgZHVyaW5nIFxzaGlwb3V0IHNvIHRoYXQgdGhleSBhcmUgbm90CislIGV4cGFuZGVkIGJ5IFx3cml0ZS4KK1xkZWZcdHVybm9mZm1hY3Jvc3tcYmVnaW5ncm91cCBcZGVmXGRvIyMxe1xsZXRcbm9leHBhbmQjIzE9XHJlbGF4fSUKKyAgXGVkZWZcbmV4dHtcbWFjcm9saXN0fVxleHBhbmRhZnRlclxlbmRncm91cFxuZXh0fQorCisKKyUgQGFsaWFzLgorJSBXZSBuZWVkIHNvbWUgdHJpY2tlcnkgdG8gcmVtb3ZlIHRoZSBvcHRpb25hbCBzcGFjZXMgYXJvdW5kIHRoZSBlcXVhbAorJSBzaWduLiAgSnVzdCBtYWtlIHRoZW0gYWN0aXZlIGFuZCB0aGVuIGV4cGFuZCB0aGVtIGFsbCB0byBub3RoaW5nLgorXGRlZlxhbGlhc3tcYmVnaW5ncm91cFxvYmV5c3BhY2VzXHBhcnNlYXJnXGFsaWFzeHh4fQorXGRlZlxhbGlhc3h4eCAjMXtcYWxpYXN5eXkjMVxyZWxheH0KK1xkZWZcYWxpYXN5eXkgIzE9IzJccmVsYXh7XGlnbm9yZWFjdGl2ZXNwYWNlcworXGVkZWZcbmV4dHtcZ2xvYmFsXGxldFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWUjMVxlbmRjc25hbWU9JQorICAgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lIzJcZW5kY3NuYW1lfSUKK1xleHBhbmRhZnRlclxlbmRncm91cFxuZXh0fQorCisKK1xtZXNzYWdle2Nyb3NzIHJlZmVyZW5jZXMsfQorCitcbmV3d3JpdGVcYXV4ZmlsZQorCitcbmV3aWZcaWZoYXZleHJlZnMgICAgJSBUcnVlIGlmIHhyZWYgdmFsdWVzIGFyZSBrbm93bi4KK1xuZXdpZlxpZndhcm5lZHhyZWZzICAlIFRydWUgaWYgd2Ugd2FybmVkIG9uY2UgdGhhdCB0aGV5IGFyZW4ndCBrbm93bi4KKworJSBAaW5mb3JlZiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KK1xkZWZcaW5mb3JlZiAjMXtcaW5mb3JlZnp6eiAjMSwsLCwqKn0KK1xkZWZcaW5mb3JlZnp6eiAjMSwjMiwjMywjNCoqe1xwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKKyAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CisKKyUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgorJSBjcm9zcy1yZWZlcmVuY2VzLgorXGRlZlxub2Rle1xFTlZjaGVja1xwYXJzZWFyZ1xub2Rlenp6fQorXGRlZlxub2Rlenp6IzF7XG5vZGV4eHggIzEsXGZpbmlzaG5vZGVwYXJzZX0KK1xkZWZcbm9kZXh4eCMxLCMyXGZpbmlzaG5vZGVwYXJzZXtcZ2RlZlxsYXN0bm9kZXsjMX19CitcbGV0XG53bm9kZT1cbm9kZQorXGxldFxsYXN0bm9kZT1cZW1wdHkKKworJSBXcml0ZSBhIGNyb3NzLXJlZmVyZW5jZSBkZWZpbml0aW9uIGZvciB0aGUgY3VycmVudCBub2RlLiAgIzEgaXMgdGhlCislIHR5cGUgKFludW1iZXJlZCwgWWFwcGVuZGl4LCBZbm90aGluZykuCislIAorXGRlZlxkb25vZGVyZWYjMXslCisgIFxpZnhcbGFzdG5vZGVcZW1wdHlcZWxzZQorICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlclxleHBhbmRhZnRlclxzZXRyZWZ7XGxhc3Rub2RlfXsjMX0lCisgICAgXGdsb2JhbFxsZXRcbGFzdG5vZGU9XGVtcHR5CisgIFxmaQorfQorCislIEBhbmNob3J7TkFNRX0gLS0gZGVmaW5lIHhyZWYgdGFyZ2V0IGF0IGFyYml0cmFyeSBwb2ludC4KKyUKK1xuZXdjb3VudFxzYXZlc2ZyZWdpc3RlcgorJQorXGdkZWZcc2F2ZXNme1xyZWxheCBcaWZobW9kZSBcc2F2ZXNmcmVnaXN0ZXI9XHNwYWNlZmFjdG9yIFxmaX0KK1xnZGVmXHJlc3RvcmVzZntccmVsYXggXGlmaG1vZGUgXHNwYWNlZmFjdG9yPVxzYXZlc2ZyZWdpc3RlciBcZml9CitcZ2RlZlxhbmNob3IjMXtcc2F2ZXNmIFxzZXRyZWZ7IzF9e1lub3RoaW5nfVxyZXN0b3Jlc2YgXGlnbm9yZXNwYWNlc30KKworJSBcc2V0cmVme05BTUV9e1NOVH0gZGVmaW5lcyBhIGNyb3NzLXJlZmVyZW5jZSBwb2ludCBOQU1FIChhIG5vZGUgb3IgYW4KKyUgYW5jaG9yKSwgbmFtZWx5IE5BTUUtdGl0bGUgKHRoZSBjb3JyZXNwb25kaW5nIEBjaGFwdGVyL2V0Yy4gbmFtZSksCislIE5BTUUtcGcgKHRoZSBwYWdlIG51bWJlciksIGFuZCBOQU1FLXNudCAoc2VjdGlvbiBudW1iZXIgYW5kIHR5cGUpLgorJSBDYWxsZWQgZnJvbSBcZm9vbm9kZXJlZi4KKyUgCislIFdlIGhhdmUgdG8gc2V0IGR1bW1pZXMgc28gY29tbWFuZHMgc3VjaCBhcyBAY29kZSBpbiBhIHNlY3Rpb24gdGl0bGUKKyUgYXJlbid0IGV4cGFuZGVkLiAgSXQgd291bGQgYmUgbmljZXIgbm90IHRvIGV4cGFuZCB0aGUgdGl0bGVzIGluIHRoZQorJSBmaXJzdCBwbGFjZSwgYnV0IHRoYXQgaXMgaGFyZCB0byBkby4KKyUKKyUgTGlrZXdpc2UsIHVzZSBcdHVybm9mZmFjdGl2ZSBzbyB0aGF0IHB1bmN0dWF0aW9uIGNoYXJzIHN1Y2ggYXMgdW5kZXJzY29yZQorJSBhbmQgYmFja3NsYXNoIHdvcmsgaW4gbm9kZSBuYW1lcy4KKyUKK1xkZWZcc2V0cmVmIzEjMnt7JQorICBcYXRkdW1taWVzCisgIFxwZGZta2Rlc3R7IzF9JQorICAlCisgIFxpZmxpbmtzCisgICAgXHR1cm5vZmZhY3RpdmUKKyAgICBcZG9zZXRxeyMxLXRpdGxlfXtZdGl0bGV9JQorICAgIFxkb3NldHF7IzEtcGd9e1lwYWdlbnVtYmVyfSUKKyAgICBcZG9zZXRxeyMxLXNudH17IzJ9JQorICBcZmkKK319CisKKyUgQHhyZWYsIEBweHJlZiwgYW5kIEByZWYgZ2VuZXJhdGUgY3Jvc3MtcmVmZXJlbmNlcy4gIEZvciBceHJlZlgsICMxIGlzCislIHRoZSBub2RlIG5hbWUsICMyIHRoZSBuYW1lIG9mIHRoZSBJbmZvIGNyb3NzLXJlZmVyZW5jZSwgIzMgdGhlIHByaW50ZWQKKyUgbm9kZSBuYW1lLCAjNCB0aGUgbmFtZSBvZiB0aGUgSW5mbyBmaWxlLCAjNSB0aGUgbmFtZSBvZiB0aGUgcHJpbnRlZAorJSBtYW51YWwuICBBbGwgYnV0IHRoZSBub2RlIG5hbWUgY2FuIGJlIG9taXR0ZWQuCislCitcZGVmXHB4cmVmIzF7XHB1dHdvcmRzZWV7fSBceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZiMxe1xwdXR3b3JkU2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHJlZiMxe1x4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlx4cmVmWFsjMSwjMiwjMywjNCwjNSwjNl17XGJlZ2luZ3JvdXAKKyAgXHVuc2Vwc3BhY2VzCisgIFxkZWZccHJpbnRlZG1hbnVhbHtcaWdub3Jlc3BhY2VzICM1fSUKKyAgXGRlZlxwcmludGVkbm9kZW5hbWV7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxzZXRib3gxPVxoYm94e1xwcmludGVkbWFudWFsfSUKKyAgXHNldGJveDA9XGhib3h7XHByaW50ZWRub2RlbmFtZX0lCisgIFxpZmRpbSBcd2QwID0gMHB0CisgICAgJSBObyBwcmludGVkIG5vZGUgbmFtZSB3YXMgZXhwbGljaXRseSBnaXZlbi4KKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBTRVR4cmVmLWF1dG9tYXRpYy1zZWN0aW9uLXRpdGxlXGVuZGNzbmFtZVxyZWxheAorICAgICAgJSBVc2UgdGhlIG5vZGUgbmFtZSBpbnNpZGUgdGhlIHNxdWFyZSBicmFja2V0cy4KKyAgICAgIFxkZWZccHJpbnRlZG5vZGVuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgIFxlbHNlCisgICAgICAlIFVzZSB0aGUgYWN0dWFsIGNoYXB0ZXIvc2VjdGlvbiB0aXRsZSBhcHBlYXIgaW5zaWRlCisgICAgICAlIHRoZSBzcXVhcmUgYnJhY2tldHMuICBVc2UgdGhlIHJlYWwgc2VjdGlvbiB0aXRsZSBpZiB3ZSBoYXZlIGl0LgorICAgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgICAgJSBJdCBpcyBpbiBhbm90aGVyIG1hbnVhbCwgc28gd2UgZG9uJ3QgaGF2ZSBpdC4KKyAgICAgICAgXGRlZlxwcmludGVkbm9kZW5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgICAlIFdlIGtub3cgdGhlIHJlYWwgdGl0bGUgaWYgd2UgaGF2ZSB0aGUgeHJlZiB2YWx1ZXMuCisgICAgICAgICAgXGRlZlxwcmludGVkbm9kZW5hbWV7XHJlZnh7IzEtdGl0bGV9e319JQorICAgICAgICBcZWxzZQorICAgICAgICAgICUgT3RoZXJ3aXNlIGp1c3QgY29weSB0aGUgSW5mbyBub2RlIG5hbWUuCisgICAgICAgICAgXGRlZlxwcmludGVkbm9kZW5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICAgIFxmaSUKKyAgICAgIFxmaQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIElmIHdlIHVzZSBcdW5oYm94MCBhbmQgXHVuaGJveDEgdG8gcHJpbnQgdGhlIG5vZGUgbmFtZXMsIFRlWCBkb2VzIG5vdAorICAlIGluc2VydCBlbXB0eSBkaXNjcmV0aW9uYXJpZXMgYWZ0ZXIgaHlwaGVucywgd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsCisgICUgbm90IGZpbmQgYSBsaW5lIGJyZWFrIGF0IGEgaHlwaGVuIGluIGEgbm9kZSBuYW1lcy4gIFNpbmNlIHNvbWUgbWFudWFscworICAlIGFyZSBiZXN0IHdyaXR0ZW4gd2l0aCBmYWlybHkgbG9uZyBub2RlIG5hbWVzLCBjb250YWluaW5nIGh5cGhlbnMsIHRoaXMKKyAgJSBpcyBhIGxvc3MuICBUaGVyZWZvcmUsIHdlIGdpdmUgdGhlIHRleHQgb2YgdGhlIG5vZGUgbmFtZSBhZ2Fpbiwgc28gaXQKKyAgJSBpcyBhcyBpZiBUZVggaXMgc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKyAgXGlmcGRmCisgICAgXGxlYXZldm1vZGUKKyAgICBcZ2V0ZmlsZW5hbWV7IzR9JQorICAgIHtcdHVybm9mZmFjdGl2ZSBcb3RoZXJiYWNrc2xhc2gKKyAgICAgXGlmbnVtXGZpbGVuYW1lbGVuZ3RoPjAKKyAgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgIGdvdG8gZmlsZXtcdGhlXGZpbGVuYW1lLnBkZn0gbmFtZXsjMX0lCisgICAgIFxlbHNlCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIG5hbWV7XHBkZm1rcGdueyMxfX0lCisgICAgIFxmaQorICAgIH0lCisgICAgXGxpbmtjb2xvcgorICBcZmkKKyAgJQorICBcaWZkaW0gXHdkMSA+IDBwdAorICAgIFxwdXR3b3Jkc2VjdGlvbnt9IGBgXHByaW50ZWRub2RlbmFtZScnIFxwdXR3b3JkaW57fSBcY2l0ZXtccHJpbnRlZG1hbnVhbH0lCisgIFxlbHNlCisgICAgJSBfIChmb3IgZXhhbXBsZSkgaGFzIHRvIGJlIHRoZSBjaGFyYWN0ZXIgXyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZQorICAgICUgY29udHJvbCBzZXF1ZW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub2RlLCBidXQgaXQgaGFzIHRvIGV4cGFuZAorICAgICUgaW50byB0aGUgdXN1YWwgXGxlYXZldm1vZGUuLi5cdnJ1bGUgc3R1ZmYgZm9yIHB1cnBvc2VzIG9mCisgICAgJSBwcmludGluZy4gU28gd2UgXHR1cm5vZmZhY3RpdmUgZm9yIHRoZSBccmVmeC1zbnQsIGJhY2sgb24gZm9yIHRoZQorICAgICUgcHJpbnRpbmcsIGJhY2sgb2ZmIGZvciB0aGUgXHJlZngtcGcuCisgICAge1x0dXJub2ZmYWN0aXZlIFxvdGhlcmJhY2tzbGFzaAorICAgICAlIE9ubHkgb3V0cHV0IGEgZm9sbG93aW5nIHNwYWNlIGlmIHRoZSAtc250IHJlZiBpcyBub25lbXB0eTsgZm9yCisgICAgICUgQHVubnVtYmVyZWQgYW5kIEBhbmNob3IsIGl0IHdvbid0IGJlLgorICAgICBcc2V0Ym94MiA9IFxoYm94e1xpZ25vcmVzcGFjZXMgXHJlZnh7IzEtc250fXt9fSUKKyAgICAgXGlmZGltIFx3ZDIgPiAwcHQgXHJlZnh7IzEtc250fVxzcGFjZVxmaQorICAgIH0lCisgICAgJSBvdXRwdXQgdGhlIGBbbXlub2RlXScgdmlhIGEgbWFjcm8uCisgICAgXHhyZWZwcmludG5vZGVuYW1lXHByaW50ZWRub2RlbmFtZQorICAgICUKKyAgICAlIEJ1dCB3ZSBhbHdheXMgd2FudCBhIGNvbW1hIGFuZCBhIHNwYWNlOgorICAgICxcc3BhY2UKKyAgICAlCisgICAgJSBvdXRwdXQgdGhlIGBwYWdlIDMnLgorICAgIFx0dXJub2ZmYWN0aXZlIFxvdGhlcmJhY2tzbGFzaCBccHV0d29yZHBhZ2VcdGllXHJlZnh7IzEtcGd9e30lCisgIFxmaQorICBcZW5kbGluaworXGVuZGdyb3VwfQorCislIFRoaXMgbWFjcm8gaXMgY2FsbGVkIGZyb20gXHhyZWZYIGZvciB0aGUgYFtub2RlbmFtZV0nIHBhcnQgb2YgeHJlZgorJSBvdXRwdXQuICBJdCdzIGEgc2VwYXJhdGUgbWFjcm8gb25seSBzbyBpdCBjYW4gYmUgY2hhbmdlZCBtb3JlIGVhc2lseSwKKyUgc2luY2Ugbm90IHNxdWFyZSBicmFja2V0cyBkb24ndCB3b3JrIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CislIG9uZSB0aGF0IEJvYiBpcyB3b3JraW5nIG9uIDopLgorJQorXGRlZlx4cmVmcHJpbnRub2RlbmFtZSMxe1sjMV19CisKKyUgXGRvc2V0cSBpcyBjYWxsZWQgZnJvbSBcc2V0cmVmIHRvIGRvIHRoZSBhY3R1YWwgXHdyaXRlIChcaWZsaW5rcykuCislCitcZGVmXGRvc2V0cSMxIzJ7JQorICBcZWRlZlxuZXh0e1x3cml0ZVxhdXhmaWxle1xpbnRlcm5hbHNldHF7IzF9eyMyfX19JQorICBcbmV4dAorfQorCislIFxpbnRlcm5hbHNldHF7Zm9vfXtwYWdlfSBleHBhbmRzIGludG8KKyUgICBDSEFSQUNURVJTIEB4cmRlZntmb299ey4uLmV4cGFuc2lvbiBvZiBccGFnZS4uLn0KK1xkZWZcaW50ZXJuYWxzZXRxIzEjMntAeHJkZWZ7IzF9e1xjc25hbWUgIzJcZW5kY3NuYW1lfX0KKworJSBUaGluZ3MgdG8gYmUgZXhwYW5kZWQgYnkgXGludGVybmFsc2V0cS4KKyUKK1xkZWZcWXBhZ2VudW1iZXJ7XG5vZXhwYW5kXGZvbGlvfQorXGRlZlxZdGl0bGV7XHRoaXNzZWN0aW9ufQorXGRlZlxZbm90aGluZ3t9CitcZGVmXFlvbWl0ZnJvbXRvY3t9CitcZGVmXFludW1iZXJlZHslCisgIFxpZm51bVxzZWNubz0wCisgICAgXHB1dHdvcmRDaGFwdGVyQHRpZSBcdGhlXGNoYXBubworICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgXHRoZVxjaGFwbm8uXHRoZVxzZWNubworICBcZWxzZSBcaWZudW1cc3Vic3Vic2Vjbm89MAorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUgXHRoZVxjaGFwbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vCisgIFxlbHNlCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNubworICBcZmlcZmlcZmkKK30KK1xkZWZcWWFwcGVuZGl4eyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICAgXHB1dHdvcmRBcHBlbmRpeEB0aWUgQGNoYXJcdGhlXGFwcGVuZGl4bm97fSUKKyAgXGVsc2UgXGlmbnVtXHN1YnNlY25vPTAKKyAgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBAY2hhclx0aGVcYXBwZW5kaXhuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBAY2hhclx0aGVcYXBwZW5kaXhuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllCisgICAgICBAY2hhclx0aGVcYXBwZW5kaXhuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNubworICBcZmlcZmlcZmkKK30KKworJSBVc2UgVGVYIDMuMCdzIFxpbnB1dGxpbmVubyB0byBnZXQgdGhlIGxpbmUgbnVtYmVyLCBmb3IgYmV0dGVyIGVycm9yCislIG1lc3NhZ2VzLCBidXQgaWYgd2UncmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgVGVYLCBkb24ndCBkbyBhbnl0aGluZy4KKyUKK1xpZnhcaW5wdXRsaW5lbm9cdGhpc2lzdW5kZWZpbmVkCisgIFxsZXRcbGluZW51bWJlciA9IFxlbXB0eSAlIFByZS0zLjAuCitcZWxzZQorICBcZGVmXGxpbmVudW1iZXJ7XHRoZVxpbnB1dGxpbmVubzpcc3BhY2V9CitcZmkKKworJSBEZWZpbmUgXHJlZnh7TkFNRX17U1VGRklYfSB0byByZWZlcmVuY2UgYSBjcm9zcy1yZWZlcmVuY2Ugc3RyaW5nIG5hbWVkIE5BTUUuCislIElmIGl0cyB2YWx1ZSBpcyBub25lbXB0eSwgU1VGRklYIGlzIG91dHB1dCBhZnRlcndhcmQuCislCitcZGVmXHJlZngjMSMyeyUKKyAgeyUKKyAgICBcaW5kZXhub2ZvbnRzCisgICAgXG90aGVyYmFja3NsYXNoCisgICAgXGV4cGFuZGFmdGVyXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcdGhpc3JlZlgKKyAgICAgIFxjc25hbWUgWCMxXGVuZGNzbmFtZQorICB9JQorICBcaWZ4XHRoaXNyZWZYXHJlbGF4CisgICAgJSBJZiBub3QgZGVmaW5lZCwgc2F5IHNvbWV0aGluZyBhdCBsZWFzdC4KKyAgICBcYW5nbGVsZWZ0IHVuXC1kZVwtZmluZWRcYW5nbGVyaWdodAorICAgIFxpZmxpbmtzCisgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5kZWZpbmVkIGNyb3NzIHJlZmVyZW5jZSBgIzEnLn0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZ3YXJuZWR4cmVmc1xlbHNlCisgICAgICAgICAgXGdsb2JhbFx3YXJuZWR4cmVmc3RydWUKKyAgICAgICAgICBcbWVzc2FnZXtDcm9zcyByZWZlcmVuY2UgdmFsdWVzIHVua25vd247IHlvdSBtdXN0IHJ1biBUZVggYWdhaW4ufSUKKyAgICAgICAgXGZpCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEl0J3MgZGVmaW5lZCwgc28ganVzdCB1c2UgaXQuCisgICAgXHRoaXNyZWZYCisgIFxmaQorICAjMiUgT3V0cHV0IHRoZSBzdWZmaXggaW4gYW55IGNhc2UuCit9CisKKyUgVGhpcyBpcyB0aGUgbWFjcm8gaW52b2tlZCBieSBlbnRyaWVzIGluIHRoZSBhdXggZmlsZS4KKyUKK1xkZWZceHJkZWYjMXtcZXhwYW5kYWZ0ZXJcZ2RlZlxjc25hbWUgWCMxXGVuZGNzbmFtZX0KKworJSBSZWFkIHRoZSBsYXN0IGV4aXN0aW5nIGF1eCBmaWxlLCBpZiBhbnkuICBObyBlcnJvciBpZiBub25lIGV4aXN0cy4KK1xkZWZccmVhZGF1eGZpbGV7XGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eQD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eQz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eRz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eSz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eUz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eVz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eXz1cb3RoZXIKKyAgJSBJdCB3YXMgc3VnZ2VzdGVkIHRvIHNldCB0aGUgY2F0Y29kZSBvZiBeIHRvIDcsIHdoaWNoIHdvdWxkIGFsbG93IF5eZTQgZXRjLgorICAlIGluIHhyZWYgdGFncywgaS5lLiwgbm9kZSBuYW1lcy4gIEJ1dCBzaW5jZSBeXmU0IG5vdGF0aW9uIGlzbid0CisgICUgc3VwcG9ydGVkIGluIHRoZSBtYWluIHRleHQsIGl0IGRvZXNuJ3Qgc2VlbSBkZXNpcmFibGUuICBGdXJ0aGVybW9yZSwKKyAgJSB0aGF0IGlzIG5vdCBlbm91Z2g6IGZvciBub2RlIG5hbWVzIHRoYXQgYWN0dWFsbHkgY29udGFpbiBhIF4KKyAgJSBjaGFyYWN0ZXIsIHdlIHdvdWxkIGVuZCB1cCB3cml0aW5nIGEgbGluZSBsaWtlIHRoaXM6ICd4cmRlZiB7J2hhdAorICAlIGItdGl0bGV9eydoYXQgYn0gYW5kIFx4cmRlZiBkb2VzIGEgXGNzbmFtZS4uLlxlbmRjc25hbWUgb24gdGhlIGZpcnN0CisgICUgYXJndW1lbnQsIGFuZCBcaGF0IGlzIG5vdCBhbiBleHBhbmRhYmxlIGNvbnRyb2wgc2VxdWVuY2UuICBJdCBjb3VsZAorICAlIGFsbCBiZSB3b3JrZWQgb3V0LCBidXQgd2h5PyAgRWl0aGVyIHdlIHN1cHBvcnQgXl4gb3Igd2UgZG9uJ3QuCisgICUKKyAgJSBUaGUgb3RoZXIgY2hhbmdlIG5lY2Vzc2FyeSBmb3IgdGhpcyB3YXMgdG8gZGVmaW5lIFxhdXhoYXQ6CisgICUgXGRlZlxhdXhoYXR7XGRlZl57J2hhdCB9fSUgZXh0cmEgc3BhY2Ugc28gb2sgaWYgZm9sbG93ZWQgYnkgbGV0dGVyCisgICUgYW5kIHRoZW4gdG8gY2FsbCBcYXV4aGF0IGluIFxzZXRxLgorICAlCisgIFxjYXRjb2RlYFxePVxvdGhlcgorICAlCisgICUgU3BlY2lhbCBjaGFyYWN0ZXJzLiAgU2hvdWxkIGJlIHR1cm5lZCBvZmYgYW55d2F5LCBidXQuLi4KKyAgXGNhdGNvZGVgXH49XG90aGVyCisgIFxjYXRjb2RlYFxbPVxvdGhlcgorICBcY2F0Y29kZWBcXT1cb3RoZXIKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFxfPVxvdGhlcgorICBcY2F0Y29kZWBcfD1cb3RoZXIKKyAgXGNhdGNvZGVgXDw9XG90aGVyCisgIFxjYXRjb2RlYFw+PVxvdGhlcgorICBcY2F0Y29kZWBcJD1cb3RoZXIKKyAgXGNhdGNvZGVgXCM9XG90aGVyCisgIFxjYXRjb2RlYFwmPVxvdGhlcgorICBcY2F0Y29kZWBcJT1cb3RoZXIKKyAgXGNhdGNvZGVgKz1cb3RoZXIgJSBhdm9pZCBcKyBmb3IgcGFyYW5vaWEgZXZlbiB0aG91Z2ggd2UndmUgdHVybmVkIGl0IG9mZgorICAlCisgICUgTWFrZSB0aGUgY2hhcmFjdGVycyAxMjgtMjU1IGJlIHByaW50aW5nIGNoYXJhY3RlcnMKKyAgeyUKKyAgICBcY291bnQgMT0xMjgKKyAgICBcZGVmXGxvb3B7JQorICAgICAgXGNhdGNvZGVcY291bnQgMT1cb3RoZXIKKyAgICAgIFxhZHZhbmNlXGNvdW50IDEgYnkgMQorICAgICAgXGlmbnVtIFxjb3VudCAxPDI1NiBcbG9vcCBcZmkKKyAgICB9JQorICB9JQorICAlCisgICUgVHVybiBvZmYgXCBhcyBhbiBlc2NhcGUgc28gd2UgZG8gbm90IGxvc2Ugb24KKyAgJSBlbnRyaWVzIHdoaWNoIHdlcmUgZHVtcGVkIHdpdGggY29udHJvbCBzZXF1ZW5jZXMgaW4gdGhlaXIgbmFtZXMuCisgICUgRm9yIGV4YW1wbGUsIEB4cmRlZnskXGxlcSAkLWZ1bn17cGFnZSAuLi59IG1hZGUgYnkgQGRlZnVuIF5eCisgICUgUmVmZXJlbmNlIHRvIHN1Y2ggZW50cmllcyBzdGlsbCBkb2VzIG5vdCB3b3JrIHRoZSB3YXkgb25lIHdvdWxkIHdpc2gsCisgICUgYnV0IGF0IGxlYXN0IHRoZXkgZG8gbm90IGJvbWIgb3V0IHdoZW4gdGhlIGF1eCBmaWxlIGlzIHJlYWQgaW4uCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICAlCisgICUgQCBpcyBvdXIgZXNjYXBlIGNoYXJhY3RlciBpbiAuYXV4IGZpbGVzLgorICBcY2F0Y29kZWBcez0xCisgIFxjYXRjb2RlYFx9PTIKKyAgXGNhdGNvZGVgXEA9MAorICAlCisgIFxvcGVuaW4gMSBcam9ibmFtZS5hdXgKKyAgXGlmZW9mIDEgXGVsc2UKKyAgICBcY2xvc2VpbiAxCisgICAgXGlucHV0IFxqb2JuYW1lLmF1eAorICAgIFxnbG9iYWxcaGF2ZXhyZWZzdHJ1ZQorICBcZmkKKyAgJSBPcGVuIHRoZSBuZXcgYXV4IGZpbGUuICBUZVggd2lsbCBjbG9zZSBpdCBhdXRvbWF0aWNhbGx5IGF0IGV4aXQuCisgIFxvcGVub3V0XGF1eGZpbGU9XGpvYm5hbWUuYXV4CitcZW5kZ3JvdXB9CisKKworJSBGb290bm90ZXMuCisKK1xuZXdjb3VudCBcZm9vdG5vdGVubworCislIFRoZSB0cmFpbGluZyBzcGFjZSBpbiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24gZm9yIHN1cGVyZWplY3QgaXMKKyUgdml0YWwgZm9yIHByb3BlciBmaWxsaW5nOyBwYWdlcyBjb21lIG91dCB1bmFsaWduZWQgd2hlbiB5b3UgZG8gYQorJSBwYWdlYWxpZ25tYWNybyBjYWxsIGlmIHRoYXQgc3BhY2UgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlIGlzCislIHJlbW92ZWQuIChHZW5lcmFsbHksIG51bWVyaWMgY29uc3RhbnRzIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgYQorJSBzcGFjZSB0byBwcmV2ZW50IHN0cmFuZ2UgZXhwYW5zaW9uIGVycm9ycy4pCitcZGVmXHN1cGVyZWplY3R7XHBhclxwZW5hbHR5IC0yMDAwMFxmb290bm90ZW5vID0wIH0KKworJSBAZm9vdG5vdGVzdHlsZSBpcyBtZWFuaW5nZnVsIGZvciBpbmZvIG91dHB1dCBvbmx5LgorXGxldFxmb290bm90ZXN0eWxlPVxjb21tZW50CisKK1xsZXRccHRleGZvb3Rub3RlPVxmb290bm90ZQorCit7XGNhdGNvZGUgYFxAPTExCislCislIEF1dG8tbnVtYmVyIGZvb3Rub3Rlcy4gIE90aGVyd2lzZSBsaWtlIHBsYWluLgorXGdkZWZcZm9vdG5vdGV7JQorICBcbGV0XGluZGVudD1ccHRleGluZGVudAorICBcbGV0XG5vaW5kZW50PVxwdGV4bm9pbmRlbnQKKyAgXGdsb2JhbFxhZHZhbmNlXGZvb3Rub3Rlbm8gYnkgXEBuZQorICBcZWRlZlx0aGlzZm9vdG5veyRee1x0aGVcZm9vdG5vdGVub30kfSUKKyAgJQorICAlIEluIGNhc2UgdGhlIGZvb3Rub3RlIGNvbWVzIGF0IHRoZSBlbmQgb2YgYSBzZW50ZW5jZSwgcHJlc2VydmUgdGhlCisgICUgZXh0cmEgc3BhY2luZyBhZnRlciB3ZSBkbyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcbGV0XEBzZlxlbXB0eQorICBcaWZobW9kZVxlZGVmXEBzZntcc3BhY2VmYWN0b3JcdGhlXHNwYWNlZmFjdG9yfVxwdGV4c2xhc2hcZmkKKyAgJQorICAlIFJlbW92ZSBpbmFkdmVydGVudCBibGFuayBzcGFjZSBiZWZvcmUgdHlwZXNldHRpbmcgdGhlIGZvb3Rub3RlIG51bWJlci4KKyAgXHVuc2tpcAorICBcdGhpc2Zvb3Rub1xAc2YKKyAgXGRvZm9vdG5vdGUKK30lCisKKyUgRG9uJ3QgYm90aGVyIHdpdGggdGhlIHRyaWNrZXJ5IGluIHBsYWluLnRleCB0byBub3QgcmVxdWlyZSB0aGUKKyUgZm9vdG5vdGUgdGV4dCBhcyBhIHBhcmFtZXRlci4gIE91ciBmb290bm90ZXMgZG9uJ3QgbmVlZCB0byBiZSBzbyBnZW5lcmFsLgorJQorJSBPaCB5ZXMsIHRoZXkgZG87IG90aGVyd2lzZSwgQGlmc2V0IGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgdXNlcworJSBccGFyc2VhcmdsaW5lIGZhaWwgaW5zaWRlIGZvb3Rub3RlcyBiZWNhdXNlIHRoZSB0b2tlbnMgYXJlIGZpeGVkIHdoZW4KKyUgdGhlIGZvb3Rub3RlIGlzIHJlYWQuICAtLWthcmwsIDE2bm92OTYuCislCislIFRoZSBzdGFydCBvZiB0aGUgZm9vdG5vdGUgbG9va3MgdXN1YWxseSBsaWtlIHRoaXM6CitcZ2RlZlxzdGFydGZvb3RpbnN7XGluc2VydFxmb290aW5zXGJncm91cH0KKyUKKyUgLi4uIGJ1dCB0aGlzIG1hY3JvIGlzIHJlZGVmaW5lZCBpbnNpZGUgQG11bHRpdGFibGUuCislCitcZ2RlZlxkb2Zvb3Rub3RleyUKKyAgXHN0YXJ0Zm9vdGlucworICAlIFdlIHdhbnQgdG8gdHlwZXNldCB0aGlzIHRleHQgYXMgYSBub3JtYWwgcGFyYWdyYXBoLCBldmVuIGlmIHRoZQorICAlIGZvb3Rub3RlIHJlZmVyZW5jZSBvY2N1cnMgaW4gKGZvciBleGFtcGxlKSBhIGRpc3BsYXkgZW52aXJvbm1lbnQuCisgICUgU28gcmVzZXQgc29tZSBwYXJhbWV0ZXJzLgorICBcaHNpemU9XHBhZ2V3aWR0aAorICBcaW50ZXJsaW5lcGVuYWx0eVxpbnRlcmZvb3Rub3RlbGluZXBlbmFsdHkKKyAgXHNwbGl0dG9wc2tpcFxodFxzdHJ1dGJveCAlIHRvcCBiYXNlbGluZSBmb3IgYnJva2VuIGZvb3Rub3RlcworICBcc3BsaXRtYXhkZXB0aFxkcFxzdHJ1dGJveAorICBcZmxvYXRpbmdwZW5hbHR5XEBNTQorICBcbGVmdHNraXBcekBza2lwCisgIFxyaWdodHNraXBcekBza2lwCisgIFxzcGFjZXNraXBcekBza2lwCisgIFx4c3BhY2Vza2lwXHpAc2tpcAorICBccGFyaW5kZW50XGRlZmF1bHRwYXJpbmRlbnQKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgJQorICAlIEJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcgaW5kZW50YXRpb24gaW4gZm9vdG5vdGVzLCBhIEBub2luZGVudCBhcHBlYXJzCisgICUgdG8gZXhkZW50IHRoaXMgdGV4dCwgc28gbWFrZSBpdCBiZSBhIG5vLW9wLiAgbWFrZWluZm8gZG9lcyBub3QgdXNlCisgICUgaGFuZ2luZyBpbmRlbnRhdGlvbiBzbyBAbm9pbmRlbnQgY2FuIHN0aWxsIGJlIG5lZWRlZCB3aXRoaW4gZm9vdG5vdGUKKyAgJSB0ZXh0IGFmdGVyIGFuIEBleGFtcGxlIG9yIHRoZSBsaWtlIChub3QgdGhhdCB0aGlzIGlzIGdvb2Qgc3R5bGUpLgorICBcbGV0XG5vaW5kZW50ID0gXHJlbGF4CisgICUKKyAgJSBIYW5nIHRoZSBmb290bm90ZSB0ZXh0IG9mZiB0aGUgbnVtYmVyLiAgVXNlIFxldmVyeXBhciBpbiBjYXNlIHRoZQorICAlIGZvb3Rub3RlIGV4dGVuZHMgZm9yIG1vcmUgdGhhbiBvbmUgcGFyYWdyYXBoLgorICBcZXZlcnlwYXIgPSB7XGhhbmd9JQorICBcdGV4dGluZGVudHtcdGhpc2Zvb3Rub30lCisgICUKKyAgJSBEb24ndCBjcmFzaCBpbnRvIHRoZSBsaW5lIGFib3ZlIHRoZSBmb290bm90ZSB0ZXh0LiAgU2luY2UgdGhpcworICAlIGV4cGFuZHMgaW50byBhIGJveCwgaXQgbXVzdCBjb21lIHdpdGhpbiB0aGUgcGFyYWdyYXBoLCBsZXN0IGl0CisgICUgcHJvdmlkZSBhIHBsYWNlIHdoZXJlIFRlWCBjYW4gc3BsaXQgdGhlIGZvb3Rub3RlLgorICBcZm9vdHN0cnV0CisgIFxmdXR1cmVsZXRcbmV4dFxmb0B0Cit9Cit9JWVuZCBcY2F0Y29kZSBgXEA9MTEKKworJSBAfCBpbnNlcnRzIGEgY2hhbmdlYmFyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IGxpbmUuICBJdCBzaG91bGQKKyUgc3Vycm91bmQgYW55IGNoYW5nZWQgdGV4dC4gIFRoaXMgYXBwcm9hY2ggZG9lcyAqbm90KiB3b3JrIGlmIHRoZQorJSBjaGFuZ2Ugc3BhbnMgbW9yZSB0aGFuIHR3byBsaW5lcyBvZiBvdXRwdXQuICBUbyBoYW5kbGUgdGhhdCwgd2Ugd291bGQKKyUgaGF2ZSBhZG9wdCBhIG11Y2ggbW9yZSBkaWZmaWN1bHQgYXBwcm9hY2ggKHB1dHRpbmcgbWFya3MgaW50byB0aGUgbWFpbgorJSB2ZXJ0aWNhbCBsaXN0IGZvciB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgZWFjaCBjaGFuZ2UpLgorJQorXGRlZlx8eyUKKyAgJSBcdmFkanVzdCBjYW4gb25seSBiZSB1c2VkIGluIGhvcml6b250YWwgbW9kZS4KKyAgXGxlYXZldm1vZGUKKyAgJQorICAlIEFwcGVuZCB0aGlzIHZlcnRpY2FsIG1vZGUgbWF0ZXJpYWwgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgb3V0cHV0LgorICBcdmFkanVzdHslCisgICAgJSBXZSB3YW50IHRvIGluc2VydCBhIHJ1bGUgd2l0aCB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgY3VycmVudAorICAgICUgbGVhZGluZzsgdGhhdCBpcyBleGFjdGx5IHdoYXQgXHN0cnV0Ym94IGlzIHN1cHBvc2VkIHRvIHJlY29yZC4KKyAgICBcdnNraXAtXGJhc2VsaW5lc2tpcAorICAgICUKKyAgICAlIFx2YWRqdXN0LWl0ZW1zIGFyZSBpbnNlcnRlZCBhdCB0aGUgbGVmdCBlZGdlIG9mIHRoZSB0eXBlLiAgU28KKyAgICAlIHRoZSBcbGxhcCBoZXJlIG1vdmVzIG91dCBpbnRvIHRoZSBsZWZ0LWhhbmQgbWFyZ2luLgorICAgIFxsbGFweyUKKyAgICAgICUKKyAgICAgICUgRm9yIGEgdGhpY2tlciBvciB0aGlubmVyIGJhciwgY2hhbmdlIHRoZSBgMXB0Jy4KKyAgICAgIFx2cnVsZSBoZWlnaHRcYmFzZWxpbmVza2lwIHdpZHRoMXB0CisgICAgICAlCisgICAgICAlIFRoaXMgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGJhciBhbmQgdGhlIHRleHQuCisgICAgICBcaHNraXAgMTJwdAorICAgIH0lCisgIH0lCit9CisKKyUgRm9yIGEgZmluYWwgY29weSwgdGFrZSBvdXQgdGhlIHJlY3RhbmdsZXMKKyUgdGhhdCBtYXJrIG92ZXJmdWxsIGJveGVzIChpbiBjYXNlIHlvdSBoYXZlIGRlY2lkZWQKKyUgdGhhdCB0aGUgdGV4dCBsb29rcyBvayBldmVuIHRob3VnaCBpdCBwYXNzZXMgdGhlIG1hcmdpbikuCislCitcZGVmXGZpbmFsb3V0e1xvdmVyZnVsbHJ1bGU9MHB0fQorCislIEBpbWFnZS4gIFdlIHVzZSB0aGUgbWFjcm9zIGZyb20gZXBzZi50ZXggdG8gc3VwcG9ydCB0aGlzLgorJSBJZiBlcHNmLnRleCBpcyBub3QgaW5zdGFsbGVkIGFuZCBAaW1hZ2UgaXMgdXNlZCwgd2UgY29tcGxhaW4uCislCislIENoZWNrIGZvciBhbmQgcmVhZCBlcHNmLnRleCB1cCBmcm9udC4gIElmIHdlIHJlYWQgaXQgb25seSBhdCBAaW1hZ2UKKyUgdGltZSwgd2UgbWlnaHQgYmUgaW5zaWRlIGEgZ3JvdXAsIGFuZCB0aGVuIGl0cyBkZWZpbml0aW9ucyB3b3VsZCBnZXQKKyUgdW5kb25lIGFuZCB0aGUgbmV4dCBpbWFnZSB3b3VsZCBmYWlsLgorXG9wZW5pbiAxID0gZXBzZi50ZXgKK1xpZmVvZiAxIFxlbHNlCisgIFxjbG9zZWluIDEKKyAgJSBEbyBub3QgYm90aGVyIHNob3dpbmcgYmFubmVyIHdpdGggZXBzZi50ZXggdjIuN2sgKGF2YWlsYWJsZSBpbgorICAlIGRvYy9lcHNmLnRleCBhbmQgb24gY3RhbikuCisgIFxkZWZcZXBzZmFubm91bmNle1x0b2tzMCA9IH0lCisgIFxpbnB1dCBlcHNmLnRleAorXGZpCislCislIFdlIHdpbGwgb25seSBjb21wbGFpbiBvbmNlIGFib3V0IGxhY2sgb2YgZXBzZi50ZXguCitcbmV3aWZcaWZ3YXJuZWRub2Vwc2YKK1xuZXdoZWxwXG5vZXBzZmhlbHB7ZXBzZi50ZXggbXVzdCBiZSBpbnN0YWxsZWQgZm9yIGltYWdlcyB0bworICB3b3JrLiAgSXQgaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgVGV4aW5mbyBkaXN0cmlidXRpb24sIG9yIHlvdSBjYW4gZ2V0CisgIGl0IGZyb20gZnRwOi8vdHVnLm9yZy90ZXgvZXBzZi50ZXgufQorJQorXGRlZlxpbWFnZSMxeyUKKyAgXGlmeFxlcHNmYm94XHVuZGVmaW5lZAorICAgIFxpZndhcm5lZG5vZXBzZiBcZWxzZQorICAgICAgXGVycmhlbHAgPSBcbm9lcHNmaGVscAorICAgICAgXGVycm1lc3NhZ2V7ZXBzZi50ZXggbm90IGZvdW5kLCBpbWFnZXMgd2lsbCBiZSBpZ25vcmVkfSUKKyAgICAgIFxnbG9iYWxcd2FybmVkbm9lcHNmdHJ1ZQorICAgIFxmaQorICBcZWxzZQorICAgIFxpbWFnZXh4eCAjMSwsLCwsXGZpbmlzaAorICBcZmkKK30KKyUKKyUgQXJndW1lbnRzIHRvIEBpbWFnZToKKyUgIzEgaXMgKG1hbmRhdG9yeSkgaW1hZ2UgZmlsZW5hbWU7IHdlIHRhY2sgb24gLmVwcyBleHRlbnNpb24uCislICMyIGlzIChvcHRpb25hbCkgd2lkdGgsICMzIGlzIChvcHRpb25hbCkgaGVpZ2h0LgorJSAjNCBpcyAoaWdub3JlZCBvcHRpb25hbCkgaHRtbCBhbHQgdGV4dC4KKyUgIzUgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGV4dGVuc2lvbi4KKyUgIzYgaXMganVzdCB0aGUgdXN1YWwgZXh0cmEgaWdub3JlZCBhcmcgZm9yIHBhcnNpbmcgdGhpcyBzdHVmZi4KK1xuZXdpZlxpZmltYWdldm1vZGUKK1xkZWZcaW1hZ2V4eHgjMSwjMiwjMywjNCwjNSwjNlxmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgXGNhdGNvZGVgXF5eTSA9IDUgICAgICUgaW4gY2FzZSB3ZSdyZSBpbnNpZGUgYW4gZXhhbXBsZQorICBcbm9ybWFsdHVybm9mZmFjdGl2ZSAgJSBhbGxvdyBfIGV0IGFsLiBpbiBuYW1lcworICAlIElmIHRoZSBpbWFnZSBpcyBieSBpdHNlbGYsIGNlbnRlciBpdC4KKyAgXGlmdm1vZGUKKyAgICBcaW1hZ2V2bW9kZXRydWUKKyAgICBcbm9icmVha1xiaWdza2lwCisgICAgJSBVc3VhbGx5IHdlJ2xsIGhhdmUgdGV4dCBhZnRlciB0aGUgaW1hZ2Ugd2hpY2ggd2lsbCBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUsIHNvIGluc2VydCBpdCBoZXJlIHRvbyB0byBlcXVhbGl6ZSB0aGUgc3BhY2UKKyAgICAlIGFib3ZlIGFuZCBiZWxvdy4KKyAgICBcbm9icmVha1x2c2tpcFxwYXJza2lwCisgICAgXG5vYnJlYWsKKyAgICBcbGluZVxiZ3JvdXBcaHNzCisgIFxmaQorICAlCisgICUgT3V0cHV0IHRoZSBpbWFnZS4KKyAgXGlmcGRmCisgICAgXGRvcGRmaW1hZ2V7IzF9eyMyfXsjM30lCisgIFxlbHNlCisgICAgJSBcZXBzZmJveCBpdHNlbGYgcmVzZXRzIFxlcHNmP3NpemUgYXQgZWFjaCBmaWd1cmUuCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z4c2l6ZT0jMlxyZWxheCBcZmkKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzN9XGlmZGltXHdkMCA+IDBwdCBcZXBzZnlzaXplPSMzXHJlbGF4IFxmaQorICAgIFxlcHNmYm94eyMxLmVwc30lCisgIFxmaQorICAlCisgIFxpZmltYWdldm1vZGUgXGhzcyBcZWdyb3VwIFxiaWdicmVhayBcZmkgICUgc3BhY2UgYWZ0ZXIgdGhlIGltYWdlCitcZW5kZ3JvdXB9CisKKworXG1lc3NhZ2V7bG9jYWxpemF0aW9uLH0KKyUgYW5kIGkxOG4uCisKKyUgQGRvY3VtZW50bGFuZ3VhZ2UgaXMgdXN1YWxseSBnaXZlbiB2ZXJ5IGVhcmx5LCBqdXN0IGFmdGVyCislIEBzZXRmaWxlbmFtZS4gIElmIGRvbmUgdG9vIGxhdGUsIGl0IG1heSBub3Qgb3ZlcnJpZGUgZXZlcnl0aGluZworJSBwcm9wZXJseS4gIFNpbmdsZSBhcmd1bWVudCBpcyB0aGUgbGFuZ3VhZ2UgYWJicmV2aWF0aW9uLgorJSBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHNldCB1cCBhIGh5cGhlbmF0aW9uIGZpbGUgaGVyZS4KKyUKK1xkZWZcZG9jdW1lbnRsYW5ndWFnZXtccGFyc2VhcmdcZG9kb2N1bWVudGxhbmd1YWdlfQorXGRlZlxkb2RvY3VtZW50bGFuZ3VhZ2UjMXslCisgIFx0ZXggJSByZWFkIHR4aS0/Py50ZXggZmlsZSBpbiBwbGFpbiBUZVguCisgICUgUmVhZCB0aGUgZmlsZSBpZiBpdCBleGlzdHMuCisgIFxvcGVuaW4gMSB0eGktIzEudGV4CisgIFxpZmVvZjEKKyAgICBcZXJyaGVscCA9IFxub2xhbmdoZWxwCisgICAgXGVycm1lc3NhZ2V7Q2Fubm90IHJlYWQgbGFuZ3VhZ2UgZmlsZSB0eGktIzEudGV4fSUKKyAgICBcbGV0XHRlbXAgPSBccmVsYXgKKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlucHV0IHR4aS0jMS50ZXggfSUKKyAgXGZpCisgIFx0ZW1wCisgIFxlbmRncm91cAorfQorXG5ld2hlbHBcbm9sYW5naGVscHtUaGUgZ2l2ZW4gbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvcgoraXMgZW1wdHkuICBNYXliZSB5b3UgbmVlZCB0byBpbnN0YWxsIGl0PyAgSW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitzaG91bGQgd29yayBpZiBub3doZXJlIGVsc2UgZG9lcy59CisKKworJSBAZG9jdW1lbnRlbmNvZGluZyBzaG91bGQgY2hhbmdlIHNvbWV0aGluZyBpbiBUZVggZXZlbnR1YWxseSwgbW9zdAorJSBsaWtlbHksIGJ1dCBmb3Igbm93IGp1c3QgcmVjb2duaXplIGl0LgorXGxldFxkb2N1bWVudGVuY29kaW5nID0gXGNvbW1lbnQKKworCislIFBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLgorJQorXG5ld2RpbWVuXGRlZmF1bHRwYXJpbmRlbnQgXGRlZmF1bHRwYXJpbmRlbnQgPSAxNXB0CisKK1xjaGFwaGVhZGluZ3NraXAgPSAxNXB0IHBsdXMgNHB0IG1pbnVzIDJwdAorXHNlY2hlYWRpbmdza2lwID0gMTJwdCBwbHVzIDNwdCBtaW51cyAycHQKK1xzdWJzZWNoZWFkaW5nc2tpcCA9IDlwdCBwbHVzIDJwdCBtaW51cyAycHQKKworJSBQcmV2ZW50IHVuZGVyZnVsbCB2Ym94IGVycm9yIG1lc3NhZ2VzLgorXHZiYWRuZXNzID0gMTAwMDAKKworJSBEb24ndCBiZSBzbyBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KK1xoYmFkbmVzcyA9IDIwMDAKKworJSBGb2xsb3dpbmcgR2VvcmdlIEJ1c2gsIGp1c3QgZ2V0IHJpZCBvZiB3aWRvd3MgYW5kIG9ycGhhbnMuCitcd2lkb3dwZW5hbHR5PTEwMDAwCitcY2x1YnBlbmFsdHk9MTAwMDAKKworJSBVc2UgVGVYIDMuMCdzIFxlbWVyZ2VuY3lzdHJldGNoIHRvIGhlbHAgbGluZSBicmVha2luZywgYnV0IGlmIHdlJ3JlCislIHVzaW5nIGFuIG9sZCB2ZXJzaW9uIG9mIFRlWCwgZG9uJ3QgZG8gYW55dGhpbmcuICBXZSB3YW50IHRoZSBhbW91bnQgb2YKKyUgc3RyZXRjaCBhZGRlZCB0byBkZXBlbmQgb24gdGhlIGxpbmUgbGVuZ3RoLCBoZW5jZSB0aGUgZGVwZW5kZW5jZSBvbgorJSBcaHNpemUuICBXZSBjYWxsIHRoaXMgd2hlbmV2ZXIgdGhlIHBhcGVyIHNpemUgaXMgc2V0LgorJQorXGRlZlxzZXRlbWVyZ2VuY3lzdHJldGNoeyUKKyAgXGlmeFxlbWVyZ2VuY3lzdHJldGNoXHRoaXNpc3VuZGVmaW5lZAorICAgICUgQWxsb3cgdXMgdG8gYXNzaWduIHRvIFxlbWVyZ2VuY3lzdHJldGNoIGFueXdheS4KKyAgICBcZGVmXGVtZXJnZW5jeXN0cmV0Y2h7XGRpbWVuMH0lCisgIFxlbHNlCisgICAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAuMTVcaHNpemUKKyAgXGZpCit9CisKKyUgUGFyYW1ldGVycyBpbiBvcmRlcjogMSkgdGV4dGhlaWdodDsgMikgdGV4dHdpZHRoOyAzKSB2b2Zmc2V0OworJSA0KSBob2Zmc2V0OyA1KSBiaW5kaW5nIG9mZnNldDsgNikgdG9wc2tpcDsgNykgcGh5c2ljYWwgcGFnZSBoZWlnaHQ7IDgpCislIHBoeXNpY2FsIHBhZ2Ugd2lkdGguCislCislIFdlIGFsc28gY2FsbCBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBkZWZpbmUKKyUgXHRleHRsZWFkaW5nLiAgVGhlIGNhbGxlciBzaG91bGQgYWxzbyBzZXQgXHBhcnNraXAuCislCitcZGVmXGludGVybmFscGFnZXNpemVzIzEjMiMzIzQjNSM2IzcjOHslCisgIFx2b2Zmc2V0ID0gIzNccmVsYXgKKyAgXHRvcHNraXAgPSAjNlxyZWxheAorICBcc3BsaXR0b3Bza2lwID0gXHRvcHNraXAKKyAgJQorICBcdnNpemUgPSAjMVxyZWxheAorICBcYWR2YW5jZVx2c2l6ZSBieSBcdG9wc2tpcAorICBcb3V0ZXJ2c2l6ZSA9IFx2c2l6ZQorICBcYWR2YW5jZVxvdXRlcnZzaXplIGJ5IDJcdG9wYW5kYm90dG9tbWFyZ2luCisgIFxwYWdlaGVpZ2h0ID0gXHZzaXplCisgICUKKyAgXGhzaXplID0gIzJccmVsYXgKKyAgXG91dGVyaHNpemUgPSBcaHNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJoc2l6ZSBieSAwLjVpbgorICBccGFnZXdpZHRoID0gXGhzaXplCisgICUKKyAgXG5vcm1hbG9mZnNldCA9ICM0XHJlbGF4CisgIFxiaW5kaW5nb2Zmc2V0ID0gIzVccmVsYXgKKyAgJQorICBcaWZwZGYKKyAgICBccGRmcGFnZWhlaWdodCAjN1xyZWxheAorICAgIFxwZGZwYWdld2lkdGggIzhccmVsYXgKKyAgXGZpCisgICUKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfQorICAlCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorICBcc2V0ZW1lcmdlbmN5c3RyZXRjaAorfQorCislIEBsZXR0ZXJwYXBlciAodGhlIGRlZmF1bHQpLgorXGRlZlxsZXR0ZXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIElmIHBhZ2UgaXMgbm90aGluZyBidXQgdGV4dCwgbWFrZSBpdCBjb21lIG91dCBldmVuLgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NDZcYmFzZWxpbmVza2lwfXs2aW59JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXszNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezExaW59ezguNWlufSUKK319CisKKyUgVXNlIEBzbWFsbGJvb2sgdG8gcmVzZXQgcGFyYW1ldGVycyBmb3IgN3g5LjUgKG9yIHNvKSBmb3JtYXQuCitcZGVmXHNtYWxsYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMnB0IHBsdXMgMXB0CisgIFx0ZXh0bGVhZGluZyA9IDEycHQKKyAgJQorICBcaW50ZXJuYWxwYWdlc2l6ZXN7Ny41aW59ezVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LjI1aW59JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezE2cHR9JQorICAgICAgICAgICAgICAgICAgICB7OS4yNWlufXs3aW59JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4zaW4KKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAuNWNtCit9fQorCislIFVzZSBAYWZvdXJwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNCBwYXBlci4KK1xkZWZcYWZvdXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIERvdWJsZS1zaWRlIHByaW50aW5nIHZpYSBwb3N0c2NyaXB0IG9uIExhc2VyamV0IDQwNTAKKyAgJSBwcmludHMgZG91YmxlLXNpZGVkIG5pY2VseSB3aGVuIFxiaW5kaW5nb2Zmc2V0PTEwbW0gYW5kIFxob2Zmc2V0PS02bW0uCisgICUgVG8gY2hhbmdlIHRoZSBzZXR0aW5ncyBmb3IgYSBkaWZmZXJlbnQgcHJpbnRlciBvciBzaXR1YXRpb24sIGFkanVzdAorICAlIFxub3JtYWxvZmZzZXQgdW50aWwgdGhlIGZyb250LXNpZGUgYW5kIGJhY2stc2lkZSB0ZXh0cyBhbGlnbi4gIFRoZW4KKyAgJSBkbyB0aGUgc2FtZSBmb3IgXGJpbmRpbmdvZmZzZXQuICBZb3UgY2FuIHNldCB0aGVzZSBmb3IgdGVzdGluZyBpbgorICAlIHlvdXIgdGV4aW5mbyBzb3VyY2UgZmlsZSBsaWtlIHRoaXM6CisgICUgQHRleAorICAlIFxnbG9iYWxcbm9ybWFsb2Zmc2V0ID0gLTZtbQorICAlIFxnbG9iYWxcYmluZGluZ29mZnNldCA9IDEwbW0KKyAgJSBAZW5kIHRleAorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NTFcYmFzZWxpbmVza2lwfXsxNjBtbX0KKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gNW1tCit9fQorCislIFVzZSBAYWZpdmVwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNSBwYXBlci4KKyUgRnJvbSByb21pbGRvQHVyYW5vLmljZWIudWZvcC5iciwgMiBKdWx5IDIwMDAuCislIEhlIGFsc28gcmVjb21tZW5kcyBtYWtpbmcgQGV4YW1wbGUgYW5kIEBsaXNwIGJlIHNtYWxsLgorXGRlZlxhZml2ZXBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQgbWludXMgMC4xcHQKKyAgXHRleHRsZWFkaW5nID0gMTIuNXB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezE2MG1tfXsxMjBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XGhvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezhwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyMTBtbX17MTQ4bW19JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4yaW4KKyAgXHRvbGVyYW5jZSA9IDgwMAorICBcaGZ1enogPSAxLjJwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IDJtbQorICBcdGFibGVpbmRlbnQgPSAxMm1tCit9fQorCislIEEgc3BlY2lmaWMgdGV4dCBsYXlvdXQsIDI0eDE1Y20gb3ZlcmFsbCwgaW50ZW5kZWQgZm9yIEE0IHBhcGVyLgorXGRlZlxhZm91cmxhdGV4e3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezIzN21tfXsxNTBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17NC42bW19JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezdtbX0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgICUgTXVzdCBleHBsaWNpdGx5IHJlc2V0IHRvIDAgYmVjYXVzZSB3ZSBjYWxsIFxhZm91cnBhcGVyLgorICBcZ2xvYmFsZGVmcyA9IDAKK319CisKKyUgVXNlIEBhZm91cndpZGUgdG8gcHJpbnQgb24gQTQgcGFwZXIgaW4gbGFuZHNjYXBlIGZvcm1hdC4KK1xkZWZcYWZvdXJ3aWRle3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezI0MW1tfXsxNjVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LTIuOTVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBAcGFnZXNpemVzIFRFWFRIRUlHSFRbLFRFWFRXSURUSF0KKyUgUGVyaGFwcyB3ZSBzaG91bGQgYWxsb3cgc2V0dGluZyB0aGUgbWFyZ2lucywgXHRvcHNraXAsIFxwYXJza2lwLAorJSBhbmQvb3IgbGVhZGluZywgYWxzby4gT3IgcGVyaGFwcyB3ZSBzaG91bGQgY29tcHV0ZSB0aGVtIHNvbWVob3cuCislCitcZGVmXHBhZ2VzaXplc3tccGFyc2VhcmdccGFnZXNpemVzeHh4fQorXGRlZlxwYWdlc2l6ZXN4eHgjMXtccGFnZXNpemVzeXl5ICMxLCxcZmluaXNofQorXGRlZlxwYWdlc2l6ZXN5eXkjMSwjMiwjM1xmaW5pc2h7eyUKKyAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfVxpZmRpbVx3ZDAgPiAwcHQgXGhzaXplPSMyXHJlbGF4IFxmaQorICBcZ2xvYmFsZGVmcyA9IDEKKyAgJQorICBccGFyc2tpcCA9IDNwdCBwbHVzIDJwdCBtaW51cyAxcHQKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfSUKKyAgJQorICBcZGltZW4wID0gIzEKKyAgXGFkdmFuY2VcZGltZW4wIGJ5IFx2b2Zmc2V0CisgICUKKyAgXGRpbWVuMiA9IFxoc2l6ZQorICBcYWR2YW5jZVxkaW1lbjIgYnkgXG5vcm1hbG9mZnNldAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3sjMX17XGhzaXplfSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcbm9ybWFsb2Zmc2V0fSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXs0NHB0fSUKKyAgICAgICAgICAgICAgICAgICAge1xkaW1lbjB9e1xkaW1lbjJ9JQorfX0KKworJSBTZXQgZGVmYXVsdCB0byBsZXR0ZXIuCislCitcbGV0dGVycGFwZXIKKworCitcbWVzc2FnZXthbmQgdHVybmluZyBvbiB0ZXhpbmZvIGlucHV0IGZvcm1hdC59CisKKyUgRGVmaW5lIG1hY3JvcyB0byBvdXRwdXQgdmFyaW91cyBjaGFyYWN0ZXJzIHdpdGggY2F0Y29kZSBmb3Igbm9ybWFsIHRleHQuCitcY2F0Y29kZWBcIj1cb3RoZXIKK1xjYXRjb2RlYFx+PVxvdGhlcgorXGNhdGNvZGVgXF49XG90aGVyCitcY2F0Y29kZWBcXz1cb3RoZXIKK1xjYXRjb2RlYFx8PVxvdGhlcgorXGNhdGNvZGVgXDw9XG90aGVyCitcY2F0Y29kZWBcPj1cb3RoZXIKK1xjYXRjb2RlYFwrPVxvdGhlcgorXGNhdGNvZGVgXCQ9XG90aGVyCitcZGVmXG5vcm1hbGRvdWJsZXF1b3RleyJ9CitcZGVmXG5vcm1hbHRpbGRle359CitcZGVmXG5vcm1hbGNhcmV0e159CitcZGVmXG5vcm1hbHVuZGVyc2NvcmV7X30KK1xkZWZcbm9ybWFsdmVydGljYWxiYXJ7fH0KK1xkZWZcbm9ybWFsbGVzc3s8fQorXGRlZlxub3JtYWxncmVhdGVyez59CitcZGVmXG5vcm1hbHBsdXN7K30KK1xkZWZcbm9ybWFsZG9sbGFyeyR9JSQgZm9udC1sb2NrIGZpeAorCislIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBtYWtlIGEgY2hhcmFjdGVyIHByaW50IG9uZSB3YXkgaW4gdHRmb250CislIHdoZXJlIGl0IGNhbiBwcm9iYWJseSBqdXN0IGJlIG91dHB1dCwgYW5kIGFub3RoZXIgd2F5IGluIG90aGVyIGZvbnRzLAorJSB3aGVyZSBzb21ldGhpbmcgaGFpcmllciBwcm9iYWJseSBuZWVkcyB0byBiZSBkb25lLgorJQorJSAjMSBpcyB3aGF0IHRvIHByaW50IGlmIHdlIGFyZSBpbmRlZWQgdXNpbmcgXHR0OyAjMiBpcyB3aGF0IHRvIHByaW50CislIG90aGVyd2lzZS4gIFNpbmNlIGFsbCB0aGUgQ29tcHV0ZXIgTW9kZXJuIHR5cGV3cml0ZXIgZm9udHMgaGF2ZSB6ZXJvCislIGludGVyd29yZCBzdHJldGNoIChhbmQgc2hyaW5rKSwgYW5kIGl0IGlzIHJlYXNvbmFibGUgdG8gZXhwZWN0IGFsbAorJSB0eXBld3JpdGVyIGZvbnRzIHRvIGhhdmUgdGhpcywgd2UgY2FuIGNoZWNrIHRoYXQgZm9udCBwYXJhbWV0ZXIuCislCitcZGVmXGlmdXNpbmd0dCMxIzJ7XGlmZGltIFxmb250ZGltZW4zXGZvbnQ9MHB0ICMxXGVsc2UgIzJcZml9CisKKyUgU2FtZSBhcyBhYm92ZSwgYnV0IGNoZWNrIGZvciBpdGFsaWMgZm9udC4gIEFjdHVhbGx5IHRoaXMgYWxzbyBjYXRjaGVzCislIG5vbi1pdGFsaWMgc2xhbnRlZCBmb250cyBzaW5jZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbQorJSBpdGFsaWMgZm9udHMuICBCdXQgc2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgYnkgJCBhbmQgaXQgdXNlcyBcc2wgYW55d2F5CislIHRoaXMgaXMgbm90IGEgcHJvYmxlbS4KK1xkZWZcaWZ1c2luZ2l0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjFcZm9udD4wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBUdXJuIG9mZiBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIGV4Y2VwdCBACislIChhbmQgdGhvc2Ugd2hpY2ggdGhlIHVzZXIgY2FuIHVzZSBhcyBpZiB0aGV5IHdlcmUgb3JkaW5hcnkpLgorJSBNb3N0IG9mIHRoZXNlIHdlIHNpbXBseSBwcmludCBmcm9tIHRoZSBcdHQgZm9udCwgYnV0IGZvciBzb21lLCB3ZSBjYW4KKyUgdXNlIG1hdGggb3Igb3RoZXIgdmFyaWFudHMgdGhhdCBsb29rIGJldHRlciBpbiBub3JtYWwgdGV4dC4KKworXGNhdGNvZGVgXCI9XGFjdGl2ZQorXGRlZlxhY3RpdmVkb3VibGVxdW90ZXt7XHR0XGNoYXIzNH19CitcbGV0Ij1cYWN0aXZlZG91YmxlcXVvdGUKK1xjYXRjb2RlYFx+PVxhY3RpdmUKK1xkZWZ+e3tcdHRcY2hhcjEyNn19CitcY2hhcmRlZlxoYXQ9YFxeCitcY2F0Y29kZWBcXj1cYWN0aXZlCitcZGVmXnt7XHR0IFxoYXR9fQorCitcY2F0Y29kZWBcXz1cYWN0aXZlCitcZGVmX3tcaWZ1c2luZ3R0XG5vcm1hbHVuZGVyc2NvcmVcX30KKyUgU3Vicm91dGluZSBmb3IgdGhlIHByZXZpb3VzIG1hY3JvLgorXGRlZlxfe1xsZWF2ZXZtb2RlIFxrZXJuLjA3ZW0gXHZib3h7XGhydWxlIHdpZHRoLjNlbSBoZWlnaHQuMWV4fVxrZXJuIC4wN2VtIH0KKworXGNhdGNvZGVgXHw9XGFjdGl2ZQorXGRlZnx7e1x0dFxjaGFyMTI0fX0KK1xjaGFyZGVmIFxsZXNzPWBcPAorXGNhdGNvZGVgXDw9XGFjdGl2ZQorXGRlZjx7e1x0dCBcbGVzc319CitcY2hhcmRlZiBcZ3RyPWBcPgorXGNhdGNvZGVgXD49XGFjdGl2ZQorXGRlZj57e1x0dCBcZ3RyfX0KK1xjYXRjb2RlYFwrPVxhY3RpdmUKK1xkZWYre3tcdHQgXGNoYXIgNDN9fQorXGNhdGNvZGVgXCQ9XGFjdGl2ZQorXGRlZiR7XGlmdXNpbmdpdHt7XHNsXCR9fVxub3JtYWxkb2xsYXJ9JSQgZm9udC1sb2NrIGZpeAorCislIFNldCB1cCBhbiBhY3RpdmUgZGVmaW5pdGlvbiBmb3IgPSwgYnV0IGRvbid0IGVuYWJsZSBpdCBtb3N0IG9mIHRoZSB0aW1lLgore1xjYXRjb2RlYFw9PVxhY3RpdmUKK1xnbG9iYWxcZGVmPXt7XHR0IFxjaGFyIDYxfX19CisKK1xjYXRjb2RlYCs9XGFjdGl2ZQorXGNhdGNvZGVgXF89XGFjdGl2ZQorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gYSBmaWxlCislIG5hbWUgY2Fubm90IGJlIGFjdGl2ZSB1bnRpbCB3ZSBoYXZlIHBhcnNlZCB0aGUgY29tbWFuZCBsaW5lLgorJSBTbyB0dXJuIHRoZW0gb2ZmIGFnYWluLCBhbmQgaGF2ZSBcZXZlcnlqb2IgKG9yIEBzZXRmaWxlbmFtZSkgdHVybiB0aGVtIG9uLgorJSBcb3RoZXJpZnlhY3RpdmUgaXMgY2FsbGVkIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCitcZGVmXG90aGVyaWZ5YWN0aXZle1xjYXRjb2RlYCs9XG90aGVyIFxjYXRjb2RlYFxfPVxvdGhlcn0KKworXGNhdGNvZGVgXEA9MAorCislIFxyYXdiYWNrc2xhc2h4eCBvdXRwdXRzIG9uZSBiYWNrc2xhc2ggY2hhcmFjdGVyIGluIGN1cnJlbnQgZm9udCwKKyUgYXMgaW4gXGNoYXJgXFwuCitcZ2xvYmFsXGNoYXJkZWZccmF3YmFja3NsYXNoeHg9YFxcCisKKyUgXHJhd2JhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGRvIFxyYXdiYWNrc2xhc2h4eC4KKyUgXG90aGVyYmFja3NsYXNoIGRlZmluZXMgYW4gYWN0aXZlIFwgdG8gYmUgYSBsaXRlcmFsIGBcJyBjaGFyYWN0ZXIgd2l0aAorJSBjYXRjb2RlIG90aGVyLgore1xjYXRjb2RlYFxcPVxhY3RpdmUKKyBAZ2RlZkByYXdiYWNrc2xhc2h7QGxldFw9QHJhd2JhY2tzbGFzaHh4fQorIEBnZGVmQG90aGVyYmFja3NsYXNoe0BsZXRcPUByZWFsYmFja3NsYXNofQorfQorCislIFxyZWFsYmFja3NsYXNoIGlzIGFuIGFjdHVhbCBjaGFyYWN0ZXIgYFwnIHdpdGggY2F0Y29kZSBvdGhlci4KK3tcY2F0Y29kZWBcXD1cb3RoZXIgQGdkZWZAcmVhbGJhY2tzbGFzaHtcfX0KKworJSBcbm9ybWFsYmFja3NsYXNoIG91dHB1dHMgb25lIGJhY2tzbGFzaCBpbiBmaXhlZCB3aWR0aCBmb250LgorXGRlZlxub3JtYWxiYWNrc2xhc2h7e1x0dFxyYXdiYWNrc2xhc2h4eH19CisKK1xjYXRjb2RlYFxcPVxhY3RpdmUKKworJSBVc2VkIHNvbWV0aW1lcyB0byB0dXJuIG9mZiAoZWZmZWN0aXZlbHkpIHRoZSBhY3RpdmUgY2hhcmFjdGVycworJSBldmVuIGFmdGVyIHBhcnNpbmcgdGhlbS4KK0BkZWZAdHVybm9mZmFjdGl2ZXslCisgIEBsZXQiPUBub3JtYWxkb3VibGVxdW90ZQorICBAbGV0XD1AcmVhbGJhY2tzbGFzaAorICBAbGV0fj1Abm9ybWFsdGlsZGUKKyAgQGxldF49QG5vcm1hbGNhcmV0CisgIEBsZXRfPUBub3JtYWx1bmRlcnNjb3JlCisgIEBsZXR8PUBub3JtYWx2ZXJ0aWNhbGJhcgorICBAbGV0PD1Abm9ybWFsbGVzcworICBAbGV0Pj1Abm9ybWFsZ3JlYXRlcgorICBAbGV0Kz1Abm9ybWFscGx1cworICBAbGV0JD1Abm9ybWFsZG9sbGFyICUkIGZvbnQtbG9jayBmaXgKK30KKworJSBTYW1lIGFzIEB0dXJub2ZmYWN0aXZlIGV4Y2VwdCBvdXRwdXRzIFwgYXMge1x0dFxjaGFyYFxcfSBpbnN0ZWFkIG9mCislIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuICAoVGh1cywgXCBpcyBub3QgZXhwYW5kYWJsZSB3aGVuIHRoaXMgaXMgaW4KKyUgZWZmZWN0LikKKyUKK0BkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXtAdHVybm9mZmFjdGl2ZSBAbGV0XD1Abm9ybWFsYmFja3NsYXNofQorCislIE1ha2UgXyBhbmQgKyBcb3RoZXIgY2hhcmFjdGVycywgdGVtcG9yYXJpbHkuCislIFRoaXMgaXMgY2FuY2VsZWQgYnkgQGZpeGJhY2tzbGFzaC4KK0BvdGhlcmlmeWFjdGl2ZQorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIHdlIGRvbid0IHdhbnQgdGhlIGBcaW5wdXQgdGV4aW5mbycgdG8gc2hvdyB1cC4KKyUgVGhhdCBpcyB3aGF0IFxlYXRpbnB1dCBpcyBmb3I7IGFmdGVyIHRoYXQsIHRoZSBgXCcgc2hvdWxkIHJldmVydCB0byBwcmludGluZworJSBhIGJhY2tzbGFzaC4KKyUKK0BnZGVmQGVhdGlucHV0IGlucHV0IHRleGluZm97QGZpeGJhY2tzbGFzaH0KK0BnbG9iYWxAbGV0XCA9IEBlYXRpbnB1dAorCislIE9uIHRoZSBvdGhlciBoYW5kLCBwZXJoYXBzIHRoZSBmaWxlIGRpZCBub3QgaGF2ZSBhIGBcaW5wdXQgdGV4aW5mbycuIFRoZW4KKyUgdGhlIGZpcnN0IGBceyBpbiB0aGUgZmlsZSB3b3VsZCBjYXVzZSBhbiBlcnJvci4gVGhpcyBtYWNybyB0cmllcyB0byBmaXgKKyUgdGhhdCwgYXNzdW1pbmcgaXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgYFwnIGNvdWxkIHBsYXVzaWJseSBvY2N1ci4KKyUgQWxzbyBiYWNrIHR1cm4gb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gdGhlIGlucHV0CislIGZpbGUgbmFtZSwgaW4gY2FzZSBub3QgdXNpbmcgYSBwcmUtZHVtcGVkIGZvcm1hdC4KKyUKK0BnZGVmQGZpeGJhY2tzbGFzaHslCisgIEBpZnhcQGVhdGlucHV0IEBsZXRcID0gQG5vcm1hbGJhY2tzbGFzaCBAZmkKKyAgQGNhdGNvZGVgKz1AYWN0aXZlCisgIEBjYXRjb2RlYEBfPUBhY3RpdmUKK30KKworJSBTYXkgQGZvbywgbm90IFxmb28sIGluIGVycm9yIG1lc3NhZ2VzLgorQGVzY2FwZWNoYXIgPSBgQEAKKworJSBUaGVzZSBsb29rIG9rIGluIGFsbCBmb250cywgc28ganVzdCBtYWtlIHRoZW0gbm90IHNwZWNpYWwuCitAY2F0Y29kZWBAJiA9IEBvdGhlcgorQGNhdGNvZGVgQCMgPSBAb3RoZXIKK0BjYXRjb2RlYEAlID0gQG90aGVyCisKK0BjIFNldCBpbml0aWFsIGZvbnRzLgorQHRleHRmb250cworQHJtCisKKworQGMgTG9jYWwgdmFyaWFibGVzOgorQGMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorQGMgcGFnZS1kZWxpbWl0ZXI6ICJeXFxcXG1lc3NhZ2UiCitAYyB0aW1lLXN0YW1wLXN0YXJ0OiAiZGVmXFxcXHRleGluZm92ZXJzaW9ueyIKK0BjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorQGMgdGltZS1zdGFtcC1lbmQ6ICJ9IgorQGMgRW5kOgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9pbmV0X250b3AuYyBiL25ldHBlcmYtMi40LjUvaW5ldF9udG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlNTQyZAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvaW5ldF9udG9wLmMKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgIm1pc3NpbmdcaW5ldF9udG9wLmMiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9pbnN0YWxsLXNoIGIvbmV0cGVyZi0yLjQuNS9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjZTYzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L2luc3RhbGwtc2gKQEAgLTAsMCArMSwyOTQgQEAKKyMhL2Jpbi9zaAorIworIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKKyMKKyMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcworIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQorIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKKyMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQorIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIworIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAorIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KKyMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQorIyB0aXVtLgorIworIworIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgorIworIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAorIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgorIworIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCisjIGZyb20gc2NyYXRjaC4gIEl0IGNhbiBvbmx5IGluc3RhbGwgb25lIGZpbGUgYXQgYSB0aW1lLCBhIHJlc3RyaWN0aW9uCisjIHNoYXJlZCB3aXRoIG1hbnkgT1MncyBpbnN0YWxsIHByb2dyYW1zLgorCisKKyMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAorCisjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCitkb2l0PSIke0RPSVRQUk9HLX0iCisKKworIyBwdXQgaW4gYWJzb2x1dGUgcGF0aHMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7IG9yIHVzZSBlbnYuIHZhcnMuCisKK212cHJvZz0iJHtNVlBST0ctbXZ9IgorY3Bwcm9nPSIke0NQUFJPRy1jcH0iCitjaG1vZHByb2c9IiR7Q0hNT0RQUk9HLWNobW9kfSIKK2Nob3ducHJvZz0iJHtDSE9XTlBST0ctY2hvd259IgorY2hncnBwcm9nPSIke0NIR1JQUFJPRy1jaGdycH0iCitzdHJpcHByb2c9IiR7U1RSSVBQUk9HLXN0cmlwfSIKK3JtcHJvZz0iJHtSTVBST0ctcm19IgorbWtkaXJwcm9nPSIke01LRElSUFJPRy1ta2Rpcn0iCisKK3RyYW5zZm9ybWJhc2VuYW1lPSIiCit0cmFuc2Zvcm1fYXJnPSIiCitpbnN0Y21kPSIkbXZwcm9nIgorY2htb2RjbWQ9IiRjaG1vZHByb2cgMDc1NSIKK2Nob3duY21kPSIiCitjaGdycGNtZD0iIgorc3RyaXBjbWQ9IiIKK3JtY21kPSIkcm1wcm9nIC1mIgorbXZjbWQ9IiRtdnByb2ciCitzcmM9IiIKK2RzdD0iIgorZGlyX2FyZz0iIgorCit3aGlsZSBbIHgiJDEiICE9IHggXTsgZG8KKyAgICBjYXNlICQxIGluCisJLWMpIGluc3RjbWQ9JGNwcHJvZworCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZCkgZGlyX2FyZz10cnVlCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1tKSBjaG1vZGNtZD0iJGNobW9kcHJvZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJICAgIHNoaWZ0CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS10PSopIHRyYW5zZm9ybWFyZz1gZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJKikgIGlmIFsgeCIkc3JjIiA9IHggXQorCSAgICB0aGVuCisJCXNyYz0kMQorCSAgICBlbHNlCisJCSMgdGhpcyBjb2xvbiBpcyB0byB3b3JrIGFyb3VuZCBhIDM4NkJTRCAvYmluL3NoIGJ1ZworCQk6CisJCWRzdD0kMQorCSAgICBmaQorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisgICAgZXNhYworZG9uZQorCitpZiBbIHgiJHNyYyIgPSB4IF0KK3RoZW4KKwllY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQiID4mMgorCWV4aXQgMQorZWxzZQorCToKK2ZpCisKK2lmIFsgeCIkZGlyX2FyZyIgIT0geCBdOyB0aGVuCisJZHN0PSRzcmMKKwlzcmM9IiIKKworCWlmIFsgLWQgIiRkc3QiIF07IHRoZW4KKwkJaW5zdGNtZD06CisJCWNobW9kY21kPSIiCisJZWxzZQorCQlpbnN0Y21kPSRta2RpcnByb2cKKwlmaQorZWxzZQorCisjIFdhaXRpbmcgZm9yIHRoaXMgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlICIkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyMgbWlnaHQgY2F1c2UgZGlyZWN0b3JpZXMgdG8gYmUgY3JlYXRlZCwgd2hpY2ggd291bGQgYmUgZXNwZWNpYWxseSBiYWQKKyMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorCisJaWYgWyAtZiAiJHNyYyIgXSB8fCBbIC1kICIkc3JjIiBdCisJdGhlbgorCQk6CisJZWxzZQorCQllY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdCIgPiYyCisJCWV4aXQgMQorCWZpCisKKwlpZiBbIHgiJGRzdCIgPSB4IF0KKwl0aGVuCisJCWVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiID4mMgorCQlleGl0IDEKKwllbHNlCisJCToKKwlmaQorCisjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyBpZiB5b3VyIHN5c3RlbQorIyBkb2VzIG5vdCBsaWtlIGRvdWJsZSBzbGFzaGVzIGluIGZpbGVuYW1lcywgeW91IG1heSBuZWVkIHRvIGFkZCBzb21lIGxvZ2ljCisKKwlpZiBbIC1kICIkZHN0IiBdCisJdGhlbgorCQlkc3Q9JGRzdC9gYmFzZW5hbWUgIiRzcmMiYAorCWVsc2UKKwkJOgorCWZpCitmaQorCisjIyB0aGlzIHNlZCBjb21tYW5kIGVtdWxhdGVzIHRoZSBkaXJuYW1lIGNvbW1hbmQKK2RzdGRpcj1gZWNobyAiJGRzdCIgfCBzZWQgLWUgJ3MsW14vXSokLCw7cywvJCwsO3MsXiQsLiwnYAorCisjIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzLgorIyAgdGhpcyBwYXJ0IGlzIHRha2VuIGZyb20gTm9haCBGcmllZG1hbidzIG1raW5zdGFsbGRpcnMgc2NyaXB0CisKKyMgU2tpcCBsb3RzIG9mIHN0YXQgY2FsbHMgaW4gdGhlIHVzdWFsIGNhc2UuCitpZiBbICEgLWQgIiRkc3RkaXIiIF07IHRoZW4KK2RlZmF1bHRJRlM9JworCScKK0lGUz0iJHtJRlMtJGRlZmF1bHRJRlN9IgorCitvSUZTPSRJRlMKKyMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCitJRlM9JyUnCitzZXQgLSBgZWNobyAiJGRzdGRpciIgfCBzZWQgLWUgJ3NAL0AlQGcnIC1lICdzQF4lQC9AJ2AKK0lGUz0kb0lGUworCitwYXRoY29tcD0nJworCit3aGlsZSBbICQjIC1uZSAwIF0gOyBkbworCXBhdGhjb21wPSRwYXRoY29tcCQxCisJc2hpZnQKKworCWlmIFsgISAtZCAiJHBhdGhjb21wIiBdIDsKKyAgICAgICAgdGhlbgorCQkkbWtkaXJwcm9nICIkcGF0aGNvbXAiCisJZWxzZQorCQk6CisJZmkKKworCXBhdGhjb21wPSRwYXRoY29tcC8KK2RvbmUKK2ZpCisKK2lmIFsgeCIkZGlyX2FyZyIgIT0geCBdCit0aGVuCisJJGRvaXQgJGluc3RjbWQgIiRkc3QiICYmCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICIkZHN0IjsgZWxzZSA6IDsgZmkgJiYKKwlpZiBbIHgiJGNoZ3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgZWxzZSA6IDsgZmkgJiYKKwlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICIkZHN0IjsgZWxzZSA6IDsgZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICIkZHN0IjsgZWxzZSA6IDsgZmkKK2Vsc2UKKworIyBJZiB3ZSdyZSBnb2luZyB0byByZW5hbWUgdGhlIGZpbmFsIGV4ZWN1dGFibGUsIGRldGVybWluZSB0aGUgbmFtZSBub3cuCisKKwlpZiBbIHgiJHRyYW5zZm9ybWFyZyIgPSB4IF0KKwl0aGVuCisJCWRzdGZpbGU9YGJhc2VuYW1lICIkZHN0ImAKKwllbHNlCisJCWRzdGZpbGU9YGJhc2VuYW1lICIkZHN0IiAkdHJhbnNmb3JtYmFzZW5hbWUgfAorCQkJc2VkICR0cmFuc2Zvcm1hcmdgJHRyYW5zZm9ybWJhc2VuYW1lCisJZmkKKworIyBkb24ndCBhbGxvdyB0aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCisKKwlpZiBbIHgiJGRzdGZpbGUiID0geCBdCisJdGhlbgorCQlkc3RmaWxlPWBiYXNlbmFtZSAiJGRzdCJgCisJZWxzZQorCQk6CisJZmkKKworIyBNYWtlIGEgY291cGxlIG9mIHRlbXAgZmlsZSBuYW1lcyBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKworCWRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworCXJtdG1wPSRkc3RkaXIvX3JtLiQkXworCisjIFRyYXAgdG8gY2xlYW4gdXAgdGVtcCBmaWxlcyBhdCBleGl0LgorCisJdHJhcCAnc3RhdHVzPSQ/OyBybSAtZiAiJGRzdHRtcCIgIiRybXRtcCIgJiYgZXhpdCAkc3RhdHVzJyAwCisJdHJhcCAnKGV4aXQgJD8pOyBleGl0JyAxIDIgMTMgMTUKKworIyBNb3ZlIG9yIGNvcHkgdGhlIGZpbGUgbmFtZSB0byB0aGUgdGVtcCBuYW1lCisKKwkkZG9pdCAkaW5zdGNtZCAiJHNyYyIgIiRkc3R0bXAiICYmCisKKyMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cworCisjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgZWxzZSA6O2ZpICYmCisJaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAiJGRzdHRtcCI7IGVsc2UgOjtmaSAmJgorCWlmIFsgeCIkc3RyaXBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyBlbHNlIDo7ZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICIkZHN0dG1wIjsgZWxzZSA6O2ZpICYmCisKKyMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4gIFdlIHRyeSB0aGlzCisjIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZSBzeXN0ZW1zIGFuZCB0aGUgZGVzdGluYXRpb24KKyMgZmlsZSBtaWdodCBiZSBidXN5IGZvciBvdGhlciByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cAorIyBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3IGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgorCit7CisJaWYgWyAtZiAiJGRzdGRpci8kZHN0ZmlsZSIgXQorCXRoZW4KKwkJJGRvaXQgJHJtY21kIC1mICIkZHN0ZGlyLyRkc3RmaWxlIiAyPi9kZXYvbnVsbCB8fAorCQkkZG9pdCAkbXZjbWQgLWYgIiRkc3RkaXIvJGRzdGZpbGUiICIkcm10bXAiIDI+L2Rldi9udWxsIHx8CisJCXsKKwkJICBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdGRpci8kZHN0ZmlsZSIgPiYyCisJCSAgKGV4aXQgMSk7IGV4aXQKKwkJfQorCWVsc2UKKwkJOgorCWZpCit9ICYmCisKKyMgTm93IHJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKworCSRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3RkaXIvJGRzdGZpbGUiCisKK2ZpICYmCisKKyMgVGhlIGZpbmFsIGxpdHRsZSB0cmljayB0byAiY29ycmVjdGx5IiBwYXNzIHRoZSBleGl0IHN0YXR1cyB0byB0aGUgZXhpdCB0cmFwLgorCit7CisJKGV4aXQgMCk7IGV4aXQKK30KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvbTQvbTQvc2FsZW4ubTQgYi9uZXRwZXJmLTIuNC41L200L200L3NhbGVuLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODU4ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L200L200L3NhbGVuLm00CkBAIC0wLDAgKzEsMzIgQEAKK2RubCBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgKK2RubCB0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKK2RubCBkbmwgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKK2RubCBkbmwgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCitkbmwgZG5sIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgorZG5sIGRubCB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorZG5sIGRubCBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKK2RubCBkbmwgd3JpdHRlbiBwZXJtaXNzaW9uLgorZG5sIGRubCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitkbmwgZG5sIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitkbmwgZG5sIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCitkbmwgZG5sCitkbmwgZG5sIExCTCBhdXRvY29uZiBtYWNyb3MKK2RubCBkbmwKK2RubAorZG5sCitkbmwgQ2hlY2tzIHRvIHNlZSBpZiB0aGUgc29ja2FkZHIgc3RydWN0IGhhcyB0aGUgNC40IEJTRCBzYV9sZW4gbWVtYmVyCitkbmwgYm9ycm93ZWQgZnJvbSBMQkwgbGlicGNhcAorQUNfREVGVU4oQUNfQ0hFQ0tfU0FfTEVOLCBbCisgICAgICAgIEFDX01TR19DSEVDS0lORyhpZiBzb2NrYWRkciBzdHJ1Y3QgaGFzIHNhX2xlbiBtZW1iZXIpCisgICAgICAgIEFDX0NBQ0hFX1ZBTCgkMSwKKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworIyAgICAgICAgICAgICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorIyAgICAgICAgICAgICAgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAorICAgICAgICAgICAgICAgIFt1X2ludCBpID0gc2l6ZW9mKCgoc3RydWN0IHNvY2thZGRyICopMCktPnNhX2xlbildLAorICAgICAgICAgICAgICAgICQxPXllcywKKyAgICAgICAgICAgICAgICAkMT1ubykpCisgICAgICAgIEFDX01TR19SRVNVTFQoJCQxKQorICAgICAgICAgICAgICAgIGlmIHRlc3QgJCQxID0geWVzIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX1NPQ0tBRERSX1NBX0xFTl0sMSxbRGVmaW5lIGlmIHN0cnVjdCBzb2NrYWRkciBoYXMgdGhlIHNhX2xlbiBtZW1iZXJdKQorICAgICAgICBmaQorXSkKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvbTQvbTQvc29ja2FkZHJpbjYubTQgYi9uZXRwZXJmLTIuNC41L200L200L3NvY2thZGRyaW42Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MjcwZjMKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L200L200L3NvY2thZGRyaW42Lm00CkBAIC0wLDAgKzEsNjAgQEAKK2RubCAqCitkbmwgKiBDb3B5cmlnaHQgKGMpIDIwMDEgIE1vdG95dWtpIEthc2FoYXJhCitkbmwgKgorZG5sICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitkbmwgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2RubCAqIGFyZSBtZXQ6CitkbmwgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorZG5sICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RubCAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitkbmwgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworZG5sICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCitkbmwgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK2RubCAqIAorZG5sICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK2RubCAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorZG5sICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitkbmwgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTQkUKK2RubCAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK2RubCAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitkbmwgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK2RubCAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitkbmwgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorZG5sICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorZG5sICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorZG5sICoKKworZG5sICogCitkbmwgKiBDaGVjayBmb3Igc3RydWN0IHNvY2thZGRyX2luNgorZG5sICoKK0FDX0RFRlVOKFtBQ19TVFJVQ1RfU09DS0FERFJfSU42XSwKK1tBQ19DQUNIRV9DSEVDSyhmb3Igc3RydWN0IHNvY2thZGRyX2luNiwgYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNiwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dXSwgW1sKK3N0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcmVzczsKK11dKV0sW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9pbjY9eWVzXSxbYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNj1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfaW42IiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjYsIDEsCitbRGVmaW5lIHRvIDEgaWYgPG5ldGluZXQvaW4uaD4gZGVmaW5lcyBgc3RydWN0IHNvY2thZGRyX2luNiddKQorZmldKQorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQorZG5sICogCitBQ19ERUZVTihbQUNfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VdLAorW0FDX0NBQ0hFX0NIRUNLKGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSwgYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0sIFtbCitzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyZXNzOworXV0pXSxbYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9eWVzXSxbYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9bm9dKV0pCitpZiB0ZXN0ICIkYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UsIDEsCitbRGVmaW5lIHRvIDEgaWYgPG5ldGluZXQvaW4uaD4gZGVmaW5lcyBgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UnXSkKK2ZpXSkKKwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9tNC9tNC9zb2NraW50dHlwZXMubTQgYi9uZXRwZXJmLTIuNC41L200L200L3NvY2tpbnR0eXBlcy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDk0MDYzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9tNC9tNC9zb2NraW50dHlwZXMubTQKQEAgLTAsMCArMSwxNTQgQEAKK2RubCAqCitkbmwgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDMgIE1vdG95dWtpIEthc2FoYXJhCitkbmwgKgorZG5sICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitkbmwgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2RubCAqIGFyZSBtZXQ6CitkbmwgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorZG5sICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RubCAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitkbmwgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworZG5sICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCitkbmwgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK2RubCAqIAorZG5sICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK2RubCAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorZG5sICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitkbmwgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTQkUKK2RubCAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK2RubCAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitkbmwgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK2RubCAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitkbmwgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorZG5sICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorZG5sICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorZG5sICoKKworZG5sICogCitkbmwgKiBDaGVjayBmb3Igc29ja2xlbl90LgorZG5sICogCitBQ19ERUZVTihbQUNfVFlQRV9TT0NLTEVOX1RdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc29ja2xlbl90XSwgYWNfY3ZfdHlwZV9zb2NrbGVuX3QsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1sKK3NvY2tsZW5fdCBzb2NrbGVuOworXV0pXSxbYWNfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzXSxbYWNfY3ZfdHlwZV9zb2NrbGVuX3Q9bm9dKV0pCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zb2NrbGVuX3QiICE9IHllczsgdGhlbgorICAgIEFDX0RFRklORShzb2NrbGVuX3QsIGludCwKK1tEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBvciA8c3lzL3NvY2tldC5oPiBkb2VzIG5vdCBkZWZpbmUuXSkKK2ZpXSkKKworZG5sICogCitkbmwgKiBDaGVjayBmb3IgaW5fcG9ydF90LgorZG5sICogCitBQ19ERUZVTihbQUNfVFlQRV9JTl9QT1JUX1RdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgaW5fcG9ydF90XSwgYWNfY3ZfdHlwZV9pbl9wb3J0X3QsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0sIFtbCitpbl9wb3J0X3QgaW5fcG9ydDsKK11dKV0sW2FjX2N2X3R5cGVfaW5fcG9ydF90PXllc10sW2FjX2N2X3R5cGVfaW5fcG9ydF90PW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfaW5fcG9ydF90IiAhPSB5ZXM7IHRoZW4KKyAgICBhY19jdl9zaW5fcG9ydF9zaXplPXVua25vd24KKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zaW5fcG9ydCkgPT0gc2l6ZW9mKGxvbmcpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zaW5fcG9ydF9zaXplPWxvbmddLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNpbl9wb3J0KSA9PSBzaXplb2YoaW50KSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2luX3BvcnRfc2l6ZT1pbnRdLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNpbl9wb3J0KSA9PSBzaXplb2Yoc2hvcnQpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zaW5fcG9ydF9zaXplPXNob3J0XSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zaW5fcG9ydCkgPT0gc2l6ZW9mKGNoYXIpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zaW5fcG9ydF9zaXplPWNoYXJdLFtdLFtdKQorICAgIGlmIHRlc3QgIiRhY19jdl9zaW5fcG9ydF9zaXplIiA9IHVua25vd247IHRoZW4KKwlBQ19NU0dfRVJST1IoW0ZhaWxlZCB0byBnZXQgc2l6ZSBvZiBzaW5fcG9ydCBpbiBzdHJ1Y3Qgc29ja2FkZHJfaW4uXSkKKyAgICBmaQorICAgIEFDX0RFRklORV9VTlFVT1RFRChpbl9wb3J0X3QsIHVuc2lnbmVkICRhY19jdl9zaW5fcG9ydF9zaXplLAorW0RlZmluZSB0byBgdW5zaWduZWQgY2hhcicsIGB1bnNpZ25lZCBzaG9ydCcsIGB1bnNpZ25lZCBpbnQnIG9yCitgdW5zaWduZWQgbG9uZycgYWNjb3JkaW5nIHdpdGggc2l6ZSBvZiBgc2luX3BvcnQnIGluIGBzdHJ1Y3Qgc29ja2FkZHJfaW4nLAoraWYgPHN5cy90eXBlcy5oPiwgPHN5cy9zb2NrZXQuaD4gb3IgPG5ldGluZXQvaW4uaD4gZG9lcyBub3QgZGVmaW5lCitgaW5fcG9ydF90Jy5dKQorZmldKQorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBzYV9mYW1pbHlfdC4KK2RubCAqIAorQUNfREVGVU4oW0FDX1RZUEVfU0FfRkFNSUxZX1RdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc2FfZmFtaWx5X3RdLCBhY19jdl90eXBlX3NhX2ZhbWlseV90LAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sIFtbCitzYV9mYW1pbHlfdCBzYV9mYW1pbHk7CitdXSldLFthY19jdl90eXBlX3NhX2ZhbWlseV90PXllc10sW2FjX2N2X3R5cGVfc2FfZmFtaWx5X3Q9bm9dKV0pCitpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCIgIT0geWVzOyB0aGVuCisgICAgYWNfY3Zfc2FfZmFtaWx5X3NpemU9dW5rbm93bgorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zYV9mYW1pbHkpID09IHNpemVvZihsb25nKSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2FfZmFtaWx5X3NpemU9bG9uZ10sW10sW10pCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNhX2ZhbWlseSkgPT0gc2l6ZW9mKGludCkpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3NhX2ZhbWlseV9zaXplPWludF0sW10sW10pCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICBpbnQgbWFpbigpIHsKKwlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKwlyZXR1cm4gKHNpemVvZihhZGRyLnNhX2ZhbWlseSkgPT0gc2l6ZW9mKHNob3J0KSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2FfZmFtaWx5X3NpemU9c2hvcnRdLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zYV9mYW1pbHkpID09IHNpemVvZihjaGFyKSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2FfZmFtaWx5X3NpemU9Y2hhcl0sW10sW10pCisgICAgaWYgdGVzdCAiJGFjX2N2X3NhX2ZhbWlseV9zaXplIiA9IHVua25vd247IHRoZW4KKwlBQ19NU0dfRVJST1IoW0ZhaWxlZCB0byBnZXQgc2l6ZSBvZiBzYV9mYW1pbHkgaW4gc3RydWN0IHNvY2thZGRyLl0pCisgICAgZmkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoc2FfZmFtaWx5X3QsIHVuc2lnbmVkICRhY19jdl9zYV9mYW1pbHlfc2l6ZSwKK1tEZWZpbmUgdG8gYHVuc2lnbmVkIGNoYXInLCBgdW5zaWduZWQgc2hvcnQnLCBgdW5zaWduZWQgaW50JyBvcgorYHVuc2lnbmVkIGxvbmcnIGFjY29yZGluZyB3aXRoIHNpemUgb2YgYHNhX2ZhbWlseScgaW4gYHN0cnVjdCBzb2NrYWRkcicsCitpZiA8c3lzL3R5cGVzLmg+IG9yIDxzeXMvc29ja2V0Lmg+IGRvZXMgbm90IGRlZmluZSBgc2FfZmFtaWx5X3QnLl0pCitmaV0pCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L21pc3NpbmcgYi9uZXRwZXJmLTIuNC41L21pc3NpbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmM1NGM2NAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvbWlzc2luZwpAQCAtMCwwICsxLDMzNiBAQAorIyEgL2Jpbi9zaAorIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCisjIDAyMTExLTEzMDcsIFVTQS4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgZWNobyAxPiYyICJUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICBleGl0IDEKK2ZpCisKK3J1bj06CisKKyMgSW4gdGhlIGNhc2VzIHdoZXJlIHRoaXMgbWF0dGVycywgYG1pc3NpbmcnIGlzIGJlaW5nIHJ1biBpbiB0aGUKKyMgc3JjZGlyIGFscmVhZHkuCitpZiB0ZXN0IC1mIGNvbmZpZ3VyZS5hYzsgdGhlbgorICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmFjCitlbHNlCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuaW4KK2ZpCisKK2Nhc2UgIiQxIiBpbgorLS1ydW4pCisgICMgVHJ5IHRvIHJ1biByZXF1ZXN0ZWQgcHJvZ3JhbSwgYW5kIGp1c3QgZXhpdCBpZiBpdCBzdWNjZWVkcy4KKyAgcnVuPQorICBzaGlmdAorICAiJEAiICYmIGV4aXQgMAorICA7OworZXNhYworCisjIElmIGl0IGRvZXMgbm90IGV4aXN0LCBvciBmYWlscyB0byBydW4gKHBvc3NpYmx5IGFuIG91dGRhdGVkIHZlcnNpb24pLAorIyB0cnkgdG8gZW11bGF0ZSBpdC4KK2Nhc2UgIiQxIiBpbgorCisgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICBlY2hvICJcCiskMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KKworSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgorZXJyb3Igc3RhdHVzIGlmIHRoZXJlIGlzIG5vIGtub3duIGhhbmRsaW5nIGZvciBQUk9HUkFNLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscworCitTdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6CisgIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKKyAgYXV0b2NvbmYgICAgIHRvdWNoIGZpbGUgXGBjb25maWd1cmUnCisgIGF1dG9oZWFkZXIgICB0b3VjaCBmaWxlIFxgY29uZmlnLmguaW4nCisgIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgXGBNYWtlZmlsZS5pbicgZmlsZXMKKyAgYmlzb24gICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCisgIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgdGFyICAgICAgICAgIHRyeSB0YXIsIGdudXRhciwgZ3RhciwgdGhlbiB0YXIgd2l0aG91dCBub24tcG9ydGFibGUgZmxhZ3MKKyAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXSIKKyAgICA7OworCisgIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKKyAgICBlY2hvICJtaXNzaW5nIDAuNCAtIEdOVSBhdXRvbWFrZSIKKyAgICA7OworCisgIC0qKQorICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDEKKyAgICA7OworCisgIGFjbG9jYWwqKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50CisgICAgICAgICB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tCisgICAgICAgICBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgdG91Y2ggYWNsb2NhbC5tNAorICAgIDs7CisKKyAgYXV0b2NvbmYpCisgICAgaWYgdGVzdCAteiAiJHJ1biIgJiYgKCQxIC0tdmVyc2lvbikgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KKyAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBtaXNzaW5nIG9uIHlvdXIgc3lzdGVtLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZQorICAgICAgICAgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUKKyAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCisgICAgdG91Y2ggY29uZmlndXJlCisgICAgOzsKKworICBhdXRvaGVhZGVyKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2NvbmZpZy5oJyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQorICAgICAgICAgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmlsZXM9YHNlZCAtbiAncy9eWyBdKkFbQ01dX0NPTkZJR19IRUFERVIoXChbXildKlwpKS4qL1wxL3AnICR7Y29uZmlndXJlX2FjfWAKKyAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjb25maWcuaCIKKyAgICB0b3VjaF9maWxlcz0KKyAgICBmb3IgZiBpbiAkZmlsZXM7IGRvCisgICAgICBjYXNlICIkZiIgaW4KKyAgICAgICo6KikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAiYGVjaG8gIiRmIiB8CisJCQkJICAgICAgIHNlZCAtZSAncy9eW146XSo6Ly8nIC1lICdzLzouKi8vJ2A7OworICAgICAgKikgdG91Y2hfZmlsZXM9IiR0b3VjaF9maWxlcyAkZi5pbiI7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICB0b3VjaCAkdG91Y2hfZmlsZXMKKyAgICA7OworCisgIGF1dG9tYWtlKikKKyAgICBpZiB0ZXN0IC16ICIkcnVuIiAmJiAoJDEgLS12ZXJzaW9uKSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIyBXZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLgorICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG1pc3Npbmcgb24geW91ciBzeXN0ZW0uICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgTWFrZWZpbGUuYW0nLCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLgorICAgICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuCisgICAgICAgICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgZmluZCAuIC10eXBlIGYgLW5hbWUgTWFrZWZpbGUuYW0gLXByaW50IHwKKwkgICBzZWQgJ3MvXC5hbSQvLmluLycgfAorCSAgIHdoaWxlIHJlYWQgZjsgZG8gdG91Y2ggIiRmIjsgZG9uZQorICAgIDs7CisKKyAgYXV0b200dGUpCisgICAgaWYgdGVzdCAteiAiJHJ1biIgJiYgKCQxIC0tdmVyc2lvbikgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICMgV2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4KKyAgICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCB5b3UgZG8gbm90IHNlZW0gdG8gaGF2ZSBpdCBoYW5keSBvbiB5b3VyCisgICAgICAgICBzeXN0ZW0uICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCisgICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi0tb3V0cHV0WyA9XSpcKFteIF0qXCkuKi9cMS9wJ2AKKyAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLW9bIF0qXChbXiBdKlwpLiovXDEvcCdgCisgICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJdG91Y2ggJGZpbGUKKyAgICBlbHNlCisJdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCisJZWNobyAiIyEgL2Jpbi9zaCIKKwllY2hvICIjIENyZWF0ZWQgYnkgR05VIEF1dG9tYWtlIG1pc3NpbmcgYXMgYSByZXBsYWNlbWVudCBvZiIKKwllY2hvICIjICAkICRAIgorCWVjaG8gImV4aXQgMCIKKwljaG1vZCAreCAkZmlsZQorCWV4aXQgMQorICAgIGZpCisgICAgOzsKKworICBiaXNvbnx5YWNjKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgbWlzc2luZyBvbiB5b3VyIHN5c3RlbS4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC55JyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEJpc29uJyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEJpc29uJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBybSAtZiB5LnRhYi5jIHkudGFiLmgKKyAgICBpZiBbICQjIC1uZSAxIF07IHRoZW4KKyAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCisJY2FzZSAiJExBU1RBUkciIGluCisJKi55KQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvYy8nYAorCSAgICBpZiBbIC1mICIkU1JDRklMRSIgXTsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuYworCSAgICBmaQorCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvaC8nYAorCSAgICBpZiBbIC1mICIkU1JDRklMRSIgXTsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuaAorCSAgICBmaQorCSAgOzsKKwllc2FjCisgICAgZmkKKyAgICBpZiBbICEgLWYgeS50YWIuaCBdOyB0aGVuCisJZWNobyA+eS50YWIuaAorICAgIGZpCisgICAgaWYgWyAhIC1mIHkudGFiLmMgXTsgdGhlbgorCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+eS50YWIuYworICAgIGZpCisgICAgOzsKKworICBsZXh8ZmxleCkKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG1pc3Npbmcgb24geW91ciBzeXN0ZW0uICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAubCcgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBGbGV4JyBwYWNrYWdlCisgICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0CisgICAgICAgICBcYEZsZXgnIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIGxleC55eS5jCisgICAgaWYgWyAkIyAtbmUgMSBdOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgIiRMQVNUQVJHIiBpbgorCSoubCkKKwkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL2wkL2MvJ2AKKwkgICAgaWYgWyAtZiAiJFNSQ0ZJTEUiIF07IHRoZW4KKwkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIGxleC55eS5jCisJICAgIGZpCisJICA7OworCWVzYWMKKyAgICBmaQorICAgIGlmIFsgISAtZiBsZXgueXkuYyBdOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID5sZXgueXkuYworICAgIGZpCisgICAgOzsKKworICBoZWxwMm1hbikKKyAgICBpZiB0ZXN0IC16ICIkcnVuIiAmJiAoJDEgLS12ZXJzaW9uKSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIyBXZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLgorICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG1pc3Npbmcgb24geW91ciBzeXN0ZW0uICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorCSB5b3UgbW9kaWZpZWQgYSBkZXBlbmRlbmN5IG9mIGEgbWFudWFsIHBhZ2UuICBZb3UgbWF5IG5lZWQgdGhlCisJIFxgSGVscDJtYW4nIHBhY2thZ2UgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZQorCSBlZmZlY3QuICBZb3UgY2FuIGdldCBcYEhlbHAybWFuJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi1vIFwoW14gXSpcKS4qL1wxL3AnYAorICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgorCWZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi0tb3V0cHV0PVwoW14gXSpcKS4qL1wxL3AnYAorICAgIGZpCisgICAgaWYgWyAtZiAiJGZpbGUiIF07IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIuYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlIgorCWV4aXQgMQorICAgIGZpCisgICAgOzsKKworICBtYWtlaW5mbykKKyAgICBpZiB0ZXN0IC16ICIkcnVuIiAmJiAobWFrZWluZm8gLS12ZXJzaW9uKSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgIyBXZSBoYXZlIG1ha2VpbmZvLCBidXQgaXQgZmFpbGVkLgorICAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG1pc3Npbmcgb24geW91ciBzeXN0ZW0uICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAudGV4aScgb3IgXGAudGV4aW5mbycgZmlsZSwgb3IgYW55IG90aGVyIGZpbGUKKyAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cworICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKKyAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgorICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gJ3MvLiotbyBcKFteIF0qXCkuKi9cMS9wJ2AKKyAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KKyAgICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKyAgICAgIGZpbGU9YHNlZCAtbiAnL15Ac2V0ZmlsZW5hbWUvIHsgcy8uKiBcKFteIF0qXCkgKiQvXDEvOyBwOyBxOyB9JyAkZmlsZWAKKyAgICBmaQorICAgIHRvdWNoICRmaWxlCisgICAgOzsKKworICB0YXIpCisgICAgc2hpZnQKKyAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgorICAgICAgZWNobyAxPiYyICJFUlJPUjogXGB0YXInIHJlcXVpcmVzIC0tcnVuIgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgICMgV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRhciBpbiB0aGUgZ2VuZXJpYyBwYXJ0LgorICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgorICAgICMgbWVzc2FnZXMuCisgICAgaWYgKGdudXRhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGlmIChndGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgorICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKKyAgICBmaQorICAgIGZpcnN0YXJnPSIkMSIKKyAgICBpZiBzaGlmdDsgdGhlbgorCWNhc2UgIiRmaXJzdGFyZyIgaW4KKwkqbyopCisJICAgIGZpcnN0YXJnPWBlY2hvICIkZmlyc3RhcmciIHwgc2VkIHMvby8vYAorCSAgICB0YXIgIiRmaXJzdGFyZyIgIiRAIiAmJiBleGl0IDAKKwkgICAgOzsKKwllc2FjCisJY2FzZSAiJGZpcnN0YXJnIiBpbgorCSpoKikKKwkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9oLy9gCisJICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAorCSAgICA7OworCWVzYWMKKyAgICBmaQorCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKyAgICAgICAgIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIEdOVSB0YXIgb3IgRnJlZSBwYXh1dGlscywgb3IgY2hlY2sgdGhlCisgICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKKyAgICBleGl0IDEKKyAgICA7OworCisgICopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCB5b3UgZG8gbm90IHNlZW0gdG8gaGF2ZSBpdCBoYW5keSBvbiB5b3VyCisgICAgICAgICBzeXN0ZW0uICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgXGBSRUFETUUnIGZpbGUsCisgICAgICAgICBpdCBvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nCisgICAgICAgICB0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4gY2FzZQorICAgICAgICAgc29tZSBvdGhlciBwYWNrYWdlIHdvdWxkIGNvbnRhaW4gdGhpcyBtaXNzaW5nIFxgJDEnIHByb2dyYW0uIgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9ta2luc3RhbGxkaXJzIGIvbmV0cGVyZi0yLjQuNS9ta2luc3RhbGxkaXJzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyZDVmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L21raW5zdGFsbGRpcnMKQEAgLTAsMCArMSwxMTEgQEAKKyMhIC9iaW4vc2gKKyMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CisjIEF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorIyBDcmVhdGVkOiAxOTkzLTA1LTE2CisjIFB1YmxpYyBkb21haW4KKworZXJyc3RhdHVzPTAKK2Rpcm1vZGU9IiIKKwordXNhZ2U9IlwKK1VzYWdlOiBta2luc3RhbGxkaXJzIFstaF0gWy0taGVscF0gWy1tIG1vZGVdIGRpciAuLi4iCisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1oIHwgLS1oZWxwIHwgLS1oKikgICAgICAgICAjIC1oIGZvciBoZWxwCisgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKyAgICAgIGV4aXQgMAorICAgICAgOzsKKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworICAgICAgc2hpZnQKKyAgICAgIHRlc3QgJCMgLWVxIDAgJiYgeyBlY2hvICIkdXNhZ2UiIDE+JjI7IGV4aXQgMTsgfQorICAgICAgZGlybW9kZT0kMQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgLS0pICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgc2hpZnQKKyAgICAgIGJyZWFrCisgICAgICA7OworICAgIC0qKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHVua25vd24gb3B0aW9uCisgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKyAgICAgIGV4aXQgMQorICAgICAgOzsKKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZworICAgICAgYnJlYWsKKyAgICAgIDs7CisgIGVzYWMKK2RvbmUKKworZm9yIGZpbGUKK2RvCisgIGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgorICAgIHNoaWZ0CisgIGVsc2UKKyAgICBicmVhaworICBmaQorZG9uZQorCitjYXNlICQjIGluCisgIDApIGV4aXQgMCA7OworZXNhYworCitjYXNlICRkaXJtb2RlIGluCisgICcnKQorICAgIGlmIG1rZGlyIC1wIC0tIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorICAgICAgZXhlYyBta2RpciAtcCAtLSAiJEAiCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGlmIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS0gLiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCisgICAgICBleGVjIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS0gIiRAIgorICAgIGZpCisgICAgOzsKK2VzYWMKKworZm9yIGZpbGUKK2RvCisgIHNldCBmbm9yZCBgZWNobyAiOiRmaWxlIiB8IHNlZCAtbmUgJ3MvXjpcLy8jLztzL146Ly87cy9cLy8gL2c7cy9eIy9cLy87cCdgCisgIHNoaWZ0CisKKyAgcGF0aGNvbXA9CisgIGZvciBkCisgIGRvCisgICAgcGF0aGNvbXA9IiRwYXRoY29tcCRkIgorICAgIGNhc2UgJHBhdGhjb21wIGluCisgICAgICAtKikgcGF0aGNvbXA9Li8kcGF0aGNvbXAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKKworICAgICAgbWtkaXIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisgICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKyAgCWVycnN0YXR1cz0kbGFzdGVycgorICAgICAgZWxzZQorICAJaWYgdGVzdCAhIC16ICIkZGlybW9kZSI7IHRoZW4KKwkgIGVjaG8gImNobW9kICRkaXJtb2RlICRwYXRoY29tcCIKKyAgICAJICBsYXN0ZXJyPSIiCisgIAkgIGNobW9kICIkZGlybW9kZSIgIiRwYXRoY29tcCIgfHwgbGFzdGVycj0kPworCisgIAkgIGlmIHRlc3QgISAteiAiJGxhc3RlcnIiOyB0aGVuCisgIAkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisgIAkgIGZpCisgIAlmaQorICAgICAgZmkKKyAgICBmaQorCisgICAgcGF0aGNvbXA9IiRwYXRoY29tcC8iCisgIGRvbmUKK2RvbmUKKworZXhpdCAkZXJyc3RhdHVzCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgRW5kOgorIyBta2luc3RhbGxkaXJzIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9uZXRwZXJmLnNwZWMuaW4gYi9uZXRwZXJmLTIuNC41L25ldHBlcmYuc3BlYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Zjg2MzlhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9uZXRwZXJmLnNwZWMuaW4KQEAgLTAsMCArMSw1NSBAQAorU3VtbWFyeTogTmV0d29yayBQZXJmb3JtYW5jZSBUZXN0aW5nIFRvb2wKK05hbWU6IG5ldHBlcmYKK1ZlcnNpb246IEBWRVJTSU9OQAorUmVsZWFzZTogMQorQ29weXJpZ2h0OiBVbmtub3duCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0Jhc2UKK1VSTDogaHR0cDovL3d3dy5uZXRwZXJmLm9yZy8KK1BhY2thZ2VyOiBNYXJ0aW4gQS4gQnJvd24KK1NvdXJjZTogZnRwOi8vZnRwLm5ldHBlcmYub3JnL25ldHBlcmYvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negorQnVpbGRSb290OiAle190bXBwYXRofS8le25hbWV9LXJvb3QKK1ByZWZpeDogL3VzcgorCislZGVzY3JpcHRpb24KK01hbnkgZGlmZmVyZW50IG5ldHdvcmsgYmVuY2htYXJraW5nIHRvb2xzIGFyZSBjb2xsZWN0ZWQgaW4gdGhpcyBwYWNrYWdlLAorbWFpbnRhaW5lZCBieSBSaWNrIEpvbmVzIG9mIEhQLgorCislcHJlcAorJXNldHVwCisKKyVidWlsZAorIyVwYXRjaDAgLXAxCisuL2NvbmZpZ3VyZSBcCisgIC0tcHJlZml4PSV7X3ByZWZpeH0gXAorICAtLW1hbmRpcj0le19tYW5kaXJ9IFwKKyAgLS1pbmZvZGlyPSV7X2luZm9kaXJ9CittYWtlCisKKyVpbnN0YWxsCit0ZXN0ICIkUlBNX0JVSUxEX1JPT1QiID0gIi8iICAgIHx8IHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKK21ha2UgREVTVERJUj0ke1JQTV9CVUlMRF9ST09UfSBpbnN0YWxsCisKKyMgLS0gLnN2biBkaXJlY3Rvcnkgb25seSBuZWVkZWQgYnkgZGV2ZWxvcGVyczsgYmxvd2luZyBpdCBhd2F5CisjICAgIGluIG91ciBCVUlMRC8gZGlyZWN0b3J5LCBzbyB0aGF0IHdlIGRvIG5vdCBwYWNrYWdlIGl0CisjCitybSAtcmYgZG9jL2V4YW1wbGVzLy5zdm4KKworJWNsZWFuCit0ZXN0ICIkUlBNX0JVSUxEX1JPT1QiID0gIi8iICAgIHx8IHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKKworIyAlcG9zdAorCislZmlsZXMKKyVkZWZhdHRyKC0scm9vdCxyb290KQorJWRvYyBSRUFETUUgQVVUSE9SUyBDaGFuZ2VMb2cgSU5TVEFMTCBDT1BZSU5HCislZG9jIFJFQURNRS4qIFJlbGVhc2VfTm90ZXMKKyVkb2MgZG9jL2V4YW1wbGVzCisle19tYW5kaXJ9L21hbjEvKgorJXtfaW5mb2Rpcn0vKgorJXtfYmluZGlyfS9uZXRwZXJmCisle19iaW5kaXJ9L25ldHNlcnZlcgorCisKKyVjaGFuZ2Vsb2cKKyogU2F0IEp1biAxNyAyMDA2IE1hcnRpbiBBLiBCcm93biA8bWFydGluQGxpbnV4LWlwLm5ldD4KKy0gaW5pdGlhbCBjb250cmlidXRlZCBzcGVjZmlsZSBmb3IgbmV0cGVyZiBwYWNrYWdlICh2Mi40LjIpCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9NYWtlZmlsZS5hbSBiL25ldHBlcmYtMi40LjUvc3JjL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGExMjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI3IEBACitTVUJESVJTID0gbWlzc2luZworCitDTEVBTkZJTEVTID0gbmV0cGVyZl92ZXJzaW9uLmgKKworYmluX1BST0dSQU1TID0gbmV0cGVyZiBuZXRzZXJ2ZXIKKworQU1fQ0ZMQUdTID0gJChORVRQRVJGX0NGTEFHUykKKworVVNFX0NQVV9TT1VSQ0U9bmV0Y3B1X0BORVRDUFVfU09VUkNFQC5jCitVU0VfUlRfU09VUkNFPW5ldHJ0X0BORVRSVExLVVBfU09VUkNFQC5jCitVU0VfRFJWX1NPVVJDRT1uZXRkcnZfQE5FVERSVkxLVVBfU09VUkNFQC5jCitVU0VfU0xPVF9TT1VSQ0U9bmV0c2xvdF9ATkVUU0xPVExLVVBfU09VUkNFQC5jCitVU0VfU1lTX1NPVVJDRT1uZXRzeXNfQE5FVFNZU0xLVVBfU09VUkNFQC5jCitVU0VfU0VDX1NPVVJDRT1uZXRzZWNfQE5FVFNFQ0xLVVBfU09VUkNFQC5jCisKK0VYVFJBX0RJU1QgPSBuZXRjcHVfbm9uZS5jIG5ldGNwdV9sb29wZXIuYyBuZXRjcHVfcHN0YXQuYyBuZXRjcHVfcHN0YXRuZXcuYyBuZXRjcHVfcGVyZnN0YXQuYyBuZXRjcHVfcHJvY3N0YXQuYyBuZXRjcHVfa3N0YXQuYyBuZXRjcHVfa3N0YXQxMC5jIG5ldGNwdV9zeXNjdGwuYyBuZXRjcHVfbnRwZXJmLmMgbmV0Y3B1X29zeC5jIGRpcnMgTmV0UGVyZkRpci8qIE5ldFNlcnZlckRpci8qIG5ldHBlcmZfdmVyc2lvbi5oLmluIG5ldHJ0X3J0bmV0bGluay5jIG5ldHJ0X25vbmUuYyBuZXRydF9ydG1nZXQuYyBuZXRkcnZfZXRodG9vbC5jIG5ldGRydl9ub25lLmMgbmV0c2xvdF9saW51eC5jIG5ldHNsb3Rfbm9uZS5jIG5ldHN5c19ub25lLmMgbmV0c3lzX2hwdXgxMWkuYyBuZXRzeXNfbGludXguYyBuZXRzeXNfc29sYXJpcy5jIG5ldGRydl9zb2xhcmlzLmMgbmV0c2xvdF9zb2xhcmlzLmMgbmV0c2VjX2xpbnV4LmMgbmV0c2VjX25vbmUuYyBNYWtlZmlsZS51dworCitDT01NT05fU1JDID0gaGlzdC5oIG5ldGxpYi5jIG5ldGxpYi5oIG5ldGNwdS5oIG5ldHNoLmMgbmV0c2guaCBuZXR0ZXN0X2JzZC5jIG5ldHRlc3RfYnNkLmggbmV0dGVzdF9kbHBpLmMgbmV0dGVzdF9kbHBpLmggbmV0dGVzdF91bml4LmMgbmV0dGVzdF91bml4LmggbmV0dGVzdF94dGkuYyBuZXR0ZXN0X3h0aS5oIG5ldHRlc3Rfc2N0cC5jIG5ldHRlc3Rfc2N0cC5oIG5ldHBlcmZfdmVyc2lvbi5oIG5ldHRlc3Rfc2RwLmMgbmV0dGVzdF9zZHAuaCBuZXR0ZXN0X29tbmkuYyBuZXRfdXVpZC5jCisKK25ldHBlcmZfU09VUkNFUyA9IG5ldHBlcmYuYyAkKENPTU1PTl9TUkMpICQoVVNFX0NQVV9TT1VSQ0UpICQoVVNFX1JUX1NPVVJDRSkgJChVU0VfRFJWX1NPVVJDRSkgJChVU0VfU0xPVF9TT1VSQ0UpICQoVVNFX1NZU19TT1VSQ0UpICQoVVNFX1NFQ19TT1VSQ0UpCituZXRzZXJ2ZXJfU09VUkNFUyA9IG5ldHNlcnZlci5jICQoQ09NTU9OX1NSQykgJChVU0VfQ1BVX1NPVVJDRSkgJChVU0VfUlRfU09VUkNFKSAkKFVTRV9EUlZfU09VUkNFKSAkKFVTRV9TTE9UX1NPVVJDRSkgJChVU0VfU1lTX1NPVVJDRSkgJChVU0VfU0VDX1NPVVJDRSkKKworIyBpZiB0aGVyZSBhcmUgYW55ICJtaXNzaW5nIiByb3V0aW5lcywgdGhlIGxpYm9ianMgc2hvdWxkIGNvdmVyIGl0CitpZiBORUVEX0xJQkNPTVBBVAorbmV0cGVyZl9MREFERCA9IG1pc3NpbmcvbGliY29tcGF0LmEKK25ldHNlcnZlcl9MREFERCA9IG1pc3NpbmcvbGliY29tcGF0LmEKK2VuZGlmCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9NYWtlZmlsZS5pbiBiL25ldHBlcmYtMi40LjUvc3JjL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGRhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDU4NiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS43LjkgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6Citob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTkVFRF9MSUJDT01QQVRfRkFMU0UgPSBATkVFRF9MSUJDT01QQVRfRkFMU0VACitORUVEX0xJQkNPTVBBVF9UUlVFID0gQE5FRURfTElCQ09NUEFUX1RSVUVACitORVRDUFVfU09VUkNFID0gQE5FVENQVV9TT1VSQ0VACitORVREUlZMS1VQX1NPVVJDRSA9IEBORVREUlZMS1VQX1NPVVJDRUAKK05FVFJUTEtVUF9TT1VSQ0UgPSBATkVUUlRMS1VQX1NPVVJDRUAKK05FVFNFQ0xLVVBfU09VUkNFID0gQE5FVFNFQ0xLVVBfU09VUkNFQAorTkVUU0xPVExLVVBfU09VUkNFID0gQE5FVFNMT1RMS1VQX1NPVVJDRUAKK05FVFNZU0xLVVBfU09VUkNFID0gQE5FVFNZU0xLVVBfU09VUkNFQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitWRVJTSU9OID0gQFZFUlNJT05ACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK1NVQkRJUlMgPSBtaXNzaW5nCisKK0NMRUFORklMRVMgPSBuZXRwZXJmX3ZlcnNpb24uaAorCitiaW5fUFJPR1JBTVMgPSBuZXRwZXJmIG5ldHNlcnZlcgorCitBTV9DRkxBR1MgPSAkKE5FVFBFUkZfQ0ZMQUdTKQorCitVU0VfQ1BVX1NPVVJDRSA9IG5ldGNwdV9ATkVUQ1BVX1NPVVJDRUAuYworVVNFX1JUX1NPVVJDRSA9IG5ldHJ0X0BORVRSVExLVVBfU09VUkNFQC5jCitVU0VfRFJWX1NPVVJDRSA9IG5ldGRydl9ATkVURFJWTEtVUF9TT1VSQ0VALmMKK1VTRV9TTE9UX1NPVVJDRSA9IG5ldHNsb3RfQE5FVFNMT1RMS1VQX1NPVVJDRUAuYworVVNFX1NZU19TT1VSQ0UgPSBuZXRzeXNfQE5FVFNZU0xLVVBfU09VUkNFQC5jCitVU0VfU0VDX1NPVVJDRSA9IG5ldHNlY19ATkVUU0VDTEtVUF9TT1VSQ0VALmMKKworRVhUUkFfRElTVCA9IG5ldGNwdV9ub25lLmMgbmV0Y3B1X2xvb3Blci5jIG5ldGNwdV9wc3RhdC5jIG5ldGNwdV9wc3RhdG5ldy5jIG5ldGNwdV9wZXJmc3RhdC5jIG5ldGNwdV9wcm9jc3RhdC5jIG5ldGNwdV9rc3RhdC5jIG5ldGNwdV9rc3RhdDEwLmMgbmV0Y3B1X3N5c2N0bC5jIG5ldGNwdV9udHBlcmYuYyBuZXRjcHVfb3N4LmMgZGlycyBOZXRQZXJmRGlyLyogTmV0U2VydmVyRGlyLyogbmV0cGVyZl92ZXJzaW9uLmguaW4gbmV0cnRfcnRuZXRsaW5rLmMgbmV0cnRfbm9uZS5jIG5ldHJ0X3J0bWdldC5jIG5ldGRydl9ldGh0b29sLmMgbmV0ZHJ2X25vbmUuYyBuZXRzbG90X2xpbnV4LmMgbmV0c2xvdF9ub25lLmMgbmV0c3lzX25vbmUuYyBuZXRzeXNfaHB1eDExaS5jIG5ldHN5c19saW51eC5jIG5ldHN5c19zb2xhcmlzLmMgbmV0ZHJ2X3NvbGFyaXMuYyBuZXRzbG90X3NvbGFyaXMuYyBuZXRzZWNfbGludXguYyBuZXRzZWNfbm9uZS5jIE1ha2VmaWxlLnV3CisKK0NPTU1PTl9TUkMgPSBoaXN0LmggbmV0bGliLmMgbmV0bGliLmggbmV0Y3B1LmggbmV0c2guYyBuZXRzaC5oIG5ldHRlc3RfYnNkLmMgbmV0dGVzdF9ic2QuaCBuZXR0ZXN0X2RscGkuYyBuZXR0ZXN0X2RscGkuaCBuZXR0ZXN0X3VuaXguYyBuZXR0ZXN0X3VuaXguaCBuZXR0ZXN0X3h0aS5jIG5ldHRlc3RfeHRpLmggbmV0dGVzdF9zY3RwLmMgbmV0dGVzdF9zY3RwLmggbmV0cGVyZl92ZXJzaW9uLmggbmV0dGVzdF9zZHAuYyBuZXR0ZXN0X3NkcC5oIG5ldHRlc3Rfb21uaS5jIG5ldF91dWlkLmMKKworbmV0cGVyZl9TT1VSQ0VTID0gbmV0cGVyZi5jICQoQ09NTU9OX1NSQykgJChVU0VfQ1BVX1NPVVJDRSkgJChVU0VfUlRfU09VUkNFKSAkKFVTRV9EUlZfU09VUkNFKSAkKFVTRV9TTE9UX1NPVVJDRSkgJChVU0VfU1lTX1NPVVJDRSkgJChVU0VfU0VDX1NPVVJDRSkKK25ldHNlcnZlcl9TT1VSQ0VTID0gbmV0c2VydmVyLmMgJChDT01NT05fU1JDKSAkKFVTRV9DUFVfU09VUkNFKSAkKFVTRV9SVF9TT1VSQ0UpICQoVVNFX0RSVl9TT1VSQ0UpICQoVVNFX1NMT1RfU09VUkNFKSAkKFVTRV9TWVNfU09VUkNFKSAkKFVTRV9TRUNfU09VUkNFKQorCisjIGlmIHRoZXJlIGFyZSBhbnkgIm1pc3NpbmciIHJvdXRpbmVzLCB0aGUgbGlib2JqcyBzaG91bGQgY292ZXIgaXQKK0BORUVEX0xJQkNPTVBBVF9UUlVFQG5ldHBlcmZfTERBREQgPSBtaXNzaW5nL2xpYmNvbXBhdC5hCitATkVFRF9MSUJDT01QQVRfVFJVRUBuZXRzZXJ2ZXJfTERBREQgPSBtaXNzaW5nL2xpYmNvbXBhdC5hCitzdWJkaXIgPSBzcmMKK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9IG5ldHBlcmZfdmVyc2lvbi5oCitiaW5fUFJPR1JBTVMgPSBuZXRwZXJmJChFWEVFWFQpIG5ldHNlcnZlciQoRVhFRVhUKQorUFJPR1JBTVMgPSAkKGJpbl9QUk9HUkFNUykKKworYW1fX29iamVjdHNfMSA9IG5ldGxpYi4kKE9CSkVYVCkgbmV0c2guJChPQkpFWFQpIG5ldHRlc3RfYnNkLiQoT0JKRVhUKSBcCisJbmV0dGVzdF9kbHBpLiQoT0JKRVhUKSBuZXR0ZXN0X3VuaXguJChPQkpFWFQpIFwKKwluZXR0ZXN0X3h0aS4kKE9CSkVYVCkgbmV0dGVzdF9zY3RwLiQoT0JKRVhUKSBcCisJbmV0dGVzdF9zZHAuJChPQkpFWFQpIG5ldHRlc3Rfb21uaS4kKE9CSkVYVCkgbmV0X3V1aWQuJChPQkpFWFQpCithbV9fb2JqZWN0c18yID0gbmV0Y3B1X0BORVRDUFVfU09VUkNFQC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzMgPSBuZXRydF9ATkVUUlRMS1VQX1NPVVJDRUAuJChPQkpFWFQpCithbV9fb2JqZWN0c180ID0gbmV0ZHJ2X0BORVREUlZMS1VQX1NPVVJDRUAuJChPQkpFWFQpCithbV9fb2JqZWN0c181ID0gbmV0c2xvdF9ATkVUU0xPVExLVVBfU09VUkNFQC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzYgPSBuZXRzeXNfQE5FVFNZU0xLVVBfU09VUkNFQC4kKE9CSkVYVCkKK2FtX19vYmplY3RzXzcgPSBuZXRzZWNfQE5FVFNFQ0xLVVBfU09VUkNFQC4kKE9CSkVYVCkKK2FtX25ldHBlcmZfT0JKRUNUUyA9IG5ldHBlcmYuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSBcCisJJChhbV9fb2JqZWN0c18zKSAkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfNSkgXAorCSQoYW1fX29iamVjdHNfNikgJChhbV9fb2JqZWN0c183KQorbmV0cGVyZl9PQkpFQ1RTID0gJChhbV9uZXRwZXJmX09CSkVDVFMpCitATkVFRF9MSUJDT01QQVRfVFJVRUBuZXRwZXJmX0RFUEVOREVOQ0lFUyA9IG1pc3NpbmcvbGliY29tcGF0LmEKK0BORUVEX0xJQkNPTVBBVF9GQUxTRUBuZXRwZXJmX0RFUEVOREVOQ0lFUyA9CituZXRwZXJmX0xERkxBR1MgPQorYW1fbmV0c2VydmVyX09CSkVDVFMgPSBuZXRzZXJ2ZXIuJChPQkpFWFQpICQoYW1fX29iamVjdHNfMSkgXAorCSQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSAkKGFtX19vYmplY3RzXzQpIFwKKwkkKGFtX19vYmplY3RzXzUpICQoYW1fX29iamVjdHNfNikgJChhbV9fb2JqZWN0c183KQorbmV0c2VydmVyX09CSkVDVFMgPSAkKGFtX25ldHNlcnZlcl9PQkpFQ1RTKQorQE5FRURfTElCQ09NUEFUX1RSVUVAbmV0c2VydmVyX0RFUEVOREVOQ0lFUyA9IG1pc3NpbmcvbGliY29tcGF0LmEKK0BORUVEX0xJQkNPTVBBVF9GQUxTRUBuZXRzZXJ2ZXJfREVQRU5ERU5DSUVTID0KK25ldHNlcnZlcl9MREZMQUdTID0KKworREVGQVVMVF9JTkNMVURFUyA9ICAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitAQU1ERVBfVFJVRUBERVBfRklMRVMgPSAuLyQoREVQRElSKS9uZXRfdXVpZC5QbyBcCitAQU1ERVBfVFJVRUAJLi8kKERFUERJUikvbmV0Y3B1X0BORVRDUFVfU09VUkNFQC5QbyBcCitAQU1ERVBfVFJVRUAJLi8kKERFUERJUikvbmV0ZHJ2X0BORVREUlZMS1VQX1NPVVJDRUAuUG8gXAorQEFNREVQX1RSVUVACS4vJChERVBESVIpL25ldGxpYi5QbyAuLyQoREVQRElSKS9uZXRwZXJmLlBvIFwKK0BBTURFUF9UUlVFQAkuLyQoREVQRElSKS9uZXRydF9ATkVUUlRMS1VQX1NPVVJDRUAuUG8gXAorQEFNREVQX1RSVUVACS4vJChERVBESVIpL25ldHNlY19ATkVUU0VDTEtVUF9TT1VSQ0VALlBvIFwKK0BBTURFUF9UUlVFQAkuLyQoREVQRElSKS9uZXRzZXJ2ZXIuUG8gLi8kKERFUERJUikvbmV0c2guUG8gXAorQEFNREVQX1RSVUVACS4vJChERVBESVIpL25ldHNsb3RfQE5FVFNMT1RMS1VQX1NPVVJDRUAuUG8gXAorQEFNREVQX1RSVUVACS4vJChERVBESVIpL25ldHN5c19ATkVUU1lTTEtVUF9TT1VSQ0VALlBvIFwKK0BBTURFUF9UUlVFQAkuLyQoREVQRElSKS9uZXR0ZXN0X2JzZC5QbyBcCitAQU1ERVBfVFJVRUAJLi8kKERFUERJUikvbmV0dGVzdF9kbHBpLlBvIFwKK0BBTURFUF9UUlVFQAkuLyQoREVQRElSKS9uZXR0ZXN0X29tbmkuUG8gXAorQEFNREVQX1RSVUVACS4vJChERVBESVIpL25ldHRlc3Rfc2N0cC5QbyBcCitAQU1ERVBfVFJVRUAJLi8kKERFUERJUikvbmV0dGVzdF9zZHAuUG8gXAorQEFNREVQX1RSVUVACS4vJChERVBESVIpL25ldHRlc3RfdW5peC5QbyBcCitAQU1ERVBfVFJVRUAJLi8kKERFUERJUikvbmV0dGVzdF94dGkuUG8KK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RJU1RfU09VUkNFUyA9ICQobmV0cGVyZl9TT1VSQ0VTKSAkKG5ldHNlcnZlcl9TT1VSQ0VTKQorCitSRUNVUlNJVkVfVEFSR0VUUyA9IGluZm8tcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCisJcHMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlhbGwtcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGRpcnMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUgXAorCWNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBNYWtlZmlsZS5hbSBuZXRwZXJmX3ZlcnNpb24uaC5pbgorRElTVF9TVUJESVJTID0gJChTVUJESVJTKQorU09VUkNFUyA9ICQobmV0cGVyZl9TT1VSQ0VTKSAkKG5ldHNlcnZlcl9TT1VSQ0VTKQorCithbGw6IGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubyAub2JqCiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICBNYWtlZmlsZS5hbSAgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChBQ0xPQ0FMX000KQorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIHNyYy9NYWtlZmlsZQorTWFrZWZpbGU6ICAkKHNyY2RpcikvTWFrZWZpbGUuaW4gICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpCituZXRwZXJmX3ZlcnNpb24uaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgbmV0cGVyZl92ZXJzaW9uLmguaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAorYmluUFJPR1JBTVNfSU5TVEFMTCA9ICQoSU5TVEFMTF9QUk9HUkFNKQoraW5zdGFsbC1iaW5QUk9HUkFNUzogJChiaW5fUFJPR1JBTVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChiaW5kaXIpCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgcDE9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGlmIHRlc3QgLWYgJCRwIFwKKwkgIDsgdGhlbiBcCisJICAgIGY9YGVjaG8gIiQkcDEiIHwgc2VkICdzLF4uKi8sLDskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJ2A7IFwKKwkgICBlY2hvICIgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKGJpblBST0dSQU1TX0lOU1RBTEwpICQkcCAkKERFU1RESVIpJChiaW5kaXIpLyQkZiI7IFwKKwkgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoYmluUFJPR1JBTVNfSU5TVEFMTCkgJCRwICQoREVTVERJUikkKGJpbmRpcikvJCRmIHx8IGV4aXQgMTsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmUKKwordW5pbnN0YWxsLWJpblBST0dSQU1TOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj1gZWNobyAiJCRwIiB8IHNlZCAncyxeLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nYDsgXAorCSAgZWNobyAiIHJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJCRmIjsgXAorCSAgcm0gLWYgJChERVNURElSKSQoYmluZGlyKS8kJGY7IFwKKwlkb25lCisKK2NsZWFuLWJpblBST0dSQU1TOgorCS10ZXN0IC16ICIkKGJpbl9QUk9HUkFNUykiIHx8IHJtIC1mICQoYmluX1BST0dSQU1TKQorbmV0cGVyZiQoRVhFRVhUKTogJChuZXRwZXJmX09CSkVDVFMpICQobmV0cGVyZl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBuZXRwZXJmJChFWEVFWFQpCisJJChMSU5LKSAkKG5ldHBlcmZfTERGTEFHUykgJChuZXRwZXJmX09CSkVDVFMpICQobmV0cGVyZl9MREFERCkgJChMSUJTKQorbmV0c2VydmVyJChFWEVFWFQpOiAkKG5ldHNlcnZlcl9PQkpFQ1RTKSAkKG5ldHNlcnZlcl9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBuZXRzZXJ2ZXIkKEVYRUVYVCkKKwkkKExJTkspICQobmV0c2VydmVyX0xERkxBR1MpICQobmV0c2VydmVyX09CSkVDVFMpICQobmV0c2VydmVyX0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpIGNvcmUgKi5jb3JlCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXRfdXVpZC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0Y3B1X0BORVRDUFVfU09VUkNFQC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0ZHJ2X0BORVREUlZMS1VQX1NPVVJDRUAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL25ldGxpYi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0cGVyZi5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0cnRfQE5FVFJUTEtVUF9TT1VSQ0VALlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXRzZWNfQE5FVFNFQ0xLVVBfU09VUkNFQC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0c2VydmVyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXRzaC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0c2xvdF9ATkVUU0xPVExLVVBfU09VUkNFQC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0c3lzX0BORVRTWVNMS1VQX1NPVVJDRUAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL25ldHRlc3RfYnNkLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXR0ZXN0X2RscGkuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL25ldHRlc3Rfb21uaS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0dGVzdF9zY3RwLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXR0ZXN0X3NkcC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbmV0dGVzdF91bml4LlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9uZXR0ZXN0X3h0aS5Qb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJICAtYyAtbyAkQCBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlkZXBmaWxlPSckKERFUERJUikvJCouUG8nIHRtcGRlcGZpbGU9JyQoREVQRElSKS8kKi5UUG8nIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgdGVzdCAtZiAnJDwnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYCQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkgIC1jIC1vICRAIGBpZiB0ZXN0IC1mICckPCc7IHRoZW4gJChDWUdQQVRIX1cpICckPCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJDwnOyBmaWA7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAllbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACWRlcGZpbGU9JyQoREVQRElSKS8kKi5QbycgdG1wZGVwZmlsZT0nJChERVBESVIpLyQqLlRQbycgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGBpZiB0ZXN0IC1mICckPCc7IHRoZW4gJChDWUdQQVRIX1cpICckPCc7IGVsc2UgJChDWUdQQVRIX1cpICckKHNyY2RpcikvJDwnOyBmaWAKK3VuaW5zdGFsbC1pbmZvLWFtOgorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQHNldCBmbm9yZCAkJE1BS0VGTEFHUzsgYW1mPSQkMjsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgICB8fCBjYXNlICIkJGFtZiIgaW4gKj0qKSBleGl0IDE7OyAqayopIGZhaWw9eWVzOzsgKikgZXhpdCAxOzsgZXNhYzsgXAorCWRvbmU7IFwKKwlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAorCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKKwlmaTsgdGVzdCAteiAiJCRmYWlsIgorCittb3N0bHljbGVhbi1yZWN1cnNpdmUgY2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi1yZWN1cnNpdmUgXAorbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmU6CisJQHNldCBmbm9yZCAkJE1BS0VGTEFHUzsgYW1mPSQkMjsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAgfHwgY2FzZSAiJCRhbWYiIGluICo9KikgZXhpdCAxOzsgKmsqKSBmYWlsPXllczs7ICopIGV4aXQgMTs7IGVzYWM7IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0VUQUdTID0gZXRhZ3MKK0VUQUdTRkxBR1MgPQorCitDVEFHUyA9IGN0YWdzCitDVEFHU0ZMQUdTID0KKwordGFnczogVEFHUworCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCisKK1RBR1M6IHRhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoZXRhZ3MgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCWVsc2UgXAorCSAgaW5jbHVkZV9vcHRpb249LS1pbmNsdWRlOyBcCisJZmk7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIHRlc3QgLWYgJCRzdWJkaXIvVEFHUyAmJiBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitjdGFnczogQ1RBR1MKK0NUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorCit0b3BfZGlzdGRpciA9IC4uCitkaXN0ZGlyID0gJCh0b3BfZGlzdGRpcikvJChQQUNLQUdFKS0kKFZFUlNJT04pCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCSQobWtpbnN0YWxsZGlycykgJChkaXN0ZGlyKS9OZXRQZXJmRGlyICQoZGlzdGRpcikvTmV0U2VydmVyRGlyCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1raW5zdGFsbGRpcnMpICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAtZCAkKGRpc3RkaXIpLyQkc3ViZGlyIFwKKwkgICAgfHwgbWtkaXIgJChkaXN0ZGlyKS8kJHN1YmRpciBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgICAoY2QgJCRzdWJkaXIgJiYgXAorCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgXAorCSAgICAgICAgZGlzdGRpcj0uLi8kKGRpc3RkaXIpLyQkc3ViZGlyIFwKKwkgICAgICAgIGRpc3RkaXIpIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChiaW5kaXIpCisKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tcmVjdXJzaXZlCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tcmVjdXJzaXZlCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMKKworcGRmOiBwZGYtcmVjdXJzaXZlCisKK3BkZi1hbToKKworcHM6IHBzLXJlY3Vyc2l2ZQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWluZm8tYW0KKwordW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gXAorCWNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tcmVjdXJzaXZlIGN0YWdzIFwKKwljdGFncy1yZWN1cnNpdmUgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBcCisJZHZpLXJlY3Vyc2l2ZSBpbmZvIGluZm8tYW0gaW5mby1yZWN1cnNpdmUgaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWJpblBST0dSQU1TIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gXAorCWluc3RhbGwtZGF0YS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBcCisJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKKwlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtbWFuIGluc3RhbGwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCWluc3RhbGxkaXJzLWFtIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1yZWN1cnNpdmUgXAorCXBkZiBwZGYtYW0gcGRmLXJlY3Vyc2l2ZSBwcyBwcy1hbSBwcy1yZWN1cnNpdmUgdGFncyBcCisJdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtYmluUFJPR1JBTVMgXAorCXVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL01ha2VmaWxlLnV3IGIvbmV0cGVyZi0yLjQuNS9zcmMvTWFrZWZpbGUudXcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyODhjOAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL01ha2VmaWxlLnV3CkBAIC0wLDAgKzEsMTA2IEBACisjIFVzZXItd29ybGQgbmV0cGVyZiBNYWtlZmlsZS4KKyMgQ29weXJpZ2h0IDIwMDgsIFZNd2FyZSwgSW5jLgorIyBQb3J0aW9ucyBDb3B5cmlnaHQgMjAwOCwgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkuCisjCisjIEFzc3VtZSB3ZSdyZSBidWlsZGluZyBpbiBhIERESyB1bml2ZXJzZS4KKyMKK0JPUkFfUk9PVCA9IC9idWlsZC90b29sY2hhaW4vbGluMzIKKworIworIyB1c2Vyd29ybGQgbGlicmFyeSBwYXRocywgcmVsYXRpdmUgdG8gYm9yYS1yb290CisjCitVV0dDQ19ST09UICAgICAgID0gJChCT1JBX1JPT1QpL2djYy0zLjMuMworVVdHTElCQ19UT1BfRElSICA9ICQoQk9SQV9ST09UKS91d2dsaWJjLTIuMi41CitVV0dMSUJDX0xJQl9ESVIgID0gJChVV0dMSUJDX1RPUF9ESVIpL2xpYgorVVdHTElCQ19VU1JfRElSICA9ICQoVVdHTElCQ19UT1BfRElSKS91c3IvbGliCitVV0dMSUJDX0RFU1RfRElSID0gL3Vzci9saWIvdm13YXJlL2xpYgorCisjCisjIHVzZXJ3b3JsZCBpbmNsdWRlIHBhdGhzCisjCitHQ0NfSU5DTFVERVMgICA9IC1pc3lzdGVtICQoVVdHQ0NfUk9PVCkvbGliL2djYy1saWIvaTY4Ni1saW51eC8zLjMuMy9pbmNsdWRlCitHTElCQ19JTkNMVURFUyA9IC1pc3lzdGVtICQoQk9SQV9ST09UKS9nbGliYy0yLjIuNS00NC91c3IvaW5jbHVkZSAKKworIworIyB1c2Vyd29ybGQgY29tcGlsZXIgZW52aXJvbm1lbnQKKyMKK0NDID0gR0NDX0VYRUNfUFJFRklYPSIkKFVXR0NDX1JPT1QpL2xpYi9nY2MtbGliLyIgXAorCUtST09UPSQoQk9SQV9ST09UKSBcCisJUEFUSD0iJChVV0dDQ19ST09UKS9iaW46JChCT1JBX1JPT1QpL2JpbnV0aWxzLTIuMTYuMS12dC9iaW46L2Jpbjovc2JpbjovdXNyL3NiaW46L3Vzci9iaW4iIFwKKwkkKFVXR0NDX1JPT1QpL2Jpbi9pNjg2LWxpbnV4LWdjYworCitDQ19JTkNMVURFUyA9IC1ub3N0ZGluYyAkKEdDQ19JTkNMVURFUykgJChHTElCQ19JTkNMVURFUykgJChVV1ZFUl9JTkNMVURFUykKKworIworIyB1c2Vyd29ybGQgc2hhcmVkIGxpYnJhcmllcworIworVVdHTElCQ19MRExJTlVYX1NPID0gbGQtbGludXguc28uMgorCitVV0dMSUJDX0xJTktfT1BUUyA9IC1ub3N0ZGxpYiAtbm9zdGFydGZpbGVzIFwKKwktWGxpbmtlciAtLWR5bmFtaWMtbGlua2VyPSQoVVdHTElCQ19ERVNUX0RJUikvJChVV0dMSUJDX0xETElOVVhfU08pIFwKKwktWGxpbmtlciAteiAtWGxpbmtlciBub2RlZmF1bHRsaWIgXAorCS1YbGlua2VyIC1ycGF0aCAtWGxpbmtlciAkKFVXR0xJQkNfREVTVF9ESVIpIFwKKwktTCQoVVdHTElCQ19VU1JfRElSKSBcCisJLUwkKFVXR0xJQkNfTElCX0RJUikKKworVVdHTElCQ19MSU5LX0NSVFMgPSBcCisJJHtVV0dMSUJDX1RPUF9ESVJ9L3Vzci9saWIvY3J0MS5vIFwKKwkke1VXR0xJQkNfVE9QX0RJUn0vdXNyL2xpYi9jcnRpLm8gXAorCSR7VVdHQ0NfUk9PVH0vbGliL2djYy1saWIvaTY4Ni1saW51eC8zLjMuMy9jcnRiZWdpbi5vIFwKKwkke1VXR0NDX1JPT1R9L2xpYi9nY2MtbGliL2k2ODYtbGludXgvMy4zLjMvY3J0ZW5kLm8gXAorCSR7VVdHTElCQ19UT1BfRElSfS91c3IvbGliL2NydG4ubworCitDRkxBR1MgID0gLURWTVdBUkVfVVcgJChDQ19JTkNMVURFUykgLWcgLU8gLW1jcHU9cGVudGl1bXBybworQ0ZMQUdTICs9IC1EREVCVUdfTE9HX0ZJTEU9XCIvZGV2L251bGxcIiAtRERPX0ZJUlNUX0JVUlNUIC1ERE9fVU5JWAorCitVV0dMSUJDX0xJTktfTElCUyA9IC1sbSAtbGRsIC1scHRocmVhZCAtbHJlc29sdiAtbG5zc19uaXMgLWxuc3NfbmlzcGx1cyBcCisJLWxuc3NfZmlsZXMgLWxuc3NfY29tcGF0IC1sbnNzX2RucyAtbG5zbCAtbGMgLWxjX25vbnNoYXJlZCAtbGdjYworTERGTEFHUyA9ICQoVVdHTElCQ19MSU5LX09QVFMpICQoVVdHTElCQ19MSU5LX0NSVFMpIFwKKwkkKFVXR0xJQkNfTElOS19MSUJTKSAke1VXR0xJQkNfTElCX0RJUn0vJHtVV0dMSUJDX0xETElOVVhfU099CisKK05FVFNFUlZFUl9PQkpTID0gbmV0c2VydmVyLm8gbmV0dGVzdF9ic2QubyBuZXR0ZXN0X2RscGkubyBcCisJbmV0dGVzdF91bml4Lm8gbmV0bGliLm8gbmV0c2gubyBcCisJbmV0dGVzdF94dGkubyBuZXR0ZXN0X2lwdjYubyBcCisJbmV0Y3B1X25vbmUuYyBcCisJbmV0dGVzdF9kbnMubworCitORVRQRVJGX09CSlMgPSBuZXRwZXJmLm8gbmV0c2gubyBuZXRsaWIubyBuZXR0ZXN0X2JzZC5vIFwKKwluZXR0ZXN0X2RscGkubyBuZXR0ZXN0X3VuaXgubyBcCisJbmV0dGVzdF94dGkubyBuZXR0ZXN0X2lwdjYubyBcCisJbmV0Y3B1X25vbmUuYyBcCisJbmV0dGVzdF9kbnMubworCithbGw6IG5ldHBlcmYtdXcgbmV0c2VydmVyLXV3CisKK25ldHBlcmYtdXc6ICQoTkVUUEVSRl9PQkpTKQorCSQoQ0MpIC1vICRAICQoTkVUUEVSRl9PQkpTKSAkKExERkxBR1MpCisJc3RyaXAgJEAKKworbmV0c2VydmVyLXV3OiAkKE5FVFNFUlZFUl9PQkpTKQorCSQoQ0MpIC1vICRAICQoTkVUU0VSVkVSX09CSlMpICQoTERGTEFHUykKKwlzdHJpcCAkQAorCituZXRwZXJmLm86IG5ldHBlcmYuYyBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldHNoLm86IG5ldHNoLmMgbmV0c2guaCBuZXR0ZXN0X2JzZC5oIG5ldGxpYi5oIE1ha2VmaWxlLnV3CisKK25ldGxpYi5vOiBuZXRsaWIuYyBuZXRsaWIuaCBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldHRlc3RfYnNkLm86IG5ldHRlc3RfYnNkLmMgbmV0dGVzdF9ic2QuaCBuZXRsaWIuaCBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldHRlc3RfZGxwaS5vOiBuZXR0ZXN0X2RscGkuYyBuZXR0ZXN0X2RscGkuaCBuZXRsaWIuaCBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldHRlc3RfdW5peC5vOiBuZXR0ZXN0X3VuaXguYyBuZXR0ZXN0X3VuaXguaCBuZXRsaWIuaCBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldHRlc3RfeHRpLm86IG5ldHRlc3RfeHRpLmMgbmV0dGVzdF94dGkuaCBuZXRsaWIuaCBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldHRlc3RfaXB2Ni5vOiBuZXR0ZXN0X2lwdjYuYyBuZXR0ZXN0X2lwdjYuaCBuZXRsaWIuaCBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldHRlc3RfZG5zLm86IG5ldHRlc3RfZG5zLmMgbmV0dGVzdF9kbnMuaCBuZXRsaWIuaCBuZXRzaC5oIE1ha2VmaWxlLnV3CisKK25ldGNwdV9ub25lLm86IG5ldGNwdV9ub25lLmMgbmV0c2guaCBuZXRsaWIuaAorCituZXRzZXJ2ZXIubzogbmV0c2VydmVyLmMgbmV0dGVzdF9ic2QuaCBuZXRsaWIuaCBNYWtlZmlsZS51dworCitjbGVhbjoKKwlybSAtZiAqLm8gbmV0cGVyZi11dyBuZXRzZXJ2ZXItdXcKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL05ldFBlcmZEaXIvaW5ldF9udG9wLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9OZXRQZXJmRGlyL2luZXRfbnRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDRlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9OZXRQZXJmRGlyL2luZXRfbnRvcC5jCkBAIC0wLDAgKzEsNiBAQAorI2lmICFkZWZpbmVkKEluZXROdG9wKQorCisvKiArKisgV2h5IGlzbid0IHRoaXMgaW4gdGhlIHdpbnNvY2sgaGVhZGVycyB5ZXQ/ICovCisKKyNpbmNsdWRlICIuLlxtaXNzaW5nXGluZXRfbnRvcC5jIgorI2VuZGlmCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9OZXRQZXJmRGlyL21ha2VmaWxlIGIvbmV0cGVyZi0yLjQuNS9zcmMvTmV0UGVyZkRpci9tYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBiNzFkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvTmV0UGVyZkRpci9tYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMNCisjIERPIE5PVCBFRElUIFRISVMgRklMRSEhISAgRWRpdCAuXHNvdXJjZXMuIGlmIHlvdSB3YW50IHRvIGFkZCBhIG5ldyBzb3VyY2UNCisjIGZpbGUgdG8gdGhpcyBjb21wb25lbnQuICBUaGlzIGZpbGUgbWVyZWx5IGluZGlyZWN0cyB0byB0aGUgcmVhbCBtYWtlIGZpbGUNCisjIHRoYXQgaXMgc2hhcmVkIGJ5IGFsbCB0aGUgZHJpdmVyIGNvbXBvbmVudHMgb2YgdGhlIFdpbmRvd3MgTlQgRERLDQorIw0KKw0KKyFJTkNMVURFICQoTlRNQUtFRU5WKVxtYWtlZmlsZS5kZWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9OZXRQZXJmRGlyL3NvdXJjZXMgYi9uZXRwZXJmLTIuNC41L3NyYy9OZXRQZXJmRGlyL3NvdXJjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2ZWI4MQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL05ldFBlcmZEaXIvc291cmNlcwpAQCAtMCwwICsxLDI5IEBACitUQVJHRVROQU1FPW5ldHBlcmYNCitUQVJHRVRQQVRIPU9CSg0KK1RBUkdFVFRZUEU9UFJPR1JBTQ0KKw0KK0xJTktMSUJTPSBcDQorCSQoU0RLX0xJQl9QQVRIKVxrZXJuZWwzMi5saWIgXA0KKwkkKFNES19MSUJfUEFUSClcd3MyXzMyLmxpYiBcDQorCSQoU0RLX0xJQl9QQVRIKVx3c29jazMyLmxpYg0KKw0KK1VTRV9NU1ZDUlQ9MQ0KK1VNVFlQRT1jb25zb2xlDQorDQorSU5DTFVERVM9JChTREtfSU5DX1BBVEgpOy4NCisNCitNU0NfV0FSTklOR19MRVZFTD0vVzMgL1dYDQorDQorQ19ERUZJTkVTPSQoQ19ERUZJTkVTKSAtRF9DT05TT0xFXyAtREhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgLURIQVZFX0dFVEFERFJJTkZPIC1ESEFWRV9HRVROQU1FSU5GTyAtRFNURENfSEVBREVSUw0KKw0KKyNVU0VSX0NfRkxBR1M9JChVU0VSX0NfRkxBR1MpIC9FDQorDQorU09VUkNFUz0gXA0KKyAgICAgICAgLi5cbmV0Y3B1X250cGVyZi5jIFwNCisJLi5cbmV0bGliLmMgXA0KKwkuLlxuZXRzaC5jIFwNCisJLi5cbmV0dGVzdF9ic2QuYyBcDQorCS4uXG5ldHBlcmYuYyBcDQorCS4uXGluZXRfbnRvcC5jDQorDQorDQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvTmV0U2VydmVyRGlyL2luZXRfbnRvcC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvTmV0U2VydmVyRGlyL2luZXRfbnRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NDRlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9OZXRTZXJ2ZXJEaXIvaW5ldF9udG9wLmMKQEAgLTAsMCArMSw2IEBACisjaWYgIWRlZmluZWQoSW5ldE50b3ApCisKKy8qICsqKyBXaHkgaXNuJ3QgdGhpcyBpbiB0aGUgd2luc29jayBoZWFkZXJzIHlldD8gKi8KKworI2luY2x1ZGUgIi4uXG1pc3NpbmdcaW5ldF9udG9wLmMiCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL05ldFNlcnZlckRpci9tYWtlZmlsZSBiL25ldHBlcmYtMi40LjUvc3JjL05ldFNlcnZlckRpci9tYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBiNzFkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvTmV0U2VydmVyRGlyL21ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIw0KKyMgRE8gTk9UIEVESVQgVEhJUyBGSUxFISEhICBFZGl0IC5cc291cmNlcy4gaWYgeW91IHdhbnQgdG8gYWRkIGEgbmV3IHNvdXJjZQ0KKyMgZmlsZSB0byB0aGlzIGNvbXBvbmVudC4gIFRoaXMgZmlsZSBtZXJlbHkgaW5kaXJlY3RzIHRvIHRoZSByZWFsIG1ha2UgZmlsZQ0KKyMgdGhhdCBpcyBzaGFyZWQgYnkgYWxsIHRoZSBkcml2ZXIgY29tcG9uZW50cyBvZiB0aGUgV2luZG93cyBOVCBEREsNCisjDQorDQorIUlOQ0xVREUgJChOVE1BS0VFTlYpXG1ha2VmaWxlLmRlZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL05ldFNlcnZlckRpci9zb3VyY2VzIGIvbmV0cGVyZi0yLjQuNS9zcmMvTmV0U2VydmVyRGlyL3NvdXJjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwNGMyYQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL05ldFNlcnZlckRpci9zb3VyY2VzCkBAIC0wLDAgKzEsMjggQEAKK1RBUkdFVE5BTUU9bmV0c2VydmVyDQorVEFSR0VUUEFUSD1PQkoNCitUQVJHRVRUWVBFPVBST0dSQU0NCisNCitMSU5LTElCUz0gXA0KKwkkKFNES19MSUJfUEFUSClca2VybmVsMzIubGliIFwNCisJJChTREtfTElCX1BBVEgpXHdzMl8zMi5saWIgXA0KKwkkKFNES19MSUJfUEFUSClcd3NvY2szMi5saWINCisNCitVU0VfTVNWQ1JUPTENCitVTVRZUEU9Y29uc29sZQ0KKw0KK0lOQ0xVREVTPSQoU0RLX0lOQ19QQVRIKTsuDQorDQorTVNDX1dBUk5JTkdfTEVWRUw9L1czIC9XWA0KKw0KK0NfREVGSU5FUz0kKENfREVGSU5FUykgLURfQ09OU09MRV8gLURIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFIC1ESEFWRV9HRVRBRERSSU5GTyAtREhBVkVfR0VUTkFNRUlORk8gLURTVERDX0hFQURFUlMNCisNCisjVVNFUl9DX0ZMQUdTPSQoVVNFUl9DX0ZMQUdTKSAvRQ0KKw0KK1NPVVJDRVM9IFwNCisgICAgICAgIC4uXG5ldGNwdV9udHBlcmYuYyBcDQorCS4uXG5ldGxpYi5jIFwNCisJLi5cbmV0c2guYyBcDQorCS4uXG5ldHRlc3RfYnNkLmMgXA0KKwkuLlxuZXRzZXJ2ZXIuYyBcDQorCS4uXGluZXRfbnRvcC5jDQorDQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvZGlycyBiL25ldHBlcmYtMi40LjUvc3JjL2RpcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5NzJiMQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL2RpcnMKQEAgLTAsMCArMSwzIEBACitESVJTPSBcDQorCU5ldFBlcmZEaXIgXA0KKwlOZXRTZXJ2ZXJEaXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9oaXN0LmggYi9uZXRwZXJmLTIuNC41L3NyYy9oaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlZDIyYgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL2hpc3QuaApAQCAtMCwwICsxLDExNiBAQAorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBoaXN0LmgKKworICAgR2l2ZW4gYSB0aW1lIGRpZmZlcmVuY2UgaW4gbWljcm9zZWNvbmRzLCBpbmNyZW1lbnQgb25lIG9mIDYxCisgICBkaWZmZXJlbnQgYnVja2V0czogCisgICAKKyAgIDAgLSA5IGluIGluY3JlbWVudHMgb2YgMSB1c2VjCisgICAwIC0gOSBpbiBpbmNyZW1lbnRzIG9mIDEwIHVzZWNzCisgICAwIC0gOSBpbiBpbmNyZW1lbnRzIG9mIDEwMCB1c2VjcworICAgMCAtIDkgaW4gaW5jcmVtZW50cyBvZiAxIG1zZWMKKyAgIDAgLSA5IGluIGluY3JlbWVudHMgb2YgMTAgbXNlY3MKKyAgIDAgLSA5IGluIGluY3JlbWVudHMgb2YgMTAwIG1zZWNzCisgICAwIC0gOSBpbiBpbmNyZW1lbnRzIG9mIDEgc2VjCisgICAwIC0gOSBpbiBpbmNyZW1lbnRzIG9mIDEwIHNlYworICAgPiAxMDAgc2VjcworICAgCisgICBUaGlzIHdpbGwgYWxsb3cgYW55IHRpbWUgdG8gYmUgcmVjb3JkZWQgdG8gd2l0aGluIGFuIGFjY3VyYWN5IG9mCisgICAxMCUsIGFuZCBwcm92aWRlcyBhIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gZm9yIGNhcHR1cmluZyB0aGUKKyAgIGRpc3RyaWJ1dGlvbiBvZiBhIGxhcmdlIG51bWJlciBvZiB0aW1lIGRpZmZlcmVuY2VzIChlLmcuCisgICByZXF1ZXN0LXJlc3BvbnNlIGxhdGVuY2llcykuCisgICAKKyAgIENvbGluIExvdyAgMTAvNi85MworICAgUmljayBKb25lcyAyMDA0LTA2LTE1IC0gZXh0ZW5kIHRvIDEgYW5kIDEwIHVzZWMKKyovCisjaWZuZGVmIF9ISVNUX0lOQ0xVREVECisjZGVmaW5lIF9ISVNUX0lOQ0xVREVECisKKyNpZmRlZiBJUklYCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBJUklYICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUX0hSVCkKKyNpbmNsdWRlICJocnQuaCIKKyNlbmRpZgorICAgCitzdHJ1Y3QgaGlzdG9ncmFtX3N0cnVjdCB7CisgIGludCB1bml0X3VzZWNbMTBdOworICBpbnQgdGVuX3VzZWNbMTBdOworICBpbnQgaHVuZHJlZF91c2VjWzEwXTsKKyAgaW50IHVuaXRfbXNlY1sxMF07CisgIGludCB0ZW5fbXNlY1sxMF07CisgIGludCBodW5kcmVkX21zZWNbMTBdOworICBpbnQgdW5pdF9zZWNbMTBdOworICBpbnQgdGVuX3NlY1sxMF07CisgIGludCByaWRpY3Vsb3VzOworICBpbnQgdG90YWw7Cit9OworCit0eXBlZGVmIHN0cnVjdCBoaXN0b2dyYW1fc3RydWN0ICpISVNUOworCisvKiAKKyAgIEhJU1RfbmV3IC0gcmV0dXJuIGEgbmV3LCBjbGVhcmVkIGhpc3RvZ3JhbSBkYXRhIHR5cGUKKyovCisKK0hJU1QgSElTVF9uZXcodm9pZCk7IAorCisvKiAKKyAgIEhJU1RfY2xlYXIgLSByZXNldCBhIGhpc3RvZ3JhbSBieSBjbGVhcmluZyBhbGwgdG90YWxzIHRvIHplcm8KKyovCisKK3ZvaWQgSElTVF9jbGVhcihISVNUIGgpOworCisvKgorICAgSElTVF9hZGQgLSBhZGQgYSB0aW1lIGRpZmZlcmVuY2UgdG8gYSBoaXN0b2dyYW0uIFRpbWUgc2hvdWxkIGJlIGluCisgICBtaWNyb3NlY29uZHMuIAorKi8KKwordm9pZCBISVNUX2FkZChyZWdpc3RlciBISVNUIGgsIGludCB0aW1lX2RlbHRhKTsKKworLyogCisgIEhJU1RfcmVwb3J0IC0gY3JlYXRlIGFuIEFTQ0lJIHJlcG9ydCBvbiB0aGUgY29udGVudHMgb2YgYSBoaXN0b2dyYW0uCisgIEN1cnJlbnRseSBwcmludHN0byBzdGFuZGFyZCBvdXQgCisqLworCit2b2lkIEhJU1RfcmVwb3J0KEhJU1QgaCk7CisKKy8qCisgIEhJU1RfdGltZXN0YW1wIC0gdGFrZSBhIHRpbWVzdGFtcCBzdWl0YWJsZSBmb3IgdXNlIGluIGEgaGlzdG9ncmFtLgorKi8KKworI2lmZGVmIEhBVkVfR0VUSFJUSU1FCit2b2lkIEhJU1RfdGltZXN0YW1wKGhydGltZV90ICp0aW1lc3RhbXApOworI2VsaWYgZGVmaW5lZChIQVZFX0dFVF9IUlQpCit2b2lkIEhJU1RfdGltZXN0YW1wKGhydF90ICp0aW1lc3RhbXApOworI2VsaWYgZGVmaW5lZChXSU4zMikKK3ZvaWQgSElTVF90aW1lc3RhbXAoTEFSR0VfSU5URUdFUiAqdGltZXN0YW1wKTsKKyNlbHNlCit2b2lkIEhJU1RfdGltZXN0YW1wKHN0cnVjdCB0aW1ldmFsICp0aW1lc3RhbXApOworI2VuZGlmCisKKy8qCisgIGRlbHRhX21pY3JvIC0gY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuIHR3bworICB0aW1lc3RhbXBzCisqLworI2lmZGVmIEhBVkVfR0VUSFJUSU1FCitpbnQgZGVsdGFfbWljcm8oaHJ0aW1lX3QgKmJlZ2luLCBocnRpbWVfdCAqZW5kKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRfSFJUKQoraW50IGRlbHRhX21pY3JvKGhydF90ICpiZWdpbiwgaHJ0X3QgKmVuZCk7CisjZWxpZiBkZWZpbmVkKFdJTjMyKQoraW50IGRlbHRhX21pY3JvKExBUkdFX0lOVEVHRVIgKmJlZ2luLCBMQVJHRV9JTlRFR0VSICplbmQpOworI2Vsc2UKK2ludCBkZWx0YV9taWNybyhzdHJ1Y3QgdGltZXZhbCAqYmVnaW4sIHN0cnVjdCB0aW1ldmFsICplbmQpOworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL01ha2VmaWxlLmFtIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTcyY2NhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDcgQEAKK1NVQkRJUlMgPSBtNAorCitpZiBORUVEX0xJQkNPTVBBVCAKK25vaW5zdF9MSUJSQVJJRVMgPSBsaWJjb21wYXQuYQorbGliY29tcGF0X2FfU09VUkNFUyA9IGdldGFkZHJpbmZvLmgKK2xpYmNvbXBhdF9hX0xJQkFERCA9ICQoTElCT0JKUykgJChBTExPQ0EpCitlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9NYWtlZmlsZS5pbiBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyM2I5YQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0OTEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuNy45IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4vLi4KKworYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgoraG9zdF90cmlwbGV0ID0gQGhvc3RACitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitHUkVQID0gQEdSRVBACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK05FRURfTElCQ09NUEFUX0ZBTFNFID0gQE5FRURfTElCQ09NUEFUX0ZBTFNFQAorTkVFRF9MSUJDT01QQVRfVFJVRSA9IEBORUVEX0xJQkNPTVBBVF9UUlVFQAorTkVUQ1BVX1NPVVJDRSA9IEBORVRDUFVfU09VUkNFQAorTkVURFJWTEtVUF9TT1VSQ0UgPSBATkVURFJWTEtVUF9TT1VSQ0VACitORVRSVExLVVBfU09VUkNFID0gQE5FVFJUTEtVUF9TT1VSQ0VACitORVRTRUNMS1VQX1NPVVJDRSA9IEBORVRTRUNMS1VQX1NPVVJDRUAKK05FVFNMT1RMS1VQX1NPVVJDRSA9IEBORVRTTE9UTEtVUF9TT1VSQ0VACitORVRTWVNMS1VQX1NPVVJDRSA9IEBORVRTWVNMS1VQX1NPVVJDRUAKK09CSkVYVCA9IEBPQkpFWFRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACitTVUJESVJTID0gbTQKKworQE5FRURfTElCQ09NUEFUX1RSVUVAbm9pbnN0X0xJQlJBUklFUyA9IGxpYmNvbXBhdC5hCitATkVFRF9MSUJDT01QQVRfVFJVRUBsaWJjb21wYXRfYV9TT1VSQ0VTID0gZ2V0YWRkcmluZm8uaAorQE5FRURfTElCQ09NUEFUX1RSVUVAbGliY29tcGF0X2FfTElCQUREID0gJChMSUJPQkpTKSAkKEFMTE9DQSkKK3N1YmRpciA9IHNyYy9taXNzaW5nCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00Citta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorTElCUkFSSUVTID0gJChub2luc3RfTElCUkFSSUVTKQorCitsaWJjb21wYXRfYV9BUiA9ICQoQVIpIGNydQorQE5FRURfTElCQ09NUEFUX1RSVUVAbGliY29tcGF0X2FfREVQRU5ERU5DSUVTID0gQExJQk9CSlNACitATkVFRF9MSUJDT01QQVRfRkFMU0VAbGliY29tcGF0X2FfREVQRU5ERU5DSUVTID0KK2FtX19saWJjb21wYXRfYV9TT1VSQ0VTX0RJU1QgPSBnZXRhZGRyaW5mby5oCitATkVFRF9MSUJDT01QQVRfVFJVRUBhbV9saWJjb21wYXRfYV9PQkpFQ1RTID0KK2xpYmNvbXBhdF9hX09CSkVDVFMgPSAkKGFtX2xpYmNvbXBhdF9hX09CSkVDVFMpCisKK0RFRkFVTFRfSU5DTFVERVMgPSAgLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQEFNREVQX1RSVUVAREVQX0ZJTEVTID0gJChERVBESVIpL2dldGFkZHJpbmZvLlBvICQoREVQRElSKS9pbmV0X250b3AuUG8KK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0RJU1RfU09VUkNFUyA9ICQoYW1fX2xpYmNvbXBhdF9hX1NPVVJDRVNfRElTVCkKKworUkVDVVJTSVZFX1RBUkdFVFMgPSBpbmZvLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAorCXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBcCisJYWxsLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZXhlYy1yZWN1cnNpdmUgXAorCWluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlIFwKKwljaGVjay1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gTWFrZWZpbGUuYW0gZ2V0YWRkcmluZm8uYyBcCisJaW5ldF9udG9wLmMKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK1NPVVJDRVMgPSAkKGxpYmNvbXBhdF9hX1NPVVJDRVMpCisKK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CisuU1VGRklYRVM6IC5jIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogIE1ha2VmaWxlLmFtICAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYyAkKEFDTE9DQUxfTTQpCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgc3JjL21pc3NpbmcvTWFrZWZpbGUKK01ha2VmaWxlOiAgJChzcmNkaXIpL01ha2VmaWxlLmluICAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKQorCitBUiA9IGFyCisKK2NsZWFuLW5vaW5zdExJQlJBUklFUzoKKwktdGVzdCAteiAiJChub2luc3RfTElCUkFSSUVTKSIgfHwgcm0gLWYgJChub2luc3RfTElCUkFSSUVTKQorbGliY29tcGF0LmE6ICQobGliY29tcGF0X2FfT0JKRUNUUykgJChsaWJjb21wYXRfYV9ERVBFTkRFTkNJRVMpIAorCS1ybSAtZiBsaWJjb21wYXQuYQorCSQobGliY29tcGF0X2FfQVIpIGxpYmNvbXBhdC5hICQobGliY29tcGF0X2FfT0JKRUNUUykgJChsaWJjb21wYXRfYV9MSUJBREQpCisJJChSQU5MSUIpIGxpYmNvbXBhdC5hCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpIGNvcmUgKi5jb3JlCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAkKERFUERJUikvZ2V0YWRkcmluZm8uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQCQoREVQRElSKS9pbmV0X250b3AuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSAgLWMgLW8gJEAgYHRlc3QgLWYgJyQ8JyB8fCBlY2hvICckKHNyY2RpcikvJ2AkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACWVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACWZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJZGVwZmlsZT0nJChERVBESVIpLyQqLlBvJyB0bXBkZXBmaWxlPSckKERFUERJUikvJCouVFBvJyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYHRlc3QgLWYgJyQ8JyB8fCBlY2hvICckKHNyY2RpcikvJ2AkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJICAtYyAtbyAkQCBgaWYgdGVzdCAtZiAnJDwnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJDwnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQ8JzsgZmlgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlkZXBmaWxlPSckKERFUERJUikvJCouUG8nIHRtcGRlcGZpbGU9JyQoREVQRElSKS8kKi5UUG8nIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgaWYgdGVzdCAtZiAnJDwnOyB0aGVuICQoQ1lHUEFUSF9XKSAnJDwnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpLyQ8JzsgZmlgCit1bmluc3RhbGwtaW5mby1hbToKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBzZXQgZm5vcmQgJCRNQUtFRkxBR1M7IGFtZj0kJDI7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGVjaG8gIk1ha2luZyAkJHRhcmdldCBpbiAkJHN1YmRpciI7IFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiBcCisJICAgIGRvdF9zZWVuPXllczsgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAgfHwgY2FzZSAiJCRhbWYiIGluICo9KikgZXhpdCAxOzsgKmsqKSBmYWlsPXllczs7ICopIGV4aXQgMTs7IGVzYWM7IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKK21haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgorCUBzZXQgZm5vcmQgJCRNQUtFRkxBR1M7IGFtZj0kJDI7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgIHx8IGNhc2UgIiQkYW1mIiBpbiAqPSopIGV4aXQgMTs7ICprKikgZmFpbD15ZXM7OyAqKSBleGl0IDE7OyBlc2FjOyBcCisJZG9uZSAmJiB0ZXN0IC16ICIkJGZhaWwiCit0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCisJZG9uZQorY3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJZG9uZQorCitFVEFHUyA9IGV0YWdzCitFVEFHU0ZMQUdTID0KKworQ1RBR1MgPSBjdGFncworQ1RBR1NGTEFHUyA9CisKK3RhZ3M6IFRBR1MKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQorCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKGV0YWdzIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1mICQkc3ViZGlyL1RBR1MgJiYgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworY3RhZ3M6IENUQUdTCitDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKKwordG9wX2Rpc3RkaXIgPSAuLi8uLgorZGlzdGRpciA9ICQodG9wX2Rpc3RkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKQorCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtpbnN0YWxsZGlycykgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICQoZGlzdGRpcikvJCRzdWJkaXIgXAorCSAgICB8fCBta2RpciAkKGRpc3RkaXIpLyQkc3ViZGlyIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICAgIChjZCAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBcCisJICAgICAgICBkaXN0ZGlyPS4uLyQoZGlzdGRpcikvJCRzdWJkaXIgXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlICQoTElCUkFSSUVTKQoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CisKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS1ybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLXJmICQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktcmVjdXJzaXZlCisKK2R2aS1hbToKKworaW5mbzogaW5mby1yZWN1cnNpdmUKKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQorCS1ybSAtcmYgJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1yZWN1cnNpdmUKKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYworCitwZGY6IHBkZi1yZWN1cnNpdmUKKworcGRmLWFtOgorCitwczogcHMtcmVjdXJzaXZlCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKK3VuaW5zdGFsbC1pbmZvOiB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworLlBIT05ZOiAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIFwKKwljbGVhbi1nZW5lcmljIGNsZWFuLW5vaW5zdExJQlJBUklFUyBjbGVhbi1yZWN1cnNpdmUgY3RhZ3MgXAorCWN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIFwKKwlkdmktcmVjdXJzaXZlIGluZm8gaW5mby1hbSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1yZWN1cnNpdmUgcGRmIHBkZi1hbSBcCisJcGRmLXJlY3Vyc2l2ZSBwcyBwcy1hbSBwcy1yZWN1cnNpdmUgdGFncyB0YWdzLXJlY3Vyc2l2ZSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCisJdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9nZXRhZGRyaW5mby5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9nZXRhZGRyaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjI5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL2dldGFkZHJpbmZvLmMKQEAgLTAsMCArMSw2MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDAyICBNb3RveXVraSBLYXNhaGFyYQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIHByb3ZpZGVzIGdldGFkZHJpbmZvKCkgYW5kIGdldG5hbWVpbmZvKCkgZGVzY3JpYmVkIGluCisgKiBSRkMyMTMzLCAyNTUzIGFuZCAzNDkzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBtYWlubHkgdXNlZCBmb3IgSVB2NgorICogYXBwbGljYXRpb24gdG8gcmVzb2x2ZSBob3N0bmFtZSBvciBhZGRyZXNzLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZGVzaWduZWQgdG8gYmUgd29ya2luZyBvbiB0cmFkaXRpb25hbCBJUHY0IHN5c3RlbXMKKyAqIHdoaWNoIGRvbid0IGhhdmUgdGhvc2UgZnVuY3Rpb25zLiAgVGhlcmVmb3JlLCB0aGlzIGltcGxlbWVudGF0aW9uCisgKiBzdXBwb3J0cyBJUHY0IG9ubHkuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIHVzZWZ1bCBmb3IgYXBwbGljYXRpb24gd2hpY2ggc2hvdWxkIHN1cHBvcnQgYm90aCBJUHY2CisgKiBhbmQgdHJhZGl0aW9uYWwgSVB2NCBzeXN0ZW1zLiAgVXNlIGdlbnVpbmUgZ2V0YWRkcmluZm8oKSBhbmQgZ2V0bmFtZWluZm8oKQorICogcHJvdmlkZWQgYnkgc3lzdGVtIGlmIHRoZSBzeXN0ZW0gc3VwcG9ydHMgSVB2Ni4gIE90aGVyd2lzZSwgdXNlIHRoaXMKKyAqIGltcGxlbWVudGF0aW9uLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIEdOVSBBdXRvY29uZi4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFsc28gcHJvdmlkZXMgZnJlZWFkZHJpbmZvKCkgYW5kIGdhaV9zdHJlcnJvcigpLgorICoKKyAqIFRvIHVzZSB0aGlzIHByb2dyYW0gaW4geW91ciBhcHBsaWNhdGlvbiwgaW5zZXJ0IHRoZSBmb2xsb3dpbmcgbGluZXMgdG8KKyAqIEMgc291cmNlIGZpbGVzIGFmdGVyIGluY2x1ZGluZyBgc3lzL3R5cGVzLmgnLCBgc3lzL3NvY2tldC5oJyBhbmQKKyAqIGBuZXRkYi5oJy4gIGBnZXRhZGRyaW5mby5oJyBkZWZpbmVzIGBzdHJ1Y3QgYWRkcmluZm8nIGFuZCBBSV8sIE5JXywKKyAqIEVBSV8gbWFjcm9zLgorICogCisgKiAgICAjaWZuZGVmIEhBVkVfR0VUQUREUklORk8KKyAqICAgICNpbmNsdWRlICJnZXRhZGRyaW5mby5oIgorICogICAgI2VuZGlmCisgKiAKKyAqIFJlc3RyaWN0aW9uOgorICogICBnZXRhZGRyaW5mbygpIGFuZCBnZXRuYW1laW5mbygpIG9mIHRoaXMgcHJvZ3JhbSBhcmUgTk9UIHRocmVhZAorICogICBzYWZlLCB1bmxlc3MgdGhlIGNwcCBtYWNybyBFTkFCTEVfUFRIUkVBRCBpcyBkZWZpbmVkLgorICovCisKKy8qCisgKiBBZGQgdGhlIGZvbGxvd2luZyBjb2RlIHRvIHlvdXIgY29uZmlndXJlLmFjIChvciBjb25maWd1cmUuaW4pLgorICogICBBQ19DX0NPTlNUCisgKiAgIEFDX0hFQURFUl9TVERDCisgKiAgIEFDX0NIRUNLX0hFQURFUlMoc3RyaW5nLmggbWVtb3J5Lmggc3RkbGliLmgpCisgKiAgIEFDX0NIRUNLX0ZVTkNTKG1lbWNweSkKKyAqICAgQUNfUkVQTEFDRV9GVU5DUyhtZW1zZXQpCisgKiAgIEFDX1RZUEVfU09DS0xFTl9UCisgKiAgIEFDX1RZUEVfSU5fUE9SVF9UCisgKiAgIEFDX0RFQ0xfSF9FUlJOTworICoKKyAqICAgQUNfQ0hFQ0tfRlVOQ1MoZ2V0YWRkcmluZm8gZ2V0bmFtZWluZm8pCisgKiAgIGlmIHRlc3QgIiRhY19jdl9mdW5jX2dldGFkZHJpbmZvJGFjX2N2X2Z1bmNfZ2V0bmFtZWluZm8iICE9IHllc3llcyA7IHRoZW4KKyAqICAgICAgIExJQk9CSlM9IiRMSUJPQkpTIGdldGFkZHJpbmZvLiRhY19vYmpleHQiCisgKiAgIGZpCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFdJTjMyCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaWZkZWYgRE9fSVBWNgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYgIC8qIERPX0lQVjYgKi8KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorIAorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKKyNpZiBkZWZpbmVkKFNURENfSEVBREVSUykgfHwgZGVmaW5lZChIQVZFX1NUUklOR19IKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmICFkZWZpbmVkKFNURENfSEVBREVSUykgJiYgZGVmaW5lZChIQVZFX01FTU9SWV9IKQorI2luY2x1ZGUgPG1lbW9yeS5oPgorI2VuZGlmIC8qIG5vdCBTVERDX0hFQURFUlMgYW5kIEhBVkVfTUVNT1JZX0ggKi8KKyNlbHNlIC8qIG5vdCBTVERDX0hFQURFUlMgYW5kIG5vdCBIQVZFX1NUUklOR19IICovCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmIC8qIG5vdCBTVERDX0hFQURFUlMgYW5kIG5vdCBIQVZFX1NUUklOR19IICovCisKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9QVEhSRUFECisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfTkxTCisjaW5jbHVkZSA8bGliaW50bC5oPgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9NRU1DUFkKKyNkZWZpbmUgbWVtY3B5KGQsIHMsIG4pIGJjb3B5KChzKSwgKGQpLCAobikpCisjaWZkZWYgX19TVERDX18KK3ZvaWQgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKK2ludCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7Cit2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwordm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOworI2Vsc2UgLyogbm90IF9fU1REQ19fICovCitjaGFyICptZW1jaHIoKTsKK2ludCBtZW1jbXAoKTsKK2NoYXIgKm1lbW1vdmUoKTsKK2NoYXIgKm1lbXNldCgpOworI2VuZGlmIC8qIG5vdCBfX1NURENfXyAqLworI2VuZGlmIC8qIG5vdCBIQVZFX01FTUNQWSAqLworCisjaWZuZGVmIEhfRVJSTk9fREVDTEFSRUQKK2V4dGVybiBpbnQgaF9lcnJubzsKKyNlbmRpZgorCisjaW5jbHVkZSAiZ2V0YWRkcmluZm8uaCIKKworI2lmZGVmIEVOQUJMRV9OTFMKKyNkZWZpbmUgXyhzdHJpbmcpIGdldHRleHQoc3RyaW5nKQorI2lmZGVmIGdldHRleHRfbm9vcAorI2RlZmluZSBOXyhzdHJpbmcpIGdldHRleHRfbm9vcChzdHJpbmcpCisjZWxzZQorI2RlZmluZSBOXyhzdHJpbmcpIChzdHJpbmcpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIGdldHRleHQoc3RyaW5nKSAoc3RyaW5nKQorI2RlZmluZSBfKHN0cmluZykgKHN0cmluZykKKyNkZWZpbmUgTl8oc3RyaW5nKSAoc3RyaW5nKQorI2VuZGlmCisKKy8qCisgKiBFcnJvciBtZXNzYWdlcyBmb3IgZ2FpX3N0cmVycm9yKCkuCisgKi8KK3N0YXRpYyBjaGFyICplYWlfZXJybGlzdFtdID0geworICAgIE5fKCJTdWNjZXNzIiksCisKKyAgICAvKiBFQUlfQUREUkZBTUlMWSAqLworICAgIE5fKCJBZGRyZXNzIGZhbWlseSBmb3IgaG9zdG5hbWUgbm90IHN1cHBvcnRlZCIpLAorCisgICAgLyogRUFJX0FHQUlOICovCisgICAgTl8oIlRlbXBvcmFyeSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiIpLAorCisgICAgLyogRUFJX0JBREZMQUdTICovCisgICAgTl8oIkludmFsaWQgdmFsdWUgZm9yIGFpX2ZsYWdzIiksCisKKyAgICAvKiBFQUlfRkFJTCAqLworICAgIE5fKCJOb24tcmVjb3ZlcmFibGUgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24iKSwKKworICAgIC8qIEVBSV9GQU1JTFkgKi8KKyAgICBOXygiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWQiKSwgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAvKiBFQUlfTUVNT1JZICovCisgICAgTl8oIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKSwKKworICAgIC8qIEVBSV9OT05BTUUgKi8KKyAgICBOXygiaG9zdG5hbWUgbm9yIHNlcnZuYW1lIHByb3ZpZGVkLCBvciBub3Qga25vd24iKSwKKworICAgIC8qIEVBSV9PVkVSRkxPVyAqLworICAgIE5fKCJBbiBhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3dlZCIpLAorCisgICAgLyogRUFJX1NFUlZJQ0UgKi8KKyAgICBOXygic2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUiKSwKKworICAgIC8qIEVBSV9TT0NLVFlQRSAqLworICAgIE5fKCJhaV9zb2NrdHlwZSBub3Qgc3VwcG9ydGVkIiksCisKKyAgICAvKiBFQUlfU1lTVEVNICovCisgICAgTl8oIlN5c3RlbSBlcnJvciByZXR1cm5lZCBpbiBlcnJubyIpCit9OworCisvKgorICogRGVmYXVsdCBoaW50cyBmb3IgZ2V0YWRkcmluZm8oKS4KKyAqLworc3RhdGljIHN0cnVjdCBhZGRyaW5mbyBkZWZhdWx0X2hpbnRzID0geworICAgIDAsIFBGX1VOU1BFQywgMCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworLyoKKyAqIE11dGV4LgorICovCisjaWZkZWYgRU5BQkxFX1BUSFJFQUQKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ2FpX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyNlbmRpZgorCisvKgorICogRGVjbGFyYXRpb24gb2Ygc3RhdGljIGZ1bmN0aW9ucy4KKyAqLworI2lmZGVmIF9fU1REQ19fCitzdGF0aWMgaW50IGlzX2ludGVnZXIoY29uc3QgY2hhciAqKTsKK3N0YXRpYyBpbnQgaXNfYWRkcmVzcyhjb25zdCBjaGFyICopOworc3RhdGljIGludCBpdG9hX2xlbmd0aChpbnQpOworI2Vsc2UKK3N0YXRpYyBpbnQgaXNfaW50ZWdlcigpOworc3RhdGljIGludCBpc19hZGRyZXNzKCk7CitzdGF0aWMgaW50IGl0b2FfbGVuZ3RoKCk7CisjZW5kaWYKKworLyoKKyAqIGdhaV9zdHJlcnJvcigpLgorICovCitjb25zdCBjaGFyICoKK2dhaV9zdHJlcnJvcihlY29kZSkKKyAgICBpbnQgZWNvZGU7Cit7CisgICAgaWYgKGVjb2RlIDwgMCB8fCBlY29kZSA+IEVBSV9TWVNURU0pCisJcmV0dXJuIF8oIlVua25vd24gZXJyb3IiKTsKKworICAgIHJldHVybiBnZXR0ZXh0KGVhaV9lcnJsaXN0W2Vjb2RlXSk7Cit9CisKKy8qCisgKiBmcmVlYWRkcmluZm8oKS4KKyAqLwordm9pZAorZnJlZWFkZHJpbmZvKGFpKQorICAgIHN0cnVjdCBhZGRyaW5mbyAqYWk7Cit7CisgICAgc3RydWN0IGFkZHJpbmZvICpuZXh0X2FpOworCisgICAgd2hpbGUgKGFpICE9IE5VTEwpIHsKKwlpZiAoYWktPmFpX2Nhbm9ubmFtZSAhPSBOVUxMKQorCSAgICBmcmVlKGFpLT5haV9jYW5vbm5hbWUpOworCWlmIChhaS0+YWlfYWRkciAhPSBOVUxMKQorCSAgICBmcmVlKGFpLT5haV9hZGRyKTsKKwluZXh0X2FpID0gYWktPmFpX25leHQ7CisJZnJlZShhaSk7CisJYWkgPSBuZXh0X2FpOworICAgIH0KK30KKworLyoKKyAqIFJldHVybiAxIGlmIHRoZSBzdHJpbmcgYHMnIHJlcHJlc2VudHMgYW4gaW50ZWdlci4KKyAqLworc3RhdGljIGludAoraXNfaW50ZWdlcihzKQorICAgIGNvbnN0IGNoYXIgKnM7Cit7CisgICAgaWYgKCpzID09ICctJyB8fCAqcyA9PSAnKycpCisJcysrOworICAgIGlmICgqcyA8ICcwJyB8fCAnOScgPCAqcykKKwlyZXR1cm4gMDsKKworICAgIHMrKzsKKyAgICB3aGlsZSAoJzAnIDw9ICpzICYmICpzIDw9ICc5JykKKwlzKys7CisKKyAgICByZXR1cm4gKCpzID09ICdcMCcpOworfQorCisvKgorICogUmV0dXJuIDEgaWYgdGhlIHN0cmluZyBgcycgcmVwcmVzZW50cyBhbiBJUHY0IGFkZHJlc3MuCisgKiBVbmxpa2UgaW5ldF9hZGRyKCksIGl0IGRvZXNuJ3QgcGVybWl0IG1hbGZvcm1lZCBub3J0YXRpb24gc3VjaAorICogYXMgIjE5Mi4xNjgiLgorICovCitzdGF0aWMgaW50Citpc19hZGRyZXNzKHMpCisgICAgY29uc3QgY2hhciAqczsKK3sKKyAgICBjb25zdCBzdGF0aWMgY2hhciBkZWxpbWl0ZXJzW10gPSB7Jy4nLCAnLicsICcuJywgJ1wwJ307CisgICAgaW50IGksIGo7CisgICAgaW50IG9jdGV0OworCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCWlmICgqcyA9PSAnMCcgJiYgKihzICsgMSkgIT0gZGVsaW1pdGVyc1tpXSkKKwkgICAgcmV0dXJuIDA7CisJZm9yIChqID0gMCwgb2N0ZXQgPSAwOyAnMCcgPD0gKnMgJiYgKnMgPD0gJzknICYmIGogPCAzOyBzKyssIGorKykKKwkgICAgb2N0ZXQgPSBvY3RldCAqIDEwICsgKCpzIC0gJzAnKTsKKwlpZiAoaiA9PSAwIHx8IG9jdGV0ID4gMjU1IHx8ICpzICE9IGRlbGltaXRlcnNbaV0pCisJICAgIHJldHVybiAwOworCXMrKzsKKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworLyoKKyAqIENhbGN1cmF0ZSBsZW5ndGggb2YgdGhlIHN0cmluZyBgcycsIHdoZXJlIGBzJyBpcyBzZXQgYnkKKyAqIHNwcmludGYocywgIiVkIiwgbikuCisgKi8KK3N0YXRpYyBpbnQKK2l0b2FfbGVuZ3RoKG4pCisgICAgaW50IG47Cit7CisgICAgaW50IHJlc3VsdCA9IDE7CisKKyAgICBpZiAobiA8IDApIHsKKwluID0gLW47CisJcmVzdWx0Kys7CisgICAgfQorCisgICAgd2hpbGUgKG4gPj0gMTApIHsKKwlyZXN1bHQrKzsKKwluIC89IDEwOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBnZXRhZGRyaW5mbygpLgorICovCitpbnQKK2dldGFkZHJpbmZvKG5vZGVuYW1lLCBzZXJ2bmFtZSwgaGludHMsIHJlcykKKyAgICBjb25zdCBjaGFyICpub2RlbmFtZTsKKyAgICBjb25zdCBjaGFyICpzZXJ2bmFtZTsKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzOworICAgIHN0cnVjdCBhZGRyaW5mbyAqKnJlczsKK3sKKyAgICBzdHJ1Y3QgYWRkcmluZm8gKmhlYWRfcmVzID0gTlVMTDsKKyAgICBzdHJ1Y3QgYWRkcmluZm8gKnRhaWxfcmVzID0gTlVMTDsKKyAgICBzdHJ1Y3QgYWRkcmluZm8gKm5ld19yZXM7CisgICAgc3RydWN0IHNvY2thZGRyX2luICpzYV9pbjsKKyAgICBzdHJ1Y3QgaW5fYWRkciAqKmFkZHJfbGlzdDsKKyAgICBzdHJ1Y3QgaW5fYWRkciAqYWRkcl9saXN0X2J1ZlsyXTsKKyAgICBzdHJ1Y3QgaW5fYWRkciBhZGRyX2J1ZjsKKyAgICBzdHJ1Y3QgaW5fYWRkciAqKmFwOworICAgIHN0cnVjdCBzZXJ2ZW50ICpzZXJ2ZW50OworICAgIHN0cnVjdCBob3N0ZW50ICpob3N0ZW50OworICAgIGNvbnN0IGNoYXIgKmNhbm9ubmFtZSA9IE5VTEw7CisgICAgaW5fcG9ydF90IHBvcnQ7CisgICAgaW50IHNhdmVkX2hfZXJybm87CisgICAgaW50IHJlc3VsdCA9IDA7CisKKyNpZmRlZiBFTkFCTEVfUFRIUkVBRAorICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ2FpX211dGV4KTsKKyNlbmRpZgorCisgICAgc2F2ZWRfaF9lcnJubyA9IGhfZXJybm87CisKKyAgICBpZiAobm9kZW5hbWUgPT0gTlVMTCAmJiBzZXJ2bmFtZSA9PSBOVUxMKSB7CisJcmVzdWx0ID0gRUFJX05PTkFNRTsKKwlnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoaGludHMgIT0gTlVMTCkgeworCWlmIChoaW50cy0+YWlfZmFtaWx5ICE9IFBGX0lORVQgJiYgaGludHMtPmFpX2ZhbWlseSAhPSBQRl9VTlNQRUMpIHsKKwkgICAgcmVzdWx0ID0gRUFJX0ZBTUlMWTsKKwkgICAgZ290byBlbmQ7CisJfQorCWlmIChoaW50cy0+YWlfc29ja3R5cGUgIT0gU09DS19ER1JBTQorCSAgICAmJiBoaW50cy0+YWlfc29ja3R5cGUgIT0gU09DS19TVFJFQU0KKwkgICAgJiYgaGludHMtPmFpX3NvY2t0eXBlICE9IDApIHsKKwkgICAgcmVzdWx0ID0gRUFJX1NPQ0tUWVBFOworCSAgICBnb3RvIGVuZDsKKwl9CisgICAgfSBlbHNlIHsKKwloaW50cyA9ICZkZWZhdWx0X2hpbnRzOworICAgIH0KKworICAgIGlmIChzZXJ2bmFtZSAhPSBOVUxMKSB7CisJaWYgKGlzX2ludGVnZXIoc2Vydm5hbWUpKQorCSAgICBwb3J0ID0gaHRvbnMoYXRvaShzZXJ2bmFtZSkpOworCWVsc2UgIHsKKwkgICAgaWYgKGhpbnRzLT5haV9mbGFncyAmIEFJX05VTUVSSUNTRVJWKSB7CisJCXJlc3VsdCA9IEVBSV9OT05BTUU7CisJCWdvdG8gZW5kOworCSAgICB9CisKKwkgICAgaWYgKGhpbnRzLT5haV9zb2NrdHlwZSA9PSBTT0NLX0RHUkFNKQorCQlzZXJ2ZW50ID0gZ2V0c2VydmJ5bmFtZShzZXJ2bmFtZSwgInVkcCIpOworCSAgICBlbHNlIGlmIChoaW50cy0+YWlfc29ja3R5cGUgPT0gU09DS19TVFJFQU0pCisJCXNlcnZlbnQgPSBnZXRzZXJ2YnluYW1lKHNlcnZuYW1lLCAidGNwIik7CisJICAgIGVsc2UgaWYgKGhpbnRzLT5haV9zb2NrdHlwZSA9PSAwKQorCQlzZXJ2ZW50ID0gZ2V0c2VydmJ5bmFtZShzZXJ2bmFtZSwgInRjcCIpOworCSAgICBlbHNlIHsKKwkJcmVzdWx0ID0gRUFJX1NPQ0tUWVBFOworCQlnb3RvIGVuZDsKKwkgICAgfQorCisJICAgIGlmIChzZXJ2ZW50ID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gRUFJX1NFUlZJQ0U7CisJCWdvdG8gZW5kOworCSAgICB9CisJICAgIHBvcnQgPSBzZXJ2ZW50LT5zX3BvcnQ7CisJfQorICAgIH0gZWxzZSB7CisJcG9ydCA9IGh0b25zKDApOworICAgIH0KKworICAgIGlmIChub2RlbmFtZSAhPSBOVUxMKSB7CisJaWYgKGlzX2FkZHJlc3Mobm9kZW5hbWUpKSB7CisJICAgIGFkZHJfYnVmLnNfYWRkciA9IGluZXRfYWRkcihub2RlbmFtZSk7CisJICAgIGFkZHJfbGlzdF9idWZbMF0gPSAmYWRkcl9idWY7CisJICAgIGFkZHJfbGlzdF9idWZbMV0gPSBOVUxMOworCSAgICBhZGRyX2xpc3QgPSBhZGRyX2xpc3RfYnVmOworCisJICAgIGlmIChoaW50cy0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUKKwkJJiYgIShoaW50cy0+YWlfZmxhZ3MgJiBBSV9OVU1FUklDSE9TVCkpIHsKKwkJaG9zdGVudCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikmYWRkcl9idWYsCisJCSAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBBRl9JTkVUKTsKKwkJaWYgKGhvc3RlbnQgIT0gTlVMTCkKKwkJICAgIGNhbm9ubmFtZSA9IGhvc3RlbnQtPmhfbmFtZTsKKwkJZWxzZQorCQkgICAgY2Fub25uYW1lID0gbm9kZW5hbWU7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiAoaGludHMtPmFpX2ZsYWdzICYgQUlfTlVNRVJJQ0hPU1QpIHsKKwkJcmVzdWx0ID0gRUFJX05PTkFNRTsKKwkJZ290byBlbmQ7CisJICAgIH0KKworCSAgICBob3N0ZW50ID0gZ2V0aG9zdGJ5bmFtZShub2RlbmFtZSk7CisJICAgIGlmIChob3N0ZW50ID09IE5VTEwpIHsKKwkJc3dpdGNoIChoX2Vycm5vKSB7CisJCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCWNhc2UgTk9fREFUQToKKwkJICAgIHJlc3VsdCA9IEVBSV9OT05BTUU7CisJCSAgICBnb3RvIGVuZDsKKwkJY2FzZSBUUllfQUdBSU46CisJCSAgICByZXN1bHQgPSBFQUlfQUdBSU47CisJCSAgICBnb3RvIGVuZDsKKwkJZGVmYXVsdDoKKwkJICAgIHJlc3VsdCA9IEVBSV9GQUlMOworCQkgICAgZ290byBlbmQ7CisgICAgICAgICAgICAgICAgfQorCSAgICB9CisJICAgIGFkZHJfbGlzdCA9IChzdHJ1Y3QgaW5fYWRkciAqKilob3N0ZW50LT5oX2FkZHJfbGlzdDsKKworCSAgICBpZiAoaGludHMtPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKQorCQljYW5vbm5hbWUgPSBob3N0ZW50LT5oX25hbWU7CisJfQorICAgIH0gZWxzZSB7CisJaWYgKGhpbnRzLT5haV9mbGFncyAmIEFJX1BBU1NJVkUpCisJICAgIGFkZHJfYnVmLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOworCWVsc2UKKwkgICAgYWRkcl9idWYuc19hZGRyID0gaHRvbmwoMHg3RjAwMDAwMSk7CisJYWRkcl9saXN0X2J1ZlswXSA9ICZhZGRyX2J1ZjsKKwlhZGRyX2xpc3RfYnVmWzFdID0gTlVMTDsKKwlhZGRyX2xpc3QgPSBhZGRyX2xpc3RfYnVmOworICAgIH0KKworICAgIGZvciAoYXAgPSBhZGRyX2xpc3Q7ICphcCAhPSBOVUxMOyBhcCsrKSB7CisJbmV3X3JlcyA9IChzdHJ1Y3QgYWRkcmluZm8gKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOworCWlmIChuZXdfcmVzID09IE5VTEwpIHsKKwkgICAgaWYgKGhlYWRfcmVzICE9IE5VTEwpCisJCWZyZWVhZGRyaW5mbyhoZWFkX3Jlcyk7CisJICAgIHJlc3VsdCA9IEVBSV9NRU1PUlk7CisJICAgIGdvdG8gZW5kOworCX0KKworCW5ld19yZXMtPmFpX2ZhbWlseSA9IFBGX0lORVQ7CisJbmV3X3Jlcy0+YWlfc29ja3R5cGUgPSBoaW50cy0+YWlfc29ja3R5cGU7CisJbmV3X3Jlcy0+YWlfcHJvdG9jb2wgPSBoaW50cy0+YWlfcHJvdG9jb2w7CisJbmV3X3Jlcy0+YWlfYWRkciA9IE5VTEw7CisJbmV3X3Jlcy0+YWlfYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCW5ld19yZXMtPmFpX2Nhbm9ubmFtZSA9IE5VTEw7CisJbmV3X3Jlcy0+YWlfbmV4dCA9IE5VTEw7CisKKwluZXdfcmVzLT5haV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKQorCSAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCWlmIChuZXdfcmVzLT5haV9hZGRyID09IE5VTEwpIHsKKwkgICAgZnJlZShuZXdfcmVzKTsKKwkgICAgaWYgKGhlYWRfcmVzICE9IE5VTEwpCisJCWZyZWVhZGRyaW5mbyhoZWFkX3Jlcyk7CisJICAgIHJlc3VsdCA9IEVBSV9NRU1PUlk7CisJICAgIGdvdG8gZW5kOworCX0KKworCXNhX2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5ld19yZXMtPmFpX2FkZHI7CisJbWVtc2V0KHNhX2luLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJc2FfaW4tPnNpbl9mYW1pbHkgPSBQRl9JTkVUOworCXNhX2luLT5zaW5fcG9ydCA9IHBvcnQ7CisJbWVtY3B5KCZzYV9pbi0+c2luX2FkZHIsICphcCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisKKwlpZiAoaGVhZF9yZXMgPT0gTlVMTCkKKwkgICAgaGVhZF9yZXMgPSBuZXdfcmVzOworCWVsc2UKKwkgICAgdGFpbF9yZXMtPmFpX25leHQgPSBuZXdfcmVzOworCXRhaWxfcmVzID0gbmV3X3JlczsKKyAgICB9CisKKyAgICBpZiAoY2Fub25uYW1lICE9IE5VTEwgJiYgaGVhZF9yZXMgIT0gTlVMTCkgeworCWhlYWRfcmVzLT5haV9jYW5vbm5hbWUgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oY2Fub25uYW1lKSArIDEpOworCWlmIChoZWFkX3Jlcy0+YWlfY2Fub25uYW1lICE9IE5VTEwpCisJICAgIHN0cmNweShoZWFkX3Jlcy0+YWlfY2Fub25uYW1lLCBjYW5vbm5hbWUpOworICAgIH0KKworICAgICpyZXMgPSBoZWFkX3JlczsKKworICBlbmQ6CisgICAgaF9lcnJubyA9IHNhdmVkX2hfZXJybm87CisjaWZkZWYgRU5BQkxFX1BUSFJFQUQKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ2FpX211dGV4KTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBnZXRuYW1laW5mbygpLgorICovCitpbnQKK2dldG5hbWVpbmZvKHNhLCBzYWxlbiwgbm9kZSwgbm9kZWxlbiwgc2Vydiwgc2VydmxlbiwgZmxhZ3MpCisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTsKKyAgICBzb2NrbGVuX3Qgc2FsZW47CisgICAgY2hhciAqbm9kZTsKKyAgICBzb2NrbGVuX3Qgbm9kZWxlbjsKKyAgICBjaGFyICpzZXJ2OworICAgIHNvY2tsZW5fdCBzZXJ2bGVuOworICAgIGludCBmbGFnczsKK3sKKyAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhX2luID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworICAgIHN0cnVjdCBob3N0ZW50ICpob3N0ZW50OworICAgIHN0cnVjdCBzZXJ2ZW50ICpzZXJ2ZW50OworICAgIGNoYXIgKm50b2FfYWRkcmVzczsKKyAgICBpbnQgc2F2ZWRfaF9lcnJubzsKKyAgICBpbnQgcmVzdWx0ID0gMDsKKworI2lmZGVmIEVOQUJMRV9QVEhSRUFECisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnYWlfbXV0ZXgpOworI2VuZGlmCisKKyAgICBzYXZlZF9oX2Vycm5vID0gaF9lcnJubzsKKworICAgIGlmIChzYV9pbi0+c2luX2ZhbWlseSAhPSBQRl9JTkVUKSB7CisJcmVzdWx0ID0gRUFJX0ZBTUlMWTsKKwlnb3RvIGVuZDsKKyAgICB9IGVsc2UgaWYgKG5vZGUgPT0gTlVMTCAmJiBzZXJ2ID09IE5VTEwpIHsKKwlyZXN1bHQgPSBFQUlfTk9OQU1FOworCWdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChzZXJ2ICE9IE5VTEwgJiYgc2VydmxlbiA+IDApIHsKKwlpZiAoZmxhZ3MgJiBOSV9OVU1FUklDU0VSVikKKwkgICAgc2VydmVudCA9IE5VTEw7CisJZWxzZSBpZiAoZmxhZ3MgJiBOSV9ER1JBTSkKKwkgICAgc2VydmVudCA9IGdldHNlcnZieXBvcnQoc2FfaW4tPnNpbl9wb3J0LCAidWRwIik7CisJZWxzZQorCSAgICBzZXJ2ZW50ID0gZ2V0c2VydmJ5cG9ydChzYV9pbi0+c2luX3BvcnQsICJ0Y3AiKTsKKworCWlmIChzZXJ2ZW50ICE9IE5VTEwpIHsKKwkgICAgaWYgKHNlcnZsZW4gPD0gc3RybGVuKHNlcnZlbnQtPnNfbmFtZSkpIHsKKwkJcmVzdWx0ID0gRUFJX09WRVJGTE9XOworCQlnb3RvIGVuZDsKKwkgICAgfQorCSAgICBzdHJjcHkoc2Vydiwgc2VydmVudC0+c19uYW1lKTsKKwl9IGVsc2UgeworCSAgICBpZiAoc2VydmxlbiA8PSBpdG9hX2xlbmd0aChudG9ocyhzYV9pbi0+c2luX3BvcnQpKSkgeworCQlyZXN1bHQgPSBFQUlfT1ZFUkZMT1c7CisJCWdvdG8gZW5kOworCSAgICB9CisJICAgIHNwcmludGYoc2VydiwgIiVkIiwgbnRvaHMoc2FfaW4tPnNpbl9wb3J0KSk7CisJfQorICAgIH0KKworICAgIGlmIChub2RlICE9IE5VTEwgJiYgbm9kZWxlbiA+IDApIHsKKwlpZiAoZmxhZ3MgJiBOSV9OVU1FUklDSE9TVCkKKwkgICAgaG9zdGVudCA9IE5VTEw7CisJZWxzZSB7CisJICAgIGhvc3RlbnQgPSBnZXRob3N0YnlhZGRyKChjaGFyICopJnNhX2luLT5zaW5fYWRkciwgCisJCXNpemVvZihzdHJ1Y3QgaW5fYWRkciksIEFGX0lORVQpOworCX0KKwlpZiAoaG9zdGVudCAhPSBOVUxMKSB7CisJICAgIGlmIChub2RlbGVuIDw9IHN0cmxlbihob3N0ZW50LT5oX25hbWUpKSB7CisJCXJlc3VsdCA9IEVBSV9PVkVSRkxPVzsKKwkJZ290byBlbmQ7CisJICAgIH0KKwkgICAgc3RyY3B5KG5vZGUsIGhvc3RlbnQtPmhfbmFtZSk7CisJfSBlbHNlIHsKKwkgICAgaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpIHsKKwkJcmVzdWx0ID0gRUFJX05PTkFNRTsKKwkJZ290byBlbmQ7CisJICAgIH0KKwkgICAgbnRvYV9hZGRyZXNzID0gaW5ldF9udG9hKHNhX2luLT5zaW5fYWRkcik7CisJICAgIGlmIChub2RlbGVuIDw9IHN0cmxlbihudG9hX2FkZHJlc3MpKSB7CisJCXJlc3VsdCA9IEVBSV9PVkVSRkxPVzsKKwkJZ290byBlbmQ7CisJICAgIH0KKwkgICAgc3RyY3B5KG5vZGUsIG50b2FfYWRkcmVzcyk7CisJfQorCQkKKyAgICB9CisKKyAgZW5kOgorICAgIGhfZXJybm8gPSBzYXZlZF9oX2Vycm5vOworI2lmZGVmIEVOQUJMRV9QVEhSRUFECisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdhaV9tdXRleCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OworfQorCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL2dldGFkZHJpbmZvLmggYi9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL2dldGFkZHJpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2NWE4YgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvZ2V0YWRkcmluZm8uaApAQCAtMCwwICsxLDIzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSwgMDIgIE1vdG95dWtpIEthc2FoYXJhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0VUQUREUklORk9fSAorI2RlZmluZSBHRVRBRERSSU5GT19ICisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpZmRlZiBET19JUFY2CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZiAgLyogRE9fSVBWNiAqLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogVW5kZWZpbmUgYWxsIHRoZSBtYWNyb3MuCisgKiA8bmV0ZGIuaD4gbWlnaHQgZGVmaW5lcyBzb21lIG9mIHRoZW0uCisgKi8KKyNpZmRlZiBFQUlfQUREUkZBTUlMWQorI3VuZGVmIEVBSV9BRERSRkFNSUxZCisjZW5kaWYKKyNpZmRlZiBFQUlfQUdBSU4KKyN1bmRlZiBFQUlfQUdBSU4KKyNlbmRpZgorI2lmZGVmIEVBSV9CQURGTEFHUworI3VuZGVmIEVBSV9CQURGTEFHUworI2VuZGlmCisjaWZkZWYgRUFJX0ZBSUwKKyN1bmRlZiBFQUlfRkFJTAorI2VuZGlmCisjaWZkZWYgRUFJX0ZBTUlMWQorI3VuZGVmIEVBSV9GQU1JTFkKKyNlbmRpZgorI2lmZGVmIEVBSV9NRU1PUlkKKyN1bmRlZiBFQUlfTUVNT1JZCisjZW5kaWYKKyNpZmRlZiBFQUlfTk9OQU1FCisjdW5kZWYgRUFJX05PTkFNRQorI2VuZGlmCisjaWZkZWYgRUFJX09WRVJGTE9XCisjdW5kZWYgRUFJX09WRVJGTE9XCisjZW5kaWYKKyNpZmRlZiBFQUlfU0VSVklDRQorI3VuZGVmIEVBSV9TRVJWSUNFCisjZW5kaWYKKyNpZmRlZiBFQUlfU09DS1RZUEUKKyN1bmRlZiBFQUlfU09DS1RZUEUKKyNlbmRpZgorI2lmZGVmIEVBSV9TWVNURU0KKyN1bmRlZiBFQUlfU1lTVEVNCisjZW5kaWYKKworI2lmZGVmIEFJX1BBU1NJVkUKKyN1bmRlZiBBSV9QQVNTSVZFCisjZW5kaWYKKyNpZmRlZiBBSV9DQU5PTk5BTUUKKyN1bmRlZiBBSV9DQU5PTk5BTUUKKyNlbmRpZgorI2lmZGVmIEFJX05VTUVSSUNIT1NUCisjdW5kZWYgQUlfTlVNRVJJQ0hPU1QKKyNlbmRpZgorI2lmZGVmIEFJX05VTUVSSUNTRVJWCisjdW5kZWYgQUlfTlVNRVJJQ1NFUlYKKyNlbmRpZgorI2lmZGVmIEFJX1Y0TUFQUEVECisjdW5kZWYgQUlfVjRNQVBQRUQKKyNlbmRpZgorI2lmZGVmIEFJX0FMTAorI3VuZGVmIEFJX0FMTAorI2VuZGlmCisjaWZkZWYgQUlfQUREUkNPTkZJRworI3VuZGVmIEFJX0FERFJDT05GSUcKKyNlbmRpZgorI2lmZGVmIEFJX0RFRkFVTFQKKyN1bmRlZiBBSV9ERUZBVUxUCisjZW5kaWYKKworI2lmZGVmIE5JX05PRlFETgorI3VuZGVmIE5JX05PRlFETgorI2VuZGlmCisjaWZkZWYgTklfTlVNRVJJQ0hPU1QKKyN1bmRlZiBOSV9OVU1FUklDSE9TVAorI2VuZGlmCisjaWZkZWYgTklfTkFNRVJFUUQKKyN1bmRlZiBOSV9OQU1FUkVRRAorI2VuZGlmCisjaWZkZWYgTklfTlVNRVJJQ1NFUlYKKyN1bmRlZiBOSV9OVU1FUklDU0VSVgorI2VuZGlmCisjaWZkZWYgTklfTlVNRVJJQ1NDT1BFCisjdW5kZWYgTklfTlVNRVJJQ1NDT1BFCisjZW5kaWYKKworI2lmZGVmIE5JX0RHUkFNCisjdW5kZWYgTklfREdSQU0KKyNlbmRpZgorI2lmZGVmIE5JX01BWEhPU1QKKyN1bmRlZiBOSV9NQVhIT1NUCisjZW5kaWYKKyNpZmRlZiBOSV9NQVhTRVJWCisjdW5kZWYgTklfTUFYU0VSVgorI2VuZGlmCisKKy8qCisgKiBGYWtlIHN0cnVjdCBhbmQgZnVuY3Rpb24gbmFtZXMuCisgKiA8bmV0ZGIuaD4gbWlnaHQgZGVjbGFyZXMgYWxsIG9yIHNvbWUgb2YgdGhlbS4KKyAqLworI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgfHwgZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorI2RlZmluZSBhZGRyaW5mbyBteV9hZGRyaW5mbworI2RlZmluZSBnYWlfc3RyZXJyb3IgbXlfZ2FpX3N0cmVycm9yCisjZGVmaW5lIGZyZWVhZGRyaW5mbyBteV9mcmVlYWRkcmluZm8KKyNkZWZpbmUgZ2V0YWRkcmluZm8gbXlfZ2V0YWRkcmluZm8KKyNkZWZpbmUgZ2V0bmFtZWluZm8gbXlfZ2V0bmFtZWluZm8KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRXJyb3IgY29kZXMuCisgKi8KKyNkZWZpbmUgRUFJX0FERFJGQU1JTFkJMQorI2RlZmluZSBFQUlfQUdBSU4JMgorI2RlZmluZSBFQUlfQkFERkxBR1MJMworI2RlZmluZSBFQUlfRkFJTAk0CisjZGVmaW5lIEVBSV9GQU1JTFkJNQorI2RlZmluZSBFQUlfTUVNT1JZCTYKKyNkZWZpbmUgRUFJX05PTkFNRQk3CisjZGVmaW5lIEVBSV9PVkVSRkxPVwk4CisjZGVmaW5lIEVBSV9TRVJWSUNFCTkKKyNkZWZpbmUgRUFJX1NPQ0tUWVBFCTEwCisjZGVmaW5lIEVBSV9TWVNURU0JMTEKKworLyoKKyAqIEZsYWdzIGZvciBnZXRhZGRyaW5mbygpLgorICovCisjZGVmaW5lIEFJX0FERFJDT05GSUcJMHgwMDAxCisjZGVmaW5lIEFJX0FMTAkJMHgwMDAyCisjZGVmaW5lIEFJX0NBTk9OTkFNRQkweDAwMDQKKyNkZWZpbmUgQUlfTlVNRVJJQ0hPU1QJMHgwMDA4CisjZGVmaW5lIEFJX05VTUVSSUNTRVJWCTB4MDAxMAorI2RlZmluZSBBSV9QQVNTSVZFCTB4MDAyMAorI2RlZmluZSBBSV9WNE1BUFBFRAkweDAwNDAKKyNkZWZpbmUgQUlfREVGQVVMVAkoQUlfVjRNQVBQRUQgfCBBSV9BRERSQ09ORklHKQorCisvKgorICogRmxhZ3MgZm9yIGdldG5hbWVpbmZvKCkuCisgKi8KKyNkZWZpbmUgTklfREdSQU0JMHgwMDAxCisjZGVmaW5lIE5JX05BTUVSRVFECTB4MDAwMgorI2RlZmluZSBOSV9OT0ZRRE4JMHgwMDA0CisjZGVmaW5lIE5JX05VTUVSSUNIT1NUCTB4MDAwOAorI2RlZmluZSBOSV9OVU1FUklDU0NPUEUJMHgwMDEwCisjZGVmaW5lIE5JX05VTUVSSUNTRVJWCTB4MDAyMAorCisvKgorICogTWF4aW11bSBsZW5ndGggb2YgRlFETiBhbmQgc2VydmllIG5hbWUgZm9yIGdldG5hbWVpbmZvKCkuCisgKi8KKyNkZWZpbmUgTklfTUFYSE9TVAkxMDI1CisjZGVmaW5lIE5JX01BWFNFUlYJMzIKKworLyoKKyAqIEFkZHJlc3MgZmFtaWxpZXMgYW5kIFByb3RvY29sIGZhbWlsaWVzLgorICovCisjaWZuZGVmIEFGX1VOU1BFQworI2RlZmluZSBBRl9VTlNQRUMgQUZfSU5FVAorI2VuZGlmCisjaWZuZGVmIFBGX1VOU1BFQworI2RlZmluZSBQRl9VTlNQRUMgUEZfSU5FVAorI2VuZGlmCisKKy8qCisgKiBzdHJ1Y3QgYWRkcmluZm8uCisgKi8KK3N0cnVjdCBhZGRyaW5mbyB7CisgICAgaW50IGFpX2ZsYWdzOworICAgIGludCBhaV9mYW1pbHk7CisgICAgaW50IGFpX3NvY2t0eXBlOworICAgIGludCBhaV9wcm90b2NvbDsKKyAgICBzb2NrbGVuX3QgYWlfYWRkcmxlbjsKKyAgICBjaGFyICphaV9jYW5vbm5hbWU7CisgICAgc3RydWN0IHNvY2thZGRyICphaV9hZGRyOworICAgIHN0cnVjdCBhZGRyaW5mbyAqYWlfbmV4dDsKK307CisKKy8qCisgKiBGdW5jdGlvbnMuCisgKi8KKyNpZmRlZiBfX1NURENfXworY29uc3QgY2hhciAqZ2FpX3N0cmVycm9yKGludCk7Cit2b2lkIGZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKik7CitpbnQgZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLAorICAgIHN0cnVjdCBhZGRyaW5mbyAqKik7CitpbnQgZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLCAKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQpOworI2Vsc2UKK2NvbnN0IGNoYXIgKmdhaV9zdHJlcnJvcigpOwordm9pZCBmcmVlYWRkcmluZm8oKTsKK2ludCBnZXRhZGRyaW5mbygpOworaW50IGdldG5hbWVpbmZvKCk7CisjZW5kaWYKKworI2VuZGlmIC8qIG5vdCBHRVRBRERSSU5GT19IICovCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL2luZXRfbnRvcC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9pbmV0X250b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2E0NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9pbmV0X250b3AuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KKyAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBLdW5nbGlnYSBUZWtuaXNrYQorICogICAgICBI9mdza29sYW4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiAkSWQ6IGluZXRfbnRvcC5jLHYgMS43IDIwMDMvMTEvMTYgMDk6MzY6NTAgZ3V5IEV4cCAkICovCisKKyNpZm5kZWYgbGludAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9CisgICAgICJAKCMpICRIZWFkZXI6IC90Y3BkdW1wL21hc3Rlci90Y3BkdW1wL21pc3NpbmcvaW5ldF9udG9wLmMsdiAxLjcgMjAwMy8xMS8xNiAwOTozNjo1MCBndXkgRXhwICQiOworI2VuZGlmCisKKy8qIHdlIGFyZW4ndCB0Y3BkdW1wIDopICovCisjaWZkZWYgbm90ZGVmCisjaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmbmRlZiBXSU4zMgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2Vsc2UgICAvKiBXSU4zMiAqLworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2lmZGVmIERPX0lQVjYKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmICAvKiBET19JUFY2ICovCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisvKiBUaGUgYmVsb3cgYXJlIGNvcGllZCBmcm9tIG5ldGxpYi5oICovCisjaWZkZWYgZXJybm8KKy8qIGRlbGV0ZSB0aGUgb25lIGZyb20gc3RkbGliLmggICovCisvKiNkZWZpbmUgZXJybm8gICAgICAgKCpfZXJybm8oKSkgKi8KKyN1bmRlZiBlcnJubworI2VuZGlmCisjZGVmaW5lIGVycm5vIEdldExhc3RFcnJvcigpCisjZGVmaW5lIFNldF9lcnJubyhudW0pIFNldExhc3RFcnJvcigobnVtKSkKKworLyogSU5WQUxJRF9TT0NLRVQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgPT0gKHVuc2lnbmVkIGludCkofjApICovCisvKiBTT0NLRVRfRVJST1IgPT0gLTEgKi8KKyNkZWZpbmUgRU5PVFNPQ0sgV1NBRU5PVFNPQ0sKKyNkZWZpbmUgRUlOVFIgICAgV1NBRUlOVFIKKyNkZWZpbmUgRU5PQlVGUyAgV1NBRU5PQlVGUworI2RlZmluZSBFV09VTERCTE9DSyAgICAgICAgICAgV1NBRVdPVUxEQkxPQ0sKKyNkZWZpbmUgRUFGTk9TVVBQT1JUICBXU0FFQUZOT1NVUFBPUlQKKy8qIGZyb20gcHVibGljXHNka1xpbmNcY3J0XGVycm5vLmggKi8KKyNkZWZpbmUgRU5PU1BDICAgICAgICAgIDI4CisjZW5kaWYgIC8qIFdJTjMyICovCisKKy8qCisgKgorICovCisKKyNpZm5kZWYgSU5FVF9BRERSU1RSTEVOCisjZGVmaW5lIElORVRfQUREUlNUUkxFTiAgICAxNgorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2luZXRfbnRvcF92NCAoY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworICAgIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisgICAgaW50IGk7CisgICAgc3RydWN0IGluX2FkZHIgKmFkZHIgPSAoc3RydWN0IGluX2FkZHIgKilzcmM7CisgICAgdV9sb25nIGEgPSBudG9obChhZGRyLT5zX2FkZHIpOworICAgIGNvbnN0IGNoYXIgKm9yaWdfZHN0ID0gZHN0OworCisgICAgaWYgKHNpemUgPCBJTkVUX0FERFJTVFJMRU4pIHsKKyAgICAgIFNldF9lcnJubyhFTk9TUEMpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwlpbnQgbiA9IChhID4+ICgyNCAtIGkgKiA4KSkgJiAweEZGOworCWludCBub25femVyb3AgPSAwOworCisJaWYgKG5vbl96ZXJvcCB8fCBuIC8gMTAwID4gMCkgeworCSAgICAqZHN0KysgPSBkaWdpdHNbbiAvIDEwMF07CisJICAgIG4gJT0gMTAwOworCSAgICBub25femVyb3AgPSAxOworCX0KKwlpZiAobm9uX3plcm9wIHx8IG4gLyAxMCA+IDApIHsKKwkgICAgKmRzdCsrID0gZGlnaXRzW24gLyAxMF07CisJICAgIG4gJT0gMTA7CisJICAgIG5vbl96ZXJvcCA9IDE7CisJfQorCSpkc3QrKyA9IGRpZ2l0c1tuXTsKKwlpZiAoaSAhPSAzKQorCSAgICAqZHN0KysgPSAnLic7CisgICAgfQorICAgICpkc3QrKyA9ICdcMCc7CisgICAgcmV0dXJuIG9yaWdfZHN0OworfQorCitjb25zdCBjaGFyICoKK2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBzd2l0Y2ggKGFmKSB7CisgICAgY2FzZSBBRl9JTkVUIDoKKwlyZXR1cm4gaW5ldF9udG9wX3Y0IChzcmMsIGRzdCwgc2l6ZSk7CisgICAgZGVmYXVsdCA6CisgICAgICBTZXRfZXJybm8oRUFGTk9TVVBQT1JUKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvTWFrZWZpbGUuYW0gYi9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiY2ZhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEgQEAKK0VYVFJBX0RJU1QgPSAqLm00CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L01ha2VmaWxlLmluIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjIxZTVkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDI3NCBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS43LjkgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgorCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6Citob3N0X3RyaXBsZXQgPSBAaG9zdEAKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0dSRVAgPSBAR1JFUEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTkVFRF9MSUJDT01QQVRfRkFMU0UgPSBATkVFRF9MSUJDT01QQVRfRkFMU0VACitORUVEX0xJQkNPTVBBVF9UUlVFID0gQE5FRURfTElCQ09NUEFUX1RSVUVACitORVRDUFVfU09VUkNFID0gQE5FVENQVV9TT1VSQ0VACitORVREUlZMS1VQX1NPVVJDRSA9IEBORVREUlZMS1VQX1NPVVJDRUAKK05FVFJUTEtVUF9TT1VSQ0UgPSBATkVUUlRMS1VQX1NPVVJDRUAKK05FVFNFQ0xLVVBfU09VUkNFID0gQE5FVFNFQ0xLVVBfU09VUkNFQAorTkVUU0xPVExLVVBfU09VUkNFID0gQE5FVFNMT1RMS1VQX1NPVVJDRUAKK05FVFNZU0xLVVBfU09VUkNFID0gQE5FVFNZU0xLVVBfU09VUkNFQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitWRVJTSU9OID0gQFZFUlNJT05ACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK0VYVFJBX0RJU1QgPSAqLm00CitzdWJkaXIgPSBzcmMvbWlzc2luZy9tNAorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0RJU1RfU09VUkNFUyA9CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBNYWtlZmlsZS5hbQorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiAgTWFrZWZpbGUuYW0gICQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjICQoQUNMT0NBTF9NNCkKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBzcmMvbWlzc2luZy9tNC9NYWtlZmlsZQorTWFrZWZpbGU6ICAkKHNyY2RpcikvTWFrZWZpbGUuaW4gICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpCit1bmluc3RhbGwtaW5mby1hbToKK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCisKK3RvcF9kaXN0ZGlyID0gLi4vLi4vLi4KK2Rpc3RkaXIgPSAkKHRvcF9kaXN0ZGlyKS8kKFBBQ0tBR0UpLSQoVkVSU0lPTikKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1raW5zdGFsbGRpcnMpICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlCisKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS1ybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLW1hbjoKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYworCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbQorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RkaXIgZHZpIGR2aS1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBcCisJaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgcGRmIHBkZi1hbSBwcyBwcy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIFwKKwl1bmluc3RhbGwtaW5mby1hbQorCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L2hlcnJuby5tNCBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvaGVycm5vLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYzBkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L2hlcnJuby5tNApAQCAtMCwwICsxLDQxIEBACitkbmwgKgorZG5sICogQ29weXJpZ2h0IChjKSAyMDAxICBNb3RveXVraSBLYXNhaGFyYQorZG5sICoKK2RubCAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorZG5sICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCitkbmwgKiBhcmUgbWV0OgorZG5sICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK2RubCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkbmwgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorZG5sICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK2RubCAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorZG5sICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitkbmwgKiAKK2RubCAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitkbmwgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK2RubCAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorZG5sICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SU0JFCitkbmwgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitkbmwgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorZG5sICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitkbmwgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorZG5sICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK2RubCAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK2RubCAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK2RubCAqCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIGhfZXJybm8uCitkbmwgKgorQUNfREVGVU4oW0FDX0RFQ0xfSF9FUlJOT10sCitbQUNfQ0FDSEVfQ0hFQ0soZm9yIGhfZXJybm8gZGVjbGFyYXRpb24gaW4gbmV0ZGIuaCwgYWNfY3ZfZGVjbF9oX2Vycm5vLAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxuZXRkYi5oPl1dLCBbWworaF9lcnJubyA9IDA7CitdXSldLFthY19jdl9kZWNsX2hfZXJybm89eWVzXSxbYWNfY3ZfZGVjbF9oX2Vycm5vPW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X2RlY2xfaF9lcnJubyIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSF9FUlJOT19ERUNMQVJFRCwgMSwKK1tEZWZpbmUgdG8gMSBpZiBgaF9lcnJubycgaXMgZGVjbGFyZWQgYnkgPG5ldGRiLmg+XSkKK2ZpXSkKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvaW42YWRkci5tNCBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvaW42YWRkci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDZlODJmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9pbjZhZGRyLm00CkBAIC0wLDAgKzEsODkgQEAKK2RubCAqCitkbmwgKiBDb3B5cmlnaHQgKGMpIDIwMDEgIE1vdG95dWtpIEthc2FoYXJhCitkbmwgKgorZG5sICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitkbmwgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2RubCAqIGFyZSBtZXQ6CitkbmwgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorZG5sICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RubCAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitkbmwgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworZG5sICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCitkbmwgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK2RubCAqIAorZG5sICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK2RubCAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorZG5sICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitkbmwgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTQkUKK2RubCAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK2RubCAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitkbmwgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK2RubCAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitkbmwgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorZG5sICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorZG5sICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorZG5sICoKKworZG5sICogCitkbmwgKiBDaGVjayBmb3Igc3RydWN0IGluNl9hZGRyCitkbmwgKiAKK0FDX0RFRlVOKFtBQ19TVFJVQ1RfSU42X0FERFJdLAorW0FDX0NBQ0hFX0NIRUNLKGZvciBzdHJ1Y3QgaW42X2FkZHIsIGFjX2N2X3N0cnVjdF9pbjZfYWRkciwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dXSwgW1sKK3N0cnVjdCBpbjZfYWRkciBhZGRyZXNzOworXV0pXSxbYWNfY3Zfc3RydWN0X2luNl9hZGRyPXllc10sW2FjX2N2X3N0cnVjdF9pbjZfYWRkcj1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl9zdHJ1Y3RfaW42X2FkZHIiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX0lONl9BRERSLCAxLAorW0RlZmluZSB0byAxIGlmIDxuZXRpbmV0L2luLmg+IGRlZmluZXMgYHN0cnVjdCBpbjZfYWRkciddKQorZmldKQorCitkbmwgKiAKK2RubCAqIENoZWNrIGZvciBpbjZhZGRyX2FueS4KK2RubCAqCitBQ19ERUZVTihbQUNfREVDTF9JTjZBRERSX0FOWV0sCitbQUNfUkVRVUlSRShbQUNfU1RSVUNUX0lONl9BRERSXSkKK2lmIHRlc3QgJGFjX2N2X3N0cnVjdF9pbjZfYWRkciA9IG5vOyB0aGVuCisgICAgYWNfY3ZfZGVjbF9pbjZhZGRyX2FueT1ubworZWxzZQorICAgIEFDX0NBQ0hFX0NIRUNLKGZvciBpbjZhZGRyX2FueSBkZWNsYXJhdGlvbiBpbiBuZXRpbmV0L2luLmgsCisgICAgYWNfY3ZfZGVjbF9pbjZhZGRyX2FueSwKKyAgICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0sIFtbCit1bnNpZ25lZCBjaGFyICphZGRyZXNzOworYWRkcmVzcyA9IChjaGFyICopJmluNmFkZHJfYW55OworXV0pXSxbYWNfY3ZfZGVjbF9pbjZhZGRyX2FueT15ZXNdLFthY19jdl9kZWNsX2luNmFkZHJfYW55PW5vXSldKQorICAgIGlmIHRlc3QgIiRhY19jdl9kZWNsX2luNmFkZHJfYW55IiA9IHllczsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoSU42QUREUl9BTllfREVDTEFSRUQsIDEsCitbRGVmaW5lIHRvIDEgaWYgYGluNmFkZHJfYW55JyBpcyBkZWNsYXJlZCBieSA8bmV0aW5ldC9pbi5oPl0pCisgICAgZmkKK2ZpXSkKKworZG5sICoKK2RubCAqIENoZWNrIGZvciBpbjZhZGRyX2xvb3BiYWNrLgorZG5sICoKK0FDX0RFRlVOKFtBQ19ERUNMX0lONkFERFJfTE9PUEJBQ0tdLAorW0FDX1JFUVVJUkUoW0FDX1NUUlVDVF9JTjZfQUREUl0pCitpZiB0ZXN0ICRhY19jdl9zdHJ1Y3RfaW42X2FkZHIgPSBubzsgdGhlbgorICAgIGFjX2N2X2RlY2xfaW42YWRkcl9sb29wYmFjaz1ubworZWxzZQorICAgIEFDX0NBQ0hFX0NIRUNLKGZvciBpbjZhZGRyX2xvb3BiYWNrIGRlY2xhcmF0aW9uIGluIG5ldGluZXQvaW4uaCwKKyAgICBhY19jdl9kZWNsX2luNmFkZHJfbG9vcGJhY2ssCisgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl1dLCBbWwordW5zaWduZWQgY2hhciAqYWRkcmVzczsKK2FkZHJlc3MgPSAoY2hhciAqKSZpbjZhZGRyX2xvb3BiYWNrOworXV0pXSxbYWNfY3ZfZGVjbF9pbjZhZGRyX2xvb3BiYWNrPXllc10sW2FjX2N2X2RlY2xfaW42YWRkcl9sb29wYmFjaz1ub10pXSkKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfZGVjbF9pbjZhZGRyX2xvb3BiYWNrIiA9IHllczsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoSU42QUREUl9MT09QQkFDS19ERUNMQVJFRCwgMSwKK1tEZWZpbmUgdG8gMSBpZiBgaW42YWRkcl9sb29wYmFjaycgaXMgZGVjbGFyZWQgYnkgPG5ldGluZXQvaW4uaD5dKQorICAgIGZpCitmaV0pCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L3NhbGVuLm00IGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9zYWxlbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTg1OGRhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9zYWxlbi5tNApAQCAtMCwwICsxLDMyIEBACitkbmwgQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4CitkbmwgdGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCitkbmwgZG5sIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CitkbmwgZG5sIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAorZG5sIGRubCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKK2RubCBkbmwgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKK2RubCBkbmwgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCitkbmwgZG5sIHdyaXR0ZW4gcGVybWlzc2lvbi4KK2RubCBkbmwgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorZG5sIGRubCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorZG5sIGRubCBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorZG5sIGRubAorZG5sIGRubCBMQkwgYXV0b2NvbmYgbWFjcm9zCitkbmwgZG5sCitkbmwKK2RubAorZG5sIENoZWNrcyB0byBzZWUgaWYgdGhlIHNvY2thZGRyIHN0cnVjdCBoYXMgdGhlIDQuNCBCU0Qgc2FfbGVuIG1lbWJlcgorZG5sIGJvcnJvd2VkIGZyb20gTEJMIGxpYnBjYXAKK0FDX0RFRlVOKEFDX0NIRUNLX1NBX0xFTiwgWworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgc3RydWN0IGhhcyBzYV9sZW4gbWVtYmVyKQorICAgICAgICBBQ19DQUNIRV9WQUwoJDEsCisgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyMgICAgICAgICAgICAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgICAgICAgICAgICAgICBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKKyAgICAgICAgICAgICAgICBbdV9pbnQgaSA9IHNpemVvZigoKHN0cnVjdCBzb2NrYWRkciAqKTApLT5zYV9sZW4pXSwKKyAgICAgICAgICAgICAgICAkMT15ZXMsCisgICAgICAgICAgICAgICAgJDE9bm8pKQorICAgICAgICBBQ19NU0dfUkVTVUxUKCQkMSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICQkMSA9IHllcyA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9TT0NLQUREUl9TQV9MRU5dLDEsW0RlZmluZSBpZiBzdHJ1Y3Qgc29ja2FkZHIgaGFzIHRoZSBzYV9sZW4gbWVtYmVyXSkKKyAgICAgICAgZmkKK10pCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L3NvY2thZGRyaW42Lm00IGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9zb2NrYWRkcmluNi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI3MGYzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9zb2NrYWRkcmluNi5tNApAQCAtMCwwICsxLDYwIEBACitkbmwgKgorZG5sICogQ29weXJpZ2h0IChjKSAyMDAxICBNb3RveXVraSBLYXNhaGFyYQorZG5sICoKK2RubCAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorZG5sICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCitkbmwgKiBhcmUgbWV0OgorZG5sICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK2RubCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkbmwgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorZG5sICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK2RubCAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorZG5sICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitkbmwgKiAKK2RubCAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitkbmwgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK2RubCAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorZG5sICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SU0JFCitkbmwgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitkbmwgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorZG5sICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitkbmwgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorZG5sICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK2RubCAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK2RubCAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK2RubCAqCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIHN0cnVjdCBzb2NrYWRkcl9pbjYKK2RubCAqCitBQ19ERUZVTihbQUNfU1RSVUNUX1NPQ0tBRERSX0lONl0sCitbQUNfQ0FDSEVfQ0hFQ0soZm9yIHN0cnVjdCBzb2NrYWRkcl9pbjYsIGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9pbjYsCitbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0sIFtbCitzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHJlc3M7CitdXSldLFthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfaW42PXllc10sW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9pbjY9bm9dKV0pCitpZiB0ZXN0ICIkYWNfY3Zfc3RydWN0X3NvY2thZGRyX2luNiIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42LCAxLAorW0RlZmluZSB0byAxIGlmIDxuZXRpbmV0L2luLmg+IGRlZmluZXMgYHN0cnVjdCBzb2NrYWRkcl9pbjYnXSkKK2ZpXSkKKworZG5sICogCitkbmwgKiBDaGVjayBmb3Igc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UKK2RubCAqIAorQUNfREVGVU4oW0FDX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFXSwKK1tBQ19DQUNIRV9DSEVDSyhmb3Igc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UsIGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlLAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl1dLCBbWworc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcmVzczsKK11dKV0sW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPXllc10sW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlIiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFLCAxLAorW0RlZmluZSB0byAxIGlmIDxuZXRpbmV0L2luLmg+IGRlZmluZXMgYHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlJ10pCitmaV0pCisKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvc29ja2ludHR5cGVzLm00IGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9zb2NraW50dHlwZXMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ5NDA2MwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvc29ja2ludHR5cGVzLm00CkBAIC0wLDAgKzEsMTU0IEBACitkbmwgKgorZG5sICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAzICBNb3RveXVraSBLYXNhaGFyYQorZG5sICoKK2RubCAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorZG5sICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCitkbmwgKiBhcmUgbWV0OgorZG5sICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK2RubCAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CitkbmwgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkbmwgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorZG5sICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK2RubCAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorZG5sICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitkbmwgKiAKK2RubCAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitkbmwgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK2RubCAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorZG5sICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SU0JFCitkbmwgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitkbmwgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorZG5sICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitkbmwgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorZG5sICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK2RubCAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKK2RubCAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KK2RubCAqCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIHNvY2tsZW5fdC4KK2RubCAqIAorQUNfREVGVU4oW0FDX1RZUEVfU09DS0xFTl9UXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIHNvY2tsZW5fdF0sIGFjX2N2X3R5cGVfc29ja2xlbl90LAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sIFtbCitzb2NrbGVuX3Qgc29ja2xlbjsKK11dKV0sW2FjX2N2X3R5cGVfc29ja2xlbl90PXllc10sW2FjX2N2X3R5cGVfc29ja2xlbl90PW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfc29ja2xlbl90IiAhPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoc29ja2xlbl90LCBpbnQsCitbRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gb3IgPHN5cy9zb2NrZXQuaD4gZG9lcyBub3QgZGVmaW5lLl0pCitmaV0pCisKK2RubCAqIAorZG5sICogQ2hlY2sgZm9yIGluX3BvcnRfdC4KK2RubCAqIAorQUNfREVGVU4oW0FDX1RZUEVfSU5fUE9SVF9UXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIGluX3BvcnRfdF0sIGFjX2N2X3R5cGVfaW5fcG9ydF90LAorW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl1dLCBbWworaW5fcG9ydF90IGluX3BvcnQ7CitdXSldLFthY19jdl90eXBlX2luX3BvcnRfdD15ZXNdLFthY19jdl90eXBlX2luX3BvcnRfdD1ub10pXSkKK2lmIHRlc3QgIiRhY19jdl90eXBlX2luX3BvcnRfdCIgIT0geWVzOyB0aGVuCisgICAgYWNfY3Zfc2luX3BvcnRfc2l6ZT11bmtub3duCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2luX3BvcnQpID09IHNpemVvZihsb25nKSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2luX3BvcnRfc2l6ZT1sb25nXSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zaW5fcG9ydCkgPT0gc2l6ZW9mKGludCkpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3Npbl9wb3J0X3NpemU9aW50XSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zaW5fcG9ydCkgPT0gc2l6ZW9mKHNob3J0KSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2luX3BvcnRfc2l6ZT1zaG9ydF0sW10sW10pCisgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2luX3BvcnQpID09IHNpemVvZihjaGFyKSkgPyAwIDogMTsKKyAgICB9CisgICAgXV0pXSxbYWNfY3Zfc2luX3BvcnRfc2l6ZT1jaGFyXSxbXSxbXSkKKyAgICBpZiB0ZXN0ICIkYWNfY3Zfc2luX3BvcnRfc2l6ZSIgPSB1bmtub3duOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtGYWlsZWQgdG8gZ2V0IHNpemUgb2Ygc2luX3BvcnQgaW4gc3RydWN0IHNvY2thZGRyX2luLl0pCisgICAgZmkKKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoaW5fcG9ydF90LCB1bnNpZ25lZCAkYWNfY3Zfc2luX3BvcnRfc2l6ZSwKK1tEZWZpbmUgdG8gYHVuc2lnbmVkIGNoYXInLCBgdW5zaWduZWQgc2hvcnQnLCBgdW5zaWduZWQgaW50JyBvcgorYHVuc2lnbmVkIGxvbmcnIGFjY29yZGluZyB3aXRoIHNpemUgb2YgYHNpbl9wb3J0JyBpbiBgc3RydWN0IHNvY2thZGRyX2luJywKK2lmIDxzeXMvdHlwZXMuaD4sIDxzeXMvc29ja2V0Lmg+IG9yIDxuZXRpbmV0L2luLmg+IGRvZXMgbm90IGRlZmluZQorYGluX3BvcnRfdCcuXSkKK2ZpXSkKKworZG5sICogCitkbmwgKiBDaGVjayBmb3Igc2FfZmFtaWx5X3QuCitkbmwgKiAKK0FDX0RFRlVOKFtBQ19UWVBFX1NBX0ZBTUlMWV9UXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIHNhX2ZhbWlseV90XSwgYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLCBbWworc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OworXV0pXSxbYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdD15ZXNdLFthY19jdl90eXBlX3NhX2ZhbWlseV90PW5vXSldKQoraWYgdGVzdCAiJGFjX2N2X3R5cGVfc2FfZmFtaWx5X3QiICE9IHllczsgdGhlbgorICAgIGFjX2N2X3NhX2ZhbWlseV9zaXplPXVua25vd24KKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2FfZmFtaWx5KSA9PSBzaXplb2YobG9uZykpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3NhX2ZhbWlseV9zaXplPWxvbmddLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zYV9mYW1pbHkpID09IHNpemVvZihpbnQpKSA/IDAgOiAxOworICAgIH0KKyAgICBdXSldLFthY19jdl9zYV9mYW1pbHlfc2l6ZT1pbnRdLFtdLFtdKQorICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgICAgaW50IG1haW4oKSB7CisJc3RydWN0IHNvY2thZGRyIGFkZHI7CisJcmV0dXJuIChzaXplb2YoYWRkci5zYV9mYW1pbHkpID09IHNpemVvZihzaG9ydCkpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3NhX2ZhbWlseV9zaXplPXNob3J0XSxbXSxbXSkKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgIGludCBtYWluKCkgeworCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCXJldHVybiAoc2l6ZW9mKGFkZHIuc2FfZmFtaWx5KSA9PSBzaXplb2YoY2hhcikpID8gMCA6IDE7CisgICAgfQorICAgIF1dKV0sW2FjX2N2X3NhX2ZhbWlseV9zaXplPWNoYXJdLFtdLFtdKQorICAgIGlmIHRlc3QgIiRhY19jdl9zYV9mYW1pbHlfc2l6ZSIgPSB1bmtub3duOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtGYWlsZWQgdG8gZ2V0IHNpemUgb2Ygc2FfZmFtaWx5IGluIHN0cnVjdCBzb2NrYWRkci5dKQorICAgIGZpCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKHNhX2ZhbWlseV90LCB1bnNpZ25lZCAkYWNfY3Zfc2FfZmFtaWx5X3NpemUsCitbRGVmaW5lIHRvIGB1bnNpZ25lZCBjaGFyJywgYHVuc2lnbmVkIHNob3J0JywgYHVuc2lnbmVkIGludCcgb3IKK2B1bnNpZ25lZCBsb25nJyBhY2NvcmRpbmcgd2l0aCBzaXplIG9mIGBzYV9mYW1pbHknIGluIGBzdHJ1Y3Qgc29ja2FkZHInLAoraWYgPHN5cy90eXBlcy5oPiBvciA8c3lzL3NvY2tldC5oPiBkb2VzIG5vdCBkZWZpbmUgYHNhX2ZhbWlseV90Jy5dKQorZmldKQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC9zb2NrbGVudC5tNCBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvc29ja2xlbnQubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0OTkyNQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL21pc3NpbmcvbTQvc29ja2xlbnQubTQKQEAgLTAsMCArMSw4MSBAQAorZG5sIFRoaXMgY29tZXMgZnJvbSBsaWJjdXJsJ3MgYWNpbmNsdWRlLm00LiAgaXQgaXMgbm90IGNsZWFyIGlmIHRoaXMKK2RubCBpcyBvcmlnaW5hbCBsaWJjdXJsIGNvZGUsIG9yIG90aGVyIGNvZGUsIHNvIHdlIGluY2x1ZGUgdGhlIGxpYmN1cmwKK2RubCBjb3B5cmlnaHQgaGVyZQorZG5sCitkbmwgCitkbmwgQ29weXJpZ2h0IChjKSAxOTk2IC0gMjAwNSwgRGFuaWVsIFN0ZW5iZXJnLCA8ZGFuaWVsQGhheHguc2U+LgorZG5sIAorZG5sIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitkbmwgCitkbmwgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UKK2RubCB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKK2RubCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCitkbmwgCitkbmwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK2RubCBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK2RubCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gSU4KK2RubCBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK2RubCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK2RubCBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRQorZG5sIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KK2RubCAKK2RubCBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIgc2hhbGwgbm90CitkbmwgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCitkbmwgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworZG5sIENoZWNrIGZvciBzb2NrbGVuX3Q6IGhpc3RvcmljYWxseSBvbiBCU0QgaXQgaXMgYW4gaW50LCBhbmQgaW4KK2RubCBQT1NJWCAxZyBpdCBpcyBhIHR5cGUgb2YgaXRzIG93biwgYnV0IHNvbWUgcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQKK2RubCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHRvIGdldHNvY2tvcHQsIGdldHBlZXJuYW1lLCBldGMuICBTbyB3ZQorZG5sIGhhdmUgdG8gdGVzdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IHdpbGwgd29yay4KKworZG5sIFJlbW92ZSB0aGUgQUNfQ0hFQ0tfVFlQRSAtIG9uIEhQLVVYIGl0IHdvdWxkIGZpbmQgYSBzb2NrbGVuX3QsIGJ1dCB0aGUgCitkbmwgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgZ2V0c29ja29wdCBldCBhbCB3aWxsIG5vdCBhY3R1YWxseSB1c2UgCitkbmwgc29ja2xlbl90IGFyZ3MgdW5sZXNzIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgaXMgZGVmaW5lZC4gc28sIHRoZQorZG5sIEFDX0NIRUNLX1RZUEUgd2lsbCBmaW5kIGEgc29ja2xlbl90IGFuZCB0aGluayBhbGwgaXMgaGFwcGluZXNzIGFuZAorZG5sIGpveSB3aGVuIHlvdSB3aWxsIHJlYWxseSBnZXQgd2FybmluZ3MgYWJvdXQgbWlzbWF0Y2ggdHlwZXMgLSB0eXBlCitkbmwgbWlzbWF0Y2hlcyB0aGF0IHdvdWxkIGJlIHBvc3NpYmx5IEJhZCAodG0pIGluIGEgNjQtYml0IGNvbXBpbGUuCitkbmwgcmFqIDIwMDUtMDUtMTEgdGhpcyBjaGFuZ2UgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgYXQgd2lsbCAKKworZG5sIGFsc28sIGFkZGVkICJleHRlcm4iIHRvIHRoZSAiaW50IGdldHBlZXJuYW1lIiBpbiBhbiBhdHRlbXB0IHRvIHJlc29sdmUKK2RubCBhbiBpc3N1ZSB3aXRoIHRoaXMgY29kZSB1bmRlciBTb2xhcmlzIDIuOS4gIHRoaXMgdG9vIG1heSBiZSAKK2RubCByZWRpc3RyaWJ1dGVkIGF0IHdpbGwKKworQUNfREVGVU4oW09MRF9UWVBFX1NPQ0tMRU5fVF0sCitbCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisgICAgICBBQ19DQUNIRV9WQUwoW2N1cmxfY3Zfc29ja2xlbl90X2VxdWl2XSwKKyAgICAgIFsKKyAgICAgICAgICMgU3lzdGVtcyBoYXZlIGVpdGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yCisgICAgICAgICAjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKyAgICAgICAgIGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2PQorICAgICAgICAgZm9yIGFyZzIgaW4gInN0cnVjdCBzb2NrYWRkciIgdm9pZDsgZG8KKyAgICAgICAgICAgIGZvciB0IGluIGludCBzaXplX3QgdW5zaWduZWQgbG9uZyAidW5zaWduZWQgbG9uZyIgc29ja2xlbl90OyBkbworICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworICAgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICAgICAgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgZ2V0cGVlcm5hbWUgKGludCwgJGFyZzIgKiwgJHQgKik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgICR0IGxlbjsKKyAgICAgICAgICAgICAgICAgIGdldHBlZXJuYW1lKDAsMCwmbGVuKTsKKyAgICAgICAgICAgICAgIF0sWworICAgICAgICAgICAgICAgICAgY3VybF9jdl9zb2NrbGVuX3RfZXF1aXY9IiR0IgorICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBkb25lCisgICAgICAgICBkb25lCisKKyAgICAgICAgIGlmIHRlc3QgIngkY3VybF9jdl9zb2NrbGVuX3RfZXF1aXYiID0geDsgdGhlbgorCSMgdGFrZSBhIHdpbGQgZ3Vlc3MKKyAgICAgICAgICAgIGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2PSJzb2NrbGVuX3QiCisgICAgICAgICAgICBBQ19NU0dfV0FSTihbQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QsIGd1ZXNzaW5nIHNvY2tsZW5fdF0pCisgICAgICAgICBmaQorICAgICAgXSkKKyAgICAgIEFDX01TR19SRVNVTFQoJGN1cmxfY3Zfc29ja2xlbl90X2VxdWl2KQorICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKG5ldHBlcmZfc29ja2xlbl90LCAkY3VybF9jdl9zb2NrbGVuX3RfZXF1aXYsCisgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90IGlmIG5vdCBkZWZpbmVkXSkKK10pCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9taXNzaW5nL200L3R5cGVfc29ja2xlbl90Lm00IGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC90eXBlX3NvY2tsZW5fdC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDlhYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbWlzc2luZy9tNC90eXBlX3NvY2tsZW5fdC5tNApAQCAtMCwwICsxLDI1IEBACitkbmwgQHN5bm9wc2lzIFRZUEVfU09DS0xFTl9UCitkbmwKK2RubCBDaGVjayB3aGV0aGVyIHN5cy9zb2NrZXQuaCBkZWZpbmVzIHR5cGUgc29ja2xlbl90LiBQbGVhc2Ugbm90ZSB0aGF0Citkbmwgc29tZSBzeXN0ZW1zIHJlcXVpcmUgc3lzL3R5cGVzLmggdG8gYmUgaW5jbHVkZWQgYmVmb3JlIHN5cy9zb2NrZXQuaAorZG5sIGNhbiBiZSBjb21waWxlZC4KK2RubAorZG5sIEBjYXRlZ29yeSBNaXNjCitkbmwgQGF1dGhvciBMYXJzIEJyaW5raG9mZiA8bGFyc0Bub2NyZXcub3JnPgorZG5sIEB2ZXJzaW9uIDIwMDUtMDEtMTEKK2RubCBAbGljZW5zZSBHUExXaXRoQUNFeGNlcHRpb24KKworQUNfREVGVU4oW1RZUEVfU09DS0xFTl9UXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIHNvY2tsZW5fdF0sIGFjX2N2X3R5cGVfc29ja2xlbl90LAorWworICBBQ19UUllfQ09NUElMRSgKKyAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKKyAgW3NvY2tsZW5fdCBsZW4gPSA0MjsgcmV0dXJuIDA7XSwKKyAgYWNfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzLAorICBhY19jdl90eXBlX3NvY2tsZW5fdD1ubykKK10pCisgIGlmIHRlc3QgJGFjX2N2X3R5cGVfc29ja2xlbl90ICE9IHllczsgdGhlbgorICAgIEFDX0RFRklORShzb2NrbGVuX3QsIGludCwgW1N1YnN0aXR1dGUgZm9yIHNvY2tsZW5fdF0pCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0X3V1aWQuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldF91dWlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmZDIzMQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldF91dWlkLmMKQEAgLTAsMCArMSwzMzYgQEAKKy8qIHdoYXQgZm9sbG93cyBpcyBhIHNvbWV3aGF0IHN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiB0aGUgc2FtcGxlCisgICBpbXBsZW1lbnRhdGlvbiBvZiBVVUlEIGdlbmVyYXRpb24gZnJvbSBSRkMgNDEyMi4gICovCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDE5OTAtIDE5OTMsIDE5OTYgT3BlbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisqKiBDb3B5cmlnaHQgKGMpIDE5ODkgYnkgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnksIFBhbG8gQWx0bywgQ2EuICYKKyoqIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLCBNYXluYXJkLCBNYXNzLgorKiogQ29weXJpZ2h0IChjKSAxOTk4IE1pY3Jvc29mdC4KKyoqIFRvIGFueW9uZSB3aG8gYWNrbm93bGVkZ2VzIHRoYXQgdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIKKyoqIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eTogcGVybWlzc2lvbiB0byB1c2UsIGNvcHksCisqKiBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgZmlsZSBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5CisqKiBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQKKyoqIHRoaXMgbm90aWNlIGFwcGVhcnMgaW4gYWxsIHNvdXJjZSBjb2RlIGNvcGllcywgYW5kIHRoYXQgbm9uZSBvZgorKiogdGhlIG5hbWVzIG9mIE9wZW4gU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgSGV3bGV0dC1QYWNrYXJkCisqKiBDb21wYW55LCBNaWNyb3NvZnQsIG9yIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIGJlIHVzZWQgaW4KKyoqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKyoqIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gTmVpdGhlciBPcGVuIFNvZnR3YXJlCisqKiBGb3VuZGF0aW9uLCBJbmMuLCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSwgTWljcm9zb2Z0LCBub3IgRGlnaXRhbAorKiogRXF1aXBtZW50IENvcnBvcmF0aW9uIG1ha2VzIGFueSByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisqKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworLyogc2V0IHRoZSBmb2xsb3dpbmcgdG8gdGhlIG51bWJlciBvZiAxMDBucyB0aWNrcyBvZiB0aGUgYWN0dWFsCisgICByZXNvbHV0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgY2xvY2sgKi8KKyNkZWZpbmUgVVVJRFNfUEVSX1RJQ0sgMTAyNAorCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N5c2luZm8uaD4KKyNlbmRpZgorCisvKiBzeXN0ZW0gZGVwZW5kZW50IGNhbGwgdG8gZ2V0IHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lLiBSZXR1cm5lZCBhcworICAgMTAwbnMgdGlja3Mgc2luY2UgVVVJRCBlcG9jaCwgYnV0IHJlc29sdXRpb24gbWF5IGJlIGxlc3MgdGhhbgorICAgMTAwbnMuICovCisKKyNpZmRlZiBXSU4zMgorI2RlZmluZSBJNjQoQykgQworI2Vsc2UKKyNkZWZpbmUgSTY0KEMpIEMjI0xMCisjZW5kaWYKKwordHlwZWRlZiB1aW50NjRfdCB1dWlkX3RpbWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBjaGFyIG5vZGVJRFs2XTsKK30gdXVpZF9ub2RlX3Q7CisKKyN1bmRlZiB1dWlkX3QKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDMyX3QgIHRpbWVfbG93OworICB1aW50MTZfdCAgdGltZV9taWQ7CisgIHVpbnQxNl90ICB0aW1lX2hpX2FuZF92ZXJzaW9uOworICB1aW50OF90ICAgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZDsKKyAgdWludDhfdCAgIGNsb2NrX3NlcV9sb3c7CisgIHVpbnQ4X3QgICBub2RlWzZdOworfSB1dWlkX3Q7CisKKy8qIHNvbWUgZm9yd2FyZCBkZWNsYXJhdGlvbnMuICBraW5kIG9mIHdpbXB5IHRvIGRvIHRoYXQgYnV0IGhlY2ssIHdlCisgICBhcmUgYWxsIGZyaWVuZHMgaGVyZSByaWdodD8gIHJhaiAyMDA4MTAyNCAqLworc3RhdGljIHVpbnQxNl90IHRydWVfcmFuZG9tKHZvaWQpOworCisKKworI2lmZGVmIFdJTjMyCisKK3N0YXRpYyB2b2lkIGdldF9zeXN0ZW1fdGltZSh1dWlkX3RpbWVfdCAqdXVpZF90aW1lKQoreworICBVTEFSR0VfSU5URUdFUiB0aW1lOworCisgIC8qIE5UIGtlZXBzIHRpbWUgaW4gRklMRVRJTUUgZm9ybWF0IHdoaWNoIGlzIDEwMG5zIHRpY2tzIHNpbmNlCisgICAgIEphbiAxLCAxNjAxLiBVVUlEcyB1c2UgdGltZSBpbiAxMDBucyB0aWNrcyBzaW5jZSBPY3QgMTUsIDE1ODIuCisgICAgIFRoZSBkaWZmZXJlbmNlIGlzIDE3IERheXMgaW4gT2N0ICsgMzAgKE5vdikgKyAzMSAoRGVjKQorICAgICArIDE4IHllYXJzIGFuZCA1IGxlYXAgZGF5cy4gKi8KKyAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKEZJTEVUSU1FICopJnRpbWUpOworICB0aW1lLlF1YWRQYXJ0ICs9CisKKyAgICAodW5zaWduZWQgX19pbnQ2NCkgKDEwMDAqMTAwMCoxMCkgICAgICAgLy8gc2Vjb25kcworICAgICogKHVuc2lnbmVkIF9faW50NjQpICg2MCAqIDYwICogMjQpICAgICAgIC8vIGRheXMKKyAgICAqICh1bnNpZ25lZCBfX2ludDY0KSAoMTcrMzArMzErMzY1KjE4KzUpOyAvLyAjIG9mIGRheXMKKyAgKnV1aWRfdGltZSA9IHRpbWUuUXVhZFBhcnQ7Cit9CisKKy8qIFNhbXBsZSBjb2RlLCBub3QgZm9yIHVzZSBpbiBwcm9kdWN0aW9uOyBzZWUgUkZDIDE3NTAgKi8KK3N0YXRpYyB2b2lkIGdldF9yYW5kb21faW5mbyhjaGFyIHNlZWRbMTZdKQoreworICB1aW50MTZfdCBteXJhbmQ7CisgIGludCBpOworCisgIGkgPSAwOworICBkbyB7CisgICAgbXlyYW5kID0gdHJ1ZV9yYW5kb20oKTsKKyAgICBzZWVkW2krK10gPSBteXJhbmQgJiAweGZmOworICAgIHNlZWRbaSsrXSA9IG15cmFuZCA+PiA4OworICB9IHdoaWxlIChpIDwgMTQpOworCit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIGdldF9zeXN0ZW1fdGltZSh1dWlkX3RpbWVfdCAqdXVpZF90aW1lKQoreworICBzdHJ1Y3QgdGltZXZhbCB0cDsKKworICBnZXR0aW1lb2ZkYXkoJnRwLCAoc3RydWN0IHRpbWV6b25lICopMCk7CisKKyAgLyogT2Zmc2V0IGJldHdlZW4gVVVJRCBmb3JtYXR0ZWQgdGltZXMgYW5kIFVuaXggZm9ybWF0dGVkIHRpbWVzLgorICAgICBVVUlEIFVUQyBiYXNlIHRpbWUgaXMgT2N0b2JlciAxNSwgMTU4Mi4KKyAgICAgVW5peCBiYXNlIHRpbWUgaXMgSmFudWFyeSAxLCAxOTcwLiovCisgICp1dWlkX3RpbWUgPSAoKHVpbnQ2NF90KXRwLnR2X3NlYyAqIDEwMDAwMDAwKQorICAgICsgKCh1aW50NjRfdCl0cC50dl91c2VjICogMTApCisgICAgKyBJNjQoMHgwMUIyMUREMjEzODE0MDAwKTsKK30KKworLyogU2FtcGxlIGNvZGUsIG5vdCBmb3IgdXNlIGluIHByb2R1Y3Rpb247IHNlZSBSRkMgMTc1MCAqLworc3RhdGljIHZvaWQgZ2V0X3JhbmRvbV9pbmZvKGNoYXIgc2VlZFsxNl0pCit7CisgIEZJTEUgKmZwOworICB1aW50MTZfdCBteXJhbmQ7CisgIGludCBpOworCisgIC8qIHdlIGFyZW4ndCBhbGwgdGhhdCBwaWNreSwgYW5kIHdlIHdvdWxkIHJhdGhlciBub3QgYmxvY2sgc28gd2UKKyAgICAgd2lsbCB1c2UgdXJhbmRvbSAqLworICBmcCA9IGZvcGVuKCIvZGV2L3VyYW5kb20iLCJyYiIpOworCisgIGlmIChOVUxMICE9IGZwKSB7CisgICAgZnJlYWQoc2VlZCxzaXplb2Yoc2VlZCksMSxmcCk7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogb2ssIG5vdyB3aGF0PyAqLworCisgIGkgPSAwOworICBkbyB7CisgICAgbXlyYW5kID0gdHJ1ZV9yYW5kb20oKTsKKyAgICBzZWVkW2krK10gPSBteXJhbmQgJiAweGZmOworICAgIHNlZWRbaSsrXSA9IG15cmFuZCA+PiA4OworICB9IHdoaWxlIChpIDwgMTQpOworCit9CisKKyNlbmRpZgorCisKKy8qIHRydWVfcmFuZG9tIC0tIGdlbmVyYXRlIGEgY3J5cHRvLXF1YWxpdHkgcmFuZG9tIG51bWJlci4KKyoqVGhpcyBzYW1wbGUgZG9lc24ndCBkbyB0aGF0LioqICovCitzdGF0aWMgdWludDE2X3QgdHJ1ZV9yYW5kb20odm9pZCkKK3sKKyAgc3RhdGljIGludCBpbml0ZWQgPSAwOworICB1dWlkX3RpbWVfdCB0aW1lX25vdzsKKworICBpZiAoIWluaXRlZCkgeworICAgIGdldF9zeXN0ZW1fdGltZSgmdGltZV9ub3cpOworICAgIHRpbWVfbm93ID0gdGltZV9ub3cgLyBVVUlEU19QRVJfVElDSzsKKyAgICBzcmFuZCgodW5zaWduZWQgaW50KQorCSAgKCgodGltZV9ub3cgPj4gMzIpIF4gdGltZV9ub3cpICYgMHhmZmZmZmZmZikpOworICAgIGluaXRlZCA9IDE7CisgIH0KKworICByZXR1cm4gcmFuZCgpOworfQorCisvKiBwdWlkIC0tIHByaW50IGEgVVVJRCAqLwordm9pZCBwdWlkKHV1aWRfdCB1KQoreworICBpbnQgaTsKKworICBwcmludGYoIiU4Ljh4LSU0LjR4LSU0LjR4LSUyLjJ4JTIuMngtIiwgdS50aW1lX2xvdywgdS50aW1lX21pZCwKKwkgdS50aW1lX2hpX2FuZF92ZXJzaW9uLCB1LmNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWQsCisJIHUuY2xvY2tfc2VxX2xvdyk7CisgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisgICAgcHJpbnRmKCIlMi4yeCIsIHUubm9kZVtpXSk7CisgIHByaW50ZigiXG4iKTsKK30KKworLyogc25wdWlkIC0tIHByaW50IGEgVVVJRCBpbiB0aGUgc3VwcGxpZWQgYnVmZmVyICovCit2b2lkIHNucHVpZChjaGFyICpzdHIsIHNpemVfdCBzaXplLCB1dWlkX3QgdSkgeworICBpbnQgaTsKKyAgY2hhciAqdG1wID0gc3RyOworCisgIGlmIChzaXplIDwgMzgpIHsKKyAgICBzbnByaW50Zih0bXAsc2l6ZSwiJXMiLCJ1dWlkIHN0cmluZyB0b28gc21hbGwiKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBwZXJoYXBzIHRoaXMgaXMgYSB0cmlmbGUgb3B0aW1pc3RpYyBidXQgd2hhdCB0aGUgaGVjayAqLworICBzcHJpbnRmKHRtcCwKKwkgICIlOC44eC0lNC40eC0lNC40eC0lMi4yeCUyLjJ4LSIsCisJICB1LnRpbWVfbG93LAorCSAgdS50aW1lX21pZCwKKwkgIHUudGltZV9oaV9hbmRfdmVyc2lvbiwKKwkgIHUuY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZCwKKwkgIHUuY2xvY2tfc2VxX2xvdyk7CisgIHRtcCArPSAyNDsKKyAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworICAgIHNwcmludGYodG1wLCIlMi4yeCIsIHUubm9kZVtpXSk7CisgICAgdG1wICs9IDI7CisgIH0KKyAgKnRtcCA9IDA7CisgIAorfQorCisvKiBnZXQtY3VycmVudF90aW1lIC0tIGdldCB0aW1lIGFzIDYwLWJpdCAxMDBucyB0aWNrcyBzaW5jZSBVVUlEIGVwb2NoLgorICAgQ29tcGVuc2F0ZSBmb3IgdGhlIGZhY3QgdGhhdCByZWFsIGNsb2NrIHJlc29sdXRpb24gaXMKKyAgIGxlc3MgdGhhbiAxMDBucy4gKi8KK3N0YXRpYyB2b2lkIGdldF9jdXJyZW50X3RpbWUodXVpZF90aW1lX3QgKnRpbWVzdGFtcCkKK3sKKyAgc3RhdGljIGludCBpbml0ZWQgPSAwOworICBzdGF0aWMgdXVpZF90aW1lX3QgdGltZV9sYXN0OworICBzdGF0aWMgdWludDE2X3QgdXVpZHNfdGhpc190aWNrOworICB1dWlkX3RpbWVfdCB0aW1lX25vdzsKKworICBpZiAoIWluaXRlZCkgeworICAgIGdldF9zeXN0ZW1fdGltZSgmdGltZV9ub3cpOworICAgIHV1aWRzX3RoaXNfdGljayA9IFVVSURTX1BFUl9USUNLOworICAgIGluaXRlZCA9IDE7CisgIH0KKworICBmb3IgKCA7IDsgKSB7CisgICAgZ2V0X3N5c3RlbV90aW1lKCZ0aW1lX25vdyk7CisKKyAgICAvKiBpZiBjbG9jayByZWFkaW5nIGNoYW5nZWQgc2luY2UgbGFzdCBVVUlEIGdlbmVyYXRlZCwgKi8KKyAgICBpZiAodGltZV9sYXN0ICE9IHRpbWVfbm93KSB7CisgICAgICAvKiByZXNldCBjb3VudCBvZiB1dWlkcyBnZW4nZCB3aXRoIHRoaXMgY2xvY2sgcmVhZGluZyAqLworICAgICAgdXVpZHNfdGhpc190aWNrID0gMDsKKyAgICAgIHRpbWVfbGFzdCA9IHRpbWVfbm93OworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICh1dWlkc190aGlzX3RpY2sgPCBVVUlEU19QRVJfVElDSykgeworICAgICAgdXVpZHNfdGhpc190aWNrKys7CisgICAgICBicmVhazsKKyAgICB9CisgICAgLyogZ29pbmcgdG9vIGZhc3QgZm9yIG91ciBjbG9jazsgc3BpbiAqLworICB9CisgIC8qIGFkZCB0aGUgY291bnQgb2YgdXVpZHMgdG8gbG93IG9yZGVyIGJpdHMgb2YgdGhlIGNsb2NrIHJlYWRpbmcgKi8KKyAgKnRpbWVzdGFtcCA9IHRpbWVfbm93ICsgdXVpZHNfdGhpc190aWNrOworfQorCisKKy8qIHN5c3RlbSBkZXBlbmRlbnQgY2FsbCB0byBnZXQgSUVFRSBub2RlIElELgorICAgVGhpcyBzYW1wbGUgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGEgcmFuZG9tIG5vZGUgSUQuICovCisvKiBuZXRwZXJmIG1vZCAtIGRvbid0IGJvdGhlciB0cnlpbmcgdG8gcmVhZCBvciB3cml0ZSB0aGUgbm9kZWlkICovCitzdGF0aWMgdm9pZCBnZXRfaWVlZV9ub2RlX2lkZW50aWZpZXIodXVpZF9ub2RlX3QgKm5vZGUpCit7CisgIHN0YXRpYyBpbnQgaW5pdGVkID0gMDsKKyAgc3RhdGljIHV1aWRfbm9kZV90IHNhdmVkX25vZGU7CisgIGNoYXIgc2VlZFsxNl07CisKKyAgaWYgKCFpbml0ZWQpIHsKKyAgICBnZXRfcmFuZG9tX2luZm8oc2VlZCk7CisgICAgc2VlZFswXSB8PSAweDAxOworICAgIG1lbWNweSgmc2F2ZWRfbm9kZSwgc2VlZCwgc2l6ZW9mIHNhdmVkX25vZGUpOworICB9CisgIGluaXRlZCA9IDE7CisKKyAgKm5vZGUgPSBzYXZlZF9ub2RlOworfQorCisKKy8qIGZvcm1hdF91dWlkX3YxIC0tIG1ha2UgYSBVVUlEIGZyb20gdGhlIHRpbWVzdGFtcCwgY2xvY2tzZXEsCisgICBhbmQgbm9kZSBJRCAqLworc3RhdGljIHZvaWQgZm9ybWF0X3V1aWRfdjEodXVpZF90KiB1dWlkLCB1aW50MTZfdCBjbG9ja19zZXEsCisgICAgICAgICAgICAgICAgICAgIHV1aWRfdGltZV90IHRpbWVzdGFtcCwgdXVpZF9ub2RlX3Qgbm9kZSkKK3sKKyAgLyogQ29uc3RydWN0IGEgdmVyc2lvbiAxIHV1aWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gd2UndmUgZ2F0aGVyZWQKKyAgICAgcGx1cyBhIGZldyBjb25zdGFudHMuICovCisgIHV1aWQtPnRpbWVfbG93ID0gKHVuc2lnbmVkIGxvbmcpKHRpbWVzdGFtcCAmIDB4RkZGRkZGRkYpOworICB1dWlkLT50aW1lX21pZCA9ICh1bnNpZ25lZCBzaG9ydCkoKHRpbWVzdGFtcCA+PiAzMikgJiAweEZGRkYpOworICB1dWlkLT50aW1lX2hpX2FuZF92ZXJzaW9uID0KKyAgICAodW5zaWduZWQgc2hvcnQpKCh0aW1lc3RhbXAgPj4gNDgpICYgMHgwRkZGKTsKKyAgdXVpZC0+dGltZV9oaV9hbmRfdmVyc2lvbiB8PSAoMSA8PCAxMik7CisgIHV1aWQtPmNsb2NrX3NlcV9sb3cgPSBjbG9ja19zZXEgJiAweEZGOworICB1dWlkLT5jbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkID0gKGNsb2NrX3NlcSAmIDB4M0YwMCkgPj4gODsKKyAgdXVpZC0+Y2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZCB8PSAweDgwOworICBtZW1jcHkoJnV1aWQtPm5vZGUsICZub2RlLCBzaXplb2YgdXVpZC0+bm9kZSk7Cit9CisKKy8qIHV1aWRfY3JlYXRlIC0tIGdlbmVyYXRvciBhIFVVSUQgKi8KK2ludCB1dWlkX2NyZWF0ZSh1dWlkX3QgKnV1aWQpCit7CisgIHV1aWRfdGltZV90IHRpbWVzdGFtcDsKKyAgdWludDE2X3QgY2xvY2tzZXE7CisgIHV1aWRfbm9kZV90IG5vZGU7CisgIAorICAvKiBnZXQgdGltZSwgbm9kZSBJRCwgc2F2ZWQgc3RhdGUgZnJvbSBub24tdm9sYXRpbGUgc3RvcmFnZSAqLworICBnZXRfY3VycmVudF90aW1lKCZ0aW1lc3RhbXApOworICBnZXRfaWVlZV9ub2RlX2lkZW50aWZpZXIoJm5vZGUpOworICAKKyAgLyogZm9yIHVzIGNsb2Nrc2VxIGlzIGFsd2F5cyB0byBiZSByYW5kb20gYXMgd2UgaGF2ZSBubyBzdGF0ZSAqLworICBjbG9ja3NlcSA9IHRydWVfcmFuZG9tKCk7CisgIAorICAvKiBzdHVmZiBmaWVsZHMgaW50byB0aGUgVVVJRCAqLworICBmb3JtYXRfdXVpZF92MSh1dWlkLCBjbG9ja3NlcSwgdGltZXN0YW1wLCBub2RlKTsKKyAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgZ2V0X3V1aWRfc3RyaW5nKGNoYXIgKnV1aWRfc3RyLCBzaXplX3Qgc2l6ZSkgeworICB1dWlkX3QgdTsKKworICB1dWlkX2NyZWF0ZSgmdSk7CisgIHNucHVpZCh1dWlkX3N0cixzaXplLHUpOworICAKKyAgcmV0dXJuOworfQorCisjaWZkZWYgTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICB1dWlkX3QgdTsKKyAgY2hhciAgdXVpZF9zdHJbMzhdOworI2lmIDAKKyAgdXVpZF9jcmVhdGUoJnUpOworICBwcmludGYoInV1aWRfY3JlYXRlKCk6ICIpOyBwdWlkKHUpOworICBzbnB1aWQodXVpZF9zdHIsc2l6ZW9mKHV1aWRfc3RyKSx1KTsKKyAgcHJpbnRmKCJcbmFzIGEgc3RyaW5nICVzXG4iLHV1aWRfc3RyKTsKKyNlbmRpZgorICBnZXRfdXVpZF9zdHJpbmcodXVpZF9zdHIsc2l6ZW9mKHV1aWRfc3RyKSk7CisgIHByaW50ZigidXVpZF9zdHIgaXMgJXNcbiIsdXVpZF9zdHIpOworICByZXR1cm4gMDsKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdS5oIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThkMWUxYwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qIFRoaXMgc2hvdWxkIGRlZmluZSBhbGwgdGhlIGNvbW1vbiByb3V0aW5lcyBldGMgZXhwb3J0ZWQgYnkgdGhlCisgICB2YXJpb3VzIG5ldGNwdV9tdW1ibGUuYyBmaWxlcyByYWogMjAwNS0wMS0yNiAqLworCitleHRlcm4gdm9pZCAgY3B1X3V0aWxfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkICBjcHVfdXRpbF90ZXJtaW5hdGUodm9pZCk7CitleHRlcm4gaW50ICAgZ2V0X2NwdV9tZXRob2QoKTsKKworI2lmZGVmIFdJTjMyCisvKiArKisgdGVtcCB1bnRpbCBJIGZpZ3VyZSBvdXQgd2hhdCBoZWFkZXIgdGhpcyBpcyBpbjsgSSBrbm93IGl0J3MKKyAgIHRoZXJlIHNvbWVwbGFjZS4uLiAgKi8KK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgICB1aW50NjRfdDsKKyNlbmRpZgorCitleHRlcm4gdm9pZCAgZ2V0X2NwdV9pZGxlKHVpbnQ2NF90ICpyZXMpOworZXh0ZXJuIGZsb2F0IGNhbGlicmF0ZV9pZGxlX3JhdGUoaW50IGl0ZXJhdGlvbnMsIGludCBpbnRlcnZhbCk7CitleHRlcm4gZmxvYXQgY2FsY19jcHVfdXRpbF9pbnRlcm5hbChmbG9hdCBlbGFwc2VkKTsKK2V4dGVybiB2b2lkICBjcHVfc3RhcnRfaW50ZXJuYWwodm9pZCk7CitleHRlcm4gdm9pZCAgY3B1X3N0b3BfaW50ZXJuYWwodm9pZCk7CisKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9rc3RhdC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X2tzdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5MDJjYQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9rc3RhdC5jCkBAIC0wLDAgKzEsNDEzIEBACitjaGFyICAgbmV0Y3B1X2tzdGF0X2lkW109IlwKK0AoIyluZXRjcHVfa3N0YXQuYyAgVmVyc2lvbiAyLjQuMCI7CisKKyNpZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HU19ICisjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8a3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzaW5mby5oPgorCisjaW5jbHVkZSAibmV0c2guaCIKKyNpbmNsdWRlICJuZXRsaWIuaCIKKworLyogdGhlIGxpYl9zdGFydF9jb3VudCBhbmQgbGliX2VuZF9jb3VudCBhcnJheXMgaG9sZCB0aGUgc3RhcnRpbmcKKyAgIGFuZCBlbmRpbmcgdmFsdWVzIG9mIHdoYXRldmVyIGlzIGNvdW50aW5nIHdoZW4gdGhlIHN5c3RlbSBpcworICAgaWRsZS4gVGhlIHJhdGUgYXQgd2hpY2ggdGhpcyBpbmNyZW1lbnRzIGR1cmluZyBhIHRlc3QgaXMgY29tcGFyZWQKKyAgIHdpdGggYSBwcmV2aW91cyBjYWxpYnJhcmlvbiB0byBhcnJpdmUgYXQgYSBDUFUgdXRpbGl6YXRpb24KKyAgIHBlcmNlbnRhZ2UuIHJhaiAyMDA1LTAxLTI2ICovCitzdGF0aWMgdWludDY0X3QgIGxpYl9zdGFydF9jb3VudFtNQVhDUFVTXTsKK3N0YXRpYyB1aW50NjRfdCAgbGliX2VuZF9jb3VudFtNQVhDUFVTXTsKKworc3RhdGljICBrc3RhdF90ICpjcHVfa3NbTUFYQ1BVU107IC8qIHRoZSBhZGRyZXNzZXMgdGhhdCBrc3RhdCB3aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBwdWxsIHRoZSBjcHUgaW5mbyBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtzdGF0IGludGVyZmFjZS4gIGF0IGxlYXN0IEkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGluayB0aGF0IGlzIHdoYXQgdGhpcyBpcyA6KSByYWoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LzIwMDAgKi8gIAorCisjZGVmaW5lIFVQREtDSUQobmssb2spIFwKK2lmIChuayA9PSAtMSkgeyBcCisgIHBlcnJvcigia3N0YXRfcmVhZCAiKTsgXAorICBleGl0KDEpOyBcCit9IFwKK2lmIChuayAhPSBvaylcCisgIGdvdG8ga2NpZF9jaGFuZ2VkOworCitzdGF0aWMga3N0YXRfY3RsX3QgKmtjID0gTlVMTDsKK3N0YXRpYyBraWRfdCBrY2lkID0gMDsKKworLyogZG8gdGhlIGluaXRpYWwgb3BlbiBvZiB0aGUga3N0YXQgaW50ZXJmYWNlLCBnZXQgdGhlIGNoYWluIGlkJ3MgYWxsCisgICBzdHJhaWdodGVuZWQtb3V0IGFuZCBzZXQtdXAgdGhlIGFkZHJlc3NlcyBmb3IgZ2V0X2tzdGF0X2lkbGUgdG8gZG8KKyAgIGl0cyB0aGluZy4gIGxpYmVyYWxseSBib3Jyb3dlZCBmcm9tIHRoZSBzb3VyY2VzIHRvIFRPUC4gcmFqIDgvMjAwMCAqLworCitzdGF0aWMgaW50CitvcGVuX2tzdGF0KCkKK3sKKyAga3N0YXRfdCAqa3M7CisgIGtpZF90IG5rY2lkOworICBpbnQgaTsKKyAgaW50IGNoYW5nZWQgPSAwOworICBzdGF0aWMgaW50IG5jcHUgPSAwOworCisgIGtzdGF0X25hbWVkX3QgKmtuOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm9wZW5fa3N0YXQ6IGVudGVyXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKgorICAgKiAwLiBrc3RhdF9vcGVuCisgICAqLworICAKKyAgaWYgKCFrYykKKyAgICB7CisgICAgICBrYyA9IGtzdGF0X29wZW4oKTsKKyAgICAgIGlmICgha2MpCisgICAgICAgIHsKKyAgICAgICAgICBwZXJyb3IoImtzdGF0X29wZW4gIik7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgY2hhbmdlZCA9IDE7CisgICAgICBrY2lkID0ga2MtPmtjX2NoYWluX2lkOworICAgIH0KKyNpZmRlZiByaWNrd2Fzc3R1cGlkCisgIGVsc2UgeworICAgIGZwcmludGYod2hlcmUsIm9wZW5fa3N0YXQgZG91YmxlIG9wZW4hXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyNlbmRpZgorCisgIC8qIGtlZXAgZG9pbmcgaXQgdW50aWwgbm8gbW9yZSBjaGFuZ2VzICovCisga2NpZF9jaGFuZ2VkOgorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInBhc3Npbmcga2NpZF9jaGFuZ2VkXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKgorICAgKiAxLiAga3N0YXRfY2hhaW5fdXBkYXRlCisgICAqLworICBua2NpZCA9IGtzdGF0X2NoYWluX3VwZGF0ZShrYyk7CisgIGlmIChua2NpZCkKKyAgICB7CisgICAgICAvKiBVUERLQ0lEIHdpbGwgYWJvcnQgaWYgbmtjaWQgaXMgLTEsIHNvIG5vIG5lZWQgdG8gY2hlY2sgKi8KKyAgICAgIGNoYW5nZWQgPSAxOworICAgICAga2NpZCA9IG5rY2lkOworICAgIH0KKyAgVVBES0NJRChua2NpZCwwKTsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJrc3RhdF9sb29rdXAgZm9yIHVuaXgvc3lzdGVtX21pc2NcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIGtzID0ga3N0YXRfbG9va3VwKGtjLCAidW5peCIsIDAsICJzeXN0ZW1fbWlzYyIpOworICBpZiAoa3N0YXRfcmVhZChrYywga3MsIDApID09IC0xKSB7CisgICAgcGVycm9yKCJrc3RhdF9yZWFkIik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisgIGlmIChjaGFuZ2VkKSB7CisgICAgCisgICAgLyoKKyAgICAgKiAyLiBnZXQgZGF0YSBhZGRyZXNzZXMKKyAgICAgKi8KKyAgICAKKyAgICBuY3B1ID0gMDsKKyAgICAKKyAgICBrbiA9IGtzdGF0X2RhdGFfbG9va3VwKGtzLCAibmNwdXMiKTsKKyAgICBpZiAoa24gJiYga24tPnZhbHVlLnVpMzIgPiBsaWJfbnVtX2xvY19jcHVzKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwibnVtYmVyIG9mIENQVSdzIG1pc21hdGNoISIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgZm9yIChrcyA9IGtjLT5rY19jaGFpbjsga3M7CisgICAgICAgICBrcyA9IGtzLT5rc19uZXh0KQorICAgICAgeworICAgICAgICBpZiAoc3RybmNtcChrcy0+a3NfbmFtZSwgImNwdV9zdGF0IiwgOCkgPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBua2NpZCA9IGtzdGF0X3JlYWQoa2MsIGtzLCBOVUxMKTsKKyAgICAgICAgICAgIC8qIGlmIGtjaWQgY2hhbmdlZCwgcG9pbnRlciBtaWdodCBiZSBpbnZhbGlkLiB3ZSdsbCBkZWFsCisgICAgICAgICAgICAgICB3dGloIGNoYW5nZXMgYXQgdGhpcyBzdGFnZSwgYnV0IHdpbGwgbm90IGFjY2VwdCB0aGVtCisgICAgICAgICAgICAgICB3aGVuIHdlIGFyZSBhY3R1YWxseSBpbiB0aGUgbWlkZGxlIG9mIHJlYWRpbmcKKyAgICAgICAgICAgICAgIHZhbHVlcy4gaG9wZWZ1bGx5IHRoaXMgaXMgbm90IGdvaW5nIHRvIGJlIGEgYmlnCisgICAgICAgICAgICAgICBpc3N1ZS4gcmFqIDgvMjAwMCAqLworICAgICAgICAgICAgVVBES0NJRChua2NpZCwga2NpZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgICBmcHJpbnRmKHdoZXJlLCJjcHVfa3NbJWRdIGdldHRpbmcgJXBcbiIsbmNwdSxrcyk7CisgICAgICAgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNwdV9rc1tuY3B1XSA9IGtzOworICAgICAgICAgICAgbmNwdSsrOworICAgICAgICAgICAgaWYgKG5jcHUgPiBsaWJfbnVtX2xvY19jcHVzKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogd2l0aCB0aGUgY2hlY2sgYWJvdmUsIHdvdWxkIHdlIGV2ZXIgaGl0IHRoaXM/ICovCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIAorICAgICAgICAgICAgICAgICAgICAgICAgImtzdGF0IGZpbmRzIHRvbyBtYW55IGNwdXMgJWQ6IHNob3VsZCBiZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5jcHUsbGliX251bV9sb2NfY3B1cyk7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAvKiBub3RlIHRoYXQgbmNwdSBjb3VsZCBiZSBsZXNzIHRoYW4gbmNwdXMsIGJ1dCB0aGF0J3Mgb2theSAqLworICAgIGNoYW5nZWQgPSAwOworICB9Cit9CisKKy8qIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGlkbGUgdGljayBjb3VudGVyIGZvciB0aGUgc3BlY2lmaWVkIENQVSAqLworc3RhdGljIGxvbmcKK2dldF9rc3RhdF9pZGxlKGNwdSkKKyAgICAgaW50IGNwdTsKK3sKKyAgY3B1X3N0YXRfdCBjcHVfc3RhdDsKKyAga2lkX3QgbmtjaWQ7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICJnZXRfa3N0YXRfaWRsZSByZWFkaW5nIHdpdGgga2MgJXggYW5kIGtzICVwXG4iLAorICAgICAgICAgICAga2MsCisgICAgICAgICAgICBjcHVfa3NbY3B1XSk7CisgIH0KKworICBua2NpZCA9IGtzdGF0X3JlYWQoa2MsIGNwdV9rc1tjcHVdLCAmY3B1X3N0YXQpOworICAvKiBpZiBrY2lkIGNoYW5nZWQsIHBvaW50ZXIgbWlnaHQgYmUgaW52YWxpZCwgZmFpbCB0aGUgdGVzdCAqLworICBVUERLQ0lEKG5rY2lkLCBrY2lkKTsKKworICByZXR1cm4oY3B1X3N0YXQuY3B1X3N5c2luZm8uY3B1W0NQVV9JRExFXSk7CisKKyBrY2lkX2NoYW5nZWQ6CisgIHBlcnJvcigia2NpZCBjaGFuZ2VkIG1pZHN0cmVhbSBhbmQgSSBjYW5ub3QgZGVhbCB3aXRoIHRoYXQhIik7CisgIGV4aXQoMSk7Cit9CisKK3ZvaWQKK2NwdV91dGlsX2luaXQodm9pZCkgCit7CisgIG9wZW5fa3N0YXQoKTsKKyAgcmV0dXJuOworfQorCit2b2lkCitjcHVfdXRpbF90ZXJtaW5hdGUodm9pZCkKK3sKKyAgcmV0dXJuOworfQorCitpbnQKK2dldF9jcHVfbWV0aG9kKHZvaWQpCit7CisgIHJldHVybiBLU1RBVDsKK30KKwordm9pZAorZ2V0X2NwdV9pZGxlKHVpbnQ2NF90ICpyZXMpCit7CisKKyAgaW50IGk7CisKKyAgLyogdGhpcyBvcGVuIG1heSBiZSByZWR1bmRhbnQgKi8KKyAgb3Blbl9rc3RhdCgpOworCisgIGZvciAoaSA9IDA7IGkgPCBsaWJfbnVtX2xvY19jcHVzOyBpKyspeworICAgIHJlc1tpXSA9IGdldF9rc3RhdF9pZGxlKGkpOworICB9CisgIHJldHVybjsKK30KKworZmxvYXQKK2NhbGlicmF0ZV9pZGxlX3JhdGUoaW50IGl0ZXJhdGlvbnMsIGludCBpbnRlcnZhbCkKK3sKKyAKKyAgbG9uZyAgCisgICAgZmlyc3RjbnRbTUFYQ1BVU10sCisgICAgc2Vjb25kY250W01BWENQVVNdOworCisgIGZsb2F0IAorICAgIGVsYXBzZWQsCisgICAgdGVtcF9yYXRlLAorICAgIHJhdGVbTUFYVElNRVNdLAorICAgIGxvY2FsX21heHJhdGU7CisKKyAgbG9uZyAgCisgICAgc2VjLAorICAgIHVzZWM7CisKKyAgaW50ICAgCisgICAgaSwKKyAgICBqOworICAKKyAgc3RydWN0ICB0aW1ldmFsIHRpbWUxLCB0aW1lMiA7CisgIHN0cnVjdCAgdGltZXpvbmUgdHo7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJjYWxsaW5nIG9wZW5fa3N0YXQgZnJvbSBjYWxpYnJhdGVfa3N0YXRcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBvcGVuX2tzdGF0KCk7CisKKyAgaWYgKGl0ZXJhdGlvbnMgPiBNQVhUSU1FUykgeworICAgIGl0ZXJhdGlvbnMgPSBNQVhUSU1FUzsKKyAgfQorCisgIGxvY2FsX21heHJhdGUgPSAoZmxvYXQpLTEuMDsKKyAgCisgIGZvcihpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgIHJhdGVbaV0gPSAoZmxvYXQpMC4wOworICAgIGZvciAoaiA9IDA7IGogPCBsaWJfbnVtX2xvY19jcHVzOyBqKyspIHsKKyAgICAgIGZpcnN0Y250W2pdID0gZ2V0X2tzdGF0X2lkbGUoaik7CisgICAgfQorICAgIGdldHRpbWVvZmRheSAoJnRpbWUxLCAmdHopOworICAgIHNsZWVwKGludGVydmFsKTsKKyAgICBnZXR0aW1lb2ZkYXkgKCZ0aW1lMiwgJnR6KTsKKworICAgIGlmICh0aW1lMi50dl91c2VjIDwgdGltZTEudHZfdXNlYykKKyAgICAgIHsKKyAgICAgICAgdGltZTIudHZfdXNlYyArPSAxMDAwMDAwOworICAgICAgICB0aW1lMi50dl9zZWMgLT0xOworICAgICAgfQorICAgIHNlYyA9IHRpbWUyLnR2X3NlYyAtIHRpbWUxLnR2X3NlYzsKKyAgICB1c2VjID0gdGltZTIudHZfdXNlYyAtIHRpbWUxLnR2X3VzZWM7CisgICAgZWxhcHNlZCA9IChmbG9hdClzZWMgKyAoKGZsb2F0KXVzZWMvKGZsb2F0KTEwMDAwMDAuMCk7CisgICAgCisgICAgaWYoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsICJDYWxpYnJhdGlvbiBmb3Iga3N0YXQgY291bnRlciBydW46ICVkXG4iLGkpOworICAgICAgZnByaW50Zih3aGVyZSwiXHRzZWMgPSAlbGQgdXNlYyA9ICVsZFxuIixzZWMsdXNlYyk7CisgICAgICBmcHJpbnRmKHdoZXJlLCJcdGVsYXBzZWQgdGltZSA9ICVnXG4iLGVsYXBzZWQpOworICAgIH0KKworICAgIGZvciAoaiA9IDA7IGogPCBsaWJfbnVtX2xvY19jcHVzOyBqKyspIHsKKyAgICAgIHNlY29uZGNudFtqXSA9IGdldF9rc3RhdF9pZGxlKGopOworICAgICAgaWYoZGVidWcpIHsKKyAgICAgICAgLyogSSBrbm93IHRoYXQgdGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgY29tcGlsZXJzIGtub3cgYWJvdXQgKi8KKyAgICAgICAgLyogbG9uZyBsb25nLCBidXQgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIGRvIG5vdC4uLiByYWogNC85NSAqLworICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICJcdGZpcnN0Y250WyVkXSA9IDB4JTguOGx4JTguOGx4IHNlY29uZGNudFslZF0gPSAweCU4LjhseCU4LjhseFxuIiwKKyAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgIGZpcnN0Y250W2pdLAorICAgICAgICAgICAgICAgIGZpcnN0Y250W2pdLAorICAgICAgICAgICAgICAgIGosCisgICAgICAgICAgICAgICAgc2Vjb25kY250W2pdLAorICAgICAgICAgICAgICAgIHNlY29uZGNudFtqXSk7CisgICAgICB9CisgICAgICAvKiB3ZSBhc3N1bWUgdGhhdCBpdCB3b3VsZCB3cmFwIG5vIG1vcmUgdGhhbiBvbmNlLiB3ZSBhbHNvICovCisgICAgICAvKiBhc3N1bWUgdGhhdCB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHdpbGwgImZpdCIgcmFqIDQvOTUgKi8KKyAgICAgIHRlbXBfcmF0ZSA9IChzZWNvbmRjbnRbal0gPj0gZmlyc3RjbnRbal0pID8KKyAgICAgICAgKGZsb2F0KShzZWNvbmRjbnRbal0gLSBmaXJzdGNudFtqXSkvZWxhcHNlZCA6IAorICAgICAgICAgIChmbG9hdCkoc2Vjb25kY250W2pdLWZpcnN0Y250W2pdK01BWExPTkcpL2VsYXBzZWQ7CisgICAgICBpZiAodGVtcF9yYXRlID4gcmF0ZVtpXSkgcmF0ZVtpXSA9IHRlbXBfcmF0ZTsKKyAgICAgIGlmKGRlYnVnKSB7CisgICAgICAgIGZwcmludGYod2hlcmUsIlx0cmF0ZVslZF0gPSAlZ1xuIixpLHJhdGVbaV0pOworICAgICAgICBmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgaWYgKGxvY2FsX21heHJhdGUgPCByYXRlW2ldKSBsb2NhbF9tYXhyYXRlID0gcmF0ZVtpXTsKKyAgICB9CisgIH0KKyAgaWYoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJcdGxvY2FsIG1heHJhdGUgPSAlZyBwZXIgc2VjLiBcbiIsbG9jYWxfbWF4cmF0ZSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICByZXR1cm4gbG9jYWxfbWF4cmF0ZTsKK30KKworZmxvYXQKK2NhbGNfY3B1X3V0aWxfaW50ZXJuYWwoZmxvYXQgZWxhcHNlZF90aW1lKQoreworICBpbnQgaTsKKyAgZmxvYXQgY29ycmVjdGlvbl9mYWN0b3I7CisgIGZsb2F0IGFjdHVhbF9yYXRlOworCisgIGxpYl9sb2NhbF9jcHVfdXRpbCA9IChmbG9hdCkwLjA7CisgIC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGxpYnJhcnkgbWVhc3VyZWQgYSB0aW1lIG90aGVyIHRoYW4gKi8KKyAgLyogdGhlIG9uZSB0aGF0IHRoZSB1c2VyIHdhbnQgZm9yIHRoZSBjcHUgdXRpbGl6YXRpb24gKi8KKyAgLyogY2FsY3VsYXRpb25zIC0gZm9yIGV4YW1wbGUsIHRlc3RzIHRoYXQgd2VyZSBlbmRlZCBieSAqLworICAvKiB3YXRjaGRvZyB0aW1lcnMgc3VjaCBhcyB0aGUgdWRwIHN0cmVhbSB0ZXN0LiBXZSBsZXQgdGhlc2UgKi8KKyAgLyogdGVzdHMgdGVsbCB1cCB3aGF0IHRoZSBlbGFwc2VkIHRpbWUgc2hvdWxkIGJlLiAqLworICAKKyAgaWYgKGVsYXBzZWRfdGltZSAhPSAwLjApIHsKKyAgICBjb3JyZWN0aW9uX2ZhY3RvciA9IChmbG9hdCkgMS4wICsgCisgICAgICAoKGxpYl9lbGFwc2VkIC0gZWxhcHNlZF90aW1lKSAvIGVsYXBzZWRfdGltZSk7CisgIH0KKyAgZWxzZSB7CisgICAgY29ycmVjdGlvbl9mYWN0b3IgPSAoZmxvYXQpIDEuMDsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBsaWJfbnVtX2xvY19jcHVzOyBpKyspIHsKKworICAgIC8qIGl0IHdvdWxkIGFwcGVhciB0aGF0IG9uIHNvbWUgc3lzdGVtcywgaW4gbG9vcGJhY2ssIG5pY2UgaXMKKyAgICAgKnZlcnkqIGVmZmVjdGl2ZSwgY2F1c2luZyB0aGUgbG9vcGVyIHByb2Nlc3MgdG8gc3RvcCBkZWFkIGluIGl0cworICAgICB0cmFja3MuIGlmIHRoaXMgaGFwcGVucywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY2FsY3VsYXRpb24KKyAgICAgZG9lcyBub3QgZ28gc291dGguIHJhaiA2Lzk1IGFuZCBpZiB3ZSBydW4gY29tcGxldGVseSBvdXQgb2YgaWRsZSwKKyAgICAgdGhlIHNhbWUgdGhpbmcgY291bGQgaW4gdGhlb3J5IGhhcHBlbiB0byB0aGUgVVNFX0tTVEFUIHBhdGguIHJhagorICAgICA4LzIwMDAgKi8gCisgICAgCisgICAgaWYgKGxpYl9lbmRfY291bnRbaV0gPT0gbGliX3N0YXJ0X2NvdW50W2ldKSB7CisgICAgICBsaWJfZW5kX2NvdW50W2ldKys7CisgICAgfQorICAgIAorICAgIGFjdHVhbF9yYXRlID0gKGxpYl9lbmRfY291bnRbaV0gPiBsaWJfc3RhcnRfY291bnRbaV0pID8KKyAgICAgIChmbG9hdCkobGliX2VuZF9jb3VudFtpXSAtIGxpYl9zdGFydF9jb3VudFtpXSkvbGliX2VsYXBzZWQgOgorICAgICAgKGZsb2F0KShsaWJfZW5kX2NvdW50W2ldIC0gbGliX3N0YXJ0X2NvdW50W2ldICsKKwkgICAgICBNQVhMT05HKS8gbGliX2VsYXBzZWQ7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAiY2FsY19jcHVfdXRpbDogYWN0dWFsX3JhdGUgb24gcHJvY2Vzc29yICVkIGlzICVmIHN0YXJ0ICVseCBlbmQgJWx4XG4iLAorICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICBhY3R1YWxfcmF0ZSwKKyAgICAgICAgICAgICAgbGliX3N0YXJ0X2NvdW50W2ldLAorICAgICAgICAgICAgICBsaWJfZW5kX2NvdW50W2ldKTsKKyAgICB9CisgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA9IChsaWJfbG9jYWxfbWF4cmF0ZSAtIGFjdHVhbF9yYXRlKSAvCisgICAgICBsaWJfbG9jYWxfbWF4cmF0ZSAqIDEwMDsKKyAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldICo9IGNvcnJlY3Rpb25fZmFjdG9yOworICAgIGxpYl9sb2NhbF9jcHVfdXRpbCArPSBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldOworICB9CisgIC8qIHdlIHdhbnQgdGhlIGF2ZXJhZ2UgYWNyb3NzIGFsbCBuIHByb2Nlc3NvcnMgKi8KKyAgbGliX2xvY2FsX2NwdV91dGlsIC89IChmbG9hdClsaWJfbnVtX2xvY19jcHVzOworICAKKyAgcmV0dXJuIGxpYl9sb2NhbF9jcHVfdXRpbDsKK30KKwordm9pZAorY3B1X3N0YXJ0X2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHVfaWRsZShsaWJfc3RhcnRfY291bnQpOworICByZXR1cm47Cit9CisKK3ZvaWQKK2NwdV9zdG9wX2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHVfaWRsZShsaWJfZW5kX2NvdW50KTsKK30KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9rc3RhdDEwLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfa3N0YXQxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjg0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfa3N0YXQxMC5jCkBAIC0wLDAgKzEsNjAwIEBACitjaGFyICAgbmV0Y3B1X2tzdGF0MTBfaWRbXT0iXAorQCgjKW5ldGNwdV9rc3RhdDEwLmMgKGMpIENvcHlyaWdodCAyMDA1LTIwMDcsIEhld2xldHQtUGFja2FyZCBDb21wYW55IFZlcnNpb24gMi40LjMiOworCisjaWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERJTlRfSAorIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBTVERDX0hFQURFUlMKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxrc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zeXNpbmZvLmg+CisKKyNpbmNsdWRlICJuZXRzaC5oIgorI2luY2x1ZGUgIm5ldGxpYi5oIgorCitzdGF0aWMga3N0YXRfY3RsX3QgKmtjID0gTlVMTDsKK3N0YXRpYyBraWRfdCBrY2lkID0gMDsKKwordHlwZWRlZiBzdHJ1Y3QgY3B1X3RpbWVfY291bnRlcnMgeworICB1aW50NjRfdCBpZGxlOworICB1aW50NjRfdCB1c2VyOworICB1aW50NjRfdCBrZXJuZWw7CisgIHVpbnQ2NF90IGludGVycnVwdDsKK30gY3B1X3RpbWVfY291bnRlcnNfdDsKKworc3RhdGljIGNwdV90aW1lX2NvdW50ZXJzX3Qgc3RhcnRpbmdfY3B1X2NvdW50ZXJzW01BWENQVVNdOworc3RhdGljIGNwdV90aW1lX2NvdW50ZXJzX3QgZW5kaW5nX2NwdV9jb3VudGVyc1tNQVhDUFVTXTsKK3N0YXRpYyBjcHVfdGltZV9jb3VudGVyc190IGRlbHRhX2NwdV9jb3VudGVyc1tNQVhDUFVTXTsKK3N0YXRpYyBjcHVfdGltZV9jb3VudGVyc190IGNvcnJlY3RlZF9jcHVfY291bnRlcnNbTUFYQ1BVU107CisKK3N0YXRpYyB2b2lkCitwcmludF9jcHVfdGltZV9jb3VudGVycyhjaGFyICpuYW1lLCBpbnQgaW5zdGFuY2UsIGNwdV90aW1lX2NvdW50ZXJzX3QgKmNvdW50ZXJzKSAKK3sKKyAgZnByaW50Zih3aGVyZSwiJXNbJWRdOlxuIixuYW1lLGluc3RhbmNlKTsKKyAgZnByaW50Zih3aGVyZSwKKwkgICJcdCBpZGxlICVsbHVcbiIsY291bnRlcnNbaW5zdGFuY2VdLmlkbGUpOworICBmcHJpbnRmKHdoZXJlLAorCSAgIlx0IHVzZXIgJWxsdVxuIixjb3VudGVyc1tpbnN0YW5jZV0udXNlcik7CisgIGZwcmludGYod2hlcmUsCisJICAiXHQga2VybmVsICVsbHVcbiIsY291bnRlcnNbaW5zdGFuY2VdLmtlcm5lbCk7CisgIGZwcmludGYod2hlcmUsCisJICAiXHQgaW50ZXJydXB0ICVsbHVcbiIsY291bnRlcnNbaW5zdGFuY2VdLmludGVycnVwdCk7Cit9CisKK3ZvaWQKK2NwdV91dGlsX2luaXQodm9pZCkgCit7CisgIGtzdGF0X3QgICAqa3NwOworICBpbnQgaTsKKyAga2MgPSBrc3RhdF9vcGVuKCk7CisKKyAgaWYgKGtjID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiY3B1X3V0aWxfaW5pdDoga3N0YXRfb3BlbjogZXJybm8gJWQgJXNcbiIsCisJICAgIGVycm5vLAorCSAgICBzdHJlcnJvcihlcnJubykpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgtMSk7CisgIH0KKworICAvKiBsZXRzIGZsZXNoLW91dCBhIENQVSBpbnN0YW5jZSBudW1iZXIgbWFwIHNpbmNlIGl0IHNlZW1zIHRoYXQgc29tZQorICAgICBzeXN0ZW1zLCBub3QgZXZlbiB0aG9zZSB3aGljaCBhcmUgcGFydGl0aW9uZWQsIGNhbiBoYXZlCisgICAgIG5vbi1jb250aWd1b3VzIENQVSBudW1iZXJzLiAgZGlzY292ZXJlZCAidGhlIGhhcmQgd2F5IiBvbiBhCisgICAgIFQ1MjIwLiByYWogMjAwODA4MDQgKi8KKyAgaSA9IDA7CisgIGZvciAoa3NwID0ga2MtPmtjX2NoYWluLCBpID0gMDsKKyAgICAgICAoa3NwICE9IE5VTEwpICYmIChpIDwgTUFYQ1BVUyk7CisgICAgICAga3NwID0ga3NwLT5rc19uZXh0KSB7ICAKKyAgICBpZiAoKHN0cmNtcChrc3AtPmtzX21vZHVsZSwiY3B1IikgPT0gMCkgJiYKKwkoc3RyY21wKGtzcC0+a3NfbmFtZSwic3lzIikgPT0gMCkpIHsKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsIk1hcHBpbmcgQ1BVIGluc3RhbmNlICVkIHRvIGVudHJ5ICVkXG4iLAorCQlrc3AtPmtzX2luc3RhbmNlLGkpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBsaWJfY3B1X21hcFtpKytdID0ga3NwLT5rc19pbnN0YW5jZTsKKyAgICB9CisgIH0gIAorCisgIGlmIChNQVhDUFVTID09IGkpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgIlNvcnJ5LCB0aGlzIHN5c3RlbSBoYXMgbW9yZSBDUFVzICglZCkgdGhhbiBuZXRwZXJmIGNhbiBoYW5kbGUgKCVkKS5cbiIsCisgICAgICAgICAgICBpLAorICAgICAgICAgICAgTUFYQ1BVUyk7CisgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICJQbGVhc2UgYWx0ZXIgTUFYQ1BVUyBpbiBuZXRsaWIuaCBhbmQgcmVjb21waWxlLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgcmV0dXJuOworfQorCit2b2lkCitjcHVfdXRpbF90ZXJtaW5hdGUodm9pZCkKK3sKKyAga3N0YXRfY2xvc2Uoa2MpOworICByZXR1cm47Cit9CisKK2ludAorZ2V0X2NwdV9tZXRob2Qodm9pZCkKK3sKKyAgcmV0dXJuIEtTVEFUXzEwOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfdW5leHBlY3RlZF9zdGF0aXN0aWNfd2FybmluZyhjaGFyICp3aG8sIGNoYXIgKndoYXQsIGNoYXIgKndoeSkKK3sKKyAgaWYgKHdoeSkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJXQVJOSU5HISBXQVJOSU5HISBXQVJOSU5HISBXQVJOSU5HIVxuIik7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiVzIGZvdW5kIGFuIHVuZXhwZWN0ZWQgJXMgc3RhdGlzdGljICUuMTZzXG4iLAorCSAgICB3aG8sCisJICAgIHdoeSwKKwkgICAgd2hhdCk7CisgIH0KKyAgZWxzZSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiVzIGlzIGlnbm9yaW5nIHN0YXRpc3RpYyAlLjE2c1xuIiwKKwkgICAgd2hvLAorCSAgICB3aGF0KTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZ2V0X2NwdV9jb3VudGVycyhpbnQgY3B1X251bSwgY3B1X3RpbWVfY291bnRlcnNfdCAqY291bnRlcnMpCit7CisKKyAga3N0YXRfdCAqa3NwOworICBpbnQgZm91bmQ9MDsKKyAga2lkX3QgbmtjaWQ7CisgIGtzdGF0X25hbWVkX3QgKmtucDsKKyAgaW50IGk7CisKKyAga3NwID0ga3N0YXRfbG9va3VwKGtjLCAiY3B1IiwgbGliX2NwdV9tYXBbY3B1X251bV0sICJzeXMiKTsKKyAgaWYgKChrc3ApICYmIChrc3AtPmtzX3R5cGUgPT0gS1NUQVRfVFlQRV9OQU1FRCkpIHsKKyAgICAvKiBoYXBwaW5lc3MgYW5kIGpveSwga2VlcCBnb2luZyAqLworICAgIG5rY2lkID0ga3N0YXRfcmVhZChrYywga3NwLCBOVUxMKTsKKyAgICBpZiAobmtjaWQgIT0gLTEpIHsKKyAgICAgIC8qIGhhcHBpbmVzcyBhbmQgam95LCBrZWVwIGdvaW5nLiB3ZSBjb3VsZCBjb25zaWRlciBhZGRpbmcgYQorCSAiZm91bmQgPCAzIiB0byB0aGUgZW5kIGNvbmRpdGlvbnMsIGJ1dCB0aGVuIHdlIHdvdWxkbid0CisJIHNlYXJjaCB0byB0aGUgZW5kIGFuZCBmaW5kIHRoYXQgU3VuIGFkZGVkIHNvbWUgbnNlYy4gd2UKKwkgcHJvYmFibHkgd2FudCB0byBzZWUgaWYgdGhleSBhZGQgYW4gbnNlYy4gcmFqIDIwMDUtMDEtMjggKi8KKyAgICAgIGZvciAoaSA9IGtzcC0+a3NfbmRhdGEsIGtucCA9IGtzcC0+a3NfZGF0YTsKKwkgICBpID4gMDsKKwkgICBrbnArKyxpLS0pIHsKKwkvKiB3ZSB3b3VsZCBiZSBob3NlZCBpZiB0aGUgc2FtZSBuYW1lIGNvdWxkIGFwcGVhciB0d2ljZSAqLworCWlmICghc3RyY21wKCJjcHVfbnNlY19pZGxlIixrbnAtPm5hbWUpKSB7CisJICBmb3VuZCsrOworCSAgY291bnRlcnNbY3B1X251bV0uaWRsZSA9IGtucC0+dmFsdWUudWk2NDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcCgiY3B1X25zZWNfdXNlciIsa25wLT5uYW1lKSkgeworCSAgZm91bmQrKzsKKwkgIGNvdW50ZXJzW2NwdV9udW1dLnVzZXIgPSBrbnAtPnZhbHVlLnVpNjQ7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoImNwdV9uc2VjX2tlcm5lbCIsa25wLT5uYW1lKSkgeworCSAgZm91bmQrKzsKKwkgIGNvdW50ZXJzW2NwdV9udW1dLmtlcm5lbCA9IGtucC0+dmFsdWUudWk2NDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcCgiY3B1X25zZWNfaW50ciIsa25wLT5uYW1lKSkgeworCSAgaWYgKGRlYnVnID49IDIpIHsKKwkgICAgZnByaW50Zih3aGVyZSwKKwkJICAgICJGb3VuZCBhIGNwdV9uc2VjX2ludHIgYnV0IGl0IGRvZXNuJ3QgZG8gd2hhdCB3ZSB3YW50XG4iKTsKKwkgICAgZmZsdXNoKHdoZXJlKTsKKwkgIH0KKwl9CisJZWxzZSBpZiAoc3Ryc3RyKGtucC0+bmFtZSwibnNlYyIpKSB7CisJICAvKiBmaW5kaW5nIGFub3RoZXIgbnNlYyBoZXJlIG1lYW5zIFN1biBoYXZlIGNoYW5nZWQKKwkgICAgIHNvbWV0aGluZyBhbmQgd2UgbmVlZCB0byB3YXJuIHRoZSB1c2VyLiByYWogMjAwNS0wMS0yOCAqLyAKKwkgIHByaW50X3VuZXhwZWN0ZWRfc3RhdGlzdGljX3dhcm5pbmcoImdldF9jcHVfY291bnRlcnMiLAorCQkJCQkgICAgIGtucC0+bmFtZSwKKwkJCQkJICAgICAibnNlYyIpOworCX0KKwllbHNlIGlmIChkZWJ1ZyA+PTIpIHsKKworCSAgLyogbWlnaHQgd2FudCB0byB0ZWxsIHBlb3BsZSBhYm91dCB3aGF0IHdlIGFyZSBza2lwcGluZy4KKwkgICAgIGhvd2V2ZXIsIG9ubHkgZGlzcGxheSBvdGhlciBuYW1lcyBkZWJ1ZyA+PTIuIHJhagorCSAgICAgMjAwNS0wMS0yOAorCSAgKi8KKworCSAgcHJpbnRfdW5leHBlY3RlZF9zdGF0aXN0aWNfd2FybmluZygiZ2V0X2NwdV9jb3VudGVycyIsCisJCQkJCSAgICAga25wLT5uYW1lLAorCQkJCQkgICAgIE5VTEwpOworCX0KKyAgICAgIH0KKyAgICAgIGlmICgzID09IGZvdW5kKSB7CisJLyogaGFwcGluZXNzIGFuZCBqb3kgKi8KKwlyZXR1cm47CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQkiZ2V0X2NwdV9jb3VudGVycyBjb3VsZCBub3QgZmluZCBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwZWN0ZWQgY291bnRlcnMhXG4iKTsKKwlmZmx1c2god2hlcmUpOworCWV4aXQoLTEpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHRoZSBrc3RhdF9yZWFkIHJldHVybmVkIGFuIGVycm9yIG9yIHRoZSBjaGFpbiBjaGFuZ2VkICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJnZXRfY3B1X2NvdW50ZXJzOiBrc3RhdF9yZWFkIGZhaWxlZCBvciBjaGFpbiBpZCBjaGFuZ2VkICVkICVzXG4iLAorCSAgICAgIGVycm5vLAorCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgtMSk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIHRoZSBsb29rdXAgZmFpbGVkIG9yIGZvdW5kIHRoZSB3cm9uZyB0eXBlICovCisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgImdldF9jcHVfY291bnRlcnM6IGtzdGF0X2xvb2t1cCBmYWlsZWQgZm9yIG1vZHVsZSAnY3B1JyBudW1iZXIgJWQgaW5zdGFuY2UgJWQgbmFtZSAnc3lzJyBhbmQgS1NUQVRfVFlQRV9OQU1FRDogZXJybm8gJWQgJXNcbiIsCisJICAgIGNwdV9udW0sCisJICAgIGxpYl9jcHVfbWFwW2NwdV9udW1dLAorCSAgICBlcnJubywKKwkgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoLTEpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfaW50ZXJydXB0X2NvdW50ZXJzKGludCBjcHVfbnVtLCBjcHVfdGltZV9jb3VudGVyc190ICpjb3VudGVycykKK3sKKyAga3N0YXRfdCAqa3NwOworICBpbnQgZm91bmQ9MDsKKyAga2lkX3QgbmtjaWQ7CisgIGtzdGF0X25hbWVkX3QgKmtucDsKKyAgaW50IGk7CisKKyAga3NwID0ga3N0YXRfbG9va3VwKGtjLCAiY3B1IiwgbGliX2NwdV9tYXBbY3B1X251bV0sICJpbnRyc3RhdCIpOworCisgIGNvdW50ZXJzW2NwdV9udW1dLmludGVycnVwdCA9IDA7CisgIGlmICgoa3NwKSAmJiAoa3NwLT5rc190eXBlID09IEtTVEFUX1RZUEVfTkFNRUQpKSB7CisgICAgLyogaGFwcGluZXNzIGFuZCBqb3ksIGtlZXAgZ29pbmcgKi8KKyAgICBua2NpZCA9IGtzdGF0X3JlYWQoa2MsIGtzcCwgTlVMTCk7CisgICAgaWYgKG5rY2lkICE9IC0xKSB7CisgICAgICAvKiBoYXBwaW5lc3MgYW5kIGpveSwga2VlcCBnb2luZy4gd2UgY291bGQgY29uc2lkZXIgYWRkaW5nIGEKKwkgImZvdW5kIDwgMTUiIHRvIHRoZSBlbmQgY29uZGl0aW9ucywgYnV0IHRoZW4gd2Ugd291bGRuJ3QKKwkgc2VhcmNoIHRvIHRoZSBlbmQgYW5kIGZpbmQgdGhhdCBTdW4gYWRkZWQgc29tZSAidGltZS4iIHdlCisJIHByb2JhYmx5IHdhbnQgdG8gc2VlIGlmIHRoZXkgYWRkIGEgIm5zZWMuIiByYWogMjAwNS0wMS0yOCAqLworICAgICAgZm9yIChpID0ga3NwLT5rc19uZGF0YSwga25wID0ga3NwLT5rc19kYXRhOworCSAgIGkgPiAwOworCSAgIGtucCsrLGktLSkgeworCWlmIChzdHJzdHIoa25wLT5uYW1lLCJ0aW1lIikpIHsKKwkgIGZvdW5kKys7CisJICBjb3VudGVyc1tjcHVfbnVtXS5pbnRlcnJ1cHQgKz0ga25wLT52YWx1ZS51aTY0OworCX0KKwllbHNlIGlmIChkZWJ1ZyA+PTIpIHsKKworCSAgLyogbWlnaHQgd2FudCB0byB0ZWxsIHBlb3BsZSBhYm91dCB3aGF0IHdlIGFyZSBza2lwcGluZy4KKwkgICAgIGhvd2V2ZXIsIG9ubHkgZGlzcGxheSBvdGhlciBuYW1lcyBkZWJ1ZyA+PTIuIHJhagorCSAgICAgMjAwNS0wMS0yOAorCSAgKi8KKworCSAgcHJpbnRfdW5leHBlY3RlZF9zdGF0aXN0aWNfd2FybmluZygiZ2V0X2NwdV9jb3VudGVycyIsCisJCQkJCSAgICAga25wLT5uYW1lLAorCQkJCQkgICAgIE5VTEwpOworCX0KKyAgICAgIH0KKyAgICAgIGlmICgxNSA9PSBmb3VuZCkgeworCS8qIGhhcHBpbmVzcyBhbmQgam95ICovCisJcmV0dXJuOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJImdldF9jcHVfY291bnRlcnMgY291bGQgbm90IGZpbmQgb25lIG9yIG1vcmUgb2YgdGhlIGV4cGVjdGVkIGNvdW50ZXJzIVxuIik7CisJZmZsdXNoKHdoZXJlKTsKKwlleGl0KC0xKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB0aGUga3N0YXRfcmVhZCByZXR1cm5lZCBhbiBlcnJvciBvciB0aGUgY2hhaW4gY2hhbmdlZCAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiZ2V0X2NwdV9jb3VudGVyczoga3N0YXRfcmVhZCBmYWlsZWQgb3IgY2hhaW4gaWQgY2hhbmdlZCAlZCAlc1xuIiwKKwkgICAgICBlcnJubywKKwkgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGV4aXQoLTEpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiB0aGUgbG9va3VwIGZhaWxlZCBvciBmb3VuZCB0aGUgd3JvbmcgdHlwZSAqLworICAgIGZwcmludGYod2hlcmUsCisJICAgICJnZXRfY3B1X2NvdW50ZXJzOiBrc3RhdF9sb29rdXAgZmFpbGVkIGZvciBtb2R1bGUgJ2NwdScgJWQgaW5zdGFuY2UgJWQgY2xhc3MgJ2ludHJzdGF0JyBhbmQgS1NUQVRfVFlQRV9OQU1FRDogZXJybm8gJWQgJXNcbiIsCisJICAgIGNwdV9udW0sCisJICAgIGxpYl9jcHVfbWFwW2NwdV9udW1dLAorCSAgICBlcnJubywKKwkgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoLTEpOworICB9CisKK30KKworc3RhdGljIHZvaWQKK2dldF9jcHVfdGltZV9jb3VudGVycyhjcHVfdGltZV9jb3VudGVyc190ICpjb3VudGVycykKK3sKKworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGliX251bV9sb2NfY3B1czsgaSsrKXsKKyAgICBnZXRfY3B1X2NvdW50ZXJzKGksIGNvdW50ZXJzKTsKKyAgICBnZXRfaW50ZXJydXB0X2NvdW50ZXJzKGksIGNvdW50ZXJzKTsKKyAgfQorCisgIHJldHVybjsKK30KKworLyogdGhlIGtzdGF0MTAgbWVjaGFuaXNtLCBzaW5jZSBpdCBpcyBiYXNlZCBvbiBhY3R1YWwgbmFub3NlY29uZAorICAgY291bnRlcnMgaXMgbm90IGdvaW5nIHRvIHVzZSBhIGNvbXBhcmlzb24gdG8gYW4gaWRsZSByYXRlLiBzbywgdGhlCisgICBjYWxpYnJhdGVfaWRsZV9yYXRlIHJvdXRpbmUgd2lsbCBiZSByYXRoZXIgc2ltcGxlIDopIHJhaiAyMDA1LTAxLTI4CisgICAqLyAKKworZmxvYXQKK2NhbGlicmF0ZV9pZGxlX3JhdGUoaW50IGl0ZXJhdGlvbnMsIGludCBpbnRlcnZhbCkKK3sKKyAgcmV0dXJuIDAuMDsKK30KKworZmxvYXQKK2NhbGNfY3B1X3V0aWxfaW50ZXJuYWwoZmxvYXQgZWxhcHNlZF90aW1lKQoreworICBpbnQgaTsKKyAgZmxvYXQgY29ycmVjdGlvbl9mYWN0b3I7CisgIGZsb2F0IGFjdHVhbF9yYXRlOworICAKKyAgdWludDY0X3QgdG90YWxfY3B1X25zZWM7CisKKyAgLyogbXVsdGlwbHkgYnkgMTAwIGFuZCBkaXZpZGUgYnkgdG90YWwgYW5kIHlvdSBnZXQgd2hvbGUKKyAgICAgcGVyY2VudGFnZXMuIG11bHRpcGx5IGJ5IDEwMDAgYW5kIGRpdmlkZSBieSB0b3RhbCBhbmQgeW91IGdldAorICAgICB0ZW50aHMgb2YgcGVyY2VudGFnZXMuICBtdWx0aXBseSBieSAxMDAwMCBhbmQgZGl2aWRlIGJ5IHRvdGFsIGFuZAorICAgICB5b3UgZ2V0IGh1bmRyZWR0aHMgb2YgcGVyY2VudGFnZXMuIGV0YyBldGMgZXRjIHJhaiAyMDA1LTAxLTI4ICovCisKKyNkZWZpbmUgQ0FMQ19QRVJDRU5UIDEwMAorI2RlZmluZSBDQUxDX1RFTlRIX1BFUkNFTlQgMTAwMAorI2RlZmluZSBDQUxDX0hVTkRSRURUSF9QRVJDRU5UIDEwMDAwCisjZGVmaW5lIENBTENfVEhPVVNBTkRUSF9QRVJDRU5UIDEwMDAwMAorI2RlZmluZSBDQUxDX0FDQ1VSQUNZIENBTENfVEhPVVNBTkRUSF9QRVJDRU5UCisgIAorICB1aW50NjRfdCBmcmFjdGlvbl9pZGxlOworICB1aW50NjRfdCBmcmFjdGlvbl91c2VyOworICB1aW50NjRfdCBmcmFjdGlvbl9rZXJuZWw7CisgIHVpbnQ2NF90IGZyYWN0aW9uX2ludGVycnVwdDsKKworICB1aW50NjRfdCBpbnRlcnJ1cHRfaWRsZTsKKyAgdWludDY0X3QgaW50ZXJydXB0X3VzZXI7CisgIHVpbnQ2NF90IGludGVycnVwdF9rZXJuZWw7CisKKyAgbGliX2xvY2FsX2NwdV91dGlsID0gKGZsb2F0KTAuMDsKKworICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBsaWJyYXJ5IG1lYXN1cmVkIGEgdGltZSBvdGhlciB0aGFuICovCisgIC8qIHRoZSBvbmUgdGhhdCB0aGUgdXNlciB3YW50IGZvciB0aGUgY3B1IHV0aWxpemF0aW9uICovCisgIC8qIGNhbGN1bGF0aW9ucyAtIGZvciBleGFtcGxlLCB0ZXN0cyB0aGF0IHdlcmUgZW5kZWQgYnkgKi8KKyAgLyogd2F0Y2hkb2cgdGltZXJzIHN1Y2ggYXMgdGhlIHVkcCBzdHJlYW0gdGVzdC4gV2UgbGV0IHRoZXNlICovCisgIC8qIHRlc3RzIHRlbGwgdXAgd2hhdCB0aGUgZWxhcHNlZCB0aW1lIHNob3VsZCBiZS4gKi8KKyAgCisgIGlmIChlbGFwc2VkX3RpbWUgIT0gMC4wKSB7CisgICAgY29ycmVjdGlvbl9mYWN0b3IgPSAoZmxvYXQpIDEuMCArIAorICAgICAgKChsaWJfZWxhcHNlZCAtIGVsYXBzZWRfdGltZSkgLyBlbGFwc2VkX3RpbWUpOworICB9CisgIGVsc2UgeworICAgIGNvcnJlY3Rpb25fZmFjdG9yID0gKGZsb2F0KSAxLjA7CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbGliX251bV9sb2NfY3B1czsgaSsrKSB7CisKKyAgICAvKiB0aGlzIGlzIG5vdyB0aGUgZnVuIHBhcnQuICB3ZSBoYXZlIHRoZSBuYW5vc2Vjb25kcyBfYWxsZWdlZGx5XworICAgICAgIHNwZW50IGluIHVzZXIsIGlkbGUgYW5kIGtlcm5lbC4gIFdlIGFsc28gaGF2ZSBuYW5vc2Vjb25kcyBzcGVudAorICAgICAgIHNlcnZpY2luZyBpbnRlcnJ1cHRzLiAgU2FkbHksIGluIHRoZSBkZXZlbG9wZXIncyBmaW5pdGUgd2lzZG9tLAorICAgICAgIHRoZSBpbnRlcnJ1cHQgdGltZSBhY2NvdW50aW5nIGlzIGluIHBhcmFsbGVsIHdpdGggdGhlIG90aGVyCisgICAgICAgYWNjb3VudGluZy4gdGhpcyBtZWFucyB0aGF0IHRpbWUgYWNjb3VudGVkIGluIHVzZXIsIGtlcm5lbCBvcgorICAgICAgIGlkbGUgd2lsbCBhbHNvIGluY2x1ZGUgdGltZSBzcGVudCBpbiBpbnRlcnJ1cHQuICBmb3IgbmV0cGVyZidzCisgICAgICAgcG9ycG9pc2VzIHdlIGRvIG5vdCByZWFsbHkgY2FyZSBhYm91dCB0aGF0IGZvciB1c2VyIGFuZCBrZXJuZWwsCisgICAgICAgYnV0IHdlIGNlcnRhaW5seSBkbyBjYXJlIGZvciBpZGxlLiAgdGhlICQ2NEIgcXVlc3Rpb24gYmVjb21lcyAtCisgICAgICAgaG93IHRvICJjb3JyZWN0IiBmb3IgdGhpcz8KKworICAgICAgIHdlIGNvdWxkIGp1c3Qgc3VidHJhY3QgaW50ZXJydXB0IHRpbWUgZnJvbSBpZGxlLiAgdGhhdCBoYXMgdGhlCisgICAgICAgdmlydHVlIG9mIHNpbXBsaWNpdHkgYW5kIGFsc28gInB1bmlzaGVzIiBTdW4gZm9yIGRvaW5nCisgICAgICAgc29tZXRoaW5nIHRoYXQgc2VlbXMgdG8gYmUgc28gc3R1cGlkLiAgaG93ZXZlciwgd2UgcHJvYmFibHkKKyAgICAgICBoYXZlIHRvIGJlICJmYWlyIiBldmVuIHRvIHRoZSBhbGxlZ2VkbHkgc3R1cGlkIHNvIHRoZSBvdGhlcgorICAgICAgIG1lY2hhbmlzbSwgc3VnZ2VzdGVkIGJ5IGEgU3VuIGVuZ2luZWVyIGlzIHRvIHN1YnRyYWN0IGludGVycnVwdAorICAgICAgIHRpbWUgZnJvbSBlYWNoIG9mIHVzZXIsIGtlcm5lbCBhbmQgaWRsZSBpbiBwcm9wb3J0aW9uIHRvIHRoZWlyCisgICAgICAgbnVtYmVycy4gIHRoZW4gd2Ugc3VtIHRoZSBjb3JyZWN0ZWQgdXNlciwga2VybmVsIGFuZCBpZGxlIGFsb25nCisgICAgICAgd2l0aCB0aGUgaW50ZXJydXB0IHRpbWUgYW5kIHVzZSB0aGF0IHRvIGNhbGN1bGF0ZSBhIG5ldyBpZGxlCisgICAgICAgcGVyY2VudGFnZSBhbmQgdGh1cyBhIENQVSB1dGlsIHBlcmNlbnRhZ2UuCisKKyAgICAgICB0aGF0IGlzIHdoYXQgd2Ugd2lsbCBhdHRlbXB0IHRvIGRvIGhlcmUuICByYWogMjAwNS0wMS0yOCAKKworICAgICAgIG9mIGNvdXJzZSwgd2UgYWxzbyBoYXZlIHRvIHdvbmRlciB3aGF0IHdlIHNob3VsZCBkbyBpZiB0aGVyZSBpcworICAgICAgIG1vcmUgaW50ZXJydXB0IHRpbWUgdGhhbiB0aGUgc3VtIG9mIHVzZXIsIGtlcm5lbCBhbmQgaWRsZS4KKyAgICAgICB0aGF0IGlzIGEgdGhlb3JldGljYWwgcG9zc2liaWxpdHkgSSBzdXBwb3NlLCBidXQgZm9yIHRoZQorICAgICAgIHRpbWUtYmVpbmcsIG9uZSB0aGF0IHdlIHdpbGwgYmx5dGhseSBpZ25vcmUsIGV4Y2VwdCBwZXJoYXBzIGZvcgorICAgICAgIGEgcXVpY2sgY2hlY2suIHJhaiAyMDA1LTAxLTMxIAorICAgICovCisgICAgCisgICAgLyogd2UgYXNzLXUtbWUgdGhhdCB0aGVzZSBjb3VudGVycyB3aWxsIG5ldmVyIHdyYXAgZHVyaW5nIGEKKyAgICAgICBuZXRwZXJmIHJ1bi4gIHRoaXMgbWF5IG5vdCBiZSBhIHBhcnRpY3VsYXJseSBzYWZlIHRoaW5nIHRvCisgICAgICAgZG8uIHJhaiAyMDA1LTAxLTI4ICovCisgICAgZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmlkbGUgPSBlbmRpbmdfY3B1X2NvdW50ZXJzW2ldLmlkbGUgLQorICAgICAgc3RhcnRpbmdfY3B1X2NvdW50ZXJzW2ldLmlkbGU7CisgICAgZGVsdGFfY3B1X2NvdW50ZXJzW2ldLnVzZXIgPSBlbmRpbmdfY3B1X2NvdW50ZXJzW2ldLnVzZXIgLQorICAgICAgc3RhcnRpbmdfY3B1X2NvdW50ZXJzW2ldLnVzZXI7CisgICAgZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmtlcm5lbCA9IGVuZGluZ19jcHVfY291bnRlcnNbaV0ua2VybmVsIC0KKyAgICAgIHN0YXJ0aW5nX2NwdV9jb3VudGVyc1tpXS5rZXJuZWw7CisgICAgZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmludGVycnVwdCA9IGVuZGluZ19jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0IC0KKyAgICAgIHN0YXJ0aW5nX2NwdV9jb3VudGVyc1tpXS5pbnRlcnJ1cHQ7CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBwcmludF9jcHVfdGltZV9jb3VudGVycygiZGVsdGFfY3B1X2NvdW50ZXJzIixpLGRlbHRhX2NwdV9jb3VudGVycyk7CisgICAgfQorCisgICAgLyogZm9yIHRoaXMgc3VtbWF0aW9uLCB3ZSBkbyBub3QgaW5jbHVkZSBpbnRlcnJ1cHQgdGltZSAqLworICAgIHRvdGFsX2NwdV9uc2VjID0gCisgICAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0uaWRsZSArCisgICAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0udXNlciArCisgICAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0ua2VybmVsOworCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJ0b3RhbF9jcHVfbnNlYyAlbGx1XG4iLHRvdGFsX2NwdV9uc2VjKTsKKyAgICB9CisKKyAgICBpZiAoZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmludGVycnVwdCA+IHRvdGFsX2NwdV9uc2VjKSB7CisgICAgICAvKiB3ZSBhcmUgbm90IGluIEthbnNhcyBhbnkgbW9yZSBUb3RvLCBhbmQgSSBhbSBub3QgcXVpdGUgc3VyZQorCSB0aGUgYmVzdCB3YXkgdG8gZ2V0IG91ciB0YWlscyBvdXQgb2YgaGVyZSBzbyBsZXQgdXMganVzdAorCSBwdW50LiByYWogMjAwNS0wMS0zMSAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgV0FSTklORyEgXG4iKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgImNhbGNfY3B1X3V0aWxfaW50ZXJuYWw6IG1vcmUgaW50ZXJydXB0IHRpbWUgdGhhbiBvdGhlcnMgY29tYmluZWQhXG4iKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIlx0c28gQ1BVIHV0aWwgY2Fubm90IGJlIGVzdGltYXRlZFxuIik7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJcdCBkZWx0YVslZF0uaW50ZXJydXB0ICVsbHVcbiIsaSxkZWx0YV9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0KTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIlx0IGRlbHRhWyVkXS5pZGxlICVsbHVcbiIsaSxkZWx0YV9jcHVfY291bnRlcnNbaV0uaWRsZSk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJcdCBkZWx0YVslZF0udXNlciAlbGx1XG4iLGksZGVsdGFfY3B1X2NvdW50ZXJzW2ldLnVzZXIpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiXHQgZGVsdGFbJWRdLmtlcm5lbCAlbGx1XG4iLGksZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmtlcm5lbCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgCisgICAgICBsaWJfbG9jYWxfY3B1X3V0aWwgPSAtMS4wOworICAgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA9IC0xLjA7CisgICAgICByZXR1cm4gLTEuMDsKKyAgICB9CisKKyAgICAvKiBhbmQgbm93IHNvbWUgZnVuIHdpdGggaW50ZWdlciBtYXRoLiAgaSBpbml0aWFsbHkgdHJpZWQgdG8KKyAgICAgICBwcm9tb3RlIHRoaW5ncyB0byBsb25nIGRvdWJsZWQgYnV0IHRoYXQgZGlkbid0IHNlZW0gdG8gcmVzdWx0CisgICAgICAgaW4gaGFwcGluZXNzIGFuZCBqb3kuIHJhaiAyMDA1LTAxLTI4ICovCisKKyAgICBmcmFjdGlvbl9pZGxlID0gCisgICAgICAoZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmlkbGUgKiBDQUxDX0FDQ1VSQUNZKSAvIHRvdGFsX2NwdV9uc2VjOworCisgICAgZnJhY3Rpb25fdXNlciA9IAorICAgICAgKGRlbHRhX2NwdV9jb3VudGVyc1tpXS51c2VyICogQ0FMQ19BQ0NVUkFDWSkgLyB0b3RhbF9jcHVfbnNlYzsKKworICAgIGZyYWN0aW9uX2tlcm5lbCA9IAorICAgICAgKGRlbHRhX2NwdV9jb3VudGVyc1tpXS5rZXJuZWwgKiBDQUxDX0FDQ1VSQUNZKSAvIHRvdGFsX2NwdV9uc2VjOworCisgICAgLyogb2ssIHdlIGhhdmUgb3VyIGZyYWN0aW9ucywgbm93IHdlIHdhbnQgdG8gdGFrZSB0aGF0IGZyYWN0aW9uIG9mCisgICAgICAgdGhlIGludGVycnVwdCB0aW1lIGFuZCBzdWJ0cmFjdCB0aGF0IGZyb20gdGhlIGJ1Y2tldC4gKi8KKworICAgIGludGVycnVwdF9pZGxlID0gICgoZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmludGVycnVwdCAqIGZyYWN0aW9uX2lkbGUpIC8gCisJCSAgICAgICBDQUxDX0FDQ1VSQUNZKTsKKworICAgIGludGVycnVwdF91c2VyID0gKChkZWx0YV9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0ICogZnJhY3Rpb25fdXNlcikgLyAKKwkJICAgICAgQ0FMQ19BQ0NVUkFDWSk7CisKKyAgICBpbnRlcnJ1cHRfa2VybmVsID0gKChkZWx0YV9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0ICogZnJhY3Rpb25fa2VybmVsKSAvIAorCQkJQ0FMQ19BQ0NVUkFDWSk7CisKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIlx0ZnJhY3Rpb25faWRsZSAlbGx1IGludGVycnVwdF9pZGxlICVsbHVcbiIsCisJICAgICAgZnJhY3Rpb25faWRsZSwKKwkgICAgICBpbnRlcnJ1cHRfaWRsZSk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJcdGZyYWN0aW9uX3VzZXIgJWxsdSBpbnRlcnJ1cHRfdXNlciAlbGx1XG4iLAorCSAgICAgIGZyYWN0aW9uX3VzZXIsCisJICAgICAgaW50ZXJydXB0X3VzZXIpOworICAgICAgZnByaW50Zih3aGVyZSwiXHRmcmFjdGlvbl9rZXJuZWwgJWxsdSBpbnRlcnJ1cHRfa2VybmVsICVsbHVcbiIsCisJICAgICAgZnJhY3Rpb25fa2VybmVsLAorCSAgICAgIGludGVycnVwdF9rZXJuZWwpOworICAgIH0KKworICAgIGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0uaWRsZSA9IGRlbHRhX2NwdV9jb3VudGVyc1tpXS5pZGxlIC0gCisgICAgICBpbnRlcnJ1cHRfaWRsZTsKKworICAgIGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0udXNlciA9IGRlbHRhX2NwdV9jb3VudGVyc1tpXS51c2VyIC0gCisgICAgICBpbnRlcnJ1cHRfdXNlcjsKKworICAgIGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0ua2VybmVsID0gZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmtlcm5lbCAtIAorICAgICAgaW50ZXJydXB0X2tlcm5lbDsKKworICAgIGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0ID0gZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmludGVycnVwdDsKKwkJICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIHByaW50X2NwdV90aW1lX2NvdW50ZXJzKCJjb3JyZWN0ZWRfY3B1X2NvdW50ZXJzIiwKKwkJCSAgICAgIGksCisJCQkgICAgICBjb3JyZWN0ZWRfY3B1X2NvdW50ZXJzKTsKKyAgICB9CisKKyAgICAvKiBJIHdhcyBnb2luZyB0byBjaGVja2ZvciBnb2luZyBsZXNzIHRoYW4gemVybywgYnV0IHNpbmNlIGFsbCB0aGUKKyAgICAgICBjYWxjdWxhdGlvbnMgYXJlIGluIHVuc2lnbmVkIHF1YW50aXRpZXMgdGhhdCB3b3VsZCBzZWVtIHRvIGJlIGEKKyAgICAgICB0cmlmZmxlIHNpbGx5Li4uIHJhaiAyMDA1LTAxLTI4ICovCisKKyAgICAvKiBvaywgbm93IHdlIHN1bSB0aGUgbnVtYmVycyBhZ2FpbiwgdGhpcyB0aW1lIGluY2x1ZGluZyBpbnRlcnJ1cHQKKyAgICAgICAqLworCisgICAgdG90YWxfY3B1X25zZWMgPSAKKyAgICAgIGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0uaWRsZSArCisgICAgICBjb3JyZWN0ZWRfY3B1X2NvdW50ZXJzW2ldLnVzZXIgKworICAgICAgY29ycmVjdGVkX2NwdV9jb3VudGVyc1tpXS5rZXJuZWwgKworICAgICAgY29ycmVjdGVkX2NwdV9jb3VudGVyc1tpXS5pbnRlcnJ1cHQ7CisKKyAgICAvKiBhbmQgcmVjYWxjdWxhdGUgb3VyIGZyYWN0aW9ucyB3ZSBhcmUgcmVhbGx5IG9ubHkgZ29pbmcgdG8gdXNlCisgICAgICAgZnJhY3Rpb25faWRsZSwgYnV0IGxldHMgY2FsY3VsYXRlIHRoZSByZXN0IGp1c3QgZm9yIHRoZSBoZWNrIG9mCisgICAgICAgaXQuIG9uZSBkYXkgd2UgbWF5IHdhbnQgdG8gZGlzcGxheSB0aGVtLiByYWogMjAwNS0wMS0yOCAqLworICAgIAorICAgIC8qIG11bHRpcGx5IGJ5IDEwMCBhbmQgZGl2aWRlIGJ5IHRvdGFsIGFuZCB5b3UgZ2V0IHdob2xlCisgICAgICAgcGVyY2VudGFnZXMuIG11bHRpcGx5IGJ5IDEwMDAgYW5kIGRpdmlkZSBieSB0b3RhbCBhbmQgeW91IGdldAorICAgICAgIHRlbnRocyBvZiBwZXJjZW50YWdlcy4gIG11bHRpcGx5IGJ5IDEwMDAwIGFuZCBkaXZpZGUgYnkgdG90YWwKKyAgICAgICBhbmQgeW91IGdldCBodW5kcmVkdGhzIG9mIHBlcmNlbnRhZ2VzLiBldGMgZXRjIGV0YyByYWoKKyAgICAgICAyMDA1LTAxLTI4ICovCisgICAgZnJhY3Rpb25faWRsZSA9IAorICAgICAgKGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0uaWRsZSAqIENBTENfQUNDVVJBQ1kpIC8gdG90YWxfY3B1X25zZWM7CisKKyAgICBmcmFjdGlvbl91c2VyID0gCisgICAgICAoY29ycmVjdGVkX2NwdV9jb3VudGVyc1tpXS51c2VyICogQ0FMQ19BQ0NVUkFDWSkgLyB0b3RhbF9jcHVfbnNlYzsKKworICAgIGZyYWN0aW9uX2tlcm5lbCA9IAorICAgICAgKGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0ua2VybmVsICogQ0FMQ19BQ0NVUkFDWSkgLyB0b3RhbF9jcHVfbnNlYzsKKworICAgIGZyYWN0aW9uX2ludGVycnVwdCA9IAorICAgICAgKGNvcnJlY3RlZF9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0ICogQ0FMQ19BQ0NVUkFDWSkgLyB0b3RhbF9jcHVfbnNlYzsKKworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiXHRmcmFjdGlvbl9pZGxlICVsdVxuIixmcmFjdGlvbl9pZGxlKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZnJhY3Rpb25fdXNlciAlbHVcbiIsZnJhY3Rpb25fdXNlcik7CisgICAgICBmcHJpbnRmKHdoZXJlLCJcdGZyYWN0aW9uX2tlcm5lbCAlbHVcbiIsZnJhY3Rpb25fa2VybmVsKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZnJhY3Rpb25faW50ZXJydXB0ICVsdVxuIixmcmFjdGlvbl9pbnRlcnJ1cHQpOworICAgIH0KKworICAgIC8qIGFuZCBmaW5hbGx5LCB3aGF0IGlzIG91ciBDUFUgdXRpbGl6YXRpb24/ICovCisgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA9IDEwMC4wIC0gKCgoZmxvYXQpZnJhY3Rpb25faWRsZSAvIAorCQkJCQkgIChmbG9hdClDQUxDX0FDQ1VSQUNZKSAqIDEwMC4wKTsKKyAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldICo9IGNvcnJlY3Rpb25fZmFjdG9yOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibGliX2xvY2FsX3Blcl9jcHVfdXRpbFslZF0gJWcgY2YgJWZcbiIsCisJICAgICAgaSwKKwkgICAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldLAorCSAgICAgIGNvcnJlY3Rpb25fZmFjdG9yKTsKKyAgICB9CisgICAgbGliX2xvY2FsX2NwdV91dGlsICs9IGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV07CisgIH0KKyAgLyogd2Ugd2FudCB0aGUgYXZlcmFnZSBhY3Jvc3MgYWxsIG4gcHJvY2Vzc29ycyAqLworICBsaWJfbG9jYWxfY3B1X3V0aWwgLz0gKGZsb2F0KWxpYl9udW1fbG9jX2NwdXM7CisKKyAgcmV0dXJuIGxpYl9sb2NhbF9jcHVfdXRpbDsKK30KKwordm9pZAorY3B1X3N0YXJ0X2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHVfdGltZV9jb3VudGVycyhzdGFydGluZ19jcHVfY291bnRlcnMpOworICByZXR1cm47Cit9CisKK3ZvaWQKK2NwdV9zdG9wX2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHVfdGltZV9jb3VudGVycyhlbmRpbmdfY3B1X2NvdW50ZXJzKTsKK30KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9sb29wZXIuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9sb29wZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTg0NjkxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X2xvb3Blci5jCkBAIC0wLDAgKzEsNjU1IEBACitjaGFyICAgbmV0Y3B1X2xvb3Blcl9pZFtdPSJcCitAKCMpbmV0Y3B1X2xvb3Blci5jIChjKSBDb3B5cmlnaHQgMjAwNS0yMDA3LiBWZXJzaW9uIDIuNC4zIjsKKworLyogbmV0Y3B1X2xvb3Blci5jCisgIAorICAgSW1wbGVtZW50IHRoZSBzb2FrZXIgcHJvY2VzcyBzcGVjaWZpYyBwb3J0aW9ucyBvZiBuZXRwZXJmIENQVQorICAgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLiBUaGVzZSBhcmUgYnJva2VuLW91dCBpbnRvIGEgc2VwYXJhdGUgZmlsZQorICAgdG8gbWFrZSBsaWZlIG11Y2ggbmljZXIgb3ZlciBpbiBuZXRsaWIuYyB3aGljaCBoYWQgYmVjb21lIGEgbWF6ZSBvZgorICAgdHdpc3R5LCBDUFUtdXRpbC1yZWxhdGVkLCAjaWZkZWZzLCBhbGwgZGlmZmVyZW50LiAgcmFqIDIwMDUtMDEtMjYKKyAgICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyMgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTU1BUCkgfHwgZGVmaW5lZChIQVZFX1NZU19NTUFOX0gpCisjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjZWxzZQorIyBlcnJvciBuZXRjcHVfbG9vcGVyIHJlcXVpcmVzIG1tYXAKKyNlbmRpZgorCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NZU19XQUlUX0gKKyMgaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJuZXRzaC5oIgorI2luY2x1ZGUgIm5ldGxpYi5oIgorCisjZGVmaW5lIFBBR0VTX1BFUl9DSElMRCAyCisKKy8qIHRoZSBsaWJfc3RhcnRfY291bnQgYW5kIGxpYl9lbmRfY291bnQgYXJyYXlzIGhvbGQgdGhlIHN0YXJ0aW5nCisgICBhbmQgZW5kaW5nIHZhbHVlcyBvZiB3aGF0ZXZlciBpcyBjb3VudGluZyB3aGVuIHRoZSBzeXN0ZW0gaXMKKyAgIGlkbGUuIFRoZSByYXRlIGF0IHdoaWNoIHRoaXMgaW5jcmVtZW50cyBkdXJpbmcgYSB0ZXN0IGlzIGNvbXBhcmVkCisgICB3aXRoIGEgcHJldmlvdXMgY2FsaWJyYXJpb24gdG8gYXJyaXZlIGF0IGEgQ1BVIHV0aWxpemF0aW9uCisgICBwZXJjZW50YWdlLiByYWogMjAwNS0wMS0yNiAqLworc3RhdGljIHVpbnQ2NF90ICBsaWJfc3RhcnRfY291bnRbTUFYQ1BVU107CitzdGF0aWMgdWludDY0X3QgIGxpYl9lbmRfY291bnRbTUFYQ1BVU107CisKK3N0YXRpYyBpbnQgKmNwdV9tYXBwaW5nczsKKworc3RhdGljIGludCBsaWJfaWRsZV9mZDsKK3N0YXRpYyB1aW50NjRfdCAqbGliX2lkbGVfYWRkcmVzc1tNQVhDUFVTXTsKK3N0YXRpYyBsb25nICAgICAqbGliX2Jhc2VfcG9pbnRlcjsKK3N0YXRpYyBwaWRfdCAgICAgbGliX2lkbGVfcGlkc1tNQVhDUFVTXTsKK3N0YXRpYyBpbnQgICAgICAgbGliX2xvb3BlcnNfcnVubmluZz0wOworCisvKiB3ZSB1c2VkIHRvIHVzZSB0aGlzIGNvZGUgdG8gYmluZCB0aGUgbG9vcGVycywgYnV0IHNpbmNlIHdlIGhhdmUKKyAgIGRlY2lkZWQgdG8gZW5hYmxlIHByb2Nlc3NvciBhZmZpbml0eSBmb3IgdGhlIGFjdHVhbAorICAgbmV0cGVyZi9uZXRzZXJ2ZXIgcHJvY2Vzc2VzIHdlIHdpbGwgdXNlIHRoYXQgYWZmaW5pdHkgcm91dGluZSwKKyAgIHdoaWNoIGhhcHBlbnMgdG8ga25vdyBhYm91dCBtb3JlIHN5c3RlbXMgdGhhbiB0aGlzICovCisKKyNpZmRlZiBOT1RERUYKK3N0YXRpYyB2b2lkCitiaW5kX3RvX3Byb2Nlc3NvcihpbnQgY2hpbGRfbnVtKQoreworICAvKiBUaGlzIHJvdXRpbmUgd2lsbCBiaW5kIHRoZSBjYWxsaW5nIHByb2Nlc3MgdG8gYSBwYXJ0aWN1bGFyICovCisgIC8qIHByb2Nlc3Nvci4gV2UgYXJlIG5vdCBjaG9vc3kgYXMgdG8gd2hpY2ggcHJvY2Vzc29yLCBzbyBpdCB3aWxsIGJlICovCisgIC8qIHRoZSBwcm9jZXNzIGlkIG1vZCB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgLSBzaGlmdGVkIGJ5IG9uZSBmb3IgKi8KKyAgLyogdGhvc2Ugc3lzdGVtcyB3aGljaCBuYW1lIHByb2Nlc3NvciBzdGFydGluZyBmcm9tIG9uZSBpbnN0ZWFkIG9mICovCisgIC8qIHplcm8uIG9uIHRob3NlIHN5c3RlbXMgd2hlcmUgSSBkbyBub3QgeWV0IGtub3cgaG93IHRvIGJpbmQgYSAqLworICAvKiBwcm9jZXNzIHRvIGEgcHJvY2Vzc29yLCB0aGlzIHJvdXRpbmUgd2lsbCBiZSBhIG5vLW9wIHJhaiAxMC85NSAqLworCisgIC8qIGp1c3QgYXMgYSByZW1pbmRlciwgdGhpcyBpcyAqb25seSogZm9yIHRoZSBsb29wZXIgcHJvY2Vzc2VzLCBub3QgKi8KKyAgLyogdGhlIGFjdHVhbCBtZWFzdXJlbWVudCBwcm9jZXNzZXMuIHRob3NlIHdpbGwsIHNob3VsZCwgTVVTVCBmbG9hdCAqLworICAvKiBvciBub3QgZmxvYXQgZnJvbSBDUFUgdG8gQ1BVIGFzIGNvbnRyb2xsZWQgYnkgdGhlIG9wZXJhdGluZyAqLworICAvKiBzeXN0ZW0gZGVmYXVsdHMuIHJhaiAxMi85NSAqLworCisjaWZkZWYgX19ocHV4CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvbXAuaD4KKworICBpbnQgb2xkX2NwdSA9IC0yOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiY2hpbGQgJWQgYXNraW5nIGZvciBDUFUgJWQgYXMgcGlkICVkIHdpdGggJWQgQ1BVc1xuIiwKKyAgICAgICAgICAgIGNoaWxkX251bSwKKyAgICAgICAgICAgIChjaGlsZF9udW0gJSBsaWJfbnVtX2xvY19jcHVzKSwKKyAgICAgICAgICAgIGdldHBpZCgpLAorICAgICAgICAgICAgbGliX251bV9sb2NfY3B1cyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIFNFVFBST0NFU1MoKGNoaWxkX251bSAlIGxpYl9udW1fbG9jX2NwdXMpLCBnZXRwaWQoKSk7CisgIHJldHVybjsKKworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fc3VuKSAmJiBkZWZpbmVkKF9fU1ZSNCkKKyAvKiBzaG91bGQgb25seSBiZSBTb2xhcmlzICovCisjaW5jbHVkZSA8c3lzL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHN5cy9wcm9jc2V0Lmg+CisKKyAgaW50IG9sZF9iaW5kaW5nOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiYmluZF90b19wcm9jZXNzb3I6IGNoaWxkICVkIGFza2luZyBmb3IgQ1BVICVkIGFzIHBpZCAlZCB3aXRoICVkIENQVXNcbiIsCisgICAgICAgICAgICBjaGlsZF9udW0sCisgICAgICAgICAgICAoY2hpbGRfbnVtICUgbGliX251bV9sb2NfY3B1cyksCisgICAgICAgICAgICBnZXRwaWQoKSwKKyAgICAgICAgICAgIGxpYl9udW1fbG9jX2NwdXMpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBpZiAocHJvY2Vzc29yX2JpbmQoUF9QSUQsCisgICAgICAgICAgICAgICAgICAgICBnZXRwaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgIChjaGlsZF9udW0gJSBsaWJfbnVtX2xvY19jcHVzKSwgCisgICAgICAgICAgICAgICAgICAgICAgJm9sZF9iaW5kaW5nKSAhPSAwKSB7CisgICAgZnByaW50Zih3aGVyZSwiYmluZF90b19wcm9jZXNzb3I6IHVuYWJsZSB0byBwZXJmb3JtIHByb2Nlc3NvciBiaW5kaW5nXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgZXJybm8gJWRcbiIsZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgcmV0dXJuOworI2Vsc2UKKyNpZmRlZiBXSU4zMgorCisgIGlmICghU2V0VGhyZWFkQWZmaW5pdHlNYXNrKEdldEN1cnJlbnRUaHJlYWQoKSwgKFVMT05HX1BUUikxIDw8IChjaGlsZF9udW0gJSBsaWJfbnVtX2xvY19jcHVzKSkpIHsKKyAgICBwZXJyb3IoIlNldFRocmVhZEFmZmluaXR5TWFzayBmYWlsZWQiKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiYmluZF90b19wcm9jZXNzb3I6IGNoaWxkICVkIGFza2luZyBmb3IgQ1BVICVkIG9mICVkIENQVXNcbiIsCisgICAgICAgICAgICBjaGlsZF9udW0sCisgICAgICAgICAgICAoY2hpbGRfbnVtICUgbGliX251bV9sb2NfY3B1cyksCisgICAgICAgICAgICBsaWJfbnVtX2xvY19jcHVzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyNlbmRpZgorICByZXR1cm47CisjZW5kaWYgLyogX19zdW4gJiYgX1NWUjQgKi8KKyNlbmRpZiAvKiBfX2hwdXggKi8KK30KKyNlbmRpZgorCisgLyogc2l0X2FuZF9zcGluIHdpbGwganVzdCBzcGluIGFib3V0IGluY3JlbWVudGluZyBhIHZhbHVlICovCisgLyogdGhpcyB2YWx1ZSB3aWxsIGVpdGhlciBiZSBpbiBhIG1lbW9yeSBtYXBwZWQgcmVnaW9uIG9uIFVuaXggc2hhcmVkICovCisgLyogYnkgZWFjaCBsb29wZXIgcHJvY2Vzcywgb3Igc29tZXRoaW5nIGFwcHJvcHJpYXRlIG9uIFdpbmRvd3MvTlQgKi8KKyAvKiAobWFsbG9jJ2Qgb3Igc3VjaCkuIFRoaXMgcm91dGluZSBpcyByZWFzb25hYmx5IHVnbHkgaW4gdGhhdCBpdCBoYXMgKi8KKyAvKiBwcmlvcml0eSBtYW5pcHVsYXRpbmcgY29kZSBmb3IgbG90cyBvZiBkaWZmZXJlbnQgb3BlcmF0aW5nICovCisgLyogc3lzdGVtcy4gVGhpcyByb3V0aW5lIG5ldmVyIHJldHVybnMuIHJhaiAxLzk2ICovIAorCitzdGF0aWMgdm9pZAorc2l0X2FuZF9zcGluKGludCBjaGlsZF9pbmRleCkKKworeworICB1aW50NjRfdCAqbXlfY291bnRlcl9wdHI7CisKKyAvKiBvbmx5IHVzZSBDIHN0dWZmIGlmIHdlIGFyZSBub3QgV0lOMzIgdW5sZXNzIGFuZCB1bnRpbCB3ZSAqLworIC8qIHN3aXRjaCBmcm9tIENyZWF0ZVRocmVhZCB0byBfYmVnaW50aHJlYWQuIHJhaiAxLzk2ICovCisjaWZuZGVmIFdJTjMyCisgIC8qIHdlIGFyZSB0aGUgY2hpbGQuIHdlIGNvdWxkIGRlY2lkZSB0byBleGVjIHNvbWUgc2VwYXJhdGUgKi8KKyAgLyogcHJvZ3JhbSwgYnV0IHRoYXQgZG9lc24ndCByZWFsbHkgc2VlbSB3b3J0aHdoaWxlIC0gcmFqIDQvOTUgKi8KKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiTG9vcGVyIGNoaWxkICVkIGlzIGJvcm4sIHBpZCAlZFxuIiwKKyAgICAgICAgICAgIGNoaWxkX2luZGV4LAorICAgICAgICAgICAgZ2V0cGlkKCkpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisjZW5kaWYgLyogV0lOMzIgKi8KKworICAvKiByZXNldCBvdXIgYmFzZSBwb2ludGVyIHRvIGJlIGF0IHRoZSBhcHByb3ByaWF0ZSBvZmZzZXQgKi8KKyAgbXlfY291bnRlcl9wdHIgPSAodWludDY0X3QgKikgKChjaGFyICopbGliX2Jhc2VfcG9pbnRlciArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0bGliX2dldF9wYWdlX3NpemUoKSAqIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRVNfUEVSX0NISUxEICogY2hpbGRfaW5kZXgpKTsKKyAgCisgIC8qIGluIHRoZSBldmVudCB3ZSBhcmUgcnVubmluZyBvbiBhbiBNUCBzeXN0ZW0sIGl0IHdvdWxkICovCisgIC8qIHByb2JhYmx5IGJlIGdvb2QgdG8gYmluZCB0aGUgc29ha2VyIHByb2Nlc3NlcyB0byBzcGVjaWZpYyAqLworICAvKiBwcm9jZXNzb3JzLiBJICp0aGluayogdGhpcyBpcyB0aGUgbW9zdCByZWFzb25hYmxlIHRoaW5nIHRvICovCisgIC8qIGRvLCBhbmQgd291bGQgYmUgY2xvc2VzIHRvIHNpbXVsYXRpbmcgdGhlIGluZm9ybWF0aW9uIHdlIGdldCAqLworICAvKiBvbiBIUC1VWCB3aXRoIHBzdGF0LiBJIGNvdWxkIHB1dCBhbGwgdGhlIHN5c3RlbS1zcGVjaWZpYyBjb2RlICovCisgIC8qIGhlcmUsIGJ1dCB3aWxsICJhYnN0cmFjdCBpdCBpbnRvIGFub3RoZXIgcm91dGluZSB0byBrZWVwIHRoaXMgKi8KKyAgLyogYXJlYSBtb3JlIHJlYWRhYmxlLiBJJ2xsIHByb2JhYmx5IGRvIHRoZSBzYW1lIHRoaW5lIHdpdGggdGhlICovCisgIC8qICJsb3cgcHJpIGNvZGUiIHJhaiAxMC85NSAqLworICAKKyAgLyogc2luY2Ugd2UgYXJlICJmbHlpbmcgYmxpbmQiIHdydCB3aGVyZSB3ZSBzaG91bGQgYmluZCB0aGUgbG9vcGVyCisgICAgIHByb2Nlc3Nlcywgd2Ugd2FudCB0byB1c2UgdGhlIGNwdV9tYXAgdGhhdCB3YXMgcHJlcGFyZWQgYnkgbmV0bGliCisgICAgIHJhdGhlciB0aGFuIGFzc3VtZSB0aGF0IHRoZSBDUFUgaWRzIG9uIHRoZSBzeXN0ZW0gc3RhcnQgYXQgemVybworICAgICBhbmQgYXJlIGNvbnRpZ3VvdXMuIHJhaiAyMDA2LTA0LTAzICovCisgIGJpbmRfdG9fc3BlY2lmaWNfcHJvY2Vzc29yKGNoaWxkX2luZGV4ICUgbGliX251bV9sb2NfY3B1cywxKTsKKyAgCisgIGZvciAoKm15X2NvdW50ZXJfcHRyID0gMEw7CisgICAgICAgOworICAgICAgICgqbXlfY291bnRlcl9wdHIpKyspIHsKKyAgICBpZiAoISgqbGliX2Jhc2VfcG9pbnRlciAlIDEpKSB7CisgICAgICAvKiBldmVyeSBvbmNlIGFuZCBhZ2FpbiwgbWFrZSBzdXJlIHRoYXQgb3VyIHByb2Nlc3MgcHJpb3JpdHkgaXMgKi8KKyAgICAgIC8qIG5pY2UgYW5kIGxvdy4gYWxzbywgYnkgbWFraW5nIHN5c3RlbSBjYWxscywgaXQgbWF5IGJlIGVhc2llciAqLworICAgICAgLyogZm9yIHVzIHRvIGJlIHByZS1lbXB0ZWQgYnkgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gZG8gdXNlZnVsICovCisgICAgICAvKiB3b3JrIC0gbGlrZSB0aGUgdGhyZWFkIG9mIGV4ZWN1dGlvbiBhY3R1YWxseSBzZW5kaW5nIGFuZCAqLworICAgICAgLyogcmVjZWl2aW5nIGRhdGEgYWNyb3NzIHRoZSBuZXR3b3JrIDopICovCisjaWZkZWYgX0FJWAorICAgICAgaW50IHBpZCxwcmlvOworCisgICAgICBwcmlvID0gUFJJT1JJVFk7CisgICAgICBwaWQgPSBnZXRwaWQoKTsKKyAgICAgIC8qIGlmIHlvdSBhcmUgbm90IHJvb3QsIHRoaXMgY2FsbCB3aWxsIHJldHVybiBFUEVSTSAtIHdoeSBvbmUgKi8KKyAgICAgIC8qIGNhbm5vdCBjaGFuZ2Ugb25lJ3Mgb3duIHByaW9yaXR5IHRvICBsb3dlciB2YWx1ZSBpcyBiZXlvbmQgKi8KKyAgICAgIC8qIG1lLiByYWogMi8yNi85NiAqLyAgCisgICAgICBzZXRwcmkocGlkLCBwcmlvKTsKKyNlbHNlIC8qIF9BSVggKi8KKyNpZmRlZiBfX3NnaQorICAgICAgaW50IHBpZCxwcmlvOworCisgICAgICBwcmlvID0gUFJJT1JJVFk7CisgICAgICBwaWQgPSBnZXRwaWQoKTsKKyAgICAgIHNjaGVkY3RsKE5EUFJJLCBwaWQsIHByaW8pOworICAgICAgc2dpbmFwKDApOworI2Vsc2UgLyogX19zZ2kgKi8KKyNpZmRlZiBXSU4zMgorICAgICAgU2V0VGhyZWFkUHJpb3JpdHkoR2V0Q3VycmVudFRocmVhZCgpLFRIUkVBRF9QUklPUklUWV9JRExFKTsKKyNlbHNlIC8qIFdJTjMyICovCisjaWYgZGVmaW5lZChfX3N1bikgJiYgZGVmaW5lZChfX1NWUjQpCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3ByaW9jbnRsLmg+CisjaW5jbHVkZSA8c3lzL3J0cHJpb2NudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHNwcmlvY250bC5oPgorICAgICAgLyogSSB3b3VsZCAqcmVhbGx5KiBsaWtlIHRvIGtub3cgaG93IHRvIHVzZSBwcmlvY250bCB0byBtYWtlIHRoZSAqLworICAgICAgLyogcHJpb3JpdHkgbG93IGZvciB0aGlzIGxvb3BlciBwcm9jZXNzLiBob3dldmVyLCBlaXRoZXIgbXkgbWluZCAqLworICAgICAgLyogaXMgYWRkbGVkLCBvciB0aGUgbWFucGFnZSBpbiBzZWN0aW9uIHR3byBmb3IgcHJpb2NudGwgaXMgbm90ICovCisgICAgICAvKiB0ZXJyaWJseSBoZWxwZnVsIC0gZm9yIG9uZSwgaXQgaGFzIG5vIGV4YW1wbGVzIDooIHNvLCBpZiB5b3UgKi8KKyAgICAgIC8qIGNhbiBoZWxwLCBJJ2QgbG92ZSB0byBoZWFyIGZyb20geW91LiBpbiB0aGUgbWVhbnRpbWUsIHdlIHdpbGwgKi8KKyAgICAgIC8qIHJlbHkgb24gbmljZSgzOSkuIHJhaiAyLzI2Lzk2ICovCisgICAgICBuaWNlKDM5KTsKKyNlbHNlIC8qIF9fc3VuICYmIF9fU1ZSNCAqLworICAgICAgbmljZSgzOSk7CisjZW5kaWYgLyogX19zdW4gJiYgX1NWUjQgKi8KKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIF9fc2dpICovCisjZW5kaWYgLyogX0FJWCAqLworICAgIH0KKyAgfQorfQorCisMCisKKyAvKiB0aGlzIHJvdXRpbmUgd2lsbCBzdGFydCBhbGwgdGhlIGxvb3BlciBwcm9jZXNzZXMgb3IgdGhyZWFkcyBmb3IgKi8KKyAvKiBtZWFzdXJpbmcgQ1BVIHV0aWxpemF0aW9uLiAqLworCitzdGF0aWMgdm9pZAorc3RhcnRfbG9vcGVyX3Byb2Nlc3NlcygpCit7CisKKyAgdW5zaWduZWQgaW50ICAgICAgaSwgZmlsZV9zaXplOworICAKKyAgLyogd2Ugd2FudCBhdCBsZWFzdCB0d28gcGFnZXMgZm9yIGVhY2ggcHJvY2Vzc29yLiB0aGUgKi8KKyAgLyogY2hpbGQgZm9yIGFueSBvbmUgcHJvY2Vzc29yIHdpbGwgd3JpdGUgdG8gdGhlIGZpcnN0IG9mIGhpcyB0d28gKi8KKyAgLyogcGFnZXMsIGFuZCB0aGUgc2Vjb25kIHBhZ2Ugd2lsbCBiZSBhIGJ1ZmZlciBpbiBjYXNlIHRoZXJlIGlzIHBhZ2UgKi8KKyAgLyogcHJlZmV0Y2hpbmcuIGlmIHlvdXIgc3lzdGVtIHByZS1mZXRjaGVzIG1vcmUgdGhhbiBhIHNpbmdsZSBwYWdlLCAqLworICAvKiB3ZWxsLCB5b3UnbGwgaGF2ZSB0byBtb2RpZnkgdGhpcyBvciBsaXZlIHdpdGggaXQgOiggcmFqIDQvOTUgKi8KKworICBmaWxlX3NpemUgPSAoKG5ldGxpYl9nZXRfcGFnZV9zaXplKCkgKiBQQUdFU19QRVJfQ0hJTEQpICogCisgICAgICAgICAgICAgICBsaWJfbnVtX2xvY19jcHVzKTsKKyAgCisjaWZuZGVmIFdJTjMyCisKKyAgLyogd2Ugd2UgYXJlIG5vdCB1c2luZyBXSU5ET1dTIE5UIChvciA5NSBhY3R1YWxseSA6KSwgdGhlbiB3ZSB3YW50ICovCisgIC8qIHRvIGNyZWF0ZSBhIG1lbW9yeSBtYXBwZWQgcmVnaW9uIHNvIHdlIGNhbiBzZWUgYWxsIHRoZSBjb3VudGluZyAqLworICAvKiByYXRlcyBvZiB0aGUgbG9vcGVycyAqLworCisgIC8qIGNvdWxkIHdlIGp1c3QgdXNlIGFuIGFub255bW91cyBtZW1vcnkgcmVnaW9uIGZvciB0aGlzPyBpdCBpcyAqLworICAvKiBwb3NzaWJsZSB0aGF0IHVzaW5nIGEgbW1hcCgpJ2VkICJyZWFsIiBmaWxlLCB3aGlsZSBjb252ZW5pZW50IGZvciAqLworICAvKiBkZWJ1Z2dpbmcsIGNvdWxkIHJlc3VsdCBpbiBzb21lIGZpbGVzeXN0ZW0gYWN0aXZpdHkgLSBsaWtlICovCisgIC8qIG1ldGFkYXRhIHVwZGF0ZXM/IHJhaiA0Lzk2ICovCisgIGxpYl9pZGxlX2ZkID0gb3BlbigiL3RtcC9uZXRwZXJmX2NwdSIsT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCk7CisgIAorICBpZiAobGliX2lkbGVfZmQgPT0gLTEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJjcmVhdGVfbG9vcGVyOiBmaWxlIGNyZWF0aW9uOyBlcnJubyAlZFxuIixlcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoY2htb2QoIi90bXAvbmV0cGVyZl9jcHUiLDA2NDQpID09IC0xKSB7CisgICAgZnByaW50Zih3aGVyZSwiY3JlYXRlX2xvb3BlcjogY2htb2Q7IGVycm5vICVkXG4iLGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBpbiBwbGFjZSwgbGV0cyBiZSBzdXJlIHRoYXQgdGhlIGZpbGUgaXMgKi8KKyAgLyogbGFyZ2UgZW5vdWdoLiAqLworICAKKyAgaWYgKHRydW5jYXRlKCIvdG1wL25ldHBlcmZfY3B1IixmaWxlX3NpemUpID09IC0xKSB7CisgICAgZnByaW50Zih3aGVyZSwiY3JlYXRlX2xvb3BlcjogdHJ1bmNhdGU6IGVycm5vICVkXG4iLGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIHRoZSBmaWxlIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggbm93LCBzbyB3ZSBjYW4gbW1hcCBpdCAqLworICAKKyAgLyogaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBoYXZlIE1BUF9WQVJJQUJMRSwganVzdCBkZWZpbmUgaXQgdG8gKi8KKyAgLyogYmUgemVyby4gaXQgaXMgb25seSB1c2VkL25lZWRlZCBvbiBIUC1VWCAoPykgcmFqIDQvOTUgKi8KKyNpZm5kZWYgTUFQX1ZBUklBQkxFCisjZGVmaW5lIE1BUF9WQVJJQUJMRSAweDAwMDAKKyNlbmRpZiAvKiBNQVBfVkFSSUFCTEUgKi8KKyNpZm5kZWYgTUFQX0ZJTEUKKyNkZWZpbmUgTUFQX0ZJTEUgMHgwMDAwCisjZW5kaWYgLyogTUFQX0ZJTEUgKi8KKyAgaWYgKChsaWJfYmFzZV9wb2ludGVyID0gKGxvbmcgKiltbWFwKE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJTEUgfCBNQVBfU0hBUkVEIHwgTUFQX1ZBUklBQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliX2lkbGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkgPT0gKGxvbmcgKiktMSkgeworICAgIGZwcmludGYod2hlcmUsImNyZWF0ZV9sb29wZXI6IG1tYXA6IGVycm5vICVkXG4iLGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsIm51bSBDUFVzICVkLCBmaWxlX3NpemUgJWQsIGxpYl9iYXNlX3BvaW50ZXIgJXBcbiIsCisgICAgICAgICAgICBsaWJfbnVtX2xvY19jcHVzLAorICAgICAgICAgICAgZmlsZV9zaXplLAorICAgICAgICAgICAgbGliX2Jhc2VfcG9pbnRlcik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIHdlIHNob3VsZCBoYXZlIGEgdmFsaWQgYmFzZSBwb2ludGVyLiBsZXRzIGZvcmsgKi8KKyAgCisgIGZvciAoaSA9IDA7IGkgPCAodW5zaWduZWQgaW50KWxpYl9udW1fbG9jX2NwdXM7IGkrKykgeworICAgIHN3aXRjaCAobGliX2lkbGVfcGlkc1tpXSA9IGZvcmsoKSkgeworICAgIGNhc2UgLTE6CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IGZvcmsiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgY2FzZSAwOgorICAgICAgLyogd2UgYXJlIHRoZSBjaGlsZC4gd2UgY291bGQgZGVjaWRlIHRvIGV4ZWMgc29tZSBzZXBhcmF0ZSAqLworICAgICAgLyogcHJvZ3JhbSwgYnV0IHRoYXQgZG9lc24ndCByZWFsbHkgc2VlbSB3b3J0aHdoaWxlIC0gcmFqIDQvOTUgKi8KKworICAgICAgc2lnbmFsKFNJR1RFUk0sIFNJR19ERkwpOworICAgICAgc2l0X2FuZF9zcGluKGkpOworCisgICAgICAvKiB3ZSBzaG91bGQgbmV2ZXIgcmVhbGx5IGdldCBoZXJlLCBidXQgaWYgd2UgZG8sIGp1c3QgZXhpdCgwKSAqLworICAgICAgZXhpdCgwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvKiB3ZSBtdXN0IGJlIHRoZSBwYXJlbnQgKi8KKyAgICAgIGxpYl9pZGxlX2FkZHJlc3NbaV0gPSAodWludDY0X3QgKikgKChjaGFyICopbGliX2Jhc2VfcG9pbnRlciArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0bGliX2dldF9wYWdlX3NpemUoKSAqIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRVNfUEVSX0NISUxEICogaSkpOworICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgIGZwcmludGYod2hlcmUsImxpYl9pZGxlX2FkZHJlc3NbJWRdIGlzICVwXG4iLAorICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgbGliX2lkbGVfYWRkcmVzc1tpXSk7CisgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgfQorICB9CisjZWxzZQorICAvKiB3ZSBhcmUgY29tcGlsZWQgLURXSU4zMiAqLworICBpZiAoKGxpYl9iYXNlX3BvaW50ZXIgPSBtYWxsb2MoZmlsZV9zaXplKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiY3JlYXRlX2xvb3Blcl9wcm9jZXNzIGNvdWxkIG5vdCBtYWxsb2MgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICBmaWxlX3NpemUpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIC8qIG5vdywgY3JlYXRlIGFsbCB0aGUgdGhyZWFkcyAqLworICBmb3IoaSA9IDA7IGkgPCAodW5zaWduZWQgaW50KWxpYl9udW1fbG9jX2NwdXM7IGkrKykgeworICAgIGxvbmcgcGxhY2VfaG9sZGVyOworICAgIGlmICgobGliX2lkbGVfcGlkc1tpXSA9IENyZWF0ZVRocmVhZCgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBUSFJFQURfU1RBUlRfUk9VVElORSlzaXRfYW5kX3NwaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFZPSUQpKFVMT05HX1BUUilpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGxhY2VfaG9sZGVyKSkgPT0gTlVMTCApIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICJjcmVhdGVfbG9vcGVyX3Byb2Nlc3M6IENyZWF0ZVRocmVhZCBmYWlsZWRcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIC8qIEkgd29uZGVyIGlmIEkgbmVlZCB0byBsb29rIGZvciBvdGhlciB0aHJlYWRzIHRvIGtpbGw/ICovCisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBsaWJfaWRsZV9hZGRyZXNzW2ldID0gKGxvbmcgKikgKChjaGFyICopbGliX2Jhc2VfcG9pbnRlciArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldGxpYl9nZXRfcGFnZV9zaXplKCkgKiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFU19QRVJfQ0hJTEQgKiBpKSk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJsaWJfaWRsZV9hZGRyZXNzWyVkXSBpcyAlcFxuIiwKKyAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgbGliX2lkbGVfYWRkcmVzc1tpXSk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIFdJTjMyICovCisKKyAgLyogd2UgbmVlZCB0byBoYXZlIHRoZSBsb29wZXIgcHJvY2Vzc2VzIHNldHRsZWQtaW4gYmVmb3JlIHdlIGRvICovCisgIC8qIGFueXRoaW5nIHdpdGggdGhlbSwgc28gbGV0cyBzbGVlcCBmb3Igc2F5IDMwIHNlY29uZHMuIHJhaiA0Lzk1ICovCisKKyAgc2xlZXAoMzApOworfQorCit2b2lkCitjcHVfdXRpbF9pbml0KHZvaWQpIAoreworICBjcHVfbWV0aG9kID0gTE9PUEVSOworCisgIC8qIHdlIHdhbnQgdG8gZ2V0IHRoZSBsb29wZXIgcHJvY2Vzc2VzIGdvaW5nICovCisgIGlmICghbGliX2xvb3BlcnNfcnVubmluZykgeworICAgIHN0YXJ0X2xvb3Blcl9wcm9jZXNzZXMoKTsKKyAgICBsaWJfbG9vcGVyc19ydW5uaW5nID0gMTsKKyAgfQorCisgIHJldHVybjsKK30KKworLyogY2xlYW4tdXAgYW55IGxlZnQtb3ZlciBDUFUgdXRpbCByZXNvdXJjZXMgLSBsb29wZXIgcHJvY2Vzc2VzLAorICAgZmlsZXMsIHdoYXRldmVyLiAgcmFqIDIwMDUtMDEtMjYgKi8KK3ZvaWQKK2NwdV91dGlsX3Rlcm1pbmF0ZSgpIHsKKworI2lmZGVmIFdJTjMyCisgIC8qIGl0IHdvdWxkIHNlZW0gdGhhdCBpZi93aGVuIHRoZSBwcm9jZXNzIGV4aXRzLCBhbGwgdGhlIHRocmVhZHMgKi8KKyAgLyogd2lsbCBnbyBhd2F5IHRvbywgc28gSSBkb24ndCB0aGluayBJIG5lZWQgYW55IGV4cGxpY2l0IHRocmVhZCAqLworICAvKiBraWxsaW5nIGNhbGxzIGhlcmUuIHJhaiAxLzk2ICovCisjZWxzZQorCisgIGludCBpOworCisgIC8qIG5vdyBnbyB0aHJvdWdoIGFuZCBraWxsLW9mZiBhbGwgdGhlIGNoaWxkIHByb2Nlc3NlcyAqLworICBmb3IgKGkgPSAwOyBpIDwgbGliX251bV9sb2NfY3B1czsgaSsrKXsKKyAgICAvKiBTSUdLSUxMIGNhbiBsZWF2ZSBjb3JlIGZpbGVzIGJlaGluZCAtIHRoYW5rcyB0byBTdGVpbmFyIEhhdWcgKi8KKyAgICAvKiBmb3IgcG9pbnRpbmcgdGhhdCBvdXQuICovCisgICAga2lsbChsaWJfaWRsZV9waWRzW2ldLFNJR1RFUk0pOworICB9CisgIGxpYl9sb29wZXJzX3J1bm5pbmcgPSAwOworICAvKiByZWFwIHRoZSBjaGlsZHJlbiAqLworICB3aGlsZSh3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HKSA+IDApIHsgfQorICAKKyAgLyogZmluYWxseSwgdW5saW5rIHRoZSBtbWFwZWQgZmlsZSAqLworICBtdW5tYXAoKGNhZGRyX3QpbGliX2Jhc2VfcG9pbnRlciwKKyAgICAgICAgICgobmV0bGliX2dldF9wYWdlX3NpemUoKSAqIFBBR0VTX1BFUl9DSElMRCkgKiAKKyAgICAgICAgICBsaWJfbnVtX2xvY19jcHVzKSk7CisgIHVubGluaygiL3RtcC9uZXRwZXJmX2NwdSIpOworI2VuZGlmCisgIHJldHVybjsKK30KKworaW50CitnZXRfY3B1X21ldGhvZCh2b2lkKQoreworICByZXR1cm4gTE9PUEVSOworfQorCisgLyogY2FsaWJyYXRlX2xvb3BlciAqLworCisgLyogTG9vcCBhIG51bWJlciBvZiBpdGVyYXRpb25zLCBzbGVlcGluZyBpbnRlcnZhbCBzZWNvbmRzIGVhY2ggYW5kICovCisgLyogY291bnQgaG93IGhpZ2ggdGhlIGlkbGUgY291bnRlciBnZXRzIGVhY2ggdGltZS4gUmV0dXJuICB0aGUgKi8KKyAvKiBtZWFzdXJlZCBjcHUgcmF0ZSB0byB0aGUgY2FsbGluZyByb3V0aW5lLiByYWogNC85NSAqLworCitmbG9hdAorY2FsaWJyYXRlX2lkbGVfcmF0ZSAoaW50IGl0ZXJhdGlvbnMsIGludCBpbnRlcnZhbCkKK3sKKworICB1aW50NjRfdAorICAgIGZpcnN0Y250W01BWENQVVNdLAorICAgIHNlY29uZGNudFtNQVhDUFVTXTsKKworICBmbG9hdCAKKyAgICBlbGFwc2VkLAorICAgIHRlbXBfcmF0ZSwKKyAgICByYXRlW01BWFRJTUVTXSwKKyAgICBsb2NhbF9tYXhyYXRlOworCisgIGxvbmcgIAorICAgIHNlYywKKyAgICB1c2VjOworCisgIGludCAgIAorICAgIGksCisgICAgajsKKyAgCisgIHN0cnVjdCAgdGltZXZhbCB0aW1lMSwgdGltZTIgOworICBzdHJ1Y3QgIHRpbWV6b25lIHR6OworICAKKyAgaWYgKGl0ZXJhdGlvbnMgPiBNQVhUSU1FUykgeworICAgIGl0ZXJhdGlvbnMgPSBNQVhUSU1FUzsKKyAgfQorCisgIGxvY2FsX21heHJhdGUgPSAoZmxvYXQpLTEuMDsKKyAgCisgIGZvcihpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworICAgIHJhdGVbaV0gPSAoZmxvYXQpMC4wOworICAgIGZvciAoaiA9IDA7IGogPCBsaWJfbnVtX2xvY19jcHVzOyBqKyspIHsKKyAgICAgIGZpcnN0Y250W2pdID0gKihsaWJfaWRsZV9hZGRyZXNzW2pdKTsKKyAgICB9CisgICAgZ2V0dGltZW9mZGF5ICgmdGltZTEsICZ0eik7CisgICAgc2xlZXAoaW50ZXJ2YWwpOworICAgIGdldHRpbWVvZmRheSAoJnRpbWUyLCAmdHopOworCisgICAgaWYgKHRpbWUyLnR2X3VzZWMgPCB0aW1lMS50dl91c2VjKQorICAgICAgeworICAgICAgICB0aW1lMi50dl91c2VjICs9IDEwMDAwMDA7CisgICAgICAgIHRpbWUyLnR2X3NlYyAtPTE7CisgICAgICB9CisgICAgc2VjID0gdGltZTIudHZfc2VjIC0gdGltZTEudHZfc2VjOworICAgIHVzZWMgPSB0aW1lMi50dl91c2VjIC0gdGltZTEudHZfdXNlYzsKKyAgICBlbGFwc2VkID0gKGZsb2F0KXNlYyArICgoZmxvYXQpdXNlYy8oZmxvYXQpMTAwMDAwMC4wKTsKKyAgICAKKyAgICBpZihkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwgIkNhbGlicmF0aW9uIGZvciBjb3VudGVyIHJ1bjogJWRcbiIsaSk7CisgICAgICBmcHJpbnRmKHdoZXJlLCJcdHNlYyA9ICVsZCB1c2VjID0gJWxkXG4iLHNlYyx1c2VjKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZWxhcHNlZCB0aW1lID0gJWdcbiIsZWxhcHNlZCk7CisgICAgfQorCisgICAgZm9yIChqID0gMDsgaiA8IGxpYl9udW1fbG9jX2NwdXM7IGorKykgeworICAgICAgc2Vjb25kY250W2pdID0gKihsaWJfaWRsZV9hZGRyZXNzW2pdKTsKKyAgICAgIGlmKGRlYnVnKSB7CisgICAgICAgIC8qIEkga25vdyB0aGF0IHRoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIGNvbXBpbGVycyBrbm93IGFib3V0ICovCisgICAgICAgIC8qIGxvbmcgbG9uZywgYnV0IHRoZSBsaWJyYXJ5IGZ1Y250aW9ucyBkbyBub3QuLi4gcmFqIDQvOTUgKi8KKyAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAiXHRmaXJzdGNudFslZF0gPSAweCU4LjhseCU4LjhseCBzZWNvbmRjbnRbJWRdID0gMHglOC44bHglOC44bHhcbiIsCisgICAgICAgICAgICAgICAgaiwKKyAgICAgICAgICAgICAgICAodWludDMyX3QpKGZpcnN0Y250W2pdPj4zMiksCisgICAgICAgICAgICAgICAgKHVpbnQzMl90KShmaXJzdGNudFtqXSYweGZmZmZmZmZmKSwKKyAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgICh1aW50MzJfdCkoc2Vjb25kY250W2pdPj4zMiksCisgICAgICAgICAgICAgICAgKHVpbnQzMl90KShzZWNvbmRjbnRbal0mMHhmZmZmZmZmZikpOworICAgICAgfQorICAgICAgLyogd2UgYXNzdW1lIHRoYXQgaXQgd291bGQgd3JhcCBubyBtb3JlIHRoYW4gb25jZS4gd2UgYWxzbyAqLworICAgICAgLyogYXNzdW1lIHRoYXQgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB3aWxsICJmaXQiIHJhaiA0Lzk1ICovCisgICAgICB0ZW1wX3JhdGUgPSAoc2Vjb25kY250W2pdID49IGZpcnN0Y250W2pdKSA/CisgICAgICAgIChmbG9hdCkoc2Vjb25kY250W2pdIC0gZmlyc3RjbnRbal0pL2VsYXBzZWQgOiAKKyAgICAgICAgICAoZmxvYXQpKHNlY29uZGNudFtqXS1maXJzdGNudFtqXStNQVhMT05HKS9lbGFwc2VkOworICAgICAgaWYgKHRlbXBfcmF0ZSA+IHJhdGVbaV0pIHJhdGVbaV0gPSB0ZW1wX3JhdGU7CisgICAgICBpZihkZWJ1ZykgeworICAgICAgICBmcHJpbnRmKHdoZXJlLCJcdHJhdGVbJWRdID0gJWdcbiIsaSxyYXRlW2ldKTsKKyAgICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIGlmIChsb2NhbF9tYXhyYXRlIDwgcmF0ZVtpXSkgbG9jYWxfbWF4cmF0ZSA9IHJhdGVbaV07CisgICAgfQorICB9CisgIGlmKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwiXHRsb2NhbCBtYXhyYXRlID0gJWcgcGVyIHNlYy4gXG4iLGxvY2FsX21heHJhdGUpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgcmV0dXJuIGxvY2FsX21heHJhdGU7Cit9CisKKwordm9pZAorZ2V0X2NwdV9pZGxlICh1aW50NjRfdCAqcmVzKQoreworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgbGliX251bV9sb2NfY3B1czsgaSsrKXsKKyAgICByZXNbaV0gPSAqbGliX2lkbGVfYWRkcmVzc1tpXTsKKyAgfQorCit9CisKK2Zsb2F0CitjYWxjX2NwdV91dGlsX2ludGVybmFsKGZsb2F0IGVsYXBzZWRfdGltZSkKK3sKKyAgaW50IGk7CisgIGZsb2F0IGNvcnJlY3Rpb25fZmFjdG9yOworICBmbG9hdCBhY3R1YWxfcmF0ZTsKKworICBsaWJfbG9jYWxfY3B1X3V0aWwgPSAoZmxvYXQpMC4wOworICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBsaWJyYXJ5IG1lYXN1cmVkIGEgdGltZSBvdGhlciB0aGFuICovCisgIC8qIHRoZSBvbmUgdGhhdCB0aGUgdXNlciB3YW50IGZvciB0aGUgY3B1IHV0aWxpemF0aW9uICovCisgIC8qIGNhbGN1bGF0aW9ucyAtIGZvciBleGFtcGxlLCB0ZXN0cyB0aGF0IHdlcmUgZW5kZWQgYnkgKi8KKyAgLyogd2F0Y2hkb2cgdGltZXJzIHN1Y2ggYXMgdGhlIHVkcCBzdHJlYW0gdGVzdC4gV2UgbGV0IHRoZXNlICovCisgIC8qIHRlc3RzIHRlbGwgdXAgd2hhdCB0aGUgZWxhcHNlZCB0aW1lIHNob3VsZCBiZS4gKi8KKyAgCisgIGlmIChlbGFwc2VkX3RpbWUgIT0gMC4wKSB7CisgICAgY29ycmVjdGlvbl9mYWN0b3IgPSAoZmxvYXQpIDEuMCArIAorICAgICAgKChsaWJfZWxhcHNlZCAtIGVsYXBzZWRfdGltZSkgLyBlbGFwc2VkX3RpbWUpOworICB9CisgIGVsc2UgeworICAgIGNvcnJlY3Rpb25fZmFjdG9yID0gKGZsb2F0KSAxLjA7CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbGliX251bV9sb2NfY3B1czsgaSsrKSB7CisKKyAgICAvKiBpdCB3b3VsZCBhcHBlYXIgdGhhdCBvbiBzb21lIHN5c3RlbXMsIGluIGxvb3BiYWNrLCBuaWNlIGlzCisgICAgICp2ZXJ5KiBlZmZlY3RpdmUsIGNhdXNpbmcgdGhlIGxvb3BlciBwcm9jZXNzIHRvIHN0b3AgZGVhZCBpbiBpdHMKKyAgICAgdHJhY2tzLiBpZiB0aGlzIGhhcHBlbnMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNhbGN1bGF0aW9uCisgICAgIGRvZXMgbm90IGdvIHNvdXRoLiByYWogNi85NSBhbmQgaWYgd2UgcnVuIGNvbXBsZXRlbHkgb3V0IG9mIGlkbGUsCisgICAgIHRoZSBzYW1lIHRoaW5nIGNvdWxkIGluIHRoZW9yeSBoYXBwZW4gdG8gdGhlIFVTRV9LU1RBVCBwYXRoLiByYWoKKyAgICAgOC8yMDAwICovIAorICAgIAorICAgIGlmIChsaWJfZW5kX2NvdW50W2ldID09IGxpYl9zdGFydF9jb3VudFtpXSkgeworICAgICAgbGliX2VuZF9jb3VudFtpXSsrOworICAgIH0KKyAgICAKKyAgICBhY3R1YWxfcmF0ZSA9IChsaWJfZW5kX2NvdW50W2ldID4gbGliX3N0YXJ0X2NvdW50W2ldKSA/CisgICAgICAoZmxvYXQpKGxpYl9lbmRfY291bnRbaV0gLSBsaWJfc3RhcnRfY291bnRbaV0pL2xpYl9lbGFwc2VkIDoKKyAgICAgIChmbG9hdCkobGliX2VuZF9jb3VudFtpXSAtIGxpYl9zdGFydF9jb3VudFtpXSArCisJICAgICAgTUFYTE9ORykvIGxpYl9lbGFwc2VkOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgImNhbGNfY3B1X3V0aWw6IGFjdHVhbF9yYXRlIG9uIHByb2Nlc3NvciAlZCBpcyAlZiBzdGFydCAweCU4LjhseCU4LjhseCBlbmQgMHglOC44bHglOC44bHhcbiIsCisgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgIGFjdHVhbF9yYXRlLAorICAgICAgICAgICAgICAodWludDMyX3QpKGxpYl9zdGFydF9jb3VudFtpXT4+MzIpLAorICAgICAgICAgICAgICAodWludDMyX3QpKGxpYl9zdGFydF9jb3VudFtpXSYweGZmZmZmZmZmKSwKKyAgICAgICAgICAgICAgKHVpbnQzMl90KShsaWJfZW5kX2NvdW50W2ldPj4zMiksCisgICAgICAgICAgICAgICh1aW50MzJfdCkobGliX2VuZF9jb3VudFtpXSYweGZmZmZmZmZmKSk7CisgICAgfQorICAgIGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV0gPSAobGliX2xvY2FsX21heHJhdGUgLSBhY3R1YWxfcmF0ZSkgLworICAgICAgbGliX2xvY2FsX21heHJhdGUgKiAxMDA7CisgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSAqPSBjb3JyZWN0aW9uX2ZhY3RvcjsKKyAgICBsaWJfbG9jYWxfY3B1X3V0aWwgKz0gbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXTsKKyAgfQorICAvKiB3ZSB3YW50IHRoZSBhdmVyYWdlIGFjcm9zcyBhbGwgbiBwcm9jZXNzb3JzICovCisgIGxpYl9sb2NhbF9jcHVfdXRpbCAvPSAoZmxvYXQpbGliX251bV9sb2NfY3B1czsKKyAgCisgIHJldHVybiBsaWJfbG9jYWxfY3B1X3V0aWw7Cit9CisKK3ZvaWQKK2NwdV9zdGFydF9pbnRlcm5hbCh2b2lkKQoreworICBnZXRfY3B1X2lkbGUobGliX3N0YXJ0X2NvdW50KTsKKyAgcmV0dXJuOworfQorCit2b2lkCitjcHVfc3RvcF9pbnRlcm5hbCh2b2lkKQoreworICBnZXRfY3B1X2lkbGUobGliX2VuZF9jb3VudCk7Cit9CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfbm9uZS5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFiMjQwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X25vbmUuYwpAQCAtMCwwICsxLDY3IEBACitjaGFyICAgbmV0Y3B1X25vbmVfaWRbXT0iXAorQCgjKW5ldGNwdV9ub25lLmMgKGMpIENvcHlyaWdodCAyMDA1LCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSwgVmVyc2lvbiAyLjQuMCI7CisKKyNpZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSAibmV0c2guaCIKKyNpbmNsdWRlICJuZXRsaWIuaCIKKwordm9pZAorY3B1X3V0aWxfaW5pdCh2b2lkKSAKK3sKKyAgcmV0dXJuOworfQorCit2b2lkCitjcHVfdXRpbF90ZXJtaW5hdGUodm9pZCkKK3sKKyAgcmV0dXJuOworfQorCitpbnQKK2dldF9jcHVfbWV0aG9kKHZvaWQpCit7CisgIHJldHVybiBDUFVfVU5LTk9XTjsKK30KKwordm9pZAorZ2V0X2NwdV9pZGxlKHVpbnQ2NF90ICpyZXMpCit7CisgIHJldHVybjsKK30KKworZmxvYXQKK2NhbGlicmF0ZV9pZGxlX3JhdGUoaW50IGl0ZXJhdGlvbnMsIGludCBpbnRlcnZhbCkKK3sKKyAgcmV0dXJuIDAuMDsKK30KKworZmxvYXQKK2NhbGNfY3B1X3V0aWxfaW50ZXJuYWwoZmxvYXQgZWxhcHNlZF90aW1lKQoreworICByZXR1cm4gLTEuMDsKK30KKwordm9pZAorY3B1X3N0YXJ0X2ludGVybmFsKHZvaWQpCit7CisgIHJldHVybjsKK30KKwordm9pZAorY3B1X3N0b3BfaW50ZXJuYWwodm9pZCkKK3sKKyAgcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X250cGVyZi5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X250cGVyZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmI2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfbnRwZXJmLmMKQEAgLTAsMCArMSw0ODUgQEAKK2NoYXIgICBuZXRjcHVfbnRwZXJmX2lkW109IlwKK0AoIyluZXRjcHVfbnRwZXJmLmMgKGMpIENvcHlyaWdodCAyMDA1LTIwMDcsIEhld2xldHQtUGFja2FyZCBDb21wYW55LCBWZXJzaW9uIDIuNC4zIjsKKworI2lmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKy8vIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGNvbXBpbGUgb24gV2luZG93cyAyMDAwIG9yIE5UIDQuMCB5b3UgbWF5CisvLyBuZWVkIHRvIGRlZmluZSBET05UX0lQVjYgaW4gdGhlICJzb3VyY2VzIiBmaWxlcy4KKyNpZm5kZWYgRE9OVF9JUFY2CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibmV0c2guaCIKKyNpbmNsdWRlICJuZXRsaWIuaCIKKworLy8KKy8vIFN5c3RlbSBDUFUgdGltZSBpbmZvcm1hdGlvbiBjbGFzcy4KKy8vIFVzZWQgdG8gZ2V0IENQVSB0aW1lIGluZm9ybWF0aW9uLgorLy8KKy8vICAgICBTREtcaW5jXG50ZXhhcGkuaCAKKy8vIEZ1bmN0aW9uIHg4OiAgIFN5c3RlbVByb2Nlc3NvclBlcmZvcm1hbmNlSW5mb3JtYXRpb24KKy8vIERhdGFTdHJ1Y3R1cmU6IFNZU1RFTV9QUk9DRVNTT1JfUEVSRk9STUFOQ0VfSU5GT1JNQVRJT04gCisvLworCisjZGVmaW5lIFN5c3RlbVByb2Nlc3NvclBlcmZvcm1hbmNlSW5mb3JtYXRpb24gMHgwOAorCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICAgICAgTEFSR0VfSU5URUdFUiAgIElkbGVUaW1lOworICAgICAgICBMQVJHRV9JTlRFR0VSICAgS2VybmVsVGltZTsKKyAgICAgICAgTEFSR0VfSU5URUdFUiAgIFVzZXJUaW1lOworICAgICAgICBMQVJHRV9JTlRFR0VSICAgRHBjVGltZTsKKyAgICAgICAgTEFSR0VfSU5URUdFUiAgIEludGVycnVwdFRpbWU7CisgICAgICAgIExPTkcgICAgICAgICAgICAgICAgICAgIEludGVycnVwdENvdW50OworfSBTWVNURU1fUFJPQ0VTU09SX1BFUkZPUk1BTkNFX0lORk9STUFUSU9OLCAqUFNZU1RFTV9QUk9DRVNTT1JfUEVSRk9STUFOQ0VfSU5GT1JNQVRJT047CisKKy8vCisvLyBDYWxscyB0byBnZXQgdGhlIGluZm9ybWF0aW9uCisvLwordHlwZWRlZiBVTE9ORyAoX19zdGRjYWxsICpOVF9RVUVSWV9TWVNURU1fSU5GT1JNQVRJT04pKCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9ORyBTeXN0ZW1JbmZvcm1hdGlvbkNsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVk9JRCBTeXN0ZW1JbmZvcm1hdGlvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkcgU3lzdGVtSW5mb3JtYXRpb25MZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HIFJldHVybkxlbmd0aCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCitOVF9RVUVSWV9TWVNURU1fSU5GT1JNQVRJT04gTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uID0gTlVMTDsKKworCitzdGF0aWMgTEFSR0VfSU5URUdFUiBUaWNrSHogPSB7ezAsMH19OworCitfaW5saW5lIExBUkdFX0lOVEVHRVIgUmVhZFBlcmZvcm1hbmNlQ291bnRlcihWT0lEKQoreworICAgICAgICBMQVJHRV9JTlRFR0VSIENvdW50ZXI7CisgICAgICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZDb3VudGVyKTsKKworICAgICAgICByZXR1cm4oQ291bnRlcik7Cit9ICAgICAgIC8vIFJlYWRwZXJmb3JtYW5jZUNvdW50ZXIKKworCisvKiBUaGUgTlQgcGVyZm9ybWFuY2UgZGF0YSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24KKyAgIGNhbGwuICBSZWZlcmVuY2VzIHRvIHRoZSBQREguRExMIGhhdmUgYmVlbiBkZWxldGVkLiAgVGhpcyBzdHJ1Y3R1cmUKKyAgIGlzIHRoZSByb290IGZvciB0aGVzZSBkYXRhIHN0cnVjdHVyZXMuICovCisKK3R5cGVkZWYgc3RydWN0IHNQZXJmT2JqIAoreworICAgICAgICBMQVJHRV9JTlRFR0VSICAgU3RhcnRUaW1lOworICAgICAgICBMQVJHRV9JTlRFR0VSICAgRW5kVGltZTsKKyAgICAgICAgU1lTVEVNX1BST0NFU1NPUl9QRVJGT1JNQU5DRV9JTkZPUk1BVElPTiBTdGFydEluZm9bTUFYQ1BVUyArMV07CisgICAgICAgIFNZU1RFTV9QUk9DRVNTT1JfUEVSRk9STUFOQ0VfSU5GT1JNQVRJT04gRW5kSW5mb1tNQVhDUFVTICsxXTsKK30gUGVyZk9iaiwgKlBQZXJmT2JqOworCitzdGF0aWMgUGVyZk9iaiAqUGVyZkNudHJzOworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucworCitQZXJmT2JqICpJbml0UGVyZkNudHJzKCk7Cit2b2lkIFJlc3RhcnRQZXJmQ250cnMoUGVyZk9iaiAqUGVyZkNudHJzKTsKK2RvdWJsZSBSZXBvcnRQZXJmQ250cnMoUGVyZk9iaiAqUGVyZkNudHJzKTsgIC8qIHJldHVybnMgQ1BVIHV0aWxpemF0aW9uICovCit2b2lkIENsb3NlUGVyZkNudHJzKFBlcmZPYmogKlBlcmZDbnRycyk7CisKKwordm9pZAorY3B1X3V0aWxfaW5pdCh2b2lkKSAKK3sKKyAgaWYgKE50UXVlcnlTeXN0ZW1JbmZvcm1hdGlvbiA9PSBOVUxMKSB7CisgICAgLy8gT3BlbiB0aGUgcGVyZm9ybWFuY2UgY291bnRlciBpbnRlcmZhY2UKKyAgICBQZXJmQ250cnMgPSBJbml0UGVyZkNudHJzKCk7CisgIH0KKyAgcmV0dXJuOworfQorCit2b2lkCitjcHVfdXRpbF90ZXJtaW5hdGUodm9pZCkKK3sKKyAgcmV0dXJuOworfQorCitpbnQKK2dldF9jcHVfbWV0aG9kKHZvaWQpCit7CisgIHJldHVybiBOVF9NRVRIT0Q7Cit9CisKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgICB1aW50NjRfdDsKKwordm9pZAorZ2V0X2NwdV9pZGxlKHVpbnQ2NF90ICpyZXMpCit7CisgIFJlc3RhcnRQZXJmQ250cnMoUGVyZkNudHJzKTsKKyAgcmV0dXJuOworfQorCitmbG9hdAorY2FsaWJyYXRlX2lkbGVfcmF0ZShpbnQgaXRlcmF0aW9ucywgaW50IGludGVydmFsKQoreworICByZXR1cm4gKGZsb2F0KTAuMDsKK30KKworCisvKgorICBJbml0UGVyZkNudHJzKCkgLSAKKworICBDaGFuZ2VkIHRvIG5vIGxvbmdlciBhY2Nlc3MgdGhlIE5UIHBlcmZvcm1hbmNlIHJlZ2lzdHJ5IGludGVyZmFjZXMuCisgIEEgZGlyZWN0IGNhbGwgdG8gTnRRdWVyeVN5c3RlbUluZm9ybWF0aW9uIChhbiB1bmRvY3VtZW50ZWQgTlQgQVBJKQorICBpcyBtYWRlIGluc3RlYWQuICBQYXJhbWV0ZXJzIGRldGVybWluZWQgYnkgZGVjb21waWxhdGlvbiBvZiBudGtybmxtcAorICBhbmQgbnRkbGwuCisqLworCisKK1BlcmZPYmogKkluaXRQZXJmQ250cnMoKQoreworICBQZXJmT2JqICpOZXdQZXJmQ250cnM7CisgIERXT1JEIE5UVmVyc2lvbjsKKyAgRFdPUkQgc3RhdHVzOworICBTWVNURU1fSU5GTyBTeXN0ZW1JbmZvOworCisgIEdldFN5c3RlbUluZm8oJlN5c3RlbUluZm8pOworCisgIE5ld1BlcmZDbnRycyA9IChQZXJmT2JqICopR2xvYmFsQWxsb2MoR1BUUiwgc2l6ZW9mKFBlcmZPYmopKTsKKyAgYXNzZXJ0KE5ld1BlcmZDbnRycyAhPSBOVUxMKTsKKyAgCisgIFplcm9NZW1vcnkoKFBDSEFSKU5ld1BlcmZDbnRycywgc2l6ZW9mKFBlcmZPYmopKTsKKyAgCisgIC8vIGdldCBOVCB2ZXJzaW9uCisgIE5UVmVyc2lvbiA9IEdldFZlcnNpb24oKTsKKyAgaWYgKE5UVmVyc2lvbiA+PSAweDgwMDAwMDAwKSAKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vdCBydW5uaW5nIG9uIFdpbmRvd3MgTlRcbiIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICAvLyBsb2NhdGUgdGhlIGNhbGxzIHdlIG5lZWQgaW4gTlRETEwKKyAgLy9MaW50IAorICBOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24gPSAKKyAgICAoTlRfUVVFUllfU1lTVEVNX0lORk9STUFUSU9OKUdldFByb2NBZGRyZXNzKCBHZXRNb2R1bGVIYW5kbGUoIm50ZGxsLmRsbCIpLAorCQkJCQkJICJOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24iICk7CisKKyAgaWYgKCAhKE50UXVlcnlTeXN0ZW1JbmZvcm1hdGlvbikgKQorICAgIHsKKyAgICAgIC8vTGludAorICAgICAgc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkdldFByb2NBZGRyZXNzRmFpbGVkLCBzdGF0dXM6ICVsWFxuIiwgc3RhdHVzKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgLy8gc2V0dXAgdG8gbWVhc3VyZSB0aW1lc3RhbXBzIHdpdGggdGhlIGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMuCisgIGlmIChRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZUaWNrSHopID09IEZBTFNFKQorICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCJNQUlOIC0gUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSBGYWlsZWQhXG4iKTsKKyAgICAgIGV4aXQoMik7ICAgCisgICAgfQorICAKKyAgUmVzdGFydFBlcmZDbnRycyhOZXdQZXJmQ250cnMpOworICAKKyAgcmV0dXJuKE5ld1BlcmZDbnRycyk7Cit9ICAvKiBJbml0UGVyZkNudHJzICovCisKKy8qCisgIFJlc3RhcnRQZXJmQ250cnMoKSAtCisKKyAgVGhlIFBlcmZvcm1hbmNlIGNvdW50ZXJzIG11c3QgYmUgcmVhZCB0d2ljZSB0byBwcm9kdWNlIHJhdGUgYW5kCisgIHBlcmNlbnRhZ2UgcmVzdWx0cy4gIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBzdGFydCBvZiBhCisgIGJlbmNobWFyayB0byBlc3RhYmxpc2ggdGhlIGluaXRpYWwgY291bnRlcnMuICBJdCBtdXN0IGJlIGNhbGxlZCBhCisgIHNlY29uZCB0aW1lIGFmdGVyIHRoZSBiZW5jaG1hcmsgY29tcGxldGVzIHRvIGNvbGxlY3QgdGhlIGZpbmFsIHN0YXRlCisgIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVycy4gIFJlcG9ydFBlcmZDbnRycyBpcyBjYWxsZWQgdG8gcHJpbnQgdGhlCisgIHJlc3VsdHMgYWZ0ZXIgdGhlIGJlbmNobWFyayBjb21wbGV0ZXMuCisqLworCit2b2lkIFJlc3RhcnRQZXJmQ250cnMoUGVyZk9iaiAqUGVyZkNudHJzKQoreworICBEV09SRCByZXR1cm5MZW5ndGggPSAwOyAgLy9MaW50CisgIERXT1JEIHJldHVybk51bUNQVXM7ICAvL0xpbnQKKyAgRFdPUkQgaTsKKyAgCisgIERXT1JEIHN0YXR1czsKKyAgU1lTVEVNX0lORk8gU3lzdGVtSW5mbzsKKworICBHZXRTeXN0ZW1JbmZvKCZTeXN0ZW1JbmZvKTsKKyAgCisgIC8vIE1vdmUgcHJldmlvdXMgZGF0YSBmcm9tIEVuZEluZm8gdG8gU3RhcnRJbmZvLgorICBDb3B5TWVtb3J5KChQQ0hBUikmUGVyZkNudHJzLT5TdGFydEluZm9bMF0sCisJICAgICAoUENIQVIpJlBlcmZDbnRycy0+RW5kSW5mb1swXSwKKwkgICAgIHNpemVvZihTWVNURU1fUFJPQ0VTU09SX1BFUkZPUk1BTkNFX0lORk9STUFUSU9OKSooTUFYQ1BVUyArMSkpOworICAKKyAgUGVyZkNudHJzLT5TdGFydFRpbWUgPSBQZXJmQ250cnMtPkVuZFRpbWU7CisgIAorICAvLyBnZXQgdGhlIGN1cnJlbnQgQ1BVVElNRSBpbmZvcm1hdGlvbgorICBpZiAoIChzdGF0dXMgPSBOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24oIFN5c3RlbVByb2Nlc3NvclBlcmZvcm1hbmNlSW5mb3JtYXRpb24sCisJCQkJCSAgIChQQ0hBUikmUGVyZkNudHJzLT5FbmRJbmZvWzBdLCBzaXplb2YoU1lTVEVNX1BST0NFU1NPUl9QRVJGT1JNQU5DRV9JTkZPUk1BVElPTikqTUFYQ1BVUywKKwkJCQkJICAgJnJldHVybkxlbmd0aCApKSAhPSAwKSAKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIk50UXVlcnkgZmFpbGVkLCBzdGF0dXM6ICVsWFxuIiwgc3RhdHVzKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgUGVyZkNudHJzLT5FbmRUaW1lID0gUmVhZFBlcmZvcm1hbmNlQ291bnRlcigpOworICAKKyAgLy8gVmFsaWRhdGUgdGhhdCBOdFF1ZXJ5IHJldHVybmVkIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgZGF0YQorICBpZiAoKHJldHVybkxlbmd0aCAlIHNpemVvZihTWVNURU1fUFJPQ0VTU09SX1BFUkZPUk1BTkNFX0lORk9STUFUSU9OKSkgIT0gMCkKKyAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIk50UXVlcnkgZGlkbid0IHJldHVybiBleHBlY3RlZCBhbW91bnQgb2YgZGF0YVxuIik7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkV4cGVjdGVkIGEgbXVsdGlwbGUgb2YgJWksIHJldHVybmVkICVsdVxuIiwKKwkgICAgICBzaXplb2YoU1lTVEVNX1BST0NFU1NPUl9QRVJGT1JNQU5DRV9JTkZPUk1BVElPTiksIHJldHVybkxlbmd0aCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgcmV0dXJuTnVtQ1BVcyA9IHJldHVybkxlbmd0aCAvIHNpemVvZihTWVNURU1fUFJPQ0VTU09SX1BFUkZPUk1BTkNFX0lORk9STUFUSU9OKTsgCisgIAorICBpZiAocmV0dXJuTnVtQ1BVcyAhPSAoaW50KVN5c3RlbUluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnMpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJOdFF1ZXJ5IGRpZG4ndCByZXR1cm4gZXhwZWN0ZWQgYW1vdW50IG9mIGRhdGFcbiIpOworICAgICAgZnByaW50ZihzdGRlcnIsICJFeHBlY3RlZCBkYXRhIGZvciAlaSBDUFVzLCByZXR1cm5lZCAlbHVcbiIsCisJICAgICAgKGludClTeXN0ZW1JbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzLCByZXR1cm5OdW1DUFVzKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgLy8gWmVybyBlbnRyaWVzIG5vdCByZXR1cm5lZCBieSBOdFF1ZXJ5CisgIFplcm9NZW1vcnkoKFBDSEFSKSZQZXJmQ250cnMtPkVuZEluZm9bcmV0dXJuTnVtQ1BVc10sCisJICAgICBzaXplb2YoU1lTVEVNX1BST0NFU1NPUl9QRVJGT1JNQU5DRV9JTkZPUk1BVElPTikqCisJICAgICAoTUFYQ1BVUyArMSAtIHJldHVybk51bUNQVXMpKTsKKyAgCisgIC8vIFRvdGFsIGFsbCBvZiB0aGUgQ1BVcworICAvLyAgICAgIEtlcm5lbFRpbWUgbmVlZHMgdG8gYmUgZml4ZWQtdXA7IGl0IGluY2x1ZGVzIGJvdGggaWRsZSAmCisgIC8vIHRydWUga2VybmVsIHRpbWUgCisgIC8vICBOb3RlIHRoYXQga2VybmVsIHRpbWUgYWxzbyBpbmNsdWRlcyBEcGNUaW1lICYgSW50ZXJydXB0VGltZSwgYnV0CisgIC8vIEkgbGlrZSB0aGlzLiAKKyAgZm9yIChpPTA7IGkgPCByZXR1cm5OdW1DUFVzOyBpKyspCisgICAgeworICAgICAgUGVyZkNudHJzLT5FbmRJbmZvW2ldLktlcm5lbFRpbWUuUXVhZFBhcnQgICAgICAgICAtPSBQZXJmQ250cnMtPkVuZEluZm9baV0uSWRsZVRpbWUuUXVhZFBhcnQ7CisgICAgICBQZXJmQ250cnMtPkVuZEluZm9bTUFYQ1BVU10uSWRsZVRpbWUuUXVhZFBhcnQgICAgICs9IFBlcmZDbnRycy0+RW5kSW5mb1tpXS5JZGxlVGltZS5RdWFkUGFydDsKKyAgICAgIFBlcmZDbnRycy0+RW5kSW5mb1tNQVhDUFVTXS5LZXJuZWxUaW1lLlF1YWRQYXJ0ICAgKz0gUGVyZkNudHJzLT5FbmRJbmZvW2ldLktlcm5lbFRpbWUuUXVhZFBhcnQ7CisgICAgICBQZXJmQ250cnMtPkVuZEluZm9bTUFYQ1BVU10uVXNlclRpbWUuUXVhZFBhcnQgICAgICs9IFBlcmZDbnRycy0+RW5kSW5mb1tpXS5Vc2VyVGltZS5RdWFkUGFydDsKKyAgICAgIFBlcmZDbnRycy0+RW5kSW5mb1tNQVhDUFVTXS5EcGNUaW1lLlF1YWRQYXJ0ICAgICAgKz0gUGVyZkNudHJzLT5FbmRJbmZvW2ldLkRwY1RpbWUuUXVhZFBhcnQ7CisgICAgICBQZXJmQ250cnMtPkVuZEluZm9bTUFYQ1BVU10uSW50ZXJydXB0VGltZS5RdWFkUGFydCArPSBQZXJmQ250cnMtPkVuZEluZm9baV0uSW50ZXJydXB0VGltZS5RdWFkUGFydDsKKyAgICAgIFBlcmZDbnRycy0+RW5kSW5mb1tNQVhDUFVTXS5JbnRlcnJ1cHRDb3VudCAgICAgICAgICAgICAgICArPSBQZXJmQ250cnMtPkVuZEluZm9baV0uSW50ZXJydXB0Q291bnQ7CisgICAgfQorICAKK30gICAvKiBSZXN0YXJ0UGVyZkNudHJzICovCisKKy8qCisgIFJlcG9ydFBlcmZDbnRycygpIC0KKyAgVGhpcyByb3V0aW5lIHJlcG9ydHMgdGhlIHJlc3VsdHMgb2YgdGhlIHZhcmlvdXMgcGVyZm9ybWFuY2UKKyAgY291bnRlcnMuIAorKi8KKworZG91YmxlIFJlcG9ydFBlcmZDbnRycyhQZXJmT2JqICpQZXJmQ250cnMpCit7CisgIGRvdWJsZSB0b3RfQ1BVX1V0aWw7CisgIGludCBpOworICBkb3VibGUgZHVyYXRpb247ICAvLyBpbiBtaWxsaXNlY29uZHMNCisgIAorICBMQVJHRV9JTlRFR0VSIEFjdHVhbER1cmF0aW9uOworICAKKyAgU1lTVEVNX1BST0NFU1NPUl9QRVJGT1JNQU5DRV9JTkZPUk1BVElPTiAgICAgICAgRGVsdGFJbmZvW01BWENQVVMgKzFdOyAgCisgIAorICBMQVJHRV9JTlRFR0VSICAgVG90YWxDUFVUaW1lW01BWENQVVMgKzFdOyAgICAgICAgIAorICAKKyAgU1lTVEVNX0lORk8gU3lzdGVtSW5mbzsKKworICBHZXRTeXN0ZW1JbmZvKCZTeXN0ZW1JbmZvKTsKKworICBmb3IgKGk9MDsgaSA8PSBNQVhDUFVTOyBpKyspCisgICAgeworICAgICAgRGVsdGFJbmZvW2ldLklkbGVUaW1lLlF1YWRQYXJ0ICAgID0gUGVyZkNudHJzLT5FbmRJbmZvW2ldLklkbGVUaW1lLlF1YWRQYXJ0IC0KKwlQZXJmQ250cnMtPlN0YXJ0SW5mb1tpXS5JZGxlVGltZS5RdWFkUGFydDsKKyAgICAgIERlbHRhSW5mb1tpXS5LZXJuZWxUaW1lLlF1YWRQYXJ0ICAgICAgICAgID0gUGVyZkNudHJzLT5FbmRJbmZvW2ldLktlcm5lbFRpbWUuUXVhZFBhcnQgLQorCVBlcmZDbnRycy0+U3RhcnRJbmZvW2ldLktlcm5lbFRpbWUuUXVhZFBhcnQ7CisgICAgICBEZWx0YUluZm9baV0uVXNlclRpbWUuUXVhZFBhcnQgICAgPSBQZXJmQ250cnMtPkVuZEluZm9baV0uVXNlclRpbWUuUXVhZFBhcnQgLQorCVBlcmZDbnRycy0+U3RhcnRJbmZvW2ldLlVzZXJUaW1lLlF1YWRQYXJ0OworICAgICAgRGVsdGFJbmZvW2ldLkRwY1RpbWUuUXVhZFBhcnQgICAgID0gUGVyZkNudHJzLT5FbmRJbmZvW2ldLkRwY1RpbWUuUXVhZFBhcnQgLQorCVBlcmZDbnRycy0+U3RhcnRJbmZvW2ldLkRwY1RpbWUuUXVhZFBhcnQ7CisgICAgICBEZWx0YUluZm9baV0uSW50ZXJydXB0VGltZS5RdWFkUGFydCA9IFBlcmZDbnRycy0+RW5kSW5mb1tpXS5JbnRlcnJ1cHRUaW1lLlF1YWRQYXJ0IC0KKwlQZXJmQ250cnMtPlN0YXJ0SW5mb1tpXS5JbnRlcnJ1cHRUaW1lLlF1YWRQYXJ0OworICAgICAgRGVsdGFJbmZvW2ldLkludGVycnVwdENvdW50ICAgICAgICAgICAgICAgPSBQZXJmQ250cnMtPkVuZEluZm9baV0uSW50ZXJydXB0Q291bnQgLQorCVBlcmZDbnRycy0+U3RhcnRJbmZvW2ldLkludGVycnVwdENvdW50OworICAgICAgCisgICAgICBUb3RhbENQVVRpbWVbaV0uUXVhZFBhcnQgPSAgICAgIAorCURlbHRhSW5mb1tpXS5JZGxlVGltZS5RdWFkUGFydCArCisJRGVsdGFJbmZvW2ldLktlcm5lbFRpbWUuUXVhZFBhcnQgKworCURlbHRhSW5mb1tpXS5Vc2VyVGltZS5RdWFkUGFydDsKKyAgICAgIC8vIEtlcm5lbFRpbWUgYWxyZWFkeSBpbmNsdWRlcyBEcGNUaW1lICYgSW50ZXJydXB0VGltZSEKKyAgICAgIC8vICsgRGVsdGFJbmZvW2ldLkRwY1RpbWUuUXVhZFBhcnQgICsKKyAgICAgIC8vICBEZWx0YUluZm9baV0uSW50ZXJydXB0VGltZS5RdWFkUGFydDsKKyAgICB9CisgIAorICB0b3RfQ1BVX1V0aWwgPSAxMDAuMCooMS4wIC0gKGRvdWJsZSlEZWx0YUluZm9bTUFYQ1BVU10uSWRsZVRpbWUuUXVhZFBhcnQvKGRvdWJsZSlUb3RhbENQVVRpbWVbTUFYQ1BVU10uUXVhZFBhcnQpOyAgLy9MaW50CisgIAorICAvLyBSZS1jYWxjdWxhdGUgZHVyYXRpb24sIHNpbmNlIHdlIG1heSBoYXZlIHN0b3BlZCBlYXJseSBkdWUgdG8gY250ci1DLgorICBBY3R1YWxEdXJhdGlvbi5RdWFkUGFydCA9IFBlcmZDbnRycy0+RW5kVGltZS5RdWFkUGFydCAtIAorICAgIFBlcmZDbnRycy0+U3RhcnRUaW1lLlF1YWRQYXJ0OworICAKKyAgLy8gY29udmVydCB0byAxMDAgdXNlYyAoMS8xMHRoIG1pbGxpc2Vjb25kcykgdGltZWJhc2UuDQorICBBY3R1YWxEdXJhdGlvbi5RdWFkUGFydCA9IChBY3R1YWxEdXJhdGlvbi5RdWFkUGFydCoxMDAwMCkvVGlja0h6LlF1YWRQYXJ0OworICBkdXJhdGlvbiA9IChkb3VibGUpQWN0dWFsRHVyYXRpb24uUXVhZFBhcnQvMTAuMDsgIC8vIGR1cmF0aW9uIGluIG1zDQorICAKKyAgaWYgKHZlcmJvc2l0eSA+IDEpCisgICAgeworICAgICAgZnByaW50Zih3aGVyZSwiQWN0dWFsRHVyYXRpb24gKG1zKTogJWRcbiIsIChpbnQpZHVyYXRpb24pOw0KKyAgICB9CisgIAorICBpZiAodmVyYm9zaXR5ID4gMSkKKyAgICB7CisgICAgICBmcHJpbnRmKHdoZXJlLCAiJSUgQ1BVICAgIF9Ub3RhbCIpOworICAgICAgaWYgKChpbnQpU3lzdGVtSW5mby5kd051bWJlck9mUHJvY2Vzc29ycyA+IDEpCisJeworCSAgZm9yIChpPTA7IGkgPCAoaW50KVN5c3RlbUluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7IGkrKykKKwkgICAgeworCSAgICAgIGZwcmludGYod2hlcmUsICJcdCBDUFUgJWkiLCBpKTsKKwkgICAgfQorCX0KKyAgICAgIGZwcmludGYod2hlcmUsICJcbiIpOworICAgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLCAiQnVzeSAgICAgICU1LjJmIiwgdG90X0NQVV9VdGlsKTsKKyAgICAgIGlmICgoaW50KVN5c3RlbUluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnMgPiAxKQorCXsKKwkgIGZvciAoaT0wOyBpIDwgKGludClTeXN0ZW1JbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOyBpKyspCisJICAgIHsKKwkgICAgICBmcHJpbnRmKHdoZXJlLCAiXHQgJTUuMmYiLCAKKwkJICAgICAgMTAwLjAqKDEuMCAtIChkb3VibGUpRGVsdGFJbmZvW2ldLklkbGVUaW1lLlF1YWRQYXJ0Lyhkb3VibGUpVG90YWxDUFVUaW1lW2ldLlF1YWRQYXJ0KSk7ICAvL0xpbnQKKwkgICAgfQorCX0KKyAgICAgIGZwcmludGYod2hlcmUsICJcbiIpOworICAgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLCAiS2VybmVsICAgICU1LjJmIiwgCisJICAgICAgMTAwLjAqKGRvdWJsZSlEZWx0YUluZm9bTUFYQ1BVU10uS2VybmVsVGltZS5RdWFkUGFydC8oZG91YmxlKVRvdGFsQ1BVVGltZVtNQVhDUFVTXS5RdWFkUGFydCk7ICAvL0xpbnQKKyAgICAgIAorICAgICAgaWYgKChpbnQpU3lzdGVtSW5mby5kd051bWJlck9mUHJvY2Vzc29ycyA+IDEpCisJeworCSAgZm9yIChpPTA7IGkgPCAoaW50KVN5c3RlbUluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7IGkrKykKKwkgICAgeworCSAgICAgIGZwcmludGYod2hlcmUsICJcdCAlNS4yZiIsIAorCQkgICAgICAxMDAuMCooZG91YmxlKURlbHRhSW5mb1tpXS5LZXJuZWxUaW1lLlF1YWRQYXJ0Lyhkb3VibGUpVG90YWxDUFVUaW1lW2ldLlF1YWRQYXJ0KTsgIC8vTGludAorCSAgICB9CisJfQorICAgICAgZnByaW50Zih3aGVyZSwgIlxuIik7CisgICAgICAKKyAgICAgIGZwcmludGYod2hlcmUsICJVc2VyICAgICAgJTUuMmYiLCAKKwkgICAgICAxMDAuMCooZG91YmxlKURlbHRhSW5mb1tNQVhDUFVTXS5Vc2VyVGltZS5RdWFkUGFydC8oZG91YmxlKVRvdGFsQ1BVVGltZVtNQVhDUFVTXS5RdWFkUGFydCk7CisgICAgICAKKyAgICAgIGlmICgoaW50KVN5c3RlbUluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnMgPiAxKQorCXsKKwkgIGZvciAoaT0wOyBpIDwgKGludClTeXN0ZW1JbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOyBpKyspCisJICAgIHsKKwkgICAgICBmcHJpbnRmKHdoZXJlLCAiXHQgJTUuMmYiLCAKKwkJICAgICAgMTAwLjAqKGRvdWJsZSlEZWx0YUluZm9baV0uVXNlclRpbWUuUXVhZFBhcnQvVG90YWxDUFVUaW1lW2ldLlF1YWRQYXJ0KTsgIC8vTGludAorCSAgICB9CisJfQorICAgICAgZnByaW50Zih3aGVyZSwgIlxuIik7CisgICAgICAKKyAgICAgIGZwcmludGYod2hlcmUsICJEcGMgICAgICAgJTUuMmYiLCAKKwkgICAgICAxMDAuMCooZG91YmxlKURlbHRhSW5mb1tNQVhDUFVTXS5EcGNUaW1lLlF1YWRQYXJ0Lyhkb3VibGUpVG90YWxDUFVUaW1lW01BWENQVVNdLlF1YWRQYXJ0KTsgIC8vTGludAorICAgICAgCisgICAgICBpZiAoKGludClTeXN0ZW1JbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzID4gMSkKKwl7CisJICBmb3IgKGk9MDsgaSA8IChpbnQpU3lzdGVtSW5mby5kd051bWJlck9mUHJvY2Vzc29yczsgaSsrKQorCSAgICB7CisJICAgICAgZnByaW50Zih3aGVyZSwgIlx0ICU1LjJmIiwgCisJCSAgICAgIDEwMC4wKihkb3VibGUpRGVsdGFJbmZvW2ldLkRwY1RpbWUuUXVhZFBhcnQvKGRvdWJsZSlUb3RhbENQVVRpbWVbaV0uUXVhZFBhcnQpOyAgLy9MaW50CisJICAgIH0KKwl9CisgICAgICBmcHJpbnRmKHdoZXJlLCAiXG4iKTsKKyAgICAgIAorICAgICAgZnByaW50Zih3aGVyZSwgIkludGVycnVwdCAlNS4yZiIsIAorCSAgICAgIDEwMC4wKihkb3VibGUpRGVsdGFJbmZvW01BWENQVVNdLkludGVycnVwdFRpbWUuUXVhZFBhcnQvKGRvdWJsZSlUb3RhbENQVVRpbWVbTUFYQ1BVU10uUXVhZFBhcnQpOyAgLy9MaW50CisgICAgICAKKyAgICAgIGlmICgoaW50KVN5c3RlbUluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnMgPiAxKQorCXsKKwkgIGZvciAoaT0wOyBpIDwgKGludClTeXN0ZW1JbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOyBpKyspCisJICAgIHsKKwkgICAgICBmcHJpbnRmKHdoZXJlLCAiXHQgJTUuMmYiLCAKKwkJICAgICAgMTAwLjAqKGRvdWJsZSlEZWx0YUluZm9baV0uSW50ZXJydXB0VGltZS5RdWFkUGFydC9Ub3RhbENQVVRpbWVbaV0uUXVhZFBhcnQpOyAgLy9MaW50CisJICAgIH0KKwl9CisgICAgICBmcHJpbnRmKHdoZXJlLCAiXG5cbiIpOworICAgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLCAiSW50ZXJydXB0L1NlYy4gJTUuMWYiLCAKKwkgICAgICAoZG91YmxlKURlbHRhSW5mb1tNQVhDUFVTXS5JbnRlcnJ1cHRDb3VudCoxMDAwLjAvZHVyYXRpb24pOw0KKyAgICAgIAorICAgICAgaWYgKChpbnQpU3lzdGVtSW5mby5kd051bWJlck9mUHJvY2Vzc29ycyA+IDEpCisJeworCSAgZm9yIChpPTA7IGkgPCAoaW50KVN5c3RlbUluZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7IGkrKykKKwkgICAgeworCSAgICAgIGZwcmludGYod2hlcmUsICJcdCAlNS4xZiIsIAorCQkgICAgICAoZG91YmxlKURlbHRhSW5mb1tpXS5JbnRlcnJ1cHRDb3VudCoxMDAwLjAvZHVyYXRpb24pOw0KKwkgICAgfQorCX0KKyAgICAgIGZwcmludGYod2hlcmUsICJcblxuIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgCisgIHJldHVybiAodG90X0NQVV9VdGlsKTsKKyAgCit9ICAvKiBSZXBvcnRQZXJmQ250cnMgKi8KKworLyoKKyAgQ2xvc2VQZXJmQ250cnMoKSAtICAKKworICBUaGlzIHJvdXRpbmUgY2xlYW5zIHVwIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIEFQSXMuCisqLworCit2b2lkIENsb3NlUGVyZkNudHJzKFBlcmZPYmogKlBlcmZDbnRycykKK3sKKyAgICAgICAgR2xvYmFsRnJlZShQZXJmQ250cnMpOworCisgICAgICAgIE50UXVlcnlTeXN0ZW1JbmZvcm1hdGlvbiA9IE5VTEw7Cit9ICAgLyogQ2xvc2VQZXJmQ250cnMgKi8KKwordm9pZAorY3B1X3N0YXJ0X2ludGVybmFsKHZvaWQpCit7CisgIFJlc3RhcnRQZXJmQ250cnMoUGVyZkNudHJzKTsNCit9CisKK3ZvaWQKK2NwdV9zdG9wX2ludGVybmFsKHZvaWQpCit7CisgIFJlc3RhcnRQZXJmQ250cnMoUGVyZkNudHJzKTsNCit9CisKK2Zsb2F0CitjYWxjX2NwdV91dGlsX2ludGVybmFsKGZsb2F0IGVsYXBzZWRfdGltZSkgCit7CisgIGZsb2F0IGNvcnJlY3Rpb25fZmFjdG9yOworICBsaWJfbG9jYWxfY3B1X3V0aWwgPSAoZmxvYXQpMC4wOworICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBsaWJyYXJ5IG1lYXN1cmVkIGEgdGltZSBvdGhlciB0aGFuICovCisgIC8qIHRoZSBvbmUgdGhhdCB0aGUgdXNlciB3YW50IGZvciB0aGUgY3B1IHV0aWxpemF0aW9uICovCisgIC8qIGNhbGN1bGF0aW9ucyAtIGZvciBleGFtcGxlLCB0ZXN0cyB0aGF0IHdlcmUgZW5kZWQgYnkgKi8KKyAgLyogd2F0Y2hkb2cgdGltZXJzIHN1Y2ggYXMgdGhlIHVkcCBzdHJlYW0gdGVzdC4gV2UgbGV0IHRoZXNlICovCisgIC8qIHRlc3RzIHRlbGwgdXAgd2hhdCB0aGUgZWxhcHNlZCB0aW1lIHNob3VsZCBiZS4gKi8KKyAgCisgIGlmIChlbGFwc2VkX3RpbWUgIT0gMC4wKSB7CisgICAgY29ycmVjdGlvbl9mYWN0b3IgPSAoZmxvYXQpIDEuMCArIAorICAgICAgKChsaWJfZWxhcHNlZCAtIGVsYXBzZWRfdGltZSkgLyBlbGFwc2VkX3RpbWUpOworICB9CisgIGVsc2UgeworICAgIGNvcnJlY3Rpb25fZmFjdG9yID0gKGZsb2F0KSAxLjA7CisgIH0KKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCAiY29ycmVjdGlvbiBmYWN0b3I6ICVmXG4iLCBjb3JyZWN0aW9uX2ZhY3Rvcik7CisgIH0KKworICBsaWJfbG9jYWxfY3B1X3V0aWwgPSAoZmxvYXQpUmVwb3J0UGVyZkNudHJzKFBlcmZDbnRycyk7CisgIGxpYl9sb2NhbF9jcHVfdXRpbCAqPSBjb3JyZWN0aW9uX2ZhY3RvcjsKKyAgcmV0dXJuIGxpYl9sb2NhbF9jcHVfdXRpbDsKKworfQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X29zeC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X29zeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzJiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfb3N4LmMKQEAgLTAsMCArMSwxNDkgQEAKK2NoYXIgICBuZXRjcHVfc3lzY3RsX2lkW109IlwKK0AoIyluZXRjcHVfb3N4LmMgIFZlcnNpb24gMi40LjMiOworCisjaWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERJTlRfSAorIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfTElNSVRTX0gKKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjIGlmbmRlZiBMT05HX0xPTkdfTUFYCisjICBkZWZpbmUgTE9OR19MT05HX01BWCBMTE9OR19NQVgKKyMgZW5kaWYgLyogTE9OR19MT05HX01BWCAqLworI2VuZGlmCisKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hvc3RfaW5mby5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90eXBlcy5oPgorLyogaXQgd291bGQgc2VlbSB0aGF0IG9uIDEwLjMuOSBtYWNoX21zZ190eXBlX251bWJlcl90IGlzIGluCisgICA8bWFjaC9tZXNzYWdlLmg+IHNvIHdlJ2xsIHNlZSBhYm91dCBpbmNsdWRpbmcgdGhhdCBvbmUgdG9vLgorICAgaG9wZWZ1bGx5IGl0IHN0aWxsIGV4aXN0cyBpbiAxMC40LiBpZiBub3QsIHdlIHdpbGwgbmVlZCB0byBhZGQgc29tZQorICAgLmggZmlsZSBjaGVja3MgaW4gY29uZmlndXJlIHNvIHdlIGNhbiB1c2UgIkhBVkVfbXVtYmxlIiBpZmRlZnMKKyAgIGhlcmUgKi8KKyNpbmNsdWRlIDxtYWNoL21lc3NhZ2UuaD4KKworI2luY2x1ZGUgIm5ldHNoLmgiCisjaW5jbHVkZSAibmV0bGliLmgiCisKKyNkZWZpbmUgVU5TSUdORURfRElGRkVSRU5DRSh4LHkpICh4ID49IHkgPyB4IC0geSA6ICgwIC0geSkgKyB4ICkKKworc3RhdGljIGhvc3RfY3B1X2xvYWRfaW5mb19kYXRhX3QgbGliX3N0YXJ0X3RpY2tzOworc3RhdGljIGhvc3RfY3B1X2xvYWRfaW5mb19kYXRhX3QgbGliX2VuZF90aWNrczsKKworc3RhdGljIG1hY2hfcG9ydF90IGxpYl9ob3N0X3BvcnQ7CisKK3ZvaWQKK2NwdV91dGlsX2luaXQodm9pZCkgCit7CisgIGxpYl9ob3N0X3BvcnQgPSBtYWNoX2hvc3Rfc2VsZigpOworICByZXR1cm47Cit9CisKK3ZvaWQKK2NwdV91dGlsX3Rlcm1pbmF0ZSh2b2lkKQoreworICBtYWNoX3BvcnRfZGVhbGxvY2F0ZShsaWJfaG9zdF9wb3J0KTsKKyAgcmV0dXJuOworfQorCitpbnQKK2dldF9jcHVfbWV0aG9kKHZvaWQpCit7CisgIHJldHVybiBPU1g7Cit9CisKK3ZvaWQKK2dldF9jcHVfaWRsZSh1aW50NjRfdCAqcmVzKQoreworICAgIHJldHVybjsKK30KKwordm9pZAorZ2V0X2hvc3RfdGlja3MoaG9zdF9jcHVfbG9hZF9pbmZvX3QgaW5mbykKK3sKKyAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBjb3VudDsKKworICBjb3VudCA9IEhPU1RfQ1BVX0xPQURfSU5GT19DT1VOVDsKKyAgaG9zdF9zdGF0aXN0aWNzKGxpYl9ob3N0X3BvcnQsIEhPU1RfQ1BVX0xPQURfSU5GTywgKGhvc3RfaW5mb190KWluZm8sICZjb3VudCk7CisgIHJldHVybjsKK30KKworLyogY2FsaWJyYXRlX3N5c2N0bCAgLSBwZXJmb3JtIHRoZSBpZGxlIHJhdGUgY2FsY3VsYXRpb24gdXNpbmcgdGhlCisgICBzeXNjdGwgY2FsbCAtIHR5cGljYWxseSBvbiBCU0QgKi8KKworZmxvYXQKK2NhbGlicmF0ZV9pZGxlX3JhdGUoaW50IGl0ZXJhdGlvbnMsIGludCBpbnRlcnZhbCkKK3sKKyAgICByZXR1cm4gKGZsb2F0KTAuMDsgICAKK30KKworZmxvYXQKK2NhbGNfY3B1X3V0aWxfaW50ZXJuYWwoZmxvYXQgZWxhcHNlZF90aW1lKQoreworICBmbG9hdCBjb3JyZWN0aW9uX2ZhY3RvcjsKKyAgbmF0dXJhbF90CXVzZXJ0aWNrcywgc3lzdGlja3MsIGlkbGV0aWNrcywgdG90YWx0aWNrczsKKworICBsaWJfbG9jYWxfY3B1X3V0aWwgPSAoZmxvYXQpMC4wOworICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBsaWJyYXJ5IG1lYXN1cmVkIGEgdGltZSBvdGhlciB0aGFuICovCisgIC8qIHRoZSBvbmUgdGhhdCB0aGUgdXNlciB3YW50IGZvciB0aGUgY3B1IHV0aWxpemF0aW9uICovCisgIC8qIGNhbGN1bGF0aW9ucyAtIGZvciBleGFtcGxlLCB0ZXN0cyB0aGF0IHdlcmUgZW5kZWQgYnkgKi8KKyAgLyogd2F0Y2hkb2cgdGltZXJzIHN1Y2ggYXMgdGhlIHVkcCBzdHJlYW0gdGVzdC4gV2UgbGV0IHRoZXNlICovCisgIC8qIHRlc3RzIHRlbGwgdXAgd2hhdCB0aGUgZWxhcHNlZCB0aW1lIHNob3VsZCBiZS4gKi8KKyAgCisgIGlmIChlbGFwc2VkX3RpbWUgIT0gMC4wKSB7CisgICAgY29ycmVjdGlvbl9mYWN0b3IgPSAoZmxvYXQpIDEuMCArIAorICAgICAgKChsaWJfZWxhcHNlZCAtIGVsYXBzZWRfdGltZSkgLyBlbGFwc2VkX3RpbWUpOworICB9CisgIGVsc2UgeworICAgIGNvcnJlY3Rpb25fZmFjdG9yID0gKGZsb2F0KSAxLjA7CisgIH0KKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCAiY29ycmVjdGlvbiBmYWN0b3I6ICVmXG4iLCBjb3JyZWN0aW9uX2ZhY3Rvcik7CisgIH0KKworICB1c2VydGlja3MgPSBVTlNJR05FRF9ESUZGRVJFTkNFKChsaWJfZW5kX3RpY2tzLmNwdV90aWNrc1tDUFVfU1RBVEVfVVNFUl0gKyBsaWJfZW5kX3RpY2tzLmNwdV90aWNrc1tDUFVfU1RBVEVfTklDRV0pLAorCQkJCSAgKGxpYl9zdGFydF90aWNrcy5jcHVfdGlja3NbQ1BVX1NUQVRFX1VTRVJdICsgbGliX3N0YXJ0X3RpY2tzLmNwdV90aWNrc1tDUFVfU1RBVEVfTklDRV0pKTsKKyAgc3lzdGlja3MgPSBVTlNJR05FRF9ESUZGRVJFTkNFKGxpYl9lbmRfdGlja3MuY3B1X3RpY2tzW0NQVV9TVEFURV9TWVNURU1dLCBsaWJfc3RhcnRfdGlja3MuY3B1X3RpY2tzW0NQVV9TVEFURV9TWVNURU1dKTsKKyAgaWRsZXRpY2tzID0gVU5TSUdORURfRElGRkVSRU5DRShsaWJfZW5kX3RpY2tzLmNwdV90aWNrc1tDUFVfU1RBVEVfSURMRV0sIGxpYl9zdGFydF90aWNrcy5jcHVfdGlja3NbQ1BVX1NUQVRFX0lETEVdKTsKKyAgdG90YWx0aWNrcyA9IHVzZXJ0aWNrcyArIHN5c3RpY2tzICsgaWRsZXRpY2tzOworCisgIGxpYl9sb2NhbF9jcHVfdXRpbCA9ICgoZmxvYXQpdXNlcnRpY2tzICsgKGZsb2F0KXN5c3RpY2tzKS8oZmxvYXQpdG90YWx0aWNrcyAqIDEwMC4wZjsKKyAgbGliX2xvY2FsX2NwdV91dGlsICo9IGNvcnJlY3Rpb25fZmFjdG9yOworCisgIHJldHVybiBsaWJfbG9jYWxfY3B1X3V0aWw7CisKK30KK3ZvaWQKK2NwdV9zdGFydF9pbnRlcm5hbCh2b2lkKQoreworICAgIGdldF9ob3N0X3RpY2tzKCZsaWJfc3RhcnRfdGlja3MpOworfQorCit2b2lkCitjcHVfc3RvcF9pbnRlcm5hbCh2b2lkKQoreworICAgIGdldF9ob3N0X3RpY2tzKCZsaWJfZW5kX3RpY2tzKTsKK30KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9wZXJmc3RhdC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X3BlcmZzdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyOGEyNQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9wZXJmc3RhdC5jCkBAIC0wLDAgKzEsMzUxIEBACitjaGFyICAgbmV0Y3B1X3BlcmZzdGF0X2lkW109IlwKK0AoIyluZXRjcHVfcGVyZnN0YXQuYyBWZXJzaW9uIDIuNC4wIjsKKworI2lmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2lmIEhBVkVfTElNSVRTX0gKKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjIGlmbmRlZiBMT05HX0xPTkdfTUFYCisjICBkZWZpbmUgTE9OR19MT05HX01BWCBMTE9OR19NQVgKKyMgZW5kaWYgLyogTE9OR19MT05HX01BWCAqLworI2VuZGlmIAorCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIm5ldHNoLmgiCisjaW5jbHVkZSAibmV0bGliLmgiCisKKy8qIHRoZSBsaWJfc3RhcnRfY291bnQgYW5kIGxpYl9lbmRfY291bnQgYXJyYXlzIGhvbGQgdGhlIHN0YXJ0aW5nCisgICBhbmQgZW5kaW5nIHZhbHVlcyBvZiB3aGF0ZXZlciBpcyBjb3VudGluZyB3aGVuIHRoZSBzeXN0ZW0gaXMKKyAgIGlkbGUuIFRoZSByYXRlIGF0IHdoaWNoIHRoaXMgaW5jcmVtZW50cyBkdXJpbmcgYSB0ZXN0IGlzIGNvbXBhcmVkCisgICB3aXRoIGEgcHJldmlvdXMgY2FsaWJyYXRpb24gdG8gYXJyaXZlIGF0IGEgQ1BVIHV0aWxpemF0aW9uCisgICBwZXJjZW50YWdlLiByYWogMjAwNS0wMS0yNiAqLworc3RhdGljIHVpbnQ2NF90ICBsaWJfc3RhcnRfY291bnRbTUFYQ1BVU107CitzdGF0aWMgdWludDY0X3QgIGxpYl9lbmRfY291bnRbTUFYQ1BVU107CisKKwordm9pZAorY3B1X3V0aWxfaW5pdCh2b2lkKSAKK3sKKyAgcmV0dXJuOworfQorCit2b2lkCitjcHVfdXRpbF90ZXJtaW5hdGUodm9pZCkKK3sKKyAgcmV0dXJuOworfQorCitpbnQKK2dldF9jcHVfbWV0aG9kKHZvaWQpCit7CisgIHJldHVybiBQRVJGU1RBVDsKK30KKwordm9pZAorZ2V0X2NwdV9pZGxlKHVpbnQ2NF90ICpyZXMpCit7CisgIHBlcmZzdGF0X2NwdV90ICpwZXJmc3RhdF9idWZmZXI7CisgIHBlcmZzdGF0X2NwdV90ICpwZXJfY3B1X3BvaW50ZXI7CisgIHBlcmZzdGF0X2lkX3QgIG5hbWU7CisgIGludCBpLHJldDsKKyAgCisgIC8qIGEgbmFtZSBvZiAiIiB3aWxsIGNhdXNlIHVzIHRvIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZyAqLworICBzdHJjcHkobmFtZS5uYW1lLCIiKTsKKyAgcGVyZnN0YXRfYnVmZmVyID0gKHBlcmZzdGF0X2NwdV90ICopbWFsbG9jKGxpYl9udW1fbG9jX2NwdXMgKgorCQkJCQkgICAgIHNpemVvZihwZXJmc3RhdF9jcHVfdCkpOworICBpZiAocGVyZnN0YXRfYnVmZmVyID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiY3B1X3N0YXJ0OiBtYWxsb2MgZmFpbGVkIGVycm5vICVkXG4iLAorCSAgICBlcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KC0xKTsKKyAgfQorICAKKyAgLyogaGFwcGluZXNzIGFuZCBqb3ksIGtlZXAgZ29pbmcgKi8KKyAgcmV0ID0gcGVyZnN0YXRfY3B1KCZuYW1lLAorCQkgICAgIHBlcmZzdGF0X2J1ZmZlciwKKwkJICAgICBzaXplb2YocGVyZnN0YXRfY3B1X3QpLAorCQkgICAgIGxpYl9udW1fbG9jX2NwdXMpOworICAKKyAgaWYgKChyZXQgPT0gLTEpIHx8IAorICAgICAgKHJldCAhPSBsaWJfbnVtX2xvY19jcHVzKSkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJjcHVfc3RhcnQ6IHBlcmZzdGF0X2NwdSBmYWlsZWQvY291bnQgb2ZmOyBlcnJubyAlZCBjcHVzICVkIGNvdW50ICVkXG4iLAorCSAgICBlcnJubywKKwkgICAgbGliX251bV9sb2NfY3B1cywKKwkgICAgcmV0KTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoLTEpOworICB9CisgIAorICBwZXJfY3B1X3BvaW50ZXIgPSBwZXJmc3RhdF9idWZmZXI7CisgIGZvciAoaSA9IDA7IGkgPCBsaWJfbnVtX2xvY19jcHVzOyBpKyspeworICAgIHJlc1tpXSA9IHBlcl9jcHVfcG9pbnRlci0+aWRsZTsKKyAgICBwZXJfY3B1X3BvaW50ZXIrKzsKKyAgfQorICBmcmVlKHBlcmZzdGF0X2J1ZmZlcik7CisgIAorICByZXR1cm47Cit9CisKK2Zsb2F0CitjYWxpYnJhdGVfaWRsZV9yYXRlKGludCBpdGVyYXRpb25zLCBpbnQgaW50ZXJ2YWwpCit7CisgIHVuc2lnbmVkIGxvbmcgbG9uZworICAgIGZpcnN0Y250W01BWENQVVNdLAorICAgIHNlY29uZGNudFtNQVhDUFVTXTsKKworICBmbG9hdCAKKyAgICBlbGFwc2VkLAorICAgIHRlbXBfcmF0ZSwKKyAgICByYXRlW01BWFRJTUVTXSwKKyAgICBsb2NhbF9tYXhyYXRlOworCisgIGxvbmcgIAorICAgIHNlYywKKyAgICB1c2VjOworCisgIGludCAgIAorICAgIGksCisgICAgajsKKyAgCisgIHN0cnVjdCAgdGltZXZhbCB0aW1lMSwgdGltZTIgOworICBzdHJ1Y3QgIHRpbWV6b25lIHR6OworCisgIHBlcmZzdGF0X2NwdV90ICAqcGVyZnN0YXRfYnVmZmVyOworICBwZXJmc3RhdF9jcHVfdCAgKnBlcl9jcHVfcG9pbnRlcjsKKyAgcGVyZnN0YXRfaWRfdCAgIG5hbWU7CisgIGludCByZXQ7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJlbnRlciBjYWxpYnJhdGVfcGVyZnN0YXRcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBpZiAoaXRlcmF0aW9ucyA+IE1BWFRJTUVTKSB7CisgICAgaXRlcmF0aW9ucyA9IE1BWFRJTUVTOworICB9CisKKyAgbG9jYWxfbWF4cmF0ZSA9IChmbG9hdCktMS4wOworICAKKyAgcGVyZnN0YXRfYnVmZmVyID0gKHBlcmZzdGF0X2NwdV90ICopbWFsbG9jKGxpYl9udW1fbG9jX2NwdXMgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBlcmZzdGF0X2NwdV90KSk7CisgIGlmIChwZXJmc3RhdF9idWZmZXIgPT0gTlVMTCkgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiY2FsaWJyYXRlX3BlcmZzdGF0OiBtYWxsb2MgZmFpbGVkIGVycm5vICVkXG4iLAorICAgICAgICAgICAgZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgtMSk7CisgIH0KKworICBmb3IoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICByYXRlW2ldID0gKGZsb2F0KTAuMDsKKyAgICAvKiBhIG5hbWUgb2YgIiIgd2lsbCBjYXVzZSB1cyB0byBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgKi8KKyAgICBzdHJjcHkobmFtZS5uYW1lLCIiKTsKKyAgICAgCisgICAgLyogaGFwcGluZXNzIGFuZCBqb3ksIGtlZXAgZ29pbmcgKi8KKyAgICByZXQgPSBwZXJmc3RhdF9jcHUoJm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHBlcmZzdGF0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBlcmZzdGF0X2NwdV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgbGliX251bV9sb2NfY3B1cyk7CisgICAgCisgICAgaWYgKChyZXQgPT0gLTEpIHx8IAorICAgICAgICAocmV0ICE9IGxpYl9udW1fbG9jX2NwdXMpKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAiY2FsaWJyYXRlX3BlcmZzdGF0OiBwZXJmc3RhdF9jcHUgZmFpbGVkL2NvdW50IG9mZjsgZXJybm8gJWQgY3B1cyAlZCBjb3VudCAlZFxuIiwKKyAgICAgICAgICAgICAgZXJybm8sCisgICAgICAgICAgICAgIGxpYl9udW1fbG9jX2NwdXMsCisgICAgICAgICAgICAgIHJldCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgtMSk7CisgICAgfQorCisgICAgcGVyX2NwdV9wb2ludGVyID0gcGVyZnN0YXRfYnVmZmVyOworICAgIGZvciAoaiA9IDA7IGogPCBsaWJfbnVtX2xvY19jcHVzOyBqKyspIHsKKyAgICAgIGZpcnN0Y250W2pdID0gcGVyX2NwdV9wb2ludGVyLT5pZGxlOworICAgICAgcGVyX2NwdV9wb2ludGVyKys7CisgICAgfQorICAgIGdldHRpbWVvZmRheSAoJnRpbWUxLCAmdHopOworICAgIHNsZWVwKGludGVydmFsKTsKKyAgICBnZXR0aW1lb2ZkYXkgKCZ0aW1lMiwgJnR6KTsKKworICAgIGlmICh0aW1lMi50dl91c2VjIDwgdGltZTEudHZfdXNlYykKKyAgICAgIHsKKyAgICAgICAgdGltZTIudHZfdXNlYyArPSAxMDAwMDAwOworICAgICAgICB0aW1lMi50dl9zZWMgLT0xOworICAgICAgfQorICAgIHNlYyA9IHRpbWUyLnR2X3NlYyAtIHRpbWUxLnR2X3NlYzsKKyAgICB1c2VjID0gdGltZTIudHZfdXNlYyAtIHRpbWUxLnR2X3VzZWM7CisgICAgZWxhcHNlZCA9IChmbG9hdClzZWMgKyAoKGZsb2F0KXVzZWMvKGZsb2F0KTEwMDAwMDAuMCk7CisKKyAgICAvKiBoYXBwaW5lc3MgYW5kIGpveSwga2VlcCBnb2luZyAqLworICAgIHJldCA9IHBlcmZzdGF0X2NwdSgmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGVyZnN0YXRfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocGVyZnN0YXRfY3B1X3QpLAorICAgICAgICAgICAgICAgICAgICAgICBsaWJfbnVtX2xvY19jcHVzKTsKKyAgICAKKyAgICBpZiAoKHJldCA9PSAtMSkgfHwgCisgICAgICAgIChyZXQgIT0gbGliX251bV9sb2NfY3B1cykpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICJjYWxpYnJhdGVfcGVyZnN0YXQ6IHBlcmZzdGF0X2NwdSBmYWlsZWQvY291bnQgb2ZmOyBlcnJubyAlZCBjcHVzICVkIGNvdW50ICVkXG4iLAorICAgICAgICAgICAgICBlcnJubywKKyAgICAgICAgICAgICAgbGliX251bV9sb2NfY3B1cywKKyAgICAgICAgICAgICAgcmV0KTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KC0xKTsKKyAgICB9CisKKyAgICBwZXJfY3B1X3BvaW50ZXIgPSBwZXJmc3RhdF9idWZmZXI7CisgICAgCisgICAgaWYoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsICJDYWxpYnJhdGlvbiBmb3IgcGVyZnN0YXQgY291bnRlciBydW46ICVkXG4iLGkpOworICAgICAgZnByaW50Zih3aGVyZSwiXHRzZWMgPSAlbGQgdXNlYyA9ICVsZFxuIixzZWMsdXNlYyk7CisgICAgICBmcHJpbnRmKHdoZXJlLCJcdGVsYXBzZWQgdGltZSA9ICVnXG4iLGVsYXBzZWQpOworICAgIH0KKworICAgIGZvciAoaiA9IDA7IGogPCBsaWJfbnVtX2xvY19jcHVzOyBqKyspIHsKKyAgICAgIHNlY29uZGNudFtqXSA9IHBlcl9jcHVfcG9pbnRlci0+aWRsZTsKKyAgICAgIHBlcl9jcHVfcG9pbnRlcisrOworICAgICAgaWYoZGVidWcpIHsKKyAgICAgICAgLyogSSBrbm93IHRoYXQgdGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgY29tcGlsZXJzIGtub3cgYWJvdXQgKi8KKyAgICAgICAgLyogbG9uZyBsb25nLCBidXQgdGhlIGxpYnJhcnkgZnVuY3Rpb25zIGRvIG5vdC4uLiByYWogNC85NSAqLworICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICJcdGZpcnN0Y250WyVkXSA9IDB4JTguOGx4JTguOGx4IHNlY29uZGNudFslZF0gPSAweCU4LjhseCU4LjhseFxuIiwKKyAgICAgICAgICAgICAgICBqLAorICAgICAgICAgICAgICAgIGZpcnN0Y250W2pdLAorICAgICAgICAgICAgICAgIGZpcnN0Y250W2pdLAorICAgICAgICAgICAgICAgIGosCisgICAgICAgICAgICAgICAgc2Vjb25kY250W2pdLAorICAgICAgICAgICAgICAgIHNlY29uZGNudFtqXSk7CisgICAgICB9CisgICAgICAvKiB3ZSBhc3N1bWUgdGhhdCBpdCB3b3VsZCB3cmFwIG5vIG1vcmUgdGhhbiBvbmNlLiB3ZSBhbHNvICovCisgICAgICAvKiBhc3N1bWUgdGhhdCB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIHdpbGwgImZpdCIgcmFqIDQvOTUgKi8KKyAgICAgIHRlbXBfcmF0ZSA9IChzZWNvbmRjbnRbal0gPj0gZmlyc3RjbnRbal0pID8KKyAgICAgICAgKGZsb2F0KShzZWNvbmRjbnRbal0gLSBmaXJzdGNudFtqXSkvZWxhcHNlZCA6IAorICAgICAgICAgIChmbG9hdCkoc2Vjb25kY250W2pdLWZpcnN0Y250W2pdK01BWExPTkcpL2VsYXBzZWQ7CisgICAgICBpZiAodGVtcF9yYXRlID4gcmF0ZVtpXSkgcmF0ZVtpXSA9IHRlbXBfcmF0ZTsKKyAgICAgIGlmKGRlYnVnKSB7CisgICAgICAgIGZwcmludGYod2hlcmUsIlx0cmF0ZVslZF0gPSAlZ1xuIixpLHJhdGVbaV0pOworICAgICAgICBmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgaWYgKGxvY2FsX21heHJhdGUgPCByYXRlW2ldKSBsb2NhbF9tYXhyYXRlID0gcmF0ZVtpXTsKKyAgICB9CisgIH0KKyAgaWYoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJcdGxvY2FsIG1heHJhdGUgPSAlZyBwZXIgc2VjLiBcbiIsbG9jYWxfbWF4cmF0ZSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICBmcmVlKHBlcmZzdGF0X2J1ZmZlcik7CisgIHJldHVybiBsb2NhbF9tYXhyYXRlOworfQorCitmbG9hdAorY2FsY19jcHVfdXRpbF9pbnRlcm5hbChmbG9hdCBlbGFwc2VkX3RpbWUpCit7CisgIGludCBpOworCisgIGZsb2F0IGFjdHVhbF9yYXRlOworICBmbG9hdCBjb3JyZWN0aW9uX2ZhY3RvcjsKKworICBsaWJfbG9jYWxfY3B1X3V0aWwgPSAoZmxvYXQpMC4wOworICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBsaWJyYXJ5IG1lYXN1cmVkIGEgdGltZSBvdGhlciB0aGFuICovCisgIC8qIHRoZSBvbmUgdGhhdCB0aGUgdXNlciB3YW50IGZvciB0aGUgY3B1IHV0aWxpemF0aW9uICovCisgIC8qIGNhbGN1bGF0aW9ucyAtIGZvciBleGFtcGxlLCB0ZXN0cyB0aGF0IHdlcmUgZW5kZWQgYnkgKi8KKyAgLyogd2F0Y2hkb2cgdGltZXJzIHN1Y2ggYXMgdGhlIHVkcCBzdHJlYW0gdGVzdC4gV2UgbGV0IHRoZXNlICovCisgIC8qIHRlc3RzIHRlbGwgdXAgd2hhdCB0aGUgZWxhcHNlZCB0aW1lIHNob3VsZCBiZS4gKi8KKworICBpZiAoZWxhcHNlZF90aW1lICE9IDAuMCkgeworICAgIGNvcnJlY3Rpb25fZmFjdG9yID0gKGZsb2F0KSAxLjAgKworICAgICAgKChsaWJfZWxhcHNlZCAtIGVsYXBzZWRfdGltZSkgLyBlbGFwc2VkX3RpbWUpOworICB9CisgIGVsc2UgeworICAgIGNvcnJlY3Rpb25fZmFjdG9yID0gKGZsb2F0KSAxLjA7CisgIH0KKworICAvKiB0aGlzIGxvb2tzIGp1c3QgbGlrZSB0aGUgbG9vcGVyIGNhc2UuIGF0IGxlYXN0IEkgdGhpbmsgaXQgKi8KKyAgLyogc2hvdWxkIDopIHJhaiA0Lzk1ICovCisgIGZvciAoaSA9IDA7IGkgPCBsaWJfbnVtX2xvY19jcHVzOyBpKyspIHsKKworICAgIC8qIHdlIGFzc3VtZSB0aGF0IHRoZSB0d28gYXJlIG5vdCBtb3JlIHRoYW4gYSBsb25nIGFwYXJ0LiBJICovCisgICAgLyoga25vdyB0aGF0IHRoaXMgaXMgYmFkLCBidXQgdHJ5aW5nIHRvIGdvIGZyb20gbG9uZyBsb25ncyB0byAqLworICAgIC8qIGEgZmxvYXQgKHBlcmhhcHMgYSBkb3VibGUpIGlzIGJvZ2dsaW5nIG15IG1pbmQgcmlnaHQgbm93LiAqLworICAgIC8qIHJhaiA0Lzk1ICovCisKKyAgICBsb25nIGxvbmcKKyAgICAgIGRpZmY7CisKKyAgICBpZiAobGliX2VuZF9jb3VudFtpXSA+PSBsaWJfc3RhcnRfY291bnRbaV0pIHsKKyAgICAgIGRpZmYgPSBsaWJfZW5kX2NvdW50W2ldIC0gbGliX3N0YXJ0X2NvdW50W2ldOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGRpZmYgPSBsaWJfZW5kX2NvdW50W2ldIC0gbGliX3N0YXJ0X2NvdW50W2ldICsgTE9OR19MT05HX01BWDsKKyAgICB9CisgICAgYWN0dWFsX3JhdGUgPSAoZmxvYXQpIGRpZmYgLyBsaWJfZWxhcHNlZDsKKyAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldID0gKGxpYl9sb2NhbF9tYXhyYXRlIC0gYWN0dWFsX3JhdGUpIC8KKyAgICAgIGxpYl9sb2NhbF9tYXhyYXRlICogMTAwOworICAgIGxpYl9sb2NhbF9jcHVfdXRpbCArPSBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgImNhbGNfY3B1X3V0aWw6IGFjdHVhbF9yYXRlIG9uIGNwdSAlZCBpcyAlZyBtYXhfcmF0ZSAlZyBjcHUgJTYuMmZcbiIsCisgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgIGFjdHVhbF9yYXRlLAorICAgICAgICAgICAgICBsaWJfbG9jYWxfbWF4cmF0ZSwKKyAgICAgICAgICAgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSk7CisgICAgfQorICB9CisKKyAgLyogd2Ugd2FudCB0aGUgYXZlcmFnZSBhY3Jvc3MgYWxsIG4gcHJvY2Vzc29ycyAqLworICBsaWJfbG9jYWxfY3B1X3V0aWwgLz0gKGZsb2F0KWxpYl9udW1fbG9jX2NwdXM7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgImNhbGNfY3B1X3V0aWw6IGF2ZXJhZ2UgYWNyb3NzIENQVXMgaXMgJWdcbiIsbGliX2xvY2FsX2NwdV91dGlsKTsKKyAgfQorCisgIGxpYl9sb2NhbF9jcHVfdXRpbCAqPSBjb3JyZWN0aW9uX2ZhY3RvcjsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgImNhbGNfY3B1X3V0aWw6IHJldHVybmluZyAlZ1xuIixsaWJfbG9jYWxfY3B1X3V0aWwpOworICB9CisKKyAgcmV0dXJuIGxpYl9sb2NhbF9jcHVfdXRpbDsKKworfQordm9pZAorY3B1X3N0YXJ0X2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHVfaWRsZShsaWJfc3RhcnRfY291bnQpOworICByZXR1cm47Cit9CisgCit2b2lkCitjcHVfc3RvcF9pbnRlcm5hbCh2b2lkKQoreworICBnZXRfY3B1X2lkbGUobGliX2VuZF9jb3VudCk7Cit9CisKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9wcm9jc3RhdC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X3Byb2NzdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ1OWE4YwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9wcm9jc3RhdC5jCkBAIC0wLDAgKzEsMzUzIEBACitjaGFyICAgbmV0Y3B1X3Byb2NzdGF0X2lkW109IlwKK0AoIyluZXRjcHVfcHJvY3N0YXQuYyAoYykgQ29weXJpZ2h0IDIwMDUtMjAwNyBWZXJzaW9uIDIuNC4zIjsKKworLyogbmV0Y3B1X3Byb2NzdGF0LmMKKyAgCisgICBJbXBsZW1lbnQgdGhlIC9wcm9jL3N0YXQgc3BlY2lmaWMgcG9ydGlvbnMgb2YgbmV0cGVyZiBDUFUKKyAgIHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cy4gVGhlc2UgYXJlIGJyb2tlbi1vdXQgaW50byBhIHNlcGFyYXRlIGZpbGUKKyAgIHRvIG1ha2UgbGlmZSBtdWNoIG5pY2VyIG92ZXIgaW4gbmV0bGliLmMgd2hpY2ggaGFkIGJlY29tZSBhIG1hemUgb2YKKyAgIHR3aXN0eSwgQ1BVLXV0aWwtcmVsYXRlZCwgI2lmZGVmcywgYWxsIGRpZmZlcmVudC4gIHJhaiAyMDA1LTAxLTI2CisgICAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgSEFWRV9GQ05UTF9ICisjIGluY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm5ldHNoLmgiCisjaW5jbHVkZSAibmV0bGliLmgiCisKKy8qIHRoZSBsaWJfc3RhcnRfY291bnQgYW5kIGxpYl9lbmRfY291bnQgYXJyYXlzIGhvbGQgdGhlIHN0YXJ0aW5nCisgICBhbmQgZW5kaW5nIHZhbHVlcyBvZiB3aGF0ZXZlciBpcyBjb3VudGluZyB3aGVuIHRoZSBzeXN0ZW0gaXMKKyAgIGlkbGUuIFRoZSByYXRlIGF0IHdoaWNoIHRoaXMgaW5jcmVtZW50cyBkdXJpbmcgYSB0ZXN0IGlzIGNvbXBhcmVkCisgICB3aXRoIGEgcHJldmlvdXMgY2FsaWJyYXJpb24gdG8gYXJyaXZlIGF0IGEgQ1BVIHV0aWxpemF0aW9uCisgICBwZXJjZW50YWdlLiByYWogMjAwNS0wMS0yNiAqLworCisjZGVmaW5lIElETEVfSURYIDQKKyNkZWZpbmUgQ1BVX1NUQVRFUyA5CisKK3R5cGVkZWYgc3RydWN0IGNwdV9zdGF0ZXMKK3sKKyAgdWludDY0X3QgICAgIAl1c2VyOworICB1aW50NjRfdCAgICAgCW5pY2U7CisgIHVpbnQ2NF90ICAgICAJc3lzOworICB1aW50NjRfdCAgICAgCWlkbGU7CisgIHVpbnQ2NF90ICAgICAJaW93YWl0OworICB1aW50NjRfdCAgICAgCWhhcmRfaXJxOworICB1aW50NjRfdCAgICAgCXNvZnRfaXJxOworICB1aW50NjRfdCAgICAgCXN0ZWFsOworICB1aW50NjRfdCAgICAgCWd1ZXN0OyAgCit9IGNwdV9zdGF0ZXNfdDsKKworc3RhdGljIGNwdV9zdGF0ZXNfdCAgbGliX3N0YXJ0X2NvdW50W01BWENQVVNdOworc3RhdGljIGNwdV9zdGF0ZXNfdCAgbGliX2VuZF9jb3VudFtNQVhDUFVTXTsKKworCisvKiBUaGUgbWF4LiBsZW5ndGggb2Ygb25lIGxpbmUgb2YgL3Byb2Mvc3RhdCBjcHUgb3V0cHV0ICovCisjZGVmaW5lIENQVV9MSU5FX0xFTkdUSCAoKENQVV9TVEFURVMgKiBzaXplb2YgKGxvbmcpIC8gMyArIDEpICogNCArIDgpCisjZGVmaW5lIFBST0NfU1RBVF9GSUxFX05BTUUgIi9wcm9jL3N0YXQiCisjZGVmaW5lIE5fQ1BVX0xJTkVTKG5yKSAobnIgPT0gMSA/IDEgOiAxICsgbnIpCisKK3N0YXRpYyBpbnQgcHJvY19zdGF0X2ZkID0gLTE7CitzdGF0aWMgY2hhciAqcHJvY19zdGF0X2J1ZiA9IE5VTEw7CitzdGF0aWMgaW50IHByb2Nfc3RhdF9idWZsZW4gPSAwOworCit2b2lkCitjcHVfdXRpbF9pbml0KHZvaWQpIAoreworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJjcHVfdXRpbF9pbml0IGVudGVyLCBwcm9jX3N0YXRfZmQgJWQgcHJvY19zdGF0X2J1ZiAlcFxuIiwKKwkgICAgcHJvY19zdGF0X2ZkLAorCSAgICBwcm9jX3N0YXRfYnVmKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIGlmIChwcm9jX3N0YXRfZmQgPCAwKSB7CisgICAgcHJvY19zdGF0X2ZkID0gb3BlbiAoUFJPQ19TVEFUX0ZJTEVfTkFNRSwgT19SRE9OTFksIE5VTEwpOworICAgIGlmIChwcm9jX3N0YXRfZmQgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDYW5ub3Qgb3BlbiAlcyFcbiIsIFBST0NfU1RBVF9GSUxFX05BTUUpOworICAgICAgZXhpdCAoMSk7CisgICAgfTsKKyAgfTsKKworICBpZiAoIXByb2Nfc3RhdF9idWYpIHsKKyAgICBwcm9jX3N0YXRfYnVmbGVuID0gTl9DUFVfTElORVMgKGxpYl9udW1fbG9jX2NwdXMpICogQ1BVX0xJTkVfTEVOR1RIOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibGliX251bV9sb2NfY3B1cyAlZCBsaW5lcyAlZCBDUFVfTElORV9MRU5HVEggJWQgcHJvY19zdGF0X2J1ZmxlbiAlZFxuIiwKKwkgICAgICBsaWJfbnVtX2xvY19jcHVzLAorCSAgICAgIE5fQ1BVX0xJTkVTKGxpYl9udW1fbG9jX2NwdXMpLAorCSAgICAgIENQVV9MSU5FX0xFTkdUSCwKKwkgICAgICBwcm9jX3N0YXRfYnVmbGVuKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIHByb2Nfc3RhdF9idWYgPSAoY2hhciAqKW1hbGxvYyAocHJvY19zdGF0X2J1Zmxlbik7CisgICAgaWYgKCFwcm9jX3N0YXRfYnVmKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDYW5ub3QgYWxsb2NhdGUgYnVmZmVyIG1lbW9yeSFcbiIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorICB9CisgIHJldHVybjsKK30KKwordm9pZAorY3B1X3V0aWxfdGVybWluYXRlKHZvaWQpCit7CisgIGNsb3NlKHByb2Nfc3RhdF9mZCk7CisgIHByb2Nfc3RhdF9mZCA9IC0xOworICBmcmVlKHByb2Nfc3RhdF9idWYpOworICBwcm9jX3N0YXRfYnVmID0gTlVMTDsKKyAgcmV0dXJuOworfQorCitpbnQKK2dldF9jcHVfbWV0aG9kKCkKK3sKKyAgcmV0dXJuIFBST0NfU1RBVDsKK30KKworZmxvYXQKK2NhbGlicmF0ZV9pZGxlX3JhdGUgKGludCBpdGVyYXRpb25zLCBpbnQgaW50ZXJ2YWwpCit7CisgIGlmIChwcm9jX3N0YXRfZmQgPCAwKSB7CisgICAgcHJvY19zdGF0X2ZkID0gb3BlbiAoUFJPQ19TVEFUX0ZJTEVfTkFNRSwgT19SRE9OTFksIE5VTEwpOworICAgIGlmIChwcm9jX3N0YXRfZmQgPCAwKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDYW5ub3Qgb3BlbiAlcyFcbiIsIFBST0NfU1RBVF9GSUxFX05BTUUpOworICAgICAgZXhpdCAoMSk7CisgICAgfTsKKyAgfTsKKworICBpZiAoIXByb2Nfc3RhdF9idWYpIHsKKyAgICBwcm9jX3N0YXRfYnVmbGVuID0gTl9DUFVfTElORVMgKGxpYl9udW1fbG9jX2NwdXMpICogQ1BVX0xJTkVfTEVOR1RIOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiY2FsaWJyYXRlOiBsaWJfbnVtX2xvY19jcHVzICVkIGxpbmVzICVkIENQVV9MSU5FX0xFTkdUSCAlZCBwcm9jX3N0YXRfYnVmbGVuICVkXG4iLAorCSAgICAgIGxpYl9udW1fbG9jX2NwdXMsCisJICAgICAgTl9DUFVfTElORVMobGliX251bV9sb2NfY3B1cyksCisJICAgICAgQ1BVX0xJTkVfTEVOR1RILAorCSAgICAgIHByb2Nfc3RhdF9idWZsZW4pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgcHJvY19zdGF0X2J1ZiA9IChjaGFyICopbWFsbG9jIChwcm9jX3N0YXRfYnVmbGVuKTsKKyAgICBpZiAoIXByb2Nfc3RhdF9idWYpIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIkNhbm5vdCBhbGxvY2F0ZSBidWZmZXIgbWVtb3J5IVxuIik7CisgICAgICBleGl0ICgxKTsKKyAgICB9OworICB9OworCisgIHJldHVybiBzeXNjb25mIChfU0NfQ0xLX1RDSyk7Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfY3B1IChjcHVfc3RhdGVzX3QgKnJlcykKK3sKKyAgaW50IHNwYWNlOworICBpbnQgaTsKKyAgaW50IG4gPSBsaWJfbnVtX2xvY19jcHVzOworICBjaGFyICpwID0gcHJvY19zdGF0X2J1ZjsKKworICBsc2VlayAocHJvY19zdGF0X2ZkLCAwLCBTRUVLX1NFVCk7CisgIHJlYWQgKHByb2Nfc3RhdF9mZCwgcCwgcHJvY19zdGF0X2J1Zmxlbik7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicHJvY19zdGF0X2J1ZiAnJS4qcydcbiIscHJvY19zdGF0X2J1ZmxlbixwKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIC8qIFNraXAgZmlyc3QgbGluZSAodG90YWwpIG9uIFNNUCAqLworICBpZiAobiA+IDEpIHAgPSBzdHJjaHIgKHAsICdcbicpOworCisgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBtZW1zZXQoJnJlc1tpXSwgMCwgc2l6ZW9mICgmcmVzW2ldKSk7CisgICAgcCA9IHN0cmNociAocCwgJyAnKTsKKyAgICBzc2NhbmYocCwgIiVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1IiwKKwkgICAodW5zaWduZWQgbG9uZyBsb25nICopJnJlc1tpXS51c2VyLAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcgKikmcmVzW2ldLm5pY2UsCisJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZyZXNbaV0uc3lzLAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcgKikmcmVzW2ldLmlkbGUsCisJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZyZXNbaV0uaW93YWl0LAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcgKikmcmVzW2ldLmhhcmRfaXJxLAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcgKikmcmVzW2ldLnNvZnRfaXJxLAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcgKikmcmVzW2ldLnN0ZWFsLAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcgKikmcmVzW2ldLmd1ZXN0KTsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInJlc1slZF0gaXMgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHVcbiIsCisgICAgICAgICAgIGksCisJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXNbaV0udXNlciwKKwkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlc1tpXS5uaWNlLAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzW2ldLnN5cywKKwkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlc1tpXS5pZGxlLAorCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzW2ldLmlvd2FpdCwKKwkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlc1tpXS5oYXJkX2lycSwKKwkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlc1tpXS5zb2Z0X2lycSwKKwkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlc1tpXS5zdGVhbCwKKwkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlc1tpXS5ndWVzdCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICBwID0gc3RyY2hyIChwLCAnXG4nKTsKKyAgfTsKKworfQorCisvKiB0YWtlIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBhbmQgc3RhcnQgY29sbGVjdGluZyBDUFUgdXRpbGl6YXRpb24gaWYKKyAgIHJlcXVlc3RlZCAqLworCit2b2lkCittZWFzdXJlX2NwdV9zdGFydCgpCit7CisgIGNwdV9tZXRob2QgPSBQUk9DX1NUQVQ7CisgIGdldF9jcHUobGliX3N0YXJ0X2NvdW50KTsKK30KKworLyogY29sbGVjdCBmaW5hbCBDUFUgdXRpbGl6YXRpb24gcmF3IGRhdGEgKi8KK3ZvaWQKK21lYXN1cmVfY3B1X3N0b3AoKQoreworICBnZXRfY3B1KGxpYl9lbmRfY291bnQpOworfQorCitzdGF0aWMgdWludDY0X3QKK3RpY2tfc3VidHJhY3QodWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCkKK3sKKyAgdWludDY0X3QgcmV0OworCisgIGlmIChlbmQgPj0gc3RhcnQgfHwgKHN0YXJ0ICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSkKKyAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KTsKKworICAvKiAKKyAgICogIFdlIHdyYXBwZWQsIGFuZCBpdCBpcyBsaWtlbHkgdGhhdCB0aGUga2VybmVsIGlzIHN1cHBsaW5nIDMyLWJpdAorICAgKiAgY291bnRlcnMsIGJlY2F1c2UgInN0YXJ0IiBpcyBsZXNzIHRoYW4gMzItYml0cyB3aWRlLiAgSWYgdGhhdCdzCisgICAqICB0aGUgY2FzZSwgdGhlbiBoYW5kbGUgdGhlIHdyYXAgYnkgc3VidHJhY3Rpbmcgb2ZmIGV2ZXJ5dGhpbmcgYnV0CisgICAqICB0aGUgbG93ZXIgMzItYml0cyBzbyBhcyB0byBnZXQgYmFjayB0byB1bnNpZ25lZCAzMi1iaXQKKyAgICogIGFyaXRobWV0aWMuCisgICAqLworICByZXR1cm4gKGVuZCAtIHN0YXJ0ICsgIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCk7Cit9CisKK2Zsb2F0CitjYWxjX2NwdV91dGlsX2ludGVybmFsKGZsb2F0IGVsYXBzZWRfdGltZSkKK3sKKyAgaW50IGksIGo7CisKKyAgZmxvYXQgY29ycmVjdGlvbl9mYWN0b3I7CisgIGNwdV9zdGF0ZXNfdCBkaWZmOworICB1aW50NjRfdCB0b3RhbF90aWNrczsKKworICBsaWJfbG9jYWxfY3B1X3V0aWwgPSAoZmxvYXQpMC4wOworCisgIC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGxpYnJhcnkgbWVhc3VyZWQgYSB0aW1lIG90aGVyIHRoYW4gdGhlCisgICAgIG9uZSB0aGF0IHRoZSB1c2VyIHdhbnQgZm9yIHRoZSBjcHUgdXRpbGl6YXRpb24gY2FsY3VsYXRpb25zIC0gZm9yCisgICAgIGV4YW1wbGUsIHRlc3RzIHRoYXQgd2VyZSBlbmRlZCBieSB3YXRjaGRvZyB0aW1lcnMgc3VjaCBhcyB0aGUgdWRwCisgICAgIHN0cmVhbSB0ZXN0LiBXZSBsZXQgdGhlc2UgdGVzdHMgdGVsbCB1cCB3aGF0IHRoZSBlbGFwc2VkIHRpbWUKKyAgICAgc2hvdWxkIGJlLiAqLworICAKKyAgaWYgKGVsYXBzZWRfdGltZSAhPSAwLjApIHsKKyAgICBjb3JyZWN0aW9uX2ZhY3RvciA9IChmbG9hdCkgMS4wICsgCisgICAgICAoKGxpYl9lbGFwc2VkIC0gZWxhcHNlZF90aW1lKSAvIGVsYXBzZWRfdGltZSk7CisgIH0KKyAgZWxzZSB7CisgICAgY29ycmVjdGlvbl9mYWN0b3IgPSAoZmxvYXQpIDEuMDsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJsaWJfbG9jYWxfbWF4cmF0ZSA9ICVmXG4iLCBsaWJfbG9jYWxfbWF4cmF0ZSk7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IGxpYl9udW1fbG9jX2NwdXM7IGkrKykgeworCisgICAgLyogaXQgd291bGQgYXBwZWFyIHRoYXQgb24gc29tZSBzeXN0ZW1zLCBpbiBsb29wYmFjaywgbmljZSBpcworICAgICAqdmVyeSogZWZmZWN0aXZlLCBjYXVzaW5nIHRoZSBsb29wZXIgcHJvY2VzcyB0byBzdG9wIGRlYWQgaW4gaXRzCisgICAgIHRyYWNrcy4gaWYgdGhpcyBoYXBwZW5zLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjYWxjdWxhdGlvbgorICAgICBkb2VzIG5vdCBnbyBzb3V0aC4gcmFqIDYvOTUgYW5kIGlmIHdlIHJ1biBjb21wbGV0ZWx5IG91dCBvZiBpZGxlLAorICAgICB0aGUgc2FtZSB0aGluZyBjb3VsZCBpbiB0aGVvcnkgaGFwcGVuIHRvIHRoZSBVU0VfS1NUQVQgcGF0aC4gcmFqCisgICAgIDgvMjAwMCAqLyAKKworICAgIC8qIEZpbmQgdGhlIGRpZmZlcmVuY2UgaW4gYWxsIENQVSBzdGF0IGZpZWxkcyAqLworICAgIGRpZmYudXNlciA9IAorICAgICAgdGlja19zdWJ0cmFjdChsaWJfc3RhcnRfY291bnRbaV0udXNlciwgbGliX2VuZF9jb3VudFtpXS51c2VyKTsKKyAgICBkaWZmLm5pY2UgPSAKKyAgICAgIHRpY2tfc3VidHJhY3QobGliX3N0YXJ0X2NvdW50W2ldLm5pY2UsIGxpYl9lbmRfY291bnRbaV0ubmljZSk7CisgICAgZGlmZi5zeXMgPQorICAgICAgdGlja19zdWJ0cmFjdChsaWJfc3RhcnRfY291bnRbaV0uc3lzLCBsaWJfZW5kX2NvdW50W2ldLnN5cyk7CisgICAgZGlmZi5pZGxlID0KKyAgICAgIHRpY2tfc3VidHJhY3QobGliX3N0YXJ0X2NvdW50W2ldLmlkbGUsIGxpYl9lbmRfY291bnRbaV0uaWRsZSk7CisgICAgZGlmZi5pb3dhaXQgPQorICAgICAgdGlja19zdWJ0cmFjdChsaWJfc3RhcnRfY291bnRbaV0uaW93YWl0LCBsaWJfZW5kX2NvdW50W2ldLmlvd2FpdCk7CisgICAgZGlmZi5oYXJkX2lycSA9CisgICAgICB0aWNrX3N1YnRyYWN0KGxpYl9zdGFydF9jb3VudFtpXS5oYXJkX2lycSwgbGliX2VuZF9jb3VudFtpXS5oYXJkX2lycSk7CisgICAgZGlmZi5zb2Z0X2lycSA9CisgICAgICB0aWNrX3N1YnRyYWN0KGxpYl9zdGFydF9jb3VudFtpXS5zb2Z0X2lycSwgbGliX2VuZF9jb3VudFtpXS5zb2Z0X2lycSk7CisgICAgZGlmZi5zdGVhbCA9CisgICAgICB0aWNrX3N1YnRyYWN0KGxpYl9zdGFydF9jb3VudFtpXS5zdGVhbCwgbGliX2VuZF9jb3VudFtpXS5zdGVhbCk7CisgICAgZGlmZi5ndWVzdCA9CisgICAgICB0aWNrX3N1YnRyYWN0KGxpYl9zdGFydF9jb3VudFtpXS5ndWVzdCwgbGliX2VuZF9jb3VudFtpXS5ndWVzdCk7CisgICAgdG90YWxfdGlja3MgPSBkaWZmLnVzZXIgKyBkaWZmLm5pY2UgKyBkaWZmLnN5cyArIGRpZmYuaWRsZSArIGRpZmYuaW93YWl0IAorICAgICAgKyBkaWZmLmhhcmRfaXJxICsgZGlmZi5zb2Z0X2lycSArIGRpZmYuc3RlYWwgKyBkaWZmLmd1ZXN0OworCisgICAgLyogY2FsY3VsYXRlIGlkbGUgdGltZSBhcyBhIHBlcmNlbnRhZ2Ugb2YgYWxsIENQVSBzdGF0ZXMgKi8KKyAgICBpZiAodG90YWxfdGlja3MgPT0gMCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJUb3RhbCB0aWNrcyAwIG9uIENQVSAlZCwgY2hhcmdpbmcgbm90aGluZyFcbiIsIGkpOworICAgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA9IDEwMC4wOworICAgIH0gZWxzZSB7CisgICAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldID0gMTAwLjAgKiAKKwkoKGZsb2F0KSBkaWZmLmlkbGUgLyAoZmxvYXQpIHRvdGFsX3RpY2tzKTsKKyAgICB9CisgICAgLyogaW52ZXJ0IHBlcmNlbnRhZ2UgdG8gcmVmbGVjdCBub24taWRsZSB0aW1lICovCisgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA9IDEwMC4wIC0gbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXTsKKworICAgIC8qIGFwcGx5IGNvcnJlY3Rpb24gZmFjdG9yICovCisgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSAqPSBjb3JyZWN0aW9uX2ZhY3RvcjsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICJjYWxjX2NwdV91dGlsOiB1dGlsIG9uIHByb2Nlc3NvciAlZCwgZGlmZiA9ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1IHV0aWwgJWYgY2YgJWZcbiIsCisgICAgICAgICAgICAgIGksCisJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkaWZmLnVzZXIsCisJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkaWZmLm5pY2UsCisJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkaWZmLnN5cywKKwkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpZmYuaWRsZSwKKwkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpZmYuaW93YWl0LAorCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGlmZi5oYXJkX2lycSwKKwkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpZmYuc29mdF9pcnEsCisJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkaWZmLnN0ZWFsLAorCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGlmZi5ndWVzdCwKKwkgICAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldLAorCSAgICAgIGNvcnJlY3Rpb25fZmFjdG9yKTsKKyAgICB9CisgICAgbGliX2xvY2FsX2NwdV91dGlsICs9IGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV07CisgIH0KKyAgLyogd2Ugd2FudCB0aGUgYXZlcmFnZSBhY3Jvc3MgYWxsIG4gcHJvY2Vzc29ycyAqLworICBsaWJfbG9jYWxfY3B1X3V0aWwgLz0gKGZsb2F0KWxpYl9udW1fbG9jX2NwdXM7CisgIAorICByZXR1cm4gbGliX2xvY2FsX2NwdV91dGlsOworfQorCit2b2lkCitjcHVfc3RhcnRfaW50ZXJuYWwodm9pZCkKK3sKKyAgZ2V0X2NwdShsaWJfc3RhcnRfY291bnQpOworICByZXR1cm47Cit9CisKK3ZvaWQKK2NwdV9zdG9wX2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHUobGliX2VuZF9jb3VudCk7Cit9CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfcHN0YXQuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9wc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0M2Y4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfcHN0YXQuYwpAQCAtMCwwICsxLDMwMiBAQAorY2hhciAgIG5ldGNwdV9wc3RhdF9pZFtdPSJcCitAKCMpbmV0Y3B1X3BzdGF0LmMgKGMpIENvcHlyaWdodCAyMDA1LCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSwgVmVyc2lvbiAyLjQuMCI7CisKKyNpZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9MSU1JVFNfSAorIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZiAKKworI2luY2x1ZGUgPHN5cy9kay5oPgorI2luY2x1ZGUgPHN5cy9wc3RhdC5oPgorCisjaWZuZGVmIFBTVEFUX0lQQ0lORk8KKyMgZXJyb3IgU29ycnksIHBzdGF0KCkgQ1BVIHV0aWxpemF0aW9uIG9uIDEwLjAgYW5kIGxhdGVyIG9ubHkKKyNlbmRpZgorCisjaW5jbHVkZSAibmV0c2guaCIKKyNpbmNsdWRlICJuZXRsaWIuaCIKKworLyogdGhlIGxpYl9zdGFydF9jb3VudCBhbmQgbGliX2VuZF9jb3VudCBhcnJheXMgaG9sZCB0aGUgc3RhcnRpbmcKKyAgIGFuZCBlbmRpbmcgdmFsdWVzIG9mIHdoYXRldmVyIGlzIGNvdW50aW5nIHdoZW4gdGhlIHN5c3RlbSBpcworICAgaWRsZS4gVGhlIHJhdGUgYXQgd2hpY2ggdGhpcyBpbmNyZW1lbnRzIGR1cmluZyBhIHRlc3QgaXMgY29tcGFyZWQKKyAgIHdpdGggYSBwcmV2aW91cyBjYWxpYnJhcmlvbiB0byBhcnJpdmUgYXQgYSBDUFUgdXRpbGl6YXRpb24KKyAgIHBlcmNlbnRhZ2UuIHJhaiAyMDA1LTAxLTI2ICovCitzdGF0aWMgdWludDY0X3QgIGxpYl9zdGFydF9jb3VudFtNQVhDUFVTXTsKK3N0YXRpYyB1aW50NjRfdCAgbGliX2VuZF9jb3VudFtNQVhDUFVTXTsKKwordm9pZAorY3B1X3V0aWxfaW5pdCh2b2lkKSAKK3sKKyAgcmV0dXJuOworfQorCit2b2lkCitjcHVfdXRpbF90ZXJtaW5hdGUodm9pZCkKK3sKKyAgcmV0dXJuOworfQorCitpbnQKK2dldF9jcHVfbWV0aG9kKHZvaWQpCit7CisgIHJldHVybiBIUF9JRExFX0NPVU5URVI7Cit9CisKK3ZvaWQKK2dldF9jcHVfaWRsZSh1aW50NjRfdCAqcmVzKQoreworICAgICAgLyogZ2V0IHRoZSBpZGxlIHN5Y2xlIGNvdW50ZXIgZm9yIGVhY2ggcHJvY2Vzc29yICovCisgICAgICBzdHJ1Y3QgcHN0X3Byb2Nlc3NvciAqcHNwOworICAgICAgdW5pb24gb3ZlcmxheV91IHsKKyAgICAgICAgbG9uZyBsb25nIGZ1bGw7CisgICAgICAgIGxvbmcgICAgICB3b3JkWzJdOworICAgICAgfSAqb3ZlcmxheTsKKyAgICAgIAorICAgICAgcHNwID0gKHN0cnVjdCBwc3RfcHJvY2Vzc29yICopbWFsbG9jKGxpYl9udW1fbG9jX2NwdXMgKiBzaXplb2YoKnBzcCkpOworICAgICAgaWYgKHBzcCA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZigibWFsbG9jKCVkKSBmYWlsZWQhXG4iLCBsaWJfbnVtX2xvY19jcHVzICogc2l6ZW9mKCpwc3ApKTsKKyAgICAgICAgZXhpdCgxKTsKKwkgIH0KKyAgICAgIGlmIChwc3RhdF9nZXRwcm9jZXNzb3IocHNwLCBzaXplb2YoKnBzcCksIGxpYl9udW1fbG9jX2NwdXMsIDApICE9IC0xKSB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGliX251bV9sb2NfY3B1czsgaSsrKSB7CisgICAgICAgICAgb3ZlcmxheSA9ICh1bmlvbiBvdmVybGF5X3UgKikmKHJlc1tpXSk7CisgICAgICAgICAgb3ZlcmxheS0+d29yZFswXSA9IHBzcFtpXS5wc3BfaWRsZWN5Y2xlcy5wc2NfaGk7CisgICAgICAgICAgb3ZlcmxheS0+d29yZFsxXSA9IHBzcFtpXS5wc3BfaWRsZWN5Y2xlcy5wc2NfbG87CisgICAgICAgICAgaWYoZGVidWcpIHsKKyAgICAgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgICAgICJcdHJlc1slZF0gPSAweCU4Ljh4JTguOHhcbiIsCisgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgIGhpXzMyKCZyZXNbaV0pLAorICAgICAgICAgICAgICAgICAgICBsb18zMigmcmVzW2ldKSk7CisgICAgICAgICAgICBmZmx1c2god2hlcmUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcmVlKHBzcCk7CisgICAgICB9Cit9CisKKy8qIGNhbGlicmF0ZV9wc3RhdAorICAgTG9vcCBhIG51bWJlciBvZiBpdGVyYXRpb25zLCBzbGVlcGluZyB3YWl0X3RpbWUgc2Vjb25kcyBlYWNoIGFuZAorICAgY291bnQgaG93IGhpZ2ggdGhlIGlkbGUgY291bnRlciBnZXRzIGVhY2ggdGltZS4gUmV0dXJuICB0aGUgbWVhc3VyZWQKKyAgIGNwdSByYXRlIHRvIHRoZSBjYWxsaW5nIHJvdXRpbmUuICAqLworCitmbG9hdAorY2FsaWJyYXRlX2lkbGVfcmF0ZShpbnQgaXRlcmF0aW9ucywgaW50IGludGVydmFsKQoreworCisgIHVpbnQ2NF90CisgICAgZmlyc3RjbnRbTUFYQ1BVU10sCisgICAgc2Vjb25kY250W01BWENQVVNdOworCisgIGZsb2F0IAorICAgIGVsYXBzZWQsIAorICAgIHRlbXBfcmF0ZSwKKyAgICByYXRlW01BWFRJTUVTXSwKKyAgICBsb2NhbF9tYXhyYXRlOworCisgIGxvbmcgIAorICAgIHNlYywKKyAgICB1c2VjOworCisgIGludCAgIAorICAgIGksCisgICAgajsKKyAgCisgIGxvbmcgIGNvdW50OworCisgIHN0cnVjdCAgdGltZXZhbCB0aW1lMSwgdGltZTI7CisgIHN0cnVjdCAgdGltZXpvbmUgdHo7CisKKyAgc3RydWN0IHBzdF9wcm9jZXNzb3IgKnBzcDsKKyAgCisgIGlmIChpdGVyYXRpb25zID4gTUFYVElNRVMpIHsKKyAgICBpdGVyYXRpb25zID0gTUFYVElNRVM7CisgIH0KKyAgCisgIGxvY2FsX21heHJhdGUgPSAtMS4wOworCisgIHBzcCA9IChzdHJ1Y3QgcHN0X3Byb2Nlc3NvciAqKW1hbGxvYyhsaWJfbnVtX2xvY19jcHVzICogc2l6ZW9mKCpwc3ApKTsKKyAgaWYgKHBzcCA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIGxpYl9udW1fbG9jX2NwdXMgKiBzaXplb2YoKnBzcCkpOworICAgIGV4aXQoMSk7CisgIH0KKworICBmb3IoaSA9IDA7IGkgPCBpdGVyYXRpb25zOyBpKyspIHsKKyAgICByYXRlW2ldID0gMC4wOworICAgIC8qIGdldCB0aGUgaWRsZSBzeWNsZSBjb3VudGVyIGZvciBlYWNoIHByb2Nlc3NvciAqLworICAgIGlmIChwc3RhdF9nZXRwcm9jZXNzb3IocHNwLCBzaXplb2YoKnBzcCksIGxpYl9udW1fbG9jX2NwdXMsIDApICE9IC0xKSB7CisgICAgICBmb3IgKGogPSAwOyBqIDwgbGliX251bV9sb2NfY3B1czsgaisrKSB7CisgICAgICAgIHVuaW9uIG92ZXJsYXlfdSB7CisgICAgICAgICAgbG9uZyBsb25nIGZ1bGw7CisgICAgICAgICAgbG9uZyAgICAgIHdvcmRbMl07CisgICAgICAgIH0gKm92ZXJsYXk7CisgICAgICAgIG92ZXJsYXkgPSAodW5pb24gb3ZlcmxheV91ICopJihmaXJzdGNudFtqXSk7CisgICAgICAgIG92ZXJsYXktPndvcmRbMF0gPSBwc3Bbal0ucHNwX2lkbGVjeWNsZXMucHNjX2hpOworICAgICAgICBvdmVybGF5LT53b3JkWzFdID0gcHNwW2pdLnBzcF9pZGxlY3ljbGVzLnBzY19sbzsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJwc3RhdF9nZXRwcm9jZXNzb3IgZmFpbHVyZSBlcnJubyAlZFxuIixlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBnZXR0aW1lb2ZkYXkgKCZ0aW1lMSwgJnR6KTsKKyAgICBzbGVlcChpbnRlcnZhbCk7CisgICAgZ2V0dGltZW9mZGF5ICgmdGltZTIsICZ0eik7CisgICAgCisgICAgaWYgKHRpbWUyLnR2X3VzZWMgPCB0aW1lMS50dl91c2VjKQorICAgICAgeworICAgICAgICB0aW1lMi50dl91c2VjICs9IDEwMDAwMDA7CisgICAgICAgIHRpbWUyLnR2X3NlYyAtPTE7CisgICAgICB9CisgICAgc2VjID0gdGltZTIudHZfc2VjIC0gdGltZTEudHZfc2VjOworICAgIHVzZWMgPSB0aW1lMi50dl91c2VjIC0gdGltZTEudHZfdXNlYzsKKyAgICBlbGFwc2VkID0gKGZsb2F0KXNlYyArICgoZmxvYXQpdXNlYy8oZmxvYXQpMTAwMDAwMC4wKTsKKworICAgIGlmKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCAiQ2FsaWJyYXRpb24gZm9yIGNvdW50ZXIgcnVuOiAlZFxuIixpKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0c2VjID0gJWxkIHVzZWMgPSAlbGRcbiIsc2VjLHVzZWMpOworICAgICAgZnByaW50Zih3aGVyZSwiXHRlbGFwc2VkIHRpbWUgPSAlZ1xuIixlbGFwc2VkKTsKKyAgICB9CisKKyAgICBpZiAocHN0YXRfZ2V0cHJvY2Vzc29yKHBzcCwgc2l6ZW9mKCpwc3ApLCBsaWJfbnVtX2xvY19jcHVzLCAwKSAhPSAtMSkgeworICAgICAgZm9yIChqID0gMDsgaiA8IGxpYl9udW1fbG9jX2NwdXM7IGorKykgeworICAgICAgICB1bmlvbiBvdmVybGF5X3UgeworICAgICAgICAgIGxvbmcgbG9uZyBmdWxsOworICAgICAgICAgIGxvbmcgICAgICB3b3JkWzJdOworICAgICAgICB9ICpvdmVybGF5OworICAgICAgICBvdmVybGF5ID0gKHVuaW9uIG92ZXJsYXlfdSAqKSYoc2Vjb25kY250W2pdKTsKKyAgICAgICAgb3ZlcmxheS0+d29yZFswXSA9IHBzcFtqXS5wc3BfaWRsZWN5Y2xlcy5wc2NfaGk7CisgICAgICAgIG92ZXJsYXktPndvcmRbMV0gPSBwc3Bbal0ucHNwX2lkbGVjeWNsZXMucHNjX2xvOworICAgICAgICBpZihkZWJ1ZykgeworICAgICAgICAgIC8qIEkga25vdyB0aGF0IHRoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIGNvbXBpbGVycyBrbm93IGFib3V0ICovCisgICAgICAgICAgLyogbG9uZyBsb25nLCBidXQgdGhlIGxpYnJhcnkgZnVjbnRpb25zIGRvIG5vdC4uLiByYWogNC85NSAqLworICAgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgICAiXHRmaXJzdGNudFslZF0gPSAweCU4Ljh4JTguOHggc2Vjb25kY250WyVkXSA9IDB4JTguOHglOC44eFxuIiwKKyAgICAgICAgICAgICAgICAgIGosCisgICAgICAgICAgICAgICAgICBoaV8zMigmZmlyc3RjbnRbal0pLAorICAgICAgICAgICAgICAgICAgbG9fMzIoJmZpcnN0Y250W2pdKSwKKyAgICAgICAgICAgICAgICAgIGosCisgICAgICAgICAgICAgICAgICBoaV8zMigmc2Vjb25kY250W2pdKSwKKyAgICAgICAgICAgICAgICAgIGxvXzMyKCZzZWNvbmRjbnRbal0pKTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wX3JhdGUgPSAoc2Vjb25kY250W2pdID49IGZpcnN0Y250W2pdKSA/IAorICAgICAgICAgIChmbG9hdCkoc2Vjb25kY250W2pdIC0gZmlyc3RjbnRbal0gKS9lbGFwc2VkIDogCisgICAgICAgICAgICAoZmxvYXQpKHNlY29uZGNudFtqXSAtIGZpcnN0Y250W2pdICsgTE9OR19MT05HX01BWCkvZWxhcHNlZDsKKyAgICAgICAgaWYgKHRlbXBfcmF0ZSA+IHJhdGVbaV0pIHJhdGVbaV0gPSB0ZW1wX3JhdGU7CisgICAgICAgIGlmKGRlYnVnKSB7CisgICAgICAgICAgZnByaW50Zih3aGVyZSwiXHRyYXRlWyVkXSA9ICVnXG4iLGkscmF0ZVtpXSk7CisgICAgICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxfbWF4cmF0ZSA8IHJhdGVbaV0pIGxvY2FsX21heHJhdGUgPSByYXRlW2ldOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZwcmludGYod2hlcmUsInBzdGF0IGZhaWx1cmU7IGVycm5vICVkXG4iLGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgfQorICBpZihkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIlx0bG9jYWwgbWF4cmF0ZSA9ICVnIHBlciBzZWMuIFxuIixsb2NhbF9tYXhyYXRlKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIHJldHVybiBsb2NhbF9tYXhyYXRlOworCit9CisKK2Zsb2F0CitjYWxjX2NwdV91dGlsX2ludGVybmFsKGZsb2F0IGVsYXBzZWRfdGltZSkKK3sKKyAgaW50IGk7CisKKyAgZmxvYXQgYWN0dWFsX3JhdGU7CisgIGZsb2F0IGNvcnJlY3Rpb25fZmFjdG9yOworCisgIGxpYl9sb2NhbF9jcHVfdXRpbCA9IChmbG9hdCkwLjA7CisgIC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGxpYnJhcnkgbWVhc3VyZWQgYSB0aW1lIG90aGVyIHRoYW4gKi8KKyAgLyogdGhlIG9uZSB0aGF0IHRoZSB1c2VyIHdhbnQgZm9yIHRoZSBjcHUgdXRpbGl6YXRpb24gKi8KKyAgLyogY2FsY3VsYXRpb25zIC0gZm9yIGV4YW1wbGUsIHRlc3RzIHRoYXQgd2VyZSBlbmRlZCBieSAqLworICAvKiB3YXRjaGRvZyB0aW1lcnMgc3VjaCBhcyB0aGUgdWRwIHN0cmVhbSB0ZXN0LiBXZSBsZXQgdGhlc2UgKi8KKyAgLyogdGVzdHMgdGVsbCB1cCB3aGF0IHRoZSBlbGFwc2VkIHRpbWUgc2hvdWxkIGJlLiAqLworICAKKyAgaWYgKGVsYXBzZWRfdGltZSAhPSAwLjApIHsKKyAgICBjb3JyZWN0aW9uX2ZhY3RvciA9IChmbG9hdCkgMS4wICsgCisgICAgICAoKGxpYl9lbGFwc2VkIC0gZWxhcHNlZF90aW1lKSAvIGVsYXBzZWRfdGltZSk7CisgIH0KKyAgZWxzZSB7CisgICAgY29ycmVjdGlvbl9mYWN0b3IgPSAoZmxvYXQpIDEuMDsKKyAgfQorCisgIC8qIHRoaXMgbG9va3MganVzdCBsaWtlIHRoZSBsb29wZXIgY2FzZS4gYXQgbGVhc3QgSSB0aGluayBpdCAqLworICAvKiBzaG91bGQgOikgcmFqIDQvOTUgKi8KKyAgZm9yIChpID0gMDsgaSA8IGxpYl9udW1fbG9jX2NwdXM7IGkrKykgeworICAgIAorICAgIC8qIHdlIGFzc3VtZSB0aGF0IHRoZSB0d28gYXJlIG5vdCBtb3JlIHRoYW4gYSBsb25nIGFwYXJ0LiBJICovCisgICAgLyoga25vdyB0aGF0IHRoaXMgaXMgYmFkLCBidXQgdHJ5aW5nIHRvIGdvIGZyb20gbG9uZyBsb25ncyB0byAqLworICAgIC8qIGEgZmxvYXQgKHBlcmhhcHMgYSBkb3VibGUpIGlzIGJvZ2dsaW5nIG15IG1pbmQgcmlnaHQgbm93LiAqLworICAgIC8qIHJhaiA0Lzk1ICovCisgICAgCisgICAgbG9uZyBsb25nIAorICAgICAgZGlmZjsKKyAgICAKKyAgICBpZiAobGliX2VuZF9jb3VudFtpXSA+PSBsaWJfc3RhcnRfY291bnRbaV0pIHsKKyAgICAgIGRpZmYgPSBsaWJfZW5kX2NvdW50W2ldIC0gbGliX3N0YXJ0X2NvdW50W2ldOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGRpZmYgPSBsaWJfZW5kX2NvdW50W2ldIC0gbGliX3N0YXJ0X2NvdW50W2ldICsgTE9OR19MT05HX01BWDsKKyAgICB9CisgICAgYWN0dWFsX3JhdGUgPSAoZmxvYXQpIGRpZmYgLyBsaWJfZWxhcHNlZDsKKyAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldID0gKGxpYl9sb2NhbF9tYXhyYXRlIC0gYWN0dWFsX3JhdGUpIC8KKyAgICAgIGxpYl9sb2NhbF9tYXhyYXRlICogMTAwOworICAgIGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV0gKj0gY29ycmVjdGlvbl9mYWN0b3I7CisgICAgbGliX2xvY2FsX2NwdV91dGlsICs9IGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV07CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJjYWxjX2NwdV91dGlsOiBhY3R1YWxfcmF0ZSBvbiBjcHUgJWQgaXMgJWcgbWF4X3JhdGUgJWcgY3B1ICU2LjJmIGNmICVmXG4iLAorCSAgICAgIGksCisJICAgICAgYWN0dWFsX3JhdGUsCisJICAgICAgbGliX2xvY2FsX21heHJhdGUsCisJICAgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSwKKwkgICAgICBjb3JyZWN0aW9uX2ZhY3Rvcik7CisgICAgfQorICB9CisgIAorICAvKiB3ZSB3YW50IHRoZSBhdmVyYWdlIGFjcm9zcyBhbGwgbiBwcm9jZXNzb3JzICovCisgIGxpYl9sb2NhbF9jcHVfdXRpbCAvPSAoZmxvYXQpbGliX251bV9sb2NfY3B1czsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJjYWxjX2NwdV91dGlsOiBhdmVyYWdlIGFjcm9zcyBDUFVzIGlzICVnXG4iLGxpYl9sb2NhbF9jcHVfdXRpbCk7CisgIH0KKworICByZXR1cm4gbGliX2xvY2FsX2NwdV91dGlsOworCit9Cit2b2lkCitjcHVfc3RhcnRfaW50ZXJuYWwodm9pZCkKK3sKKyAgZ2V0X2NwdV9pZGxlKGxpYl9zdGFydF9jb3VudCk7CisgIHJldHVybjsKK30KKwordm9pZAorY3B1X3N0b3BfaW50ZXJuYWwodm9pZCkKK3sKKyAgZ2V0X2NwdV9pZGxlKGxpYl9lbmRfY291bnQpOworfQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X3BzdGF0bmV3LmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRjcHVfcHN0YXRuZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQyYmFhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X3BzdGF0bmV3LmMKQEAgLTAsMCArMSwzOTggQEAKK2NoYXIgICBuZXRjcHVfcHN0YXRuZXdfaWRbXT0iXAorQCgjKW5ldGNwdV9wc3RhdG5ldy5jIChjKSBDb3B5cmlnaHQgMjAwNSwgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnksIFZlcnNpb24gMi40LjEiOworCisvKiBzaW5jZSB3ZSAia25vdyIgdGhhdCB0aGlzIGludGVyZmFjZSBpcyBhdmFpbGFibGUgb25seSBvbiAxMS4yMyBhbmQKKyAgIGxhdGVyLCBhbmQgdGhhdCAxMS4yMyBhbmQgbGF0ZXIgYXJlIHN0cmljdGx5IDY0LWJpdCBrZXJuZWxzLCB3ZSBjYW4KKyAgIGFyYml0cmFyaWx5IHNldCBfUFNUQVQ2NCBoZXJlIGFuZCBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpdCB1cCBpbgorICAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kIG1ha2VmaWxlcy4gcmFqIDIwMDUvMDkvMDYgKi8KKworI2lmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmIEhBVkVfTElNSVRTX0gKKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYgCisKKyNpbmNsdWRlIDxzeXMvZGsuaD4KKyNpbmNsdWRlIDxzeXMvcHN0YXQuaD4KKworLyogSFAtVVggMTEuMjMgc2VlbXMgdG8gaGF2ZSBhZGRlZCB0aHJlZSBvdGhlciBjeWNsZSBjb3VudGVycyB0byB0aGUKKyAgIG9yaWdpbmFsIHBzcF9pZGxlY3ljbGVzIC0gb25lIGZvciB1c2VyLCBvbmUgZm9yIGtlcm5lbCBhbmQgb25lIGZvcgorICAgaW50ZXJydXB0LiBzbywgd2UgY2FuIG5vdyB1c2UgdGhvc2UgdG8gY2FsY3VsYXRlIENQVSB1dGlsaXphdGlvbgorICAgd2l0aG91dCByZXF1aXJpbmcgYW55IGNhbGlicmF0aW9uIHBoYXNlLiAgcmFqIDIwMDUtMDItMTYgKi8gCisKKyNpZm5kZWYgUFNUQVRfSVBDSU5GTworIyBlcnJvciBTb3JyeSwgcHN0YXQoKSBDUFUgdXRpbGl6YXRpb24gb24gMTAuMCBhbmQgbGF0ZXIgb25seQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGNwdV90aW1lX2NvdW50ZXJzIHsKKyAgdWludDY0X3QgaWRsZTsKKyAgdWludDY0X3QgdXNlcjsKKyAgdWludDY0X3Qga2VybmVsOworICB1aW50NjRfdCBpbnRlcnJ1cHQ7Cit9IGNwdV90aW1lX2NvdW50ZXJzX3Q7CisKK3VpbnQ2NF90IGxpYl9pdGlja3NwZXJjbGt0aWNrOworCisjaW5jbHVkZSAibmV0c2guaCIKKyNpbmNsdWRlICJuZXRsaWIuaCIKKworLyogdGhlIGxpYl9zdGFydF9jb3VudCBhbmQgbGliX2VuZF9jb3VudCBhcnJheXMgaG9sZCB0aGUgc3RhcnRpbmcKKyAgIGFuZCBlbmRpbmcgdmFsdWVzIG9mIHdoYXRldmVyIGlzIGNvdW50aW5nIHdoZW4gdGhlIHN5c3RlbSBpcworICAgaWRsZS4gVGhlIHJhdGUgYXQgd2hpY2ggdGhpcyBpbmNyZW1lbnRzIGR1cmluZyBhIHRlc3QgaXMgY29tcGFyZWQKKyAgIHdpdGggYSBwcmV2aW91cyBjYWxpYnJhcmlvbiB0byBhcnJpdmUgYXQgYSBDUFUgdXRpbGl6YXRpb24KKyAgIHBlcmNlbnRhZ2UuIHJhaiAyMDA1LTAxLTI2ICovCisKK3N0YXRpYyBjcHVfdGltZV9jb3VudGVyc190ICBzdGFydGluZ19jcHVfY291bnRlcnNbTUFYQ1BVU107CitzdGF0aWMgY3B1X3RpbWVfY291bnRlcnNfdCAgZW5kaW5nX2NwdV9jb3VudGVyc1tNQVhDUFVTXTsKK3N0YXRpYyBjcHVfdGltZV9jb3VudGVyc190ICBkZWx0YV9jcHVfY291bnRlcnNbTUFYQ1BVU107CisKK3ZvaWQKK2NwdV91dGlsX2luaXQodm9pZCkgCit7CisgIHJldHVybjsKK30KKwordm9pZAorY3B1X3V0aWxfdGVybWluYXRlKHZvaWQpCit7CisgIHJldHVybjsKK30KKworaW50CitnZXRfY3B1X21ldGhvZCh2b2lkKQoreworICByZXR1cm4gSFBfSURMRV9DT1VOVEVSOworfQorCit2b2lkCitnZXRfY3B1X2NvdW50ZXJzKGNwdV90aW1lX2NvdW50ZXJzX3QgKnJlcykKK3sKKyAgICAgIC8qIGdldCB0aGUgaWRsZSBzeWNsZSBjb3VudGVyIGZvciBlYWNoIHByb2Nlc3Nvci4gbm93IHdoaWxlIG9uIGEKKwkgNjQtYml0IGtlcm5lbCB0aGUgIi5wc2NfaGkiIGFuZCAiLnBzY19sbyIgZmllbGRzIGFyZSA2NCBiaXRzLAorCSBvbmx5IHRoZSBib3R0b20gMzItYml0cyBhcmUgYWN0dWFsbHkgdmFsaWQuICBkb24ndCBhc2sgbWUKKwkgd2h5LCB0aGF0IGlzIGp1c3QgdGhlIHdheSBpdCBpcy4gIHNvbywgd2Ugc2hpZnQgdGhlIHBzY19oaQorCSB2YWx1ZSBieSAzMiBiaXRzIGFuZCB0aGVuIGp1c3Qgc3VtLWluIHRoZSBwc2NfbG8gdmFsdWUuICByYWoKKwkgMjAwNS8wOS8wNiAqLyAKKyAgICAgIHN0cnVjdCBwc3RfcHJvY2Vzc29yICpwc3A7CisKKyAgICAgIHBzcCA9IChzdHJ1Y3QgcHN0X3Byb2Nlc3NvciAqKW1hbGxvYyhsaWJfbnVtX2xvY19jcHVzICogc2l6ZW9mKCpwc3ApKTsKKyAgICAgIGlmIChwc3AgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoIm1hbGxvYyglZCkgZmFpbGVkIVxuIiwgbGliX251bV9sb2NfY3B1cyAqIHNpemVvZigqcHNwKSk7CisgICAgICAgIGV4aXQoMSk7CisJICB9CisgICAgICBpZiAocHN0YXRfZ2V0cHJvY2Vzc29yKHBzcCwgc2l6ZW9mKCpwc3ApLCBsaWJfbnVtX2xvY19jcHVzLCAwKSAhPSAtMSkgeworICAgICAgICBpbnQgaTsKKwkvKiB3ZSB1c2UgbGliX2l0aWNrc3BlcmNsa3RpY2sgaW4gb3VyIHNhbml0eSBjaGVja2luZy4gd2UKKwkgICBhc3MtdS1tZSBpdCBpcyB0aGUgc2FtZSB2YWx1ZSBmb3IgZWFjaCBDUFUgLSBmYW1vdXMgbGFzdAorCSAgIHdvcmRzIG5vIGRvdWJ0LiByYWogMjAwNS8wOS8wNiAqLworCWxpYl9pdGlja3NwZXJjbGt0aWNrID0gcHNwWzBdLnBzcF9pdGlja3NwZXJjbGt0aWNrOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGliX251bV9sb2NfY3B1czsgaSsrKSB7CisgICAgICAgICAgcmVzW2ldLmlkbGUgPSAoKCh1aW50NjRfdClwc3BbaV0ucHNwX2lkbGVjeWNsZXMucHNjX2hpIDw8IDMyKSArCisJCQkgcHNwW2ldLnBzcF9pZGxlY3ljbGVzLnBzY19sbyk7CisgICAgICAgICAgaWYoZGVidWcpIHsKKyAgICAgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgICAgICJcdGlkbGVbJWRdID0gMHglIlBSSXg2NCIgIiwKKyAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAgcmVzW2ldLmlkbGUpOworICAgICAgICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVzW2ldLnVzZXIgPSAoKCh1aW50NjRfdClwc3BbaV0ucHNwX3VzZXJjeWNsZXMucHNjX2hpIDw8IDMyKSArCisJCQkgcHNwW2ldLnBzcF91c2VyY3ljbGVzLnBzY19sbyk7CisgICAgICAgICAgaWYoZGVidWcpIHsKKyAgICAgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgICAgICJ1c2VyWyVkXSA9IDB4JSJQUkl4NjQiICIsCisgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgIHJlc1tpXS51c2VyKTsKKyAgICAgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc1tpXS5rZXJuZWwgPSAoKCh1aW50NjRfdClwc3BbaV0ucHNwX3N5c3RlbWN5Y2xlcy5wc2NfaGkgPDwgMzIpICsKKwkJCSAgICBwc3BbaV0ucHNwX3N5c3RlbWN5Y2xlcy5wc2NfbG8pOworICAgICAgICAgIGlmKGRlYnVnKSB7CisgICAgICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICAgICAia2VyblslZF0gPSAweCUiUFJJeDY0IiAiLAorICAgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICByZXNbaV0ua2VybmVsKTsKKyAgICAgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc1tpXS5pbnRlcnJ1cHQgPSAoKCh1aW50NjRfdClwc3BbaV0ucHNwX2ludGVycnVwdGN5Y2xlcy5wc2NfaGkgPDwgMzIpICsKKwkJCSAgICAgIHBzcFtpXS5wc3BfaW50ZXJydXB0Y3ljbGVzLnBzY19sbyk7CisgICAgICAgICAgaWYoZGVidWcpIHsKKyAgICAgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgICAgICJpbnRyWyVkXSA9IDB4JSJQUkl4NjQiXG4iLAorICAgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICByZXNbaV0uaW50ZXJydXB0KTsKKyAgICAgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZyZWUocHNwKTsKKyAgICAgIH0KK30KKworLyogY2FsaWJyYXRlX3BzdGF0bmV3CisgICB0aGVyZSByZWFsbHkgaXNuJ3QgYW55dGhpbmcgbXVjaCB0byBkbyBoZXJlIHNpbmNlIHdlIGhhdmUgYWxsIHRoZQorICAgY291bnRlcnMgYW5kIHVzZSB0aGVpciByYXRpb3MgZm9yIENQVSB1dGlsIG1lYXN1cmVtZW50LiByYWoKKyAgIDIwMDUtMDItMTYgKi8KKworZmxvYXQKK2NhbGlicmF0ZV9pZGxlX3JhdGUoaW50IGl0ZXJhdGlvbnMsIGludCBpbnRlcnZhbCkKK3sKKyAgcmV0dXJuIDAuMDsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X2NwdV90aW1lX2NvdW50ZXJzKGNoYXIgKm5hbWUsIGludCBpbnN0YW5jZSwgY3B1X3RpbWVfY291bnRlcnNfdCAqY291bnRlcnMpIAoreworICBmcHJpbnRmKHdoZXJlLCIlc1slZF06XG4iLG5hbWUsaW5zdGFuY2UpOworICBmcHJpbnRmKHdoZXJlLAorCSAgIlx0IGlkbGUgJWxsdVxuIixjb3VudGVyc1tpbnN0YW5jZV0uaWRsZSk7CisgIGZwcmludGYod2hlcmUsCisJICAiXHQgdXNlciAlbGx1XG4iLGNvdW50ZXJzW2luc3RhbmNlXS51c2VyKTsKKyAgZnByaW50Zih3aGVyZSwKKwkgICJcdCBrZXJuZWwgJWxsdVxuIixjb3VudGVyc1tpbnN0YW5jZV0ua2VybmVsKTsKKyAgZnByaW50Zih3aGVyZSwKKwkgICJcdCBpbnRlcnJ1cHQgJWxsdVxuIixjb3VudGVyc1tpbnN0YW5jZV0uaW50ZXJydXB0KTsKK30KKworZmxvYXQKK2NhbGNfY3B1X3V0aWxfaW50ZXJuYWwoZmxvYXQgZWxhcHNlZF90aW1lKQoreworICBpbnQgaTsKKworICB1aW50NjRfdCB0b3RhbF9jcHVfY3ljbGVzOworICB1aW50NjRfdCBzYW5pdHlfY3B1X2N5Y2xlczsKKworI2lmbmRlZiBVU0VfSU5URUdFUl9NQVRICisgIGRvdWJsZSBmcmFjdGlvbl9pZGxlOworICBkb3VibGUgZnJhY3Rpb25fdXNlcjsKKyAgZG91YmxlIGZyYWN0aW9uX2tlcm5lbDsKKyAgZG91YmxlIGZyYWN0aW9uX2ludGVycnVwdDsKKyAgZG91YmxlIGVzdGltYXRlZF9mcmFjdGlvbl9pbnRlcnJ1cHQ7CisjZWxzZQorICB1aW50NjRfdCBmcmFjdGlvbl9pZGxlOworICB1aW50NjRfdCBmcmFjdGlvbl91c2VyOworICB1aW50NjRfdCBmcmFjdGlvbl9rZXJuZWw7CisgIHVpbnQ2NF90IGZyYWN0aW9uX2ludGVycnVwdDsKKyAgdWludDY0X3QgZXN0aW1hdGVkX2ZyYWN0aW9uX2ludGVycnVwdDsKKworI2RlZmluZSBDQUxDX1BFUkNFTlQgMTAwCisjZGVmaW5lIENBTENfVEVOVEhfUEVSQ0VOVCAxMDAwCisjZGVmaW5lIENBTENfSFVORFJFRFRIX1BFUkNFTlQgMTAwMDAKKyNkZWZpbmUgQ0FMQ19USE9VU0FORFRIX1BFUkNFTlQgMTAwMDAwCisjZGVmaW5lIENBTENfQUNDVVJBQ1kgQ0FMQ19USE9VU0FORFRIX1BFUkNFTlQKKworI2VuZGlmIC8qIFVTRV9JTlRFR0VSX01BVEggKi8KKyAgZmxvYXQgYWN0dWFsX3JhdGU7CisgIGZsb2F0IGNvcnJlY3Rpb25fZmFjdG9yOworCisgIGxpYl9sb2NhbF9jcHVfdXRpbCA9IChmbG9hdCkwLjA7CisKKyAgLyogSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbGlicmFyeSBtZWFzdXJlZCBhIHRpbWUgb3RoZXIgdGhhbiAqLworICAvKiB0aGUgb25lIHRoYXQgdGhlIHVzZXIgd2FudCBmb3IgdGhlIGNwdSB1dGlsaXphdGlvbiAqLworICAvKiBjYWxjdWxhdGlvbnMgLSBmb3IgZXhhbXBsZSwgdGVzdHMgdGhhdCB3ZXJlIGVuZGVkIGJ5ICovCisgIC8qIHdhdGNoZG9nIHRpbWVycyBzdWNoIGFzIHRoZSB1ZHAgc3RyZWFtIHRlc3QuIFdlIGxldCB0aGVzZSAqLworICAvKiB0ZXN0cyB0ZWxsIHVwIHdoYXQgdGhlIGVsYXBzZWQgdGltZSBzaG91bGQgYmUuICovCisgIAorICBpZiAoZWxhcHNlZF90aW1lICE9IDAuMCkgeworICAgIGNvcnJlY3Rpb25fZmFjdG9yID0gKGZsb2F0KSAxLjAgKyAKKyAgICAgICgobGliX2VsYXBzZWQgLSBlbGFwc2VkX3RpbWUpIC8gZWxhcHNlZF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICBjb3JyZWN0aW9uX2ZhY3RvciA9IChmbG9hdCkgMS4wOworICB9CisKKyAgLyogY2FsY3VsYXRlIG91ciBzYW5pdHkgY2hlY2sgb24gY3ljbGVzICovCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJsaWJfZWxhcHNlZCAlZyBfU0NfQ0xLX1RDSyAlZCBsaWJfaXRpY2tzcGVyY2xrdGljayAlIlBSSXU2NCJcbiIsCisJICAgIGxpYl9lbGFwc2VkLAorCSAgICBzeXNjb25mKF9TQ19DTEtfVENLKSwKKwkgICAgbGliX2l0aWNrc3BlcmNsa3RpY2spOworICB9CisKKyAgLyogT2ssIGVsc2V3aGVyZSBJIG1heSBoYXZlIHNhaWQgdGhhdCBIUC1VWCAxMS4yMyBkb2VzIHRoZSAicmlnaHQiCisgICAgIHRoaW5nIGluIG1lYXN1cmluZyB1c2VyLCBrZXJuZWwsIGludGVycnVwdCBhbmQgaWRsZSBhbGwgdG9nZXRoZXIKKyAgICAgaW5zdGVhZCBvZiBvdmVybGFwcGluZyBpbnRlcnJ1cHQgd2l0aCB0aGUgb3RoZXJzIGxpa2UgYW4gT1MgdGhhdAorICAgICBzaGFsbCBub3QgYmUgbmFtZWQuICBIb3dldmVyLi4uLiBpdCBzZWVtcyB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUKKyAgICAgYWNjb3VudGluZyBmb3IgaW50ZXJydXB0IGN5Y2xlcywgd2hlcmVieSB0aGUgY3ljbGVzIGRvIG5vdCBnZXQKKyAgICAgcHJvcGVybHkgYWNjb3VudGVkLiAgVGhlIHN1bSBvZiB1c2VyLCBrZXJuZWwsIGludGVycnVwdCBhbmQgaWRsZQorICAgICBkb2VzIG5vdCBlcXVhbCB0aGUgY2xvY2sgcmF0ZSBtdWx0aXBsaWVkIGJ5IHRoZSBlbGFwc2VkIHRpbWUuCisgICAgIFNvbWUgY3ljbGVzIGdvIG1pc3NpbmcuCisKKyAgICAgU2luY2Ugd2Ugc2VlIGFncmVlbWVudCBiZXR3ZWVuIG5ldHBlcmYgYW5kIGdsYW5jZS92c2FyIHdpdGggdGhlCisgICAgIG9sZCAicHN0YXQiIG1lY2hhbmlzbSwgd2UgY2FuIHByZXN1bWUgdGhhdCB0aGUgYWNjb3VudGluZyBmb3IKKyAgICAgaWRsZSBjeWNsZXMgaXMgc3VmZmljaWVudGx5IGFjY3VyYXRlLiAgU28sIHdoaWxlIHdlIHdpbGwgc3RpbGwgZG8KKyAgICAgbWF0aCB3aXRoIHVzZXIsIGtlcm5lbCBhbmQgaW50ZXJydXB0IGN5Y2xlcywgd2Ugd2lsbCBvbmx5CisgICAgIGNhY3VsYXRlIENQVSB1dGlsaXphdGlvbiBiYXNlZCBvbiB0aGUgcmF0aW8gb2YgaWRsZSB0byBfcmVhbF8KKyAgICAgdG90YWwgY3ljbGVzLiAgSSBhbSB0b2xkIHRoYXQgYSAiZnV0dXJlIHJlbGVhc2UiIG9mIEhQLVVYIHdpbGwKKyAgICAgZml4IHRoZSBpbnRlcnVwdCBjeWNsZSBhY2NvdW50aW5nLiAgcmFqIDIwMDUvMDkvMTQgKi8KKworICAvKiBjYWxjdWxhdGUgd2hhdCB0aGUgc3VtIG9mIENQVSBjeWNsZXMgX1NIT1VMRF8gYmUgKi8KKyAgc2FuaXR5X2NwdV9jeWNsZXMgPSAodWludDY0X3QpICgoZG91YmxlKWxpYl9lbGFwc2VkICogCisgICAgKGRvdWJsZSkgc3lzY29uZihfU0NfQ0xLX1RDSykgKiAoZG91YmxlKWxpYl9pdGlja3NwZXJjbGt0aWNrKTsKKworICAvKiB0aGlzIGxvb2tzIGp1c3QgbGlrZSB0aGUgbG9vcGVyIGNhc2UuIGF0IGxlYXN0IEkgdGhpbmsgaXQgKi8KKyAgLyogc2hvdWxkIDopIHJhaiA0Lzk1ICovCisgIGZvciAoaSA9IDA7IGkgPCBsaWJfbnVtX2xvY19jcHVzOyBpKyspIHsKKyAgICAKKyAgICAvKiB3ZSBhc3MtdS1tZSB0aGF0IHRoZXNlIGNvdW50ZXJzIHdpbGwgbmV2ZXIgd3JhcCBkdXJpbmcgYQorICAgICAgIG5ldHBlcmYgcnVuLiAgdGhpcyBtYXkgbm90IGJlIGEgcGFydGljdWxhcmx5IHNhZmUgdGhpbmcgdG8KKyAgICAgICBkby4gcmFqIDIwMDUtMDEtMjggKi8KKyAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0uaWRsZSA9IGVuZGluZ19jcHVfY291bnRlcnNbaV0uaWRsZSAtCisgICAgICBzdGFydGluZ19jcHVfY291bnRlcnNbaV0uaWRsZTsKKyAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0udXNlciA9IGVuZGluZ19jcHVfY291bnRlcnNbaV0udXNlciAtCisgICAgICBzdGFydGluZ19jcHVfY291bnRlcnNbaV0udXNlcjsKKyAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0ua2VybmVsID0gZW5kaW5nX2NwdV9jb3VudGVyc1tpXS5rZXJuZWwgLQorICAgICAgc3RhcnRpbmdfY3B1X2NvdW50ZXJzW2ldLmtlcm5lbDsKKyAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0ID0gZW5kaW5nX2NwdV9jb3VudGVyc1tpXS5pbnRlcnJ1cHQgLQorICAgICAgc3RhcnRpbmdfY3B1X2NvdW50ZXJzW2ldLmludGVycnVwdDsKKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIHByaW50X2NwdV90aW1lX2NvdW50ZXJzKCJkZWx0YV9jcHVfY291bnRlcnMiLGksZGVsdGFfY3B1X2NvdW50ZXJzKTsKKyAgICB9CisKKyAgICAvKiBub3cgZ2V0IHRoZSBzdW0sIHdoaWNoIHdlIGFzcy11LW1lIGRvZXMgbm90IG92ZXJmbG93IGEgNjQtYml0CisgICAgICAgY291bnRlci4gcmFqIDIwMDUtMDItMTYgKi8KKyAgICB0b3RhbF9jcHVfY3ljbGVzID0gCisgICAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0uaWRsZSArCisgICAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0udXNlciArCisgICAgICBkZWx0YV9jcHVfY291bnRlcnNbaV0ua2VybmVsICsKKyAgICAgIGRlbHRhX2NwdV9jb3VudGVyc1tpXS5pbnRlcnJ1cHQ7CisKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInRvdGFsX2NwdV9jeWNsZXMgJSJQUkl1NjQiIHNhbml0eV9jcHVfY3ljbGVzICUiUFJJdTY0IiBtaXNzaW5nICUiUFJJdTY0IlxuIiwKKwkgICAgICB0b3RhbF9jcHVfY3ljbGVzLAorCSAgICAgIHNhbml0eV9jcHVfY3ljbGVzLAorCSAgICAgIHNhbml0eV9jcHVfY3ljbGVzIC0gdG90YWxfY3B1X2N5Y2xlcyk7CisgICAgfQorCisgICAgLyogc2luY2UgSFAtVVggMTEuMjMgZG9lcyB0aGUgX1JJR0hUXyB0aGluZyBhbmQgaWRsZS91c2VyL2tlcm5lbAorICAgICAgIGRvZXMgX05PVF8gb3ZlcmxhcCB3aXRoIGludGVycnVwdCwgd2UgZG8gbm90IGhhdmUgdG8gYXBwbHkgYW55CisgICAgICAgY29ycmVjdGlvbiBrbHVkZ2UuIHJhaiAyMDA1LTAyLTE2ICovCisKKyNpZm5kZWYgVVNFX0lOVEVHRVJfTUFUSAorICAgIC8qIHdoZW4gdGhlIGFjY291bnRpbmcgZm9yIGludGVycnVwdCB0aW1lIGdldHMgaXRzIGFjdCB0b2dldGhlciwKKyAgICAgICB3ZSBjYW4gdXNlIHRvdGFsX2NwdV9jeWNsZXMgcmF0aGVyIHRoYW4gc2FuaXR5X2NwdV9jeWNsZXMsIGJ1dAorICAgICAgIHVudGlsIHRoZW4sIHVzZSBzYW5pdHlfY3B1X2NjbGVzLiByYWogMjAwNS8wOS8xNCAqLworCisgICAgZnJhY3Rpb25faWRsZSA9IChkb3VibGUpZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmlkbGUgLyAKKyAgICAgIChkb3VibGUpc2FuaXR5X2NwdV9jeWNsZXM7CisKKyAgICBmcmFjdGlvbl91c2VyID0gKGRvdWJsZSlkZWx0YV9jcHVfY291bnRlcnNbaV0udXNlciAvIAorICAgICAgKGRvdWJsZSlzYW5pdHlfY3B1X2N5Y2xlczsKKworICAgIGZyYWN0aW9uX2tlcm5lbCA9IChkb3VibGUpIGRlbHRhX2NwdV9jb3VudGVyc1tpXS5rZXJuZWwgLyAKKyAgICAgIChkb3VibGUpc2FuaXR5X2NwdV9jeWNsZXM7CisKKyAgICBmcmFjdGlvbl9pbnRlcnJ1cHQgPSAoZG91YmxlKWRlbHRhX2NwdV9jb3VudGVyc1tpXS5pbnRlcnJ1cHQgLyAKKyAgICAgIChkb3VibGUpc2FuaXR5X2NwdV9jeWNsZXM7CisKKyAgICAvKiBhc3MtdS1tZSB0aGF0IGl0IGlzIG9ubHkgaW50ZXJydXB0IHRoYXQgaXMgYm9ndXMsIGFuZCBhc3NpZ24KKyAgICAgICBhbGwgdGhlICJtaXNzaW5nIiBjeWNsZXMgdG8gaXQuIHJhaiAyMDA1LzA5LzE0ICovCisgICAgZXN0aW1hdGVkX2ZyYWN0aW9uX2ludGVycnVwdCA9ICgoZG91YmxlKWRlbHRhX2NwdV9jb3VudGVyc1tpXS5pbnRlcnJ1cHQgKworCQkJCSAgICAoc2FuaXR5X2NwdV9jeWNsZXMgLSB0b3RhbF9jcHVfY3ljbGVzKSkgLyAKKyAgICAgIChkb3VibGUpc2FuaXR5X2NwdV9jeWNsZXM7CisKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZnJhY3Rpb25faWRsZSAlZ1xuIixmcmFjdGlvbl9pZGxlKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZnJhY3Rpb25fdXNlciAlZ1xuIixmcmFjdGlvbl91c2VyKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZnJhY3Rpb25fa2VybmVsICVnXG4iLGZyYWN0aW9uX2tlcm5lbCk7CisgICAgICBmcHJpbnRmKHdoZXJlLCJcdGZyYWN0aW9uX2ludGVycnVwdCAlZyBXQVJOSU5HLCBwb3NzaWJseSB1bmRlci1jb3VudGVkIVxuIixmcmFjdGlvbl9pbnRlcnJ1cHQpOworICAgICAgZnByaW50Zih3aGVyZSwiXHRlc3RpbWF0ZWRfZnJhY3Rpb25faW50ZXJydXB0ICVnXG4iLAorCSAgICAgIGVzdGltYXRlZF9mcmFjdGlvbl9pbnRlcnJ1cHQpOworICAgIH0KKworICAgIC8qIGFuZCBmaW5hbGx5LCB3aGF0IGlzIG91ciBDUFUgdXRpbGl6YXRpb24/ICovCisgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA9IDEwMC4wIC0gKGZyYWN0aW9uX2lkbGUgKiAxMDAuMCk7CisjZWxzZQorICAgIC8qIGFuZCBub3cgc29tZSBmdW4gd2l0aCBpbnRlZ2VyIG1hdGguICBpIGluaXRpYWxseSB0cmllZCB0bworICAgICAgIHByb21vdGUgdGhpbmdzIHRvIGxvbmcgZG91YmxlZCBidXQgdGhhdCBkaWRuJ3Qgc2VlbSB0byByZXN1bHQKKyAgICAgICBpbiBoYXBwaW5lc3MgYW5kIGpveS4gcmFqIDIwMDUtMDEtMjggKi8KKworICAgIC8qIG11bHRpcGx5IGJ5IDEwMCBhbmQgZGl2aWRlIGJ5IHRvdGFsIGFuZCB5b3UgZ2V0IHdob2xlCisgICAgICAgcGVyY2VudGFnZXMuIG11bHRpcGx5IGJ5IDEwMDAgYW5kIGRpdmlkZSBieSB0b3RhbCBhbmQgeW91IGdldAorICAgICAgIHRlbnRocyBvZiBwZXJjZW50YWdlcy4gIG11bHRpcGx5IGJ5IDEwMDAwIGFuZCBkaXZpZGUgYnkgdG90YWwKKyAgICAgICBhbmQgeW91IGdldCBodW5kcmVkdGhzIG9mIHBlcmNlbnRhZ2VzLiBldGMgZXRjIGV0YyByYWoKKyAgICAgICAyMDA1LTAxLTI4ICovCisKKyAgICAvKiB3aGVuIHRoZSBhY2NvdW50aW5nIGZvciBpbnRlcnJ1cHQgdGltZSBnZXRzIGl0cyBhY3QgdG9nZXRoZXIsCisgICAgICAgd2UgY2FuIHVzZSB0b3RhbF9jcHVfY3ljbGVzIHJhdGhlciB0aGFuIHNhbml0eV9jcHVfY3ljbGVzLCBidXQKKyAgICAgICB1bnRpbCB0aGVuLCB1c2Ugc2FuaXR5X2NwdV9jY2xlcy4gcmFqIDIwMDUvMDkvMTQgKi8KKworICAgIGZyYWN0aW9uX2lkbGUgPSAKKyAgICAgIChkZWx0YV9jcHVfY291bnRlcnNbaV0uaWRsZSAqIENBTENfQUNDVVJBQ1kpIC8gc2FuaXR5X2NwdV9jeWNsZXM7CisKKyAgICBmcmFjdGlvbl91c2VyID0gCisgICAgICAoZGVsdGFfY3B1X2NvdW50ZXJzW2ldLnVzZXIgKiBDQUxDX0FDQ1VSQUNZKSAvIHNhbml0eV9jcHVfY3ljbGVzOworCisgICAgZnJhY3Rpb25fa2VybmVsID0gCisgICAgICAoZGVsdGFfY3B1X2NvdW50ZXJzW2ldLmtlcm5lbCAqIENBTENfQUNDVVJBQ1kpIC8gc2FuaXR5X2NwdV9jeWNsZXM7CisKKyAgICBmcmFjdGlvbl9pbnRlcnJ1cHQgPSAKKyAgICAgIChkZWx0YV9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0ICogQ0FMQ19BQ0NVUkFDWSkgLyBzYW5pdHlfY3B1X2N5Y2xlczsKKworCisgICAgZXN0aW1hdGVkX2ZyYWN0aW9uX2ludGVycnVwdCA9IAorICAgICAgKChkZWx0YV9jcHVfY291bnRlcnNbaV0uaW50ZXJydXB0ICsgCisJKHNhbml0eV9jcHVfY3ljbGVzIC0gdG90YWxfY3B1X2N5Y2xlcykpICogCisgICAgICAgQ0FMQ19BQ0NVUkFDWSkgLyBzYW5pdHlfY3B1X2N5Y2xlczsKKworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiXHRmcmFjdGlvbl9pZGxlICUiUFJJdTY0IlxuIixmcmFjdGlvbl9pZGxlKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZnJhY3Rpb25fdXNlciAlIlBSSXU2NCJcbiIsZnJhY3Rpb25fdXNlcik7CisgICAgICBmcHJpbnRmKHdoZXJlLCJcdGZyYWN0aW9uX2tlcm5lbCAlIlBSSXU2NCJcbiIsZnJhY3Rpb25fa2VybmVsKTsKKyAgICAgIGZwcmludGYod2hlcmUsIlx0ZnJhY3Rpb25faW50ZXJydXB0ICUiUFJJdTY0IldBUk5JTkcsIHBvc3NpYmx5IHVuZGVyLWNvdW50ZWQhXG4iLGZyYWN0aW9uX2ludGVycnVwdCk7CisgICAgICBmcHJpbnRmKHdoZXJlLCJcdGVzdGltYXRlZF9mcmFjdGlvbl9pbnRlcnJ1cHQgJSJQUkl1NjQiXG4iLAorCSAgICAgIGVzdGltYXRlZF9mcmFjdGlvbl9pbnRlcnJ1cHQpOworICAgIH0KKworICAgIC8qIGFuZCBmaW5hbGx5LCB3aGF0IGlzIG91ciBDUFUgdXRpbGl6YXRpb24/ICovCisgICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA9IDEwMC4wIC0gKCgoZmxvYXQpZnJhY3Rpb25faWRsZSAvIAorCQkJCQkgIChmbG9hdClDQUxDX0FDQ1VSQUNZKSAqIDEwMC4wKTsKKyNlbmRpZgorICAgIGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV0gKj0gY29ycmVjdGlvbl9mYWN0b3I7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJsaWJfbG9jYWxfcGVyX2NwdV91dGlsWyVkXSAlZyAgY2YgJWZcbiIsCisJICAgICAgaSwKKwkgICAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldLAorCSAgICAgIGNvcnJlY3Rpb25fZmFjdG9yKTsKKyAgICB9CisgICAgbGliX2xvY2FsX2NwdV91dGlsICs9IGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV07CisgIH0KKyAgLyogd2Ugd2FudCB0aGUgYXZlcmFnZSBhY3Jvc3MgYWxsIG4gcHJvY2Vzc29ycyAqLworICBsaWJfbG9jYWxfY3B1X3V0aWwgLz0gKGZsb2F0KWxpYl9udW1fbG9jX2NwdXM7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgImNhbGNfY3B1X3V0aWw6IHJldHVybmluZyAlZ1xuIixsaWJfbG9jYWxfY3B1X3V0aWwpOworICB9CisKKyAgcmV0dXJuIGxpYl9sb2NhbF9jcHVfdXRpbDsKKworfQordm9pZAorY3B1X3N0YXJ0X2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHVfY291bnRlcnMoc3RhcnRpbmdfY3B1X2NvdW50ZXJzKTsKK30KKwordm9pZAorY3B1X3N0b3BfaW50ZXJuYWwodm9pZCkKK3sKKyAgZ2V0X2NwdV9jb3VudGVycyhlbmRpbmdfY3B1X2NvdW50ZXJzKTsKK30KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9zeXNjdGwuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGNwdV9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg2MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0Y3B1X3N5c2N0bC5jCkBAIC0wLDAgKzEsMTMyIEBACitjaGFyICAgbmV0Y3B1X3N5c2N0bF9pZFtdPSJcCitAKCMpbmV0Y3B1X3N5c2N0bC5jICBWZXJzaW9uIDIuNC4zIjsKKworI2lmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZiBIQVZFX0xJTUlUU19ICisjIGluY2x1ZGUgPGxpbWl0cy5oPgorIyBpZm5kZWYgTE9OR19MT05HX01BWAorIyAgZGVmaW5lIExPTkdfTE9OR19NQVggTExPTkdfTUFYCisjIGVuZGlmIC8qIExPTkdfTE9OR19NQVggKi8KKyNlbmRpZgorCisjaWZkZWYgX19OZXRCU0RfXworI2RlZmluZQlDUF9USU1FX1RZUEUJdWludDY0X3QKKyNlbHNlCisjZGVmaW5lCUNQX1RJTUVfVFlQRQlsb25nCisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qIG5lZWQgdG8gaGF2ZSBzb21lIHNvcnQgb2YgY2hlY2sgZm9yIHN5cy9zeXNjdGwuaCB2ZXJzdXMgc3lzY3RsLmggKi8KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisKKworLyogdGhpcyBoYXMgYmVlbiBsaWJlcmFsbHkgY3V0IGFuZCBwYXN0ZWQgZnJvbSA8c3lzL3Jlc291cmNlLmg+IG9uCisgICBGcmVlQlNELiBpbiBnZW5lcmFsLCB0aGlzIHdvdWxkIGJlIGEgYmFkIGlkZWEsIGJ1dCBJIGRvbid0IHdhbnQgdG8KKyAgIGhhdmUgdG8gZG8gYSBfS0VSTkVMIGRlZmluZSB0byBnZXQgdGhlc2UgYW5kIHRoYXQgaXMgd2hhdAorICAgc3lzL3Jlc291cmNlLmggc2VlbXMgdG8gd2FudC4gcmFqIDIwMDItMDMtMDMgKi8KKyNkZWZpbmUgQ1BfVVNFUiAgICAgICAgIDAKKyNkZWZpbmUgQ1BfTklDRSAgICAgICAgIDEKKyNkZWZpbmUgQ1BfU1lTICAgICAgICAgIDIKKyNkZWZpbmUgQ1BfSU5UUiAgICAgICAgIDMKKyNkZWZpbmUgQ1BfSURMRSAgICAgICAgIDQKKyNkZWZpbmUgQ1BVU1RBVEVTICAgICAgIDUKKworCisjaW5jbHVkZSAibmV0c2guaCIKKyNpbmNsdWRlICJuZXRsaWIuaCIKKworc3RhdGljIENQX1RJTUVfVFlQRSBsaWJfc3RhcnRfY291bnRbQ1BVU1RBVEVTXTsKK3N0YXRpYyBDUF9USU1FX1RZUEUgbGliX2VuZF9jb3VudFtDUFVTVEFURVNdOworCit2b2lkCitjcHVfdXRpbF9pbml0KHZvaWQpIAoreworICByZXR1cm47Cit9CisKK3ZvaWQKK2NwdV91dGlsX3Rlcm1pbmF0ZSh2b2lkKQoreworICByZXR1cm47Cit9CisKK2ludAorZ2V0X2NwdV9tZXRob2Qodm9pZCkKK3sKKyAgcmV0dXJuIFNZU0NUTDsKK30KKworc3RhdGljIHZvaWQKK2dldF9jcHVfdGltZShDUF9USU1FX1RZUEUgKmNwdV90aW1lKQoreworICBzaXplX3QgY3B1X3RpbWVfbGVuID0gQ1BVU1RBVEVTICogc2l6ZW9mIChjcHVfdGltZVswXSk7CisKKyAgaWYgKHN5c2N0bGJ5bmFtZSgia2Vybi5jcF90aW1lIiwgY3B1X3RpbWUsICZjcHVfdGltZV9sZW4sIE5VTEwsIDApID09IC0xKSB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJDYW5ub3QgZ2V0IENQVSB0aW1lIVxuIik7CisgICAgICBleGl0ICgxKTsKKyAgfQorfQorCisvKiBjYWxpYnJhdGVfc3lzY3RsICAtIHBlcmZvcm0gdGhlIGlkbGUgcmF0ZSBjYWxjdWxhdGlvbiB1c2luZyB0aGUKKyAgIHN5c2N0bCBjYWxsIC0gdHlwaWNhbGx5IG9uIEJTRCAqLworCitmbG9hdAorY2FsaWJyYXRlX2lkbGVfcmF0ZShpbnQgaXRlcmF0aW9ucywgaW50IGludGVydmFsKQoreworICByZXR1cm4gc3lzY29uZiAoX1NDX0NMS19UQ0spOworfQorCitmbG9hdAorY2FsY19jcHVfdXRpbF9pbnRlcm5hbChmbG9hdCBlbGFwc2VkX3RpbWUpCit7CisgIENQX1RJTUVfVFlQRSBzdW1faWRsZSwgc3VtX2J1c3k7CisgIGludCBpOworCisgIGZvciAoc3VtX2J1c3kgPSAwLCBpID0gMDsgaSA8IENQVVNUQVRFUzsgaSsrKSB7CisgICAgaWYgKGkgIT0gQ1BfSURMRSkKKyAgICAgIHN1bV9idXN5ICs9IGxpYl9lbmRfY291bnRbaV0gLSBsaWJfc3RhcnRfY291bnRbaV07CisgIH0KKworICBzdW1faWRsZSA9IGxpYl9lbmRfY291bnRbQ1BfSURMRV0gLSBsaWJfc3RhcnRfY291bnRbQ1BfSURMRV07CisgIGxpYl9sb2NhbF9jcHVfdXRpbCA9IChmbG9hdClzdW1fYnVzeSAvIChmbG9hdCkoc3VtX2J1c3kgKyBzdW1faWRsZSk7CisgIGxpYl9sb2NhbF9jcHVfdXRpbCAqPSAxMDAuMDsKKworICByZXR1cm4gbGliX2xvY2FsX2NwdV91dGlsOworCit9Cit2b2lkCitjcHVfc3RhcnRfaW50ZXJuYWwodm9pZCkKK3sKKyAgZ2V0X2NwdV90aW1lKGxpYl9zdGFydF9jb3VudCk7Cit9CisKK3ZvaWQKK2NwdV9zdG9wX2ludGVybmFsKHZvaWQpCit7CisgIGdldF9jcHVfdGltZShsaWJfZW5kX2NvdW50KTsKK30KZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGRydl9ldGh0b29sLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRkcnZfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDQ2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRkcnZfZXRodG9vbC5jCkBAIC0wLDAgKzEsMTE5IEBACisjaWYgZGVmaW5lZChIQVZFX0NPTkZJR19IKQorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorCisvKiBhbGFzLCBkaXJlY3QgaW5jbHVzaW9uIG9mIGV0aHRvb2wuaCBkZXBlbmRzIG9uIHNvbWUgdHlwZXMgbm90CisgICBub3JtYWxseSBmb3VuZCBpbiBuYXR1cmUsIHdoaWNoIHdlIG11c3QgcHJvdmlkZSBvciB0aGluZ3Mgd2lsbCBiZQorICAgcXVpdGUgdW5oYXBweS4gbmV3ZXIgZXRodG9vbC5oIGluY2x1ZGUgZmlsZXMgd2lsbCBpdCBzZWVtcyBiZSBoYXBweQorICAgd2l0aCBvdXIgaW5jbHVkaW5nIGxpbnV4L3R5cGVzLmggd2hpY2ggd2lsbCBnaXZlIHVzIF9fdW11bWJsZSAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogb2xkZXIgZXRodG9vbC5oIGluY2x1ZGVzIHdhbnQgdGhlbSB3aXRob3V0IHRoZSBsZWFkaW5nIHVuZGVyc2NvcmVzICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICB1MzI7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICB1MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgdTg7CisKKy8qIG9zdGVuc2libHkgYXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgYmUgY292ZXJlZCBmb3IgYW55IGV0aHRvb2wuaD8gKi8KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKK3ZvaWQKK2ZpbmRfZHJpdmVyX2luZm8oY2hhciAqaWZuYW1lLCBjaGFyICpkcml2ZXIsIGNoYXIgKnZlcnNpb24sIGNoYXIgKmZpcm13YXJlLCBjaGFyICpidXMsIGludCBsZW4pIHsKKworICBpbnQgczsKKyAgaW50IHJldDsKKyAgc3RydWN0IGlmcmVxIGlmcjsKKyAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBkcnZpbmZvOworCisgIGlmIChsZW4gPCAzMikgcmV0dXJuOworCisgIGlmICghc3RyY21wKGlmbmFtZSwibG8iKSkgeworICAgIC8qIHNwZWNpYWwgY2FzZSBsb29wYmFjayAqLworICAgIHN0cm5jcHkoZHJpdmVyLCJsb29wYmFjayIsbGVuKTsKKyAgICBzdHJuY3B5KHZlcnNpb24sInN5c3RlbSIsbGVuKTsKKyAgICBzdHJuY3B5KGZpcm13YXJlLCJOL0EiLGxlbik7CisgICAgc3RybmNweShidXMsIk4vQSIsbGVuKTsKKyAgICBkcml2ZXJbbGVuLTFdID0gMDsKKyAgICB2ZXJzaW9uW2xlbi0xXSA9IDA7CisgICAgZmlybXdhcmVbbGVuLTFdID0gMDsKKyAgICBidXNbbGVuLTFdID0gMDsKKyAgICByZXR1cm47CisgIH0KKworICBzID0gc29ja2V0KEFGX0lORVQsU09DS19ER1JBTSwwKTsKKworICBpZiAocyA8IDApIHsKKyAgICBzdHJuY3B5KGRyaXZlciwiU29ja2V0RmFpbHVyZSIsbGVuKTsKKyAgICBzdHJuY3B5KHZlcnNpb24sIlNvY2tldEZhaWx1cmUiLGxlbik7CisgICAgc3RybmNweShmaXJtd2FyZSwiU29ja2V0RmFpbHVyZSIsbGVuKTsKKyAgICBzdHJuY3B5KGJ1cywiU29ja2V0RmFpbHVyZSIsbGVuKTsKKyAgICBkcml2ZXJbbGVuLTFdID0gMDsKKyAgICB2ZXJzaW9uW2xlbi0xXSA9IDA7CisgICAgZmlybXdhcmVbbGVuLTFdID0gMDsKKyAgICBidXNbbGVuLTFdID0gMDsKKyAgICByZXR1cm47CisgIH0KKworICBtZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworICBkcnZpbmZvLmNtZCA9IEVUSFRPT0xfR0RSVklORk87CisgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpLTEpOworICBpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmZHJ2aW5mbzsKKworICByZXQgPSBpb2N0bChzLCBTSU9DRVRIVE9PTCwgJmlmcik7CisKKyAgaWYgKHJldCA9PSAtMSkgeworICAgIHN0cm5jcHkoZHJpdmVyLCJJb2N0bEZhaWx1cmUiLGxlbik7CisgICAgc3RybmNweSh2ZXJzaW9uLCJJb2N0bEZhaWx1cmUiLGxlbik7CisgICAgc3RybmNweShmaXJtd2FyZSwiSW9jdGxGYWlsdXJlIixsZW4pOworICAgIHN0cm5jcHkoYnVzLCJJb2N0bEZhaWx1cmUiLGxlbik7CisgICAgZHJpdmVyW2xlbi0xXSA9IDA7CisgICAgdmVyc2lvbltsZW4tMV0gPSAwOworICAgIGZpcm13YXJlW2xlbi0xXSA9IDA7CisgICAgYnVzW2xlbi0xXSA9IDA7CisgICAgcmV0dXJuOworICB9CisgIHN0cm5jcHkoZHJpdmVyLGRydmluZm8uZHJpdmVyLGxlbik7CisgIHN0cm5jcHkodmVyc2lvbixkcnZpbmZvLnZlcnNpb24sbGVuKTsKKyAgc3RybmNweShmaXJtd2FyZSxkcnZpbmZvLmZ3X3ZlcnNpb24sbGVuKTsKKyAgc3RybmNweShidXMsZHJ2aW5mby5idXNfaW5mbyxsZW4pOworICBkcml2ZXJbbGVuLTFdID0gMDsKKyAgdmVyc2lvbltsZW4tMV0gPSAwOworICBmaXJtd2FyZVtsZW4tMV0gPSAwOworICBidXNbbGVuLTFdID0gMDsKKyAgCisgIHJldHVybjsKK30KKworI2lmIGRlZmluZWQoTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHKQoraW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKworICBjaGFyIGRyaXZlclszMl07CisgIGNoYXIgdmVyc2lvblszMl07CisgIGNoYXIgZmlybXdhcmVbMzJdOworICBjaGFyIGJ1c2luZm9bMzJdOworCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwiJXMgPGludGVyZmFjZT5cbiIsYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgZmluZF9kcml2ZXJfaW5mbyhhcmd2WzFdLGRyaXZlciwgdmVyc2lvbiwgZmlybXdhcmUsIGJ1c2luZm8sIDMyKTsKKworICBwcmludGYoIkZvciAlcyBkcml2ZXIgJXMgdmVyc2lvbiAlcyBmaXJtd2FyZSAlcyBidXNpbmZvICVzXG4iLAorCSBhcmd2WzFdLGRyaXZlciwgdmVyc2lvbiwgZmlybXdhcmUsIGJ1c2luZm8pOworCisgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRkcnZfbm9uZS5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0ZHJ2X25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWM2NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0ZHJ2X25vbmUuYwpAQCAtMCwwICsxLDE1IEBACisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQKK2ZpbmRfZHJpdmVyX2luZm8oY2hhciAqaWZuYW1lLCBjaGFyICpkcml2ZXIsIGNoYXIgKnZlcnNpb24sIGNoYXIgKmZpcm13YXJlLCBjaGFyICpidXMsIGludCBsZW4pIHsKKworICAgIHN0cm5jcHkoZHJpdmVyLCJVbmF2YWlsYWJsZSIsbGVuKTsKKyAgICBzdHJuY3B5KHZlcnNpb24sIlVuYXZhaWxhYmxlIixsZW4pOworICAgIHN0cm5jcHkoZmlybXdhcmUsIlVuYXZhaWxhYmxlIixsZW4pOworICAgIHN0cm5jcHkoYnVzLCJVbmF2YWlsYWJsZSIsbGVuKTsKKyAgICBkcml2ZXJbbGVuLTFdID0gMDsKKyAgICB2ZXJzaW9uW2xlbi0xXSA9IDA7CisgICAgZmlybXdhcmVbbGVuLTFdID0gMDsKKyAgICBidXNbbGVuLTFdID0gMDsKKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRkcnZfc29sYXJpcy5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0ZHJ2X3NvbGFyaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmZiMWVjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0ZHJ2X3NvbGFyaXMuYwpAQCAtMCwwICsxLDY3IEBACisjaWYgZGVmaW5lZChIQVZFX0NPTkZJR19IKQorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWYgZGVmaW5lZChORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCit2b2lkCitmaW5kX2RyaXZlcl9pbmZvKGNoYXIgKmlmbmFtZSwgY2hhciAqZHJpdmVyLCBjaGFyICp2ZXJzaW9uLCBjaGFyICpmaXJtd2FyZSwgY2hhciAqYnVzLCBpbnQgbGVuKSB7CisKKyAgLyogdW50aWwgc29tZXRoaW5nIGJldHRlciBjb21lcyBhbG9uZywgd2Ugd2lsbCB1c2UgdGhlIGV4cGVkaWVudAorICAgICB0aGF0IHRoZSBpbnRlcmZhY2UgbmFtZSwgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGluc3RhbmNlCisgICAgIG51bWJlciBpcyB0aGUgZHJpdmVyIG5hbWUuIHJhaiAyMDA4LTAzLTE5ICovCisgIGludCBpOworCisgIHN0cm5jcHkoZHJpdmVyLGlmbmFtZSxsZW4pOworICBkcml2ZXJbbGVuLTFdID0gMDsKKworICAvKiB3b3JrIGJhY2t3YXJkcyBudWtpbmcgbnVtYmVycyBhbmQgcHVuY3R1YXRpb24gKi8KKyAgZm9yIChpID0gc3RybGVuKGRyaXZlcikgLSAxOyAoKGlzZGlnaXQoZHJpdmVyW2ldKSkgfHwKKwkJCQkoaXNwdW5jdChkcml2ZXJbaV0pKSkgJiYgKGkgPj0gMCk7IGktLSkgeworICAgIGRyaXZlcltpXSA9IDA7CisgIH0KKworICAvKiBvbiB0aGUgb2ZmIGNoYW5jZSB3ZSBtYW5hZ2VkIHRvIHRvYXN0IHRoZSBlbnRpcmUgc3RyaW5nLCB3ZQorICAgICBzaG91bGQgcHJvYmFibHkgbWVudGlvbiB0aGF0IHNvbWVob3cuIHJhaiAyMDA4LTAzLTE5ICovCisgIGlmIChzdHJsZW4oZHJpdmVyKSA9PSAwKSAKKyAgICBzdHJuY3B5KGRyaXZlciwiTm9BbHBoYSIsbGVuKTsKKworICBzdHJuY3B5KHZlcnNpb24sIlVuYXZhaWxhYmxlIixsZW4pOworICBzdHJuY3B5KGZpcm13YXJlLCJVbmF2YWlsYWJsZSIsbGVuKTsKKyAgc3RybmNweShidXMsIlVuYXZhaWxhYmxlIixsZW4pOworICB2ZXJzaW9uW2xlbi0xXSA9IDA7CisgIGZpcm13YXJlW2xlbi0xXSA9IDA7CisgIGJ1c1tsZW4tMV0gPSAwOworICByZXR1cm47Cit9CisKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisKKyNkZWZpbmUgTVlMRU4gMzIKKyAgY2hhciBkcml2ZXJbTVlMRU5dOworICBjaGFyIHZlcnNpb25bTVlMRU5dOworICBjaGFyIGZpcm13YXJlW01ZTEVOXTsKKyAgY2hhciBidXNbTVlMRU5dOworCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwiJXMgPGludGVyZmFjZW5hbWU+XG4iLGFyZ3ZbMF0pOworICAgIGV4aXQoLTEpOworICB9CisKKyAgZmluZF9kcml2ZXJfaW5mbyhhcmd2WzFdLGRyaXZlciwgdmVyc2lvbiwgZmlybXdhcmUsIGJ1cywgTVlMRU4pOworCisgIHByaW50ZigiSW50ZXJmYWNlICVzIGRyaXZlciAlcyB2ZXJzaW9uICVzIGZpcm13YXJlICVzIGJ1cyAlc1xuIiwKKwkgYXJndlsxXSwgZHJpdmVyLCB2ZXJzaW9uLCBmaXJtd2FyZSwgYnVzKTsKKworICByZXR1cm4gMDsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRsaWIuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNmYxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRsaWIuYwpAQCAtMCwwICsxLDQ1MDYgQEAKK2NoYXIgICAgbmV0bGliX2lkW109IlwKK0AoIyluZXRsaWIuYyAoYykgQ29weXJpZ2h0IDE5OTMtMjAwNyBIZXdsZXR0LVBhY2thcmQgQ29tcGFueS4gVmVyc2lvbiAyLjQuMyI7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbmV0bGliLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHRoZSBjb21tb24gdXRpbGl0eSByb3V0aW5lcyBhdmFpbGFibGUgdG8gYWxsLi4uICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBlc3RhYmxpc2hfY29udHJvbCgpICAgICBlc3RhYmxpc2ggdGhlIGNvbnRyb2wgc29ja2V0ICAgICovCisvKiAgICAgIGNhbGlicmF0ZV9sb2NhbF9jcHUoKSAgIGRvIGxvY2FsIGNwdSBjYWxpYnJhdGlvbiAgICAgICAgKi8KKy8qICAgICAgY2FsaWJyYXRlX3JlbW90ZV9jcHUoKSAgZG8gcmVtb3RlIGNwdSBjYWxpYnJhdGlvbiAgICAgICAqLworLyogICAgICBzZW5kX3JlcXVlc3QoKSAgICAgICAgICBzZW5kIGEgcmVxdWVzdCB0byB0aGUgcmVtb3RlICAgICovCisvKiAgICAgIHJlY3ZfcmVzcG9uc2UoKSAgICAgICAgIHJlY2VpdmUgYSByZXNwb25zZSBmcm9tIHJlbW90ZSAgKi8KKy8qICAgICAgc2VuZF9yZXNwb25zZSgpICAgICAgICAgc2VuZCBhIHJlc3BvbnNlIHRvIHRoZSByZW1vdGUgICAqLworLyogICAgICByZWN2X3JlcXVlc3QoKSAgICAgICAgICByZWN2IGEgcmVxdWVzdCBmcm9tIHRoZSByZW1vdGUgICovCisvKiAgICAgIGR1bXBfcmVxdWVzdCgpICAgICAgICAgIGR1bXAgcmVxdWVzdCBjb250ZW50cyAgICAgICAgICAgKi8KKy8qICAgICAgZHVtcF9yZXNwb25zZSgpICAgICAgICAgZHVtcCByZXNwb25zZSBjb250ZW50cyAgICAgICAgICAqLworLyogICAgICBjcHVfc3RhcnQoKSAgICAgICAgICAgICBzdGFydCBtZWFzdXJpbmcgY3B1ICAgICAgICAgICAgICovCisvKiAgICAgIGNwdV9zdG9wKCkgICAgICAgICAgICAgIHN0b3AgbWVhc3VyaW5nIGNwdSAgICAgICAgICAgICAgKi8KKy8qICAgICAgY2FsY19jcHVfdXRpbCgpICAgICAgICAgY2FsY3VsYXRlIHRoZSBjcHUgdXRpbGl6YXRpb24gICAqLworLyogICAgICBjYWxjX3NlcnZpY2VfZGVtYW5kKCkgICBjYWxjdWxhdGUgdGhlIHNlcnZpY2UgZGVtYW5kICAgICovCisvKiAgICAgIGNhbGNfdGhydXB1dCgpICAgICAgICAgIGNhbHVsYXRlIHRoZSB0cHV0IGluIHVuaXRzICAgICAgKi8KKy8qICAgICAgY2FsaWJyYXRlKCkgICAgICAgICAgICAgcmVhbGx5IGNhbGlicmF0ZSBsb2NhbCBjcHUgICAgICAqLworLyogICAgICBpZGVudGlmeV9sb2NhbCgpICAgICAgICBwcmludCBsb2NhbCBob3N0IGluZm9ybWF0aW9uICAgICovCisvKiAgICAgIGlkZW50aWZ5X3JlbW90ZSgpICAgICAgIHByaW50IHJlbW90ZSBob3N0IGluZm9ybWF0aW9uICAgKi8KKy8qICAgICAgZm9ybWF0X251bWJlcigpICAgICAgICAgZm9ybWF0IHRoZSBudW1iZXIgKEtCLCBNQixldGMpICAqLworLyogICAgICBmb3JtYXRfdW5pdHMoKSAgICAgICAgICByZXR1cm4gdGhlIGZvcm1hdCBpbiBlbmdsaXNoICAgICovCisvKiAgICAgIG1zZWNfc2xlZXAoKSAgICAgICAgICAgIHNsZWVwIGZvciBzb21lIG1zZWNzICAgICAgICAgICAgKi8KKy8qICAgICAgc3RhcnRfdGltZXIoKSAgICAgICAgICAgc3RhcnQgYSB0aW1lciAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHRoZSByb3V0aW5lcyB5b3UgZ2V0IHdoZW4gV0FOVF9ETFBJIGlzIGRlZmluZWQuLi4gICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRsX29wZW4oKSAgICAgICAgICAgICAgIG9wZW4gYSBmaWxlIGRlc2NyaXB0b3IgYW5kICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoIHRvIHRoZSBjYXJkICAgICAgICAgICAgICAqLworLyogICAgICBkbF9tdHUoKSAgICAgICAgICAgICAgICBmaW5kIHRoZSBNVFUgb2YgdGhlIGNhcmQgICAgICAgICovCisvKiAgICAgIGRsX2JpbmQoKSAgICAgICAgICAgICAgIGJpbmQgdGhlIHNhcCBkbyB0aGUgY2FyZCAgICAgICAgKi8KKy8qICAgICAgZGxfY29ubmVjdCgpICAgICAgICAgICAgc2VuZGVyJ3MgaGF2ZSBvZiBjb25uZWN0ICAgICAgICAqLworLyogICAgICBkbF9hY2NwZXQoKSAgICAgICAgICAgICByZWNlaXZlcidzIGhhbGYgb2YgY29ubmVjdCAgICAgICovCisvKiAgICAgIGRsX3NldF93aW5kb3coKSAgICAgICAgIHNldCB0aGUgd2luZG93IHNpemUgICAgICAgICAgICAgKi8KKy8qICAgICAgZGxfc3RhdHMoKSAgICAgICAgICAgICAgcmV0cmlldmUgc3RhdGlzdGljcyAgICAgICAgICAgICAqLworLyogICAgICBkbF9zZW5kX2Rpc2MoKSAgICAgICAgICBpbml0aWF0ZSBkaXNjb25uZWN0IChzZW5kZXIpICAgICovCisvKiAgICAgIGRsX3JlY3ZfZGlzYygpICAgICAgICAgIGFjY2VwdCBkaXNjb25uZWN0IChyZWNlaXZlcikgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBHbG9iYWwgaW5jbHVkZSBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyAvKiBJdCB3b3VsZCBzZWVtIHRoYXQgbW9zdCBvZiB0aGUgaW5jbHVkZXMgYmVpbmcgZG9uZSBoZXJlIGZyb20gKi8KKyAvKiAic3lzLyIgYWN0dWFsbHkgaGF2ZSBoaWdoZXItbGV2ZWwgd3JhcHBlcnMgYXQganVzdCAvdXNyL2luY2x1ZGUuICovCisgLyogVGhpcyBpcyBiYXNlZCBvbiBhIHNwb3QtY2hlY2sgb2YgYSBjb3VwbGUgc3lzdGVtcyBhdCBteSBkaXNwb3NhbC4gKi8KKyAvKiBJZiB5b3UgaGF2ZSB0cm91YmxlIGNvbXBpbGluZyB5b3UgbWF5IHdhbnQgdG8gYWRkICJzeXMvIiByYWogMTAvOTUgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBNUEUKKyMgIGRlZmluZSBOU0lHIF9OU0lHCisjZW5kaWYgLyogTVBFICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpZmRlZiBIQVZFX0VORElBTl9ICisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZW5kaWYKKworCisjaWZuZGVmIFdJTjMyCisgLyogYXQgc29tZSBwb2ludCwgSSB3b3VsZCBsaWtlIHRvIGdldCByaWQgb2YgYWxsIHRoZXNlICJzeXMvIiAqLworIC8qIGluY2x1ZGVzIHdoZXJlIGFwcHJvcHJpYXRlLiBpZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IHJlcXVpcmVzICovCisgLyogdGhlbSwgc3BlYWsgbm93LCBvciB5b3VyIHN5c3RlbSBtYXkgbm90IGNvbXBpbGUgbGF0ZXIgcmV2aXNpb25zIG9mICovCisgLyogbmV0cGVyZi4gcmFqIDEvOTYgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorI2lmbmRlZiBNUEUKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBNUEUgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2lmICFkZWZpbmVkKE1QRSkgJiYgIWRlZmluZWQoX19WTVMpCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYgLyogTVBFICovCisKKyNlbHNlIC8qIFdJTjMyICovCisKKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZGVmaW5lIG5ldHBlcmZfc29ja2xlbl90IHNvY2tsZW5fdAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworLyogdGhlIG9ubHkgdGltZSBzb21lb25lIHNob3VsZCBuZWVkIHRvIGRlZmluZSBET05UX0lQVjYgaW4gdGhlCisgICAic291cmNlcyIgZmlsZSBpcyBpZiB0aGV5IGFyZSB0cnlpbmcgdG8gY29tcGlsZSBvbiBXaW5kb3dzIDIwMDAgb3IKKyAgIE5UNCBhbmQgSSBzdXNwZWN0IHRoaXMgbWF5IG5vdCBiZSB0aGVpciBvbmx5IHByb2JsZW0gOikgKi8KKyNpZm5kZWYgRE9OVF9JUFY2CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjZGVmaW5lIHN0cmR1cCBfc3RyZHVwCisKKyNkZWZpbmUgU0lHQUxSTSAoMTQpCisjZGVmaW5lIHNsZWVwKHgpIFNsZWVwKCh4KSoxMDAwKQorCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2lmZGVmIEhBVkVfVU5BTUUKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmCisKKyNpZmRlZiBfQUlYCisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy9zY2hlZC5oPgorI2luY2x1ZGUgPHN5cy9wcmkuaD4KKyNkZWZpbmUgUFJJT1JJVFkgUFJJX0xPVworI2Vsc2UvKiBfQUlYICovCisjaWZkZWYgX19zZ2kgCisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjaW5jbHVkZSA8c3lzL3NjaGVkY3RsLmg+CisjZGVmaW5lIFBSSU9SSVRZIE5EUExPTUlOCisjZW5kaWYgLyogX19zZ2kgKi8KKyNlbmRpZiAvKiBfQUlYICovCisKKyNpZmRlZiBXQU5UX0RMUEkKKyNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CisjaW5jbHVkZSA8c3lzL3N0cm9wdHMuaD4KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2lmZGVmIF9fb3NmX18KKyNpbmNsdWRlIDxzeXMvZGxwaWhkci5oPgorI2Vsc2UgLyogX19vc2ZfXyAqLworI2luY2x1ZGUgPHN5cy9kbHBpLmg+CisjaWZkZWYgX19ocHV4CisjaW5jbHVkZSA8c3lzL2RscGlfZXh0Lmg+CisjZW5kaWYgLyogX19ocHV4ICovCisjZW5kaWYgLyogX19vc2ZfXyAqLworI2VuZGlmIC8qIFdBTlRfRExQSSAqLworCisjaWZkZWYgSEFWRV9NUENUTAorI2luY2x1ZGUgPHN5cy9tcGN0bC5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSB8fCAhZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorIyBpbmNsdWRlICJtaXNzaW5nL2dldGFkZHJpbmZvLmgiCisjZW5kaWYKKworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyNpbmNsdWRlICJoaXN0LmgiCisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIExvY2FsIEluY2x1ZGUgRmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE5FVExJQgorI2luY2x1ZGUgIm5ldGxpYi5oIgorI2luY2x1ZGUgIm5ldHNoLmgiCisjaW5jbHVkZSAibmV0Y3B1LmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEdsb2JhbCBjb25zdGFudHMsIG1hY3JvcyBhbmQgdmFyaWFibGVzICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fVk1TKQorc3RydWN0ICB0aW1lem9uZSB7CisgICAgICAgIGludCAgICAgZHVtbXkgOworICAgICAgICB9IDsKKyNpZm5kZWYgX19WTVMKK1NPQ0tFVCAgICAgd2luX2tsdWRnZV9zb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKK1NPQ0tFVCAgICAgd2luX2tsdWRnZV9zb2NrZXQyID0gSU5WQUxJRF9TT0NLRVQ7CisjZW5kaWYgLyogX19WTVMgKi8KKyNlbmRpZiAvKiBXSU4zMiB8fCBfX1ZNUyAqLworCisjaWZuZGVmIExPTkdfTE9OR19NQVgKKyNkZWZpbmUgTE9OR19MT05HX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyNlbmRpZiAvKiBMT05HX0xPTkdfTUFYICovCisKKyAvKiBvbGRlciB2ZXJzaW9ucyBvZiBuZXRwZXJmIGtuZXcgYWJvdXQgdGhlIEhQIGtlcm5lbCBJRExFIGNvdW50ZXIuICovCisgLyogdGhpcyBpcyBub3cgb2Jzb2xldGUgLSBpbiBmYXZvciBvZiBlaXRoZXIgcHN0YXQoKSwgdGltZXMsIG9yIGEgKi8KKyAvKiBwcm9jZXNzLWxldmVsIGxvb3BlciBwcm9jZXNzLiB3ZSBhbHNvIG5vdyByZXF1aXJlIHN1cHBvcnQgZm9yIHRoZSAqLworIC8qICJsb25nIiBpbnRlZ2VyIHR5cGUuIHJhaiA0Lzk1LiAgKi8KKworaW50IAorICBsaWJfbnVtX2xvY19jcHVzLCAgICAvKiB0aGUgbnVtYmVyIG9mIGNwdXMgaW4gdGhlIHN5c3RlbSAqLworICBsaWJfbnVtX3JlbV9jcHVzOyAgICAvKiBob3cgbWFueSB3ZSB0aGluayBhcmUgaW4gdGhlIHJlbW90ZSAqLworCitpbnQKKyAgbGliX2xvY2FsX3BlYWtfY3B1X2lkLCAvKiB0aGUgQ1BVIG51bWJlciBvZiB0aGUgbW9zdCB1dGlsaXplZCBDUFUgKi8KKyAgbGliX3JlbW90ZV9wZWFrX2NwdV9pZDsKK2RvdWJsZQorICBsaWJfbG9jYWxfcGVha19jcHVfdXRpbCwgLyogaXRzIHV0aWxpemF0aW9uICovCisgIGxpYl9yZW1vdGVfcGVha19jcHVfdXRpbDsKKworI2RlZmluZSBQQUdFU19QRVJfQ0hJTEQgMgorCitpbnQgICAgIGxpYl91c2VfaWRsZTsKK2ludCAgICAgY3B1X21ldGhvZDsKKworc3RydWN0ICB0aW1ldmFsICAgICAgICAgdGltZTEsIHRpbWUyOworc3RydWN0ICB0aW1lem9uZSAgICAgICAgdHo7CitmbG9hdCAgIGxpYl9lbGFwc2VkLAorICAgICAgICBsaWJfbG9jYWxfbWF4cmF0ZSwKKyAgICAgICAgbGliX3JlbW90ZV9tYXhyYXRlLAorICAgICAgICBsaWJfbG9jYWxfY3B1X3V0aWwsCisgICAgICAgIGxpYl9yZW1vdGVfY3B1X3V0aWw7CisKK2Zsb2F0ICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtNQVhDUFVTXTsKK2ludCAgICAgbGliX2NwdV9tYXBbTUFYQ1BVU107CisKK2ludCAgICAgKnJlcXVlc3RfYXJyYXk7CitpbnQgICAgICpyZXNwb25zZV9hcnJheTsKKworLyogSU5WQUxJRF9TT0NLRVQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgPT0gKHVuc2lnbmVkIGludCkofjApID09IC0xICovCitTT0NLRVQgIG5ldGxpYl9jb250cm9sID0gSU5WQUxJRF9TT0NLRVQ7ICAKK1NPQ0tFVCAgc2VydmVyX3NvY2sgPSBJTlZBTElEX1NPQ0tFVDsKKworLyogZ2xvYmFsIHZhcmlhYmxlcyB0byBob2xkIHRoZSB2YWx1ZSBmb3IgcHJvY2Vzc29yIGFmZmluaXR5ICovCitpbnQgICAgIGxvY2FsX3Byb2NfYWZmaW5pdHkgPSAtMSxyZW1vdGVfcHJvY19hZmZpbml0eSA9IC0xOworCisvKiB0aGVzZSBhcmUgdG8gYWxsb3cgbmV0cGVyZiB0byBiZSBydW4gZWFzaWx5IHRocm91Z2ggdGhvc2UgZXZpbCwKKyAgIGVuZC10by1lbmQgYnJlYWtpbmcgdGhpbmdzIGtub3duIGFzIGZpcmV3YWxscyAqLworY2hhciBsb2NhbF9kYXRhX3BvcnRbMTBdOworY2hhciByZW1vdGVfZGF0YV9wb3J0WzEwXTsKKworY2hhciAqbG9jYWxfZGF0YV9hZGRyZXNzPU5VTEw7CitjaGFyICpyZW1vdGVfZGF0YV9hZGRyZXNzPU5VTEw7CisKK2NoYXIgKmxvY2FsX3N5c25hbWUsICpyZW1vdGVfc3lzbmFtZTsKK2NoYXIgKmxvY2FsX3JlbGVhc2UsICpyZW1vdGVfcmVsZWFzZTsKK2NoYXIgKmxvY2FsX3ZlcnNpb24sICpyZW1vdGVfdmVyc2lvbjsKK2NoYXIgKmxvY2FsX21hY2hpbmUsICpyZW1vdGVfbWFjaGluZTsKKworaW50IGxvY2FsX2RhdGFfZmFtaWx5PUFGX1VOU1BFQzsKK2ludCByZW1vdGVfZGF0YV9mYW1pbHk9QUZfVU5TUEVDOworCisgLyogaW4gdGhlIHBhc3QsIEkgd2FzIG92ZXJsYXlpbmcgYSBzdHJ1Y3R1cmUgb24gYW4gYXJyYXkgb2YgaW50cy4gbm93ICovCisgLyogSSBhbSBnb2luZyB0byBoYXZlIGEgInJlYWwiIHN0cnVjdHVyZSwgYW5kIHBvaW50IGFuIGFycmF5IG9mIGludHMgKi8KKyAvKiBhdCBpdC4gdGhlIHJlYWwgc3RydWN0dXJlIHdpbGwgYmUgZm9yY2VkIHRvIHRoZSBzYW1lIGFsaWdubWVudCBhcyAqLworIC8qIHRoZSB0eXBlICJkb3VibGUuIiB0aGlzIGNoYW5nZSB3aWxsIG1lYW4gdGhhdCBwcmUtMi4xIG5ldHBlcmZzICovCisgLyogY2Fubm90IGJlIG1peGVkIHdpdGggMi4xIGFuZCBsYXRlci4gcmFqIDExLzk1ICovCisKK3VuaW9uICAgbmV0cGVyZl9yZXF1ZXN0X3N0cnVjdCAgbmV0cGVyZl9yZXF1ZXN0OwordW5pb24gICBuZXRwZXJmX3Jlc3BvbnNlX3N0cnVjdCBuZXRwZXJmX3Jlc3BvbnNlOworCitGSUxFICAgICp3aGVyZTsKKworY2hhciAgICBsaWJmbXQgPSAnPyc7CisgICAgICAgIAorI2lmZGVmIFdBTlRfRExQSQorLyogc29tZSBzdHVmZiBmb3IgRExQSSBjb250cm9sIG1lc3NhZ2VzICovCisjZGVmaW5lIERMUElfREFUQV9TSVpFIDIwNDgKKwordW5zaWduZWQgbG9uZyBjb250cm9sX2RhdGFbRExQSV9EQVRBX1NJWkVdOworc3RydWN0IHN0cmJ1ZiBjb250cm9sX21lc3NhZ2UgPSB7RExQSV9EQVRBX1NJWkUsIDAsIChjaGFyICopY29udHJvbF9kYXRhfTsKKworI2VuZGlmIC8qIFdBTlRfRExQSSAqLworCisjaWZkZWYgV0lOMzIKK0hBTkRMRSBoQWxhcm0gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyNlbmRpZgorCitpbnQgICAgIHRpbWVzX3VwOworCisjaWZkZWYgV0lOMzIKKyAvKiB3ZSB1c2UgYSBnZXRvcHQgaW1wbGVtZW50YXRpb24gZnJvbSBuZXQuc291cmNlcyAqLworLyoKKyAqIGdldCBvcHRpb24gbGV0dGVyIGZyb20gYXJndW1lbnQgdmVjdG9yCisgKi8KK2ludAorICAgICAgICBvcHRlcnIgPSAxLCAgICAgICAgICAgICAvKiBzaG91bGQgZXJyb3IgbWVzc2FnZXMgYmUgcHJpbnRlZD8gKi8KKyAgICAgICAgb3B0aW5kID0gMSwgICAgICAgICAgICAgLyogaW5kZXggaW50byBwYXJlbnQgYXJndiB2ZWN0b3IgKi8KKyAgICAgICAgb3B0b3B0OyAgICAgICAgICAgICAgICAgLyogY2hhcmFjdGVyIGNoZWNrZWQgZm9yIHZhbGlkaXR5ICovCitjaGFyCisgICAgICAgICpvcHRhcmc7ICAgICAgICAgICAgICAgIC8qIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCBvcHRpb24gKi8KKworI2RlZmluZSBFTVNHICAgICIiCisKKyNlbmRpZiAvKiBXSU4zMiAqLworCitzdGF0aWMgaW50IG1lYXN1cmluZ19jcHU7CitpbnQKK25ldGxpYl9nZXRfcGFnZV9zaXplKHZvaWQpIHsKKworIC8qIG5vdCBhbGwgc3lzdGVtcyBzZWVtIHRvIGhhdmUgdGhlIHN5c2NvbmYgZm9yIHBhZ2Ugc2l6ZS4gZm9yCisgICAgdGhvc2UgIHdoaWNoIGRvIG5vdCwgd2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGUgcGFnZSBzaXplIGlzIDgxOTIKKyAgICBieXRlcy4gIHRoaXMgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggdG8gYmUgc3VyZSB0aGF0IHRoZXJlIGlzCisgICAgbm8gcGFnZSAgb3IgY2FjaGUgdGhyYXNoaW5nIGJ5IGxvb3BlciBwcm9jZXNzZXMgb24gTVAKKyAgICBzeXN0ZW1zLiBvdGhlcndpc2UgIHRoYXQncyByZWFsbHkganVzdCB0b28gYmFkIC0gc3VjaCBzeXN0ZW1zCisgICAgc2hvdWxkIGRlZmluZSAgX1NDX1BBR0VfU0laRSAtIHJhaiA0Lzk1ICovIAorCisjaWZuZGVmIF9TQ19QQUdFX1NJWkUKKyNpZmRlZiBXSU4zMgorCitTWVNURU1fSU5GTyBTeXN0ZW1JbmZvOworCisgR2V0U3lzdGVtSW5mbygmU3lzdGVtSW5mbyk7CisKKyByZXR1cm4gU3lzdGVtSW5mby5kd1BhZ2VTaXplOworI2Vsc2UKKyByZXR1cm4oODE5MkwpOworI2VuZGlmICAvKiBXSU4zMiAqLworI2Vsc2UKKyByZXR1cm4oc3lzY29uZihfU0NfUEFHRV9TSVpFKSk7CisjZW5kaWYgLyogX1NDX1BBR0VfU0laRSAqLworCit9CisKKwwKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworc3RhdGljIHVuc2lnbmVkIGludCB1c2VjX3Blcl9pdHZsOworCisKK3ZvaWQKK3N0b3BfaXRpbWVyKCkKKworeworCisgIHN0cnVjdCBpdGltZXJ2YWwgbmV3X2ludGVydmFsOworICBzdHJ1Y3QgaXRpbWVydmFsIG9sZF9pbnRlcnZhbDsKKworICBuZXdfaW50ZXJ2YWwuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKKyAgbmV3X2ludGVydmFsLml0X2ludGVydmFsLnR2X3VzZWMgPSAwOyAgCisgIG5ld19pbnRlcnZhbC5pdF92YWx1ZS50dl9zZWMgPSAwOworICBuZXdfaW50ZXJ2YWwuaXRfdmFsdWUudHZfdXNlYyA9IDA7ICAKKyAgaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwmbmV3X2ludGVydmFsLCZvbGRfaW50ZXJ2YWwpICE9IDApIHsKKyAgICAvKiB0aGVyZSB3YXMgYSBwcm9ibGVtIGFybWluZyB0aGUgaW50ZXJ2YWwgdGltZXIgKi8gCisgICAgcGVycm9yKCJuZXRwZXJmOiBzZXRpdGltZXIiKTsKKyAgICBleGl0KDEpOworICB9CisgIHJldHVybjsKK30KKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworDAorCisMCisjaWZkZWYgV0lOMzIKK3N0YXRpYyB2b2lkCitlcnJvcihjaGFyICpwY2gpCit7CisgIGlmICghb3B0ZXJyKSB7CisgICAgcmV0dXJuOyAgICAgICAgICAgICAvKiB3aXRob3V0IHByaW50aW5nICovCisgICAgfQorICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlczogJWNcbiIsCisgICAgICAgICAgKE5VTEwgIT0gcHJvZ3JhbSkgPyBwcm9ncmFtIDogImdldG9wdCIsIHBjaCwgb3B0b3B0KTsKK30KKworaW50CitnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICpvc3RyKQoreworICBzdGF0aWMgY2hhciAqcGxhY2UgPSBFTVNHOyAgICAvKiBvcHRpb24gbGV0dGVyIHByb2Nlc3NpbmcgKi8KKyAgcmVnaXN0ZXIgY2hhciAqb2xpOyAgICAgICAgICAgICAgICAgICAvKiBvcHRpb24gbGV0dGVyIGxpc3QgaW5kZXggKi8KKyAgCisgIGlmICghKnBsYWNlKSB7CisgICAgLyogdXBkYXRlIHNjYW5uaW5nIHBvaW50ZXIgKi8KKyAgICAgIGlmIChvcHRpbmQgPj0gYXJnYyB8fCAqKHBsYWNlID0gYXJndltvcHRpbmRdKSAhPSAnLScgfHwgISorK3BsYWNlKSB7CisgICAgICAgIHJldHVybiBFT0Y7IAorICAgICAgfQorICAgIGlmICgqcGxhY2UgPT0gJy0nKSB7CisgICAgICAvKiBmb3VuZCAiLS0iICovCisgICAgICAgICsrb3B0aW5kOworICAgICAgcGxhY2UgPSBFTVNHIDsgICAgLyogQWRkZWQgYnkgc2hpdmEgZm9yIE5ldHBlcmYgKi8KKyAgICAgICAgcmV0dXJuIEVPRjsKKyAgICB9CisgIH0KKyAgCisgIC8qIG9wdGlvbiBsZXR0ZXIgb2theT8gKi8KKyAgaWYgKChvcHRvcHQgPSAoaW50KSpwbGFjZSsrKSA9PSAoaW50KSc6JworICAgICAgfHwgIShvbGkgPSBzdHJjaHIob3N0ciwgb3B0b3B0KSkpIHsKKyAgICBpZiAoISpwbGFjZSkgeworICAgICAgKytvcHRpbmQ7CisgICAgfQorICAgIGVycm9yKCJpbGxlZ2FsIG9wdGlvbiIpOworICAgIHJldHVybiBCQURDSDsKKyAgfQorICBpZiAoKisrb2xpICE9ICc6JykgeyAgCisgICAgLyogZG9uJ3QgbmVlZCBhcmd1bWVudCAqLworICAgIG9wdGFyZyA9IE5VTEw7CisgICAgaWYgKCEqcGxhY2UpCisgICAgICArK29wdGluZDsKKyAgfSBlbHNlIHsKKyAgICAvKiBuZWVkIGFuIGFyZ3VtZW50ICovCisgICAgaWYgKCpwbGFjZSkgeworICAgICAgb3B0YXJnID0gcGxhY2U7ICAgICAgICAgICAvKiBubyB3aGl0ZSBzcGFjZSAqLworICAgIH0gZWxzZSAgaWYgKGFyZ2MgPD0gKytvcHRpbmQpIHsKKyAgICAgIC8qIG5vIGFyZyAqLworICAgICAgcGxhY2UgPSBFTVNHOworICAgICAgZXJyb3IoIm9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgcmV0dXJuIEJBRENIOworICAgIH0gZWxzZSB7CisgICAgICBvcHRhcmcgPSBhcmd2W29wdGluZF07ICAgICAgICAgICAgLyogd2hpdGUgc3BhY2UgKi8KKyAgICB9CisgICAgcGxhY2UgPSBFTVNHOworICAgICsrb3B0aW5kOworICB9CisgIHJldHVybiBvcHRvcHQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIG9wdGlvbiBsZXR0ZXIgKi8KK30KKyNlbmRpZiAvKiBXSU4zMiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdJTjMyIGltcGxlbWVudGF0aW9uIG9mIHBlcnJvciwgZG9lcyBub3QgZGVhbCB2ZXJ5IHdlbGwgd2l0aCBXU0EgZXJyb3JzCisgKiBUaGUgc3RkbGliLmggdmVyc2lvbiBvZiBwZXJyb3Igb25seSBkZWFscyB3aXRoIHRoZSBhbmNpZW50IFhFTklYIGVycm9yIGNvZGVzLgorICoKKyAqICsqK1NBRiBXaHkgY2FuJ3QgYWxsIFdTQSBlcnJvcnMgZ28gdGhyb3VnaCBHZXRMYXN0RXJyb3I/ICBNb3N0IHNlZW0gdG8uLi4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgV0lOMzIKK3ZvaWQgUHJpbnRXaW4zMkVycm9yKEZJTEUgKnN0cmVhbSwgTFBTVFIgdGV4dCkKK3sKKyAgICBMUFNUUiAgICBzelRlbXA7CisgICAgRFdPUkQgICAgZHdSZXN1bHQ7CisgICAgRFdPUkQgICAgZHdFcnJvcjsKKworICAgIGR3RXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICBkd1Jlc3VsdCA9IEZvcm1hdE1lc3NhZ2UoCisgICAgICAgIEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUnxGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSB8Rk9STUFUX01FU1NBR0VfQVJHVU1FTlRfQVJSQVksCisgICAgICAgIE5VTEwsIAorICAgICAgICBkd0Vycm9yLCAKKyAgICAgICAgTEFOR19ORVVUUkFMLCAKKyAgICAgICAgKExQVFNUUikmc3pUZW1wLCAKKyAgICAgICAgMCwgCisgICAgICAgIE5VTEwgKTsKKworICAgIGlmIChkd1Jlc3VsdCkKKyAgICAgICAgZnByaW50ZihzdHJlYW0sICIlczogJXNcbiIsIHRleHQsIHN6VGVtcCk7CisgICAgZWxzZQorICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVzOiBlcnJvciAweCV4XG4iLCB0ZXh0LCBkd0Vycm9yKTsKKwlmZmx1c2goc3RyZWFtKTsKKworICAgIGlmIChzelRlbXApCisgICAgICAgIExvY2FsRnJlZSgoSExPQ0FMKXN6VGVtcCk7Cit9CisjZW5kaWYgLyogV0lOMzIgKi8KKworY2hhciAqCituc2VjX2VuYWJsZWRfdG9fc3RyKGludCBlbmFibGVkKSB7CisgIHN3aXRjaCAoZW5hYmxlZCkgeworICBjYXNlIE5TRUNfVU5LTk9XTjoKKyAgICByZXR1cm4oIlVua25vd24iKTsKKyAgY2FzZSBOU0VDX0RJU0FCTEVEOgorICAgIHJldHVybigiRGlzYWJsZWQiKTsKKyAgY2FzZSBOU0VDX1BFUk1JU1NJVkU6CisgICAgcmV0dXJuKCJQZXJtaXNzaXZlIik7CisgIGNhc2UgTlNFQ19FTkZPUkNJTkc6CisgICAgcmV0dXJuKCJFbmZvcmNpbmciKTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4oIlVOS05PV04gTU9ERSIpOworICB9Cit9CisKK2NoYXIgKiBuc2VjX3R5cGVfdG9fc3RyKGludCB0eXBlKSB7CisgIHN3aXRjaCAodHlwZSkgeworICBjYXNlIE5TRUNfVFlQRV9VTktOT1dOOgorICAgIHJldHVybigiVW5rbm93biIpOworICBjYXNlIE5TRUNfVFlQRV9TRUxJTlVYOgorICAgIHJldHVybigiU0VMaW51eCIpOworICBkZWZhdWx0OgorICAgIHJldHVybigiVU5LTk9XTiBUWVBFIik7CisgIH0KK30KKworDAorY2hhciAqCitpbmV0X3R0b3MoaW50IHR5cGUpIAoreworICBzd2l0Y2ggKHR5cGUpIHsKKyAgY2FzZSBTT0NLX0RHUkFNOgorICAgIHJldHVybigiU09DS19ER1JBTSIpOworICAgIGJyZWFrOworICBjYXNlIFNPQ0tfU1RSRUFNOgorICAgIHJldHVybigiU09DS19TVFJFQU0iKTsKKyAgICBicmVhazsKKyNpZmRlZiBTT0NLX0RDQ1AKKyAgY2FzZSBTT0NLX0RDQ1A6CisgICAgcmV0dXJuICJTT0NLX0RDQ1AiOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgcmV0dXJuKCJTT0NLX1VOS05PV04iKTsKKyAgfQorfQorCisKKwwKK2NoYXIgdW5rbm93blszMl07CisKK2NoYXIgKgoraW5ldF9wdG9zKGludCBwcm90b2NvbCkgeworICBzd2l0Y2ggKHByb3RvY29sKSB7CisgIGNhc2UgSVBQUk9UT19UQ1A6CisgICAgcmV0dXJuKCJJUFBST1RPX1RDUCIpOworICAgIGJyZWFrOworICBjYXNlIElQUFJPVE9fVURQOgorICAgIHJldHVybigiSVBQUk9UT19VRFAiKTsKKyAgICBicmVhazsKKyNpZiBkZWZpbmVkKElQUFJPVE9fU0NUUCkKKyAgY2FzZSBJUFBST1RPX1NDVFA6CisgICAgcmV0dXJuKCJJUFBST1RPX1NDVFAiKTsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoSVBQUk9UT19EQ0NQKQorICBjYXNlIElQUFJPVE9fRENDUDoKKyAgICByZXR1cm4gIklQUFJPVE9fRENDUCI7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBzbnByaW50Zih1bmtub3duLHNpemVvZih1bmtub3duKSwiSVBQUk9UT19VTktOT1dOKCVkKSIscHJvdG9jb2wpOworICAgIHJldHVybih1bmtub3duKTsKKyAgfQorfQorCisvKiBvbmUgb2YgdGhlc2UgZGF5cywgdGhpcyBzaG91bGQgbm90IGJlIHJlcXVpcmVkICovCisjaWZuZGVmIEFGX0lORVRfU0RQCisjZGVmaW5lIEFGX0lORVRfU0RQIDI3CisjZGVmaW5lIFBGX0lORVRfU0RQIEFGX0lORVRfU0RQCisjZW5kaWYgCisKK2NoYXIgKgoraW5ldF9mdG9zKGludCBmYW1pbHkpIAoreworICBzd2l0Y2goZmFtaWx5KSB7CisgIGNhc2UgQUZfSU5FVDoKKyAgICByZXR1cm4oIkFGX0lORVQiKTsKKyAgICBicmVhazsKKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICBjYXNlIEFGX0lORVQ2OgorICAgIHJldHVybigiQUZfSU5FVDYiKTsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoQUZfSU5FVF9TRFApCisgIGNhc2UgQUZfSU5FVF9TRFA6CisgICAgcmV0dXJuKCJBRl9JTkVUX1NEUCIpOworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgcmV0dXJuKCJBRl9VTlNQRUMiKTsKKyAgfQorfQorCitpbnQKK2luZXRfbnRvbihpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBpbnQgY250KSAKKworeworCisgIHN3aXRjaCAoYWYpIHsKKyAgY2FzZSBBRl9JTkVUOgorICAgIC8qIG1hZ2ljIGNvbnN0YW50cyBhZ2Fpbi4uLiA6KSAqLworICAgIGlmIChjbnQgPj0gNCkgeworICAgICAgbWVtY3B5KGRzdCxzcmMsNCk7CisgICAgICByZXR1cm4gNDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8oRU5PU1BDKTsKKyAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGJyZWFrOworI2lmIGRlZmluZWQoQUZfSU5FVDYpCisgIGNhc2UgQUZfSU5FVDY6CisgICAgaWYgKGNudCA+PSAxNikgeworICAgICAgbWVtY3B5KGRzdCxzcmMsMTYpOworICAgICAgcmV0dXJuKDE2KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8oRU5PU1BDKTsKKyAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgU2V0X2Vycm5vKEVBRk5PU1VQUE9SVCk7CisgICAgcmV0dXJuKC0xKTsKKyAgfQorfQorCitkb3VibGUKK250b2hkKGRvdWJsZSBuZXRfZG91YmxlKQorCit7CisgIC8qIHdlIHJlbHkgb24gdGhpbmdzIGJlaW5nIG5pY2VseSBwYWNrZWQgKi8KKyAgdW5pb24geworICAgIGRvdWJsZSB3aG9sZV90aGluZzsKKyAgICB1bnNpZ25lZCBpbnQgd29yZHNbMl07CisgICAgdW5zaWduZWQgY2hhciBieXRlc1s4XTsKKyAgfSBjb252X3JlYzsKKworICB1bnNpZ25lZCBjaGFyIHNjcmF0Y2g7CisgIGludCBpOworCisgIC8qIG9uIHRob3NlIHN5c3RlbXMgd2hlcmUgbnRvaGwgaXMgYSBuby1vcCwgd2Ugd2FudCB0byByZXR1cm4gdGhlICovCisgIC8qIG9yaWdpbmFsIHZhbHVlLCB1bmNoYW5nZWQgKi8KKworICBpZiAobnRvaGwoMUwpID09IDFMKSB7CisgICAgcmV0dXJuKG5ldF9kb3VibGUpOworICB9CisKKyAgY29udl9yZWMud2hvbGVfdGhpbmcgPSBuZXRfZG91YmxlOworCisgIC8qIHdlIGtub3cgdGhhdCBpbiB0aGUgbWVzc2FnZSBwYXNzaW5nIHJvdXRpbmVzIHRoYXQgbnRvaGwgd2lsbCBoYXZlICovCisgIC8qIGJlZW4gY2FsbGVkIG9uIHRoZSAzMiBiaXQgcXVhbnRpdGllcy4gd2UgbmVlZCB0byBwdXQgdGhvc2UgYmFjayAqLworICAvKiB0aGUgd2F5IHRoZXkgYmVsb25nIGJlZm9yZSB3ZSBzd2FwICovCisgIGNvbnZfcmVjLndvcmRzWzBdID0gaHRvbmwoY29udl9yZWMud29yZHNbMF0pOworICBjb252X3JlYy53b3Jkc1sxXSA9IGh0b25sKGNvbnZfcmVjLndvcmRzWzFdKTsKKyAgCisgIC8qIG5vdyBzd2FwICovCisgIGZvciAoaT0wOyBpPD0gMzsgaSsrKSB7CisgICAgc2NyYXRjaCA9IGNvbnZfcmVjLmJ5dGVzW2ldOworICAgIGNvbnZfcmVjLmJ5dGVzW2ldID0gY29udl9yZWMuYnl0ZXNbNy1pXTsKKyAgICBjb252X3JlYy5ieXRlc1s3LWldID0gc2NyYXRjaDsKKyAgfQorCisjaWYgZGVmaW5lZChfX0ZMT0FUX1dPUkRfT1JERVIpICYmIGRlZmluZWQoX19CWVRFX09SREVSKQorICBpZiAoX19GTE9BVF9XT1JEX09SREVSICE9IF9fQllURV9PUkRFUikgeworICAgIC8qIEZpeHVwIG1peGVkIGVuZGlhbiBmbG9hdGluZyBwb2ludCBtYWNoaW5lcyAqLworICAgIHVuc2lnbmVkIGludCBzY3JhdGNoID0gY29udl9yZWMud29yZHNbMF07CisgICAgY29udl9yZWMud29yZHNbMF0gPSBjb252X3JlYy53b3Jkc1sxXTsKKyAgICBjb252X3JlYy53b3Jkc1sxXSA9IHNjcmF0Y2g7CisgIH0KKyNlbmRpZgorCisgIHJldHVybihjb252X3JlYy53aG9sZV90aGluZyk7CisgIAorfQorCitkb3VibGUKK2h0b25kKGRvdWJsZSBob3N0X2RvdWJsZSkKKworeworICAvKiB3ZSByZWx5IG9uIHRoaW5ncyBiZWluZyBuaWNlbHkgcGFja2VkICovCisgIHVuaW9uIHsKKyAgICBkb3VibGUgd2hvbGVfdGhpbmc7CisgICAgdW5zaWduZWQgaW50IHdvcmRzWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbOF07CisgIH0gY29udl9yZWM7CisKKyAgdW5zaWduZWQgY2hhciBzY3JhdGNoOworICBpbnQgaTsKKworICAvKiBvbiB0aG9zZSBzeXN0ZW1zIHdoZXJlIG50b2hsIGlzIGEgbm8tb3AsIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSAqLworICAvKiBvcmlnaW5hbCB2YWx1ZSwgdW5jaGFuZ2VkICovCisKKyAgaWYgKG50b2hsKDFMKSA9PSAxTCkgeworICAgIHJldHVybihob3N0X2RvdWJsZSk7CisgIH0KKworICBjb252X3JlYy53aG9sZV90aGluZyA9IGhvc3RfZG91YmxlOworCisgIC8qIG5vdyBzd2FwICovCisgIGZvciAoaT0wOyBpPD0gMzsgaSsrKSB7CisgICAgc2NyYXRjaCA9IGNvbnZfcmVjLmJ5dGVzW2ldOworICAgIGNvbnZfcmVjLmJ5dGVzW2ldID0gY29udl9yZWMuYnl0ZXNbNy1pXTsKKyAgICBjb252X3JlYy5ieXRlc1s3LWldID0gc2NyYXRjaDsKKyAgfQorICAKKyNpZiBkZWZpbmVkKF9fRkxPQVRfV09SRF9PUkRFUikgJiYgZGVmaW5lZChfX0JZVEVfT1JERVIpCisgIGlmIChfX0ZMT0FUX1dPUkRfT1JERVIgIT0gX19CWVRFX09SREVSKSB7CisgICAgLyogRml4dXAgbWl4ZWQgZW5kaWFuIGZsb2F0aW5nIHBvaW50IG1hY2hpbmVzICovCisgICAgdW5zaWduZWQgaW50IHNjcmF0Y2ggPSBjb252X3JlYy53b3Jkc1swXTsKKyAgICBjb252X3JlYy53b3Jkc1swXSA9IGNvbnZfcmVjLndvcmRzWzFdOworICAgIGNvbnZfcmVjLndvcmRzWzFdID0gc2NyYXRjaDsKKyAgfQorI2VuZGlmCisKKyAgLyogd2Uga25vdyB0aGF0IGluIHRoZSBtZXNzYWdlIHBhc3Npbmcgcm91dGluZXMgaHRvbmwgd2lsbCAqLworICAvKiBiZSBjYWxsZWQgb24gdGhlIDMyIGJpdCBxdWFudGl0aWVzLiB3ZSBuZWVkIHRvIHNldCB0aGluZ3MgdXAgc28gKi8KKyAgLyogdGhhdCB3aGVuIHRoaXMgaGFwcGVucywgdGhlIHByb3BlciBvcmRlciB3aWxsIGdvIG91dCBvbiB0aGUgKi8KKyAgLyogbmV0d29yayAqLworICBjb252X3JlYy53b3Jkc1swXSA9IGh0b25sKGNvbnZfcmVjLndvcmRzWzBdKTsKKyAgY29udl9yZWMud29yZHNbMV0gPSBodG9ubChjb252X3JlYy53b3Jkc1sxXSk7CisgIAorICByZXR1cm4oY29udl9yZWMud2hvbGVfdGhpbmcpOworICAKK30KKwwKKworLyogb25lIG9mIHRoZXNlIGRheXMsIHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQtb3V0IGp1c3QgbGlrZSB0aGUgQ1BVCisgICB1dGlsIHN0dWZmLiAgcmFqIDIwMDUtMDEtMjcgKi8KK2ludAorZ2V0X251bV9jcHVzKCkKKworeworCisgIC8qIG9uIEhQLVVYLCBldmVuIHdoZW4gd2UgdXNlIHRoZSBsb29wZXIgcHJvY3Mgd2UgbmVlZCB0aGUgcHN0YXQgKi8KKyAgLyogY2FsbCAqLyAKKworICBpbnQgdGVtcF9jcHVzOworCisjaWZkZWYgX19ocHV4CisjaW5jbHVkZSA8c3lzL3BzdGF0Lmg+CisKKyAgc3RydWN0IHBzdF9keW5hbWljIHBzZDsKKworICBpZiAocHN0YXRfZ2V0ZHluYW1pYygoc3RydWN0IHBzdF9keW5hbWljICopJnBzZCwgCisgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3Qpc2l6ZW9mKHBzZCksIChzaXplX3QpMSwgMCkgIT0gLTEpIHsKKyAgICB0ZW1wX2NwdXMgPSBwc2QucHNkX3Byb2NfY250OworICB9CisgIGVsc2UgeworICAgIHRlbXBfY3B1cyA9IDE7CisgIH0KKworI2Vsc2UKKyAgLyogTVc6IDx1bmlzdGQuaD4gd2FzIGluY2x1ZGVkIGZvciBub24tV2luZG93cyBzeXN0ZW1zIGFib3ZlLiAqLworICAvKiBUaHVzIGlmIF9TQ19OUFJPQ19PTkxOIGlzIGRlZmluZWQsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBzeXNjb25mLiAqLworI2lmZGVmIF9TQ19OUFJPQ0VTU09SU19PTkxOCisgIHRlbXBfY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworCisjaWZkZWYgVVNFX1BFUkZTVEFUCisgIHRlbXBfY3B1cyA9IHBlcmZzdGF0X2NwdShOVUxMLE5VTEwsIHNpemVvZihwZXJmc3RhdF9jcHVfdCksIDApOworI2VuZGlmIC8qIFVTRV9QRVJGU1RBVCAqLworCisjZWxzZSAvKiBubyBfU0NfTlBST0NFU1NPUlNfT05MTiAqLworCisjaWZkZWYgV0lOMzIKKyAgU1lTVEVNX0lORk8gU3lzdGVtSW5mbzsKKyAgR2V0U3lzdGVtSW5mbygmU3lzdGVtSW5mbyk7CisgIAorICB0ZW1wX2NwdXMgPSBTeXN0ZW1JbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOworI2Vsc2UKKyAgLyogd2UgbmVlZCB0byBrbm93IHNvbWUgb3RoZXIgd2F5cyB0byBkbyB0aGlzLCBvciBqdXN0IGZhbGwtYmFjayBvbiAqLworICAvKiBhIGdsb2JhbCBjb21tYW5kIGxpbmUgb3B0aW9uIC0gcmFqIDQvOTUgKi8KKyAgdGVtcF9jcHVzID0gc2hlbGxfbnVtX2NwdXM7CisjZW5kaWYgIC8qIFdJTjMyICovCisjZW5kaWYgLyogX1NDX05QUk9DRVNTT1JTX09OTE4gKi8KKyNlbmRpZiAvKiAgX19ocHV4ICovCisKKyAgaWYgKHRlbXBfY3B1cyA+IE1BWENQVVMpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgIlNvcnJ5LCB0aGlzIHN5c3RlbSBoYXMgbW9yZSBDUFVzICglZCkgdGhhbiBJIGNhbiBoYW5kbGUgKCVkKS5cbiIsCisgICAgICAgICAgICB0ZW1wX2NwdXMsCisgICAgICAgICAgICBNQVhDUFVTKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgIlBsZWFzZSBhbHRlciBNQVhDUFVTIGluIG5ldGxpYi5oIGFuZCByZWNvbXBpbGUuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKworICByZXR1cm4odGVtcF9jcHVzKTsKKyAgCit9ICAKKworI2lmZGVmIFdJTjMyCisjaWZkZWYgX19HTlVDX18KKyAgI2RlZmluZSBTNjRfU1VGRklYKHgpIHgjI0xMCisjZWxzZQorICAjZGVmaW5lIFM2NF9TVUZGSVgoeCkgeCMjaTY0CisjZW5kaWYKKworLyoKKyAqIE51bWJlciBvZiAxMDAgbmFub3NlY29uZCB1bml0cyBmcm9tIDEvMS8xNjAxIHRvIDEvMS8xOTcwCisgKi8KKyNkZWZpbmUgRVBPQ0hfQklBUyAgUzY0X1NVRkZJWCgxMTY0NDQ3MzYwMDAwMDAwMDApCisKKy8qCisgKiBVbmlvbiB0byBmYWNpbGl0YXRlIGNvbnZlcnRpbmcgZnJvbSBGSUxFVElNRSB0byB1bnNpZ25lZCBfX2ludDY0CisgKi8KK3R5cGVkZWYgdW5pb24geworICAgICAgICB1bnNpZ25lZCBfX2ludDY0IGZ0X3NjYWxhcjsKKyAgICAgICAgRklMRVRJTUUgZnRfc3RydWN0OworfSBGVDsKKwordm9pZAorZ2V0dGltZW9mZGF5KCBzdHJ1Y3QgdGltZXZhbCAqdHYgLCBzdHJ1Y3QgdGltZXpvbmUgKm5vdF91c2VkICkKK3sKKyAgICAgICAgRlQgbnRfdGltZTsKKyAgICAgICAgX19pbnQ2NCBVbml4VGltZTsgIC8qIG1pY3Jvc2Vjb25kcyBzaW5jZSAxLzEvMTk3MCAqLworCisgICAgICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCAmKG50X3RpbWUuZnRfc3RydWN0KSApOworCisgICAgICAgIFVuaXhUaW1lID0gKChudF90aW1lLmZ0X3NjYWxhciAtIEVQT0NIX0JJQVMpIC8gUzY0X1NVRkZJWCgxMCkpOworICAgICAgICB0di0+dHZfc2VjID0gKGxvbmcpKHRpbWVfdCkoVW5peFRpbWUgLyBTNjRfU1VGRklYKDEwMDAwMDApKTsKKyAgICAgICAgdHYtPnR2X3VzZWMgPSAodW5zaWduZWQgbG9uZykoVW5peFRpbWUgJSBTNjRfU1VGRklYKDEwMDAwMDApKTsKK30KKyNlbmRpZiAvKiBXSU4zMiAqLworCisMICAgICAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHNpZ25hbCBjYXRjaGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKKyNpZiBkZWZpbmVkKF9faHB1eCkgCitjYXRjaGVyKHNpZywgY29kZSwgc2NwKQorICAgICBpbnQgc2lnOworICAgICBpbnQgY29kZTsKKyAgICAgc3RydWN0IHNpZ2NvbnRleHQgKnNjcDsKKyNlbHNlIAorY2F0Y2hlcihpbnQgc2lnKQorI2VuZGlmIC8qIF9faHB1eCB8fCBfX1ZNUyAqLworeworCisjaWZkZWYgX19ocHV4CisgIGlmIChkZWJ1ZyA+IDIpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJjYXVnaHQgc2lnbmFsICVkICIsc2lnKTsKKyAgICBpZiAoc2NwKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJ3aGlsZSBpbiBzeXNjYWxsICVkXG4iLAorICAgICAgICAgICAgICBzY3AtPnNjX3N5c2NhbGwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm51bGwgc2NwXG4iKTsKKyAgICB9CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorI2VuZGlmIC8qIFJBSl9ERUJVRyAqLworCisgIHN3aXRjaChzaWcpIHsKKyAgICAKKyAgY2FzZSBTSUdJTlQ6CisgICAgZnByaW50Zih3aGVyZSwibmV0cGVyZjogY2F1Z2h0IFNJR0lOVFxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICAgIGJyZWFrOworICBjYXNlIFNJR0FMUk06IAorICAgaWYgKC0tdGVzdF9sZW5fdGlja3MgPT0gMCkgeworICAgICAgLyogdGhlIHRlc3QgaXMgb3ZlciAqLworICAgICAgaWYgKHRpbWVzX3VwICE9IDApIHsKKyAgICAgICAgZnByaW50Zih3aGVyZSwiY2F0Y2hlcjogdGltZXIgcG9wcGVkIHdpdGggdGltZXNfdXAgIT0gMFxuIik7CisgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICB0aW1lc191cCA9IDE7CisjaWYgZGVmaW5lZChXQU5UX0lOVEVSVkFMUykgJiYgIWRlZmluZWQoV0FOVF9TUElOKQorICAgICAgc3RvcF9pdGltZXIoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UgeworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisjaWZkZWYgX19ocHV4CisgICAgICAvKiB0aGUgdGVzdCBpcyBub3Qgb3ZlciB5ZXQgYW5kIHdlIG11c3QgaGF2ZSBiZWVuIHVzaW5nIHRoZSAqLworICAgICAgLyogaW50ZXJ2YWwgdGltZXIuIGlmIHdlIHdlcmUgaW4gU1lTX1NJR1NVU1BFTkQgd2Ugd2FudCB0byAqLworICAgICAgLyogcmUtc3RhcnQgdGhlIHN5c3RlbSBjYWxsLiBPdGhlcndpc2UsIHdlIHdhbnQgdG8gZ2V0IG91dCBvZiAqLworICAgICAgLyogdGhlIHNpZ3N1c3BlbmQgY2FsbC4gSSBORUVEIFRPIEtOT1cgSE9XIFRPIERPIFRISVMgRk9SIE9USEVSICovCisgICAgICAvKiBPUEVSQVRJTkcgU1lTVEVNUy4gSWYgeW91IGtub3cgaG93LCBwbGVhc2UgbGV0IG1lIGtub3cuIHJpY2sgKi8KKyAgICAgIC8qIGpvbmVzIDxyYWpAY3VwLmhwLmNvbT4gKi8KKyAgICAgIGlmIChzY3AtPnNjX3N5c2NhbGwgIT0gU1lTX1NJR1NVU1BFTkQpIHsKKyAgICAgICAgaWYgKGRlYnVnID4gMikgeworICAgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgICAiY2F0Y2hlcjogVGltZSB0byBzZW5kIGJ1cnN0ID4gaW50ZXJ2YWwhXG4iKTsKKyAgICAgICAgICBmZmx1c2god2hlcmUpOworICAgICAgICB9CisgICAgICAgIHNjcC0+c2Nfc3lzY2FsbF9hY3Rpb24gPSBTSUdfUkVTVEFSVDsKKyAgICAgIH0KKyNlbmRpZiAvKiBfX2hwdXggKi8KKyNlbHNlIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAiY2F0Y2hlcjogaW50ZXJ2YWwgdGltZXIgcnVubmluZyB1bmV4cGVjdGVkbHkhXG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICB0aW1lc191cCA9IDE7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8gICAgICAKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm47Cit9CisKKwordm9pZAoraW5zdGFsbF9zaWduYWxfY2F0Y2hlcnMoKQorCit7CisgIC8qIGp1c3QgYSBzaW1wbGUgbGl0dGxlIHJvdXRpbmUgdG8gY2F0Y2ggYSBidW5jaCBvZiBzaWduYWxzICovCisKKyNpZm5kZWYgV0lOMzIKKyAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgIGludCBpOworCisgIGZwcmludGYod2hlcmUsImluc3RhbGxpbmcgY2F0Y2hlciBmb3IgYWxsIHNpZ25hbHNcbiIpOworICBmZmx1c2god2hlcmUpOworCisgIHNpZ2VtcHR5c2V0KCYoYWN0aW9uLnNhX21hc2spKTsKKyAgYWN0aW9uLnNhX2hhbmRsZXIgPSBjYXRjaGVyOworCisjaWZkZWYgU0FfSU5URVJSVVBUCisgIGFjdGlvbi5zYV9mbGFncyA9IFNBX0lOVEVSUlVQVDsKKyNlbHNlIC8qIFNBX0lOVEVSUlVQVCAqLworICBhY3Rpb24uc2FfZmxhZ3MgPSAwOworI2VuZGlmIC8qIFNBX0lOVEVSUlVQVCAqLworCisKKyAgZm9yIChpID0gMTsgaSA8PSBOU0lHOyBpKyspIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIFNJR0FMUk06CisgICAgY2FzZSBTSUdQUk9GOgorICAgIGNhc2UgU0lHU1RPUDoKKyAgICBjYXNlIFNJR0tJTEw6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgaWYgKHNpZ2FjdGlvbihpLCZhY3Rpb24sTlVMTCkgIT0gMCkgeworICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICJDb3VsZCBub3QgaW5zdGFsbCBzaWduYWwgY2F0Y2hlciBmb3Igc2lnICVkLCBlcnJubyAlZFxuIiwKKyAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgIGVycm5vKTsKKyAgICAgICAgZmZsdXNoKHdoZXJlKTsKKworICAgICAgfQorICAgIH0KKyAgfQorI2Vsc2UKKyAgcmV0dXJuOworI2VuZGlmIC8qIFdJTjMyICovIAorfQorDAorCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgU0lHQUxSTSAoMTQpCit2b2lkCitlbXVsYXRlX2FsYXJtKCBpbnQgc2Vjb25kcyApCit7CisJRFdPUkQgRXJyb3JDb2RlOworCURXT1JEIEhhbmRsZXNDbG9zZWRGbGFncyA9IDA7CisKKwkvKiBXYWl0IG9uIHRoaXMgZXZlbnQgZm9yIHBhcm0gc2Vjb25kcy4gKi8KKworCUVycm9yQ29kZSA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaEFsYXJtLCBzZWNvbmRzKjEwMDApOworCWlmIChFcnJvckNvZGUgPT0gV0FJVF9GQUlMRUQpCisJeworCQlwZXJyb3IoIldhaXRGb3JTaW5nbGVPYmplY3QgZmFpbGVkIik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKEVycm9yQ29kZSA9PSBXQUlUX1RJTUVPVVQpCisJeworCSAgLyogV2FpdEZvclNpbmdsZU9iamVjdCB0aW1lZCBvdXQ7IHRoaXMgbWVhbnMgdGhlIHRpbWVyCisJICAgICB3YXNuJ3QgY2FuY2VsZWQuICovCisKKyAgICAgICAgdGltZXNfdXAgPSAxOworCisJLyogR2l2ZSB0aGUgb3RoZXIgdGhyZWFkcyB0aW1lIHRvIG5vdGljZSB0aGF0IHRpbWVzX3VwIGhhcworCSAgIGNoYW5nZWQgc3RhdGUgYmVmb3JlIHRha2luZyB0aGUgaGFyc2ggc3RlcCBvZiBjbG9zaW5nIHRoZQorCSAgIHNvY2tldHMuICovCisKKwkJaWYgKFdhaXRGb3JTaW5nbGVPYmplY3QoaEFsYXJtLCBQQURfVElNRS8yKjEwMDApID09CisJCSAgICBXQUlUX1RJTUVPVVQpIHsKKwkJICAvKiBXZSBoYXZlIHlldCB0byBmaW5kIGEgZ29vZCB3YXkgdG8gZnVsbHkgZW11bGF0ZQorCQkgICAgIHRoZSBlZmZlY3RzIG9mIHNpZ25hbHMgYW5kIGdldHRpbmcgRUlOVFIgZnJvbQorCQkgICAgIHN5c3RlbSBjYWxscyB1bmRlciB3aW5zb2NrLCBzbyB3aGF0IHdlIGRvIGhlcmUgaXMKKwkJICAgICBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tIHVuZGVyIHRoZSBvdGhlciB0aHJlYWQuCisJCSAgICAgSXQgaXMgcmF0aGVyIGtsdWRneSwgYnV0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvCisJCSAgICAgZ2V0IHRoaXMgcHVwcHkgc2hpcHBlZC4gIFRoZSBjb25jZXB0IGNhbiBiZQorCQkgICAgIGF0dHJpYnV0ZWQvYmxhbWVkIDopIG9uIFJvYmluIHJhaiAxLzk2ICovCisKKwkJICBpZiAod2luX2tsdWRnZV9zb2NrZXQgIT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJICAgIEhhbmRsZXNDbG9zZWRGbGFncyB8PSAxOworCQkgICAgY2xvc2Vzb2NrZXQod2luX2tsdWRnZV9zb2NrZXQpOworCQkgIH0KKwkJICBpZiAod2luX2tsdWRnZV9zb2NrZXQyICE9IElOVkFMSURfU09DS0VUKSB7CisJCSAgICBIYW5kbGVzQ2xvc2VkRmxhZ3MgfD0gMjsKKwkJICAgIGNsb3Nlc29ja2V0KHdpbl9rbHVkZ2Vfc29ja2V0Mik7CisJCSAgfQorCQl9CisJCWlmKGRlYnVnKSB7CisJCSAgZnByaW50Zih3aGVyZSwKKwkJCSAgImVtdWxhdGVfYWxhcm0gLSBIYW5kbGVzQ2xvc2VkRmxhZ3M6ICV4XG4iLAorCQkJICBIYW5kbGVzQ2xvc2VkRmxhZ3MpOworCQkgIGZmbHVzaCh3aGVyZSk7CisJCX0KKwl9Cit9CisKKworI2VuZGlmIC8qIFdJTjMyICovCisKK3ZvaWQKK3N0YXJ0X3RpbWVyKGludCB0aW1lKQoreworCisjaWZkZWYgV0lOMzIKKwkvKisqK1NBRiBXaGF0IGlmIFN0YXJ0VGltZXIgaXMgY2FsbGVkIHR3aWNlIHdpdGhvdXQgdGhlIGZpcnN0IHRpbWVyICovCisJLyorKitTQUYgZXhwaXJpbmc/ICovCisKKwlEV09SRCAgdGhyZWFkX2lkIDsKKwlIQU5ETEUgdEhhbmRsZTsKKworCWlmIChoQWxhcm0gPT0gKEhBTkRMRSkgSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJeworCQkvKiBDcmVhdGUgdGhlIEFsYXJtIGV2ZW50IG9iamVjdCAqLworCQloQWxhcm0gPSBDcmVhdGVFdmVudCggCisJCQkoTFBTRUNVUklUWV9BVFRSSUJVVEVTKSBOVUxMLAkgIC8qIG5vIHNlY3VyaXR5ICovCisJCQlGQUxTRSwJIC8qIGF1dG8gcmVzZXQgZXZlbnQgKi8KKwkJCUZBTFNFLCAgIC8qIGluaXQuIHN0YXRlID0gcmVzZXQgKi8KKwkJCSh2b2lkICopTlVMTCk7ICAvKiB1bm5hbWVkIGV2ZW50IG9iamVjdCAqLworCQlpZiAoaEFsYXJtID09IChIQU5ETEUpIElOVkFMSURfSEFORExFX1ZBTFVFKQorCQl7CisJCQlwZXJyb3IoIkNyZWF0ZUV2ZW50IGZhaWx1cmUiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJUmVzZXRFdmVudChoQWxhcm0pOworCX0KKworCisJdEhhbmRsZSA9IENyZWF0ZVRocmVhZCgwLAorCQkJCQkgICAgICAgMCwKKwkJCQkJCSAgIChMUFRIUkVBRF9TVEFSVF9ST1VUSU5FKWVtdWxhdGVfYWxhcm0sCisJCQkJCQkgICAoTFBWT0lEKShVTE9OR19QVFIpdGltZSwKKwkJCQkJCSAgIDAsCQkKKwkJCQkJCSAgICZ0aHJlYWRfaWQgKSA7CisJQ2xvc2VIYW5kbGUodEhhbmRsZSk7CisKKyNlbHNlIC8qIG5vdCBXSU4zMiAqLworCitzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKK2ludCByZXQ7CisKK2lmIChkZWJ1ZykgeworICBmcHJpbnRmKHdoZXJlLCJBYm91dCB0byBzdGFydCBhIHRpbWVyIGZvciAlZCBzZWNvbmRzLlxuIix0aW1lKTsKKyAgZmZsdXNoKHdoZXJlKTsKK30KKworICBhY3Rpb24uc2FfaGFuZGxlciA9IGNhdGNoZXI7CisgIHNpZ2VtcHR5c2V0KCYoYWN0aW9uLnNhX21hc2spKTsKKyAgc2lnYWRkc2V0KCYoYWN0aW9uLnNhX21hc2spLFNJR0FMUk0pOworCisjaWZkZWYgU0FfSU5URVJSVVBUCisgIC8qIG9uIHNvbWUgc3lzdGVtcyAoU3VuT1MgNC5ibGFoKSwgc3lzdGVtIGNhbGxzIGFyZSByZXN0YXJ0ZWQuIHdlIGRvICovCisgIC8qIG5vdCB3YW50IHRoYXQgKi8KKyAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfSU5URVJSVVBUOworI2Vsc2UgLyogU0FfSU5URVJSVVBUICovCisgIGFjdGlvbi5zYV9mbGFncyA9IDA7CisjZW5kaWYgLyogU0FfSU5URVJSVVBUICovCisKKyAgaWYgKHNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0aW9uLCBOVUxMKSA8IDApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJzdGFydF90aW1lcjogZXJyb3IgaW5zdGFsbGluZyBhbGFybSBoYW5kbGVyICIpOworICAgIGZwcmludGYod2hlcmUsImVycm5vICVkXG4iLGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKworICAvKiB0aGlzIGlzIHRoZSBlYXN5IGNhc2UgLSBqdXN0IHNldCB0aGUgdGltZXIgZm9yIHNvIG1hbnkgc2Vjb25kcyAqLyAKKyAgcmV0ID0gYWxhcm0odGltZSk7CisgIGlmIChyZXQgIT0gMCkgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiZXJyb3Igc3RhcnRpbmcgYWxhcm0gdGltZXIsIHJldCAlZCBlcnJubyAlZFxuIiwKKwkgICAgcmV0LAorICAgICAgICAgICAgZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyNlbmRpZiAvKiBXSU4zMiAqLworCisgIHRlc3RfbGVuX3RpY2tzID0gMTsKKworfSAKKworDAorIC8qIHRoaXMgcm91dGluZSB3aWxsIGRpc2FibGUgYW55IHJ1bm5pbmcgdGltZXIgKi8KK3ZvaWQKK3N0b3BfdGltZXIoKQoreworI2lmbmRlZiBXSU4zMgorICBhbGFybSgwKTsKKyNlbHNlCisgIC8qIGF0IHNvbWUgcG9pbnQgd2UgbWF5IG5lZWQgc29tZSB3aW4zMiBlcXVpdmFsZW50ICovCisgIAlpZiAoaEFsYXJtICE9IChIQU5ETEUpIElOVkFMSURfSEFORExFX1ZBTFVFKQorCXsKKwkJU2V0RXZlbnQoaEFsYXJtKTsKKwl9CisjZW5kaWYgLyogV0lOMzIgKi8KKworfQorCisMCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAvKiB0aGlzIHJvdXRpbmUgd2lsbCBlbmFibGUgdGhlIGludGVydmFsIHRpbWVyIGFuZCBzZXQgdGhpbmdzIHVwIHNvICovCisgLyogdGhhdCBmb3IgYSB0aW1lZCB0ZXN0IHRoZSB0ZXN0IHdpbGwgZW5kIGF0IHRoZSBwcm9wZXIgdGltZS4gaXQgKi8KKyAvKiBzaG91bGQgZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBQT1NJWC40IHRpbWVyXyogcm91dGluZXMgb25lIG9mICovCisgLyogdGhlc2UgZGF5cyAqLwordm9pZAorc3RhcnRfaXRpbWVyKHVuc2lnbmVkIGludCBpbnRlcnZhbF9sZW5fbXNlYyApCit7CisKKyAgdW5zaWduZWQgaW50IHRpY2tzX3Blcl9pdHZsOworCisgIHN0cnVjdCBpdGltZXJ2YWwgbmV3X2ludGVydmFsOworICBzdHJ1Y3QgaXRpbWVydmFsIG9sZF9pbnRlcnZhbDsKKworICAvKiBpZiAtRFdBTlRfSU5URVJWQUxTIHdhcyB1c2VkLCB3ZSB3aWxsIHVzZSB0aGUgdGlja2luZyBvZiB0aGUgaXRpbWVyIHRvICovCisgIC8qIHRlbGwgdXMgd2hlbiB0aGUgdGVzdCBpcyBvdmVyLiB3aGlsZSB0aGUgdXNlciB3aWxsIGJlIHNwZWNpZnlpbmcgKi8KKyAgLyogc29tZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB3ZSBrbm93IHRoYXQgdGhlIGludGVydmFsIHRpbWVyIGlzICovCisgIC8qIHJlYWxseSBpbiB1bml0cyBvZiAxL0haLiBzbywgdG8gcHJldmVudCB0aGUgdGVzdCBmcm9tIHJ1bm5pbmcgKi8KKyAgLyogImxvbmciIGl0IHdvdWxkIGJlIG5lY2Vzc2FyeSB0byBrZWVwIHRoaXMgaW4gbWluZCB3aGVuIGNhbGN1bGF0aW5nICovCisgIC8qIHRoZSBudW1iZXIgb2YgaXRpbWVyIGV2ZW50cyAqLworCisgIHRpY2tzX3Blcl9pdHZsID0gKChpbnRlcnZhbF93YXRlICogc3lzY29uZihfU0NfQ0xLX1RDSykgKiAxMDAwKSAvIAorICAgICAgICAgICAgICAgICAgICAxMDAwMDAwKTsKKworICBpZiAodGlja3NfcGVyX2l0dmwgPT0gMCkgdGlja3NfcGVyX2l0dmwgPSAxOworCisgIC8qIGhvdyBtYW55IHVzZWNzIGluIGVhY2ggaW50ZXJ2YWw/ICovCisgIHVzZWNfcGVyX2l0dmwgPSB0aWNrc19wZXJfaXR2bCAqICgxMDAwMDAwIC8gc3lzY29uZihfU0NfQ0xLX1RDSykpOworCisgIC8qIGhvdyBtYW55IHRpbWVzIHdpbGwgdGhlIHRpbWVyIHBvcCBiZWZvcmUgdGhlIHRlc3QgaXMgb3Zlcj8gKi8KKyAgaWYgKHRlc3RfdGltZSA+IDApIHsKKyAgICAvKiB0aGlzIHdhcyBhIHRpbWVkIHRlc3QgKi8KKyAgICB0ZXN0X2xlbl90aWNrcyA9ICh0ZXN0X3RpbWUgKiAxMDAwMDAwKSAvIHVzZWNfcGVyX2l0dmw7CisgIH0KKyAgZWxzZSB7CisgICAgLyogdGhpcyB3YXMgbm90IGEgdGltZWQgdGVzdCwgdXNlIE1BWElOVCAqLworICAgIHRlc3RfbGVuX3RpY2tzID0gSU5UX01BWDsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInNldHRpbmcgdGhlIGludGVydmFsIHRpbWVyIHRvICVkIHNlYyAlZCB1c2VjICIsCisgICAgICAgICAgICB1c2VjX3Blcl9pdHZsIC8gMTAwMDAwMCwKKyAgICAgICAgICAgIHVzZWNfcGVyX2l0dmwgJSAxMDAwMDAwKTsKKyAgICBmcHJpbnRmKHdoZXJlLCJ0ZXN0IGxlbiAlZCB0aWNrc1xuIiwKKyAgICAgICAgICAgIHRlc3RfbGVuX3RpY2tzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogaWYgdGhpcyB3YXMgbm90IGEgdGltZWQgdGVzdCwgdGhlbiB3ZSByZWFsbHkgYXVnaHQgdG8gZW5hYmxlIHRoZSAqLworICAvKiBzaWduYWwgY2F0Y2hlciByYWogMi85NSAqLworCisgIG5ld19pbnRlcnZhbC5pdF9pbnRlcnZhbC50dl9zZWMgPSB1c2VjX3Blcl9pdHZsIC8gMTAwMDAwMDsKKyAgbmV3X2ludGVydmFsLml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjX3Blcl9pdHZsICUgMTAwMDAwMDsgIAorICBuZXdfaW50ZXJ2YWwuaXRfdmFsdWUudHZfc2VjID0gdXNlY19wZXJfaXR2bCAvIDEwMDAwMDA7CisgIG5ld19pbnRlcnZhbC5pdF92YWx1ZS50dl91c2VjID0gdXNlY19wZXJfaXR2bCAlIDEwMDAwMDA7ICAKKyAgaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwmbmV3X2ludGVydmFsLCZvbGRfaW50ZXJ2YWwpICE9IDApIHsKKyAgICAvKiB0aGVyZSB3YXMgYSBwcm9ibGVtIGFybWluZyB0aGUgaW50ZXJ2YWwgdGltZXIgKi8gCisgICAgcGVycm9yKCJuZXRwZXJmOiBzZXRpdGltZXIiKTsKKyAgICBleGl0KDEpOworICB9Cit9CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKwordm9pZAorbmV0bGliX2luaXRfY3B1X21hcCgpIHsKKworICBpbnQgaTsKKyNpZmRlZiBIQVZFX01QQ1RMCisgIGludCBudW07CisgIGkgPSAwOworICAvKiBJIGdvIGJhY2sgYW5kIGZvcnRoIG9uIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgdGhlIHN5c3RlbS13aWRlIHNldAorICAgICBvZiBjYWxscywgb3IgaWYgdGhlIHByb2Nlc3NvciBzZXQgdmVyc2lvbnMgKHNhbnMgdGhlIF9TWVMpIHNob3VsZAorICAgICBiZSB1c2VkLiAgYXQgdGhlIG1vbWVudCBJIGJlbGlldmUgdGhhdCB0aGUgc3lzdGVtLXdpZGUgdmVyc2lvbgorICAgICBzaG91bGQgYmUgdXNlZC4gcmFqIDIwMDYtMDQtMDMgKi8KKyAgbnVtID0gbXBjdGwoTVBDX0dFVE5VTVNQVVNfU1lTLDAsMCk7CisgIGxpYl9jcHVfbWFwW2ldID0gbXBjdGwoTVBDX0dFVEZJUlNUU1BVX1NZUywwLDApOworICBmb3IgKGkgPSAxOygoaSA8IG51bSkgJiYgKGkgPCBNQVhDUFVTKSk7IGkrKykgeworICAgIGxpYl9jcHVfbWFwW2ldID0gbXBjdGwoTVBDX0dFVE5FWFRTUFVfU1lTLGxpYl9jcHVfbWFwW2ktMV0sMCk7CisgIH0KKyAgLyogZnJvbSBoZXJlLCB3ZSBzZXQgdGhlbSBhbGwgdG8gLTEgYmVjYXVzZSBpZiB3ZSBsYXVuY2ggbW9yZQorICAgICBsb29wZXJzIHRoYW4gYWN0dWFsIENQVXMsIHdlbGwsIEknbSBub3Qgc3VyZSB3aHkgOikgKi8KKyAgZm9yICg7IGkgPCBNQVhDUFVTOyBpKyspIHsKKyAgICBsaWJfY3B1X21hcFtpXSA9IC0xOworICB9CisKKyNlbHNlCisgIC8qIHdlIGFzc3VtZSB0aGF0IHRoZXJlIGlzIGluZGVlZCBhIGNvbnRpZ3VvdXMgbWFwcGluZyAqLworICBmb3IgKGkgPSAwOyBpIDwgTUFYQ1BVUzsgaSsrKSB7CisgICAgbGliX2NwdV9tYXBbaV0gPSBpOworICB9CisjZW5kaWYKK30KKwordm9pZAorZ2V0X2xvY2FsX3N5c3RlbV9pbmZvKCkKK3sKKyNpZmRlZiBIQVZFX1VOQU1FCisgIHN0cnVjdCB1dHNuYW1lIGJ1ZjsKKyAgLyogdGhlIGxpbnV4IG1hbnBhZ2UgZm9yIHVuYW1lIHNheXMgMCBtZWFucyBzdWNjZXNzLCBldmVyeW9uZSBlbHNlCisgICAgIHNheXMgbm9uLW5lZ2F0aXZlLiAgYXQgbGVhc3QgdGhleSBhbGwgYWdyZWUgdGhhdCAtMSBtZWFucworICAgICBlcnJvciAqLworICBpZiAodW5hbWUoJmJ1ZikgIT0gLTEpIHsKKyAgICBsb2NhbF9zeXNuYW1lID0gc3RyZHVwKGJ1Zi5zeXNuYW1lKTsKKyAgICBsb2NhbF9yZWxlYXNlID0gc3RyZHVwKGJ1Zi5yZWxlYXNlKTsKKyAgICBsb2NhbF92ZXJzaW9uID0gc3RyZHVwKGJ1Zi52ZXJzaW9uKTsKKyAgICBsb2NhbF9tYWNoaW5lID0gc3RyZHVwKGJ1Zi5tYWNoaW5lKTsKKyAgfQorICBlbHNlIHsKKyAgICBsb2NhbF9zeXNuYW1lID0gc3RyZHVwKCJVbmtub3duU3lzdGVtIik7CisgICAgbG9jYWxfcmVsZWFzZSA9IHN0cmR1cCgiVW5rbm93blJlbGVhc2UiKTsKKyAgICBsb2NhbF92ZXJzaW9uID0gc3RyZHVwKCJVbmtub3duVmVyc2lvbiIpOworICAgIGxvY2FsX21hY2hpbmUgPSBzdHJkdXAoIlVua25vd25NYWNoaW5lIik7CisgIH0KKyNlbHNlCisjaWZkZWYgV0lOMzIKKyAgbG9jYWxfc3lzbmFtZSA9IHN0cmR1cCgiV2luZG93cyIpOworI2Vsc2UKKyAgbG9jYWxfc3lzbmFtZSA9IHN0cmR1cCgiVW5rbm93blN5c3RlbSIpOworI2VuZGlmCisgIGxvY2FsX3JlbGVhc2UgPSBzdHJkdXAoIlVua25vd25SZWxlYXNlIik7CisgIGxvY2FsX3ZlcnNpb24gPSBzdHJkdXAoIlVua25vd25WZXJzaW9uIik7CisgIGxvY2FsX21hY2hpbmUgPSBzdHJkdXAoIlVua25vd25NYWNoaW5lIik7CisKKyNlbmRpZgorfQorCisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBuZXRsaWJfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgaW5pdGlhbGl6ZSB0aGUgcGVyZm9ybWFuY2UgbGlicmFyeS4uLiAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZAorbmV0bGliX2luaXQoKQoreworICBpbnQgaTsKKworICB3aGVyZSAgICAgICAgICAgID0gc3Rkb3V0OworCisgIHJlcXVlc3RfYXJyYXkgPSAoaW50ICopKCZuZXRwZXJmX3JlcXVlc3QpOworICByZXNwb25zZV9hcnJheSA9IChpbnQgKikoJm5ldHBlcmZfcmVzcG9uc2UpOworCisgIGZvciAoaSA9IDA7IGkgPCBNQVhDUFVTOyBpKyspIHsKKyAgICBsaWJfbG9jYWxfcGVyX2NwdV91dGlsW2ldID0gLTEuMDsKKyAgfQorCisgIGxpYl9sb2NhbF9wZWFrX2NwdV9pZCA9IC0xOworICBsaWJfbG9jYWxfcGVha19jcHVfdXRpbCA9IC0xLjA7CisgIGxpYl9yZW1vdGVfcGVha19jcHVfaWQgPSAtMTsKKyAgbGliX3JlbW90ZV9wZWFrX2NwdV91dGlsID0gLTEuMDsKKworICAvKiByZXRyaWV2ZSB0aGUgbG9jYWwgc3lzdGVtIGluZm9ybWF0aW9uICovCisgIGdldF9sb2NhbF9zeXN0ZW1faW5mbygpOworCisgIC8qIG9uIHRob3NlIHN5c3RlbXMgd2hlcmUgd2Uga25vdyB0aGF0IENQVSBudW1iZXJzIG1heSBub3Qgc3RhcnQgYXQKKyAgICAgemVybyBhbmQgYmUgY29udGlndW91cywgd2UgcHJvdmlkZSBhIHdheSB0byBtYXAgZnJvbSBhCisgICAgIGNvbnRpZ3VvdXMsIHN0YXJ0aW5nIGZyb20gMCBDUFUgaWQgc3BhY2UgdG8gdGhlIGFjdHVhbCBDUFUgaWRzLgorICAgICBhdCBwcmVzZW50IHRoaXMgaXMgb25seSB1c2VkIGZvciB0aGUgbmV0Y3B1X2xvb3BlciBzdHVmZiBiZWNhdXNlCisgICAgIHdlIGFzcy11LW1lIHRoYXQgc29tZW9uZSBzZXR0aW5nIHByb2Nlc3NvciBhZmZpbml0eSBmcm9tIHRoZQorICAgICBuZXRwZXJmIGNvbW1hbmRsaW5lIHdpbGwgcHJvdmlkZSBhICJwcm9wZXIiIENQVSBpZGVudGlmaWVyLiByYWoKKyAgICAgMjAwNi0wNC0wMyAqLworCisgIG5ldGxpYl9pbml0X2NwdV9tYXAoKTsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgIm5ldGxpYl9pbml0OiByZXF1ZXN0X2FycmF5IGF0ICVwXG4iLAorICAgICAgICAgICAgcmVxdWVzdF9hcnJheSk7CisgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICJuZXRsaWJfaW5pdDogcmVzcG9uc2VfYXJyYXkgYXQgJXBcbiIsCisgICAgICAgICAgICByZXNwb25zZV9hcnJheSk7CisKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKK30KKwwKKyAvKiB0aGlzIHJvdXRpbmUgd2lsbCBjb252ZXIgdGhlIHN0cmluZyBpbnRvIGFuIHVuc2lnbmVkIGludGVnZXIuIGl0ICovCisgLyogaXMgdXNlZCBwcmltYXJpbHkgZm9yIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0YWtpbmcgYSBudW1iZXIgKi8KKyAvKiAoc3VjaCBhcyB0aGUgc29ja2V0IHNpemUpIHdoaWNoIGNvdWxkIGJlIHJhdGhlciBsYXJnZS4gSWYgc29tZW9uZSAqLworIC8qIGVudGVycyAzMk0sIHRoZW4gdGhlIG51bWJlciB3aWxsIGJlIGNvbnZlcnRlZCB0byAzMiAqIDEwMjQgKiAxMDI0LiAqLworIC8qIElmIHRoZXkgaW50ZXIgMzJtLCB0aGUgbnVtYmVyIHdpbGwgYmUgY29udmVydGVkIHRvIDMyICogMTAwMCAqICovCisgLyogMTAwMCAqLwordW5zaWduZWQgaW50Citjb252ZXJ0KGNoYXIgKnN0cmluZykKKworeworICB1bnNpZ25lZCBpbnQgYmFzZTsKKyAgYmFzZSA9IGF0b2koc3RyaW5nKTsKKyAgaWYgKHN0cnN0cihzdHJpbmcsIksiKSkgeworICAgIGJhc2UgKj0gMTAyNDsKKyAgfQorICBpZiAoc3Ryc3RyKHN0cmluZywiTSIpKSB7CisgICAgYmFzZSAqPSAoMTAyNCAqIDEwMjQpOworICB9CisgIGlmIChzdHJzdHIoc3RyaW5nLCJHIikpIHsKKyAgICBiYXNlICo9ICgxMDI0ICogMTAyNCAqIDEwMjQpOworICB9CisgIGlmIChzdHJzdHIoc3RyaW5nLCJrIikpIHsKKyAgICBiYXNlICo9ICgxMDAwKTsKKyAgfQorICBpZiAoc3Ryc3RyKHN0cmluZywibSIpKSB7CisgICAgYmFzZSAqPSAoMTAwMCAqIDEwMDApOworICB9CisgIGlmIChzdHJzdHIoc3RyaW5nLCJnIikpIHsKKyAgICBiYXNlICo9ICgxMDAwICogMTAwMCAqIDEwMDApOworICB9CisgIHJldHVybihiYXNlKTsKK30KKworLyogdGhpcyByb3V0aW5lIGlzIGxpa2UgY29udmVydCwgYnV0IGl0IGlzIHVzZWQgZm9yIGFuIGludGVydmFsIHRpbWUKKyAgIHNwZWNpZmljYXRpb24gaW5zdGVhZCBvZiBzdHVmZiBsaWtlIHNvY2tldCBidWZmZXIgb3Igc2VuZCBzaXplcy4KKyAgIGl0IGNvbnZlcnRzIGV2ZXJ5dGhpbmcgdG8gbWljcm9zZWNvbmRzIGZvciBpbnRlcm5hbCB1c2UuICBpZiB0aGVyZQorICAgaXMgYW4gJ20nIGF0IHRoZSBlbmQgaXQgYXNzdW1lcyB0aGUgdXNlciBwcm92aWRlZCBtaWxsaXNlY29uZHMsIHMKKyAgIHdpbGwgaW1wbHkgc2Vjb25kcywgdSB3aWxsIGltcGx5IG1pY3Jvc2Vjb25kcy4gIGluIHRoZSBmdXR1cmUgbgorICAgd2lsbCBpbXBseSBuYW5vc2Vjb25kcyBidXQgZm9yIG5vdyBpdCB3aWxsIGJlIGlnbm9yZWQuIGlmIHRoZXJlIGlzCisgICBubyBzdWZmaXggb3IgYW4gdW5yZWNvZ25pemVkIHN1ZmZpeCwgaXQgd2lsbCBiZSBhc3N1bWVkIHRoZSB1c2VyCisgICBwcm92aWRlZCBtaWxsaXNlY29uZHMsIHdoaWNoIHdhcyB0aGUgbG9uZy10aW1lIG5ldHBlcmYgZGVmYXVsdC4gb25lCisgICBvZiB0aGVzZSBkYXlzLCB3ZSBzaG91bGQgcHJvYmFibHkgcmV2aXNpdCB0aGF0IG5hbm9zZWNvbmQgYnVzaW5lc3MKKyAgIHdydCB0aGUgcmV0dXJuIHZhbHVlIGJlaW5nIGp1c3QgYW4gaW50IHJhdGhlciB0aGFuIGEgdWludDY0X3Qgb3IKKyAgIHNvbWV0aGluZy4gIHJhaiAyMDA2LTAyLTA2ICovCisKK3Vuc2lnbmVkIGludAorY29udmVydF90aW1lc3BlYyhjaGFyICpzdHJpbmcpIHsKKworICB1bnNpZ25lZCBpbnQgYmFzZTsKKyAgYmFzZSA9IGF0b2koc3RyaW5nKTsKKyAgaWYgKHN0cnN0cihzdHJpbmcsIm0iKSkgeworICAgIGJhc2UgKj0gMTAwMDsKKyAgfQorICBlbHNlIGlmIChzdHJzdHIoc3RyaW5nLCJ1IikpIHsKKyAgICBiYXNlICo9ICgxKTsKKyAgfQorICBlbHNlIGlmIChzdHJzdHIoc3RyaW5nLCJzIikpIHsKKyAgICBiYXNlICo9ICgxMDAwICogMTAwMCk7CisgIH0KKyAgZWxzZSB7CisgICAgYmFzZSAqPSAoMTAwMCk7CisgIH0KKyAgcmV0dXJuKGJhc2UpOworfQorCisMCisgLyogdGhpcyByb3V0aW5lIHdpbGwgYWxsb2NhdGUgYSBjaXJjdWxhciBsaXN0IG9mIGJ1ZmZlcnMgZm9yIGVpdGhlciAqLworIC8qIHNlbmQgb3IgcmVjZWl2ZSBvcGVyYXRpb25zLiBlYWNoIG9mIHRoZXNlIGJ1ZmZlcnMgd2lsbCBiZSBhbGlnbmVkICovCisgLyogYW5kIG9mZnNldCBhcyBwZXIgdGhlIHVzZXJzIHJlcXVlc3QuIHRoZSBjaXJjdW1mZXJlbmNlIG9mIHRoaXMgKi8KKyAvKiByaW5nIHdpbGwgYmUgY29udHJvbGxlZCBieSB0aGUgc2V0dGluZyBvZiBzZW5kX3dpZHRoLiB0aGUgYnVmZmVycyAqLworIC8qIHdpbGwgYmUgZmlsbGVkIHdpdGggZGF0YSBmcm9tIHRoZSBmaWxlIHNwZWNpZmllZCBpbiBmaWxsX2ZpbGUuIGlmICovCisgLyogZmlsbF9maWxlIGlzIGFuIGVtcHR5IHN0cmluZywgdGhlIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmlsbGVkIHdpdGggKi8KKyAvKiBhbnkgcGFydGljdWxhciBkYXRhICovCisKK3N0cnVjdCByaW5nX2VsdCAqCithbGxvY2F0ZV9idWZmZXJfcmluZyhpbnQgd2lkdGgsIGludCBidWZmZXJfc2l6ZSwgaW50IGFsaWdubWVudCwgaW50IG9mZnNldCkKK3sKKworICBzdHJ1Y3QgcmluZ19lbHQgKmZpcnN0X2xpbmsgPSBOVUxMOworICBzdHJ1Y3QgcmluZ19lbHQgKnRlbXBfbGluayAgPSBOVUxMOworICBzdHJ1Y3QgcmluZ19lbHQgKnByZXZfbGluazsKKworICBpbnQgaTsKKyAgaW50IG1hbGxvY19zaXplOworICBpbnQgYnl0ZXNfbGVmdDsKKyAgaW50IGJ5dGVzX3JlYWQ7CisgIGludCBkb19maWxsOworCisgIEZJTEUgKmZpbGxfc291cmNlOworICBjaGFyIGRlZmF1bHRfZmlsbFtdID0gIm5ldHBlcmYiOworICBpbnQgIGZpbGxfY3Vyc29yID0gMDsKKworICBtYWxsb2Nfc2l6ZSA9IGJ1ZmZlcl9zaXplICsgYWxpZ25tZW50ICsgb2Zmc2V0OworCisgIC8qIGRpZCB0aGUgdXNlciB3aXNoIHRvIGhhdmUgdGhlIGJ1ZmZlcnMgcHJlLWZpbGxlZCB3aXRoIGRhdGEgZnJvbSBhICovCisgIC8qIHBhcnRpY3VsYXIgc291cmNlPyAqLworICBpZiAoc3RyY21wKGZpbGxfZmlsZSwiIikgPT0gMCkgeworICAgIGRvX2ZpbGwgPSAwOworICAgIGZpbGxfc291cmNlID0gTlVMTDsKKyAgfQorICBlbHNlIHsKKyAgICBkb19maWxsID0gMTsKKyAgICBmaWxsX3NvdXJjZSA9IChGSUxFICopZm9wZW4oZmlsbF9maWxlLCJyIik7CisgICAgaWYgKGZpbGxfc291cmNlID09IChGSUxFICopTlVMTCkgeworICAgICAgcGVycm9yKCJDb3VsZCBub3Qgb3BlbiByZXF1ZXN0ZWQgZmlsbCBmaWxlIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgfQorCisgIGFzc2VydCh3aWR0aCA+PSAxKTsKKworICBwcmV2X2xpbmsgPSBOVUxMOworICBmb3IgKGkgPSAxOyBpIDw9IHdpZHRoOyBpKyspIHsKKyAgICAvKiBnZXQgdGhlIHJpbmcgZWxlbWVudCAqLworICAgIHRlbXBfbGluayA9IChzdHJ1Y3QgcmluZ19lbHQgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCByaW5nX2VsdCkpOworICAgIGlmICh0ZW1wX2xpbmsgPT0gTlVMTCkgeworICAgICAgcHJpbnRmKCJtYWxsb2MoJXUpIGZhaWxlZCFcbiIsIHNpemVvZihzdHJ1Y3QgcmluZ19lbHQpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIC8qIHJlbWVtYmVyIHRoZSBmaXJzdCBvbmUgc28gd2UgY2FuIGNsb3NlIHRoZSByaW5nIGF0IHRoZSBlbmQgKi8KKyAgICBpZiAoaSA9PSAxKSB7CisgICAgICBmaXJzdF9saW5rID0gdGVtcF9saW5rOworICAgIH0KKyAgICB0ZW1wX2xpbmstPmJ1ZmZlcl9iYXNlID0gKGNoYXIgKiltYWxsb2MobWFsbG9jX3NpemUpOworICAgIGlmICh0ZW1wX2xpbmsgPT0gTlVMTCkgeworICAgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIG1hbGxvY19zaXplKTsKKyAgICAgIGV4aXQoMSk7CisJfQorCisjaWZuZGVmIFdJTjMyCisgICAgdGVtcF9saW5rLT5idWZmZXJfcHRyID0gKGNoYXIgKikoKCAobG9uZykodGVtcF9saW5rLT5idWZmZXJfYmFzZSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpYWxpZ25tZW50IC0gMSkgJiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgfigobG9uZylhbGlnbm1lbnQgLSAxKSk7CisjZWxzZQorICAgIHRlbXBfbGluay0+YnVmZmVyX3B0ciA9IChjaGFyICopKCggKFVMT05HX1BUUikodGVtcF9saW5rLT5idWZmZXJfYmFzZSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKFVMT05HX1BUUilhbGlnbm1lbnQgLSAxKSAmICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgfigoVUxPTkdfUFRSKWFsaWdubWVudCAtIDEpKTsKKyNlbmRpZgorICAgIHRlbXBfbGluay0+YnVmZmVyX3B0ciArPSBvZmZzZXQ7CisgICAgLyogaXMgd2hlcmUgdGhlIGJ1ZmZlciBmaWxsIGNvZGUgZ29lcy4gKi8KKyAgICBpZiAoZG9fZmlsbCkgeworICAgICAgY2hhciAqYnVmcHRyID0gdGVtcF9saW5rLT5idWZmZXJfcHRyOworICAgICAgYnl0ZXNfbGVmdCA9IGJ1ZmZlcl9zaXplOworICAgICAgd2hpbGUgKGJ5dGVzX2xlZnQpIHsKKyAgICAgICAgaWYgKCgoYnl0ZXNfcmVhZCA9IChpbnQpZnJlYWQoYnVmcHRyLAorCQkJCSAgICAgIDEsCisJCQkJICAgICAgYnl0ZXNfbGVmdCwKKwkJCQkgICAgICBmaWxsX3NvdXJjZSkpID09IDApICYmCisgICAgICAgICAgICAoZmVvZihmaWxsX3NvdXJjZSkpKXsKKyAgICAgICAgICByZXdpbmQoZmlsbF9zb3VyY2UpOworICAgICAgICB9CisJYnVmcHRyICs9IGJ5dGVzX3JlYWQ7CisgICAgICAgIGJ5dGVzX2xlZnQgLT0gYnl0ZXNfcmVhZDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB1c2UgdGhlIGRlZmF1bHQgZmlsbCB0byBJRCBvdXIgZGF0YSB0cmFmZmljIG9uIHRoZQorCSBuZXR3b3JrLiBpdCBhaW4ndCBleGFjdGx5IHByZXR0eSwgYnV0IGl0IHNob3VsZCB3b3JrICovCisgICAgICBpbnQgajsKKyAgICAgIGNoYXIgKmJ1ZnB0ciA9IHRlbXBfbGluay0+YnVmZmVyX3B0cjsKKyAgICAgIGZvciAoaiA9IDA7IGogPCBidWZmZXJfc2l6ZTsgaisrKSB7CisJYnVmcHRyW2pdID0gZGVmYXVsdF9maWxsW2ZpbGxfY3Vyc29yXTsKKwlmaWxsX2N1cnNvciArPSAxOworCS8qIHRoZSBXaW5kb3dzIERESyBjb21waWxlciB3aXRoIGFuIHg4Nl82NCB0YXJnZXQgd2FudHMgYSBjYXN0CisJICAgaGVyZSAqLworCWlmIChmaWxsX2N1cnNvciA+ICAoaW50KXN0cmxlbihkZWZhdWx0X2ZpbGwpKSB7CisJICBmaWxsX2N1cnNvciA9IDA7CisJfQorICAgICAgfQorCisgICAgfQorICAgIHRlbXBfbGluay0+bmV4dCA9IHByZXZfbGluazsKKyAgICBwcmV2X2xpbmsgPSB0ZW1wX2xpbms7CisgIH0KKyAgaWYgKGZpcnN0X2xpbmspIHsgIC8qIFNBRiBQcmVmYXN0IG1hZGUgbWUgZG8gaXQuLi4gKi8KKyAgICBmaXJzdF9saW5rLT5uZXh0ID0gdGVtcF9saW5rOworICB9CisKKyAgcmV0dXJuKGZpcnN0X2xpbmspOyAvKiBpdCdzIGEgY2lyY2xlLCBkb2Vzbid0IG1hdHRlciB3aGljaCB3ZSByZXR1cm4gKi8KK30KKworLyogdGhpcyByb3V0aW5lIHdpbGwgZGlydHkgdGhlIGZpcnN0IGRpcnR5X2NvdW50IGJ5dGVzIG9mIHRoZQorICAgc3BlY2lmaWVkIGJ1ZmZlciBhbmQvb3IgcmVhZCBjbGVhbl9jb3VudCBieXRlcyBmcm9tIHRoZSBidWZmZXIuIGl0CisgICB3aWxsIGdvIE4gYnl0ZXMgYXQgYSB0aW1lLCB0aGUgb25seSBxdWVzdGlvbiBpcyBob3cgbGFyZ2Ugc2hvdWxkIE4KKyAgIGJlIGFuZCBpZiB3ZSBzaG91bGQgYmUgZ29pbmcgY29udGluZ3VvdXNseSwgb3IgYmFzZWQgb24gc29tZQorICAgYXNzdW1wdGlvbiBvZiBjYWNoZSBsaW5lIHNpemUgKi8KKwordm9pZAorYWNjZXNzX2J1ZmZlcihjaGFyICpidWZmZXJfcHRyLGludCBsZW5ndGgsIGludCBkaXJ0eV9jb3VudCwgaW50IGNsZWFuX2NvdW50KSB7CisKKyAgY2hhciAqdGVtcF9idWZmZXI7CisgIGNoYXIgKmxpbWl0OworICBpbnQgIGksIGRpcnR5X3RvdGFsczsKKworICB0ZW1wX2J1ZmZlciA9IGJ1ZmZlcl9wdHI7CisgIGxpbWl0ID0gdGVtcF9idWZmZXIgKyBsZW5ndGg7CisgIGRpcnR5X3RvdGFscyA9IDA7CisKKyAgZm9yIChpID0gMDsgCisgICAgICAgKChpIDwgZGlydHlfY291bnQpICYmICh0ZW1wX2J1ZmZlciA8IGxpbWl0KSk7CisgICAgICAgaSsrKSB7CisgICAgKnRlbXBfYnVmZmVyICs9IChjaGFyKWk7CisgICAgZGlydHlfdG90YWxzICs9ICp0ZW1wX2J1ZmZlcjsKKyAgICB0ZW1wX2J1ZmZlcisrOworICB9CisKKyAgZm9yIChpID0gMDsgCisgICAgICAgKChpIDwgY2xlYW5fY291bnQpICYmICh0ZW1wX2J1ZmZlciA8IGxpbWl0KSk7CisgICAgICAgaSsrKSB7CisgICAgZGlydHlfdG90YWxzICs9ICp0ZW1wX2J1ZmZlcjsKKyAgICB0ZW1wX2J1ZmZlcisrOworICB9CisKKyAgaWYgKGRlYnVnID4gMTAwKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIlRoaXMgd2FzIGhlcmUgdG8gdHJ5IHRvIGF2b2lkIGRlYWQtY29kZSBlbGltaW5hdGlvbiAlZFxuIiwKKwkgICAgZGlydHlfdG90YWxzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9Cit9CisMCisKKyNpZmRlZiBIQVZFX0lDU0NfRVhTCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9leHMuaD4KKworIC8qIHRoaXMgcm91dGluZSB3aWxsIGFsbG9jYXRlIGEgY2lyY3VsYXIgbGlzdCBvZiBidWZmZXJzIGZvciBlaXRoZXIgKi8KKyAvKiBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9ucy4gZWFjaCBvZiB0aGVzZSBidWZmZXJzIHdpbGwgYmUgYWxpZ25lZCAqLworIC8qIGFuZCBvZmZzZXQgYXMgcGVyIHRoZSB1c2VycyByZXF1ZXN0LiB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGlzICovCisgLyogcmluZyB3aWxsIGJlIGNvbnRyb2xsZWQgYnkgdGhlIHNldHRpbmcgb2Ygc2VuZF93aWR0aC4gdGhlIGJ1ZmZlcnMgKi8KKyAvKiB3aWxsIGJlIGZpbGxlZCB3aXRoIGRhdGEgZnJvbSB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gZmlsbF9maWxlLiBpZiAqLworIC8qIGZpbGxfZmlsZSBpcyBhbiBlbXB0eSBzdHJpbmcsIHRoZSBidWZmZXJzIHdpbGwgbm90IGJlIGZpbGxlZCB3aXRoICovCisgLyogYW55IHBhcnRpY3VsYXIgZGF0YSAqLworCitzdHJ1Y3QgcmluZ19lbHQgKgorYWxsb2NhdGVfZXhzX2J1ZmZlcl9yaW5nIChpbnQgd2lkdGgsIGludCBidWZmZXJfc2l6ZSwgaW50IGFsaWdubWVudCwgaW50IG9mZnNldCwgZXhzX21oYW5kbGVfdCAqbWhhbmRsZXApCit7CisKKyAgICBzdHJ1Y3QgcmluZ19lbHQgKmZpcnN0X2xpbms7CisgICAgc3RydWN0IHJpbmdfZWx0ICp0ZW1wX2xpbms7CisgICAgc3RydWN0IHJpbmdfZWx0ICpwcmV2X2xpbms7CisKKyAgICBpbnQgaTsKKyAgICBpbnQgbWFsbG9jX3NpemU7CisgICAgaW50IGJ5dGVzX2xlZnQ7CisgICAgaW50IGJ5dGVzX3JlYWQ7CisgICAgaW50IGRvX2ZpbGw7CisKKyAgICBGSUxFICpmaWxsX3NvdXJjZTsKKworICAgIGludCBtbWFwX3NpemU7CisgICAgY2hhciAqbW1hcF9idWZmZXIsICptbWFwX2J1ZmZlcl9hbGlnbmVkOworCisgICAgbWFsbG9jX3NpemUgPSBidWZmZXJfc2l6ZSArIGFsaWdubWVudCArIG9mZnNldDsKKworICAgIC8qIGRpZCB0aGUgdXNlciB3aXNoIHRvIGhhdmUgdGhlIGJ1ZmZlcnMgcHJlLWZpbGxlZCB3aXRoIGRhdGEgZnJvbSBhICovCisgICAgLyogcGFydGljdWxhciBzb3VyY2U/ICovCisgICAgaWYgKHN0cmNtcCAoZmlsbF9maWxlLCAiIikgPT0gMCkgeworICAgICAgICBkb19maWxsID0gMDsKKyAgICAgICAgZmlsbF9zb3VyY2UgPSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvX2ZpbGwgPSAxOworICAgICAgICBmaWxsX3NvdXJjZSA9IChGSUxFICopIGZvcGVuIChmaWxsX2ZpbGUsICJyIik7CisgICAgICAgIGlmIChmaWxsX3NvdXJjZSA9PSAoRklMRSAqKSBOVUxMKSB7CisgICAgICAgICAgICBwZXJyb3IgKCJDb3VsZCBub3Qgb3BlbiByZXF1ZXN0ZWQgZmlsbCBmaWxlIik7CisgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFzc2VydCAod2lkdGggPj0gMSk7CisKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgZnByaW50ZiAod2hlcmUsICJhbGxvY2F0ZV9leHNfYnVmZmVyX3Jpbmc6ICIKKyAgICAgICAgICAgICAgICAgIndpZHRoPSVkIGJ1ZmZlcl9zaXplPSVkIGFsaWdubWVudD0lZCBvZmZzZXQ9JWRcbiIsCisgICAgICAgICAgICAgICAgIHdpZHRoLCBidWZmZXJfc2l6ZSwgYWxpZ25tZW50LCBvZmZzZXQpOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgKi8KKyAgICBtbWFwX3NpemUgPSB3aWR0aCAqIG1hbGxvY19zaXplOworICAgIG1tYXBfYnVmZmVyID0gKGNoYXIgKikgbW1hcCAoKGNhZGRyX3QpTlVMTCwgbW1hcF9zaXplK05CUEctMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRHxNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisgICAgaWYgKG1tYXBfYnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9yICgiYWxsb2NhdGVfZXhzX2J1ZmZlcl9yaW5nOiBtbWFwIGZhaWxlZCIpOworICAgICAgICBleGl0ICgxKTsKKyAgICB9CisgICAgbW1hcF9idWZmZXJfYWxpZ25lZCA9IChjaGFyICopICgodWludHB0cl90KW1tYXBfYnVmZmVyICYgfihOQlBHLTEpKTsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgZnByaW50ZiAod2hlcmUsICJhbGxvY2F0ZV9leHNfYnVmZmVyX3Jpbmc6ICIKKyAgICAgICAgICAgICAgICAgIm1tYXAgYnVmZmVyIHNpemU9JWQgYWRkcmVzcz0weCVwIGFsaWduZWQ9MHglcFxuIiwKKyAgICAgICAgICAgICAgICAgbW1hcF9zaXplLCBtbWFwX2J1ZmZlciwgbW1hcF9idWZmZXJfYWxpZ25lZCk7CisgICAgfQorCisgICAgLyogcmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSAqLworICAgICptaGFuZGxlcCA9IGV4c19tcmVnaXN0ZXIgKCh2b2lkICopbW1hcF9idWZmZXJfYWxpZ25lZCwgKHNpemVfdCltbWFwX3NpemUsIDApOworICAgIGlmICgqbWhhbmRsZXAgPT0gRVhTX01IQU5ETEVfSU5WQUxJRCkgeworICAgICAgICBwZXJyb3IgKCJhbGxvY2F0ZV9leHNfYnVmZmVyX3Jpbmc6IGV4c19tcmVnaXN0ZXIgZmFpbGVkIik7CisgICAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgZnByaW50ZiAod2hlcmUsICJhbGxvY2F0ZV9leHNfYnVmZmVyX3Jpbmc6IG1oYW5kbGU9JWRcbiIsCisgICAgICAgICAgICAgICAgICptaGFuZGxlcCk7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgcmluZyBlbGVtZW50cyAqLworICAgIGZpcnN0X2xpbmsgPSAoc3RydWN0IHJpbmdfZWx0ICopIG1hbGxvYyAod2lkdGggKiBzaXplb2YgKHN0cnVjdCByaW5nX2VsdCkpOworICAgIGlmIChmaXJzdF9saW5rID09IE5VTEwpIHsKKyAgICAgICAgcHJpbnRmICgibWFsbG9jKCVkKSBmYWlsZWQhXG4iLCB3aWR0aCAqIHNpemVvZiAoc3RydWN0IHJpbmdfZWx0KSk7CisgICAgICAgIGV4aXQgKDEpOworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgYnVmZmVyIHJpbmcgKi8KKyAgICBwcmV2X2xpbmsgPSBmaXJzdF9saW5rICsgd2lkdGggLSAxOworCisgICAgZm9yIChpID0gMCwgdGVtcF9saW5rID0gZmlyc3RfbGluazsgaSA8IHdpZHRoOyBpKyssIHRlbXBfbGluaysrKSB7CisKKyAgICAgICAgdGVtcF9saW5rLT5idWZmZXJfYmFzZSA9IChjaGFyICopIG1tYXBfYnVmZmVyX2FsaWduZWQgKyAoaSptYWxsb2Nfc2l6ZSk7CisjaWZuZGVmIFdJTjMyCisgICAgICAgIHRlbXBfbGluay0+YnVmZmVyX3B0ciA9IChjaGFyICopCisgICAgICAgICAgICAoKChsb25nKXRlbXBfbGluay0+YnVmZmVyX2Jhc2UgKyAobG9uZylhbGlnbm1lbnQgLSAxKSAmCisgICAgICAgICAgICAgfigobG9uZylhbGlnbm1lbnQgLSAxKSk7CisjZWxzZQorICAgICAgICB0ZW1wX2xpbmstPmJ1ZmZlcl9wdHIgPSAoY2hhciAqKQorICAgICAgICAgICAgKCgoVUxPTkdfUFRSKXRlbXBfbGluay0+YnVmZmVyX2Jhc2UgKyAoVUxPTkdfUFRSKWFsaWdubWVudCAtIDEpICYKKyAgICAgICAgICAgICB+KChVTE9OR19QVFIpYWxpZ25tZW50IC0gMSkpOworI2VuZGlmCisgICAgICAgIHRlbXBfbGluay0+YnVmZmVyX3B0ciArPSBvZmZzZXQ7CisKKyAgICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgICAgICBmcHJpbnRmICh3aGVyZSwgImFsbG9jYXRlX2V4c19idWZmZXJfcmluZzogIgorICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcjogaW5kZXg9JWQgYmFzZT0weCVwIHB0cj0weCVwXG4iLAorICAgICAgICAgICAgICAgICAgICAgaSwgdGVtcF9saW5rLT5idWZmZXJfYmFzZSwgdGVtcF9saW5rLT5idWZmZXJfcHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGlzIHdoZXJlIHRoZSBidWZmZXIgZmlsbCBjb2RlIGdvZXMuICovCisgICAgICAgIGlmIChkb19maWxsKSB7CisgICAgICAgICAgICBieXRlc19sZWZ0ID0gYnVmZmVyX3NpemU7CisgICAgICAgICAgICB3aGlsZSAoYnl0ZXNfbGVmdCkgeworICAgICAgICAgICAgICAgIGlmICgoKGJ5dGVzX3JlYWQgPSAoaW50KSBmcmVhZCAodGVtcF9saW5rLT5idWZmZXJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2xlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX3NvdXJjZSkpID09IDApICYmCisgICAgICAgICAgICAgICAgICAgIChmZW9mIChmaWxsX3NvdXJjZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJld2luZCAoZmlsbF9zb3VyY2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBieXRlc19sZWZ0IC09IGJ5dGVzX3JlYWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBkbyBsaW5raW5nICovCisgICAgICAgIHByZXZfbGluay0+bmV4dCA9IHRlbXBfbGluazsKKyAgICAgICAgcHJldl9saW5rID0gdGVtcF9saW5rOworICAgIH0KKworICAgIHJldHVybiAoZmlyc3RfbGluayk7ICAgICAgICAvKiBpdCdzIGEgY2lyY2xlLCBkb2Vzbid0IG1hdHRlciB3aGljaCB3ZSByZXR1cm4gKi8KK30KKworI2VuZGlmIC8qIEhBVkVfSUNTQ19FWFMgKi8KKworDAorCisjaWZkZWYgSEFWRV9TRU5ERklMRQorLyogdGhpcyByb3V0aW5lIHdpbGwgY29uc3RydWN0IGEgcmluZyBvZiBzZW5kZmlsZV9yaW5nX2VsdCBzdHJ1Y3RzCisgICB0aGF0IHRoZSByb3V0aW5lIHNlbmRmaWxlX3RjcF9zdHJlYW0oKSB3aWxsIHVzZSB0byBnZXQgcGFyYW1ldGVycworICAgdG8gaXRzIGNhbGxzIHRvIHNlbmRmaWxlKCkuIEl0IHdpbGwgc2V0dXAgdGhlIHJpbmcgdG8gcG9pbnQgYXQgdGhlCisgICBmaWxlIHNwZWNpZmllZCBpbiB0aGUgZ2xvYmFsIC1GIG9wdGlvbiB0aGF0IGlzIGFscmVhZHkgdXNlZCB0bworICAgcHJlLWZpbGwgYnVmZmVycyBpbiB0aGUgc2VuZCgpIGNhc2UuIDA4LzIwMDAKKworICAgaWYgdGhlcmUgaXMgbm8gZmlsZSBzcGVjaWZpZWQgaW4gYSBnbG9iYWwgLUYgb3B0aW9uLCB3ZSB3aWxsIGNyZWF0ZQorICAgYSB0ZW1wb2FyYXJ5IGZpbGUgYW5kIGZpbGwgaXQgd2l0aCByYW5kb20gZGF0YSBhbmQgdXNlIHRoYXQKKyAgIGluc3RlYWQuICByYWogMjAwNy0wOC0wOSAqLworCitzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQgKgorYWxsb2Nfc2VuZGZpbGVfYnVmX3JpbmcoaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQpCisKK3sKKworICBzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQgKmZpcnN0X2xpbmsgPSBOVUxMOworICBzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQgKnRlbXBfbGluayAgPSBOVUxMOworICBzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQgKnByZXZfbGluazsKKyAgCisgIGludCBpOworICBpbnQgZmlsZGVzOworICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisgIC8qIGlmIHRoZSB1c2VyIGhhcyBub3Qgc3BlY2lmaWVkIGEgZmlsZSB3aXRoIHRoZSAtRiBvcHRpb24sIHdlIHdpbGwKKyAgICAgZmFpbCB0aGUgdGVzdC4gb3RoZXJ3aXNlLCBnbyBhaGVhZCBhbmQgdHJ5IHRvIG9wZW4gdGhlCisgICAgIGZpbGUuIDA4LzIwMDAgKi8KKyAgaWYgKHN0cmNtcChmaWxsX2ZpbGUsIiIpID09IDApIHsKKyAgICAvKiB1c2UgYW4gdGVtcCBmaWxlIGZvciB0aGUgZmlsbCBmaWxlICovCisgICAgY2hhciB0ZW1wX2ZpbGVbXSA9IHsibmV0cGVyZlhYWFhYWFwwIn07CisgICAgaW50ICp0ZW1wX2J1ZmZlcjsKKyAgICAKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBpbnRzIHdvcnRoLCBldmVuIGlmIHRoZSB1c2VyIGlzCisgICAgICAgdXNpbmcgYW4gaW5zYW5lIGJ1ZmZlciBzaXplIGZvciBhIHNlbmRmaWxlIHRlc3QuIHdlIGFyZQorICAgICAgIGFzcy11LW1lLWluZyB0aGF0IG1hbGxvYyB3aWxsIHJldHVybiBzb21ldGhpbmcgYXQgbGVhc3QgYWxpZ25lZAorICAgICAgIG9uIGFuIGludCBib3VuZGFyeS4uLiAqLworICAgIHRlbXBfYnVmZmVyID0gKGludCAqKSBtYWxsb2MoYnVmZmVyX3NpemUgKyBzaXplb2YoaW50KSk7CisgICAgaWYgKHRlbXBfYnVmZmVyKSB7CisgICAgICAvKiBvaywgd2UgaGF2ZSB0aGUgYnVmZmVyIHdlIGFyZSBnb2luZyB0byB3cml0ZSwgbGV0cyBnZXQgYQorCSB0ZW1wb3JhcnkgZmlsZW5hbWUgKi8KKyAgICAgIGZpbGRlcyA9IG1rc3RlbXAodGVtcF9maWxlKTsKKyAgICAgIC8qIG5vIG5lZWQgdG8gY2FsbCBvcGVuIGJlY2F1c2UgbWtzdGVtcCBkaWQgaXQgKi8KKwlpZiAoLTEgIT0gZmlsZGVzKSB7CisJICBpbnQgY291bnQ7CisJICBpbnQgKmludF9wdHI7CisKKwkgIC8qIGluaXRpYWxpemUgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCisJICBzcmFuZChnZXRwaWQoKSk7CisKKwkgIC8qIHVubGluayB0aGUgZmlsZSBzbyBpdCBnb2VzIHBvb2Ygd2hlbiB3ZQorCSAgICAgZXhpdC4gdW5sZXNzL3VudGlsIHNob3duIHRvIGJlIGEgcHJvYmxlbSB3ZSB3aWxsCisJICAgICBibGlzc2Z1bGx5IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLiByYWogMjAwNy0wOC0wOSAqLworCSAgdW5saW5rKHRlbXBfZmlsZSk7CisKKwkgIC8qIG5vdyBmaWxsLW91dCB0aGUgZmlsZSB3aXRoIGF0IGxlYXN0IGJ1ZmZlcl9zaXplICogd2lkdGggYnl0ZXMgKi8KKwkgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IHdpZHRoOyBjb3VudCsrKSB7CisJICAgIC8qIGZpbGwgdGhlIGJ1ZmZlciB3aXRoIHJhbmRvbSBkYXRhLiAgaXQgZG9lc24ndCBoYXZlIHRvIGJlCisJICAgICAgIHJlYWxseSByYW5kb20sIGp1c3QgInJhbmRvbSBlbm91Z2giIDopIHdlIGRvIHRoaXMgaGVyZSByYXRoZXIKKwkgICAgICAgdGhhbiB1cCBhYm92ZSBiZWNhdXNlIHdlIHdhbnQgZWFjaCB3cml0ZSB0byB0aGUgZmlsZSB0byBiZQorCSAgICAgICBkaWZmZXJlbnQgcmFuZG9tIGRhdGEgKi8KKwkgICAgaW50X3B0ciA9IHRlbXBfYnVmZmVyOworCSAgICBmb3IgKGkgPSAwOyBpIDw9IGJ1ZmZlcl9zaXplL3NpemVvZihpbnQpOyBpKyspIHsKKwkgICAgICAqaW50X3B0ciA9IHJhbmQoKTsKKwkgICAgICBpbnRfcHRyKys7CisJICAgIH0KKwkgICAgaWYgKHdyaXRlKGZpbGRlcyx0ZW1wX2J1ZmZlcixidWZmZXJfc2l6ZStzaXplb2YoaW50KSkgIT0KKwkJYnVmZmVyX3NpemUgKyBzaXplb2YoaW50KSkgeworCSAgICAgIHBlcnJvcigiYWxsb2NhdGVfc2VuZGZpbGVfYnVmX3Jpbmc6IGluY29tcGxldGUgd3JpdGUiKTsKKwkgICAgICBleGl0KC0xKTsKKwkgICAgfQorCSAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisJcGVycm9yKCJhbGxvY19zZW5kZmlsZV9idWZfcmluZzogY291bGQgbm90IGFsbG9jYXRlIHRlbXAgbmFtZSIpOworCWV4aXQoLTEpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHBlcnJvcigiYWxsb2Nfc2VuZGZpbGVfYnVmX3Jpbmc6IGNvdWxkIG5vdCBhbGxvY2F0ZSBidWZmZXIgZm9yIGZpbGUiKTsKKyAgICAgIGV4aXQoLTEpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiB0aGUgdXNlciBwb2ludGVkIHVzIGF0IGEgZmlsZSwgc28gdHJ5IGl0ICovCisgICAgZmlsZGVzID0gb3BlbihmaWxsX2ZpbGUgLCBPX1JET05MWSk7CisgICAgaWYgKGZpbGRlcyA9PSAtMSl7CisgICAgICBwZXJyb3IoImFsbG9jX3NlbmRmaWxlX2J1Zl9yaW5nOiBDb3VsZCBub3Qgb3BlbiByZXF1ZXN0ZWQgZmlsZSIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgLyogbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBmaWxlIHRoZXJlIHRvIGFsbG93IHVzIHRvIG1ha2UgYQorICAgICAgIGNvbXBsZXRlIHJpbmcuIHRoYXQgd2F5IHdlIGRvIG5vdCBuZWVkIGFkZGl0aW9uYWwgbG9naWMgaW4gdGhlCisgICAgICAgcmluZyBzZXR1cCB0byBkZWFsIHdpdGggd3JhcC1hcm91bmQgaXNzdWVzLiB3ZSBtaWdodCB3YW50IHRoYXQKKyAgICAgICBzb21lZGF5LCBidXQgbm90IGp1c3Qgbm93LiAwOC8yMDAwICovCisgICAgaWYgKHN0YXQoZmlsbF9maWxlLCZzdGF0YnVmKSAhPSAwKSB7CisgICAgICBwZXJyb3IoImFsbG9jX3NlbmRmaWxlX2J1Zl9yaW5nOiBjb3VsZCBub3Qgc3RhdCBmaWxlIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBpZiAoc3RhdGJ1Zi5zdF9zaXplIDwgKHdpZHRoICogYnVmZmVyX3NpemUpKSB7CisgICAgICAvKiB0aGUgZmlsZSBpcyB0b28gc2hvcnQgKi8KKyAgICAgIGZwcmludGYoc3RkZXJyLCJhbGxvY19zZW5kZmlsZV9idWZfcmluZzogc3BlY2lmaWVkIGZpbGUgdG9vIHNtYWxsLlxuIik7CisgICAgICBmcHJpbnRmKHN0ZGVyciwiZmlsZSBtdXN0IGJlIGxhcmdlciB0aGFuIHNlbmRfd2lkdGggKiBzZW5kX3NpemVcbiIpOworICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgfQorICAKKyAgLyogc28sIGF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IGZpbGRlcyBpcyBhIGRlc2NyaXB0b3Igd2hpY2gKKyAgICAgcmVmZXJlbmNlcyBhIGZpbGUgb2Ygc3VmZmljaWVudCBzaXplIGZvciBvdXIgbmVmYXJpb3VzCisgICAgIHBvcnBvaXNlcy4gcmFqIDIwMDctMDgtMDkgKi8KKworICBwcmV2X2xpbmsgPSBOVUxMOworICBmb3IgKGkgPSAxOyBpIDw9IHdpZHRoOyBpKyspIHsKKyAgICAvKiBnZXQgdGhlIHJpbmcgZWxlbWVudC4gd2Ugc2hvdWxkIHByb2JhYmx5IG1ha2Ugc3VyZSB0aGUgbWFsbG9jKCkgCisgICAgIHdhcyBzdWNjZXNzZnVsLCBidXQgZm9yIG5vdyB3ZSdsbCBqdXN0IGxldCB0aGUgY29kZSBib21iCisgICAgIG15c3RlcmlvdXNseS4gMDgvMjAwMCAqLworCisgICAgdGVtcF9saW5rID0gKHN0cnVjdCBzZW5kZmlsZV9yaW5nX2VsdCAqKQorICAgICAgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQpKTsKKyAgICBpZiAodGVtcF9saW5rID09IE5VTEwpIHsKKyAgICAgIHByaW50ZigibWFsbG9jKCV1KSBmYWlsZWQhXG4iLCBzaXplb2Yoc3RydWN0IHNlbmRmaWxlX3JpbmdfZWx0KSk7CisgICAgICBleGl0KDEpOworCX0KKworICAgIC8qIHJlbWVtYmVyIHRoZSBmaXJzdCBvbmUgc28gd2UgY2FuIGNsb3NlIHRoZSByaW5nIGF0IHRoZSBlbmQgKi8KKworICAgIGlmIChpID09IDEpIHsKKyAgICAgIGZpcnN0X2xpbmsgPSB0ZW1wX2xpbms7CisgICAgfQorCisgICAgLyogbm93IGZpbGwtaW4gdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIHdpdGggdGhlIGFwcm9wcmlhdGUKKyAgICAgICBzdHVmZi4ganVzdCBob3cgc2hvdWxkIHdlIGRlYWwgd2l0aCBhbGlnbm1lbnQgYW5kIG9mZnNldCBJCisgICAgICAgd29uZGVyPyB1bnRpbCBzb21ldGhpbmcgYmV0dGVyIGNvbWVzLXVwLCBJIHRoaW5rIHdlIHdpbGwganVzdAorICAgICAgIGlnbm9yZSB0aGVtLiAwOC8yMDAwICovCisKKyAgICB0ZW1wX2xpbmstPmZpbGRlcyA9IGZpbGRlczsgICAgICAvKiBmcm9tIHdoaWNoIGZpbGUgZG8gd2Ugc2VuZD8gKi8KKyAgICB0ZW1wX2xpbmstPm9mZnNldCA9IG9mZnNldDsgICAgICAvKiBzdGFydGluZyBhdCB3aGljaCBvZmZzZXQ/ICovCisgICAgb2Zmc2V0ICs9IGJ1ZmZlcl9zaXplOyAgICAgICAgICAgLyogZ2V0IHJlYWR5IGZvciB0aGUgbmV4dCBlbHQgKi8KKyAgICB0ZW1wX2xpbmstPmxlbmd0aCA9IGJ1ZmZlcl9zaXplOyAvKiBob3cgbWFueSBieXRlcyB0byBzZW5kICovCisgICAgdGVtcF9saW5rLT5oZHRybCA9IE5VTEw7ICAgICAgICAgLyogbm8gaGVhZGVyIG9yIHRyYWlsZXIgKi8KKyAgICB0ZW1wX2xpbmstPmZsYWdzID0gMDsgICAgICAgICAgICAvKiBubyBmbGFncyAqLworCisgICAgLyogaXMgd2hlcmUgdGhlIGJ1ZmZlciBmaWxsIGNvZGUgd2VudC4gKi8KKworICAgIHRlbXBfbGluay0+bmV4dCA9IHByZXZfbGluazsKKyAgICBwcmV2X2xpbmsgPSB0ZW1wX2xpbms7CisgIH0KKyAgLyogY2xvc2UgdGhlIHJpbmcgKi8KKyAgZmlyc3RfbGluay0+bmV4dCA9IHRlbXBfbGluazsKKyAgCisgIHJldHVybihmaXJzdF9saW5rKTsgLyogaXQncyBhIGR1bW15IHJpbmcgKi8KK30KKworI2VuZGlmIC8qIEhBVkVfU0VOREZJTEUgKi8KKworDAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogICAgIGR1bXBfcmVxdWVzdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiBkaXNwbGF5IHRoZSBjb250ZW50cyBvZiB0aGUgcmVxdWVzdCBhcnJheSB0byB0aGUgdXNlci4gaXQgd2lsbCAgICAgICovCisgLyogZGlzcGxheSB0aGUgY29udGVudHMgaW4gZGVjaW1hbCwgaGV4LCBhbmQgYXNjaWksIHdpdGggZm91ciBieXRlcyAgICAqLworIC8qIHBlciBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkCitkdW1wX3JlcXVlc3QoKQoreworaW50IGNvdW50ZXIgPSAwOworZnByaW50Zih3aGVyZSwicmVxdWVzdCBjb250ZW50czpcbiIpOworZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8ICgoc2l6ZW9mKG5ldHBlcmZfcmVxdWVzdCkvNCktMyk7IGNvdW50ZXIgKz0gNCkgeworICBmcHJpbnRmKHdoZXJlLCIlZDpcdCU4eCAlOHggJTh4ICU4eCBcdHwlNC40c3wgfCU0LjRzfCB8JTQuNHN8IHwlNC40c3xcbiIsCisgICAgICAgICAgY291bnRlciwKKyAgICAgICAgICByZXF1ZXN0X2FycmF5W2NvdW50ZXJdLAorICAgICAgICAgIHJlcXVlc3RfYXJyYXlbY291bnRlcisxXSwKKyAgICAgICAgICByZXF1ZXN0X2FycmF5W2NvdW50ZXIrMl0sCisgICAgICAgICAgcmVxdWVzdF9hcnJheVtjb3VudGVyKzNdLAorICAgICAgICAgIChjaGFyICopJnJlcXVlc3RfYXJyYXlbY291bnRlcl0sCisgICAgICAgICAgKGNoYXIgKikmcmVxdWVzdF9hcnJheVtjb3VudGVyKzFdLAorICAgICAgICAgIChjaGFyICopJnJlcXVlc3RfYXJyYXlbY291bnRlcisyXSwKKyAgICAgICAgICAoY2hhciAqKSZyZXF1ZXN0X2FycmF5W2NvdW50ZXIrM10pOworfQorZmZsdXNoKHdoZXJlKTsKK30KKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgZHVtcF9yZXNwb25zZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qIGRpc3BsYXkgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc3BvbnNlIGFycmF5IHRvIHRoZSB1c2VyLiBpdCB3aWxsICAgICAgKi8KKyAvKiBkaXNwbGF5IHRoZSBjb250ZW50cyBpbiBkZWNpbWFsLCBoZXgsIGFuZCBhc2NpaSwgd2l0aCBmb3VyIGJ5dGVzICAgICovCisgLyogcGVyIGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK2R1bXBfcmVzcG9uc2UoKQoreworaW50IGNvdW50ZXIgPSAwOworCitmcHJpbnRmKHdoZXJlLCJyZXNwb25zZSBjb250ZW50c1xuIik7Citmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgKChzaXplb2YobmV0cGVyZl9yZXNwb25zZSkvNCktMyk7IGNvdW50ZXIgKz0gNCkgeworICBmcHJpbnRmKHdoZXJlLCIlZDpcdCU4eCAlOHggJTh4ICU4eCBcdD4lNC40czwgPiU0LjRzPCA+JTQuNHM8ID4lNC40czxcbiIsCisgICAgICAgICAgY291bnRlciwKKyAgICAgICAgICByZXNwb25zZV9hcnJheVtjb3VudGVyXSwKKyAgICAgICAgICByZXNwb25zZV9hcnJheVtjb3VudGVyKzFdLAorICAgICAgICAgIHJlc3BvbnNlX2FycmF5W2NvdW50ZXIrMl0sCisgICAgICAgICAgcmVzcG9uc2VfYXJyYXlbY291bnRlciszXSwKKyAgICAgICAgICAoY2hhciAqKSZyZXNwb25zZV9hcnJheVtjb3VudGVyXSwKKyAgICAgICAgICAoY2hhciAqKSZyZXNwb25zZV9hcnJheVtjb3VudGVyKzFdLAorICAgICAgICAgIChjaGFyICopJnJlc3BvbnNlX2FycmF5W2NvdW50ZXIrMl0sCisgICAgICAgICAgKGNoYXIgKikmcmVzcG9uc2VfYXJyYXlbY291bnRlciszXSk7Cit9CitmZmx1c2god2hlcmUpOworfQorCisgLyoKKworICAgICAgZm9ybWF0X251bWJlcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgcmV0dXJuIGEgcG9pbnRlciB0byBhIGZvcm1hdHRlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgdmFsdWUgcGFzc2VkCisgIHRyYW5zbGF0ZWQgaW50byB0aGUgdW5pdHMgc3BlY2lmaWVkLiBJdCBhc3N1bWVzIHRoYXQgdGhlIGJhc2UgdW5pdHMKKyAgYXJlIGJ5dGVzLiBJZiB0aGUgZm9ybWF0IGNhbGxzIGZvciBiaXRzLCBpdCB3aWxsIHVzZSBTSSB1bml0cyAoMTBeKQorICBpZiB0aGUgZm9ybWF0IGNhbGxzIGZvciBieXRlcywgaXQgd2lsbCB1c2UgQ1MgdW5pdHMgKDJeKS4uLiAgVGhpcworICByb3V0aW5lIHNob3VsZCBsb29rIGZhbWlsaWFyIHRvIHVzZXMgb2YgdGhlIGxhdGVzdCB0dGNwLi4uCisKKyAgd2Ugd291bGQgbGlrZSB0byB1c2UgInQiIG9yICJUIiBmb3IgdHJhbnNhY3Rpb25zLCBidXQgcHJvYmFibHkKKyAgc2hvdWxkIGxlYXZlIHRob3NlIGZvciB0ZXJhYml0cyBhbmQgdGVyYWJ5dGVzIHJlc3BlY3RpdmVseSwgc28gZm9yCisgIHRyYW5zYWN0aW9ucywgd2Ugd2lsbCB1c2UgIngiIHdoaWNoIHdpbGwsIGJ5IGRlZmF1bHQsIGRvIGFic29sdXRlbHkKKyAgbm90aGluZyB0byB0aGUgcmVzdWx0LiAgd2h5PyAgc28gd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWFsIGNhc2UgY29kZQorICBlbHNld2hlcmUgc3VjaCBhcyBpbiB0aGUgVENQX1JSLWFzLWJpZGlyZWN0aW9uYWwgdGVzdCBjYXNlLgorCisgKi8KKyAKKworY2hhciAqCitmb3JtYXRfbnVtYmVyKGRvdWJsZSBudW1iZXIpCit7CisgIHN0YXRpYyAgY2hhciAgICBmbXRidWZbNjRdOworICAgICAgICAKKyAgc3dpdGNoIChsaWJmbXQpIHsKKyAgY2FzZSAnSyc6CisgICAgc25wcmludGYoZm10YnVmLCBzaXplb2YoZm10YnVmKSwgICIlLTcuMmYiICwgbnVtYmVyIC8gMTAyNC4wKTsKKyAgICBicmVhazsKKyAgY2FzZSAnTSc6CisgICAgc25wcmludGYoZm10YnVmLCBzaXplb2YoZm10YnVmKSwgICIlLTcuMmYiLCBudW1iZXIgLyAxMDI0LjAgLyAxMDI0LjApOworICAgIGJyZWFrOworICBjYXNlICdHJzoKKyAgICBzbnByaW50ZihmbXRidWYsIHNpemVvZihmbXRidWYpLCAgIiUtNy4yZiIsIG51bWJlciAvIDEwMjQuMCAvIDEwMjQuMCAvIDEwMjQuMCk7CisgICAgYnJlYWs7CisgIGNhc2UgJ2snOgorICAgIHNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksICAiJS03LjJmIiwgbnVtYmVyICogOCAvIDEwMDAuMCk7CisgICAgYnJlYWs7CisgIGNhc2UgJ20nOgorICAgIHNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksICAiJS03LjJmIiwgbnVtYmVyICogOCAvIDEwMDAuMCAvIDEwMDAuMCk7CisgICAgYnJlYWs7CisgIGNhc2UgJ2cnOgorICAgIHNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksICAiJS03LjJmIiwgbnVtYmVyICogOCAvIDEwMDAuMCAvIDEwMDAuMCAvIDEwMDAuMCk7CisgICAgYnJlYWs7CisgIGNhc2UgJ3gnOgorICAgIHNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksICAiJS03LjJmIiwgbnVtYmVyKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBzbnByaW50ZihmbXRidWYsIHNpemVvZihmbXRidWYpLCAgIiUtNy4yZiIsIG51bWJlciAvIDEwMjQuMCk7CisgIH0KKworICByZXR1cm4gZm10YnVmOworfQorCitjaGFyCitmb3JtYXRfY3B1X21ldGhvZChpbnQgbWV0aG9kKQoreworCisgIGNoYXIgbWV0aG9kX2NoYXI7CisKKyAgc3dpdGNoIChtZXRob2QpIHsKKyAgY2FzZSBDUFVfVU5LTk9XTjoKKyAgICBtZXRob2RfY2hhciA9ICdVJzsKKyAgICBicmVhazsKKyAgY2FzZSBIUF9JRExFX0NPVU5URVI6CisgICAgbWV0aG9kX2NoYXIgPSAnSSc7CisgICAgYnJlYWs7CisgIGNhc2UgUFNUQVQ6CisgICAgbWV0aG9kX2NoYXIgPSAnUCc7CisgICAgYnJlYWs7CisgIGNhc2UgS1NUQVQ6CisgICAgbWV0aG9kX2NoYXIgPSAnSyc7CisgICAgYnJlYWs7CisgIGNhc2UgS1NUQVRfMTA6CisgICAgbWV0aG9kX2NoYXIgPSAnTSc7CisgICAgYnJlYWs7CisgIGNhc2UgUEVSRlNUQVQ6CisgICAgbWV0aG9kX2NoYXIgPSAnRSc7CisgICAgYnJlYWs7CisgIGNhc2UgVElNRVM6ICAgICAgICAgICAgIC8qIGhpc3RvcmljYWwgb25seSwgY29tcGxldGVseSB1bnN1aXRhYmxlCisJCQkgICAgIGZvciBuZXRwZXJmJ3MgcHVycG9zZXMgKi8KKyAgICBtZXRob2RfY2hhciA9ICdUJzsKKyAgICBicmVhazsKKyAgY2FzZSBHRVRSVVNBR0U6ICAgICAgICAgLyogaGlzdG9yaWNhbCBvbmx5LCBjb21wbGV0ZWx5IHVuc3VpdGFibGUKKwkJCSAgICAgZm9yIG5ldHBlcmY7cyBwdXJwb3NlcyAqLworICAgIG1ldGhvZF9jaGFyID0gJ1InOworICAgIGJyZWFrOworICBjYXNlIExPT1BFUjoKKyAgICBtZXRob2RfY2hhciA9ICdMJzsKKyAgICBicmVhazsKKyAgY2FzZSBOVF9NRVRIT0Q6CisgICAgbWV0aG9kX2NoYXIgPSAnTic7CisgICAgYnJlYWs7CisgIGNhc2UgUFJPQ19TVEFUOgorICAgIG1ldGhvZF9jaGFyID0gJ1MnOworICAgIGJyZWFrOworICBjYXNlIFNZU0NUTDoKKyAgICBtZXRob2RfY2hhciA9ICdDJzsKKyAgICBicmVhazsKKyAgY2FzZSBPU1g6CisgICAgbWV0aG9kX2NoYXIgPSAnTyc7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgbWV0aG9kX2NoYXIgPSAnPyc7CisgIH0KKyAgCisgIHJldHVybiBtZXRob2RfY2hhcjsKKworfQorCitjaGFyICoKK2Zvcm1hdF91bml0cygpCit7CisgIHN0YXRpYyAgICAgICAgY2hhciAgICB1bml0YnVmWzY0XTsKKyAgCisgIHN3aXRjaCAobGliZm10KSB7CisgIGNhc2UgJ0snOgorICAgIHN0cmNweSh1bml0YnVmLCAiS0J5dGVzIik7CisgICAgYnJlYWs7CisgIGNhc2UgJ00nOgorICAgIHN0cmNweSh1bml0YnVmLCAiTUJ5dGVzIik7CisgICAgYnJlYWs7CisgIGNhc2UgJ0cnOgorICAgIHN0cmNweSh1bml0YnVmLCAiR0J5dGVzIik7CisgICAgYnJlYWs7CisgIGNhc2UgJ2snOgorICAgIHN0cmNweSh1bml0YnVmLCAiMTBeM2JpdHMiKTsKKyAgICBicmVhazsKKyAgY2FzZSAnbSc6CisgICAgc3RyY3B5KHVuaXRidWYsICIxMF42Yml0cyIpOworICAgIGJyZWFrOworICBjYXNlICdnJzoKKyAgICBzdHJjcHkodW5pdGJ1ZiwgIjEwXjliaXRzIik7CisgICAgYnJlYWs7CisgIGNhc2UgJ3gnOgorICAgIHN0cmNweSh1bml0YnVmLCAiVHJhbnMiKTsKKyAgICBicmVhazsKKyAgICAKKyAgZGVmYXVsdDoKKyAgICBzdHJjcHkodW5pdGJ1ZiwgIktCeXRlcyIpOworICB9CisgIAorICByZXR1cm4gdW5pdGJ1ZjsKK30KKwwKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgc2h1dGRvd25fY29udHJvbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiB0ZWFyLWRvd24gdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBiZXR3ZWVuIG1lIGFuZCB0aGUgc2VydmVyLiAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIAorc2h1dGRvd25fY29udHJvbCgpCit7CisKKyAgY2hhciAgKmJ1ZiA9IChjaGFyICopJm5ldHBlcmZfcmVzcG9uc2U7CisgIGludCAgIGJ1ZmxlbiA9IHNpemVvZihuZXRwZXJmX3Jlc3BvbnNlKTsKKworICAvKiBzdHVmZiBmb3Igc2VsZWN0LCB1c2UgZmRfc2V0IGZvciBiZXR0ZXIgY29tcGxpYW5jZSAqLworICBmZF9zZXQgICAgICAgIHJlYWRmZHM7CisgIHN0cnVjdCAgICAgICAgdGltZXZhbCB0aW1lb3V0OworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAic2h1dGRvd25fY29udHJvbDogc2h1dGRvd24gb2YgY29udHJvbCBjb25uZWN0aW9uIHJlcXVlc3RlZC5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBmaXJzdCwgd2Ugc2F5IHRoYXQgd2Ugd2lsbCBiZSBzZW5kaW5nIG5vIG1vcmUgZGF0YSBvbiB0aGUgKi8KKyAgLyogY29ubmVjdGlvbiAqLworICBpZiAoc2h1dGRvd24obmV0bGliX2NvbnRyb2wsMSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgUHJpbnRfZXJybm8od2hlcmUsCisgICAgICAgICAgICAic2h1dGRvd25fY29udHJvbDogZXJyb3IgaW4gc2h1dGRvd24iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKworICAvKiBOb3csIHdlIGhhbmcgb24gYSBzZWxlY3Qgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0byBiZWNvbWUgKi8KKyAgLyogcmVhZGFibGUgdG8gcmVjZWl2ZSB0aGUgc2h1dGRvd24gaW5kaWNhdGlvbiBmcm9tIHRoZSByZW1vdGUuIHRoaXMgKi8KKyAgLyogd2lsbCBiZSAianVzdCIgbGlrZSB0aGUgcmVjdl9yZXNwb25zZSgpIGNvZGUgKi8KKworICAvKiB3ZSBvbmx5IHNlbGVjdCBvbmNlLiBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIHJlc3BvbnNlIGlzIHNwbGl0ICovCisgIC8qICh3aGljaCBzaG91bGQgbm90IGJlIGhhcHBlbmluZywgdGhhdCB3ZSB3aWxsIHJlY2VpdmUgdGhlIHdob2xlICovCisgIC8qIHRoaW5nIGFuZCBub3QgaGF2ZSBhIHByb2JsZW0gOy0pICovCisKKyAgRkRfWkVSTygmcmVhZGZkcyk7CisgIEZEX1NFVChuZXRsaWJfY29udHJvbCwmcmVhZGZkcyk7CisgIHRpbWVvdXQudHZfc2VjICA9IDYwOyAvKiB3YWl0IG9uZSBtaW51dGUgdGhlbiBwdW50ICovCisgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisKKyAgLyogc2VsZWN0IGhhZCBiZXR0ZXIgcmV0dXJuIG9uZSwgb3IgdGhlcmUgd2FzIGVpdGhlciBhIHByb2JsZW0gb3IgYSAqLworICAvKiB0aW1lb3V0Li4uICovCisgIGlmIChzZWxlY3QoRkRfU0VUU0laRSwKKyAgICAgICAgICAgICAmcmVhZGZkcywKKyAgICAgICAgICAgICAwLAorICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgJnRpbWVvdXQpICE9IDEpIHsKKyAgICBQcmludF9lcnJubyh3aGVyZSwKKyAgICAgICAgICAgICJzaHV0ZG93bl9jb250cm9sOiBubyByZXNwb25zZSByZWNlaXZlZCIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIC8qIHdlIG5vdyBhc3N1bWUgdGhhdCB0aGUgc29ja2V0IGhhcyBjb21lIHJlYWR5IGZvciByZWFkaW5nICovCisgIHJlY3YobmV0bGliX2NvbnRyb2wsIGJ1ZiwgYnVmbGVuLDApOworCit9CisKKy8qIAorICBiaW5kX3RvX3NwZWNpZmljX3Byb2Nlc3NvciB3aWxsIGJpbmQgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byB0aGUKKyAgcHJvY2Vzc29yIGluICJwcm9jZXNzb3IiICBJdCBoYXMgbG90cyBvZiB1Z2x5IGlmZGVmcyB0byBkZWFsIHdpdGgKKyAgYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyBzeXN0ZW1zIGRvIHByb2Nlc3NvciBhZmZpbml0eS4gIHRoaXMgaXMgYQorICBnZW5lcmFsaXphdGlvbiBvZiB3b3JrIGluaXRpYWxseSBkb25lIGJ5IHN0ZXBoZW4gYnVyZ2VyLiAgcmFqCisgIDIwMDQvMTIvMTMgKi8KKwordm9pZAorYmluZF90b19zcGVjaWZpY19wcm9jZXNzb3IoaW50IHByb2Nlc3Nvcl9hZmZpbml0eSwgaW50IHVzZV9jcHVfbWFwKQoreworCisgIGludCBtYXBwZWRfYWZmaW5pdHk7CisKKyAgLyogdGhpcyBpcyBpbiBwbGFjZSBiZWNhdXNlIHRoZSBuZXRjcHVfbG9vcGVyIHByb2Nlc3NvciBhZmZpbml0eQorICAgICBhc3MtdS1tZS1zIGEgY29udGlndW91cyBDUFUgaWQgc3BhY2Ugc3RhcnRpbmcgd2l0aCAwLiBmb3IgdGhlCisgICAgIHJlZ3VsYXIgbmV0cGVyZi9uZXRzZXJ2ZXIgYWZmaW5pdHksIHdlIGFzcy11LW1lIHRoZSB1c2VyIGhhcyB1c2VkCisgICAgIGEgc3VpdGFibGUgQ1BVIGlkIGV2ZW4gd2hlbiB0aGUgc3BhY2UgaXMgbm90IGNvbnRpZ3VvdXMgYW5kCisgICAgIHN0YXJ0aW5nIGZyb20gemVybyAqLworICBpZiAodXNlX2NwdV9tYXApIHsKKyAgICBtYXBwZWRfYWZmaW5pdHkgPSBsaWJfY3B1X21hcFtwcm9jZXNzb3JfYWZmaW5pdHldOworICB9CisgIGVsc2UgeworICAgIG1hcHBlZF9hZmZpbml0eSA9IHByb2Nlc3Nvcl9hZmZpbml0eTsKKyAgfQorCisjaWZkZWYgSEFWRV9NUENUTAorICAvKiBpbmRlZWQsIGF0IHNvbWUgcG9pbnQgaXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8gY2hlY2sgdGhlIHJldHVybgorICAgICBzdGF0dXMgYW5kIHBhc3MtYWxvbmcgbm90aWZpY2F0aW9uIG9mIGVycm9yLi4uIHJhaiAyMDA0LzEyLzEzICovCisgIG1wY3RsKE1QQ19TRVRQUk9DRVNTX0ZPUkNFLCBtYXBwZWRfYWZmaW5pdHksIGdldHBpZCgpKTsKKyNlbGlmIEhBVkVfUFJPQ0VTU09SX0JJTkQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8c3lzL3Byb2NzZXQuaD4KKyAgcHJvY2Vzc29yX2JpbmQoUF9QSUQsUF9NWUlELG1hcHBlZF9hZmZpbml0eSxOVUxMKTsKKyNlbGlmIEhBVkVfQklORFBST0NFU1NPUgorI2luY2x1ZGUgPHN5cy9wcm9jZXNzb3IuaD4KKyAgLyogdGhpcyBpcyB0aGUgY2FsbCBvbiBBSVguICBJdCB0YWtlcyBhICJ3aGF0IiBvZiBCSU5EUFJPQ0VTUyBvcgorICAgICBCSU5EVEhSQUQsIHRoZW4gIndobyIgYW5kIGZpbmFsbHkgIndoZXJlIiB3aGljaCBpcyBhIENQVSBudW1iZXIKKyAgICAgb3IgaXQgc2VlbXMgUFJPQ0VTU09SX0NMQVNTX0FOWSB0aGVyZSBhbHNvIHNlZW1zIHRvIGJlIGEgbXljcHUoKQorICAgICBjYWxsIHRvIHJldHVybiB0aGUgY3VycmVudCBDUFUgYXNzaWdubWVudC4gIHRoaXMgaXMgYWxsIGJhc2VkIG9uCisgICAgIHRoZSBzeXMvcHJvY2Vzc29yLmggaW5jbHVkZSBmaWxlLiAgZnJvbSBlbXBpcmljYWwgdGVzdGluZywgaXQKKyAgICAgd291bGQgc2VlbSB0aGF0IHRoZSBteV9jcHUoKSBjYWxsIHJldHVybnMgdGhlIGN1cnJlbnQgQ1BVIG9uCisgICAgIHdoaWNoIHdlIGFyZSBydW5uaW5nIHJhdGhlciB0aGFuIHRoZSBDUFUgYmluZGluZywgc28gaXQncyByZXR1cm4KKyAgICAgdmFsdWUgd2lsbCBub3QgdGVsbCB5b3UgaWYgeW91IGFyZSBib3VuZCB2cyB1bmJvdW5kLiAqLworICBiaW5kcHJvY2Vzc29yKEJJTkRQUk9DRVNTLGdldHBpZCgpLChjcHVfdCltYXBwZWRfYWZmaW5pdHkpOworI2VsaWYgSEFWRV9TQ0hFRF9TRVRBRkZJTklUWQorI2luY2x1ZGUgPHNjaGVkLmg+CisgIC8qIGluIHRoZW9yeSB0aGlzIHNob3VsZCBjb3ZlciBzeXN0ZW1zIHdpdGggbW9yZSBDUFVzIHRoYW4gYml0cyBpbiBhCisgICAgIGxvbmcsIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpZnkgX19VU0VfR05VLiAgd2UgImNoZWF0IiBieSB0YWtpbmcKKyAgICAgZGVmaW5lcyBmcm9tIC91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgsIHdoaWNoIHdlIGFzcy11LW1lIGlzCisgICAgIGluY2x1ZGVkIGJ5IDxzY2hlZC5oPi4gIElmIHRoZXkgYXJlIG5vdCB0aGVyZSB3ZSB3aWxsIGp1c3QKKyAgICAgZmFsbC1iYWNrIG9uIHdoYXQgd2UgaGFkIGJlZm9yZSwgd2hpY2ggaXMgdG8gdXNlIGp1c3QgdGhlIHNpemUgb2YKKyAgICAgYW4gdW5zaWduZWQgbG9uZy4gcmFqIDIwMDYtMDktMTQgKi8KKworI2lmIGRlZmluZWQoX19DUFVfU0VUU0laRSkKKyNkZWZpbmUgTkVUUEVSRl9DUFVfU0VUU0laRSBfX0NQVV9TRVRTSVpFCisjaWYgZGVmaW5lZChfX0NQVV9TRVRfUykKKyNkZWZpbmUgTkVUUEVSRl9DUFVfU0VUKGNwdSwgY3B1c2V0cCkgIF9fQ1BVX1NFVF9TKGNwdSwgc2l6ZW9mIChjcHVfc2V0X3QpLCBjcHVzZXRwKQorI2RlZmluZSBORVRQRVJGX0NQVV9aRVJPKGNwdXNldHApICAgICAgX19DUFVfWkVST19TIChzaXplb2YgKGNwdV9zZXRfdCksIGNwdXNldHApIAorI2Vsc2UKKyNkZWZpbmUgTkVUUEVSRl9DUFVfU0VUKGNwdSwgY3B1c2V0cCkgIF9fQ1BVX1NFVChjcHUsIGNwdXNldHApCisjZGVmaW5lIE5FVFBFUkZfQ1BVX1pFUk8oY3B1c2V0cCkgICAgICBfX0NQVV9aRVJPIChjcHVzZXRwKQorI2VuZGlmCisgIHR5cGVkZWYgY3B1X3NldF90IG5ldHBlcmZfY3B1X3NldF90OworI2Vsc2UKKyNkZWZpbmUgTkVUUEVSRl9DUFVfU0VUU0laRSBzaXplb2YodW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTkVUUEVSRl9DUFVfU0VUKGNwdSwgY3B1c2V0cCkgKmNwdXNldHAgPSAxIDw8IGNwdQorI2RlZmluZSBORVRQRVJGX0NQVV9aRVJPKGNwdXNldHApICpjcHVzZXRwID0gKHVuc2lnbmVkIGxvbmcpMAorICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbmV0cGVyZl9jcHVfc2V0X3Q7CisjZW5kaWYKKworICBuZXRwZXJmX2NwdV9zZXRfdCAgIG5ldHBlcmZfY3B1X3NldDsKKyAgdW5zaWduZWQgaW50ICAgICAgICBsZW4gPSBzaXplb2YobmV0cGVyZl9jcHVfc2V0KTsKKworICBpZiAobWFwcGVkX2FmZmluaXR5IDwgOCpzaXplb2YobmV0cGVyZl9jcHVfc2V0KSkgeworICAgIE5FVFBFUkZfQ1BVX1pFUk8oJm5ldHBlcmZfY3B1X3NldCk7CisgICAgTkVUUEVSRl9DUFVfU0VUKG1hcHBlZF9hZmZpbml0eSwmbmV0cGVyZl9jcHVfc2V0KTsKKyAgICAKKyAgICBpZiAoc2NoZWRfc2V0YWZmaW5pdHkoZ2V0cGlkKCksIGxlbiwgJm5ldHBlcmZfY3B1X3NldCkpIHsKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIHNldCBQSUQgJWQncyBDUFUgYWZmaW5pdHkgZXJybm8gJWRcbiIsCisJCWdldHBpZCgpLGVycm5vKTsKKwlmZmx1c2goc3RkZXJyKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKGRlYnVnKSB7CisJZnByaW50ZihzdGRlcnIsCisJCSJDUFUgbnVtYmVyIGxhcmdlciB0aGFuIHByZS1jb21waWxlZCBsaW1pdHMuIENvbnNpZGVyIGEgcmVjb21waWxlLlxuIik7CisJZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgIH0KKyAgICAgIAorI2VsaWYgSEFWRV9CSU5EX1RPX0NQVV9JRAorICAvKiB0aGlzIGlzIHRoZSBvbmUgZm9yIFRydTY0ICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL3Byb2Nlc3Nvci5oPgorCisgIC8qIHJlYWxseSBzaG91bGQgYmUgY2hlY2tpbmcgYSByZXR1cm4gY29kZSBvbmUgb2YgdGhlc2UgZGF5cy4gcmFqCisgICAgIDIwMDUvMDgvMzEgKi8gCisKKyAgYmluZF90b19jcHVfaWQoZ2V0cGlkKCksIG1hcHBlZF9hZmZpbml0eSwwKTsKKworI2VsaWYgV0lOMzIKKworICB7CisgICAgVUxPTkdfUFRSIEFmZmluaXR5TWFzazsKKyAgICBVTE9OR19QVFIgUHJvY2Vzc0FmZmluaXR5TWFzazsKKyAgICBVTE9OR19QVFIgU3lzdGVtQWZmaW5pdHlNYXNrOworICAgIAorICAgIGlmICgobWFwcGVkX2FmZmluaXR5IDwgMCkgfHwgCisJKG1hcHBlZF9hZmZpbml0eSA+IE1BWElNVU1fUFJPQ0VTU09SUykpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIkludmFsaWQgcHJvY2Vzc29yX2FmZmluaXR5IHNwZWNpZmllZDogJWRcbiIsIG1hcHBlZF9hZmZpbml0eSk7ICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFHZXRQcm9jZXNzQWZmaW5pdHlNYXNrKAorCQkJCUdldEN1cnJlbnRQcm9jZXNzKCksIAorCQkJCSZQcm9jZXNzQWZmaW5pdHlNYXNrLCAKKwkJCQkmU3lzdGVtQWZmaW5pdHlNYXNrKSkKKyAgICAgIHsKKwlwZXJyb3IoIkdldFByb2Nlc3NBZmZpbml0eU1hc2sgZmFpbGVkIik7CisJZmZsdXNoKHN0ZGVycik7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAKKyAgICBBZmZpbml0eU1hc2sgPSAoVUxPTkdfUFRSKTEgPDwgbWFwcGVkX2FmZmluaXR5OworICAgIAorICAgIGlmIChBZmZpbml0eU1hc2sgJiBQcm9jZXNzQWZmaW5pdHlNYXNrKSB7CisgICAgICBpZiAoIVNldFRocmVhZEFmZmluaXR5TWFzayggR2V0Q3VycmVudFRocmVhZCgpLCBBZmZpbml0eU1hc2spKSB7CisJcGVycm9yKCJTZXRUaHJlYWRBZmZpbml0eU1hc2sgZmFpbGVkIik7CisJZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiUHJvY2Vzc29yIGFmZmluaXR5IHNldCB0byBDUFUjICVkXG4iLCBtYXBwZWRfYWZmaW5pdHkpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIH0KKworI2Vsc2UKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIlByb2Nlc3NvciBhZmZpbml0eSBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtIVxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorI2VuZGlmCit9CisKKwwKKy8qCisgKiBTZXRzIGEgc29ja2V0IHRvIG5vbi1ibG9ja2luZyBvcGVyYXRpb24uCisgKi8KK2ludAorc2V0X25vbmJsb2NrIChTT0NLRVQgc29jaykKK3sKKyNpZmRlZiBXSU4zMgorICB1bnNpZ25lZCBsb25nIGZsYWdzID0gMTsKKyAgcmV0dXJuIChpb2N0bHNvY2tldChzb2NrLCBGSU9OQklPLCAmZmxhZ3MpICE9IFNPQ0tFVF9FUlJPUik7CisjZWxzZQorICByZXR1cm4gKGZjbnRsKHNvY2ssIEZfU0VURkwsIE9fTk9OQkxPQ0spICE9IC0xKTsKKyNlbmRpZgorfQorCisMCisKKy8qIHNlbmQgYSByZXF1ZXN0LCBvbmx5IGNvbnZlcnRpbmcgdGhlIGZpcnN0IG4gaW50cy13b3J0aCBvZiB0aGUKKyAgIHRlc3Qtc3BlY2lmaWMgZGF0YSB2aWEgaHRvbmwoKSBiZWZvcmUgc2VuZGluZyBvbiB0aGUKKyAgIGNvbm5lY3Rpb24uIHRoZSBmaXJzdCB0d28gaW50cywgd2hpY2ggYXJlIGJlZm9yZSB0aGUgdGVzdC1zcGVjaWZpYworICAgcG9ydGlvbiBhcmUgYWx3YXlzIGNvbnZlcnRlZC4gcmFqIDIwMDgtMDItMDUgKi8KKwordm9pZAorc2VuZF9yZXF1ZXN0X24oaW50IG4pCit7CisKKyAgaW50ICAgY291bnRlcixjb3VudDsKKworICBpZiAobiA8IDApIGNvdW50ID0gc2l6ZW9mKG5ldHBlcmZfcmVxdWVzdCkvNDsKKyAgZWxzZSBjb3VudCA9IDIgKyBuOworCisgIC8qIHNpbGVudGx5IHRydW5jYXRlIGlmIHRoZSBjYWxsZXIgY2FsbGVkIGZvciBtb3JlIHRoYW4gd2UgaGF2ZSAqLworICBpZiAoY291bnQgPiBzaXplb2YobmV0cGVyZl9yZXF1ZXN0KS80KSB7CisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiV0FSTklORywgaHRvbmwgY29udmVyc2lvbiBjb3VudCBvZiAlZCB3YXMgbGFyZ2VyIHRoYW4gbmV0cGVyZl9yZXF1ZXN0XG4iLAorCSAgICAgIGNvdW50IC0gMik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICBjb3VudCA9IHNpemVvZihuZXRwZXJmX3JlcXVlc3QpLzQ7CisgIH0KKyAgCisgIC8qIGRpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXF1ZXN0IGlmIHRoZSBkZWJ1ZyBsZXZlbCBpcyBoaWdoICovCisgIC8qIGVub3VnaC4gb3RoZXJ3aXNlLCBqdXN0IHNlbmQgdGhlIGRhcm5lZCB0aGluZyA7LSkgKi8KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiZW50ZXJlZCBzZW5kX3JlcXVlc3Rfbi4uLmNvbnRlbnRzIGJlZm9yZSAlZCBodG9ubHM6XG4iLAorCSAgICBjb3VudCk7CisgICAgZHVtcF9yZXF1ZXN0KCk7CisgIH0KKworICAvKiBwYXNzIHRoZSBwcm9jZXNzb3IgYWZmaW5pdHkgcmVxdWVzdCB2YWx1ZSB0byBuZXRzZXJ2ZXIgdGhpcyBpcyBhCisgIGtsdWRnZSBhbmQgSSBrbm93IGl0LiAgc2diIDgvMTEvMDQuIHdlIGtlZXAgdGhpcyBoZXJlIHRvIGRlYWwgd2l0aAorICB0aGVyZSBiZWluZyB0d28gcGF0aHMgdG8gdGhpcyBwbGFjZSAtIGRpcmVjdCBhbmQgdmlhCisgIHNlbmRfcmVxdWVzdCgpICAqLworCisgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LmR1bW15ID0gcmVtb3RlX3Byb2NfYWZmaW5pdHk7CisKKyAgLyogcHV0IHRoZSBlbnRpcmUgcmVxdWVzdCBhcnJheSBpbnRvIG5ldHdvcmsgb3JkZXIuIFdlIGRvIHRoaXMgKi8KKyAgLyogYXJiaXRyYXJpbHkgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGZpZ3VyZS1vdXQganVzdCBob3cgbXVjaCAqLworICAvKiBvZiB0aGUgcmVxdWVzdCBhcnJheSBjb250YWlucyByZWFsIGluZm9ybWF0aW9uLiB0aGlzIHNob3VsZCAqLworICAvKiBiZSBzaW1wbGVyLCBhbmQgYXQgYW55IHJhdGUsIHRoZSBwZXJmb3JtYW5jZSBvZiBzZW5kaW5nICovCisgIC8qIGNvbnRyb2wgbWVzc2FnZXMgZm9yIHRoaXMgYmVuY2htYXJrIGlzIG5vdCBvZiBhbnkgcmVhbCAqLworICAvKiBjb25jZXJuLiAqLyAKKyAgCisgIGZvciAoY291bnRlciA9IDA7Y291bnRlciA8IGNvdW50OyBjb3VudGVyKyspIHsKKyAgICByZXF1ZXN0X2FycmF5W2NvdW50ZXJdID0gaHRvbmwocmVxdWVzdF9hcnJheVtjb3VudGVyXSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX3JlcXVlc3Rfbi4uLmNvbnRlbnRzIGFmdGVyICVkIGh0b25sczpcbiIsCisJICAgIGNvdW50KTsKKyAgICBkdW1wX3JlcXVlc3QoKTsKKworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiXG5zZW5kX3JlcXVlc3Q6IGFib3V0IHRvIHNlbmQgJXUgYnl0ZXMgZnJvbSAlcFxuIiwKKyAgICAgICAgICAgIHNpemVvZihuZXRwZXJmX3JlcXVlc3QpLAorICAgICAgICAgICAgJm5ldHBlcmZfcmVxdWVzdCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIGlmIChzZW5kKG5ldGxpYl9jb250cm9sLAorICAgICAgICAgICAoY2hhciAqKSZuZXRwZXJmX3JlcXVlc3QsCisgICAgICAgICAgIHNpemVvZihuZXRwZXJmX3JlcXVlc3QpLAorICAgICAgICAgICAwKSAhPSBzaXplb2YobmV0cGVyZl9yZXF1ZXN0KSkgeworICAgIHBlcnJvcigic2VuZF9yZXF1ZXN0OiBzZW5kIGNhbGwgZmFpbHVyZSIpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KK30KKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogICAgIHNlbmRfcmVxdWVzdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiBzZW5kIGEgbmV0cGVyZiByZXF1ZXN0IG9uIHRoZSBjb250cm9sIHNvY2tldCB0byB0aGUgcmVtb3RlIGhhbGYgb2YgICovCisgLyogdGhlIGNvbm5lY3Rpb24uIHRvIGdldCB1cyBjbG9zZXIgdG8gaW50ZXJ2ZW5kb3IgaW50ZXJvcGVyYWJpbGl0eSwgICAqLworIC8qIHdlIHdpbGwgY2FsbCBodG9ubCBvbiBlYWNoIG9mIHRoZSBpbnQgdGhhdCBjb21wb3NlIHRoZSBtZXNzYWdlIHRvICAgKi8KKyAvKiBiZSBzZW50LiB0aGUgc2VydmVyLWhhbGYgb2YgdGhlIGNvbm5lY3Rpb24gd2lsbCBjYWxsIHRoZSBudG9obCAgICAgICovCisgLyogcm91dGluZSB0byB1bmRvIGFueSBjaGFuZ2VzIHRoYXQgbWF5IGhhdmUgYmVlbiBtYWRlLi4uICAgICAgICAgICAgICAqLworIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK3NlbmRfcmVxdWVzdCgpCit7CisgIAorICAvKiBwYXNzIHRoZSBwcm9jZXNzb3IgYWZmaW5pdHkgcmVxdWVzdCB2YWx1ZSB0byBuZXRzZXJ2ZXIgKi8KKyAgLyogdGhpcyBpcyBhIGtsdWRnZSBhbmQgSSBrbm93IGl0LiAgc2diIDgvMTEvMDQgICAgICAgICAgICovCisKKyAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQuZHVtbXkgPSByZW1vdGVfcHJvY19hZmZpbml0eTsKKworICAvKiBjYWxsIHNlbmRfcmVxdWVzdF9uIHRlbGxpbmcgaXQgdG8gY29udmVydCBldmVyeXRoaW5nICovCisKKyAgc2VuZF9yZXF1ZXN0X24oLTEpOworCit9CisKKy8qIHNlbmQgYSByZXNwb25zZSwgb25seSBjb252ZXJ0aW5nIHRoZSBmaXJzdCBuIGludHMtd29ydGggb2YgdGhlCisgICB0ZXN0LXNwZWNpZmljIGRhdGEgdmlhIGh0b25sKCkgYmVmb3JlIHNlbmRpbmcgb24gdGhlCisgICBjb25uZWN0aW9uLiB0aGUgZmlyc3QgdHdvIGludHMsIHdoaWNoIGFyZSBiZWZvcmUgdGhlIHRlc3Qtc3BlY2lmaWMKKyAgIHBvcnRpb24gYXJlIGFsd2F5cyBjb252ZXJ0ZWQuIHJhaiAyMDA4LTAyLTA1ICovCisKK3ZvaWQKK3NlbmRfcmVzcG9uc2VfbihpbnQgbikKK3sKKyAgaW50ICAgY291bnRlciwgY291bnQ7CisgIGludAlieXRlc19zZW50OworCisgIGlmIChuIDwgMCkgY291bnQgPSBzaXplb2YobmV0cGVyZl9yZXF1ZXN0KS80OworICBlbHNlIGNvdW50ID0gMiArIG47CisKKyAgLyogc2lsZW50bHkgdHJ1bmNhdGUgaWYgdGhlIGNhbGxlciBjYWxsZWQgZm9yIG1vcmUgdGhhbiB3ZSBoYXZlICovCisgIGlmIChjb3VudCA+IHNpemVvZihuZXRwZXJmX3JlcXVlc3QpLzQpIHsKKyAgICBpZiAoZGVidWcgPiAxKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJXQVJOSU5HLCBodG9ubCBjb252ZXJzaW9uIGNvdW50IG9mICVkIHdhcyBsYXJnZXIgdGhhbiBuZXRwZXJmX3JlcXVlc3RcbiIsCisJICAgICAgY291bnQgLSAyKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGNvdW50ID0gc2l6ZW9mKG5ldHBlcmZfcmVxdWVzdCkvNDsKKyAgfQorCisgIC8qIGRpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXF1ZXN0IGlmIHRoZSBkZWJ1ZyBsZXZlbCBpcyBoaWdoICovCisgIC8qIGVub3VnaC4gb3RoZXJ3aXNlLCBqdXN0IHNlbmQgdGhlIGRhcm5lZCB0aGluZyA7LSkgKi8KKworICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICJzZW5kX3Jlc3BvbnNlX246IGNvbnRlbnRzIG9mICV1IGludHMgYmVmb3JlICVkIGh0b25sLFxuIiwKKyAgICAgICAgICAgIHNpemVvZihuZXRwZXJmX3Jlc3BvbnNlKS80LAorCSAgICBjb3VudCk7CisgICAgZHVtcF9yZXNwb25zZSgpOworICB9CisKKyAgLyogcHV0IHRoZSBlbnRpcmUgcmVzcG9uc2VfYXJyYXkgaW50byBuZXR3b3JrIG9yZGVyLiBXZSBkbyB0aGlzICovCisgIC8qIGFyYml0cmFyaWx5IHJhdGhlciB0aGFuIHRyeWluZyB0byBmaWd1cmUtb3V0IGp1c3QgaG93IG11Y2ggb2YgdGhlICovCisgIC8qIHJlcXVlc3QgYXJyYXkgY29udGFpbnMgcmVhbCBpbmZvcm1hdGlvbi4gdGhpcyBzaG91bGQgYmUgc2ltcGxlciwgKi8KKyAgLyogYW5kIGF0IGFueSByYXRlLCB0aGUgcGVyZm9ybWFuY2Ugb2Ygc2VuZGluZyBjb250cm9sIG1lc3NhZ2VzIGZvciAqLworICAvKiB0aGlzIGJlbmNobWFyayBpcyBub3Qgb2YgYW55IHJlYWwgY29uY2Vybi4gKi8KKyAgCisgIGZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBjb3VudDsgY291bnRlcisrKSB7CisgICAgcmVzcG9uc2VfYXJyYXlbY291bnRlcl0gPSBodG9ubChyZXNwb25zZV9hcnJheVtjb3VudGVyXSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgInNlbmRfcmVzcG9uc2VfbjogY29udGVudHMgYWZ0ZXIgaHRvbmxcbiIpOworICAgIGR1bXBfcmVzcG9uc2UoKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgImFib3V0IHRvIHNlbmQgJXUgYnl0ZXMgZnJvbSAlcFxuIiwKKyAgICAgICAgICAgIHNpemVvZihuZXRwZXJmX3Jlc3BvbnNlKSwKKyAgICAgICAgICAgICZuZXRwZXJmX3Jlc3BvbnNlKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLypLQyovCisgIGlmICgoYnl0ZXNfc2VudCA9IHNlbmQoc2VydmVyX3NvY2ssCisJCQkgKGNoYXIgKikmbmV0cGVyZl9yZXNwb25zZSwKKwkJCSBzaXplb2YobmV0cGVyZl9yZXNwb25zZSksCisJCQkgMCkpICE9IHNpemVvZihuZXRwZXJmX3Jlc3BvbnNlKSkgeworICAgIHBlcnJvcigic2VuZF9yZXNwb25zZV9uOiBzZW5kIGNhbGwgZmFpbHVyZSIpOworICAgIGZwcmludGYod2hlcmUsICJCeXRlc1NlbnQ6ICVkXG4iLCBieXRlc19zZW50KTsKKyAgICBleGl0KDEpOworICB9CisgIAorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICBzZW5kX3Jlc3BvbnNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogc2VuZCBhIG5ldHBlcmYgcmVzcG9uc2Ugb24gdGhlIGNvbnRyb2wgc29ja2V0IHRvIHRoZSByZW1vdGUgaGFsZiBvZiAqLworIC8qIHRoZSBjb25uZWN0aW9uLiB0byBnZXQgdXMgY2xvc2VyIHRvIGludGVydmVuZG9yIGludGVyb3BlcmFiaWxpdHksICAgKi8KKyAvKiB3ZSB3aWxsIGNhbGwgaHRvbmwgb24gZWFjaCBvZiB0aGUgaW50IHRoYXQgY29tcG9zZSB0aGUgbWVzc2FnZSB0byAgICovCisgLyogYmUgc2VudC4gdGhlIG90aGVyIGhhbGYgb2YgdGhlIGNvbm5lY3Rpb24gd2lsbCBjYWxsIHRoZSBudG9obCAgICAgICAqLworIC8qIHJvdXRpbmUgdG8gdW5kbyBhbnkgY2hhbmdlcyB0aGF0IG1heSBoYXZlIGJlZW4gbWFkZS4uLiAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkCitzZW5kX3Jlc3BvbnNlKCkKK3sKKworICBzZW5kX3Jlc3BvbnNlX24oLTEpOworCit9CisKKy8qIHJlY2VpdmUgYSByZXF1ZXN0LCBvbmx5IGNvbnZlcnRpbmcgdGhlIGZpcnN0IG4gaW50cy13b3J0aCBvZiB0aGUKKyAgIHRlc3Qtc3BlY2lmaWMgZGF0YSB2aWEgaHRvbmwoKSBiZWZvcmUgc2VuZGluZyBvbiB0aGUKKyAgIGNvbm5lY3Rpb24uIHRoZSBmaXJzdCB0d28gaW50cywgd2hpY2ggYXJlIGJlZm9yZSB0aGUgdGVzdC1zcGVjaWZpYworICAgcG9ydGlvbiBhcmUgYWx3YXlzIGNvbnZlcnRlZC4gcmFqIDIwMDgtMDItMDUgKi8KKwordm9pZAorcmVjdl9yZXF1ZXN0X24oaW50IG4pCit7CitpbnQgICAgIHRvdF9ieXRlc19yZWN2ZCwKKyAgICAgICAgYnl0ZXNfcmVjdmQsIAorICAgICAgICBieXRlc19sZWZ0OworY2hhciAgICAqYnVmID0gKGNoYXIgKikmbmV0cGVyZl9yZXF1ZXN0OworaW50ICAgICBidWZsZW4gPSBzaXplb2YobmV0cGVyZl9yZXF1ZXN0KTsKK2ludCAgICAgY291bnRlcixjb3VudDsKKworICBpZiAobiA8IDApIGNvdW50ID0gc2l6ZW9mKG5ldHBlcmZfcmVxdWVzdCkvNDsKKyAgZWxzZSBjb3VudCA9IDIgKyBuOworCisgIC8qIHNpbGVudGx5IHRydW5jYXRlIGlmIHRoZSBjYWxsZXIgY2FsbGVkIGZvciBtb3JlIHRoYW4gd2UgaGF2ZSAqLworICBpZiAoY291bnQgPiBzaXplb2YobmV0cGVyZl9yZXF1ZXN0KS80KSB7CisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiV0FSTklORywgaHRvbmwgY29udmVyc2lvbiBjb3VudCBvZiAlZCB3YXMgbGFyZ2VyIHRoYW4gbmV0cGVyZl9yZXF1ZXN0XG4iLAorCSAgICAgIGNvdW50IC0gMik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICBjb3VudCA9IHNpemVvZihuZXRwZXJmX3JlcXVlc3QpLzQ7CisgIH0KKworICB0b3RfYnl0ZXNfcmVjdmQgPSAwOyAgICAKKyAgYnl0ZXNfcmVjdmQgPSAwOyAgICAgLyogbnRfbGludDsgYnl0ZXNfcmVjdmQgdW5pbml0aWFsaXplZCBpZiBidWZsZW4gPT0gMCAqLworICBieXRlc19sZWZ0ICAgICAgPSBidWZsZW47CisgIHdoaWxlICgodG90X2J5dGVzX3JlY3ZkICE9IGJ1ZmxlbikgJiYKKwkgKChieXRlc19yZWN2ZCA9IHJlY3Yoc2VydmVyX3NvY2ssIGJ1ZiwgYnl0ZXNfbGVmdCwwKSkgPiAwICkpIHsKKyAgICB0b3RfYnl0ZXNfcmVjdmQgKz0gYnl0ZXNfcmVjdmQ7CisgICAgYnVmICAgICAgICAgICAgICs9IGJ5dGVzX3JlY3ZkOworICAgIGJ5dGVzX2xlZnQgICAgICAtPSBieXRlc19yZWN2ZDsKKyAgfQorICAKKyAgLyogcHV0IHRoZSByZXF1ZXN0IGludG8gaG9zdCBvcmRlciAqLworICAKKyAgZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IGNvdW50OyBjb3VudGVyKyspIHsKKyAgICByZXF1ZXN0X2FycmF5W2NvdW50ZXJdID0gbnRvaGwocmVxdWVzdF9hcnJheVtjb3VudGVyXSk7CisgIH0KKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9yZXF1ZXN0OiByZWNlaXZlZCAlZCBieXRlcyBvZiByZXF1ZXN0LlxuIiwKKwkgICAgdG90X2J5dGVzX3JlY3ZkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKGJ5dGVzX3JlY3ZkID09IFNPQ0tFVF9FUlJPUikgeworICAgIFByaW50X2Vycm5vKHdoZXJlLAorCQkicmVjdl9yZXF1ZXN0OiBlcnJvciBvbiByZWN2Iik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoYnl0ZXNfcmVjdmQgPT0gMCkgeworICAgIC8qIHRoZSByZW1vdGUgaGFzIHNodXRkb3duIHRoZSBjb250cm9sIGNvbm5lY3Rpb24sIHdlIHNob3VsZCBzaHV0CisgICAgICAgaXQgIGRvd24gYXMgd2VsbCBhbmQgZXhpdCAqLworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAicmVjdl9yZXF1ZXN0OiByZW1vdGUgcmVxdWVzdGVkIHNodXRkb3duIG9mIGNvbnRyb2xcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5ldGxpYl9jb250cm9sICE9IElOVkFMSURfU09DS0VUKSB7CisgICAgICBzaHV0ZG93bl9jb250cm9sKCk7CisgICAgfQorICAgIGV4aXQoMCk7CisgIH0KKworICBpZiAodG90X2J5dGVzX3JlY3ZkIDwgYnVmbGVuKSB7CisgICAgaWYgKGRlYnVnID4gMSkKKyAgICAgIGR1bXBfcmVxdWVzdCgpOworICAgIAorICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3JlcXVlc3Q6IHBhcnRpYWwgcmVxdWVzdCByZWNlaXZlZCBvZiAlZCBieXRlc1xuIiwKKwkgICAgdG90X2J5dGVzX3JlY3ZkKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKworICBpZiAoZGVidWcgPiAxKSB7CisgICAgZHVtcF9yZXF1ZXN0KCk7CisgIH0gCisKKyAgLyogZ2V0IHRoZSBwcm9jZXNzb3IgYWZmaW5pdHkgcmVxdWVzdCB2YWx1ZSBmcm9tIG5ldHBlcmYgKi8KKyAgLyogdGhpcyBpcyBhIGtsdWRnZSBhbmQgSSBrbm93IGl0LiAgc2diIDgvMTEvMDQgICAgICAgICAgKi8KKyAgCisgIGxvY2FsX3Byb2NfYWZmaW5pdHkgPSBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5kdW1teTsKKyAgCisgIGlmIChsb2NhbF9wcm9jX2FmZmluaXR5ICE9IC0xKSB7CisgICAgYmluZF90b19zcGVjaWZpY19wcm9jZXNzb3IobG9jYWxfcHJvY19hZmZpbml0eSwwKTsKKyAgfSAKKyAgCit9CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICByZWN2X3JlcXVlc3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogcmVjZWl2ZSB0aGUgcmVtb3RlJ3MgcmVxdWVzdCBvbiB0aGUgY29udHJvbCBzb2NrZXQuIHdlIHdpbGwgcHV0ICAgICAqLworIC8qIHRoZSBlbnRpcmUgcmVzcG9uc2UgaW50byBob3N0IG9yZGVyIGJlZm9yZSBnaXZpbmcgaXQgdG8gdGhlICAgICAgICAgKi8KKyAvKiBjYWxsaW5nIHJvdXRpbmUuIGhvcGVmdWxseSwgdGhpcyB3aWxsIGdvIG1vc3Qgb2YgdGhlIHdheSB0byAgICAgICAgICovCisgLyogaW5zdXJpbmcgaW50ZXJ2ZW5kb3IgaW50ZXJvcGVyYWJpbGl0eS4gaWYgdGhlcmUgYXJlIGFueSBwcm9ibGVtcywgICAqLworIC8qIHdlIHdpbGwganVzdCBwdW50IHRoZSBlbnRpcmUgc2l0dWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkCityZWN2X3JlcXVlc3QoKQoreworCisgIHJlY3ZfcmVxdWVzdF9uKC0xKTsKKworfQorCit2b2lkCityZWN2X3Jlc3BvbnNlX3RpbWVkX24oaW50IGFkZGxfdGltZSwgaW50IG4pCit7CisgIGludCAgICAgdG90X2J5dGVzX3JlY3ZkLAorICAgICAgICAgIGJ5dGVzX3JlY3ZkID0gMCwgCisgICAgICAgICAgYnl0ZXNfbGVmdDsKKyAgY2hhciAgICAqYnVmID0gKGNoYXIgKikmbmV0cGVyZl9yZXNwb25zZTsKKyAgaW50ICAgICBidWZsZW4gPSBzaXplb2YobmV0cGVyZl9yZXNwb25zZSk7CisgIGludCAgICAgY291bnRlcixjb3VudDsKKyAgCisgIC8qIHN0dWZmIGZvciBzZWxlY3QsIHVzZSBmZF9zZXQgZm9yIGJldHRlciBjb21wbGlhbmNlICovCisgIGZkX3NldCAgcmVhZGZkczsKKyAgc3RydWN0ICB0aW1ldmFsIHRpbWVvdXQ7CisgIAorICB0b3RfYnl0ZXNfcmVjdmQgPSAwOyAgICAKKyAgYnl0ZXNfbGVmdCAgICAgID0gYnVmbGVuOworICAKKyAgaWYgKG4gPCAwKSBjb3VudCA9IHNpemVvZihuZXRwZXJmX3JlcXVlc3QpLzQ7CisgIGVsc2UgY291bnQgPSAyICsgbjsKKworICAvKiBzaWxlbnRseSB0cnVuY2F0ZSBpZiB0aGUgY2FsbGVyIGNhbGxlZCBmb3IgbW9yZSB0aGFuIHdlIGhhdmUgKi8KKyAgaWYgKGNvdW50ID4gc2l6ZW9mKG5ldHBlcmZfcmVxdWVzdCkvNCkgeworICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIldBUk5JTkcsIGh0b25sIGNvbnZlcnNpb24gY291bnQgb2YgJWQgd2FzIGxhcmdlciB0aGFuIG5ldHBlcmZfcmVzcG9uc2VcbiIsCisJICAgICAgY291bnQgLSAyKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGNvdW50ID0gc2l6ZW9mKG5ldHBlcmZfcmVxdWVzdCkvNDsKKyAgfQorCisgIC8qIHplcm8gb3V0IHRoZSByZXNwb25zZSBzdHJ1Y3R1cmUgKi8KKyAgCisgIC8qIEJVRyBGSVggU0pCIDIvNC85MyAtIHNob3VsZCBiZSA8IG5vdCA8PSAqLworICBmb3IgKGNvdW50ZXIgPSAwOyAKKyAgICAgICBjb3VudGVyIDwgc2l6ZW9mKG5ldHBlcmZfcmVzcG9uc2UpL3NpemVvZihpbnQpOworICAgICAgIGNvdW50ZXIrKykgeworICAgIHJlc3BvbnNlX2FycmF5W2NvdW50ZXJdID0gMDsKKyAgfQorICAKKyAgLyogd2Ugb25seSBzZWxlY3Qgb25jZS4gaXQgaXMgYXNzdW1lZCB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBzcGxpdCAqLworICAvKiAod2hpY2ggc2hvdWxkIG5vdCBiZSBoYXBwZW5pbmcsIHRoYXQgd2Ugd2lsbCByZWNlaXZlIHRoZSB3aG9sZSAqLworICAvKiB0aGluZyBhbmQgbm90IGhhdmUgYSBwcm9ibGVtIDstKSAqLworICAKKyAgRkRfWkVSTygmcmVhZGZkcyk7CisgIEZEX1NFVChuZXRsaWJfY29udHJvbCwmcmVhZGZkcyk7CisgIHRpbWVvdXQudHZfc2VjICA9IDEyMCArIGFkZGxfdGltZTsgIC8qIHdhaXQgYXQgbGVhc3QgdHdvIG1pbnV0ZXMKKwkJCQkJIGJlZm9yZSBwdW50aW5nIC0gdGhlCisJCQkJCSBVU0VfTE9PUEVSIENQVSBzdHVmZiBtYXkKKwkJCQkJIGNhdXNlIHJlbW90ZSdzIHRvIGhhdmUgYSBiaXQKKwkJCQkJIGxvbmdlciB0aW1lIG9mIGl0IHRoYW4gNjAKKwkJCQkJIHNlY29uZHMgd291bGQgYWxsb3cuCisJCQkJCSB0cmlnZ2VyZWQgYnkgZml4IGZyb20gSmVmZgorCQkJCQkgRHdvcmsuICovCisgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisgIAorICAvKiBzZWxlY3QgaGFkIGJldHRlciByZXR1cm4gb25lLCBvciB0aGVyZSB3YXMgZWl0aGVyIGEgcHJvYmxlbSBvciBhICovCisgIC8qIHRpbWVvdXQuLi4gKi8KKworICBpZiAoKGNvdW50ZXIgPSBzZWxlY3QoRkRfU0VUU0laRSwKKwkJCSZyZWFkZmRzLAorCQkJMCwKKwkJCTAsCisJCQkmdGltZW91dCkpICE9IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAibmV0cGVyZjogcmVjZWl2ZV9yZXNwb25zZTogbm8gcmVzcG9uc2UgcmVjZWl2ZWQuIGVycm5vICVkIGNvdW50ZXIgJWRcbiIsCisJICAgIGVycm5vLAorCSAgICBjb3VudGVyKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICB3aGlsZSAoKHRvdF9ieXRlc19yZWN2ZCAhPSBidWZsZW4pICYmCisJICgoYnl0ZXNfcmVjdmQgPSByZWN2KG5ldGxpYl9jb250cm9sLCBidWYsIGJ5dGVzX2xlZnQsMCkpID4gMCApKSB7CisgICAgdG90X2J5dGVzX3JlY3ZkICs9IGJ5dGVzX3JlY3ZkOworICAgIGJ1ZiAgICAgICAgICAgICArPSBieXRlc19yZWN2ZDsKKyAgICBieXRlc19sZWZ0ICAgICAgLT0gYnl0ZXNfcmVjdmQ7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfcmVzcG9uc2U6IHJlY2VpdmVkIGEgJWQgYnl0ZSByZXNwb25zZVxuIiwKKwkgICAgdG90X2J5dGVzX3JlY3ZkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBwdXQgdGhlIGRlc2lyZWQgcXVhbnRpdHkgb2YgdGhlIHJlc3BvbnNlIGludG8gaG9zdCBvcmRlciAqLworICAKKyAgZm9yIChjb3VudGVyID0gMDsgY291bnRlciA8IGNvdW50OyBjb3VudGVyKyspIHsKKyAgICByZXNwb25zZV9hcnJheVtjb3VudGVyXSA9IG50b2hsKHJlc3BvbnNlX2FycmF5W2NvdW50ZXJdKTsKKyAgfQorICAKKyAgaWYgKGJ5dGVzX3JlY3ZkID09IFNPQ0tFVF9FUlJPUikgeworICAgIHBlcnJvcigicmVjdl9yZXNwb25zZSIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgaWYgKHRvdF9ieXRlc19yZWN2ZCA8IGJ1ZmxlbikgeworICAgIGZwcmludGYoc3RkZXJyLAorCSAgICAicmVjdl9yZXNwb25zZTogcGFydGlhbCByZXNwb25zZSByZWNlaXZlZDogJWQgYnl0ZXNcbiIsCisJICAgIHRvdF9ieXRlc19yZWN2ZCk7CisgICAgZmZsdXNoKHN0ZGVycik7CisgICAgaWYgKGRlYnVnID4gMSkKKyAgICAgIGR1bXBfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBkdW1wX3Jlc3BvbnNlKCk7CisgIH0KK30KKworIC8qCisKKyAgICAgIHJlY3ZfcmVzcG9uc2VfdGltZWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgcmVjZWl2ZSB0aGUgcmVtb3RlJ3MgcmVzcG9uc2Ugb24gdGhlIGNvbnRyb2wgc29ja2V0LiB3ZSB3aWxsIHB1dCB0aGUKKyBlbnRpcmUgcmVzcG9uc2UgaW50byBob3N0IG9yZGVyIGJlZm9yZSBnaXZpbmcgaXQgdG8gdGhlIGNhbGxpbmcKKyByb3V0aW5lLiBob3BlZnVsbHksIHRoaXMgd2lsbCBnbyBtb3N0IG9mIHRoZSB3YXkgdG8gaW5zdXJpbmcKKyBpbnRlcnZlbmRvciBpbnRlcm9wZXJhYmlsaXR5LiBpZiB0aGVyZSBhcmUgYW55IHByb2JsZW1zLCB3ZSB3aWxsIGp1c3QKKyBwdW50IHRoZSBlbnRpcmUgc2l0dWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGUgY2FsbCB0byBzZWxlY3QgYXQgdGhlIGJlZ2lubmluZyBpcyB0byBnZXQgdXMgb3V0IG9mIGhhbmcKKyBzaXR1YXRpb25zIHdoZXJlIHRoZSByZW1vdGUgZ2l2ZXMtdXAgYnV0IHdlIGRvbid0IGZpbmQtb3V0IGFib3V0CisgaXQuIFRoaXMgc2VlbXMgdG8gaGFwcGVuIG9ubHkgcmFyZWx5LCBidXQgaXQgd291bGQgYmUgbmljZSB0byBiZQorIHNvbWV3aGF0IHJvYnVzdCA7LSkKKworIFRoZSAiX3RpbWVkIiBwYXJ0IGlzIHRvIGFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIChvciBJIHN1cHBvc2UKKyBzdWJ0cmFjdCkgZnJvbSB0aGUgbGVuZ3RoIG9mIHRpbWVvdXQgb24gdGhlIHNlbGVjdCBjYWxsLiB0aGlzIHdhcworIGFkZGVkIHNpbmNlIG5vdCBhbGwgdGhlIENQVSB1dGlsaXphdGlvbiBtZWNoYW5pc21zIHJlcXVpcmUgYSA0MAorIHNlY29uZCBjYWxpYnJhdGlvbiwgYW5kIHdlIHVzZWQgdG8gaGF2ZSBhbiBhcmlidHJhcnkgNDAgc2Vjb25kIHNsZWVwCisgaW4gImNhbGlicmF0ZV9yZW1vdGVfY3B1IiAtIHNpbmNlIHdlIGRvbid0IF9hbHdheXNfIG5lZWQgdGhhdCwgd2UKKyB3YW50IHRvIHNpbXBseSBhZGQgNDAgc2Vjb25kcyB0byB0aGUgc2VsZWN0KCkgdGltZW91dCBmcm9tIHRoYXQgY2FsbCwKKyBidXQgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgYWxsIHRoZSAicmVjdl9yZXNwb25zZSIgY2FsbHMgaW4gdGhlIGNvZGUKKyByaWdodCBhd2F5LiAgc29vbywgd2UgcHVzaCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb2xkCisgcmVjdl9yZXNwb25zZSgpIGludG8gYSBuZXcgcmVjdl9yZXNwb25zZV90aW1lZChhZGRsX3RpbW91dCkgY2FsbCwgYW5kCisgaGF2ZSByZWN2X3Jlc3BvbnNlKCkgY2FsbCByZWN2X3Jlc3BvbnNlX3RpbWVkKDApLiAgcmFqIDIwMDUtMDUtMTYKKworICovCisKKwordm9pZAorcmVjdl9yZXNwb25zZV90aW1lZChpbnQgYWRkbF90aW1lKQoreworCisgIC8qIC0xID0+IGNvbnZlcnQgYWxsIHRoZSB0ZXN0LXNwZWNpZmljIGRhdGEgdmlhIG50b2hsICovCisgIHJlY3ZfcmVzcG9uc2VfdGltZWRfbihhZGRsX3RpbWUsLTEpOworCit9CisKK3ZvaWQKK3JlY3ZfcmVzcG9uc2UoKSAKK3sKKyAgLyogMCA9PiBubyBhZGRpdGlvbmFsIHRpbWUsIC0xID0+IGNvbnZlcnQgYWxsIHRlc3Qtc3BlY2lmaWMgZGF0YSAqLworICByZWN2X3Jlc3BvbnNlX3RpbWVkX24oMCwtMSk7Cit9CisKK3ZvaWQKK3JlY3ZfcmVzcG9uc2VfbihpbnQgbikKK3sKKyAgcmVjdl9yZXNwb25zZV90aW1lZF9uKDAsbik7Cit9CisKK3ZvaWQgCitnZXRfcmVtb3RlX3N5c3RlbV9pbmZvKCkKK3sKKyAgY2hhciBkZWxpbVsyXTsKKyAgY2hhciAqdG9rZW47CisKKyAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlID0gRE9fU1lTSU5GTzsKKyAgc2VuZF9yZXF1ZXN0KCk7CisgIHJlY3ZfcmVzcG9uc2VfbigwKTsKKyAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgIGRlbGltWzFdID0gJ1wwJzsKKyAgICBkZWxpbVswXSA9ICooY2hhciAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisjaWYgMAorICAgIHRva2VuID0gKGNoYXIgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhICsKKyAgICAgIChzaXplb2YobmV0cGVyZl9yZXNwb25zZSkgLSA3KTsgLyogT0JPQj8gKi8KKyAgICAqdG9rZW4gPSAwOworI2VuZGlmCisKKyAgICB0b2tlbiA9IHN0cnRvaygoY2hhciAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGEsZGVsaW0pOworICAgIGlmICh0b2tlbikgcmVtb3RlX3N5c25hbWUgPSBzdHJkdXAodG9rZW4pOworICAgIGVsc2UgcmVtb3RlX3N5c25hbWUgPSBzdHJkdXAoIlVua25vd25SZW1vdGVTeXNuYW1lIik7CisgICAgdG9rZW4gPSBzdHJ0b2soTlVMTCxkZWxpbSk7CisgICAgaWYgKHRva2VuKSByZW1vdGVfcmVsZWFzZSA9IHN0cmR1cCh0b2tlbik7CisgICAgZWxzZSByZW1vdGVfcmVsZWFzZSA9IHN0cmR1cCgiVW5rbm93blJlbW90ZVJlbGVhc2UiKTsKKyAgICB0b2tlbiA9IHN0cnRvayhOVUxMLGRlbGltKTsKKyAgICBpZiAodG9rZW4pIHJlbW90ZV9tYWNoaW5lID0gc3RyZHVwKHRva2VuKTsKKyAgICBlbHNlIHJlbW90ZV9tYWNoaW5lID0gc3RyZHVwKCJVbmtub3duUmVtb3RlTWFjaGluZSIpOworICAgIHRva2VuID0gc3RydG9rKE5VTEwsZGVsaW0pOworICAgIGlmICh0b2tlbikgcmVtb3RlX3ZlcnNpb24gPSBzdHJkdXAodG9rZW4pOworICAgIGVsc2UgcmVtb3RlX3ZlcnNpb24gPSBzdHJkdXAoIlVua25vd25SZW1vdGVWZXJzaW9uIik7CisgIH0KKyAgZWxzZSB7CisgICAgcmVtb3RlX3N5c25hbWUgPSBzdHJkdXAoIlVua25vd25SZW1vdGVTeXNuYW1lIik7CisgICAgcmVtb3RlX3JlbGVhc2UgPSBzdHJkdXAoIlVua25vd25SZW1vdGVSZWxlYXNlIik7CisgICAgcmVtb3RlX21hY2hpbmUgPSBzdHJkdXAoIlVua25vd25SZW1vdGVNYWNoaW5lIik7CisgICAgcmVtb3RlX3ZlcnNpb24gPSBzdHJkdXAoIlVua25vd25SZW1vdGVWZXJzaW9uIik7CisgIH0KKyAgICAKK30KKworDAorCisjaWYgZGVmaW5lZChVU0VfUFNUQVQpIHx8IGRlZmluZWQgKFVTRV9TWVNDVEwpCitpbnQKK2hpXzMyKGJpZ19pbnQpCisgICAgIGxvbmcgbG9uZyAqYmlnX2ludDsKK3sKKyAgdW5pb24gb3ZlcmxheV91IHsKKyAgICBsb25nIGxvbmcgIGR3b3JkOworICAgIGxvbmcgICAgICAgd29yZHNbMl07CisgIH0gKm92ZXJsYXk7CisKKyAgb3ZlcmxheSA9ICh1bmlvbiBvdmVybGF5X3UgKiliaWdfaW50OworICAvKiBvbiB0aG9zZSBzeXN0ZW1zIHdoaWNoIGFyZSBieXRlIHN3YXBwZWQsIHdlIHJlYWxseSB3aXNoIHRvICovCisgIC8qIHJldHVybiB3b3Jkc1sxXSAtIGF0IGxlYXN0IEkgdGhpbmsgc28gLSByYWogNC85NSAqLworICBpZiAoaHRvbmwoMUwpID09IDFMKSB7CisgICAgLyogd2UgYXJlIGEgIm5vcm1hbCIgOikgbWFjaGluZSAqLworICAgIHJldHVybihvdmVybGF5LT53b3Jkc1swXSk7CisgIH0KKyAgZWxzZSB7CisgICAgcmV0dXJuKG92ZXJsYXktPndvcmRzWzFdKTsKKyAgfQorfQorCitpbnQKK2xvXzMyKGJpZ19pbnQpCisgICAgIGxvbmcgbG9uZyAqYmlnX2ludDsKK3sKKyAgdW5pb24gb3ZlcmxheV91IHsKKyAgICBsb25nIGxvbmcgIGR3b3JkOworICAgIGxvbmcgICAgICAgd29yZHNbMl07CisgIH0gKm92ZXJsYXk7CisKKyAgb3ZlcmxheSA9ICh1bmlvbiBvdmVybGF5X3UgKiliaWdfaW50OworICAvKiBvbiB0aG9zZSBzeXN0ZW1zIHdoaWNoIGFyZSBieXRlIHN3YXBwZWQsIHdlIHJlYWxseSB3aXNoIHRvICovCisgIC8qIHJldHVybiB3b3Jkc1swXSAtIGF0IGxlYXN0IEkgdGhpbmsgc28gLSByYWogNC85NSAqLworICBpZiAoaHRvbmwoMUwpID09IDFMKSB7CisgICAgLyogd2UgYXJlIGEgIm5vcm1hbCIgOikgbWFjaGluZSAqLworICAgIHJldHVybihvdmVybGF5LT53b3Jkc1sxXSk7CisgIH0KKyAgZWxzZSB7CisgICAgcmV0dXJuKG92ZXJsYXktPndvcmRzWzBdKTsKKyAgfQorfQorCisjZW5kaWYgLyogVVNFX1BTVEFUIHx8IFVTRV9TWVNDVEwgKi8KKwwKKwordm9pZCBsaWJtYWluKCkKK3sKK2ZwcmludGYod2hlcmUsImhlbGxvIHdvcmxkXG4iKTsKK2ZwcmludGYod2hlcmUsImRlYnVnOiAlZFxuIixkZWJ1Zyk7Cit9CisKKwwKK3ZvaWQKK2dldF9zb2NrX2J1ZmZlciAoU09DS0VUIHNkLCBlbnVtIHNvY2tfYnVmZmVyIHdoaWNoLCBpbnQgKmVmZmVjdGl2ZV9zaXplcCkKK3sKKyNpZmRlZiBTT19TTkRCVUYKKyAgaW50IG9wdG5hbWUgPSAod2hpY2ggPT0gU0VORF9CVUZGRVIpID8gU09fU05EQlVGIDogU09fUkNWQlVGOworICBuZXRwZXJmX3NvY2tsZW5fdCBzb2NrX29wdF9sZW47CisKKyAgc29ja19vcHRfbGVuID0gc2l6ZW9mKCplZmZlY3RpdmVfc2l6ZXApOworICBpZiAoZ2V0c29ja29wdChzZCwgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKGNoYXIgKillZmZlY3RpdmVfc2l6ZXAsCisJCSAmc29ja19vcHRfbGVuKSA8IDApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCAibmV0cGVyZjogZ2V0X3NvY2tfYnVmZmVyOiBnZXRzb2Nrb3B0ICVzOiBlcnJubyAlZFxuIiwKKwkgICAgKHdoaWNoID09IFNFTkRfQlVGRkVSKSA/ICJTT19TTkRCVUYiIDogIlNPX1JDVkJVRiIsIGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgICplZmZlY3RpdmVfc2l6ZXAgPSAtMTsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsICJuZXRwZXJmOiBnZXRfc29ja19idWZmZXI6ICIKKwkgICAgIiVzIHNvY2tldCBzaXplIGRldGVybWluZWQgdG8gYmUgJWRcbiIsCisJICAgICh3aGljaCA9PSBTRU5EX0JVRkZFUikgPyAic2VuZCIgOiAicmVjZWl2ZSIsICplZmZlY3RpdmVfc2l6ZXApOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworI2Vsc2UKKyAgKmVmZmVjdGl2ZV9zaXplcCA9IC0xOworI2VuZGlmCit9CisKK3ZvaWQKK3NldF9zb2NrX2J1ZmZlciAoU09DS0VUIHNkLCBlbnVtIHNvY2tfYnVmZmVyIHdoaWNoLCBpbnQgcmVxdWVzdGVkX3NpemUsIGludCAqZWZmZWN0aXZlX3NpemVwKQoreworI2lmZGVmIFNPX1NOREJVRgorICBpbnQgb3B0bmFtZSA9ICh3aGljaCA9PSBTRU5EX0JVRkZFUikgPyBTT19TTkRCVUYgOiBTT19SQ1ZCVUY7CisKKyAgLyogc2VlbXMgdGhhdCB1bmRlciBXaW5kb3dzLCBzZXR0aW5nIGEgdmFsdWUgb2YgemVybyBpcyBob3cgb25lCisgICAgIHRlbGxzIHRoZSBzdGFjayB5b3Ugd2lzaCB0byBlbmFibGUgY29weS1hdm9pZGFuY2UuIEtudXRoIG9ubHkKKyAgICAga25vd3Mgd2hhdCBpdCB3aWxsIGRvIG9uIG90aGVyIHN0YWNrcywgYnV0IGl0IG1pZ2h0IGJlCisgICAgIGludGVyZXN0aW5nIHRvIGZpbmQtb3V0LCBzbyB3ZSB3b24ndCBib3RoZXIgI2lmZGVmJ2luZyB0aGUgY2hhbmdlCisgICAgIHRvIGFsbG93IGFza2luZyBmb3IgMCBieXRlcy4gQ291cnRlc3kgb2YgU0FGLCAyMDA3LTA1ICByYWoKKyAgICAgMjAwNy0wNS0zMSAqLworICBpZiAocmVxdWVzdGVkX3NpemUgPj0gMCkgeworICAgIGlmIChzZXRzb2Nrb3B0KHNkLCBTT0xfU09DS0VULCBvcHRuYW1lLAorCQkgICAoY2hhciAqKSZyZXF1ZXN0ZWRfc2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgeworICAgICAgZnByaW50Zih3aGVyZSwgIm5ldHBlcmY6IHNldF9zb2NrX2J1ZmZlcjogJXMgb3B0aW9uOiBlcnJubyAlZFxuIiwKKwkgICAgICAod2hpY2ggPT0gU0VORF9CVUZGRVIpID8gIlNPX1NOREJVRiIgOiAiU09fUkNWQlVGIiwKKwkgICAgICBlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwgIm5ldHBlcmY6IHNldF9zb2NrX2J1ZmZlcjogJXMgb2YgJWQgcmVxdWVzdGVkLlxuIiwKKwkgICAgICAod2hpY2ggPT0gU0VORF9CVUZGRVIpID8gIlNPX1NOREJVRiIgOiAiU09fUkNWQlVGIiwKKwkgICAgICByZXF1ZXN0ZWRfc2l6ZSk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgfQorCisgIC8qIHRoZSBnZXRzb2Nrb3B0KCkgY2FsbCB0aGF0IHVzZWQgdG8gYmUgaGVyZSBoYXMgYmVlbiBob2lzdGVkIGludG8KKyAgICAgaXRzIG93biByb3V0aW5lIHRvIGJlIHVzZWQgb24gdGhvc2UgcGxhdGZvcm1zIHdoZXJlIHRoZSBzb2NrZXQKKyAgICAgYnVmZmVyIHNpemVzIG1pZ2h0IGNoYW5nZSBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAgcnVuLiByYWogMjAwOC0wMS0xNSAqLworCisgIGdldF9zb2NrX2J1ZmZlcihzZCwgd2hpY2gsIGVmZmVjdGl2ZV9zaXplcCk7CisKKyNlbHNlIC8qIFNPX1NOREJVRiAqLworICAqZWZmZWN0aXZlX3NpemUgPSAtMTsKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KK30KKwordm9pZAorZHVtcF9hZGRyaW5mbyhGSUxFICpkdW1wbG9jLCBzdHJ1Y3QgYWRkcmluZm8gKmluZm8sCisgICAgICAgICAgICAgIGNoYXIgKmhvc3QsIGNoYXIgKnBvcnQsIGludCBmYW1pbHkpCit7CisgIHN0cnVjdCBzb2NrYWRkciAqYWlfYWRkcjsKKyAgc3RydWN0IGFkZHJpbmZvICp0ZW1wOworICB0ZW1wPWluZm87CisKKyAgZnByaW50ZihkdW1wbG9jLCAiZ2V0YWRkcmluZm8gcmV0dXJuZWQgdGhlIGZvbGxvd2luZyBmb3IgaG9zdCAnJXMnICIsIGhvc3QpOworICBmcHJpbnRmKGR1bXBsb2MsICJwb3J0ICclcycgIiwgcG9ydCk7CisgIGZwcmludGYoZHVtcGxvYywgImZhbWlseSAlc1xuIiwgaW5ldF9mdG9zKGZhbWlseSkpOworICB3aGlsZSAodGVtcCkgeworICAgIC8qIHNlZW1zIHRoYXQgU29sYXJpcyAxMCBHQSBiaXRzIHdpbGwgbm90IGdpdmUgYSBjYW5vbmljYWwgbmFtZQorICAgICAgIGZvciA6OjAgb3IgMC4wLjAuMCwgYW5kIHRoZWlyIGZwcmludGYoKSBjYW5ub3QgZGVhbCB3aXRoIGEgbnVsbAorICAgICAgIHBvaW50ZXIsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGEgbnVsbCBwb2ludGVyLiAgcHJvYmFibHkgYQorICAgICAgIHNhZmUgdGhpbmcgdG8gZG8gYW55d2F5LCBldmVudGhvdWdoIGl0IHdhcyBub3QgbmVjZXNzYXJ5IG9uCisgICAgICAgbGludXggb3IgaHAtdXguIHJhaiAyMDA1LTAyLTA5ICovCisgICAgaWYgKHRlbXAtPmFpX2Nhbm9ubmFtZSkgeworICAgICAgZnByaW50ZihkdW1wbG9jLAorCSAgICAgICJcdGNhbm5vbmljYWwgbmFtZTogJyVzJ1xuIix0ZW1wLT5haV9jYW5vbm5hbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZwcmludGYoZHVtcGxvYywKKwkgICAgICAiXHRjYW5ub25pY2FsIG5hbWU6ICclcydcbiIsIihuaWwpIik7CisgICAgfQorICAgIGZwcmludGYoZHVtcGxvYywKKyAgICAgICAgICAgICJcdGZsYWdzOiAleCBmYW1pbHk6ICVzOiBzb2NrdHlwZTogJXMgcHJvdG9jb2wgJXMgYWRkcmxlbiAlZFxuIiwKKyAgICAgICAgICAgIHRlbXAtPmFpX2ZsYWdzLAorICAgICAgICAgICAgaW5ldF9mdG9zKHRlbXAtPmFpX2ZhbWlseSksCisgICAgICAgICAgICBpbmV0X3R0b3ModGVtcC0+YWlfc29ja3R5cGUpLAorICAgICAgICAgICAgaW5ldF9wdG9zKHRlbXAtPmFpX3Byb3RvY29sKSwKKyAgICAgICAgICAgIHRlbXAtPmFpX2FkZHJsZW4pOworICAgIGFpX2FkZHIgPSB0ZW1wLT5haV9hZGRyOworICAgIGlmIChhaV9hZGRyICE9IE5VTEwpIHsKKyAgICAgIGZwcmludGYoZHVtcGxvYywKKyAgICAgICAgICAgICAgIlx0c2FfZmFtaWx5OiAlcyBzYWRhdGE6ICVkICVkICVkICVkICVkICVkXG4iLAorICAgICAgICAgICAgICBpbmV0X2Z0b3MoYWlfYWRkci0+c2FfZmFtaWx5KSwKKyAgICAgICAgICAgICAgKHVfY2hhcilhaV9hZGRyLT5zYV9kYXRhWzBdLAorICAgICAgICAgICAgICAodV9jaGFyKWFpX2FkZHItPnNhX2RhdGFbMV0sCisgICAgICAgICAgICAgICh1X2NoYXIpYWlfYWRkci0+c2FfZGF0YVsyXSwKKyAgICAgICAgICAgICAgKHVfY2hhcilhaV9hZGRyLT5zYV9kYXRhWzNdLAorICAgICAgICAgICAgICAodV9jaGFyKWFpX2FkZHItPnNhX2RhdGFbNF0sCisgICAgICAgICAgICAgICh1X2NoYXIpYWlfYWRkci0+c2FfZGF0YVs1XSk7CisgICAgfQorICAgIHRlbXAgPSB0ZW1wLT5haV9uZXh0OworICB9CisgIGZmbHVzaChkdW1wbG9jKTsKK30KKworLyoKKyAgZXN0YWJsaXNoX2NvbnRyb2woKQorCitzZXQtdXAgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBiZXR3ZWVuIG5ldHBlcmYgYW5kIHRoZSBuZXRzZXJ2ZXIgc28gd2UKK2NhbiBhY3R1YWxseSBydW4gc29tZSB0ZXN0cy4gaWYgd2UgY2Fubm90IGVzdGFibGlzaCB0aGUgY29udHJvbAorY29ubmVjdGlvbiwgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBhIGdvb2QgdGhpbmcsIHNvIHdlIHdpbGwgbGV0IHRoZQorY2FsbGVyIGRlY2lkZSB3aGF0IHRvIGRvLgorCit0byBhc3Npc3Qgd2l0aCBwZXNreSBlbmQtdG8tZW5kLXVuZnJpZW5kbHkgdGhpbmdzIGxpa2UgZmlyZXdhbGxzLCB3ZQorYWxsb3cgdGhlIGNhbGxlciB0byBzcGVjaWZ5IGJvdGggdGhlIHJlbW90ZSBob3N0bmFtZSBhbmQgcG9ydCwgYW5kIHRoZQorbG9jYWwgYWRkcmVzc2luZyBpbmZvLiAgaSBiZWxpZXZlIHRoYXQgaW4gdGhlb3J5IGl0IGlzIHBvc3NpYmxlIHRvCitoYXZlIGFuIElQdjQgZW5kcG9pbnQgYW5kIGFuIElQdjYgZW5kcG9pbnQgY29tbXVuaWNhdGUgd2l0aCBvbmUKK2Fub3RoZXIsIGJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHdlIGFyZSBvbmx5IGdvaW5nIHRvIHRha2UtaW4gb25lCityZXF1ZXN0ZWQgYWRkcmVzcyBmYW1pbHkgcGFyYW1ldGVyLiB0aGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgd2F5CisoaWlyYykgdGhhdCB3ZSBtaWdodCBnZXQgYSBtaXhlZC1tb2RlIGNvbm5lY3Rpb24gd291bGQgYmUgaWYgdGhlCithZGRyZXNzIGZhbWlseSBpcyBzcGVjaWZpZWQgYXMgQUZfVU5TUEVDLCBhbmQgZ2V0YWRkcmluZm8oKSByZXR1cm5zCitkaWZmZXJlbnQgZmFtaWxpZXMgZm9yIHRoZSBsb2NhbCBhbmQgc2VydmVyIG5hbWVzLgorCit0aGUgIm5hbWVzIiBjYW4gYWxzbyBiZSBJUCBhZGRyZXNzZXMgaW4gQVNDSUkgc3RyaW5nIGZvcm0uCisKK3JhaiAyMDAzLTAyLTI3ICovCisKK1NPQ0tFVAorZXN0YWJsaXNoX2NvbnRyb2xfaW50ZXJuYWwoY2hhciAqaG9zdG5hbWUsCisJCQkgICBjaGFyICpwb3J0LAorCQkJICAgaW50ICAgcmVtZmFtLAorCQkJICAgY2hhciAqbG9jYWxob3N0LAorCQkJICAgY2hhciAqbG9jYWxwb3J0LAorCQkJICAgaW50ICAgbG9jZmFtKQoreworICBpbnQgbm90X2Nvbm5lY3RlZDsKKyAgU09DS0VUIGNvbnRyb2xfc29jazsKKyAgaW50IGNvdW50OworICBpbnQgZXJyb3I7CisKKyAgc3RydWN0IGFkZHJpbmZvICAgaGludHM7CisgIHN0cnVjdCBhZGRyaW5mbyAgKmxvY2FsX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICAqcmVtb3RlX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICAqbG9jYWxfcmVzX3RlbXA7CisgIHN0cnVjdCBhZGRyaW5mbyAgKnJlbW90ZV9yZXNfdGVtcDsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgImVzdGFibGlzaF9jb250cm9sIGNhbGxlZCB3aXRoIGhvc3QgJyVzJyBwb3J0ICclcycgcmVtZmFtICVzXG4iLAorICAgICAgICAgICAgaG9zdG5hbWUsCisgICAgICAgICAgICBwb3J0LAorICAgICAgICAgICAgaW5ldF9mdG9zKHJlbWZhbSkpOworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAiXHRcdGxvY2FsICclcycgcG9ydCAnJXMnIGxvY2ZhbSAlc1xuIiwKKyAgICAgICAgICAgIGxvY2FsaG9zdCwKKyAgICAgICAgICAgIGxvY2FscG9ydCwKKyAgICAgICAgICAgIGluZXRfZnRvcyhsb2NmYW0pKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogZmlyc3QsIHdlIGRvIHRoZSByZW1vdGUgKi8KKyAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgIGhpbnRzLmFpX2ZhbWlseSA9IHJlbWZhbTsKKyAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKyAgaGludHMuYWlfZmxhZ3MgPSAwfEFJX0NBTk9OTkFNRTsKKyAgY291bnQgPSAwOworICBkbyB7CisgICAgZXJyb3IgPSBnZXRhZGRyaW5mbygoY2hhciAqKWhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgJmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgJnJlbW90ZV9yZXMpOworICAgIGNvdW50ICs9IDE7CisgICAgaWYgKGVycm9yID09IEVBSV9BR0FJTikgeworICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgIGZwcmludGYod2hlcmUsIlNsZWVwaW5nIG9uIGdldGFkZHJpbmZvIEVBSV9BR0FJTlxuIik7CisgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBzbGVlcCgxKTsKKyAgICB9CisgIH0gd2hpbGUgKChlcnJvciA9PSBFQUlfQUdBSU4pICYmIChjb3VudCA8PSA1KSk7CisKKyAgaWYgKGVycm9yKSB7CisgICAgcHJpbnRmKCJlc3RhYmxpc2ggY29udHJvbDogY291bGQgbm90IHJlc29sdmUgcmVtb3RlICclcycgcG9ydCAnJXMnIGFmICVzIiwKKyAgICAgICAgICAgaG9zdG5hbWUsCisgICAgICAgICAgIHBvcnQsCisgICAgICAgICAgIGluZXRfZnRvcyhyZW1mYW0pKTsKKyAgICBwcmludGYoIlxuXHRnZXRhZGRyaW5mbyByZXR1cm5lZCAlZCAlc1xuIiwKKyAgICAgICAgICAgZXJyb3IsCisgICAgICAgICAgIGdhaV9zdHJlcnJvcihlcnJvcikpOworICAgIHJldHVybihJTlZBTElEX1NPQ0tFVCk7CisgIH0KKworICBpZiAoZGVidWcpIHsKKyAgICBkdW1wX2FkZHJpbmZvKHdoZXJlLCByZW1vdGVfcmVzLCBob3N0bmFtZSwgcG9ydCwgcmVtZmFtKTsKKyAgfQorCisgIC8qIG5vdyB3ZSBkbyB0aGUgbG9jYWwgKi8KKyAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgIGhpbnRzLmFpX2ZhbWlseSA9IGxvY2ZhbTsKKyAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKyAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFfEFJX0NBTk9OTkFNRTsKKyAgY291bnQgPSAwOworICBkbyB7CisgICAgY291bnQgKz0gMTsKKyAgICBlcnJvciA9IGdldGFkZHJpbmZvKChjaGFyICopbG9jYWxob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilsb2NhbHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfcmVzKTsKKyAgICBpZiAoZXJyb3IgPT0gRUFJX0FHQUlOKSB7CisgICAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAiU2xlZXBpbmcgb24gZ2V0YWRkcmluZm8oJXMsJXMpIEVBSV9BR0FJTiBjb3VudCAlZCBcbiIsCisgICAgICAgICAgICAgICAgbG9jYWxob3N0LAorICAgICAgICAgICAgICAgIGxvY2FscG9ydCwKKyAgICAgICAgICAgICAgICBjb3VudCk7CisgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBzbGVlcCgxKTsKKyAgICB9CisgIH0gd2hpbGUgKChlcnJvciA9PSBFQUlfQUdBSU4pICYmIChjb3VudCA8PSA1KSk7CisKKyAgaWYgKGVycm9yKSB7CisgICAgcHJpbnRmKCJlc3RhYmxpc2ggY29udHJvbDogY291bGQgbm90IHJlc29sdmUgbG9jYWwgJyVzJyBwb3J0ICclcycgYWYgJXMiLAorICAgICAgICAgICBsb2NhbGhvc3QsCisgICAgICAgICAgIGxvY2FscG9ydCwKKyAgICAgICAgICAgaW5ldF9mdG9zKGxvY2ZhbSkpOworICAgIHByaW50ZigiXG5cdGdldGFkZHJpbmZvIHJldHVybmVkICVkICVzXG4iLAorICAgICAgICAgICBlcnJvciwKKyAgICAgICAgICAgZ2FpX3N0cmVycm9yKGVycm9yKSk7CisgICAgcmV0dXJuKElOVkFMSURfU09DS0VUKTsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGR1bXBfYWRkcmluZm8od2hlcmUsIGxvY2FsX3JlcywgbG9jYWxob3N0LCBsb2NhbHBvcnQsIGxvY2ZhbSk7CisgIH0KKworICBub3RfY29ubmVjdGVkID0gMTsKKyAgbG9jYWxfcmVzX3RlbXAgPSBsb2NhbF9yZXM7CisgIHJlbW90ZV9yZXNfdGVtcCA9IHJlbW90ZV9yZXM7CisgIC8qIHdlIHdhbnQgdG8gbG9vcCB0aHJvdWdoIGFsbCB0aGUgcG9zc2liaWxpdGllcy4gbG9vcGluZyBvbiB0aGUKKyAgICAgbG9jYWwgYWRkcmVzc2VzIHdpbGwgYmUgaGFuZGxlZCB3aXRoaW4gdGhlIHdoaWxlIGxvb3AuICBJIHN1cHBvc2UKKyAgICAgdGhlc2UgaXMgc29tZSBtb3JlICJDLWV4cGVydCIgd2F5IHRvIGNvZGUgdGhpcywgYnV0IGl0IGhhcyBub3QKKyAgICAgbGVwdCB0byBtaW5kIGp1c3QgeWV0IDopICByYWogMjAwMy0wMjAyNCAqLworCisgIHdoaWxlIChyZW1vdGVfcmVzX3RlbXAgIT0gTlVMTCkgeworCisgICAgLyogSSBhbSBndWVzc2luZyB0aGF0IHdlIHNob3VsZCB1c2UgdGhlIGFkZHJlc3MgZmFtaWx5IG9mIHRoZQorICAgICAgIGxvY2FsIGVuZHBvaW50LCBhbmQgd2Ugd2lsbCBub3Qgd29ycnkgYWJvdXQgbWl4ZWQgZmFtaWx5IHR5cGVzCisgICAgICAgLSBwcmVzdW1lYWJseSB0aGUgc3RhY2sgb3Igb3RoZXIgdHJhbnNpdGlvbiBtZWNoYW5pc21zIHdpbGwgYmUKKyAgICAgICBhYmxlIHRvIGRlYWwgd2l0aCB0aGF0IGZvciB1cy4gZmFtb3VzIGxhc3Qgd29yZHMgOikgIHJhaiAyMDAzLTAyLTI2ICovCisgICAgY29udHJvbF9zb2NrID0gc29ja2V0KGxvY2FsX3Jlc190ZW1wLT5haV9mYW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBpZiAoY29udHJvbF9zb2NrID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAvKiBhdCBzb21lIHBvaW50IHdlJ2xsIG5lZWQgYSBtb3JlIGdlbmVyaWMgImRpc3BsYXkgZXJyb3IiCisgICAgICAgICBtZXNzYWdlIGZvciB3aGVuL2lmIHdlIHVzZSBHVUlzIGFuZCB0aGUgbGlrZS4gdW5saWtlIGEgYmluZAorICAgICAgICAgb3IgY29ubmVjdCBmYWlsdXJlLCBmYWlsdXJlIHRvIGFsbG9jYXRlIGEgc29ja2V0IGlzCisgICAgICAgICAiaW1tZWRpYXRlbHkgZmF0YWwiIGFuZCBzbyB3ZSByZXR1cm4gdG8gdGhlIGNhbGxlci4gcmFqIDIwMDMtMDItMjQgKi8KKyAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICBwZXJyb3IoImVzdGFibGlzaF9jb250cm9sOiB1bmFibGUgdG8gYWxsb2NhdGUgY29udHJvbCBzb2NrZXQiKTsKKyAgICAgIH0KKyAgICAgIHJldHVybihJTlZBTElEX1NPQ0tFVCk7CisgICAgfQorCisgICAgLyogaWYgd2UgYXJlIGdvaW5nIHRvIGNvbnRyb2wgdGhlIGxvY2FsIGVucG9pbnQgYWRkcmVzc2luZywgd2UKKyAgICAgICBuZWVkIHRvIGNhbGwgYmluZC4gb2YgY291cnNlLCB3ZSBzaG91bGQgcHJvYmFibHkgYmUgc2V0dGluZyBvbmUKKyAgICAgICBvZiB0aGUgU09fUkVVU0VtdW1ibGUgc29ja2V0IG9wdGlvbnM/IHJhaiAyMDA1LTAyLTA0ICovCisgICAgaWYgKGJpbmQoY29udHJvbF9zb2NrLAorCSAgICAgbG9jYWxfcmVzX3RlbXAtPmFpX2FkZHIsCisJICAgICBsb2NhbF9yZXNfdGVtcC0+YWlfYWRkcmxlbikgPT0gMCkgeworICAgICAgaWYgKGRlYnVnKSB7CisJZnByaW50Zih3aGVyZSwKKwkJImJvdW5kIGNvbnRyb2wgc29ja2V0IHRvICVzIGFuZCAlc1xuIiwKKwkJbG9jYWxob3N0LAorCQlsb2NhbHBvcnQpOworICAgICAgfQorCisgICAgICBpZiAoY29ubmVjdChjb250cm9sX3NvY2ssCisJCSAgcmVtb3RlX3Jlc190ZW1wLT5haV9hZGRyLAorCQkgIHJlbW90ZV9yZXNfdGVtcC0+YWlfYWRkcmxlbikgPT0gMCkgeworCS8qIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byB0aGUgcmVtb3RlIG5ldHNlcnZlciAqLworCWlmIChkZWJ1ZykgeworCSAgZnByaW50Zih3aGVyZSwKKwkJICAic3VjY2Vzc2Z1bCBjb25uZWN0aW9uIHRvIHJlbW90ZSBuZXRzZXJ2ZXIgYXQgJXMgYW5kICVzXG4iLAorCQkgIGhvc3RuYW1lLAorCQkgIHBvcnQpOworCX0KKwlub3RfY29ubmVjdGVkID0gMDsKKwkvKiB0aGlzIHNob3VsZCBnZXQgdXMgb3V0IG9mIHRoZSB3aGlsZSBsb29wICovCisJYnJlYWs7CisgICAgICB9IGVsc2UgeworCS8qIHRoZSBjb25uZWN0IGNhbGwgZmFpbGVkICovCisJaWYgKGRlYnVnKSB7CisJICBmcHJpbnRmKHdoZXJlLAorCQkgICJlc3RhYmxpc2hfY29udHJvbDogY29ubmVjdCBmYWlsZWQsIGVycm5vICVkICVzXG4iLAorCQkgIGVycm5vLAorCQkgIHN0cmVycm9yKGVycm5vKSk7CisJICBmcHJpbnRmKHdoZXJlLCAiICAgIHRyeWluZyBuZXh0IGFkZHJlc3MgY29tYmluYXRpb25cbiIpOworCSAgZmZsdXNoKHdoZXJlKTsKKwl9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogdGhlIGJpbmQgZmFpbGVkICovCisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQkiZXN0YWJsaXNoX2NvbnRyb2w6IGJpbmQgZmFpbGVkLCBlcnJubyAlZCAlc1xuIiwKKwkJZXJybm8sCisJCXN0cmVycm9yKGVycm5vKSk7CisJZnByaW50Zih3aGVyZSwgIiAgICB0cnlpbmcgbmV4dCBhZGRyZXNzIGNvbWJpbmF0aW9uXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgIH0KKworICAgIGlmICgobG9jYWxfcmVzX3RlbXAgPSBsb2NhbF9yZXNfdGVtcC0+YWlfbmV4dCkgPT0gTlVMTCkgeworICAgICAgLyogd3JhcCB0aGUgbG9jYWwgYW5kIG1vdmUgdG8gdGhlIG5leHQgc2VydmVyLCBkb24ndCBmb3JnZXQgdG8KKyAgICAgICAgIGNsb3NlIHRoZSBjdXJyZW50IGNvbnRyb2wgc29ja2V0LiByYWogMjAwMy0wMi0yNCAqLworICAgICAgbG9jYWxfcmVzX3RlbXAgPSBsb2NhbF9yZXM7CisgICAgICAvKiB0aGUgb3V0ZXIgd2hpbGUgY29uZGl0aW9ucyB3aWxsIGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVuIHdlCisgICAgICAgICBnZXQgdG8gdGhlIGVuZCBvZiBhbGwgdGhlIHBvc3NpYmxlIHJlbW90ZSBhZGRyZXNzZXMuICovCisgICAgICByZW1vdGVfcmVzX3RlbXAgPSByZW1vdGVfcmVzX3RlbXAtPmFpX25leHQ7CisgICAgICAvKiBpdCBpcyBzaW1wbGVzdCBoZXJlIHRvIGp1c3QgY2xvc2UgdGhlIGNvbnRyb2wgc29jay4gc2luY2UKKyAgICAgICAgIHRoaXMgaXMgbm90IGEgcGVyZm9ybWFuY2UgY3JpdGljYWwgc2VjdGlvbiBvZiBjb2RlLCB3ZQorICAgICAgICAgZG9uJ3Qgd29ycnkgYWJvdXQgb3ZlcmhlYWRzIGZvciBzb2NrZXQgYWxsb2NhdGlvbiBvcgorICAgICAgICAgY2xvc2UuIHJhaiAyMDAzLTAyLTI0ICovCisgICAgfQorICAgIGNsb3NlKGNvbnRyb2xfc29jayk7CisgIH0KKworICAvKiB3ZSBubyBsb25nZXIgbmVlZCB0aGUgYWRkcmluZm8gc3R1ZmYgKi8KKyAgZnJlZWFkZHJpbmZvKGxvY2FsX3Jlcyk7CisgIGZyZWVhZGRyaW5mbyhyZW1vdGVfcmVzKTsKKworICAvKiBzbywgd2UgYXJlIGVpdGhlciBjb25uZWN0ZWQgb3Igbm90ICovCisgIGlmIChub3RfY29ubmVjdGVkKSB7CisgICAgZnByaW50Zih3aGVyZSwgImVzdGFibGlzaCBjb250cm9sOiBhcmUgeW91IHN1cmUgdGhlcmUgaXMgYSBuZXRzZXJ2ZXIgbGlzdGVuaW5nIG9uICVzIGF0IHBvcnQgJXM/XG4iLGhvc3RuYW1lLHBvcnQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgcmV0dXJuKElOVkFMSURfU09DS0VUKTsKKyAgfQorICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBhcmUgY29ubmVjdGVkLiAgd2UgcHJvYmFibHkgd2FudCBzb21lIHNvcnQgb2YKKyAgICAgdmVyc2lvbiBjaGVjayB3aXRoIHRoZSByZW1vdGUgYXQgc29tZSBwb2ludC4gcmFqIDIwMDMtMDItMjQgKi8KKyAgcmV0dXJuKGNvbnRyb2xfc29jayk7Cit9CisKK3ZvaWQKK2VzdGFibGlzaF9jb250cm9sKGNoYXIgKmhvc3RuYW1lLAorCQkgIGNoYXIgKnBvcnQsCisJCSAgaW50ICAgcmVtZmFtLAorCQkgIGNoYXIgKmxvY2FsaG9zdCwKKwkJICBjaGFyICpsb2NhbHBvcnQsCisJCSAgaW50ICAgbG9jZmFtKQorCit7CisKKyAgbmV0bGliX2NvbnRyb2wgPSBlc3RhYmxpc2hfY29udHJvbF9pbnRlcm5hbChob3N0bmFtZSwKKwkJCQkJICAgICAgcG9ydCwKKwkJCQkJICAgICAgcmVtZmFtLAorCQkJCQkgICAgICBsb2NhbGhvc3QsCisJCQkJCSAgICAgIGxvY2FscG9ydCwKKwkJCQkJICAgICAgbG9jZmFtKTsKKyAgaWYgKG5ldGxpYl9jb250cm9sID09IElOVkFMSURfU09DS0VUKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgImVzdGFibGlzaF9jb250cm9sIGNvdWxkIG5vdCBlc3RhYmxpc2ggdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBmcm9tICVzIHBvcnQgJXMgYWRkcmVzcyBmYW1pbHkgJXMgdG8gJXMgcG9ydCAlcyBhZGRyZXNzIGZhbWlseSAlc1xuIiwKKwkgICAgbG9jYWxob3N0LGxvY2FscG9ydCxpbmV0X2Z0b3MobG9jZmFtKSwKKwkgICAgaG9zdG5hbWUscG9ydCxpbmV0X2Z0b3MocmVtZmFtKSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KElOVkFMSURfU09DS0VUKTsKKyAgfQorfQorCisMCisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogICAgIGdldF9pZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiBSZXR1cm4gYSBzdHJpbmcgdG8gdGhlIGNhbGxpbmcgcm91dGluZSB0aGF0IGNvbnRhaW5zIHRoZSAgICAgICAgICAgICovCisgLyogaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBob3N0IHdlIGFyZSBydW5uaW5nIG9uLiBUaGlzICAgICAgICAqLworIC8qIGluZm9ybWF0aW9uIHdpbGwgdGhlbiBlaXRoZXIgYmUgZGlzcGxheWVkIGxvY2FsbHksIG9yIHJldHVybmVkIHRvICAgKi8KKyAvKiBhIHJlbW90ZSBjYWxsZXIgZm9yIGRpc3BsYXkgdGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY2hhciAqCitnZXRfaWQoKQoreworCXN0YXRpYyBjaGFyIGlkX3N0cmluZ1s4MF07CisjaWZkZWYgV0lOMzIKK2NoYXIgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9uYW1lW01BWF9DT01QVVRFUk5BTUVfTEVOR1RIKzFdIDsKK0RXT1JEICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuID0gTUFYX0NPTVBVVEVSTkFNRV9MRU5HVEggKyAxIDsKKyNlbHNlCitzdHJ1Y3QgIHV0c25hbWUgICAgICAgICBzeXN0ZW1fbmFtZTsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisjaWZkZWYgV0lOMzIKKyBTWVNURU1fSU5GTyBTeXN0ZW1JbmZvOworIEdldFN5c3RlbUluZm8oICZTeXN0ZW1JbmZvICkgOworIGlmICggIUdldENvbXB1dGVyTmFtZShzeXN0ZW1fbmFtZSAsICZuYW1lX2xlbikgKQorICAgc3RyY3B5KHN5c3RlbV9uYW1lICwgIm5vX25hbWUiKSA7CisjZWxzZQorIGlmICh1bmFtZSgmc3lzdGVtX25hbWUpIDwwKSB7CisgICBwZXJyb3IoImlkZW50aWZ5X2xvY2FsOiB1bmFtZSIpOworICAgZXhpdCgxKTsKKyB9CisjZW5kaWYgLyogV0lOMzIgKi8KKworIHNucHJpbnRmKGlkX3N0cmluZywgc2l6ZW9mKGlkX3N0cmluZyksCisjaWZkZWYgV0lOMzIKKwkgICIlLTE1cyUtMTVzJWQuJWQlZCIsCisJICAiV2luZG93cyBOVCIsCisJICBzeXN0ZW1fbmFtZSAsCisJICBHZXRWZXJzaW9uKCkgJiAweEZGICwKKwkgIEdldFZlcnNpb24oKSAmIDB4RkYwMCAsCisJICBTeXN0ZW1JbmZvLmR3UHJvY2Vzc29yVHlwZQorCSAgCisjZWxzZQorCSAgIiUtMTVzJS0xNXMlLTE1cyUtMTVzJS0xNXMiLAorCSAgc3lzdGVtX25hbWUuc3lzbmFtZSwKKwkgIHN5c3RlbV9uYW1lLm5vZGVuYW1lLAorCSAgc3lzdGVtX25hbWUucmVsZWFzZSwKKwkgIHN5c3RlbV9uYW1lLnZlcnNpb24sCisJICBzeXN0ZW1fbmFtZS5tYWNoaW5lCisjZW5kaWYgLyogV0lOMzIgKi8KKwkgICk7CisgcmV0dXJuIChpZF9zdHJpbmcpOworfQorCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICBpZGVudGlmeV9sb2NhbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogRGlzcGxheSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYWwgaG9zdCB0byB0aGUgdXNlci4gICAqLworIC8qIEF0IGZpcnN0IHJlbGVhc2UsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGF0IHdoaWNoICAgKi8KKyAvKiBpcyByZXR1cm5lZCBieSB0aGUgdW5hbWUgLWEgY29tbWFuZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSAgICAgICovCisgLyogaWRudW1iZXIgZmllbGQsIHdoaWNoIHNlZW1zIHRvIGJlIGEgbm9uLVBPU0lYIGl0ZW0sIGFuZCBoZW5jZSAgICAgICAqLworIC8qIG5vbi1wb3J0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkCitpZGVudGlmeV9sb2NhbCgpCit7CisKK2NoYXIgKmxvY2FsX2lkOworCitsb2NhbF9pZCA9IGdldF9pZCgpOworCitmcHJpbnRmKHdoZXJlLCJMb2NhbCBJbmZvcm1hdGlvbiBcblwKK1N5c25hbWUgICAgICAgTm9kZW5hbWUgICAgICAgUmVsZWFzZSAgICAgICAgVmVyc2lvbiAgICAgICAgTWFjaGluZVxuIik7CisKK2ZwcmludGYod2hlcmUsIiVzXG4iLAorICAgICAgIGxvY2FsX2lkKTsKKworfQorCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIC8qICAgICBpZGVudGlmeV9yZW1vdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgLyogRGlzcGxheSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVtb3RlIGhvc3QgdG8gdGhlIHVzZXIuICAqLworIC8qIEF0IGZpcnN0IHJlbGVhc2UsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGF0IHdoaWNoICAgKi8KKyAvKiBpcyByZXR1cm5lZCBieSB0aGUgdW5hbWUgLWEgY29tbWFuZCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSAgICAgICovCisgLyogaWRudW1iZXIgZmllbGQsIHdoaWNoIHNlZW1zIHRvIGJlIGEgbm9uLVBPU0lYIGl0ZW0sIGFuZCBoZW5jZSAgICAgICAqLworIC8qIG5vbi1wb3J0YWJsZS4gQSByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIHJlbW90ZSBzaWRlLCB3aGljaCB3aWxsICAgICAgKi8KKyAvKiByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdXRzbmFtZSBpbmZvcm1hdGlvbiBpbiBhICAgICAgICAgICAgICovCisgLyogcHJlLWZvcm1hdHRlZCBmb3JtLCB3aGljaCBpcyB0aGVuIGRpc3BsYXllZCBhZnRlciB0aGUgaGVhZGVyLiAgICAgICAqLworIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK2lkZW50aWZ5X3JlbW90ZSgpCit7CisKK2NoYXIgICAgKnJlbW90ZV9pZD0iIjsKKworLyogc2VuZCBhIHJlcXVlc3QgZm9yIG5vZGUgaW5mbyB0byB0aGUgcmVtb3RlICovCituZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUgPSBOT0RFX0lERU5USUZZOworCitzZW5kX3JlcXVlc3QoKTsKKworLyogYW5kIG5vdyB3YWl0IGZvciB0aGUgcmVwbHkgdG8gY29tZSBiYWNrICovCisKK3JlY3ZfcmVzcG9uc2UoKTsKKworaWYgKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICAgIHBlcnJvcigiaWRlbnRpZnlfcmVtb3RlOiBvbiByZW1vdGUiKTsKKyAgICAgICAgZXhpdCgxKTsKK30KKworZnByaW50Zih3aGVyZSwiUmVtb3RlIEluZm9ybWF0aW9uIFxuXAorU3lzbmFtZSAgICAgICBOb2RlbmFtZSAgICAgICBSZWxlYXNlICAgICAgICBWZXJzaW9uICAgICAgICBNYWNoaW5lXG4iKTsKKworZnByaW50Zih3aGVyZSwiJXMiLAorICAgICAgIHJlbW90ZV9pZCk7Cit9CisKK3ZvaWQKK2NwdV9zdGFydChpbnQgbWVhc3VyZV9jcHUpCit7CisKKyAgZ2V0dGltZW9mZGF5KCZ0aW1lMSwKKyAgICAgICAgICAgICAgICZ0eik7CisgIAorICBpZiAobWVhc3VyZV9jcHUpIHsKKyAgICBjcHVfdXRpbF9pbml0KCk7CisgICAgbWVhc3VyaW5nX2NwdSA9IDE7CisgICAgY3B1X21ldGhvZCA9IGdldF9jcHVfbWV0aG9kKCk7CisgICAgY3B1X3N0YXJ0X2ludGVybmFsKCk7CisgIH0KK30KKworDAordm9pZAorY3B1X3N0b3AoaW50IG1lYXN1cmVfY3B1LCBmbG9hdCAqZWxhcHNlZCkKKworeworCisgIGludCAgICAgc2VjLAorICAgIHVzZWM7CisKKyAgaWYgKG1lYXN1cmVfY3B1KSB7CisgICAgY3B1X3N0b3BfaW50ZXJuYWwoKTsKKyAgICBjcHVfdXRpbF90ZXJtaW5hdGUoKTsKKyAgfQorICAKKyAgZ2V0dGltZW9mZGF5KCZ0aW1lMiwKKwkgICAgICAgJnR6KTsKKyAgCisgIGlmICh0aW1lMi50dl91c2VjIDwgdGltZTEudHZfdXNlYykgeworICAgIHRpbWUyLnR2X3VzZWMgKz0gMTAwMDAwMDsKKyAgICB0aW1lMi50dl9zZWMgIC09IDE7CisgIH0KKyAgCisgIHNlYyAgICAgPSB0aW1lMi50dl9zZWMgLSB0aW1lMS50dl9zZWM7CisgIHVzZWMgICAgPSB0aW1lMi50dl91c2VjIC0gdGltZTEudHZfdXNlYzsKKyAgbGliX2VsYXBzZWQgICAgID0gKGZsb2F0KXNlYyArICgoZmxvYXQpdXNlYy8oZmxvYXQpMTAwMDAwMC4wKTsKKyAgCisgICplbGFwc2VkID0gbGliX2VsYXBzZWQ7CisgIAorfQorCisKK2RvdWJsZQorY2FsY190aHJ1cHV0X2ludGVydmFsKGRvdWJsZSB1bml0c19yZWNlaXZlZCxkb3VibGUgZWxhcHNlZCkKKworeworICBkb3VibGUgICAgICAgIGRpdmlzb3I7CisKKyAgLyogV2Ugd2lsbCBjYWxjdWxhdGUgdGhlIHRocnVwdXQgaW4gbGliZm10IHVuaXRzL3NlY29uZCAqLworICBzd2l0Y2ggKGxpYmZtdCkgeworICBjYXNlICdLJzoKKyAgICBkaXZpc29yID0gMTAyNC4wOworICAgIGJyZWFrOworICBjYXNlICdNJzoKKyAgICBkaXZpc29yID0gMTAyNC4wICogMTAyNC4wOworICAgIGJyZWFrOworICBjYXNlICdHJzoKKyAgICBkaXZpc29yID0gMTAyNC4wICogMTAyNC4wICogMTAyNC4wOworICAgIGJyZWFrOworICBjYXNlICdrJzoKKyAgICBkaXZpc29yID0gMTAwMC4wIC8gOC4wOworICAgIGJyZWFrOworICBjYXNlICdtJzoKKyAgICBkaXZpc29yID0gMTAwMC4wICogMTAwMC4wIC8gOC4wOworICAgIGJyZWFrOworICBjYXNlICdnJzoKKyAgICBkaXZpc29yID0gMTAwMC4wICogMTAwMC4wICogMTAwMC4wIC8gOC4wOworICAgIGJyZWFrOworICBjYXNlICd4JzoKKyAgICBkaXZpc29yID0gMS4wOworICAgIGJyZWFrOworICAgIAorICBkZWZhdWx0OgorICAgIGRpdmlzb3IgPSAxMDI0LjA7CisgIH0KKyAgCisgIHJldHVybiAodW5pdHNfcmVjZWl2ZWQgLyBkaXZpc29yIC8gZWxhcHNlZCk7CisKK30KKworZG91YmxlCitjYWxjX3RocnVwdXQoZG91YmxlIHVuaXRzX3JlY2VpdmVkKQorCit7CisgIHJldHVybihjYWxjX3RocnVwdXRfaW50ZXJ2YWwodW5pdHNfcmVjZWl2ZWQsbGliX2VsYXBzZWQpKTsKK30KKworLyogdGhlc2UgIl9vbW5pIiB2ZXJzaW9ucyBhcmUgb25lcyB3aGljaCB1bmRlcnN0YW5kICd4JyBhcyBhIHVuaXQsCisgICBtZWFuaW5nIHRyYW5zYWN0aW9ucy9zLiAgd2UgaGF2ZSBhIHNlcGFyYXRlIHJvdXRpbmUgcmF0aGVyIHRoYW4KKyAgIGNvbnZlcnQgdGhlIGV4aXN0aW5nIHJvdXRpbmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBnbyBhbmQgY2hhbmdlCisgICBfYWxsXyB0aGUgbmV0dGVzdF9mb28uYyBmaWxlcyBhdCBvbmUgdGltZS4gIHJhaiAyMDA3LTA2LTA4ICovCisKK2RvdWJsZQorY2FsY190aHJ1cHV0X2ludGVydmFsX29tbmkoZG91YmxlIHVuaXRzX3JlY2VpdmVkLGRvdWJsZSBlbGFwc2VkKQorCit7CisgIGRvdWJsZSAgICAgICAgZGl2aXNvcjsKKworICAvKiBXZSB3aWxsIGNhbGN1bGF0ZSB0aGUgdGhydXB1dCBpbiBsaWJmbXQgdW5pdHMvc2Vjb25kICovCisgIHN3aXRjaCAobGliZm10KSB7CisgIGNhc2UgJ0snOgorICAgIGRpdmlzb3IgPSAxMDI0LjA7CisgICAgYnJlYWs7CisgIGNhc2UgJ00nOgorICAgIGRpdmlzb3IgPSAxMDI0LjAgKiAxMDI0LjA7CisgICAgYnJlYWs7CisgIGNhc2UgJ0cnOgorICAgIGRpdmlzb3IgPSAxMDI0LjAgKiAxMDI0LjAgKiAxMDI0LjA7CisgICAgYnJlYWs7CisgIGNhc2UgJ2snOgorICAgIGRpdmlzb3IgPSAxMDAwLjAgLyA4LjA7CisgICAgYnJlYWs7CisgIGNhc2UgJ20nOgorICAgIGRpdmlzb3IgPSAxMDAwLjAgKiAxMDAwLjAgLyA4LjA7CisgICAgYnJlYWs7CisgIGNhc2UgJ2cnOgorICAgIGRpdmlzb3IgPSAxMDAwLjAgKiAxMDAwLjAgKiAxMDAwLjAgLyA4LjA7CisgICAgYnJlYWs7CisgIGNhc2UgJ3gnOgorICAgIGRpdmlzb3IgPSAxLjA7CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiV0FSTklORyBjYWxjX3Rocm91Z2hwdXRfaW50ZXJuYWxfb21uaTogdW5rbm93biB1bml0cyAlY1xuIiwKKwkgICAgbGliZm10KTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGRpdmlzb3IgPSAxMDI0LjA7CisgIH0KKyAgCisgIHJldHVybiAodW5pdHNfcmVjZWl2ZWQgLyBkaXZpc29yIC8gZWxhcHNlZCk7CisKK30KKworZG91YmxlCitjYWxjX3RocnVwdXRfb21uaShkb3VibGUgdW5pdHNfcmVjZWl2ZWQpCisKK3sKKyAgcmV0dXJuKGNhbGNfdGhydXB1dF9pbnRlcnZhbF9vbW5pKHVuaXRzX3JlY2VpdmVkLGxpYl9lbGFwc2VkKSk7Cit9CisKKwwKKworCisKK2Zsb2F0IAorY2FsY19jcHVfdXRpbChmbG9hdCBlbGFwc2VkX3RpbWUpCit7CisgIGZsb2F0IHRlbXBfdXRpbDsKKyAgaW50IGk7CisgIHRlbXBfdXRpbCA9IGNhbGNfY3B1X3V0aWxfaW50ZXJuYWwoZWxhcHNlZF90aW1lKTsKKworICAvKiBub3csIHdoYXQgd2FzIHRoZSBtb3N0IHV0aWxpemVkIENQVSBhbmQgaXRzIHV0aWw/ICovCisgIGZvciAoaSA9IDA7IGkgPCBNQVhDUFVTOyBpKyspIHsKKyAgICBpZiAobGliX2xvY2FsX3Blcl9jcHVfdXRpbFtpXSA+IGxpYl9sb2NhbF9wZWFrX2NwdV91dGlsKSB7CisgICAgICBsaWJfbG9jYWxfcGVha19jcHVfdXRpbCA9IGxpYl9sb2NhbF9wZXJfY3B1X3V0aWxbaV07CisgICAgICBsaWJfbG9jYWxfcGVha19jcHVfaWQgPSBsaWJfY3B1X21hcFtpXTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdGVtcF91dGlsOworfQorCitmbG9hdCAKK2NhbGNfc2VydmljZV9kZW1hbmRfaW50ZXJuYWwoZG91YmxlIHVuaXRfZGl2aXNvciwKKwkJCSAgICAgZG91YmxlIHVuaXRzX3NlbnQsCisJCQkgICAgIGZsb2F0IGVsYXBzZWRfdGltZSwKKwkJCSAgICAgZmxvYXQgY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICBpbnQgbnVtX2NwdXMpCisKK3sKKworICBkb3VibGUgc2VydmljZV9kZW1hbmQ7CisgIGRvdWJsZSB0aHJ1cHV0OworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsImNhbGNfc2VydmljZV9kZW1hbmQgY2FsbGVkOiAgdW5pdHNfc2VudCA9ICVmXG4iLAorICAgICAgICAgICAgdW5pdHNfc2VudCk7CisgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUgPSAlZlxuIiwKKyAgICAgICAgICAgIGVsYXBzZWRfdGltZSk7CisgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfdXRpbCA9ICVmXG4iLAorICAgICAgICAgICAgY3B1X3V0aWxpemF0aW9uKTsKKyAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSBjcHUgPSAlZFxuIiwKKyAgICAgICAgICAgIG51bV9jcHVzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKG51bV9jcHVzID09IDApIG51bV9jcHVzID0gbGliX251bV9sb2NfY3B1czsKKyAgCisgIGlmIChlbGFwc2VkX3RpbWUgPT0gMC4wKSB7CisgICAgZWxhcHNlZF90aW1lID0gbGliX2VsYXBzZWQ7CisgIH0KKyAgaWYgKGNwdV91dGlsaXphdGlvbiA9PSAwLjApIHsKKyAgICBjcHVfdXRpbGl6YXRpb24gPSBsaWJfbG9jYWxfY3B1X3V0aWw7CisgIH0KKyAgCisgIHRocnVwdXQgPSAodW5pdHNfc2VudCAvIAorICAgICAgICAgICAgIChkb3VibGUpIHVuaXRfZGl2aXNvciAvIAorICAgICAgICAgICAgIChkb3VibGUpIGVsYXBzZWRfdGltZSk7CisKKyAgLyogb24gTVAgc3lzdGVtcywgaXQgaXMgbmVjZXNzYXJ5IHRvIG11bHRpcGx5IHRoZSBzZXJ2aWNlIGRlbWFuZCBieSAqLworICAvKiB0aGUgbnVtYmVyIG9mIENQVSdzLiBhdCBsZWFzdCwgSSBiZWxpZXZlIHRoYXQgdG8gYmUgdGhlIGNhc2U6KSAqLworICAvKiByYWogMTAvOTUgKi8KKworICAvKiB0aHJ1cHV0IGhhcyBhICJwZXIgc2Vjb25kIiBjb21wb25lbnQuIGlmIHdlIHdlcmUgdXNpbmcgMTAwJSAoICovCisgIC8qIDEwMC4wKSBvZiB0aGUgQ1BVIGluIGEgc2Vjb25kLCB0aGF0IHdvdWxkIGJlIDEgc2Vjb25kLCBvciAxICovCisgIC8qIG1pbGxpc2Vjb25kLCBzbyB3ZSBtdWx0aXBseSBjcHVfdXRpbGl6YXRpb24gYnkgMTAgdG8gZ28gdG8gKi8KKyAgLyogbWlsbGlzZWNvbmRzLCBvciAxMCwwMDAgdG8gZ28gdG8gbWljcm8gc2Vjb25kcy4gV2l0aCByZXZpc2lvbiAqLworICAvKiAyLjEsIHRoZSBzZXJ2aWNlIGRlbWFuZCBtZWFzdXJlIGdvZXMgdG8gbWljcm9zZWNvbmRzIHBlciB1bml0LiAqLworICAvKiByYWogMTIvOTUgKi8gCisgIHNlcnZpY2VfZGVtYW5kID0gKGNwdV91dGlsaXphdGlvbioxMDAwMC4wL3RocnVwdXQpICogCisgICAgKGZsb2F0KSBudW1fY3B1czsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsImNhbGNfc2VydmljZV9kZW1hbmQgdXNpbmc6ICAgdW5pdHNfc2VudCA9ICVmXG4iLAorICAgICAgICAgICAgdW5pdHNfc2VudCk7CisgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUgPSAlZlxuIiwKKyAgICAgICAgICAgIGVsYXBzZWRfdGltZSk7CisgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfdXRpbCA9ICVmXG4iLAorICAgICAgICAgICAgY3B1X3V0aWxpemF0aW9uKTsKKyAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSBjcHUgPSAlZFxuIiwKKyAgICAgICAgICAgIG51bV9jcHVzKTsKKyAgICBmcHJpbnRmKHdoZXJlLCJjYWxjX3NlcnZpY2VfZGVtYW5kIGdvdDogICAgIHRocnVwdXQgPSAlZlxuIiwKKyAgICAgICAgICAgIHRocnVwdXQpOworICAgIGZwcmludGYod2hlcmUsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmRlbSA9ICVmXG4iLAorICAgICAgICAgICAgc2VydmljZV9kZW1hbmQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgcmV0dXJuIChmbG9hdClzZXJ2aWNlX2RlbWFuZDsKK30KKworZmxvYXQgY2FsY19zZXJ2aWNlX2RlbWFuZChkb3VibGUgdW5pdHNfc2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZWxhcHNlZF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjcHVfdXRpbGl6YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fY3B1cykKKworeworCisgIGRvdWJsZSB1bml0X2Rpdmlzb3IgPSAoZG91YmxlKTEwMjQuMDsKKworICByZXR1cm4oY2FsY19zZXJ2aWNlX2RlbWFuZF9pbnRlcm5hbCh1bml0X2Rpdmlzb3IsCisJCQkJICAgICAgdW5pdHNfc2VudCwKKwkJCQkgICAgICBlbGFwc2VkX3RpbWUsCisJCQkJICAgICAgY3B1X3V0aWxpemF0aW9uLAorCQkJCSAgICAgIG51bV9jcHVzKSk7Cit9CisKKy8qIHVzZSB0aGUgdmFsdWUgb2YgbGliZm10IHRvIGRldGVybWluZSB0aGUgdW5pdF9kaXZpc29yICovCitmbG9hdCBjYWxjX3NlcnZpY2VfZGVtYW5kX2ZtdChkb3VibGUgdW5pdHNfc2VudCwKKwkJCSAgICAgIGZsb2F0IGVsYXBzZWRfdGltZSwKKwkJCSAgICAgIGZsb2F0IGNwdV91dGlsaXphdGlvbiwKKwkJCSAgICAgIGludCBudW1fY3B1cykKKworeworICBkb3VibGUgdW5pdF9kaXZpc29yOworCisgIGlmICgneCcgPT0gbGliZm10KSB1bml0X2Rpdmlzb3IgPSAxLjA7CisgIGVsc2UgdW5pdF9kaXZpc29yID0gMTAyNC4wOworCisgIHJldHVybihjYWxjX3NlcnZpY2VfZGVtYW5kX2ludGVybmFsKHVuaXRfZGl2aXNvciwKKwkJCQkgICAgICB1bml0c19zZW50LAorCQkJCSAgICAgIGVsYXBzZWRfdGltZSwKKwkJCQkgICAgICBjcHVfdXRpbGl6YXRpb24sCisJCQkJICAgICAgbnVtX2NwdXMpKTsKK30KKworDAorCitmbG9hdAorY2FsaWJyYXRlX2xvY2FsX2NwdShmbG9hdCBsb2NhbF9jcHVfcmF0ZSkKK3sKKyAgCisgIGxpYl9udW1fbG9jX2NwdXMgPSBnZXRfbnVtX2NwdXMoKTsKKworICBsaWJfdXNlX2lkbGUgPSAwOworI2lmZGVmIFVTRV9MT09QRVIKKyAgY3B1X3V0aWxfaW5pdCgpOworICBsaWJfdXNlX2lkbGUgPSAxOworI2VuZGlmIC8qIFVTRV9MT09QRVIgKi8KKworICBpZiAobG9jYWxfY3B1X3JhdGUgPiAwKSB7CisgICAgLyogVGhlIHVzZXIgdGhpbmsgdGhhdCBoZSBrbm93cyB3aGF0IHRoZSBjcHUgcmF0ZSBpcy4gV2UgYXNzdW1lICovCisgICAgLyogdGhhdCBhbGwgdGhlIHByb2Nlc3NvcnMgb2YgYW4gTVAgc3lzdGVtIGFyZSBlc3NlbnRpYWxseSB0aGUgKi8KKyAgICAvKiBzYW1lIC0gZm9yIHRoaXMgcmVhc29uIHdlIGRvIG5vdCBoYXZlIGEgcGVyIHByb2Nlc3NvciBtYXhyYXRlLiAqLworICAgIC8qIGlmIHRoZSBtYWNoaW5lIGhhcyBwcm9jZXNzb3JzIHdoaWNoIGFyZSBkaWZmZXJlbnQgaW4gKi8KKyAgICAvKiBwZXJmb3JtYW5jZSwgdGhlIENQVSB1dGlsaXphdGlvbiB3aWxsIGJlIHNrZXdlZC4gcmFqIDQvOTUgKi8KKyAgICBsaWJfbG9jYWxfbWF4cmF0ZSA9IGxvY2FsX2NwdV9yYXRlOworICB9CisgIGVsc2UgeworICAgIC8qIGlmIG5laXRoZXIgVVNFX0xPT1BFUiBub3IgVVNFX1BTVEFUIGFyZSBkZWZpbmVkLCB3ZSByZXR1cm4gYSAqLworICAgIC8qIDAuMCB0byBpbmRpY2F0ZSB0aGF0IHRpbWVzIG9yIGdldHJ1c2FnZSBzaG91bGQgYmUgdXNlZC4gcmFqICovCisgICAgLyogNC85NSAqLworICAgIGxpYl9sb2NhbF9tYXhyYXRlID0gKGZsb2F0KTAuMDsKKyNpZiBkZWZpbmVkKFVTRV9QUk9DX1NUQVQpIHx8IGRlZmluZWQoVVNFX0xPT1BFUikgfHwgZGVmaW5lZChVU0VfUFNUQVQpIHx8IGRlZmluZWQoVVNFX0tTVEFUKSB8fCBkZWZpbmVkKFVTRV9QRVJGU1RBVCkgfHwgZGVmaW5lZChVU0VfU1lTQ1RMKQorICAgIGxpYl9sb2NhbF9tYXhyYXRlID0gY2FsaWJyYXRlX2lkbGVfcmF0ZSg0LDEwKTsKKyNlbmRpZgorICB9CisgIHJldHVybiBsaWJfbG9jYWxfbWF4cmF0ZTsKK30KKworCitmbG9hdAorY2FsaWJyYXRlX3JlbW90ZV9jcHUoKQoreworICBmbG9hdCByZW1yYXRlOworCisgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZSA9IENQVV9DQUxJQlJBVEU7CisgIHNlbmRfcmVxdWVzdCgpOworICAvKiB3ZSBrbm93IHRoYXQgY2FsaWJyYXRpb24gd2lsbCBsYXN0IGF0IGxlYXN0IDQwIHNlY29uZHMsIHNvIGdvIHRvICovCisgIC8qIHNsZWVwIGZvciB0aGF0IGxvbmcgc28gdGhlIDYwIHNlY29uZCBzZWxlY3QgaW4gcmVjdl9yZXNwb25zZSB3aWxsICovCisgIC8qIG5vdCBwb3AuIHJhaiA3Lzk1ICovCisKKyAgLyogd2Uga25vdyB0aGF0IENQVSBjYWxpYnJhdGlvbiBtYXkgbGFzdCBhcyBsb25nIGFzIDQwIHNlY29uZHMsIHNvCisgICAgIG1ha2Ugc3VyZSB3ZSAic2VsZWN0IiBmb3IgYXQgbGVhc3QgdGhhdCBsb25nIHdoaWxlIGxvb2tpbmcgZm9yCisgICAgIHRoZSByZXNwb25zZS4gcmFqIDIwMDUtMDUtMTYgKi8KKyAgcmVjdl9yZXNwb25zZV90aW1lZCg0MCk7CisKKyAgaWYgKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgLyogaW5pdGlhbGx5LCBzaWxlbnRseSBpZ25vcmUgcmVtb3RlIGVycm9ycyBhbmQgcGFzcyAqLworICAgIC8qIGJhY2sgYSB6ZXJvIHRvIHRoZSBjYWxsZXIgdGhpcyBzaG91bGQgYWxsb3cgdXMgdG8gKi8KKyAgICAvKiBtaXggcmV2IDEuMCBhbmQgcmV2IDEuMSBuZXRwZXJmcy4uLiAqLworICAgIHJldHVybigoZmxvYXQpMC4wKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiB0aGUgcmF0ZSBpcyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgdGVzdF9zcGVjaWZpYyBkYXRhICovCisgICAgYmNvcHkoKGNoYXIgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhLAorICAgICAgICAgIChjaGFyICopJnJlbXJhdGUsCisgICAgICAgICAgc2l6ZW9mKHJlbXJhdGUpKTsKKyAgICBiY29weSgoY2hhciAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGEgKyBzaXplb2YocmVtcmF0ZSksCisJICAoY2hhciAqKSZsaWJfbnVtX3JlbV9jcHVzLAorCSAgc2l6ZW9mKGxpYl9udW1fcmVtX2NwdXMpKTsKKy8qICAgIHJlbXJhdGUgPSAoZmxvYXQpIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGFbMF07ICovCisgICAgcmV0dXJuKHJlbXJhdGUpOworICB9ICAgICAKK30KKworCisMCisjaWZuZGVmIFdJTjMyCisvKiBXSU4zMiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgZmlsZSBzZXRzIHRvIHNlbGVjdCBiZSBub24tbnVsbC4gKi8KKy8qIFNpbmNlIG1zZWNfc2xlZXAgcm91dGluZSBpcyBvbmx5IGNhbGxlZCBieSBuZXR0ZXN0X2RscGkgJiBuZXR0ZXN0X3VuaXgsICAqLworLyogbGV0J3MgZHVjayB0aGlzIGlzc3VlLiAqLworCitpbnQKK21zZWNfc2xlZXAoIGludCBtc2VjcyApCit7CisgIGludCAgICAgICAgICAgcnZhbCA7CisKKyAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKworICB0aW1lb3V0LnR2X3NlYyA9IG1zZWNzIC8gMTAwMDsKKyAgdGltZW91dC50dl91c2VjID0gKG1zZWNzIC0gKG1zZWNzLzEwMDApICoxMDAwKSAqIDEwMDA7CisgIGlmICgocnZhbCA9IHNlbGVjdCgwLAorICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICZ0aW1lb3V0KSkpIHsKKyAgICBpZiAoIFNPQ0tFVF9FSU5UUihydmFsKSApIHsKKyAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgcGVycm9yKCJtc2VjX3NsZWVwOiBzZWxlY3QiKTsKKyAgICBleGl0KDEpOworICB9CisgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBXSU4zMiAqLworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKy8qIGhpc3QuYworCisgICBHaXZlbiBhIHRpbWUgZGlmZmVyZW5jZSBpbiBtaWNyb3NlY29uZHMsIGluY3JlbWVudCBvbmUgb2YgNjEKKyAgIGRpZmZlcmVudCBidWNrZXRzOiAKKworICAgMCAtIDkgaW4gaW5jcmVtZW50cyBvZiAxIHVzZWMKKyAgIDAgLSA5IGluIGluY3JlbWVudHMgb2YgMTAgdXNlY3MKKyAgIDAgLSA5IGluIGluY3JlbWVudHMgb2YgMTAwIHVzZWNzCisgICAxIC0gOSBpbiBpbmNyZW1lbnRzIG9mIDEgbXNlYworICAgMSAtIDkgaW4gaW5jcmVtZW50cyBvZiAxMCBtc2VjcworICAgMSAtIDkgaW4gaW5jcmVtZW50cyBvZiAxMDAgbXNlY3MKKyAgIDEgLSA5IGluIGluY3JlbWVudHMgb2YgMSBzZWMKKyAgIDEgLSA5IGluIGluY3JlbWVudHMgb2YgMTAgc2VjCisgICA+IDEwMCBzZWNzCisgICAKKyAgIFRoaXMgd2lsbCBhbGxvdyBhbnkgdGltZSB0byBiZSByZWNvcmRlZCB0byB3aXRoaW4gYW4gYWNjdXJhY3kgb2YKKyAgIDEwJSwgYW5kIHByb3ZpZGVzIGEgY29tcGFjdCAgcmVwcmVzZW50YXRpb24gZm9yIGNhcHR1cmluZyB0aGUKKyAgIGRpc3RyaWJ1dGlvbiBvZiBhIGxhcmdlIG51bWJlciBvZiB0aW1lIGRpZmZlcmVuY2VzIChlLmcuCisgICByZXF1ZXN0LXJlc3BvbnNlIGxhdGVuY2llcykuCisgICAKKyAgIENvbGluIExvdyAgMTAvNi85MworICAgUmljayBKb25lcyAyMDA0LTA2LTE1IGV4dGVuZCB0byB1bml0IGFuZCB0ZW4gdXNlY3MKKyovCisKKy8qICNpbmNsdWRlICJzeXMuaCIgKi8KKworLyojZGVmaW5lIEhJU1RfVEVTVCovCisKK0hJU1QgCitISVNUX25ldyh2b2lkKXsKKyAgIEhJU1QgaDsKKyAgIGlmKChoID0gKEhJU1QpIG1hbGxvYyhzaXplb2Yoc3RydWN0IGhpc3RvZ3JhbV9zdHJ1Y3QpKSkgPT0gTlVMTCkgeworICAgICBwZXJyb3IoIkhJU1RfbmV3IC0gbWFsbG9jIGZhaWxlZCIpOworICAgICBleGl0KDEpOworICAgfQorICAgSElTVF9jbGVhcihoKTsKKyAgIHJldHVybiBoOworfQorCit2b2lkIAorSElTVF9jbGVhcihISVNUIGgpeworICAgaW50IGk7CisgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKXsKKyAgICAgIGgtPnVuaXRfdXNlY1tpXSA9IDA7CisgICAgICBoLT50ZW5fdXNlY1tpXSA9IDA7CisgICAgICBoLT5odW5kcmVkX3VzZWNbaV0gPSAwOworICAgICAgaC0+dW5pdF9tc2VjW2ldID0gMDsKKyAgICAgIGgtPnRlbl9tc2VjW2ldID0gMDsKKyAgICAgIGgtPmh1bmRyZWRfbXNlY1tpXSA9IDA7CisgICAgICBoLT51bml0X3NlY1tpXSA9IDA7CisgICAgICBoLT50ZW5fc2VjW2ldID0gMDsKKyAgIH0KKyAgIGgtPnJpZGljdWxvdXMgPSAwOworICAgaC0+dG90YWwgPSAwOworfQorCit2b2lkIAorSElTVF9hZGQocmVnaXN0ZXIgSElTVCBoLCBpbnQgdGltZV9kZWx0YSl7CisgICByZWdpc3RlciBpbnQgdmFsOworICAgaC0+dG90YWwrKzsKKyAgIHZhbCA9IHRpbWVfZGVsdGE7CisgICAvKiBjaGVjayBmb3IgPCAwIGFkZGVkIHZpYSBWTXdhcmUgRVNYIHBhdGNoZXMgKi8KKyAgIGlmICh2YWwgPCAwKSB7CisgICAgIGgtPnJpZGljdWxvdXMrKzsKKyAgIH0KKyAgIGlmKHZhbCA8PSA5KSBoLT51bml0X3VzZWNbdmFsXSsrOworICAgZWxzZSB7CisgICAgIHZhbCA9IHZhbC8xMDsKKyAgICAgaWYodmFsIDw9IDkpIGgtPnRlbl91c2VjW3ZhbF0rKzsKKyAgICAgZWxzZSB7CisgICAgICAgdmFsID0gdmFsLzEwOworICAgICAgIGlmKHZhbCA8PSA5KSBoLT5odW5kcmVkX3VzZWNbdmFsXSsrOworICAgICAgIGVsc2UgeworCSB2YWwgPSB2YWwvMTA7CisJIGlmKHZhbCA8PSA5KSBoLT51bml0X21zZWNbdmFsXSsrOworCSBlbHNlIHsKKwkgICB2YWwgPSB2YWwvMTA7CisJICAgaWYodmFsIDw9IDkpIGgtPnRlbl9tc2VjW3ZhbF0rKzsKKwkgICBlbHNlIHsKKwkgICAgIHZhbCA9IHZhbC8xMDsKKwkgICAgIGlmKHZhbCA8PSA5KSBoLT5odW5kcmVkX21zZWNbdmFsXSsrOworCSAgICAgZWxzZSB7CisgICAgICAgICAgICAgICB2YWwgPSB2YWwvMTA7CisgICAgICAgICAgICAgICBpZih2YWwgPD0gOSkgaC0+dW5pdF9zZWNbdmFsXSsrOworICAgICAgICAgICAgICAgZWxzZSB7CisJCSB2YWwgPSB2YWwvMTA7CisJCSBpZih2YWwgPD0gOSkgaC0+dGVuX3NlY1t2YWxdKys7CisJCSBlbHNlIGgtPnJpZGljdWxvdXMrKzsKKyAgICAgICAgICAgICAgIH0KKwkgICAgIH0KKwkgICB9CisJIH0KKyAgICAgICB9CisgICAgIH0KKyAgIH0KK30KKworI2RlZmluZSBSQl9wcmludGYgcHJpbnRmCisKK3ZvaWQgCitvdXRwdXRfcm93KEZJTEUgKmZkLCBjaGFyICp0aXRsZSwgaW50ICpyb3cpeworICAgcmVnaXN0ZXIgaW50IGk7CisgICBSQl9wcmludGYoIiVzIiwgdGl0bGUpOworICAgZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykgUkJfcHJpbnRmKCI6ICU0ZCIsIHJvd1tpXSk7CisgICBSQl9wcmludGYoIlxuIik7Cit9CisKK2ludAorc3VtX3JvdyhpbnQgKnJvdykgeworICBpbnQgc3VtID0gMDsKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSBzdW0gKz0gcm93W2ldOworICByZXR1cm4oc3VtKTsKK30KKwordm9pZCAKK0hJU1RfcmVwb3J0KEhJU1QgaCl7CisjaWZuZGVmIE9MRF9ISVNUT0dSQU0KKyAgIG91dHB1dF9yb3coc3Rkb3V0LCAiVU5JVF9VU0VDICAgICAiLCBoLT51bml0X3VzZWMpOworICAgb3V0cHV0X3JvdyhzdGRvdXQsICJURU5fVVNFQyAgICAgICIsIGgtPnRlbl91c2VjKTsKKyAgIG91dHB1dF9yb3coc3Rkb3V0LCAiSFVORFJFRF9VU0VDICAiLCBoLT5odW5kcmVkX3VzZWMpOworI2Vsc2UKKyAgIGgtPmh1bmRyZWRfdXNlY1swXSArPSBzdW1fcm93KGgtPnVuaXRfdXNlYyk7CisgICBoLT5odW5kcmVkX3VzZWNbMF0gKz0gc3VtX3JvdyhoLT50ZW5fdXNlYyk7CisgICBvdXRwdXRfcm93KHN0ZG91dCwgIlRFTlRIX01TRUMgICAgIiwgaC0+aHVuZHJlZF91c2VjKTsKKyNlbmRpZgorICAgb3V0cHV0X3JvdyhzdGRvdXQsICJVTklUX01TRUMgICAgICIsIGgtPnVuaXRfbXNlYyk7CisgICBvdXRwdXRfcm93KHN0ZG91dCwgIlRFTl9NU0VDICAgICAgIiwgaC0+dGVuX21zZWMpOworICAgb3V0cHV0X3JvdyhzdGRvdXQsICJIVU5EUkVEX01TRUMgICIsIGgtPmh1bmRyZWRfbXNlYyk7CisgICBvdXRwdXRfcm93KHN0ZG91dCwgIlVOSVRfU0VDICAgICAgIiwgaC0+dW5pdF9zZWMpOworICAgb3V0cHV0X3JvdyhzdGRvdXQsICJURU5fU0VDICAgICAgICIsIGgtPnRlbl9zZWMpOworICAgUkJfcHJpbnRmKCI+MTAwX1NFQ1M6ICVkXG4iLCBoLT5yaWRpY3Vsb3VzKTsKKyAgIFJCX3ByaW50ZigiSElTVF9UT1RBTDogICAgICAlZFxuIiwgaC0+dG90YWwpOworfQorCisjZW5kaWYKKworLyogd2l0aCB0aGUgYWR2ZW50IG9mIHNpdC1hbmQtc3BpbiBpbnRlcnZhbHMgc3VwcG9ydCwgd2UgbWlnaHQgYXMgd2VsbAorICAgbWFrZSB0aGVzZSB0aGluZ3MgYXZhaWxhYmxlIGFsbCB0aGUgdGltZSwgbm90IGp1c3QgZm9yIGRlbW8gb3IKKyAgIGhpc3RvZ3JhbSBtb2Rlcy4gcmFqIDIwMDYtMDItMDYgKi8KKyNpZmRlZiBIQVZFX0dFVEhSVElNRQorCit2b2lkCitISVNUX3RpbWVzdGFtcChocnRpbWVfdCAqdGltZXN0YW1wKQoreworICAqdGltZXN0YW1wID0gZ2V0aHJ0aW1lKCk7Cit9CisKK2ludAorZGVsdGFfbWljcm8oaHJ0aW1lX3QgKmJlZ2luLCBocnRpbWVfdCAqZW5kKQoreworICBsb25nIG5zZWNzOworICBuc2VjcyA9ICgqZW5kKSAtICgqYmVnaW4pOworICByZXR1cm4obnNlY3MvMTAwMCk7Cit9CisKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRfSFJUKQorI2luY2x1ZGUgImhydC5oIgorCit2b2lkCitISVNUX3RpbWVzdGFtcChocnRfdCAqdGltZXN0YW1wKQoreworICAqdGltZXN0YW1wID0gZ2V0X2hydCgpOworfQorCitpbnQKK2RlbHRhX21pY3JvKGhydF90ICpiZWdpbiwgaHJ0X3QgKmVuZCkKK3sKKworICByZXR1cm4oKGludClnZXRfaHJ0X2RlbHRhKCplbmQsKmJlZ2luKSk7CisKK30KKyNlbGlmIGRlZmluZWQoV0lOMzIpCit2b2lkIEhJU1RfdGltZXN0YW1wKExBUkdFX0lOVEVHRVIgKnRpbWVzdGFtcCkKK3sKKwlRdWVyeVBlcmZvcm1hbmNlQ291bnRlcih0aW1lc3RhbXApOworfQorCitpbnQgZGVsdGFfbWljcm8oTEFSR0VfSU5URUdFUiAqYmVnaW4sIExBUkdFX0lOVEVHRVIgKmVuZCkKK3sKKwlMQVJHRV9JTlRFR0VSIERlbHRhVGltZXN0YW1wOworCXN0YXRpYyBMQVJHRV9JTlRFR0VSIFRpY2tIeiA9IHt7MCwwfX07CisKKwlpZiAoVGlja0h6LlF1YWRQYXJ0ID09IDApIAorCXsKKwkJUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgmVGlja0h6KTsKKwl9CisKKwkvKisqKyBSaWNrOyB0aGlzIHdpbGwgb3ZlcmZsb3cgYWZ0ZXIgfjIwMDAgc2Vjb25kcywgaXMgdGhhdAorCSAgZ29vZCBlbm91Z2g/IFNwZW5jZXI6IFllcywgdGhhdCBzaG91bGQgYmUgbW9yZSB0aGFuIGdvb2QKKwkgIGVub3VnaCBmb3IgaGlzdG9ncmFtIHN1cHBvcnQgKi8KKworCURlbHRhVGltZXN0YW1wLlF1YWRQYXJ0ID0gKGVuZC0+UXVhZFBhcnQgLSBiZWdpbi0+UXVhZFBhcnQpICogCisJICAxMDAwMDAwL1RpY2tIei5RdWFkUGFydDsKKwlhc3NlcnQoKERlbHRhVGltZXN0YW1wLkhpZ2hQYXJ0ID09IDApICYmIAorCSAgICAgICAoKGludClEZWx0YVRpbWVzdGFtcC5Mb3dQYXJ0ID49IDApKTsKKworCXJldHVybiAoaW50KURlbHRhVGltZXN0YW1wLkxvd1BhcnQ7Cit9CisKKyNlbHNlCisKK3ZvaWQKK0hJU1RfdGltZXN0YW1wKHN0cnVjdCB0aW1ldmFsICp0aW1lc3RhbXApCit7CisgIGdldHRpbWVvZmRheSh0aW1lc3RhbXAsTlVMTCk7Cit9CisKKyAvKiByZXR1cm4gdGhlIGRpZmZlcmVuY2UgKGluIG1pY3JvIHNlY29uZHMpIGJldHdlZW4gdHdvIHRpbWV2YWwgKi8KKyAvKiB0aW1lc3RhbXBzICovCitpbnQKK2RlbHRhX21pY3JvKHN0cnVjdCB0aW1ldmFsICpiZWdpbixzdHJ1Y3QgdGltZXZhbCAqZW5kKQorCit7CisKKyAgaW50IHVzZWNzLCBzZWNzOworCisgIGlmIChlbmQtPnR2X3VzZWMgPCBiZWdpbi0+dHZfdXNlYykgeworICAgIC8qIGJvcnJvdyBhIHNlY29uZCBmcm9tIHRoZSB0dl9zZWMgKi8KKyAgICBlbmQtPnR2X3VzZWMgKz0gMTAwMDAwMDsKKyAgICBlbmQtPnR2X3NlYy0tOworICB9CisgIHVzZWNzID0gZW5kLT50dl91c2VjIC0gYmVnaW4tPnR2X3VzZWM7CisgIHNlY3MgID0gZW5kLT50dl9zZWMgLSBiZWdpbi0+dHZfc2VjOworCisgIHVzZWNzICs9IChzZWNzICogMTAwMDAwMCk7CisKKyAgcmV0dXJuKHVzZWNzKTsKKworfQorI2VuZGlmIC8qIEhBVkVfR0VUSFJUSU1FICovCisKKwwKKyNpZmRlZiBXQU5UX0RMUEkKKworaW50CitwdXRfY29udHJvbChmZCwgbGVuLCBwcmksIGFjaykKKyAgICAgaW50IGZkLCBsZW4sIHByaSwgYWNrOworeworICBpbnQgZXJyb3I7CisgIGludCBmbGFncyA9IDA7CisgIGRsX2Vycm9yX2Fja190ICplcnJfYWNrID0gKGRsX2Vycm9yX2Fja190ICopY29udHJvbF9kYXRhOworCisgIGNvbnRyb2xfbWVzc2FnZS5sZW4gPSBsZW47CisKKyAgaWYgKChlcnJvciA9IHB1dG1zZyhmZCwgJmNvbnRyb2xfbWVzc2FnZSwgMCwgcHJpKSkgPCAwICkgeworICAgIGZwcmludGYod2hlcmUsInB1dF9jb250cm9sOiBwdXRtc2cgZXJyb3IgJWRcbiIsZXJyb3IpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgcmV0dXJuKC0xKTsKKyAgfQorICBpZiAoKGVycm9yID0gZ2V0bXNnKGZkLCAmY29udHJvbF9tZXNzYWdlLCAwLCAmZmxhZ3MpKSA8IDApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJwdXRfY29udHJvbDogZ2V0c21nIGVycm9yICVkXG4iLGVycm9yKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIHJldHVybigtMSk7CisgIH0KKyAgaWYgKGVycl9hY2stPmRsX3ByaW1pdGl2ZSAhPSBhY2spIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJwdXRfY29udHJvbDogYWNrbm93bGVkZ2VtZW50IGVycm9yIHdhbnRlZCAldSBnb3QgJXUgXG4iLAorICAgICAgICAgICAgYWNrLGVycl9hY2stPmRsX3ByaW1pdGl2ZSk7CisgICAgaWYgKGVycl9hY2stPmRsX3ByaW1pdGl2ZSA9PSBETF9FUlJPUl9BQ0spIHsKKyAgICAgIGZwcmludGYod2hlcmUsIiAgICAgICAgICAgICBkbF9lcnJvcl9wcmltaXRpdmU6ICV1XG4iLAorICAgICAgICAgICAgICBlcnJfYWNrLT5kbF9lcnJvcl9wcmltaXRpdmUpOworICAgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgICAgIGRsX2Vycm5vOiAgICAgICAgICAgJXVcbiIsCisgICAgICAgICAgICAgIGVycl9hY2stPmRsX2Vycm5vKTsKKyAgICAgIGZwcmludGYod2hlcmUsIiAgICAgICAgICAgICBkbF91bml4X2Vycm5vICAgICAgICV1XG4iLAorICAgICAgICAgICAgICBlcnJfYWNrLT5kbF91bml4X2Vycm5vKTsKKyAgICB9CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICByZXR1cm4oLTEpOworICB9CisKKyAgcmV0dXJuKDApOworfQorICAgIAoraW50CitkbF9vcGVuKGNoYXIgZGV2ZmlsZVtdLCBpbnQgcHBhKQoreworICBpbnQgZmQ7CisgIGRsX2F0dGFjaF9yZXFfdCAqYXR0YWNoX3JlcSA9IChkbF9hdHRhY2hfcmVxX3QgKiljb250cm9sX2RhdGE7CisKKyAgaWYgKChmZCA9IG9wZW4oZGV2ZmlsZSwgT19SRFdSKSkgPT0gLTEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBkbF9vcGVuOiBvcGVuIG9mICVzIGZhaWxlZCwgZXJybm8gPSAlZFxuIiwKKyAgICAgICAgICAgIGRldmZpbGUsCisgICAgICAgICAgICBlcnJubyk7CisgICAgcmV0dXJuKC0xKTsKKyAgfQorCisgIGF0dGFjaF9yZXEtPmRsX3ByaW1pdGl2ZSA9IERMX0FUVEFDSF9SRVE7CisgIGF0dGFjaF9yZXEtPmRsX3BwYSA9IHBwYTsKKworICBpZiAocHV0X2NvbnRyb2woZmQsIHNpemVvZihkbF9hdHRhY2hfcmVxX3QpLCAwLCBETF9PS19BQ0spIDwgMCkgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAibmV0cGVyZjogZGxfb3BlbjogY291bGQgbm90IHNlbmQgY29udHJvbCBtZXNzYWdlLCBlcnJubyA9ICVkXG4iLAorICAgICAgICAgICAgZXJybm8pOworICAgIHJldHVybigtMSk7CisgIH0KKyAgcmV0dXJuKGZkKTsKK30KKworaW50CitkbF9iaW5kKGludCBmZCwgaW50IHNhcCwgaW50IG1vZGUsIGNoYXIgKmRsc2FwX3B0ciwgaW50ICpkbHNhcF9sZW4pCit7CisgIGRsX2JpbmRfcmVxX3QgKmJpbmRfcmVxID0gKGRsX2JpbmRfcmVxX3QgKiljb250cm9sX2RhdGE7CisgIGRsX2JpbmRfYWNrX3QgKmJpbmRfYWNrID0gKGRsX2JpbmRfYWNrX3QgKiljb250cm9sX2RhdGE7CisKKyAgYmluZF9yZXEtPmRsX3ByaW1pdGl2ZSA9IERMX0JJTkRfUkVROworICBiaW5kX3JlcS0+ZGxfc2FwID0gc2FwOworICBiaW5kX3JlcS0+ZGxfbWF4X2NvbmluZCA9IDE7CisgIGJpbmRfcmVxLT5kbF9zZXJ2aWNlX21vZGUgPSBtb2RlOworICBiaW5kX3JlcS0+ZGxfY29ubl9tZ210ID0gMDsKKyAgYmluZF9yZXEtPmRsX3hpZHRlc3RfZmxnID0gMDsKKworICBpZiAocHV0X2NvbnRyb2woZmQsIHNpemVvZihkbF9iaW5kX3JlcV90KSwgMCwgRExfQklORF9BQ0spIDwgMCkgeworICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAibmV0cGVyZjogZGxfYmluZDogY291bGQgbm90IHNlbmQgY29udHJvbCBtZXNzYWdlLCBlcnJubyA9ICVkXG4iLAorICAgICAgICAgICAgZXJybm8pOworICAgIHJldHVybigtMSk7CisgIH0KKworICAvKiBhdCB0aGlzIHBvaW50LCB0aGUgY29udHJvbF9kYXRhIHBvcnRpb24gb2YgdGhlIGNvbnRyb2wgbWVzc2FnZSAqLworICAvKiBzdHJ1Y3R1cmUgc2hvdWxkIGNvbnRhaW4gYSBETF9CSU5EX0FDSywgd2hpY2ggd2lsbCBoYXZlIGEgZnVsbCAqLworICAvKiBETFNBUCBpbiBpdC4gd2Ugd2FudCB0byBleHRyYWN0IHRoaXMgYW5kIHBhc3MgaXQgdXAgc28gdGhhdCAgICAqLworICAvKiBpdCBjYW4gYmUgcGFzc2VkIGFyb3VuZC4gKi8KKyAgaWYgKCpkbHNhcF9sZW4gPj0gYmluZF9hY2stPmRsX2FkZHJfbGVuZ3RoKSB7CisgICAgYmNvcHkoKGNoYXIgKiliaW5kX2FjaytiaW5kX2Fjay0+ZGxfYWRkcl9vZmZzZXQsCisgICAgICAgICAgZGxzYXBfcHRyLAorICAgICAgICAgIGJpbmRfYWNrLT5kbF9hZGRyX2xlbmd0aCk7CisgICAgKmRsc2FwX2xlbiA9IGJpbmRfYWNrLT5kbF9hZGRyX2xlbmd0aDsKKyAgICByZXR1cm4oMCk7CisgIH0KKyAgZWxzZSB7IAorICAgIHJldHVybiAoLTEpOyAKKyAgfQorfQorCitpbnQKK2RsX2Nvbm5lY3QoaW50IGZkLCB1bnNpZ25lZCBjaGFyICpyZW1vdGVfYWRkciwgaW50IHJlbW90ZV9hZGRyX2xlbikKK3sKKyAgZGxfY29ubmVjdF9yZXFfdCAqY29ubmVjdGlvbl9yZXEgPSAoZGxfY29ubmVjdF9yZXFfdCAqKWNvbnRyb2xfZGF0YTsKKyAgZGxfY29ubmVjdF9jb25fdCAqY29ubmVjdGlvbl9jb24gPSAoZGxfY29ubmVjdF9jb25fdCAqKWNvbnRyb2xfZGF0YTsKKyAgc3RydWN0IHBvbGxmZCBwaW5mbzsKKworICBpbnQgZmxhZ3MgPSAwOworCisgIC8qIHRoaXMgaXMgaGVyZSBvbiB0aGUgb2ZmIGNoYW5jZSB0aGF0IHdlIHJlYWxseSB3YW50IHNvbWUgZGF0YSAqLworICB1X2xvbmcgZGF0YV9hcmVhWzUxMl07CisgIHN0cnVjdCBzdHJidWYgZGF0YV9tZXNzYWdlOworCisgIGludCBlcnJvcjsKKworICBkYXRhX21lc3NhZ2UubWF4bGVuID0gMjA0ODsKKyAgZGF0YV9tZXNzYWdlLmxlbiA9IDA7CisgIGRhdGFfbWVzc2FnZS5idWYgPSAoY2hhciAqKWRhdGFfYXJlYTsKKworICBjb25uZWN0aW9uX3JlcS0+ZGxfcHJpbWl0aXZlID0gRExfQ09OTkVDVF9SRVE7CisgIGNvbm5lY3Rpb25fcmVxLT5kbF9kZXN0X2FkZHJfbGVuZ3RoID0gcmVtb3RlX2FkZHJfbGVuOworICBjb25uZWN0aW9uX3JlcS0+ZGxfZGVzdF9hZGRyX29mZnNldCA9IHNpemVvZihkbF9jb25uZWN0X3JlcV90KTsKKyAgY29ubmVjdGlvbl9yZXEtPmRsX3Fvc19sZW5ndGggPSAwOworICBjb25uZWN0aW9uX3JlcS0+ZGxfcW9zX29mZnNldCA9IDA7CisgIGJjb3B5IChyZW1vdGVfYWRkciwgCisgICAgICAgICAodW5zaWduZWQgY2hhciAqKWNvbnRyb2xfZGF0YSArIHNpemVvZihkbF9jb25uZWN0X3JlcV90KSwKKyAgICAgICAgIHJlbW90ZV9hZGRyX2xlbik7CisKKyAgLyogd2VsbCwgSSB3b3VsZCBjYWxsIHRoZSBwdXRfY29udHJvbCByb3V0aW5lIGhlcmUsIGJ1dCB0aGUgc2VxdWVuY2UgKi8KKyAgLyogb2YgY29ubmVjdGlvbiBzdHVmZiB3aXRoIERMUEkgaXMgYSBiaXQgc2NyZXdleSB3aXRoIGFsbCB0aGlzICovCisgIC8qIG1lc3NhZ2UgcGFzc2luZyAtIFRvdG8sIEkgZG9uJ3QgdGhpbmsgd2VyZSBpbiBCZXJrZWxleSBhbnltb3JlLiAqLworCisgIGNvbnRyb2xfbWVzc2FnZS5sZW4gPSBzaXplb2YoZGxfY29ubmVjdF9yZXFfdCkgKyByZW1vdGVfYWRkcl9sZW47CisgIGlmICgoZXJyb3IgPSBwdXRtc2coZmQsJmNvbnRyb2xfbWVzc2FnZSwwLDApKSAhPTApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJkbF9jb25uZWN0OiBwdXRtc2cgZmFpbHVyZSwgZXJybm8gPSAlZCwgZXJyb3IgMHgleCBcbiIsCisgICAgICAgICAgICBlcnJubyxlcnJvcik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICByZXR1cm4oLTEpOworICB9OworCisgIHBpbmZvLmZkID0gZmQ7CisgIHBpbmZvLmV2ZW50cyA9IFBPTExJTiB8IFBPTExQUkk7CisgIHBpbmZvLnJldmVudHMgPSAwOworCisgIGlmICgoZXJyb3IgPSBnZXRtc2coZmQsJmNvbnRyb2xfbWVzc2FnZSwmZGF0YV9tZXNzYWdlLCZmbGFncykpICE9IDApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJkbF9jb25uZWN0OiBnZXRtc2cgZmFpbHVyZSwgZXJybm8gPSAlZCwgZXJyb3IgMHgleCBcbiIsCisgICAgICAgICAgICBlcnJubyxlcnJvcik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICByZXR1cm4oLTEpOworICB9CisgIHdoaWxlIChjb250cm9sX2RhdGFbMF0gPT0gRExfVEVTVF9DT04pIHsKKyAgICAvKiBpIHN1cHBvc2Ugd2Ugc3BpbiB1bnRpbCB3ZSBnZXQgYW4gZXJyb3IsIG9yIGEgY29ubmVjdGlvbiAqLworICAgIC8qIGluZGljYXRpb24gKi8KKyAgICBpZigoZXJyb3IgPSBnZXRtc2coZmQsJmNvbnRyb2xfbWVzc2FnZSwmZGF0YV9tZXNzYWdlLCZmbGFncykpICE9MCkgeworICAgICAgIGZwcmludGYod2hlcmUsImRsX2Nvbm5lY3Q6IGdldG1zZyBmYWlsdXJlLCBlcnJubyA9ICVkLCBlcnJvciA9IDB4JXhcbiIsCisgICAgICAgICAgICAgICBlcnJubyxlcnJvcik7CisgICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgfQorCisgIC8qIHdlIGFyZSBvdXQgLSBpdCBlaXRoZXIgd29ya2VkIG9yIGl0IGRpZG4ndCAtIHdoaWNoIHdhcyBpdD8gKi8KKyAgaWYgKGNvbnRyb2xfZGF0YVswXSA9PSBETF9DT05ORUNUX0NPTikgeworICAgIHJldHVybigwKTsKKyAgfQorICBlbHNlIHsKKyAgICByZXR1cm4oLTEpOworICB9Cit9CisKK2ludAorZGxfYWNjZXB0KGZkLCByZW1vdGVfYWRkciwgcmVtb3RlX2FkZHJfbGVuKQorICAgICBpbnQgZmQ7CisgICAgIHVuc2lnbmVkIGNoYXIgKnJlbW90ZV9hZGRyOworICAgICBpbnQgcmVtb3RlX2FkZHJfbGVuOworeworICBkbF9jb25uZWN0X2luZF90ICpjb25uZWN0X2luZCA9IChkbF9jb25uZWN0X2luZF90ICopY29udHJvbF9kYXRhOworICBkbF9jb25uZWN0X3Jlc190ICpjb25uZWN0X3JlcyA9IChkbF9jb25uZWN0X3Jlc190ICopY29udHJvbF9kYXRhOworICBpbnQgdG1wX2NvcjsKKyAgaW50IGZsYWdzID0gMDsKKworICAvKiBoYW5nIGFyb3VuZCBhbmQgd2FpdCBmb3IgYSBjb25uZWN0aW9uIHJlcXVlc3QgKi8KKyAgZ2V0bXNnKGZkLCZjb250cm9sX21lc3NhZ2UsMCwmZmxhZ3MpOworICB3aGlsZSAoY29udHJvbF9kYXRhWzBdICE9IERMX0NPTk5FQ1RfSU5EKSB7CisgICAgZ2V0bXNnKGZkLCZjb250cm9sX21lc3NhZ2UsMCwmZmxhZ3MpOworICB9CisKKyAgLyogbm93IHJlc3BvbmQgdG8gdGhlIHJlcXVlc3QuIGF0IHNvbWUgcG9pbnQsIHdlIG1heSB3YW50IHRvIGJlIHN1cmUgKi8KKyAgLyogdGhhdCB0aGUgY29ubmVjdGlvbiBjYW1lIGZyb20gdGhlIGNvcnJlY3Qgc3RhdGlvbiBhZGRyZXNzLCBidXQgKi8KKyAgLyogd2lsbCBhc3N1bWUgdGhhdCB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpdCBqdXN0IG5vdy4gKi8KKworICB0bXBfY29yID0gY29ubmVjdF9pbmQtPmRsX2NvcnJlbGF0aW9uOworCisgIGNvbm5lY3RfcmVzLT5kbF9wcmltaXRpdmUgPSBETF9DT05ORUNUX1JFUzsKKyAgY29ubmVjdF9yZXMtPmRsX2NvcnJlbGF0aW9uID0gdG1wX2NvcjsKKyAgY29ubmVjdF9yZXMtPmRsX3Jlc3BfdG9rZW4gPSAwOworICBjb25uZWN0X3Jlcy0+ZGxfcW9zX2xlbmd0aCA9IDA7CisgIGNvbm5lY3RfcmVzLT5kbF9xb3Nfb2Zmc2V0ID0gMDsKKyAgY29ubmVjdF9yZXMtPmRsX2dyb3d0aCA9IDA7CisKKyAgcmV0dXJuKHB1dF9jb250cm9sKGZkLCBzaXplb2YoZGxfY29ubmVjdF9yZXNfdCksIDAsIERMX09LX0FDSykpOworCit9CisKK2ludAorZGxfc2V0X3dpbmRvdyhmZCwgd2luZG93KQorICAgICBpbnQgZmQsIHdpbmRvdzsKK3sKKyAgcmV0dXJuKDApOworfQorCit2b2lkCitkbF9zdGF0cyhmZCkKKyAgICAgaW50IGZkOworeworfQorCitpbnQKK2RsX3NlbmRfZGlzYyhmZCkKKyAgICAgaW50IGZkOworeworfQorCitpbnQKK2RsX3JlY3ZfZGlzYyhmZCkKKyAgICAgaW50IGZkOworeworfQorI2VuZGlmIC8qIFdBTlRfRExQSSovCisKKyAvKiB0aGVzZSByb3V0aW5lcyBmb3IgY29uZmlkZW5jZSBpbnRlcnZhbHMgYXJlIGNvdXJ0ZXN5IG9mIElCTS4gVGhleSAqLworIC8qIGhhdmUgYmVlbiBtb2RpZmllZCBzbGlnaHRseSBmb3IgbW9yZSBnZW5lcmFsIHVzYWdlIGJleW9uZCBUQ1AvVURQICovCisgLyogdGVzdHMuIHJhaiAxMS85NCBJIHdvdWxkIHN1c3BlY3QgdGhhdCB0aGlzIGNvZGUgY2FycmllcyBhbiBJQk0gKi8KKyAvKiBjb3B5cmlnaHQgdGhhdCBpcyBtdWNoIHRoZSBzYW1lIGFzIHRoYXQgZm9yIHRoZSBvcmlnaW5hbCBIUCAqLworIC8qIG5ldHBlcmYgY29kZSAqLworaW50ICAgICBjb25maWRlbmNlX2l0ZXJhdGlvbnM7IC8qIGZvciBpdGVyYXRpb25zICovCisKK2RvdWJsZSAgCisgIHJlc3VsdF9jb25maWQ9LTEwLjAsCisgIGxvY19jcHVfY29uZmlkPS0xMC4wLAorICByZW1fY3B1X2NvbmZpZD0tMTAuMCwKKworICBtZWFzdXJlZF9zdW1fcmVzdWx0PTAuMCwgCisgIG1lYXN1cmVkX3NxdWFyZV9zdW1fcmVzdWx0PTAuMCwKKyAgbWVhc3VyZWRfbWVhbl9yZXN1bHQ9MC4wLCAKKyAgbWVhc3VyZWRfdmFyX3Jlc3VsdD0wLjAsIAorCisgIG1lYXN1cmVkX3N1bV9sb2NhbF9jcHU9MC4wLAorICBtZWFzdXJlZF9zcXVhcmVfc3VtX2xvY2FsX2NwdT0wLjAsCisgIG1lYXN1cmVkX21lYW5fbG9jYWxfY3B1PTAuMCwKKyAgbWVhc3VyZWRfdmFyX2xvY2FsX2NwdT0wLjAsIAorCisgIG1lYXN1cmVkX3N1bV9yZW1vdGVfY3B1PTAuMCwKKyAgbWVhc3VyZWRfc3F1YXJlX3N1bV9yZW1vdGVfY3B1PTAuMCwKKyAgbWVhc3VyZWRfbWVhbl9yZW1vdGVfY3B1PTAuMCwKKyAgbWVhc3VyZWRfdmFyX3JlbW90ZV9jcHU9MC4wLCAKKyAgCisgIG1lYXN1cmVkX3N1bV9sb2NhbF9zZXJ2aWNlX2RlbWFuZD0wLjAsCisgIG1lYXN1cmVkX3NxdWFyZV9zdW1fbG9jYWxfc2VydmljZV9kZW1hbmQ9MC4wLAorICBtZWFzdXJlZF9tZWFuX2xvY2FsX3NlcnZpY2VfZGVtYW5kPTAuMCwKKyAgbWVhc3VyZWRfdmFyX2xvY2FsX3NlcnZpY2VfZGVtYW5kPTAuMCwKKworICBtZWFzdXJlZF9zdW1fcmVtb3RlX3NlcnZpY2VfZGVtYW5kPTAuMCwKKyAgbWVhc3VyZWRfc3F1YXJlX3N1bV9yZW1vdGVfc2VydmljZV9kZW1hbmQ9MC4wLAorICBtZWFzdXJlZF9tZWFuX3JlbW90ZV9zZXJ2aWNlX2RlbWFuZD0wLjAsCisgIG1lYXN1cmVkX3Zhcl9yZW1vdGVfc2VydmljZV9kZW1hbmQ9MC4wLAorCisgIG1lYXN1cmVkX3N1bV9sb2NhbF90aW1lPTAuMCwKKyAgbWVhc3VyZWRfc3F1YXJlX3N1bV9sb2NhbF90aW1lPTAuMCwKKyAgbWVhc3VyZWRfbWVhbl9sb2NhbF90aW1lPTAuMCwKKyAgbWVhc3VyZWRfdmFyX2xvY2FsX3RpbWU9MC4wLAorCisgIG1lYXN1cmVkX21lYW5fcmVtb3RlX3RpbWU9MC4wLCAKKyAgCisgIG1lYXN1cmVkX2ZhaWxzLAorICBtZWFzdXJlZF9sb2NhbF9yZXN1bHRzLAorICBjb25maWRlbmNlPS0xMC4wOworLyogIGludGVydmFsPTAuMTsgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIENvbnN0YW50cyBmb3IgQ29uZmlkZW5jZSBJbnRlcnZhbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIAoraW5pdF9zdGF0KCkKK3sKKyAgICAgICAgbWVhc3VyZWRfc3VtX3Jlc3VsdD0wLjA7CisgICAgICAgIG1lYXN1cmVkX3NxdWFyZV9zdW1fcmVzdWx0PTAuMDsKKyAgICAgICAgbWVhc3VyZWRfbWVhbl9yZXN1bHQ9MC4wOworICAgICAgICBtZWFzdXJlZF92YXJfcmVzdWx0PTAuMDsKKworICAgICAgICBtZWFzdXJlZF9zdW1fbG9jYWxfY3B1PTAuMDsKKyAgICAgICAgbWVhc3VyZWRfc3F1YXJlX3N1bV9sb2NhbF9jcHU9MC4wOworICAgICAgICBtZWFzdXJlZF9tZWFuX2xvY2FsX2NwdT0wLjA7CisgICAgICAgIG1lYXN1cmVkX3Zhcl9sb2NhbF9jcHU9MC4wOworCisgICAgICAgIG1lYXN1cmVkX3N1bV9yZW1vdGVfY3B1PTAuMDsKKyAgICAgICAgbWVhc3VyZWRfc3F1YXJlX3N1bV9yZW1vdGVfY3B1PTAuMDsKKyAgICAgICAgbWVhc3VyZWRfbWVhbl9yZW1vdGVfY3B1PTAuMDsKKyAgICAgICAgbWVhc3VyZWRfdmFyX3JlbW90ZV9jcHU9MC4wOworCisgICAgICAgIG1lYXN1cmVkX3N1bV9sb2NhbF9zZXJ2aWNlX2RlbWFuZD0wLjA7CisgICAgICAgIG1lYXN1cmVkX3NxdWFyZV9zdW1fbG9jYWxfc2VydmljZV9kZW1hbmQ9MC4wOworICAgICAgICBtZWFzdXJlZF9tZWFuX2xvY2FsX3NlcnZpY2VfZGVtYW5kPTAuMDsKKyAgICAgICAgbWVhc3VyZWRfdmFyX2xvY2FsX3NlcnZpY2VfZGVtYW5kPTAuMDsKKworICAgICAgICBtZWFzdXJlZF9zdW1fcmVtb3RlX3NlcnZpY2VfZGVtYW5kPTAuMDsKKyAgICAgICAgbWVhc3VyZWRfc3F1YXJlX3N1bV9yZW1vdGVfc2VydmljZV9kZW1hbmQ9MC4wOworICAgICAgICBtZWFzdXJlZF9tZWFuX3JlbW90ZV9zZXJ2aWNlX2RlbWFuZD0wLjA7CisgICAgICAgIG1lYXN1cmVkX3Zhcl9yZW1vdGVfc2VydmljZV9kZW1hbmQ9MC4wOworCisgICAgICAgIG1lYXN1cmVkX3N1bV9sb2NhbF90aW1lPTAuMDsKKyAgICAgICAgbWVhc3VyZWRfc3F1YXJlX3N1bV9sb2NhbF90aW1lPTAuMDsKKyAgICAgICAgbWVhc3VyZWRfbWVhbl9sb2NhbF90aW1lPTAuMDsKKyAgICAgICAgbWVhc3VyZWRfdmFyX2xvY2FsX3RpbWU9MC4wOworCisgICAgICAgIG1lYXN1cmVkX21lYW5fcmVtb3RlX3RpbWU9MC4wOworCisgICAgICAgIG1lYXN1cmVkX2ZhaWxzID0gMC4wOworICAgICAgICBtZWFzdXJlZF9sb2NhbF9yZXN1bHRzPTAuMCwKKyAgICAgICAgY29uZmlkZW5jZT0tMTAuMDsKK30KKworIC8qIHRoaXMgcm91dGluZSBkb2VzIGEgc2ltcGxlIHRhYmxlIGxvb2t1cCBmb3Igc29tZSBzdGF0aXN0aWNhbCAqLworIC8qIGZ1bmN0aW9uIHRoYXQgSSB3b3VsZCByZW1lbWJlciBpZiBJIHN0YXllZCBhd2FrZSBpbiBteSBwcm9ic3RhdHMgKi8KKyAvKiBjbGFzcy4uLiByYWogMTEvOTQgKi8KK2RvdWJsZSAKK2NvbmZpZChpbnQgbGV2ZWwsIGludCBmcmVlZG9tKQoreworZG91YmxlICB0OTlbMzVdLHQ5NVszNV07CisKKyAgIHQ5NVsxXT0xMi43MDY7CisgICB0OTVbMl09IDQuMzAzOworICAgdDk1WzNdPSAzLjE4MjsKKyAgIHQ5NVs0XT0gMi43NzY7CisgICB0OTVbNV09IDIuNTcxOworICAgdDk1WzZdPSAyLjQ0NzsKKyAgIHQ5NVs3XT0gMi4zNjU7CisgICB0OTVbOF09IDIuMzA2OworICAgdDk1WzldPSAyLjI2MjsKKyAgIHQ5NVsxMF09IDIuMjI4OworICAgdDk1WzExXT0gMi4yMDE7CisgICB0OTVbMTJdPSAyLjE3OTsKKyAgIHQ5NVsxM109IDIuMTYwOworICAgdDk1WzE0XT0gMi4xNDU7CisgICB0OTVbMTVdPSAyLjEzMTsKKyAgIHQ5NVsxNl09IDIuMTIwOworICAgdDk1WzE3XT0gMi4xMTA7CisgICB0OTVbMThdPSAyLjEwMTsKKyAgIHQ5NVsxOV09IDIuMDkzOworICAgdDk1WzIwXT0gMi4wODY7CisgICB0OTVbMjFdPSAyLjA4MDsKKyAgIHQ5NVsyMl09IDIuMDc0OworICAgdDk1WzIzXT0gMi4wNjk7CisgICB0OTVbMjRdPSAyLjA2NDsKKyAgIHQ5NVsyNV09IDIuMDYwOworICAgdDk1WzI2XT0gMi4wNTY7CisgICB0OTVbMjddPSAyLjA1MjsKKyAgIHQ5NVsyOF09IDIuMDQ4OworICAgdDk1WzI5XT0gMi4wNDU7CisgICB0OTVbMzBdPSAyLjA0MjsKKyAgIAorICAgdDk5WzFdPTYzLjY1NzsKKyAgIHQ5OVsyXT0gOS45MjU7CisgICB0OTlbM109IDUuODQxOworICAgdDk5WzRdPSA0LjYwNDsKKyAgIHQ5OVs1XT0gNC4wMzI7CisgICB0OTlbNl09IDMuNzA3OworICAgdDk5WzddPSAzLjQ5OTsKKyAgIHQ5OVs4XT0gMy4zNTU7CisgICB0OTlbOV09IDMuMjUwOworICAgdDk5WzEwXT0gMy4xNjk7CisgICB0OTlbMTFdPSAzLjEwNjsKKyAgIHQ5OVsxMl09IDMuMDU1OworICAgdDk5WzEzXT0gMy4wMTI7CisgICB0OTlbMTRdPSAyLjk3NzsKKyAgIHQ5OVsxNV09IDIuOTQ3OworICAgdDk5WzE2XT0gMi45MjE7CisgICB0OTlbMTddPSAyLjg5ODsKKyAgIHQ5OVsxOF09IDIuODc4OworICAgdDk5WzE5XT0gMi44NjE7CisgICB0OTlbMjBdPSAyLjg0NTsKKyAgIHQ5OVsyMV09IDIuODMxOworICAgdDk5WzIyXT0gMi44MTk7CisgICB0OTlbMjNdPSAyLjgwNzsKKyAgIHQ5OVsyNF09IDIuNzk3OworICAgdDk5WzI1XT0gMi43ODc7CisgICB0OTlbMjZdPSAyLjc3OTsKKyAgIHQ5OVsyN109IDIuNzcxOworICAgdDk5WzI4XT0gMi43NjM7CisgICB0OTlbMjldPSAyLjc1NjsKKyAgIHQ5OVszMF09IDIuNzUwOworICAgCisgICBpZihsZXZlbD09OTUpeworICAgICAgICByZXR1cm4odDk1W2ZyZWVkb21dKTsKKyAgIH0gZWxzZSBpZihsZXZlbD09OTkpeworICAgICAgICByZXR1cm4odDk5W2ZyZWVkb21dKTsKKyAgIH0gZWxzZXsKKyAgICAgICAgcmV0dXJuKDApOworICAgfQorfQorCit2b2lkCitjYWxjdWxhdGVfY29uZmlkZW5jZShpbnQgY29uZmlkZW5jZV9pdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGltZSwKKyAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICBmbG9hdCBsb2NfY3B1LAorICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVtX2NwdSwKKyAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxvY19zZCwKKyAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHJlbV9zZCkKK3sKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgImNhbGN1bGF0ZV9jb25maWRlbmNlOiBpdHIgICVkOyB0aW1lICVmOyByZXMgICVmXG4iLAorICAgICAgICAgICAgY29uZmlkZW5jZV9pdGVyYXRpb25zLAorICAgICAgICAgICAgdGltZSwKKyAgICAgICAgICAgIHJlc3VsdCk7CisgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGNwdSAlZjsgcmNwdSAlZlxuIiwKKyAgICAgICAgICAgIGxvY19jcHUsCisgICAgICAgICAgICByZW1fY3B1KTsKKyAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc2RtICVmOyByc2RtICVmXG4iLAorICAgICAgICAgICAgbG9jX3NkLAorICAgICAgICAgICAgcmVtX3NkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogdGhlIHRlc3QgdGltZSAqLworICBtZWFzdXJlZF9zdW1fbG9jYWxfdGltZSAgICAgICAgICAgICAgICs9IAorICAgIChkb3VibGUpIHRpbWU7CisgIG1lYXN1cmVkX3NxdWFyZV9zdW1fbG9jYWxfdGltZSAgICAgICAgKz0gCisgICAgKGRvdWJsZSkgdGltZSp0aW1lOworICBtZWFzdXJlZF9tZWFuX2xvY2FsX3RpbWUgICAgICAgICAgICAgID0gIAorICAgIChkb3VibGUpIG1lYXN1cmVkX3N1bV9sb2NhbF90aW1lL2NvbmZpZGVuY2VfaXRlcmF0aW9uczsKKyAgbWVhc3VyZWRfdmFyX2xvY2FsX3RpbWUgICAgICAgICAgICAgICA9ICAKKyAgICAoZG91YmxlKSBtZWFzdXJlZF9zcXVhcmVfc3VtX2xvY2FsX3RpbWUvY29uZmlkZW5jZV9pdGVyYXRpb25zCisgICAgICAtbWVhc3VyZWRfbWVhbl9sb2NhbF90aW1lKm1lYXN1cmVkX21lYW5fbG9jYWxfdGltZTsKKyAgCisgIC8qIHRoZSB0ZXN0IHJlc3VsdCAqLworICBtZWFzdXJlZF9zdW1fcmVzdWx0ICAgICAgICAgICArPSAKKyAgICAoZG91YmxlKSByZXN1bHQ7CisgIG1lYXN1cmVkX3NxdWFyZV9zdW1fcmVzdWx0ICAgICs9IAorICAgIChkb3VibGUpIHJlc3VsdCpyZXN1bHQ7CisgIG1lYXN1cmVkX21lYW5fcmVzdWx0ICAgICAgICAgID0gIAorICAgIChkb3VibGUpIG1lYXN1cmVkX3N1bV9yZXN1bHQvY29uZmlkZW5jZV9pdGVyYXRpb25zOworICBtZWFzdXJlZF92YXJfcmVzdWx0ICAgICAgICAgICA9ICAKKyAgICAoZG91YmxlKSBtZWFzdXJlZF9zcXVhcmVfc3VtX3Jlc3VsdC9jb25maWRlbmNlX2l0ZXJhdGlvbnMKKyAgICAgIC1tZWFzdXJlZF9tZWFuX3Jlc3VsdCptZWFzdXJlZF9tZWFuX3Jlc3VsdDsKKworICAvKiBsb2NhbCBjcHUgdXRpbGl6YXRpb24gKi8KKyAgbWVhc3VyZWRfc3VtX2xvY2FsX2NwdSAgICAgICAgKz0gCisgICAgKGRvdWJsZSkgbG9jX2NwdTsKKyAgbWVhc3VyZWRfc3F1YXJlX3N1bV9sb2NhbF9jcHUgKz0gCisgICAgKGRvdWJsZSkgbG9jX2NwdSpsb2NfY3B1OworICBtZWFzdXJlZF9tZWFuX2xvY2FsX2NwdSAgICAgICA9IAorICAgIChkb3VibGUpIG1lYXN1cmVkX3N1bV9sb2NhbF9jcHUvY29uZmlkZW5jZV9pdGVyYXRpb25zOworICBtZWFzdXJlZF92YXJfbG9jYWxfY3B1ICAgICAgICA9IAorICAgIChkb3VibGUpIG1lYXN1cmVkX3NxdWFyZV9zdW1fbG9jYWxfY3B1L2NvbmZpZGVuY2VfaXRlcmF0aW9ucworICAgICAgLW1lYXN1cmVkX21lYW5fbG9jYWxfY3B1Km1lYXN1cmVkX21lYW5fbG9jYWxfY3B1OworCisgIC8qIHJlbW90ZSBjcHUgdXRpbCAqLworICBtZWFzdXJlZF9zdW1fcmVtb3RlX2NwdSAgICAgICArPQorICAgIChkb3VibGUpIHJlbV9jcHU7CisgIG1lYXN1cmVkX3NxdWFyZV9zdW1fcmVtb3RlX2NwdSs9CisgICAgKGRvdWJsZSkgcmVtX2NwdSpyZW1fY3B1OworICBtZWFzdXJlZF9tZWFuX3JlbW90ZV9jcHUgICAgICA9IAorICAgIChkb3VibGUpIG1lYXN1cmVkX3N1bV9yZW1vdGVfY3B1L2NvbmZpZGVuY2VfaXRlcmF0aW9uczsKKyAgbWVhc3VyZWRfdmFyX3JlbW90ZV9jcHUgICAgICAgPSAKKyAgICAoZG91YmxlKSBtZWFzdXJlZF9zcXVhcmVfc3VtX3JlbW90ZV9jcHUvY29uZmlkZW5jZV9pdGVyYXRpb25zCisgICAgICAtbWVhc3VyZWRfbWVhbl9yZW1vdGVfY3B1Km1lYXN1cmVkX21lYW5fcmVtb3RlX2NwdTsKKworICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworICBtZWFzdXJlZF9zdW1fbG9jYWxfc2VydmljZV9kZW1hbmQgICAgICs9CisgICAgKGRvdWJsZSkgbG9jX3NkOworICBtZWFzdXJlZF9zcXVhcmVfc3VtX2xvY2FsX3NlcnZpY2VfZGVtYW5kKz0KKyAgICAoZG91YmxlKSBsb2Nfc2QqbG9jX3NkOworICBtZWFzdXJlZF9tZWFuX2xvY2FsX3NlcnZpY2VfZGVtYW5kICAgID0gCisgICAgKGRvdWJsZSkgbWVhc3VyZWRfc3VtX2xvY2FsX3NlcnZpY2VfZGVtYW5kL2NvbmZpZGVuY2VfaXRlcmF0aW9uczsKKyAgbWVhc3VyZWRfdmFyX2xvY2FsX3NlcnZpY2VfZGVtYW5kICAgICA9IAorICAgIChkb3VibGUpIG1lYXN1cmVkX3NxdWFyZV9zdW1fbG9jYWxfc2VydmljZV9kZW1hbmQvY29uZmlkZW5jZV9pdGVyYXRpb25zCisgICAgICAtbWVhc3VyZWRfbWVhbl9sb2NhbF9zZXJ2aWNlX2RlbWFuZCptZWFzdXJlZF9tZWFuX2xvY2FsX3NlcnZpY2VfZGVtYW5kOworCisgIC8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICBtZWFzdXJlZF9zdW1fcmVtb3RlX3NlcnZpY2VfZGVtYW5kICAgICs9CisgICAgKGRvdWJsZSkgcmVtX3NkOworICBtZWFzdXJlZF9zcXVhcmVfc3VtX3JlbW90ZV9zZXJ2aWNlX2RlbWFuZCs9CisgICAgKGRvdWJsZSkgcmVtX3NkKnJlbV9zZDsKKyAgbWVhc3VyZWRfbWVhbl9yZW1vdGVfc2VydmljZV9kZW1hbmQgICA9IAorICAgIChkb3VibGUpIG1lYXN1cmVkX3N1bV9yZW1vdGVfc2VydmljZV9kZW1hbmQvY29uZmlkZW5jZV9pdGVyYXRpb25zOworICBtZWFzdXJlZF92YXJfcmVtb3RlX3NlcnZpY2VfZGVtYW5kICAgID0gCisgICAgKGRvdWJsZSkgbWVhc3VyZWRfc3F1YXJlX3N1bV9yZW1vdGVfc2VydmljZV9kZW1hbmQvY29uZmlkZW5jZV9pdGVyYXRpb25zCisgICAgICAtbWVhc3VyZWRfbWVhbl9yZW1vdGVfc2VydmljZV9kZW1hbmQqbWVhc3VyZWRfbWVhbl9yZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgaWYoY29uZmlkZW5jZV9pdGVyYXRpb25zPjEpeyAKKyAgICAgcmVzdWx0X2NvbmZpZD0gKGRvdWJsZSkgaW50ZXJ2YWwgLSAKKyAgICAgICAyLjAgKiBjb25maWQoY29uZmlkZW5jZV9sZXZlbCxjb25maWRlbmNlX2l0ZXJhdGlvbnMtMSkqIAorICAgICAgICAgc3FydChtZWFzdXJlZF92YXJfcmVzdWx0Lyhjb25maWRlbmNlX2l0ZXJhdGlvbnMtMS4wKSkgLyAKKyAgICAgICAgICAgbWVhc3VyZWRfbWVhbl9yZXN1bHQ7CisKKyAgICAgbG9jX2NwdV9jb25maWQ9IChkb3VibGUpIGludGVydmFsIC0gCisgICAgICAgMi4wICogY29uZmlkKGNvbmZpZGVuY2VfbGV2ZWwsY29uZmlkZW5jZV9pdGVyYXRpb25zLTEpKiAKKyAgICAgICAgIHNxcnQobWVhc3VyZWRfdmFyX2xvY2FsX2NwdS8oY29uZmlkZW5jZV9pdGVyYXRpb25zLTEuMCkpIC8gCisgICAgICAgICAgIG1lYXN1cmVkX21lYW5fbG9jYWxfY3B1OworCisgICAgIHJlbV9jcHVfY29uZmlkPSAoZG91YmxlKSBpbnRlcnZhbCAtIAorICAgICAgIDIuMCAqIGNvbmZpZChjb25maWRlbmNlX2xldmVsLGNvbmZpZGVuY2VfaXRlcmF0aW9ucy0xKSoKKyAgICAgICAgIHNxcnQobWVhc3VyZWRfdmFyX3JlbW90ZV9jcHUvKGNvbmZpZGVuY2VfaXRlcmF0aW9ucy0xLjApKSAvIAorICAgICAgICAgICBtZWFzdXJlZF9tZWFuX3JlbW90ZV9jcHU7CisKKyAgICAgaWYoZGVidWcpeworICAgICAgIHByaW50ZigiQ29uZl9pdHZsICUyZDogcmVzdWx0czolNC4xZiUlIGxvY19jcHU6JTQuMWYlJSByZW1fY3B1OiU0LjFmJSVcbiIsCisgICAgICAgICAgICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9ucywKKyAgICAgICAgICAgICAgKGludGVydmFsLXJlc3VsdF9jb25maWQpKjEwMC4wLAorICAgICAgICAgICAgICAoaW50ZXJ2YWwtbG9jX2NwdV9jb25maWQpKjEwMC4wLAorICAgICAgICAgICAgICAoaW50ZXJ2YWwtcmVtX2NwdV9jb25maWQpKjEwMC4wKTsKKyAgICAgfQorCisgICAgIC8qIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdGhhdCB3ZSBvbmx5IHdhaXQgZm9yIHRoZSByZXN1bHQgdG8KKwliZSBjb25maWRlbnQgcmF0aGVyIHRoYW4gdGhlIHJlc3VsdCBhbmQgQ1BVIHV0aWwocykgdGhlbiBkbworCXNvLiByYWogMjAwNy0wOC0wOCAqLworICAgICBpZiAoIXJlc3VsdF9jb25maWRlbmNlX29ubHkpIHsKKyAgICAgICBjb25maWRlbmNlID0gbWluKG1pbihyZXN1bHRfY29uZmlkLGxvY19jcHVfY29uZmlkKSxyZW1fY3B1X2NvbmZpZCk7CisgICAgIH0KKyAgICAgZWxzZSB7CisgICAgICAgY29uZmlkZW5jZSA9IHJlc3VsdF9jb25maWQ7CisgICAgIH0KKyAgfQorfQorCisgLyogaGVyZSBlbmRzIHRoZSBJQk0gY29kZSAqLworCit2b2lkCityZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKGZsb2F0ICplbGFwc2VkX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqdGhydXB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICpsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCkKKworeworICAqZWxhcHNlZF90aW1lICAgICAgICAgICAgPSAoZmxvYXQpbWVhc3VyZWRfbWVhbl9sb2NhbF90aW1lOworICAqdGhydXB1dCAgICAgICAgICAgICAgICAgPSBtZWFzdXJlZF9tZWFuX3Jlc3VsdDsKKyAgKmxvY2FsX2NwdV91dGlsaXphdGlvbiAgID0gKGZsb2F0KW1lYXN1cmVkX21lYW5fbG9jYWxfY3B1OworICAqcmVtb3RlX2NwdV91dGlsaXphdGlvbiAgPSAoZmxvYXQpbWVhc3VyZWRfbWVhbl9yZW1vdGVfY3B1OworICAqbG9jYWxfc2VydmljZV9kZW1hbmQgICAgPSAoZmxvYXQpbWVhc3VyZWRfbWVhbl9sb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgKnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgID0gKGZsb2F0KW1lYXN1cmVkX21lYW5fcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworfQorCitkb3VibGUKK2dldF9yZXN1bHRfY29uZmlkKCkKK3sKKyAgcmV0dXJuIChkb3VibGUpICgxMDAuMCAqIChpbnRlcnZhbCAtIHJlc3VsdF9jb25maWQpKTsKK30KKworZG91YmxlCitnZXRfbG9jX2NwdV9jb25maWQoKQoreworICByZXR1cm4gKGRvdWJsZSkgKDEwMC4wICogKGludGVydmFsIC0gbG9jX2NwdV9jb25maWQpKTsKK30KKworZG91YmxlCitnZXRfcmVtX2NwdV9jb25maWQoKQoreworICByZXR1cm4gKGRvdWJsZSkgKDEwMC4wICogKGludGVydmFsIC0gcmVtX2NwdV9jb25maWQpKTsKK30KKworIC8qIGRpc3BsYXlfY29uZmlkZW5jZSgpIGlzIGNhbGxlZCB3aGVuIHdlIGNvdWxkIG5vdCBhY2hpZXZlIHRoZSAqLworIC8qIGRlc2lyZWMgY29uZmlkZW5jZSBpbiB0aGUgcmVzdWx0cy4gaXQgd2lsbCBwcmludCB0aGUgYWNoaWV2ZWQgKi8KKyAvKiBjb25maWRlbmNlIHRvICJ3aGVyZSIgcmFqIDExLzk0ICovCit2b2lkCitkaXNwbGF5X2NvbmZpZGVuY2UoKQorCit7CisgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgIiEhISBXQVJOSU5HXG4iKTsKKyAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAiISEhIERlc2lyZWQgY29uZmlkZW5jZSB3YXMgbm90IGFjaGlldmVkIHdpdGhpbiAiKTsKKyAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAidGhlIHNwZWNpZmllZCBpdGVyYXRpb25zLlxuIik7CisgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgIiEhISBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSB3YXMgdmFyaWFiaWxpdHkgaW4gIik7CisgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgInRoZSB0ZXN0IGVudmlyb25tZW50IHRoYXRcbiIpOworICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICIhISEgbXVzdCBiZSBpbnZlc3RpZ2F0ZWQgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuXG4iKTsKKyAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAiISEhIENvbmZpZGVuY2UgaW50ZXJ2YWxzOiBUaHJvdWdocHV0ICAgICAgOiAlNC4zZiUlXG4iLAorICAgICAgICAgIDEwMC4wICogKGludGVydmFsIC0gcmVzdWx0X2NvbmZpZCkpOworICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICIhISEgICAgICAgICAgICAgICAgICAgICAgIExvY2FsIENQVSB1dGlsICA6ICU0LjNmJSVcbiIsCisgICAgICAgICAgMTAwLjAgKiAoaW50ZXJ2YWwgLSBsb2NfY3B1X2NvbmZpZCkpOworICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICIhISEgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBDUFUgdXRpbCA6ICU0LjNmJSVcblxuIiwKKyAgICAgICAgICAxMDAuMCAqIChpbnRlcnZhbCAtIHJlbV9jcHVfY29uZmlkKSk7Cit9CisKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldGxpYi5oIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0bGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3MTk0YQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldGxpYi5oCkBAIC0wLDAgKzEsNjc1IEBACisvKgorICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMjAwNSBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NZU19TT0NLRVRfSCkKKyMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX05FVERCX0gpCisjIGluY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSB8fCAhZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorIyBpbmNsdWRlICJtaXNzaW5nL2dldGFkZHJpbmZvLmgiCisjZW5kaWYKKworI2RlZmluZSBQQURfVElNRSA0CisvKiBsaWJyYXJ5IHJvdXRpbmUgc3BlY2lmYyBkZWZpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSAgICAgICAgIE1BWFNQRUNEQVRBICAgICA2MiAgICAgIC8qIGhvdyBtYW55IGludHMgd29ydGggb2YgZGF0YSAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYW4gdGVzdHMgc2VuZC4uLiAgICAgICAgICAgICovCisjZGVmaW5lICAgICAgICAgTUFYVElNRVMgICAgICAgIDQgICAgICAgLyogaG93IG1hbnkgdGltZXMgbWF5IHdlIGxvb3AgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGNhbGlicmF0ZSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgICAgICAgICBNQVhDUFVTICAgICAgICAgMjU2ICAgICAvKiBob3cgbWFueSBDUFUncyBjYW4gd2UgdHJhY2sgKi8KKyNkZWZpbmUgICAgICAgICBNQVhNRVNTQUdFU0laRSAgNjU1MzYKKyNkZWZpbmUgICAgICAgICBNQVhBTElHTk1FTlQgICAgMTYzODQKKyNkZWZpbmUgICAgICAgICBNQVhPRkZTRVQgICAgICAgIDQwOTYKKyNkZWZpbmUgICAgICAgICBEQVRBQlVGRkVSTEVOICAgTUFYTUVTU0FHRVNJWkUrTUFYQUxJR05NRU5UK01BWE9GRlNFVAorCisjZGVmaW5lICAgICAgICAgREVCVUdfT04gICAgICAgICAgICAgICAgMQorI2RlZmluZSAgICAgICAgIERFQlVHX09GRiAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgICAgICAgICBERUJVR19PSyAgICAgICAgICAgICAgICAzCisjZGVmaW5lICAgICAgICAgTk9ERV9JREVOVElGWSAgICAgICAgICAgNAorI2RlZmluZSAgICAgICAgIENQVV9DQUxJQlJBVEUgICAgICAgICAgIDUKKworI2RlZmluZSAgICAgICAgIERPX1RDUF9TVFJFQU0gICAgICAgICAgIDEwCisjZGVmaW5lICAgICAgICAgVENQX1NUUkVBTV9SRVNQT05TRSAgICAgMTEKKyNkZWZpbmUgICAgICAgICBUQ1BfU1RSRUFNX1JFU1VMVFMgICAgICAxMgorCisjZGVmaW5lICAgICAgICAgRE9fVENQX1JSICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgICAgICAgICBUQ1BfUlJfUkVTUE9OU0UgICAgICAgICAxNAorI2RlZmluZSAgICAgICAgIFRDUF9SUl9SRVNVTFRTICAgICAgICAgIDE1CisKKyNkZWZpbmUgICAgICAgICBET19VRFBfU1RSRUFNICAgICAgICAgICAxNgorI2RlZmluZSAgICAgICAgIFVEUF9TVFJFQU1fUkVTUE9OU0UgICAgIDE3CisjZGVmaW5lICAgICAgICAgVURQX1NUUkVBTV9SRVNVTFRTICAgICAgMTgKKworI2RlZmluZSAgICAgICAgIERPX1VEUF9SUiAgICAgICAgICAgICAgIDE5CisjZGVmaW5lICAgICAgICAgVURQX1JSX1JFU1BPTlNFICAgICAgICAgMjAKKyNkZWZpbmUgICAgICAgICBVRFBfUlJfUkVTVUxUUyAgICAgICAgICAyMQorCisjZGVmaW5lICAgICAgICAgRE9fRExQSV9DT19TVFJFQU0gICAgICAgMjIKKyNkZWZpbmUgICAgICAgICBETFBJX0NPX1NUUkVBTV9SRVNQT05TRSAyMworI2RlZmluZSAgICAgICAgIERMUElfQ09fU1RSRUFNX1JFU1VMVFMgIDI0CisKKyNkZWZpbmUgICAgICAgICBET19ETFBJX0NPX1JSICAgICAgICAgICAyNQorI2RlZmluZSAgICAgICAgIERMUElfQ09fUlJfUkVTUE9OU0UgICAgIDI2CisjZGVmaW5lICAgICAgICAgRExQSV9DT19SUl9SRVNVTFRTICAgICAgMjcKKworI2RlZmluZSAgICAgICAgIERPX0RMUElfQ0xfU1RSRUFNICAgICAgIDI4CisjZGVmaW5lICAgICAgICAgRExQSV9DTF9TVFJFQU1fUkVTUE9OU0UgMjkKKyNkZWZpbmUgICAgICAgICBETFBJX0NMX1NUUkVBTV9SRVNVTFRTICAzMAorCisjZGVmaW5lICAgICAgICAgRE9fRExQSV9DTF9SUiAgICAgICAgICAgMzEKKyNkZWZpbmUgICAgICAgICBETFBJX0NMX1JSX1JFU1BPTlNFICAgICAzMgorI2RlZmluZSAgICAgICAgIERMUElfQ0xfUlJfUkVTVUxUUyAgICAgIDMzCisKKyNkZWZpbmUgICAgICAgICBET19UQ1BfQ1JSICAgICAgICAgICAgICAzNAorI2RlZmluZSAgICAgICAgIFRDUF9DUlJfUkVTUE9OU0UgICAgICAgIDM1CisjZGVmaW5lICAgICAgICAgVENQX0NSUl9SRVNVTFRTICAgICAgICAgMzYKKworI2RlZmluZSAgICAgICAgIERPX1NUUkVBTV9TVFJFQU0gICAgICAgIDM3CisjZGVmaW5lICAgICAgICAgU1RSRUFNX1NUUkVBTV9SRVNQT05TRSAgMzgKKyNkZWZpbmUgICAgICAgICBTVFJFQU1fU1RSRUFNX1JFU1VMVFMgICAzOQorCisjZGVmaW5lICAgICAgICAgRE9fU1RSRUFNX1JSICAgICAgICAgICAgNDAKKyNkZWZpbmUgICAgICAgICBTVFJFQU1fUlJfUkVTUE9OU0UgICAgICA0MQorI2RlZmluZSAgICAgICAgIFNUUkVBTV9SUl9SRVNVTFRTICAgICAgIDQyCisKKyNkZWZpbmUgICAgICAgICBET19ER19TVFJFQU0gICAgICAgICAgICA0MworI2RlZmluZSAgICAgICAgIERHX1NUUkVBTV9SRVNQT05TRSAgICAgIDQ0CisjZGVmaW5lICAgICAgICAgREdfU1RSRUFNX1JFU1VMVFMgICAgICAgNDUKKworI2RlZmluZSAgICAgICAgIERPX0RHX1JSICAgICAgICAgICAgICAgIDQ2CisjZGVmaW5lICAgICAgICAgREdfUlJfUkVTUE9OU0UgICAgICAgICAgNDcKKyNkZWZpbmUgICAgICAgICBER19SUl9SRVNVTFRTICAgICAgICAgICA0OAorCisjZGVmaW5lICAgICAgICAgRE9fRk9SRV9TVFJFQU0gICAgICAgICAgNDkKKyNkZWZpbmUgICAgICAgICBGT1JFX1NUUkVBTV9SRVNQT05TRSAgICA1MAorI2RlZmluZSAgICAgICAgIEZPUkVfU1RSRUFNX1JFU1VMVFMgICAgIDUxCisKKyNkZWZpbmUgICAgICAgICBET19GT1JFX1JSICAgICAgICAgICAgICA1MgorI2RlZmluZSAgICAgICAgIEZPUkVfUlJfUkVTUE9OU0UgICAgICAgIDUzCisjZGVmaW5lICAgICAgICAgRk9SRV9SUl9SRVNVTFRTICAgICAgICAgNTQKKworI2RlZmluZSAgICAgICAgIERPX0hJUFBJX1NUUkVBTSAgICAgICAgIDU1CisjZGVmaW5lICAgICAgICAgSElQUElfU1RSRUFNX1JFU1BPTlNFICAgNTYKKyNkZWZpbmUgICAgICAgICBISVBQSV9TVFJFQU1fUkVTVUxUUyAgICA1NworCisjZGVmaW5lICAgICAgICAgRE9fSElQUElfUlIgICAgICAgICAgICAgNTIKKyNkZWZpbmUgICAgICAgICBISVBQSV9SUl9SRVNQT05TRSAgICAgICA1MworI2RlZmluZSAgICAgICAgIEhJUFBJX1JSX1JFU1VMVFMgICAgICAgIDU0CisKKyNkZWZpbmUgICAgICAgICBET19YVElfVENQX1NUUkVBTSAgICAgICA1NQorI2RlZmluZSAgICAgICAgIFhUSV9UQ1BfU1RSRUFNX1JFU1BPTlNFIDU2CisjZGVmaW5lICAgICAgICAgWFRJX1RDUF9TVFJFQU1fUkVTVUxUUyAgNTcKKworI2RlZmluZSAgICAgICAgIERPX1hUSV9UQ1BfUlIgICAgICAgICAgIDU4CisjZGVmaW5lICAgICAgICAgWFRJX1RDUF9SUl9SRVNQT05TRSAgICAgNTkKKyNkZWZpbmUgICAgICAgICBYVElfVENQX1JSX1JFU1VMVFMgICAgICA2MAorCisjZGVmaW5lICAgICAgICAgRE9fWFRJX1VEUF9TVFJFQU0gICAgICAgNjEKKyNkZWZpbmUgICAgICAgICBYVElfVURQX1NUUkVBTV9SRVNQT05TRSA2MgorI2RlZmluZSAgICAgICAgIFhUSV9VRFBfU1RSRUFNX1JFU1VMVFMgIDYzCisKKyNkZWZpbmUgICAgICAgICBET19YVElfVURQX1JSICAgICAgICAgICA2NAorI2RlZmluZSAgICAgICAgIFhUSV9VRFBfUlJfUkVTUE9OU0UgICAgIDY1CisjZGVmaW5lICAgICAgICAgWFRJX1VEUF9SUl9SRVNVTFRTICAgICAgNjYKKworI2RlZmluZSAgICAgICAgIERPX1hUSV9UQ1BfQ1JSICAgICAgICAgIDY3CisjZGVmaW5lICAgICAgICAgWFRJX1RDUF9DUlJfUkVTUE9OU0UgICAgNjgKKyNkZWZpbmUgICAgICAgICBYVElfVENQX0NSUl9SRVNVTFRTICAgICA2OQorCisjZGVmaW5lICAgICAgICAgRE9fVENQX1RSUiAgICAgICAgICAgICAgNzAKKyNkZWZpbmUgICAgICAgICBUQ1BfVFJSX1JFU1BPTlNFICAgICAgICA3MQorI2RlZmluZSAgICAgICAgIFRDUF9UUlJfUkVTVUxUUyAgICAgICAgIDcyCisKKyNkZWZpbmUgICAgICAgICBET19UQ1BfTkJSUiAgICAgICAgICAgICA3MworI2RlZmluZSAgICAgICAgIFRDUF9OQlJSX1JFU1BPTlNFICAgICAgIDc0CisjZGVmaW5lICAgICAgICAgVENQX05CUlJfUkVTVUxUUyAgICAgICAgNzUKKworI2RlZmluZSAgICAgICAgIERPX1RDUElQVjZfU1RSRUFNICAgICAgICAgICA3NgorI2RlZmluZSAgICAgICAgIFRDUElQVjZfU1RSRUFNX1JFU1BPTlNFICAgICA3NworI2RlZmluZSAgICAgICAgIFRDUElQVjZfU1RSRUFNX1JFU1VMVFMgICAgICA3OAorCisjZGVmaW5lICAgICAgICAgRE9fVENQSVBWNl9SUiAgICAgICAgICAgICAgIDc5CisjZGVmaW5lICAgICAgICAgVENQSVBWNl9SUl9SRVNQT05TRSAgICAgICAgIDgwCisjZGVmaW5lICAgICAgICAgVENQSVBWNl9SUl9SRVNVTFRTICAgICAgICAgIDgxCisKKyNkZWZpbmUgICAgICAgICBET19VRFBJUFY2X1NUUkVBTSAgICAgICAgICAgODIKKyNkZWZpbmUgICAgICAgICBVRFBJUFY2X1NUUkVBTV9SRVNQT05TRSAgICAgODMKKyNkZWZpbmUgICAgICAgICBVRFBJUFY2X1NUUkVBTV9SRVNVTFRTICAgICAgODQKKworI2RlZmluZSAgICAgICAgIERPX1VEUElQVjZfUlIgICAgICAgICAgICAgICA4NQorI2RlZmluZSAgICAgICAgIFVEUElQVjZfUlJfUkVTUE9OU0UgICAgICAgICA4NgorI2RlZmluZSAgICAgICAgIFVEUElQVjZfUlJfUkVTVUxUUyAgICAgICAgICA4NworCisjZGVmaW5lICAgICAgICAgRE9fVENQSVBWNl9DUlIgICAgICAgICAgICAgIDg4CisjZGVmaW5lICAgICAgICAgVENQSVBWNl9DUlJfUkVTUE9OU0UgICAgICAgIDg5CisjZGVmaW5lICAgICAgICAgVENQSVBWNl9DUlJfUkVTVUxUUyAgICAgICAgIDkwCisKKyNkZWZpbmUgICAgICAgICBET19UQ1BJUFY2X1RSUiAgICAgICAgICAgICAgOTEKKyNkZWZpbmUgICAgICAgICBUQ1BJUFY2X1RSUl9SRVNQT05TRSAgICAgICAgOTIKKyNkZWZpbmUgICAgICAgICBUQ1BJUFY2X1RSUl9SRVNVTFRTICAgICAgICAgOTMKKworI2RlZmluZSAgICAgICAgIERPX1RDUF9NQUVSVFMgICAgICAgICAgICAgICA5NAorI2RlZmluZSAgICAgICAgIFRDUF9NQUVSVFNfUkVTUE9OU0UgICAgICAgICA5NQorI2RlZmluZSAgICAgICAgIFRDUF9NQUVSVFNfUkVTVUxUUyAgICAgICAgICA5NgorCisjZGVmaW5lICAgICAgICAgRE9fT01OSSAgICAgICAgICAgICAgICAgICAgIDk3CisjZGVmaW5lICAgICAgICAgT01OSV9SRVNQT05TRSAgICAgICAgICAgICAgIDk4CisjZGVmaW5lICAgICAgICAgT01OSV9SRVNVTFRTICAgICAgICAgICAgICAgIDk5CisKKyNkZWZpbmUgICAgICAgICBET19MV1BTVFJfU1RSRUFNICAgICAgICAgICAxMDAKKyNkZWZpbmUgICAgICAgICBMV1BTVFJfU1RSRUFNX1JFU1BPTlNFICAgICAxMTAKKyNkZWZpbmUgICAgICAgICBMV1BTVFJfU1RSRUFNX1JFU1VMVFMgICAgICAxMjAKKworI2RlZmluZSAgICAgICAgIERPX0xXUFNUUl9SUiAgICAgICAgICAgICAgIDEzMAorI2RlZmluZSAgICAgICAgIExXUFNUUl9SUl9SRVNQT05TRSAgICAgICAgIDE0MAorI2RlZmluZSAgICAgICAgIExXUFNUUl9SUl9SRVNVTFRTICAgICAgICAgIDE1MAorCisjZGVmaW5lICAgICAgICAgRE9fTFdQREdfU1RSRUFNICAgICAgICAgICAgMTYwCisjZGVmaW5lICAgICAgICAgTFdQREdfU1RSRUFNX1JFU1BPTlNFICAgICAgMTcwCisjZGVmaW5lICAgICAgICAgTFdQREdfU1RSRUFNX1JFU1VMVFMgICAgICAgMTgwCisKKyNkZWZpbmUgICAgICAgICBET19MV1BER19SUiAgICAgICAgICAgICAgICAxOTAKKyNkZWZpbmUgICAgICAgICBMV1BER19SUl9SRVNQT05TRSAgICAgICAgICAyMDAKKyNkZWZpbmUgICAgICAgICBMV1BER19SUl9SRVNVTFRTICAgICAgICAgICAyMTAKKworI2RlZmluZSAgICAgICAgIERPX1RDUF9DQyAgICAgICAgICAgICAgICAgIDMwMAorI2RlZmluZSAgICAgICAgIFRDUF9DQ19SRVNQT05TRSAgICAgICAgICAgIDMwMQorI2RlZmluZSAgICAgICAgIFRDUF9DQ19SRVNVTFRTICAgICAgICAgICAgIDMwMgorCisvKiBUaGUgRE5TX1JSIHRlc3QgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIG5ldHBlcmYgYnV0IHdlIGxlYXZlIHRoZXNlCisgICBoZXJlIGZvciBoaXN0b3JpY2FsIHB1cnBvc2VzLiAgVGhvc2Ugd2FudGluZyB0byBkbyBETlNfUlIgdGVzdHMKKyAgIHNob3VsZCB1c2UgbmV0cGVyZjQgaW5zdGVhZC4gKi8KKyNkZWZpbmUgICAgICAgICBET19ETlNfUlIgICAgICAgICAgICAgICAgICA0MDAKKyNkZWZpbmUgICAgICAgICBETlNfUlJfUkVTUE9OU0UgICAgICAgICAgICA0MDEKKyNkZWZpbmUgICAgICAgICBETlNfUlJfUkVTVUxUUyAgICAgICAgICAgICA0MDIKKworI2RlZmluZSAgICAgICAgIERPX1NDVFBfU1RSRUFNICAgICAgICAgICAgIDUwMAorI2RlZmluZSAgICAgICAgIFNDVFBfU1RSRUFNX1JFU1BPTlNFICAgICAgIDUwMQorI2RlZmluZSAgICAgICAgIFNDVFBfU1RSRUFNX1JFU1VMVCAgICAgICAgIDUwMgorCisjZGVmaW5lICAgICAgICAgRE9fU0NUUF9TVFJFQU1fTUFOWSAgICAgICAgNTEwCisjZGVmaW5lICAgICAgICAgU0NUUF9TVFJFQU1fTUFOWV9SRVNQT05TRSAgNTExCisjZGVmaW5lICAgICAgICAgU0NUUF9TVFJFQU1fTUFOWV9SRVNVTFQgICAgNTEyCisKKyNkZWZpbmUgICAgICAgICBET19TQ1RQX1JSICAgICAgICAgICAgICAgICA1MjAKKyNkZWZpbmUgICAgICAgICBTQ1RQX1JSX1JFU1BPTlNFICAgICAgICAgICA1MjEKKyNkZWZpbmUgICAgICAgICBTQ1RQX1JSX1JFU1VMVCAgICAgICAgICAgICA1MDIKKworI2RlZmluZSAgICAgICAgIERPX1NDVFBfUlJfTUFOWSAgICAgICAgICAgIDUzMAorI2RlZmluZSAgICAgICAgIFNDVFBfUlJfTUFOWV9SRVNQT05TRSAgICAgIDUzMQorI2RlZmluZSAgICAgICAgIFNDVFBfUlJfTUFOWV9SRVNVTFQgICAgICAgIDUzMgorCisjZGVmaW5lICAgICAgICAgRE9fU0RQX1NUUkVBTSAgICAgICAgICAgICAgNTQwCisjZGVmaW5lICAgICAgICAgU0RQX1NUUkVBTV9SRVNQT05TRSAgICAgICAgNTQxCisjZGVmaW5lICAgICAgICAgU0RQX1NUUkVBTV9SRVNVTFRTICAgICAgICAgNTQyCisKKyNkZWZpbmUgICAgICAgICBET19TRFBfUlIgICAgICAgICAgICAgICAgICA1NDMKKyNkZWZpbmUgICAgICAgICBTRFBfUlJfUkVTUE9OU0UgICAgICAgICAgICA1NDQKKyNkZWZpbmUgICAgICAgICBTRFBfUlJfUkVTVUxUUyAgICAgICAgICAgICA1NDUKKworI2RlZmluZSAgICAgICAgIERPX1NEUF9NQUVSVFMgICAgICAgICAgICAgIDU0NgorI2RlZmluZSAgICAgICAgIFNEUF9NQUVSVFNfUkVTUE9OU0UgICAgICAgIDU0NworI2RlZmluZSAgICAgICAgIFNEUF9NQUVSVFNfUkVTVUxUUyAgICAgICAgIDU0OAorCisjZGVmaW5lICAgICAgICAgRE9fU0RQX0NSUiAgICAgICAgICAgICAgICAgNTQ5CisjZGVmaW5lICAgICAgICAgU0RQX0NSUl9SRVNQT05TRSAgICAgICAgICAgNTUwCisjZGVmaW5lICAgICAgICAgU0RQX0NSUl9SRVNVTFRTICAgICAgICAgICAgNTUxCisKKyNkZWZpbmUgICAgICAgICBET19TRFBfQ0MgICAgICAgICAgICAgICAgICA1NTIKKyNkZWZpbmUgICAgICAgICBTRFBfQ0NfUkVTUE9OU0UgICAgICAgICAgICA1NTMKKyNkZWZpbmUgICAgICAgICBTRFBfQ0NfUkVTVUxUUyAgICAgICAgICAgICA1NTQKKworI2RlZmluZSAgICAgICAgIERPX1NZU0lORk8gICAgICAgICAgICAgICAgIDYwMAorI2RlZmluZSAgICAgICAgIFNZU0lORk9fUkVTUE9OU0UgICAgICAgICAgIDYwMQorCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorCitlbnVtIHNvY2tfYnVmZmVyeworICBTRU5EX0JVRkZFUiwKKyAgUkVDVl9CVUZGRVIKK307CisKKy8qIHNvbWUgZGVmaW5lcyBmb3Igc2VjdXJpdHkgdHlwZXMsIHBlcmhhcHMgdGhlc2Ugd291bGQgYmUgYmV0dGVyCisgICBlbHNld2hlcmUgYnV0IGZvciBub3cgaGVyZSB0aGV5IGFyZSAqLworCisjZGVmaW5lIE5TRUNfVU5LTk9XTiAgLTEKKyNkZWZpbmUgTlNFQ19ESVNBQkxFRCAwCisjZGVmaW5lIE5TRUNfUEVSTUlTU0lWRSAgMQorI2RlZmluZSBOU0VDX0VORk9SQ0lORyAyCisKKyNkZWZpbmUgTlNFQ19UWVBFX1VOS05PV04gLTEKKyNkZWZpbmUgTlNFQ19UWVBFX1NFTElOVVggMQorCisjZGVmaW5lIE5FVEZXX1VOS05PV04gLTEKKyNkZWZpbmUgTkVURldfSVBUQUJMRVMgMQorCisgLyogc29tZSBvZiB0aGUgZmllbGRzIGluIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGdvaW5nIHRvIGJlIGRvdWJsZXMgYW5kICovCisgLyogc3VjaC4gc28sIHdlIHByb2JhYmx5IHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhleSB3aWxsIHN0YXJ0IG9uICovCisgLyogImRvdWJsZSIgYm91bmRhcmllcy4gdGhpcyB3aWxsIGJyZWFrIGNvbXBhdGFiaWxpdHkgdG8gcHJlLTIuMSAqLworIC8qIHJlbGVhc2VzLCBidXQgdGhlbiwgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgaGFzIG5ldmVyIGJlZW4gYSAqLworIC8qIHN0YXRlZCBnb2FsIG9mIG5ldHBlcmYuIHJhaiAxMS85NSAqLworCit1bmlvbiBuZXRwZXJmX3JlcXVlc3Rfc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICBpbnQgICAgIHJlcXVlc3RfdHlwZTsKKyAgICBpbnQgICAgIGR1bW15OworICAgIGludCAgICAgdGVzdF9zcGVjaWZpY19kYXRhW01BWFNQRUNEQVRBXTsKKyAgfSBjb250ZW50OworICBkb3VibGUgZHVtbXk7Cit9OworCit1bmlvbiBuZXRwZXJmX3Jlc3BvbnNlX3N0cnVjdCB7CisgIHN0cnVjdCB7CisgICAgaW50IHJlc3BvbnNlX3R5cGU7CisgICAgaW50IHNlcnZfZXJybm87CisgICAgaW50IHRlc3Rfc3BlY2lmaWNfZGF0YVtNQVhTUEVDREFUQV07CisgIH0gY29udGVudDsKKyAgZG91YmxlIGR1bW15OworfTsKKworc3RydWN0IHJpbmdfZWx0IHsKKyAgc3RydWN0IHJpbmdfZWx0ICpuZXh0OyAgLyogbmV4dCBlbGVtZW50IGluIHRoZSByaW5nICovCisgIGNoYXIgKmJ1ZmZlcl9iYXNlOyAgICAgIC8qIGluIGNhc2Ugd2UgaGF2ZSB0byBmcmVlIGl0IGF0IHNvbWVwb2ludCAqLworICBjaGFyICpidWZmZXJfcHRyOyAgICAgICAvKiB0aGUgYWxpZ25lZCBhbmQgb2Zmc2V0IHBvaW50ZXIgKi8KK307CisKKy8qICsqKyBTQUYgIFNvcnJ5IGFib3V0IHRoZSBoYWNrcyB3aXRoIGVycm5vOyBOVCBtYWRlIG1lIGRvIGl0IDooCisKKyBXaW5OVCBkb2VzIGRlZmluZSBhbiBlcnJuby4KKyBJdCBpcyBtb3N0bHkgYSBsZWdhY3kgZnJvbSB0aGUgWEVOSVggZGF5cy4KKworIERlcGVuZGluZyB1cG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBDIHJ1biB0aW1lIHRoYXQgaXMgbGlua2VkIGluLCBpdCBpcworIGVpdGhlciBhIHNpbXBsZSB2YXJpYWJsZSAobGlrZSBVTklYIGNvZGUgZXhwZWN0cyksIGJ1dCBtb3JlIGxpa2VseSBpdAorIGlzIHRoZSBhZGRyZXNzIG9mIGEgcHJvY2VkdXJlIHRvIHJldHVybiB0aGUgZXJyb3IgbnVtYmVyLiAgU28gYW55CisgY29kZSB0aGF0IHNldHMgZXJybm8gaXMgbGlrZWx5IHRvIGJlIG92ZXJ3cml0aW5nIHRoZSBhZGRyZXNzIG9mIHRoaXMKKyBwcm9jZWR1cmUuICBXb3JzZSwgb25seSBhIHRpbnkgZnJhY3Rpb24gb2YgTlQncyBlcnJvcnMgZ2V0IHNldAorIHRocm91Z2ggZXJybm8uCisKKyBTbyBJIGhhdmUgY2hhbmdlZCB0aGUgbmV0cGVyZiBjb2RlIHRvIHVzZSBhIGRlZmluZSBTZXRfZXJybm8gd2hlbgorIHRoYXQgaXMgaXQncyBpbnRlbnQuICBPbiBub24td2luZG93cyBwbGF0Zm9ybXMgdGhpcyBpcyBqdXN0IGFuCisgYXNzaWdubWVudCB0byBlcnJuby4gIEJ1dCBvbiBOVCB0aGlzIGNhbGxzIFNldExhc3RFcnJvci4KKworIEkgYWxzbyBkZWZpbmUgZXJybm8gKG5vdyBvbmx5IHVzZWQgb24gcmlnaHQgc2lkZSBvZiBhc3NpZ25tZW50cykKKyBvbiBOVCB0byBiZSBHZXRMYXN0RXJyb3IuCisKKyBTaW1pbGFybHksIHBlcnJvciBpcyBkZWZpbmVkIG9uIE5ULCBidXQgaXQgb25seSBhY2Nlc3NlcyB0aGUgc2FtZQorIFhFTklYIGVycm9ycyB0aGF0IGVycm5vIGNvdmVycy4gIFNvIG9uIE5UIHRoaXMgaXMgcmVkZWZpbmVkIHRvIGJlCisgUGVycm9yIGFuZCBpdCBleHBhbmRzIGFsbCBHZXRMYXN0RXJyb3IgdGV4dHMuICovCisKKworI2lmZGVmIFdJTjMyCisvKiBJTlZBTElEX1NPQ0tFVCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSA9PSAodW5zaWduZWQgaW50KSh+MCkgKi8KKy8qIFNPQ0tFVF9FUlJPUiA9PSAtMSAqLworI2RlZmluZSBFTk9UU09DSyBXU0FFTk9UU09DSworI2RlZmluZSBFSU5UUiAgICBXU0FFSU5UUgorI2RlZmluZSBFTk9CVUZTICBXU0FFTk9CVUZTCisjZGVmaW5lIEVXT1VMREJMT0NLICAgIFdTQUVXT1VMREJMT0NLCisjZGVmaW5lIEVBRk5PU1VQUE9SVCAgV1NBRUFGTk9TVVBQT1JUCisvKiBJIGRvbid0IHVzZSBhIEMrKyBzdHlsZSBvZiBjb21tZW50IGJlY2F1c2UgaXQgdXBzZXRzIHNvbWUgQworICAgY29tcGlsZXJzLCBwb3NzaWJseSBldmVuIHdoZW4gaXQgaXMgaW5zaWRlIGFuIGlmZGVmIFdJTjMyLi4uICovCisvKiBmcm9tIHB1YmxpY1xzZGtcaW5jXGNydFxlcnJuby5oICovCisjZGVmaW5lIEVOT1NQQyAgICAgICAgICAyOAorCisjaWZkZWYgZXJybm8KKy8qIGRlbGV0ZSB0aGUgb25lIGZyb20gc3RkbGliLmggICovCisvKiNkZWZpbmUgZXJybm8gICAgICAgKCpfZXJybm8oKSkgKi8KKyN1bmRlZiBlcnJubworI2VuZGlmCisjZGVmaW5lIGVycm5vIEdldExhc3RFcnJvcigpCisjZGVmaW5lIFNldF9lcnJubyhudW0pIFNldExhc3RFcnJvcigobnVtKSkKKworI2RlZmluZSBwZXJyb3IodGV4dCkgUHJpbnRXaW4zMkVycm9yKHN0ZGVyciwgKHRleHQpKQorI2RlZmluZSBQcmludF9lcnJubyhzdHJlYW0sIHRleHQpIFByaW50V2luMzJFcnJvcigoc3RyZWFtKSwgKHRleHQpKQorCitleHRlcm4gdm9pZCBQcmludFdpbjMyRXJyb3IoRklMRSAqc3RyZWFtLCBMUFNUUiB0ZXh0KTsKKworI2lmICFkZWZpbmVkKE5UX1BFUkYpICYmICFkZWZpbmVkKFVTRV9MT09QRVIpCisjZGVmaW5lIE5UX1BFUkYKKyNlbmRpZgorI2Vsc2UKKy8qIFJlYWxseSBzaG91bGRuJ3QgdXNlIG1hbmlmZXN0IGNvbnN0YW50cyEgKi8KKy8qKyorU0FGIFRoZXJlIGFyZSBvdGhlciBleGFtcGxlcyBvZiAiPT0gLTEiIGFuZCAiPDAiIHRoYXQgcHJvYmFibHkgKi8KKy8qKyorU0FGIHNob3VsZCBiZSBjbGVhbmVkIHVwIGFzIHdlbGwuICovCisjZGVmaW5lIElOVkFMSURfU09DS0VUIC0xCisjZGVmaW5lIFNPQ0tFVF9FUlJPUiAtMQorCisjZGVmaW5lIFNPQ0tFVCBpbnQKKyNkZWZpbmUgU2V0X2Vycm5vKG51bSkgZXJybm8gPSAobnVtKQorCisjZGVmaW5lIFByaW50X2Vycm5vKHN0cmVhbSwgdGV4dCkgZnByaW50Zigoc3RyZWFtKSwgIiVzICBlcnJubyAlZFxuIiwgKHRleHQpLCBlcnJubykKKyNlbmRpZgorCisvKiBSb2JpbiAmIFJpY2sncyBrbHVkZ2UgdG8gdHJ5IHRvIGhhdmUgYSB0aW1lciBzaWduYWwgRUlOVFIgYnkgY2xvc2luZyAgKi8KKy8qIHRoZSBzb2NrZXQgZnJvbSBhbm90aGVyIHRocmVhZCBjYW4gYWxzbyByZXR1cm4gc2V2ZXJhbCBvdGhlciBlcnJvcnMuICovCisvKiBMZXQncyBkZWZpbmUgYSBtYWNybyB0byBoaWRlIGFsbCBvZiB0aGlzLiAqLworCisjaWZuZGVmIFdJTjMyCisjZGVmaW5lIFNPQ0tFVF9FSU5UUihyZXR1cm5fdmFsdWUpIChlcnJubyA9PSBFSU5UUikKKyNkZWZpbmUgU09DS0VUX0VBRERSSU5VU0UocmV0dXJuX3ZhbHVlKSAoZXJybm8gPT0gRUFERFJJTlVTRSkKKyNkZWZpbmUgU09DS0VUX0VBRERSTk9UQVZBSUwocmV0dXJuX3ZhbHVlKSAoZXJybm8gPT0gRUFERFJOT1RBVkFJTCkKKworI2Vsc2UKKworLyogbm90IHF1aXRlIHN1cmUgSSBsaWtlIHRoZSBleHRyYSBjYXNlcyBmb3IgV0lOMzIgYnV0IHRoYXQgaXMgd2hhdCBteQorICAgV0lOMzIgZXhwZXJ0IHN1Z2VzdGVkLiAgSSdtIG5vdCBzdXJlIHdoYXQgV1NBJ3MgdG8gcHV0IGZvcgorICAgRUFERFJJTlVTRSAqLworCisjZGVmaW5lIFNPQ0tFVF9FSU5UUihyZXR1cm5fdmFsdWUpIFwKKwkJKCgocmV0dXJuX3ZhbHVlKSA9PSBTT0NLRVRfRVJST1IpICYmIFwKKwkgICAgICgoZXJybm8gPT0gRUlOVFIpIHx8IFwKKwkgICAgICAoZXJybm8gPT0gV1NBRUNPTk5BQk9SVEVEKSB8fCBcCisJICAgICAgKGVycm5vID09IFdTQUVDT05OUkVTRVQpIHx8IFwKKwkgICAgICAoZXJybm8gPT0gRU5PVFNPQ0spICkpCisjZGVmaW5lIFNPQ0tFVF9FQUREUklOVVNFKHJldHVybl92YWx1ZSkgXAorCQkoKChyZXR1cm5fdmFsdWUpID09IFNPQ0tFVF9FUlJPUikgJiYgXAorCSAgICAgKChlcnJubyA9PSBXU0FFQUREUklOVVNFKSApKQorI2RlZmluZSBTT0NLRVRfRUFERFJOT1RBVkFJTChyZXR1cm5fdmFsdWUpIFwKKwkJKCgocmV0dXJuX3ZhbHVlKSA9PSBTT0NLRVRfRVJST1IpICYmIFwKKwkgICAgICgoZXJybm8gPT0gV1NBRUFERFJOT1RBVkFJTCkgKSkKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRU5ERklMRQorCitzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQgeworICBzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQgKm5leHQ7IC8qIG5leHQgZWxlbWVudCBpbiB0aGUgcmluZyAqLworICBpbnQgZmlsZGVzOyAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIHNvdXJjZQorCQkJCSAgICAgZmlsZSAqLyAKKyAgb2ZmX3Qgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAvKiB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZgorCQkJCSAgICAgdGhlIGZpbGUgZm9yIHRoaXMgc2VuZCAqLworICBzaXplX3QgbGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAtCisJCQkJICAgICB0aGlzIGlzIHJlZHVuZGFudCB3aXRoIHRoZQorCQkJCSAgICAgc2VuZF9zaXplIHZhcmlhYmxlIGJ1dCBJIGRlY2lkZWQKKwkJCQkgICAgIHRvIGluY2x1ZGUgaXQgYW55d2F5ICovCisgIHN0cnVjdCBpb3ZlYyAqaGR0cmw7ICAgICAgICAgICAgLyogYSBwb2ludGVyIHRvIGEgaGVhZGVyL3RyYWlsZXIKKwkJCQkgICAgIHRoYXQgd2UgZG8gbm90IGluaXRpYWxseSB1c2UgYW5kCisJCQkJICAgICBzbyBzaG91bGQgYmUgc2V0IHRvIE5VTEwgd2hlbiB0aGUgCisJCQkJICAgICByaW5nIGlzIHNldHVwLiAqLworICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBmbGFncyB0byBwYXNzIHRvIHNlbmRmaWxlKCkgLSAKKwkJCQkgICAgIHByZXNlbnRseSB1bnVzZWQgYW5kIHNob3VsZCBiZQorCQkJCSAgICAgc2V0IHRvIHplcm8gd2hlbiB0aGUgcmluZyBpcworCQkJCSAgICAgc2V0dXAuICovCit9OworCisjZW5kaWYgLyogSEFWRV9TRU5ERklMRSAqLworCisgLyogdGhlIGRpZmVyZW50IGNvZGVzIHRvIGRlbm90ZSB0aGUgdHlwZSBvZiBDUFUgdXRpbGl6YXRpb24gKi8KKyAvKiBtZXRob2RzIHVzZWQgKi8KKyNkZWZpbmUgQ1BVX1VOS05PV04gICAgIDAKKyNkZWZpbmUgSFBfSURMRV9DT1VOVEVSIDEKKyNkZWZpbmUgUFNUQVQgICAgICAgICAgIDIKKyNkZWZpbmUgVElNRVMgICAgICAgICAgIDMKKyNkZWZpbmUgTE9PUEVSICAgICAgICAgIDQKKyNkZWZpbmUgR0VUUlVTQUdFICAgICAgIDUKKyNkZWZpbmUgTlRfTUVUSE9EICAgICAgIDYKKyNkZWZpbmUgS1NUQVQgICAgICAgICAgIDcKKyNkZWZpbmUgUFJPQ19TVEFUICAgICAgIDgKKyNkZWZpbmUgU1lTQ1RMICAgICAgICAgIDkKKyNkZWZpbmUgUEVSRlNUQVQgICAgICAgMTAKKyNkZWZpbmUgS1NUQVRfMTAgICAgICAgMTEKKyNkZWZpbmUgT1NYICAgICAgICAgICAgMTIKKworI2RlZmluZSBCQURDSCAoJz8nKQorCisjaWZuZGVmIE5FVExJQgorI2lmZGVmIFdJTjMyCisjaWZuZGVmIF9HRVRPUFRfCisjZGVmaW5lIF9HRVRPUFRfCisKK2ludCBnZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjaGFyICpvcHRzdHJpbmcpOworCitleHRlcm4gY2hhciAqb3B0YXJnOwkJLyogcmV0dXJuZWQgYXJnIHRvIGdvIHdpdGggdGhpcyBvcHRpb24gKi8KK2V4dGVybiBpbnQgb3B0aW5kOwkJLyogaW5kZXggdG8gbmV4dCBhcmd2IGVsZW1lbnQgdG8gcHJvY2VzcyAqLworZXh0ZXJuIGludCBvcHRlcnI7CQkvKiBzaG91bGQgZXJyb3IgbWVzc2FnZXMgYmUgcHJpbnRlZD8gKi8KK2V4dGVybiBpbnQgb3B0b3B0OwkJLyogKi8KKworI2VuZGlmIC8qIF9HRVRPUFRfICovCisKK2V4dGVybiAgU09DS0VUICAgICB3aW5fa2x1ZGdlX3NvY2tldCwgd2luX2tsdWRnZV9zb2NrZXQyOworI2VuZGlmIC8qIFdJTjMyICovCisKK2V4dGVybiAgaW50ICAgbG9jYWxfcHJvY19hZmZpbml0eSwgcmVtb3RlX3Byb2NfYWZmaW5pdHk7CisKKy8qIHRoZXNlIGFyZSB0byBhbGxvdyBuZXRwZXJmIHRvIGJlIHJ1biBlYXNpbHkgdGhyb3VnaCB0aG9zZSBldmlsLAorICAgZW5kLXRvLWVuZCBicmVha2luZyB0aGluZ3Mga25vd24gYXMgZmlyZXdhbGxzICovCitleHRlcm4gY2hhciBsb2NhbF9kYXRhX3BvcnRbMTBdOworZXh0ZXJuIGNoYXIgcmVtb3RlX2RhdGFfcG9ydFsxMF07CisKK2V4dGVybiBjaGFyICpsb2NhbF9kYXRhX2FkZHJlc3M7CitleHRlcm4gY2hhciAqcmVtb3RlX2RhdGFfYWRkcmVzczsKKworZXh0ZXJuIGNoYXIgKmxvY2FsX3N5c25hbWUsICpyZW1vdGVfc3lzbmFtZTsKK2V4dGVybiBjaGFyICpsb2NhbF9yZWxlYXNlLCAqcmVtb3RlX3JlbGVhc2U7CitleHRlcm4gY2hhciAqbG9jYWxfdmVyc2lvbiwgKnJlbW90ZV92ZXJzaW9uOworZXh0ZXJuIGNoYXIgKmxvY2FsX21hY2hpbmUsICpyZW1vdGVfbWFjaGluZTsKKworZXh0ZXJuIGludCBsb2NhbF9kYXRhX2ZhbWlseTsKK2V4dGVybiBpbnQgcmVtb3RlX2RhdGFfZmFtaWx5OworCitleHRlcm4gIHVuaW9uIG5ldHBlcmZfcmVxdWVzdF9zdHJ1Y3QgbmV0cGVyZl9yZXF1ZXN0OworZXh0ZXJuICB1bmlvbiBuZXRwZXJmX3Jlc3BvbnNlX3N0cnVjdCBuZXRwZXJmX3Jlc3BvbnNlOworCitleHRlcm4gIGZsb2F0ICAgIGxpYl9sb2NhbF9jcHVfdXRpbDsKK2V4dGVybiAgZmxvYXQgICAgbGliX2VsYXBzZWQ7CitleHRlcm4gIGZsb2F0ICAgIGxpYl9sb2NhbF9tYXhyYXRlOworZXh0ZXJuICBkb3VibGUgICBsaWJfbG9jYWxfcGVha19jcHVfdXRpbDsKK2V4dGVybiAgaW50ICAgICAgbGliX2xvY2FsX3BlYWtfY3B1X2lkOworZXh0ZXJuICBkb3VibGUgICBsaWJfcmVtb3RlX3BlYWtfY3B1X3V0aWw7CitleHRlcm4gIGludCAgICAgIGxpYl9yZW1vdGVfcGVha19jcHVfaWQ7CisKK2V4dGVybiAgY2hhciAgICBsaWJmbXQ7CisKK2V4dGVybiAgaW50ICAgICBjcHVfbWV0aG9kOworZXh0ZXJuICBpbnQgICAgIGxpYl9udW1fbG9jX2NwdXM7CitleHRlcm4gIGludCAgICAgbGliX251bV9yZW1fY3B1czsKK2V4dGVybiAgU09DS0VUICBzZXJ2ZXJfc29jazsKK2V4dGVybiAgaW50ICAgICB0aW1lc191cDsKK2V4dGVybiAgRklMRSAgICAqd2hlcmU7CitleHRlcm4gIGludCAgICAgbG9vcHNfcGVyX21zZWM7CitleHRlcm4gIGZsb2F0ICAgbGliX2xvY2FsX3Blcl9jcHVfdXRpbFtdOworICAKK2V4dGVybiAgdm9pZCAgICBuZXRsaWJfaW5pdCgpOworZXh0ZXJuICBpbnQgICAgIG5ldGxpYl9nZXRfcGFnZV9zaXplKCk7CitleHRlcm4gIHZvaWQgICAgaW5zdGFsbF9zaWduYWxfY2F0Y2hlcnMoKTsKK2V4dGVybiAgdm9pZCAgICBlc3RhYmxpc2hfY29udHJvbChjaGFyIGhvc3RuYW1lW10sIAorCQkJCSAgY2hhciBwb3J0W10sIAorCQkJCSAgaW50IGFmLAorCQkJCSAgY2hhciBsb2NhbF9ob3N0bmFtZVtdLAorCQkJCSAgY2hhciBsb2NhbF9wb3J0W10sCisJCQkJICBpbnQgbG9jYWxfYWYpOworZXh0ZXJuICB2b2lkICAgIHNodXRkb3duX2NvbnRyb2woKTsKK2V4dGVybiAgdm9pZCAgICBpbml0X3N0YXQoKTsKK2V4dGVybiAgdm9pZCAgICBzZW5kX3JlcXVlc3QoKTsKK2V4dGVybiAgdm9pZCAgICByZWN2X3Jlc3BvbnNlKCk7CitleHRlcm4gIHZvaWQgICAgc2VuZF9yZXNwb25zZSgpOworZXh0ZXJuICB2b2lkICAgIHJlY3ZfcmVxdWVzdCgpOworZXh0ZXJuICB2b2lkICAgIHNlbmRfcmVxdWVzdF9uKGludCBuKTsgIC8qIGNvbnZlcnQgb25seSB0aGUgZmlyc3QgTiBpbnRzICovCitleHRlcm4gIHZvaWQgICAgcmVjdl9yZXNwb25zZV9uKGludCBuKTsgLyogb2YgdGhlIHRlc3Qtc3BlY2lmaWMgZGF0YSB2aWEgKi8KK2V4dGVybiAgdm9pZCAgICBzZW5kX3Jlc3BvbnNlX24oaW50IG4pOyAvKiBodG9ubC9udG9ubCBhcyByZXF1aXJlZCAqLworZXh0ZXJuICB2b2lkICAgIHJlY3ZfcmVxdWVzdF9uKGludCBuKTsKK2V4dGVybiAgdm9pZCAgICBkdW1wX3JlcXVlc3QoKTsKK2V4dGVybiAgdm9pZCAgICBkdW1wX2FkZHJpbmZvKEZJTEUgKmR1bXBsb2MsIHN0cnVjdCBhZGRyaW5mbyAqaW5mbywKKwkJCSAgICAgIGNoYXIgKmhvc3QsIGNoYXIgKnBvcnQsIGludCBmYW1pbHkpOworZXh0ZXJuICB2b2lkICAgIHN0YXJ0X3RpbWVyKGludCB0aW1lKTsKK2V4dGVybiAgdm9pZCAgICBzdG9wX3RpbWVyKCk7CitleHRlcm4gIHZvaWQgICAgY3B1X3N0YXJ0KGludCBtZWFzdXJlX2NwdSk7CitleHRlcm4gIHZvaWQgICAgY3B1X3N0b3AoaW50IG1lYXN1cmVfY3B1LCBmbG9hdCAqZWxhcHNlZCk7CitleHRlcm4gIHZvaWQJY2FsY3VsYXRlX2NvbmZpZGVuY2UoaW50IGNvbmZpZGVuY2VfaXRlcmF0aW9ucywKKwkJICAgICBmbG9hdCB0aW1lLAorCQkgICAgIGRvdWJsZSByZXN1bHQsCisJCSAgICAgZmxvYXQgbG9jX2NwdSwKKwkJICAgICBmbG9hdCByZW1fY3B1LAorCQkgICAgIGZsb2F0IGxvY19zZCwKKwkJICAgICBmbG9hdCByZW1fc2QpOworZXh0ZXJuICB2b2lkCXJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoZmxvYXQgKmVsYXBzZWRfdGltZSwKKwkJCSAgZG91YmxlICp0aHJ1cHV0LAorCQkJICBmbG9hdCAqbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJICBmbG9hdCAqcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgZmxvYXQgKmxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJICBmbG9hdCAqcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKK2V4dGVybiAgZG91YmxlICBnZXRfcmVzdWx0X2NvbmZpZCgpOworZXh0ZXJuICBkb3VibGUgIGdldF9sb2NfY3B1X2NvbmZpZCgpOworZXh0ZXJuICBkb3VibGUgIGdldF9yZW1fY3B1X2NvbmZpZCgpOworZXh0ZXJuICB2b2lkICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworZXh0ZXJuICB2b2lkICAgIGdldF9zb2NrX2J1ZmZlcihTT0NLRVQgc2QsCisJCQkJZW51bSBzb2NrX2J1ZmZlciB3aGljaCwKKwkJCQlpbnQgKmVmZmVjdGl2ZV9zaXplcCk7CitleHRlcm4gIHZvaWQgICAgc2V0X3NvY2tfYnVmZmVyKFNPQ0tFVCBzZCwKKwkJCQllbnVtIHNvY2tfYnVmZmVyIHdoaWNoLAorCQkJCWludCByZXF1ZXN0ZWRfc2l6ZSwKKwkJCQlpbnQgKmVmZmVjdGl2ZV9zaXplcCk7CitleHRlcm4gIGNoYXIgICAqZm9ybWF0X3VuaXRzKCk7CisKK2V4dGVybiAgdm9pZCAgICBnZXRfcmVtb3RlX3N5c3RlbV9pbmZvKCk7CisKK2V4dGVybiAgY2hhciAgICAqaW5ldF9mdG9zKGludCBmYW1pbHkpOworZXh0ZXJuICBjaGFyICAgICppbmV0X3R0b3MoaW50IHR5cGUpOworZXh0ZXJuICBjaGFyICAgICppbmV0X3B0b3MoaW50IHByb3RvY29sKTsKK2V4dGVybiAgY2hhciAgICAqbnNlY19lbmFibGVkX3RvX3N0cihpbnQgZW5hYmxlZCk7CitleHRlcm4gIGNoYXIgICAgKm5zZWNfdHlwZV90b19zdHIoaW50IHR5cGUpOworZXh0ZXJuICBkb3VibGUgIG50b2hkKGRvdWJsZSBuZXRfZG91YmxlKTsKK2V4dGVybiAgZG91YmxlICBodG9uZChkb3VibGUgaG9zdF9kb3VibGUpOworZXh0ZXJuICBpbnQgICAgIGluZXRfbnRvbihpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBpbnQgY250KTsKK2V4dGVybiAgdm9pZCAgICBsaWJtYWluKCk7CitleHRlcm4gIGRvdWJsZSAgY2FsY190aHJ1cHV0KGRvdWJsZSB1bml0c19yZWNlaXZlZCk7CitleHRlcm4gIGRvdWJsZSAgY2FsY190aHJ1cHV0X2ludGVydmFsKGRvdWJsZSB1bml0c19yZWNlaXZlZCxkb3VibGUgZWxhcHNlZCk7CitleHRlcm4gIGRvdWJsZSAgY2FsY190aHJ1cHV0X29tbmkoZG91YmxlIHVuaXRzX3JlY2VpdmVkKTsKK2V4dGVybiAgZG91YmxlICBjYWxjX3RocnVwdXRfaW50ZXJ2YWxfb21uaShkb3VibGUgdW5pdHNfcmVjZWl2ZWQsZG91YmxlIGVsYXBzZWQpOworZXh0ZXJuICBmbG9hdCAgIGNhbGlicmF0ZV9sb2NhbF9jcHUoZmxvYXQgbG9jYWxfY3B1X3JhdGUpOworZXh0ZXJuICBmbG9hdCAgIGNhbGlicmF0ZV9yZW1vdGVfY3B1KCk7CitleHRlcm4gIHZvaWQgICAgYmluZF90b19zcGVjaWZpY19wcm9jZXNzb3IoaW50IHByb2Nlc3Nvcl9hZmZpbml0eSxpbnQgdXNlX2NwdV9tYXApOworZXh0ZXJuIGludCAgICAgIHNldF9ub25ibG9jayAoU09DS0VUIHNvY2spOworZXh0ZXJuIGNoYXIgICAgICpmaW5kX2VncmVzc19pbnRlcmZhY2Uoc3RydWN0IHNvY2thZGRyICpzb3VyY2UsIHN0cnVjdCBzb2NrYWRkciAqZGVzdCk7CitleHRlcm4gY2hhciAgICAgKmZpbmRfaW50ZXJmYWNlX3Nsb3QoY2hhciAqaW50ZXJmYWNlX25hbWUpOworZXh0ZXJuIHZvaWQgICAgIGZpbmRfaW50ZXJmYWNlX2lkcyhjaGFyICppbnRlcmZhY2VfbmFtZSwgaW50ICp2ZW5kb3IsIGludCAqZGV2aWNlLCBpbnQgKnN1Yl92ZW5kLCBpbnQgKnN1Yl9kZXYpOworZXh0ZXJuIHZvaWQgICAgIGZpbmRfZHJpdmVyX2luZm8oY2hhciAqaWZuYW1lLCBjaGFyICpkcml2ZXIsIGNoYXIgKnZlcnNpb24sIGNoYXIgKmZpcm13YXJlLCBjaGFyICpidXMsIGludCBsZW4pOworZXh0ZXJuIHZvaWQgICAgIGZpbmRfc3lzdGVtX2luZm8oY2hhciAqKnN5c3RlbV9tb2RlbCwgY2hhciAqKmNwdV9tb2RlbCwgaW50ICpjcHVfZnJlcXVlbmN5KTsKKworI2lmbmRlZiBXSU4zMgorCisvKiBXSU4zMiByZXF1aXJlcyB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgZmlsZSBzZXRzIHRvIHNlbGVjdCBiZQorIG5vbi1udWxsLiAgU2luY2UgbXNlY19zbGVlcCByb3V0aW5lIGlzIG9ubHkgY2FsbGVkIGJ5IG5ldHRlc3RfZGxwaSAmCisgbmV0dGVzdF91bml4LCBsZXQncyBkdWNrIHRoaXMgaXNzdWUuICovCisKK2V4dGVybiBpbnQgbXNlY19zbGVlcCggaW50IG1zZWNzICk7CisjZW5kaWYgIC8qIFdJTjMyICovCitleHRlcm4gIGZsb2F0ICAgY2FsY19jcHVfdXRpbChmbG9hdCBlbGFwc2VkX3RpbWUpOworZXh0ZXJuICBmbG9hdAljYWxjX3NlcnZpY2VfZGVtYW5kKGRvdWJsZSB1bml0c19zZW50LAorCQkJCSAgICBmbG9hdCBlbGFwc2VkX3RpbWUsCisJCQkJICAgIGZsb2F0IGNwdV91dGlsaXphdGlvbiwKKwkJCQkgICAgaW50IG51bV9jcHVzKTsKKy8qIHRoaXMgb25lIGRldGVybWluZXMgdGhlIHVuaXQgZGl2aXNvciBiYXNlZCBvbiBsaWJmbXQgKi8KK2V4dGVybiAgZmxvYXQJY2FsY19zZXJ2aWNlX2RlbWFuZF9mbXQoZG91YmxlIHVuaXRzX3NlbnQsCisJCQkJCWZsb2F0IGVsYXBzZWRfdGltZSwKKwkJCQkJZmxvYXQgY3B1X3V0aWxpemF0aW9uLAorCQkJCQlpbnQgbnVtX2NwdXMpOworI2lmIGRlZmluZWQoX19ocHV4KQorZXh0ZXJuICB2b2lkICAgIGNhdGNoZXIoaW50LCBzaWdpbmZvX3QgKix2b2lkICopOworI2Vsc2UKK2V4dGVybiAgdm9pZCAgICBjYXRjaGVyKGludCk7CisjZW5kaWYgLyogX19ocHV4ICovCitleHRlcm4gIHN0cnVjdCByaW5nX2VsdCAqYWxsb2NhdGVfYnVmZmVyX3JpbmcoKTsKK2V4dGVybiB2b2lkIGFjY2Vzc19idWZmZXIoY2hhciAqYnVmZmVyX3B0ciwKKwkJCSAgaW50IGxlbmd0aCwKKwkJCSAgaW50IGRpcnR5X2NvdW50LAorCQkJICBpbnQgY2xlYW5fY291bnQpOworCisjaWZkZWYgSEFWRV9JQ1NDX0VYUworZXh0ZXJuICBzdHJ1Y3QgcmluZ19lbHQgKmFsbG9jYXRlX2V4c19idWZmZXJfcmluZygpOworI2VuZGlmIC8qIEhBVkVfSUNTQ19FWFMgKi8KKyNpZmRlZiBIQVZFX1NFTkRGSUxFCitleHRlcm4gIHN0cnVjdCBzZW5kZmlsZV9yaW5nX2VsdCAqYWxsb2Nfc2VuZGZpbGVfYnVmX3JpbmcoKTsKKyNlbmRpZiAvKiBIQVZFX1NFTkRGSUxFICovCisjaWZkZWYgV0FOVF9ETFBJCisvKiBpdCBzZWVtcyB0aGF0IEFJWCBpbiBpdHMgZmluaXRlIHdpc2RvbSBoYXMgc29tZSBib2d1cyBkZWZpbmUgaW4gYW4KKyAgIGluY2x1ZGUgZmlsZSB3aGljaCBkZWZpbmVzICJyZW1fYWRkciIgd2hpY2ggdGhlbiBzY3Jld3MtdXAgdGhpcyBleHRlcm4KKyAgIHVubGVzcyB3ZSBjaGFuZ2UgdGhlIG5hbWVzIHRvIHByb3RlY3QgdGhlIGd1aWx0eS4gcmVwb3J0ZWQgYnkgRXJpYworICAgSm9uZXMgKi8KK2V4dGVybiBpbnQgZGxfY29ubmVjdChpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnJlbW90ZV9hZGRyLCBpbnQgcmVtb3RlX2FkZHJfbGVuKTsKK2V4dGVybiBpbnQgZGxfYmluZChpbnQgZmQsIGludCBzYXAsIGludCBtb2RlLCBjaGFyICpkbHNhcF9wdHIsIGludCAqZGxzYXBfbGVuKTsKK2V4dGVybiAgaW50ICAgICBkbF9vcGVuKGNoYXIgZGV2ZmlsZVtdLCBpbnQgcHBhKTsKKyNlbmRpZiAvKiBXQU5UX0RMUEkgKi8KK2V4dGVybiAgY2hhciAgICBmb3JtYXRfY3B1X21ldGhvZChpbnQgbWV0aG9kKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgY29udmVydChjaGFyICpzdHJpbmcpOworZXh0ZXJuIHVuc2lnbmVkIGludCBjb252ZXJ0X3RpbWVzcGVjKGNoYXIgKnN0cmluZyk7CisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworZXh0ZXJuIHZvaWQgc3RhcnRfaXRpbWVyKHVuc2lnbmVkIGludCBpbnRlcnZhbF9sZW5fbXNlYyk7CisjZW5kaWYKKyAvKiB0aGVzZSBhcmUgYWxsIGZvciB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBzdHVmZiAqLworZXh0ZXJuIGRvdWJsZSBjb25maWRlbmNlOworZXh0ZXJuIGRvdWJsZSByZXN1bHRfY29uZmlkOworZXh0ZXJuIGRvdWJsZSBsb2NfY3B1X2NvbmZpZDsKK2V4dGVybiBkb3VibGUgcmVtX2NwdV9jb25maWQ7CitleHRlcm4gaW50IGxpYl9jcHVfbWFwW107CisjZW5kaWYKKworI2lmZGVmIFdJTjMyCisjZGVmaW5lIGNsb3NlKHgpCWNsb3Nlc29ja2V0KHgpCisjZGVmaW5lIHN0cmNhc2VjbXAoYSxiKSBfc3RyaWNtcChhLGIpCisjZGVmaW5lIGdldHBpZCgpICgoaW50KUdldEN1cnJlbnRQcm9jZXNzSWQoKSkKKyNlbmRpZgorCisjaWZkZWYgV0lOMzIKKyNpZiAwCisvKiBTaG91bGQgcmVhbGx5IHVzZSBzYWZlIHN0cmluZyBmdW5jdGlvbnM7IGJ1dCBub3QgZm9yIG5vdy4uLiAqLworI2luY2x1ZGUgPHN0cnNhZmUuaD4KKy8qIE1pY3Jvc29mdCBoYXMgZGVwcmVjYXRlZCBfc25wcmludGY7IGl0IGlzbid0IGd1YXJlbnRlZWQgdG8gbnVsbCB0ZXJtaW5hdGUgdGhlIHJlc3VsdCBidWZmZXIuICovCisvKiBUaGV5IHdhbnQgdXMgdG8gY2FsbCBTdHJpbmdDYlByaW50ZiBpbnN0ZWFkOyBpdCBhbHdheXMgbnVsbCB0ZXJtaW5hdGVzIHRoZSBzdHJpbmcuICovCisjZW5kaWYKKworI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyNlbmRpZgorCisvKiBEZWZpbmUgYSBtYWNybyB0byBhbGlnbiBhIGJ1ZmZlciB3aXRoIGFuIG9mZnNldCBmcm9tIGEgcG93ZXIgb2YgMgorICAgYm91bmRhcnkuICovCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgVUxPTkdfUFRSIHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisjZGVmaW5lIEFMSUdOX0JVRkZFUihCdWZQdHIsIEFsaWduLCBPZmZzZXQpIFwKKyAgKGNoYXIgKikoKCAoVUxPTkdfUFRSKShCdWZQdHIpICsgXAorCQkJKFVMT05HX1BUUikgKEFsaWduKSAtMSkgJiBcCisJCQl+KChVTE9OR19QVFIpIChBbGlnbikgLSAxKSkgKyAoVUxPTkdfUFRSKShPZmZzZXQpCisKKyAvKiBpZiB5b3VyIHN5c3RlbSBoYXMgYmNvcHkgYW5kIGJ6ZXJvLCBpbmNsdWRlIGl0IGhlcmUsIG90aGVyd2lzZSwgd2UgKi8KKyAvKiB3aWxsIHRyeSB0byB1c2UgbWVtY3B5IGFhbmQgbWVtc2V0LiBmaXggZnJvbSBCcnVjZSBCYXJuZXR0IEAgR0UuICovCisjaWYgZGVmaW5lZChocHV4KSB8fCBkZWZpbmVkIChfX1ZNUykKKyNkZWZpbmUgSEFWRV9CQ09QWQorI2RlZmluZSBIQVZFX0JaRVJPCisjZW5kaWYKKworI2lmZGVmIFdJTjMyCisjZGVmaW5lIEhBVkVfTUlOCisjZWxzZQorI2RlZmluZSBfc3RkY2FsbAorI2RlZmluZSBfY2RlY2wKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfQkNPUFkKKyNkZWZpbmUgYmNvcHkocyxkLGgpIG1lbWNweSgoZCksKHMpLChoKSkKKyNlbmRpZiAvKiBIQVZFX0JDT1BZICovCisKKyNpZm5kZWYgSEFWRV9CWkVSTworI2RlZmluZSBiemVybyhwLGgpIG1lbXNldCgocCksMCwoaCkpCisjZW5kaWYgLyogSEFWRV9CWkVSTyAqLworCisjaWZuZGVmIEhBVkVfTUlOCisjZGVmaW5lIG1pbihhLGIpICgoYSA8IGIpID8gYSA6IGIpCisjZW5kaWYgLyogSEFWRV9NSU4gKi8KKworI2lmZGVmIFVTRV9QRVJGU1RBVAorIyBpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRwZXJmLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRwZXJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0OGVmZAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHBlcmYuYwpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAKKwkgICBDb3B5cmlnaHQgKEMpIDE5OTMtMjAwNyBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICAgICAgICAgICAgICAgICAgICAgICAgIEFMTCBSSUdIVFMgUkVTRVJWRUQuCisgCisgIFRoZSBlbmNsb3NlZCBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBpbmNsdWRlcyBjb3B5cmlnaHRlZCB3b3JrcworICBvZiBIZXdsZXR0LVBhY2thcmQgQ28uIEZvciBhcyBsb25nIGFzIHlvdSBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nCisgIGxpbWl0YXRpb25zLCB5b3UgYXJlIGhlcmVieSBhdXRob3JpemVkIHRvIChpKSB1c2UsIHJlcHJvZHVjZSwgYW5kCisgIG1vZGlmeSB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24sIGFuZCB0byAoaWkpIGRpc3RyaWJ1dGUgdGhlCisgIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucywgZm9yCisgIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIG9ubHkuCisgICAgICAKKyAgMS4gIFRoZSBlbmNsb3NlZCBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhdCBubworICAgICAgY2hhcmdlIGluIG9yZGVyIHRvIGFkdmFuY2UgdGhlIGdlbmVyYWwgZGV2ZWxvcG1lbnQgb2YKKyAgICAgIGhpZ2gtcGVyZm9ybWFuY2UgbmV0d29ya2luZyBwcm9kdWN0cy4KKyAKKyAgMi4gIFlvdSBtYXkgbm90IGRlbGV0ZSBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIGluIHRoZQorICAgICAgc29mdHdhcmUgb3IgZG9jdW1lbnRhdGlvbi4gQWxsIGhhcmQgY29waWVzLCBhbmQgY29waWVzIGluCisgICAgICBzb3VyY2UgY29kZSBvciBvYmplY3QgY29kZSBmb3JtLCBvZiB0aGUgc29mdHdhcmUgb3IKKyAgICAgIGRvY3VtZW50YXRpb24gKGluY2x1ZGluZyBtb2RpZmljYXRpb25zKSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QKKyAgICAgIG9uZSBvZiB0aGUgY29weXJpZ2h0IG5vdGljZXMuCisgCisgIDMuICBUaGUgZW5jbG9zZWQgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gaGFzIG5vdCBiZWVuIHN1YmplY3RlZAorICAgICAgdG8gdGVzdGluZyBhbmQgcXVhbGl0eSBjb250cm9sIGFuZCBpcyBub3QgYSBIZXdsZXR0LVBhY2thcmQgQ28uCisgICAgICBwcm9kdWN0LiBBdCBhIGZ1dHVyZSB0aW1lLCBIZXdsZXR0LVBhY2thcmQgQ28uIG1heSBvciBtYXkgbm90CisgICAgICBvZmZlciBhIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFzIGEgcHJvZHVjdC4KKyAgCisgIDQuICBUSEUgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTIi4KKyAgICAgIEhFV0xFVFQtUEFDS0FSRCBDT01QQU5ZIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgVVNFLAorICAgICAgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBTT0ZUV0FSRSBPUgorICAgICAgRE9DVU1FTlRBVElPTiBXSUxMIE5PVCBJTkZSSU5HRSBBIFRISVJEIFBBUlRZJ1MgSU5URUxMRUNUVUFMCisgICAgICBQUk9QRVJUWSBSSUdIVFMuIEhQIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgT1IKKyAgICAgIERPQ1VNRU5UQVRJT04gSVMgRVJST1IgRlJFRS4gSFAgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLAorICAgICAgRVhQUkVTUyBBTkQgSU1QTElFRCwgV0lUSCBSRUdBUkQgVE8gVEhFIFNPRlRXQVJFIEFORCBUSEUKKyAgICAgIERPQ1VNRU5UQVRJT04uIEhQIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgT0YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgIAorICA1LiAgSEVXTEVUVC1QQUNLQVJEIENPTVBBTlkgV0lMTCBOT1QgSU4gQU5ZIEVWRU5UIEJFIExJQUJMRSBGT1IgQU5ZCisgICAgICBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgICAgKElOQ0xVRElORyBMT1NUIFBST0ZJVFMpIFJFTEFURUQgVE8gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OLAorICAgICAgTU9ESUZJQ0FUSU9OLCBPUiBESVNUUklCVVRJT04gT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04uCisgCisqLworY2hhcgluZXRwZXJmX2lkW109IlwKK0AoIyluZXRwZXJmLmMgKGMpIENvcHlyaWdodCAxOTkzLTIwMDcgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkuIFZlcnNpb24gMi40LjMiOworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKy8qIEZyZWVCU0QgZG9lc24ndCBsaWtlIHNvY2tldC5oIGJlZm9yZSB0eXBlcyBhcmUgc2V0LiAqLworI2lmIF9fRnJlZUJTRF9fCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgV0lOMzIKKy8qIHRoaXMgc2hvdWxkIG9ubHkgYmUgdGVtcG9yYXJ5ICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmIC8qIFdJTjMyICovCisKKyNpbmNsdWRlICJuZXRzaC5oIgorI2luY2x1ZGUgIm5ldGxpYi5oIgorI2luY2x1ZGUgIm5ldHRlc3RfYnNkLmgiCisKKyNpZmRlZiBXQU5UX1VOSVgKKyNpbmNsdWRlICJuZXR0ZXN0X3VuaXguaCIKKyNlbmRpZiAvKiBXQU5UX1VOSVggKi8KKworI2lmZGVmIFdBTlRfWFRJCisjaW5jbHVkZSAibmV0dGVzdF94dGkuaCIKKyNlbmRpZiAvKiBXQU5UX1hUSSAqLworCisjaWZkZWYgV0FOVF9ETFBJCisjaW5jbHVkZSAibmV0dGVzdF9kbHBpLmgiCisjZW5kaWYgLyogV0FOVF9ETFBJICovCisKKyNpZmRlZiBXQU5UX1NEUAorI2luY2x1ZGUgIm5ldHRlc3Rfc2RwLmgiCisjZW5kaWYKKworLyogVGhlIEROUyB0ZXN0cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIG5ldHBlcmYyLiBUaG9zZSB3YW50aW5nIHRvIGRvCisgICBETlNfUlIgdGVzdHMgc2hvdWxkIHVzZSBuZXRwZXJmNCBpbnN0ZWFkLiAqLworCisjaWZkZWYgRE9fRE5TCisjZXJyb3IgRE5TIHRlc3RzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gbmV0cGVyZi4gVXNlIG5ldHBlcmY0IGluc3RlYWQKKyNlbmRpZiAvKiBET19ETlMgKi8KKworI2lmZGVmIFdBTlRfU0NUUAorI2luY2x1ZGUgIm5ldHRlc3Rfc2N0cC5oIgorI2VuZGlmCisKKyAvKiB0aGlzIGZpbGUgY29udGFpbnMgdGhlIG1haW4gZm9yIHRoZSBuZXRwZXJmIHByb2dyYW0uIGFsbCB0aGUgb3RoZXIgKi8KKyAvKiByb3V0aW5lcyBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUgbmV0c2guYyAqLworCisKK2ludCBfY2RlY2wKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKworI2lmZGVmIFdJTjMyCisgIFdTQURBVEEJd3NhX2RhdGEgOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgd2luc29jayBsaWIgKCB2ZXJzaW9uIDIuMiApICovCisgIGlmICggV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhX2RhdGEpID09IFNPQ0tFVF9FUlJPUiApeworICAgIHByaW50ZigiV1NBU3RhcnR1cCgpIGZhaWxlZCA6ICVsdVxuIiwgR2V0TGFzdEVycm9yKCkpIDsKKyAgICByZXR1cm4gMSA7CisgIH0KKyNlbmRpZiAvKiBXSU4zMiAqLworICAKKyAgbmV0bGliX2luaXQoKTsKKyAgc2V0X2RlZmF1bHRzKCk7CisgIHNjYW5fY21kX2xpbmUoYXJnYyxhcmd2KTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGR1bXBfZ2xvYmFscygpOworICAgIGluc3RhbGxfc2lnbmFsX2NhdGNoZXJzKCk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIHByaW50ZigicmVtb3RlaG9zdCBpcyAlcyBhbmQgcG9ydCAlc1xuIixob3N0X25hbWUsdGVzdF9wb3J0KTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgfQorICAKKyAgCisgIGlmICghbm9fY29udHJvbCkgeworICAgIGVzdGFibGlzaF9jb250cm9sKGhvc3RfbmFtZSx0ZXN0X3BvcnQsYWRkcmVzc19mYW1pbHksCisJCSAgICAgIGxvY2FsX2hvc3RfbmFtZSxsb2NhbF90ZXN0X3BvcnQsbG9jYWxfYWRkcmVzc19mYW1pbHkpOworICB9CisgIAorICBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9TVFJFQU0iKSA9PSAwKSB7CisgICAgc2VuZF90Y3Bfc3RyZWFtKGhvc3RfbmFtZSk7CisgIH0KKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9NQUVSVFMiKSA9PSAwKSB7CisgICAgc2VuZF90Y3BfbWFlcnRzKGhvc3RfbmFtZSk7CisgIH0KKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9NU1MiKSA9PSAwKSB7CisgICAgc2VuZF90Y3BfbXNzKGhvc3RfbmFtZSk7CisgIH0KKyNpZmRlZiBIQVZFX0lDU0NfRVhTCisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJFWFNfVENQX1NUUkVBTSIpID09IDApIHsKKyAgICBzZW5kX2V4c190Y3Bfc3RyZWFtKGhvc3RfbmFtZSk7CisgIH0KKyNlbmRpZiAvKiBIQVZFX0lDU0NfRVhTICovCisjaWZkZWYgSEFWRV9TRU5ERklMRQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiVENQX1NFTkRGSUxFIikgPT0gMCkgeworICAgIHNlbmRmaWxlX3RjcF9zdHJlYW0oaG9zdF9uYW1lKTsKKyAgfQorI2VuZGlmIC8qIEhBVkVfU0VOREZJTEUgKi8KKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9SUiIpID09IDApIHsKKyAgICBzZW5kX3RjcF9ycihob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJUQ1BfQ1JSIikgPT0gMCkgeworICAgIHNlbmRfdGNwX2Nvbm5fcnIoaG9zdF9uYW1lKTsKKyAgfQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiVENQX0NDIikgPT0gMCkgeworICAgIHNlbmRfdGNwX2NjKGhvc3RfbmFtZSk7CisgIH0KKyNpZmRlZiBET18xNjQ0CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJUQ1BfVFJSIikgPT0gMCkgeworICAgIHNlbmRfdGNwX3RyYW5fcnIoaG9zdF9uYW1lKTsKKyAgfQorI2VuZGlmIC8qIERPXzE2NDQgKi8KKyNpZmRlZiBET19OQlJSCisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJUQ1BfTkJSUiIpID09IDApIHsKKyAgICBzZW5kX3RjcF9uYnJyKGhvc3RfbmFtZSk7CisgIH0KKyNlbmRpZiAvKiBET19OQlJSICovCisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJVRFBfU1RSRUFNIikgPT0gMCkgeworICAgIHNlbmRfdWRwX3N0cmVhbShob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJVRFBfUlIiKSA9PSAwKSB7CisgICAgc2VuZF91ZHBfcnIoaG9zdF9uYW1lKTsKKyAgfQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiTE9DX0NQVSIpID09IDApIHsKKyAgICBsb2NfY3B1X3JhdGUoKTsKKyAgfQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiUkVNX0NQVSIpID09IDApIHsKKyAgICByZW1fY3B1X3JhdGUoKTsKKyAgfQorI2lmZGVmIFdBTlRfRExQSQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiRExDT19SUiIpID09IDApIHsKKyAgICBzZW5kX2RscGlfY29fcnIoaG9zdF9uYW1lKTsKKyAgfQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiRExDTF9SUiIpID09IDApIHsKKyAgICBzZW5kX2RscGlfY2xfcnIoaG9zdF9uYW1lKTsKKyAgfQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiRExDT19TVFJFQU0iKSA9PSAwKSB7CisgICAgc2VuZF9kbHBpX2NvX3N0cmVhbShob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJETENMX1NUUkVBTSIpID09IDApIHsKKyAgICBzZW5kX2RscGlfY2xfc3RyZWFtKGhvc3RfbmFtZSk7CisgIH0KKyNlbmRpZiAvKiBXQU5UX0RMUEkgKi8KKyNpZmRlZiBXQU5UX1VOSVgKKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlNUUkVBTV9SUiIpID09IDApIHsKKyAgICBzZW5kX3N0cmVhbV9ycihob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJER19SUiIpID09IDApIHsKKyAgICBzZW5kX2RnX3JyKGhvc3RfbmFtZSk7CisgIH0KKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlNUUkVBTV9TVFJFQU0iKSA9PSAwKSB7CisgICAgc2VuZF9zdHJlYW1fc3RyZWFtKGhvc3RfbmFtZSk7CisgIH0KKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIkRHX1NUUkVBTSIpID09IDApIHsKKyAgICBzZW5kX2RnX3N0cmVhbShob3N0X25hbWUpOworICB9CisjZW5kaWYgLyogV0FOVF9VTklYICovCisjaWZkZWYgV0FOVF9YVEkKKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlhUSV9UQ1BfU1RSRUFNIikgPT0gMCkgeworICAgIHNlbmRfeHRpX3RjcF9zdHJlYW0oaG9zdF9uYW1lKTsKKyAgfQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiWFRJX1RDUF9SUiIpID09IDApIHsKKyAgICBzZW5kX3h0aV90Y3BfcnIoaG9zdF9uYW1lKTsKKyAgfQorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiWFRJX1VEUF9TVFJFQU0iKSA9PSAwKSB7CisgICAgc2VuZF94dGlfdWRwX3N0cmVhbShob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJYVElfVURQX1JSIikgPT0gMCkgeworICAgIHNlbmRfeHRpX3VkcF9ycihob3N0X25hbWUpOworICB9CisjZW5kaWYgLyogV0FOVF9YVEkgKi8KKyAgCisjaWZkZWYgV0FOVF9TQ1RQCisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCAiU0NUUF9TVFJFQU0iKSA9PSAwKSB7CisgICAgc2VuZF9zY3RwX3N0cmVhbShob3N0X25hbWUpOworICB9ICAgICAgIAorICBlbHNlIGlmIChzdHJjYXNlY21wKHRlc3RfbmFtZSwgIlNDVFBfUlIiKSA9PSAwKSB7CisgICAgc2VuZF9zY3RwX3JyKGhvc3RfbmFtZSk7CisgIH0KKyAgZWxzZSBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsICJTQ1RQX1NUUkVBTV9NQU5ZIikgPT0gMCkgeworICAgIHNlbmRfc2N0cF9zdHJlYW1fMXRvTWFueShob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCAiU0NUUF9SUl9NQU5ZIikgPT0gMCkgeworICAgIHNlbmRfc2N0cF9zdHJlYW1fMXRvTWFueShob3N0X25hbWUpOworICB9CisjZW5kaWYKKyAgCisjaWZkZWYgRE9fRE5TCisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJETlNfUlIiKSA9PSAwKSB7CisgICAgZnByaW50ZihzdGRlcnIsCisJICAiRE5TIHRlc3RzIGNhbiBub3cgYmUgZm91bmQgaW4gbmV0cGVyZjQuXG4iKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKyAgICBleGl0KC0xKTsKKyAgfQorI2VuZGlmIC8qIERPX0ROUyAqLworI2lmZGVmIFdBTlRfU0RQCisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTRFBfU1RSRUFNIikgPT0gMCkgeworICAgIHNlbmRfc2RwX3N0cmVhbShob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTRFBfTUFFUlRTIikgPT0gMCkgeworICAgIHNlbmRfc2RwX21hZXJ0cyhob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTRFBfUlIiKSA9PSAwKSB7CisgICAgc2VuZF9zZHBfcnIoaG9zdF9uYW1lKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfU0RQICovCisjaWZkZWYgV0FOVF9PTU5JCisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJPTU5JIikgPT0gMCkgeworICAgIHNlbmRfb21uaShob3N0X25hbWUpOworICB9CisgIGVsc2UgaWYgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJVVUlEIikgPT0gMCkgeworICAgIHByaW50X3V1aWQoaG9zdF9uYW1lKTsKKyAgfQorI2VuZGlmCisgIGVsc2UgeworICAgIHByaW50ZigiVGhlIHRlc3QgeW91IHJlcXVlc3RlZCBpcyB1bmtub3duIHRvIHRoaXMgbmV0cGVyZi5cbiIpOworICAgIHByaW50ZigiUGxlYXNlIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHRoZSBjb3JyZWN0IHRlc3QgbmFtZSwgXG4iKTsKKyAgICBwcmludGYoImFuZCB0aGF0IHRlc3QgZmFtaWx5IGhhcyBiZWVuIGNvbXBpbGVkIGludG8gdGhpcyBuZXRwZXJmLlxuIik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKCFub19jb250cm9sKSB7CisgICAgc2h1dGRvd25fY29udHJvbCgpOworICB9CisgIAorI2lmZGVmIFdJTjMyCisgIC8qIENsZWFudXAgdGhlIHdpbnNvY2sgbGliICovCisgIFdTQUNsZWFudXAoKTsKKyNlbmRpZgorICAKKyAgcmV0dXJuKDApOworfQorCisKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldHBlcmZfdmVyc2lvbi5oIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0cGVyZl92ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4MTBjMAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHBlcmZfdmVyc2lvbi5oCkBAIC0wLDAgKzEgQEAKKyNkZWZpbmUgTkVUUEVSRl9WRVJTSU9OICIyLjQuNSIKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldHBlcmZfdmVyc2lvbi5oLmluIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0cGVyZl92ZXJzaW9uLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViZDQ1MgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHBlcmZfdmVyc2lvbi5oLmluCkBAIC0wLDAgKzEgQEAKKyNkZWZpbmUgTkVUUEVSRl9WRVJTSU9OICJAVkVSU0lPTkAiCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRydF9ub25lLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRydF9ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0ZjA3MwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHJ0X25vbmUuYwpAQCAtMCwwICsxLDE3IEBACisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKK2NoYXIgKgorZmluZF9lZ3Jlc3NfaW50ZXJmYWNlKHN0cnVjdCBzb2NrYWRkciAqc291cmNlLCBzdHJ1Y3Qgc29ja2FkZHIgKmRlc3QpIHsKKyAgcmV0dXJuIHN0cmR1cCgiSW50ZXJmYWNlVW5hdmFpbGFibGUiKTsKKworfQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0cnRfcnRtZ2V0LmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRydF9ydG1nZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY2YzFjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0cnRfcnRtZ2V0LmMKQEAgLTAsMCArMSw0MTkgQEAKKyNpZiBkZWZpbmVkKEhBVkVfQ09ORklHX0gpCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworI2lmIGRlZmluZWQoSEFWRV9TWVNfU09DS0lPX0gpCisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2VuZGlmCisKK2NoYXIgKgorZmluZF9lZ3Jlc3NfaW50ZXJmYWNlX2J5X2FkZHIoc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgbG9jYWxfaXBfY2hlY2spIHsKKworI2lmZGVmIEhBVkVfR0VUSUZBRERSUworI2luY2x1ZGUgPGlmYWRkcnMuaD4KKworICBzdHJ1Y3QgaWZhZGRycyAqaWZhcDsKKyAgc3RydWN0IGlmYWRkcnMgKnRlbXA7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCp0c2luOworI2lmZGVmIEFGX0lORVQ2CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsKnRzaW42OworI2VuZGlmCisgIHZvaWQgKmFkZHIxLCphZGRyMjsKKyAgaW50IHJldCxjbXBsZW47CisgIGNoYXIgdGVtcF9uYW1lW0lGTkFNU0laXTsKKworICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKyAgc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luOworCisgIHJldCA9IGdldGlmYWRkcnMoJmlmYXApOworCisgIGlmIChyZXQgPCAwKSB7CisgICAgaWYgKGxvY2FsX2lwX2NoZWNrKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgZWxzZQorICAgICAgcmV0dXJuKCJpZmdldGFkZHJzIik7CisgIH0KKworICB0ZW1wID0gaWZhcDsKKyAgd2hpbGUgKHRlbXApIHsKKyAgICBpZiAoKHRlbXAtPmlmYV9mbGFncyAmIElGRl9VUCkgJiYKKwkodGVtcC0+aWZhX2FkZHItPnNhX2ZhbWlseSA9PSBzaW4tPnNpbl9mYW1pbHkpKSB7CisgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdGVtcC0+aWZhX2FkZHI7CisgICAgICBzd2l0Y2ggKHRlbXAtPmlmYV9hZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBBRl9JTkVUNgorICAgICAgY2FzZSBBRl9JTkVUNjoKKwlhZGRyMSA9ICYoc2luNi0+c2luNl9hZGRyKTsKKwl0c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHRlbXAtPmlmYV9hZGRyKTsKKwlhZGRyMiA9ICYodHNpbjYtPnNpbjZfYWRkcik7CisJY21wbGVuID0gc2l6ZW9mKHRzaW42LT5zaW42X2FkZHIpOworCWJyZWFrOworI2VuZGlmCisgICAgICBjYXNlIEFGX0lORVQ6CisJYWRkcjEgPSAmKHNpbi0+c2luX2FkZHIuc19hZGRyKTsKKwl0c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh0ZW1wLT5pZmFfYWRkcik7CisJYWRkcjIgPSAmKHRzaW4tPnNpbl9hZGRyLnNfYWRkcik7CisJY21wbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJZnJlZWlmYWRkcnMoaWZhcCk7CisJaWYgKGxvY2FsX2lwX2NoZWNrKQorCSAgcmV0dXJuIE5VTEw7CisJZWxzZQorCSAgcmV0dXJuIHN0cmR1cCgiQmFkQUYiKTsKKyAgICAgIH0KKyAgICAgIGlmIChtZW1jbXAoYWRkcjEsYWRkcjIsY21wbGVuKSA9PSAwKSB7CisJc3RyY3B5KHRlbXBfbmFtZSx0ZW1wLT5pZmFfbmFtZSk7CisJZnJlZWlmYWRkcnMoaWZhcCk7CisJcmV0dXJuIHN0cmR1cCh0ZW1wX25hbWUpOworICAgICAgfQorICAgIH0KKyAgICB0ZW1wID0gdGVtcC0+aWZhX25leHQ7CisgIH0KKyAgZnJlZWlmYWRkcnMoaWZhcCk7CisgIGlmIChsb2NhbF9pcF9jaGVjaykKKyAgICByZXR1cm4gTlVMTDsKKyAgZWxzZQorICAgIHJldHVybiBzdHJkdXAoIk5vdEZvdW5kIik7CisKKyNlbHNlICAKKyAgY2hhciAqYnVmLCpwdHI7CisgIGludCAgbGFzdGxlbixsZW4sY21wbGVuOworICBpbnQgICBzb2NrZmQ7CisgIHN0cnVjdCBpZmNvbmYgaWZjOworICBzdHJ1Y3QgaWZyZXEgICppZnI7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCp0c2luOworI2lmZGVmIEFGX0lORVQ2CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsKnRzaW42OworI2VuZGlmCisgIHZvaWQgKmFkZHIxLCphZGRyMjsKKworICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKyNpZmRlZiBBRl9JTkVUNgorICBzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzaW47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHKQorICBwcmludGYoIkxvb2tpbmcgZm9yICVzXG4iLGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisjZW5kaWYKKworICBzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCxTT0NLX0RHUkFNLDApOworICBpZiAoc29ja2ZkIDwgMCkgeworICAgIGlmIChsb2NhbF9pcF9jaGVjaykgCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBlbHNlCisgICAgICByZXR1cm4gc3RyZHVwKCJzb2NrZXQiKTsKKyAgfQorICBsYXN0bGVuID0gMDsKKyAgbGVuID0gMTAwICogc2l6ZW9mKHN0cnVjdCBpZnJlcSk7CisgIHdoaWxlICgxKSB7CisgICAgYnVmID0gbWFsbG9jKGxlbik7CisgICAgaWYgKE5VTEwgPT0gYnVmKSB7CisgICAgICBpZiAobG9jYWxfaXBfY2hlY2spCisJcmV0dXJuIE5VTEw7CisgICAgICBlbHNlCisJcmV0dXJuIHN0cmR1cCgibWFsbG9jIik7CisgICAgfQorCisgICAgaWZjLmlmY19sZW4gPSBsZW47CisgICAgaWZjLmlmY19idWYgPSBidWY7CisKKyAgICBpZiAoaW9jdGwoc29ja2ZkLCBTSU9DR0lGQ09ORiwgJmlmYykgPCAwKSB7CisgICAgICBpZiAoZXJybm8gIT0gRUlOVkFMIHx8IGxhc3RsZW4gIT0gMCkgeworCWZyZWUoYnVmKTsKKwlpZiAobG9jYWxfaXBfY2hlY2spCisJICByZXR1cm4gTlVMTDsKKwllbHNlCisJICByZXR1cm4gc3RyZHVwKCJTSU9DSUZDT05GIik7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworCWlmIChpZmMuaWZjX2xlbiA9PSBsYXN0bGVuKQorCSAgYnJlYWs7ICAvKiB0aGUgaW9jdGwgd2FzIGhhcHB5ICovCisJbGFzdGxlbiA9IGlmYy5pZmNfbGVuOworICAgICAgfQorICAgIGxlbiArPSAxMCAqIHNpemVvZihzdHJ1Y3QgaWZyZXEpOworICAgIGZyZWUoYnVmKTsKKyAgfQorCisjaWYgZGVmaW5lZChORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcpCisgIHByaW50ZigiaW9jdGwgd2FzIE9LLCBsZW4gaXMgJWRcbiIsIGlmYy5pZmNfbGVuKTsKKyNlbmRpZgorCisgIGZvciAocHRyID0gYnVmOyBwdHIgPCBidWYgKyBpZmMuaWZjX2xlbjsgKSB7CisgICAgaWZyID0gKHN0cnVjdCBpZnJlcSAqKSBwdHI7CisKKyAgICBzd2l0Y2ggKGlmci0+aWZyX2FkZHIuc2FfZmFtaWx5KSB7CisjaWZkZWYgQUZfSU5FVDYKKyAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgYWRkcjEgPSAmKHNpbjYtPnNpbjZfYWRkcik7CisgICAgICB0c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJihpZnItPmlmcl9hZGRyKTsKKyAgICAgIGFkZHIyID0gJih0c2luNi0+c2luNl9hZGRyKTsKKyAgICAgIGNtcGxlbiA9IHNpemVvZih0c2luNi0+c2luNl9hZGRyKTsKKyAgICAgIGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBBRl9JTkVUOgorICAgIGRlZmF1bHQ6CisgICAgICBhZGRyMSA9ICYoc2luLT5zaW5fYWRkci5zX2FkZHIpOworICAgICAgdHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmKGlmci0+aWZyX2FkZHIpOworICAgICAgYWRkcjIgPSAmKHRzaW4tPnNpbl9hZGRyLnNfYWRkcik7CisgICAgICBjbXBsZW4gPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworICAgICAgbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgCisjaWYgZGVmaW5lZChORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcpCisgICAgcHJpbnRmKCJoZWxsbyBpIGFtIGludGVyZmFjZSAlcyBmYW1pbHkgJWRcbiIsCisJICAgaWZyLT5pZnJfbmFtZSwKKwkgICBpZnItPmlmcl9hZGRyLnNhX2ZhbWlseSk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgaWYgKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpID4gaWZyLT5pZnJfYWRkci5zYV9sZW4pCisgICAgICBsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKKyAgICBlbHNlCisgICAgICBsZW4gPSBpZnItPmlmcl9hZGRyLnNhX2xlbjsKKyNlbmRpZgorCisgICAgLyogd2UgYXJlIGJhc2ljYWx5IGFzcy11LW1lLWluZyB0aGF0IGFuIGlmciBpcyBvbmx5IGEgbmFtZSBhbmQgYQorICAgICAgIHNvY2thZGRyICovCisgICAgcHRyICs9IHNpemVvZihpZnItPmlmcl9uYW1lKSArIGxlbjsKKyAgICAKKyAgICBpZiAoaWZyLT5pZnJfYWRkci5zYV9mYW1pbHkgIT0gc2luLT5zaW5fZmFtaWx5KQorICAgICAgY29udGludWU7CisgICAgZWxzZSB7CisgICAgICAKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKKyAgICAgIHByaW50ZigiYWRkcjEgJXAgYWRkcjIgJXAgbGVuICVkXG4iLGFkZHIxLGFkZHIyLGNtcGxlbik7CisjZW5kaWYKKyAgICAgIGlmICgwID09IG1lbWNtcChhZGRyMSxhZGRyMixjbXBsZW4pKSB7CisJc3RydWN0IGlmcmVxIGZsYWdzcmVxOworCWZsYWdzcmVxID0gKmlmcjsKKwkvKiB3ZSd2ZSBnb3R0ZW4gdGhpcyBmYXIgLSBhc3MtdS1tZSB0aGlzIHdpbGwgd29yaz8gKi8KKwlpb2N0bChzb2NrZmQsU0lPQ0dJRkZMQUdTLCAmZmxhZ3NyZXEpOworCWlmIChmbGFnc3JlcS5pZnJfZmxhZ3MgJiBJRkZfVVApIHsKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKKwkgIHByaW50ZigiSW50ZXJmYWNlIG5hbWUgJXMgZmFtaWx5ICVkXG4iLGlmci0+aWZyX25hbWUsaWZyLT5pZnJfYWRkci5zYV9mYW1pbHkpOworI2VuZGlmCisJICBjbG9zZShzb2NrZmQpOworCSAgLyogd2Ugc2hvdWxkIHByb2JhYmx5IGNsb3NlIHRoZSBtZW1vcnkgbGVhayBvbmUgb2YgdGhlc2UgZGF5cyAqLworCSAgcmV0dXJuIHN0cmR1cChpZnItPmlmcl9uYW1lKTsKKwl9CisgICAgICB9CisgICAgfQorICB9CisgIGNsb3NlKHNvY2tmZCk7CisgIGZyZWUoYnVmKTsKKyAgaWYgKGxvY2FsX2lwX2NoZWNrKQorICAgIHJldHVybiBOVUxMOworICBlbHNlCisgICAgcmV0dXJuIHN0cmR1cCgiRWdyZXNzQnlBZGRyIik7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoQUZfTElOSykKK2NoYXIgKgorZmluZF9lZ3Jlc3NfaW50ZXJmYWNlX2J5X2xpbmsoc3RydWN0IHNvY2thZGRyX2RsICpzb2NrbGluaykgeworCisgIGNoYXIgYnVmZmVyW0lGX05BTUVTSVpFXTsKKyAgY2hhciAqY3JldDsKKworI2lmIGRlZmluZWQoTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHKQorICBwcmludGYoInNvY2tsaW5rIGFzZGYgaW5kZXggJWQgbmxlbiAlZCBhbGVuICVkIHNsZW4gJWRcbiIsCisJIHNvY2tsaW5rLT5zZGxfaW5kZXgsCisJIHNvY2tsaW5rLT5zZGxfbmxlbiwKKwkgc29ja2xpbmstPnNkbF9hbGVuLAorCSBzb2NrbGluay0+c2RsX3NsZW4pOworI2VuZGlmCisKKyAgLyogSSBzdXNwZWN0IHdlIGNvdWxkIGV4dHJhY3QgdGhlIG5hbWUgZnJvbSB0aGUgc29ja2FkZHJfZGwKKyAgICAgZGlyZWN0bHksIGFuZCBwZXJoYXBzIHNob3VsZCwgYnV0IEkgcmVhbGx5IGRvbid0IGxpa2UgbXVja2luZworICAgICBhYm91dCB3aXRoIHBvaW50ZXJzIGFuZCBvZmZzZXRzIGFuZCBjaGFyYWN0ZXJzIHNvIHdpbGwganVzdCBwdW50CisgICAgIHRvIGlmX2luZGV4dG9uYW1lLiByYWogMjAwOC0wMy0xNyAqLworICBpZiAoc29ja2xpbmstPnNkbF9pbmRleCAhPSAwKSB7CisgICAgY3JldCA9IGlmX2luZGV4dG9uYW1lKHNvY2tsaW5rLT5zZGxfaW5kZXgsYnVmZmVyKTsKKyAgICBpZiAoTlVMTCAhPSBjcmV0KQorICAgICAgcmV0dXJuIHN0cmR1cChjcmV0KTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gc3RyZHVwKHN0cmVycm9yKGVycm5vKSk7CisgIH0KKyAgZWxzZSBpZiAoc29ja2xpbmstPnNkbF9ubGVuID4gMCkgeworICAgIC8qIG9rLCBJIG1pZ2h0IGhhdmUgdG8gY2FyZSBhZnRlciBhbGwgKi8KKyAgICBzdHJuY3B5KGJ1ZmZlcixzb2NrbGluay0+c2RsX2RhdGEsc29ja2xpbmstPnNkbF9ubGVuKTsKKyAgICByZXR1cm4gc3RyZHVwKGJ1ZmZlcik7CisgIH0KKyAgZWxzZQorICAgIHJldHVybiBzdHJkdXAoIm5vaW5kZXgiKTsKK30KKworI2VuZGlmCisKKy8qIGJvcnJvd3MgaGVhdmlseSBmcm9tIFcgUmljaGFyZCBTdGV2ZW5zJyBnZXRydC5jIG9mIHVucCBmYW1lICovCisKKyNkZWZpbmUgQlVGTEVOIChzaXplb2Yoc3RydWN0IHJ0X21zZ2hkcikgKyA1MTIpCisKK2NoYXIgKgorZmluZF9lZ3Jlc3NfaW50ZXJmYWNlKHN0cnVjdCBzb2NrYWRkciAqc291cmNlLCBzdHJ1Y3Qgc29ja2FkZHIgKmRlc3QpIHsKKworICBpbnQgc29ja2ZkOworICBpbnQgcmV0OworICBzdHJ1Y3QgcnRfbXNnaGRyICAqcnRtOworICBpbnQgY29weV9sZW47CisgIGNoYXIgKmJ1ZmZlcjsKKyAgdm9pZCAqbmV4dF9ob3A7CisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGhvbGRtZTsKKyAgc3RydWN0IHNvY2thZGRyX2luICAqc2luOworICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisgIC8qIGZpcnN0LCBjaGVjayBpZiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBhIGxvY2FsIG9uZS4gaWYgaXQgaXMsCisgICAgIHJldHVybiAibG8wIiBhcyB0aGUgaW50ZXJmYWNlIGJlY2F1c2Ugd2Ugd2lsbCBhc3MtdS1tZSB0aGUKKyAgICAgdHJhZmZpYyBpc24ndCBsZWF2aW5nIHRoZSBob3N0ICovCisgIGlmIChOVUxMICE9IGZpbmRfZWdyZXNzX2ludGVyZmFjZV9ieV9hZGRyKGRlc3QsMSkpIHsKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKKyAgICBwcmludGYoIkRlc3RpbmF0aW9uIGlzIGEgbG9jYWwgSVBcbiIpOworI2VuZGlmCisgICAgcmV0dXJuIHN0cmR1cCgibG8wIik7CisgIH0KKyAgICAKKworICBzb2NrZmQgPSBzb2NrZXQoQUZfUk9VVEUsIFNPQ0tfUkFXLCAwKTsKKyAgaWYgKHNvY2tmZCA8IDApCisgICAgcmV0dXJuIHN0cmR1cCgic29ja2V0Iik7CisKKyAgYnVmZmVyID0gY2FsbG9jKDEsQlVGTEVOKTsgCisgIGlmIChOVUxMID09IGJ1ZmZlcikKKyAgICByZXR1cm4gc3RyZHVwKCJjYWxsb2MiKTsKKworICBydG0gPSAoc3RydWN0IHJ0X21zZ2hkciAqKWJ1ZmZlcjsKKyAgCisgIHJ0bS0+cnRtX21zZ2xlbiA9IHNpemVvZihzdHJ1Y3QgcnRfbXNnaGRyKTsKKyAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWRlc3Q7CisKKyAgaWYgKEFGX0lORVQgPT0gc2luLT5zaW5fZmFtaWx5KSB7CisKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKKyAgICBwcmludGYoIlJlc29sdmluZyBhZGRyIGlzICVzXG4iLGluZXRfbnRvYShzaW4tPnNpbl9hZGRyKSk7CisjZW5kaWYKKworICAgIHJ0bS0+cnRtX21zZ2xlbiArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICBjb3B5X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICB9CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgZWxzZSBpZiAoQUZfSU5FVDYgPT0gc2luLT5zaW5fZmFtaWx5KSB7CisgICAgcnRtLT5ydG1fbXNnbGVuICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyAgICBjb3B5X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyAgfQorI2VuZGlmCisgIGVsc2UgeworICAgIGZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gc3RyZHVwKCJVbmtub3duIEFGIik7CisgIH0KKworICBydG0tPnJ0bV92ZXJzaW9uID0gUlRNX1ZFUlNJT047CisgIHJ0bS0+cnRtX3R5cGUgPSBSVE1fR0VUOworICBydG0tPnJ0bV9hZGRycyA9IFJUQV9EU1Q7CisgIHJ0bS0+cnRtX3BpZCA9IGdldHBpZCgpOworICBydG0tPnJ0bV9zZXEgPSAxMjg2NTsKKworICAvKiBwb2ludCBqdXN0IGJleW9uZCB0aGUgcnRfbXNnaGRyLiAqLworICBtZW1jcHkoKHJ0bSArIDEpLCBkZXN0LCBjb3B5X2xlbik7CisKKyAgLyogc2VuZCB0aGUgbWVzc2FnZSAqLworICByZXQgPSB3cml0ZShzb2NrZmQscnRtLHJ0bS0+cnRtX21zZ2xlbik7CisgIGlmIChyZXQgIT0gcnRtLT5ydG1fbXNnbGVuKSB7CisgICAgZnJlZShidWZmZXIpOworICAgIHJldHVybiBzdHJkdXAoIndyaXRlIik7CisgIH0KKworICAvKiBzZWVrIHRoZSByZXBseSAqLworICBkbyB7CisgICAgcmV0ID0gcmVhZChzb2NrZmQsIHJ0bSwgQlVGTEVOKTsKKyAgICBpZiAocmV0IDwgc2l6ZW9mKHN0cnVjdCBydF9tc2doZHIpKSB7CisgICAgICBmcmVlKGJ1ZmZlcik7CisgICAgICByZXR1cm4gc3RyZHVwKCJyZWFkIik7CisgICAgfQorICB9IHdoaWxlIChydG0tPnJ0bV90eXBlICE9IFJUTV9HRVQgfHwKKwkgICBydG0tPnJ0bV9zZXEgICE9IDEyODY1IHx8CisJICAgcnRtLT5ydG1fcGlkICAhPSBnZXRwaWQoKSk7CisgIGlmICgocnRtLT5ydG1fZmxhZ3MgJiBSVEZfR0FURVdBWSkgJiYKKyAgICAgIChydG0tPnJ0bV9hZGRycyAmIFJUQV9HQVRFV0FZKSkgeworICAgIC8qIHdlIGhhdmUgYSBuZXh0IGhvcCBnYXRld2F5IHRvIHJlc29sdmUuIHdlIHRha2UgYWR2YW50YWdlIG9mIHRoZQorICAgICAgIG9ic2VydmF0aW9uIHRoYXQgaWYgdGhlcmUgaXMgYSBnYXRld2F5IGFkZHJlc3MgdGhlcmUgImF3YXlzIgorICAgICAgIHNlZW1zIHRvIGJlIGFuIFJUQV9EU1QgaW4gZnJvbnQgb2YgaXQgKi8KKyAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopKHJ0bSArIDEpOworICAgIHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNpbjsKKyAgICBpZiAoQUZfSU5FVCA9PSBzaW4tPnNpbl9mYW1pbHkpCisgICAgICByZXR1cm4gZmluZF9lZ3Jlc3NfaW50ZXJmYWNlKE5VTEwsKHN0cnVjdCBzb2NrYWRkciAqKShzaW4gKyAxKSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuIGZpbmRfZWdyZXNzX2ludGVyZmFjZShOVUxMLChzdHJ1Y3Qgc29ja2FkZHIgKikoc2luNiArIDEpKTsKKyAgfQorCisgIC8qIG9uY2UgYWdhaW4sIHdlIHRha2UgImFkdmFudGFnZSIgb2YgdGhlIGl0ZW0gb2YgaW50ZXJlc3QgImFsd2F5cyIKKyAgICAgYmVpbmcgdGhlIHNlY29uZCBpbiB0aGUgbGlzdC4gdGhlcmUgc2VlbSB0byBiZSB0d28gZGlzdGluY3QKKyAgICAgImNhbXBzIiBoZXJlIC0gaW4gb25lIGNhbXAgYXJlIEFJWCBhbmQgU29sYXJpcyAoYXQgbGVhc3QgNS4zIGFuZAorICAgICAxMCByZXNwZWN0aXZlbHkpIHdoaWNoIG9ubHkgcmVzb2x2ZSBhcyBmYXIgZG93biBhcyBhIGxvY2FsCisgICAgIGludGVyZmFjZSBJUCBhZGRyZXNzLiAgaW4gdGhlIG90aGVyIGNhbXAgYXJlIEhQLVVYIDExaXYzICgxMS4zMSkKKyAgICAgYW5kIEknbSBfZ3Vlc3NpbmdfIEJTRCBhbmQgT1NYLCB3aG8gYXJlIGtpbmQgZW5vdWdoIHRvIHRha2UKKyAgICAgdGhpbmdzIGRvd24gdG8gYW4gQUZfTElOSyBlbnRyeS4gKi8KKworICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopKHJ0bSArMSk7CisgIHNpbiA9IHNpbiArIDE7CisgIHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNpbjsKKworI2lmIGRlZmluZWQoTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHKQorICBwcmludGYoImFkZHJlc3MgdHdvICVwIGZhbWlseSAlZFxuIixzaW4sc2luLT5zaW5fZmFtaWx5KTsKKyNlbmRpZgorCisgIGlmIChBRl9JTkVUID09IHNpbi0+c2luX2ZhbWlseSkgeworICAgIHJldHVybiBmaW5kX2VncmVzc19pbnRlcmZhY2VfYnlfYWRkcigoc3RydWN0IHNvY2thZGRyICopc2luLDApOworICB9CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgZWxzZSBpZiAoQUZfSU5FVDYgPT0gc2luNi0+c2luNl9mYW1pbHkpIHsKKyAgICByZXR1cm4gZmluZF9lZ3Jlc3NfaW50ZXJmYWNlX2J5X2FkZHIoKHN0cnVjdCBzb2NrYWRkciAqKXNpbjYsMCk7CisgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoQUZfTElOSykKKyAgZWxzZSBpZiAoQUZfTElOSyA9PSBzaW4tPnNpbl9mYW1pbHkpIHsKKyAgICByZXR1cm4gZmluZF9lZ3Jlc3NfaW50ZXJmYWNlX2J5X2xpbmsoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKXNpbik7CisgIH0KKyNlbmRpZgorICBlbHNlCisgICAgcmV0dXJuIHN0cmR1cCgiTGFzdEhvcCBBRiIpOworfQorCisKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZGVzdGluYXRpb247CisgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworICBpbnQgcmV0OworICBjaGFyICplZ3Jlc3NfaWY7CisKKyAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZkZXN0aW5hdGlvbjsKKyAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoYXJndlsxXSk7CisgIHNpbi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBwcmludGYoImFkZHJlc3MgaXMgJXNcbiIsaW5ldF9udG9hKHNpbi0+c2luX2FkZHIpKTsKKyAgZWdyZXNzX2lmID0gZmluZF9lZ3Jlc3NfaW50ZXJmYWNlKE5VTEwsKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0aW5hdGlvbik7CisKKyAgcHJpbnRmKCJlZ3Jlc3MgaW50ZXJmYWNlICVwICVzXG4iLGVncmVzc19pZixlZ3Jlc3NfaWYpOworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldHJ0X3J0bmV0bGluay5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0cnRfcnRuZXRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1ZDNkNgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHJ0X3J0bmV0bGluay5jCkBAIC0wLDAgKzEsMjUwIEBACisjaWYgZGVmaW5lZChIQVZFX0NPTkZJR19IKQorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGJpdHMvc29ja2FkZHIuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworY2hhciAqCitmaW5kX2VncmVzc19pbnRlcmZhY2Uoc3RydWN0IHNvY2thZGRyICpzb3VyY2UsIHN0cnVjdCBzb2NrYWRkciAqZGVzdCkgeworCisgIHN0cnVjdCBzb2NrYWRkcl9ubCBtZSx0aGVtOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gICppbjQ7CisgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNjsKKworICBpbnQgaW50ZXJmYWNlX2luZGV4ID0gLTE7CisgIGNoYXIgaW50ZXJmYWNlX25hbWVbSUZfTkFNRVNJWkVdOworCisgIGludCBzOworCisgIC8qIHNvLCBpbiBvdXIgbXNnaGRyIHdlIHdpbGwgcHV0IHRoZSBhZGRyZXNzIGFuZCBhbiBpb3ZlYyBwb2ludGluZworICAgICB0byBvdXIgcmVxdWVzdC4gIHRoYXQgcmVxdWVzdCB3aWxsIGNvbnNpc3Qgb2YgYSBuZXRsaW5rIG1lc3NhZ2UKKyAgICAgaGVhZGVyLCBhIHJvdXRpbmcgbWVzc2FnZSBoZWFkZXIgYW5kIHNvbWUgcm91dGluZyBhdHRyaWJ1dGVzLgorICAgICB0aGUgY2hhbGljZSB3aXRoIHRoZSBwYWxhY2UgaG9sZHMgdGhlIHBlbGxldCB3aXRoIHRoZSBwb2lzb24sIHRoZQorICAgICB2ZXNzZWwgd2l0aCB0aGUgcGVzdGxlIGhvbGRzIHRoZSBicmV3IHdoaWNoIGlzIHRydWUuICBpIGd1ZXNzIGl0CisgICAgIHdvdWxkIGhhdmUgYmVlbiAidG9vIGVhc3kiIHRvIGp1c3QgaGF2ZSBhIHBsYWluIG9sZCBpb2N0bCB0aGF0CisgICAgIG9uZSBjYWxscyB0byBnZXQgdGhlIHJvdXRlIGZvciBhIGdpdmVuIGRlc3RpbmF0aW9uIGFuZAorICAgICBzb3VyY2UuLi4gcmFqIDIwMDgtMDItMTEgKi8KKworICBzdHJ1Y3QgbXNnaGRyIG1zZzsKKyAKKyAgc3RydWN0IGlvdmVjIGlvdjsKKyAKKyAgc3RydWN0IHsKKyAgICBzdHJ1Y3Qgbmxtc2doZHIgbmw7CisgICAgc3RydWN0IHJ0bXNnICAgIHJ0OworICAgIGNoYXIgICBidWZbMTAyNF07CisgIH0gcmVxdWVzdDsKKworICBjaGFyIHJlcGx5WzEwMjRdOworCisgIHN0cnVjdCBubG1zZ2hkciAqbmxwOworICBzdHJ1Y3QgcnRtc2cgKnJ0cDsKKyAgc3RydWN0IHJ0YXR0ciAqcnRhcDsKKyAgaW50IG5sbCxydGw7CisKKyAgaW50IHJldDsKKworICAvKiBjcmVhdGUgYW5kIGJpbmQgdGhlIG5ldGxpbmsgc29ja2V0ICovCisgIHMgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcsIE5FVExJTktfUk9VVEUpOworCisgIG1lbXNldCgmbWUsIDAsIHNpemVvZihtZSkpOworICBtZS5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworICBtZS5ubF9waWQgPSBnZXRwaWQoKTsKKworICAvKiBwcm9iYWJseSBzaG91bGQgYmUgY2hlY2tpbmcgYSByZXR1cm4gdmFsdWUuLi4gKi8KKyAgYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopJm1lLCBzaXplb2YobWUpKTsKKworICAvKiBjcmVhdGUgdGhlIG1lc3NhZ2Ugd2UgYXJlIGdvaW5nIHRvIHNlbmQgKi8KKworICBtZW1zZXQoJnJlcXVlc3QsIDAsIHNpemVvZihyZXF1ZXN0KSk7CisgIHJlcXVlc3Qubmwubmxtc2dfbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgcnRtc2cpKTsKKyAgcmVxdWVzdC5ubC5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1Q7CisgIHJlcXVlc3Qubmwubmxtc2dfdHlwZSA9IFJUTV9HRVRST1VURTsKKworICAvKiB0aW1lIHRvIGFkZCB0aGUgZGVzdGluYXRpb24gYXR0cmlidXRlIHRvIHRoZSByZXF1ZXN0ICovCisgIGlmIChkZXN0KSB7CisgICAgaW40ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWRlc3Q7CisgICAgaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilkZXN0OworICAgIHJlcXVlc3QucnQucnRtX2ZhbWlseSA9IGluNC0+c2luX2ZhbWlseTsKKyAgICBydGFwID0gKHN0cnVjdCBydGF0dHIgKilyZXF1ZXN0LmJ1ZjsKKyAgICBydGFwLT5ydGFfdHlwZSA9IFJUQV9EU1Q7CisgICAgaWYgKEFGX0lORVQgPT0gaW40LT5zaW5fZmFtaWx5KSB7CisgICAgICAvKiB3aGlsZSBhIHNpbl9hZGRyIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcyBpbiBsZW5ndGgsIHdlCisJIHNob3VsZCBzdGlsbCB1c2UgUlRBX1NQQUNFIHJhdGhlciB0aGFuIFJUQV9MRU5HVEguIGt1ZG9zIHRvCisJIFRob21hcyBHcmFmIGZvciBwb2ludGluZyB0aGF0IG91dCAqLworICAgICAgcnRhcC0+cnRhX2xlbiA9IFJUQV9TUEFDRShzaXplb2YoaW40LT5zaW5fYWRkcikpOworICAgICAgbWVtY3B5KFJUQV9EQVRBKHJ0YXApLCAmKGluNC0+c2luX2FkZHIpLCBzaXplb2YoaW40LT5zaW5fYWRkcikpOworICAgIH0KKyAgICBlbHNlIGlmIChBRl9JTkVUNiA9PSBpbjYtPnNpbjZfZmFtaWx5KSB7CisgICAgICBydGFwLT5ydGFfbGVuID0gUlRBX1NQQUNFKHNpemVvZihpbjYtPnNpbjZfYWRkcikpOworICAgICAgbWVtY3B5KFJUQV9EQVRBKHJ0YXApLCAmKGluNi0+c2luNl9hZGRyKSwgc2l6ZW9mKGluNi0+c2luNl9hZGRyKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmV0dXJuIHN0cmR1cCgiVW5rbm93bkFkZHJlc3NGYW1pbHkiKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogdGhlcmUgbXVzdCBhbHdheXMgYmUgYSBkZXN0aW5hdGlvbiAqLworICAgIHByaW50ZigiTm8gZGVzdGluYXRpb24gc3BlY2lmaWVkLlxuIik7CisgICAgcmV0dXJuIHN0cmR1cCgiTm9EZXN0aW5hdGlvbiIpOworICB9CisKKyAgLyogYWRkIHRoZSBsZW5ndGggb2Ygb3VyIHJlcXVlc3QgdG8gb3VyIG92ZXJhbGwgbWVzc2FnZSBsZW5ndGguIGl0CisgICAgIHNob3VsZCBhbHJlYWR5IGJlIHN1aXRhYmx5IHBhZGRlZCBieSB0aGUgcHJldmlvdXMgUlRBX1NQQUNFICovCisgIHJlcXVlc3Qubmwubmxtc2dfbGVuICs9IHJ0YXAtPnJ0YV9sZW47CisKKyAgLyogbm93IHRoZSBzcmMgKi8KKyAgaWYgKHNvdXJjZSkgeworICAgIC8qIHRoZSBzb3VyY2UgZ29lcyBhZnRlciB0aGUgZGVzdCwgc28gd2UgY2FuIGp1c3QgaW5jcmVtZW50IGJ5IHRoZQorICAgICAgIGN1cnJlbnQgdmFsdWUgb2YgcnRhX2xlbiAqLworICAgIGluNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzb3VyY2U7CisgICAgaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzb3VyY2U7CisKKyAgICAvKiBwb2ludGVyIG1hdGggaXMgZnVuLiAgc2lsbHkgbWUgaW5pdGlhbGx5IHRyaWVkIHRvIHRvIHJ0YXAgKz0KKyAgICAgICBydGFwLT5ydGFfbGVuIGJ1dCBzaW5jZSBydGFwIGlzbid0IHBvaW50aW5nIGF0IGJ5dGVzLi4uIGFnYWluCisgICAgICAga3Vkb3MgdG8gVGhvbWFzIEdyYWYgZm9yIGZpbmRpbmcgdGhhdCBtaXN0YWtlICovCisgICAgcnRhcCA9IChzdHJ1Y3QgcnRhdHRyICopKChjaGFyICopcnRhcCArIChydGFwLT5ydGFfbGVuKSk7CisgICAgcnRhcC0+cnRhX3R5cGUgPSBSVEFfU1JDOworICAgIGlmIChBRl9JTkVUID09IGluNC0+c2luX2ZhbWlseSkgeworICAgICAgcnRhcC0+cnRhX2xlbiA9IFJUQV9TUEFDRShzaXplb2YoaW40LT5zaW5fYWRkcikpOworICAgICAgbWVtY3B5KFJUQV9EQVRBKHJ0YXApLCAmKGluNC0+c2luX2FkZHIpLCBzaXplb2YoaW40LT5zaW5fYWRkcikpOworICAgIH0KKyAgICBlbHNlIGlmIChBRl9JTkVUNiA9PSBpbjYtPnNpbjZfZmFtaWx5KSB7CisgICAgICBydGFwLT5ydGFfbGVuID0gUlRBX1NQQUNFKHNpemVvZihpbjYtPnNpbjZfYWRkcikpOworICAgICAgbWVtY3B5KFJUQV9EQVRBKHJ0YXApLCAmKGluNi0+c2luNl9hZGRyKSwgc2l6ZW9mKGluNi0+c2luNl9hZGRyKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmV0dXJuIHN0cmR1cCgiVW5rbm93bkFkZHJlc3NGYW1pbHkiKTsKKyAgICB9CisgICAgIAorCisgICAgLyogYWRkIHRoZSBsZW5ndGggb2YgdGhlIGp1c3QgYWRkZWQgYXR0cmlidXRlIHRvIHRoZSBvdmVyYWxsCisgICAgIG1lc3NhZ2UgbGVuZ3RoLiBpdCBzaG91bGQgYWxyZWFkeSBiZSBzdWl0YWJseSBwYWRkZWQgYnkgdGhlCisgICAgIHByZXZpb3VzIFJUQV9TUEFDRSAqLworICAgIHJlcXVlc3Qubmwubmxtc2dfbGVuICs9IHJ0YXAtPnJ0YV9sZW47CisgIH0KKyAgCisgIC8qIGFkZHJlc3MgaXQgKi8KKyAgbWVtc2V0KCZ0aGVtLCAwLCBzaXplb2YodGhlbSkpOworICB0aGVtLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisKKyAgbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKyAgbXNnLm1zZ19uYW1lID0gKHZvaWQgKikmdGhlbTsKKyAgbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHRoZW0pOworCisgIGlvdi5pb3ZfYmFzZSA9ICh2b2lkICopICZyZXF1ZXN0Lm5sOworICBpb3YuaW92X2xlbiAgPSByZXF1ZXN0Lm5sLm5sbXNnX2xlbjsKKworICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgIG1zZy5tc2dfaW92bGVuID0gMTsKKworICAvKiBzZW5kIGl0ICovCisgIHJldCA9IHNlbmRtc2cocywgJm1zZywgMCk7CisKKyAgaWYgKHJldCA8IDApIHsKKyAgICByZXR1cm4gc3RyZHVwKCJTZW5kbXNnRmFpbHVyZSIpOworICB9CisKKyAgbWVtc2V0KHJlcGx5LDAsc2l6ZW9mKHJlcGx5KSk7CisgIHJldCA9IHJlY3YocywgcmVwbHksIHNpemVvZihyZXBseSksIDApOworICAKKyAgaWYgKHJldCA8IDApIHsKKyAgICByZXR1cm4gc3RyZHVwKCJSZWN2bXNnRmFpbHVyZSIpOworICB9CisKKyAgbmxsID0gcmV0OworCisgIC8qIFNpbmNlIHdlIGFyZSBsb29raW5nIGZvciBhIHNpbmdsZSByb3V0ZSwgb25lIGhhcyB0byB3b25kZXIgaWYKKyAgICAgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LCBidXQgc2luY2UgYWxsIHRoZSBleGFtcGxlcyBJIGNvdWxkIGZpbmQKKyAgICAgc2VlbWVkIHRvIGJlIGRvaW5nIGl0LCBJJ2xsIHNpbXBseSBmb2xsb3cgYWxvbmcuIHJhagorICAgICAyMDA4LTAyLTExICovCisKKyAgZm9yIChubHAgPSAoc3RydWN0IG5sbXNnaGRyICopcmVwbHk7CisgICAgICAgTkxNU0dfT0sobmxwLG5sbCk7CisgICAgICAgbmxwID0gTkxNU0dfTkVYVChubHAsIG5sbCkpIHsKKyAgICAvKiB3aGVyZSBvaCB3aGVyZSBtaWdodCB0aGUgcm91dGUgaGVhZGVyIGJlPyAqLworICAgIHJ0cCA9IChzdHJ1Y3QgcnRtc2cgKikgTkxNU0dfREFUQShubHApOworCisjaWYgMAorICAgIC8qIHdlIHdpbGwgYXNzLXUtbWUgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiByZXN1bHRzIGZvciB0aGUgbWFpbgorICAgICAgIHJvdXRpbmcgdGFibGUgKi8KKyAgICBpZiAoUlRfVEFCTEVfTUFJTiAhPSBydHAtPnJ0bV90YWJsZSkgeworICAgICAgcHJpbnRmKCJza2lwcGluZyB0YWJsZSAlZFxuIixydHAtPnJ0bV90YWJsZSk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisjZW5kaWYgCisKKyAgICBmb3IgKHJ0YXAgPSAoc3RydWN0IHJ0YXR0ciAqKSBSVE1fUlRBKHJ0cCksIHJ0bCA9IFJUTV9QQVlMT0FEKG5scCk7CisJIFJUQV9PSyhydGFwLCBydGwpOworCSBydGFwID0gUlRBX05FWFQocnRhcCxydGwpKSB7CisgICAgICBpZiAoUlRBX09JRiA9PSBydGFwLT5ydGFfdHlwZSkgeworCWlmICgtMSA9PSBpbnRlcmZhY2VfaW5kZXgpeworCSAgaW50ZXJmYWNlX2luZGV4ID0gKigoaW50ICopIFJUQV9EQVRBKHJ0YXApKTsKKwl9CisJZWxzZSB7CisJICBwcmludGYoIkZvdW5kIGEgc2Vjb25kIGludGVyZmFjZSBpbmRleCwgd2hpY2ggd2FzIG5vdCBleHBlY3RlZCFcbiIpOworCSAgcmV0dXJuIHN0cmR1cCgiTXVsdGlwbGVJbnRlcmZhY2VzRm91bmQiKTsKKwl9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGludGVyZmFjZV9pbmRleCA9PSAtMSkgeworICAgIC8qIHdlIGRpZG4ndCBmaW5kIGl0ICovCisgICAgcmV0dXJuIHN0cmR1cCgiSW50ZXJmYWNlTm90Rm91bmQiKTsKKyAgfQorICBlbHNlIHsKKyAgICBpZiAoTlVMTCA9PSBpZl9pbmRleHRvbmFtZShpbnRlcmZhY2VfaW5kZXgsaW50ZXJmYWNlX25hbWUpKSB7CisgICAgICByZXR1cm4gc3RyZHVwKCJJZkluZGV4VG9OYW1lRmFpbHVyZSIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJldHVybiBzdHJkdXAoaW50ZXJmYWNlX25hbWUpOworICAgIH0KKyAgfQorfQorI2lmIGRlZmluZWQoTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHKQoraW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzb3VyY2UsZGVzdGluYXRpb247CisgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworICBpbnQgcmV0OworICBjaGFyICplZ3Jlc3NfaWY7CisKKyAgaWYgKChhcmdjIDwgMikgfHwgKGFyZ2MgPiAzKSkgeworICAgIGZwcmludGYoc3RkZXJyLCIlcyA8ZGVzdElQPiBbc3JjaXBdXG4iLGFyZ3ZbMF0pOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmZGVzdGluYXRpb247CisgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNpbi0+c2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKGFyZ3ZbMV0pOworCisgIHByaW50ZigiZGVzdGluYXRpb24gYWRkcmVzcyBpcyAlc1xuIixpbmV0X250b2Eoc2luLT5zaW5fYWRkcikpOworCisgIHNpbiA9IE5VTEw7CisKKyAgaWYgKGFyZ2MgPT0gMykgeworICAgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmc291cmNlOworICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoYXJndlsyXSk7CisgIH0KKworICBlZ3Jlc3NfaWYgPSBmaW5kX2VncmVzc19pbnRlcmZhY2UoKHN0cnVjdCBzb2NrYWRkciAqKXNpbiwoc3RydWN0IHNvY2thZGRyICopJmRlc3RpbmF0aW9uKTsKKworICBwcmludGYoImVncmVzcyBpbnRlcmZhY2UgJXAgJXNcbiIsZWdyZXNzX2lmLGVncmVzc19pZik7CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2VjX2xpbnV4LmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzZWNfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTMzYjM4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2VjX2xpbnV4LmMKQEAgLTAsMCArMSwxNDggQEAKKyNpZiBkZWZpbmVkKEhBVkVfQ09ORklHX0gpCisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9TVFJJTkdfSCkKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8ZGxmY24uaD4KKwordm9pZCAqbWVzc2lhaDsgIC8qIEhhbmRlbCdzLi4uICovCisKKy8qIGZvciB0aGUgTlNFQ19tdW1ibGUgZGVmaW5lcyAqLworI2luY2x1ZGUgIm5ldGxpYi5oIgorCisKK3ZvaWQKK2ZpbmRfc2VjdXJpdHlfaW5mb19zZWxpbnV4KGludCAqZW5hYmxlZCwgaW50ICp0eXBlLCBjaGFyICoqc3BlY2lmaWMpeworCisgIGludCByZXQ7CisgIGludCBlbmZvcmNpbmc7CisKKyAgLyogYXQgc29tZSBwb2ludCB3ZSBzaG91bGQgcHJvYmFibHkgZ2V0IHRoZXNlIGZyb20KKyAgICAgc2VsaW51eC9zZWxpbnV4Lmg/ICovCisgIGludCAoKmdldGVuZm9yY2UpKGludCAqKTsKKyAgaW50ICgqZ2V0cG9saWN5KShjaGFyICoqKTsKKworICAqZW5hYmxlZCA9IE5TRUNfVU5LTk9XTjsKKyAgKnR5cGUgICAgPSBOU0VDX1RZUEVfU0VMSU5VWDsKKworICBnZXRlbmZvcmNlID0gZGxzeW0obWVzc2lhaCwgInNlbGludXhfZ2V0ZW5mb3JjZW1vZGUiKTsKKyAgaWYgKE5VTEwgPT0gZ2V0ZW5mb3JjZSkgeworICAgIGRsY2xvc2UobWVzc2lhaCk7CisgICAgKnNwZWNpZmljID0gc3RyZHVwKCJubyBnZXRlbmZvcmNlbW9kZSIpOworICAgIHJldHVybjsKKyAgfQorCisgIHJldCA9ICgqZ2V0ZW5mb3JjZSkoJmVuZm9yY2luZyk7CisjaWYgZGVmaW5lZChORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcpCisgIHByaW50ZigiYWZ0ZXIgc2VsaW51eF9nZXRlbmZvcmNlbW9kZSgpIHJldCBpcyAlZFxuIixyZXQpOworI2VuZGlmCisKKyAgc3dpdGNoKGVuZm9yY2luZykgeworICBjYXNlIC0xOiAKKyAgICAqZW5hYmxlZCA9IE5TRUNfRElTQUJMRUQ7CisgICAgYnJlYWs7CisgIGNhc2UgMDoKKyAgICAqZW5hYmxlZCA9IE5TRUNfUEVSTUlTU0lWRTsKKyAgICBicmVhazsKKyAgY2FzZSAxOgorICAgICplbmFibGVkID0gTlNFQ19FTkZPUkNJTkc7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgKmVuYWJsZWQgPSBOU0VDX1VOS05PV047CisgIH0KKyAgICAKKyAgZ2V0cG9saWN5ID0gZGxzeW0obWVzc2lhaCwgInNlbGludXhfZ2V0cG9saWN5dHlwZSIpOworICBpZiAoTlVMTCA9PSBnZXRwb2xpY3kpIHsKKyAgICBkbGNsb3NlKG1lc3NpYWgpOworICAgICpzcGVjaWZpYyA9IHN0cmR1cCgibm8gZ2V0cG9saWN5dHlwZSIpOworICAgIHJldHVybjsKKyAgfQorCisgIHJldCA9ICgqZ2V0cG9saWN5KShzcGVjaWZpYyk7CisjaWYgZGVmaW5lZChORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcpCisgIHByaW50ZigiYWZ0ZXIgc2VsaW51eF9nZXRwb2xpY3l0eXBlIHJldCBpcyAlZFxuIixyZXQpOworI2VuZGlmCisKKyAgcmV0dXJuOworfQorCisvKiBwcmVzZW50bHkgd2Ugb25seSBrbm93IGFib3V0IFNFTGludXggb3Igbm90aGluZy4gYXQgc29tZSBwb2ludCB3ZQorICAgcHJvYmFibHkgbmVlZCB0byBsZWFybiBhYm91dCBBcHBBcm1vciBhbmQgdGhlIGxpa2UuICByYWoKKyAgIDIwMDgxMDIwICovCisKK3ZvaWQKK2ZpbmRfc2VjdXJpdHlfaW5mbyhpbnQgKmVuYWJsZWQsIGludCAqdHlwZSwgY2hhciAqKnNwZWNpZmljKSB7CisKKyAgLyogZmlyc3QsIG1pZ2h0IGl0IGJlIHNlbGludXg/ICovCisgIG1lc3NpYWggPSBkbG9wZW4oImxpYnNlbGludXguc28iLCBSVExEX0xBWlkpOworICBpZiAoTlVMTCAhPSBtZXNzaWFoKSB7CisgICAgZGxlcnJvcigpOworICAgIHJldHVybiBmaW5kX3NlY3VyaXR5X2luZm9fc2VsaW51eChlbmFibGVkLCB0eXBlLCBzcGVjaWZpYyk7CisgIH0KKyAgZWxzZSB7CisgICAgKmVuYWJsZWQgPSBOU0VDX1VOS05PV047CisgICAgKnR5cGUgPSBOU0VDX1RZUEVfVU5LTk9XTjsKKyAgICAqc3BlY2lmaWMgPSAidW5rbm93biI7CisgICAgcmV0dXJuOworICB9Cit9CisKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKKworLyogdGhlc2UgYXJlIG5vcm1hbGx5IGZvdW5kIGluIHNyYy9uZXRsaWIuYyBidXQgd2UgcHV0IGNvcGllcyBoZXJlIGZvcgorICAgdGhlIG5lZmFpb3VzIHBvcG9pc2Ugb2Ygc3RhbmRhbG9uZSBkZWJ1Z2dpbmcgKi8KKworY2hhciAqCituc2VjX2VuYWJsZWRfdG9fc3RyKGludCBlbmFibGVkKSB7CisgIHN3aXRjaCAoZW5hYmxlZCkgeworICBjYXNlIE5TRUNfVU5LTk9XTjoKKyAgICByZXR1cm4oIlVua25vd24iKTsKKyAgY2FzZSBOU0VDX0RJU0FCTEVEOgorICAgIHJldHVybigiRGlzYWJsZWQiKTsKKyAgY2FzZSBOU0VDX1BFUk1JU1NJVkU6CisgICAgcmV0dXJuKCJQZXJtaXNzaXZlIik7CisgIGNhc2UgTlNFQ19FTkZPUkNJTkc6CisgICAgcmV0dXJuKCJFbmZvcmNpbmciKTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4oIlVOS05PV04gTU9ERSIpOworICB9Cit9CisKK2NoYXIgKiBuc2VjX3R5cGVfdG9fc3RyKGludCB0eXBlKSB7CisgIHN3aXRjaCAodHlwZSkgeworICBjYXNlIE5TRUNfVFlQRV9VTktOT1dOOgorICAgIHJldHVybigiVW5rbm93biIpOworICBjYXNlIE5TRUNfVFlQRV9TRUxJTlVYOgorICAgIHJldHVybigiU0VMaW51eCIpOworICBkZWZhdWx0OgorICAgIHJldHVybigiVU5LTk9XTiBUWVBFIik7CisgIH0KK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKworICBjaGFyICpzcGVjaWZpYzsKKyAgaW50IGVuYWJsZWQ7CisgIGludCB0eXBlOworCisgIGZpbmRfc2VjdXJpdHlfaW5mbygmZW5hYmxlZCwgJnR5cGUsICZzcGVjaWZpYyk7CisKKyAgcHJpbnRmKCJTZWN1cml0eSBpbmZvOiBlbmFibGVkICVzICglZCkgdHlwZSAlcyAoMHgleCkgc3BlY2lmaWMgJXNcbiIsCisJIG5zZWNfZW5hYmxlZF90b19zdHIoZW5hYmxlZCksCisJIGVuYWJsZWQsCisJIG5zZWNfdHlwZV90b19zdHIodHlwZSksCisJIHR5cGUsCisJIHNwZWNpZmljKTsKKworICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2VjX25vbmUuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHNlY19ub25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2ZDc2NwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHNlY19ub25lLmMKQEAgLTAsMCArMSwzNyBAQAorI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NUUklOR19IKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIm5ldGxpYi5oIgorCit2b2lkCitmaW5kX3NlY3VyaXR5X2luZm8oaW50ICplbmFibGVkLCBpbnQgKnR5cGUsIGNoYXIgKipzcGVjaWZpYyl7CisgICplbmFibGVkID0gTlNFQ19VTktOT1dOOworICAqdHlwZSAgICA9IE5TRUNfVFlQRV9VTktOT1dOOworICAqc3BlY2lmaWMgPSBzdHJkdXAoIk4vQSIpOworICByZXR1cm47Cit9CisKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisKKyAgY2hhciAqc3BlY2lmaWM7CisgIGludCBlbmFibGVkOworICBpbnQgdHlwZTsKKworICBmaW5kX3NlY3VyaXR5X2luZm8oJmVuYWJsZWQsICZ0eXBlLCAmc3BlY2lmaWMpOworCisgIHByaW50ZigiU2VjdXJpdHkgaW5mbzogZW5hYmxlZCAlZCB0eXBlIDB4JXggc3BlY2lmaWMgJXNcbiIsCisJIGVuYWJsZWQsCisJIHR5cGUsCisJIHNwZWNpZmljKTsKKworICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2VydmVyLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTcwNTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2VydmVyLmMKQEAgLTAsMCArMSwxMDkwIEBACisvKgorIAorCSAgIENvcHlyaWdodCAoQykgMTk5My0yMDA3IEhld2xldHQtUGFja2FyZCBDb21wYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgQUxMIFJJR0hUUyBSRVNFUlZFRC4KKyAKKyAgVGhlIGVuY2xvc2VkIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGluY2x1ZGVzIGNvcHlyaWdodGVkIHdvcmtzCisgIG9mIEhld2xldHQtUGFja2FyZCBDby4gRm9yIGFzIGxvbmcgYXMgeW91IGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcKKyAgbGltaXRhdGlvbnMsIHlvdSBhcmUgaGVyZWJ5IGF1dGhvcml6ZWQgdG8gKGkpIHVzZSwgcmVwcm9kdWNlLCBhbmQKKyAgbW9kaWZ5IHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiwgYW5kIHRvIChpaSkgZGlzdHJpYnV0ZSB0aGUKKyAgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBtb2RpZmljYXRpb25zLCBmb3IKKyAgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgb25seS4KKyAgICAgIAorICAxLiAgVGhlIGVuY2xvc2VkIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGF0IG5vCisgICAgICBjaGFyZ2UgaW4gb3JkZXIgdG8gYWR2YW5jZSB0aGUgZ2VuZXJhbCBkZXZlbG9wbWVudCBvZgorICAgICAgaGlnaC1wZXJmb3JtYW5jZSBuZXR3b3JraW5nIHByb2R1Y3RzLgorIAorICAyLiAgWW91IG1heSBub3QgZGVsZXRlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgaW4gdGhlCisgICAgICBzb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uLiBBbGwgaGFyZCBjb3BpZXMsIGFuZCBjb3BpZXMgaW4KKyAgICAgIHNvdXJjZSBjb2RlIG9yIG9iamVjdCBjb2RlIGZvcm0sIG9mIHRoZSBzb2Z0d2FyZSBvcgorICAgICAgZG9jdW1lbnRhdGlvbiAoaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMpIG11c3QgY29udGFpbiBhdCBsZWFzdAorICAgICAgb25lIG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlcy4KKyAKKyAgMy4gIFRoZSBlbmNsb3NlZCBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBoYXMgbm90IGJlZW4gc3ViamVjdGVkCisgICAgICB0byB0ZXN0aW5nIGFuZCBxdWFsaXR5IGNvbnRyb2wgYW5kIGlzIG5vdCBhIEhld2xldHQtUGFja2FyZCBDby4KKyAgICAgIHByb2R1Y3QuIEF0IGEgZnV0dXJlIHRpbWUsIEhld2xldHQtUGFja2FyZCBDby4gbWF5IG9yIG1heSBub3QKKyAgICAgIG9mZmVyIGEgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXMgYSBwcm9kdWN0LgorICAKKyAgNC4gIFRIRSBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMiLgorICAgICAgSEVXTEVUVC1QQUNLQVJEIENPTVBBTlkgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBVU0UsCisgICAgICBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFNPRlRXQVJFIE9SCisgICAgICBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEEgVEhJUkQgUEFSVFknUyBJTlRFTExFQ1RVQUwKKyAgICAgIFBST1BFUlRZIFJJR0hUUy4gSFAgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBPUgorICAgICAgRE9DVU1FTlRBVElPTiBJUyBFUlJPUiBGUkVFLiBIUCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCisgICAgICBFWFBSRVNTIEFORCBJTVBMSUVELCBXSVRIIFJFR0FSRCBUTyBUSEUgU09GVFdBUkUgQU5EIFRIRQorICAgICAgRE9DVU1FTlRBVElPTi4gSFAgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBPRgorICAgICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgCisgIDUuICBIRVdMRVRULVBBQ0tBUkQgQ09NUEFOWSBXSUxMIE5PVCBJTiBBTlkgRVZFTlQgQkUgTElBQkxFIEZPUiBBTlkKKyAgICAgIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAgICAoSU5DTFVESU5HIExPU1QgUFJPRklUUykgUkVMQVRFRCBUTyBBTlkgVVNFLCBSRVBST0RVQ1RJT04sCisgICAgICBNT0RJRklDQVRJT04sIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KKyAKKyovCisKKyNpbmNsdWRlICJuZXRwZXJmX3ZlcnNpb24uaCIKKworY2hhcgluZXRzZXJ2ZXJfaWRbXT0iXAorQCgjKW5ldHNlcnZlci5jIChjKSBDb3B5cmlnaHQgMTk5My0yMDA3IEhld2xldHQtUGFja2FyZCBDby4gVmVyc2lvbiAyLjQuMyI7CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyoJCQkJCQkJCQkqLworIC8qCW5ldHNlcnZlci5jCQkJCQkJCSovCisgLyoJCQkJCQkJCQkqLworIC8qCVRoaXMgaXMgdGhlIHNlcnZlciBzaWRlIGNvZGUgZm9yIHRoZSBuZXRwZXJmIHRlc3QgcGFja2FnZS4gSXQJKi8KKyAvKiB3aWxsIG9wZXJhdGUgZWl0aGVyIHN0YW5kLWFsb25lLCBvciBhcyBhIGNoaWxkIG9mIGluZXRkLiBJbiB0aGlzCSovCisgLyogd2F5LCB3ZSBpbnN1cmUgdGhhdCBpdCBjYW4gYmUgaW5zdGFsbGVkIG9uIHN5c3RlbXMgd2l0aCBvciB3aXRob3V0CSovCisgLyogcm9vdCBwZXJtaXNzaW9ucyAoZWRpdGluZyBpbmV0ZC5jb25mKS4gRXNzZW50aWFsbHksIHRoaXMgY29kZSBpcwkqLworIC8qIHRoZSBhbmFsb2cgdG8gdGhlIG5ldHNoLmMgY29kZS4JCQkJCSovCisgLyoJCQkJCQkJCQkqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoJCQkJCQkJCQkqLworLyoJR2xvYmFsIGluY2x1ZGUgZmlsZXMJCQkJCQkqLworLyoJCQkJCQkJCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2lmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX0xJTUlUU19ICisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisjaWYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fVk1TKSAmJiAhZGVmaW5lZChNU0RPUykKKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisjZW5kaWYgLyogIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKF9fVk1TKSAmJiAhZGVmaW5lZChNU0RPUykgKi8KKyNpbmNsdWRlIDxmY250bC5oPgorI2lmZGVmIFdJTjMyCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZGVmaW5lIG5ldHBlcmZfc29ja2xlbl90IHNvY2tsZW5fdAorLyogd2UgbmVlZCB0byBmaW5kIHNvbWUgb3RoZXIgd2F5IHRvIGRlY2lkZSB0byBpbmNsdWRlIHdzMiAqLworLyogaWYgeW91IGFyZSB0cnlpbmcgdG8gY29tcGlsZSBvbiBXaW5kb3dzIDIwMDAgb3IgTlQgNCB5b3Ugd2lsbCAqLworLyogcHJvYmFibHkgaGF2ZSB0byBkZWZpbmUgRE9OVF9JUFY2ICovCisjaWZuZGVmIERPTlRfSVBWNgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYgIC8qIERPTlRfSVBWNiAqLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgc3RyZHVwIF9zdHJkdXAKKyNkZWZpbmUgc2xlZXAoeCkgU2xlZXAoKHgpKjEwMDApCisjZWxzZQorI2lmbmRlZiBNUEUKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmIC8qIE1QRSAqLworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmbmRlZiBET05UX1dBSVQKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2VuZGlmIC8qIERPTlRfV0FJVCAqLworI2VuZGlmIC8qIFdJTjMyICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX19WTVMKKyNpbmNsdWRlIDx0Y3BpcCRpbmV0ZGVmLmg+IAorI2luY2x1ZGUgPHVuaXhpby5oPiAKKyNlbmRpZiAvKiBfX1ZNUyAqLworI2luY2x1ZGUgIm5ldGxpYi5oIgorI2luY2x1ZGUgIm5ldHRlc3RfYnNkLmgiCisKKyNpZmRlZiBXQU5UX1VOSVgKKyNpbmNsdWRlICJuZXR0ZXN0X3VuaXguaCIKKyNlbmRpZiAvKiBXQU5UX1VOSVggKi8KKworI2lmZGVmIFdBTlRfRExQSQorI2luY2x1ZGUgIm5ldHRlc3RfZGxwaS5oIgorI2VuZGlmIC8qIFdBTlRfRExQSSAqLworCisjaWZkZWYgV0FOVF9TQ1RQCisjaW5jbHVkZSAibmV0dGVzdF9zY3RwLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIm5ldHNoLmgiCisKKyNpZm5kZWYgREVCVUdfTE9HX0ZJTEUKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgREVCVUdfTE9HX0ZJTEUgIi90bXAvbmV0cGVyZi5kZWJ1ZyIKKyNlbHNlCisjZGVmaW5lIERFQlVHX0xPR19GSUxFICJjOlxcdGVtcFxcbmV0cGVyZi5kZWJ1ZyIKKyNlbmRpZiAgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBERUJVR19MT0dfRklMRSAqLworCisgLyogc29tZSBnbG9iYWwgdmFyaWFibGVzICovCisKK0ZJTEUJKmFmcDsKK2NoYXIgICAgbGlzdGVuX3BvcnRbMTBdOworZXh0ZXJuCWNoYXIJKm9wdGFyZzsKK2V4dGVybglpbnQJb3B0aW5kLCBvcHRlcnI7CisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgU0VSVkVSX0FSR1MgImRMOm46cDp2OlY0NiIKKyNlbHNlCisjZGVmaW5lIFNFUlZFUl9BUkdTICJkTDpuOnA6djpWNDZJOmk6IgorI2VuZGlmCisKKy8qIHBlcmhhcHMgb25lIGRheSB3ZSB3aWxsIHVzZSB0aGlzIGFzIHBhcnQgb2Ygb25seSBvcGVuaW5nIGEgZGVidWcKKyAgIGxvZyBmaWxlIGlmIGRlYnVnIGlzIHNldCwgb2YgY291cnNlIHdlIGhhdmUgdG8gYmUgd2FyeSBvZiB0aGUgYmFzZQorICAgdXNlIG9mICJ3aGVyZSIgYW5kIHNvIHByb2JhYmx5IGFsd2F5cyBuZWVkICJ3aGVyZSIgcG9pbnRpbmcKKyAgICJzb21ld2hlcmUiIG9yIG90aGVyLiAqLwordm9pZAorb3Blbl9kZWJ1Z19maWxlKCkgCit7CisjaWZuZGVmIFdJTjMyCisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYIE1BWF9QQVRICisjZW5kaWYKKyAgY2hhciBGaWxlTmFtZVtQQVRIX01BWF07ICAgLyogZm9yIG9wZW5pbmcgdGhlIGRlYnVnIGxvZyBmaWxlICovCisgIHN0cmNweShGaWxlTmFtZSwgREVCVUdfTE9HX0ZJTEUpOworCisgIGlmICh3aGVyZSAhPSBOVUxMKSBmZmx1c2god2hlcmUpOworCisgIHNucHJpbnRmKCZGaWxlTmFtZVtzdHJsZW4oRmlsZU5hbWUpXSwgc2l6ZW9mKEZpbGVOYW1lKSAtIHN0cmxlbihGaWxlTmFtZSksICJfJWQiLCBnZXRwaWQoKSk7CisgIGlmICgod2hlcmUgPSBmb3BlbihGaWxlTmFtZSwgInciKSkgPT0gTlVMTCkgeworICAgIHBlcnJvcigibmV0c2VydmVyOiBkZWJ1ZyBmaWxlIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGNobW9kKEZpbGVOYW1lLDA2NDQpOworI2VuZGlmCisKK30KKyAvKiBUaGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgIm1haW4gZXZlbnQgbG9vcCIgb2YgdGhlIG5ldHBlcmYJKi8KKyAvKiBzZXJ2ZXIgY29kZS4gQ29kZSBhYm92ZSBpdCB3aWxsIGhhdmUgc2V0LXVwIHRoZSBjb250cm9sIGNvbm5lY3Rpb24JKi8KKyAvKiBzbyBpdCBjYW4ganVzdCBtZXJyaWx5IGdvIGFib3V0IGl0cyBidXNpbmVzcywgd2hpY2ggaXMgdG8JCSovCisgLyogInNjaGVkdWxlIiBwZXJmb3JtYW5jZSB0ZXN0cyBvbiB0aGUgc2VydmVyLgkJCQkqLworCit2b2lkIAorcHJvY2Vzc19yZXF1ZXN0cygpCit7CisgIAorICBmbG9hdAl0ZW1wX3JhdGU7CisgIAorICBpZiAoZGVidWcpICAgIG9wZW5fZGVidWdfZmlsZSgpOworCisKKyAgd2hpbGUgKDEpIHsKKyAgICByZWN2X3JlcXVlc3QoKTsKKworICAgIHN3aXRjaCAobmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlKSB7CisgICAgICAKKyAgICBjYXNlIERFQlVHX09OOgorICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBERUJVR19PSzsKKyAgICAgIC8qICBkdW1wX3JlcXVlc3QgYWxyZWFkeSBwcmVzZW50IGluIHJlY3ZfcmVxdWVzdDsgcmVkdW5kYW50PyAqLworICAgICAgaWYgKCFkZWJ1ZykgeworCWRlYnVnKys7CisJb3Blbl9kZWJ1Z19maWxlKCk7CisJZHVtcF9yZXF1ZXN0KCk7CisgICAgICB9CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgREVCVUdfT0ZGOgorICAgICAgaWYgKGRlYnVnKQorCWRlYnVnLS07CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IERFQlVHX09LOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgLyogK1NBRiB3aHk/Pz8gKi8KKyAgICAgIGlmICghZGVidWcpIAorICAgICAgeworCWZjbG9zZSh3aGVyZSk7CisjaWYgIWRlZmluZWQoV0lOMzIpICYmICFkZWZpbmVkKE1QRSkgJiYgIWRlZmluZWQoX19WTVMpICYmICFkZWZpbmVkKE1TRE9TKQorCS8qIEZvciBVbml4OiByZW9wZW4gdGhlIGRlYnVnIHdyaXRlIGZpbGUgZGVzY3JpcHRvciB0byAiL2Rldi9udWxsIiAqLworCS8qIGFuZCByZWRpcmVjdCBzdGRvdXQgdG8gaXQuCQkJCQkgICAqLworCWZmbHVzaCAoc3Rkb3V0KTsKKwl3aGVyZSA9IGZvcGVuICgiL2Rldi9udWxsIiwgInciKTsKKwlpZiAod2hlcmUgPT0gTlVMTCkKKwl7CisJICBwZXJyb3IgKCJuZXRzZXJ2ZXI6IHJlb3BlbmluZyBkZWJ1ZyBmcCBmb3Igd3JpdGluZzogL2Rldi9udWxsIik7CisJICBleGl0ICAgKDEpOworCX0KKwlpZiAoY2xvc2UgKFNURE9VVF9GSUxFTk8pID09IC0xKQorCXsKKwkgIHBlcnJvciAoIm5ldHNlcnZlcjogY2xvc2luZyBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yIik7CisJICBleGl0ICAgKDEpOworCX0KKwlpZiAoZHVwIChmaWxlbm8gKHdoZXJlKSkgID09IC0xKQorCXsKKwkgIHBlcnJvciAoIm5ldHNlcnZlcjogZHVwbGljYXRlIC9kZXYvbnVsbCB3cml0ZSBmaWxlIGRlc2NyLiB0byBzdGRvdXQiKTsKKwkgIGV4aXQgICAoMSk7CisJfQorI2VuZGlmIC8qICFXSU4zMiAhTVBFICFfX1ZNUyAhTVNET1MgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBET19TWVNJTkZPOgorICAgICAgeworCWNoYXIgKmRlbGltc1s0XTsKKwlpbnQgaTsKKwlkZWxpbXNbMF0gPSBzdHJkdXAoInwiKTsKKwlkZWxpbXNbMV0gPSBzdHJkdXAoIiwiKTsKKwlkZWxpbXNbMl0gPSBzdHJkdXAoIl8iKTsKKwlkZWxpbXNbM10gPSBzdHJkdXAoIjsiKTsKKwkKKwluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IFNZU0lORk9fUkVTUE9OU0U7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCSAgaWYgKCghc3Ryc3RyKGxvY2FsX3N5c25hbWUsZGVsaW1zW2ldKSkgJiYKKwkgICAgICAoIXN0cnN0cihsb2NhbF9yZWxlYXNlLGRlbGltc1tpXSkpICYmCisJICAgICAgKCFzdHJzdHIobG9jYWxfbWFjaGluZSxkZWxpbXNbaV0pKSAmJgorCSAgICAgICghc3Ryc3RyKGxvY2FsX3ZlcnNpb24sZGVsaW1zW2ldKSkpIHsKKwkgICAgc25wcmludGYoKGNoYXIgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhLAorCQkgICAgIHNpemVvZihuZXRwZXJmX3Jlc3BvbnNlKSAtIDcsCisJCSAgICAgIiVjJXMlYyVzJWMlcyVjJXMiLAorCQkgICAgIGRlbGltc1tpXVswXSwKKwkJICAgICBsb2NhbF9zeXNuYW1lLAorCQkgICAgIGRlbGltc1tpXVswXSwKKwkJICAgICBsb2NhbF9yZWxlYXNlLAorCQkgICAgIGRlbGltc1tpXVswXSwKKwkJICAgICBsb2NhbF9tYWNoaW5lLAorCQkgICAgIGRlbGltc1tpXVswXSwKKwkJICAgICBsb2NhbF92ZXJzaW9uKTsKKwkgICAgYnJlYWs7CisJICB9CisJfQorCWlmIChpID09IDQpIHsKKwkgIC8qIG5vbmUgb2YgdGhlIGRlbGltaXRlcnMgd2VyZSB1bmlxdWUsIHVzZSB0aGUgbGFzdCBvbmUgKi8KKwkgIHNucHJpbnRmKChjaGFyICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YSwKKwkJICAgc2l6ZW9mKG5ldHBlcmZfcmVzcG9uc2UpIC0gNywKKwkJICAgIiVjJXMlYyVzJWMlcyVjJXMiLAorCQkgICBkZWxpbXNbaV1bMF0sCisJCSAgICJOb0RlbGltVW5pcXVlIiwKKwkJICAgZGVsaW1zW2ldWzBdLAorCQkgICAiTm9EZWxpbVVuaXF1ZSIsCisJCSAgIGRlbGltc1tpXVswXSwKKwkJICAgIk5vRGVsaW1VbmlxdWUiLAorCQkgICBkZWxpbXNbaV1bMF0sCisJCSAgICJOb0RlbGltVW5pcXVlIik7CisJfQorCXNlbmRfcmVzcG9uc2VfbigwKTsKKwlicmVhazsKKyAgICAgIH0KKyAgICBjYXNlIENQVV9DQUxJQlJBVEU6CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IENQVV9DQUxJQlJBVEU7CisgICAgICB0ZW1wX3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KDAuMCk7CisgICAgICBiY29weSgoY2hhciAqKSZ0ZW1wX3JhdGUsCisJICAgIChjaGFyICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YSwKKwkgICAgc2l6ZW9mKHRlbXBfcmF0ZSkpOworICAgICAgYmNvcHkoKGNoYXIgKikmbGliX251bV9sb2NfY3B1cywKKwkgICAgKGNoYXIgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhICsgc2l6ZW9mKHRlbXBfcmF0ZSksCisJICAgIHNpemVvZihsaWJfbnVtX2xvY19jcHVzKSk7CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHNlbmRpbmcgQ1BVIGluZm9ybWF0aW9uOiIpOworCWZwcmludGYod2hlcmUsInJhdGUgaXMgJWcgbnVtIGNwdSAlZFxuIix0ZW1wX3JhdGUsbGliX251bV9sb2NfY3B1cyk7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogd2UgbmVlZCB0aGUgY3B1X3N0YXJ0LCBjcHVfc3RvcCBpbiB0aGUgbG9vcGVyIGNhc2UgdG8ga2lsbCB0aGUgKi8KKyAgICAgIC8qIGNoaWxkIHByb2Nlc2VzIHJhaiA3Lzk1ICovCisgICAgICAKKyNpZmRlZiBVU0VfTE9PUEVSCisgICAgICBjcHVfc3RhcnQoMSk7CisgICAgICBjcHVfc3RvcCgxLCZ0ZW1wX3JhdGUpOworI2VuZGlmIC8qIFVTRV9MT09QRVIgKi8KKyAgICAgIAorICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIERPX1RDUF9TVFJFQU06CisgICAgICByZWN2X3RjcF9zdHJlYW0oKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBET19UQ1BfTUFFUlRTOgorICAgICAgcmVjdl90Y3BfbWFlcnRzKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgRE9fVENQX1JSOgorICAgICAgcmVjdl90Y3BfcnIoKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBET19UQ1BfQ1JSOgorICAgICAgcmVjdl90Y3BfY29ubl9ycigpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIERPX1RDUF9DQzoKKyAgICAgIHJlY3ZfdGNwX2NjKCk7CisgICAgICBicmVhazsKKyAgICAgIAorI2lmZGVmIERPXzE2NDQKKyAgICBjYXNlIERPX1RDUF9UUlI6CisgICAgICByZWN2X3RjcF90cmFuX3JyKCk7CisgICAgICBicmVhazsKKyNlbmRpZiAvKiBET18xNjQ0ICovCisgICAgICAKKyNpZmRlZiBET19OQlJSCisgICAgY2FzZSBET19UQ1BfTkJSUjoKKyAgICAgIHJlY3ZfdGNwX25icnIoKTsKKyAgICAgIGJyZWFrOworI2VuZGlmIC8qIERPX05CUlIgKi8KKyAgICAgIAorICAgIGNhc2UgRE9fVURQX1NUUkVBTToKKyAgICAgIHJlY3ZfdWRwX3N0cmVhbSgpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIERPX1VEUF9SUjoKKyAgICAgIHJlY3ZfdWRwX3JyKCk7CisgICAgICBicmVhazsKKyAgICAgIAorI2lmZGVmIFdBTlRfRExQSQorCisgICAgY2FzZSBET19ETFBJX0NPX1JSOgorICAgICAgcmVjdl9kbHBpX2NvX3JyKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgRE9fRExQSV9DTF9SUjoKKyAgICAgIHJlY3ZfZGxwaV9jbF9ycigpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERPX0RMUElfQ09fU1RSRUFNOgorICAgICAgcmVjdl9kbHBpX2NvX3N0cmVhbSgpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERPX0RMUElfQ0xfU1RSRUFNOgorICAgICAgcmVjdl9kbHBpX2NsX3N0cmVhbSgpOworICAgICAgYnJlYWs7CisKKyNlbmRpZiAvKiBXQU5UX0RMUEkgKi8KKworI2lmZGVmIFdBTlRfVU5JWAorCisgICAgY2FzZSBET19TVFJFQU1fU1RSRUFNOgorICAgICAgcmVjdl9zdHJlYW1fc3RyZWFtKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgRE9fU1RSRUFNX1JSOgorICAgICAgcmVjdl9zdHJlYW1fcnIoKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBET19ER19TVFJFQU06CisgICAgICByZWN2X2RnX3N0cmVhbSgpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIERPX0RHX1JSOgorICAgICAgcmVjdl9kZ19ycigpOworICAgICAgYnJlYWs7CisgICAgICAKKyNlbmRpZiAvKiBXQU5UX1VOSVggKi8KKworI2lmZGVmIFdBTlRfWFRJCisgICAgY2FzZSBET19YVElfVENQX1NUUkVBTToKKyAgICAgIHJlY3ZfeHRpX3RjcF9zdHJlYW0oKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBET19YVElfVENQX1JSOgorICAgICAgcmVjdl94dGlfdGNwX3JyKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgRE9fWFRJX1VEUF9TVFJFQU06CisgICAgICByZWN2X3h0aV91ZHBfc3RyZWFtKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgRE9fWFRJX1VEUF9SUjoKKyAgICAgIHJlY3ZfeHRpX3VkcF9ycigpOworICAgICAgYnJlYWs7CisKKyNlbmRpZiAvKiBXQU5UX1hUSSAqLworCisjaWZkZWYgV0FOVF9TQ1RQCisgICAgY2FzZSBET19TQ1RQX1NUUkVBTToKKyAgICAgIHJlY3Zfc2N0cF9zdHJlYW0oKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBET19TQ1RQX1NUUkVBTV9NQU5ZOgorICAgICAgcmVjdl9zY3RwX3N0cmVhbV8xdG9NYW55KCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRE9fU0NUUF9SUjoKKyAgICAgIHJlY3Zfc2N0cF9ycigpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERPX1NDVFBfUlJfTUFOWToKKyAgICAgIHJlY3Zfc2N0cF9ycl8xdG9NYW55KCk7CisgICAgICBicmVhazsKKyNlbmRpZgorCisjaWZkZWYgV0FOVF9TRFAKKyAgICBjYXNlIERPX1NEUF9TVFJFQU06CisgICAgICByZWN2X3NkcF9zdHJlYW0oKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBET19TRFBfTUFFUlRTOgorICAgICAgcmVjdl9zZHBfbWFlcnRzKCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRE9fU0RQX1JSOgorICAgICAgcmVjdl9zZHBfcnIoKTsKKyAgICAgIGJyZWFrOworI2VuZGlmIAorCisjaWZkZWYgV0FOVF9PTU5JCisgICAgY2FzZSBET19PTU5JOgorICAgICAgcmVjdl9vbW5pKCk7CisgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgZGVmYXVsdDoKKyAgICAgIGZwcmludGYod2hlcmUsInVua25vd24gdGVzdCBudW1iZXIgJWRcbiIsCisJICAgICAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubz05OTg7CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIH0KKyAgfQorfQorCisvKgkKKyBzZXRfdXBfc2VydmVyKCkKKworIHNldC11cCB0aGUgc2VydmVyIGxpc3RlbiBzb2NrZXQuIHdlIG9ubHkgY2FsbCB0aGlzIHJvdXRpbmUgaWYgdGhlIAorIHVzZXIgaGFzIHNwZWNpZmllZCBhIHBvcnQgbnVtYmVyIG9uIHRoZSBjb21tYW5kIGxpbmUgb3Igd2UgYmVsaWV2ZSB3ZQorIGFyZSBub3QgYSBjaGlsZCBvZiBpbmV0ZCBvciBpdHMgcGxhdGZvcm0tc3BlY2lmaWMgZXF1aXZhbGVudCAqLworCisvKktDKi8KKwordm9pZCAKK3NldF91cF9zZXJ2ZXIoY2hhciBob3N0bmFtZVtdLCBjaGFyIHBvcnRbXSwgaW50IGFmKQoreyAKKworICBzdHJ1Y3QgYWRkcmluZm8gICAgIGhpbnRzOworICBzdHJ1Y3QgYWRkcmluZm8gICAgICpsb2NhbF9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAgICAgKmxvY2FsX3Jlc190ZW1wOworCisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICAgICBwZWVyYWRkcjsKKyAgbmV0cGVyZl9zb2NrbGVuX3QgICAgICAgICAgICAgICAgIHBlZXJhZGRyX2xlbiA9IHNpemVvZihwZWVyYWRkcik7CisgIAorICBTT0NLRVQgc2VydmVyX2NvbnRyb2w7CisgIGludCBvbj0xOworICBpbnQgY291bnQ7CisgIGludCBlcnJvcjsKKyAgaW50IG5vdF9saXN0ZW5pbmc7CisKKyNpZiAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoTVBFKSAmJiAhZGVmaW5lZChfX1ZNUykgJiYgIWRlZmluZWQoTVNET1MpCisgIEZJTEUgKnJkX251bGxfZnA7ICAgIC8qIFVzZWQgdG8gcmVkaXJlY3QgZnJvbSAiL2Rldi9udWxsIi4gKi8KKyAgRklMRSAqd3JfbnVsbF9mcDsgICAgLyogVXNlZCB0byByZWRpcmVjdCB0byAgICIvZGV2L251bGwiLiAqLworI2VuZGlmIC8qICFXSU4zMiAhTVBFICFfX1ZNUyAhTURPUyAqLworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgInNldF91cF9zZXJ2ZXIgY2FsbGVkIHdpdGggaG9zdCAnJXMnIHBvcnQgJyVzJyByZW1mYW0gJWRcbiIsCisgICAgICAgICAgICBob3N0bmFtZSwKKwkgICAgcG9ydCwKKyAgICAgICAgICAgIGFmKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKyAgfQorCisgIG1lbXNldCgmaGludHMsMCxzaXplb2YoaGludHMpKTsKKyAgaGludHMuYWlfZmFtaWx5ID0gYWY7CisgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgIGhpbnRzLmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRTsKKworICBjb3VudCA9IDA7CisgIGRvIHsKKyAgICBlcnJvciA9IGdldGFkZHJpbmZvKChjaGFyICopaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAmaGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfcmVzKTsKKyAgICBjb3VudCArPSAxOworICAgIGlmIChlcnJvciA9PSBFQUlfQUdBSU4pIHsKKyAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiU2xlZXBpbmcgb24gZ2V0YWRkcmluZm8gRUFJX0FHQUlOXG4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgICAgICBzbGVlcCgxKTsKKyAgICB9CisgIH0gd2hpbGUgKChlcnJvciA9PSBFQUlfQUdBSU4pICYmIChjb3VudCA8PSA1KSk7CisKKyAgaWYgKGVycm9yKSB7CisgICAgZnByaW50ZihzdGRlcnIsCisJICAgICJzZXRfdXBfc2VydmVyOiBjb3VsZCBub3QgcmVzb2x2ZSByZW1vdGUgJyVzJyBwb3J0ICclcycgYWYgJWQiLAorCSAgICBob3N0bmFtZSwKKwkgICAgcG9ydCwKKwkgICAgYWYpOworICAgIGZwcmludGYoc3RkZXJyLCJcblx0Z2V0YWRkcmluZm8gcmV0dXJuZWQgJWQgJXNcbiIsCisJICAgIGVycm9yLAorCSAgICBnYWlfc3RyZXJyb3IoZXJyb3IpKTsKKyAgICBleGl0KC0xKTsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGR1bXBfYWRkcmluZm8oc3RkZXJyLCBsb2NhbF9yZXMsIGhvc3RuYW1lLCBwb3J0LCBhZik7CisgIH0KKworICBub3RfbGlzdGVuaW5nID0gMTsKKyAgbG9jYWxfcmVzX3RlbXAgPSBsb2NhbF9yZXM7CisKKyAgd2hpbGUoKGxvY2FsX3Jlc190ZW1wICE9IE5VTEwpICYmIChub3RfbGlzdGVuaW5nKSkgeworCisgICAgZnByaW50ZihzdGRlcnIsCisJICAgICJTdGFydGluZyBuZXRzZXJ2ZXIgYXQgcG9ydCAlc1xuIiwKKwkgICAgcG9ydCk7CisKKyAgICBzZXJ2ZXJfY29udHJvbCA9IHNvY2tldChsb2NhbF9yZXNfdGVtcC0+YWlfZmFtaWx5LFNPQ0tfU1RSRUFNLDApOworCisgICAgaWYgKHNlcnZlcl9jb250cm9sID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICBwZXJyb3IoInNldF91cF9zZXJ2ZXIgY291bGQgbm90IGFsbG9jYXRlIGEgc29ja2V0Iik7CisgICAgICBleGl0KC0xKTsKKyAgICB9CisKKyAgICAvKiBoYXBwaW5lc3MgYW5kIGpveSwga2VlcCBnb2luZyAqLworICAgIGlmIChzZXRzb2Nrb3B0KHNlcnZlcl9jb250cm9sLCAKKwkJICAgU09MX1NPQ0tFVCwgCisJCSAgIFNPX1JFVVNFQUREUiwgCisJCSAgIChjaGFyICopJm9uICwgCisJCSAgIHNpemVvZihvbikpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgaWYgKGRlYnVnKSB7CisJcGVycm9yKCJ3YXJuaW5nOiBzZXRfdXBfc2VydmVyIGNvdWxkIG5vdCBzZXQgU09fUkVVU0VBRERSIik7CisgICAgICB9CisgICAgfQorICAgIC8qIHN0aWxsIGhhcHB5IGFuZCBqb3lmdWwgKi8KKworICAgIGlmICgoYmluZCAoc2VydmVyX2NvbnRyb2wsIAorCSAgICAgICBsb2NhbF9yZXNfdGVtcC0+YWlfYWRkciwgCisJICAgICAgIGxvY2FsX3Jlc190ZW1wLT5haV9hZGRybGVuKSAhPSBTT0NLRVRfRVJST1IpICYmCisJKGxpc3RlbiAoc2VydmVyX2NvbnRyb2wsNSkgIT0gU09DS0VUX0VSUk9SKSkgIHsKKyAgICAgIG5vdF9saXN0ZW5pbmcgPSAwOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogd2UgY29uc2lkZXIgYSBiaW5kKCkgb3IgbGlzdGVuKCkgZmFpbHVyZSBhIHRyYW5zaWVudCBhbmQgdHJ5CisJIHRoZSBuZXh0IGFkZHJlc3MgKi8KKyAgICAgIGlmIChkZWJ1ZykgeworCXBlcnJvcigid2FybmluZzogc2V0X3VwX3NlcnZlciBmYWlsZWQgYSBiaW5kIG9yIGxpc3RlbiBjYWxsXG4iKTsKKyAgICAgIH0KKyAgICAgIGxvY2FsX3Jlc190ZW1wID0gbG9jYWxfcmVzX3RlbXAtPmFpX25leHQ7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgIH0KKworICBpZiAobm90X2xpc3RlbmluZykgeworICAgIGZwcmludGYoc3RkZXJyLAorCSAgICAic2V0X3VwX3NlcnZlciBjb3VsZCBub3QgZXN0YWJsaXNoIGEgbGlzdGVuIGVuZHBvaW50IGZvciAlcyBwb3J0ICVzIHdpdGggZmFtaWx5ICVzXG4iLAorCSAgICBob3N0X25hbWUsCisJICAgIHBvcnQsCisJICAgIGluZXRfZnRvcyhhZikpOworICAgIGZmbHVzaChzdGRlcnIpOworICAgIGV4aXQoLTEpOworICB9CisgIGVsc2UgeworICAgIHByaW50ZigiU3RhcnRpbmcgbmV0c2VydmVyIGF0IGhvc3RuYW1lICVzIHBvcnQgJXMgYW5kIGZhbWlseSAlc1xuIiwKKwkgICBob3N0bmFtZSwKKwkgICBwb3J0LAorCSAgIGluZXRfZnRvcyhhZikpOworICB9CisKKyAgLyoKKyAgICBzZXRwZ3JwKCk7CisgICAgKi8KKworI2lmICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChNUEUpICYmICFkZWZpbmVkKF9fVk1TKSAmJiAhZGVmaW5lZChWTVdBUkVfVVcpICYmICFkZWZpbmVkKE1TRE9TKQorICAvKiBGbHVzaCB0aGUgc3RhbmRhcmQgSS9PIGZpbGUgZGVzY3JpcHRvcnMgYmVmb3JlIGZvcmtpbmcuICovCisgIGZmbHVzaCAoc3RkaW4pOworICBmZmx1c2ggKHN0ZG91dCk7CisgIGZmbHVzaCAoc3RkZXJyKTsKKyNpZiBkZWZpbmVkKEhBVkVfRk9SSykKKyAgc3dpdGNoIChmb3JrKCkpCisjZWxzZQorICBzd2l0Y2ggKHZmb3JrKCkpCisjZW5kaWYKKyAgICB7CisgICAgY2FzZSAtMTogIAkKKyAgICAgIHBlcnJvcigibmV0cGVyZiBzZXJ2ZXIgZXJyb3IiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgICAKKyAgICBjYXNlIDA6CQorICAgICAgLyogUmVkaXJlY3Qgc3RkaW4gZnJvbSAiL2Rldi9udWxsIi4gKi8KKyAgICAgIHJkX251bGxfZnAgPSBmb3BlbiAoIi9kZXYvbnVsbCIsICJyIik7CisgICAgICBpZiAocmRfbnVsbF9mcCA9PSBOVUxMKQorICAgICAgeworCXBlcnJvciAoIm5ldHNlcnZlcjogb3BlbmluZyBmb3IgcmVhZGluZzogL2Rldi9udWxsIik7CisJZXhpdCAgICgxKTsKKyAgICAgIH0KKyAgICAgIGlmIChjbG9zZSAoU1RESU5fRklMRU5PKSA9PSAtMSkKKyAgICAgIHsKKwlwZXJyb3IgKCJuZXRzZXJ2ZXI6IGNsb3Npbmcgc3RkaW4gZmlsZSBkZXNjcmlwdG9yIik7CisJZXhpdCAgICgxKTsKKyAgICAgIH0KKyAgICAgIGlmIChkdXAgKGZpbGVubyAocmRfbnVsbF9mcCkpID09IC0xKQorICAgICAgeworCXBlcnJvciAoIm5ldHNlcnZlcjogZHVwbGljYXRlIC9kZXYvbnVsbCByZWFkIGZpbGUgZGVzY3IuIHRvIHN0ZGluIik7CisJZXhpdCAgICgxKTsKKyAgICAgIH0KKworICAgICAgLyogUmVkaXJlY3Qgc3Rkb3V0IHRvIHRoZSBkZWJ1ZyB3cml0ZSBmaWxlIGRlc2NyaXB0b3IuICovCisgICAgICBpZiAoY2xvc2UgKFNURE9VVF9GSUxFTk8pID09IC0xKQorICAgICAgeworCXBlcnJvciAoIm5ldHNlcnZlcjogY2xvc2luZyBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yIik7CisJZXhpdCAgICgxKTsKKyAgICAgIH0KKyAgICAgIGlmIChkdXAgKGZpbGVubyAod2hlcmUpKSAgPT0gLTEpCisgICAgICB7CisJcGVycm9yICgibmV0c2VydmVyOiBkdXBsaWNhdGUgdGhlIGRlYnVnIHdyaXRlIGZpbGUgZGVzY3IuIHRvIHN0ZG91dCIpOworCWV4aXQgICAoMSk7CisgICAgICB9CisKKyAgICAgIC8qIFJlZGlyZWN0IHN0ZGVyciB0byAiL2Rldi9udWxsIi4gKi8KKyAgICAgIHdyX251bGxfZnAgPSBmb3BlbiAoIi9kZXYvbnVsbCIsICJ3Iik7CisgICAgICBpZiAod3JfbnVsbF9mcCA9PSBOVUxMKQorICAgICAgeworCXBlcnJvciAoIm5ldHNlcnZlcjogb3BlbmluZyBmb3Igd3JpdGluZzogL2Rldi9udWxsIik7CisJZXhpdCAgICgxKTsKKyAgICAgIH0KKyAgICAgIGlmIChjbG9zZSAoU1RERVJSX0ZJTEVOTykgPT0gLTEpCisgICAgICB7CisJcGVycm9yICgibmV0c2VydmVyOiBjbG9zaW5nIHN0ZGVyciBmaWxlIGRlc2NyaXB0b3IiKTsKKwlleGl0ICAgKDEpOworICAgICAgfQorICAgICAgaWYgKGR1cCAoZmlsZW5vICh3cl9udWxsX2ZwKSkgID09IC0xKQorICAgICAgeworCXBlcnJvciAoIm5ldHNlcnZlcjogZHVwaWNhdGUgL2Rldi9udWxsIHdyaXRlIGZpbGUgZGVzY3IuIHRvIHN0ZGVyciIpOworCWV4aXQgICAoMSk7CisgICAgICB9CisgCisjaWZuZGVmIE5PX1NFVFNJRAorICAgICAgc2V0c2lkKCk7CisjZWxzZQorICAgICAgc2V0cGdycCgpOworI2VuZGlmIC8qIE5PX1NFVFNJRCAqLworCisgLyogc29tZSBPUydzIGhhdmUgU0lHQ0xEIGRlZmluZWQgYXMgU0lHQ0hMRCAqLworI2lmbmRlZiBTSUdDTEQKKyNkZWZpbmUgU0lHQ0xEIFNJR0NITEQKKyNlbmRpZiAvKiBTSUdDTEQgKi8KKworICAgICAgc2lnbmFsKFNJR0NMRCwgU0lHX0lHTik7CisgICAgICAKKyNlbmRpZiAvKiAhV0lOMzIgIU1QRSAhX19WTVMgIU1TRE9TICovCisKKyAgICAgIGZvciAoOzspCisJeworCSAgaWYgKChzZXJ2ZXJfc29jaz1hY2NlcHQoc2VydmVyX2NvbnRyb2wsCisJCQkJICAoc3RydWN0IHNvY2thZGRyICopJnBlZXJhZGRyLAorCQkJCSAgJnBlZXJhZGRyX2xlbikpID09IElOVkFMSURfU09DS0VUKQorCSAgICB7CisJICAgICAgcHJpbnRmKCJzZXJ2ZXJfY29udHJvbDogYWNjZXB0IGZhaWxlZCBlcnJubyAlZFxuIixlcnJubyk7CisJICAgICAgZXhpdCgxKTsKKwkgICAgfQorI2lmIGRlZmluZWQoTVBFKSB8fCBkZWZpbmVkKF9fVk1TKSB8fCBkZWZpbmVkKFZNV0FSRV9VVykgfHwgZGVmaW5lZChNU0RPUykKKwkgIC8qCisJICAgKiBTaW5jZSB3ZSBjYW5ub3QgZm9yayB0aGlzIHByb2Nlc3MgLCB3ZSBjYW50IGZpcmUgYW55IHRocmVhZHMKKwkgICAqIGFzIHRoZXkgYWxsIHNoYXJlIHRoZSBzYW1lIGdsb2JhbCBkYXRhIC4gU28gd2UgYmV0dGVyIGFsbG93CisJICAgKiBvbmUgcmVxdWVzdCBhdCBhdCB0aW1lIAorCSAgICovCisJICBwcm9jZXNzX3JlcXVlc3RzKCkgOworI2VsaWYgV0lOMzIKKwkJeworCQkJQk9PTCBiOworCQkJY2hhciAqY21kbGluZTsKKwkJCVBST0NFU1NfSU5GT1JNQVRJT04gcGk7CisJCQlTVEFSVFVQSU5GTyBzaTsKKwkJCWludCBpOworCisJCQkvKiBjcmVhdGUgdGhlIGNtZGxpbmUgYXJyYXkgYmFzZWQgb24gc3RybGVuKHByb2dyYW0pICsgODAgY2hhcnMgKi8KKwkJCWNtZGxpbmUgPSBtYWxsb2Moc3RybGVuKHByb2dyYW0pICsgODApOworCisJCQltZW1zZXQoJnNpLCAwICwgc2l6ZW9mKFNUQVJUVVBJTkZPKSk7CisJCQlzaS5jYiA9IHNpemVvZihTVEFSVFVQSU5GTyk7CisKKwkJCS8qIFBhc3MgdGhlIHNlcnZlcl9zb2NrIGFzIHN0ZGluIGZvciB0aGUgbmV3IHByb2Nlc3MuICovCisJCQkvKiBIb3BlZnVsbHkgdGhpcyB3aWxsIGNvbnRpbnVlIHRvIGJlIGNyZWF0ZWQgd2l0aCB0aGUgT0JKX0lOSEVSSVQgYXR0cmlidXRlLiAqLworCQkJc2kuaFN0ZElucHV0ID0gKEhBTkRMRSlzZXJ2ZXJfc29jazsKKwkJCXNpLmhTdGRPdXRwdXQgPSBHZXRTdGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpOworCQkJc2kuaFN0ZEVycm9yID0gR2V0U3RkSGFuZGxlKFNURF9FUlJPUl9IQU5ETEUpOworCQkJc2kuZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOworCisJCQkvKiBCdWlsZCBjbWRsaW5lIGZvciBjaGlsZCBwcm9jZXNzICovCisJCQlzdHJjcHkoY21kbGluZSwgcHJvZ3JhbSk7CisJCQlpZiAodmVyYm9zaXR5ID4gMSkgeworCQkJCXNucHJpbnRmKCZjbWRsaW5lW3N0cmxlbihjbWRsaW5lKV0sIHNpemVvZihjbWRsaW5lKSAtIHN0cmxlbihjbWRsaW5lKSwgIiAtdiAlZCIsIHZlcmJvc2l0eSk7CisJCQl9CisJCQlmb3IgKGk9MDsgaSA8IGRlYnVnOyBpKyspIHsKKwkJCQlzbnByaW50ZigmY21kbGluZVtzdHJsZW4oY21kbGluZSldLCBzaXplb2YoY21kbGluZSkgLSBzdHJsZW4oY21kbGluZSksICIgLWQiKTsKKwkJCX0KKwkJCXNucHJpbnRmKCZjbWRsaW5lW3N0cmxlbihjbWRsaW5lKV0sIHNpemVvZihjbWRsaW5lKSAtIHN0cmxlbihjbWRsaW5lKSwgIiAtSSAleCIsIChpbnQpKFVJTlRfUFRSKXNlcnZlcl9zb2NrKTsKKwkJCXNucHJpbnRmKCZjbWRsaW5lW3N0cmxlbihjbWRsaW5lKV0sIHNpemVvZihjbWRsaW5lKSAtIHN0cmxlbihjbWRsaW5lKSwgIiAtaSAleCIsIChpbnQpKFVJTlRfUFRSKXNlcnZlcl9jb250cm9sKTsKKwkJCXNucHJpbnRmKCZjbWRsaW5lW3N0cmxlbihjbWRsaW5lKV0sIHNpemVvZihjbWRsaW5lKSAtIHN0cmxlbihjbWRsaW5lKSwgIiAtaSAleCIsIChpbnQpKFVJTlRfUFRSKXdoZXJlKTsKKworCQkJYiA9IENyZWF0ZVByb2Nlc3MoTlVMTCwJIC8qIEFwcGxpY2F0aW9uIE5hbWUgKi8KKwkJCQkJY21kbGluZSwKKwkJCQkJTlVMTCwgICAgLyogUHJvY2VzcyBzZWN1cml0eSBhdHRyaWJ1dGVzICovCisJCQkJCU5VTEwsICAgIC8qIFRocmVhZCBzZWN1cml0eSBhdHRyaWJ1dGVzICovCisJCQkJCVRSVUUsICAgIC8qIEluaGVyaXQgaGFuZGxlcyAqLworCQkJCQkwLAkgICAvKiBDcmVhdGlvbiBmbGFncyAgUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiwgICovCisJCQkJCU5VTEwsICAgIC8qIEVudmlvcm5tZW50ICovCisJCQkJCU5VTEwsICAgIC8qIEN1cnJlbnQgZGlyZWN0b3J5ICovCisJCQkJCSZzaSwJICAgLyogU3RhcnR1cEluZm8gKi8KKwkJCQkJJnBpKTsKKwkJCWlmICghYikKKwkJCXsKKwkJCQlwZXJyb3IoIkNyZWF0ZVByb2Nlc3NmYWlsdXJlOiAiKTsKKwkJCQlmcmVlKGNtZGxpbmUpOyAvKiBldmVuIHRob3VnaCB3ZSBleGl0IDopICovCisJCQkJZXhpdCgxKTsKKwkJCX0KKworCQkJLyogV2UgZG9uJ3QgbmVlZCB0aGUgdGhyZWFkIG9yIHByb2Nlc3MgaGFuZGxlcyBhbnkgbW9yZTsgbGV0IHRoZW0gKi8KKwkJCS8qIGdvIGF3YXkgb24gdGhlaXIgb3duIHRpbWVmcmFtZS4gKi8KKworCQkJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisJCQlDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7CisKKwkJCS8qIEFuZCBjbG9zZSB0aGUgc2VydmVyX3NvY2sgc2luY2UgdGhlIGNoaWxkIHdpbGwgb3duIGl0LiAqLworCisJCQljbG9zZShzZXJ2ZXJfc29jayk7CisJCQlmcmVlKGNtZGxpbmUpOworCQl9CisjZWxzZQorICAgICAgc2lnbmFsKFNJR0NMRCwgU0lHX0lHTik7CisjaWYgZGVmaW5lZChIQVZFX0ZPUkspCisJICBzd2l0Y2ggKGZvcmsoKSkKKyNlbHNlCisJICBzd2l0Y2ggKHZmb3JrKCkpCisjZW5kaWYKKwkgICAgeworCSAgICBjYXNlIC0xOgorCSAgICAgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nICovCisJICAgICAgZXhpdCgxKTsKKwkgICAgY2FzZSAwOgorCSAgICAgIC8qIHdlIGFyZSB0aGUgY2hpbGQgcHJvY2VzcyAqLworCSAgICAgIGNsb3NlKHNlcnZlcl9jb250cm9sKTsKKwkgICAgICBwcm9jZXNzX3JlcXVlc3RzKCk7CisJICAgICAgZXhpdCgwKTsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICAvKiB3ZSBhcmUgdGhlIHBhcmVudCBwcm9jZXNzICovCisJICAgICAgY2xvc2Uoc2VydmVyX3NvY2spOworCSAgICAgIC8qIHdlIHNob3VsZCB0cnkgdG8gInJlYXAiIHNvbWUgb2Ygb3VyIGNoaWxkcmVuLiBvbiBzb21lICovCisJICAgICAgLyogc3lzdGVtcyB0aGV5IGFyZSBiZWluZyBsZWZ0IGFzIGRlZnVuY3QgcHJvY2Vzc2VzLiB3ZSAqLworCSAgICAgIC8qIHdpbGwgY2FsbCB3YWl0cGlkLCBsb29raW5nIGZvciBhbnkgY2hpbGQgcHJvY2VzcywgKi8KKwkgICAgICAvKiB3aXRoIHRoZSBXTk9IQU5HIGZlYXR1cmUuIHdoZW4gd2FpdHBpZCByZXR1cm4gYSB6ZXJvLCAqLworCSAgICAgIC8qIHdlIGhhdmUgcmVhcGVkIGFsbCB0aGUgY2hpbGRyZW4gdGhlcmUgYXJlIHRvIHJlYXAgYXQgKi8KKwkgICAgICAvKiB0aGUgbW9tZW50LCBzbyBpdCBpcyB0aW1lIHRvIG1vdmUgb24uIHJhaiAxMi85NCAqLworI2lmbmRlZiBET05UX1dBSVQKKyNpZmRlZiBOT19TRVRTSUQKKwkgICAgICAvKiBPbmx5IGNhbGwgIndhaXRwaWQoKSIgaWYgInNldHNpZCgpIiBpcyBub3QgdXNlZC4gKi8KKwkgICAgICB3aGlsZSh3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HKSA+IDApIHsgfQorI2VuZGlmIC8qIE5PX1NFVFNJRCAqLworI2VuZGlmIC8qIERPTlRfV0FJVCAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisjZW5kaWYgLyogIVdJTjMyICFNUEUgIV9fVk1TICFNU0RPUyAqLworCX0gLypmb3IqLworI2lmICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChNUEUpICYmICFkZWZpbmVkKF9fVk1TKSAmJiAhZGVmaW5lZChWTVdBUkVfVVcpICYmICFkZWZpbmVkKE1TRE9TKQorICAgICAgYnJlYWs7IC8qY2FzZSAwKi8KKyAgICAgIAorICAgIGRlZmF1bHQ6IAorICAgICAgZXhpdCAoMCk7CisgICAgICAKKyAgICB9CisjZW5kaWYgLyogIVdJTjMyICFNUEUgIV9fVk1TICFNU0RPUyAqLworfQorCisjaWZkZWYgV0lOMzIKKworICAvKiBXaXRoIFdpbjIwMDMsIFdpbk5UJ3MgUE9TSVggc3Vic3lzdGVtIGlzIGdvbmUgYW5kIGhlbmNlIHNvIGlzICovCisgIC8qIGZvcmsuICovCisKKyAgLyogQnV0IGhvcGVmdWxseSB0aGUga2VybmVsIHN1cHBvcnQgd2lsbCBjb250aW51ZSB0byBleGlzdCBmb3Igc29tZSAqLworICAvKiB0aW1lLiAqLworCisgIC8qIFdlIGFyZSBub3QgY291bnRpbmcgb24gdGhlIGNoaWxkIGFkZHJlc3Mgc3BhY2UgY29weV9vbl93cml0ZSAqLworICAvKiBzdXBwb3J0LCBzaW5jZSBpdCBpc24ndCBleHBvc2VkIGV4Y2VwdCB0aHJvdWdoIHRoZSBOVCBuYXRpdmUgQVBJcyAqLworICAvKiAod2hpY2ggaXMgbm90IHB1YmxpYykuICovCisKKyAgLyogV2Ugd2lsbCB0cnkgdG8gdXNlIHRoZSBJbmhlcml0SGFuZGxlcyBmbGFnIGluIENyZWF0ZVByb2Nlc3MuICBJdCAqLworICAvKiBpcyBpbiB0aGUgcHVibGljIEFQSSwgdGhvdWdoIGl0IGlzIGRvY3VtZW50ZWQgYXMgIm11c3QgYmUgRkFMU0UiLiAqLworCisgIC8qIFNvIHdoZXJlIHdlIHdvdWxkIGhhdmUgZm9ya2VkLCB3ZSB3aWxsIG5vdyBjcmVhdGUgYSBuZXcgcHJvY2Vzcy4gKi8KKyAgLyogSSBoYXZlIGFkZGVkIGEgc2V0IG9mIGNvbW1hbmQgbGluZSBzd2l0Y2hlcyB0byBzcGVjaWZ5IGEgbGlzdCBvZiAqLworICAvKiBoYW5kbGVzIHRoYXQgdGhlIGNoaWxkIHNob3VsZCBjbG9zZSBzaW5jZSB0aGV5IHNob3VsZG4ndCBoYXZlICovCisgIC8qIGJlZW4gaW5oZXJpdGVkICgiLWkjIiksIGFuZCBhIHNpbmdsZSBzd2l0Y2ggdG8gc3BlY2lmeSB0aGUgaGFuZGxlICovCisgIC8qIGZvciB0aGUgc2VydmVyX3NvY2sgKCJJIyIpLiAqLworCisgIC8qIEEgYmV0dGVyIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHJlLXdyaXRlIE5ldFBlcmYgdG8gYmUgKi8KKyAgLyogbXVsdGktdGhyZWFkZWQ7IGkuZS4sIG1vdmUgYWxsIG9mIHRoZSB2YXJpb3VzIE5ldFBlcmYgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcyBpbiB0byB0aHJlYWQgc3BlY2lmaWMgc3RydWN0dXJlcy4gIEJ1dCB0aGlzIGlzIGEgYmlnZ2VyICovCisgIC8qIGVmZm9ydCB0aGFuIEkgd2FudCB0byB0YWNrbGUgYXQgdGhpcyB0aW1lLiAgKEFuZCBJIGRvdWJ0IHRoYXQgdGhlICovCisgIC8qIEhQLVVYIGF1dGhvciBzZWVzIHZhbHVlIGluIHRoaXMgZWZmb3J0KS4gKi8KKworI2VuZGlmCisKK2ludCBfY2RlY2wKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKworICBpbnQJYzsKKyAgaW50ICAgbm90X2luZXRkID0gMDsKKyNpZmRlZiBXSU4zMgorICBCT09MICBjaGlsZCA9IEZBTFNFOworI2VuZGlmCisgIGNoYXIgYXJnMVtCVUZTSVpdLCBhcmcyW0JVRlNJWl07CisjaWZuZGVmIFBBVEhfTUFYCisjZGVmaW5lIFBBVEhfTUFYIE1BWF9QQVRICisjZW5kaWYKKyAgY2hhciBGaWxlTmFtZVtQQVRIX01BWF07ICAgLyogZm9yIG9wZW5pbmcgdGhlIGRlYnVnIGxvZyBmaWxlICovCisKKyAgc3RydWN0IHNvY2thZGRyIG5hbWU7CisgIG5ldHBlcmZfc29ja2xlbl90IG5hbWVsZW4gPSBzaXplb2YobmFtZSk7CisgIAorCisjaWZkZWYgV0lOMzIKKwlXU0FEQVRBCXdzYV9kYXRhIDsKKworCS8qIEluaXRpYWxpemUgdGhlIHdpbnNvY2sgbGliICggdmVyc2lvbiAyLjIgKSAqLworCWlmICggV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhX2RhdGEpID09IFNPQ0tFVF9FUlJPUiApeworCQlwcmludGYoIldTQVN0YXJ0dXAoKSBmYWlsZWQgOiAlbHVcbiIsIEdldExhc3RFcnJvcigpKSA7CisJCXJldHVybiAxIDsKKwl9CisjZW5kaWYgLyogV0lOMzIgKi8KKworCS8qIFNhdmUgYXdheSB0aGUgcHJvZ3JhbSBuYW1lICovCisJcHJvZ3JhbSA9IChjaGFyICopbWFsbG9jKHN0cmxlbihhcmd2WzBdKSArIDEpOworCWlmIChwcm9ncmFtID09IE5VTEwpIHsKKwkJcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIHN0cmxlbihhcmd2WzBdKSArIDEpOworCQlyZXR1cm4gMSA7CisJfQorCXN0cmNweShwcm9ncmFtLCBhcmd2WzBdKTsKKworICBuZXRsaWJfaW5pdCgpOworICAKKyAgLyogU2NhbiB0aGUgY29tbWFuZCBsaW5lIHRvIHNlZSBpZiB3ZSBhcmUgc3VwcG9zZWQgdG8gc2V0LXVwIG91ciBvd24gKi8KKyAgLyogbGlzdGVuIHNvY2tldCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gaW5ldGQuICovCisKKyAgLyogZmlyc3Qgc2V0IGEgY29weSBvZiBpbml0aWFsIHZhbHVlcyAqLworICBzdHJuY3B5KGxvY2FsX2hvc3RfbmFtZSwiMC4wLjAuMCIsc2l6ZW9mKGxvY2FsX2hvc3RfbmFtZSkpOworICBsb2NhbF9hZGRyZXNzX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgc3RybmNweShsaXN0ZW5fcG9ydCxURVNUX1BPUlQsc2l6ZW9mKGxpc3Rlbl9wb3J0KSk7CisKKyAgd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFNFUlZFUl9BUkdTKSkgIT0gRU9GKSB7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnPyc6CisgICAgY2FzZSAnaCc6CisgICAgICBwcmludF9uZXRzZXJ2ZXJfdXNhZ2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgY2FzZSAnZCc6CisgICAgICAvKiB3ZSB3YW50IHRvIHNldCB0aGUgZGVidWcgZmlsZSBuYW1lIHNvbWV0aW1lICovCisgICAgICBkZWJ1ZysrOworI2lmZGVmIE1TRE9TCisgICAgICAgZGJ1Z19pbml0KCk7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0wnOgorICAgICAgbm90X2luZXRkID0gMTsKKyAgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgeworCXN0cm5jcHkobG9jYWxfaG9zdF9uYW1lLGFyZzEsc2l6ZW9mKGxvY2FsX2hvc3RfbmFtZSkpOworICAgICAgfQorICAgICAgaWYgKGFyZzJbMF0pIHsKKwlsb2NhbF9hZGRyZXNzX2ZhbWlseSA9IHBhcnNlX2FkZHJlc3NfZmFtaWx5KGFyZzIpOworCS8qIGlmIG9ubHkgdGhlIGFkZHJlc3MgZmFtaWx5IHdhcyBzZXQsIHdlIG1heSBuZWVkIHRvIHNldCB0aGUKKwkgICBsb2NhbF9ob3N0X25hbWUgYWNjb3JkaW5nbHkuIHNpbmNlIG91ciBkZWZhdWx0cyBhcmUgSVB2NAorCSAgIHRoaXMgc2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGlmIHdlIGhhdmUgSVB2NiBzdXBwb3J0IHJhagorCSAgIDIwMDUtMDItMDcgKi8gIAorI2lmIGRlZmluZWQgKEFGX0lORVQ2KQorCWlmICghYXJnMVswXSkgeworCSAgc3RybmNweShsb2NhbF9ob3N0X25hbWUsIjo6MCIsc2l6ZW9mKGxvY2FsX2hvc3RfbmFtZSkpOworCX0KKyNlbmRpZgorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICBzaGVsbF9udW1fY3B1cyA9IGF0b2kob3B0YXJnKTsKKyAgICAgIGlmIChzaGVsbF9udW1fY3B1cyA+IE1BWENQVVMpIHsKKwlmcHJpbnRmKHN0ZGVyciwKKwkJIm5ldHNlcnZlcjogVGhpcyB2ZXJzaW9uIGNhbiBvbmx5IHN1cHBvcnQgJWQgQ1BVcy4gUGxlYXNlIiwKKwkJTUFYQ1BVUyk7CisJZnByaW50ZihzdGRlcnIsCisJCSIgICAgICAgICAgIGluY3JlYXNlIE1BWENQVVMgaW4gbmV0bGliLmggYW5kIHJlY29tcGlsZS5cbiIpOworCWZmbHVzaChzdGRlcnIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdwJzoKKyAgICAgIC8qIHdlIHdhbnQgdG8gb3BlbiBhIGxpc3RlbiBzb2NrZXQgYXQgYSAqLworICAgICAgLyogc3BlY2lmaWVkIHBvcnQgbnVtYmVyICovCisgICAgICBzdHJuY3B5KGxpc3Rlbl9wb3J0LG9wdGFyZyxzaXplb2YobGlzdGVuX3BvcnQpKTsKKyAgICAgIG5vdF9pbmV0ZCA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICc0JzoKKyAgICAgIGxvY2FsX2FkZHJlc3NfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJzYnOgorI2lmIGRlZmluZWQoQUZfSU5FVDYpCisgICAgICBsb2NhbF9hZGRyZXNzX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgc3RybmNweShsb2NhbF9ob3N0X25hbWUsIjo6MCIsc2l6ZW9mKGxvY2FsX2hvc3RfbmFtZSkpOworI2Vsc2UKKyAgICAgIGxvY2FsX2FkZHJlc3NfZmFtaWx5ID0gQUZfVU5TUEVDOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlICd2JzoKKyAgICAgIC8qIHNheSBob3cgbXVjaCB0byBzYXkgKi8KKyAgICAgIHZlcmJvc2l0eSA9IGF0b2kob3B0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1YnOgorICAgICAgcHJpbnRmKCJOZXRwZXJmIHZlcnNpb24gJXNcbiIsTkVUUEVSRl9WRVJTSU9OKTsKKyAgICAgIGV4aXQoMCk7CisgICAgICBicmVhazsKKyNpZmRlZiBXSU4zMgorLyorKitTQUYgKi8KKwljYXNlICdJJzoKKwkJY2hpbGQgPSBUUlVFOworCQkvKiBUaGlzIGlzIHRoZSBoYW5kbGUgd2UgZXhwZWN0IHRvIGluaGVyaXQuICovCisJCS8qKyorU0FGIHNlcnZlcl9zb2NrID0gKEhBTkRMRSlhdG9pKG9wdGFyZyk7ICovCisJCWJyZWFrOworCWNhc2UgJ2knOgorCQkvKiBUaGlzIGlzIGEgaGFuZGxlIHdlIHNob3VsZCBOT1QgaW5oZXJpdC4gKi8KKwkJLyorKitTQUYgQ2xvc2VIYW5kbGUoKEhBTkRMRSlhdG9pKG9wdGFyZykpOyAqLworCQlicmVhazsKKyNlbmRpZgorCisgICAgfQorICB9CisKKyAgLyogKyorU0FGIEkgbmVlZCBhIGJldHRlciB3YXkgdG8gZmluZCBpbmhlcml0ZWQgaGFuZGxlcyBJIHNob3VsZCBjbG9zZSEgKi8KKyAgLyogKyorU0FGIFVzZSBEdXBsaWNhdGVIYW5kbGUgdG8gZm9yY2UgaW5oZXJpdGFibGUgYXR0cmlidXRlIChvciByZXNldCBpdCk/ICovCisKKy8qICB1bmxpbmsoREVCVUdfTE9HX0ZJTEUpOyAqLworCisgIHN0cmNweShGaWxlTmFtZSwgREVCVUdfTE9HX0ZJTEUpOworICAgIAorI2lmbmRlZiBXSU4zMgorICBzbnByaW50ZigmRmlsZU5hbWVbc3RybGVuKEZpbGVOYW1lKV0sIHNpemVvZihGaWxlTmFtZSkgLSBzdHJsZW4oRmlsZU5hbWUpLCAiXyVkIiwgZ2V0cGlkKCkpOworICBpZiAoKHdoZXJlID0gZm9wZW4oRmlsZU5hbWUsICJ3IikpID09IE5VTEwpIHsKKyAgICBwZXJyb3IoIm5ldHNlcnZlcjogZGVidWcgZmlsZSIpOworICAgIGV4aXQoMSk7CisgIH0KKyNlbHNlCisgIHsKKyAgICAKKyAgICBpZiAoY2hpbGQpIHsKKyAgICAgIHNucHJpbnRmKCZGaWxlTmFtZVtzdHJsZW4oRmlsZU5hbWUpXSwgc2l6ZW9mKEZpbGVOYW1lKSAtIHN0cmxlbihGaWxlTmFtZSksICJfJXgiLCBnZXRwaWQoKSk7CisgICAgfQorICAgIAorICAgIC8qIEhvcGVmdWxseSwgYnkgY2xvc2luZyBzdGRvdXQgJiBzdGRlcnIsIHRoZSBzdWJzZXF1ZW50CisgICAgICAgZm9wZW4gY2FsbHMgd2lsbCBnZXQgbWFwcGVkIHRvIHRoZSBjb3JyZWN0IHN0ZCBoYW5kbGVzLiAqLworICAgIGZjbG9zZShzdGRvdXQpOworICAgIAorICAgIGlmICgod2hlcmUgPSBmb3BlbihGaWxlTmFtZSwgInciKSkgPT0gTlVMTCkgeworICAgICAgcGVycm9yKCJuZXRzZXJ2ZXI6IGZvcGVuIG9mIGRlYnVnIGZpbGUgYXMgbmV3IHN0ZG91dCBmYWlsZWQhIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBmY2xvc2Uoc3RkZXJyKTsKKyAgICAKKyAgICBpZiAoKHdoZXJlID0gZm9wZW4oRmlsZU5hbWUsICJ3IikpID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3Rkb3V0LCAiZm9wZW4gb2YgZGVidWcgZmlsZSBhcyBuZXcgc3RkZXJyIGZhaWxlZCFcbiIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKyNlbmRpZgorIAorI2lmbmRlZiBXSU4zMiAKKyAgY2htb2QoREVCVUdfTE9HX0ZJTEUsMDY0NCk7CisjZW5kaWYKKyAgCisjaWYgV0lOMzIKKyAgaWYgKGNoaWxkKSB7CisJICBzZXJ2ZXJfc29jayA9IChTT0NLRVQpR2V0U3RkSGFuZGxlKFNURF9JTlBVVF9IQU5ETEUpOworICB9CisjZW5kaWYKKworICAvKiBpZiB3ZSBhcmUgbm90IGEgY2hpbGQgb2YgYW4gaW5ldGQgb3IgdGhlIGxpa2UsIHRoZW4gd2Ugc2hvdWxkCisgICBvcGVuIGEgc29ja2V0IGFuZCBoYW5nIGxpc3RlbnMgb2ZmIG9mIGl0LiBvdGhlcndpc2UsIHdlIHNob3VsZCBnbworICAgc3RyYWlnaHQgaW50byBwcm9jZXNzaW5nIHJlcXVlc3RzLiB0aGUgZG9fbGlzdGVuKCkgcm91dGluZSB3aWxsIHNpdAorICAgaW4gYW4gaW5maW5pdGUgbG9vcCBhY2NlcHRpbmcgY29ubmVjdGlvbnMgYW5kIGZvcmtpbmcgY2hpbGQKKyAgIHByb2Nlc3Nlcy4gdGhlIGNoaWxkIHByb2Nlc3NlcyB3aWxsIGNhbGwgcHJvY2Vzc19yZXF1ZXN0cyAqLworICAKKyAgLyogSWYgZmQgMCBpcyBub3QgYSBzb2NrZXQgdGhlbiBhc3N1bWUgd2UncmUgbm90IGJlaW5nIGNhbGxlZCAqLworICAvKiBmcm9tIGluZXRkIGFuZCBzdGFydCBzZXJ2ZXIgc29ja2V0IG9uIHRoZSBkZWZhdWx0IHBvcnQuICovCisgIC8qIHRoaXMgZW5oYW5jZW1lbnQgY29tZXMgZnJvbSB2d2VsY2hAbmNzYS51aXVjLmVkdSAoVm9uIFdlbGNoKSAqLworICBpZiAobm90X2luZXRkKSB7CisgICAgLyogdGhlIHVzZXIgc3BlY2lmaWVkIGEgcG9ydCBudW1iZXIgb24gdGhlIGNvbW1hbmQgbGluZSAqLworICAgIHNldF91cF9zZXJ2ZXIobG9jYWxfaG9zdF9uYW1lLGxpc3Rlbl9wb3J0LGxvY2FsX2FkZHJlc3NfZmFtaWx5KTsKKyAgfQorI2lmZGVmIFdJTjMyCisgIC8qIE9LLCB3aXRoIFdpbjIwMDMgV2luTlQncyBQT1NJWCBzdWJzeXN0ZW0gaXMgZ29uZSwgYW5kIGhlbmNlIHNvIGlzICovCisgIC8qIGZvcmsuICBCdXQgaG9wZWZ1bGx5IHRoZSBrZXJuZWwgc3VwcG9ydCB3aWxsIGNvbnRpbnVlIHRvIGV4aXN0ICovCisgIC8qIGZvciBzb21lIHRpbWUuICBXZSBhcmUgbm90IGNvdW50aW5nIG9uIHRoZSBhZGRyZXNzIHNwYWNlICovCisgIC8qIGNvcHlfb25fd3JpdGUgc3VwcG9ydCwgc2luY2UgaXQgaXNuJ3QgZXhwb3NlZCBleGNlcHQgdGhyb3VnaCB0aGUgKi8KKyAgLyogTlQgbmF0aXZlIEFQSXMgKHdoaWNoIGFyZSBub3QgcHVibGljKS4gIFdlIHdpbGwgdHJ5IHRvIHVzZSB0aGUgKi8KKyAgLyogSW5oZXJpdEhhbmRsZXMgZmxhZyBpbiBDcmVhdGVQcm9jZXNzIHRob3VnaCBzaW5jZSB0aGlzIGlzIHB1YmxpYyAqLworICAvKiBhbmQgaXMgdXNlZCBmb3IgbW9yZSB0aGFuIGp1c3QgUE9TSVggc28gaG9wZWZ1bGx5IGl0IHdvbid0IGdvICovCisgIC8qIGF3YXkuICovCisgIGVsc2UgaWYgKFRSVUUpIHsKKyAgICBpZiAoY2hpbGQpIHsKKyAgICAgIHByb2Nlc3NfcmVxdWVzdHMoKTsKKyAgICB9IGVsc2UgeworICAgICAgc3RybmNweShsaXN0ZW5fcG9ydCxURVNUX1BPUlQsc2l6ZW9mKGxpc3Rlbl9wb3J0KSk7CisgICAgICBzZXRfdXBfc2VydmVyKGxvY2FsX2hvc3RfbmFtZSxsaXN0ZW5fcG9ydCxsb2NhbF9hZGRyZXNzX2ZhbWlseSk7CisgICAgfQorICB9CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX1ZNUykKKyAgZWxzZSBpZiAoZ2V0c29ja25hbWUoMCwgJm5hbWUsICZuYW1lbGVuKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAvKiB3ZSBtYXkgbm90IGJlIGEgY2hpbGQgb2YgaW5ldGQgKi8KKyAgICBpZiAoZXJybm8gPT0gRU5PVFNPQ0spIHsKKyAgICAgIHN0cm5jcHkobGlzdGVuX3BvcnQsVEVTVF9QT1JULHNpemVvZihsaXN0ZW5fcG9ydCkpOworICAgICAgc2V0X3VwX3NlcnZlcihsb2NhbF9ob3N0X25hbWUsbGlzdGVuX3BvcnQsbG9jYWxfYWRkcmVzc19mYW1pbHkpOworICAgIH0KKyAgfQorI2VuZGlmIC8qICFkZWZpbmVkKF9fVk1TKSAqLworICBlbHNlIHsKKyAgICAvKiB3ZSBhcmUgcHJvYmFibHkgYSBjaGlsZCBvZiBpbmV0ZCwgb3IgYXJlIGJlaW5nIGludm9rZWQgdmlhIHRoZQorICAgICAgIFZNUyBhdXhpbGxpYXJseSBzZXJ2ZXIgbWVjaGFuaXNtICovCisjaWYgIWRlZmluZWQoX19WTVMpCisgICAgc2VydmVyX3NvY2sgPSAwOworI2Vsc2UKKyAgICBpZiAoIChzZXJ2ZXJfc29jayA9IHNvY2tldChUQ1BJUCRDX0FVWFMsIFNPQ0tfU1RSRUFNLCAwKSkgPT0gSU5WQUxJRF9TT0NLRVQgKSAKKyAgICB7IAorICAgICAgcGVycm9yKCJGYWlsZWQgdG8gZ3JhYiBhdXggc2VydmVyIHNvY2tldCIgKTsgCisgICAgICBleGl0KDEpOyAKKyAgICB9IAorICAKKyNlbmRpZiAvKiAhZGVmaW5lZChfX1ZNUykgKi8KKyAgICBwcm9jZXNzX3JlcXVlc3RzKCk7CisgIH0KKyNpZmRlZiBXSU4zMgorCS8qIENsZWFudXAgdGhlIHdpbnNvY2sgbGliICovCisJV1NBQ2xlYW51cCgpOworI2VuZGlmCisKKyAgcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2guYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExYmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHNoLmMKQEAgLTAsMCArMSwxMTYwIEBACisjaW5jbHVkZSAibmV0cGVyZl92ZXJzaW9uLmgiCisKK2NoYXIJbmV0c2hfaWRbXT0iXAorQCgjKW5ldHNoLmMgKGMpIENvcHlyaWdodCAxOTkzLTIwMDcgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkuIFZlcnNpb24gMi40LjNwcmUiOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoJCQkJCQkJCSovCisvKglHbG9iYWwgaW5jbHVkZSBmaWxlcwkJCQkJKi8KKy8qCQkJCQkJCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBXSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmICFkZWZpbmVkKF9fVk1TKSAmJiAhZGVmaW5lZChNU0RPUykKKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisjZW5kaWYgLyogX19WTVMvTVNET1MgKi8KKyNlbmRpZiAvKiBXSU4zMiAqLworI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZuZGVmIFdJTjMyCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZiAgLyogIVdJTjMyICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorIC8qIHRoZSBmb2xsb3dpbmcgZm91ciBpbmNsdWRlcyBzaG91bGQgbm90IGJlIG5lZWRlZCA/Ki8KKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbHNlCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZGVmaW5lIG5ldHBlcmZfc29ja2xlbl90IHNvY2tsZW5fdAorI2VuZGlmCisKKyNpZm5kZWYgU1RSSU5HUworI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UgLyogU1RSSU5HUyAqLworI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZiAvKiBTVFJJTkdTICovCisKKyNpZmRlZiBXSU4zMgorZXh0ZXJuCWludAlnZXRvcHQoaW50ICwgY2hhciAqKiwgY2hhciAqKSA7CisjZWxzZQorZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgTG9jYWwgSW5jbHVkZSBGaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lICBORVRTSAorI2luY2x1ZGUgIm5ldHNoLmgiCisjaW5jbHVkZSAibmV0bGliLmgiCisjaW5jbHVkZSAibmV0dGVzdF9ic2QuaCIKKworI2lmZGVmIFdBTlRfVU5JWAorI2luY2x1ZGUgIm5ldHRlc3RfdW5peC5oIgorI2lmbmRlZiBXSU4zMgorI2luY2x1ZGUgInN5cy9zb2NrZXQuaCIKKyNlbmRpZiAgLyogIVdJTjMyICovCisjZW5kaWYgLyogV0FOVF9VTklYICovCisKKyNpZmRlZiBXQU5UX1hUSQorI2luY2x1ZGUgIm5ldHRlc3RfeHRpLmgiCisjZW5kaWYgLyogV0FOVF9YVEkgKi8KKworI2lmZGVmIFdBTlRfRExQSQorI2luY2x1ZGUgIm5ldHRlc3RfZGxwaS5oIgorI2VuZGlmIC8qIFdBTlRfRExQSSAqLworCisjaWZkZWYgV0FOVF9TQ1RQCisjaW5jbHVkZSAibmV0dGVzdF9zY3RwLmgiCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoJCQkJCQkJCQkqLworLyoJR2xvYmFsIGNvbnN0YW50cyAgYW5kIG1hY3JvcwkJCQkJKi8KKy8qCQkJCQkJCQkJKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAvKiBTb21lIG9mIHRoZSBhcmdzIHRha2Ugb3B0aW9uYWwgcGFyYW1ldGVycy4gU2luY2Ugd2UgYXJlIHVzaW5nICovCisgLyogZ2V0b3B0IHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUsIHdlIHdpbGwgdGVsbCBnZXRvcHQgdGhhdCB0aGV5IGRvICovCisgLyogbm90IHRha2UgcGFybXMsIGFuZCB0aGVuIGxvb2sgZm9yIHRoZW0gb3Vyc2VsdmVzICovCisjZGVmaW5lIEdMT0JBTF9DTURfTElORV9BUkdTICJBOmE6YjpCOkNjZERmOkY6SDpoaTpJOms6SzpsOkw6bjpOTzpvOlA6cDpydDpUOnY6Vlc6dzo0NiIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCQkJCQkJCQkJKi8KKy8qCUV4dGVybiB2YXJpYWJsZXMgCQkJCQkJKi8KKy8qCQkJCQkJCQkJKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitleHRlcm4gaW50IGVycm5vOworZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0WyBdOworZXh0ZXJuIGludCBzeXNfbmVycjsKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCQkJCQkJCSovCisvKglHbG9iYWwgdmFyaWFibGVzIAkJCQkJCSovCisvKgkJCQkJCQkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzb21lIG5hbWVzIGFuZCBzdWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworY2hhcgkqcHJvZ3JhbTsJCS8qIHByb2dyYW0gaW52b2NhdGlvbiBuYW1lCQkqLworY2hhciAgICAqY29tbWFuZF9saW5lOyAgICAgICAgICAvKiBhIGNvcHkgb2YgdGhlIGVudGlyZSBjb21tYW5kIGxpbmUgICAgKi8KK2NoYXIJdXNlcm5hbWVbQlVGU0laXTsJLyogbG9naW4gbmFtZSBvZiB1c2VyCQkJKi8KK2NoYXIJY21kX2ZpbGVbQlVGU0laXTsJLyogbmFtZSBvZiB0aGUgY29tbWFuZHMgZmlsZQkJKi8KKworLyogc3R1ZmYgdG8gc2F5IHdoZXJlIHRoaXMgdGVzdCBpcyBnb2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2NoYXIJaG9zdF9uYW1lW0hPU1ROQU1FU0laRV07CS8qIHJlbW90ZSBob3N0IG5hbWUgb3IgaXAgYWRkciAgKi8KK2NoYXIgICAgbG9jYWxfaG9zdF9uYW1lW0hPU1ROQU1FU0laRV07ICAvKiBsb2NhbCBob3N0bmFtZSBvciBpcCAqLworY2hhciAgICB0ZXN0X25hbWVbQlVGU0laXTsJCS8qIHdoaWNoIHRlc3QgdG8gcnVuIAkJKi8KK2NoYXIJdGVzdF9wb3J0W1BPUlRCVUZTSVpFXTsJCS8qIHdoZXJlIGlzIHRoZSB0ZXN0IHdhaXRpbmcgICAgKi8KK2NoYXIgICAgbG9jYWxfdGVzdF9wb3J0W1BPUlRCVUZTSVpFXTsgICAvKiBmcm9tIHdoZW5jZSB3ZSBzaG91bGQgc3RhcnQgKi8KK2ludCAgICAgYWRkcmVzc19mYW1pbHk7ICAgICAgICAgICAgICAgICAvKiB3aGljaCBhZGRyZXNzIGZhbWlseSByZW1vdGUgKi8KK2ludCAgICAgbG9jYWxfYWRkcmVzc19mYW1pbHk7ICAgICAgICAgICAvKiB3aGljaCBhZGRyZXNzIGZhbWlseSBsb2NhbCAqLworCisvKiB0aGUgc291cmNlIG9mIGRhdGEgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlcnMgKi8KK2NoYXIgICAgZmlsbF9maWxlW0JVRlNJWl07CisKKy8qIG91dHB1dCBjb250cm9sbGluZyB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitpbnQKKyAgZGVidWcsCQkJLyogZGVidWdnaW5nIGxldmVsICovCisgIHByaW50X2hlYWRlcnMsCQkvKiBkby9kb24ndCBkaXNwbGF5IGhlYWRlcnMgKi8KKyAgdmVyYm9zaXR5OwkJLyogdmVyYm9zaXR5IGxldmVsICovCisKKy8qIFdoZW4gc3BlY2lmaWVkIHdpdGggLUIsIHRoaXMgd2lsbCBiZSBkaXNwbGF5ZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGluZQorICAgZm9yIG91dHB1dCB0aGF0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHRlc3QgaGVhZGVyLiAgbW9zdGx5IHRoaXMgaXMKKyAgIHRvIGhlbHAgaWRlbnRpZnkgYSBzcGVjaWZpYyBuZXRwZXJmIHJlc3VsdCB3aGVuIGNvbmN1cnJlbnQgbmV0cGVyZnMKKyAgIGFyZSBydW4uIHJhaiAyMDA2LTAyLTAxICovCitjaGFyICpyZXN1bHRfYnJhbmQgPSBOVUxMOworCisvKiBjcHUgdmFyaWFibGVzICovCitpbnQKKyAgbG9jYWxfY3B1X3VzYWdlLAkvKiB5b3UgZ3Vlc3NlZCBpdAkJCSovCisgIHJlbW90ZV9jcHVfdXNhZ2U7CS8qIHN0aWxsIHJpZ2h0ICEJCQkqLworCitmbG9hdAkJCSAgICAgICAKKyAgbG9jYWxfY3B1X3JhdGUsCisgIHJlbW90ZV9jcHVfcmF0ZTsKKworaW50CisgIHNoZWxsX251bV9jcHVzPTE7CisKKy8qIHRoZSBlbmQtdGVzdCBjb25kaXRpb25zIGZvciB0aGUgdGVzdHMgLSBlaXRoZXIgdHJhbnNhY3Rpb25zLCBieXRlcywgICovCisvKiBvciB0aW1lLiBkaWZmZXJlbnQgdmFycyB1c2VkIGZvciBjbGFyaXR5IC0gc3BhY2UgaXMgY2hlYXAgOy0pICAgICAgICAqLworaW50CQorICB0ZXN0X3RpbWUsCQkvKiB0ZXN0IGVuZHMgYnkgdGltZQkJCSovCisgIHRlc3RfbGVuX3RpY2tzLCAgICAgICAvKiBob3cgbWFueSB0aW1lcyB3aWxsIHRoZSB0aW1lciBnbyBvZmYgYmVmb3JlICovCisJCQkvKiB0aGUgdGVzdCBpcyBvdmVyPyAqLworICB0ZXN0X2J5dGVzLAkJLyogdGVzdCBlbmRzIG9uIGJ5dGUgY291bnQJCSovCisgIHRlc3RfdHJhbnM7CQkvKiB0ZXN0IGVuZHMgb24gdHJhbiBjb3VudAkJKi8KKworLyogdGhlIGFsaWdubWVudCBjb25kaXRpb25zIGZvciB0aGUgdGVzdHMJCQkJKi8KK2ludAorICBsb2NhbF9yZWN2X2FsaWduLAkvKiBhbGlnbm1lbnQgZm9yIGxvY2FsIHJlY2VpdmVzCQkqLworICBsb2NhbF9zZW5kX2FsaWduLAkvKiBhbGlnbm1lbnQgZm9yIGxvY2FsIHNlbmRzCQkqLworICBsb2NhbF9zZW5kX29mZnNldCA9IDAsCisgIGxvY2FsX3JlY3Zfb2Zmc2V0ID0gMCwKKyAgcmVtb3RlX3JlY3ZfYWxpZ24sCS8qIGFsaWdubWVudCBmb3IgcmVtb3RlIHJlY2VpdmVzCSovCisgIHJlbW90ZV9zZW5kX2FsaWduLAkvKiBhbGlnbm1lbnQgZm9yIHJlbW90ZSBzZW5kcwkJKi8KKyAgcmVtb3RlX3NlbmRfb2Zmc2V0ID0gMCwKKyAgcmVtb3RlX3JlY3Zfb2Zmc2V0ID0gMCwKKyAgcmVtb3RlX3NlbmRfd2lkdGggPSAwLAorICByZW1vdGVfcmVjdl93aWR0aCA9IDA7CisKKy8qIGhvaXN0IGFib3ZlIHRoZSBpZiBmb3Igb21uaSAqLworaW50CisgIGludGVydmFsX3VzZWNzLAorICBpbnRlcnZhbF93YXRlLAorICBpbnRlcnZhbF9idXJzdCwKKyAgcmVtb3RlX2ludGVydmFsX3VzZWNzLAorICByZW1vdGVfaW50ZXJ2YWxfYnVyc3Q7CisKKyNpZiBkZWZpbmVkKFdBTlRfSU5URVJWQUxTKSB8fCBkZWZpbmVkKFdBTlRfREVNTykKKworaW50IGRlbW9fbW9kZTsgICAgICAgICAgICAgICAgICAgIC8qIGFyZSB3ZSBhY3R1YWxseSBpbiBkZW1vIG1vZGU/ICovCitkb3VibGUgZGVtb19pbnRlcnZhbCA9IDEwMDAwMDAuMDsgLyogd2hhdCBpcyB0aGUgZGVzaXJlZCBpbnRlcnZhbCB0bworCQkJCSAgICAgZGlzcGxheSBpbnRlcnZhbCByZXN1bHRzLiBkZWZhdWx0CisJCQkJICAgICBpcyBvbmUgc2Vjb25kIGluIHVuaXRzIG9mCisJCQkJICAgICBtaWNyb3NlY29uZHMgKi8KK2RvdWJsZSBkZW1vX3VuaXRzID0gMC4wOyAgICAgICAgICAvKiB3aGF0IGlzIG91ciBjdXJyZW50IGJlc3QgZ3Vlc3MgYXMKKwkJCQkgICAgIHRvIGhvdyBtYW55IHdvcmsgdW5pdHMgbXVzdCBiZQorCQkJCSAgICAgZG9uZSB0byBiZSBuZWFyIHRoZSBkZXNpcmVkCisJCQkJICAgICByZXBvcnRpbmcgaW50ZXJ2YWw/ICovIAorCitkb3VibGUgdW5pdHNfdGhpc190aWNrOworI2VuZGlmCisKK2ludAlsb2NfZGlydHlfY291bnQ7CitpbnQJbG9jX2NsZWFuX2NvdW50OworaW50CXJlbV9kaXJ0eV9jb3VudDsKK2ludAlyZW1fY2xlYW5fY291bnQ7CisKKyAvKiBzb21lIG9mIHRoZSB2YWlyYWJsZXMgZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLi4uICovCisKK2ludCAgY29uZmlkZW5jZV9sZXZlbDsKK2ludCAgaXRlcmF0aW9uX21pbjsKK2ludCAgaXRlcmF0aW9uX21heDsKK2ludCAgcmVzdWx0X2NvbmZpZGVuY2Vfb25seSA9IDA7CisKK2RvdWJsZSBpbnRlcnZhbDsKKworIC8qIHN0dWZmIHRvIGNvbnRyb2wgdGhlICJ3aWR0aCIgb2YgdGhlIGJ1ZmZlciByaW5ncyBmb3Igc2VuZGluZyBhbmQgKi8KKyAvKiByZWNlaXZpbmcgZGF0YSAqLworaW50CXNlbmRfd2lkdGg7CitpbnQgICAgIHJlY3Zfd2lkdGg7CisKKy8qIGFkZHJlc3MgZmFtaWx5ICovCitpbnQJYWYgPSBBRl9JTkVUOworCisvKiBkaWQgc29tZW9uZSByZXF1ZXN0IHByb2Nlc3NvciBhZmZpbml0eT8gKi8KK2ludCBjcHVfYmluZGluZ19yZXF1ZXN0ZWQgPSAwOworCisvKiBhcmUgd2Ugbm90IGVzdGFibGlzaGluZyBhIGNvbnRyb2wgY29ubmVjdGlvbj8gKi8KK2ludCBub19jb250cm9sID0gMDsKKworY2hhciBuZXRzZXJ2ZXJfdXNhZ2VbXSA9ICJcblwKK1VzYWdlOiBuZXRzZXJ2ZXIgW29wdGlvbnNdIFxuXAorXG5cCitPcHRpb25zOlxuXAorICAgIC1oICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyB0ZXh0XG5cCisgICAgLWQgICAgICAgICAgICAgICAgSW5jcmVhc2UgZGVidWdnaW5nIG91dHB1dFxuXAorICAgIC1MIG5hbWUsZmFtaWx5ICAgIFVzZSBuYW1lIHRvIHBpY2sgbGlzdGVuIGFkZHJlc3MgYW5kIGZhbWlseSBmb3IgZmFtaWx5XG5cCisgICAgLXAgcG9ydG51bSAgICAgICAgTGlzdGVuIGZvciBjb25uZWN0IHJlcXVlc3RzIG9uIHBvcnRudW0uXG5cCisgICAgLTQgICAgICAgICAgICAgICAgRG8gSVB2NFxuXAorICAgIC02ICAgICAgICAgICAgICAgIERvIElQdjZcblwKKyAgICAtdiB2ZXJib3NpdHkgICAgICBTcGVjaWZ5IHRoZSB2ZXJib3NpdHkgbGV2ZWxcblwKKyAgICAtViAgICAgICAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcblwKK1xuIjsKKworLyogbmV0cGVyZl91c2FnZSBkb25lIGFzIHR3byBjb25jYXRlbmF0ZWQgc3RyaW5ncyB0byBtYWtlIHRoZSBNUworICAgY29tcGlsZXIgaGFwcHkgd2hlbiBjb21waWxpbmcgZm9yIHg4Nl8zMi4gIGZpeCBmcm9tIFNwZW5jZXIKKyAgIEZyaW5rLiAgKi8KKworY2hhciBuZXRwZXJmX3VzYWdlMVtdID0gIlxuXAorVXNhZ2U6IG5ldHBlcmYgW2dsb2JhbCBvcHRpb25zXSAtLSBbdGVzdCBvcHRpb25zXSBcblwKK1xuXAorR2xvYmFsIG9wdGlvbnM6XG5cCisgICAgLWEgc2VuZCxyZWN2ICAgICAgU2V0IHRoZSBsb2NhbCBzZW5kLHJlY3YgYnVmZmVyIGFsaWdubWVudFxuXAorICAgIC1BIHNlbmQscmVjdiAgICAgIFNldCB0aGUgcmVtb3RlIHNlbmQscmVjdiBidWZmZXIgYWxpZ25tZW50XG5cCisgICAgLUIgYnJhbmRzdHIgICAgICAgU3BlY2lmeSBhIHN0cmluZyB0byBiZSBlbWl0dGVkIHdpdGggYnJpZWYgb3V0cHV0XG5cCisgICAgLWMgW2NwdV9yYXRlXSAgICAgUmVwb3J0IGxvY2FsIENQVSB1c2FnZVxuXAorICAgIC1DIFtjcHVfcmF0ZV0gICAgIFJlcG9ydCByZW1vdGUgQ1BVIHVzYWdlXG5cCisgICAgLWQgICAgICAgICAgICAgICAgSW5jcmVhc2UgZGVidWdnaW5nIG91dHB1dFxuXAorICAgIC1EIFtzZWNzLHVuaXRzXSAqIERpc3BsYXkgaW50ZXJpbSByZXN1bHRzIGF0IGxlYXN0IGV2ZXJ5IHNlY3Mgc2Vjb25kc1xuXAorICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHVuaXRzIGFzIHRoZSBpbml0aWFsIGd1ZXNzIGZvciB1bml0cyBwZXIgc2Vjb25kXG5cCisgICAgLWYgR3xNfEt8Z3xtfGsgICAgU2V0IHRoZSBvdXRwdXQgdW5pdHNcblwKKyAgICAtRiBmaWxsX2ZpbGUgICAgICBQcmUtZmlsbCBidWZmZXJzIHdpdGggZGF0YSBmcm9tIGZpbGxfZmlsZVxuXAorICAgIC1oICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyB0ZXh0XG5cCisgICAgLUggbmFtZXxpcCxmYW0gKiAgU3BlY2lmeSB0aGUgdGFyZ2V0IG1hY2hpbmUgYW5kL29yIGxvY2FsIGlwIGFuZCBmYW1pbHlcblwKKyAgICAtaSBtYXgsbWluICAgICAgICBTcGVjaWZ5IHRoZSBtYXggYW5kIG1pbiBudW1iZXIgb2YgaXRlcmF0aW9ucyAoMTUsMSlcblwKKyAgICAtSSBsdmxbLGludHZsXSAgICBTcGVjaWZ5IGNvbmZpZGVuY2UgbGV2ZWwgKDk1IG9yIDk5KSAoOTkpIFxuXAorICAgICAgICAgICAgICAgICAgICAgIGFuZCBjb25maWRlbmNlIGludGVydmFsIGluIHBlcmNlbnRhZ2UgKDEwKVxuXAorICAgIC1sIHRlc3RsZW4gICAgICAgIFNwZWNpZnkgdGVzdCBkdXJhdGlvbiAoPjAgc2VjcykgKDwwIGJ5dGVzfHRyYW5zKVxuXAorICAgIC1MIG5hbWV8aXAsZmFtICogIFNwZWNpZnkgdGhlIGxvY2FsIGlwfG5hbWUgYW5kIGFkZHJlc3MgZmFtaWx5XG5cCisgICAgLW8gc2VuZCxyZWN2ICAgICAgU2V0IHRoZSBsb2NhbCBzZW5kLHJlY3YgYnVmZmVyIG9mZnNldHNcblwKKyAgICAtTyBzZW5kLHJlY3YgICAgICBTZXQgdGhlIHJlbW90ZSBzZW5kLHJlY3YgYnVmZmVyIG9mZnNldFxuXAorICAgIC1uIG51bWNwdSAgICAgICAgIFNldCB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgZm9yIENQVSB1dGlsXG5cCisgICAgLU4gICAgICAgICAgICAgICAgRXN0YWJsaXNoIG5vIGNvbnRyb2wgY29ubmVjdGlvbiwgZG8gJ3NlbmQnIHNpZGUgb25seVxuXAorICAgIC1wIHBvcnQsbHBvcnQqICAgIFNwZWNpZnkgbmV0c2VydmVyIHBvcnQgbnVtYmVyIGFuZC9vciBsb2NhbCBwb3J0XG5cCisgICAgLVAgMHwxICAgICAgICAgICAgRG9uJ3QvRG8gZGlzcGxheSB0ZXN0IGhlYWRlcnNcblwKKyAgICAtciAgICAgICAgICAgICAgICBBbGxvdyBjb25maWRlbmNlIHRvIGJlIGhpdCBvbiByZXN1bHQgb25seVxuXAorICAgIC10IHRlc3RuYW1lICAgICAgIFNwZWNpZnkgdGVzdCB0byBwZXJmb3JtXG5cCisgICAgLVQgbGNwdSxyY3B1ICAgICAgUmVxdWVzdCBuZXRwZXJmL25ldHNlcnZlciBiZSBib3VuZCB0byBsb2NhbC9yZW1vdGUgY3B1XG5cCisgICAgLXYgdmVyYm9zaXR5ICAgICAgU3BlY2lmeSB0aGUgdmVyYm9zaXR5IGxldmVsXG5cCisgICAgLVcgc2VuZCxyZWN2ICAgICAgU2V0IHRoZSBudW1iZXIgb2Ygc2VuZCxyZWN2IGJ1ZmZlcnNcblwKKyAgICAtdiBsZXZlbCAgICAgICAgICBTZXQgdGhlIHZlcmJvc2l0eSBsZXZlbCAoZGVmYXVsdCAxLCBtaW4gMClcblwKKyAgICAtViAgICAgICAgICAgICAgICBEaXNwbGF5IHRoZSBuZXRwZXJmIHZlcnNpb24gYW5kIGV4aXRcbiI7CisKK2NoYXIgbmV0cGVyZl91c2FnZTJbXSA9ICJcblwKK0ZvciB0aG9zZSBvcHRpb25zIHRha2luZyB0d28gcGFybXMsIGF0IGxlYXN0IG9uZSBtdXN0IGJlIHNwZWNpZmllZDtcblwKK3NwZWNpZnlpbmcgb25lIHZhbHVlIHdpdGhvdXQgYSBjb21tYSB3aWxsIHNldCBib3RoIHBhcm1zIHRvIHRoYXRcblwKK3ZhbHVlLCBzcGVjaWZ5aW5nIGEgdmFsdWUgd2l0aCBhIGxlYWRpbmcgY29tbWEgd2lsbCBzZXQganVzdCB0aGUgc2Vjb25kXG5cCitwYXJtLCBhIHZhbHVlIHdpdGggYSB0cmFpbGluZyBjb21tYSB3aWxsIHNldCBqdXN0IHRoZSBmaXJzdC4gVG8gc2V0XG5cCitlYWNoIHBhcm0gdG8gdW5pcXVlIHZhbHVlcywgc3BlY2lmeSBib3RoIGFuZCBzZXBhcmF0ZSB0aGVtIHdpdGggYVxuXAorY29tbWEuXG5cCitcbiIKKyIqIEZvciB0aGVzZSBvcHRpb25zIHRha2luZyB0d28gcGFybXMsIHNwZWNpZnlpbmcgb25lIHZhbHVlIHdpdGggbm8gY29tbWFcblwKK3dpbGwgb25seSBzZXQgdGhlIGZpcnN0IHBhcm1zIGFuZCB3aWxsIGxlYXZlIHRoZSBzZWNvbmQgYXQgdGhlIGRlZmF1bHRcblwKK3ZhbHVlLiBUbyBzZXQgdGhlIHNlY29uZCB2YWx1ZSBpdCBtdXN0IGJlIHByZWNlZGVkIHdpdGggYSBjb21tYSBvciBiZSBhXG5cCitjb21tYS1zZXBhcmF0ZWQgcGFpci4gVGhpcyBpcyB0byByZXRhaW4gcHJldmlvdXMgbmV0cGVyZiBiZWhhdmlvdXIuXG4iOyAKKworDAorLyogVGhpcyByb3V0aW5lIHdpbGwgcmV0dXJuIHRoZSB0d28gYXJndW1lbnRzIHRvIHRoZSBjYWxsaW5nIHJvdXRpbmUuICovCisvKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBzcGVjaWZpZWQsIGFuZCB0aGVyZSBpcyBubyBjb21tYSwgKi8KKy8qIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgKi8KKy8qIHZhbHVlIG9mIHRoZSBmaXJzdC4gSWYgdGhlcmUgaXMgYSBjb21tYSwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlICovCisvKiBzZWNvbmQgYXJndW1lbnQgd2lsbCBiZSB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBhcmd1bWVudCA7LSkgKi8KK3ZvaWQKK2JyZWFrX2FyZ3MoY2hhciAqcywgY2hhciAqYXJnMSwgY2hhciAqYXJnMikKKworeworICBjaGFyICpuczsKKyAgbnMgPSBzdHJjaHIocywnLCcpOworICBpZiAobnMpIHsKKyAgICAvKiB0aGVyZSB3YXMgYSBjb21tYSBhcmcyIHNob3VsZCBiZSB0aGUgc2Vjb25kIGFyZyovCisgICAgKm5zKysgPSAnXDAnOworICAgIHdoaWxlICgoKmFyZzIrKyA9ICpucysrKSAhPSAnXDAnKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiB0aGVyZSB3YXMgbm90IGEgY29tbWEsIHdlIGNhbiB1c2UgbnMgYXMgYSB0ZW1wIHMgKi8KKyAgICAvKiBhbmQgYXJnMiBzaG91bGQgYmUgdGhlIHNhbWUgdmFsdWUgYXMgYXJnMSAqLworICAgIG5zID0gczsKKyAgICB3aGlsZSAoKCphcmcyKysgPSAqbnMrKykgIT0gJ1wwJyk7CisgIH07CisgIHdoaWxlICgoKmFyZzErKyA9ICpzKyspICE9ICdcMCcpOworfQorCisvKiBicmVha19hcmdzX2V4cGxpY2l0CisKKyAgIHRoaXMgcm91dGluZSBpcyBzb21ld2hhdCBsaWtlIGJyZWFrX2FyZ3MgaW4gdGhhdCBpdCB3aWxsIHNlcGFyYXRlIGEKKyAgIHBhaXIgb2YgY29tbWEtc2VwYXJhdGVkIHZhbHVlcy4gIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIG5vIGNvbW1hLAorICAgdGhpcyB2ZXJzaW9uIHdpbGwgbm90IGFzcy11LW1lIHRoYXQgYXJnMiBzaG91bGQgYmUgdGhlIHNhbWUgYXMKKyAgIGFyZzEuIHJhaiAyMDA1LTAyLTA0ICovCit2b2lkCiticmVha19hcmdzX2V4cGxpY2l0KGNoYXIgKnMsIGNoYXIgKmFyZzEsIGNoYXIgKmFyZzIpCisKK3sKKyAgY2hhciAqbnM7CisgIG5zID0gc3RyY2hyKHMsJywnKTsKKyAgaWYgKG5zKSB7CisgICAgLyogdGhlcmUgd2FzIGEgY29tbWEgYXJnMiBzaG91bGQgYmUgdGhlIHNlY29uZCBhcmcqLworICAgICpucysrID0gJ1wwJzsKKyAgICB3aGlsZSAoKCphcmcyKysgPSAqbnMrKykgIT0gJ1wwJyk7CisgIH0KKyAgZWxzZSB7CisgICAgLyogdGhlcmUgd2FzIG5vdCBhIGNvbW1hLCBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgYXJnMiBpcyBcMAorICAgICAgIGxlc3Qgc29tZXRoaW5nIGJlY29tZSBjb25mdXNlZC4gcmFqIDIwMDUtMDItMDQgKi8KKyAgICAqYXJnMiA9ICdcMCc7CisgIH07CisgIHdoaWxlICgoKmFyZzErKyA9ICpzKyspICE9ICdcMCcpOworCit9CisKKy8qIGdpdmVuIGEgc3RyaW5nIHdpdGggcG9zc2libGUgdmFsdWVzIGZvciBzZXR0aW5nIGFuIGFkZHJlc3MgZmFtaWx5LAorICAgY29udmVydCB0aGF0IGludG8gb25lIG9mIHRoZSBBRl9tdW1ibGUgdmFsdWVzIC0gQUZfSU5FVCwgQUZfSU5FVDYsCisgICBBRl9VTlNQRUMgYXMgYXByb3ByaWF0ZS4gdGhlIGZhbWlseV9zdHJpbmcgaXMgY29tcGFyZWQgaW4gYQorICAgY2FzZS1pbnNlbnNpdGl2ZSBtYW5uZXIgKi8KKworaW50CitwYXJzZV9hZGRyZXNzX2ZhbWlseShjaGFyIGZhbWlseV9zdHJpbmdbXSkKK3sKKworICBjaGFyIHRlbXBbMTBdOyAgLyogZ290dGEgbG92ZSBtYWdpYyBjb25zdGFudHMgOikgKi8KKworICBzdHJuY3B5KHRlbXAsZmFtaWx5X3N0cmluZywxMCk7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIkF0dGVtcHRpbmcgdG8gcGFyc2UgYWRkcmVzcyBmYW1pbHkgZnJvbSAlcyBkZXJpdmVkIGZyb20gJXNcbiIsCisJICAgIHRlbXAsCisJICAgIGZhbWlseV9zdHJpbmcpOworICB9CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgaWYgKHN0cnN0cih0ZW1wLCI2IikpIHsKKyAgICByZXR1cm4oQUZfSU5FVDYpOworICB9CisjZW5kaWYKKyAgaWYgKHN0cnN0cih0ZW1wLCJpbmV0IikgfHwKKyAgICAgIHN0cnN0cih0ZW1wLCI0IikpIHsKKyAgICByZXR1cm4oQUZfSU5FVCk7CisgIH0KKyAgaWYgKHN0cnN0cih0ZW1wLCJ1bnNwZWMiKSB8fAorICAgICAgc3Ryc3RyKHRlbXAsIjAiKSkgeworICAgIHJldHVybihBRl9VTlNQRUMpOworICB9CisgIGZwcmludGYod2hlcmUsCisJICAiV0FSTklORyEgJXMgbm90IHJlY29nbml6ZWQgYXMgYW4gYWRkcmVzcyBmYW1pbHksIHVzaW5nIEFGX1VOUFNFQ1xuIiwKKwkgIGZhbWlseV9zdHJpbmcpOworICBmcHJpbnRmKHdoZXJlLAorCSAgIkFyZSB5b3Ugc3VyZSBuZXRwZXJmIHdhcyBjb25maWd1cmVkIGZvciB0aGF0IGFkZHJlc3MgZmFtaWx5P1xuIik7CisgIGZmbHVzaCh3aGVyZSk7CisgIHJldHVybihBRl9VTlNQRUMpOworfQorCitpbnQKK3BhcnNlX3NvY2tldF90eXBlKGNoYXIgc29ja2V0X3N0cmluZ1tdKSB7CisKKyAgY2hhciB0ZW1wWzEwXTsKKworICBzdHJuY3B5KHRlbXAsc29ja2V0X3N0cmluZywxMCk7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIkF0dGVtcHRpbmcgdG8gcGFyc2Ugc29ja2V0IHR5cGUgZnJvbSAlcyBkZXJpdmVkIGZyb20gJXNcbiIsCisJICAgIHRlbXAsCisJICAgIHNvY2tldF9zdHJpbmcpOworICB9CisKKyNpZmRlZiBTT0NLX1NUUkVBTQorICBpZiAoc3Ryc3RyKHRlbXAsInN0cmVhbSIpKQorICAgIHJldHVybiBTT0NLX1NUUkVBTTsKKyNlbmRpZgorI2lmZGVmIFNPQ0tfREdSQU0KKyAgaWYgKHN0cnN0cih0ZW1wLCJkZ3JhbSIpKQorICAgIHJldHVybiBTT0NLX0RHUkFNOworI2VuZGlmCisgIHJldHVybiBOU1RfVU5LTjsKKworfQorCitpbnQKK3BhcnNlX3Byb3RvY29sKGNoYXIgcHJvdG9jb2xfc3RyaW5nW10pIAoreworICBjaGFyIHRlbXBbMTBdOworCisgIHN0cm5jcHkodGVtcCxwcm90b2NvbF9zdHJpbmcsMTApOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJBdHRlbXB0aW5nIHRvIHBhcnNlIHByb3RvY29sIGZyb20gJXMgZGVyaXZlZCBmcm9tICVzXG4iLAorCSAgICB0ZW1wLAorCSAgICBwcm90b2NvbF9zdHJpbmcpOworICB9CisgIAorI2lmZGVmIElQUFJPVE9fVENQCisgIGlmICghc3RyY2FzZWNtcCh0ZW1wLCJ0Y3AiKSl7CisgICAgc29ja2V0X3R5cGUgPSBTT0NLX1NUUkVBTTsKKyAgICByZXR1cm4gSVBQUk9UT19UQ1A7CisgIH0KKyNlbmRpZgorI2lmZGVmIElQUFJPVE9fVURQCisgIGlmICghc3RyY2FzZWNtcCh0ZW1wLCJ1ZHAiKSkgeworICAgIHNvY2tldF90eXBlID0gU09DS19ER1JBTTsKKyAgICByZXR1cm4gSVBQUk9UT19VRFA7CisgIH0KKyNlbmRpZgorI2lmZGVmIElQUFJPVE9fU0NUUAorICBpZiAoIXN0cmNhc2VjbXAodGVtcCwic2N0cCIpKSB7CisgICAgLyogaXQgY2FuIGJlIG1vcmUgdGhhbiBvbmUgc29ja2V0IHR5cGUgKi8KKyAgICByZXR1cm4gSVBQUk9UT19TQ1RQOworICB9CisjZW5kaWYKKyNpZmRlZiBJUFBST1RPX1NEUAorICBpZiAoIXN0cmNhc2VjbXAodGVtcCwic2RwIikpIHsKKyAgICBzb2NrZXRfdHlwZSA9IFNPQ0tfU1RSRUFNOworICAgIHJldHVybiBJUFBST1RPX1NEUDsKKyAgfQorI2VuZGlmCisjaWZkZWYgSVBQUk9UT19EQ0NQCisgIGlmICghc3RyY2FzZWNtcCh0ZW1wLCJkY2NwIikpIHsKKyAgICBzb2NrZXRfdHlwZSA9IFNPQ0tfRENDUDsKKyAgICByZXR1cm4gSVBQUk9UT19EQ0NQOworICB9CisjZW5kaWYKKyAgcmV0dXJuIElQUFJPVE9fSVA7Cit9CisKKwwKK3ZvaWQKK3NldF9kZWZhdWx0cygpCit7CisgIAorICAvKiBzdHVmZiB0byBzYXkgd2hlcmUgdGhpcyB0ZXN0IGlzIGdvaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RyY3B5KGhvc3RfbmFtZSwiIik7CSAgICAgIC8qIHJlbW90ZSBob3N0IG5hbWUgb3IgaXAgYWRkciAgKi8KKyAgc3RyY3B5KGxvY2FsX2hvc3RfbmFtZSwiIik7IC8qIHdlIHdhbnQgaXQgdG8gYmUgSU5BRERSX0FOWSAqLworICBzdHJjcHkodGVzdF9uYW1lLCJUQ1BfU1RSRUFNIik7CS8qIHdoaWNoIHRlc3QgdG8gcnVuIAkJKi8KKyAgc3RybmNweSh0ZXN0X3BvcnQsIjEyODY1IixQT1JUQlVGU0laRSk7IC8qIHdoZXJlIGlzIHRoZSB0ZXN0IHdhaXRpbmcgICAgKi8KKyAgc3RybmNweShsb2NhbF90ZXN0X3BvcnQsIjAiLFBPUlRCVUZTSVpFKTsvKiBJTlBPUlRfQU5ZIGFzIGl0IHdlcmUgKi8KKyAgYWRkcmVzc19mYW1pbHkgPSBBRl9VTlNQRUM7CisgIGxvY2FsX2FkZHJlc3NfZmFtaWx5ID0gQUZfVU5TUEVDOworCisgIC8qIG91dHB1dCBjb250cm9sbGluZyB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgZGVidWcJCQk9IDA7LyogZGVidWdnaW5nIGxldmVsCQkJKi8KKyAgcHJpbnRfaGVhZGVycwkJPSAxOy8qIGRvIHByaW50IHRlc3QgaGVhZGVycwkJKi8KKyAgdmVyYm9zaXR5CQk9IDE7LyogdmVyYm9zaXR5IGxldmVsCQkJKi8KKyAgLyogY3B1IHZhcmlhYmxlcyAqLworICBsb2NhbF9jcHVfdXNhZ2UJPSAwOy8qIG1lYXN1cmUgbG9jYWwgY3B1CQkqLworICByZW1vdGVfY3B1X3VzYWdlCT0gMDsvKiB3aGF0IGRvIHlvdSB0aGluayA7LSkJCSovCisgIAorICBsb2NhbF9jcHVfcmF0ZQk9IChmbG9hdCkwLjA7CisgIHJlbW90ZV9jcHVfcmF0ZQk9IChmbG9hdCkwLjA7CisgIAorICAvKiB0aGUgZW5kLXRlc3QgY29uZGl0aW9ucyBmb3IgdGhlIHRlc3RzIC0gZWl0aGVyIHRyYW5zYWN0aW9ucywgYnl0ZXMsICAqLworICAvKiBvciB0aW1lLiBkaWZmZXJlbnQgdmFycyB1c2VkIGZvciBjbGFyaXR5IC0gc3BhY2UgaXMgY2hlYXAgOy0pICAgICAgICAqLworICB0ZXN0X3RpbWUJPSAxMDsJLyogdGVzdCBlbmRzIGJ5IHRpbWUJCQkqLworICB0ZXN0X2J5dGVzCT0gMDsJLyogdGVzdCBlbmRzIG9uIGJ5dGUgY291bnQJCSovCisgIHRlc3RfdHJhbnMJPSAwOwkvKiB0ZXN0IGVuZHMgb24gdHJhbiBjb3VudAkJKi8KKyAgCisgIC8qIHRoZSBhbGlnbm1lbnQgY29uZGl0aW9ucyBmb3IgdGhlIHRlc3RzCQkJCSovCisgIGxvY2FsX3JlY3ZfYWxpZ24JPSA4OwkvKiBhbGlnbm1lbnQgZm9yIGxvY2FsIHJlY2VpdmVzCSovCisgIGxvY2FsX3NlbmRfYWxpZ24JPSA4OwkvKiBhbGlnbm1lbnQgZm9yIGxvY2FsIHNlbmRzCSovCisgIHJlbW90ZV9yZWN2X2FsaWduCT0gODsJLyogYWxpZ25tZW50IGZvciByZW1vdGUgcmVjZWl2ZXMqLworICByZW1vdGVfc2VuZF9hbGlnbgk9IDg7CS8qIGFsaWdubWVudCBmb3IgcmVtb3RlIHNlbmRzCSovCisgIAorICAvKiByYXRlIGNvbnRyb2xsaW5nIHN0dWZmLCB0YWtlbiBvdXQgb2YgdGhlICNpZmRlZiBmb3Igb21uaSAqLworICBpbnRlcnZhbF91c2VjcyAgPSAwOworICBpbnRlcnZhbF93YXRlICAgPSAwOworICBpbnRlcnZhbF9idXJzdCAgPSAwOworICByZW1vdGVfaW50ZXJ2YWxfdXNlY3MgPSAwOworICByZW1vdGVfaW50ZXJ2YWxfYnVyc3QgPSAwOworCisjaWZkZWYgRElSVFkKKyAgLyogZGlydHkgYW5kIGNsZWFuIGNhY2hlIHN0dWZmICovCisgIGxvY19kaXJ0eV9jb3VudCA9IDA7CisgIGxvY19jbGVhbl9jb3VudCA9IDA7CisgIHJlbV9kaXJ0eV9jb3VudCA9IDA7CisgIHJlbV9jbGVhbl9jb3VudCA9IDA7CisjZWxzZQorICBsb2NfZGlydHlfY291bnQgPSAtMTsKKyAgbG9jX2NsZWFuX2NvdW50ID0gLTE7CisgIHJlbV9kaXJ0eV9jb3VudCA9IC0xOworICByZW1fY2xlYW5fY291bnQgPSAtMTsKKyNlbmRpZiAvKiBESVJUWSAqLworCisgLyogc29tZSBvZiB0aGUgdmFpcmFibGVzIGZvciBjb25maWRlbmNlIGludGVydmFscy4uLiBkZWZhdWx0cyB3aWxsIGJlCisgICAgc2V0IGFzIGFwcm9wcmlhdGUgaW4gdGhlIHBhcnNpbmcgb2YgdGhlIGNvbW1hbmQgbGluZSAgKi8KKworICBjb25maWRlbmNlX2xldmVsID0gMDsKKyAgaXRlcmF0aW9uX21pbiA9IDE7CisgIGl0ZXJhdGlvbl9tYXggPSAxOworICBpbnRlcnZhbCA9IDAuMDsKKworICBub19jb250cm9sID0gMDsKKyAgc3RyY3B5KGZpbGxfZmlsZSwiIik7Cit9CisgICAgIAorDAordm9pZAorcHJpbnRfbmV0c2VydmVyX3VzYWdlKCkKK3sKKyAgZndyaXRlKG5ldHNlcnZlcl91c2FnZSwgc2l6ZW9mKGNoYXIpLCBzdHJsZW4obmV0c2VydmVyX3VzYWdlKSwgc3RkZXJyKTsKK30KKworDAordm9pZAorcHJpbnRfbmV0cGVyZl91c2FnZSgpCit7CisgIGZ3cml0ZShuZXRwZXJmX3VzYWdlMSwgc2l6ZW9mKGNoYXIpLCBzdHJsZW4obmV0cGVyZl91c2FnZTEpLCAgc3RkZXJyKTsKKyAgZndyaXRlKG5ldHBlcmZfdXNhZ2UyLCBzaXplb2YoY2hhciksIHN0cmxlbihuZXRwZXJmX3VzYWdlMiksICBzdGRlcnIpOworfQorCit2b2lkCitzY2FuX2NtZF9saW5lKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGV4dGVybiBpbnQJb3B0aW5kOyAgICAgICAgICAgLyogaW5kZXggb2YgZmlyc3QgdW51c2VkIGFyZyAJKi8KKyAgZXh0ZXJuIGNoYXIJKm9wdGFyZzsJICAvKiBwb2ludGVyIHRvIG9wdGlvbiBzdHJpbmcJKi8KKworICBpbnQgICAgICAgICAgIGNtbmRfbGVuOworICBjaGFyICAgICAgICAgICpwOworCisgIGludAkJYzsKKyAgCisgIGNoYXIJYXJnMVtCVUZTSVpdLCAgLyogYXJndW1lbnQgaG9sZGVycwkJKi8KKyAgICBhcmcyW0JVRlNJWl07CisgIAorICBwcm9ncmFtID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKGFyZ3ZbMF0pICsgMSk7CisgIGlmIChwcm9ncmFtID09IE5VTEwpIHsKKyAgICBwcmludGYoIm1hbGxvYyglZCkgZmFpbGVkIVxuIiwgc3RybGVuKGFyZ3ZbMF0pICsgMSk7CisgICAgZXhpdCgxKTsKKyAgfQorICBzdHJjcHkocHJvZ3JhbSwgYXJndlswXSk7CisKKyAgLyogYnJ1dGUgZm9yY2UsIGJ1dCBlZmZlY3RpdmUgKi8KKyAgY29tbWFuZF9saW5lID0gTlVMTDsKKyAgY21uZF9sZW4gPSAwOworICBmb3IgKGMgPSAwOyBjIDwgYXJnYzsgYysrKSB7CisgICAgY21uZF9sZW4gKz0gc3RybGVuKGFyZ3ZbY10pOworICB9CisgIGNtbmRfbGVuICs9IGFyZ2M7ICAvKiBmb3JnZXQgdGhlZSBub3QgdGhlIHNwYWNlcyAqLworICBjb21tYW5kX2xpbmUgPSBtYWxsb2MoY21uZF9sZW4rMSk7CisKKyAgaWYgKGNvbW1hbmRfbGluZSA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsY21uZF9sZW4pOworICAgIGV4aXQoLTEpOworICB9CisgIHAgPSBjb21tYW5kX2xpbmU7CisgIGZvciAoYyA9IDA7IGMgPCBhcmdjOyBjKyspIHsKKyAgICBtZW1jcHkocCxhcmd2W2NdLHN0cmxlbihhcmd2W2NdKSk7CisgICAgcCArPSBzdHJsZW4oYXJndltjXSk7CisgICAgKnAgPSAnICc7CisgICAgcCArPSAxOworICB9CisgICotLXAgPSAwOworCisgIC8qIEdvIHRocm91Z2ggYWxsIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBicmVhayB0aGVtICovCisgIC8qIG91dC4gRm9yIHRob3NlIG9wdGlvbnMgdGhhdCB0YWtlIHR3byBwYXJtcywgc3BlY2lmeWluZyBvbmx5ICovCisgIC8qIHRoZSBmaXJzdCB3aWxsIHNldCBib3RoIHRvIHRoYXQgdmFsdWUuIFNwZWNpZnlpbmcgb25seSB0aGUgKi8KKyAgLyogc2Vjb25kIHdpbGwgbGVhdmUgdGhlIGZpcnN0IHVudG91Y2hlZC4gVG8gY2hhbmdlIG9ubHkgdGhlICovCisgIC8qIGZpcnN0LCB1c2UgdGhlIGZvcm0gZmlyc3QsIChzZWUgdGhlIHJvdXRpbmUgYnJlYWtfYXJncy4uICovCisgIAorICB3aGlsZSAoKGM9IGdldG9wdChhcmdjLCBhcmd2LCBHTE9CQUxfQ01EX0xJTkVfQVJHUykpICE9IEVPRikgeworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgJz8nOgkKKyAgICBjYXNlICdoJzoKKyAgICAgIHByaW50X25ldHBlcmZfdXNhZ2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgY2FzZSAnYSc6CisgICAgICAvKiBzZXQgbG9jYWwgYWxpZ25tZW50cyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSB7CisJbG9jYWxfc2VuZF9hbGlnbiA9IGNvbnZlcnQoYXJnMSk7CisgICAgICB9CisgICAgICBpZiAoYXJnMlswXSkKKwlsb2NhbF9yZWN2X2FsaWduID0gY29udmVydChhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0EnOgorICAgICAgLyogc2V0IHJlbW90ZSBhbGlnbm1lbnRzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pIHsKKwlyZW1vdGVfc2VuZF9hbGlnbiA9IGNvbnZlcnQoYXJnMSk7CisgICAgICB9CisgICAgICBpZiAoYXJnMlswXSkKKwlyZW1vdGVfcmVjdl9hbGlnbiA9IGNvbnZlcnQoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdjJzoKKyAgICAgIC8qIG1lYXN1cmUgbG9jYWwgY3B1IHVzYWdlIHBsZWFzZS4gdGhlIHVzZXIgKi8KKyAgICAgIC8qIG1heSBoYXZlIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUgYXMgYW4gKi8KKyAgICAgIC8qIG9wdGlvbmFsIHBhcm0gKi8KKyAgICAgIGlmIChhcmd2W29wdGluZF0gJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcilhcmd2W29wdGluZF1bMF0pKXsKKwkvKiB0aGVyZSB3YXMgYW4gb3B0aW9uYWwgcGFybSAqLworCWxvY2FsX2NwdV9yYXRlID0gKGZsb2F0KWF0b2YoYXJndltvcHRpbmRdKTsKKwlvcHRpbmQrKzsKKyAgICAgIH0KKyAgICAgIGxvY2FsX2NwdV91c2FnZSsrOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnQyc6CisgICAgICAvKiBtZWFzdXJlIHJlbW90ZSBjcHUgdXNhZ2UgcGxlYXNlICovCisgICAgICBpZiAoYXJndltvcHRpbmRdICYmIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYXJndltvcHRpbmRdWzBdKSl7CisJLyogdGhlcmUgd2FzIGFuIG9wdGlvbmFsIHBhcm0gKi8KKwlyZW1vdGVfY3B1X3JhdGUgPSAoZmxvYXQpYXRvZihhcmd2W29wdGluZF0pOworCW9wdGluZCsrOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91c2FnZSsrOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnZCc6CisgICAgICBkZWJ1ZysrOworI2lmZGVmIE1TRE9TCisgICAgICBkYnVnX2luaXQoKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisgICAgY2FzZSAnRCc6CisjaWYgKGRlZmluZWQgV0FOVF9ERU1PKQorICAgICAgZGVtb19tb2RlKys7CisgICAgICBpZiAoYXJndltvcHRpbmRdICYmIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYXJndltvcHRpbmRdWzBdKSl7CisJLyogdGhlcmUgd2FzIGFuIG9wdGlvbmFsIHBhcm0gKi8KKwlicmVha19hcmdzX2V4cGxpY2l0KGFyZ3Zbb3B0aW5kXSxhcmcxLGFyZzIpOworCW9wdGluZCsrOworCWlmIChhcmcxWzBdKSB7CisJICBkZW1vX2ludGVydmFsID0gYXRvZihhcmcxKSAqIDEwMDAwMDAuMDsKKwl9CisJaWYgKGFyZzJbMF0pIHsKKwkgIGRlbW9fdW5pdHMgPSBjb252ZXJ0KGFyZzIpOworCX0KKyAgICAgIH0KKyNlbHNlIAorICAgICAgcHJpbnRmKCJTb3JyeSwgRGVtbyBNb2RlIG5vdCBjb25maWd1cmVkIGludG8gdGhpcyBuZXRwZXJmLlxuIik7CisgICAgICBwcmludGYoInBsZWFzZSBjb25zaWRlciByZWNvbmZpZ3VyaW5nIG5ldHBlcmYgd2l0aFxuIik7CisgICAgICBwcmludGYoIi0tZW5hYmxlLWRlbW89eWVzIGFuZCByZWNvbXBpbGluZ1xuIik7CisjZW5kaWYgCisgICAgICBicmVhazsKKyAgICBjYXNlICdmJzoKKyAgICAgIC8qIHNldCB0aGUgdGhydXB1dCBmb3JtYXR0aW5nICovCisgICAgICBsaWJmbXQgPSAqb3B0YXJnOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnRic6CisgICAgICAvKiBzZXQgdGhlIGZpbGxfZmlsZSB2YXJpYWJsZSBmb3IgcHJlLWZpbGxpbmcgYnVmZmVycyAqLworICAgICAgc3RyY3B5KGZpbGxfZmlsZSxvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnaSc6CisgICAgICAvKiBzZXQgdGhlIGl0ZXJhdGlvbnMgbWluIGFuZCBtYXggZm9yIGNvbmZpZGVuY2UgaW50ZXJ2YWxzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pIHsKKwlpdGVyYXRpb25fbWF4ID0gY29udmVydChhcmcxKTsKKyAgICAgIH0KKyAgICAgIGlmIChhcmcyWzBdICkgeworCWl0ZXJhdGlvbl9taW4gPSBjb252ZXJ0KGFyZzIpOworICAgICAgfQorICAgICAgLyogaWYgdGhlIGl0ZXJhdGlvbl9tYXggaXMgPCBpdGVyYXRpb25fbWluIG1ha2UgaXRlcmF0aW9uX21heAorCSBlcXVhbCBpdGVyYXRpb25fbWluICovCisgICAgICBpZiAoaXRlcmF0aW9uX21heCA8IGl0ZXJhdGlvbl9taW4pIGl0ZXJhdGlvbl9tYXggPSBpdGVyYXRpb25fbWluOworICAgICAgLyogbGltaXQgbWluaW11bSB0byAzIGl0ZXJhdGlvbnMgKi8KKyAgICAgIGlmIChpdGVyYXRpb25fbWF4IDwgMykgaXRlcmF0aW9uX21heCA9IDM7CisgICAgICBpZiAoaXRlcmF0aW9uX21pbiA8IDMpIGl0ZXJhdGlvbl9taW4gPSAzOworICAgICAgLyogbGltaXQgbWF4aW11bSB0byAzMCBpdGVyYXRpb25zICovCisgICAgICBpZiAoaXRlcmF0aW9uX21heCA+IDMwKSBpdGVyYXRpb25fbWF4ID0gMzA7CisgICAgICBpZiAoaXRlcmF0aW9uX21pbiA+IDMwKSBpdGVyYXRpb25fbWluID0gMzA7CisgICAgICBpZiAoY29uZmlkZW5jZV9sZXZlbCA9PSAwKSBjb25maWRlbmNlX2xldmVsID0gOTk7CisgICAgICBpZiAoaW50ZXJ2YWwgPT0gMC4wKSBpbnRlcnZhbCA9IDAuMDU7IC8qIGZpdmUgcGVyY2VudCAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAnSSc6CisgICAgICAvKiBzZXQgdGhlIGNvbmZpZGVuY2UgbGV2ZWwgKDk1IG9yIDk5KSBhbmQgd2lkdGggKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgeworCWNvbmZpZGVuY2VfbGV2ZWwgPSBjb252ZXJ0KGFyZzEpOworICAgICAgfQorICAgICAgaWYoKGNvbmZpZGVuY2VfbGV2ZWwgIT0gOTUpICYmIChjb25maWRlbmNlX2xldmVsICE9IDk5KSl7CisJcHJpbnRmKCJPbmx5IDk1JSUgYW5kIDk5JSUgY29uZmlkZW5jZSBsZXZlbCBpcyBzdXBwb3J0ZWRcbiIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBpZiAoYXJnMlswXSApIHsKKwkvKiBpdCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB0byB1c2UgY29udmVydCgpIGhlcmUgc28ganVzdAorCSAgIHVzZSBzdHJ0b2QoKSBpbnN0ZWFkLiByYWogMjAwNy0xMC0yNCAqLworCWludGVydmFsID0gc3RydG9kKGFyZzIsTlVMTCkvMTAwLjA7CisgICAgICB9CisgICAgICAvKiBtYWtlIHN1cmUgdGhhdCBpdGVyYXRpb25fbWluIGFuZCBpdGVyYXRpb25fbWF4IGFyZSBhdCBsZWFzdAorCSBhdCBhIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZS4gIGlmIGEgLWkgb3B0aW9uIGhhcyBwcmV2aW91c2x5CisJIGJlZW4gcGFyc2VkLCB0aGVzZSB3aWxsIG5vIGxvbmdlciBiZSAxLCBzbyB3ZSBjYW4gY2hlY2sKKwkgYWdhaW5zdCAxICovIAorICAgICAgaWYgKGl0ZXJhdGlvbl9taW4gPT0gMSkgaXRlcmF0aW9uX21pbiA9IDM7CisgICAgICBpZiAoaXRlcmF0aW9uX21heCA9PSAxKSBpdGVyYXRpb25fbWF4ID0gMTA7CisgICAgICAvKiBtYWtlIHN1cmUgdGhhdCB0aGUgaW50ZXJ2YWwgaXMgc2V0IGlmIGl0IGlzbid0IGF0IGl0cyBkZWZhdWx0CisJIHZhbHVlICovCisgICAgICBpZiAoaW50ZXJ2YWwgPT0gMC4wKSBpbnRlcnZhbCA9IDAuMDU7IC8qIGZpdmUgcGVyY2VudCAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAnayc6CisgICAgICAvKiBsb2NhbCBkaXJ0eSBhbmQgY2xlYW4gY291bnRzICovCisjaWZkZWYgRElSVFkKKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgeworCWxvY19kaXJ0eV9jb3VudCA9IGNvbnZlcnQoYXJnMSk7CisgICAgICB9CisgICAgICBpZiAoYXJnMlswXSApIHsKKwlsb2NfY2xlYW5fY291bnQgPSBjb252ZXJ0KGFyZzIpOworICAgICAgfQorI2Vsc2UKKyAgICAgIHByaW50ZigiSSBkb24ndCBrbm93IGhvdyB0byBnZXQgZGlydHkuXG4iKTsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAnSyc6CisgICAgICAvKiByZW1vdGUgZGlydHkgYW5kIGNsZWFuIGNvdW50cyAqLworI2lmZGVmIERJUlRZCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pIHsKKwlyZW1fZGlydHlfY291bnQgPSBjb252ZXJ0KGFyZzEpOworICAgICAgfQorICAgICAgaWYgKGFyZzJbMF0gKSB7CisJcmVtX2NsZWFuX2NvdW50ID0gY29udmVydChhcmcyKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICBwcmludGYoIkkgZG9uJ3Qga25vdyBob3cgdG8gZ2V0IGRpcnR5LlxuIik7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAgICAgc2hlbGxfbnVtX2NwdXMgPSBhdG9pKG9wdGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAgIG5vX2NvbnRyb2wgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbyc6CisgICAgICAvKiBzZXQgdGhlIGxvY2FsIG9mZnNldHMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlsb2NhbF9zZW5kX29mZnNldCA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlsb2NhbF9yZWN2X29mZnNldCA9IGNvbnZlcnQoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdPJzoKKyAgICAgIC8qIHNldCB0aGUgcmVtb3RlIG9mZnNldHMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgCisJcmVtb3RlX3NlbmRfb2Zmc2V0ID0gY29udmVydChhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCXJlbW90ZV9yZWN2X29mZnNldCA9IGNvbnZlcnQoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdQJzoKKyAgICAgIC8qIHRvIHByaW50IG9yIG5vdCB0byBwcmludCwgdGhhdCBpcyAqLworICAgICAgLyogdGhlIGhlYWRlciBxdWVzdGlvbiAqLworICAgICAgcHJpbnRfaGVhZGVycyA9IGNvbnZlcnQob3B0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3InOgorICAgICAgLyogdGhlIHVzZXIgd2lzaGVzIHRoYXQgd2UgZGVjbGFyZSBjb25maWRlbmNlIHdoZW4gaGl0IG9uIHRoZQorCSByZXN1bHQgZXZlbiBpZiBub3QgeWV0IHJlYWNoZWQgb24gQ1BVIHV0aWxpemF0aW9uLiAgb25seQorCSBtZWFuaW5nZnVsIGlmIGNwdSB1dGlsIGlzIGVuYWJsZWQgKi8KKyAgICAgIHJlc3VsdF9jb25maWRlbmNlX29ubHkgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICAvKiBzZXQgdGhlIHRlc3QgbmFtZSAqLworICAgICAgc3RyY3B5KHRlc3RfbmFtZSxvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVCc6CisgICAgICAvKiBXZSB3YW50IHRvIHNldCB0aGUgcHJvY2Vzc29yIG9uIHdoaWNoIG5ldHNlcnZlciBvciBuZXRwZXJmICovCisgICAgICAvKiB3aWxsIHJ1biAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSB7CisJbG9jYWxfcHJvY19hZmZpbml0eSA9IGNvbnZlcnQoYXJnMSk7CisJYmluZF90b19zcGVjaWZpY19wcm9jZXNzb3IobG9jYWxfcHJvY19hZmZpbml0eSwwKTsKKyAgICAgIH0KKyAgICAgIGlmIChhcmcyWzBdKSB7CisJcmVtb3RlX3Byb2NfYWZmaW5pdHkgPSBjb252ZXJ0KGFyZzIpOworICAgICAgfQorICAgICAgY3B1X2JpbmRpbmdfcmVxdWVzdGVkID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1cnOgorICAgICAgLyogc2V0IHRoZSAid2lkdGgiIG9mIHRoZSB1c2VyIHNwYWNlIGRhdGEgYnVmZmVyIHJpbmcuIFRoaXMgd2lsbCAqLworICAgICAgLyogYmUgdGhlIG51bWJlciBvZiBzZW5kX3NpemUgYnVmZmVycyBtYWxsb2MnZCBpbiB0aGUgdGVzdHMgKi8gIAorICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSAKKwlzZW5kX3dpZHRoID0gY29udmVydChhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCXJlY3Zfd2lkdGggPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbCc6CisgICAgICAvKiBkZXRlcm1pbmUgdGVzdCBlbmQgY29uZGl0aW9ucyAqLworICAgICAgLyogYXNzdW1lIGEgdGltZWQgdGVzdCAqLworICAgICAgdGVzdF90aW1lID0gY29udmVydChvcHRhcmcpOworICAgICAgdGVzdF9ieXRlcyA9IHRlc3RfdHJhbnMgPSAwOworICAgICAgaWYgKHRlc3RfdGltZSA8IDApIHsKKwl0ZXN0X2J5dGVzID0gLTEgKiB0ZXN0X3RpbWU7CisJdGVzdF90cmFucyA9IHRlc3RfYnl0ZXM7CisJdGVzdF90aW1lID0gMDsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3YnOgorICAgICAgLyogc2F5IGhvdyBtdWNoIHRvIHNheSAqLworICAgICAgdmVyYm9zaXR5ID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncCc6CisgICAgICAvKiBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBwb3J0IG51bWJlciB3ZSB1c2UgYnJlYWtfYXJnc19leHBsaWNpdAorCSBoZXJlIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMKKwkgZ2VuZXJhdGlvbnMgb2YgbmV0cGVyZiB3aGVyZSBoYXZpbmcgYSBzaW5nbGUgdmFsdWUgZGlkIG5vdAorCSBzZXQgYm90aCByZW1vdGUgX2FuZF8gbG9jYWwgcG9ydCBudW1iZXIuIHJhaiAyMDA1LTAyLTA0ICovCisgICAgICBicmVha19hcmdzX2V4cGxpY2l0KG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJc3RybmNweSh0ZXN0X3BvcnQsYXJnMSxQT1JUQlVGU0laRSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlzdHJuY3B5KGxvY2FsX3Rlc3RfcG9ydCxhcmcyLFBPUlRCVUZTSVpFKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0gnOgorICAgICAgLyogc2F2ZS1vZmYgdGhlIGhvc3QgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24sIHVzZQorCSBicmVha19hcmdzX2V4cGxpY2l0IHNpbmNlIHBhc3NpbmcganVzdCBvbmUgdmFsdWUgc2hvdWxkIG5vdAorCSBzZXQgYm90aCAqLyAKKyAgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlzdHJuY3B5KGhvc3RfbmFtZSxhcmcxLHNpemVvZihob3N0X25hbWUpKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCWFkZHJlc3NfZmFtaWx5ID0gcGFyc2VfYWRkcmVzc19mYW1pbHkoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdMJzoKKyAgICAgIC8qIHNhdmUtb2ZmIHRoZSBsb2NhbCBjb250cm9sIHNvY2tldCBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiB1c2UKKwkgYnJlYWtfYXJnc19leHBsaWNpdCBzaW5jZSBwYXNzaW5nIGp1c3Qgb25lIHZhbHVlIHNob3VsZCBub3QKKwkgc2V0IGJvdGggKi8KKyAgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlzdHJuY3B5KGxvY2FsX2hvc3RfbmFtZSxhcmcxLHNpemVvZihsb2NhbF9ob3N0X25hbWUpKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCWxvY2FsX2FkZHJlc3NfZmFtaWx5ID0gcGFyc2VfYWRkcmVzc19mYW1pbHkoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICd3JzoKKyAgICAgIC8qIFdlIHdhbnQgdG8gc2VuZCByZXF1ZXN0cyBhdCBhIGNlcnRhaW4gd2F0ZS4gIFJlbWVtYmVyIHRoYXQKKyAgICAgIHRoZXJlIGFyZSAxMDAwMDAwIHVzZWNzIGluIGEgc2Vjb25kLCBhbmQgdGhhdCB0aGUgcGFja2V0IHJhdGUgaXMKKyAgICAgIGV4cHJlc3NlZCBpbiBwYWNrZXRzIHBlciBtaWxsaXNlY29uZC4gc2h1ZmZsZSB0aGUgI2lmZGVmIGFyb3VuZAorICAgICAgYSBiaXQgdG8gZGVhbCB3aXRoIGJvdGggbmV0cGVyZiBhbmQgbmV0c2VydmVyIHBvc3NpYmx5IGRvaW5nCisgICAgICBpbnRlcnZhbHMgd2l0aCBvbW5pIHRlc3RzICovCisgICAgICBicmVha19hcmdzX2V4cGxpY2l0KG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pIHsKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworCWludGVydmFsX3VzZWNzID0gY29udmVydF90aW1lc3BlYyhhcmcxKTsKKwlpbnRlcnZhbF93YXRlICA9IGludGVydmFsX3VzZWNzIC8gMTAwMDsKKyNlbHNlCisJZnByaW50Zih3aGVyZSwKKwkJIlBhY2tldCByYXRlIGNvbnRyb2wgaXMgbm90IGNvbXBpbGVkIGluLlxuIik7CisjZW5kaWYKKyAgICAgIH0KKyAgICAgIGlmIChhcmcyWzBdKSB7CisJLyogd2UgcGFzcyB1c2VjcyB0byB0aGUgcmVtb3RlIGFuZCBsZXQgaXQgZGVhbCB0byBjb3ZlciBib3RoCisJICAgaW50ZXJ2YWxzIGFuZCBzcGluIG1ldGhvZHMuIGlmIGhlIHdhc24ndCBpbnRlcnZhbHMgZW5hYmxlZAorCSAgIGhlIHdpbGwgcmV0dXJuIGEgc3VpdGFibGUgdmFsdWUgYmFjayB0byB1cyAqLworCXJlbW90ZV9pbnRlcnZhbF91c2VjcyA9IGNvbnZlcnRfdGltZXNwZWMoYXJnMik7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdiJzoKKyAgICAgIC8qIHdlIHdhbnQgdG8gaGF2ZSBhIGJ1cnN0IHNvIG1hbnkgcGFja2V0cyBwZXIgKi8KKyAgICAgIC8qIGludGVydmFsLiAqLworICAgICAgYnJlYWtfYXJnc19leHBsaWNpdChvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSB7CisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKwlpbnRlcnZhbF9idXJzdCA9IGNvbnZlcnQoYXJnMSk7CisJLyogc2V0IGEgZGVmYXVsdCBpbiBjYXNlIHRoZSB1c2VyIGRvZXMgbm90IGluY2x1ZGUgdGhlIC13IG9wdGlvbiAqLworCWlmIChpbnRlcnZhbF91c2VjcyA9PSAwKSB7CisJICBpbnRlcnZhbF93YXRlID0gMTsKKwkgIGludGVydmFsX3VzZWNzID0gMTAwMDsKKwl9CisjZWxzZQorCWZwcmludGYod2hlcmUsCisJCSJQYWNrZXQgYnVyc3Qgc2l6ZSBpcyBub3QgY29tcGlsZWQgaW4uIFxuIik7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIH0KKyAgICAgIC8qIHRoZXJlIGlzIG5vIGlmZGVmIGhlcmUgYmVjYXVzZSB3ZSBhcmUgc2VuZGluZyB0aGlzIHZhbHVlIHRvCisJIHRoZSByZW1vdGUsIHdoaWNoIG1heSBvciBtYXkgbm90IGhhdmUgYmVlbiBjb21waWxlZCBmb3IKKwkgaW50ZXJ2YWxzIGFuZCB3ZSBkb24ndCBoYXZlIGEgd2F5IG9mIGtub3dpbmcgb24gdGhpcyBzaWRlCisJIHVudGlsIHdlIHRyeSAqLworICAgICAgaWYgKGFyZzJbMF0pIHsKKwlyZW1vdGVfaW50ZXJ2YWxfYnVyc3QgPSBjb252ZXJ0KGFyZzIpOworCWlmIChyZW1vdGVfaW50ZXJ2YWxfdXNlY3MgPT0gMCkgeworCSAgcmVtb3RlX2ludGVydmFsX3VzZWNzID0gMTAwMDsKKwl9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICdCJzoKKyAgICAgIHJlc3VsdF9icmFuZCA9IG1hbGxvYyhzdHJsZW4ob3B0YXJnKSsxKTsKKyAgICAgIGlmIChOVUxMICE9IHJlc3VsdF9icmFuZCkgeworCXN0cmNweShyZXN1bHRfYnJhbmQsb3B0YXJnKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCSJVbmFibGUgdG8gbWFsbG9jIHNwYWNlIGZvciByZXN1bHQgYnJhbmRcbiIpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnNCc6CisgICAgICBhZGRyZXNzX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICBsb2NhbF9hZGRyZXNzX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICc2JzoKKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICAgICAgYWRkcmVzc19mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGxvY2FsX2FkZHJlc3NfZmFtaWx5ID0gQUZfSU5FVDY7CisjZWxzZQorICAgICAgcHJpbnRmKCJUaGlzIG5ldHBlcmYgd2FzIG5vdCBjb21waWxlZCBvbiBhbiBJUHY2IGNhcGFibGUgc3lzdGVtIVxuIik7CisgICAgICBleGl0KC0xKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisgICAgY2FzZSAnVic6CisgICAgICBwcmludGYoIk5ldHBlcmYgdmVyc2lvbiAlc1xuIixORVRQRVJGX1ZFUlNJT04pOworICAgICAgZXhpdCgwKTsKKyAgICAgIGJyZWFrOworICAgIH07CisgIH0KKyAgLyogb2ssIHdoYXQgc2hvdWxkIG91ciBkZWZhdWx0IGhvc3RuYW1lIGFuZCBsb2NhbCBiaW5kaW5nIGluZm8gYmU/CisgICAqLworICBpZiAoJ1wwJyA9PSBob3N0X25hbWVbMF0pIHsKKyAgICAvKiBob3N0X25hbWUgd2FzIG5vdCBzZXQgKi8KKyAgICBzd2l0Y2ggKGFkZHJlc3NfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgc3RyY3B5KGhvc3RfbmFtZSwibG9jYWxob3N0Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEFGX1VOU1BFQzoKKyAgICAgIC8qIHdoYXQgdG8gZG8gaGVyZT8gY2FzZSBpdCBvZmYgdGhlIGxvY2FsX2FkZHJlc3NfZmFtaWx5IEkKKwkgc3VwcG9zZSAqLworICAgICAgc3dpdGNoIChsb2NhbF9hZGRyZXNzX2ZhbWlseSkgeworICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgY2FzZSBBRl9VTlNQRUM6CisJc3RyY3B5KGhvc3RfbmFtZSwibG9jYWxob3N0Iik7CisJYnJlYWs7CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgICAgIGNhc2UgQUZfSU5FVDY6CisJc3RyY3B5KGhvc3RfbmFtZSwiOjoxIik7CisJYnJlYWs7CisjZW5kaWYKKyAgICAgIGRlZmF1bHQ6CisJcHJpbnRmKCJOZXRwZXJmIGRvZXMgbm90IHVuZGVyc3RhbmQgJWQgYXMgYW4gYWRkcmVzcyBmYW1pbHlcbiIsCisJICAgICAgIGFkZHJlc3NfZmFtaWx5KTsKKwlleGl0KC0xKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOyAKKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICBzdHJjcHkoaG9zdF9uYW1lLCI6OjEiKTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgIHByaW50ZigiTmV0cGVyZiBkb2VzIG5vdCB1bmRlcnN0YW5kICVkIGFzIGFuIGFkZHJlc3MgZmFtaWx5XG4iLAorCSAgICAgYWRkcmVzc19mYW1pbHkpOworICAgICAgZXhpdCgtMSk7CisgICAgfQorICB9CisgIAorICAvKiBub3csIGhhdmluZyBlc3RhYmxpc2hlZCB0aGUgbmFtZSB0byB3aGljaCB0aGUgY29udHJvbCB3aWxsCisgICAgIGNvbm5lY3QsIGZyb20gd2hhdCBzaG91bGQgaXQgY29tZT8gKi8KKyAgaWYgKCdcMCcgPT0gbG9jYWxfaG9zdF9uYW1lWzBdKSB7CisgICAgc3dpdGNoIChsb2NhbF9hZGRyZXNzX2ZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgIHN0cmNweShsb2NhbF9ob3N0X25hbWUsIjAuMC4wLjAiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgQUZfVU5TUEVDOgorICAgICAgc3dpdGNoIChhZGRyZXNzX2ZhbWlseSkgeworICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgY2FzZSBBRl9VTlNQRUM6CisJc3RyY3B5KGxvY2FsX2hvc3RfbmFtZSwiMC4wLjAuMCIpOworCWJyZWFrOworI2lmIGRlZmluZWQoQUZfSU5FVDYpCisgICAgICBjYXNlIEFGX0lORVQ2OgorCXN0cmNweShsb2NhbF9ob3N0X25hbWUsIjo6MCIpOworCWJyZWFrOworI2VuZGlmCisgICAgICBkZWZhdWx0OgorCXByaW50ZigiTmV0cGVyZiBkb2VzIG5vdCB1bmRlcnN0YW5kICVkIGFzIGFuIGFkZHJlc3MgZmFtaWx5XG4iLAorCSAgICAgICBhZGRyZXNzX2ZhbWlseSk7CisJZXhpdCgtMSk7CisgICAgICB9CisgICAgICBicmVhazsKKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICBzdHJjcHkobG9jYWxfaG9zdF9uYW1lLCI6OjAiKTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgIHByaW50ZigiTmV0cGVyZiBkb2VzIG5vdCB1bmRlcnN0YW5kICVkIGFzIGFuIGFkZHJlc3MgZmFtaWx5XG4iLAorCSAgICAgYWRkcmVzc19mYW1pbHkpOworICAgICAgZXhpdCgtMSk7CisgICAgfQorICB9CisKKyAgLyogc28sIGlmIHdlIGFyZW4ndCBldmVuIGdvaW5nIHRvIGVzdGFibGlzaCBhIGNvbnRyb2wgY29ubmVjdGlvbiB3ZQorICAgICBzaG91bGQgc2V0IGNlcnRhaW4gInJlbW90ZSIgc2V0dGluZ3MgdG8gcmVmbGVjdCB0aGlzLCByZWdhcmRsZXNzCisgICAgIG9mIHdoYXQgZWxzZSBtYXkgaGF2ZSBiZWVuIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lICovCisgIGlmIChub19jb250cm9sKSB7CisgICAgcmVtb3RlX3JlY3ZfYWxpZ24gPSAtMTsKKyAgICByZW1vdGVfc2VuZF9hbGlnbiA9IC0xOworICAgIHJlbW90ZV9zZW5kX29mZnNldCA9IC0xOworICAgIHJlbW90ZV9yZWN2X29mZnNldCA9IC0xOworICAgIHJlbW90ZV9jcHVfcmF0ZSA9IChmbG9hdCktMS4wOworICAgIHJlbW90ZV9jcHVfdXNhZ2UgPSAwOworICB9CisKKyAgLyogcGFyc2luZyB0ZXN0LXNwZWNpZmljIG9wdGlvbnMgdXNlZCB0byBiZSBjb25kaXRpb25hbCBvbiB0aGVyZQorICAgIGJlaW5nIGEgIi0tIiBpbiB0aGUgb3B0aW9uIHN0cmVhbS4gIGhvd2V2ZXIsIHNvbWUgb2YgdGhlIHRlc3RzCisgICAgaGF2ZSBvdGhlciBpbml0aWFsaXphdGlvbiBoYXBwZW5pbmcgaW4gdGhlaXIgInNjYW4iIHJvdXRpbmVzIHNvIHdlCisgICAgd2FudCB0byBjYWxsIHRoZW0gcmVnYXJkbGVzcy4gcmFqIDIwMDUtMDItMDggKi8KKyAgICBpZiAoKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJUQ1BfU1RSRUFNIikgPT0gMCkgfHwKKyNpZmRlZiBIQVZFX0lDU0NfRVhTCisgICAgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJFWFNfVENQX1NUUkVBTSIpID09IDApIHx8CisjZW5kaWYgLyogSEFWRV9JQ1NDX0VYUyAqLyAKKyNpZmRlZiBIQVZFX1NFTkRGSUxFCisJKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJUQ1BfU0VOREZJTEUiKSA9PSAwKSB8fAorI2VuZGlmIC8qIEhBVkVfU0VOREZJTEUgKi8KKwkoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9NQUVSVFMiKSA9PSAwKSB8fAorCShzdHJjYXNlY21wKHRlc3RfbmFtZSwiVENQX1JSIikgPT0gMCkgfHwKKwkoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9DUlIiKSA9PSAwKSB8fAorCShzdHJjYXNlY21wKHRlc3RfbmFtZSwiVENQX0NDIikgPT0gMCkgfHwKKwkoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9NU1MiKSA9PSAwKSB8fAorI2lmZGVmIERPXzE2NDQKKwkoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlRDUF9UUlIiKSA9PSAwKSB8fAorI2VuZGlmIC8qIERPXzE2NDQgKi8KKyNpZmRlZiBET19OQlJSCisJKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJUQ1BfVFJSIikgPT0gMCkgfHwKKyNlbmRpZiAvKiBET19OQlJSICovCisJKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJVRFBfU1RSRUFNIikgPT0gMCkgfHwKKwkoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlVEUF9SUiIpID09IDApKQorICAgICAgeworCXNjYW5fc29ja2V0c19hcmdzKGFyZ2MsIGFyZ3YpOworICAgICAgfQorCisjaWZkZWYgV0FOVF9ETFBJCisgICAgZWxzZSBpZiAoKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJETENPX1JSIikgPT0gMCkgfHwKKwkgICAgIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiRExDTF9SUiIpID09IDApIHx8CisJICAgICAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIkRMQ09fU1RSRUFNIikgPT0gMCkgfHwKKwkgICAgIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiRExDTF9TVFJFQU0iKSA9PSAwKSkKKyAgICAgIHsKKwlzY2FuX2RscGlfYXJncyhhcmdjLCBhcmd2KTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0RMUEkgKi8KKworI2lmZGVmIFdBTlRfVU5JWAorICAgIGVsc2UgaWYgKChzdHJjYXNlY21wKHRlc3RfbmFtZSwiU1RSRUFNX1JSIikgPT0gMCkgfHwKKwkgICAgIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiREdfUlIiKSA9PSAwKSB8fAorCSAgICAgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTVFJFQU1fU1RSRUFNIikgPT0gMCkgfHwKKwkgICAgIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiREdfU1RSRUFNIikgPT0gMCkpCisgICAgICB7CisJc2Nhbl91bml4X2FyZ3MoYXJnYywgYXJndik7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9VTklYICovCisKKyNpZmRlZiBXQU5UX1hUSQorICAgIGVsc2UgaWYgKChzdHJjYXNlY21wKHRlc3RfbmFtZSwiWFRJX1RDUF9SUiIpID09IDApIHx8CisJICAgICAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlhUSV9UQ1BfU1RSRUFNIikgPT0gMCkgfHwKKwkgICAgIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiWFRJX1VEUF9SUiIpID09IDApIHx8CisJICAgICAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlhUSV9VRFBfU1RSRUFNIikgPT0gMCkpCisgICAgICB7CisJc2Nhbl94dGlfYXJncyhhcmdjLCBhcmd2KTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX1hUSSAqLworCisjaWZkZWYgV0FOVF9TQ1RQCisgICAgZWxzZSBpZiAoKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTQ1RQX1NUUkVBTSIpID09IDApIHx8CisJICAgICAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIlNDVFBfUlIiKSA9PSAwKSB8fAorCSAgICAgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTQ1RQX1NUUkVBTV9NQU5ZIikgPT0gMCkgfHwKKwkgICAgIChzdHJjYXNlY21wKHRlc3RfbmFtZSwiU0NUUF9SUl9NQU5ZIikgPT0gMCkpCisgICAgeworICAgICAgc2Nhbl9zY3RwX2FyZ3MoYXJnYywgYXJndik7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBXQU5UX1NEUAorICAgIGVsc2UgaWYoKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTRFBfU1RSRUFNIikgPT0gMCkgfHwKKwkgICAgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTRFBfTUFFUlRTIikgPT0gMCkgfHwKKwkgICAgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJTRFBfUlIiKSA9PSAwKSkKKyAgICAgIHsKKwlzY2FuX3NkcF9hcmdzKGFyZ2MsIGFyZ3YpOworICAgICAgfQorI2VuZGlmCisKKyNpZmRlZiBXQU5UX09NTkkKKyAgICBlbHNlIGlmICgoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIk9NTkkiKSA9PSAwKSB8fAorCSAgICAgKHN0cmNhc2VjbXAodGVzdF9uYW1lLCJVVUlEIikgPT0gMCkpIHsKKyAgICAgIHNjYW5fb21uaV9hcmdzKGFyZ2MsIGFyZ3YpOworICAgIH0KKyNlbmRpZgorCisgICAgLyogd2hhdCBpcyBvdXIgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG91dHB1dCB1bml0cz8gIGlmIHRoZSB0ZXN0CisgICAgICAgbmFtZSBjb250YWlucyAiUlIiIG9yICJyciIgb3IgIlJyIiBvciAiclIiIHRoZW4gdGhlIGRlZmF1bHQgaXMKKyAgICAgICAneCcgZm9yIHRyYW5zYWN0aW9ucy4gb3RoZXJ3aXNlIGl0IGlzICdtJyBmb3IgbWVnYWJpdHMgKDEwXjYpCisgICAgICAgaG93ZXZlci4uLiAgaWYgdGhpcyBpcyBhbiAib21uaSIgdGVzdCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIKKyAgICAgICB0aGlzIGRlY2lzaW9uIHRvIHNjYW5fb21uaV9hcmdzICovCisKKyAgICBpZiAoc3RyY2FzZWNtcCh0ZXN0X25hbWUsIm9tbmkiKSkgeworICAgICAgaWYgKCc/JyA9PSBsaWJmbXQpIHsKKwkvKiB3ZSB1c2UgYSBzZXJpZXMgb2Ygc3Ryc3RyJ3MgaGVyZSBiZWNhdXNlIG5vdCBldmVyeW9uZSBoYXMKKwkgICBzdHJjYXNlc3RyIGFuZCBJIGRvbid0IGZlZWwgbGlrZSB1cCBvciBkb3duc2hpZnRpbmcgdGV4dCAqLworCWlmICgoc3Ryc3RyKHRlc3RfbmFtZSwiUlIiKSkgfHwKKwkgICAgKHN0cnN0cih0ZXN0X25hbWUsInJyIikpIHx8CisJICAgIChzdHJzdHIodGVzdF9uYW1lLCJSciIpKSB8fAorCSAgICAoc3Ryc3RyKHRlc3RfbmFtZSwiclIiKSkpIHsKKwkgIGxpYmZtdCA9ICd4JzsKKwl9CisJZWxzZSB7CisJICBsaWJmbXQgPSAnbSc7CisJfQorICAgICAgfQorICAgICAgZWxzZSBpZiAoJ3gnID09IGxpYmZtdCkgeworCS8qIG5vdywgYSBmb3JtYXQgb2YgJ3gnIG1ha2VzIG5vIHNlbnNlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuCisJICAgYW4gUlIgdGVzdC4gaWYgc29tZW9uZSBoYXMgYmVlbiBzaWxseSBlbm91Z2ggdG8gdHJ5IHRvIHNldAorCSAgIHRoYXQsIHdlIHdpbGwgcmVzZXQgaXQgc2lsZW50bHkgdG8gZGVmYXVsdCAtIG5hbWVseSAnbScgKi8KKwlpZiAoKHN0cnN0cih0ZXN0X25hbWUsIlJSIikgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnN0cih0ZXN0X25hbWUsInJyIikgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnN0cih0ZXN0X25hbWUsIlJyIikgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnN0cih0ZXN0X25hbWUsInJSIikgPT0gTlVMTCkpIHsKKwkgIGxpYmZtdCA9ICdtJzsKKwl9CisgICAgICB9CisgICAgfQorfQorCisMCit2b2lkCitkdW1wX2dsb2JhbHMoKQoreworICBwcmludGYoIlByb2dyYW0gbmFtZTogJXNcbiIsIHByb2dyYW0pOworICBwcmludGYoIkxvY2FsIHNlbmQgYWxpZ25tZW50OiAlZFxuIixsb2NhbF9zZW5kX2FsaWduKTsKKyAgcHJpbnRmKCJMb2NhbCByZWN2IGFsaWdubWVudDogJWRcbiIsbG9jYWxfcmVjdl9hbGlnbik7CisgIHByaW50ZigiUmVtb3RlIHNlbmQgYWxpZ25tZW50OiAlZFxuIixyZW1vdGVfc2VuZF9hbGlnbik7CisgIHByaW50ZigiUmVtb3RlIHJlY3YgYWxpZ25tZW50OiAlZFxuIixyZW1vdGVfcmVjdl9hbGlnbik7CisgIHByaW50ZigiUmVwb3J0IGxvY2FsIENQVSAlZFxuIixsb2NhbF9jcHVfdXNhZ2UpOworICBwcmludGYoIlJlcG9ydCByZW1vdGUgQ1BVICVkXG4iLHJlbW90ZV9jcHVfdXNhZ2UpOworICBwcmludGYoIlZlcmJvc2l0eTogJWRcbiIsdmVyYm9zaXR5KTsKKyAgcHJpbnRmKCJEZWJ1ZzogJWRcbiIsZGVidWcpOworICBwcmludGYoIlBvcnQ6ICVzXG4iLHRlc3RfcG9ydCk7CisgIHByaW50ZigiVGVzdCBuYW1lOiAlc1xuIix0ZXN0X25hbWUpOworICBwcmludGYoIlRlc3QgYnl0ZXM6ICVkIFRlc3QgdGltZTogJWQgVGVzdCB0cmFuczogJWRcbiIsCisJIHRlc3RfYnl0ZXMsCisJIHRlc3RfdGltZSwKKwkgdGVzdF90cmFucyk7CisgIHByaW50ZigiSG9zdCBuYW1lOiAlc1xuIixob3N0X25hbWUpOworICBwcmludGYoIlxuIik7Cit9CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRzaC5oIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU0Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2guaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAgICAgICAgQ29weXJpZ2h0IChDKSAxOTkzLDE5OTUgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkKKyovCisKKy8qIGxpYnJhcmllZCBwZXJmb3JtYW5jZSBpbmNsdWRlIGZpbGUgCQkJCSovCisvKiB0aGUgZGVmaW5lIE5PUEVSRkVYVEVSTiB0ZWxzIHVzIG5vdCB0byByZS1kZWZpbmUgYWxsIHRoZSAJKi8KKworLyogZGVmaW5lcyBhbmQgZGVmYXVsdHMgKi8KKyNkZWZpbmUJCUhPU1ROQU1FU0laRSAJMjU1CisjZGVmaW5lICAgICAgICAgUE9SVEJVRlNJWkUgICAgIDEwCisjZGVmaW5lCQlERUZBVUxUX1NJWkUJMzI3NjgKKyNkZWZpbmUJCUhPU1RfTkFNRQkiMTI3LjAuMC4xIgorI2RlZmluZQkJVEVTVF9QT1JUCSIxMjg2NSIKKworLyogb3V0cHV0IGNvbnRyb2xsaW5nIHZhcmlhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgCURFQlVHIDAJCS8qIGRlYnVnZ2luZyBsZXZlbAkJCSovCisjZGVmaW5lIAlWRVJCT1NJVFkgMAkvKiB2ZXJib3NpdHkgbGV2ZWwJCQkqLworCisvKiB0aGUgZW5kLXRlc3QgY29uZGl0aW9ucyBmb3IgdGhlIHRlc3RzIC0gZWl0aGVyIHRyYW5zYWN0aW9ucywgYnl0ZXMsICAqLworLyogb3IgdGltZS4gZGlmZmVyZW50IHZhcnMgdXNlZCBmb3IgY2xhcml0eSAtIHNwYWNlIGlzIGNoZWFwIDstKSAgICAgICAgKi8KKyNkZWZpbmUgCVRFU1RfVElNRSAxMAkvKiB0ZXN0IGVuZHMgYnkgdGltZQkJCSovCisjZGVmaW5lIAlURVNUX0JZVEVTIDAJLyogdGVzdCBlbmRzIG9uIGJ5dGUgY291bnQJCSovCisjZGVmaW5lIAlURVNUX1RSQU5TIDAJLyogdGVzdCBlbmRzIG9uIHRyYW4gY291bnQJCSovCisKKy8qIHRoZSBhbGlnbm1lbnQgY29uZGl0aW9ucyBmb3IgdGhlIHRlc3RzCQkJCSovCisjZGVmaW5lIAlMT0NfUkVDVl9BTElHTgk0CS8qIGFsaWdubWVudCBmb3IgbG9jYWwgcmVjZWl2ZXMJKi8KKyNkZWZpbmUgCUxPQ19TRU5EX0FMSUdOCTQJLyogYWxpZ25tZW50IGZvciBsb2NhbCBzZW5kcwkqLworI2RlZmluZSAJUkVNX1JFQ1ZfQUxJR04JNAkvKiBhbGlnbm1lbnQgZm9yIHJlbW90ZSByZWNlaXZlCSovCisjZGVmaW5lIAlSRU1fU0VORF9BTElHTgk0CS8qIGFsaWdubWVudCBmb3IgcmVtb3RlIHNlbmRzCSovCisKKy8qIG1pc2MgZGVmaW5lcyBmb3IgdGhlIGhlbGwgb2YgaXQJCQkJCSovCisjaWZuZGVmIE1BWExPTkcKKyNkZWZpbmUgCU1BWExPTkcgIAk0Mjk0OTY3Mjk1VUwKKyNlbmRpZiAvKiBNQVhMT05HICovCisKKyNpZmRlZiBXQU5UX0RDQ1AKKworI2lmbmRlZiBTT0NLX0RDQ1AKKyNkZWZpbmUgRENDUF9XQVJOSU5HCisjZGVmaW5lIFNPQ0tfRENDUCA2CisjZW5kaWYKKworI2lmbmRlZiBJUFBST1RPX0RDQ1AKKyNkZWZpbmUgRENDUF9XQVJOSU5HCisjZGVmaW5lIElQUFJPVE9fRENDUCAzMyAgLyogZGVmaW5lZCBieSB0aGUgSUFOQSAqLworI2VuZGlmCisKKyNpZm5kZWYgU09MX0RDQ1AKKyNkZWZpbmUgRENDUF9XQVJOSU5HCisjZGVmaW5lIFNPTF9EQ0NQIDI2OQorI2VuZGlmCisKKyNpZmRlZiBEQ0NQX1dBUk5JTkcKKyN3YXJuaW5nIFRoaXMgcGxhdGZvcm0gaXMgbWlzc2luZyBvbmUgb2Ygc29ja19kY2NwIGlwcHJvdG9fZGNjcCBvciBzb2xfZGNjcAorI2VuZGlmCisKKyNlbmRpZgorCisjaWZuZGVmIE5FVFNICitleHRlcm4gY2hhcgkJKnByb2dyYW07IC8qIHByb2dyYW0gaW52b2NhdGlvbiBuYW1lCQkqLworZXh0ZXJuIGNoYXIgICAgICAgICAgICAgKmNvbW1hbmRfbGluZTsgIC8qIGhvdyB3ZSB3ZXJlIGludm9rZWQgICAgICAgICAgKi8KKworLyogc3R1ZmYgdG8gc2F5IHdoZXJlIHRoaXMgdGVzdCBpcyBnb2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2V4dGVybiBjaGFyCWhvc3RfbmFtZVtIT1NUTkFNRVNJWkVdOy8qIHJlbW90ZSBob3N0IG5hbWUgb3IgaXAgYWRkciAgKi8KK2V4dGVybiBjaGFyICAgICBsb2NhbF9ob3N0X25hbWVbSE9TVE5BTUVTSVpFXTsKK2V4dGVybiBjaGFyCXRlc3RfcG9ydFtQT1JUQlVGU0laRV07IC8qIHdoZXJlIGlzIHRoZSB0ZXN0IHdhaXRpbmcgICAgKi8KK2V4dGVybiBjaGFyICAgICBsb2NhbF90ZXN0X3BvcnRbUE9SVEJVRlNJWkVdOworZXh0ZXJuIGludCAgICAgIGFkZHJlc3NfZmFtaWx5OworZXh0ZXJuIGludCAgICAgIGxvY2FsX2FkZHJlc3NfZmFtaWx5OworZXh0ZXJuIGludCAgICAgIHBhcnNlX2FkZHJlc3NfZmFtaWx5KGNoYXIgZmFtaWx5X3N0cmluZ1tdKTsKK2V4dGVybiBpbnQgICAgICBwYXJzZV9zb2NrZXRfdHlwZShjaGFyIHNvY2tldF9zdHJpbmdbXSk7CitleHRlcm4gaW50ICAgICAgcGFyc2VfcHJvdG9jb2woY2hhciBwcm90b2NvbF9zdHJpbmdbXSk7CitleHRlcm4gdm9pZCAgICAgc2V0X2RlZmF1bHRzKCk7CitleHRlcm4gdm9pZCAgICAgc2Nhbl9jbWRfbGluZShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKK2V4dGVybiB2b2lkICAgICBkdW1wX2dsb2JhbHMoKTsKK2V4dGVybiB2b2lkICAgICBicmVha19hcmdzKGNoYXIgKnMsIGNoYXIgKmFyZzEsIGNoYXIgKmFyZzIpOworZXh0ZXJuIHZvaWQgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQoY2hhciAqcywgY2hhciAqYXJnMSwgY2hhciAqYXJnMik7CitleHRlcm4gdm9pZCAgICAgcHJpbnRfbmV0c2VydmVyX3VzYWdlKCk7CisKKy8qIG91dHB1dCBjb250cm9sbGluZyB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitleHRlcm4gaW50CisgIGRlYnVnLAkJLyogZGVidWdnaW5nIGxldmVsCQkJKi8KKyAgcHJpbnRfaGVhZGVycywJLyogZG8vZG9uJ3QgcHJpbnQgdGVzdCBoZWFkZXJzCQkqLworICB2ZXJib3NpdHk7CQkvKiB2ZXJib3NpdHkgbGV2ZWwJCQkqLworCisvKiB0aGUgZW5kLXRlc3QgY29uZGl0aW9ucyBmb3IgdGhlIHRlc3RzIC0gZWl0aGVyIHRyYW5zYWN0aW9ucywgYnl0ZXMsICAqLworLyogb3IgdGltZS4gZGlmZmVyZW50IHZhcnMgdXNlZCBmb3IgY2xhcml0eSAtIHNwYWNlIGlzIGNoZWFwIDstKSAgICAgICAgKi8KK2V4dGVybiBpbnQJCisgIHRlc3RfdGltZSwJCS8qIHRlc3QgZW5kcyBieSB0aW1lCQkJKi8KKyAgdGVzdF9sZW5fdGlja3MsCisgIHRlc3RfYnl0ZXMsCQkvKiB0ZXN0IGVuZHMgb24gYnl0ZSBjb3VudAkJKi8KKyAgdGVzdF90cmFuczsJCS8qIHRlc3QgZW5kcyBvbiB0cmFuIGNvdW50CQkqLworCisvKiB0aGUgYWxpZ25tZW50IGNvbmRpdGlvbnMgZm9yIHRoZSB0ZXN0cwkJCQkqLworZXh0ZXJuIGludAorICBsb2NhbF9yZWN2X2FsaWduLAkvKiBhbGlnbm1lbnQgZm9yIGxvY2FsIHJlY2VpdmVzCQkqLworICBsb2NhbF9zZW5kX2FsaWduLAkvKiBhbGlnbm1lbnQgZm9yIGxvY2FsIHNlbmRzCQkqLworICByZW1vdGVfcmVjdl9hbGlnbiwJLyogYWxpZ25tZW50IGZvciByZW1vdGUgcmVjZWl2ZXMJKi8KKyAgcmVtb3RlX3NlbmRfYWxpZ24sCS8qIGFsaWdubWVudCBmb3IgcmVtb3RlIHNlbmRzCQkqLworICBsb2NhbF9zZW5kX29mZnNldCwKKyAgbG9jYWxfcmVjdl9vZmZzZXQsCisgIHJlbW90ZV9zZW5kX29mZnNldCwKKyAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorICByZW1vdGVfc2VuZF93aWR0aCwKKyAgcmVtb3RlX3JlY3Zfd2lkdGg7CisKKy8qIGhvaXN0IHRoZXNlIGFib3ZlIHRoZSAjaWYgdG8gZGVhbCB3aXRoIGVpdGhlciBuZXRwZXJmIG9yIG5ldHNlcnZlcgorICAgY29uZmlndXJlZCBmb3IgaXQgKi8KKworZXh0ZXJuCWludCAgICAgICAgICBpbnRlcnZhbF91c2VjczsKK2V4dGVybiAgaW50ICAgICAgICAgIGludGVydmFsX3dhdGU7CitleHRlcm4JaW50CSAgICAgaW50ZXJ2YWxfYnVyc3Q7CitleHRlcm4gIGludCAgICAgICAgICByZW1vdGVfaW50ZXJ2YWxfdXNlY3M7CitleHRlcm4gIGludCAgICAgICAgICByZW1vdGVfaW50ZXJ2YWxfYnVyc3Q7CisKKyNpZiBkZWZpbmVkKFdBTlRfSU5URVJWQUxTKSB8fCBkZWZpbmVkKFdBTlRfREVNTykKKworZXh0ZXJuIGludCAgICBkZW1vX21vZGU7CitleHRlcm4gZG91YmxlIGRlbW9faW50ZXJ2YWw7CitleHRlcm4gZG91YmxlIGRlbW9fdW5pdHM7CitleHRlcm4gZG91YmxlIHVuaXRzX3RoaXNfdGljazsKKyNlbmRpZiAKKworI2lmZGVmIERJUlRZCitleHRlcm4gaW50CXJlbV9kaXJ0eV9jb3VudDsKK2V4dGVybiBpbnQJcmVtX2NsZWFuX2NvdW50OworZXh0ZXJuIGludAlsb2NfZGlydHlfY291bnQ7CitleHRlcm4gaW50CWxvY19jbGVhbl9jb3VudDsKKyNlbmRpZiAvKiBESVJUWSAqLworCisvKiBzdHVmZiBmb3IgY29uZmlkZW5jZSBpbnRlcnZhbHMgKi8KKworZXh0ZXJuIGludCAgY29uZmlkZW5jZV9sZXZlbDsKK2V4dGVybiBpbnQgIGl0ZXJhdGlvbl9taW47CitleHRlcm4gaW50ICBpdGVyYXRpb25fbWF4OworZXh0ZXJuIGludCAgcmVzdWx0X2NvbmZpZGVuY2Vfb25seTsKK2V4dGVybiBkb3VibGUgaW50ZXJ2YWw7CitleHRlcm4gZG91YmxlIGludGVydmFsX3BjdDsKKworZXh0ZXJuIGludCBjcHVfYmluZGluZ19yZXF1ZXN0ZWQ7CisKKy8qIHN0dWZmIHRvIGNvbnRyb2xsIHRoZSBidWZmZXJzcGFjZSAid2lkdGgiICovCitleHRlcm4gaW50CXNlbmRfd2lkdGg7CitleHRlcm4gaW50ICAgICAgcmVjdl93aWR0aDsKKworLyogYWRkcmVzcyBmYW1pbHkgKi8KK2V4dGVybiBpbnQJYWY7CisKKy8qIGRpZmZlcmVudCBvcHRpb25zIGZvciBvdGhlciB0aGluZ3MJCQkJCSovCitleHRlcm4gaW50CisgIGxvY2FsX2NwdV91c2FnZSwKKyAgcmVtb3RlX2NwdV91c2FnZTsKKworZXh0ZXJuIGZsb2F0CisgIGxvY2FsX2NwdV9yYXRlLAorICByZW1vdGVfY3B1X3JhdGU7CisKK2V4dGVybiBpbnQKKyAgc2hlbGxfbnVtX2NwdXM7CisKK2V4dGVybgljaGFyCQorICB0ZXN0X25hbWVbQlVGU0laXTsKKworZXh0ZXJuIGNoYXIKKyAgZmlsbF9maWxlW0JVRlNJWl07CisKK2V4dGVybiBjaGFyICoKKyAgcmVzdWx0X2JyYW5kOworCitleHRlcm4gaW50CisgIG5vX2NvbnRyb2w7CisKKyNpZmRlZiBXQU5UX0RMUEkKKworZXh0ZXJuIGludAorICBsb2NfcHBhLAorICByZW1fcHBhOworCitleHRlcm4gaW50CisgIGRscGlfc2FwOworCisjZW5kaWYgLyogV0FOVF9ETFBJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2xvdF9saW51eC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2xvdF9saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYjVmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzbG90X2xpbnV4LmMKQEAgLTAsMCArMSwxNjIgQEAKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAKKyNpbmNsdWRlIDxmdHcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgY2hhciBpbnRlcmZhY2VfbWF0Y2hbMzJdOworc3RhdGljIGNoYXIgaW50ZXJmYWNlX2FkZHJlc3NbMTNdOworc3RhdGljIGNoYXIgaW50ZXJmYWNlX3Nsb3RbMTNdPSJub3QgZm91bmQiOworCitzdGF0aWMgaW50CitmaW5kX3Nsb3QoY29uc3QgY2hhciAqZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0ICpzYiwKKwkgIGludCB0ZmxhZywgc3RydWN0IEZUVyAqZnR3YnVmKSAKK3sKKyAgY2hhciBzbG90X2FkZHJlc3NbMTFdOworICBpbnQgIHJldDsKKyAgRklMRSAqYWRkcmVzc19maWxlOworICBjaGFyICpteWZwYXRoOworICBjaGFyICp0aGlzX3RvazsKKyAgY2hhciAqbGFzdF90b2s7CisKKyAgLyogc28sIGFyZSB3ZSBhdCBhIHBvaW50IGluIHRoZSB0cmVlIHdoZXJlIHRoZSBiYXNlbmFtZSBpcworICAgICAiYWRkcmVzcyIgPyAqLworICBpZiAoc3RyY21wKCJhZGRyZXNzIixmcGF0aCArIGZ0d2J1Zi0+YmFzZSkgPT0gMCkgeworICAgIGFkZHJlc3NfZmlsZSA9IGZvcGVuKGZwYXRoLCJyIik7CisgICAgaWYgKGFkZHJlc3NfZmlsZSA9PSBOVUxMKSB7CisgICAgICBzdHJjcHkoaW50ZXJmYWNlX3Nsb3QsImZvcGVuIik7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgLyogd2UgbWFrZSB0aGUgc2ltcGxpZnlpbmcgYXNzdW1wdGlvbiB0aGF0IFBDSSBkb21haW4sIGJ1cywgc2xvdAorICAgICAgIGFuZCBmdW5jdGlvbiwgd2l0aCBhc3NvY2lhdGVkIHNlcGFyYXRvcnMsIGFyZSAxMCBjaGFyYWN0ZXJzIG9yCisgICAgICAgbGVzcyAqLworICAgIHJldCA9IGZyZWFkKHNsb3RfYWRkcmVzcywxLDEwLGFkZHJlc3NfZmlsZSk7CisgICAgaWYgKHJldCAhPSAxMCkgeworICAgICAgc3RyY3B5KGludGVyZmFjZV9zbG90LCJmcmVhZCIpOworICAgICAgZmNsb3NlKGFkZHJlc3NfZmlsZSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgc2xvdF9hZGRyZXNzW3JldF0gPSAwOworICAgIC8qIHRoZSBzbG90IGFkZHJlc3Mgd2lsbCBiZSBhIHN1YnN0cmluZyBvZiB0aGUgZnVsbCBidXMgYWRkcmVzcyBvZgorICAgICAgIHRoZSBpbnRlcmZhY2Ugd2Ugc2VlayAqLworICAgIGlmIChzdHJzdHIoaW50ZXJmYWNlX2FkZHJlc3Msc2xvdF9hZGRyZXNzKSkgeworCW15ZnBhdGggPSBzdHJkdXAoZnBhdGgpOworCWlmIChteWZwYXRoID09IE5VTEwpIHsKKwkgIHN0cmNweShpbnRlcmZhY2Vfc2xvdCwic3RyY3B5Iik7CisJICByZXR1cm4gMTsKKwl9CisJCisJdGhpc190b2sgPSBzdHJ0b2sobXlmcGF0aCwiLyIpOworCXdoaWxlIChzdHJjbXAodGhpc190b2ssImFkZHJlc3MiKSkgeworCSAgbGFzdF90b2sgPSB0aGlzX3RvazsKKwkgIHRoaXNfdG9rID0gc3RydG9rKE5VTEwsIi8iKTsKKwl9CisJaWYgKGxhc3RfdG9rICE9IE5VTEwpCisJICBzdHJjcHkoaW50ZXJmYWNlX3Nsb3QsbGFzdF90b2spOworCWVsc2UKKwkgIHN0cmNweShpbnRlcmZhY2Vfc2xvdCwibGFzdF90b2siKTsKKwlmcmVlKG15ZnBhdGgpOworCWZjbG9zZShhZGRyZXNzX2ZpbGUpOworCXJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZmluZF9pbnRlcmZhY2UoY29uc3QgY2hhciAqZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0ICpzYiwKKwkgICAgICAgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXICpmdHdidWYpCit7CisgIGNoYXIgKm15ZnBhdGg7CisgIGNoYXIgKnRoaXNfdG9rOworICBjaGFyICpsYXN0X3RvazsKKyAgaWYgKHN0cmNtcChpbnRlcmZhY2VfbWF0Y2gsZnBhdGggKyBmdHdidWYtPmJhc2UpID09IDApIHsKKyAgICBteWZwYXRoID0gc3RyZHVwKGZwYXRoKTsKKyAgICBpZiAobXlmcGF0aCA9PSBOVUxMKSB7CisgICAgICBzdHJjcHkoaW50ZXJmYWNlX2FkZHJlc3MsInN0cmNweSIpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHRoaXNfdG9rID0gc3RydG9rKG15ZnBhdGgsIi8iKTsKKyAgICB3aGlsZSAoc3RyY21wKHRoaXNfdG9rLGludGVyZmFjZV9tYXRjaCkpIHsKKyAgICAgIGxhc3RfdG9rID0gdGhpc190b2s7CisgICAgICB0aGlzX3RvayA9IHN0cnRvayhOVUxMLCIvIik7CisgICAgfQorICAgIGlmIChsYXN0X3RvayAhPSBOVUxMKQorICAgICAgc3RyY3B5KGludGVyZmFjZV9hZGRyZXNzLGxhc3RfdG9rKTsKKyAgICBlbHNlCisgICAgICBzdHJjcHkoaW50ZXJmYWNlX2FkZHJlc3MsImxhc3RfdG9rIik7CisgICAgZnJlZShteWZwYXRoKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKworY2hhciAqCitmaW5kX2ludGVyZmFjZV9zbG90KGNoYXIgKmludGVyZmFjZV9uYW1lKSB7CisKKyAgaW50IGZsYWdzID0gMDsKKyAgaW50IHJldDsKKworICBmbGFncyB8PSBGVFdfUEhZUzsgIC8qIGRvbid0IGZvbGxvdyBzeW1saW5rcyBmb3IgdGhleSB3aWxsIGxlYWQgdXMKKwkJCSBvZmYgdGhlIHBhdGggKi8KKyAgcmV0ID0gc25wcmludGYoaW50ZXJmYWNlX21hdGNoLDMxLCJuZXQ6JXMiLGludGVyZmFjZV9uYW1lKTsKKyAgaW50ZXJmYWNlX21hdGNoWzMxXT0wOworICAvKiBoYXZpbmcgc2V0dXAgdGhlIGJhc2VuYW1lIHdlIHdpbGwgYmUgc2Vla2luZywgZ28gZmluZCBpdCBhbmQgdGhlCisgICAgIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNlX2FkZHJlc3MgKi8KKyAgbmZ0dygiL3N5cy9kZXZpY2VzIiwgZmluZF9pbnRlcmZhY2UsIDIwLCBmbGFncyk7CisgIC8qIG5vdyB0aGF0IHdlIG9zdGVuc2libHkgaGF2ZSB0aGUgcGNpIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZQorICAgICAoaW50ZXJmYWNlX2FkZHJlc3MsIGxldHMgZmluZCB0aGF0IHNsb3Qgc2hhbGwgd2U/ICovCisgIG5mdHcoIi9zeXMvYnVzL3BjaS9zbG90cyIsIGZpbmRfc2xvdCwgMjAsIGZsYWdzKTsKKyAgcmV0dXJuIHN0cmR1cChpbnRlcmZhY2Vfc2xvdCk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF92YWxfZnJvbV9maWxlKGNoYXIgKnZhbHNvdXJjZSkgeworICBGSUxFICp2YWxmaWxlOworICBjaGFyIGJ1ZmZlcls2XTsgLyogMHhhYmNkICovCisgIGludCByZXQ7CisKKyAgdmFsZmlsZSA9IGZvcGVuKHZhbHNvdXJjZSwiciIpOworICBpZiAodmFsZmlsZSA9PSBOVUxMKSByZXR1cm4gLTE7CisKKyAgcmV0ID0gZnJlYWQoYnVmZmVyLDEsc2l6ZW9mKGJ1ZmZlciksIHZhbGZpbGUpOworICBpZiAocmV0ICE9IHNpemVvZihidWZmZXIpKSByZXR1cm4gLTE7CisKKyAgcmV0ID0gKGludClzdHJ0b2woYnVmZmVyLE5VTEwsMCk7CisKKyAgcmV0dXJuIHJldDsKKyAgCit9Cit2b2lkCitmaW5kX2ludGVyZmFjZV9pZHMoY2hhciAqaW50ZXJmYWNlX25hbWUsIGludCAqdmVuZG9yLCBpbnQgKmRldmljZSwgaW50ICpzdWJfdmVuZCwgaW50ICpzdWJfZGV2KSB7CisKKyAgaW50IHJldDsKKworICBjaGFyIHN5c2ZpbGVbMTI4XTsgIC8qIGdvdHRhIGxvdmUgY29uc3RhbnRzICovCisKKyAgLyogZmlyc3QgdGhlIHZlbmRvciBpZCAqLworICByZXQgPSBzbnByaW50ZihzeXNmaWxlLDEyNywiL3N5cy9jbGFzcy9uZXQvJXMvZGV2aWNlL3ZlbmRvciIsaW50ZXJmYWNlX25hbWUpOworICBzeXNmaWxlWzEyOF0gPSAwOworICAqdmVuZG9yID0gZ2V0X3ZhbF9mcm9tX2ZpbGUoc3lzZmlsZSk7CisKKyAgLyogbmV4dCB0aGUgZGV2aWNlICovCisgIHJldCA9IHNucHJpbnRmKHN5c2ZpbGUsMTI3LCIvc3lzL2NsYXNzL25ldC8lcy9kZXZpY2UvZGV2aWNlIixpbnRlcmZhY2VfbmFtZSk7CisgIHN5c2ZpbGVbMTI4XSA9IDA7CisgICpkZXZpY2UgPSBnZXRfdmFsX2Zyb21fZmlsZShzeXNmaWxlKTsKKworICAvKiBuZXh0IHRoZSBzdWJzeXN0ZW0gdmVuZG9yICovCisgIHJldCA9IHNucHJpbnRmKHN5c2ZpbGUsMTI3LCIvc3lzL2NsYXNzL25ldC8lcy9kZXZpY2Uvc3Vic3lzdGVtX3ZlbmRvciIsaW50ZXJmYWNlX25hbWUpOworICBzeXNmaWxlWzEyOF0gPSAwOworICAqc3ViX3ZlbmQgPSBnZXRfdmFsX2Zyb21fZmlsZShzeXNmaWxlKTsKKworICAvKiBuZXh0IHRoZSBzdWJzeXN0ZW0gZGV2aWNlICovCisgIHJldCA9IHNucHJpbnRmKHN5c2ZpbGUsMTI3LCIvc3lzL2NsYXNzL25ldC8lcy9kZXZpY2Uvc3Vic3lzdGVtX2RldmljZSIsaW50ZXJmYWNlX25hbWUpOworICBzeXNmaWxlWzEyOF0gPSAwOworICAqc3ViX2RldiA9IGdldF92YWxfZnJvbV9maWxlKHN5c2ZpbGUpOworCit9CisKKworCisKKwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2xvdF9ub25lLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzbG90X25vbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2E0YmYxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c2xvdF9ub25lLmMKQEAgLTAsMCArMSw1NiBAQAorI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NUUklOR19IKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKK2NoYXIgKgorZmluZF9pbnRlcmZhY2Vfc2xvdChjaGFyICppbnRlcmZhY2VfbmFtZSkgeworICByZXR1cm4gc3RyZHVwKCJOb3QgSW1wbGVtZW50ZWQiKTsKK30KKwordm9pZAorZmluZF9pbnRlcmZhY2VfaWRzKGNoYXIgKmludGVyZmFjZV9uYW1lLCBpbnQgKnZlbmRvciwgaW50ICpkZXZpY2UsIGludCAqc3ViX3ZlbmQsIGludCAqc3ViX2RldikgeworICAqdmVuZG9yID0gMDsKKyAgKmRldmljZSA9IDA7CisgICpzdWJfdmVuZCA9IDA7CisgICpzdWJfZGV2ID0gMDsKKyAgcmV0dXJuOworfQorCisjaWYgZGVmaW5lZChORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcpCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworCisgIGNoYXIgKnNsb3Q7CisgIGludCB2ZW5kb3I7CisgIGludCBkZXZpY2U7CisgIGludCBzdWJ2ZW5kb3I7CisgIGludCBzdWJkZXZpY2U7CisKKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGZwcmludGYoc3RkZXJyLCIlcyA8aW50ZXJmYWNlPlxuIixhcmd2WzBdKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBzbG90ID0gZmluZF9pbnRlcmZhY2Vfc2xvdChhcmd2WzFdKTsKKworICBmaW5kX2ludGVyZmFjZV9pZHMoYXJndlsxXSwgJnZlbmRvciwgJmRldmljZSwgJnN1YnZlbmRvciwgJnN1YmRldmljZSk7CisKKyAgcHJpbnRmKCIlcyBpbiBpbiBzbG90ICVzOiB2ZW5kb3IgJTR4IGRldmljZSAlNHggc3VidmVuZG9yICU0eCBzdWJkZXZpY2UgJTR4XG4iLAorCSBhcmd2WzFdLAorCSBzbG90LAorCSB2ZW5kb3IsCisJIGRldmljZSwKKwkgc3VidmVuZG9yLAorCSBzdWJkZXZpY2UpOworCisgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRzbG90X3NvbGFyaXMuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHNsb3Rfc29sYXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzFjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzbG90X3NvbGFyaXMuYwpAQCAtMCwwICsxLDI4MCBAQAorI2lmIGRlZmluZWQoSEFWRV9DT05GSUdfSCkKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmIGRlZmluZWQoTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHKQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPGRldmlkLmg+CisjaW5jbHVkZSA8bGliZGV2aW5mby5oPgorCitjaGFyICoKK2ZpbmRfaW50ZXJmYWNlX3Nsb3QoY2hhciAqaW50ZXJmYWNlX25hbWUpIHsKKyAgcmV0dXJuIHN0cmR1cCgiTm90IEltcGxlbWVudGVkIik7Cit9CisKK3N0YXRpYyBjaGFyIGludGVyZmFjZV9tYXRjaFtJRk5BTVNJWl07CitzdGF0aWMgaW50ICBmb3VuZF92ZW5kb3IgPSAwOworc3RhdGljIGludCAgZm91bmRfZGV2aWNlID0gMDsKK3N0YXRpYyBpbnQgIGZvdW5kX3N1YnZlbmRvciA9IDA7CitzdGF0aWMgaW50ICBmb3VuZF9zdWJkZXZpY2UgPSAwOworCitzdGF0aWMgY2hhciAqCitzZXRfaW50ZXJmYWNlX21hdGNoKGNoYXIgKmludGVyZmFjZV9uYW1lKSB7CisgIAorICBpbnQgaTsKKyAgY2hhciAqbnVrZWl0OworCisgIHN0cm5jcHkoaW50ZXJmYWNlX21hdGNoLGludGVyZmFjZV9uYW1lLElGTkFNU0laKTsKKyAgaW50ZXJmYWNlX21hdGNoW0lGTkFNU0laLTFdID0gMDsKKworICAKKyAgLyogc3RyaXAgYXdheSB0aGUgbG9naWNhbCBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaWYgcHJlc2VudCB3ZSAia25vdyIKKyAgICAgdGhhbmtzIHRvIHRoZSBhYm92ZSB0aGF0IHdlIHdpbGwgZmluZCBhIG51bGwgY2hhcmFjdGVyIHRvIGdldCB1cworICAgICBvdXQgb2YgdGhlIGxvb3AgKi8KKyAgZm9yIChudWtlaXQgPSBzdHJjaHIoaW50ZXJmYWNlX21hdGNoLCc6Jyk7CisgICAgICAgKE5VTEwgIT0gbnVrZWl0KSAmJiAoKm51a2VpdCAhPSAwKTsKKyAgICAgICBudWtlaXQrKykgeworICAgICpudWtlaXQgPSAwOworICB9CisKKyAgaWYgKHN0cmxlbihpbnRlcmZhY2VfbWF0Y2gpID09IDApCisgICAgcmV0dXJuIE5VTEw7CisgIGVsc2UKKyAgICByZXR1cm4gaW50ZXJmYWNlX21hdGNoOworCit9CisKKy8qIHRha2UgdGhlIGJpbmRpbmcgbmFtZSBmb3Igb3VyIGZvdW5kIG5vZGUgYW5kIHRyeSB0byBicmVhayBpdCB1cAorICAgaW50byBwY2kgaWRzLiByZXR1cm4gdGhlIG51bWJlciBvZiBJRHMgd2UgZm91bmQgKi8KKworc3RhdGljIGludAorcGFyc2VfYmluZGluZ19uYW1lKGNoYXIgKmJpbmRpbmdfbmFtZSkgeworCisgIGNoYXIgKm15X2NvcHk7CisgIGNoYXIgKnZlbmQ7CisgIGNoYXIgKmRldjsKKyAgY2hhciAqc3VidmVuZDsKKyAgY2hhciAqc3ViZGV2OworICBpbnQgIGNvdW50OworICBpbnQgIGk7CisKKyAgLyogd2UgY2Fubm90IGhhbmRsZSAiY2xhc3MiIDopICovCisgIGlmIChOVUxMICE9IHN0cnN0cihiaW5kaW5nX25hbWUsImNsYXNzIikpCisgICAgcmV0dXJuIDA7CisKKyAgbXlfY29weSA9IHN0cmR1cChiaW5kaW5nX25hbWUpOworICBpZiAoTlVMTCA9PSBteV9jb3B5KQorICAgIHJldHVybiAwOworCisgIC8qIHdlIGFzc3VtZSBzb21ldGhpbmcgb2YgdGhlIGZvcm06CisKKyAgICAgcGNpMTRlNCwxNjRjIG9yIHBlcmhhcHMKKyAgICAgcGNpMTRlNCwxNjRjLjEwM2MuNzAzOC4xMiBvcgorICAgICBwY2lleDgwODYsMTA1ZS4xMDhlLjEwNWUuNiBvcgorCisgICAgIHdoZXJlIHdlIGFzcy11LW1lIHRoYXQgdGhlIGZpcnN0IGZvdXIgaGV4IGRpZ2l0cyBiZWZvcmUgdGhlIGNvbW1hCisgICAgIGFyZSB0aGUgdmVuZG9yIElELCB0aGUgbmV4dCBmb3VyIGFmdGVyIHRoZSBjb21tYSBhcmUgdGhlIGRldmljZQorICAgICBpZCwgdGhlIG5leHQgZm91ciBhZnRlciB0aGUgcGVyaW9kIGFyZSB0aGUgc3VidmVuZG9yIGlkIGFuZCB0aGUKKyAgICAgbmV4dCBmb3VyIGFmdGVyIHRoZSBuZXh0IGRvdCBhcmUgdGhlIHN1YmRldmljZSBpZC4gd2UgaGF2ZQorICAgICBhYnNvbHV0ZWx5IG5vIGlkZWEgd2hhdCB0aGUgZGlnaXRzIGFmdGVyIGEgdGhpcmQgZG90IG1pZ2h0IGJlLgorCisgICAgIG9mIGNvdXJzZSB0aGVzZToKKworICAgICBwY2lleDEwOGUsYWJjZC4xMDhlLjAuMQorICAgICBwY2kxNGU0LDE2NGMuMTIKKyAgICAgCisgICAgIGFyZSBzb21ld2hhdCBwZXJwbGV4aW5nIGFsc28uICBDYW4gd2UgYXNzLXUtbWUgdGhhdCB0aGUgaWQncyB3aWxsCisgICAgIGFsd2F5cyBiZSBwcmVzZW50ZWQgYXMgZm91ciBjaGFyYWN0ZXIgaGV4PyBVbnRpbCB3ZSBsZWFybiB0byB0aGUKKyAgICAgY29udHJhcnksIHRoYXQgaXMgd2hhdCB3aWxsIGJlIGFzcy11LW1lLWQgaGVyZSBhbmQgc28gd2Ugd2lsbAorICAgICBuYXR1cmFsbHkgaWdub3JlIHRob3NlIHRoaW5ncywgd2hpY2ggbWlnaHQgYmUgcmV2aXNpb24gbnVtYmVycworICAgICByYWogMjAwOC0wMy0yMCAqLworCisgIHZlbmQgPSBzdHJ0b2sobXlfY29weSwiLCIpOworICBpZiAoTlVMTCA9PSB2ZW5kKSB7CisgICAgY291bnQgPSAwOworICB9CisgIGVsc2UgeworICAgIC8qIHRha2Ugb25seSB0aGUgbGFzdCBmb3VyIGNoYXJhY3RlcnMgKi8KKyAgICBpZiAoc3RybGVuKHZlbmQpIDwgNSkgeworICAgICAgY291bnQgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIE9LLCB3ZSBjb3VsZCBqdXN0IHVwZGF0ZSB2ZW5kIEkgc3VwcG9zZSwgYnV0IGZvciBzb21lIHJlYXNvbgorICAgICAgICAgSSBmZWx0IHRoZSBuZWVkIHRvIGJsYW5rLW91dCB0aGUgbGVhZGluZyBjcnVmdC4uLiAqLworICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbih2ZW5kKSAtIDQ7IGkrKykKKwl2ZW5kW2ldID0gJyAnOworICAgICAgZm91bmRfdmVuZG9yID0gc3RydG9sKHZlbmQsTlVMTCwxNik7CisgICAgICAvKiBvaywgbm93IGNoZWNrIGZvciBkZXZpY2UgKi8KKyAgICAgIGRldiA9IHN0cnRvayhOVUxMLCIuIik7CisgICAgICBpZiAoKE5VTEwgPT0gZGV2KSB8fCAoc3RybGVuKGRldikgIT0gNCkpIHsKKwkvKiB3ZSBnaXZlLXVwIGFmdGVyIHZlbmRvciAqLworCWNvdW50ID0gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZvdW5kX2RldmljZSA9IHN0cnRvbChkZXYsTlVMTCwxNik7CisJLyogb2ssIG5vdyBjaGVjayBmb3Igc3VidmVuZG9yICovCisJc3VidmVuZCA9IHN0cnRvayhOVUxMLCIuIik7CisJaWYgKChOVUxMID09IHN1YnZlbmQpIHx8IChzdHJsZW4oc3VidmVuZCkgIT0gNCkpIHsKKwkgIC8qIGdpdmUtdXAgYWZ0ZXIgZGV2aWNlICovCisJICBjb3VudCA9IDI7CisJfQorCWVsc2UgeworCSAgZm91bmRfc3VidmVuZG9yID0gc3RydG9sKHN1YnZlbmQsTlVMTCwxNik7CisJICAvKiBvaywgbm93IGNoZWNrIGZvciBzdWJkZXZpY2UgKi8KKwkgIHN1YmRldiA9IHN0cnRvayhOVUxMLCIuIik7CisJICBpZiAoKE5VTEwgPT0gc3ViZGV2KSB8fCAoc3RybGVuKHN1YmRldikgIT0gNCkpIHsKKwkgICAgLyogZ2l2ZS11cCBhZnRlciBzdWJ2ZW5kb3IgKi8KKwkgICAgY291bnQgPSAzOworCSAgfQorCSAgZWxzZSB7CisJICAgIGZvdW5kX3N1YmRldmljZSA9IHN0cnRvbChzdWJkZXYsTlVMTCwxNik7CisJICAgIGNvdW50ID0gNDsKKwkgIH0KKwl9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludAorY2hlY2tfbm9kZShkaV9ub2RlX3Qgbm9kZSwgdm9pZCAqYXJnKSB7CisKKyAgY2hhciAqbm9kZW5hbWU7CisgIGNoYXIgKm1pbm9ybmFtZTsKKyAgY2hhciAqcHJvcG5hbWU7CisgIGNoYXIgKmJpbmRpbmduYW1lOworICBkaV9taW5vcl90IG1pbm9yOworICBkaV9wcm9wX3QgIHByb3A7CisgIGludCAgKmludHM7CisKKyNpZmRlZiBORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcKKyAgbm9kZW5hbWUgPSBkaV9kZXZmc19wYXRoKG5vZGUpOworICAvKiBwcmludGYoIkNoZWNraW5nIG5vZGUgbmFtZWQgJXNcbiIsbm9kZW5hbWUpOyAqLworICBkaV9kZXZmc19wYXRoX2ZyZWUobm9kZW5hbWUpOworI2VuZGlmCisKKyAgbWlub3IgPSBESV9NSU5PUl9OSUw7CisgIHdoaWxlICgobWlub3IgPSBkaV9taW5vcl9uZXh0KG5vZGUsbWlub3IpKSAhPSBESV9NSU5PUl9OSUwpIHsKKyAgICAvKiBjaGVjayBmb3IgYSBtYXRjaCB3aXRoIHRoZSBpbnRlcmZhY2VfbWF0Y2ggKi8KKyAgICBtaW5vcm5hbWUgPSBkaV9taW5vcl9uYW1lKG1pbm9yKTsKKyNpZmRlZiBORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcKKyAgICAvKiBwcmludGYoIlx0bWlub3IgbmFtZSAlc1xuIixtaW5vcm5hbWUpOyAqLworI2VuZGlmCisgICAgLyogZG8gdGhleSBtYXRjaD8gKi8KKyAgICBpZiAoc3RyY21wKG1pbm9ybmFtZSxpbnRlcmZhY2VfbWF0Y2gpID09IDApIHsKKyAgICAgIC8qIGZvdW5kIGEgbWF0Y2ggKi8KKyAgICAgIGJpbmRpbmduYW1lID0gZGlfYmluZGluZ19uYW1lKG5vZGUpOworI2lmZGVmIE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRworICAgICAgcHJpbnRmKCJGT1VORCBBIE1BVENIIE9OICVzIHVuZGVyIG5vZGUgJXMgd2l0aCBiaW5kaW5nIG5hbWUgJXNcbiIsaW50ZXJmYWNlX21hdGNoLAorCSAgICAgbm9kZW5hbWUsCisJICAgICBiaW5kaW5nbmFtZSk7CisjZW5kaWYKKworICAgICAgaWYgKHBhcnNlX2JpbmRpbmdfbmFtZShiaW5kaW5nbmFtZSkgPT0gNCkgeworCS8qIHdlIGFyZSBkb25lICovCisJcmV0dXJuIERJX1dBTEtfVEVSTUlOQVRFOworICAgICAgfQorCisgICAgICAvKiBvaywgZ2V0dGluZyBoZXJlIG1lYW5zIHdlIGRpZG4ndCBmaW5kIGFsbCB0aGUgbmFtZXMgd2Ugc2VlaywKKyAgICAgICAgIHNvIHRyeSB0YWtpbmcgYSBsb29rIGF0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBub2RlLiAgd2Uga25vdworICAgICAgICAgdGhhdCBhdCBsZWFzdCBvbmUgZHJpdmVyIGlzIGtpbmQgZW5vdWdoIHRvIHNldCB0aGVtIGluCisgICAgICAgICB0aGVyZS4uLiBhbmQgaWYgd2UgZmluZCBpdCwgd2Ugd2lsbCBhbGxvdyB0aGF0IHRvIG92ZXJyaWRlCisgICAgICAgICBhbnl0aGluZyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IGZvdW5kICovCisgICAgICBwcm9wID0gRElfUFJPUF9OSUw7CisgICAgICB3aGlsZSAoKHByb3AgPSBkaV9wcm9wX25leHQobm9kZSxwcm9wKSkgIT0gRElfUFJPUF9OSUwpIHsKKwlwcm9wbmFtZSA9IGRpX3Byb3BfbmFtZShwcm9wKTsKKyNpZmRlZiBORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcKKwlwcmludGYoIlx0XHRwcm9wZXJ0eSBuYW1lICVzXG4iLHByb3BuYW1lKTsKKyNlbmRpZgorCS8qIG9ubHkgYm90aGVyIGNoZWNraW5nIHRoZSBuYW1lIGlmIHRoZSB0eXBlIGlzIHdoYXQgd2UgZXhwZWN0CisgICAgICAgICAgIGFuZCB3ZSBjYW4gZ2V0IHRoZSBpbnRzICovCisJaWYgKChkaV9wcm9wX3R5cGUocHJvcCkgPT0gRElfUFJPUF9UWVBFX0lOVCkgJiYKKwkgICAgKGRpX3Byb3BfaW50cyhwcm9wLCZpbnRzKSA+IDApKSB7CisJICBpZiAoc3RyY21wKHByb3BuYW1lLCJzdWJzeXN0ZW0tdmVuZG9yLWlkIikgPT0gMCkKKwkgICAgZm91bmRfc3VidmVuZG9yID0gaW50c1swXTsKKwkgIGVsc2UgaWYgKHN0cmNtcChwcm9wbmFtZSwic3Vic3lzdGVtLWlkIikgPT0gMCkKKwkgICAgZm91bmRfc3ViZGV2aWNlID0gaW50c1swXTsKKwkgIGVsc2UgaWYgKHN0cmNtcChwcm9wbmFtZSwidmVuZG9yLWlkIikgPT0gMCkKKwkgICAgZm91bmRfdmVuZG9yID0gaW50c1swXTsKKwkgIGVsc2UgaWYgKHN0cmNtcChwcm9wbmFtZSwiZGV2aWNlLWlkIikgPT0gMCkKKwkgICAgZm91bmRfZGV2aWNlID0gaW50c1swXTsKKwl9CisgICAgICB9CisgICAgICAvKiBzaW5jZSB3ZSBmb3VuZCBhIG1hdGNoIG9uIHRoZSBuYW1lLCB3ZSBhcmUgZG9uZSBub3cgKi8KKyAgICAgIHJldHVybiBESV9XQUxLX1RFUk1JTkFURTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIERJX1dBTEtfQ09OVElOVUU7CisKK30KK3ZvaWQKK2ZpbmRfaW50ZXJmYWNlX2lkcyhjaGFyICppbnRlcmZhY2VfbmFtZSwgaW50ICp2ZW5kb3IsIGludCAqZGV2aWNlLCBpbnQgKnN1Yl92ZW5kLCBpbnQgKnN1Yl9kZXYpIHsKKworICBkaV9ub2RlX3Qgcm9vdDsKKyAgY2hhciAqaW50ZXJmYWNlX21hdGNoOworCisgIC8qIHNvIHdlIGhhdmUgImZhaWx1cmUgdmFsdWVzIiByZWFkeSBpZiBuZWVkIGJlICovCisgICp2ZW5kb3IgPSAwOworICAqZGV2aWNlID0gMDsKKyAgKnN1Yl92ZW5kID0gMDsKKyAgKnN1Yl9kZXYgPSAwOworCisgIGludGVyZmFjZV9tYXRjaCA9IHNldF9pbnRlcmZhY2VfbWF0Y2goaW50ZXJmYWNlX25hbWUpOworICBpZiAoTlVMTCA9PSBpbnRlcmZhY2VfbWF0Y2gpCisgICAgcmV0dXJuOworCisgIC8qIGdldCB0aGUgcm9vdCBvZiBhbGwgZGV2aWNlcywgYW5kIGhvcGUgdGhleSBhcmVuJ3QgZXZpbCAqLworICByb290ID0gZGlfaW5pdCgiLyIsIERJTkZPQ1BZQUxMKTsKKworICBpZiAoRElfTk9ERV9OSUwgPT0gcm9vdCkKKyAgICByZXR1cm47CisKKyAgLyogbm93IHdlIHN0YXJ0IHRyYXBzaW5nIG1lcnJpbHkgYXJvdW5kIHRoZSB0cmVlICovCisgIGRpX3dhbGtfbm9kZShyb290LCBESV9XQUxLX0NMREZJUlNULE5VTEwsY2hlY2tfbm9kZSk7CisKKyAgZGlfZmluaShyb290KTsKKyAgKnZlbmRvciA9IGZvdW5kX3ZlbmRvcjsKKyAgKmRldmljZSA9IGZvdW5kX2RldmljZTsKKyAgKnN1Yl92ZW5kID0gZm91bmRfc3VidmVuZG9yOworICAqc3ViX2RldiAgPSBmb3VuZF9zdWJkZXZpY2U7CisgIHJldHVybjsKK30KKworI2lmIGRlZmluZWQoTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHKQoraW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKworICBjaGFyICpzbG90OworICBpbnQgdmVuZG9yOworICBpbnQgZGV2aWNlOworICBpbnQgc3VidmVuZG9yOworICBpbnQgc3ViZGV2aWNlOworCisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwiJXMgPGludGVyZmFjZT5cbiIsYXJndlswXSk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgc2xvdCA9IGZpbmRfaW50ZXJmYWNlX3Nsb3QoYXJndlsxXSk7CisKKyAgZmluZF9pbnRlcmZhY2VfaWRzKGFyZ3ZbMV0sICZ2ZW5kb3IsICZkZXZpY2UsICZzdWJ2ZW5kb3IsICZzdWJkZXZpY2UpOworCisgIHByaW50ZigiJXMgaW4gaW4gc2xvdCAlczogdmVuZG9yICU0eCBkZXZpY2UgJTR4IHN1YnZlbmRvciAlNHggc3ViZGV2aWNlICU0eFxuIiwKKwkgYXJndlsxXSwKKwkgc2xvdCwKKwkgdmVuZG9yLAorCSBkZXZpY2UsCisJIHN1YnZlbmRvciwKKwkgc3ViZGV2aWNlKTsKKworICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c3lzX2hwdXgxMWkuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHN5c19ocHV4MTFpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzZTQ5NgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHN5c19ocHV4MTFpLmMKQEAgLTAsMCArMSw1NiBAQAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzeXMvcHN0YXQuaD4KKworLyogdHVzYyBjYW4gYmUgYSB2ZXJ5IHVzZWZ1bCB0aGluZy4uLiAqLworCisjaWZuZGVmIF9TSV9NQUNISU5FX01PREVMCisjZGVmaW5lIF9TSV9NQUNISU5FX01PREVMIDUKKyNlbmRpZgorCitleHRlcm4gaW50IHN5c2luZm8oaW50IGluZm8sIGNoYXIgKmJ1ZmZlciwgc3NpemVfdCBsZW4pOworCisKK3ZvaWQKK2ZpbmRfc3lzdGVtX2luZm8oY2hhciAqKnN5c3RlbV9tb2RlbCwgY2hhciAqKmNwdV9tb2RlbCwgaW50ICpjcHVfZnJlcXVlbmN5KSB7CisgIGNoYXIgbW9kZWxfc3RyWzY0XTsKKyAgaW50ICByZXQ7CisgIHN0cnVjdCBwc3RfcHJvY2Vzc29yIHByb2Nlc3Nvcl9pbmZvOworCisgIC8qIGZpcnN0IHRoZSBzeXN0ZW0gbW9kZWwgbmFtZSAqLworICByZXQgPSBzeXNpbmZvKF9TSV9NQUNISU5FX01PREVMLG1vZGVsX3N0ciw2NCk7CisgIG1vZGVsX3N0cls2M10gPSAwOworICAqc3lzdGVtX21vZGVsID0gc3RyZHVwKG1vZGVsX3N0cik7CisKKyAgLyogbm93IGxldHMgdHJ5IHRvIGZpbmQgcHJvY2Vzc29yIGZyZXF1ZW5jeS4gd2Ugd2lsbCBmb3Igbm93CisgICAgIGFzcy11LW1lIHRoYXQgYW4gaW5kZXggb2YgemVybyB3aWxsIGFsd2F5cyBnZXQgdXMgc29tZXRoaW5nLAorICAgICB3aGljaCBtYXkgbm90IGFjdHVhbGx5IGJlIHRoZSBjYXNlIGJ1dCBsZXRzIHNlZSBob3cgbG9uZyBpdCB0YWtlcworICAgICB0byBiZSBub3RpY2VkIDopIHJhaiAyMDA4LTAzLTA3ICovCisgIHJldCA9IHBzdGF0X2dldHByb2Nlc3NvcigmcHJvY2Vzc29yX2luZm8sCisJCQkgICBzaXplb2YocHJvY2Vzc29yX2luZm8pLAorCQkJICAgMSwgLyogb25lIHByb2Nlc3Nvciwgb25lIHByb2Nlc3NvciBvbmx5IHBsZWFzZSAqLworCQkJICAgMCk7CisKKyAgaWYgKHJldCA+IDApIHsKKyNpZmRlZiBQU1BfTUFYX0NBQ0hFX0xFVkVMUworICAgIC8qIHdlIGNhbiBnZXQgaXQgImRpcmVjdGx5IiBidXQgdG8gaGVscCBtYWtlIHRoaW5ncyByZWNvbmNpbGUgd2l0aAorICAgICAgIHdoYXQgb3RoZXIgdG9vbHMvcGxhdGZvcm1zIHN1cHBvcnQsIHdlIHNob3VsZG4ndCBkbyBhIHNpbXBsZQorICAgICAgIGludGVnZXIgZGl2aWRlIC0gaW5zdGVhZCwgd2Ugc2hvdWxkIGRvIG91ciBkaXZpc2lvbiBpbiBmbG9hdGluZworICAgICAgIHBvaW50IGFuZCB0aGVuIHJvdW5kICovCisgICAgKmNwdV9mcmVxdWVuY3kgPSByaW50KChkb3VibGUpcHJvY2Vzc29yX2luZm8ucHNwX2NwdV9mcmVxdWVuY3kgLyAKKwkJCSAgMTAwMDAwMC4wKTsKKyNlbHNlCisgICAgLyogb2xkZXIgT1NlcyB3ZXJlICJrbm93biIgdG8gYmUgb24gQ1BVcyB3aGVyZSB0aGUgaXRpY2sgd2FzCisgICAgICAgMXRvMSBoZXJlICovCisgICAgKmNwdV9mcmVxdWVuY3kgPSByaW50KCgoZG91YmxlKXByb2Nlc3Nvcl9pbmZvLnBzcF9pdGlja3NwZXJjbGt0aWNrICogCisJCQkgICAoZG91YmxlKXN5c2NvbmYoX1NDX0NMS19UQ0spKSAvIDEwMDAwMDAuMCk7CisjZW5kaWYgCisgIH0KKyAgZWxzZQorICAgICpjcHVfZnJlcXVlbmN5ID0gLTE7CisKKyAgKmNwdV9tb2RlbCA9IHN0cmR1cCgiVW5rbm93biBDUFUgTW9kZWwiKTsKK30KKyAgCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXRzeXNfbGludXguYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHN5c19saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDM1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzeXNfbGludXguYwpAQCAtMCwwICsxLDEzOCBAQAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaWZkZWYgTkVUUEVSRl9TVEFOREFMT05FX0RFQlVHCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyB2b2lkCitmaW5kX2NwdV9tb2RlbChjaGFyICoqY3B1X21vZGVsKSB7CisgIGNoYXIgbGluZWJ1ZlsyNTZdOworICBjaGFyICpjcmV0OworICBpbnQgIHJldDsKKyAgaW50ICBjOworCisgIEZJTEUgKnByb2NjcHU7CisKKyAgcHJvY2NwdSA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwiciIpOworCisgIGlmIChOVUxMID09IHByb2NjcHUpIHsKKyAgICAqY3B1X21vZGVsID0gc3RyZHVwKCJmb3BlbiIpOworICAgIHJldHVybjsKKyAgfQorCisgIGRvIHsKKyAgICBjcmV0ID0gZmdldHMobGluZWJ1ZiwyNTYscHJvY2NwdSk7CisgICAgaWYgKE5VTEwgIT0gY3JldCkgeworICAgICAgY2hhciAqdGFyZ2V0OworICAgICAgLyogT0ssIHNvIGRvZXMgaXQgc3RhcnQgd2l0aCAibW9kZWwgbmFtZSIgPyAqLworICAgICAgaWYgKHN0cnN0cihsaW5lYnVmLCJtb2RlbCBuYW1lIikgIT0gTlVMTCkgeworCS8qIG9uZSBmb3IgdGhlIG1vbmV5ICJtb2RlbCBuYW1lIiAqLworCXRhcmdldCA9IHN0cnRvayhsaW5lYnVmLCI6Iik7CisJLyogdHdvIGZvciB0aGUgc2hvdyAodGhlIGFjdHVhbCBtb2RlbCBuYW1lKSAqLworCXRhcmdldCA9IHN0cnRvayhOVUxMLCI6Iik7CisJLyogdGhyZWUgdG8gZ2V0IHJlYWR5IC0gc3RyaXAgdGhlIGVvbCAqLworCXRhcmdldFtzdHJsZW4odGFyZ2V0KS0xXSA9IDA7CisJLyogYW5kIGZvdXIgdG8gZ28hICovCisJKmNwdV9tb2RlbCA9IHN0cmR1cCh0YXJnZXQrMSk7CisJcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfSB3aGlsZSAoIWZlb2YocHJvY2NwdSkpOworICAqY3B1X21vZGVsID0gc3RyZHVwKCJtb2RlbF9uYW1lIik7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfY3B1X2ZyZXEoKSB7CisgIGNoYXIgbGluZWJ1ZlsyNTZdOworICBjaGFyICpjcmV0OworICBpbnQgIHJldDsKKyAgaW50ICBjOworCisgIEZJTEUgKnByb2NjcHU7CisKKyAgcHJvY2NwdSA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwiciIpOworCisgIGlmIChOVUxMID09IHByb2NjcHUpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBkbyB7CisgICAgY3JldCA9IGZnZXRzKGxpbmVidWYsMjU2LHByb2NjcHUpOworICAgIGlmIChOVUxMICE9IGNyZXQpIHsKKyAgICAgIGNoYXIgKnRhcmdldDsKKyAgICAgIC8qIE9LLCBzbyBkb2VzIGl0IHN0YXJ0IHdpdGggIm1vZGVsIG5hbWUiID8gKi8KKyAgICAgIGlmIChzdHJzdHIobGluZWJ1ZiwiY3B1IE1IeiIpICE9IE5VTEwpIHsKKwl0YXJnZXQgPSBzdHJ0b2sobGluZWJ1ZiwiOiIpOworCXRhcmdldCA9IHN0cnRvayhOVUxMLCI6Iik7CisJcmV0dXJuIHJpbnQoc3RydG9kKHRhcmdldCsxLE5VTEwpKTsKKyAgICAgIH0KKyAgICB9CisgIH0gd2hpbGUgKCFmZW9mKHByb2NjcHUpKTsKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCAKK2ZpbmRfc3lzdGVtX21vZGVsKGNoYXIgKipzeXN0ZW1fbW9kZWwpIHsKKyNpZiBkZWZpbmVkKEhBVkVfTElCU01CSU9TKQorI2lmIGRlZmluZWQoSEFWRV9TTUJJT1NfU1lTVEVNSU5GT19IKQorI2luY2x1ZGUgPHNtYmlvcy9TeXN0ZW1JbmZvLmg+CisjZWxzZQorICAvKiB0YWtlIG91ciBiZXN0IHNob3QgLSB0aGUgaW50ZXJmYWNlIHNlZW1zIHNpbXBsZSBhbmQgc3RhYmxlIGVub3VnaAorICAgICB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcmVxdWlyZSB0aGUgLWRldiBwYWNrYWdlIGJlIGluc3RhbGxlZCAqLworICBleHRlcm4gY29uc3QgY2hhciAqU01CSU9TR2V0U3lzdGVtTmFtZSgpOworI2VuZGlmCisKKyAgY2hhciAqdGVtcF9tb2RlbDsKKworICAvKiBTTUJJT1NHZXRTeXN0ZW1Nb2RlbCBhbGxvY2F0ZWQgKi8KKyAgdGVtcF9tb2RlbCA9IChjaGFyICopIFNNQklPU0dldFN5c3RlbU5hbWUoKTsKKyAgaWYgKHRlbXBfbW9kZWwpCisgICAgKnN5c3RlbV9tb2RlbCA9IHRlbXBfbW9kZWw7CisgIGVsc2UKKyAgICAqc3lzdGVtX21vZGVsID0gc3RyZHVwKCJTTUJJT1NHZXRTeXN0ZW1Nb2RlbCIpOworCisjZWxzZQorICAvKiB3ZSBkbyBub3QgZXZlbiBoYXZlIHRoZSBsaWJyYXJ5IHNvIHRoZXJlIGlzbid0IG11Y2ggdG8gZG8gaGVyZQorICAgICB1bmxlc3Mgc29tZW9uZSB3YW50cyB0byB0ZWFjaCBuZXRwZXJmIGhvdyB0byBmaW5kIGFuZCBwYXJzZQorICAgICBTTUJJT1MgYWxsIGJ5IGl0cyBsb25lc29tZS4gcmFqIDIwMDgtMDMtMTMgKi8KKyAgKnN5c3RlbV9tb2RlbCA9IHN0cmR1cCgiVGVhY2ggTWUgU01CSU9TIik7CisjZW5kaWYKKyAgcmV0dXJuOworfQorCit2b2lkCitmaW5kX3N5c3RlbV9pbmZvKGNoYXIgKipzeXN0ZW1fbW9kZWwsIGNoYXIgKipjcHVfbW9kZWwsIGludCAqY3B1X2ZyZXF1ZW5jeSkgeworICBpbnQgcmV0OworCisgIGZpbmRfc3lzdGVtX21vZGVsKHN5c3RlbV9tb2RlbCk7CisgIGZpbmRfY3B1X21vZGVsKGNwdV9tb2RlbCk7CisgICpjcHVfZnJlcXVlbmN5ID0gZmluZF9jcHVfZnJlcSgpOworCit9CisKKyNpZmRlZiBORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisKKyAgY2hhciAqc3lzdGVtX21vZGVsOworICBjaGFyICpjcHVfbW9kZWw7CisgIGludCAgIGZyZXF1ZW5jeTsKKworICBmaW5kX3N5c3RlbV9pbmZvKCZzeXN0ZW1fbW9kZWwsJmNwdV9tb2RlbCwmZnJlcXVlbmN5KTsKKyAgcHJpbnRmKCJzeXN0ZW1fbW9kZWwgJXMsIGNwdV9tb2RlbCAlcywgZnJlcXVlbmN5ICVkXG4iLAorCSBzeXN0ZW1fbW9kZWwsCisJIGNwdV9tb2RlbCwKKwkgZnJlcXVlbmN5KTsKKworICByZXR1cm4gMDsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldHN5c19ub25lLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzeXNfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjgxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXRzeXNfbm9uZS5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgPHN0cmluZy5oPgorCit2b2lkCitmaW5kX3N5c3RlbV9pbmZvKGNoYXIgKipzeXN0ZW1fbW9kZWwsIGNoYXIgKipjcHVfbW9kZWwsIGludCAqY3B1X2ZyZXF1ZW5jeSkgeworICAqc3lzdGVtX21vZGVsID0gc3RyZHVwKCJVbmtub3duIFN5c3RlbSBNb2RlbCIpOworICAqY3B1X21vZGVsID0gc3RyZHVwKCJVbmtub3duIENQVSBNb2RlbCIpOworICAqY3B1X2ZyZXF1ZW5jeSA9IC0xOworfQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0c3lzX3NvbGFyaXMuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHN5c19zb2xhcmlzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhMTRhNgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHN5c19zb2xhcmlzLmMKQEAgLTAsMCArMSwxNzkgQEAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8a3N0YXQuaD4KKworc3RhdGljIGtzdGF0X2N0bF90ICprYyA9IE5VTEw7CitzdGF0aWMga2lkX3Qga2NpZCA9IDA7CisKK3N0YXRpYyB2b2lkCitmaW5kX2NwdV9tb2RlbF9mcmVxKGNoYXIgKipjcHVfbW9kZWwsIGludCAqZnJlcXVlbmN5KSB7CisKKyAga3N0YXRfdCAqa3NwOworICBraWRfdCBua2NpZDsKKyAga3N0YXRfbmFtZWRfdCAqa25wOworICBpbnQgaSxmb3VuZF9icmFuZCxmb3VuZF9mcmVxOworCisKKyAgZm91bmRfYnJhbmQgPSAwOworICBmb3VuZF9mcmVxID0gMDsKKworICBrYyA9IGtzdGF0X29wZW4oKTsKKworICBpZiAoTlVMTCA9PSBrYykgeworICAgICpjcHVfbW9kZWwgPSBzdHJkdXAoImtzdGF0X29wZW4iKTsKKyAgICAqZnJlcXVlbmN5ID0gLTE7CisgICAgcmV0dXJuOworICB9CisKKyAga3NwID0ga3N0YXRfbG9va3VwKGtjLCAiY3B1X2luZm8iLCAwLCBOVUxMKTsKKworICBpZiAoKE5VTEwgPT0ga3NwKSB8fAorICAgICAgKChrc3ApICYmIChLU1RBVF9UWVBFX05BTUVEICE9IGtzcC0+a3NfdHlwZSkpKSB7CisgICAgKmNwdV9tb2RlbCA9IHN0cmR1cCgia3N0YXRfbG9va3VwIik7CisgICAgKmZyZXF1ZW5jeSA9IC0xOworICAgIGtzdGF0X2Nsb3NlKGtjKTsKKyAgICByZXR1cm47CisgIH0KKworICBua2NpZCA9IGtzdGF0X3JlYWQoa2MsIGtzcCwgTlVMTCk7CisKKyAgaWYgKC0xID09IG5rY2lkKSB7CisgICAgKmNwdV9tb2RlbCA9IHN0cmR1cCgia3N0YXRfcmVhZCIpOworICAgICpmcmVxdWVuY3kgPSAtMTsKKyAgICBrc3RhdF9jbG9zZShrYyk7CisgICAgcmV0dXJuOworICB9CisKKyAgZm9yIChpID0ga3NwLT5rc19uZGF0YSwga25wID0ga3NwLT5rc19kYXRhOworICAgICAgIGkgPiAwOworICAgICAgIGtucCsrLCBpLS0pIHsKKyAgICBpZiAoIXN0cmNtcCgiYnJhbmQiLCBrbnAtPm5hbWUpKSB7CisgICAgICAqY3B1X21vZGVsID0gc3RyZHVwKEtTVEFUX05BTUVEX1NUUl9QVFIoa25wKSk7CisgICAgICBmb3VuZF9icmFuZCA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoImNsb2NrX01IeiIsa25wLT5uYW1lKSkgeworICAgICAgKmZyZXF1ZW5jeSA9IChpbnQpa25wLT52YWx1ZS51aTMyOworICAgICAgZm91bmRfZnJlcSA9IDE7CisgICAgfQorICB9CisgIGlmICghZm91bmRfYnJhbmQpCisgICAgKmNwdV9tb2RlbCA9IHN0cmR1cCgiQ1BVIE5vdCBGb3VuZCIpOworICBpZiAoIWZvdW5kX2ZyZXEpCisgICAgKmZyZXF1ZW5jeSA9IC0xOworCisgIGtzdGF0X2Nsb3NlKGtjKTsKK30KKworc3RhdGljIHZvaWQKK2ZpbmRfc3lzdGVtX21vZGVsX3N5c2luZm8oY2hhciAqKnN5c3RlbV9tb2RlbCkgeworCisjaW5jbHVkZSA8c3lzL3N5c3RlbWluZm8uaD4KKyAgY2hhciBtb2RlbF9zdHJbMzddOworICBjaGFyICp0b2tlbjEsKnRva2VuMjsKKyAgbG9uZyAgcmV0OworICAvKiBzeXNpbmZvIGlzIGtpbmQgZW5vdWdoIHRvIHplcm8tdGVybWluYXRlIGZvciB1cy4gd2Ugd2lsbCBiZQorICAgICBpZ25vcmluZyB0aGUgbGVhZGluZyBTVU5XLCBpZiBwcmVzZW50IHNvIHVzZSAzNyBpbnN0ZWFkIG9mIDM1IGluCisgICAgIGNhc2UgdGhlIHBsYXRmb3JtIG5hbWUgaXMgbG9uZyAqLworICByZXQgPSBzeXNpbmZvKFNJX1BMQVRGT1JNLG1vZGVsX3N0ciwzNyk7CisgIGlmICgtMSAhPSByZXQpIHsKKyAgICAvKiBob3dldmVyLCBpdCBzZWVtcyB0byBzaG92ZSBwb3RlbnRpYWxseSByZWR1bmRhbnQgaW5mb3JtYXRpb24gYXQKKyAgICAgICB1cyBhbmQgaW5jbHVkZSBhIGNvbW1hLCB3aGljaCB3ZSBoYXZlIG5vIGRlc2lyZSB0byBpbmNsdWRlLCBzbworICAgICAgIHdlIHdpbGwgYXNzLXUtbWUgd2UgY2FuIGRvIGEgY291cGxlIHN0cnRvayBjYWxscyB0byBiZSByaWQgb2YKKyAgICAgICB0aGF0ICovCisgICAgdG9rZW4xID0gc3RydG9rKG1vZGVsX3N0ciwiLCIpOworICAgIHRva2VuMiA9IHN0cnRvayhOVUxMLCIsIik7CisgICAgaWYgKHRva2VuMikKKyAgICAgICpzeXN0ZW1fbW9kZWwgPSBzdHJkdXAodG9rZW4yKTsKKyAgICBlbHNlCisgICAgICAqc3lzdGVtX21vZGVsID0gc3RyZHVwKG1vZGVsX3N0cik7CisgIH0KKyAgZWxzZQorICAgICpzeXN0ZW1fbW9kZWwgPSBzdHJkdXAoInN5c2luZm8iKTsKKworfQorCitzdGF0aWMgdm9pZAorZmluZF9zeXN0ZW1fbW9kZWwoY2hhciAqKnN5c3RlbV9tb2RlbCkgeworCisgIC8qIHRoZSAuaCBmaWxlIHdpbGwgYmUgdGhlcmUgZXZlbiBvbiBhIFNQQVJDIHN5c3RlbSwgc28gd2UgaGF2ZSB0bworICAgICBjaGVjayBmb3IgYm90aCB0aGUgLmggYW5kIHRoZSBsaWJhcmFyeS4uLiAqLworI2lmIGRlZmluZWQoSEFWRV9TWVNfU01CSU9TX0gpICYmIGRlZmluZWQoSEFWRV9MSUJTTUJJT1MpCisjaW5jbHVkZSA8c3lzL3NtYmlvcy5oPgorICBzbWJpb3NfaGRsX3QgKnNtYmlvc19oYW5kbGU7CisgIHNtYmlvc19pbmZvX3QgaW5mbzsgCisKKyAgaW50IGVycm9yOworICBpbnQgIHJldDsKKyAgaWRfdCByZXRfaWRfdDsKKworICAvKiBtdWNoIG9mIHRoaXMgaXMgd2lsZCBndWVzc2luZyBiYXNlZCBvbiB3ZWIgc2VhcmNoZXMsIHN5cy9zbWJpb3MuaCwgYW5kCisgICAgIGV4cGVyaW1lbnRhdGlvbi4gIG15IHRoYW5rcyB0byBhIGhlbHBmdWwgcGVyc29uIGZhbWlsaWFyIHdpdGggbGlic21iaW9zCisgICAgIHdobyBnb3QgbWUgc3RhcnRlZC4gIGZlZWwgZnJlZSB0byBtYWtlIHlvdXJzZWxmIGtub3duIGFzIHlvdSBzZWUgZml0IDopCisgICAgIHJpY2sgam9uZXMgMjAwOC0wMy0xMiAqLworICBzbWJpb3NfaGFuZGxlID0gc21iaW9zX29wZW4oTlVMTCxTTUJfVkVSU0lPTiwwLCZlcnJvcik7CisgIGlmIChOVUxMID09IHNtYmlvc19oYW5kbGUpIHsKKyAgICAvKiBmYWxsLWJhY2sgb24gc3lzaW5mbyBmb3IgdGhlIHN5c3RlbSBtb2RlbCBpbmZvLCB3ZSBkb24ndCByZWFsbHkKKyAgICAgICBjYXJlIHdoeSB3ZSBkaWRuJ3QgZ2V0IGEgaGFuZGxlLCBqdXN0IHRoYXQgd2UgZGlkbid0IGdldCBvbmUgKi8KKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKKyAgICBwcmludGYoInNtYmlvc19vcGVuIHJldHVybmVkIE5VTEwsIGVycm9yICVkIGVycm5vICVkICVzXG4iLAorCSAgIGVycm9yLGVycm5vLHN0cmVycm9yKGVycm5vKSk7CisjZW5kaWYKKyAgICBmaW5kX3N5c3RlbV9tb2RlbF9zeXNpbmZvKHN5c3RlbV9tb2RlbCk7CisgICAgcmV0dXJuOworICB9CisgIHJldCA9IHNtYmlvc19pbmZvX2NvbW1vbihzbWJpb3NfaGFuZGxlLDI1NiwmaW5mbyk7CisgIGlmICgwID09IHJldCkgCisgICAgKnN5c3RlbV9tb2RlbCA9IHN0cmR1cChpbmZvLnNtYmlfcHJvZHVjdCk7CisgIGVsc2UgeworICAgIC8qIHdlIGFzcy11LW1lIHRoYXQgd2hpbGUgdGhlcmUgd2FzIHNtYmlvcyBvbiB0aGUgc3lzdGVtIGl0IGRpZG4ndAorICAgICAgIGhhdmUgdGhlIHNtYmlfcHJvZHVjdCBpbmZvcm1hdGlvbiB3ZSBzZWVrLCBzbyBvbmNlIGFnYWluIHdlCisgICAgICAgZmFsbGJhY2sgdG8gc3lzaW5mby4gIHRoaXMgaXMgZ2V0dGluZyB0aXJlc29tZSBpc24ndCBpdD8tKSByYWoKKyAgICAgICAyMDA4LTAzLTEyICovCisjaWYgZGVmaW5lZChORVRQRVJGX1NUQU5EQUxPTkVfREVCVUcpCisgICAgcHJpbnRmKCJzbWJpb3NfaW5mb19jb21tb24gcmV0dXJuZWQgJWQgZXJybm8gJWQgJXNcbiIsCisJICAgcmV0LGVycm5vLHN0cmVycm9yKGVycm5vKSk7CisjZW5kaWYKKyAgICBmaW5kX3N5c3RlbV9tb2RlbF9zeXNpbmZvKHN5c3RlbV9tb2RlbCk7CisgIH0KKyAgc21iaW9zX2Nsb3NlKHNtYmlvc19oYW5kbGUpOworCisjZWxzZQorCisgIGZpbmRfc3lzdGVtX21vZGVsX3N5c2luZm8oc3lzdGVtX21vZGVsKTsKKworI2VuZGlmCisKKyAgcmV0dXJuOworfQorCit2b2lkCitmaW5kX3N5c3RlbV9pbmZvKGNoYXIgKipzeXN0ZW1fbW9kZWwsIGNoYXIgKipjcHVfbW9kZWwsIGludCAqY3B1X2ZyZXF1ZW5jeSkgeworICBpbnQgcmV0OworCisgIGZpbmRfc3lzdGVtX21vZGVsKHN5c3RlbV9tb2RlbCk7CisgIGZpbmRfY3B1X21vZGVsX2ZyZXEoY3B1X21vZGVsLGNwdV9mcmVxdWVuY3kpOworCit9CisKKyNpZiBkZWZpbmVkKE5FVFBFUkZfU1RBTkRBTE9ORV9ERUJVRykKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisgIGNoYXIgKnN5c3RlbV9tb2RlbDsKKyAgY2hhciAqY3B1X21vZGVsOworICBpbnQgIGZyZXF1ZW5jeTsKKworICBmaW5kX3N5c3RlbV9pbmZvKCZzeXN0ZW1fbW9kZWwsJmNwdV9tb2RlbCwmZnJlcXVlbmN5KTsKKyAgcHJpbnRmKCJzeXN0ZW1fbW9kZWwgJXMsIGNwdV9tb2RlbCAlcywgZnJlcXVlbmN5ICVkXG4iLAorCSBzeXN0ZW1fbW9kZWwsCisJIGNwdV9tb2RlbCwKKwkgZnJlcXVlbmN5KTsKK30KKyNlbmRpZgorICAgIApkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9ic2QuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkYjVmMAotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfYnNkLmMKQEAgLTAsMCArMSwxMzAwMSBAQAorI2lmbmRlZiBsaW50CitjaGFyCW5ldHRlc3RfaWRbXT0iXAorQCgjKW5ldHRlc3RfYnNkLmMgKGMpIENvcHlyaWdodCAxOTkzLTIwMDggSGV3bGV0dC1QYWNrYXJkIENvLiBWZXJzaW9uIDIuNC41IjsKKyNlbmRpZiAvKiBsaW50ICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCQkJCQkJKi8KKy8qCW5ldHRlc3RfYnNkLmMJCQkJCQkqLworLyoJCQkJCQkJCSovCisvKiAgICAgIHRoZSBCU0Qgc29ja2V0cyBwYXJzaW5nIHJvdXRpbmUuLi4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgIC4uLndpdGggdGhlIGFkZGl0aW9uIG9mIFdpbmRvd3MgTlQsIHRoaXMgaXMgbm93IGFsc28gICAqLworLyogICAgICAgICAgYSBXaW5zb2NrIHRlc3QuLi4gc2lnaCA6KSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgc2Nhbl9zb2NrZXRzX2FyZ3MoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKgl0aGUgYWN0dWFsIHRlc3Qgcm91dGluZXMuLi4JCQkJKi8KKy8qCQkJCQkJCQkqLworLyoJc2VuZF90Y3Bfc3RyZWFtKCkJcGVyZm9ybSBhIHRjcCBzdHJlYW0gdGVzdAkqLworLyoJcmVjdl90Y3Bfc3RyZWFtKCkJCQkJCSovCisvKiAgICAgIHNlbmRfdGNwX21hZXJ0cygpICAgICAgIHBlcmZvcm0gYSB0Y3Agc3RyZWFtIHRlc3QgICAgICAgKi8KKy8qICAgICAgcmVjdl90Y3BfbWFlcnRzKCkgICAgICAgaW4gdGhlIG90aGVyIGRpcmVjdGlvbiAgICAgICAgICAqLworLyoJc2VuZF90Y3BfcnIoKQkJcGVyZm9ybSBhIHRjcCByZXF1ZXN0L3Jlc3BvbnNlCSovCisvKglyZWN2X3RjcF9ycigpCQkJCQkJKi8KKy8qICAgICAgc2VuZF90Y3BfY29ubl9ycigpICAgICAgYW4gUlIgdGVzdCBpbmNsdWRpbmcgY29ubmVjdCAgICAqLworLyogICAgICByZWN2X3RjcF9jb25uX3JyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHNlbmRfdGNwX2NjKCkgICAgICAgICAgIGEgY29ubmVjdC9kaXNjb25uZWN0IHRlc3Qgd2l0aCAgKi8KKy8qICAgICAgcmVjdl90Y3BfY2MoKSAgICAgICAgICAgbm8gUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzZW5kX3RjcF9tc3MoKSAgICAgICAgICBqdXN0IHJlcG9ydCB0aGUgbXNzICAgICAgICAgICAgICovCisvKglzZW5kX3VkcF9zdHJlYW0oKQlwZXJmb3JtIGEgdWRwIHN0cmVhbSB0ZXN0CSovCisvKglyZWN2X3VkcF9zdHJlYW0oKQkJCQkJKi8KKy8qCXNlbmRfdWRwX3JyKCkJCXBlcmZvcm0gYSB1ZHAgcmVxdWVzdC9yZXNwb25zZQkqLworLyoJcmVjdl91ZHBfcnIoKQkJCQkJCSovCisvKglsb2NfY3B1X3JhdGUoKQkJZGV0ZXJtaW5lIHRoZSBsb2NhbCBjcHUgbWF4cmF0ZSAqLworLyoJcmVtX2NwdV9yYXRlKCkJCWZpbmQgdGhlIHJlbW90ZSBjcHUgbWF4cmF0ZQkqLworLyoJCQkJCQkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBTVERDX0hFQURFUlMKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZuZGVmIFdJTjMyCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBOT1NURExJQkgKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZiAvKiBOT1NURExJQkggKi8KKworI2lmZGVmIFdBTlRfU0NUUAorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2VuZGlmCisKKyNpZm5kZWYgV0lOMzIKKyNpZiAhZGVmaW5lZChfX1ZNUykgJiYgIWRlZmluZWQoTVNET1MpCisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2VuZGlmIC8qICFfX1ZNUyAmJiAhTVNET1MgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbHNlIC8qIFdJTjMyICovCisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2RlZmluZSBuZXRwZXJmX3NvY2tsZW5fdCBzb2NrbGVuX3QKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCisvKiB3aGlsZSBpdCBpcyB1bmxpa2VseSB0aGF0IGFueW9uZSBydW5uaW5nIFdpbmRvd3MgMjAwMCBvciBOVCA0IGlzCisgICBnb2luZyB0byBiZSB0cnlpbmcgdG8gY29tcGlsZSB0aGlzLCBpZiB0aGV5IGFyZSB0aGV5IHdpbGwgd2FudCB0bworICAgZGVmaW5lIERPTlRfSVBWNiBpbiB0aGUgc291cmNlcyBmaWxlICovCisjaWZuZGVmIERPTlRfSVBWNgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNkZWZpbmUgc2xlZXAoeCkgU2xlZXAoKHgpKjEwMDApCisKKyNkZWZpbmUgX19mdW5jX18gX19GVU5DVElPTl9fCisjZW5kaWYgLyogV0lOMzIgKi8KKworLyogV2UgZG9uJ3Qgd2FudCB0byB1c2UgYmFyZSBjb25zdGFudHMgaW4gdGhlIHNodXRkb3duKCkgY2FsbC4gIEluIHRoZQorICAgZXh0cmVtZWx5IHVubGlrZWx5IGV2ZW50IHRoYXQgU0hVVF9XUiBpc24ndCBkZWZpbmVkLCB3ZSB3aWxsIGRlZmluZQorICAgaXQgdG8gdGhlIHZhbHVlIHdlIHVzZWQgdG8gYmUgcGFzc2luZyB0byBzaHV0ZG93bigpIGFueXdheS4gIHJhagorICAgMjAwNy0wMi0wOCAqLworI2lmICFkZWZpbmVkKFNIVVRfV1IpCisjZGVmaW5lIFNIVVRfV1IgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSB8fCAhZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorIyBpbmNsdWRlICJtaXNzaW5nL2dldGFkZHJpbmZvLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIm5ldGxpYi5oIgorI2luY2x1ZGUgIm5ldHNoLmgiCisjaW5jbHVkZSAibmV0dGVzdF9ic2QuaCIKKworI2lmIGRlZmluZWQoV0FOVF9ISVNUT0dSQU0pIHx8IGRlZmluZWQoV0FOVF9ERU1PKSAKKyNpbmNsdWRlICJoaXN0LmgiCisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworCisvKiBtYWtlIGZpcnN0X2J1cnN0X3NpemUgdW5jb25kaXRpb25hbCBzbyB3ZSBjYW4gdXNlIGl0IGVhc2lseSBlbm91Z2gKKyAgIHdoZW4gY2FsY3VsYXRpbmcgdHJhbnNhY3Rpb24gbGF0ZW5jeSBmb3IgdGhlIFRDUF9SUiB0ZXN0LiByYWoKKyAgIDIwMDctMDYtMDggaG93ZXZlciwgY2hhbmdlIGl0cyBkZWZhdWx0IHZhbHVlIHNvIG9uZSBjYW4gdGVsbCBpbgorICAgIm9tbmkiIG91dHB1dCB3aGV0aGVyIG9yIG5vdCBXQU5UX0JVUlNUIHdhcyBlbmFibGVkLiByYWoKKyAgIDIwMDgtMDEtMjggKi8KKyNpZiBkZWZpbmVkKFdBTlRfRklSU1RfQlVSU1QpCitpbnQgZmlyc3RfYnVyc3Rfc2l6ZT0wOworI2Vsc2UKK2ludCBmaXJzdF9idXJzdF9zaXplPS0xOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VOREZJTEUpICYmIChkZWZpbmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19zdW4pKQorI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5oPgorI2VuZGlmIC8qIEhBVkVfU0VOREZJTEUgJiYgKF9fbGludXggfHwgX19zdW4pICovCisKKwwKKworLyogdGhlc2UgdmFyaWFibGVzIGFyZSBzcGVjaWZpYyB0byB0aGUgQlNEIHNvY2tldHMgdGVzdHMsIGJ1dCBjYW4KKyAqIGJlIHVzZWQgZWxzZXdoZXJlIGlmIG5lZWRlZC4gIFRoZXkgYXJlIGV4dGVybmVkIHRocm91Z2ggbmV0dGVzdF9ic2QuaAorICovCisKK2ludAkKKyAgc29ja2V0X3R5cGUsICAgICAgICAgIC8qIHVzZWQgaW5pdGlhbGx5IGJ5IHRoZSAib21uaSIgdGVzdHMgKi8KKyAgcnNzX3NpemVfcmVxID0gLTEsCS8qIHJlcXVlc3RlZCByZW1vdGUgc29ja2V0IHNlbmQgYnVmZmVyIHNpemUgKi8KKyAgcnNyX3NpemVfcmVxID0gLTEsCS8qIHJlcXVlc3RlZCByZW1vdGUgc29ja2V0IHJlY3YgYnVmZmVyIHNpemUgKi8KKyAgcnNzX3NpemUsCQkvKiBpbml0aWFsIHJlbW90ZSBzb2NrZXQgc2VuZCBidWZmZXIgc2l6ZSAqLworICByc3Jfc2l6ZSwJCS8qIGluaXRpYWwgcmVtb3RlIHNvY2tldCByZWN2IGJ1ZmZlciBzaXplICovCisgIHJzc19zaXplX2VuZCA9IC0xLCAgICAvKiBmaW5hbCAgcmVtb3RlIHNvY2tldCBzZW5kIGJ1ZmZlciBzaXplICovCisgIHJzcl9zaXplX2VuZCA9IC0xLCAgICAvKiBmaW5hbCAgcmVtb3RlIHNvY2tldCByZWN2IGJ1ZmZlciBzaXplICovCisgIGxzc19zaXplX3JlcSA9IC0xLAkvKiByZXF1ZXN0ZWQgbG9jYWwgc29ja2V0IHNlbmQgYnVmZmVyIHNpemUgKi8KKyAgbHNyX3NpemVfcmVxID0gLTEsCS8qIHJlcXVlc3RlZCBsb2NhbCBzb2NrZXQgcmVjdiBidWZmZXIgc2l6ZSAqLworICBsc3Nfc2l6ZSwJCS8qIGxvY2FsICBzb2NrZXQgc2VuZCBidWZmZXIgc2l6ZSAJKi8KKyAgbHNyX3NpemUsCQkvKiBsb2NhbCAgc29ja2V0IHJlY3YgYnVmZmVyIHNpemUgCSovCisgIGxzc19zaXplX2VuZCA9IC0xLCAgICAvKiBmaW5hbCBsb2NhbCAgc29ja2V0IHNlbmQgYnVmZmVyIHNpemUgKi8KKyAgbHNyX3NpemVfZW5kID0gLTEsICAgIC8qIGZpbmFsIGxvY2FsICBzb2NrZXQgcmVjdiBidWZmZXIgc2l6ZSAqLworICByZXFfc2l6ZSA9IDEsCQkvKiByZXF1ZXN0IHNpemUgICAgICAgICAgICAgICAgICAgCSovCisgIHJzcF9zaXplID0gMSwJCS8qIHJlc3BvbnNlIHNpemUJCQkqLworICBzZW5kX3NpemUsCQkvKiBob3cgYmlnIGFyZSBpbmRpdmlkdWFsIHNlbmRzCQkqLworICByZWN2X3NpemU7CQkvKiBob3cgYmlnIGFyZSBpbmRpdmlkdWFsIHJlY2VpdmVzCSovCisKK3N0YXRpYyAgaW50IGNvbmZpZGVuY2VfaXRlcmF0aW9uOworc3RhdGljICBjaGFyICBsb2NhbF9jcHVfbWV0aG9kOworc3RhdGljICBjaGFyICByZW1vdGVfY3B1X21ldGhvZDsKKworLyogdGhlc2Ugd2lsbCBjb250cm9sIHRoZSB3aWR0aCBvZiBwb3J0IG51bWJlcnMgd2UgdHJ5IHRvIHVzZSBpbiB0aGUgKi8KKy8qIFRDUF9DUlIgYW5kL29yIFRDUF9UUlIgdGVzdHMuIHJhaiAzLzk1ICovCitzdGF0aWMgaW50IGNsaWVudF9wb3J0X21pbiA9IDUwMDA7CitzdGF0aWMgaW50IGNsaWVudF9wb3J0X21heCA9IDY1NTM1OworCisgLyogZGlmZmVyZW50IG9wdGlvbnMgZm9yIHRoZSBzb2NrZXRzCQkJCSovCisKK2ludAorICBsb2Nfbm9kZWxheSwJCS8qIGRvbid0L2RvIHVzZSBOT0RFTEFZCWxvY2FsbHkJCSovCisgIHJlbV9ub2RlbGF5LAkJLyogZG9uJ3QvZG8gdXNlIE5PREVMQVkgcmVtb3RlbHkJKi8KKyNpZmRlZiBUQ1BfQ09SSworICBsb2NfdGNwY29yaz0wLCAgICAgICAgLyogZG9uJ3QvZG8gdXNlIFRDUF9DT1JLIGxvY2FsbHkgICAgICAgICovCisgIHJlbV90Y3Bjb3JrPTAsICAgICAgICAvKiBkb24ndC9kbyB1c2UgVENQX0NPUksgcmVtb3RlbHkgICAgICAgKi8KKyNlbHNlCisgIGxvY190Y3Bjb3JrPS0xLAorICByZW1fdGNwY29yaz0tMSwKKyNlbmRpZiAvKiBUQ1BfQ09SSyAqLworICBsb2Nfc25kYXZvaWQsCQkvKiBhdm9pZCBzZW5kIGNvcGllcyBsb2NhbGx5CQkqLworICBsb2NfcmN2YXZvaWQsCQkvKiBhdm9pZCByZWN2IGNvcGllcyBsb2NhbGx5CQkqLworICByZW1fc25kYXZvaWQsCQkvKiBhdm9pZCBzZW5kIGNvcGllcyByZW1vdGVseQkJKi8KKyAgcmVtX3JjdmF2b2lkLCAJLyogYXZvaWQgcmVjdl9jb3BpZXMgcmVtb3RlbHkJCSovCisgIGxvY2FsX2Nvbm5lY3RlZCA9IDAsICAvKiBsb2NhbCBzb2NrZXQgdHlwZSwgY29ubmVjdGVkL25vbi1jb25uZWN0ZWQgKi8KKyAgcmVtb3RlX2Nvbm5lY3RlZCA9IDA7IC8qIHJlbW90ZSBzb2NrZXQgdHlwZSwgY29ubmVjdGVkL25vbi1jb25uZWN0ZWQgKi8KKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisjaWZkZWYgSEFWRV9HRVRIUlRJTUUKK3N0YXRpYyBocnRpbWVfdCB0aW1lX29uZTsKK3N0YXRpYyBocnRpbWVfdCB0aW1lX3R3bzsKKyNlbGlmIEhBVkVfR0VUX0hSVAorI2luY2x1ZGUgImhydC5oIgorc3RhdGljIGhydF90IHRpbWVfb25lOworc3RhdGljIGhydF90IHRpbWVfdHdvOworI2VsaWYgZGVmaW5lZChXSU4zMikKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIHRpbWVfb25lOworc3RhdGljIExBUkdFX0lOVEVHRVIgdGltZV90d287CisjZWxzZQorc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVfb25lOworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVfdHdvOworI2VuZGlmIC8qIEhBVkVfR0VUSFJUSU1FICovCitzdGF0aWMgSElTVCB0aW1lX2hpc3Q7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworI2lmZGVmIFdBTlRfSU5URVJWQUxTCitpbnQgaW50ZXJ2YWxfY291bnQ7CisjaWZuZGVmIFdBTlRfU1BJTgorc2lnc2V0X3Qgc2lnbmFsX3NldDsKKyNkZWZpbmUgSU5URVJWQUxTX0lOSVQoKSBcCisgICAgaWYgKGludGVydmFsX2J1cnN0KSB7IFwKKyAgICAgIC8qIHplcm8gbWVhbnMgdGhhdCB3ZSBuZXZlciBwYXVzZSwgc28gd2UgbmV2ZXIgc2hvdWxkIG5lZWQgdGhlIFwKKyAgICAgICAgIGludGVydmFsIHRpbWVyLiB3ZSB1c2VkIHRvIHVzZSBpdCBmb3IgZGVtbyBtb2RlLCBidXQgd2UgZGVhbCBcCisJIHdpdGggdGhhdCB3aXRoIGEgdmFyaWFudCBvbiB3YXRjaGluZyB0aGUgY2xvY2sgcmF0aGVyIHRoYW4gXAorCSB3YWl0aW5nIGZvciBhIHRpbWVyLiByYWogMjAwNi0wMi0wNiAqLyBcCisgICAgICBzdGFydF9pdGltZXIoaW50ZXJ2YWxfd2F0ZSk7IFwKKyAgICB9IFwKKyAgICBpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OyBcCisgICAgLyogZ2V0IHRoZSBzaWduYWwgc2V0IGZvciB0aGUgY2FsbCB0byBzaWdzdXNwZW5kICovIFwKKyAgICBpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCAoc2lnc2V0X3QgKilOVUxMLCAmc2lnbmFsX3NldCkgIT0gMCkgeyBcCisgICAgICBmcHJpbnRmKHdoZXJlLCBcCisJICAgICAgIiVzOiB1bmFibGUgdG8gZ2V0IHNpZ21hc2sgZXJybm8gJWRcbiIsIFwKKwkgICAgICBfX2Z1bmNfXywgXAorCSAgICAgIGVycm5vKTsgXAorICAgICAgZmZsdXNoKHdoZXJlKTsgXAorICAgICAgZXhpdCgxKTsgXAorICAgIH0KKworI2RlZmluZSBJTlRFUlZBTFNfV0FJVCgpIFwKKyAgICAgIC8qIGluIHRoaXMgY2FzZSwgdGhlIGludGVydmFsIGNvdW50IGlzIHRoZSBjb3VudC1kb3duIGNvdXRlciBcCisJIHRvIGRlY2lkZSB0byBzbGVlcCBmb3IgYSBsaXR0bGUgYml0ICovIFwKKyAgICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpICYmICgtLWludGVydmFsX2NvdW50ID09IDApKSB7IFwKKwkvKiBjYWxsIHNpZ3N1c3BlbmQgYW5kIHdhaXQgZm9yIHRoZSBpbnRlcnZhbCB0aW1lciB0byBnZXQgdXMgXAorCSAgIG91dCAqLyBcCisJaWYgKGRlYnVnID4gMSkgeyBcCisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzdXNwZW5kXG4iKTsgXAorCSAgZmZsdXNoKHdoZXJlKTsgXAorCX0gXAorCWlmIChzaWdzdXNwZW5kKCZzaWduYWxfc2V0KSA9PSBFRkFVTFQpIHsgXAorCSAgZnByaW50Zih3aGVyZSwgXAorCQkgICIlczogZmF1bHQgd2l0aCBzaWdzdXNwZW5kLlxuIiwgXAorICAgICAgICAgICAgICAgICAgX19mdW5jX18pOyBcCisJICBmZmx1c2god2hlcmUpOyBcCisJICBleGl0KDEpOyBcCisJfSBcCisJaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsgXAorICAgICAgfQorI2Vsc2UKKy8qIGZpcnN0IG91dCB0aW1lc3RhbXAgKi8KKyNpZmRlZiBIQVZFX0dFVEhSVElNRQorc3RhdGljIGhydGltZV90IGludHZsX29uZTsKK3N0YXRpYyBocnRpbWVfdCBpbnR2bF90d287CitzdGF0aWMgaHJ0aW1lX3QgKmludHZsX29uZV9wdHIgPSAmaW50dmxfb25lOworc3RhdGljIGhydGltZV90ICppbnR2bF90d29fcHRyID0gJmludHZsX3R3bzsKK3N0YXRpYyBocnRpbWVfdCAqdGVtcF9pbnR2bF9wdHIgPSAmaW50dmxfb25lOworI2VsaWYgZGVmaW5lZChXSU4zMikKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIGludHZsX29uZTsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIGludHZsX3R3bzsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICppbnR2bF9vbmVfcHRyID0gJmludHZsX29uZTsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICppbnR2bF90d29fcHRyID0gJmludHZsX3R3bzsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICp0ZW1wX2ludHZsX3B0ciA9ICZpbnR2bF9vbmU7CisjZWxzZQorc3RhdGljIHN0cnVjdCB0aW1ldmFsIGludHZsX29uZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBpbnR2bF90d287CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgKmludHZsX29uZV9wdHIgPSAmaW50dmxfb25lOworc3RhdGljIHN0cnVjdCB0aW1ldmFsICppbnR2bF90d29fcHRyID0gJmludHZsX3R3bzsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCAqdGVtcF9pbnR2bF9wdHIgPSAmaW50dmxfb25lOworI2VuZGlmCisKKyNkZWZpbmUgSU5URVJWQUxTX0lOSVQoKSBcCisgICAgICBpZiAoaW50ZXJ2YWxfYnVyc3QpIHsgXAorCUhJU1RfdGltZXN0YW1wKGludHZsX29uZV9wdHIpOyBcCisgICAgICB9IFwKKyAgICAgIGludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7IFwKKworI2RlZmluZSBJTlRFUlZBTFNfV0FJVCgpIFwKKyAgICAgIC8qIGluIHRoaXMgY2FzZSwgdGhlIGludGVydmFsIGNvdW50IGlzIHRoZSBjb3VudC1kb3duIGNvdXRlciBcCisJIHRvIGRlY2lkZSB0byBzbGVlcCBmb3IgYSBsaXR0bGUgYml0ICovIFwKKyAgICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpICYmICgtLWludGVydmFsX2NvdW50ID09IDApKSB7IFwKKwkvKiBjYWxsIHNpZ3N1c3BlbmQgYW5kIHdhaXQgZm9yIHRoZSBpbnRlcnZhbCB0aW1lciB0byBnZXQgdXMgXAorCSAgIG91dCAqLyBcCisJaWYgKGRlYnVnID4gMSkgeyBcCisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzcGluIHN1c3BlbmRcbiIpOyBcCisJICBmZmx1c2god2hlcmUpOyBcCisJfSBcCisgICAgICAgIEhJU1RfdGltZXN0YW1wKGludHZsX3R3b19wdHIpOyBcCisgICAgICAgIHdoaWxlKGRlbHRhX21pY3JvKGludHZsX29uZV9wdHIsaW50dmxfdHdvX3B0cikgPCBpbnRlcnZhbF91c2VjcykgeyBcCisJICBISVNUX3RpbWVzdGFtcChpbnR2bF90d29fcHRyKTsgXAorCX0gXAorCXRlbXBfaW50dmxfcHRyID0gaW50dmxfb25lX3B0cjsgXAorCWludHZsX29uZV9wdHIgPSBpbnR2bF90d29fcHRyOyBcCisJaW50dmxfdHdvX3B0ciA9IHRlbXBfaW50dmxfcHRyOyBcCisJaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsgXAorICAgICAgfQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFdBTlRfREVNTworI2lmZGVmIEhBVkVfR0VUSFJUSU1FCitzdGF0aWMgaHJ0aW1lX3QgZGVtb19vbmU7CitzdGF0aWMgaHJ0aW1lX3QgZGVtb190d287CitzdGF0aWMgaHJ0aW1lX3QgKmRlbW9fb25lX3B0ciA9ICZkZW1vX29uZTsKK3N0YXRpYyBocnRpbWVfdCAqZGVtb190d29fcHRyID0gJmRlbW9fdHdvOworc3RhdGljIGhydGltZV90ICp0ZW1wX2RlbW9fcHRyID0gJmRlbW9fb25lOworI2VsaWYgZGVmaW5lZChXSU4zMikKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIGRlbW9fb25lOworc3RhdGljIExBUkdFX0lOVEVHRVIgZGVtb190d287CitzdGF0aWMgTEFSR0VfSU5URUdFUiAqZGVtb19vbmVfcHRyID0gJmRlbW9fb25lOworc3RhdGljIExBUkdFX0lOVEVHRVIgKmRlbW9fdHdvX3B0ciA9ICZkZW1vX3R3bzsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICp0ZW1wX2RlbW9fcHRyID0gJmRlbW9fb25lOworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBkZW1vX29uZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBkZW1vX3R3bzsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCAqZGVtb19vbmVfcHRyID0gJmRlbW9fb25lOworc3RhdGljIHN0cnVjdCB0aW1ldmFsICpkZW1vX3R3b19wdHIgPSAmZGVtb190d287CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgKnRlbXBfZGVtb19wdHIgPSAmZGVtb19vbmU7CisjZW5kaWYgCisKKy8qIGZvciBhIF9TVFJFQU0gdGVzdCwgImEiIHNob3VsZCBiZSBsc3Nfc2l6ZSBhbmQgImIiIHNob3VsZCBiZQorICAgcnNyX3NpemUuIGZvciBhIF9NQUVSVFMgdGVzdCwgImEiIHNob3VsZCBiZSBsc3Jfc2l6ZSBhbmQgImIiIHNob3VsZAorICAgYmUgcnNzX3NpemUuIHJhaiAyMDA1LTA0LTA2ICovCisjZGVmaW5lIERFTU9fU1RSRUFNX1NFVFVQKGEsYikgXAorICAgIGlmICgoZGVtb19tb2RlKSAmJiAoZGVtb191bml0cyA9PSAwKSkgeyBcCisgICAgICAvKiB0YWtlIG91ciBkZWZhdWx0IHZhbHVlIG9mIGRlbW9fdW5pdHMgdG8gYmUgdGhlIGxhcmdlciBvZiBcCisJIHR3aWNlIHRoZSByZW1vdGUncyBTT19SQ1ZCVUYgb3IgdHdpY2Ugb3VyIFNPX1NOREJVRiAqLyBcCisgICAgICBpZiAoYSA+IGIpIHsgXAorCWRlbW9fdW5pdHMgPSAyKmE7IFwKKyAgICAgIH0gXAorICAgICAgZWxzZSB7IFwKKwlkZW1vX3VuaXRzID0gMipiOyBcCisgICAgICB9IFwKKyAgICB9CisKKy8qIG5vdyB0aGF0IGNhbGNfdGhydXB1dF9pbnRlcnZhbCBrbm93cyBhYm91dCB0cmFuc2FjdGlvbnMgYXMgYSBmb3JtYXQKKyAgIHdlIGNhbiBtZXJnZSBERU1PX1NUUkVBTV9JTlRFUlZBTCBhbmQgREVNT19SUl9JTlRFUlZBTCBzaW5jZSB0aGUKKyAgIGFyZSB0aGUgc2FtZSAqLworCisjZGVmaW5lIERFTU9fSU5URVJWQUwodW5pdHMpIFwKKyAgICAgIGlmIChkZW1vX21vZGUpIHsgXAorCWRvdWJsZSBhY3R1YWxfaW50ZXJ2YWw7IFwKKwl1bml0c190aGlzX3RpY2sgKz0gdW5pdHM7IFwKKwlpZiAodW5pdHNfdGhpc190aWNrID49IGRlbW9fdW5pdHMpIHsgXAorCSAgLyogdGltZSB0byBwb3NzaWJseSB1cGRhdGUgZGVtb191bml0cyBhbmQgbWF5YmUgb3V0cHV0IGFuIFwKKwkgICAgIGludGVyaW0gcmVzdWx0ICovIFwKKwkgIEhJU1RfdGltZXN0YW1wKGRlbW9fdHdvX3B0cik7IFwKKwkgIGFjdHVhbF9pbnRlcnZhbCA9IGRlbHRhX21pY3JvKGRlbW9fb25lX3B0cixkZW1vX3R3b19wdHIpOyBcCisJICAvKiB3ZSBhbHdheXMgd2FudCB0byBmaW5lLXR1bmUgZGVtb191bml0cyBoZXJlIHdoZXRoZXIgd2UgXAorCSAgICAgZW1pdCBhbiBpbnRlcmltIHJlc3VsdCBvciBub3QuICBpZiB3ZSBhcmUgc2hvcnQsIHRoaXMgXAorCSAgICAgd2lsbCBsZW5ndGhlbiBkZW1vX3VuaXRzLiAgaWYgd2UgYXJlIGxvbmcsIHRoaXMgd2lsbCBcCisJICAgICBzaG9ydGVuIGl0ICovIFwKKwkgIGRlbW9fdW5pdHMgPSBkZW1vX3VuaXRzICogKGRlbW9faW50ZXJ2YWwgLyBhY3R1YWxfaW50ZXJ2YWwpOyBcCisJICBpZiAoYWN0dWFsX2ludGVydmFsID49IGRlbW9faW50ZXJ2YWwpIHsgXAorCSAgICAvKiB0aW1lIHRvIGVtaXQgYW4gaW50ZXJpbSByZXN1bHQgKi8gXAorCSAgICBmcHJpbnRmKHdoZXJlLCBcCisJCSAgICAiSW50ZXJpbSByZXN1bHQ6ICUuMmYgJXMvcyBvdmVyICUuMmYgc2Vjb25kc1xuIiwgXAorCQkgICAgY2FsY190aHJ1cHV0X2ludGVydmFsKHVuaXRzX3RoaXNfdGljaywgXAorCQkJCQkgIGFjdHVhbF9pbnRlcnZhbC8xMDAwMDAwLjApLCBcCisJCSAgICBmb3JtYXRfdW5pdHMoKSwgXAorCQkgICAgYWN0dWFsX2ludGVydmFsLzEwMDAwMDAuMCk7IFwKKwkgICAgdW5pdHNfdGhpc190aWNrID0gMC4wOyBcCisJICAgIC8qIG5vdyBnZXQgYSBuZXcgc3RhcnRpbmcgdGltZXN0YW1wLiAgd2UgY291bGQgYmUgY2xldmVyIFwKKwkgICAgICAgYW5kIHN3YXAgcG9pbnRlcnMgLSB0aGUgbWF0aCB3ZSBkbyBwcm9iYWJseSBkb2VzIG5vdCBcCisJICAgICAgIHRha2UgYWxsIHRoYXQgbG9uZywgYnV0IGZvciBub3cgdGhpcyB3aWxsIHN1ZmZpY2UgKi8gXAorCSAgICB0ZW1wX2RlbW9fcHRyID0gZGVtb19vbmVfcHRyOyBcCisJICAgIGRlbW9fb25lX3B0ciA9IGRlbW9fdHdvX3B0cjsgXAorCSAgICBkZW1vX3R3b19wdHIgPSB0ZW1wX2RlbW9fcHRyOyBcCisJICB9IFwKKwl9IFwKKyAgICAgIH0KKworI2RlZmluZSBERU1PX1NUUkVBTV9JTlRFUlZBTCh1bml0cykgREVNT19JTlRFUlZBTCh1bml0cykKKworI2RlZmluZSBERU1PX1JSX1NFVFVQKGEpIFwKKyAgICBpZiAoKGRlbW9fbW9kZSkgJiYgKGRlbW9fdW5pdHMgPT0gMCkpIHsgXAorICAgICAgLyogdGFrZSB3aGF0ZXZlciB3ZSBhcmUgZ2l2ZW4gKi8gXAorCWRlbW9fdW5pdHMgPSBhOyBcCisgICAgfQorCisjZGVmaW5lIERFTU9fUlJfSU5URVJWQUwodW5pdHMpIERFTU9fSU5URVJWQUwodW5pdHMpCisKKyNlbmRpZiAKKworY2hhciBzb2NrZXRzX3VzYWdlW10gPSAiXG5cCitVc2FnZTogbmV0cGVyZiBbZ2xvYmFsIG9wdGlvbnNdIC0tIFt0ZXN0IG9wdGlvbnNdIFxuXAorXG5cCitUQ1AvVURQIEJTRCBTb2NrZXRzIFRlc3QgT3B0aW9uczpcblwKKyAgICAtYiBudW1iZXIgICAgICAgICBTZW5kIG51bWJlciByZXF1ZXN0cyBhdCBzdGFydCBvZiBfUlIgdGVzdHNcblwKKyAgICAtQyAgICAgICAgICAgICAgICBTZXQgVENQX0NPUksgd2hlbiBhdmFpbGFibGVcblwKKyAgICAtRCBbTF1bLFJdICAgICAgICBTZXQgVENQX05PREVMQVkgbG9jYWxseSBhbmQvb3IgcmVtb3RlbHkgKFRDUF8qKVxuXAorICAgIC1oICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyB0ZXh0XG5cCisgICAgLUggbmFtZSxmYW0gICAgICAgVXNlIG5hbWUgKG9yIElQKSBhbmQgZmFtaWx5IGFzIHRhcmdldCBvZiBkYXRhIGNvbm5lY3Rpb25cblwKKyAgICAtTCBuYW1lLGZhbSAgICAgICBVc2UgbmFtZSAob3IgSVApIGFuZCBmYW1pbHkgYXMgc291cmNlIG9mIGRhdGEgY29ubmVjdGlvblxuXAorICAgIC1tIGJ5dGVzICAgICAgICAgIFNldCB0aGUgc2VuZCBzaXplIChUQ1BfU1RSRUFNLCBVRFBfU1RSRUFNKVxuXAorICAgIC1NIGJ5dGVzICAgICAgICAgIFNldCB0aGUgcmVjdiBzaXplIChUQ1BfU1RSRUFNLCBVRFBfU1RSRUFNKVxuXAorICAgIC1uICAgICAgICAgICAgICAgIFVzZSB0aGUgY29ubmVjdGVkIHNvY2tldCBmb3IgVURQIGxvY2FsbHlcblwKKyAgICAtTiAgICAgICAgICAgICAgICBVc2UgdGhlIGNvbm5lY3RlZCBzb2NrZXQgZm9yIFVEUCByZW1vdGVseVxuXAorICAgIC1wIG1pblssbWF4XSAgICAgIFNldCB0aGUgbWluL21heCBwb3J0IG51bWJlcnMgZm9yIFRDUF9DUlIsIFRDUF9UUlJcblwKKyAgICAtUCBsb2NhbFsscmVtb3RlXSBTZXQgdGhlIGxvY2FsL3JlbW90ZSBwb3J0IGZvciB0aGUgZGF0YSBzb2NrZXRcblwKKyAgICAtciByZXEsW3JzcF0gICAgICBTZXQgcmVxdWVzdC9yZXNwb25zZSBzaXplcyAoVENQX1JSLCBVRFBfUlIpXG5cCisgICAgLXMgc2VuZFsscmVjdl0gICAgU2V0IGxvY2FsIHNvY2tldCBzZW5kL3JlY3YgYnVmZmVyIHNpemVzXG5cCisgICAgLVMgc2VuZFsscmVjdl0gICAgU2V0IHJlbW90ZSBzb2NrZXQgc2VuZC9yZWN2IGJ1ZmZlciBzaXplc1xuXAorICAgIC00ICAgICAgICAgICAgICAgIFVzZSBBRl9JTkVUIChlZyBJUHY0KSBvbiBib3RoIGVuZHMgb2YgdGhlIGRhdGEgY29ublxuXAorICAgIC02ICAgICAgICAgICAgICAgIFVzZSBBRl9JTkVUNiAoZWcgSVB2Nikgb24gYm90aCBlbmRzIG9mIHRoZSBkYXRhIGNvbm5cblwKK1xuXAorRm9yIHRob3NlIG9wdGlvbnMgdGFraW5nIHR3byBwYXJtcywgYXQgbGVhc3Qgb25lIG11c3QgYmUgc3BlY2lmaWVkO1xuXAorc3BlY2lmeWluZyBvbmUgdmFsdWUgd2l0aG91dCBhIGNvbW1hIHdpbGwgc2V0IGJvdGggcGFybXMgdG8gdGhhdFxuXAordmFsdWUsIHNwZWNpZnlpbmcgYSB2YWx1ZSB3aXRoIGEgbGVhZGluZyBjb21tYSB3aWxsIHNldCBqdXN0IHRoZSBzZWNvbmRcblwKK3Bhcm0sIGEgdmFsdWUgd2l0aCBhIHRyYWlsaW5nIGNvbW1hIHdpbGwgc2V0IGp1c3QgdGhlIGZpcnN0LiBUbyBzZXRcblwKK2VhY2ggcGFybSB0byB1bmlxdWUgdmFsdWVzLCBzcGVjaWZ5IGJvdGggYW5kIHNlcGFyYXRlIHRoZW0gd2l0aCBhXG5cCitjb21tYS5cbiI7IAorCisMCisKKy8qIHRoZXNlIHJvdXRpbmVzIGNvbnZlcnQgYmV0d2VlbiB0aGUgQUYgYWRkcmVzcyBzcGFjZSBhbmQgdGhlIE5GCisgICBhZGRyZXNzIHNwYWNlIHNpbmNlIHRoZSBudW1lcmljIHZhbHVlcyBvZiBBRl9tdW1ibGUgYXJlIG5vdCB0aGUKKyAgIHNhbWUgYWNyb3NzIHRoZSBwbGF0Zm9ybXMuIHJhaiAyMDA1LTAyLTA4ICovCisKK2ludAorbmZfdG9fYWYoaW50IG5mKSB7CisgIHN3aXRjaChuZikgeworICBjYXNlIE5GX0lORVQ6CisgICAgcmV0dXJuIEFGX0lORVQ7CisgICAgYnJlYWs7CisgIGNhc2UgTkZfVU5TUEVDOgorICAgIHJldHVybiBBRl9VTlNQRUM7CisgICAgYnJlYWs7CisgIGNhc2UgTkZfSU5FVDY6CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgICByZXR1cm4gQUZfSU5FVDY7CisjZWxzZQorICAgIHJldHVybiBBRl9VTlNQRUM7CisjZW5kaWYKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gQUZfVU5TUEVDOworICAgIGJyZWFrOworICB9Cit9CisKK2ludAorYWZfdG9fbmYoaW50IGFmKSB7CisKKyAgc3dpdGNoKGFmKSB7CisgIGNhc2UgQUZfSU5FVDoKKyAgICByZXR1cm4gTkZfSU5FVDsKKyAgICBicmVhazsKKyAgY2FzZSBBRl9VTlNQRUM6CisgICAgcmV0dXJuIE5GX1VOU1BFQzsKKyAgICBicmVhazsKKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICBjYXNlIEFGX0lORVQ2OgorICAgIHJldHVybiBORl9JTkVUNjsKKyAgICBicmVhazsKKyNlbmRpZgorICBkZWZhdWx0OgorICAgIHJldHVybiBORl9VTlNQRUM7CisgICAgYnJlYWs7CisgIH0KK30gICAgIAorCisMCisvKiB0aGVzZSByb3V0aW5lcyB3aWxsIGNvbnZlcnQgYmV0d2VlbiB0aGUgaG9zdHMnIHNvY2tldCB0eXBlcyBhbmQKKyAgIHRob3NlIG5ldHBlcmYgdXNlcy4gIHdlIG5lZWQgdGhpcyBiZWNhdXNlIGRpZmZlcmVudCBwbGF0Zm9ybXMgY2FuCisgICBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIFNPQ0tfU1RSRUFNLCBTT0NLX0RHUkFNIGFuZCB0aGUKKyAgIGxpa2UuLi4gKi8KKworaW50Cituc3RfdG9faHN0KGludCBuc3QpIHsKKyAgc3dpdGNoKG5zdCkgeworI2lmZGVmIFNPQ0tfU1RSRUFNCisgIGNhc2UgTlNUX1NUUkVBTToKKyAgICByZXR1cm4gU09DS19TVFJFQU07CisgICAgYnJlYWs7ICAvKiBvaywgdGhpcyBtYXkgbm90IGJlIG5lY2Vzc2FyeSA6KSAqLworI2VuZGlmCisjaWZkZWYgU09DS19ER1JBTQorICBjYXNlIE5TVF9ER1JBTToKKyAgICByZXR1cm4gU09DS19ER1JBTTsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFNPQ0tfRENDUAorICBjYXNlIE5TVF9EQ0NQOgorICAgIHJldHVybiBTT0NLX0RDQ1A7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gLTE7CisgIH0KK30KKworaW50Citoc3RfdG9fbnN0KGludCBoc3QpIHsKKworICBzd2l0Y2goaHN0KSB7CisjaWZkZWYgU09DS19TVFJFQU0KKyAgY2FzZSBTT0NLX1NUUkVBTToKKyAgICByZXR1cm4gTlNUX1NUUkVBTTsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFNPQ0tfREdSQU0KKyAgY2FzZSBTT0NLX0RHUkFNOgorICAgIHJldHVybiBOU1RfREdSQU07CisgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBTT0NLX0RDQ1AKKyAgY2FzZSBTT0NLX0RDQ1A6CisgICAgcmV0dXJuIE5TVF9EQ0NQOworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIE5TVF9VTktOOworICB9Cit9CitjaGFyICoKK2hzdF90b19zdHIoaW50IGhzdCkgeworCisgIHN3aXRjaChoc3QpIHsKKyNpZmRlZiBTT0NLX1NUUkVBTQorICBjYXNlIFNPQ0tfU1RSRUFNOgorICAgIHJldHVybiAiU3RyZWFtIjsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIFNPQ0tfREdSQU0KKyAgY2FzZSBTT0NLX0RHUkFNOgorICAgIHJldHVybiAiRGF0YWdyYW0iOworICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgU09DS19EQ0NQCisgIGNhc2UgU09DS19EQ0NQOgorICAgIHJldHVybiAiRENDUCI7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gIlVua25vd24iOworICB9Cit9CisKK2NoYXIgKgorcHJvdG9jb2xfdG9fc3RyKGludCBwcm90b2NvbCkgeworICBzd2l0Y2gocHJvdG9jb2wpIHsKKyNpZmRlZiBJUFBST1RPX1RDUAorICBjYXNlIElQUFJPVE9fVENQOgorICAgIHJldHVybiAiVENQIjsKKyNlbmRpZgorI2lmZGVmIElQUFJPVE9fVURQCisgIGNhc2UgSVBQUk9UT19VRFA6CisgICAgcmV0dXJuICJVRFAiOworI2VuZGlmCisjaWZkZWYgSVBQUk9UT19TQ1RQCisgIGNhc2UgSVBQUk9UT19TQ1RQOgorICAgIHJldHVybiAiU0NUUCI7CisjZW5kaWYKKyNpZmRlZiBJUFBST1RPX0RDQ1AKKyAgY2FzZSBJUFBST1RPX0RDQ1A6CisgICAgcmV0dXJuICJEQ0NQIjsKKyNlbmRpZgorI2lmZGVmIElQUFJPVE9fU0RQCisgIGNhc2UgSVBQUk9UT19TRFA6CisgICAgcmV0dXJuICJTRFAiOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgcmV0dXJuICJVbmtub3duIFByb3RvY29sIjsKKyAgfQorfQorCisMCisgLyogVGhpcyByb3V0aW5lIGlzIGludGVuZGVkIHRvIHJldHJpZXZlIGludGVyZXN0aW5nIGFzcGVjdHMgb2YgdGNwICovCisgLyogZm9yIHRoZSBkYXRhIGNvbm5lY3Rpb24uIGF0IGZpcnN0LCBpdCBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGUgKi8KKyAvKiBtYXhpbXVtIHNlZ21lbnQgc2l6ZS4gbGF0ZXIsIGl0IG1pZ2h0IGJlIG1vZGlmaWVkIHRvIHJldHJpZXZlICovCisgLyogb3RoZXIgaW5mb3JtYXRpb24sIGJ1dCBpdCBtdXN0IGJlIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlICovCisgLyogcmV0cmlldmVkIHF1aWNrbHkgYXMgaXQgaXMgY2FsbGVkIGR1cmluZyB0aGUgdGltaW5nIG9mIHRoZSB0ZXN0LiAqLworIC8qIGZvciB0aGF0IHJlYXNvbiwgYSBzZWNvbmQgcm91dGluZSBtYXkgYmUgY3JlYXRlZCB0aGF0IGNhbiBiZSAqLworIC8qIGNhbGxlZCBvdXRzaWRlIG9mIHRoZSB0aW1pbmcgbG9vcCAqLworc3RhdGljCit2b2lkCitnZXRfdGNwX2luZm8oU09DS0VUIHNvY2tldCwgaW50ICptc3MpCit7CisKKyNpZmRlZiBUQ1BfTUFYU0VHCisgIG5ldHBlcmZfc29ja2xlbl90IHNvY2tfb3B0X2xlbjsKKworICBzb2NrX29wdF9sZW4gPSBzaXplb2YobmV0cGVyZl9zb2NrbGVuX3QpOworICBpZiAoZ2V0c29ja29wdChzb2NrZXQsCisJCSBnZXRwcm90b2J5bmFtZSgidGNwIiktPnBfcHJvdG8sCQorCQkgVENQX01BWFNFRywKKwkJIChjaGFyICopbXNzLAorCQkgJnNvY2tfb3B0X2xlbikgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IGdldF90Y3BfaW5mbzogZ2V0c29ja29wdCBUQ1BfTUFYU0VHOiBlcnJubyAlZFxuIiwKKwkgICAgZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgKm1zcyA9IC0xOworICB9CisjZWxzZQorICAqbXNzID0gLTE7CisjZW5kaWYgLyogVENQX01BWFNFRyAqLworfQorDAorCisvKiByZXR1cm4gYSBwb2ludGVyIHRvIGEgY29tcGxldGVkIGFkZHJpbmZvIGNoYWluIC0gcHJlZmVyCisgICBkYXRhX2FkZHJlc3MgdG8gY29udHJvbGhvc3QgYW5kIHV0aWxpemUgdGhlIHNwZWNpZmllZCBhZGRyZXNzCisgICBmYW1pbHkgKi8KKworc3RydWN0IGFkZHJpbmZvICoKK2NvbXBsZXRlX2FkZHJpbmZvKGNoYXIgKmNvbnRyb2xob3N0LCBjaGFyICpkYXRhX2FkZHJlc3MsIGNoYXIgKnBvcnQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wsIGludCBmbGFncykgCit7CisgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKKyAgc3RydWN0IGFkZHJpbmZvICpyZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAqdGVtcF9yZXM7CisKKyNkZWZpbmUgQ0hBTkdFRF9TT0NLX1RZUEUgIDB4MQorI2RlZmluZSBDSEFOR0VEX1BST1RPQ09MICAgMHgyCisjZGVmaW5lIENIQU5HRURfU0NUUCAgICAgICAweDQKKyNkZWZpbmUgQ0hBTkdFRF9EQ0NQICAgICAgIDB4OAorI2RlZmluZSBDSEFOR0VEX0RDQ1BfU09DSyAgMHgxMAorCisgIGludCAgICBjaGFuZ2VfaW5mbyA9IDA7CisgIHN0YXRpYyBpbnQgY2hhbmdlX3dhcm5pbmdfZGlzcGxheWVkID0gMDsKKworICBpbnQgY291bnQgPSAwOworICBpbnQgZXJyb3IgPSAwOworCisgIGNoYXIgKmhvc3RuYW1lOworCisgIC8qIHRha2UgZGF0YS1hZGRyZXNzIG92ZXIgY29udHJvbGhvc3QgKi8KKyAgaWYgKGRhdGFfYWRkcmVzcykKKyAgICBob3N0bmFtZSA9IGRhdGFfYWRkcmVzczsKKyAgZWxzZQorICAgIGhvc3RuYW1lID0gY29udHJvbGhvc3Q7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgImNvbXBsZXRlX2FkZHJpbmZvIHVzaW5nIGhvc3RuYW1lICVzIHBvcnQgJXMgZmFtaWx5ICVzIHR5cGUgJXMgcHJvdCAlcyBmbGFncyAweCV4XG4iLAorCSAgICBob3N0bmFtZSwKKwkgICAgcG9ydCwKKwkgICAgaW5ldF9mdG9zKGZhbWlseSksCisJICAgIGluZXRfdHRvcyh0eXBlKSwKKwkgICAgaW5ldF9wdG9zKHByb3RvY29sKSwKKwkgICAgZmxhZ3MpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKyAgaGludHMuYWlfZmFtaWx5ID0gZmFtaWx5OworICBoaW50cy5haV9zb2NrdHlwZSA9IHR5cGU7CisgIGhpbnRzLmFpX3Byb3RvY29sID0gcHJvdG9jb2w7CisgIGhpbnRzLmFpX2ZsYWdzID0gZmxhZ3N8QUlfQ0FOT05OQU1FOworCisgIGNvdW50ID0gMDsKKyAgZG8geworICAgIGVycm9yID0gZ2V0YWRkcmluZm8oKGNoYXIgKilob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZoaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICZyZXMpOworICAgIGNvdW50ICs9IDE7CisgICAgaWYgKGVycm9yID09IEVBSV9BR0FJTikgeworICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgIGZwcmludGYod2hlcmUsIlNsZWVwaW5nIG9uIGdldGFkZHJpbmZvIEVBSV9BR0FJTlxuIik7CisgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBzbGVlcCgxKTsKKyAgICB9CisgICAgLyogd2hpbGUgeW91IHNlZSB0aGlzIGtsdWRnZSBmaXJzdCwgaXQgaXMgYWN0dWFsbHkgdGhlIHNlY29uZCwgdGhlCisgICAgICAgZmlyc3QgYmVpbmcgdGhlIG9uZSBmb3IgU29sYXJpcyBiZWxvdy4gVGhlIG5lZWQgZm9yIHRoaXMga2x1ZGdlCisgICAgICAgY2FtZSBhZnRlciBpbXBsZW1lbnRpbmcgdGhlIFNvbGFyaXMgYnJva2VuIGdldGFkZHJpbmZvIGtsdWRnZSAtCisgICAgICAgbm93IHdlIHNlZSBhIGtsdWRnZSBpbiBMaW51eCBnZXRhZGRyaW5mbyB3aGVyZSBpZiBpdCBpcyBnaXZlbgorICAgICAgIFNPQ0tfU1RSRUFNIGFuZCBJUFBST1RPX1NDVFAgaXQgYmFyZnMgd2l0aCBhIC03CisgICAgICAgRUFJX1NPQ0tUWVBFLiBzbywgd2UgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBFQUlfU09DS1RZUEUgYW5kIGlmCisgICAgICAgd2Ugd2VyZSBhc2tpbmcgZm9yIElQUFJPVE9fU0NUUCBhbmQgaWYgc28sIGtsdWRnZSwgYWdhaW4uLi4gcmFqCisgICAgICAgMjAwPy0xMC0xMyBhbmQgb2YgY291cnNlLCByZXF1aXJpbmcgdGhlIGtsdWRnZSBmb3IgU0NUUCwgaXQgaXMKKyAgICAgICBubyBzdXJwcmlzZSB0aGF0IGxpbnV4IG5lZWRzIGEga2x1ZGdlIGZvciBEQ0NQLi4uYWN0dWFsbHkgbm90CisgICAgICAgb25seSBkb2VzIGl0IG5lZWQgdGhlIGFpX3Byb3RvY29sIGtsdWRnZSwgaXQgbmVlZHMgYW4KKyAgICAgICBhaV9zb2NrdHlwZSBrbHVkZ2UgdG9vLi4uIHNpZ2ggcmFqIDIwMDgtMDItMDEgKi8KKyNpZiBkZWZpbmVkKElQUFJPVE9fU0NUUCkgfHwgZGVmaW5lZCAoSVBQUk9UT19EQ0NQKQorICAgIGlmIChFQUlfU09DS1RZUEUgPT0gZXJyb3IKKyNpZmRlZiBFQUlfQkFESElOVFMKKyAgICAgICAgfHwgRUFJX0JBREhJTlRTID09IGVycm9yCisjZW5kaWYKKyAgICAgICAgKSB7CisgICAgICAvKiB3ZSBhc3MtdS1tZSB0aGlzIGlzIHRoZSBMaW51eCBnZXRhZGRyaW5mbyBidWcsIGNsZWFyIHRoZQorCSBoaW50cy5haV9wcm90b2NvbCBmaWVsZCwgYW5kIHNldCBzb21lIHN0YXRlICJyZW1lbWJlcmluZyIKKwkgdGhhdCB3ZSBkaWQgdGhpcyBzbyB0aGUgY29kZSBmb3IgdGhlIFNvbGFyaXMga2x1ZGdlIGNhbiBkbworCSB0aGUgZml4LXVwIGZvciB1cy4gIGFsc28gZmxpcCBlcnJvciBvdmVyIHRvIEVBSV9BR0FJTiBhbmQKKwkgbWFrZSBzdXJlIHdlIGRvbid0ICJjb3VudCIgdGhpcyB0aW1lIGFyb3VuZCB0aGUgbG9vcC4gKi8KKyNpZiBkZWZpbmVkKElQUFJPVE9fRENDUCkKKyAgICAgIC8qIG9ubHkgdHdlYWsgb24gdGhpcyBvbmUgdGhlIHNlY29uZCB0aW1lIGFyb3VuZCwgYWZ0ZXIgd2UndmUKKwkga2x1ZGdlZCB0aGUgYWlfcHJvdG9jb2wgZmllbGQgKi8KKyAgICAgIGlmICgoaGludHMuYWlfc29ja3R5cGUgPT0gU09DS19EQ0NQKSAmJgorCSAgKGhpbnRzLmFpX3Byb3RvY29sID09IDApKSB7CisJY2hhbmdlX2luZm8gfD0gQ0hBTkdFRF9EQ0NQX1NPQ0s7CisJaGludHMuYWlfc29ja3R5cGUgPSAwOworCS8qIHdlIG5lZWQgdG8gZ2l2ZSBpdCBzb21lIHNvcnQgb2YgSVBQUk9UTyBvciBpdCBnZXRzIHVuaGFwcHksCisJICAgc28gZm9yIG5vdywgcGljayBvbmUgZnJvbSBkZWVwIHdpdGhpbiB0aGUgY29sb24gYW5kIHVzZQorCSAgIElQUFJPVE9fVENQICovCisJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKyAgICAgIH0KKworICAgICAgaWYgKGhpbnRzLmFpX3Byb3RvY29sID09IElQUFJPVE9fRENDUCkgeworCWNoYW5nZV9pbmZvIHw9IENIQU5HRURfRENDUDsKKwloaW50cy5haV9wcm90b2NvbCA9IDA7CisgICAgICB9CisKKyNlbmRpZgorI2lmIGRlZmluZWQoSVBQUk9UT19TQ1RQKQorICAgICAgaWYgKGhpbnRzLmFpX3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgeworCWNoYW5nZV9pbmZvIHw9IENIQU5HRURfU0NUUDsKKwloaW50cy5haV9wcm90b2NvbCA9IDA7CisgICAgICB9CisjZW5kaWYKKworICAgICAgZXJyb3IgPSBFQUlfQUdBSU47CisgICAgICBjb3VudCAtPSAxOworICAgIH0KKyNlbmRpZgorICB9IHdoaWxlICgoZXJyb3IgPT0gRUFJX0FHQUlOKSAmJiAoY291bnQgPD0gNSkpOworCisgIGlmIChlcnJvcikgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJjb21wbGV0ZV9hZGRyaW5mbzogY291bGQgbm90IHJlc29sdmUgJyVzJyBwb3J0ICclcycgYWYgJWQiLAorCSAgICBob3N0bmFtZSwKKwkgICAgcG9ydCwKKwkgICAgZmFtaWx5KTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiXG5cdGdldGFkZHJpbmZvIHJldHVybmVkICVkICVzXG4iLAorCSAgICBlcnJvciwKKwkgICAgZ2FpX3N0cmVycm9yKGVycm9yKSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KC0xKTsKKyAgfQorCisgIC8qIHRoZXJlIGV4aXN0cyBhdCBsZWFzdCBvbmUgcGxhdGZvcm0gLSBTb2xhcmlzIDEwIC0gdGhhdCBkb2VzIG5vdAorICAgICBzZWVtIHRvIGNvbXBsZXRlbHkgaG9ub3IgdGhlIGFpX3Byb3RvY29sIGFuZC9vciBhaV9zb2NrdHlwZSBvbmUKKyAgICAgc2V0cyBpbiB0aGUgaGludHMgcGFybSB0byB0aGUgZ2V0YWRkcmluZm8gY2FsbC4gIHNvLCB3ZSBuZWVkIHRvCisgICAgIHdhbGsgdGhlIGxpc3Qgb2YgZW50cmllcyByZXR1cm5lZCBhbmQgaWYgZWl0aGVyIG9mIHRob3NlIGRvIG5vdAorICAgICBtYXRjaCB3aGF0IHdlIGFza2VkIGZvciwgd2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgc2V0IHRoZW0KKyAgICAgImNvcnJlY3RseSIgdGhpcyBpcyBiYXNlZCBpbiBwYXJ0IG9uIHNvbWUgZWFybGllciBTQ1RQLW9ubHkgY29kZQorICAgICBmcm9tIHByZXZpb3VzIHJldmlzaW9ucy4gIHJhaiAyMDA2LTEwLTA5ICovCisKKyAgdGVtcF9yZXMgPSByZXM7CisKKyAgd2hpbGUgKHRlbXBfcmVzKSB7CisKKyAgICBpZiAoKHR5cGUpICAmJgorCSh0ZW1wX3Jlcy0+YWlfc29ja3R5cGUgIT0gdHlwZSkpIHsKKyAgICAgIGNoYW5nZV9pbmZvIHw9IENIQU5HRURfU09DS19UWVBFOworICAgICAgaWYgKGRlYnVnKSB7CisJZnByaW50Zih3aGVyZSwKKwkJIldBUk5JTkchIENoYW5nZWQgYm9ndXMgZ2V0YWRkcmluZm8gc29ja2V0IHR5cGUgJWQgdG8gJWRcbiIsCisJCXRlbXBfcmVzLT5haV9zb2NrdHlwZSwKKwkJdHlwZSk7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIHRlbXBfcmVzLT5haV9zb2NrdHlwZSA9IHR5cGU7CisgICAgfQorCisgICAgaWYgKChwcm90b2NvbCkgJiYKKwkodGVtcF9yZXMtPmFpX3Byb3RvY29sICE9IHByb3RvY29sKSkgeworICAgICAgY2hhbmdlX2luZm8gfD0gQ0hBTkdFRF9QUk9UT0NPTDsKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsCisJCSJXQVJOSU5HISBDaGFuZ2VkIGJvZ3VzIGdldGFkZHJpbmZvIHByb3RvY29sICVkIHRvICVkXG4iLAorCQl0ZW1wX3Jlcy0+YWlfcHJvdG9jb2wsCisJCXByb3RvY29sKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgdGVtcF9yZXMtPmFpX3Byb3RvY29sID0gcHJvdG9jb2w7CisgICAgfQorICAgIHRlbXBfcmVzID0gdGVtcF9yZXMtPmFpX25leHQ7CisgIH0KKwkKKyAgaWYgKChjaGFuZ2VfaW5mbyAmIENIQU5HRURfU09DS19UWVBFKSAmJgorICAgICAgIShjaGFuZ2Vfd2FybmluZ19kaXNwbGF5ZWQgJiBDSEFOR0VEX1NPQ0tfVFlQRSkpIHsKKyAgICBjaGFuZ2Vfd2FybmluZ19kaXNwbGF5ZWQgfD0gQ0hBTkdFRF9TT0NLX1RZUEU7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIldBUk5JTkchIGdldGFkZHJpbmZvIHJldHVybmVkIGEgc29ja2V0IHR5cGUgd2hpY2ggZGlkIG5vdFxuIik7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm1hdGNoIHRoZSByZXF1ZXN0ZWQgdHlwZS4gIFBsZWFzZSBjb250YWN0IHlvdXIgdmVuZG9yIGZvclxuIik7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgImEgZml4IHRvIHRoaXMgYnVnIGluIGdldGFkZHJpbmZvKClcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBpZiB3ZSBkcm9wcGVkIHRoZSBwcm90b2NvbCBoaW50LCBpdCB3b3VsZCBiZSBmb3IgYSBwcm90b2NvbCB0aGF0CisgICAgIGdldGFkZHJpbmZvKCkgd2Fzbid0IHN1cHBvcnRpbmcgeWV0LCBub3QgZm9yIHRoZSBidWcgdGhhdCBpdCB0b29rCisgICAgIG91ciBoaW50IGFuZCBzdGlsbCByZXR1cm5lZCB6ZXJvLiByYWogMjAwNi0xMC0xNiAqLworICAvKiBhcyB0aGVyZSBpcyBub3cgYW4gb3BlbiBidWcgYWdhaW5zdCAoT3BlbilTb2xhcmlzIChpZCA2ODQ3NzMzKSBvbgorICAgICB0aGlzIGJlaGF2aW91ciB3ZSB3aWxsIG9ubHkgZW1pdCB0aGlzIHdhcm5pbmcgaWYgZGVidWcgaXMgc2V0CisgICAgIHVuZGVyIFNvbGFyaXMgYW5kIHdpbGwgY29udGludWUgdG8gZW1pdCBpdCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlCisgICAgIG9uIG90aGVyIHBsYXRmb3JtcyBzaG91bGQgaXQgYXJpc2UuIHJhaiAyMDA5LTA2LTAzICovCisgIGlmICgoY2hhbmdlX2luZm8gJiBDSEFOR0VEX1BST1RPQ09MKSAmJgorICAgICAgIShjaGFuZ2Vfd2FybmluZ19kaXNwbGF5ZWQgJiBDSEFOR0VEX1BST1RPQ09MKSAmJgorI2lmZGVmIF9fc3VuCisgICAgICAoZGVidWcpICYmCisjZW5kaWYKKyAgICAgIChoaW50cy5haV9wcm90b2NvbCAhPSAwKSkgeworICAgIGNoYW5nZV93YXJuaW5nX2Rpc3BsYXllZCB8PSBDSEFOR0VEX1BST1RPQ09MOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJXQVJOSU5HISBnZXRhZGRyaW5mbyByZXR1cm5lZCBhIHByb3RvY29sIG90aGVyIHRoYW4gdGhlXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVxdWVzdGVkIHByb3RvY29sLiAgUGxlYXNlIGNvbnRhY3QgeW91ciB2ZW5kb3IgZm9yXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiYSBmaXggdG8gdGhpcyBidWcgaW4gZ2V0YWRkcmluZm8oKVxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIGlmICgoY2hhbmdlX2luZm8gJiBDSEFOR0VEX1NDVFApICYmCisgICAgICAhKGNoYW5nZV93YXJuaW5nX2Rpc3BsYXllZCAmIENIQU5HRURfU0NUUCkpIHsKKyAgICBjaGFuZ2Vfd2FybmluZ19kaXNwbGF5ZWQgfD0gQ0hBTkdFRF9TQ1RQOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJXQVJOSU5HISBnZXRhZGRyaW5mbyBvbiB0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGFjY2VwdCBJUFBST1RPX1NDVFAhXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiUGxlYXNlIGNvbnRhY3QgeW91ciB2ZW5kb3IgZm9yIGEgZml4IHRvIHRoaXMgYnVnIGluIGdldGFkZHJpbmZvKCkuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKChjaGFuZ2VfaW5mbyAmIENIQU5HRURfRENDUCkgJiYKKyAgICAgICEoY2hhbmdlX3dhcm5pbmdfZGlzcGxheWVkICYgQ0hBTkdFRF9EQ0NQKSkgeworICAgIGNoYW5nZV93YXJuaW5nX2Rpc3BsYXllZCB8PSBDSEFOR0VEX0RDQ1A7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIldBUk5JTkchIGdldGFkZHJpbmZvIG9uIHRoaXMgcGxhdGZvcm0gZG9lcyBub3QgYWNjZXB0IElQUFJPVE9fRENDUCFcbiIpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJQbGVhc2UgY29udGFjdCB5b3VyIHZlbmRvciBmb3IgYSBmaXggdG8gdGhpcyBidWcgaW4gZ2V0YWRkcmluZm8oKS5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworCisgIGlmIChkZWJ1ZykgeworICAgIGR1bXBfYWRkcmluZm8od2hlcmUsIHJlcywgaG9zdG5hbWUsIHBvcnQsIGZhbWlseSk7CisgIH0KKworICByZXR1cm4ocmVzKTsKK30KKwordm9pZAorY29tcGxldGVfYWRkcmluZm9zKHN0cnVjdCBhZGRyaW5mbyAqKnJlbW90ZSxzdHJ1Y3QgYWRkcmluZm8gKipsb2NhbCwgY2hhciByZW1vdGVfaG9zdFtdLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQgZmxhZ3MpIHsKKworICAqcmVtb3RlID0gY29tcGxldGVfYWRkcmluZm8ocmVtb3RlX2hvc3QsCisJCQkgICAgICByZW1vdGVfZGF0YV9hZGRyZXNzLAorCQkJICAgICAgcmVtb3RlX2RhdGFfcG9ydCwKKwkJCSAgICAgIHJlbW90ZV9kYXRhX2ZhbWlseSwKKwkJCSAgICAgIHR5cGUsCisJCQkgICAgICBwcm90b2NvbCwKKwkJCSAgICAgIGZsYWdzKTsKKworICAvKiBPSywgaWYgdGhlIHVzZXIgaGFzIG5vdCBzcGVjaWZpZWQgYSBsb2NhbCBkYXRhIGVuZHBvaW50IGFkZHJlc3MKKyAgICAgKHRlc3Qtc3BlY2lmaWMgLUwpLCBwaWNrIHRoZSBsb2NhbCBkYXRhIGVuZHBvaW50IGFkZHJlc3MgYmFzZWQgb24KKyAgICAgdGhlIHJlbW90ZSBkYXRhIGZhbWlseSBpbmZvICh0ZXN0LXNwZWNpZmljIC1IIG9yIC00IG9yIC02CisgICAgIG9wdGlvbikuICBpZiB0aGUgdXNlciBoYXMgbm90IHNwZWNpZmllZCByZW1vdGUgZGF0YSBhZGRyZXNzaW5nCisgICAgIGluZm8gKHRlc3Qtc3BlY2lmaWMgLUgsIC00IC02KSBwaWNrIHNvbWV0aGluZyBiYXNlZCBvbiB0aGUgbG9jYWwKKyAgICAgY29udHJvbCBjb25uZWN0aW9uIGFkZHJlc3MgKGllIHRoZSBnbG9iYWwgLUwgb3B0aW9uKS4gKi8KKworICBpZiAoTlVMTCA9PSBsb2NhbF9kYXRhX2FkZHJlc3MpIHsKKyAgICBsb2NhbF9kYXRhX2FkZHJlc3MgPSBtYWxsb2MoSE9TVE5BTUVTSVpFKTsKKyAgICBpZiAoTlVMTCA9PSByZW1vdGVfZGF0YV9hZGRyZXNzKSB7CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQkibG9jYWxfZGF0YV9hZGRyZXNzIG5vdCBzZXQsIHVzaW5nIGxvY2FsX2hvc3RfbmFtZSBvZiAnJXMnXG4iLAorCQlsb2NhbF9ob3N0X25hbWUpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBzdHJjcHkobG9jYWxfZGF0YV9hZGRyZXNzLGxvY2FsX2hvc3RfbmFtZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKGRlYnVnKSB7CisJZnByaW50Zih3aGVyZSwKKwkJImxvY2FsX2RhdGFfYWRkcmVzcyBub3Qgc2V0LCB1c2luZyBhZGRyZXNzIGZhbWlseSBpbmZvXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgLyogYnkgZGVmYXVsdCwgdXNlIDAuMC4wLjAgLSBhc3N1bWUgSVB2NCAqLworICAgICAgc3RyY3B5KGxvY2FsX2RhdGFfYWRkcmVzcywiMC4wLjAuMCIpOworI2lmIGRlZmluZWQoQUZfSU5FVDYpCisgICAgICBpZiAoKEFGX0lORVQ2ID09IGxvY2FsX2RhdGFfZmFtaWx5KSB8fAorCSAgKChBRl9VTlNQRUMgPT0gbG9jYWxfZGF0YV9mYW1pbHkpICYmCisJICAgKEFGX0lORVQ2ID09IHJlbW90ZV9kYXRhX2ZhbWlseSkpIHx8CisJICAoKEFGX1VOU1BFQyA9PSBsb2NhbF9kYXRhX2ZhbWlseSkgJiYgCisJICAgKEFGX0lORVQ2ID09ICgqcmVtb3RlKS0+YWlfZmFtaWx5KSkpIHsKKwlzdHJjcHkobG9jYWxfZGF0YV9hZGRyZXNzLCI6OjAiKTsKKyAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgfQorCisgICpsb2NhbCA9IGNvbXBsZXRlX2FkZHJpbmZvKCJ3aGF0IHRvIHB1dCBoZXJlPyIsCisJCQkgICAgIGxvY2FsX2RhdGFfYWRkcmVzcywKKwkJCSAgICAgbG9jYWxfZGF0YV9wb3J0LAorCQkJICAgICBsb2NhbF9kYXRhX2ZhbWlseSwKKwkJCSAgICAgdHlwZSwKKwkJCSAgICAgcHJvdG9jb2wsCisJCQkgICAgIGZsYWdzfEFJX1BBU1NJVkUpOworCisgIC8qIE9LLCBhdCB0aGlzIHBvaW50LCBpZiByZW1vdGVfZGF0YV9hZGRyZXNzIGlzIE5VTEwsIHdlIGtub3cgdGhhdAorICAgICB3ZSB1c2VkIHRoZSB2YWx1ZSBvZiByZW1vdGVfaG9zdCAodGhlIGNvbnRyb2wgY29ubmVjdGlvbikgZm9yIHRoZQorICAgICByZW1vdGUsIHdoaWNoIG1lYW5zIHdlIGNhbi9zaG91bGQgc2V0IHJlbW90ZV9kYXRhX2FkZHJlc3MgdG8KKyAgICAgcmVtb3RlX2hvc3Qgc28gdGhlICJvbW5pIiBvdXRwdXQgcm91dGluZXMgY2FuIHVzZSB0aGF0IGdsb2JhbAorICAgICB2YXJpYWJsZS4gYXQgbGVhc3QgaSB0aGluayBJIGNhbiBnZXQgYXdheSB3aXRoIHRoYXQgOikgSSdtIHN1cmUKKyAgICAgdGhhdCBhdCBzb21lIHBvaW50IEknbGwgZmluZC1vdXQgdGhhdCBJIG5lZWQgdG8gYWxsb2NhdGUKKyAgICAgc29tZXRoaW5nIGZvciBpdCByYXRoZXIgdGhhbiBtZXNzIHdpdGggdGhlIHBvaW50ZXJzLCBidXQgdGhhdCBjYW4KKyAgICAgd2FpdC4gIGZhbW91cyBsYXN0IHdvcmRzIG9mIHJhaiAyMDA4LTAxLTI1ICovCisgIGlmIChyZW1vdGVfZGF0YV9hZGRyZXNzID09IE5VTEwpCisgICAgcmVtb3RlX2RhdGFfYWRkcmVzcyA9IHJlbW90ZV9ob3N0OworfQorCit2b2lkCitzZXRfaG9zdG5hbWVfYW5kX3BvcnQoY2hhciAqaG9zdG5hbWUsIGNoYXIgKnBvcnRzdHIsIGludCBmYW1pbHksIGludCBwb3J0KQoreworICBzdHJjcHkoaG9zdG5hbWUsIjAuMC4wLjAiKTsKKyNpZiBkZWZpbmVkIEFGX0lORVQ2CisgIGlmIChBRl9JTkVUNiA9PSBmYW1pbHkpIHsKKyAgICBzdHJjcHkoaG9zdG5hbWUsIjo6MCIpOworICB9CisjZW5kaWYKKyAgICAKKyAgc3ByaW50Zihwb3J0c3RyLCAiJXUiLCBwb3J0KTsKKworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQKK2dldF9wb3J0X251bWJlcihzdHJ1Y3QgYWRkcmluZm8gKnJlcykgCit7Cisgc3dpdGNoKHJlcy0+YWlfZmFtaWx5KSB7CisgIGNhc2UgQUZfSU5FVDogeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqZm9vID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJlcy0+YWlfYWRkcjsKKyAgICByZXR1cm4obnRvaHMoZm9vLT5zaW5fcG9ydCkpOworICAgIGJyZWFrOworICB9CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgY2FzZSBBRl9JTkVUNjogeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmZvbyA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVzLT5haV9hZGRyOworICAgIHJldHVybihudG9ocyhmb28tPnNpbjZfcG9ydCkpOworICAgIGJyZWFrOworICB9CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiR2l2ZW4gVW5leHBlY3RlZCBBZGRyZXNzIEZhbWlseSBvZiAldVxuIixyZXMtPmFpX2ZhbWlseSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KC0xKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZXh0cmFjdF9pbmV0X2FkZHJlc3NfYW5kX3BvcnQoc3RydWN0IGFkZHJpbmZvICpyZXMsIHZvaWQgKmFkZHIsIGludCBsZW4sIGludCAqcG9ydCkKK3sKKyBzd2l0Y2gocmVzLT5haV9mYW1pbHkpIHsKKyAgY2FzZSBBRl9JTkVUOiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luICpmb28gPSAoc3RydWN0IHNvY2thZGRyX2luICopcmVzLT5haV9hZGRyOworICAgICpwb3J0ID0gZm9vLT5zaW5fcG9ydDsKKyAgICBtZW1jcHkoYWRkciwmKGZvby0+c2luX2FkZHIpLG1pbihsZW4sc2l6ZW9mKGZvby0+c2luX2FkZHIpKSk7CisgICAgYnJlYWs7CisgIH0KKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICBjYXNlIEFGX0lORVQ2OiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiAqZm9vID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHI7CisgICAgKnBvcnQgPSBmb28tPnNpbjZfcG9ydDsKKyAgICBtZW1jcHkoYWRkciwmKGZvby0+c2luNl9hZGRyKSxtaW4obGVuLHNpemVvZihmb28tPnNpbjZfYWRkcikpKTsKKyAgICBicmVhazsKKyAgfQorI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgKnBvcnQgPSAweERFQURCRUVGOworICAgIHN0cm5jcHkoYWRkciwiVU5LTiBGQU1JTFkiLGxlbik7CisgIH0KK30KKworLyogdGhpcyByb3V0aW5lIHdpbGwgc2V0IHRoZSBwb3J0IG51bWJlciBvZiB0aGUgc29ja2FkZHIgaW4gdGhlCisgICBhZGRyaW5mbyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLCBiYXNlZCBvbiB0aGUgYWRkcmVzcyBmYW1pbHkgKi8KK3ZvaWQKK3NldF9wb3J0X251bWJlcihzdHJ1Y3QgYWRkcmluZm8gKnJlcywgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3sKKyAgc3dpdGNoKHJlcy0+YWlfZmFtaWx5KSB7CisgIGNhc2UgQUZfSU5FVDogeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqZm9vID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJlcy0+YWlfYWRkcjsKKyAgICBmb28tPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgYnJlYWs7CisgIH0KKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICBjYXNlIEFGX0lORVQ2OiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiAqZm9vID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHI7CisgICAgZm9vLT5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICBicmVhazsKKyAgfQorI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInNldF9wb3J0X251bWJlciBVbmV4cGVjdGVkIEFkZHJlc3MgRmFtaWx5IG9mICV1XG4iLHJlcy0+YWlfZmFtaWx5KTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoLTEpOworICB9Cit9CisKKy8qIHN0dWZmIHRoZSBhZGRyZXNzIGZhbWlseSwgcG9ydCBudW1iZXIgYW5kIGFkZHJlc3MgaW50byBhCisgICBzb2NrYWRkci4gZm9yIG5vdywgd2Ugd2lsbCBnbyBhaGVhZCBhbmQgemVyby1vdXQgdGhlIHNvY2thZGRyCisgICBmaXJzdCAqLwordm9pZAorc2V0X3NvY2thZGRyX2ZhbWlseV9hZGRyX3BvcnQoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNvY2thZGRyLCBpbnQgZmFtaWx5LCB2b2lkICphZGRyLCBpbnQgcG9ydCkgeworICAKKyAgbWVtc2V0KHNvY2thZGRyLDAsc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSk7CisKKyAgc3dpdGNoIChmYW1pbHkpIHsKKyAgY2FzZSBBRl9JTkVUOiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luICpmb28gPSAoc3RydWN0IHNvY2thZGRyX2luICopc29ja2FkZHI7CisgICAgZm9vLT5zaW5fcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCkgcG9ydCk7CisgICAgZm9vLT5zaW5fZmFtaWx5ID0gKHVuc2lnbmVkIHNob3J0KSBmYW1pbHk7CisgICAgbWVtY3B5KCYoZm9vLT5zaW5fYWRkciksYWRkcixzaXplb2YoZm9vLT5zaW5fYWRkcikpOworICAgICooaW50ICopYWRkciA9IGh0b25sKCooaW50ICopYWRkcik7CisgICAgYnJlYWs7CisgIH0KKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICBjYXNlIEFGX0lORVQ2OiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiAqZm9vID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzb2NrYWRkcjsKKyAgICBpbnQgKmJhcjsKKyAgICBpbnQgaTsKKyAgICBmb28tPnNpbjZfcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCkgcG9ydCk7CisgICAgZm9vLT5zaW42X2ZhbWlseSA9ICh1bnNpZ25lZCBzaG9ydCkgZmFtaWx5OworICAgIG1lbWNweSgmKGZvby0+c2luNl9hZGRyKSxhZGRyLHNpemVvZihmb28tPnNpbjZfYWRkcikpOworICAgIC8qIGhvdyB0byBwdXQgdGhpcyBpbnRvICJob3N0IiBvcmRlcj8gKi8KKyAgICBmb3IgKGkgPSBzaXplb2YoZm9vLT5zaW42X2FkZHIpL3NpemVvZihpbnQpLCBiYXI9YWRkcjsgaSA+IDA7IGktLSkgeworICAgICAgYmFyW2ldID0gaHRvbmwoYmFyW2ldKTsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKyNlbmRpZgorICBkZWZhdWx0OgorICAgIGZwcmludGYod2hlcmUsCisJICAgICJzZXRfc29ja2FkZHJfZmFtaWx5X2FkZHJfcG9ydCBVbmV4cGVjdGVkIEFkZHJlc3MgRmFtaWx5IG9mICV1XG4iLGZhbWlseSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KC0xKTsKKyAgfQorfQorCisvKiBwdWxsIHRoZSBwb3J0IGFuZCBhZGRyZXNzIG91dCBvZiB0aGUgc29ja2FkZHIgaW4gaG9zdCBmb3JtYXQgKi8KK2ludAorZ2V0X3NvY2thZGRyX2ZhbWlseV9hZGRyX3BvcnQoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNvY2thZGRyLCBpbnQgZmFtaWx5LCB2b2lkICphZGRyLCBpbnQgKnBvcnQpCit7CisgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNvY2thZGRyOworCisgIGludCByZXQgPSAwOworICBpZiAoc2luLT5zaW5fZmFtaWx5ICE9IGZhbWlseSkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJnZXRfc29ja2FkZHJfZmFtaWx5X2FkZHJfcG9ydCBmYW1pbHkgbWlzbWF0Y2ggJWQgdnMgJWRcbiIsCisJICAgIHNpbi0+c2luX2ZhbWlseSwKKwkgICAgZmFtaWx5KTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHN3aXRjaChmYW1pbHkpIHsKKyAgY2FzZSAgQUZfSU5FVDogeworICAgICpwb3J0ID0gbnRvaHMoc2luLT5zaW5fcG9ydCk7CisgICAgbWVtY3B5KGFkZHIsJihzaW4tPnNpbl9hZGRyKSxzaXplb2Yoc2luLT5zaW5fYWRkcikpOworICAgIGlmICgqKGludCAqKWFkZHIgPT0gSU5BRERSX0FOWSkgcmV0ID0gMTsKKyAgICAqKGludCAqKWFkZHIgPSBudG9obCgqKGludCAqKWFkZHIpOworICAgIGJyZWFrOworICB9CisjaWZkZWYgQUZfSU5FVDYKKyAgY2FzZSBBRl9JTkVUNjogeworICAgIGludCAqZm9vOworICAgIGludCBpOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNvY2thZGRyOworICAgIHJldCA9IDA7CisgICAgKnBvcnQgPSBudG9ocyhzaW42LT5zaW42X3BvcnQpOworICAgIG1lbWNweShhZGRyLCYoc2luNi0+c2luNl9hZGRyKSwgc2l6ZW9mKHNpbjYtPnNpbjZfYWRkcikpOworICAgIC8qIGhvdyB0byBwdXQgdGhpcyBpbnRvICJob3N0IiBvcmRlcj8gKi8KKyAgICBmb3IgKGkgPSBzaXplb2Yoc2luNi0+c2luNl9hZGRyKS9zaXplb2YoaW50KSwgZm9vPWFkZHI7IGkgPiAwOyBpLS0pIHsKKyAgICAgIGlmIChmb29baV0gIT0gMCkgcmV0ID0gMTsKKyAgICAgIGZvb1tpXSA9IG50b2hsKGZvb1tpXSk7CisgICAgfQorICAgIGJyZWFrOworICB9CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiZ2V0X3NvY2thZGRyX2ZhbWlseV9hZGRyX3BvcnQ6IFVuZXhwZWN0ZWQgQWRkcmVzcyBGYW1pbHkgb2YgJXVcbiIsZmFtaWx5KTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoLTEpOworICB9CisgIHJldHVybiByZXQ7Cit9CisMCisKKyAvKiBUaGlzIHJvdXRpbmUgd2lsbCBjcmVhdGUgYSBkYXRhIChsaXN0ZW4pIHNvY2tldCB3aXRoIHRoZQorICBhcHJvcHJpYXRlIG9wdGlvbnMgc2V0IGFuZCByZXR1cm4gaXQgdG8gdGhlIGNhbGxlci4gdGhpcyByZXBsYWNlcworICBhbGwgdGhlIGR1cGxpY2F0ZSBjb2RlIGluIGVhY2ggb2YgdGhlIHRlc3Qgcm91dGluZXMgYW5kIHNob3VsZCBoZWxwCisgIG1ha2UgdGhpbmdzIGEgbGl0dGxlIGVhc2llciB0byB1bmRlcnN0YW5kLiBzaW5jZSB0aGlzIHJvdXRpbmUgY2FuIGJlCisgIGNhbGxlZCBieSBlaXRoZXIgdGhlIG5ldHBlcmYgb3IgbmV0c2VydmVyIHByb2dyYW1zLCBhbGwgb3V0cHV0CisgIHNob3VsZCBiZSBkaXJlY3RlZCB0b3dhcmRzICJ3aGVyZS4iIGZhbWlseSBpcyBnZW5lcmFsbHkgQUZfSU5FVCBhbmQKKyAgdHlwZSB3aWxsIGJlIGVpdGhlciBTT0NLX1NUUkVBTSBvciBTT0NLX0RHUkFNLiAgVGhpcyByb3V0aW5lIHdpbGwKKyAgYWxzbyBiZSB1c2VkIGJ5IHRoZSAiU0NUUCIgdGVzdHMsIGhlbmNlIHRoZSBzbGlnaHRseSBzdHJhbmdlLWxvb2tpbmcKKyAgU0NUUCBzdHVmZiBpbiB0aGUgY2xhc3NpYyBic2Qgc29ja2V0cyB0ZXN0IGZpbGUuLi4gdmxhZC9yYWoKKyAgMjAwNS0wMy0xNSAqLworCitTT0NLRVQKK2NyZWF0ZV9kYXRhX3NvY2tldChzdHJ1Y3QgYWRkcmluZm8gKnJlcykKK3sKKworICBTT0NLRVQgdGVtcF9zb2NrZXQ7CisgIGludCBvbmU7CisgIGludCAgICBvbiAgPSAxOworICAKKworICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0ZW1wX3NvY2tldCA9IHNvY2tldChyZXMtPmFpX2ZhbWlseSwKKwkJICAgICAgIHJlcy0+YWlfc29ja3R5cGUsCisJCSAgICAgICByZXMtPmFpX3Byb3RvY29sKTsKKyAgCisgIGlmICh0ZW1wX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IGNyZWF0ZV9kYXRhX3NvY2tldDogc29ja2V0OiBlcnJubyAlZCBmYW0gJXMgdHlwZSAlcyBwcm90ICVzIGVycm1zZyAlc1xuIiwKKwkgICAgZXJybm8sCisJICAgIGluZXRfZnRvcyhyZXMtPmFpX2ZhbWlseSksCisJICAgIGluZXRfdHRvcyhyZXMtPmFpX3NvY2t0eXBlKSwKKwkgICAgaW5ldF9wdG9zKHJlcy0+YWlfcHJvdG9jb2wpLAorCSAgICBzdHJlcnJvcihlcnJubykpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwiY3JlYXRlX2RhdGFfc29ja2V0OiBzb2NrZXQgJWQgb2J0YWluZWQuLi5cbiIsdGVtcF9zb2NrZXQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE1vZGlmeSB0aGUgbG9jYWwgc29ja2V0IHNpemUuIFRoZSByZWFzb24gd2UgYWx0ZXIgdGhlIHNlbmQgYnVmZmVyCisgICBzaXplIGhlcmUgcmF0aGVyIHRoYW4gd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIGlzIHRvIHRha2UgY2FyZQorICAgb2YgZGVjcmVhc2VzIGluIGJ1ZmZlciBzaXplLiBEZWNyZWFzaW5nIHRoZSB3aW5kb3cgc2l6ZSBhZnRlcgorICAgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGlzIGEgVENQIG5vLW5vLiBBbHNvLCBieSBzZXR0aW5nIHRoZQorICAgYnVmZmVyICh3aW5kb3cpIHNpemUgYmVmb3JlIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCB3ZSBjYW4KKyAgIGNvbnRyb2wgdGhlIFRDUCBNU1MgKHNlZ21lbnQgc2l6ZSkuIFRoZSBNU1MgaXMgbmV2ZXIgKHdlbGwsIHNob3VsZAorICAgbmV2ZXIgYmUpIG1vcmUgdGhhdCAxLzIgdGhlIG1pbmltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZSBhdCBlYWNoCisgICBoYWxmIG9mIHRoZSBjb25uZWN0aW9uLiAgVGhpcyBpcyB3aHkgd2UgYXJlIGFsdGVyaW5nIHRoZSByZWNlaXZlCisgICBidWZmZXIgc2l6ZSBvbiB0aGUgc2VuZGluZyBzaXplIG9mIGEgdW5pZGlyZWN0aW9uYWwgdHJhbnNmZXIuIElmCisgICB0aGUgdXNlciBoYXMgbm90IHJlcXVlc3RlZCB0aGF0IHRoZSBzb2NrZXQgYnVmZmVycyBiZSBhbHRlcmVkLCB3ZQorICAgd2lsbCB0cnkgdG8gZmluZC1vdXQgd2hhdCB0aGVpciB2YWx1ZXMgYXJlLiBJZiB3ZSBjYW5ub3QgdG91Y2ggdGhlCisgICBzb2NrZXQgYnVmZmVyIGluIGFueSB3YXksIHdlIHdpbGwgc2V0IHRoZSB2YWx1ZXMgdG8gLTEgdG8gaW5kaWNhdGUKKyAgIHRoYXQuICAqLworICAKKyAgLyogYWxsIHRoZSBvb2d5IG5pdHR5IGdyaXR0eSBzdHVmZiBtb3ZlZCBmcm9tIGhlcmUgaW50byB0aGUgcm91dGluZQorICAgICBiZWluZyBjYWxsZWQgYmVsb3csIHBlciBwYXRjaGVzIGZyb20gZGF2aWRtIHRvIHdvcmthcm91bmQgdGhlIGJ1ZworICAgICBpbiBMaW51eCBnZXRzb2Nrb3B0KCkuICByYWogMjAwNC0wNi0xNSAqLworICBzZXRfc29ja19idWZmZXIgKHRlbXBfc29ja2V0LCBTRU5EX0JVRkZFUiwgbHNzX3NpemVfcmVxLCAmbHNzX3NpemUpOworICBzZXRfc29ja19idWZmZXIgKHRlbXBfc29ja2V0LCBSRUNWX0JVRkZFUiwgbHNyX3NpemVfcmVxLCAmbHNyX3NpemUpOworCisgIC8qIG5vdywgd2UgbWF5IHdpc2ggdG8gZW5hYmxlIHRoZSBjb3B5IGF2b2lkYW5jZSBmZWF0dXJlcyBvbiB0aGUgKi8KKyAgLyogbG9jYWwgc3lzdGVtLiBvZiBjb3Vyc2UsIHRoaXMgbWF5IG5vdCBiZSBwb3NzaWJsZS4uLiAqLworICAKKyNpZmRlZiBTT19SQ1ZfQ09QWUFWT0lECisgIGlmIChsb2NfcmN2YXZvaWQpIHsKKyAgICBpZiAoc2V0c29ja29wdCh0ZW1wX3NvY2tldCwKKwkJICAgU09MX1NPQ0tFVCwKKwkJICAgU09fUkNWX0NPUFlBVk9JRCwKKwkJICAgKGNvbnN0IGNoYXIgKikmbG9jX3JjdmF2b2lkLAorCQkgICBzaXplb2YoaW50KSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJuZXRwZXJmOiBjcmVhdGVfZGF0YV9zb2NrZXQ6IENvdWxkIG5vdCBlbmFibGUgcmVjZWl2ZSBjb3B5IGF2b2lkYW5jZSIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGxvY19yY3Zhdm9pZCA9IDA7CisgICAgfQorICB9CisjZWxzZQorICAvKiBpdCB3YXNuJ3QgY29tcGlsZWQgaW4uLi4gKi8KKyAgbG9jX3JjdmF2b2lkID0gMDsKKyNlbmRpZiAvKiBTT19SQ1ZfQ09QWUFWT0lEICovCisKKyNpZmRlZiBTT19TTkRfQ09QWUFWT0lECisgIGlmIChsb2Nfc25kYXZvaWQpIHsKKyAgICBpZiAoc2V0c29ja29wdCh0ZW1wX3NvY2tldCwKKwkJICAgU09MX1NPQ0tFVCwKKwkJICAgU09fU05EX0NPUFlBVk9JRCwKKwkJICAgKGNvbnN0IGNoYXIgKikmbG9jX3NuZGF2b2lkLAorCQkgICBzaXplb2YoaW50KSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJuZXRwZXJmOiBjcmVhdGVfZGF0YV9zb2NrZXQ6IENvdWxkIG5vdCBlbmFibGUgc2VuZCBjb3B5IGF2b2lkYW5jZSIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGxvY19zbmRhdm9pZCA9IDA7CisgICAgfQorICB9CisjZWxzZQorICAvKiBpdCB3YXMgbm90IGNvbXBpbGVkIGluLi4uICovCisgIGxvY19zbmRhdm9pZCA9IDA7CisjZW5kaWYKKyAgCisgIC8qIE5vdywgd2Ugd2lsbCBzZWUgYWJvdXQgc2V0dGluZyB0aGUgVENQX05PREVMQVkgZmxhZyBvbiB0aGUgbG9jYWwgKi8KKyAgLyogc29ja2V0LiBXZSB3aWxsIG9ubHkgZG8gdGhpcyBmb3IgdGhvc2Ugc3lzdGVtcyB0aGF0IGFjdHVhbGx5ICovCisgIC8qIHN1cHBvcnQgdGhlIG9wdGlvbi4gSWYgaXQgZmFpbHMsIG5vdGUgdGhlIGZhY3QsIGJ1dCBrZWVwIGdvaW5nLiAqLworICAvKiBJZiB0aGUgdXNlciB0cmllcyB0byBlbmFibGUgVENQX05PREVMQVkgb24gYSBVRFAgc29ja2V0LCB0aGlzICovCisgIC8qIHdpbGwgY2F1c2UgYW4gZXJyb3IgdG8gYmUgZGlzcGxheWVkICovCisKKyAgLyogd2VsbC4uLi4uIGxvbmcgYWdvIGFuZCBmYXIgYXdheSB0aGF0IHdvdWxkIGhhdmUgaGFwcGVuZWQsIGluCisgICAgIHBhcnRpY3VsYXIgYmVjYXVzZSB3ZSB3b3VsZCBhbHdheXMgdXNlIElQUFJPVE9fVENQIGhlcmUuCisgICAgIGhvd2V2ZXIsIG5vdyB3ZSBhcmUgdXNpbmcgcmVzLT5haV9wcm90b2NvbCwgd2hpY2ggd2lsbCBiZQorICAgICBJUFBST1RfVURQLCBhbmQgd2hpbGUgSFAtVVgsIGFuZCBJIHN1c3BlY3Qgbm8tb25lIGVsc2Ugb24gdGhlCisgICAgIHBsYW5ldCBoYXMgYSBVRFBfbXVtYmxlIG9wdGlvbiB0aGF0IG92ZXJsYXBzIHdpdGggVENQX05PREVMQVksCisgICAgIHN1cmUgYXMga251dGggbWFkZSBsaXR0bGUgZ3JlZW4gcHJvZ3JhbXMsIGxpbnV4IGhhcyBhIFVEUF9DT1JLCisgICAgIG9wdGlvbiB0aGF0IGlzIGRlZmluZWQgYXMgYSB2YWx1ZSBvZiAxLCB3aGljaCBpcyB0aGUgc2FtZSBhCisgICAgIFRDUF9OT0RFTEFZIHVuZGVyIExpbnV4LiAgU28sIHdoZW4gYXNraW5nIGZvciAtRCBhbmQKKyAgICAgIlRDUF9OT0RFTEFZIiB1bmRlciBMaW51eCwgd2UgYXJlIGFjdHVhbGx5IHNldHRpbmcgVURQX0NPUksKKyAgICAgaW5zdGVhZCBvZiBnZXR0aW5nIGFuIGVycm9yIGxpa2UgZXZlcnkgb3RoZXIgT1Mgb24gdGhlCisgICAgIHBsYW5ldC4gam95IGFuZCBydXB0dXJlLiB0aGlzIHN0b3BzIGEgVURQX1JSIHRlc3QgY29sZCBzb29vIHdlCisgICAgIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgcmVzLT5haV9wcm90b2NvbCBhY3R1YWxseSBtYWtlcyBzZW5zZSBmb3IKKyAgICAgYSBfTk9ERUxBWSBzZXRzb2Nrb3B0KCkgb3IgYSBVRFBfUlIgdGVzdCBvbiBMaW51eCB3aGVyZSBzb21lb25lCisgICAgIG1pc3Rha2VubHkgc2V0cyAtRCB3aWxsIGhhbmcuICByYWogMjAwNS0wNC0yMSAqLworICAKKyNpZiBkZWZpbmVkKFRDUF9OT0RFTEFZKSB8fCBkZWZpbmVkKFNDVFBfTk9ERUxBWSkKKyAgaWYgKChsb2Nfbm9kZWxheSkgJiYgKHJlcy0+YWlfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApKSB7CisKKyAgICAvKiBzdHJpY3RseSBzcGVha2luZywgc2luY2UgdGhlIGlmIGRlZmluZWQgYWJvdmUgaXMgYW4gT1IsIHdlCisgICAgICAgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGFnYWluc3QgVENQX05PREVMQVkgYmVpbmcgZGVmaW5lZCBoZXJlLgorICAgICAgIGhvd2V2ZXIsIHRoZSBsaWtlbGlob29kIG9mIFNDVFBfTk9ERUxBWSBiZWluZyBkZWZpbmVkIGFuZAorICAgICAgIFRDUF9OT0RFTEFZIF9OT1RfIGJlaW5nIGRlZmluZWQgaXMsIHByb2JhYmx5IDopLCBlcHNpbG9uLiAgcmFqCisgICAgICAgMjAwNS0wMy0xNSAqLworCisgICAgaW50IG9wdGlvbiA9IFRDUF9OT0RFTEFZOworCisgICAgLyogSSBzdXNwZWN0IHRoYXQgV0FOVF9TQ1RQIHdvdWxkIHN1ZmZpY2UgaGVyZSBzaW5jZSB0aGF0IGlzIHRoZQorICAgICAgIG9ubHkgdGltZSB3ZSB3b3VsZCBoYXZlIGNhbGxlZCBnZXRhZGRyaW5mbyB3aXRoIGEgaGludHMgYXNraW5nCisgICAgICAgZm9yIFNDVFAsIGJ1dCBqdXN0IGluIGNhc2UgdGhlcmUgaXMgYW4gU0NUUCBpbXBsZW1lbnRhdGlvbiBvdXQKKyAgICAgICB0aGVyZSBfd2l0aG91dF8gU0NUUF9OT0RFTEFZLi4uIHJhaiAyMDA1LTAzLTE1ICovIAorICAgIC8qIGNoYW5nZSB0aGlzIHRvIElQUFJPVE9fU0NUUCByYXRoZXIgdGhhbiBXQU5UX1NDVFAgdG8gYmV0dGVyIGZpdAorICAgICAgIHdpdGggdGhlIG1vZHVzIG9wZXJlbmRpIChzcCkgb2YgdGhlIG5ldyAib21uaSIgdGVzdHMuIHJhagorICAgICAgIDIwMDgtMDItMDQgKi8KKyNpZiBkZWZpbmVkKElQUFJPVE9fU0NUUCkgJiYgZGVmaW5lZChTQ1RQX05PREVMQVkpCisgICAgaWYgKElQUFJPVE9fU0NUUCA9PSByZXMtPmFpX3Byb3RvY29sKSB7CisgICAgICBvcHRpb24gPSBTQ1RQX05PREVMQVk7CisgICAgfQorI2VuZGlmCisKKyAgICBvbmUgPSAxOworICAgIGlmKHNldHNvY2tvcHQodGVtcF9zb2NrZXQsCisJCSAgcmVzLT5haV9wcm90b2NvbCwKKwkJICBvcHRpb24sCisJCSAgKGNoYXIgKikmb25lLAorCQkgIHNpemVvZihvbmUpKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIm5ldHBlcmY6IGNyZWF0ZV9kYXRhX3NvY2tldDogbm9kZWxheTogZXJybm8gJWRcbiIsCisJICAgICAgZXJybm8pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogY3JlYXRlX2RhdGFfc29ja2V0OiBbVENQfFNDVFBdX05PREVMQVkgcmVxdWVzdGVkLi4uXG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICB9CisjZWxzZSAvKiBUQ1BfTk9ERUxBWSAqLworICAKKyAgbG9jX25vZGVsYXkgPSAwOworICAKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworCisjaWYgZGVmaW5lZChUQ1BfQ09SSykKKyAgICAKKyAgICBpZiAobG9jX3RjcGNvcmsgPiAwKSB7CisgICAgICAvKiB0aGUgdXNlciB3aXNoZXMgZm9yIHVzIHRvIHNldCBUQ1BfQ09SSyBvbiB0aGUgc29ja2V0ICovCisgICAgICBpbnQgb25lID0gMTsKKyAgICAgIGlmIChzZXRzb2Nrb3B0KHRlbXBfc29ja2V0LAorCQkgICAgIGdldHByb3RvYnluYW1lKCJ0Y3AiKS0+cF9wcm90bywKKwkJICAgICBUQ1BfQ09SSywKKwkJICAgICAoY2hhciAqKSZvbmUsCisJCSAgICAgc2l6ZW9mKG9uZSkpID09IFNPQ0tFVF9FUlJPUikgeworCXBlcnJvcigibmV0cGVyZjogY3JlYXRlX2RhdGFfc29ja2V0OiB0Y3BfY29yayIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJjcmVhdGVfZGF0YV9zb2NrZXQ6IHRjcF9jb3JrLi4uXG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgCisjZW5kaWYgLyogVENQX0NPUksgKi8gICAgCisKKyAgLyogc2luY2Ugc29tZSBvZiB0aGUgVURQIHRlc3RzIGRvIG5vdCBkbyBhbnl0aGluZyB0byBjYXVzZSBhbgorICAgICBpbXBsaWNpdCBiaW5kKCkgY2FsbCwgd2UgbmVlZCB0byBiZSByYXRoZXIgZXhwbGljaXQgYWJvdXQgb3VyCisgICAgIGJpbmQoKSBjYWxsIGhlcmUuIGV2ZW4gaWYgdGhlIGFkZHJlc3MgYW5kL29yIHRoZSBwb3J0IGFyZSB6ZXJvCisgICAgIChJTkFERFJfQU5ZIGV0YykuIHJhaiAyMDA0LTA3LTIwICovCisKKyAgaWYgKHNldHNvY2tvcHQodGVtcF9zb2NrZXQsCisjaWZkZWYgSVBQUk9UT19EQ0NQCisJCSAvKiBpdCBpcyBSRUFMTFkgU0lMTFkgVEhBVCBUSElTIFNIT1VMRCBCRSBORUVERUQhISBJCisJCSAgICBzaG91bGQgYmUgYWJsZSB0byB1c2UgU09MX1NPQ0tFVCBmb3IgdGhpcyBqdXN0CisJCSAgICBsaWtlIFRDUCBhbmQgU0NUUCAqLworCQkgLyogSVQgSVMgRVZFTiBTSUxMSUVSIFRIQVQgVEhFUkUgQ09VTEQgQkUgU1lTVEVNUworCQkgICAgV0lUSCBJUFBST1RPX0RDQ1AgYW5kIG5vIFNPTF9EQ0NQICovCisjaWZuZGVmIFNPTF9EQ0NQCisjZGVmaW5lIFNPTF9EQ0NQIFNPTF9TT0NLRVQKKyNkZWZpbmUgTkVUUEVSRl9ORUVEX0NMRUFOVVAgMQorI2VuZGlmCisJCSAocmVzLT5haV9wcm90b2NvbCA9PSBJUFBST1RPX0RDQ1ApID8gU09MX0RDQ1AgOiBTT0xfU09DS0VULAorI2lmZGVmIE5FVFBFUkZfTkVFRF9DTEVBTlVQCisjdW5kZWYgU09MX0RDQ1AKKyN1bmRlZiBORVRQRVJGX05FRURfQ0xFQU5VUAorI2VuZGlmCisKKyNlbHNlCisJCSBTT0xfU09DS0VULAorI2VuZGlmCisJCSBTT19SRVVTRUFERFIsCisJCSAoY29uc3QgY2hhciAqKSZvbiwKKwkJIHNpemVvZihvbikpIDwgMCkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJuZXRwZXJmOiBjcmVhdGVfZGF0YV9zb2NrZXQ6IFNPX1JFVVNFQUREUiBmYWlsZWQgJWRcbiIsCisJICAgIGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBpZiAoYmluZCh0ZW1wX3NvY2tldCwKKwkgICByZXMtPmFpX2FkZHIsCisJICAgcmVzLT5haV9hZGRybGVuKSA8IDApIHsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIm5ldHBlcmY6IGNyZWF0ZV9kYXRhX3NvY2tldDogZGF0YSBzb2NrZXQgYmluZCBmYWlsZWQgZXJybm8gJWRcbiIsCisJICAgICAgZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwiIHBvcnQ6ICVkXG4iLGdldF9wb3J0X251bWJlcihyZXMpKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICB9CisgIAorCisgIHJldHVybih0ZW1wX3NvY2tldCk7CisKK30KKworI2lmZGVmIEtMVURHRV9TT0NLRVRfT1BUSU9OUworCisMCisgLyogVGhpcyByb3V0aW5lIGlzIGZvciB0aG9zZSBCUk9LRU4gc3lzdGVtcyB3aGljaCBkbyBub3QgY29ycmVjdGx5ICovCisgLyogcGFzcyBzb2NrZXQgYXR0cmlidXRlcyB0aHJvdWdoIGNhbGxzIHN1Y2ggYXMgYWNjZXB0KCkuIEl0IHNob3VsZCAqLworIC8qIG9ubHkgYmUgY2FsbGVkIGZvciB0aG9zZSBicm9rZW4gc3lzdGVtcy4gSSAqcmVhbGx5KiBkb24ndCB3YW50IHRvICovCisgLyogaGF2ZSB0aGlzLCBidXQgZXZlbiBicm9rZW4gc3lzdGVtcyBtdXN0IGJlIG1lYXN1cmVkLiByYWogMTEvOTUgKi8KK3ZvaWQKK2tsdWRnZV9zb2NrZXRfb3B0aW9ucyhpbnQgdGVtcF9zb2NrZXQpCit7CisKKyAgc2V0X3NvY2tfYnVmZmVyKHRlbXBfc29ja2V0LCBTRU5EX0JVRkZFUiwgbHNzX3NpemVfcmVxLCAmbHNzX3NpemUpOworICBzZXRfc29ja19idWZmZXIodGVtcF9zb2NrZXQsIFJFQ1ZfQlVGRkVSLCBsc3Jfc2l6ZV9yZXEsICZsc3Jfc2l6ZSk7CisKKyAgLyogbm93LCB3ZSBtYXkgd2lzaCB0byBlbmFibGUgdGhlIGNvcHkgYXZvaWRhbmNlIGZlYXR1cmVzIG9uIHRoZSAqLworICAvKiBsb2NhbCBzeXN0ZW0uIG9mIGNvdXJzZSwgdGhpcyBtYXkgbm90IGJlIHBvc3NpYmxlLi4uICovCisgIC8qIHRob3NlIGNhbGxzIHdlcmUgb25seSB2YWxpZCBmb3IgSFAtVVgsIGFuZCBJIGtub3cgdGhhdCBIUC1VWCBpcyAqLworICAvKiB3cml0dGVuIGNvcnJlY3RseSwgYW5kIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGluY2x1ZGUgdGhvc2UgY2FsbHMgKi8KKyAgLyogaW4gdGhpcyBrbHVkZ3kgcm91dGluZS4gcmFqIDExLzk1ICovCisKKyAgCisgIC8qIE5vdywgd2Ugd2lsbCBzZWUgYWJvdXQgc2V0dGluZyB0aGUgVENQX05PREVMQVkgZmxhZyBvbiB0aGUgbG9jYWwgKi8KKyAgLyogc29ja2V0LiBXZSB3aWxsIG9ubHkgZG8gdGhpcyBmb3IgdGhvc2Ugc3lzdGVtcyB0aGF0IGFjdHVhbGx5ICovCisgIC8qIHN1cHBvcnQgdGhlIG9wdGlvbi4gSWYgaXQgZmFpbHMsIG5vdGUgdGhlIGZhY3QsIGJ1dCBrZWVwIGdvaW5nLiAqLworICAvKiBJZiB0aGUgdXNlciB0cmllcyB0byBlbmFibGUgVENQX05PREVMQVkgb24gYSBVRFAgc29ja2V0LCB0aGlzICovCisgIC8qIHdpbGwgY2F1c2UgYW4gZXJyb3IgdG8gYmUgZGlzcGxheWVkICovCisgIAorI2lmZGVmIFRDUF9OT0RFTEFZCisgIGlmIChsb2Nfbm9kZWxheSkgeworICAgIG9uZSA9IDE7CisgICAgaWYoc2V0c29ja29wdCh0ZW1wX3NvY2tldCwKKwkJICBnZXRwcm90b2J5bmFtZSgidGNwIiktPnBfcHJvdG8sCisJCSAgVENQX05PREVMQVksCisJCSAgKGNoYXIgKikmb25lLAorCQkgIHNpemVvZihvbmUpKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IGtsdWRnZV9zb2NrZXRfb3B0aW9uczogbm9kZWxheTogZXJybm8gJWRcbiIsCisJICAgICAgZXJybm8pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjoga2x1ZGdlX3NvY2tldF9vcHRpb25zOiBUQ1BfTk9ERUxBWSByZXF1ZXN0ZWQuLi5cbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIH0KKyNlbHNlIC8qIFRDUF9OT0RFTEFZICovCisgIAorICBsb2Nfbm9kZWxheSA9IDA7CisgIAorI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisKKyAgfQorCisjZW5kaWYgLyogS0xVREdFX1NPQ0tFVF9PUFRJT05TICovCisMCisKK3N0YXRpYyB2b2lkICoKK2dldF9hZGRyZXNzX2FkZHJlc3Moc3RydWN0IGFkZHJpbmZvICppbmZvKSAKK3sKKyAgc3RydWN0IHNvY2thZGRyX2luICpzaW47CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKyNlbmRpZgorCisgIHN3aXRjaChpbmZvLT5haV9mYW1pbHkpIHsKKyAgY2FzZSBBRl9JTkVUOgorICAgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpbmZvLT5haV9hZGRyOworICAgIHJldHVybigmKHNpbi0+c2luX2FkZHIpKTsKKyAgICBicmVhazsKKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICBjYXNlIEFGX0lORVQ2OgorICAgIHNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWluZm8tPmFpX2FkZHI7CisgICAgcmV0dXJuKCYoc2luNi0+c2luNl9hZGRyKSk7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBmcHJpbnRmKHN0ZGVyciwid2UgbmV2ZXIgZXhwZWN0ZWQgdG8gZ2V0IGhlcmUgaW4gZ2V0X2FkZHJlc3NfYWRkcmVzc1xuIik7CisgICAgZmZsdXNoKHN0ZGVycik7CisgICAgZXhpdCgtMSk7CisgIH0KK30KKworI2lmIGRlZmluZWQoV0lOMzIpIAorI2lmICFkZWZpbmVkKEluZXROdG9wKQorLyogKyorIFdoeSBpc24ndCB0aGlzIGluIHRoZSB3aW5zb2NrIGhlYWRlcnMgeWV0PyAqLworY29uc3QgY2hhciAqCitpbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpOworI2VuZGlmCisjZW5kaWYKKworLyogVGhpcyByb3V0aW5lIGlzIGEgZ2VuZXJpYyB0ZXN0IGhlYWRlciBwcmludGVyIGZvciB0aGUgdG9wbW9zdCBoZWFkZXIgKi8KK3ZvaWQKK3ByaW50X3RvcF90ZXN0X2hlYWRlcihjaGFyIHRlc3RfbmFtZVtdLCBzdHJ1Y3QgYWRkcmluZm8gKnNvdXJjZSwgc3RydWN0IGFkZHJpbmZvICpkZXN0aW5hdGlvbikKK3sKKworI2lmIGRlZmluZWQoQUZfSU5FVDYpCisgIGNoYXIgYWRkcmVzc19idWZbSU5FVDZfQUREUlNUUkxFTl07CisjZWxzZQorICBjaGFyIGFkZHJlc3NfYnVmWzE2XTsgLyogbWFnaWMgY29uc3RhbnQgKi8KKyNlbmRpZgorCisgIC8qIHdlIHdhbnQgdG8gaGF2ZSBzb21lIGFkZGl0aW9uYWwsIGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGluICovCisgIC8qIHRoZSBoZWFkZXJzLiB3ZSBrbm93IHNvbWUgb2YgaXQgaGVyZSwgYnV0IG5vdCBhbGwsIHNvIHdlIHdpbGwgKi8KKyAgLyogb25seSBwcmludCB0aGUgdGVzdCB0aXRsZSBoZXJlIGFuZCB3aWxsIHByaW50IHRoZSByZXN1bHRzICovCisgIC8qIHRpdGxlcyBhZnRlciB0aGUgdGVzdCBpcyBmaW5pc2hlZCAqLworICBmcHJpbnRmKHdoZXJlLHRlc3RfbmFtZSk7CisgIGFkZHJlc3NfYnVmWzBdID0gJ1wwJzsKKyAgaW5ldF9udG9wKHNvdXJjZS0+YWlfZmFtaWx5LGdldF9hZGRyZXNzX2FkZHJlc3Moc291cmNlKSxhZGRyZXNzX2J1ZixzaXplb2YoYWRkcmVzc19idWYpKTsKKyAgZnByaW50Zih3aGVyZSwKKwkgICIgZnJvbSAlcyAoJXMpIHBvcnQgJXUgJXMiLAorCSAgc291cmNlLT5haV9jYW5vbm5hbWUsCisJICBhZGRyZXNzX2J1ZiwKKwkgIGdldF9wb3J0X251bWJlcihzb3VyY2UpLAorCSAgaW5ldF9mdG9zKHNvdXJjZS0+YWlfZmFtaWx5KSk7CisgIGFkZHJlc3NfYnVmWzBdID0gJ1wwJzsKKyAgaW5ldF9udG9wKGRlc3RpbmF0aW9uLT5haV9mYW1pbHksZ2V0X2FkZHJlc3NfYWRkcmVzcyhkZXN0aW5hdGlvbiksYWRkcmVzc19idWYsc2l6ZW9mKGFkZHJlc3NfYnVmKSk7CisgIGZwcmludGYod2hlcmUsCisJICAiIHRvICVzICglcykgcG9ydCAldSAlcyIsCisJICBkZXN0aW5hdGlvbi0+YWlfY2Fub25uYW1lLAorCSAgYWRkcmVzc19idWYsCisJICBnZXRfcG9ydF9udW1iZXIoZGVzdGluYXRpb24pLAorCSAgaW5ldF9mdG9zKGRlc3RpbmF0aW9uLT5haV9mYW1pbHkpKTsKKworICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiIDogKy8tJS4zZiUlIEAgJTJkJSUgY29uZi4gJXMiLAorCSAgICBpbnRlcnZhbC8wLjAyLAorCSAgICBjb25maWRlbmNlX2xldmVsLAorCSAgICByZXN1bHRfY29uZmlkZW5jZV9vbmx5ID8gIiBvbiByZXN1bHQgb25seSIgOiAiIik7CisgIH0KKyAgaWYgKChsb2Nfbm9kZWxheSA+IDApIHx8IChyZW1fbm9kZWxheSA+IDApKSB7CisgICAgZnByaW50Zih3aGVyZSwiIDogbm9kZWxheSIpOworICB9CisgIGlmICgobG9jX3NuZGF2b2lkID4gMCkgfHwgCisgICAgICAobG9jX3JjdmF2b2lkID4gMCkgfHwKKyAgICAgIChyZW1fc25kYXZvaWQgPiAwKSB8fAorICAgICAgKHJlbV9yY3Zhdm9pZCA+IDApKSB7CisgICAgZnByaW50Zih3aGVyZSwiIDogY29weSBhdm9pZGFuY2UiKTsKKyAgfQorCisgIGlmIChub19jb250cm9sKSB7CisgICAgZnByaW50Zih3aGVyZSwiIDogbm8gY29udHJvbCIpOworICB9CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICBmcHJpbnRmKHdoZXJlLCIgOiBoaXN0b2dyYW0iKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyNpZm5kZWYgV0FOVF9TUElOCisgIGZwcmludGYod2hlcmUsIiA6IGludGVydmFsIik7CisjZWxzZQorICBmcHJpbnRmKHdoZXJlLCIgOiBzcGluIGludGVydmFsIik7CisjZW5kaWYKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisjaWZkZWYgRElSVFkgCisgIGZwcmludGYod2hlcmUsIiA6IGRpcnR5IGRhdGEiKTsKKyNlbmRpZiAvKiBESVJUWSAqLworI2lmZGVmIFdBTlRfREVNTworICBmcHJpbnRmKHdoZXJlLCIgOiBkZW1vIik7CisjZW5kaWYKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgIC8qIGEgbGl0dGxlIGhva2V5IHBlcmhhcHMsIGJ1dCB3ZSByZWFsbHkgb25seSB3YW50IHRoaXMgdG8gYmUKKyAgICAgZW1pdHRlZCBmb3IgdGVzdHMgd2hlcmUgaXQgYWN0dWFsbHkgaXMgdXNlZCwgd2hpY2ggbWVhbnMgYQorICAgICAiUkVRVUVTVC9SRVNQT05TRSIgdGVzdC4gcmFqIDIwMDUtMTEtMTAgKi8KKyAgaWYgKHN0cnN0cih0ZXN0X25hbWUsIlJFUVVFU1QvUkVTUE9OU0UiKSkgeworICAgIGZwcmludGYod2hlcmUsIiA6IGZpcnN0IGJ1cnN0ICVkIixmaXJzdF9idXJzdF9zaXplKTsKKyAgfQorI2VuZGlmCisgIGlmIChjcHVfYmluZGluZ19yZXF1ZXN0ZWQpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCIgOiBjcHUgYmluZCIpOworICB9CisgIGZwcmludGYod2hlcmUsIlxuIik7CisgIAorfQorCisKKy8qIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBUQ1AgdW5pZGlyZWN0aW9uYWwgZGF0YSB0cmFuc2ZlciB0ZXN0ICovCisvKiAoYS5rLmEuIHN0cmVhbSkgZm9yIHRoZSBzb2NrZXRzIGludGVyZmFjZS4gSXQgcmVjZWl2ZXMgaXRzICovCisvKiBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwgdmFyaWFibGVzIGZyb20gdGhlIHNoZWxsIGFuZCB3cml0ZXMgaXRzICovCisvKiBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKworCit2b2lkIAorc2VuZF90Y3Bfc3RyZWFtKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIFxuXAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgJXMvc2VjICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZiAlc1xuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzEgPQorICAgICIlNmQgJTZkICU2ZCAgICAlLTYuMmYgICAlNy4yZiAgICVzXG4iOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpemF0aW9uICAgICAgIFNlcnZpY2UgRGVtYW5kXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBTZW5kICAgICBSZWN2ICAgICBTZW5kICAgIFJlY3ZcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIGxvY2FsICAgIHJlbW90ZSAgIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAlLTguOHMvcyAgJSUgJWMgICAgICAlJSAlYyAgICAgIHVzL0tCICAgdXMvS0JcblxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMCA9CisgICAgIiU2LjNmICVjICVzXG4iOworCisgIGNoYXIgKmNwdV9mbXRfMSA9CisgICAgIiU2ZCAlNmQgJTZkICAgICUtNi4yZiAgICAgJTcuMmYgICAlLTYuMmYgICAlLTYuMmYgICAlLTYuM2YgICUtNi4zZiAlc1xuIjsKKyAgCisgIGNoYXIgKmtzaW5rX2ZtdCA9ICJcblwKK0FsaWdubWVudCAgICAgIE9mZnNldCAgICAgICAgICUtOC44cyAlLTguOHMgICAgU2VuZHMgICAlLTguOHMgUmVjdnNcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGUgIFhmZXJlZCAgIFBlciAgICAgICAgICAgICAgICAgUGVyXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdiAgICAgICAgICAgICBTZW5kIChhdmcpICAgICAgICAgIFJlY3YgKGF2ZylcblwKKyU1ZCAgICU1ZCAgJTVkICAgJTVkICU2LjRnICAlNi4yZiAgICAlNmQgICAlNi4yZiAlNmRcbiI7CisKKyAgY2hhciAqa3NpbmtfZm10MiA9ICJcblwKK01heGltdW1cblwKK1NlZ21lbnRcblwKK1NpemUgKGJ5dGVzKVxuXAorJTZkXG4iOworICAKKyAgCisgIGZsb2F0CQkJZWxhcHNlZF90aW1lOworICAKKyAgLyogd2hhdCB3ZSB3YW50IGlzIHRvIGhhdmUgYSBidWZmZXIgc3BhY2UgdGhhdCBpcyBhdCBsZWFzdCBvbmUgKi8KKyAgLyogc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc2VuZCB3aW5kb3cuIHRoaXMgd2lsbCBpbnN1cmUgdGhhdCB3ZSAqLworICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgLyogb2YgdGhlIHRyYW5zcG9ydC4gVGhpcyBidWZmZXIgd2lsbCBiZSBtYWxsb2MnZCBhZnRlciB3ZSBoYXZlIGZvdW5kICovCisgIC8qIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBzZW5jIHNvY2tldCBidWZmZXIuIFdlIHdpbGwgd2FudCB0byBkZWFsICovCisgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICAKKyAgaW50IGxlbjsKKyAgdW5zaWduZWQgaW50IG51bW1lc3NhZ2VzID0gMDsKKyAgU09DS0VUIHNlbmRfc29ja2V0OworICBpbnQgYnl0ZXNfcmVtYWluaW5nOworICBpbnQgdGNwX21zcyA9IC0xOyAgLyogcG9zc2libHkgdW5pbml0aWFsaXplZCBvbiBwcmludGYgZmFyIGJlbG93ICovCisKKyAgLyogd2l0aCBsaW5rcyBsaWtlIGZkZGksIG9uZSBjYW4gc2VuZCA+IDMyIGJpdHMgd29ydGggb2YgYnl0ZXMgKi8KKyAgLyogZHVyaW5nIGEgdGVzdC4uLiA7LSkgYXQgc29tZSBwb2ludCwgdGhpcyBzaG91bGQgcHJvYmFibHkgYmVjb21lIGEgKi8KKyAgLyogNjRiaXQgaW50ZWdyYWwgdHlwZSwgYnV0IHRob3NlIGFyZSBub3QgZW50aXJlbHkgY29tbW9uIHlldCAqLworCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBsb2NhbF9ieXRlc19zZW50ID0gMDsKKyAgZG91YmxlCWJ5dGVzX3NlbnQgPSAwLjA7CisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICAKKyAgc3RydWN0CXRjcF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKnRjcF9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSp0Y3Bfc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqdGNwX3N0cmVhbV9yZXN1bHQ7CisgIAorICB0Y3Bfc3RyZWFtX3JlcXVlc3QgID0gCisgICAgKHN0cnVjdCB0Y3Bfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHRjcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX3N0cmVhbV9yZXN1bHQgICA9IAorICAgIChzdHJ1Y3QgdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICAvKiBjb21wbGV0ZV9hZGRyaW5mb3Mgd2lsbCBlaXRoZXIgc3VjY2VkZSBvciBleGl0IHRoZSBwcm9jZXNzICovCisgIGNvbXBsZXRlX2FkZHJpbmZvcygmcmVtb3RlX3JlcywKKwkJICAgICAmbG9jYWxfcmVzLAorCQkgICAgIHJlbW90ZV9ob3N0LAorCQkgICAgIFNPQ0tfU1RSRUFNLAorCQkgICAgIElQUFJPVE9fVENQLAorCQkgICAgIDApOworICAKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIHByaW50X3RvcF90ZXN0X2hlYWRlcigiVENQIFNUUkVBTSBURVNUIixsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisgIH0KKworICBzZW5kX3JpbmcgPSBOVUxMOworICBjb25maWRlbmNlX2l0ZXJhdGlvbiA9IDE7CisgIGluaXRfc3RhdCgpOworCisgIC8qIHdlIGhhdmUgYSBncmVhdC1iaWcgd2hpbGUgbG9vcCB3aGljaCBjb250cm9scyB0aGUgbnVtYmVyIG9mIHRpbWVzICovCisgIC8qIHdlIHJ1biBhIHBhcnRpY3VsYXIgdGVzdC4gdGhpcyBpcyBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIGEgKi8KKyAgLyogY29uZmlkZW5jZSBpbnRlcnZhbCAoSSByZWFsbHkgc2hvdWxkIGhhdmUgc3RheWVkIGF3YWtlIGR1cmluZyAqLworICAvKiBwcm9ic3RhdHMgOikuIElmIHRoZSB1c2VyIGRpZCBub3QgcmVxdWVzdCBjb25maWRlbmNlIG1lYXN1cmVtZW50ICovCisgIC8qIChubyBjb25maWRlbmNlIGlzIHRoZSBkZWZhdWx0KSB0aGVuIHdlIHdpbGwgb25seSBnbyB0aG91Z2ggdGhlICovCisgIC8qIGxvb3Agb25jZS4gdGhlIGNvbmZpZGVuY2Ugc3R1ZmYgb3JpZ2luYXRlcyBmcm9tIHRoZSBmb2xrcyBhdCBJQk0gKi8KKworICB3aGlsZSAoKChjb25maWRlbmNlIDwgMCkgJiYgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDwgaXRlcmF0aW9uX21heCkpIHx8CisJIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8PSBpdGVyYXRpb25fbWluKSkgeworCisgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgLyogZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZS4gKi8KKyAgICAKKyAgICBudW1tZXNzYWdlcyAgICA9CTA7CisgICAgYnl0ZXNfc2VudCAgICAgPQkwLjA7CisgICAgdGltZXNfdXAgICAgICAgPSAJMDsKKyAgICAKKyAgICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgICAgCisgICAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF90Y3Bfc3RyZWFtOiB0Y3Agc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfdGNwX3N0cmVhbTogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgICAKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGVpdGhlciByZXRyaWV2ZWQgdGhlIHNvY2tldCBidWZmZXIgc2l6ZXMsICovCisgICAgLyogb3IgaGF2ZSB0cmllZCB0byBzZXQgdGhlbSwgc28gbm93LCB3ZSBtYXkgd2FudCB0byBzZXQgdGhlIHNlbmQgKi8KKyAgICAvKiBzaXplIGJhc2VkIG9uIHRoYXQgKGJlY2F1c2UgdGhlIHVzZXIgZWl0aGVyIGRpZCBub3QgdXNlIGEgLW0gKi8KKyAgICAvKiBvcHRpb24sIG9yIHVzZWQgb25lIHdpdGggYW4gYXJndW1lbnQgb2YgMCkuIElmIHRoZSBzb2NrZXQgYnVmZmVyICovCisgICAgLyogc2l6ZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3aWxsIHNldCB0aGUgc2VuZCBzaXplIHRvIDRLQiAtIG5vICovCisgICAgLyogcGFydGljdWxhciByZWFzb24sIGp1c3QgYXJiaXRyYXJ5Li4uICovCisgICAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgICBpZiAobHNzX3NpemUgPiAwKSB7CisJc2VuZF9zaXplID0gbHNzX3NpemU7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlzZW5kX3NpemUgPSA0MDk2OworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHJpbmcgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LiAqLworICAgIC8qIG5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYWxsb2NhdGVkIGEgcXVhbnRpdHkgKi8KKyAgICAvKiBvZiBtZW1vcnkgdGhhdCBpcyBhdCBsZWFzdCBvbmUgc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc29ja2V0ICovCisgICAgLyogYnVmZmVyIHNpemUuIFdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gKi8KKyAgICAvKiBidWZmZXJzIGFsbG9jYXRlZCAtIHRoaXMgY2FuIGJlIGEgYml0IG9mIGEgcHJvYmxlbSB3aGVuIHRoZSAqLworICAgIC8qIHNlbmRfc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgc29ja2V0IHNpemUsIHNvIHdlIG11c3QgY2hlY2suLi4gdGhlICovCisgICAgLyogdXNlciBtYXkgaGF2ZSB3YW50ZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlICJ3aWR0aCIgb2Ygb3VyIHNlbmQgKi8KKyAgICAvKiBidWZmZXJzLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGF0IHdpc2guLi4gKi8KKyAgICBpZiAoc2VuZF93aWR0aCA9PSAwKSB7CisgICAgICBzZW5kX3dpZHRoID0gKGxzc19zaXplL3NlbmRfc2l6ZSkgKyAxOworICAgICAgaWYgKHNlbmRfd2lkdGggPT0gMSkgc2VuZF93aWR0aCsrOworICAgIH0KKyAgICAKKyAgICBpZiAoc2VuZF9yaW5nID09IE5VTEwpIHsKKyAgICAgIC8qIG9ubHkgYWxsb2NhdGUgdGhlIHNlbmQgcmluZyBvbmNlLiB0aGlzIGlzIGEgbmV0d29ya2luZyB0ZXN0LCAqLworICAgICAgLyogbm90IGEgbWVtb3J5IGFsbG9jYXRpb24gdGVzdC4gdGhpcyB3YXksIHdlIGRvIG5vdCBuZWVkIGEgKi8KKyAgICAgIC8qIGRlYWxsb2NhdGVfYnVmZmVyX3JpbmcoKSByb3V0aW5lLCBhbmQgSSBkb24ndCBmZWVsIGxpa2UgKi8KKyAgICAgIC8qIHdyaXRpbmcgb25lIGFueXdheSA6KSByYWogMTEvOTQgKi8KKyAgICAgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgICAgIHNlbmRfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9vZmZzZXQpOworICAgIH0KKworICAgIC8qIElmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgY3B1IHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cywgd2UgbXVzdCAqLworICAgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgICAvKiB0aGVtc2VsdmVzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBjcHUgcmF0ZSwgdGhlbiAqLworICAgIC8qIGNhbGlicmF0ZV9sb2NhbF9jcHUgd2lsbCByZXR1cm4gcmF0aGVyIHF1aWNrbHkgYXMgaXQgd2lsbCBoYXZlICovCisgICAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgICAvKiBhbGwgdGhlICJub3JtYWwiIGNhbGlicmF0aW9uIHN0dWZmIGFuZCByZXR1cm4gdGhlIHJhdGUgYmFjay4gKi8KKyAgICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZQorCSBzb2NrZXQgcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZQorCSByZWFzb24gZm9yIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAKKwkgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywKKwkgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUKKwkgdGhhdCBubyBjaGFuZ2VzIGJleW9uZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzaG91bGQgYmUKKwkgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgZGVmYXVsdCB0byAxLCB3aGljaAorCSB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZSA9CURPX1RDUF9TVFJFQU07CisgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZV9yZXE7CisgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZV9yZXE7CisgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZQk9CXJlY3Zfc2l6ZTsKKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+bm9fZGVsYXkJPQlyZW1fbm9kZWxheTsKKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQJPQlyZW1vdGVfcmVjdl9hbGlnbjsKKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQJPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUJPQlyZW1vdGVfY3B1X3JhdGU7CisgICAgICBpZiAodGVzdF90aW1lKSB7CisJdGNwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXRjcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X2J5dGVzOworICAgICAgfQorICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5zb19yY3Zhdm9pZAk9CXJlbV9yY3Zhdm9pZDsKKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQJPQlyZW1fc25kYXZvaWQ7CisjaWZkZWYgRElSVFkKKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+ZGlydHlfY291bnQgICAgID0gICAgICAgcmVtX2RpcnR5X2NvdW50OworICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICAgPSAgICAgICByZW1fY2xlYW5fY291bnQ7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cG9ydCAgICAgICAgICAgID0gICAgYXRvaShyZW1vdGVfZGF0YV9wb3J0KTsKKyAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkgPSBhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworICAgICAgaWYgKGRlYnVnID4gMSkgeworCWZwcmludGYod2hlcmUsCisJCSJuZXRwZXJmOiBzZW5kX3RjcF9zdHJlYW06IHJlcXVlc3RpbmcgVENQIHN0cmVhbSB0ZXN0XG4iKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgICAKKyAgICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQKKyAgICAgICAgIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrCisgICAgICAgICBpbnRvIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4KKyAgICAgICAgIFRoZSByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwKKyAgICAgICAgIGhhdmUgZG9uZSBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlCisgICAgICAgICBjcHUgbG9jYWxseSBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUKKyAgICAgICAgIGNvdW50ZXIgdmFsdWUgcmlnaHQgYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZQorICAgICAgICAgd2lsbCBncmFiIHRoZSBjb3VudGVyIHJpZ2h0IGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcworICAgICAgICAgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcyBiZWluZyBzZW50IGZvciB0aGUgVENQCisgICAgICAgICB0ZXN0cy4gICovCisgICAgCisgICAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgCisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisJcnNyX3NpemUJICAgICAgPQl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworCXJzc19zaXplCSAgICAgID0JdGNwX3N0cmVhbV9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKwlyZW1fbm9kZWxheSAgICAgPQl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5ub19kZWxheTsKKwlyZW1vdGVfY3B1X3VzYWdlPQl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKwlyZW1vdGVfY3B1X3JhdGUgPSB0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKwkKKwkvKiB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIgcG9ydCBudW1iZXIgaXMgaW4KKwkgICBuZXR3b3JrIG9yZGVyICovCisJc2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMsCisJCQkoc2hvcnQpdGNwX3N0cmVhbV9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlcik7CisJCisJcmVtX3JjdmF2b2lkCT0gdGNwX3N0cmVhbV9yZXNwb25zZS0+c29fcmN2YXZvaWQ7CisJcmVtX3NuZGF2b2lkCT0gdGNwX3N0cmVhbV9yZXNwb25zZS0+c29fc25kYXZvaWQ7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCWZwcmludGYod2hlcmUsCisJCSJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCQluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJcGVycm9yKCIiKTsKKwlmZmx1c2god2hlcmUpOworCQorCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorCisjaWZkZWYgV0FOVF9ERU1PCisgICAgREVNT19TVFJFQU1fU0VUVVAobHNzX3NpemUscnNyX3NpemUpCisjZW5kaWYKKworICAgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICAgIGlmIChjb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkcmxlbikgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3RjcF9zdHJlYW06IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworI2lmZGVmIFdJTjMyCisgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgIC8qIFdpbmRvd3Mtc3BlY2lmaWMgd2F5IEkgY2FuIGZpbmQgdG8gZm9yY2UgdGhlIHdpbnNvY2sgY2FsbHMgdG8gKi8KKyAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAvKiBhbmQgc3VjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCByYWogMS85NiAqLworICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNlbmRfc29ja2V0OworI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciAqLworICAgIC8qIHRoZSBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgKi8KKyAgICAvKiBoYXZlIGluZGljYXRlZCBhIHByb2JsZW0uIEkgZmFpbGVkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlICovCisgICAgLyogZXh0cmEgIG1lc3NhZ2UgYWZ0ZXIgdGhlIGFjY2VwdCBvbiB0aGUgcmVtb3RlLiBJZiBpdCBmYWlsZWQsICovCisgICAgLyogd2UnbGwgc2VlIGl0IGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nICovCisgICAgLyogZGF0YS4gKi8gCisgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSBzdHJlYW0gdGVzdCwgdGhleSBjYW4gYmUgKi8KKyAgICAvKiBlaXRoZXIgdGltZSBvciBieXRlLWNvdW50IGJhc2VkLiAqLworICAgIAorICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICAgIHRpbWVzX3VwID0gMDsKKyAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IDA7CisgICAgICAvKiBpbiBwcmV2aW91cyByZXZpc2lvbnMsIHdlIGhhZCB0aGUgc2FtZSBjb2RlIHJlcGVhdGVkIHRocm91Z2h0ICovCisgICAgICAvKiBhbGwgdGhlIHRlc3Qgc3VpdGVzLiB0aGlzIHdhcyB1bm5lY2Vzc2FyeSwgYW5kIG1lYW50IG1vcmUgKi8KKyAgICAgIC8qIHdvcmsgZm9yIG1lIHdoZW4gSSB3YW50ZWQgdG8gc3dpdGNoIHRvIFBPU0lYIHNpZ25hbHMsIHNvIEkgKi8KKyAgICAgIC8qIGhhdmUgYWJzdHJhY3RlZCB0aGlzIG91dCBpbnRvIGEgcm91dGluZSBpbiBuZXRsaWIuYy4gaWYgeW91ICovCisgICAgICAvKiBhcmUgZXhwZXJpZW5jaW5nIHNpZ25hbCBwcm9ibGVtcywgeW91IG1pZ2h0IHdhbnQgdG8gbG9vayAqLworICAgICAgLyogdGhlcmUuIHJhaiAxMS85NCAqLworICAgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgICAgYnl0ZXNfcmVtYWluaW5nID0gdGVzdF9ieXRlczsKKyAgICAgIHRpbWVzX3VwID0gMTsKKyAgICB9CisgICAgCisgICAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAgIAorICAgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworCisgICAgLyogd2Ugb25seSBzdGFydCB0aGUgaW50ZXJ2YWwgdGltZXIgaWYgd2UgYXJlIHVzaW5nIHRoZQorICAgICAgIHRpbWVyLXRpbWVkIGludGVydmFscyByYXRoZXIgdGhhbiB0aGUgc2l0IGFuZCBzcGluIG9uZXMuIHJhagorICAgICAgIDIwMDYtMDItMDYgKi8gICAgCisjaWYgZGVmaW5lZChXQU5UX0lOVEVSVkFMUykKKyAgICBJTlRFUlZBTFNfSU5JVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisKKyAgICAvKiBiZWZvcmUgd2Ugc3RhcnQsIGluaXRpYWxpemUgYSBmZXcgdmFyaWFibGVzICovCisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIGlmIChkZW1vX21vZGUpIHsKKwlISVNUX3RpbWVzdGFtcChkZW1vX29uZV9wdHIpOworICAgICAgfQorI2VuZGlmCisgICAgICAKKworICAgIC8qIFdlIHVzZSBhbiAiT1IiIHRvIGNvbnRyb2wgdGVzdCBleGVjdXRpb24uIFdoZW4gdGhlIHRlc3QgaXMgKi8KKyAgICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gKi8KKyAgICAvKiBXaGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCwgdGhlIHRpbWUgdGVzdCB3aWxsICovCisgICAgLyogYWx3YXlzIHJldHVybiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgdGhlIHdob2xlICovCisgICAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiAqLworICAgIAorICAgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAoYnl0ZXNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAgIAorI2lmZGVmIERJUlRZCisgICAgICBhY2Nlc3NfYnVmZmVyKHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgIHNlbmRfc2l6ZSwKKwkJICAgIGxvY19kaXJ0eV9jb3VudCwKKwkJICAgIGxvY19jbGVhbl9jb3VudCk7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICAgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworCS8qIHRpbWVzdGFtcCBqdXN0IGJlZm9yZSB3ZSBnbyBpbnRvIHNlbmQgYW5kIHRoZW4gYWdhaW4ganVzdAorCSBhZnRlciB3ZSBjb21lIG91dCByYWogOC85NCAqLworCS8qIGJ1dCBsZXRzIG9ubHkgZG8gdGhpcyBpZiB0aGVyZSBpcyBnb2luZyB0byBiZSBhIGhpc3RvZ3JhbQorCSAgIGRpc3BsYXllZCAqLworCUhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworICAgICAgaWYoKGxlbj1zZW5kKHNlbmRfc29ja2V0LAorCQkgICBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCSAgIHNlbmRfc2l6ZSwKKwkJICAgMCkpICE9IHNlbmRfc2l6ZSkgeworICAgICAgaWYgKChsZW4gPj0wKSB8fCBTT0NLRVRfRUlOVFIobGVuKSkgeworCSAgICAvKiB0aGUgdGVzdCB3YXMgaW50ZXJydXB0ZWQsIG11c3QgYmUgdGhlIGVuZCBvZiB0ZXN0ICovCisJICAgIGJyZWFrOworCSAgfQorCXBlcnJvcigibmV0cGVyZjogZGF0YSBzZW5kIGVycm9yIik7CisJcHJpbnRmKCJsZW4gd2FzICVkXG4iLGxlbik7CisJZXhpdCgxKTsKKyAgICAgIH0KKworICAgICAgbG9jYWxfYnl0ZXNfc2VudCArPSBzZW5kX3NpemU7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwkvKiB0aW1lc3RhbXAgdGhlIGV4aXQgZnJvbSB0aGUgc2VuZCBjYWxsIGFuZCB1cGRhdGUgdGhlIGhpc3RvZ3JhbSAqLworCUhJU1RfdGltZXN0YW1wKCZ0aW1lX3R3byk7CisJSElTVF9hZGQodGltZV9oaXN0LGRlbHRhX21pY3JvKCZ0aW1lX29uZSwmdGltZV90d28pKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLyAgICAgIAorCisjaWZkZWYgV0FOVF9ERU1PCisgICAgICBERU1PX1NUUkVBTV9JTlRFUlZBTChzZW5kX3NpemUpCisjZW5kaWYgCisKKyNpZiBkZWZpbmVkKFdBTlRfSU5URVJWQUxTKQorICAgICAgSU5URVJWQUxTX1dBSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgICAgCisgICAgICAvKiBub3cgd2Ugd2FudCB0byBtb3ZlIG91ciBwb2ludGVyIHRvIHRoZSBuZXh0IHBvc2l0aW9uIGluIHRoZSAqLworICAgICAgLyogZGF0YSBidWZmZXIuLi53ZSBtYXkgYWxzbyB3YW50IHRvIHdyYXAgYmFjayB0byB0aGUgImJlZ2lubmluZyIgKi8KKyAgICAgIC8qIG9mIHRoZSBidWZmZXJzcGFjZSwgc28gd2Ugd2lsbCBtb2QgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBzZW50ICovCisgICAgICAvKiBieSB0aGUgc2VuZCB3aWR0aCwgYW5kIHVzZSB0aGF0IHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IHRvIGFkZCAqLworICAgICAgLyogdG8gdGhlIGJhc2UgcG9pbnRlci4gKi8KKyAgICAgIG51bW1lc3NhZ2VzKys7ICAgICAgICAgIAorICAgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgICAgaWYgKGJ5dGVzX3JlbWFpbmluZykgeworCWJ5dGVzX3JlbWFpbmluZyAtPSBzZW5kX3NpemU7CisgICAgICB9CisgICAgfQorCisgICAgLyogVGhlIHRlc3QgaXMgb3Zlci4gRmx1c2ggdGhlIGJ1ZmZlcnMgdG8gdGhlIHJlbW90ZSBlbmQuIFdlIGRvIGEgKi8KKyAgICAvKiBncmFjZWZ1bCByZWxlYXNlIHRvIGluc3VyZSB0aGF0IGFsbCBkYXRhIGhhcyBiZWVuIHRha2VuIGJ5IHRoZSAqLworICAgIC8qIHJlbW90ZS4gKi8gCisKKyAgICAvKiBidXQgZmlyc3QsIGlmIHRoZSB2ZXJib3NpdHkgaXMgZ3JlYXRlciB0aGFuIDEsIGZpbmQtb3V0IHdoYXQgKi8KKyAgICAvKiB0aGUgVENQIG1heGltdW0gc2VnbWVudF9zaXplIHdhcyAoaWYgcG9zc2libGUpICovCisgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAgIHRjcF9tc3MgPSAtMTsKKyAgICAgIGdldF90Y3BfaW5mbyhzZW5kX3NvY2tldCwmdGNwX21zcyk7CisgICAgfQorICAgIAorICAgIGlmIChzaHV0ZG93bihzZW5kX3NvY2tldCxTSFVUX1dSKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogY2Fubm90IHNodXRkb3duIHRjcCBzdHJlYW0gc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiBoYW5nIGEgcmVjdigpIG9mZiB0aGUgc29ja2V0IHRvIGJsb2NrIHVudGlsIHRoZSByZW1vdGUgaGFzICovCisgICAgLyogYnJvdWdodCBhbGwgdGhlIGRhdGEgdXAgaW50byB0aGUgYXBwbGljYXRpb24uIGl0IHdpbGwgZG8gYSAqLworICAgIC8qIHNodXRkb3duIHRvIGNhdXNlIGEgRklOIHRvIGJlIHNlbnQgb3VyIHdheS4gV2Ugd2lsbCBhc3N1bWUgdGhhdCAqLworICAgIC8qIGFueSBleGl0IGZyb20gdGhlIHJlY3YoKSBjYWxsIGlzIGdvb2QuLi4gcmFqIDQvOTMgKi8KKyAgICAKKyAgICByZWN2KHNlbmRfc29ja2V0LCBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsIHNlbmRfc2l6ZSwgMCk7CisgICAgCisgICAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAgIC8qIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1IHV0aWxpemF0aW9uICovCisgICAgCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nICovCisJCQkJCQkvKiBtZWFzdXJlZCBhbmQgaG93ICovCisJCQkJCQkvKiBsb25nIGRpZCB3ZSByZWFsbHkgKi8KKwkJCQkJCS8qIHJ1bj8gKi8KKyAgICAKKyAgICAvKiB3ZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgc29ja2V0LCBzbyBjbG9zZSBpdCB0byBwcmV2ZW50IGhpdHRpbmcgKi8KKyAgICAvKiB0aGUgbGltaXQgb24gbWF4aW11bSBvcGVuIGZpbGVzLiAqLworCisgICAgY2xvc2Uoc2VuZF9zb2NrZXQpOworCisgICAgaWYgKCFub19jb250cm9sKSB7CisgICAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUKKwkgY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nCisJIHRoaW5ncy4gSWYgaXQgd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMKKwkgdmFsdWVzLiAqLworICAgIAorICAgICAgcmVjdl9yZXNwb25zZSgpOworICAgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworCWlmIChkZWJ1ZykgCisJICBmcHJpbnRmKHdoZXJlLAorCQkgICJyZW1vdGUgcmVwb3J0aW5nIHJlc3VsdHMgZm9yICUuMmYgc2Vjb25kc1xuIiwKKwkJICB0Y3Bfc3RyZWFtX3Jlc3VsdC0+ZWxhcHNlZF90aW1lKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJZnByaW50Zih3aGVyZSwKKwkJIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlwZXJyb3IoIiIpOworCWZmbHVzaCh3aGVyZSk7CisJCisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAKKyAgICAgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhydXB1dCB3YXMgZm9yIHRoZSB0ZXN0LiBJbiB0aGUKKwkgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBpbmNsdWRlIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRocnVwdXQKKwkgbWVhc3VyZWQgYnkgdGhlIHJlbW90ZSwgYnV0IGl0IHNob3VsZCBiZSB0aGUgY2FzZSB0aGF0IGZvciBhCisJIFRDUCBzdHJlYW0gdGVzdCwgdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KgorCSBjbG9zZS4uLiBXZSBjYWxjdWxhdGUgYnl0ZXNfc2VudCByZWdhcmRsZXNzIG9mIHRoZSB3YXkgdGhlCisJIHRlc3QgbGVuZ3RoIHdhcyBjb250cm9sbGVkLiAgSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywKKwkgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5IGhhdmUgc3BlY2lmaWVkIGEgbnVtYmVyCisJIG9mIGJ5dGVzIHRoYXQgd2Fzbid0IGEgbXVsdGlwbGUgb2YgdGhlIHNlbmRfc2l6ZSwgc28gd2UKKwkgcmVhbGx5IGRpZG4ndCBzZW5kIHdoYXQgaGUgYXNrZWQgZm9yIDstKSAqLworICAgIAorICAgICAgYnl0ZXNfc2VudAk9IG50b2hkKHRjcF9zdHJlYW1fcmVzdWx0LT5ieXRlc19yZWNlaXZlZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYnl0ZXNfc2VudCA9IChkb3VibGUpbG9jYWxfYnl0ZXNfc2VudDsKKyAgICB9CisKKyAgICB0aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3NlbnQpOworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgICAgLyogdGhlcmUgd2FzIG5vIGlkbGUgY291bnRlciBpbiB0aGUga2VybmVsKHMpLiBXZSBuZWVkIHRvIG1ha2UgKi8KKyAgICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCQorCWxvY2FsX2NwdV91dGlsaXphdGlvbgk9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgICAgfQorICAgICAgZWxzZSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgfQorICAgICAgCisgICAgICBpZiAocmVtb3RlX2NwdV91c2FnZSkgeworCQorCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24JPSB0Y3Bfc3RyZWFtX3Jlc3VsdC0+Y3B1X3V0aWw7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19zZW50LAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgICAgIHRjcF9zdHJlYW1fcmVzdWx0LT5udW1fY3B1cyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgfSAgICAKKyAgICBlbHNlIHsKKyAgICAgIC8qIHdlIHdlcmUgbm90IG1lYXN1cmluZyBjcHUsIGZvciB0aGUgY29uZmlkZW5jZSBzdHVmZiwgd2UgKi8KKyAgICAgIC8qIHNob3VsZCBtYWtlIGl0IC0xLjAgKi8KKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbgk9IChmbG9hdCkgLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgfQorCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW5mb3JtYXRpb24uICovCisgICAgLyogaWYgZGVidWdnaW5nIGlzIG9uLCBjYWxjdWxhdGVfY29uZmlkZW5jZSB3aWxsIHByaW50LW91dCB0aGUgKi8KKyAgICAvKiBwYXJhbWV0ZXJzIHdlIHBhc3MgaXQgKi8KKyAgICAKKyAgICBjYWxjdWxhdGVfY29uZmlkZW5jZShjb25maWRlbmNlX2l0ZXJhdGlvbiwKKwkJCSBlbGFwc2VkX3RpbWUsCisJCQkgdGhydXB1dCwKKwkJCSBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSByZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgIAorICAgIAorICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uKys7CisgIH0KKworICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGZpbmlzaGVkIG1ha2luZyBhbGwgdGhlIHJ1bnMgdGhhdCB3ZSAqLworICAvKiB3aWxsIGJlIG1ha2luZy4gc28sIHdlIHNob3VsZCBleHRyYWN0IHdoYXQgdGhlIGNhbGN1YXRlZCB2YWx1ZXMgKi8KKyAgLyogYXJlIGZvciBhbGwgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYuIHdlIGNvdWxkIG1ha2UgdGhlIHZhbHVlcyAqLworICAvKiBnbG9iYWwsIGJ1dCB0aGF0IHNlZW1lZCBhIGxpdHRsZSBtZXNzeSwgYW5kIGl0IGRpZCBub3Qgc2VlbSB3b3J0aCAqLworICAvKiBhbGwgdGhlIG11Y2tpbmcgd2l0aCBoZWFkZXIgZmlsZXMuIHNvLCB3ZSBjcmVhdGUgYSByb3V0aW5lIG11Y2ggKi8KKyAgLyogbGlrZSBjYWxjdWFsdGVfY29uZmlkZW5jZSwgd2hpY2gganVzdCByZXR1cm5zIHRoZSBtZWFuIHZhbHVlcy4gKi8KKyAgLyogcmFqIDExLzk0ICovCisKKyAgcmV0cmlldmVfY29uZmlkZW50X3ZhbHVlcygmZWxhcHNlZF90aW1lLAorCQkJICAgICZ0aHJ1cHV0LAorCQkJICAgICZsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgICAgJnJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkgICAgJmxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJICAgICZyZW1vdGVfc2VydmljZV9kZW1hbmQpOworCisgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworCisgIGlmIChjb25maWRlbmNlIDwgMCkgeworICAgIC8qIHdlIGRpZCBub3QgaGl0IGNvbmZpZGVuY2UsIGJ1dCB3ZXJlIHdlIGFza2VkIHRvIGxvb2sgZm9yIGl0PyAqLworICAgIGlmIChpdGVyYXRpb25fbWF4ID4gMSkgeworICAgICAgZGlzcGxheV9jb25maWRlbmNlKCk7CisgICAgfQorICB9CisKKyAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgbG9jYWxfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKGNwdV9tZXRob2QpOworICAgIHJlbW90ZV9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QodGNwX3N0cmVhbV9yZXN1bHQtPmNwdV9tZXRob2QpOworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCSgocHJpbnRfaGVhZGVycykgfHwgCisJCSAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorCQlyZW1vdGVfY3B1X21ldGhvZCwKKwkJKChwcmludF9oZWFkZXJzKSB8fCAKKwkJIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJCWZwcmludGYod2hlcmUsCisJCWNwdV90aXRsZSwKKwkJZm9ybWF0X3VuaXRzKCksCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCXJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICByc3Jfc2l6ZSwJCSAgICAgICAgLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGxzc19zaXplLAkJICAgICAgICAvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LCAJCSAgICAgICAgLyogd2hhdCB3YXMgdGhlIHhmZXIgcmF0ZSAqLworCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgKChwcmludF9oZWFkZXJzKSB8fCAKKwkgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICB0aHJ1cHV0LAorCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJCWZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgICB9CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIHJzcl9zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICBsc3Nfc2l6ZSwgCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICB0aHJ1cHV0LCAgICAgICAgICAgICAgICAgIC8qIGhvdyBmYXN0IGRpZCBpdCBnbyAqLworCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvKiBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBzb21lIG9mIHRoZSAqLworICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAvKiBtb21lbnQsIEkgZG8gbm90IHdpc2ggdG8gZmlndXJlLW91dCBhbGwgdGhlICBmb3JtYXR0aW5nLCBzbyBJIHdpbGwgKi8KKyAgLyoganVzdCBwdXQgdGhpcyBjb21tZW50IGhlcmUgdG8gaGVscCByZW1pbmQgbWUgdGhhdCBpdCBpcyBzb21ldGhpbmcgKi8KKyAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisgIAorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgIAorICAgIC8qIHRoaXMgc3R1ZmYgbmVlZHMgdG8gYmUgd29ya2VkLW91dCBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZmlkZW5jZSAqLworICAgIC8qIGludGVydmFscyBhbmQgbXVsdGlwbGUgaXRlcmF0aW9ucyBvZiB0aGUgdGVzdC4uLiByYWogMTEvOTQgKi8KKyAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X2FsaWduLAorCSAgICBsb2NhbF9zZW5kX29mZnNldCwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICBieXRlc19zZW50LAorCSAgICBieXRlc19zZW50IC8gKGRvdWJsZSludW1tZXNzYWdlcywKKwkgICAgbnVtbWVzc2FnZXMsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKXRjcF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzLAorCSAgICB0Y3Bfc3RyZWFtX3Jlc3VsdC0+cmVjdl9jYWxscyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAga3NpbmtfZm10MiwKKwkgICAgdGNwX21zcyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuXG5IaXN0b2dyYW0gb2YgdGltZSBzcGVudCBpbiBzZW5kKCkgY2FsbC5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICB9CisgIAorfQorCisMCisKKy8qIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBuZXRwZXJmLXNpZGUgVENQIHVuaWRpcmVjdGlvbmFsIGRhdGEKKyAgIHRyYW5zZmVyIHRlc3QgKGEuay5hLiBzdHJlYW0pIGZvciB0aGUgc29ja2V0cyBpbnRlcmZhY2Ugd2hlcmUgdGhlCisgICBkYXRhIGZsb3cgaXMgZnJvbSB0aGUgbmV0c2VydmVyIHRvIHRoZSBuZXRwZXJmLiAgSXQgcmVjZWl2ZXMgaXRzCisgICBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwgdmFyaWFibGVzIGZyb20gdGhlIHNoZWxsIGFuZCB3cml0ZXMgaXRzCisgICBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKworCit2b2lkIAorc2VuZF90Y3BfbWFlcnRzKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIFxuXAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgJXMvc2VjICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZiAlc1xuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzEgPQorICAgICIlNmQgJTZkICU2ZCAgICAlLTYuMmYgICAlNy4yZiAgICVzXG4iOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpemF0aW9uICAgICAgIFNlcnZpY2UgRGVtYW5kXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBSZWN2ICAgICBTZW5kICAgICBSZWN2ICAgIFNlbmRcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIGxvY2FsICAgIHJlbW90ZSAgIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAlLTguOHMvcyAgJSUgJWMgICAgICAlJSAlYyAgICAgIHVzL0tCICAgdXMvS0JcblxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMCA9CisgICAgIiU2LjNmICVjICVzXG4iOworCisgIGNoYXIgKmNwdV9mbXRfMSA9CisgICAgIiU2ZCAlNmQgJTZkICAgICUtNi4yZiAgICAgJTcuMmYgICAlLTYuMmYgICAlLTYuMmYgICAlLTYuM2YgICUtNi4zZiAlc1xuIjsKKyAgCisgIGNoYXIgKmtzaW5rX2ZtdCA9ICJcblwKK0FsaWdubWVudCAgICAgIE9mZnNldCAgICAgICAgICUtOC44cyAlLTguOHMgICAgUmVjdnMgICAlLTguOHMgU2VuZHNcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGUgIFhmZXJlZCAgIFBlciAgICAgICAgICAgICAgICAgUGVyXG5cCitSZWN2ICAgU2VuZCAgICBSZWN2ICAgU2VuZCAgICAgICAgICAgICBSZWN2IChhdmcpICAgICAgICAgIFNlbmQgKGF2ZylcblwKKyU1ZCAgICU1ZCAgJTVkICAgJTVkICU2LjRnICAlNi4yZiAgICAlNmQgICAlNi4yZiAlNmRcbiI7CisKKyAgY2hhciAqa3NpbmtfZm10MiA9ICJcblwKK01heGltdW1cblwKK1NlZ21lbnRcblwKK1NpemUgKGJ5dGVzKVxuXAorJTZkXG4iOworICAKKyAgCisgIGZsb2F0CQkJZWxhcHNlZF90aW1lOworICAKKyAgLyogd2hhdCB3ZSB3YW50IGlzIHRvIGhhdmUgYSBidWZmZXIgc3BhY2UgdGhhdCBpcyBhdCBsZWFzdCBvbmUgKi8KKyAgLyogcmVjdi1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgcmVjdiB3aW5kb3cuIHRoaXMgd2lsbCBpbnN1cmUgdGhhdCB3ZSAqLworICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgLyogb2YgdGhlIHRyYW5zcG9ydC4gVGhpcyBidWZmZXIgd2lsbCBiZSBtYWxsb2MnZCBhZnRlciB3ZSBoYXZlIGZvdW5kICovCisgIC8qIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBzZW5jIHNvY2tldCBidWZmZXIuIFdlIHdpbGwgd2FudCB0byBkZWFsICovCisgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworICAKKyAgaW50IGxlbjsKKyAgdW5zaWduZWQgaW50IG51bW1lc3NhZ2VzID0gMDsKKyAgU09DS0VUIHJlY3Zfc29ja2V0OworICBpbnQgYnl0ZXNfcmVtYWluaW5nOworICBpbnQgdGNwX21zcyA9IC0xOyAgLyogcG9zc2libHkgdW5pbml0aWFsaXplZCBvbiBwcmludGYgZmFyIGJlbG93ICovCisKKyAgLyogd2l0aCBsaW5rcyBsaWtlIGZkZGksIG9uZSBjYW4gcmVjdiA+IDMyIGJpdHMgd29ydGggb2YgYnl0ZXMgKi8KKyAgLyogZHVyaW5nIGEgdGVzdC4uLiA7LSkgYXQgc29tZSBwb2ludCwgdGhpcyBzaG91bGQgcHJvYmFibHkgYmVjb21lIGEgKi8KKyAgLyogNjRiaXQgaW50ZWdyYWwgdHlwZSwgYnV0IHRob3NlIGFyZSBub3QgZW50aXJlbHkgY29tbW9uIHlldCAqLworICBkb3VibGUJYnl0ZXNfc2VudCA9IDAuMDsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGxvY2FsX2J5dGVzX3JlY3ZkID0gMDsKKworICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICAKKyAgc3RydWN0CXRjcF9tYWVydHNfcmVxdWVzdF9zdHJ1Y3QJKnRjcF9tYWVydHNfcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9tYWVydHNfcmVzcG9uc2Vfc3RydWN0CSp0Y3BfbWFlcnRzX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX21hZXJ0c19yZXN1bHRzX3N0cnVjdAkqdGNwX21hZXJ0c19yZXN1bHQ7CisgIAorICB0Y3BfbWFlcnRzX3JlcXVlc3QgID0gCisgICAgKHN0cnVjdCB0Y3BfbWFlcnRzX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfbWFlcnRzX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHRjcF9tYWVydHNfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX21hZXJ0c19yZXN1bHQgICA9IAorICAgIChzdHJ1Y3QgdGNwX21hZXJ0c19yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIlRDUCBNQUVSVFMgVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICB9CisKKyAgcmVjdl9yaW5nID0gTlVMTDsKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKworICAvKiB3ZSBoYXZlIGEgZ3JlYXQtYmlnIHdoaWxlIGxvb3Agd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyAqLworICAvKiB3ZSBydW4gYSBwYXJ0aWN1bGFyIHRlc3QuIHRoaXMgaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBhICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKEkgcmVhbGx5IHNob3VsZCBoYXZlIHN0YXllZCBhd2FrZSBkdXJpbmcgKi8KKyAgLyogcHJvYnN0YXRzIDopLiBJZiB0aGUgdXNlciBkaWQgbm90IHJlcXVlc3QgY29uZmlkZW5jZSBtZWFzdXJlbWVudCAqLworICAvKiAobm8gY29uZmlkZW5jZSBpcyB0aGUgZGVmYXVsdCkgdGhlbiB3ZSB3aWxsIG9ubHkgZ28gdGhvdWdoIHRoZSAqLworICAvKiBsb29wIG9uY2UuIHRoZSBjb25maWRlbmNlIHN0dWZmIG9yaWdpbmF0ZXMgZnJvbSB0aGUgZm9sa3MgYXQgSUJNICovCisKKyAgd2hpbGUgKCgoY29uZmlkZW5jZSA8IDApICYmIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8IGl0ZXJhdGlvbl9tYXgpKSB8fAorCSAoY29uZmlkZW5jZV9pdGVyYXRpb24gPD0gaXRlcmF0aW9uX21pbikpIHsKKworICAgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMuIHdlIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZSBtaWdodCBiZSAqLworICAgIC8qIGdvaW5nIHRocm91Z2ggdGhlIGxvb3AgbW9yZSB0aGFuIG9uY2UuICovCisgICAgCisgICAgbnVtbWVzc2FnZXMgICAgPQkwOworICAgIGJ5dGVzX3NlbnQgICAgID0JMC4wOworICAgIHRpbWVzX3VwICAgICAgID0gCTA7CisgICAgCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICByZWN2X3NvY2tldCA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAgIAorICAgIGlmIChyZWN2X3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfdGNwX21hZXJ0czogdGNwIHN0cmVhbSBkYXRhIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX3RjcF9tYWVydHM6IHJlY3Zfc29ja2V0IG9idGFpbmVkLi4uXG4iKTsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGVpdGhlciByZXRyaWV2ZWQgdGhlIHNvY2tldCBidWZmZXIgc2l6ZXMsICovCisgICAgLyogb3IgaGF2ZSB0cmllZCB0byBzZXQgdGhlbSwgc28gbm93LCB3ZSBtYXkgd2FudCB0byBzZXQgdGhlIHJlY3YgKi8KKyAgICAvKiBzaXplIGJhc2VkIG9uIHRoYXQgKGJlY2F1c2UgdGhlIHVzZXIgZWl0aGVyIGRpZCBub3QgdXNlIGEgLW0gKi8KKyAgICAvKiBvcHRpb24sIG9yIHVzZWQgb25lIHdpdGggYW4gYXJndW1lbnQgb2YgMCkuIElmIHRoZSBzb2NrZXQgYnVmZmVyICovCisgICAgLyogc2l6ZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3aWxsIHNldCB0aGUgcmVjdiBzaXplIHRvIDRLQiAtIG5vICovCisgICAgLyogcGFydGljdWxhciByZWFzb24sIGp1c3QgYXJiaXRyYXJ5Li4uICovCisgICAgaWYgKHJlY3Zfc2l6ZSA9PSAwKSB7CisgICAgICBpZiAobHNyX3NpemUgPiAwKSB7CisJcmVjdl9zaXplID0gbHNyX3NpemU7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZWN2X3NpemUgPSA0MDk2OworICAgICAgfQorICAgIH0KKworICAgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgcmluZyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQuICovCisgICAgLyogbm90ZSBhbHNvIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgYSBxdWFudGl0eSAqLworICAgIC8qIG9mIG1lbW9yeSB0aGF0IGlzIGF0IGxlYXN0IG9uZSByZWN2LXNpemUgZ3JlYXRlciB0aGFuIG91ciBzb2NrZXQgKi8KKyAgICAvKiBidWZmZXIgc2l6ZS4gV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAqLworICAgIC8qIGJ1ZmZlcnMgYWxsb2NhdGVkIC0gdGhpcyBjYW4gYmUgYSBiaXQgb2YgYSBwcm9ibGVtIHdoZW4gdGhlICovCisgICAgLyogcmVjdl9zaXplIGlzIGJpZ2dlciB0aGFuIHRoZSBzb2NrZXQgc2l6ZSwgc28gd2UgbXVzdCBjaGVjay4uLiB0aGUgKi8KKyAgICAvKiB1c2VyIG1heSBoYXZlIHdhbnRlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgIndpZHRoIiBvZiBvdXIgcmVjdiAqLworICAgIC8qIGJ1ZmZlcnMsIHdlIHNob3VsZCByZXNwZWN0IHRoYXQgd2lzaC4uLiAqLworICAgIGlmIChyZWN2X3dpZHRoID09IDApIHsKKyAgICAgIHJlY3Zfd2lkdGggPSAobHNyX3NpemUvcmVjdl9zaXplKSArIDE7CisgICAgICBpZiAocmVjdl93aWR0aCA9PSAxKSByZWN2X3dpZHRoKys7CisgICAgfQorICAgIAorICAgIGlmIChyZWN2X3JpbmcgPT0gTlVMTCkgeworICAgICAgLyogb25seSBhbGxvY2F0ZSB0aGUgcmVjdiByaW5nIG9uY2UuIHRoaXMgaXMgYSBuZXR3b3JraW5nIHRlc3QsICovCisgICAgICAvKiBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbiB0ZXN0LiB0aGlzIHdheSwgd2UgZG8gbm90IG5lZWQgYSAqLworICAgICAgLyogZGVhbGxvY2F0ZV9idWZmZXJfcmluZygpIHJvdXRpbmUsIGFuZCBJIGRvbid0IGZlZWwgbGlrZSAqLworICAgICAgLyogd3JpdGluZyBvbmUgYW55d2F5IDopIHJhaiAxMS85NCAqLworICAgICAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICAgICAgcmVjdl9zaXplLAorCQkJCSAgICAgICBsb2NhbF9yZWN2X2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9yZWN2X29mZnNldCk7CisgICAgfQorCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiAqLworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgICAgfQorICAgIAorICAgIGlmICghbm9fY29udHJvbCkgeworICAgICAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlCisJIHNvY2tldCBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlCisJIHJlYXNvbiBmb3IgYWxsIHRoZSB2YWx1ZXMgYmVpbmcgcGFzc2VkIGluIHRoZSBzZXR1cAorCSBtZXNzYWdlLiBJZiB0aGUgdXNlciBkaWQgbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLAorCSB0aGV5IHdpbGwgYmUgcGFzc2VkIGFzIDAsIHdoaWNoIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZQorCSB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHNob3VsZCBiZQorCSB1c2VkLiBBbGlnbm1lbnQgaXMgdGhlIGV4Y2VwdGlvbiwgaXQgd2lsbCBkZWZhdWx0IHRvIDEsIHdoaWNoCisJIHdpbGwgYmUgbm8gYWxpZ25tZW50IGFsdGVyYXRpb25zLiAqLworCisgICAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJPQlET19UQ1BfTUFFUlRTOworICAgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplCT0JcnNzX3NpemVfcmVxOworICAgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemVfcmVxOworICAgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5zZW5kX3NpemUJPQlzZW5kX3NpemU7CisgICAgICB0Y3BfbWFlcnRzX3JlcXVlc3QtPm5vX2RlbGF5CT0JcmVtX25vZGVsYXk7CisgICAgICB0Y3BfbWFlcnRzX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50CT0JcmVtb3RlX3NlbmRfYWxpZ247CisgICAgICB0Y3BfbWFlcnRzX3JlcXVlc3QtPnNlbmRfb2Zmc2V0CT0JcmVtb3RlX3NlbmRfb2Zmc2V0OworICAgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5tZWFzdXJlX2NwdQk9CXJlbW90ZV9jcHVfdXNhZ2U7CisgICAgICB0Y3BfbWFlcnRzX3JlcXVlc3QtPmNwdV9yYXRlCT0JcmVtb3RlX2NwdV9yYXRlOworICAgICAgaWYgKHRlc3RfdGltZSkgeworCXRjcF9tYWVydHNfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RpbWU7CisgICAgICB9CisgICAgICBlbHNlIHsKKwl0Y3BfbWFlcnRzX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF9ieXRlczsKKyAgICAgIH0KKyAgICAgIHRjcF9tYWVydHNfcmVxdWVzdC0+c29fcmN2YXZvaWQJPQlyZW1fcmN2YXZvaWQ7CisgICAgICB0Y3BfbWFlcnRzX3JlcXVlc3QtPnNvX3NuZGF2b2lkCT0JcmVtX3NuZGF2b2lkOworI2lmZGVmIERJUlRZCisgICAgICB0Y3BfbWFlcnRzX3JlcXVlc3QtPmRpcnR5X2NvdW50ICAgICAgID0gICAgICAgcmVtX2RpcnR5X2NvdW50OworICAgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICAgICA9ICAgICAgIHJlbV9jbGVhbl9jb3VudDsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5wb3J0ICAgICAgICAgICAgPSBhdG9pKHJlbW90ZV9kYXRhX3BvcnQpOworICAgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5pcGZhbWlseSAgICAgICAgPSBhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworICAgICAgaWYgKGRlYnVnID4gMSkgeworCWZwcmludGYod2hlcmUsCisJCSJuZXRwZXJmOiBzZW5kX3RjcF9tYWVydHM6IHJlcXVlc3RpbmcgVENQIG1hZXJ0cyB0ZXN0XG4iKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgICAKKyAgICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQKKwkgc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sKKwkgaW50byB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuCisJIFRoZSByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwKKwkgaGF2ZSBkb25lIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUKKwkgY3B1IGxvY2FsbHkgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlCisJIGNvdW50ZXIgdmFsdWUgcmlnaHQgYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZQorCSB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQgYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzCisJIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMgYmVpbmcgc2VudCBmb3IgdGhlIFRDUAorCSB0ZXN0cy4gICovCisgICAgICAKKyAgICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICAKKyAgICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKwlpZiAoZGVidWcpCisJICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKwlyc3Jfc2l6ZQk9CXRjcF9tYWVydHNfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisJcnNzX3NpemUJPQl0Y3BfbWFlcnRzX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplOworCXJlbV9ub2RlbGF5ICAgICA9CXRjcF9tYWVydHNfcmVzcG9uc2UtPm5vX2RlbGF5OworCXJlbW90ZV9jcHVfdXNhZ2U9CXRjcF9tYWVydHNfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworCXJlbW90ZV9jcHVfcmF0ZSA9IHRjcF9tYWVydHNfcmVzcG9uc2UtPmNwdV9yYXRlOworCXNlbmRfc2l6ZSAgICAgICA9IHRjcF9tYWVydHNfcmVzcG9uc2UtPnNlbmRfc2l6ZTsKKwkKKwkvKiB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIgcG9ydCBudW1iZXIgaXMgaW4KKwkgbmV0d29yayBvcmRlciAqLworICAgICAgc2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMsCisJCSAgICAgIChzaG9ydCl0Y3BfbWFlcnRzX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyKTsKKyAgICAgIHJlbV9yY3Zhdm9pZAk9IHRjcF9tYWVydHNfcmVzcG9uc2UtPnNvX3JjdmF2b2lkOworICAgICAgcmVtX3NuZGF2b2lkCT0gdGNwX21hZXJ0c19yZXNwb25zZS0+c29fc25kYXZvaWQ7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCWZwcmludGYod2hlcmUsCisJCSJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCQluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJcGVycm9yKCIiKTsKKwlmZmx1c2god2hlcmUpOworCQorCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorCisjaWZkZWYgV0FOVF9ERU1PCisgICAgREVNT19TVFJFQU1fU0VUVVAobHNyX3NpemUscnNzX3NpemUpCisjZW5kaWYKKworICAgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICAgIGlmIChjb25uZWN0KHJlY3Zfc29ja2V0LCAKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkcmxlbikgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3RjcF9tYWVydHM6IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworI2lmZGVmIFdJTjMyCisgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgIC8qIFdpbmRvd3Mtc3BlY2lmaWMgd2F5IEkgY2FuIGZpbmQgdG8gZm9yY2UgdGhlIHdpbnNvY2sgY2FsbHMgdG8gKi8KKyAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAvKiBhbmQgc3VjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCByYWogMS85NiAqLworICB3aW5fa2x1ZGdlX3NvY2tldCA9IHJlY3Zfc29ja2V0OworI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciAqLworICAgIC8qIHRoZSBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgKi8KKyAgICAvKiBoYXZlIGluZGljYXRlZCBhIHByb2JsZW0uIEkgZmFpbGVkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlICovCisgICAgLyogZXh0cmEgIG1lc3NhZ2UgYWZ0ZXIgdGhlIGFjY2VwdCBvbiB0aGUgcmVtb3RlLiBJZiBpdCBmYWlsZWQsICovCisgICAgLyogd2UnbGwgc2VlIGl0IGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nICovCisgICAgLyogZGF0YS4gKi8gCisgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSBtYWVydHMgdGVzdCwgdGhleSBjYW4gYmUgKi8KKyAgICAvKiBlaXRoZXIgdGltZSBvciBieXRlLWNvdW50IGJhc2VkLiAqLworICAgIAorICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICAgIHRpbWVzX3VwID0gMDsKKyAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IDA7CisgICAgICAvKiBpbiBwcmV2aW91cyByZXZpc2lvbnMsIHdlIGhhZCB0aGUgc2FtZSBjb2RlIHJlcGVhdGVkIHRocm91Z2h0ICovCisgICAgICAvKiBhbGwgdGhlIHRlc3Qgc3VpdGVzLiB0aGlzIHdhcyB1bm5lY2Vzc2FyeSwgYW5kIG1lYW50IG1vcmUgKi8KKyAgICAgIC8qIHdvcmsgZm9yIG1lIHdoZW4gSSB3YW50ZWQgdG8gc3dpdGNoIHRvIFBPU0lYIHNpZ25hbHMsIHNvIEkgKi8KKyAgICAgIC8qIGhhdmUgYWJzdHJhY3RlZCB0aGlzIG91dCBpbnRvIGEgcm91dGluZSBpbiBuZXRsaWIuYy4gaWYgeW91ICovCisgICAgICAvKiBhcmUgZXhwZXJpZW5jaW5nIHNpZ25hbCBwcm9ibGVtcywgeW91IG1pZ2h0IHdhbnQgdG8gbG9vayAqLworICAgICAgLyogdGhlcmUuIHJhaiAxMS85NCAqLworICAgICAgaWYgKCFub19jb250cm9sKSB7CisJLyogdGhpcyBpcyBhIG5ldHBlcmYgdG8gbmV0c2VydmVyIHRlc3QsIG5ldHNlcnZlciB3aWxsIGNsb3NlCisJICAgdG8gdGVsbCB1cyB0aGUgdGVzdCBpcyBvdmVyLCBzbyB1c2UgUEFEX1RJTUUgdG8gYXZvaWQKKwkgICBjYXVzaW5nIHRoZSBuZXRzZXJ2ZXIgZml0cy4gKi8KKwlzdGFydF90aW1lcih0ZXN0X3RpbWUgKyBQQURfVElNRSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwkvKiB0aGlzIGlzIGEgbmV0cGVyZiB0byBkYXRhIHNvdXJjZSB0ZXN0LCBubyBQQURfVElNRSAqLworCXN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gcmVjdiBhIG51bWJlciBvZiBieXRlcy4gd2UgZG9uJ3QgZG8gdGhhdCAKKwkgaW4gYSBUQ1BfTUFFUlRTIHRlc3QuIHNvcnJ5LiByYWogMjAwMi0wNi0yMSAqLworICAgICAgcHJpbnRmKCJuZXRwZXJmOiBzZW5kX3RjcF9tYWVydHM6IHRlc3QgbXVzdCBiZSB0aW1lZFxuIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgICAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgICAgCisgICAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisgICAgCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBJTlRFUlZBTFNfSU5JVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisKKyAgICAvKiBiZWZvcmUgd2Ugc3RhcnQsIGluaXRpYWxpemUgYSBmZXcgdmFyaWFibGVzICovCisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICBpZiAoZGVtb19tb2RlKSB7CisgICAgICBISVNUX3RpbWVzdGFtcChkZW1vX29uZV9wdHIpOworICAgIH0KKyNlbmRpZgorCisgICAgLyogdGhlIHRlc3Qgd2lsbCBjb250aW51ZSB1bnRpbCB3ZSBlaXRoZXIgZ2V0IGEgemVyby1ieXRlIHJlY3YoKQorICAgICAgIG9uIHRoZSBzb2NrZXQgb3Igb3VyIGZhaWxzYWZlIHRpbWVyIGV4cGlyZXMuIG1vc3Qgb2YgdGhlIHRpbWUKKyAgICAgICB3ZSB0cnVzdCB0aGF0IHdlIGdldCBhIHplcm8tYnl0ZSByZWNpZXZlIGZyb20gdGhlIHNvY2tldC4gcmFqCisgICAgICAgMjAwMi0wNi0yMSAqLworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgICAgLyogdGltZXN0YW1wIGp1c3QgYmVmb3JlIHdlIGdvIGludG8gcmVjdiBhbmQgdGhlbiBhZ2FpbiBqdXN0CisJIGFmdGVyIHdlIGNvbWUgb3V0IHJhaiA4Lzk0ICovCisgICAgICAvKiBidXQgb25seSBpZiB3ZSBhcmUgYWN0dWFsbHkgZ29pbmcgdG8gZGlzcGxheSBhIGhpc3RvZ3JhbS4gcmFqCisJIDIwMDYtMDItMDcgKi8KKyAgICAgIEhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisgICAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgICAgCisgICAgd2hpbGUgKCghdGltZXNfdXApICYmIChsZW49cmVjdihyZWN2X3NvY2tldCwKKwkJCQkgICAgcmVjdl9yaW5nLT5idWZmZXJfcHRyLAorCQkJCSAgICByZWN2X3NpemUsCisJCQkJICAgIDApKSA+IDAgKSB7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwkvKiB0aW1lc3RhbXAgdGhlIGV4aXQgZnJvbSB0aGUgcmVjdiBjYWxsIGFuZCB1cGRhdGUgdGhlIGhpc3RvZ3JhbSAqLworCUhJU1RfdGltZXN0YW1wKCZ0aW1lX3R3byk7CisJSElTVF9hZGQodGltZV9oaXN0LGRlbHRhX21pY3JvKCZ0aW1lX29uZSwmdGltZV90d28pKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLyAgICAgIAorCisjaWZkZWYgRElSVFkKKyAgICAgIGFjY2Vzc19idWZmZXIocmVjdl9yaW5nLT5idWZmZXJfcHRyLAorCQkgICAgcmVjdl9zaXplLAorCQkgICAgbG9jX2RpcnR5X2NvdW50LAorCQkgICAgbG9jX2NsZWFuX2NvdW50KTsKKyNlbmRpZiAvKiBESVJUWSAqLworCisjaWZkZWYgV0FOVF9ERU1PCisgICAgICBERU1PX1NUUkVBTV9JTlRFUlZBTChsZW4pOworI2VuZGlmCisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUyAgICAgIAorICAgICAgSU5URVJWQUxTX1dBSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgICAgCisgICAgICAvKiBub3cgd2Ugd2FudCB0byBtb3ZlIG91ciBwb2ludGVyIHRvIHRoZSBuZXh0IHBvc2l0aW9uIGluIHRoZSAqLworICAgICAgLyogZGF0YSBidWZmZXIuLi53ZSBtYXkgYWxzbyB3YW50IHRvIHdyYXAgYmFjayB0byB0aGUgImJlZ2lubmluZyIgKi8KKyAgICAgIC8qIG9mIHRoZSBidWZmZXJzcGFjZSwgc28gd2Ugd2lsbCBtb2QgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBzZW50ICovCisgICAgICAvKiBieSB0aGUgcmVjdiB3aWR0aCwgYW5kIHVzZSB0aGF0IHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IHRvIGFkZCAqLworICAgICAgLyogdG8gdGhlIGJhc2UgcG9pbnRlci4gKi8KKyAgICAgIG51bW1lc3NhZ2VzKys7ICAgICAgICAgIAorICAgICAgcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworICAgICAgaWYgKGJ5dGVzX3JlbWFpbmluZykgeworCWJ5dGVzX3JlbWFpbmluZyAtPSBsZW47CisgICAgICB9CisKKyAgICAgIGxvY2FsX2J5dGVzX3JlY3ZkICs9IGxlbjsKKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworCS8qIG1ha2Ugc3VyZSB3ZSB0aW1lc3RhbXAganVzdCBiZWZvcmUgd2UgZ28gaW50byByZWN2ICAqLworCS8qIHJhaiAyMDA0LTA2LTE1ICovCisJSElTVF90aW1lc3RhbXAoJnRpbWVfb25lKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAgIAorICAgIH0KKworICAgIC8qIGFuIEVJTlRSIGlzIHRvIGJlIGV4cGVjdGVkIHdoZW4gdGhpcyBpcyBhIG5vX2NvbnRyb2wgdGVzdCAqLworICAgIGlmICgoKGxlbiA8IDApIHx8IFNPQ0tFVF9FSU5UUihsZW4pKSAmJiAoIW5vX2NvbnRyb2wpKSB7CisgICAgICBwZXJyb3IoInNlbmRfdGNwX21hZXJ0czogZGF0YSByZWN2IGVycm9yIik7CisgICAgICBwcmludGYoImxlbiB3YXMgJWRcbiIsbGVuKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIGlmIHdlIGdldCBoZXJlLCBpdCBtdXN0IG1lYW4gd2UgaGFkIGEgcmVjdiByZXR1cm4gb2YgMCBiZWZvcmUKKyAgICAgICB0aGUgd2F0Y2hkb2cgdGltZXIgZXhwaXJlZCwgb3IgdGhlIHdhdGNoZG9nIHRpbWVyIGV4cGlyZWQgYW5kCisgICAgICAgdGhpcyB3YXMgYSBub19jb250cm9sIHRlc3QgKi8KKworICAgIC8qIFRoZSB0ZXN0IGlzIG92ZXIuIEZsdXNoIHRoZSBidWZmZXJzIHRvIHRoZSByZW1vdGUgZW5kLiBXZSBkbyBhCisgICAgICAgZ3JhY2VmdWwgcmVsZWFzZSB0byB0ZWxsIHRoZSAgcmVtb3RlIHdlIGhhdmUgYWxsIHRoZSBkYXRhLiAqLyAgCisKKyAgICAvKiBidXQgZmlyc3QsIGlmIHRoZSB2ZXJib3NpdHkgaXMgZ3JlYXRlciB0aGFuIDEsIGZpbmQtb3V0IHdoYXQgKi8KKyAgICAvKiB0aGUgVENQIG1heGltdW0gc2VnbWVudF9zaXplIHdhcyAoaWYgcG9zc2libGUpICovCisgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAgIHRjcF9tc3MgPSAtMTsKKyAgICAgIGdldF90Y3BfaW5mbyhyZWN2X3NvY2tldCwmdGNwX21zcyk7CisgICAgfQorICAgIAorICAgIGlmIChzaHV0ZG93bihyZWN2X3NvY2tldCxTSFVUX1dSKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogY2Fubm90IHNodXRkb3duIHRjcCBtYWVydHMgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIHN0b3BfdGltZXIoKTsKKyAgICAKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgbG9jYWwgZWxhcHNlZCB0aW1lIGZvciB0aGUKKyAgICAgICB0ZXN0LCBhbmQgd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUKKyAgICAgICB1dGlsaXphdGlvbiAqLyAKKyAgICAKKyAgICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgKi8KKwkJCQkJCS8qIG1lYXN1cmVkIGFuZCBob3cgKi8KKwkJCQkJCS8qIGxvbmcgZGlkIHdlIHJlYWxseSAqLworCQkJCQkJLyogcnVuPyAqLworICAgIAorICAgIC8qIHdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBzb2NrZXQsIHNvIGNsb3NlIGl0IHRvIHByZXZlbnQgaGl0dGluZyAqLworICAgIC8qIHRoZSBsaW1pdCBvbiBtYXhpbXVtIG9wZW4gZmlsZXMuICovCisKKyAgICBjbG9zZShyZWN2X3NvY2tldCk7CisKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZQorICAgICAgICAgY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nCisgICAgICAgICB0aGluZ3MuIElmIGl0IHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzCisgICAgICAgICB2YWx1ZXMuICovCisgICAgCisgICAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICAgICAgfQorICAgICAgZWxzZSB7CisJU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlmcHJpbnRmKHdoZXJlLAorCQkibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkJbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCXBlcnJvcigiIik7CisJZmZsdXNoKHdoZXJlKTsKKwkKKwlleGl0KDEpOworICAgICAgfQorICAgICAgCisgICAgICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyIHRocnVwdXQgd2FzIGZvciB0aGUgdGVzdC4gSW4gdGhlCisJIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gaW5jbHVkZSBhIGNhbGN1bGF0aW9uIG9mIHRoZSB0aHJ1cHV0CisJIG1lYXN1cmVkIGJ5IHRoZSByZW1vdGUsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCBmb3IgYQorCSBUQ1AgbWFlcnRzIHRlc3QsIHRoYXQgdGhlIHR3byBudW1iZXJzIHNob3VsZCBiZSAqdmVyeSoKKwkgY2xvc2UuLi4gV2UgY2FsY3VsYXRlIGJ5dGVzX3NlbnQgcmVnYXJkbGVzcyBvZiB0aGUgd2F5IHRoZQorCSB0ZXN0IGxlbmd0aCB3YXMgY29udHJvbGxlZC4gIElmIGl0IHdhcyB0aW1lLCB3ZSBuZWVkZWQgdG8sCisJIGFuZCBpZiBpdCB3YXMgYnkgYnl0ZXMsIHRoZSB1c2VyIG1heSBoYXZlIHNwZWNpZmllZCBhIG51bWJlcgorCSBvZiBieXRlcyB0aGF0IHdhc24ndCBhIG11bHRpcGxlIG9mIHRoZSByZWN2X3NpemUsIHNvIHdlCisJIHJlYWxseSBkaWRuJ3QgcmVjdiB3aGF0IGhlIGFza2VkIGZvciA7LSkgKi8KKyAgICAKKyAgICAgIGJ5dGVzX3NlbnQJPSBudG9oZCh0Y3BfbWFlcnRzX3Jlc3VsdC0+Ynl0ZXNfc2VudCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYnl0ZXNfc2VudCA9IChkb3VibGUpbG9jYWxfYnl0ZXNfcmVjdmQ7CisgICAgfQorCisKKyAgICB0aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3NlbnQpOworCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgICAgLyogT2YgY291cnNlLCBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBtaWdodCBiZSBib2d1cyBiZWNhdXNlICovCisgICAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJCisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gY2FsY19jcHVfdXRpbCgwLjApOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19zZW50LAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisJbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJCisJcmVtb3RlX2NwdV91dGlsaXphdGlvbgk9IHRjcF9tYWVydHNfcmVzdWx0LT5jcHVfdXRpbDsKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQJPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgICAgdGNwX21hZXJ0c19yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICB9ICAgIAorICAgIGVsc2UgeworICAgICAgLyogd2Ugd2VyZSBub3QgbWVhc3VyaW5nIGNwdSwgZm9yIHRoZSBjb25maWRlbmNlIHN0dWZmLCB3ZSAqLworICAgICAgLyogc2hvdWxkIG1ha2UgaXQgLTEuMCAqLworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworCisgICAgY2FsY3VsYXRlX2NvbmZpZGVuY2UoY29uZmlkZW5jZV9pdGVyYXRpb24sCisJCQkgZWxhcHNlZF90aW1lLAorCQkJIHRocnVwdXQsCisJCQkgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkgbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAKKyAgICAKKyAgICBjb25maWRlbmNlX2l0ZXJhdGlvbisrOworICB9CisKKyAgLyogYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBmaW5pc2hlZCBtYWtpbmcgYWxsIHRoZSBydW5zIHRoYXQgd2UgKi8KKyAgLyogd2lsbCBiZSBtYWtpbmcuIHNvLCB3ZSBzaG91bGQgZXh0cmFjdCB3aGF0IHRoZSBjYWxjdWF0ZWQgdmFsdWVzICovCisgIC8qIGFyZSBmb3IgYWxsIHRoZSBjb25maWRlbmNlIHN0dWZmLiB3ZSBjb3VsZCBtYWtlIHRoZSB2YWx1ZXMgKi8KKyAgLyogZ2xvYmFsLCBidXQgdGhhdCBzZWVtZWQgYSBsaXR0bGUgbWVzc3ksIGFuZCBpdCBkaWQgbm90IHNlZW0gd29ydGggKi8KKyAgLyogYWxsIHRoZSBtdWNraW5nIHdpdGggaGVhZGVyIGZpbGVzLiBzbywgd2UgY3JlYXRlIGEgcm91dGluZSBtdWNoICovCisgIC8qIGxpa2UgY2FsY3VhbHRlX2NvbmZpZGVuY2UsIHdoaWNoIGp1c3QgcmV0dXJucyB0aGUgbWVhbiB2YWx1ZXMuICovCisgIC8qIHJhaiAxMS85NCAqLworCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmdGhydXB1dCwKKwkJCSAgICAmbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSAgICAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKworICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKworICBpZiAoY29uZmlkZW5jZSA8IDApIHsKKyAgICAvKiB3ZSBkaWQgbm90IGhpdCBjb25maWRlbmNlLCBidXQgd2VyZSB3ZSBhc2tlZCB0byBsb29rIGZvciBpdD8gKi8KKyAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworICAgIH0KKyAgfQorCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChjcHVfbWV0aG9kKTsKKyAgICByZW1vdGVfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKHRjcF9tYWVydHNfcmVzdWx0LT5jcHVfbWV0aG9kKTsKKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQkoKHByaW50X2hlYWRlcnMpIHx8IAorCQkgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QsCisJCSgocHJpbnRfaGVhZGVycykgfHwgCisJCSAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCWNwdV90aXRsZSwKKwkJZm9ybWF0X3VuaXRzKCksCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCXJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICByc3Jfc2l6ZSwJCSAgICAgICAgLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGxzc19zaXplLAkJICAgICAgICAvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVjdnMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LCAJCSAgICAgICAgLyogd2hhdCB3YXMgdGhlIHhmZXIgcmF0ZSAqLworCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgKChwcmludF9oZWFkZXJzKSB8fCAKKwkgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICB0aHJ1cHV0LAorCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNyX3NpemUsIAkJLyogbG9jYWwgcmVjdmJ1ZiBzaXplICovCisJICAgICAgcnNzX3NpemUsIAkJLyogcmVtb3Qgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlY3ZzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgdGhydXB1dCwgICAgICAgICAgICAgICAgICAvKiBob3cgZmFzdCBkaWQgaXQgZ28gKi8KKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8ga25vdyBpdCBhbGwsIHNvIHdlIHdpbGwgZ2l2ZSBpdCB0byBoaW0uICovCisgICAgLyogVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluY2x1ZGUgYXMgbXVjaCBhcyB3ZSBjYW4gZmluZCBhYm91dCAqLworICAgIC8qIFRDUCBzdGF0aXN0aWNzLCB0aGUgYWxpZ25tZW50cyBvZiB0aGUgc2VuZHMgYW5kIHJlY2VpdmVzICovCisgICAgLyogYW5kIGFsbCB0aGF0IHNvcnQgb2Ygcm90Li4uICovCisgICAKKyAgICAvKiB0aGlzIHN0dWZmIG5lZWRzIHRvIGJlIHdvcmtlZC1vdXQgaW4gdGhlIHByZXNlbmNlIG9mIGNvbmZpZGVuY2UgKi8KKyAgICAvKiBpbnRlcnZhbHMgYW5kIG11bHRpcGxlIGl0ZXJhdGlvbnMgb2YgdGhlIHRlc3QuLi4gcmFqIDExLzk0ICovCisgCisgICAgZnByaW50Zih3aGVyZSwKKwkgICAga3NpbmtfZm10LAorCSAgICAiQnl0ZXMiLAorCSAgICAiQnl0ZXMiLAorCSAgICAiQnl0ZXMiLAorCSAgICBsb2NhbF9yZWN2X2FsaWduLAorCSAgICByZW1vdGVfcmVjdl9hbGlnbiwKKwkgICAgbG9jYWxfcmVjdl9vZmZzZXQsCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCwKKwkgICAgYnl0ZXNfc2VudCwKKwkgICAgYnl0ZXNfc2VudCAvIChkb3VibGUpbnVtbWVzc2FnZXMsCisJICAgIG51bW1lc3NhZ2VzLAorCSAgICBieXRlc19zZW50IC8gKGRvdWJsZSl0Y3BfbWFlcnRzX3Jlc3VsdC0+c2VuZF9jYWxscywKKwkgICAgdGNwX21hZXJ0c19yZXN1bHQtPnNlbmRfY2FsbHMpOworICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdDIsCisJICAgIHRjcF9tc3MpOworICAgIGZmbHVzaCh3aGVyZSk7CisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICBmcHJpbnRmKHdoZXJlLCJcblxuSGlzdG9ncmFtIG9mIHRpbWUgc3BlbnQgaW4gcmVjdigpIGNhbGwuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIEhJU1RfcmVwb3J0KHRpbWVfaGlzdCk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgfQorICAKK30KKworDAorCisvKiB0aGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgVENQX01TUyB0ZXN0LiAgQWxsIGl0IGRvZXMgaXMgcHJldGVuZAorICAgdG8gYmUgYSBUQ1BfU1RSRUFNIHRlc3QgYW5kIHJlcG9ydCB0aGUgVENQX01TUyBmb3IgdGhlIGRhdGEKKyAgIGNvbm5lY3Rpb24uICBObyBhY3R1YWwgZGF0YSBpcyB0cmFuc2ZlcnJlZC4gcmFqIDIwMDctMTEtMDcKKyovCit2b2lkIAorc2VuZF90Y3BfbXNzKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKm1zc190aXRsZSA9ICJcCitNYXhpbXVtXG5cCitTZWdtZW50XG5cCitTaXplIChieXRlcylcblxuIjsKKworICBjaGFyICptc3NfZm10XzAgPQorICAgICIlZCAlc1xuIjsKKworICBTT0NLRVQgc2VuZF9zb2NrZXQ7CisgIGludCB0Y3BfbXNzID0gLTE7ICAvKiBwb3NzaWJseSB1bmluaXRpYWxpemVkIG9uIHByaW50ZiBmYXIgYmVsb3cgKi8KKworICBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICAKKyAgc3RydWN0CXRjcF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKnRjcF9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSp0Y3Bfc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqdGNwX3N0cmVhbV9yZXN1bHQ7CisgIAorICB0Y3Bfc3RyZWFtX3JlcXVlc3QgID0gCisgICAgKHN0cnVjdCB0Y3Bfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHRjcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX3N0cmVhbV9yZXN1bHQgICA9IAorICAgIChzdHJ1Y3QgdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgIC8qIGNvbnRyb2wgc29ja2V0LCBhbmQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBkaWZmZXJlbnQgKi8KKyAgLyogcHJvdG9jb2xzIGFuZCBzdWNoLCB3ZSBhcmUgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaG9zdCBhbmQgKi8KKyAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworICAKKyAgLyogY29tcGxldGVfYWRkcmluZm9zIHdpbGwgZWl0aGVyIHN1Y2NlZGUgb3IgZXhpdCB0aGUgcHJvY2VzcyAqLworICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIlRDUCBNU1MgVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICB9CisKKyAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgICAKKyAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfdGNwX3N0cmVhbTogdGNwIHN0cmVhbSBkYXRhIHNvY2tldCIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfdGNwX3N0cmVhbTogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICB9CisgIAorICAgIAorICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUKKyAgICAgICBzb2NrZXQgcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZQorICAgICAgIHJlYXNvbiBmb3IgYWxsIHRoZSB2YWx1ZXMgYmVpbmcgcGFzc2VkIGluIHRoZSBzZXR1cAorICAgICAgIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsCisgICAgICAgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUKKyAgICAgICB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyBkZWZhdWx0IHNob3VsZCBiZQorICAgICAgIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsIGRlZmF1bHQgdG8gMSwgd2hpY2gKKyAgICAgICB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUgPQlET19UQ1BfU1RSRUFNOworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+c2VuZF9idWZfc2l6ZQk9CXJzc19zaXplX3JlcTsKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZV9yZXE7CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWNlaXZlX3NpemUJPQlyZWN2X3NpemU7CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5ub19kZWxheQk9CXJlbV9ub2RlbGF5OworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQJPQlyZW1vdGVfcmVjdl9hbGlnbjsKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUJPQlyZW1vdGVfY3B1X3VzYWdlOworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUJPQlyZW1vdGVfY3B1X3JhdGU7CisgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF9ieXRlczsKKyAgICB9CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5zb19yY3Zhdm9pZAk9CXJlbV9yY3Zhdm9pZDsKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnNvX3NuZGF2b2lkCT0JcmVtX3NuZGF2b2lkOworI2lmZGVmIERJUlRZCisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5kaXJ0eV9jb3VudCAgICAgPSAgICAgICByZW1fZGlydHlfY291bnQ7CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICAgPSAgICAgICByZW1fY2xlYW5fY291bnQ7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnBvcnQgICAgICAgICAgICA9ICAgIGF0b2kocmVtb3RlX2RhdGFfcG9ydCk7CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5pcGZhbWlseSA9IGFmX3RvX25mKHJlbW90ZV9yZXMtPmFpX2ZhbWlseSk7CisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogc2VuZF90Y3BfbXNzOiByZXF1ZXN0aW5nIFRDUCBzdHJlYW0gdGVzdFxuIik7CisgICAgfQorICAgICAgCisgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgICAKKyAgICAvKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIHJlbGV2YW50CisgICAgICAgc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sKKyAgICAgICBpbnRvIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4KKyAgICAgICBUaGUgcmVtb3RlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIENQVSBpZiBuZWNlc3NhcnksIGFuZCB3aWxsCisgICAgICAgaGF2ZSBkb25lIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUKKyAgICAgICBjcHUgbG9jYWxseSBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUKKyAgICAgICBjb3VudGVyIHZhbHVlIHJpZ2h0IGFmdGVyIHRoZSBjb25uZWN0IHJldHVybnMuIFRoZSByZW1vdGUKKyAgICAgICB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQgYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzCisgICAgICAgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcyBiZWluZyBzZW50IGZvciB0aGUgVENQCisgICAgICAgdGVzdHMuICAqLworICAgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICBpZiAoZGVidWcpCisJZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisgICAgICByc3Jfc2l6ZQkgICAgICA9CXRjcF9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisgICAgICByc3Nfc2l6ZQkgICAgICA9CXRjcF9zdHJlYW1fcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisgICAgICByZW1fbm9kZWxheSAgICAgPQl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5ub19kZWxheTsKKyAgICAgIHJlbW90ZV9jcHVfdXNhZ2U9CXRjcF9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgICAgcmVtb3RlX2NwdV9yYXRlID0gdGNwX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGU7CisgICAgICAKKyAgICAgIC8qIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBwb3J0IG51bWJlciBpcyBpbgorCSBuZXR3b3JrIG9yZGVyICovCisgICAgICBzZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcywKKwkJICAgICAgKHNob3J0KXRjcF9zdHJlYW1fcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgICAgCisgICAgICByZW1fcmN2YXZvaWQJPSB0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZDsKKyAgICAgIHJlbV9zbmRhdm9pZAk9IHRjcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3NuZGF2b2lkOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCSAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigiIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgCisgICAgICBleGl0KDEpOworICAgIH0KKyAgfQorCisgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICBpZiAoY29ubmVjdChzZW5kX3NvY2tldCwgCisJICAgICAgcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkgICAgICByZW1vdGVfcmVzLT5haV9hZGRybGVuKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3RjcF9tc3M6IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgZXhpdCgxKTsKKyAgICB9CisKKworICAvKiBmaW5kLW91dCB3aGF0IHRoZSBUQ1AgbWF4aW11bSBzZWdtZW50X3NpemUgd2FzIChpZiBwb3NzaWJsZSkgKi8KKyAgdGNwX21zcyA9IC0xOworICBnZXRfdGNwX2luZm8oc2VuZF9zb2NrZXQsJnRjcF9tc3MpOworICAgIAorICAvKiBqdXN0IGdvIGFoZWFkIGFuZCBjbG9zZSB0aGUgc29ja2V0LCB0aGUgcmVtb3RlIHNob3VsZCBmaWd1cmUgaXQKKyAgICAgb3V0ICovCisgIGNsb3NlKHNlbmRfc29ja2V0KTsKKworICAvKiBzdGF0aXN0aWNzPyB3ZSBkb24ndCBuZWVkIG5vIHN0aW5raW5nIHN0YXRpc3RpY3MgKi8KKworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBtc3NfZm10XzAsCisJICAgICAgdGNwX21zcywKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCQlmcHJpbnRmKHdoZXJlLG1zc190aXRsZSk7CisgICAgICB9CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIG1zc19mbXRfMCwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgdGNwX21zcywKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAKK30KKworDAorCisjaWZkZWYgSEFWRV9JQ1NDX0VYUworCisjaW5jbHVkZSA8c3lzL2V4cy5oPgorCisKKy8qIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBUQ1AgdW5pZGlyZWN0aW9uYWwgZGF0YSB0cmFuc2ZlciB0ZXN0ICovCisvKiAoYS5rLmEuIHN0cmVhbSkgZm9yIHRoZSBzb2NrZXRzIGludGVyZmFjZS4gSXQgcmVjZWl2ZXMgaXRzICovCisvKiBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwgdmFyaWFibGVzIGZyb20gdGhlIHNoZWxsIGFuZCB3cml0ZXMgaXRzICovCisvKiBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKwordm9pZAorc2VuZF9leHNfdGNwX3N0cmVhbShjaGFyIHJlbW90ZV9ob3N0W10pCit7CisKKyAgICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgXG5cCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICBcblwKK2J5dGVzICBieXRlcyAgIGJ5dGVzICAgIHNlY3MuICAgICVzL3NlYyAgXG5cbiI7CisKKyAgICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAgICAgIiU3LjJmXG4iOworCisgICAgY2hhciAqdHB1dF9mbXRfMSA9CisgICAgICAgICIlNmQgJTZkICU2ZCAgICAlLTYuMmYgICAlNy4yZiAgIFxuIjsKKworICAgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXphdGlvbiAgICAgICBTZXJ2aWNlIERlbWFuZFxuXAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgU2VuZCAgICAgUmVjdiAgICAgU2VuZCAgICBSZWN2XG5cCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICBsb2NhbCAgICByZW1vdGUgICBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgJS04LjhzL3MgICUlICVjICAgICAgJSUgJWMgICAgICB1cy9LQiAgIHVzL0tCXG5cbiI7CisKKyAgICBjaGFyICpjcHVfZm10XzAgPQorICAgICAgICAiJTYuM2YgJWNcbiI7CisKKyAgICBjaGFyICpjcHVfZm10XzEgPQorICAgICAgICAiJTZkICU2ZCAlNmQgICAgJS02LjJmICAgICAlNy4yZiAgICUtNi4yZiAgICUtNi4yZiAgICUtNi4zZiAgJS02LjNmXG4iOworCisgICAgY2hhciAqa3NpbmtfZm10ID0gIlxuXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0ICAgICAgICAgJS04LjhzICUtOC44cyAgICBTZW5kcyAgICUtOC44cyBSZWN2c1xuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZSAgWGZlcmVkICAgUGVyICAgICAgICAgICAgICAgICBQZXJcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2ICAgICAgICAgICAgIFNlbmQgKGF2ZykgICAgICAgICAgUmVjdiAoYXZnKVxuXAorJTVkICAgJTVkICAlNWQgICAlNWQgJTYuNGcgICU2LjJmICAgICU2ZCAgICU2LjJmICU2ZFxuIjsKKworICAgIGNoYXIgKmtzaW5rX2ZtdDIgPSAiXG5cCitNYXhpbXVtXG5cCitTZWdtZW50XG5cCitTaXplIChieXRlcylcblwKKyU2ZFxuIjsKKworCisgICAgZmxvYXQgICAgICAgICBlbGFwc2VkX3RpbWU7CisKKyAgICAvKiB3aGF0IHdlIHdhbnQgaXMgdG8gaGF2ZSBhIGJ1ZmZlciBzcGFjZSB0aGF0IGlzIGF0IGxlYXN0IG9uZSAqLworICAgIC8qIHNlbmQtc2l6ZSBncmVhdGVyIHRoYW4gb3VyIHNlbmQgd2luZG93LiB0aGlzIHdpbGwgaW5zdXJlIHRoYXQgd2UgKi8KKyAgICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgICAvKiBvZiB0aGUgdHJhbnNwb3J0LiBUaGlzIGJ1ZmZlciB3aWxsIGJlIG1hbGxvYydkIGFmdGVyIHdlIGhhdmUgZm91bmQgKi8KKyAgICAvKiB0aGUgc2l6ZSBvZiB0aGUgbG9jYWwgc2VuYyBzb2NrZXQgYnVmZmVyLiBXZSB3aWxsIHdhbnQgdG8gZGVhbCAqLworICAgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKworICAgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworCisgICAgaW50IGxlbjsKKyAgICB1bnNpZ25lZCBpbnQgbnVtbWVzc2FnZXMgPSAwOworICAgIFNPQ0tFVCBzZW5kX3NvY2tldDsKKyAgICBpbnQgYnl0ZXNfcmVtYWluaW5nOworICAgIGludCB0Y3BfbXNzID0gLTE7ICAvKiBwb3NzaWJseSB1bmluaXRpYWxpemVkIG9uIHByaW50ZiBmYXIgYmVsb3cgKi8KKworICAgIGV4c19taGFuZGxlX3QgZXhzX21oYW5kbGU7CisgICAgZXhzX3FoYW5kbGVfdCBleHNfcWhhbmRsZTsKKyNkZWZpbmUgTkVUUEVSRl9FWFNfUEVORElORyAgMTYKKyAgICBpbnQgZXhzX2Fpb19wZW5kaW5nOworICAgIGludCBleHNfYWlvX2VhZ2FpbjsKKyAgICBpbnQgZXhzX2Fpb19kZXF1ZXVlZDsKKyAgICBpbnQgZXhzX2Fpb19kZXF1ZXVlY250OworICAgIGludCBleHNfZXZ0Y250OworI2RlZmluZSBORVRQRVJGX0VYU19RU0laRSAgICAxMjgKKyAgICBleHNfZXZlbnRfdCBleHNfZXZ0dmVjW05FVFBFUkZfRVhTX1FTSVpFXTsKKworICAgIC8qIHdpdGggbGlua3MgbGlrZSBmZGRpLCBvbmUgY2FuIHNlbmQgPiAzMiBiaXRzIHdvcnRoIG9mIGJ5dGVzICovCisgICAgLyogZHVyaW5nIGEgdGVzdC4uLiA7LSkgYXQgc29tZSBwb2ludCwgdGhpcyBzaG91bGQgcHJvYmFibHkgYmVjb21lIGEgKi8KKyAgICAvKiA2NGJpdCBpbnRlZ3JhbCB0eXBlLCBidXQgdGhvc2UgYXJlIG5vdCBlbnRpcmVseSBjb21tb24geWV0ICovCisKKyAgICBkb3VibGUgICBieXRlc19zZW50ID0gMC4wOworCisgICAgZmxvYXQgICBsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgICAgZmxvYXQgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgICBmbG9hdCAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgICAgZmxvYXQgICByZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgICBkb3VibGUgICB0aHJ1cHV0OworCisgICAgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzOworICAgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworCisgICAgc3RydWN0ICAgdGNwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAgICp0Y3Bfc3RyZWFtX3JlcXVlc3Q7CisgICAgc3RydWN0ICAgdGNwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgICAqdGNwX3N0cmVhbV9yZXNwb25zZTsKKyAgICBzdHJ1Y3QgICB0Y3Bfc3RyZWFtX3Jlc3VsdHNfc3RydWN0ICAgKnRjcF9zdHJlYW1fcmVzdWx0OworCisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0ICA9CisgICAgICAgIChzdHJ1Y3QgdGNwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlID0KKyAgICAgICAgKHN0cnVjdCB0Y3Bfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgICAgdGNwX3N0cmVhbV9yZXN1bHQgICA9CisgICAgICAgIChzdHJ1Y3QgdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisKKyNpZiAwIC8qIGRlZiBXQU5UX0hJU1RPR1JBTSAqLworICAgIHRpbWVfaGlzdCA9IEhJU1RfbmV3KCk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgICAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgICAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworCisgICAgLyogY29tcGxldGVfYWRkcmluZm9zIHdpbGwgZWl0aGVyIHN1Y2NlZGUgb3IgZXhpdCB0aGUgcHJvY2VzcyAqLworICAgIGNvbXBsZXRlX2FkZHJpbmZvcygmcmVtb3RlX3JlcywKKyAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsX3JlcywKKyAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2hvc3QsCisgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICBJUFBST1RPX1RDUCwKKyAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgICAgIHByaW50X3RvcF90ZXN0X2hlYWRlcigiRVhTIFRDUCBTVFJFQU0gVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICAgIH0KKworICAgIHNlbmRfcmluZyA9IE5VTEw7CisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICAgIGluaXRfc3RhdCgpOworCisgICAgLyogaW5pdGlhbGl6ZSBFWFMgQVBJIGFuZCBjcmVhdGUgZXZlbnQgcXVldWUgKi8KKyAgICBpZiAoZXhzX2luaXQgKEVYU19WRVJTSU9OKSA9PSAtMSkgeworICAgICAgICBwZXJyb3IgKCJuZXRwZXJmOiBzZW5kX2V4c190Y3Bfc3RyZWFtOiBleHNfaW5pdCBmYWlsZWQiKTsKKyAgICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgICAgaWYgKChleHNfcWhhbmRsZSA9IGV4c19xY3JlYXRlIChORVRQRVJGX0VYU19RU0laRSkpID09IEVYU19RSEFORExFX0lOVkFMSUQpIHsKKyAgICAgICAgcGVycm9yICgibmV0cGVyZjogc2VuZF9leHNfdGNwX3N0cmVhbTogZXhzX3FjcmVhdGUgZmFpbGVkIik7CisgICAgICAgIGV4aXQgKDEpOworICAgIH0KKyAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgZnByaW50ZiAod2hlcmUsICJzZW5kX2V4c190Y3Bfc3RyZWFtOiBxaGFuZGxlPSVkXG4iLCBleHNfcWhhbmRsZSk7CisgICAgfQorCisgICAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgICAvKiB3ZSBydW4gYSBwYXJ0aWN1bGFyIHRlc3QuIHRoaXMgaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBhICovCisgICAgLyogY29uZmlkZW5jZSBpbnRlcnZhbCAoSSByZWFsbHkgc2hvdWxkIGhhdmUgc3RheWVkIGF3YWtlIGR1cmluZyAqLworICAgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgICAvKiAobm8gY29uZmlkZW5jZSBpcyB0aGUgZGVmYXVsdCkgdGhlbiB3ZSB3aWxsIG9ubHkgZ28gdGhvdWdoIHRoZSAqLworICAgIC8qIGxvb3Agb25jZS4gdGhlIGNvbmZpZGVuY2Ugc3R1ZmYgb3JpZ2luYXRlcyBmcm9tIHRoZSBmb2xrcyBhdCBJQk0gKi8KKworICAgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKyAgICAgICAgICAgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgICAgIC8qIGdvaW5nIHRocm91Z2ggdGhlIGxvb3AgbW9yZSB0aGFuIG9uY2UuICovCisKKyAgICAgICAgbnVtbWVzc2FnZXMgICAgPSAgIDA7CisgICAgICAgIGJ5dGVzX3NlbnQgICAgID0gICAwLjA7CisgICAgICAgIHRpbWVzX3VwICAgICAgID0gICAgMDsKKworICAgICAgICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBzZW5kX3NvY2tldCA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworCisgICAgICAgIGlmIChzZW5kX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICAgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfdGNwX3N0cmVhbTogdGNwIHN0cmVhbSBkYXRhIHNvY2tldCIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgZnByaW50Zih3aGVyZSwic2VuZF90Y3Bfc3RyZWFtOiBzZW5kX3NvY2tldCBvYnRhaW5lZC4uLlxuIik7CisgICAgICAgIH0KKworICAgICAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGVpdGhlciByZXRyaWV2ZWQgdGhlIHNvY2tldCBidWZmZXIgc2l6ZXMsICovCisgICAgICAgIC8qIG9yIGhhdmUgdHJpZWQgdG8gc2V0IHRoZW0sIHNvIG5vdywgd2UgbWF5IHdhbnQgdG8gc2V0IHRoZSBzZW5kICovCisgICAgICAgIC8qIHNpemUgYmFzZWQgb24gdGhhdCAoYmVjYXVzZSB0aGUgdXNlciBlaXRoZXIgZGlkIG5vdCB1c2UgYSAtbSAqLworICAgICAgICAvKiBvcHRpb24sIG9yIHVzZWQgb25lIHdpdGggYW4gYXJndW1lbnQgb2YgMCkuIElmIHRoZSBzb2NrZXQgYnVmZmVyICovCisgICAgICAgIC8qIHNpemUgaXMgbm90IGF2YWlsYWJsZSwgd2Ugd2lsbCBzZXQgdGhlIHNlbmQgc2l6ZSB0byA0S0IgLSBubyAqLworICAgICAgICAvKiBwYXJ0aWN1bGFyIHJlYXNvbiwganVzdCBhcmJpdHJhcnkuLi4gKi8KKyAgICAgICAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICBpZiAobHNzX3NpemUgPiAwKSB7CisgICAgICAgICAgICAgICAgc2VuZF9zaXplID0gbHNzX3NpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZW5kX3NpemUgPSA0MDk2OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlciByaW5nIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldC4gKi8KKyAgICAgICAgLyogbm90ZSBhbHNvIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgYSBxdWFudGl0eSAqLworICAgICAgICAvKiBvZiBtZW1vcnkgdGhhdCBpcyBhdCBsZWFzdCBvbmUgc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc29ja2V0ICovCisgICAgICAgIC8qIGJ1ZmZlciBzaXplLiBXZSB3YW50IHRvIGJlIHN1cmUgdGhhdCB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvICovCisgICAgICAgIC8qIGJ1ZmZlcnMgYWxsb2NhdGVkIC0gdGhpcyBjYW4gYmUgYSBiaXQgb2YgYSBwcm9ibGVtIHdoZW4gdGhlICovCisgICAgICAgIC8qIHNlbmRfc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgc29ja2V0IHNpemUsIHNvIHdlIG11c3QgY2hlY2suLi4gdGhlICovCisgICAgICAgIC8qIHVzZXIgbWF5IGhhdmUgd2FudGVkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSAid2lkdGgiIG9mIG91ciBzZW5kICovCisgICAgICAgIC8qIGJ1ZmZlcnMsIHdlIHNob3VsZCByZXNwZWN0IHRoYXQgd2lzaC4uLiAqLworICAgICAgICBpZiAoc2VuZF93aWR0aCA9PSAwKSB7CisgICAgICAgICAgICBzZW5kX3dpZHRoID0gKGxzc19zaXplL3NlbmRfc2l6ZSkgKyAxOworICAgICAgICAgICAgaWYgKHNlbmRfd2lkdGggPT0gMSkgc2VuZF93aWR0aCsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlbmRfcmluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBvbmx5IGFsbG9jYXRlIHRoZSBzZW5kIHJpbmcgb25jZS4gdGhpcyBpcyBhIG5ldHdvcmtpbmcgdGVzdCwgKi8KKyAgICAgICAgICAgIC8qIG5vdCBhIG1lbW9yeSBhbGxvY2F0aW9uIHRlc3QuIHRoaXMgd2F5LCB3ZSBkbyBub3QgbmVlZCBhICovCisgICAgICAgICAgICAvKiBkZWFsbG9jYXRlX2J1ZmZlcl9yaW5nKCkgcm91dGluZSwgYW5kIEkgZG9uJ3QgZmVlbCBsaWtlICovCisgICAgICAgICAgICAvKiB3cml0aW5nIG9uZSBhbnl3YXkgOikgcmFqIDExLzk0ICovCisgICAgICAgICAgICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9leHNfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfc2VuZF9hbGlnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9zZW5kX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhzX21oYW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgICAgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgICAgICAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgICAgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAgICAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgICAgICAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suICovCisKKyAgICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgKi8KKyAgICAgICAgLyogcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZSByZWFzb24gZm9yICovCisgICAgICAgIC8qIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkICovCisgICAgICAgIC8qIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCAqLworICAgICAgICAvKiB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUgdGhhdCBubyBjaGFuZ2VzIGJleW9uZCB0aGUgc3lzdGVtJ3MgKi8KKyAgICAgICAgLyogZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgKi8KKyAgICAgICAgLyogZGVmYXVsdCB0byAxLCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKworICAgICAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUgPSAgIERPX1RDUF9TVFJFQU07CisgICAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+c2VuZF9idWZfc2l6ZSAgID0gICByc3Nfc2l6ZV9yZXE7CisgICAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9idWZfc2l6ZSAgID0gICByc3Jfc2l6ZV9yZXE7CisgICAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplICAgPSAgIHJlY3Zfc2l6ZTsKKyAgICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5ub19kZWxheSAgID0gICByZW1fbm9kZWxheTsKKyAgICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCAgID0gICByZW1vdGVfcmVjdl9hbGlnbjsKKyAgICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X29mZnNldCAgID0gICByZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUgICA9ICAgcmVtb3RlX2NwdV91c2FnZTsKKyAgICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5jcHVfcmF0ZSAgID0gICByZW1vdGVfY3B1X3JhdGU7CisgICAgICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgICAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGggICA9ICAgdGVzdF90aW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aCAgID0gICB0ZXN0X2J5dGVzOworICAgICAgICB9CisgICAgICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+c29fcmN2YXZvaWQgICA9ICAgcmVtX3JjdmF2b2lkOworICAgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnNvX3NuZGF2b2lkICAgPSAgIHJlbV9zbmRhdm9pZDsKKyNpZmRlZiBESVJUWQorICAgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPmRpcnR5X2NvdW50ICAgICA9ICAgICAgIHJlbV9kaXJ0eV9jb3VudDsKKyAgICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICAgPSAgICAgICByZW1fY2xlYW5fY291bnQ7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5wb3J0ICAgICAgICAgICAgPSAgICBhdG9pKHJlbW90ZV9kYXRhX3BvcnQpOworICAgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPmlwZmFtaWx5ID0gYWZfdG9fbmYocmVtb3RlX3Jlcy0+YWlfZmFtaWx5KTsKKyAgICAgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgIm5ldHBlcmY6IHNlbmRfdGNwX3N0cmVhbTogcmVxdWVzdGluZyBUQ1Agc3RyZWFtIHRlc3RcbiIpOworICAgICAgICB9CisKKyAgICAgICAgc2VuZF9yZXF1ZXN0KCk7CisKKyAgICAgICAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAgICAqLworICAgICAgICAvKiBzb2NrZXQgcGFyYW1ldGVycyBmb3IgdGhpcyB0ZXN0IHR5cGUuIFdlIHdpbGwgcHV0IHRoZW0gYmFjayBpbnRvICovCisgICAgICAgIC8qIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4gIFRoZSAgICovCisgICAgICAgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUgICAqLworICAgICAgICAvKiBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlIGNwdSBsb2NhbGx5ICAgKi8KKyAgICAgICAgLyogYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgdmFsdWUgcmlnaHQqLworICAgICAgICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodCovCisgICAgICAgIC8qIGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcyB0aGUgaGFzc2xlIG9mIGV4dHJhIG1lc3NhZ2VzICAgKi8KKyAgICAgICAgLyogYmVpbmcgc2VudCBmb3IgdGhlIFRDUCB0ZXN0cy4gICAgICAgICAgICAgICAqLworCisgICAgICAgIHJlY3ZfcmVzcG9uc2UoKTsKKworICAgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICAgICAgICBpZiAoZGVidWcpCisgICAgICAgICAgICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisgICAgICAgICAgICByc3Jfc2l6ZSAgICAgICAgID0gICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICAgICAgICAgICAgcnNzX3NpemUgICAgICAgICA9ICAgdGNwX3N0cmVhbV9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICAgICAgICAgIHJlbV9ub2RlbGF5ICAgICA9ICAgdGNwX3N0cmVhbV9yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgICAgICAgICByZW1vdGVfY3B1X3VzYWdlPSAgIHRjcF9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgICAgICAgICAgcmVtb3RlX2NwdV9yYXRlID0gdGNwX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGU7CisKKyAgICAgICAgICAgIC8qIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBwb3J0IG51bWJlciBpcyBpbiAqLworICAgICAgICAgICAgLyogbmV0d29yayBvcmRlciAqLworICAgICAgICAgICAgc2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMsKHNob3J0KXRjcF9zdHJlYW1fcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworCisgICAgICAgICAgICByZW1fcmN2YXZvaWQgICA9IHRjcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3JjdmF2b2lkOworICAgICAgICAgICAgcmVtX3NuZGF2b2lkICAgPSB0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5zb19zbmRhdm9pZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKyAgICAgICAgICAgICAgICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgICAgICAgcGVycm9yKCIiKTsKKyAgICAgICAgICAgIGZmbHVzaCh3aGVyZSk7CisKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworI2lmIDAgLyogZGVmIFdBTlRfREVNTyAqLworICAgICAgICBERU1PX1NUUkVBTV9TRVRVUChsc3Nfc2l6ZSxyc3Jfc2l6ZSkKKyNlbmRpZgorCisgICAgICAgICAgICAvKkNvbm5lY3QgdXAgdG8gdGhlIHJlbW90ZSBwb3J0IG9uIHRoZSBkYXRhIHNvY2tldCAgKi8KKyAgICAgICAgICAgIGlmIChjb25uZWN0KHNlbmRfc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX3Jlcy0+YWlfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4pID09IElOVkFMSURfU09DS0VUKXsKKyAgICAgICAgICAgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfdGNwX3N0cmVhbTogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorCisjaWZkZWYgV0lOMzIKKyAgLyogdGhpcyBpcyB1c2VkIHNvIHRoZSB0aW1lciB0aHJlYWQgY2FuIGNsb3NlIHRoZSBzb2NrZXQgb3V0IGZyb20gKi8KKyAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAvKiByZXR1cm4gV1NBRUlOVFIgd2l0aCB0aGUgdGVzdCBpcyBvdmVyLiBhbnl0aGluZyB0aGF0IHdpbGwgcnVuIG9uICovCisgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0ID0gc2VuZF9zb2NrZXQ7CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgICAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciAqLworICAgICAgICAvKiB0aGUgY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkICovCisgICAgICAgIC8qIGhhdmUgaW5kaWNhdGVkIGEgcHJvYmxlbS4gSSBmYWlsZWQgdG8gc2VlIHRoZSB2YWx1ZSBvZiB0aGUgKi8KKyAgICAgICAgLyogZXh0cmEgIG1lc3NhZ2UgYWZ0ZXIgdGhlIGFjY2VwdCBvbiB0aGUgcmVtb3RlLiBJZiBpdCBmYWlsZWQsICovCisgICAgICAgIC8qIHdlJ2xsIHNlZSBpdCBoZXJlLiBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGFzIHdlbGwgc3RhcnQgcHVtcGluZyAqLworICAgICAgICAvKiBkYXRhLiAqLworCisgICAgICAgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgc3RyZWFtIHRlc3QsIHRoZXkgY2FuIGJlICovCisgICAgICAgIC8qIGVpdGhlciB0aW1lIG9yIGJ5dGUtY291bnQgYmFzZWQuICovCisKKyAgICAgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgICAgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgICAgICAgICAgdGltZXNfdXAgPSAwOworICAgICAgICAgICAgYnl0ZXNfcmVtYWluaW5nID0gMDsKKyAgICAgICAgICAgIC8qIGluIHByZXZpb3VzIHJldmlzaW9ucywgd2UgaGFkIHRoZSBzYW1lIGNvZGUgcmVwZWF0ZWQgdGhyb3VnaHQgKi8KKyAgICAgICAgICAgIC8qIGFsbCB0aGUgdGVzdCBzdWl0ZXMuIHRoaXMgd2FzIHVubmVjZXNzYXJ5LCBhbmQgbWVhbnQgbW9yZSAqLworICAgICAgICAgICAgLyogd29yayBmb3IgbWUgd2hlbiBJIHdhbnRlZCB0byBzd2l0Y2ggdG8gUE9TSVggc2lnbmFscywgc28gSSAqLworICAgICAgICAgICAgLyogaGF2ZSBhYnN0cmFjdGVkIHRoaXMgb3V0IGludG8gYSByb3V0aW5lIGluIG5ldGxpYi5jLiBpZiB5b3UgKi8KKyAgICAgICAgICAgIC8qIGFyZSBleHBlcmllbmNpbmcgc2lnbmFsIHByb2JsZW1zLCB5b3UgbWlnaHQgd2FudCB0byBsb29rICovCisgICAgICAgICAgICAvKiB0aGVyZS4gcmFqIDExLzk0ICovCisgICAgICAgICAgICBzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICAgICAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgICAgICAgICB0aW1lc191cCA9IDE7CisgICAgICAgIH0KKworICAgICAgICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgICAgICAgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgICAgICAgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKworICAgICAgICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKworI2lmIDAgLyogZGVmIFdBTlRfSU5URVJWQUxTICovCisJSU5URVJWQUxTX0lOSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisgICAgICAgIC8qIGJlZm9yZSB3ZSBzdGFydCwgaW5pdGlhbGl6ZSBhIGZldyB2YXJpYWJsZXMgKi8KKworI2lmIDAgLyogZGVmIFdBTlRfREVNTyAqLworICAgICAgICBpZiAoZGVtb19tb2RlKSB7CisgICAgICAgICAgICBISVNUX3RpbWVzdGFtcChkZW1vX29uZV9wdHIpOworICAgICAgICB9CisjZW5kaWYKKworCisgICAgICAgIC8qIFdlIHVzZSBhbiAiT1IiIHRvIGNvbnRyb2wgdGVzdCBleGVjdXRpb24uIFdoZW4gdGhlIHRlc3QgaXMgKi8KKyAgICAgICAgLyogY29udHJvbGxlZCBieSB0aW1lLCB0aGUgYnl0ZSBjb3VudCBjaGVjayB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuICovCisgICAgICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAgICAgLyogYWx3YXlzIHJldHVybiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgdGhlIHdob2xlICovCisgICAgICAgIC8qIGV4cHJlc3Npb24gd2lsbCBnbyBmYWxzZSBhbmQgd2Ugd2lsbCBzdG9wIHNlbmRpbmcgZGF0YS4gKi8KKworICAgICAgICBleHNfYWlvX3BlbmRpbmcgPSAwOworICAgICAgICBleHNfYWlvX2VhZ2FpbiA9IDA7CisgICAgICAgIGV4c19haW9fZGVxdWV1ZWNudCA9IDA7CisKKyAgICAgICAgd2hpbGUgKCghdGltZXNfdXApIHx8IChieXRlc19yZW1haW5pbmcgPiAwKSkgeworCisjaWZkZWYgRElSVFkKKwkgIGFjY2Vzc19idWZmZXIoc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkJc2VuZF9zaXplLAorCQkJbG9jX2RpcnR5X2NvdW50LAorCQkJbG9jX2NsZWFuX2NvdW50KTsKKyNlbmRpZiAvKiBESVJUWSAqLworCisjaWYgMCAvKiBkZWYgV0FOVF9ISVNUT0dSQU0gKi8KKyAgICAgICAgICAgIC8qIHRpbWVzdGFtcCBqdXN0IGJlZm9yZSB3ZSBnbyBpbnRvIHNlbmQgYW5kIHRoZW4gYWdhaW4ganVzdCBhZnRlciAqLworICAgICAgICAgICAgLyogd2UgY29tZSBvdXQgcmFqIDgvOTQgKi8KKyAgICAgICAgICAgIEhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworCisgICAgICAgICAgICAvKiBwb3N0IHVwIHRvIE5FVFBFUkZfRVhTX1BFTkRJTkcgSS9PcyAgKi8KKyAgICAgICAgICAgIHdoaWxlICgoZXhzX2Fpb19wZW5kaW5nIDwgTkVUUEVSRl9FWFNfUEVORElORykgJiYKKyAgICAgICAgICAgICAgICAgICAoZXhzX3NlbmQgKHNlbmRfc29ja2V0LCBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsIHNlbmRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGV4c19xaGFuZGxlLCAoZXhzX2FoYW5kbGVfdCktMSwgZXhzX21oYW5kbGUpID09IDApKSB7CisgICAgICAgICAgICAgICAgZXhzX2Fpb19wZW5kaW5nKys7CisKKyAgICAgICAgICAgICAgICAvKiBub3cgd2Ugd2FudCB0byBtb3ZlIG91ciBwb2ludGVyIHRvIHRoZSBuZXh0CisJCSAgIHBvc2l0aW9uIGluIHRoZSBkYXRhIGJ1ZmZlci4uLndlIG1heSBhbHNvIHdhbnQgdG8KKwkJICAgd3JhcCBiYWNrIHRvIHRoZSAiYmVnaW5uaW5nIiBvZiB0aGUgYnVmZmVyc3BhY2UsIHNvCisJCSAgIHdlIHdpbGwgbW9kIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgc2VudCBieSB0aGUgc2VuZAorCQkgICB3aWR0aCwgYW5kIHVzZSB0aGF0IHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IHRvIGFkZAorCQkgICB0byB0aGUgYmFzZSBwb2ludGVyLiAqLworCisgICAgICAgICAgICAgICAgbnVtbWVzc2FnZXMrKzsKKyAgICAgICAgICAgICAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzX3JlbWFpbmluZykgeworICAgICAgICAgICAgICAgICAgICBieXRlc19yZW1haW5pbmcgLT0gc2VuZF9zaXplOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY2hlY2sgZXhzX3NlbmQgcmVzdWx0ICovCisgICAgICAgICAgICBpZiAoZXhzX2Fpb19wZW5kaW5nIDwgTkVUUEVSRl9FWFNfUEVORElORykgeworICAgICAgICAgICAgICAgLyogc3RhbmRhcmQgZmxvdyBjb250cm9sIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorICAgICAgICAgICAgICAgICAgICBleHNfYWlvX2VhZ2FpbisrOworICAgICAgICAgICAgICAgIC8qIGNhc2Ugb2YgdGltZXNfdXAgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogc3RyYW5nZSwgbGV0J3Mgc3RvcCAqLworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJuZXRwZXJmOiBleHNfc2VuZCBlcnJvciIpOworICAgICAgICAgICAgICAgICAgICBleGl0ICgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGRlcXVldWUgZXZlbnRzIHdpdGggInRocmVzaG9sZCIgb24gMS8yIHBvc3RlZCAqLworICAgICAgICAgICAgZXhzX2Fpb19kZXF1ZXVlZCA9CisgICAgICAgICAgICAgICAgZXhzX3FkZXF1ZXVlIChleHNfcWhhbmRsZSwgZXhzX2V2dHZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0oZXhzX2Fpb19wZW5kaW5nPj4xKSwgTlVMTCk7CisgICAgICAgICAgICBleHNfYWlvX2RlcXVldWVjbnQrKzsKKworICAgICAgICAgICAgLyogY2hlY2sgZXhzX2RlcXVldWUgcmVzdWx0ICovCisgICAgICAgICAgICBpZiAoZXhzX2Fpb19kZXF1ZXVlZCA8IDApIHsKKyAgICAgICAgICAgICAgICAvKiBjYXNlIG9mIHRpbWVzX3VwICovCisgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBzdHJhbmdlLCBsZXQncyBzdG9wICovCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBlcnJvciAoIm5ldHBlcmY6IGV4c19zZW5kIGVycm9yIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHVwZGF0ZSBudW1iZXIgb2YgcGVuZGluZyBJL09zICovCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHNfYWlvX3BlbmRpbmcgLT0gZXhzX2Fpb19kZXF1ZXVlZDsKKyAgICAgICAgICAgIH0KKworCisjaWYgMCAvKiBkZWYgV0FOVF9ISVNUT0dSQU0gKi8KKyAgICAgICAgICAgIC8qIHRpbWVzdGFtcCB0aGUgZXhpdCBmcm9tIHRoZSBzZW5kIGNhbGwgYW5kIHVwZGF0ZSB0aGUgaGlzdG9ncmFtICovCisgICAgICAgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworICAgICAgICAgICAgSElTVF9hZGQodGltZV9oaXN0LGRlbHRhX21pY3JvKCZ0aW1lX29uZSwmdGltZV90d28pKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisjaWYgMCAvKiBkZWYgV0FOVF9ERU1PICovCisgICAgICAgICAgICBERU1PX1NUUkVBTV9JTlRFUlZBTChzZW5kX3NpemUpOworI2VuZGlmCisKKyNpZiAwIC8qIGRlZiBXQU5UX0lOVEVSVkFMUyAqLworCSAgICBJTlRFUlZBTFNfV0FJVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisKKyAgICAgICAgfQorCisgICAgICAgIC8qIENvbGxlY3QgdGhlIGxhc3QgY29tcGxldGlvbiBldmVudHMgKi8KKyAgICAgICAgZXhzX2Fpb19kZXF1ZXVlZCA9CisgICAgICAgICAgICBleHNfcWRlcXVldWUgKGV4c19xaGFuZGxlLCBleHNfZXZ0dmVjLCAtZXhzX2Fpb19wZW5kaW5nLCBOVUxMKTsKKyAgICAgICAgZXhzX2Fpb19kZXF1ZXVlY250Kys7CisgICAgICAgIC8qIGNoZWNrIGV4c19kZXF1ZXVlIHJlc3VsdCBhbmQgdXBkYXRlIG51bWJlciBvZiBwZW5kaW5nIEkvT3MgKi8KKyAgICAgICAgaWYgKGV4c19haW9fZGVxdWV1ZWQgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IgKCJuZXRwZXJmOiBleHNfc2VuZCBlcnJvciIpOworICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIH0KKyAgICAgICAgZXhzX2Fpb19wZW5kaW5nIC09IGV4c19haW9fZGVxdWV1ZWQ7CisKKyAgICAgICAgLyogRGlzcGxheSBzb21lIGFzeW5jIEkvTyBkZWJ1ZyBpbmZvICovCisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgZnByaW50ZiAod2hlcmUsICJzZW5kX2V4c190Y3Bfc3RyZWFtOiAiCisgICAgICAgICAgICAgICAgICAgICAiYWlvIHNlbnQ9JWQgZWFnYWluPSVkIGRlcXVldWU9JWQgcGVuZGluZz0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIG51bW1lc3NhZ2VzLCBleHNfYWlvX2VhZ2FpbiwgZXhzX2Fpb19kZXF1ZXVlY250LCBleHNfYWlvX3BlbmRpbmcpOworICAgICAgICB9CisKKyAgICAgICAgLyogVGhlIHRlc3QgaXMgb3Zlci4gRmx1c2ggdGhlIGJ1ZmZlcnMgdG8gdGhlIHJlbW90ZSBlbmQuIFdlIGRvIGEgKi8KKyAgICAgICAgLyogZ3JhY2VmdWwgcmVsZWFzZSB0byBpbnN1cmUgdGhhdCBhbGwgZGF0YSBoYXMgYmVlbiB0YWtlbiBieSB0aGUgKi8KKyAgICAgICAgLyogcmVtb3RlLiAqLworCisgICAgICAgIC8qIGJ1dCBmaXJzdCwgaWYgdGhlIHZlcmJvc2l0eSBpcyBncmVhdGVyIHRoYW4gMSwgZmluZC1vdXQgd2hhdCAqLworICAgICAgICAvKiB0aGUgVENQIG1heGltdW0gc2VnbWVudF9zaXplIHdhcyAoaWYgcG9zc2libGUpICovCisgICAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgICAgICAgICB0Y3BfbXNzID0gLTE7CisgICAgICAgICAgICBnZXRfdGNwX2luZm8oc2VuZF9zb2NrZXQsJnRjcF9tc3MpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNodXRkb3duKHNlbmRfc29ja2V0LFNIVVRfV1IpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgICAgICAgcGVycm9yKCJuZXRwZXJmOiBjYW5ub3Qgc2h1dGRvd24gdGNwIHN0cmVhbSBzb2NrZXQiKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBoYW5nIGEgcmVjdigpIG9mZiB0aGUgc29ja2V0IHRvIGJsb2NrIHVudGlsIHRoZSByZW1vdGUgaGFzICovCisgICAgICAgIC8qIGJyb3VnaHQgYWxsIHRoZSBkYXRhIHVwIGludG8gdGhlIGFwcGxpY2F0aW9uLiBpdCB3aWxsIGRvIGEgKi8KKyAgICAgICAgLyogc2h1dGRvd24gdG8gY2F1c2UgYSBGSU4gdG8gYmUgc2VudCBvdXIgd2F5LiBXZSB3aWxsIGFzc3VtZSB0aGF0ICovCisgICAgICAgIC8qIGFueSBleGl0IGZyb20gdGhlIHJlY3YoKSBjYWxsIGlzIGdvb2QuLi4gcmFqIDQvOTMgKi8KKworICAgICAgICByZWN2KHNlbmRfc29ja2V0LCBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsIHNlbmRfc2l6ZSwgMCk7CisKKyAgICAgICAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAgICAgICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworCisgICAgICAgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsgICAvKiB3YXMgY3B1IGJlaW5nICovCisgICAgICAgIC8qIG1lYXN1cmVkIGFuZCBob3cgKi8KKyAgICAgICAgLyogbG9uZyBkaWQgd2UgcmVhbGx5ICovCisgICAgICAgIC8qIHJ1bj8gKi8KKworICAgICAgICAvKiB3ZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgc29ja2V0LCBzbyBjbG9zZSBpdCB0byBwcmV2ZW50IGhpdHRpbmcgKi8KKyAgICAgICAgLyogdGhlIGxpbWl0IG9uIG1heGltdW0gb3BlbiBmaWxlcy4gKi8KKworICAgICAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgICAgICAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIHJlbW90ZSBlbmQuIFRoZSByZW1vdGUgd2lsbCBoYXZlICovCisgICAgICAgIC8qIGNhbGN1bGF0ZWQgc2VydmljZSBkZW1hbmQgYW5kIGFsbCB0aG9zZSBpbnRlcmVzdGluZyB0aGluZ3MuIElmIGl0ICovCisgICAgICAgIC8qIHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8KKworICAgICAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICAgICAgICAgIGlmIChkZWJ1ZykKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisgICAgICAgICAgICAgICAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgICAgICAgIHBlcnJvcigiIik7CisgICAgICAgICAgICBmZmx1c2god2hlcmUpOworCisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZSBmdXR1cmUsICovCisgICAgICAgIC8qIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dCBtZWFzdXJlZCBieSAqLworICAgICAgICAvKiB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgVENQIHN0cmVhbSB0ZXN0LCAqLworICAgICAgICAvKiB0aGF0IHRoZSB0d28gbnVtYmVycyBzaG91bGQgYmUgKnZlcnkqIGNsb3NlLi4uIFdlIGNhbGN1bGF0ZSAqLworICAgICAgICAvKiBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICovCisgICAgICAgIC8qIElmIGl0IHdhcyB0aW1lLCB3ZSBuZWVkZWQgdG8sIGFuZCBpZiBpdCB3YXMgYnkgYnl0ZXMsIHRoZSB1c2VyIG1heSAqLworICAgICAgICAvKiBoYXZlIHNwZWNpZmllZCBhIG51bWJlciBvZiBieXRlcyB0aGF0IHdhc24ndCBhIG11bHRpcGxlIG9mIHRoZSAqLworICAgICAgICAvKiBzZW5kX3NpemUsIHNvIHdlIHJlYWxseSBkaWRuJ3Qgc2VuZCB3aGF0IGhlIGFza2VkIGZvciA7LSkgKi8KKworICAgICAgICBieXRlc19zZW50ICAgPSBudG9oZCh0Y3Bfc3RyZWFtX3Jlc3VsdC0+Ynl0ZXNfcmVjZWl2ZWQpOworCisgICAgICAgIHRocnVwdXQgICA9IGNhbGNfdGhydXB1dChieXRlc19zZW50KTsKKworICAgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgICAgICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAgICAgICAgIC8qIHV0aWxpemF0aW9uIGZvciB0aGUgc3lzdGVtKHMpICovCisgICAgICAgICAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAgICAgICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgICAgICAgICAvKiBhIG5vdGUgb2YgdGhpcyBmb3IgdGhlIHVzZXIncyBiZW5lZml0Li4uKi8KKyAgICAgICAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKworICAgICAgICAgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiAgID0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgICAgICAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kICAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiAgID0gKGZsb2F0KSAtMS4wOworICAgICAgICAgICAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kICAgPSAoZmxvYXQpIC0xLjA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisKKyAgICAgICAgICAgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uICAgPSB0Y3Bfc3RyZWFtX3Jlc3VsdC0+Y3B1X3V0aWw7CisgICAgICAgICAgICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3N0cmVhbV9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICAgICAgICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIHdlIHdlcmUgbm90IG1lYXN1cmluZyBjcHUsIGZvciB0aGUgY29uZmlkZW5jZSBzdHVmZiwgd2UgKi8KKyAgICAgICAgICAgIC8qIHNob3VsZCBtYWtlIGl0IC0xLjAgKi8KKyAgICAgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiAgID0gKGZsb2F0KSAtMS4wOworICAgICAgICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgICA9IChmbG9hdCkgLTEuMDsKKyAgICAgICAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICAgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgICAgICB9CisKKyAgICAgICAgLyogYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW5mb3JtYXRpb24uICovCisgICAgICAgIC8qIGlmIGRlYnVnZ2luZyBpcyBvbiwgY2FsY3VsYXRlX2NvbmZpZGVuY2Ugd2lsbCBwcmludC1vdXQgdGhlICovCisgICAgICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworCisgICAgICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocnVwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKworICAgICAgICBjb25maWRlbmNlX2l0ZXJhdGlvbisrOworICAgIH0KKworICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZmluaXNoZWQgbWFraW5nIGFsbCB0aGUgcnVucyB0aGF0IHdlICovCisgICAgLyogd2lsbCBiZSBtYWtpbmcuIHNvLCB3ZSBzaG91bGQgZXh0cmFjdCB3aGF0IHRoZSBjYWxjdWF0ZWQgdmFsdWVzICovCisgICAgLyogYXJlIGZvciBhbGwgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYuIHdlIGNvdWxkIG1ha2UgdGhlIHZhbHVlcyAqLworICAgIC8qIGdsb2JhbCwgYnV0IHRoYXQgc2VlbWVkIGEgbGl0dGxlIG1lc3N5LCBhbmQgaXQgZGlkIG5vdCBzZWVtIHdvcnRoICovCisgICAgLyogYWxsIHRoZSBtdWNraW5nIHdpdGggaGVhZGVyIGZpbGVzLiBzbywgd2UgY3JlYXRlIGEgcm91dGluZSBtdWNoICovCisgICAgLyogbGlrZSBjYWxjdWFsdGVfY29uZmlkZW5jZSwgd2hpY2gganVzdCByZXR1cm5zIHRoZSBtZWFuIHZhbHVlcy4gKi8KKyAgICAvKiByYWogMTEvOTQgKi8KKworICAgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aHJ1cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsX3NlcnZpY2VfZGVtYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgICAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgICAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworCisgICAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgICAgIC8qIHdlIGRpZCBub3QgaGl0IGNvbmZpZGVuY2UsIGJ1dCB3ZXJlIHdlIGFza2VkIHRvIGxvb2sgZm9yIGl0PyAqLworICAgICAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgICAgICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICAgIGxvY2FsX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChjcHVfbWV0aG9kKTsKKyAgICAgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZCh0Y3Bfc3RyZWFtX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisKKyAgICAgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X2ZtdF8wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2NwdV9tZXRob2QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfZm10XzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfY3B1X21ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9mbXRfMSwgICAgICAvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgcnNyX3NpemUsICAgICAgICAgICAgICAvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisgICAgICAgICAgICAgICAgICAgICAgICBsc3Nfc2l6ZSwgICAgICAgICAgICAgIC8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9zaXplLCAgICAgIC8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZF90aW1lLCAgICAgIC8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgdGhydXB1dCwgICAgICAgICAgICAgICAvKiB3aGF0IHdhcyB0aGUgeGZlciByYXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sICAgLyogbG9jYWwgY3B1ICovCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLCAgIC8qIHJlbW90ZSBjcHUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLCAgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOyAgIC8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworCisgICAgICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRwdXRfZm10XzAsCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJ1cHV0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgdHB1dF9mbXRfMSwgICAgICAvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgcnNyX3NpemUsICAgICAgIC8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxzc19zaXplLCAgICAgICAvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfc2l6ZSwgICAgICAvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWRfdGltZSwgICAgICAgLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRocnVwdXQpOy8qIGhvdyBmYXN0IGRpZCBpdCBnbyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgICAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisKKyAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgICAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8ga25vdyBpdCBhbGwsIHNvIHdlIHdpbGwgZ2l2ZSBpdCB0byBoaW0uICovCisgICAgICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAgICAgLyogYW5kIGFsbCB0aGF0IHNvcnQgb2Ygcm90Li4uICovCisKKyAgICAgICAgLyogdGhpcyBzdHVmZiBuZWVkcyB0byBiZSB3b3JrZWQtb3V0IGluIHRoZSBwcmVzZW5jZSBvZiBjb25maWRlbmNlICovCisgICAgICAgIC8qIGludGVydmFscyBhbmQgbXVsdGlwbGUgaXRlcmF0aW9ucyBvZiB0aGUgdGVzdC4uLiByYWogMTEvOTQgKi8KKworICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgIGtzaW5rX2ZtdCwKKyAgICAgICAgICAgICAgICAiQnl0ZXMiLAorICAgICAgICAgICAgICAgICJCeXRlcyIsCisgICAgICAgICAgICAgICAgIkJ5dGVzIiwKKyAgICAgICAgICAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorICAgICAgICAgICAgICAgIHJlbW90ZV9yZWN2X2FsaWduLAorICAgICAgICAgICAgICAgIGxvY2FsX3NlbmRfb2Zmc2V0LAorICAgICAgICAgICAgICAgIHJlbW90ZV9yZWN2X29mZnNldCwKKyAgICAgICAgICAgICAgICBieXRlc19zZW50LAorICAgICAgICAgICAgICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKW51bW1lc3NhZ2VzLAorICAgICAgICAgICAgICAgIG51bW1lc3NhZ2VzLAorICAgICAgICAgICAgICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKXRjcF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzLAorICAgICAgICAgICAgICAgIHRjcF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzKTsKKyAgICAgICAgZnByaW50Zih3aGVyZSwKKyAgICAgICAgICAgICAgICBrc2lua19mbXQyLAorICAgICAgICAgICAgICAgIHRjcF9tc3MpOworICAgICAgICBmZmx1c2god2hlcmUpOworI2lmIDAgLyogZGVmIFdBTlRfSElTVE9HUkFNICovCisgICAgICAgIGZwcmludGYod2hlcmUsIlxuXG5IaXN0b2dyYW0gb2YgdGltZSBzcGVudCBpbiBzZW5kKCkgY2FsbC5cbiIpOworICAgICAgICBmZmx1c2god2hlcmUpOworICAgICAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgICAgfQorCit9CisKKyNlbmRpZiAvKiBIQVZFX0lDU0NfRVhTICovCisKKwwKKworI2lmIGRlZmluZWQoSEFWRV9TRU5ERklMRSkgCisKKyNpZiBkZWZpbmVkKFFVSUNLX1NFTkRQQVRIKQorCisvKgorICogYSB0ZW1wb3Jhcnkgc3R1YiBmb3IgdGhlIHNlbmRwYXRoKCkgc3lzdGVtIGNhbGwKKyAqIHdoaWNoIGlzIGRlZmluZWQgJiBpbXBsZW1lbnRlZCBpbiB0aGUga2VybmVsCisgKiBidXQgd2hpY2ggaGFzIG5vIGxpYmMgc3R1Yi4KKyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zY2FsbF9kZWZpbmUuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisKK3NzaXplX3QKK3NlbmRwYXRoKGludCBzLCBjaGFyICpwYXRoLCBvZmZfdCBvZmZzZXQsIHNpemVfdCBuYnl0ZXMsCisJIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaGR0cmwsIGludCBmbGFncykKKyAgeworICAgIHJldHVybiBzeXNjYWxsKFNZU19zZW5kcGF0aCwgcywgcGF0aCwgb2Zmc2V0LCBuYnl0ZXMsIGhkdHJsLCBmbGFncyk7CisgIH0KKyNlbmRpZiAvKiBRVUlDS19TRU5EUEFUSCAqLworCisvKiBUaGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgVENQIHVuaWRpcmVjdGlvbmFsIGRhdGEgdHJhbnNmZXIgdGVzdAorICAgKGEuay5hLiBzdHJlYW0pIGZvciB0aGUgc29ja2V0cyBpbnRlcmZhY2UgdXNpbmcgdGhlIHNlbmRmaWxlKCkKKyAgIHN5c3RlbSBjYWxsIC0gVENQX1NFTkRGSUxFLiAgSXQgcmVjZWl2ZXMgaXRzICBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwKKyAgIHZhcmlhYmxlcyBmcm9tIHRoZSBzaGVsbCBhbmQgd3JpdGVzIGl0cyAgb3V0cHV0IHRvIHRoZSBzdGFuZGFyZAorICAgb3V0cHV0LiBCYXNpY2FsbHksICB0aGlzIGlzIHRoZSBzYW1lIHRlc3QgYXMgdGhlIHNlbmRfdGNwX3N0cmVhbSgpCisgICBsb2dpYyBhbmQgd2UgZXZlbiB0ZWxsIHRoZSByZW1vdGUgdG8gZG8gYSBUQ1BfU1RSRUFNIHRlc3Qgc2luY2UgZm9yIAorICAgYWxsIGl0IGtub3dzLCBub3RoaWcgaXMgZGlmZmVyZW50LiAqLworCit2b2lkIAorc2VuZGZpbGVfdGNwX3N0cmVhbShyZW1vdGVfaG9zdCkKKyAgICAgY2hhcglyZW1vdGVfaG9zdFtdOworeworICAKKyAgY2hhciAqdHB1dF90aXRsZSA9ICJcCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICBcblwKK1NvY2tldCBTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICAgICAgICAgIFxuXAorU2l6ZSAgIFNpemUgICAgU2l6ZSAgICAgVGltZSAgICAgVGhyb3VnaHB1dCAgXG5cCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAlcy9zZWMgIFxuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmICVzXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMSA9CisgICAgIiU2ZCAlNmQgJTZkICAgICUtNi4yZiAgICU3LjJmICAgJXNcbiI7CisKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpemF0aW9uICAgICAgIFNlcnZpY2UgRGVtYW5kXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBTZW5kICAgICBSZWN2ICAgICBTZW5kICAgIFJlY3ZcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIGxvY2FsICAgIHJlbW90ZSAgIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAlLTguOHMvcyAgJSUgJWMgICAgICAlJSAlYyAgICAgIHVzL0tCICAgdXMvS0JcblxuIjsKKworICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZiAlYyAlc1xuIjsKKyAgY2hhciAqY3B1X2ZtdF8xID0KKyAgICAiJTZkICU2ZCAlNmQgICAgJS02LjJmICAgICAlNy4yZiAgICUtNi4yZiAgICUtNi4yZiAgICUtNi4zZiAgJS02LjNmICVzXG4iOworCisgIGNoYXIgKmtzaW5rX2ZtdCA9ICJcblwKK0FsaWdubWVudCAgICAgIE9mZnNldCAgICAgICAgICUtOC44cyAlLTguOHMgICAgU2VuZHMgICAlLTguOHMgUmVjdnNcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGUgIFhmZXJlZCAgIFBlciAgICAgICAgICAgICAgICAgUGVyXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdiAgICAgICAgICAgICBTZW5kIChhdmcpICAgICAgICAgIFJlY3YgKGF2ZylcblwKKyU1ZCAgICU1ZCAgJTVkICAgJTVkICU2LjRnICAlNi4yZiAgICAlNmQgICAlNi4yZiAlNmRcbiI7CisKK2NoYXIgKmtzaW5rX2ZtdDIgPSAiXG5cCitNYXhpbXVtXG5cCitTZWdtZW50XG5cCitTaXplIChieXRlcylcblwKKyU2ZFxuIjsKKworICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIC8qIHdoYXQgd2Ugd2FudCBpcyB0byBoYXZlIGEgYnVmZmVyIHNwYWNlIHRoYXQgaXMgYXQgbGVhc3Qgb25lICovCisgIC8qIHNlbmQtc2l6ZSBncmVhdGVyIHRoYW4gb3VyIHNlbmQgd2luZG93LiB0aGlzIHdpbGwgaW5zdXJlIHRoYXQgd2UgKi8KKyAgLyogYXJlIG5ldmVyIHRyeWluZyB0byByZS11c2UgYSBidWZmZXIgdGhhdCBtYXkgc3RpbGwgYmUgaW4gdGhlIGhhbmRzICovCisgIC8qIG9mIHRoZSB0cmFuc3BvcnQuIFRoaXMgYnVmZmVyIHdpbGwgYmUgbWFsbG9jJ2QgYWZ0ZXIgd2UgaGF2ZSBmb3VuZCAqLworICAvKiB0aGUgc2l6ZSBvZiB0aGUgbG9jYWwgc2VuYyBzb2NrZXQgYnVmZmVyLiBXZSB3aWxsIHdhbnQgdG8gZGVhbCAqLworICAvKiB3aXRoIGFsaWdubWVudCBhbmQgb2Zmc2V0IGNvbmNlcm5zIGFzIHdlbGwuICovCisgIAorICBzdHJ1Y3Qgc2VuZGZpbGVfcmluZ19lbHQgKnNlbmRfcmluZzsKKyAgCisgIGludCBsZW47CisgIHVuc2lnbmVkIGludCBudW1tZXNzYWdlcyA9IDA7CisgIFNPQ0tFVCBzZW5kX3NvY2tldDsKKyAgaW50IGJ5dGVzX3JlbWFpbmluZzsKKyAgaW50IHRjcF9tc3MgPSAtMTsgIC8qIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgb24gcHJpbnRmIGZhciBiZWxvdyAqLworCisgIC8qIHdpdGggbGlua3MgbGlrZSBmZGRpLCBvbmUgY2FuIHNlbmQgPiAzMiBiaXRzIHdvcnRoIG9mIGJ5dGVzICovCisgIC8qIGR1cmluZyBhIHRlc3QuLi4gOy0pIGF0IHNvbWUgcG9pbnQsIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlY29tZSBhICovCisgIC8qIDY0Yml0IGludGVncmFsIHR5cGUsIGJ1dCB0aG9zZSBhcmUgbm90IGVudGlyZWx5IGNvbW1vbiB5ZXQgKi8KKyAgZG91YmxlCWJ5dGVzX3NlbnQgPSAwLjA7CisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgIGFkZHJpbmZvICpyZW1vdGVfcmVzOworICBzdHJ1Y3QgIGFkZHJpbmZvICpsb2NhbF9yZXM7CisgIHN0cnVjdAlzb2NrYWRkcl9pbglzZXJ2ZXI7CisKKyNpZiBkZWZpbmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19zdW4pCisgIG9mZl90ICAgICBzY3JhdGNoX29mZnNldDsgICAvKiB0aGUgbGludXggc2VuZGZpbGUoKSBjYWxsIHdpbGwgdXBkYXRlCisJCQkJIHRoZSBvZmZzZXQgdmFyaWFibGUsIHdoaWNoIGlzCisJCQkJIHNvbWV0aGluZyB3ZSBkbyBfbm90XyB3YW50IHRvIGhhcHBlbgorCQkJCSB0byB0aGUgdmFsdWUgaW4gdGhlIHNlbmRfcmluZyEgc28sIHdlCisJCQkJIGhhdmUgdG8gdXNlIGEgc2NyYXRjaCB2YXJpYWJsZS4gKi8KKyNlbmRpZiAvKiBfX2xpbnV4ICB8fCBkZWZpbmVkKF9fc3VuKSAqLworI2lmIGRlZmluZWQgKFVTRV9PU1gpCisgICBvZmZfdCAgICBzY3JhdGNoX2xlbjsgIC8qIERhcndpbiA5LnggbmVlZCBhIHZhbHVlLXJlc3VsdCBwYXJhbWV0ZXIgICovCisjZW5kaWYKKyNpZiBkZWZpbmVkIChfX3N1bikKKyAgIHNpemVfdCAgc2NyYXRjaF9sZW47CS8qIHRoZSBzdW4gc2VuZGZpbGV2KCkgbmVlZHMgYSBwbGFjZSB0byAKKwkJCSAgIHRlbGwgdXMgaG93IG1hbnkgYnl0ZXMgd2VyZSB3cml0dGVuLAorCQkJICAgZXZlbiB0aG91Z2ggaXQgYWxzbyByZXR1cm5zIHRoZSB2YWx1ZSAqLworICAgc2VuZGZpbGV2ZWNfdCBzdjsKKyNlbmRpZiAvKiBfX3N1biAqLworICAKKyAgc3RydWN0CXRjcF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKnRjcF9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSp0Y3Bfc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqdGNwX3N0cmVhbV9yZXN1bHQ7CisKKyAgdGNwX3N0cmVhbV9yZXF1ZXN0ICA9IAorICAgIChzdHJ1Y3QgdGNwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX3N0cmVhbV9yZXNwb25zZSA9CisgICAgKHN0cnVjdCB0Y3Bfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9zdHJlYW1fcmVzdWx0ICAgPSAKKyAgICAoc3RydWN0IHRjcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIHRpbWVfaGlzdCA9IEhJU1RfbmV3KCk7CisgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBiemVybygoY2hhciAqKSZzZXJ2ZXIsCisJc2l6ZW9mKHNlcnZlcikpOworICAKKyAgY29tcGxldGVfYWRkcmluZm9zKCZyZW1vdGVfcmVzLAorCQkgICAgICZsb2NhbF9yZXMsCisJCSAgICAgcmVtb3RlX2hvc3QsCisJCSAgICAgU09DS19TVFJFQU0sCisJCSAgICAgSVBQUk9UT19UQ1AsCisJCSAgICAgMCk7CisKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIC8qIHdlIHdhbnQgdG8gaGF2ZSBzb21lIGFkZGl0aW9uYWwsIGludGVyZXN0aW5nIGluZm9ybWF0aW9uIGluICovCisgICAgLyogdGhlIGhlYWRlcnMuIHdlIGtub3cgc29tZSBvZiBpdCBoZXJlLCBidXQgbm90IGFsbCwgc28gd2Ugd2lsbCAqLworICAgIC8qIG9ubHkgcHJpbnQgdGhlIHRlc3QgdGl0bGUgaGVyZSBhbmQgd2lsbCBwcmludCB0aGUgcmVzdWx0cyAqLworICAgIC8qIHRpdGxlcyBhZnRlciB0aGUgdGVzdCBpcyBmaW5pc2hlZCAqLworI2lmZGVmIFFVSUNLX1NFTkRQQVRICisgICAgcHJpbnRfdG9wX3Rlc3RfaGVhZGVyKCJUQ1AgU0VORFBBVEggVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworI2Vsc2UKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIlRDUCBTRU5ERklMRSBURVNUIixsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisjZW5kaWYgLyogUVVJQ0tfU0VORFBBVEggKi8KKyAgfQorICBzZW5kX3JpbmcgPSBOVUxMOworICBjb25maWRlbmNlX2l0ZXJhdGlvbiA9IDE7CisgIGluaXRfc3RhdCgpOworICAKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisgICAgCisgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgLyogZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZS4gKi8KKyAgICAKKyAgICBudW1tZXNzYWdlcyAgICA9CTA7CisgICAgYnl0ZXNfc2VudCAgICAgPQkwLjA7CisgICAgdGltZXNfdXAgICAgICAgPSAJMDsKKyAgICAKKyAgICAvKiBzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICovCisgICAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKworICAgIGlmIChzZW5kX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRmaWxlX3RjcF9zdHJlYW06IHRjcCBzdHJlYW0gZGF0YSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwic2VuZGZpbGVfdGNwX3N0cmVhbTogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgICAKKyNpZiBkZWZpbmVkKFRDUF9DT1JLKQorICAgIC8qIHNob3VsZCB0aGlzIGV2ZW4gYmUgaGVyZT8hPyAqLworICAgIGlmIChsb2NfdGNwY29yayA+IDApIHsKKyAgICAgIC8qIHRoZSB1c2VyIHdpc2hlcyBmb3IgdXMgdG8gc2V0IFRDUF9DT1JLIG9uIHRoZSBzb2NrZXQgKi8KKyAgICAgIGludCBvbmUgPSAxOworICAgICAgaWYgKHNldHNvY2tvcHQoc2VuZF9zb2NrZXQsCisJCSAgICAgZ2V0cHJvdG9ieW5hbWUoInRjcCIpLT5wX3Byb3RvLAorCQkgICAgIFRDUF9DT1JLLAorCQkgICAgIChjaGFyICopJm9uZSwKKwkJICAgICBzaXplb2Yob25lKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJcGVycm9yKCJuZXRwZXJmOiBzZW5kZmlsZV90Y3Bfc3RyZWFtOiB0Y3BfY29yayIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJzZW5kZmlsZV90Y3Bfc3RyZWFtOiB0Y3BfY29yay4uLlxuIik7CisgICAgICB9CisgICAgfQorICAgIAorI2VuZGlmIC8qIFRDUF9DT1JLICovICAgIAorCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBlaXRoZXIgcmV0cmlldmVkIHRoZSBzb2NrZXQgYnVmZmVyIHNpemVzLCAqLworICAgIC8qIG9yIGhhdmUgdHJpZWQgdG8gc2V0IHRoZW0sIHNvIG5vdywgd2UgbWF5IHdhbnQgdG8gc2V0IHRoZSBzZW5kICovCisgICAgLyogc2l6ZSBiYXNlZCBvbiB0aGF0IChiZWNhdXNlIHRoZSB1c2VyIGVpdGhlciBkaWQgbm90IHVzZSBhIC1tICovCisgICAgLyogb3B0aW9uLCBvciB1c2VkIG9uZSB3aXRoIGFuIGFyZ3VtZW50IG9mIDApLiBJZiB0aGUgc29ja2V0IGJ1ZmZlciAqLworICAgIC8qIHNpemUgaXMgbm90IGF2YWlsYWJsZSwgd2Ugd2lsbCBzZXQgdGhlIHNlbmQgc2l6ZSB0byA0S0IgLSBubyAqLworICAgIC8qIHBhcnRpY3VsYXIgcmVhc29uLCBqdXN0IGFyYml0cmFyeS4uLiAqLworCisgICAgLypjaGVjayBmb3IgZmlsZSBzaXplLyBtaW4gZmlsZSBzaXplIGhlcmU/ICBjcmVhdGUgZmlsZSBoZXJlLyBiYWNrIG91dD8/PyovCisgICAgCisgICAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgICBpZiAobHNzX3NpemUgPiAwKSB7CisJc2VuZF9zaXplID0gbHNzX3NpemU7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlzZW5kX3NpemUgPSA0MDk2OworICAgICAgfQorICAgIH0KKyAgIAorICAgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgcmluZyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZAorICAgICAgIG9mZnNldC4gbm90ZSBhbHNvIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgYSBxdWFudGl0eSAgb2YgbWVtb3J5CisgICAgICAgdGhhdCBpcyBhdCBsZWFzdCBvbmUgc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc29ja2V0ICBidWZmZXIKKyAgICAgICBzaXplLiBXZSB3YW50IHRvIGJlIHN1cmUgdGhhdCB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvICBidWZmZXJzCisgICAgICAgYWxsb2NhdGVkIC0gdGhpcyBjYW4gYmUgYSBiaXQgb2YgYSBwcm9ibGVtIHdoZW4gdGhlICBzZW5kX3NpemUKKyAgICAgICBpcyBiaWdnZXIgdGhhbiB0aGUgc29ja2V0IHNpemUsIHNvIHdlIG11c3QgY2hlY2suLi4gdGhlICB1c2VyCisgICAgICAgbWF5IGhhdmUgd2FudGVkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSAid2lkdGgiIG9mIG91ciBzZW5kCisgICAgICAgYnVmZmVycywgd2Ugc2hvdWxkIHJlc3BlY3QgdGhhdCB3aXNoLi4uICovIAorCisgICAgLypzZW5kcmluZyAtPiBhbiBvZmZzZXQgaW5kZXggdGhhdCB3aWxsIHNoaWZ0IHRoZSBzdGFydGluZyBwb2ludCBvZiB0aGUqLworICAgIC8qc2VjdGlvbiBvZiB0aGUgZmlsZSBzZW50IHRocm91Z2hvdXQgdGhlIGZpbGUqLworICAgIAorICAgIGlmIChzZW5kX3dpZHRoID09IDApIHsKKyAgICAgIHNlbmRfd2lkdGggPSAobHNzX3NpemUvc2VuZF9zaXplKSArIDE7CisgICAgICBpZiAoc2VuZF93aWR0aCA9PSAxKSBzZW5kX3dpZHRoKys7CisgICAgfQorICAgIAorICAgIGlmIChzZW5kX3JpbmcgPT0gTlVMTCkgeyAKKworICAgICAgLyogb25seSBhbGxvY2F0ZSB0aGUgc2VuZCByaW5nIG9uY2UuIHRoaXMgaXMgYSBuZXR3b3JraW5nIHRlc3QsCisJIG5vdCBhIG1lbW9yeSBhbGxvY2F0aW9uIHRlc3QuIHRoaXMgd2F5LCB3ZSBkbyBub3QgbmVlZCBhCisJIGRlYWxsb2NhdGVfYnVmZmVyX3JpbmcoKSByb3V0aW5lLCBhbmQgSSBkb24ndCBmZWVsIGxpa2UKKwkgd3JpdGluZyBvbmUgYW55d2F5IDopIHJhaiAxMS85NCAqLyAKKyAgICAgIAorICAgICAgc2VuZF9yaW5nID0gYWxsb2Nfc2VuZGZpbGVfYnVmX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkJICBzZW5kX3NpemUsCisJCQkJCSAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkJICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgfQorCQorICAgIC8qIElmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgY3B1IHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cywgd2UgbXVzdAorICAgICAgIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUKKyAgICAgICB0ZXN0cyAgdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4KKyAgICAgICBjYWxpYnJhdGVfbG9jYWxfY3B1IHdpbGwgcmV0dXJuIHJhdGhlciBxdWlja2x5IGFzIGl0IHdpbGwgaGF2ZQorICAgICAgIG5vdGhpbmcgdG8gZG8uIElmIGxvY2FsX2NwdV9yYXRlIGlzIHplcm8sIHRoZW4gd2Ugd2lsbCBnbworICAgICAgIHRocm91Z2ggIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZQorICAgICAgIGJhY2suICovIAorICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgICAgfQorCisgICAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlCisgICAgICAgc29ja2V0ICBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlCisgICAgICAgcmVhc29uIGZvciAgYWxsIHRoZSB2YWx1ZXMgYmVpbmcgcGFzc2VkIGluIHRoZSBzZXR1cAorICAgICAgIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAgbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLAorICAgICAgIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZQorICAgICAgIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICBkZWZhdWx0IHNob3VsZCBiZQorICAgICAgIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICBkZWZhdWx0IHRvIDEsIHdoaWNoCisgICAgICAgd2lsbCBiZSBubyBhbGlnbm1lbnQgYWx0ZXJhdGlvbnMuICovIAorCisgICAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlID0JRE9fVENQX1NUUkVBTTsKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZV9yZXE7CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemVfcmVxOworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplCT0JcmVjdl9zaXplOworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+bm9fZGVsYXkJPQlyZW1fbm9kZWxheTsKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50CT0JcmVtb3RlX3JlY3ZfYWxpZ247CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X29mZnNldAk9CXJlbW90ZV9yZWN2X29mZnNldDsKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlCT0JcmVtb3RlX2NwdV9yYXRlOworCisgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF9ieXRlczsKKyAgICB9CisKKyAgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnNvX3JjdmF2b2lkCT0JcmVtX3JjdmF2b2lkOworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQJPQlyZW1fc25kYXZvaWQ7CisKKyNpZmRlZiBESVJUWQorICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+ZGlydHlfY291bnQgICAgICAgPSAgICAgICByZW1fZGlydHlfY291bnQ7CisgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICAgICA9ICAgICAgIHJlbV9jbGVhbl9jb3VudDsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cG9ydCAgICAgPSBhdG9pKHJlbW90ZV9kYXRhX3BvcnQpOworICAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkgPSBhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworCisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogc2VuZF90Y3Bfc3RyZWFtOiByZXF1ZXN0aW5nIFRDUCBzdHJlYW0gdGVzdFxuIik7CisgICAgfQorICAgIAorICAgIHNlbmRfcmVxdWVzdCgpOworCisgICAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudAorICAgICAgIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrCisgICAgICAgaW50byB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuCisgICAgICAgVGhlIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlCisgICAgICAgZG9uZSBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlIGNwdQorICAgICAgIGxvY2FsbHkgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIKKyAgICAgICB2YWx1ZSByaWdodCBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUKKyAgICAgICBjb3VudGVyIHJpZ2h0IGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcyB0aGUgaGFzc2xlIG9mCisgICAgICAgZXh0cmEgbWVzc2FnZXMgYmVpbmcgc2VudCBmb3IgdGhlIFRDUCB0ZXN0cy4gICovCisgICAgCisgICAgcmVjdl9yZXNwb25zZSgpOworCisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworICAgICAgcnNyX3NpemUJICAgICAgPQl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICAgICAgcnNzX3NpemUJICAgICAgPQl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplOworICAgICAgcmVtX25vZGVsYXkgICAgID0JdGNwX3N0cmVhbV9yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgICByZW1vdGVfY3B1X3VzYWdlPQl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKyAgICAgIHJlbW90ZV9jcHVfcmF0ZSA9IHRjcF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlOworCisgICAgICAvKiB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIgcG9ydCBudW1iZXIgaXMgaW4gKi8KKyAgICAgIC8qIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgIHNldF9wb3J0X251bWJlcihyZW1vdGVfcmVzLChzaG9ydCl0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyKTsKKyAgICAgIHJlbV9yY3Zhdm9pZAk9IHRjcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3JjdmF2b2lkOworICAgICAgcmVtX3NuZGF2b2lkCT0gdGNwX3N0cmVhbV9yZXNwb25zZS0+c29fc25kYXZvaWQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgcGVycm9yKCIiKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisjaWZkZWYgV0FOVF9ERU1PCisgICAgREVNT19TVFJFQU1fU0VUVVAobHNzX3NpemUscnNyX3NpemUpCisjZW5kaWYKKworICAgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICAgIGlmIChjb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkcmxlbikgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3RjcF9zdHJlYW06IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICBwcmludGYoIiBwb3J0OiAlZFxuIixudG9ocyhzZXJ2ZXIuc2luX3BvcnQpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisjaWZkZWYgV0lOMzIKKyAgLyogdGhpcyBpcyB1c2VkIHNvIHRoZSB0aW1lciB0aHJlYWQgY2FuIGNsb3NlIHRoZSBzb2NrZXQgb3V0IGZyb20gKi8KKyAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAvKiByZXR1cm4gV1NBRUlOVFIgd2l0aCB0aGUgdGVzdCBpcyBvdmVyLiBhbnl0aGluZyB0aGF0IHdpbGwgcnVuIG9uICovCisgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0ID0gc2VuZF9zb2NrZXQ7CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgIC8qIERhdGEgU29ja2V0IHNldC11cCBpcyBmaW5pc2hlZC4gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcywgZWl0aGVyCisgICAgICAgdGhlIGNvbm5lY3Qgd291bGQgaGF2ZSBmYWlsZWQsIG9yIHRoZSBwcmV2aW91cyByZXNwb25zZSB3b3VsZAorICAgICAgIGhhdmUgaW5kaWNhdGVkIGEgcHJvYmxlbS4gSSBmYWlsZWQgdG8gc2VlIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICBleHRyYSBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLAorICAgICAgIHdlJ2xsIHNlZSBpdCBoZXJlLiBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGFzIHdlbGwgc3RhcnQgcHVtcGluZworICAgICAgIGRhdGEuICovCisgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSBzdHJlYW0gdGVzdCwgdGhleSBjYW4gYmUgKi8KKyAgICAvKiBlaXRoZXIgdGltZSBvciBieXRlLWNvdW50IGJhc2VkLiAqLworICAgIAorICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICAgIHRpbWVzX3VwID0gMDsKKyAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IDA7CisKKyAgICAgIC8qIGluIHByZXZpb3VzIHJldmlzaW9ucywgd2UgaGFkIHRoZSBzYW1lIGNvZGUgcmVwZWF0ZWQgdGhyb3VnaHQKKyAgICAgICAgIGFsbCB0aGUgdGVzdCBzdWl0ZXMuIHRoaXMgd2FzIHVubmVjZXNzYXJ5LCBhbmQgbWVhbnQgbW9yZQorICAgICAgICAgd29yayBmb3IgbWUgd2hlbiBJIHdhbnRlZCB0byBzd2l0Y2ggdG8gUE9TSVggc2lnbmFscywgc28gSQorICAgICAgICAgaGF2ZSBhYnN0cmFjdGVkIHRoaXMgb3V0IGludG8gYSByb3V0aW5lIGluIG5ldGxpYi5jLiBpZiB5b3UKKyAgICAgICAgIGFyZSBleHBlcmllbmNpbmcgc2lnbmFsIHByb2JsZW1zLCB5b3UgbWlnaHQgd2FudCB0byBsb29rCisgICAgICAgICB0aGVyZS4gcmFqIDExLzk0ICovCisKKyAgICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgICB0aW1lc191cCA9IDE7CisgICAgfQorICAgIAorICAgIC8qIFRoZSBjcHVfc3RhcnQgcm91dGluZSB3aWxsIGdyYWIgdGhlIGN1cnJlbnQgdGltZSBhbmQgcG9zc2libHkgKi8KKyAgICAvKiB2YWx1ZSBvZiB0aGUgaWRsZSBjb3VudGVyIGZvciBsYXRlciB1c2UgaW4gbWVhc3VyaW5nIGNwdSAqLworICAgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgICAKKyAgICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKyAgICAKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICAgIElOVEVSVkFMU19JTklUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKworICAgCisgICAgLyogYmVmb3JlIHdlIHN0YXJ0LCBpbml0aWFsaXplIGEgZmV3IHZhcmlhYmxlcyAqLworCisjaWZkZWYgV0FOVF9ERU1PCisgICAgaWYgKGRlbW9fbW9kZSkgeworICAgICAgSElTVF90aW1lc3RhbXAoZGVtb19vbmVfcHRyKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIFdlIHVzZSBhbiAiT1IiIHRvIGNvbnRyb2wgdGVzdCBleGVjdXRpb24uIFdoZW4gdGhlIHRlc3QgaXMKKyAgICAgICBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybgorICAgICAgIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCwgdGhlIHRpbWUgdGVzdAorICAgICAgIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgdGhlIHdob2xlCisgICAgICAgZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiAqLworICAgIAorICAgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAoYnl0ZXNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAgIAorICAgICAgLyogdGhlIHNlbmRmaWxlX3RjcF9zdHJlYW0gdGVzdCBkb2VzIG5vdCBzdXBwb3J0IG1ha2luZyB0aGUgYnVmZmVycworCSBkaXJ0eS4gMDgvMjAwMCAqLworICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisJLyogdGltZXN0YW1wIGp1c3QgYmVmb3JlIHdlIGdvIGludG8gc2VuZGZpbGUoKSBhbmQgdGhlbiBhZ2FpbgorICAgICAgICAganVzdCBhZnRlciB3ZSBjb21lIG91dCByYWogMDgvMjAwMCAqLworCS8qIGJ1dCBvbmx5IGlmIHdlIGFyZSBhY3R1YWxseSBnb2luZyB0byBkaXNwbGF5IGEgaGlzdG9ncmFtICovCisJSElTVF90aW1lc3RhbXAoJnRpbWVfb25lKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAgICAgCisgICAgICAvKiB5b3UgY2FuIGxvb2sgYXQgbmV0bGliLmggZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZpZWxkcyB3ZQorCSBhcmUgcGFzc2luZyB0byBzZW5kZmlsZSgpLiAwOC8yMDAwICovCisjaWZkZWYgUVVJQ0tfU0VORFBBVEgKKyAgICAgIGlmICgobGVuPXNlbmRwYXRoKHNlbmRfc29ja2V0LCAKKwkJCWZpbGxfZmlsZSwKKwkJCXNlbmRfcmluZy0+b2Zmc2V0LAorCQkJc2VuZF9yaW5nLT5sZW5ndGgsCisJCQlzZW5kX3JpbmctPmhkdHJsLAorCQkJc2VuZF9yaW5nLT5mbGFncykpICE9IHNlbmRfc2l6ZSkKKyNlbGlmIGRlZmluZWQoX19saW51eCkKKwlzY3JhdGNoX29mZnNldCA9IHNlbmRfcmluZy0+b2Zmc2V0OworICAgICAgaWYgKChsZW49c2VuZGZpbGUoc2VuZF9zb2NrZXQsIAorCQkJc2VuZF9yaW5nLT5maWxkZXMsIAorCQkJJnNjcmF0Y2hfb2Zmc2V0LCAgIC8qIG1vZGlmaWVkIGFmdGVyIHRoZSBjYWxsISAqLworCQkJc2VuZF9yaW5nLT5sZW5ndGgpKSAhPSBzZW5kX3NpemUpCisjZWxpZiBkZWZpbmVkIChfX3N1bikKKyAgICAgIC8qIFdlIG11c3QgY2FsbCB3aXRoIFNGVl9OT1dBSVQgYW5kIGEgbGFyZ2UgZmlsZSBzaXplICg+PSAxNk1CKSB0bworCSBnZXQgemVyby1jb3B5LCBhcyB3ZWxsIGFzIGNvbXBpbGluZyB3aXRoICAtRF9MQVJHRUZJTEVfU09VUkNFCisJICAtRF9GSUxFX09GRlNFVF9CSVRTPTY0ICovCisgICAgICBzdi5zZnZfZmQgPSBzZW5kX3JpbmctPmZpbGRlczsKKyAgICAgIHN2LnNmdl9mbGFnID0gU0ZWX05PV0FJVDsKKyAgICAgIHN2LnNmdl9vZmYgPSBzZW5kX3JpbmctPm9mZnNldDsKKyAgICAgIHN2LnNmdl9sZW4gPSAgc2VuZF9yaW5nLT5sZW5ndGg7CisgICAgICBpZiAoKGxlbiA9IHNlbmRmaWxldihzZW5kX3NvY2tldCwgJnN2LCAxLCAmc2NyYXRjaF9sZW4pKSAhPSBzZW5kX3NpemUpCisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCS8qIHNvIGNsb3NlIHRvIEhQLVVYIGFuZCB5ZXQgc28gZmFyIGF3YXkuLi4gOikgKi8KKwlpZiAoKHNlbmRmaWxlKHNlbmRfcmluZy0+ZmlsZGVzLCAKKwkJICAgICAgc2VuZF9zb2NrZXQsIAorCQkgICAgICBzZW5kX3JpbmctPm9mZnNldCwKKwkJICAgICAgc2VuZF9yaW5nLT5sZW5ndGgsCisJCSAgICAgIE5VTEwsCisJCSAgICAgIChvZmZfdCAqKSZsZW4sCisJCSAgICAgIHNlbmRfcmluZy0+ZmxhZ3MpICE9IDApIHx8CisJICAgIChsZW4gIT0gc2VuZF9zaXplKSkKKyNlbGlmIGRlZmluZWQoVVNFX09TWCkKKyAgICBzY3JhdGNoX2xlbiA9IHNlbmRfcmluZy0+bGVuZ3RoOworICAgIGlmICgoc2VuZGZpbGUoc2VuZF9yaW5nLT5maWxkZXMsCisgICAgICAgICAgICAgIHNlbmRfc29ja2V0LAorICAgICAgICAgICAgICBzZW5kX3JpbmctPm9mZnNldCwKKyAgICAgICAgICAgICAgKG9mZl90ICopJnNjcmF0Y2hfbGVuLAorICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICBzZW5kX3JpbmctPmZsYWdzKSAhPSAwKSB8fAorICAgICAgICAoc2NyYXRjaF9sZW4gIT0gc2VuZF9zaXplKSkKKyNlbHNlIC8qIG9yaWdpbmFsIHNlbmRpbGUgSFAtVVggKi8KKwkgIGlmICgobGVuPXNlbmRmaWxlKHNlbmRfc29ja2V0LCAKKwkJCSAgICBzZW5kX3JpbmctPmZpbGRlcywgCisJCQkgICAgc2VuZF9yaW5nLT5vZmZzZXQsCisJCQkgICAgc2VuZF9yaW5nLT5sZW5ndGgsCisJCQkgICAgc2VuZF9yaW5nLT5oZHRybCwKKwkJCSAgICBzZW5kX3JpbmctPmZsYWdzKSkgIT0gc2VuZF9zaXplKQorI2VuZGlmIC8qIFFVSUNLX1NFTkRQQVRIICovCisJICAgIHsKKwkgICAgICAvKiB0aGUgdGVzdCB3YXMgaW50ZXJydXB0ZWQsIG11c3QgYmUgdGhlIGVuZCBvZiB0ZXN0LiB0aGUKKwkJIHNlbmRfdGNwX3N0cmVhbSBjb2RlIGhhcyBzb21lIFdJTjMyIGlmZGVmcyB0aGF0IHdlIGRvIG5vdAorCQkgbmVlZCBoZXJlLiAqLworCSAgICAgIGlmICgobGVuID49MCkgfHwgU09DS0VUX0VJTlRSKGxlbikpIHsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICAgIHBlcnJvcigibmV0cGVyZjogZGF0YSBzZW5kIGVycm9yOiBzZW5kZmlsZSIpOworCSAgICAgIGZwcmludGYoc3RkZXJyLAorCQkgICAgICAibGVuIHdhcyAlZCBzZW5kX3NpemUgd2FzICVkXG4iLAorCQkgICAgICBsZW4sCisJCSAgICAgIHNlbmRfc2l6ZSk7CisJICAgICAgZmZsdXNoKHN0ZGVycik7CisJICAgICAgZXhpdCgxKTsKKwkgICAgfQorICAgICAgCisgICAgICAvKglvZmZzZXQgKz0gbGVuOyovCisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwkvKiB0aW1lc3RhbXAgdGhlIGV4aXQgZnJvbSB0aGUgc2VuZCBjYWxsIGFuZCB1cGRhdGUgdGhlCisJICAgaGlzdG9ncmFtICovCisgICAgICAKKwlISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworCUhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8gICAgICAKKyAgICAKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIERFTU9fU1RSRUFNX0lOVEVSVkFMKHNlbmRfc2l6ZSk7CisjZW5kaWYgCisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTICAgICAgCisgICAgICBJTlRFUlZBTFNfV0FJVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgICAKKyAgICAgIC8qIG5vdyB3ZSB3YW50IHRvIG1vdmUgb3VyIHBvaW50ZXIgdG8gdGhlIG5leHQgcG9zaXRpb24gaW4gdGhlICovCisgICAgICAvKiBkYXRhIGJ1ZmZlci4uLndlIG1heSBhbHNvIHdhbnQgdG8gd3JhcCBiYWNrIHRvIHRoZSAiYmVnaW5uaW5nIiAqLworICAgICAgLyogb2YgdGhlIGJ1ZmZlcnNwYWNlLCBzbyB3ZSB3aWxsIG1vZCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgKi8KKyAgICAgIC8qIGJ5IHRoZSBzZW5kIHdpZHRoLCBhbmQgdXNlIHRoYXQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgdG8gYWRkICovCisgICAgICAvKiB0byB0aGUgYmFzZSBwb2ludGVyLiAqLworCisgICAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsgCisgICAgICBpZiAoYnl0ZXNfcmVtYWluaW5nKSB7CisJYnl0ZXNfcmVtYWluaW5nIC09IHNlbmRfc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUaGUgdGVzdCBpcyBvdmVyLiBGbHVzaCB0aGUgYnVmZmVycyB0byB0aGUgcmVtb3RlIGVuZC4gV2UgZG8gYQorICAgICAgIGdyYWNlZnVsIHJlbGVhc2UgdG8gaW5zdXJlIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4gdGFrZW4gYnkgdGhlCisgICAgICAgcmVtb3RlLiAqLworCisgICAgLyogYnV0IGZpcnN0LCBpZiB0aGUgdmVyYm9zaXR5IGlzIGdyZWF0ZXIgdGhhbiAxLCBmaW5kLW91dCB3aGF0ICovCisgICAgLyogdGhlIFRDUCBtYXhpbXVtIHNlZ21lbnRfc2l6ZSB3YXMgKGlmIHBvc3NpYmxlKSAqLworICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgICB0Y3BfbXNzID0gLTE7CisgICAgICBnZXRfdGNwX2luZm8oc2VuZF9zb2NrZXQsJnRjcF9tc3MpOworICAgIH0KKyAgICAKKyAgICBpZiAoc2h1dGRvd24oc2VuZF9zb2NrZXQsU0hVVF9XUikgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IGNhbm5vdCBzaHV0ZG93biB0Y3Agc3RyZWFtIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogaGFuZyBhIHJlY3YoKSBvZmYgdGhlIHNvY2tldCB0byBibG9jayB1bnRpbCB0aGUgcmVtb3RlIGhhcyAqLworICAgIC8qIGJyb3VnaHQgYWxsIHRoZSBkYXRhIHVwIGludG8gdGhlIGFwcGxpY2F0aW9uLiBpdCB3aWxsIGRvIGEgKi8KKyAgICAvKiBzaHV0ZG93biB0byBjYXVzZSBhIEZJTiB0byBiZSBzZW50IG91ciB3YXkuIFdlIHdpbGwgYXNzdW1lIHRoYXQgKi8KKyAgICAvKiBhbnkgZXhpdCBmcm9tIHRoZSByZWN2KCkgY2FsbCBpcyBnb29kLi4uIHJhaiA0LzkzICovCisKKyAgICAvKiBzaW5jZSB3ZSBhcmUgdXNpbmcgc2VuZGZpbGUoKSBpbnN0ZWFkIG9mIHNlbmQsIHdlIGhhdmUgbm8KKyAgICAgICBzY3JhdGNoIGJ1ZmZlciBmcm9tIHRoZSBzZW5kX3JpbmcgdG8gdXNlIGZvciB0aGUKKyAgICAgICByZWNlaXZlLiBob3dldmVyLCBzaW5jZSB3ZSAia25vdyIgdGhhdCB0aGUgcmVjdiBzaG91bGQgYmUKKyAgICAgICByZXR1cm5pbmcgemVybyBieXRlcyAobm90IHRoYXQgd2UgYXJlIG1ha2luZyB0aGUgY2hlY2tzIHdlCisgICAgICAgc2hvdWxkKSB3ZSBjYW4gcGFzcyB0aGUgYWRkcmVzcyBvZiB0aGUgZmxhZ3MgZmllbGQuIHJhaiAwOC8yMDAwIAorICAgICovCisKKyAgICByZWN2KHNlbmRfc29ja2V0LAorCSAmKHNlbmRfcmluZy0+ZmxhZ3MpLCAKKwkgc2l6ZW9mKHNlbmRfcmluZy0+ZmxhZ3MpLAorCSAwKTsKKyAgICAKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgICAgLyogd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgICAKKyAgICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgKi8KKwkJCQkJCS8qIG1lYXN1cmVkIGFuZCBob3cgKi8KKwkJCQkJCS8qIGxvbmcgZGlkIHdlIHJlYWxseSAqLworCQkJCQkJLyogcnVuPyAqLworICAgIAorICAgIC8qIHdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBzb2NrZXQsIHNvIGNsb3NlIGl0IHRvIHByZXZlbnQgaGl0dGluZyAqLworICAgIC8qIHRoZSBsaW1pdCBvbiBtYXhpbXVtIG9wZW4gZmlsZXMuICovCisKKyAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgICAvKiBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZiBpdCAqLworICAgIC8qIHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8KKyAgICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisKKyAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICBpZiAoZGVidWcpCisJZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICAgIH0KKworICAgIGVsc2UgeworICAgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgcGVycm9yKCIiKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhydXB1dCB3YXMgZm9yIHRoZSB0ZXN0LiBJbiB0aGUgZnV0dXJlLCAqLworICAgIC8qIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dCBtZWFzdXJlZCBieSAqLworICAgIC8qIHRoZSByZW1vdGUsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCBmb3IgYSBUQ1Agc3RyZWFtIHRlc3QsICovCisgICAgLyogdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiBXZSBjYWxjdWxhdGUgKi8KKyAgICAvKiBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICovCisgICAgLyogSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5ICovCisgICAgLyogaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgKi8KKyAgICAvKiBzZW5kX3NpemUsIHNvIHdlIHJlYWxseSBkaWRuJ3Qgc2VuZCB3aGF0IGhlIGFza2VkIGZvciA7LSkgKi8KKyAgICAKKyAgICBieXRlc19zZW50CT0gbnRvaGQodGNwX3N0cmVhbV9yZXN1bHQtPmJ5dGVzX3JlY2VpdmVkKTsKKyAgICAKKyAgICB0aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3NlbnQpOworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworCisgICAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgICAgLyogT2YgY291cnNlLCBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBtaWdodCBiZSBib2d1cyBiZWNhdXNlICovCisgICAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJCisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gY2FsY19jcHVfdXRpbCgwLjApOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19zZW50LAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisJbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJCisJcmVtb3RlX2NwdV91dGlsaXphdGlvbgk9IHRjcF9zdHJlYW1fcmVzdWx0LT5jcHVfdXRpbDsKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQJPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgICAgdGNwX3N0cmVhbV9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICB9ICAgIAorICAgIGVsc2UgeworICAgICAgLyogd2Ugd2VyZSBub3QgbWVhc3VyaW5nIGNwdSwgZm9yIHRoZSBjb25maWRlbmNlIHN0dWZmLCB3ZSAqLworICAgICAgLyogc2hvdWxkIG1ha2UgaXQgLTEuMCAqLworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgCisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24rKzsKKyAgfQorCisgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZmluaXNoZWQgbWFraW5nIGFsbCB0aGUgcnVucyB0aGF0IHdlICovCisgIC8qIHdpbGwgYmUgbWFraW5nLiBzbywgd2Ugc2hvdWxkIGV4dHJhY3Qgd2hhdCB0aGUgY2FsY3VhdGVkIHZhbHVlcyAqLworICAvKiBhcmUgZm9yIGFsbCB0aGUgY29uZmlkZW5jZSBzdHVmZi4gd2UgY291bGQgbWFrZSB0aGUgdmFsdWVzICovCisgIC8qIGdsb2JhbCwgYnV0IHRoYXQgc2VlbWVkIGEgbGl0dGxlIG1lc3N5LCBhbmQgaXQgZGlkIG5vdCBzZWVtIHdvcnRoICovCisgIC8qIGFsbCB0aGUgbXVja2luZyB3aXRoIGhlYWRlciBmaWxlcy4gc28sIHdlIGNyZWF0ZSBhIHJvdXRpbmUgbXVjaCAqLworICAvKiBsaWtlIGNhbGN1YWx0ZV9jb25maWRlbmNlLCB3aGljaCBqdXN0IHJldHVybnMgdGhlIG1lYW4gdmFsdWVzLiAqLworICAvKiByYWogMTEvOTQgKi8KKworICByZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKCZlbGFwc2VkX3RpbWUsCisJCQkgICAgJnRocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisKKyAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgLyogd2UgZGlkIG5vdCBoaXQgY29uZmlkZW5jZSwgYnV0IHdlcmUgd2UgYXNrZWQgdG8gbG9vayBmb3IgaXQ/ICovCisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBkaXNwbGF5X2NvbmZpZGVuY2UoKTsKKyAgICB9CisgIH0KKworICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZCh0Y3Bfc3RyZWFtX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJKChwcmludF9oZWFkZXJzKSB8fCAKKwkJIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgfQorCisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QsCisJCSgocHJpbnRfaGVhZGVycykgfHwgCisJCSAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIH0KKworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfdGl0bGUsCisJCWZvcm1hdF91bml0cygpLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgcnNyX3NpemUsCQkgICAgICAgIC8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCSAgICAgICAgLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHNlbmRzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgdGhydXB1dCwgCQkgICAgICAgIC8qIHdoYXQgd2FzIHRoZSB4ZmVyIHJhdGUgKi8KKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQsCS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgYnJlYWs7CisgICAgfQorCisgIH0KKworICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgCisgICAgY2FzZSAwOgorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgdGhydXB1dCwKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKworICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgICAgfQorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIHJzcl9zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICBsc3Nfc2l6ZSwgCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICB0aHJ1cHV0LCAgICAgICAgICAgICAgICAgIC8qIGhvdyBmYXN0IGRpZCBpdCBnbyAqLworCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworCisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBUQ1Agc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgCisgICAgLyogdGhpcyBzdHVmZiBuZWVkcyB0byBiZSB3b3JrZWQtb3V0IGluIHRoZSBwcmVzZW5jZSBvZiBjb25maWRlbmNlICovCisgICAgLyogaW50ZXJ2YWxzIGFuZCBtdWx0aXBsZSBpdGVyYXRpb25zIG9mIHRoZSB0ZXN0Li4uIHJhaiAxMS85NCAqLworIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3ZfYWxpZ24sCisJICAgIGxvY2FsX3NlbmRfb2Zmc2V0LAorCSAgICByZW1vdGVfcmVjdl9vZmZzZXQsCisJICAgIGJ5dGVzX3NlbnQsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKW51bW1lc3NhZ2VzLAorCSAgICBudW1tZXNzYWdlcywKKwkgICAgYnl0ZXNfc2VudCAvIChkb3VibGUpdGNwX3N0cmVhbV9yZXN1bHQtPnJlY3ZfY2FsbHMsCisJICAgIHRjcF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzKTsKKworICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdDIsCisJICAgIHRjcF9tc3MpOworCisgICAgZmZsdXNoKHdoZXJlKTsKKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisKKyAgICBmcHJpbnRmKHdoZXJlLCJcblxuSGlzdG9ncmFtIG9mIHRpbWUgc3BlbnQgaW4gc2VuZCgpIGNhbGwuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIEhJU1RfcmVwb3J0KHRpbWVfaGlzdCk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgfQorfQorCisjZW5kaWYgLyogSEFWRV9TRU5ERklMRSAqLworCisvKiBUaGlzIGlzIHRoZSBzZXJ2ZXItc2lkZSByb3V0aW5lIGZvciB0aGUgdGNwIHN0cmVhbSB0ZXN0LiBJdCBpcyAqLworLyogaW1wbGVtZW50ZWQgYXMgb25lIHJvdXRpbmUuIEkgY291bGQgYnJlYWsgdGhpbmdzLW91dCBzb21ld2hhdCwgYnV0ICovCisvKiBkaWRuJ3QgZmVlbCBpdCB3YXMgbmVjZXNzYXJ5LiAqLworCit2b2lkCityZWN2X3RjcF9zdHJlYW0oKQoreworICAKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbXlhZGRyX2luLCBwZWVyYWRkcl9pbjsKKyAgU09DS0VUIHNfbGlzdGVuLHNfZGF0YTsKKyAgbmV0cGVyZl9zb2NrbGVuX3QgYWRkcmxlbjsKKyAgaW50CWxlbjsKKyAgdW5zaWduZWQgaW50CXJlY2VpdmVfY2FsbHM7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgZG91YmxlICAgYnl0ZXNfcmVjZWl2ZWQ7CisgIAorICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgY2hhciBsb2NhbF9uYW1lW0JVRlNJWl07CisgIGNoYXIgcG9ydF9idWZmZXJbUE9SVEJVRlNJWkVdOworCisjaWZkZWYgRE9fU0VMRUNUCisgIGZkX3NldCByZWFkZmRzOworICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworI2VuZGlmIC8qIERPX1NFTEVDVCAqLworCisgIHN0cnVjdAl0Y3Bfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSp0Y3Bfc3RyZWFtX3JlcXVlc3Q7CisgIHN0cnVjdAl0Y3Bfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdAkqdGNwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0CXRjcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QJKnRjcF9zdHJlYW1fcmVzdWx0czsKKyAgCisjaWZkZWYgRE9fU0VMRUNUCisgIEZEX1pFUk8oJnJlYWRmZHMpOworICB0aW1lb3V0LnR2X3NlYyA9IDE7CisgIHRpbWVvdXQudHZfdXNlYyA9IDA7CisjZW5kaWYgLyogRE9fU0VMRUNUICovCisKKyAgdGNwX3N0cmVhbV9yZXF1ZXN0CT0gCisgICAgKHN0cnVjdCB0Y3Bfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlCT0gCisgICAgKHN0cnVjdCB0Y3Bfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9zdHJlYW1fcmVzdWx0cwk9IAorICAgIChzdHJ1Y3QgdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3ZfdGNwX3N0cmVhbTogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQgKi8KKyAgLyogcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZiAqLworICAvKiBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZSAqLworICAvKiBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9zdHJlYW06IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gVENQX1NUUkVBTV9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3N0cmVhbTogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudCB3aXRoIHRoZSBkZXNpcmVkIG9mZnNldC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3N0cmVhbTogcmVxdWVzdGVkIGFsaWdubWVudCBvZiAlZFxuIiwKKwkgICAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnNlbmRfYnVmX3NpemU7CisgIGxzcl9zaXplX3JlcSA9IHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9idWZfc2l6ZTsKKyAgbG9jX25vZGVsYXkgID0gdGNwX3N0cmVhbV9yZXF1ZXN0LT5ub19kZWxheTsKKyAgbG9jX3JjdmF2b2lkID0gdGNwX3N0cmVhbV9yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0gdGNwX3N0cmVhbV9yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYodGNwX3N0cmVhbV9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQl0Y3Bfc3RyZWFtX3JlcXVlc3QtPnBvcnQpOworCisgIGxvY2FsX3JlcyA9IGNvbXBsZXRlX2FkZHJpbmZvKGxvY2FsX25hbWUsCisJCQkJbG9jYWxfbmFtZSwKKwkJCQlwb3J0X2J1ZmZlciwKKwkJCQluZl90b19hZih0Y3Bfc3RyZWFtX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NUUkVBTSwKKwkJCQlJUFBST1RPX1RDUCwKKwkJCQkwKTsKKworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyNpZmRlZiBXSU4zMgorICAvKiBUaGUgdGVzdCB0aW1lciBjYW4gZmlyZSBkdXJpbmcgb3BlcmF0aW9ucyBvbiB0aGUgbGlzdGVuaW5nIHNvY2tldCwKKyAgICAgc28gdG8gbWFrZSB0aGUgc3RhcnRfdGltZXIgYmVsb3cgd29yayB3ZSBoYXZlIHRvIG1vdmUKKyAgICAgaXQgdG8gY2xvc2Ugc19saXN0ZW4gd2hpbGUgd2UgYXJlIGJsb2NrZWQgb24gYWNjZXB0LiAqLworICB3aW5fa2x1ZGdlX3NvY2tldDIgPSBzX2xpc3RlbjsKKyNlbmRpZgorICAKKyAgLyogd2hhdCBzb3J0IG9mIHNpemVzIGRpZCB3ZSBlbmQtdXAgd2l0aD8gKi8KKyAgaWYgKHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplID09IDApIHsKKyAgICBpZiAobHNyX3NpemUgPiAwKSB7CisgICAgICByZWN2X3NpemUgPSBsc3Jfc2l6ZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZWN2X3NpemUgPSA0MDk2OworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICByZWN2X3NpemUgPSB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZTsKKyAgfQorICAKKyAgLyogd2Ugd2FudCB0byBzZXQtdXAgb3VyIHJlY3ZfcmluZyBpbiBhIG1hbm5lciBhbmFsYWdvdXMgdG8gd2hhdCB3ZSAqLworICAvKiBkbyBvbiB0aGUgc2VuZGluZyBzaWRlLiB0aGlzIGlzIG1vcmUgZm9yIHRoZSBzYWtlIG9mIHN5bW1ldHJ5ICovCisgIC8qIHRoYW4gZm9yIHRoZSBuZWVkcyBvZiBzYXkgY29weSBhdm9pZGFuY2UsIGJ1dCBpdCBtaWdodCBhbHNvIGJlICovCisgIC8qIG1vcmUgcmVhbGlzdGljIC0gdGhpcyB3YXkgb25lIGNvdWxkIGNvbmNlaXZhYmx5IGdvIHdpdGggYSAqLworICAvKiBkb3VibGUtYnVmZmVyaW5nIHNjaGVtZSB3aGVuIHRha2luZyB0aGUgZGF0YSBhbiBwdXR0aW5nIGl0IGludG8gKi8KKyAgLyogdGhlIGZpbGVzeXN0ZW0gb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gcmFqIDcvOTQgKi8KKworICBpZiAocmVjdl93aWR0aCA9PSAwKSB7CisgICAgcmVjdl93aWR0aCA9IChsc3Jfc2l6ZS9yZWN2X3NpemUpICsgMTsKKyAgICBpZiAocmVjdl93aWR0aCA9PSAxKSByZWN2X3dpZHRoKys7CisgIH0KKworICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgIHJlY3Zfc2l6ZSwKKwkJCQkgICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHRjcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3N0cmVhbTogcmVjZWl2ZSBhbGlnbm1lbnQgYW5kIG9mZnNldCBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfbGlzdGVuLCA1KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLCAKKwkJICAoc3RydWN0IHNvY2thZGRyICopJm15YWRkcl9pbiwKKwkJICAmYWRkcmxlbikgPT0gU09DS0VUX0VSUk9SKXsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHRjcF9zdHJlYW1fcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAKKyAgICAoaW50KSBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZteWFkZHJfaW4pLT5zaW5fcG9ydCk7CisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIC0xIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IChmbG9hdCkwLjA7IAkvKiBhc3N1bWUgbm8gY3B1ICovCisgIGlmICh0Y3Bfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgdGNwX3N0cmVhbV9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHRjcF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlID0gCisgICAgICBjYWxpYnJhdGVfbG9jYWxfY3B1KHRjcF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIGVsc2UgeworICAgIHRjcF9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMDsKKyAgfQorICAKKyAgLyogYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3BvbnNlIGJhY2sgdG8gdGhlIGluaXRpYXRvciwgcHVsbCBzb21lIG9mICovCisgIC8qIHRoZSBzb2NrZXQgcGFybXMgZnJvbSB0aGUgZ2xvYmFscyAqLworICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHRjcF9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgdGNwX3N0cmVhbV9yZXNwb25zZS0+bm9fZGVsYXkgPSBsb2Nfbm9kZWxheTsKKyAgdGNwX3N0cmVhbV9yZXNwb25zZS0+c29fcmN2YXZvaWQgPSBsb2NfcmN2YXZvaWQ7CisgIHRjcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworICB0Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5yZWNlaXZlX3NpemUgPSByZWN2X3NpemU7CisKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgYWRkcmxlbiA9IHNpemVvZihwZWVyYWRkcl9pbik7CisgIAorICBpZiAoKHNfZGF0YT1hY2NlcHQoc19saXN0ZW4sCisJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJICAgICAmYWRkcmxlbikpID09IElOVkFMSURfU09DS0VUKSB7CisgICAgLyogTGV0J3MganVzdCBwdW50LiBUaGUgcmVtb3RlIHdpbGwgYmUgZ2l2ZW4gc29tZSBpbmZvcm1hdGlvbiAqLworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBleGl0KDEpOworICB9CisKKyNpZmRlZiBXSU4zMgorICAvKiB0aGlzIGlzIHVzZWQgc28gdGhlIHRpbWVyIHRocmVhZCBjYW4gY2xvc2UgdGhlIHNvY2tldCBvdXQgZnJvbSAqLworICAvKiB1bmRlciB1cywgd2hpY2ggdG8gZGF0ZSBpcyB0aGUgZWFzaWVzdC9jbGVhbmVzdC9sZWFzdCAqLworICAvKiBXaW5kb3dzLXNwZWNpZmljIHdheSBJIGNhbiBmaW5kIHRvIGZvcmNlIHRoZSB3aW5zb2NrIGNhbGxzIHRvICovCisgIC8qIHJldHVybiBXU0FFSU5UUiB3aXRoIHRoZSB0ZXN0IGlzIG92ZXIuIGFueXRoaW5nIHRoYXQgd2lsbCBydW4gb24gKi8KKyAgLyogOTUgYW5kIE5UIGFuZCBpcyBjbG9zZXIgdG8gd2hhdCBuZXRwZXJmIGV4cGVjdHMgZnJvbSBVbml4IHNpZ25hbHMgKi8KKyAgLyogYW5kIHN1Y2ggd291bGQgYmUgYXBwcmVjaWF0ZWQgcmFqIDEvOTYgKi8KKyAgd2luX2tsdWRnZV9zb2NrZXQgPSBzX2RhdGE7CisgIHdpbl9rbHVkZ2Vfc29ja2V0MiA9IElOVkFMSURfU09DS0VUOworI2VuZGlmIC8qIFdJTjMyICovCisKKyAgdGltZXNfdXAgPSAwOworCisgIHN0YXJ0X3RpbWVyKHRjcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGggKyBQQURfVElNRSk7CisKKyNpZmRlZiBLTFVER0VfU09DS0VUX09QVElPTlMKKyAgLyogdGhpcyBpcyBmb3IgdGhvc2Ugc3lzdGVtcyB3aGljaCAqSU5DT1JSRUNUTFkqIGZhaWwgdG8gcGFzcyAqLworICAvKiBhdHRyaWJ1dGVzIGFjcm9zcyBhbiBhY2NlcHQoKSBjYWxsLiBJbmNsdWRpbmcgdGhpcyBnb2VzIGFnYWluc3QgKi8KKyAgLyogbXkgYmV0dGVyIGp1ZGdlbWVudCA6KCByYWogMTEvOTUgKi8KKworICBrbHVkZ2Vfc29ja2V0X29wdGlvbnMoc19kYXRhKTsKKworI2VuZGlmIC8qIEtMVURHRV9TT0NLRVRfT1BUSU9OUyAqLworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHRjcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworICAKKyAgLyogVGhlIGxvb3Agd2lsbCBleGl0IHdoZW4gdGhlIHNlbmRlciBkb2VzIGEgc2h1dGRvd24sIHdoaWNoIHdpbGwgKi8KKyAgLyogcmV0dXJuIGEgbGVuZ3RoIG9mIHplcm8gICAqLworICAKKyAgLyogdGhlcmUgdXNlZCB0byBiZSBhbiAjaWZkZWYgRElSVFkgY2FsbCB0byBhY2Nlc3NfYnVmZmVyKCkgaGVyZSwKKyAgICAgYnV0IHdlIGhhdmUgc3dpdGNoZWQgZnJvbSBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciBiZWZvcmUgdGhlIHJlY3YoKQorICAgICBjYWxsIHRvIGFjY2Vzc2luZyB0aGUgYnVmZmVyIGFmdGVyIHRoZSByZWN2KCkgY2FsbC4gIFRoZQorICAgICBhY2Nlc3NpbmcgYmVmb3JlIHdhcywgSUlSQywgcmVsYXRlZCB0byBoYXZpbmcgZGlydHkgZGF0YSB3aGVuCisgICAgIGRvaW5nIHBhZ2UtZmxpcHBpbmcgY29weSBhdm9pZGFuY2UuICovCisKKyAgYnl0ZXNfcmVjZWl2ZWQgPSAwOworICByZWNlaXZlX2NhbGxzICA9IDA7CisKKyAgd2hpbGUgKCF0aW1lc191cCAmJiAoKGxlbiA9IHJlY3Yoc19kYXRhLCByZWN2X3JpbmctPmJ1ZmZlcl9wdHIsIHJlY3Zfc2l6ZSwgMCkpICE9IDApKSB7CisgICAgaWYgKGxlbiA9PSBTT0NLRVRfRVJST1IgKQorCXsKKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBieXRlc19yZWNlaXZlZCArPSBsZW47CisgICAgcmVjZWl2ZV9jYWxscysrOworCisjaWZkZWYgRElSVFkKKyAgICAvKiB3ZSBhY2Nlc3MgdGhlIGJ1ZmZlciBhZnRlciB0aGUgcmVjdigpIGNhbGwgbm93LCByYXRoZXIgdGhhbiBiZWZvcmUgKi8KKyAgICBhY2Nlc3NfYnVmZmVyKHJlY3ZfcmluZy0+YnVmZmVyX3B0ciwKKwkJICByZWN2X3NpemUsCisJCSAgdGNwX3N0cmVhbV9yZXF1ZXN0LT5kaXJ0eV9jb3VudCwKKwkJICB0Y3Bfc3RyZWFtX3JlcXVlc3QtPmNsZWFuX2NvdW50KTsKKyNlbmRpZiAvKiBESVJUWSAqLworCisKKyAgICAvKiBtb3ZlIHRvIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUgcmVjdl9yaW5nICovCisgICAgcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworCisjaWZkZWYgUEFVU0UKKyAgICBzbGVlcCgxKTsKKyNlbmRpZiAvKiBQQVVTRSAqLworCisjaWZkZWYgRE9fU0VMRUNUCisJRkRfU0VUKHNfZGF0YSwmcmVhZGZkcyk7CisJc2VsZWN0KHNfZGF0YSsxLCZyZWFkZmRzLE5VTEwsTlVMTCwmdGltZW91dCk7CisjZW5kaWYgLyogRE9fU0VMRUNUICovCisKKyAgfQorICAKKyAgLyogcGVyZm9ybSBhIHNodXRkb3duIHRvIHNpZ25hbCB0aGUgc2VuZGVyIHRoYXQgKi8KKyAgLyogd2UgaGF2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEgc2VudC4gcmFqIDQvOTMgKi8KKworICBpZiAoc2h1dGRvd24oc19kYXRhLFNIVVRfV1IpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgY3B1X3N0b3AodGNwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3Bfc3RyZWFtOiBnb3QgJWcgYnl0ZXNcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3Bfc3RyZWFtOiBnb3QgJWQgcmVjdnNcbiIsCisJICAgIHJlY2VpdmVfY2FsbHMpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHRjcF9zdHJlYW1fcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQJPSBodG9uZChieXRlc19yZWNlaXZlZCk7CisgIHRjcF9zdHJlYW1fcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICB0Y3Bfc3RyZWFtX3Jlc3VsdHMtPnJlY3ZfY2FsbHMJPSByZWNlaXZlX2NhbGxzOworICAKKyAgdGNwX3N0cmVhbV9yZXN1bHRzLT5jcHVfbWV0aG9kID0gY3B1X21ldGhvZDsKKyAgdGNwX3N0cmVhbV9yZXN1bHRzLT5udW1fY3B1cyAgID0gbGliX251bV9sb2NfY3B1czsKKyAgCisgIGlmICh0Y3Bfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgdGNwX3N0cmVhbV9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKyAgfTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF9zdHJlYW06IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICIgICAgICAgICAgICAgICAgIGJ5dGVzX3JlY2VpdmVkICVnIHJlY2VpdmVfY2FsbHMgJWRcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkLAorCSAgICByZWNlaXZlX2NhbGxzKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiICAgICAgICAgICAgICAgICBsZW4gJWRcbiIsCisJICAgIGxlbik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIHNlbmRfcmVzcG9uc2UoKTsKKworICAvKiB3ZSBhcmUgbm93IGRvbmUgd2l0aCB0aGUgc29ja2V0cyAqLworICBjbG9zZShzX2RhdGEpOworICBjbG9zZShzX2xpc3Rlbik7CisKKyAgfQorDAorLyogVGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgcm91dGluZSBmb3IgdGhlIHRjcCBtYWVydHMgdGVzdC4gSXQgaXMKKyAgIGltcGxlbWVudGVkIGFzIG9uZSByb3V0aW5lLiBJIGNvdWxkIGJyZWFrIHRoaW5ncy1vdXQgc29tZXdoYXQsIGJ1dAorICAgZGlkbid0IGZlZWwgaXQgd2FzIG5lY2Vzc2FyeS4gKi8gCisKK3ZvaWQKK3JlY3ZfdGNwX21hZXJ0cygpCit7CisgIAorICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBteWFkZHJfaW4sIHBlZXJhZGRyX2luOworICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgY2hhciAgbG9jYWxfbmFtZVtCVUZTSVpdOworICBjaGFyICBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyAgU09DS0VUCXNfbGlzdGVuLHNfZGF0YTsKKyAgbmV0cGVyZl9zb2NrbGVuX3QgCWFkZHJsZW47CisgIGludAlsZW47CisgIHVuc2lnbmVkIGludAlzZW5kX2NhbGxzOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIGRvdWJsZSAgIGJ5dGVzX3NlbnQgPSAwLjAgOworICAKKyAgc3RydWN0IHJpbmdfZWx0ICpzZW5kX3Jpbmc7CisKKyAgc3RydWN0CXRjcF9tYWVydHNfcmVxdWVzdF9zdHJ1Y3QJKnRjcF9tYWVydHNfcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9tYWVydHNfcmVzcG9uc2Vfc3RydWN0CSp0Y3BfbWFlcnRzX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX21hZXJ0c19yZXN1bHRzX3N0cnVjdAkqdGNwX21hZXJ0c19yZXN1bHRzOworICAKKyAgdGNwX21hZXJ0c19yZXF1ZXN0CT0gCisgICAgKHN0cnVjdCB0Y3BfbWFlcnRzX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfbWFlcnRzX3Jlc3BvbnNlCT0gCisgICAgKHN0cnVjdCB0Y3BfbWFlcnRzX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9tYWVydHNfcmVzdWx0cwk9IAorICAgIChzdHJ1Y3QgdGNwX21hZXJ0c19yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3ZfdGNwX21hZXJ0czogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQKKyAgICAgcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZgorICAgICBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZQorICAgICBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsCisgICAgIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZQorICAgICBkZXRlcm1pbmVkLCB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbworICAgICB3cm9uZyBmb3IgYW55IHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0CisgICAgIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzCisgICAgIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMKKyAgICAgdW5leHBlY3RlZCByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9tYWVydHM6IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gVENQX01BRVJUU19SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX21hZXJ0czogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudCB3aXRoIHRoZSBkZXNpcmVkIG9mZnNldC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX21hZXJ0czogcmVxdWVzdGVkIGFsaWdubWVudCBvZiAlZFxuIiwKKwkgICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIEdyYWIgYSBzb2NrZXQgdG8gbGlzdGVuIG9uLCBhbmQgdGhlbiBsaXN0ZW4gb24gaXQuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9tYWVydHM6IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBjcmVhdGVfZGF0YV9zb2NrZXQgZXhwZWN0cyB0byBmaW5kIHNvbWUgdGhpbmdzIGluIHRoZSBnbG9iYWwgKi8KKyAgLyogdmFyaWFibGVzLCBzbyBzZXQgdGhlIGdsb2JhbHMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgcmVxdWVzdC4gKi8KKyAgLyogb25jZSB0aGUgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQsIHdlIHdpbGwgc2V0IHRoZSByZXNwb25zZSB2YWx1ZXMgKi8KKyAgLyogYmFzZWQgb24gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgdGhvc2UgZ2xvYmFscy4gcmFqIDcvOTQgKi8KKyAgbHNzX3NpemVfcmVxID0gdGNwX21hZXJ0c19yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZV9yZXEgPSB0Y3BfbWFlcnRzX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19ub2RlbGF5ID0gdGNwX21hZXJ0c19yZXF1ZXN0LT5ub19kZWxheTsKKyAgbG9jX3JjdmF2b2lkID0gdGNwX21hZXJ0c19yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0gdGNwX21hZXJ0c19yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYodGNwX21hZXJ0c19yZXF1ZXN0LT5pcGZhbWlseSksCisJCQl0Y3BfbWFlcnRzX3JlcXVlc3QtPnBvcnQpOworCisgIGxvY2FsX3JlcyA9IGNvbXBsZXRlX2FkZHJpbmZvKGxvY2FsX25hbWUsCisJCQkJbG9jYWxfbmFtZSwKKwkJCQlwb3J0X2J1ZmZlciwKKwkJCQluZl90b19hZih0Y3BfbWFlcnRzX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NUUkVBTSwKKwkJCQlJUFBST1RPX1RDUCwKKwkJCQkwKTsKKworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyNpZmRlZiBXSU4zMgorICAvKiBUaGUgdGVzdCB0aW1lciBjYW4gZmlyZSBkdXJpbmcgb3BlcmF0aW9ucyBvbiB0aGUgbGlzdGVuaW5nIHNvY2tldCwKKyAgICAgc28gdG8gbWFrZSB0aGUgc3RhcnRfdGltZXIgYmVsb3cgd29yayB3ZSBoYXZlIHRvIG1vdmUKKyAgICAgaXQgdG8gY2xvc2Ugc19saXN0ZW4gd2hpbGUgd2UgYXJlIGJsb2NrZWQgb24gYWNjZXB0LiAqLworICB3aW5fa2x1ZGdlX3NvY2tldDIgPSBzX2xpc3RlbjsKKyNlbmRpZgorCisgIAorICAvKiB3aGF0IHNvcnQgb2Ygc2l6ZXMgZGlkIHdlIGVuZC11cCB3aXRoPyAqLworICBpZiAodGNwX21hZXJ0c19yZXF1ZXN0LT5zZW5kX3NpemUgPT0gMCkgeworICAgIGlmIChsc3Nfc2l6ZSA+IDApIHsKKyAgICAgIHNlbmRfc2l6ZSA9IGxzc19zaXplOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHNlbmRfc2l6ZSA9IDQwOTY7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNlbmRfc2l6ZSA9IHRjcF9tYWVydHNfcmVxdWVzdC0+c2VuZF9zaXplOworICB9CisgIAorICAvKiB3ZSB3YW50IHRvIHNldC11cCBvdXIgcmVjdl9yaW5nIGluIGEgbWFubmVyIGFuYWxhZ291cyB0byB3aGF0IHdlICovCisgIC8qIGRvIG9uIHRoZSByZWN2aW5nIHNpZGUuIHRoaXMgaXMgbW9yZSBmb3IgdGhlIHNha2Ugb2Ygc3ltbWV0cnkgKi8KKyAgLyogdGhhbiBmb3IgdGhlIG5lZWRzIG9mIHNheSBjb3B5IGF2b2lkYW5jZSwgYnV0IGl0IG1pZ2h0IGFsc28gYmUgKi8KKyAgLyogbW9yZSByZWFsaXN0aWMgLSB0aGlzIHdheSBvbmUgY291bGQgY29uY2VpdmFibHkgZ28gd2l0aCBhICovCisgIC8qIGRvdWJsZS1idWZmZXJpbmcgc2NoZW1lIHdoZW4gdGFraW5nIHRoZSBkYXRhIGFuIHB1dHRpbmcgaXQgaW50byAqLworICAvKiB0aGUgZmlsZXN5c3RlbSBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiByYWogNy85NCAqLworCisgIGlmIChzZW5kX3dpZHRoID09IDApIHsKKyAgICBzZW5kX3dpZHRoID0gKGxzcl9zaXplL3NlbmRfc2l6ZSkgKyAxOworICAgIGlmIChzZW5kX3dpZHRoID09IDEpIHNlbmRfd2lkdGgrKzsKKyAgfQorCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgc2VuZF9zaXplLAorCQkJCSAgIHRjcF9tYWVydHNfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJCQkJICAgdGNwX21hZXJ0c19yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfbWFlcnRzOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTm93LCBsZXQncyBzZXQtdXAgdGhlIHNvY2tldCB0byBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zICovCisgIGlmIChsaXN0ZW4oc19saXN0ZW4sIDUpID09IFNPQ0tFVF9FUlJPUikgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAKKyAgLyogbm93IGdldCB0aGUgcG9ydCBudW1iZXIgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSAgKi8KKyAgYWRkcmxlbiA9IHNpemVvZihteWFkZHJfaW4pOworICBpZiAoZ2V0c29ja25hbWUoc19saXN0ZW4sIAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLAorCQkgICZhZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3cgbXlhZGRyX2luIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzICovCisgIC8qIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0IHRoZSAqLworICAvKiBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiAqLworICAKKyAgdGNwX21hZXJ0c19yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlciA9IAorICAgIChpbnQpIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopJm15YWRkcl9pbiktPnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgLTEgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHRjcF9tYWVydHNfcmVzcG9uc2UtPmNwdV9yYXRlID0gKGZsb2F0KTAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgaWYgKHRjcF9tYWVydHNfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB0Y3BfbWFlcnRzX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgdGNwX21hZXJ0c19yZXNwb25zZS0+Y3B1X3JhdGUgPSAKKyAgICAgIGNhbGlicmF0ZV9sb2NhbF9jcHUodGNwX21hZXJ0c19yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgZWxzZSB7CisgICAgdGNwX21hZXJ0c19yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAwOworICB9CisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHRjcF9tYWVydHNfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgdGNwX21hZXJ0c19yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworICB0Y3BfbWFlcnRzX3Jlc3BvbnNlLT5ub19kZWxheSA9IGxvY19ub2RlbGF5OworICB0Y3BfbWFlcnRzX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgdGNwX21hZXJ0c19yZXNwb25zZS0+c29fc25kYXZvaWQgPSBsb2Nfc25kYXZvaWQ7CisgIHRjcF9tYWVydHNfcmVzcG9uc2UtPnNlbmRfc2l6ZSA9IHNlbmRfc2l6ZTsKKworICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorICBhZGRybGVuID0gc2l6ZW9mKHBlZXJhZGRyX2luKTsKKworICAvKiB3ZSB3aWxsIHN0YXJ0IHRoZSB0aW1lciBiZWZvcmUgdGhlIGFjY2VwdCgpIHRvIGJlIHNvbWV3aGF0CisgICAgIGFuYWxhZ291cyB0byB0aGUgc3RhcnRpbmcgb2YgdGhlIHRpbWVyIGJlZm9yZSB0aGUgY29ubmVjdCgpIGNhbGwKKyAgICAgaW4gdGhlIFRDUF9TVFJFQU0gdGVzdC4gcmFqIDIwMDItMDYtMjEgKi8KKworICBzdGFydF90aW1lcih0Y3BfbWFlcnRzX3JlcXVlc3QtPnRlc3RfbGVuZ3RoKTsKKworICAvKiBOb3cgaXQncyB0aW1lIHRvIHN0YXJ0IHJlY2VpdmluZyBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLiBXZSB3aWxsCisgICAgIGZpcnN0IGdyYWIgdGhlIGFwcm9wcmlhdGUgY291bnRlcnMgYW5kIHRoZW4gc3RhcnQgZ3JhYmJpbmcuICovCisgIAorICBjcHVfc3RhcnQodGNwX21hZXJ0c19yZXF1ZXN0LT5tZWFzdXJlX2NwdSk7CisgIAorCisgIGlmICgoc19kYXRhPWFjY2VwdChzX2xpc3RlbiwKKwkJICAgICAoc3RydWN0IHNvY2thZGRyICopJnBlZXJhZGRyX2luLAorCQkgICAgICZhZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAvKiBMZXQncyBqdXN0IHB1bnQuIFRoZSByZW1vdGUgd2lsbCBiZSBnaXZlbiBzb21lIGluZm9ybWF0aW9uICovCisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIGV4aXQoMSk7CisgIH0KKworI2lmZGVmIFdJTjMyCisgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgIC8qIFdpbmRvd3Mtc3BlY2lmaWMgd2F5IEkgY2FuIGZpbmQgdG8gZm9yY2UgdGhlIHdpbnNvY2sgY2FsbHMgdG8gKi8KKyAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAvKiBhbmQgc3VjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCByYWogMS85NiAqLworICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNfZGF0YTsKKyAgd2luX2tsdWRnZV9zb2NrZXQyID0gSU5WQUxJRF9TT0NLRVQ7CisjZW5kaWYgLyogV0lOMzIgKi8KKworI2lmZGVmIEtMVURHRV9TT0NLRVRfT1BUSU9OUworICAKKyAgLyogdGhpcyBpcyBmb3IgdGhvc2Ugc3lzdGVtcyB3aGljaCAqSU5DT1JSRUNUTFkqIGZhaWwgdG8gcGFzcworICAgICBhdHRyaWJ1dGVzIGFjcm9zcyBhbiBhY2NlcHQoKSBjYWxsLiBJbmNsdWRpbmcgdGhpcyBnb2VzIGFnYWluc3QKKyAgICAgbXkgYmV0dGVyIGp1ZGdlbWVudCA6KCByYWogMTEvOTUgKi8KKworICBrbHVkZ2Vfc29ja2V0X29wdGlvbnMoc19kYXRhKTsKKworI2VuZGlmIC8qIEtMVURHRV9TT0NLRVRfT1BUSU9OUyAqLworICAKKyAgLyogVGhlIGxvb3Agd2lsbCBleGl0IHdoZW4gdGhlIHNlbmRlciBkb2VzIGEgc2h1dGRvd24sIHdoaWNoIHdpbGwgKi8KKyAgLyogcmV0dXJuIGEgbGVuZ3RoIG9mIHplcm8gICAqLworICAKKyAgYnl0ZXNfc2VudCA9IDAuMDsKKyAgc2VuZF9jYWxscyAgPSAwOworCisgIGxlbiA9IDA7ICAgLyogbnQtbGludDsgbGVuIGlzIG5vdCBpbml0aWFsaXplZCAocHJpbnRmIGZhciBiZWxvdykgaWYKKwkJdGltZXNfdXAgaW5pdGlhbGx5IHRydWUuKi8KKyAgdGltZXNfdXAgPSAwOyAvKiBtdXN0IHJlbWVtYmVyIHRvIGluaXRpYWxpemUgdGhpcyBsaXR0bGUgYmVhdXR5ICovCisgIHdoaWxlICghdGltZXNfdXApIHsKKworI2lmZGVmIERJUlRZCisgICAgLyogd2Ugd2FudCB0byBkaXJ0eSBzb21lIG51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlZ2VycyBpbiB0aGUgYnVmZmVyICovCisgICAgLyogd2UgYXJlIGFib3V0IHRvIHNlbmQuIHdlIG1heSBhbHNvIHdhbnQgdG8gYnJpbmcgc29tZSBudW1iZXIgb2YgKi8KKyAgICAvKiB0aGVtIGNsZWFubHkgaW50byB0aGUgY2FjaGUuIFRoZSBjbGVhbiBvbmVzIHdpbGwgZm9sbG93IGFueSBkaXJ0eSAqLworICAgIC8qIG9uZXMgaW50byB0aGUgY2FjaGUuICovCisKKyAgYWNjZXNzX2J1ZmZlcihzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCXNlbmRfc2l6ZSwKKwkJdGNwX21hZXJ0c19yZXF1ZXN0LT5kaXJ0eV9jb3VudCwKKwkJdGNwX21hZXJ0c19yZXF1ZXN0LT5jbGVhbl9jb3VudCk7CisKKyNlbmRpZiAvKiBESVJUWSAqLworCisgICAgaWYoKGxlbj1zZW5kKHNfZGF0YSwKKwkJIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJIHNlbmRfc2l6ZSwKKwkJIDApKSAhPSBzZW5kX3NpemUpIHsKKwkJaWYgKChsZW4gPj0wKSB8fCBTT0NLRVRfRUlOVFIobGVuKSkgeworCSAgICAgIC8qIHRoZSB0ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgbXVzdCBiZSB0aGUgZW5kIG9mIHRlc3QgKi8KKwkgICAgICBicmVhazsKKwkJfQorICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgYnl0ZXNfc2VudCArPSBsZW47CisgICAgc2VuZF9jYWxscysrOworCisgICAgLyogbW9yZSB0byB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIHNlbmRfcmluZyAqLworICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKworICB9CisgIAorICAvKiBwZXJmb3JtIGEgc2h1dGRvd24gdG8gc2lnbmFsIHRoZSBzZW5kZXIgdGhhdCAqLworICAvKiB3ZSBoYXZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSBzZW50LiByYWogNC85MyAqLworCisgIGlmIChzaHV0ZG93bihzX2RhdGEsU0hVVF9XUikgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgLyogaGFuZyBhIHJlY3YoKSBvZmYgdGhlIHNvY2tldCB0byBibG9jayB1bnRpbCB0aGUgcmVtb3RlIGhhcworICAgICBicm91Z2h0IGFsbCB0aGUgZGF0YSB1cCBpbnRvIHRoZSBhcHBsaWNhdGlvbi4gaXQgd2lsbCBkbyBhCisgICAgIHNodXRkb3duIHRvIGNhdXNlIGEgRklOIHRvIGJlIHNlbnQgb3VyIHdheS4gV2Ugd2lsbCBhc3N1bWUgdGhhdAorICAgICBhbnkgZXhpdCBmcm9tIHRoZSByZWN2KCkgY2FsbCBpcyBnb29kLi4uIHJhaiA0LzkzICovCisgICAgCisgIHJlY3Yoc19kYXRhLCBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsIHNlbmRfc2l6ZSwgMCk7CisgICAgCisgIAorICBjcHVfc3RvcCh0Y3BfbWFlcnRzX3JlcXVlc3QtPm1lYXN1cmVfY3B1LCZlbGFwc2VkX3RpbWUpOworICAKKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF9tYWVydHM6IGdvdCAlZyBieXRlc1xuIiwKKwkgICAgYnl0ZXNfc2VudCk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdGNwX21hZXJ0czogZ290ICVkIHNlbmRzXG4iLAorCSAgICBzZW5kX2NhbGxzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICB0Y3BfbWFlcnRzX3Jlc3VsdHMtPmJ5dGVzX3NlbnQJPSBodG9uZChieXRlc19zZW50KTsKKyAgdGNwX21hZXJ0c19yZXN1bHRzLT5lbGFwc2VkX3RpbWUJPSBlbGFwc2VkX3RpbWU7CisgIHRjcF9tYWVydHNfcmVzdWx0cy0+c2VuZF9jYWxscwk9IHNlbmRfY2FsbHM7CisgIAorICBpZiAodGNwX21hZXJ0c19yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHRjcF9tYWVydHNfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgIH07CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3BfbWFlcnRzOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiICAgICAgICAgICAgICAgICBieXRlc19zZW50ICVnIHNlbmRfY2FsbHMgJWRcbiIsCisJICAgIGJ5dGVzX3NlbnQsCisJICAgIHNlbmRfY2FsbHMpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICIgICAgICAgICAgICAgICAgIGxlbiAlZFxuIiwKKwkgICAgbGVuKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICB0Y3BfbWFlcnRzX3Jlc3VsdHMtPmNwdV9tZXRob2QgPSBjcHVfbWV0aG9kOworICB0Y3BfbWFlcnRzX3Jlc3VsdHMtPm51bV9jcHVzICAgPSBsaWJfbnVtX2xvY19jcHVzOworICBzZW5kX3Jlc3BvbnNlKCk7CisKKyAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldHMgKi8KKyAgY2xvc2Uoc19kYXRhKTsKKyAgY2xvc2Uoc19saXN0ZW4pOworCisgIH0KKwwKKworIC8qIHRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBzZW5kaW5nIChuZXRwZXJmKSBzaWRlIG9mIHRoZSBUQ1BfUlIgKi8KKyAvKiB0ZXN0LiAqLworCit2b2lkCitzZW5kX3RjcF9ycihjaGFyIHJlbW90ZV9ob3N0W10pCit7CisgIAorICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCAgUmVzcC4gICBFbGFwc2VkICBUcmFucy5cblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICAgU2l6ZSAgICBUaW1lICAgICBSYXRlICAgICAgICAgXG5cCitieXRlcyAgQnl0ZXMgIGJ5dGVzICAgIGJ5dGVzICAgc2Vjcy4gICAgcGVyIHNlYyAgIFxuXG4iOworCisgIGNoYXIgKnRwdXRfdGl0bGVfYmFuZCA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgIFJlc3AuICAgRWxhcHNlZCAgXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgIFNpemUgICAgVGltZSAgICAgVGhyb3VnaHB1dCBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICAlcy9zZWMgICBcblxuIjsKKworICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmYgJXNcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgJXNcbiI7CisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHJhbnMuICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgUmF0ZSAgICAgbG9jYWwgIHJlbW90ZSBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICBieXRlcyAgIGJ5dGVzICBzZWNzLiAgIHBlciBzZWMgICUlICVjICAgICUlICVjICAgIHVzL1RyICAgdXMvVHJcblxuIjsKKworICBjaGFyICpjcHVfdGl0bGVfdHB1dCA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHB1dCAgICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgJS04LjhzIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAlYyAgICAlJSAlYyAgICB1cy9UciAgIHVzL1RyXG5cbiI7CisKKyAgY2hhciAqY3B1X3RpdGxlX2xhdGVuY3kgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0IFJlc3AuICBFbGFwc2VkIExhdGVuY3kgIENQVSAgICBDUFUgICAgUy5kZW0gICBTLmRlbVxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIHVzZWNzICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgdHJhbiAlJSAlYyAgICAlJSAlYyAgICB1cy9UciAgIHVzL1RyXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZiAlYyAlc1xuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICUtNmQgJS02LjJmICAlLTYuMmYgICUtNi4yZiAlLTYuMmYgJS02LjNmICAlLTYuM2YgJXNcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmtzaW5rX2ZtdCA9ICJcCitBbGlnbm1lbnQgICAgICBPZmZzZXQgICAgICAgICBSb3VuZFRyaXAgIFRyYW5zICAgIFRocm91Z2hwdXRcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGUgIExhdGVuY3kgICAgUmF0ZSAgICAgJS04LjhzL3NcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2ICAgIHVzZWMvVHJhbiAgcGVyIHNlYyAgT3V0Ym91bmQgICBJbmJvdW5kXG5cCislNWQgICU1ZCAgICU1ZCAgJTVkICAgJS02LjNmICAgJS02LjNmICUtNi4zZiAgICAlLTYuM2ZcbiI7CisgIAorICAKKyAgaW50CQkJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorICBpbnQJbGVuOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJbnVtbWVzc2FnZXM7CisgIFNPQ0tFVAlzZW5kX3NvY2tldDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgZG91YmxlCWJ5dGVzX3hmZXJkOworCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKyAgCisgIGludAlyc3BfYnl0ZXNfbGVmdDsKKyAgaW50CXJzcF9ieXRlc19yZWN2ZDsKKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzOworCisgIHN0cnVjdAl0Y3BfcnJfcmVxdWVzdF9zdHJ1Y3QJKnRjcF9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJdGNwX3JyX3Jlc3BvbnNlX3N0cnVjdAkqdGNwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX3JyX3Jlc3VsdHNfc3RydWN0CSp0Y3BfcnJfcmVzdWx0OworCisjaWZkZWYgV0FOVF9GSVJTVF9CVVJTVAorI2RlZmluZSBSRVFVRVNUX0NXTkRfSU5JVElBTCAyCisgIC8qICJpbiB0aGUgYmVnaW5uaW5nLi4uIiB0aGUgV0FOVF9GSVJTVF9CVVJTVCBzdHVmZiB3YXMgbGlrZSBib3RoCisgICAgIFVuaXggYW5kIHRoZSBzdGF0ZSBvZiBOZXcgSmVyc2V5IC0gYm90aCB3ZXJlIHNpbXBsZSBhbiB1bnNwb2lsZWQuCisgICAgIHRoZW4gaXQgd2FzIHJlYWxpemVkIHRoYXQgc29tZSBzdGFja3MgYXJlIHF1aXRlIHBpY2t5IGFib3V0CisgICAgIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3dzIGFuZCBhIG5vbi10cml2aWFsIGluaXRpYWwgYnVyc3Qgb2YKKyAgICAgcmVxdWVzdHMgd291bGQgbm90IGJlIGluZGl2aWR1YWwgc2VnbWVudHMgZXZlbiB3aXRoIFRDUF9OT0RFTEFZCisgICAgIHNldC4gc28sIHdlIGhhdmUgdG8gc3RhcnQgdHJhY2tpbmcgYSBwb29yLW1hbidzIGNvbmdlc3Rpb24gd2luZG93CisgICAgIHVwIGhlcmUgaW4gd2luZG93IHNwYWNlIGJlY2F1c2Ugd2Ugd2FudCB0byB0cnkgdG8gbWFrZSBzb21ldGhpbmcKKyAgICAgaGFwcGVuIHRoYXQgZnJhbmtseSwgd2UgY2Fubm90IGd1YXJhbnRlZSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uCisgICAgIG9mIFRDUC4gIGFpbid0IHRoYXQgZ3JhbmQ/LSkgIHJhaiAyMDA2LTAxLTMwICovCisgIGludCByZXF1ZXN0c19vdXRzdGFuZGluZyA9IDA7CisgIGludCByZXF1ZXN0X2N3bmQgPSBSRVFVRVNUX0NXTkRfSU5JVElBTDsgIC8qIHdlIGFzcy11LW1lIHRoYXQgaGF2aW5nCisJCQkJCSAgICAgICB0aHJlZSByZXF1ZXN0cworCQkJCQkgICAgICAgb3V0c3RhbmRpbmcgYXQgdGhlCisJCQkJCSAgICAgICBiZWdpbm5pbmcgb2YgdGhlIHRlc3QKKwkJCQkJICAgICAgIGlzIG9rIHdpdGggVENQIHN0YWNrcworCQkJCQkgICAgICAgb2YgaW50ZXJlc3QuIHRoZSBmaXJzdAorCQkJCQkgICAgICAgdHdvIHdpbGwgY29tZSBmcm9tIG91cgorCQkJCQkgICAgICAgZmlyc3RfYnVyc3QgbG9vcCwgYW5kCisJCQkJCSAgICAgICB0aGUgdGhpcmQgZnJvbSBvdXIKKwkJCQkJICAgICAgIHJlZ3VsYXJseSBzY2hlZHVsZWQKKwkJCQkJICAgICAgIHNlbmQgKi8KKyNlbmRpZgorCisgIHRjcF9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCB0Y3BfcnJfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9ycl9yZXNwb25zZT0KKyAgICAoc3RydWN0IHRjcF9ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfcnJfcmVzdWx0CT0KKyAgICAoc3RydWN0IHRjcF9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZSAqLworICAvKiBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50ICovCisgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgIC8qIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKworICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKworICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgcHJpbnRfdG9wX3Rlc3RfaGVhZGVyKCJUQ1AgUkVRVUVTVC9SRVNQT05TRSBURVNUIixsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisgIH0KKyAgCisgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMgKi8KKyAgCisgIHNlbmRfcmluZyA9IE5VTEw7CisgIHJlY3ZfcmluZyA9IE5VTEw7CisgIGNvbmZpZGVuY2VfaXRlcmF0aW9uID0gMTsKKyAgaW5pdF9zdGF0KCk7CisKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisKKyAgICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzLiB3ZSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgd2UgbWlnaHQgYmUgKi8KKyAgICAvKiBnb2luZyB0aHJvdWdoIHRoZSBsb29wIG1vcmUgdGhhbiBvbmNlLiAqLworCisgICAgbnVtbWVzc2FnZXMgICAgID0gMDsKKyAgICBieXRlc194ZmVyZCAgICAgPSAwLjA7CisgICAgdGltZXNfdXAgICAgICAgID0gMDsKKyAgICB0aW1lZF9vdXQgICAgICAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgICAgLyogd2UgaGF2ZSB0byByZW1lbWJlciB0byByZXNldCB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucworICAgICAgIG91dHN0YW5kaW5nIGFuZCB0aGUgImNvbmdlc3Rpb24gd2luZG93IGZvciBlYWNoIG5ldworICAgICAgIGl0ZXJhdGlvbi4gcmFqIDIwMDYtMDEtMzEgKi8KKyAgICByZXF1ZXN0c19vdXRzdGFuZGluZyA9IDA7CisgICAgcmVxdWVzdF9jd25kID0gUkVRVUVTVF9DV05EX0lOSVRJQUw7CisjZW5kaWYKKworCisgICAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlcnMgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LiAqLworICAgIC8qIHNpbmNlIHRoaXMgaXMgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIGRlZmF1bHQgdGhlIHNlbmRfd2lkdGggYW5kICovCisgICAgLyogcmVjdl93aWR0aCB0byAxIGFuZCBub3QgdHdvIHJhaiA3Lzk0ICovCisKKyAgICBpZiAoc2VuZF93aWR0aCA9PSAwKSBzZW5kX3dpZHRoID0gMTsKKyAgICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKyAgCisgICAgaWYgKHNlbmRfcmluZyA9PSBOVUxMKSB7CisgICAgICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgICAgICByZXFfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9vZmZzZXQpOworICAgIH0KKworICAgIGlmIChyZWN2X3JpbmcgPT0gTlVMTCkgeworICAgICAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICAgICAgcnNwX3NpemUsCisJCQkJICAgICAgIGxvY2FsX3JlY3ZfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzZW5kX3NvY2tldCA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgICBpZiAoc2VuZF9zb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3RjcF9ycjogdGNwIHN0cmVhbSBkYXRhIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX3RjcF9ycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiovCisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFub19jb250cm9sKSB7CisgICAgICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUKKwkgc29ja2V0IHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUKKwkgcmVhc29uIGZvciBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwCisJIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsCisJIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlCisJIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzIGRlZmF1bHQgc2hvdWxkIGJlCisJIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsIGRlZmF1bHQgdG8gOCwgd2hpY2gKKwkgd2lsbCBiZSBubyBhbGlnbm1lbnQgYWx0ZXJhdGlvbnMuICovCisgICAgCisgICAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJPQlET19UQ1BfUlI7CisgICAgICB0Y3BfcnJfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZQk9CXJzcl9zaXplX3JlcTsKKyAgICAgIHRjcF9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplCT0JcnNzX3NpemVfcmVxOworICAgICAgdGNwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50ICAgID0JcmVtb3RlX3JlY3ZfYWxpZ247CisgICAgICB0Y3BfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQJPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgICB0Y3BfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQgICAgPQlyZW1vdGVfc2VuZF9hbGlnbjsKKyAgICAgIHRjcF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldAk9CXJlbW90ZV9zZW5kX29mZnNldDsKKyAgICAgIHRjcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUJPQlyZXFfc2l6ZTsKKyAgICAgIHRjcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplCT0JcnNwX3NpemU7CisgICAgICB0Y3BfcnJfcmVxdWVzdC0+bm9fZGVsYXkJICAgICAgICA9CXJlbV9ub2RlbGF5OworICAgICAgdGNwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICAgIHRjcF9ycl9yZXF1ZXN0LT5jcHVfcmF0ZQkgICAgICAgID0JcmVtb3RlX2NwdV9yYXRlOworICAgICAgdGNwX3JyX3JlcXVlc3QtPnNvX3JjdmF2b2lkCT0JcmVtX3JjdmF2b2lkOworICAgICAgdGNwX3JyX3JlcXVlc3QtPnNvX3NuZGF2b2lkCT0JcmVtX3NuZGF2b2lkOworICAgICAgaWYgKHRlc3RfdGltZSkgeworCXRjcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXRjcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdHJhbnMgKiAtMTsKKyAgICAgIH0KKyAgICAgIHRjcF9ycl9yZXF1ZXN0LT5wb3J0ICAgICAgICAgICAgICA9ICAgICAgYXRvaShyZW1vdGVfZGF0YV9wb3J0KTsKKyAgICAgIHRjcF9ycl9yZXF1ZXN0LT5pcGZhbWlseSA9IGFmX3RvX25mKHJlbW90ZV9yZXMtPmFpX2ZhbWlseSk7CisgICAgICAKKyAgICAgIGlmIChkZWJ1ZyA+IDEpIHsKKwlmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX3RjcF9ycjogcmVxdWVzdGluZyBUQ1AgcnIgdGVzdFxuIik7CisgICAgICB9CisgICAgICAKKyAgICAgIHNlbmRfcmVxdWVzdCgpOworICAgICAgCisgICAgICAvKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIHJlbGV2YW50CisJIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrCisJIGludG8gdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLgorCSBUaGUgcmVtb3RlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIENQVSBpZiBuZWNlc3NhcnksIGFuZCB3aWxsCisJIGhhdmUgZG9uZSBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlCisJIGNwdSBsb2NhbGx5IGJlZm9yZSBzZW5kaW5nIHRoZSByZXF1ZXN0LCBhbmQgd2lsbCBncmFiIHRoZQorCSBjb3VudGVyIHZhbHVlIHJpZ2h0IGFmdGVyIHRoZSBjb25uZWN0IHJldHVybnMuIFRoZSByZW1vdGUKKwkgd2lsbCBncmFiIHRoZSBjb3VudGVyIHJpZ2h0IGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcworCSB0aGUgaGFzc2xlIG9mIGV4dHJhIG1lc3NhZ2VzIGJlaW5nIHNlbnQgZm9yIHRoZSBUQ1AKKwkgdGVzdHMuICAqLworICAKKyAgICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisJcnNyX3NpemUgICAgICAgICAgPSB0Y3BfcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisJcnNzX3NpemUgICAgICAgICAgPSB0Y3BfcnJfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisJcmVtX25vZGVsYXkgICAgICAgPSB0Y3BfcnJfcmVzcG9uc2UtPm5vX2RlbGF5OworCXJlbW90ZV9jcHVfdXNhZ2UgID0gdGNwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKwlyZW1vdGVfY3B1X3JhdGUgICA9IHRjcF9ycl9yZXNwb25zZS0+Y3B1X3JhdGU7CisJLyogbWFrZSBzdXJlIHRoYXQgcG9ydCBudW1iZXJzIGFyZSBpbiBuZXR3b3JrIG9yZGVyICovCisJc2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMsKHNob3J0KXRjcF9ycl9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlcik7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCWZwcmludGYod2hlcmUsCisJCSJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCQluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJcGVycm9yKCIiKTsKKwlmZmx1c2god2hlcmUpOworCQorCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorCisjaWZkZWYgV0FOVF9ERU1PCisgICAgREVNT19SUl9TRVRVUCgxMDAwKQorI2VuZGlmCisKKyAgICAvKkNvbm5lY3QgdXAgdG8gdGhlIHJlbW90ZSBwb3J0IG9uIHRoZSBkYXRhIHNvY2tldCAgKi8KKyAgICBpZiAoY29ubmVjdChzZW5kX3NvY2tldCwgCisJCXJlbW90ZV9yZXMtPmFpX2FkZHIsCisJCXJlbW90ZV9yZXMtPmFpX2FkZHJsZW4pID09IElOVkFMSURfU09DS0VUKXsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisjaWZkZWYgV0lOMzIKKyAgICAvKiB0aGlzIGlzIHVzZWQgc28gdGhlIHRpbWVyIHRocmVhZCBjYW4gY2xvc2UgdGhlIHNvY2tldCBvdXQgZnJvbSAqLworICAgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgICAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAgIC8qIHJldHVybiBXU0FFSU5UUiB3aXRoIHRoZSB0ZXN0IGlzIG92ZXIuIGFueXRoaW5nIHRoYXQgd2lsbCBydW4gb24gKi8KKyAgICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgICAgd2luX2tsdWRnZV9zb2NrZXQgPSBzZW5kX3NvY2tldDsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisgICAgLyogRGF0YSBTb2NrZXQgc2V0LXVwIGlzIGZpbmlzaGVkLiBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zLCBlaXRoZXIgdGhlICovCisgICAgLyogY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkIGhhdmUgKi8KKyAgICAvKiBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBleHRyYSAqLworICAgIC8qIG1lc3NhZ2UgYWZ0ZXIgdGhlIGFjY2VwdCBvbiB0aGUgcmVtb3RlLiBJZiBpdCBmYWlsZWQsIHdlJ2xsIHNlZSBpdCAqLworICAgIC8qIGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nIGRhdGEuICovCisgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIHRoZXkgKi8KKyAgICAvKiBjYW4gYmUgZWl0aGVyIHRpbWUgb3IgdHJhbnNhY3Rpb24gYmFzZWQuICovCisgICAgCisgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgICAgdGltZXNfdXAgPSAwOworICAgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgICB0aW1lc191cCA9IDE7CisgICAgfQorICAgIAorICAgIC8qIFRoZSBjcHVfc3RhcnQgcm91dGluZSB3aWxsIGdyYWIgdGhlIGN1cnJlbnQgdGltZSBhbmQgcG9zc2libHkgKi8KKyAgICAvKiB2YWx1ZSBvZiB0aGUgaWRsZSBjb3VudGVyIGZvciBsYXRlciB1c2UgaW4gbWVhc3VyaW5nIGNwdSAqLworICAgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgICAKKyAgICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgSU5URVJWQUxTX0lOSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgIAorICAgIC8qIFdlIHVzZSBhbiAiT1IiIHRvIGNvbnRyb2wgdGVzdCBleGVjdXRpb24uIFdoZW4gdGhlIHRlc3QgaXMgKi8KKyAgICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gKi8KKyAgICAvKiBXaGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCwgdGhlIHRpbWUgdGVzdCB3aWxsICovCisgICAgLyogYWx3YXlzIHJldHVybiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgdGhlIHdob2xlICovCisgICAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiBJIHRoaW5rIEkgKi8KKyAgICAvKiBqdXN0IGFyYml0cmFyaWx5IGRlY3JlbWVudCB0cmFuc19yZW1haW5pbmcgZm9yIHRoZSB0aW1lZCB0ZXN0LCBidXQgKi8KKyAgICAvKiB3aWxsIG5vdCBkbyB0aGF0IGp1c3QgeWV0Li4uIE9uZSBvdGhlciBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCAqLworICAgIC8qIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSB0aGUgc2FtZSBidWZmZXIuICovCisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIGlmIChkZW1vX21vZGUpIHsKKwlISVNUX3RpbWVzdGFtcChkZW1vX29uZV9wdHIpOworICAgICAgfQorI2VuZGlmCisKKyAgICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgICAvKiBzZW5kIHRoZSByZXF1ZXN0LiB3ZSBhc3N1bWUgdGhhdCBpZiB3ZSB1c2UgYSBibG9ja2luZyBzb2NrZXQsICovCisgICAgICAvKiB0aGUgcmVxdWVzdCB3aWxsIGJlIHNlbnQgYXQgb25lIHNob3QuICovCisKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgICAgICAvKiB3ZSBjYW4gaW5qZWN0IG5vIG1vcmUgdGhhbiByZXF1ZXN0X2N3bmQsIHdoaWNoIHdpbGwgZ3JvdyB3aXRoCisJIHRpbWUsIGFuZCBubyBtb3JlIHRoYW4gZmlyc3RfYnVyc3Rfc2l6ZS4gIHdlIGRvbid0IHVzZSA8PSB0bworCSBhY2NvdW50IGZvciB0aGUgInJlZ3VsYXJseSBzY2hlZHVsZWQiIHNlbmQgY2FsbC4gIG9mIGNvdXJzZQorCSB0aGF0IG1ha2VzIGl0IG1vcmUgYSAibWF4X291dHN0YW5kaW5nXyB0aGFuIGEKKwkgImZpcnN0X2J1cnN0X3NpemUiIGJ1dCBmb3Igbm93IHdlIHdvbid0IGZpeCB0aGUgbmFtZXMuIGFsc28sCisJIEkgc3VzcGVjdCB0aGUgZXh0cmEgY2hlY2sgYWdhaW5zdCA8IGZpcnN0X2J1cnN0X3NpemUgaXMKKwkgcmVkdW5kYW50IHNpbmNlIGxhdGVyIEkgZXhwZWN0IHRvIG1ha2Ugc3VyZSB0aGF0IHJlcXVlc3RfY3duZAorCSBjYW4gbmV2ZXIgZ2V0IGxhcmdlciB0aGFuIGZpcnN0X2J1cnN0X3NpemUsIGJ1dCBqdXN0IGF0IHRoZQorCSBtb21lbnQgSSdtIGZlZWxpbmcgbGlrZSBhIGJlbHQgYW5kIHN1c3BlbmRlcnMga2luZCBvZgorCSBwcm9ncmFtbWVyLiByYWogMjAwNi0wMS0zMCAqLworICAgICAgd2hpbGUgKChmaXJzdF9idXJzdF9zaXplID4gMCkgJiYKKwkgICAgIChyZXF1ZXN0c19vdXRzdGFuZGluZyA8IHJlcXVlc3RfY3duZCkgJiYKKwkgICAgIChyZXF1ZXN0c19vdXRzdGFuZGluZyA8IGZpcnN0X2J1cnN0X3NpemUpKSB7CisJaWYgKGRlYnVnKSB7CisJICBmcHJpbnRmKHdoZXJlLAorCQkgICJpbmplY3RpbmcsIHJlcV9vdXRzdG5kbmcgJWQgcmVxX2N3bmQgJWQgYnVyc3QgJWRcbiIsCisJCSAgcmVxdWVzdHNfb3V0c3RhbmRpbmcsCisJCSAgcmVxdWVzdF9jd25kLAorCQkgIGZpcnN0X2J1cnN0X3NpemUpOworCX0KKwlpZiAoKGxlbiA9IHNlbmQoc2VuZF9zb2NrZXQsCisJCQlzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCQlyZXFfc2l6ZSwKKwkJCTApKSAhPSByZXFfc2l6ZSkgeworCSAgLyogd2Ugc2hvdWxkIG5ldmVyIGhpdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IGluIHRoZSBmaXJzdCBidXJzdCAqLworCSAgcGVycm9yKCJzZW5kX3RjcF9ycjogaW5pdGlhbCBidXJzdCBkYXRhIHNlbmQgZXJyb3IiKTsKKwkgIGV4aXQoLTEpOworCX0KKwlyZXF1ZXN0c19vdXRzdGFuZGluZyArPSAxOworICAgICAgfQorCisjZW5kaWYgLyogV0FOVF9GSVJTVF9CVVJTVCAqLworICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisJLyogdGltZXN0YW1wIGp1c3QgYmVmb3JlIG91ciBjYWxsIHRvIHNlbmQsIGFuZCB0aGVuIGFnYWluIGp1c3QKKwkgICBhZnRlciB0aGUgcmVjZWl2ZSByYWogOC85NCAqLworCS8qIGJ1dCBvbmx5IGlmIHdlIGFyZSBhY3R1YWxseSBnb2luZyB0byBkaXNwbGF5IG9uZS4gcmFqCisJICAgMjAwNy0wMi0wNyAqLworCisJSElTVF90aW1lc3RhbXAoJnRpbWVfb25lKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAgICAgCisgICAgICBpZiAoKGxlbiA9IHNlbmQoc2VuZF9zb2NrZXQsCisJCSAgICAgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgICAgcmVxX3NpemUsCisJCSAgICAgIDApKSAhPSByZXFfc2l6ZSkgeworCWlmIChTT0NLRVRfRUlOVFIobGVuKSB8fCAoZXJybm8gPT0gMCkpIHsKKwkgIC8qIHdlIGhpdCB0aGUgZW5kIG9mIGEgKi8KKwkgIC8qIHRpbWVkIHRlc3QuICovCisJICB0aW1lZF9vdXQgPSAxOworCSAgYnJlYWs7CisJfQorCXBlcnJvcigic2VuZF90Y3BfcnI6IGRhdGEgc2VuZCBlcnJvciIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgICAgICByZXF1ZXN0c19vdXRzdGFuZGluZyArPSAxOworI2VuZGlmCisKKyAgICAgIC8qIHJlY2VpdmUgdGhlIHJlc3BvbnNlICovCisgICAgICByc3BfYnl0ZXNfbGVmdCA9IHJzcF9zaXplOworICAgICAgdGVtcF9tZXNzYWdlX3B0ciAgPSByZWN2X3JpbmctPmJ1ZmZlcl9wdHI7CisgICAgICB3aGlsZShyc3BfYnl0ZXNfbGVmdCA+IDApIHsKKwlpZigocnNwX2J5dGVzX3JlY3ZkPXJlY3Yoc2VuZF9zb2NrZXQsCisJCQkJIHRlbXBfbWVzc2FnZV9wdHIsCisJCQkJIHJzcF9ieXRlc19sZWZ0LAorCQkJCSAwKSkgPT0gU09DS0VUX0VSUk9SIHx8IHJzcF9ieXRlc19yZWN2ZCA9PSAwKSB7CisJCWlmICggU09DS0VUX0VJTlRSKHJzcF9ieXRlc19yZWN2ZCkgKSB7CisJCSAgICAvKiBXZSBoaXQgdGhlIGVuZCBvZiBhIHRpbWVkIHRlc3QuICovCisJCQl0aW1lZF9vdXQgPSAxOworCQkJYnJlYWs7CisJCX0KKwkgIHBlcnJvcigic2VuZF90Y3BfcnI6IGRhdGEgcmVjdiBlcnJvciIpOworCSAgZXhpdCgxKTsKKwl9CisJcnNwX2J5dGVzX2xlZnQgLT0gcnNwX2J5dGVzX3JlY3ZkOworCXRlbXBfbWVzc2FnZV9wdHIgICs9IHJzcF9ieXRlc19yZWN2ZDsKKyAgICAgIH0JCisgICAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisgICAgICAKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgICAgICAvKiBzbywgc2luY2Ugd2UndmUgZ290dGVuIGEgcmVzcG9uc2UgYmFjaywgdXBkYXRlIHRoZQorCSBib29ra2VlcGluZyBhY2NvcmRpbmdseS4gIHRoZXJlIGlzIG9uZSBsZXNzIHJlcXVlc3QKKwkgb3V0c3RhbmRpbmcgYW5kIHdlIGNhbiBwdXQgb25lIG1vcmUgb3V0IHRoZXJlIHRoYW4gYmVmb3JlLiAqLworICAgICAgcmVxdWVzdHNfb3V0c3RhbmRpbmcgLT0gMTsKKyAgICAgIGlmIChyZXF1ZXN0X2N3bmQgPCBmaXJzdF9idXJzdF9zaXplKSB7CisJcmVxdWVzdF9jd25kICs9IDE7CisJaWYgKGRlYnVnKSB7CisJICBmcHJpbnRmKHdoZXJlLAorCQkgICJpbmNyIHJlcV9jd25kIHRvICVkIGZpcnN0X2J1cnN0ICVkIHJlcXNfb3V0c3RuZG5nICVkXG4iLAorCQkgIHJlcXVlc3RfY3duZCwKKwkJICBmaXJzdF9idXJzdF9zaXplLAorCQkgIHJlcXVlc3RzX291dHN0YW5kaW5nKTsKKwl9CisgICAgICB9CisjZW5kaWYKKyAgICAgIGlmICh0aW1lZF9vdXQpIHsKKwkvKiB3ZSBtYXkgaGF2ZSBiZWVuIGluIGEgbmVzdGVkIHdoaWxlIGxvb3AgLSB3ZSBuZWVkICovCisJLyogYW5vdGhlciBjYWxsIHRvIGJyZWFrLiAqLworCWJyZWFrOworICAgICAgfQorICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisJSElTVF90aW1lc3RhbXAoJnRpbWVfdHdvKTsKKwlISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIERFTU9fUlJfSU5URVJWQUwoMSk7CisjZW5kaWYKKworI2lmZGVmIFdBTlRfSU5URVJWQUxTICAgICAgCisgICAgICBJTlRFUlZBTFNfV0FJVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgICAKKyAgICAgIG51bW1lc3NhZ2VzKys7ICAgICAgICAgIAorICAgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworCXRyYW5zX3JlbWFpbmluZy0tOworICAgICAgfQorICAgICAgCisgICAgICBpZiAoZGVidWcgPiAzKSB7CisJaWYgKChudW1tZXNzYWdlcyAlIDEwMCkgPT0gMCkgeworCSAgZnByaW50Zih3aGVyZSwKKwkJICAiVHJhbnNhY3Rpb24gJWQgY29tcGxldGVkXG4iLAorCQkgIG51bW1lc3NhZ2VzKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisJfQorICAgICAgfQorICAgIH0KKworICAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgdXNlZCB0byBjYWxsIHNodXRkb3duIG9uIHRoZSBkYXRhIHNvY2tldCB0byBiZQorICAgICAgIHN1cmUgYWxsIHRoZSBkYXRhIHdhcyBkZWxpdmVyZWQsIGJ1dCB0aGlzIHdhcyBub3QgZ2VybWFuZSBpbiBhCisgICAgICAgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCBhbmQgaXQgd2FzIGNhdXNpbmcgdGhlIHRlc3RzIHRvICJoYW5nIgorICAgICAgIHdoZW4gdGhleSB3ZXJlIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGltZS4gU28sIEkgaGF2ZSByZXBsYWNlZAorICAgICAgIHRoaXMgc2h1dGRvd24gY2FsbCB3aXRoIGEgY2FsbCB0byBjbG9zZSB0aGF0IGNhbiBiZSBmb3VuZCBsYXRlcgorICAgICAgIGluIHRoZSBwcm9jZWR1cmUuICovCisgICAgCisgICAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsCisgICAgICAgYW5kIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1IHV0aWxpemF0aW9uICovCisgICAgCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nICovCisJCQkJCQkvKiBtZWFzdXJlZD8gaG93IGxvbmcgKi8KKwkJCQkJCS8qIGRpZCB3ZSByZWFsbHkgcnVuPyAqLworICAgIAorICAgIGlmICghbm9fY29udHJvbCkgeworICAgICAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIHJlbW90ZSBlbmQuIFRoZSByZW1vdGUgd2lsbCBoYXZlCisJIGNhbGN1bGF0ZWQgQ1BVIHV0aWxpemF0aW9uLiBJZiBpdCB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQKKwkgd2lsbCByZXR1cm4gb2J2aW91cyB2YWx1ZXMuICovIAorICAgIAorICAgICAgcmVjdl9yZXNwb25zZSgpOworICAgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworCWlmIChkZWJ1ZykKKwkgIGZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJZnByaW50Zih3aGVyZSwibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkJbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCXBlcnJvcigiIik7CisJZmZsdXNoKHdoZXJlKTsKKwlleGl0KDEpOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyICJ0aHJvdWdocHV0IiB3YXMgZm9yIHRoZSB0ZXN0LiAqLworICAKKyAgICBieXRlc194ZmVyZAk9IChyZXFfc2l6ZSAqIG51bW1lc3NhZ2VzKSArIChyc3Bfc2l6ZSAqIG51bW1lc3NhZ2VzKTsKKyAgICB0aHJ1cHV0CT0gbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lOworICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUKKyAgICAgICB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlCisgICAgICAgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluCisgICAgICAgdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzCisgICAgICAgYmVuZWZpdC4uLiAqLworICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWxvY2FsX2NwdV91dGlsaXphdGlvbiA9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKyAJLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsCisJICAgbXVsdGlwbHkgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBieSAxMDI0IHRvIGdldCAiZ29vZCIKKwkgICBudW1iZXJzICovCisJbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgIDAuMCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisJbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHRjcF9ycl9yZXN1bHQtPmNwdV91dGlsOworCS8qIHNpbmNlIGNhbGNfc2VydmljZSBkZW1hbmQgaXMgZG9pbmcgbXMvS3VuaXQgd2Ugd2lsbAorCSAgIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgImdvb2QiCisJICAgbnVtYmVycyAqLworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCA9IGNhbGNfc2VydmljZV9kZW1hbmQoKGRvdWJsZSkgbnVtbWVzc2FnZXMqMTAyNCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgICB0Y3BfcnJfcmVzdWx0LT5udW1fY3B1cyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3ZXJlIG5vdCBtZWFzdXJpbmcgY3B1LCBmb3IgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYsIHdlICovCisgICAgICAvKiBzaG91bGQgbWFrZSBpdCAtMS4wICovCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgIH0KKworICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBjb25maWRlbmNlIGluZm9ybWF0aW9uLgorICAgICAgIGlmIGRlYnVnZ2luZyBpcyBvbiwgY2FsY3VsYXRlX2NvbmZpZGVuY2Ugd2lsbCBwcmludC1vdXQgdGhlCisgICAgICAgcGFyYW1ldGVycyB3ZSBwYXNzIGl0ICovCisgICAgCisgICAgY2FsY3VsYXRlX2NvbmZpZGVuY2UoY29uZmlkZW5jZV9pdGVyYXRpb24sCisJCQkgZWxhcHNlZF90aW1lLAorCQkJIHRocnVwdXQsCisJCQkgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkgbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAKKyAgICAKKyAgICBjb25maWRlbmNlX2l0ZXJhdGlvbisrOworCisgICAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldCwgc28gY2xvc2UgaXQgKi8KKyAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgfQorCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmdGhydXB1dCwKKwkJCSAgICAmbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSAgICAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKworICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyIGhhcworICAgICBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgbG9jYWwKKyAgICAgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSB1c2VyIGhhcworICAgICByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAic3RyZWFtcGVyZiIKKyAgICAgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSBvZiBncmVhdGVyIHRoYW4gMSwKKyAgICAgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mIGJhY2tncm91bmQgaW5mb3JtYXRpb24KKyAgICAgZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgbm90IGNwdV9tZWFzdXJlbWVudAorICAgICBzcGVjaWZpYy4uLiAgKi8KKworICBpZiAoY29uZmlkZW5jZSA8IDApIHsKKyAgICAvKiB3ZSBkaWQgbm90IGhpdCBjb25maWRlbmNlLCBidXQgd2VyZSB3ZSBhc2tlZCB0byBsb29rIGZvciBpdD8gKi8KKyAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworICAgIH0KKyAgfQorCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChjcHVfbWV0aG9kKTsKKyAgICByZW1vdGVfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKHRjcF9ycl9yZXN1bHQtPmNwdV9tZXRob2QpOworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCSgocHJpbnRfaGVhZGVycykgfHwgCisJCSAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorCQlyZW1vdGVfY3B1X21ldGhvZCwKKwkJKChwcmludF9oZWFkZXJzKSB8fCAKKwkJIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJaWYgKCd4JyA9PSBsaWJmbXQpIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgY3B1X3RpdGxlLAorCQkgIGxvY2FsX2NwdV9tZXRob2QsCisJCSAgcmVtb3RlX2NwdV9tZXRob2QpOworCX0KKwllbHNlIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgY3B1X3RpdGxlX3RwdXQsCisJCSAgZm9ybWF0X3VuaXRzKCksCisJCSAgbG9jYWxfY3B1X21ldGhvZCwKKwkJICByZW1vdGVfY3B1X21ldGhvZCk7CisJfQkgIAorICAgICAgfQorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGd1ZXNzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgKCd4JyA9PSBsaWJmbXQpID8gdGhydXB1dCA6IAorCSAgICAgIGNhbGNfdGhydXB1dF9pbnRlcnZhbF9vbW5pKHRocnVwdXQgKiAocmVxX3NpemUrcnNwX3NpemUpLAorCQkJCQkgMS4wKSwKKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQsCS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLAorCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgICgneCcgPT0gbGliZm10KSA/IHRocnVwdXQgOgorCSAgICAgIGNhbGNfdGhydXB1dF9pbnRlcnZhbF9vbW5pKHRocnVwdXQgKiAocmVxX3NpemUrcnNwX3NpemUpLAorCQkJCQkgMS4wKSwKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCSgneCcgPT0gbGliZm10KSA/IHRwdXRfdGl0bGUgOiB0cHV0X3RpdGxlX2JhbmQsCisJCWZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMSwJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwKKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlc3BvbnNlcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIC8qIGFyZSB3ZSB0cmFucyBvciBkbyB3ZSBuZWVkIHRvIGNvbnZlcnQgdG8gYnl0ZXMgdGhlbgorCQkgYml0cz8gYXQgdGhpcyBwb2ludCwgdGhydXB1dCBpcyBpbiBvdXIgImNvbmZpZGVudCIKKwkJIHRyYW5zYWN0aW9ucyBwZXIgc2Vjb25kLiB3ZSBjYW4gY29udmVydCB0byBhCisJCSBiaWRpcmVjdGlvbmFsIGJpdHJhdGUgYnkgbXVsdGlwbHlpbmcgdGhhdCBieSB0aGUgc3VtCisJCSBvZiB0aGUgcmVxX3NpemUgYW5kIHJzcF9zaXplLiAgd2UgcGFzcyB0aGF0IHRvCisJCSBjYWxjX3RocnVwdXRfaW50ZXJ2YWxfb21uaSB3aXRoIGFuIGVsYXBzZWQgdGltZSBvZgorCQkgMS4wIHMgdG8gZ2V0IGl0IGNvbnZlcnRlZCB0byBba21nXWJpdHMvcyBvcgorCQkgW0tNR11CeXRlcy9zICovCisJICAgICAgKCd4JyA9PSBsaWJmbXQpID8gIHRocnVwdXQgOiAKKwkgICAgICBjYWxjX3RocnVwdXRfaW50ZXJ2YWxfb21uaSh0aHJ1cHV0ICogKHJlcV9zaXplK3JzcF9zaXplKSwKKwkJCQkJIDEuMCksCisJICAgICAgKChwcmludF9oZWFkZXJzKSB8fCAKKwkgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICAKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgLyogaG93IHRvIGhhbmRsZSB0aGUgdmVyYm9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YgKi8KKyAgLyogY29uZmlkZW5jZSBpbnRlcnZhbHMgaXMgeWV0IHRvIGJlIGRldGVybWluZWQuLi4gcmFqIDExLzk0ICovCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBUQ1Agc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworCisgICAgLyogbm9ybWFsbHksIHlvdSBtaWdodCB0aGluayB0aGF0IGlmIHdlIHdlcmUgbWVzc2luZyBhYm91dCB3aXRoCisgICAgICAgdGhlIHZhbHVlIG9mIGxpYmZtdCB3ZSB3b3VsZCBuZWVkIHRvIHB1dCBpdCBiYWNrIGFnYWluLCBidXQKKyAgICAgICBzaW5jZSB0aGlzIGlzIGJhc2ljYWxseSB0aGUgbGFzdCB0aGluZyB3ZSBhcmUgZ29pbmcgdG8gZG8gd2l0aAorICAgICAgIGl0LCBpdCBkb2VzIG5vdCBtYXR0ZXIuICBzbyB0aGVyZSA6KSByYWogMjAwNy0wNi0wOCAqLworICAgIC8qIGlmIHRoZSB1c2VyIHdhcyBhc2tpbmcgZm9yIHRyYW5zYWN0aW9ucywgdGhlbiB3ZSByZXBvcnQKKyAgICAgICBtZWdhYml0cyBwZXIgc2Vjb25kIGZvciB0aGUgdW5pZGlyZWN0aW9uYWwgdGhyb3VnaHB1dCwKKyAgICAgICBvdGhlcndpc2Ugd2UgdXNlIHRoZSBkZXNpcmVkIHVuaXRzLiAqLworICAgIGlmICgneCcgPT0gbGliZm10KSB7CisgICAgICBsaWJmbXQgPSAnbSc7CisgICAgfQorCisgICAgZnByaW50Zih3aGVyZSwKKwkgICAga3NpbmtfZm10LAorCSAgICBmb3JtYXRfdW5pdHMoKSwKKwkgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICBsb2NhbF9zZW5kX29mZnNldCwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICAvKiBpZiB0aGUgdXNlciBoYXMgZW5hYmxlIGJ1cnN0IG1vZGUsIHdlIGhhdmUgdG8gcmVtZW1iZXIKKwkgICAgICAgdG8gYWNjb3VudCBmb3IgdGhhdCBpbiB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucworCSAgICAgICBvdXRzdGFuZGluZyBhdCBhbnkgb25lIHRpbWUuIG90aGVyd2lzZSB3ZSB3aWxsCisJICAgICAgIHVuZGVycmVwb3J0IHRoZSBsYXRlbmN5IG9mIGluZGl2aWR1YWwKKwkgICAgICAgdHJhbnNhY3Rpb25zLiBsZWFybmVkIGZyb20gc2FmIGJ5IHJhaiAyMDA3LTA2LTA4ICAqLworCSAgICAoKChkb3VibGUpMS4wL3RocnVwdXQpKihkb3VibGUpMTAwMDAwMC4wKSAqIAorCSAgICAoZG91YmxlKSAoMSArICgoZmlyc3RfYnVyc3Rfc2l6ZSA+IDApID8gZmlyc3RfYnVyc3Rfc2l6ZSA6IDApKSwKKwkgICAgdGhydXB1dCwKKwkgICAgY2FsY190aHJ1cHV0X2ludGVydmFsX29tbmkodGhydXB1dCAqIChkb3VibGUpcmVxX3NpemUsMS4wKSwKKwkgICAgY2FsY190aHJ1cHV0X2ludGVydmFsX29tbmkodGhydXB1dCAqIChkb3VibGUpcnNwX3NpemUsMS4wKSk7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuSGlzdG9ncmFtIG9mIHJlcXVlc3QvcmVzcG9uc2UgdGltZXNcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIH0KKyAgCit9CisMCit2b2lkCitzZW5kX3VkcF9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKQoreworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoJCQkJCQkJCQkqLworICAvKiAgICAgICAgICAgICAgIAlVRFAgVW5pZGlyZWN0aW9uYWwgU2VuZCBUZXN0ICAgICAgICAgICAgICAgICAgICAqLworICAvKgkJCQkJCQkJCSovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFVEUF9MRU5HVEhfTUFYIDBYRkZGRiAtIDI4CisKKyAgY2hhciAqdHB1dF90aXRsZSA9ICJcCitTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICBNZXNzYWdlcyAgICAgICAgICAgICAgICBcblwKK1NpemUgICAgU2l6ZSAgICAgVGltZSAgICAgICAgIE9rYXkgRXJyb3JzICAgVGhyb3VnaHB1dFxuXAorYnl0ZXMgICBieXRlcyAgICBzZWNzICAgICAgICAgICAgIyAgICAgICMgICAlcy9zZWNcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZlxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzEgPSAiXAorJTZkICAlNmQgICAlLTcuMmYgICAlN2QgJTZkICAgICU3LjJmXG5cCislNmQgICAgICAgICAgICUtNy4yZiAgICU3ZCAgICAgICAgICAgJTcuMmZcblxuIjsKKyAgCisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgTWVzc2FnZXMgICAgICAgICAgICAgICAgICAgQ1BVICAgICAgU2VydmljZVxuXAorU2l6ZSAgICBTaXplICAgICBUaW1lICAgICAgICAgT2theSBFcnJvcnMgICBUaHJvdWdocHV0ICAgVXRpbCAgICAgRGVtYW5kXG5cCitieXRlcyAgIGJ5dGVzICAgIHNlY3MgICAgICAgICAgICAjICAgICAgIyAgICVzL3NlYyAlJSAlYyVjICAgICB1cy9LQlxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuMmYgJWNcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzEgPSAiXAorJTZkICAlNmQgICAlLTcuMmYgICAlN2QgJTZkICAgICU3LjFmICAgICAlLTYuMmYgICAlLTYuM2ZcblwKKyU2ZCAgICAgICAgICAgJS03LjJmICAgJTdkICAgICAgICAgICAlNy4xZiAgICAgJS02LjJmICAgJS02LjNmXG5cbiI7CisgIAorICB1bnNpZ25lZCBpbnQJbWVzc2FnZXNfcmVjdmQ7CisgIHVuc2lnbmVkIGludCAJbWVzc2FnZXNfc2VudDsKKyAgdW5zaWduZWQgaW50CWZhaWxlZF9zZW5kczsKKworICBmbG9hdAllbGFwc2VkX3RpbWUsICAKKyAgICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorICAgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICAKKyAgZmxvYXQJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLCByZW1vdGVfc2VydmljZV9kZW1hbmQ7CisgIGRvdWJsZSBsb2NhbF90aHJ1cHV0LCByZW1vdGVfdGhydXB1dDsKKyAgZG91YmxlIGJ5dGVzX3NlbnQ7CisgIGRvdWJsZSBieXRlc19yZWN2ZDsKKyAKKyAKKyAgaW50CWxlbjsKKyAgc3RydWN0IHJpbmdfZWx0ICpzZW5kX3Jpbmc7CisgIFNPQ0tFVCAJZGF0YV9zb2NrZXQ7CisgIAorICB1bnNpZ25lZCBpbnQgc3VtX21lc3NhZ2VzX3NlbnQ7CisgIHVuc2lnbmVkIGludCBzdW1fbWVzc2FnZXNfcmVjdmQ7CisgIHVuc2lnbmVkIGludCBzdW1fZmFpbGVkX3NlbmRzOworICBkb3VibGUgc3VtX2xvY2FsX3RocnVwdXQ7CisKKyAgc3RydWN0IGFkZHJpbmZvICpsb2NhbF9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAqcmVtb3RlX3JlczsKKyAgCisgIHN0cnVjdAl1ZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSp1ZHBfc3RyZWFtX3JlcXVlc3Q7CisgIHN0cnVjdAl1ZHBfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdAkqdWRwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0CXVkcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QJKnVkcF9zdHJlYW1fcmVzdWx0czsKKyAgCisgIHVkcF9zdHJlYW1fcmVxdWVzdAk9IAorICAgIChzdHJ1Y3QgdWRwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdWRwX3N0cmVhbV9yZXNwb25zZQk9IAorICAgIChzdHJ1Y3QgdWRwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB1ZHBfc3RyZWFtX3Jlc3VsdHMJPSAKKyAgICAoc3RydWN0IHVkcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIHRpbWVfaGlzdCA9IEhJU1RfbmV3KCk7CisgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX0RHUkFNLAorCQkgICAgIElQUFJPVE9fVURQLAorCQkgICAgIDApOworCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIlVEUCBVTklESVJFQ1RJT05BTCBTRU5EIFRFU1QiLGxvY2FsX3JlcyxyZW1vdGVfcmVzKTsKKyAgfQorCisgIHNlbmRfcmluZyAgICAgICAgICAgID0gTlVMTDsKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKyAgc3VtX21lc3NhZ2VzX3NlbnQgICAgPSAwOworICBzdW1fbWVzc2FnZXNfcmVjdmQgICA9IDA7CisgIHN1bV9mYWlsZWRfc2VuZHMgICAgID0gMDsKKyAgc3VtX2xvY2FsX3RocnVwdXQgICAgPSAwLjA7CisKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisgICAgCisgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgLyogZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZS4gKi8KKyAgICBtZXNzYWdlc19zZW50ICA9IDA7CisgICAgbWVzc2FnZXNfcmVjdmQgPSAwOworICAgIGZhaWxlZF9zZW5kcyAgID0gMDsKKyAgICB0aW1lc191cCAgICAgICA9IDA7CisgICAgCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0CQkJKi8KKyAgICBkYXRhX3NvY2tldCA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAgIAorICAgIGlmIChkYXRhX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoInVkcF9zZW5kOiBkYXRhIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogbm93LCB3ZSB3YW50IHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgc2VuZF9zaXplICovCisgICAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgICBpZiAobHNzX3NpemUgPiAwKSB7CisJc2VuZF9zaXplID0gKGxzc19zaXplIDwgVURQX0xFTkdUSF9NQVggPyBsc3Nfc2l6ZSA6IFVEUF9MRU5HVEhfTUFYKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXNlbmRfc2l6ZSA9IDQwOTY7CisgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LCAqLworICAgIC8qIG1vc3Qgb2YgdGhlIG51bWJlcnMgaGVyZSBhcmUganVzdCBhIGhhY2sgdG8gcGljayBzb21ldGhpbmcgbmljZSAqLworICAgIC8qIGFuZCBiaWcgaW4gYW4gYXR0ZW1wdCB0byBuZXZlciB0cnkgdG8gc2VuZCBhIGJ1ZmZlciBhIHNlY29uZCB0aW1lICovCisgICAgLyogYmVmb3JlIGl0IGxlYXZlcyB0aGUgbm9kZS4uLnVubGVzcyB0aGUgdXNlciBzZXQgdGhlIHdpZHRoICovCisgICAgLyogZXhwbGljaXRseS4gKi8KKyAgICBpZiAoc2VuZF93aWR0aCA9PSAwKSBzZW5kX3dpZHRoID0gMzI7CisgICAgCisgICAgaWYgKHNlbmRfcmluZyA9PSBOVUxMICkgeworICAgICAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICAgICAgc2VuZF9zaXplLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8qIGlmIHRoZSB1c2VyIHN1cHBsaWVkIGEgY3B1IHJhdGUsIHRoaXMgY2FsbCB3aWxsIGNvbXBsZXRlIHJhdGhlciAqLworICAgIC8qIHF1aWNrbHksIG90aGVyd2lzZSwgdGhlIGNwdSByYXRlIHdpbGwgYmUgcmV0dXJlZCB0byB1cyBmb3IgKi8KKyAgICAvKiBwb3NzaWJsZSBkaXNwbGF5LiBUaGUgTGlicmFyeSB3aWxsIGtlZXAgaXQncyBvd24gY29weSBvZiB0aGlzIGRhdGEgKi8KKyAgICAvKiBmb3IgdXNlIGVsc2V3aGVyZS4gV2Ugd2lsbCBvbmx5IGRpc3BsYXkgaXQuIChEb2VzIHRoYXQgbWFrZSBpdCAqLworICAgIC8qICJvcGFxdWUiIHRvIHVzPykgKi8KKyAgICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKQorICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICAKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gc2V0IHVwIHRoZSBkYXRhIGNvbm5lY3Rpb24uIFRoZSBzZXJ2ZXIKKyAgICAgICAgIHNlbmRzIGJhY2sgdGhlIHBvcnQgbnVtYmVyIGFuZCBhbHRlcnMgdGhlIHNvY2tldCBwYXJhbWV0ZXJzCisgICAgICAgICB0aGVyZS4gIE9mIGNvdXJzZSB0aGlzIGlzIGEgZGF0YWdyYW0gc2VydmljZSBzbyBubyBjb25uZWN0aW9uCisgICAgICAgICBpcyBhY3R1YWxseSBzZXQgdXAsIHRoZSBzZXJ2ZXIganVzdCBzZXRzIHVwIHRoZSBzb2NrZXQgYW5kCisgICAgICAgICBiaW5kcyBpdC4gKi8KKyAgICAKKyAgICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZSAgICAgID0gRE9fVURQX1NUUkVBTTsKKyAgICAgIHVkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9idWZfc2l6ZSAgPSByc3Jfc2l6ZV9yZXE7CisgICAgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPm1lc3NhZ2Vfc2l6ZSAgID0gc2VuZF9zaXplOworICAgICAgdWRwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2Nvbm5lY3RlZCA9IHJlbW90ZV9jb25uZWN0ZWQ7CisgICAgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50ID0gcmVtb3RlX3JlY3ZfYWxpZ247CisgICAgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0ICAgID0gcmVtb3RlX3JlY3Zfb2Zmc2V0OworICAgICAgdWRwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSAgICA9IHJlbW90ZV9jcHVfdXNhZ2U7CisgICAgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlICAgICAgID0gcmVtb3RlX2NwdV9yYXRlOworICAgICAgdWRwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aCAgICA9IHRlc3RfdGltZTsKKyAgICAgIHVkcF9zdHJlYW1fcmVxdWVzdC0+c29fcmN2YXZvaWQgICAgPSByZW1fcmN2YXZvaWQ7CisgICAgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPnNvX3NuZGF2b2lkICAgID0gcmVtX3NuZGF2b2lkOworICAgICAgdWRwX3N0cmVhbV9yZXF1ZXN0LT5wb3J0ICAgICAgICAgICA9IGF0b2kocmVtb3RlX2RhdGFfcG9ydCk7CisgICAgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPmlwZmFtaWx5ID0gYWZfdG9fbmYocmVtb3RlX3Jlcy0+YWlfZmFtaWx5KTsKKyAgICAgIAorICAgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgICAKKyAgICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICAgIAorICAgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworCWlmIChkZWJ1ZykKKwkgIGZwcmludGYod2hlcmUsInNlbmRfdWRwX3N0cmVhbTogcmVtb3RlIGRhdGEgY29ubmVjdGlvbiBkb25lLlxuIik7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCXBlcnJvcigic2VuZF91ZHBfc3RyZWFtOiBlcnJvciBvbiByZW1vdGUiKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgCisgICAgICAvKiBQbGFjZSB0aGUgcG9ydCBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIHJlbW90ZSBpbnRvIHRoZSBzb2NrYWRkciAqLworICAgICAgLyogc3RydWN0dXJlIHNvIG91ciBzZW5kcyBjYW4gYmUgc2VudCB0byB0aGUgY29ycmVjdCBwbGFjZS4gQWxzbyBnZXQgKi8KKyAgICAgIC8qIHNvbWUgb2YgdGhlIHJldHVybmVkIHNvY2tldCBidWZmZXIgaW5mb3JtYXRpb24gZm9yIHVzZXIgZGlzcGxheS4gKi8KKyAgICAgIAorICAgICAgLyogbWFrZSBzdXJlIHRoYXQgcG9ydCBudW1iZXJzIGFyZSBpbiB0aGUgcHJvcGVyIG9yZGVyICovCisgICAgICBzZXRfcG9ydF9udW1iZXIocmVtb3RlX3Jlcywoc2hvcnQpdWRwX3N0cmVhbV9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlcik7CisgICAgICAKKyAgICAgIHJzcl9zaXplICAgICAgICA9IHVkcF9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisgICAgICByc3Nfc2l6ZSAgICAgICAgPSB1ZHBfc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplOworICAgICAgcmVtb3RlX2NwdV9yYXRlID0gdWRwX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGU7CisgICAgfQorCisjaWZkZWYgV0FOVF9ERU1PCisgICAgREVNT19TVFJFQU1fU0VUVVAobHNzX3NpemUscnNyX3NpemUpCisjZW5kaWYKKworICAgIC8qIFdlICJjb25uZWN0IiB1cCB0byB0aGUgcmVtb3RlIHBvc3QgdG8gYWxsb3cgaXMgdG8gdXNlIHRoZSBzZW5kICovCisgICAgLyogY2FsbCBpbnN0ZWFkIG9mIHRoZSBzZW5kdG8gY2FsbC4gUHJlc3VtZWFibHksIHRoaXMgaXMgYSBsaXR0bGUgKi8KKyAgICAvKiBzaW1wbGVyLCBhbmQgYSBsaXR0bGUgbW9yZSBlZmZpY2llbnQuIEkgdGhpbmsgdGhhdCBpdCBhbHNvIG1lYW5zICovCisgICAgLyogdGhhdCB3ZSBjYW4gYmUgaW5mb3JtZWQgb2YgY2VydGFpbiB0aGluZ3MsIGJ1dCBhbSBub3Qgc3VyZSAqLworICAgIC8qIHlldC4uLmFsc28sIHRoaXMgaXMgdGhlIHdheSBJIHdvdWxkIGV4cGVjdCBhIGNsaWVudCB0byBiZWhhdmUgKi8KKyAgICAvKiB3aGVuIHRhbGtpbmcgdG8gYSBzZXJ2ZXIgKi8KKyAgICBpZiAobG9jYWxfY29ubmVjdGVkKSB7IAorICAgICAgIGlmIChjb25uZWN0KGRhdGFfc29ja2V0LAorICAgICAgCQkgICByZW1vdGVfcmVzLT5haV9hZGRyLAorCQkgICByZW1vdGVfcmVzLT5haV9hZGRybGVuKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICAgICAgcGVycm9yKCJzZW5kX3VkcF9zdHJlYW06IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICB9IGVsc2UgaWYgKGRlYnVnKSB7CisgICAgICAgICAgZnByaW50Zih3aGVyZSwic2VuZF91ZHBfc3RyZWFtOiBjb25uZWN0ZWQgZGF0YSBzb2NrZXQuXG4iKTsKKyAgICAgICAgICBmZmx1c2god2hlcmUpOworICAgICAgIH0KKyAgICB9CisgICAgCisjaWZkZWYgV0lOMzIKKyAgLyogdGhpcyBpcyB1c2VkIHNvIHRoZSB0aW1lciB0aHJlYWQgY2FuIGNsb3NlIHRoZSBzb2NrZXQgb3V0IGZyb20gKi8KKyAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAvKiByZXR1cm4gV1NBRUlOVFIgd2l0aCB0aGUgdGVzdCBpcyBvdmVyLiBhbnl0aGluZyB0aGF0IHdpbGwgcnVuIG9uICovCisgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgICAgd2luX2tsdWRnZV9zb2NrZXQgPSBkYXRhX3NvY2tldDsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisgICAgLyogc2V0IHVwIHRoZSB0aW1lciB0byBjYWxsIHVzIGFmdGVyIHRlc3RfdGltZS4gb25lIG9mIHRoZXNlIGRheXMsICovCisgICAgLyogaXQgbWlnaHQgYmUgbmljZSB0byBmaWd1cmUtb3V0IGEgbmljZSByZWxpYWJsZSB3YXkgdG8gaGF2ZSB0aGUgKi8KKyAgICAvKiB0ZXN0IGNvbnRyb2xsZWQgYnkgYSBieXRlIGNvdW50IGFzIHdlbGwsIGJ1dCBzaW5jZSBVRFAgaXMgbm90ICovCisgICAgLyogcmVsaWFibGUsIHRoYXQgY291bGQgcHJvdmUgZGlmZmljdWx0LiBzbywgaW4gdGhlIG1lYW50aW1lLCB3ZSAqLworICAgIC8qIG9ubHkgYWxsb3cgYSBVRFBfU1RSRUFNIHRlc3QgdG8gYmUgYSB0aW1lZCB0ZXN0LiAqLworICAgIAorICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIHRpbWVzX3VwID0gMDsKKyAgICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZnByaW50Zih3aGVyZSwiU29ycnksIFVEUF9TVFJFQU0gdGVzdHMgbXVzdCBiZSB0aW1lZC5cbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgICAgLyogR2V0IHRoZSBzdGFydCBjb3VudCBmb3IgdGhlIGlkbGUgY291bnRlciBhbmQgdGhlIHN0YXJ0IHRpbWUgKi8KKyAgICAKKyAgICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKyAgICAKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICAgIElOVEVSVkFMU19JTklUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgIGlmIChkZW1vX21vZGUpIHsKKyAgICAgIEhJU1RfdGltZXN0YW1wKGRlbW9fb25lX3B0cik7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBTZW5kIGRhdGFncmFtcyBsaWtlIHRoZXJlIHdhcyBubyB0b21vcnJvdy4gYXQgc29tZXBvaW50IGl0IG1pZ2h0ICovCisgICAgLyogYmUgbmljZSB0byBzZXQgdGhpcyB1cCBzbyB0aGF0IGEgcXVhbnRpdHkgb2YgYnl0ZXMgY291bGQgYmUgc2VudCwgKi8KKyAgICAvKiBidXQgd2Ugc3RpbGwgbmVlZCBzb21lIHNvcnQgb2YgZW5kIG9mIHRlc3QgdHJpZ2dlciBvbiB0aGUgcmVjZWl2ZSAqLworICAgIC8qIHNpZGUuIHRoYXQgY291bGQgYmUgYSBzZWxlY3Qgd2l0aCBhIG9uZSBzZWNvbmQgdGltZW91dCwgYnV0IHRoZW4gKi8KKyAgICAvKiBpZiB0aGVyZSBpcyBhIHRlc3Qgd2hlcmUgbm9uZSBvZiB0aGUgZGF0YSBhcnJpdmVzIGZvciBhd2lsZSBhbmQgKi8KKyAgICAvKiB0aGVuIHN0YXJ0cyBhZ2Fpbiwgd2Ugd291bGQgZW5kIHRoZSB0ZXN0IHRvbyBzb29uLiBzb21ldGhpbmcgdG8gKi8KKyAgICAvKiB0aGluayBhYm91dC4uLiAqLworICAgIHdoaWxlICghdGltZXNfdXApIHsKKyAgICAgIAorI2lmZGVmIERJUlRZCisgICAgICAvKiB3ZSB3YW50IHRvIGRpcnR5IHNvbWUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVnZXJzIGluIHRoZSBidWZmZXIgKi8KKyAgICAgIC8qIHdlIGFyZSBhYm91dCB0byBzZW5kLiB3ZSBtYXkgYWxzbyB3YW50IHRvIGJyaW5nIHNvbWUgbnVtYmVyIG9mICovCisgICAgICAvKiB0aGVtIGNsZWFubHkgaW50byB0aGUgY2FjaGUuIFRoZSBjbGVhbiBvbmVzIHdpbGwgZm9sbG93IGFueSBkaXJ0eSAqLworICAgICAgLyogb25lcyBpbnRvIHRoZSBjYWNoZS4gKi8KKworICAgICAgYWNjZXNzX2J1ZmZlcihzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCSAgICBzZW5kX3NpemUsCisJCSAgICBsb2NfZGlydHlfY291bnQsCisJCSAgICBsb2NfY2xlYW5fY291bnQpOworI2VuZGlmIC8qIERJUlRZICovCisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwlISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgICAgIAorICAgICAgaWYgKGxvY2FsX2Nvbm5lY3RlZCkgeyAKKyAgICAgICAgIGxlbiA9IHNlbmQoZGF0YV9zb2NrZXQsCisJICAJICAgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgIHNlbmRfc2l6ZSwKKwkJICAgIDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGxlbiA9IHNlbmR0byhkYXRhX3NvY2tldCwKKwkJICAgICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgICAgICBzZW5kX3NpemUsCisJCSAgICAgIDAsCisJCSAgICAgIHJlbW90ZV9yZXMtPmFpX2FkZHIsCisJCSAgICAgIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4pOworICAgICAgfQorCisgICAgICBpZiAobGVuICE9IHNlbmRfc2l6ZSkgeworCWlmICgobGVuID49IDApIHx8IAorCSAgICBTT0NLRVRfRUlOVFIobGVuKSkKKwkgIGJyZWFrOworCWlmIChlcnJubyA9PSBFTk9CVUZTKSB7CisJICBmYWlsZWRfc2VuZHMrKzsKKwkgIGNvbnRpbnVlOworCX0KKwlwZXJyb3IoInVkcF9zZW5kOiBkYXRhIHNlbmQgZXJyb3IiKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgbWVzc2FnZXNfc2VudCsrOyAgICAgICAgICAKKyAgICAgIAorICAgICAgLyogbm93IHdlIHdhbnQgdG8gbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgbmV4dCBwb3NpdGlvbiBpbiB0aGUgKi8KKyAgICAgIC8qIGRhdGEgYnVmZmVyLi4uICovCisgICAgICAKKyAgICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKyAgICAgIAorICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisJLyogZ2V0IHRoZSBzZWNvbmQgdGltZXN0YW1wICovCisJSElTVF90aW1lc3RhbXAoJnRpbWVfdHdvKTsKKwlISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIERFTU9fU1RSRUFNX0lOVEVSVkFMKHNlbmRfc2l6ZSkKKyNlbmRpZgorCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMgICAgICAKKyAgICAgIElOVEVSVkFMU19XQUlUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKiBUaGlzIGlzIGEgdGltZWQgdGVzdCwgc28gdGhlIHJlbW90ZSB3aWxsIGJlIHJldHVybmluZyB0byB1cyBhZnRlciAqLworICAgIC8qIGEgdGltZS4gV2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHNlbmQgYW55ICJzdHJhbmdlIiBtZXNzYWdlcyB0byB0ZWxsICovCisgICAgLyogdGhlIHJlbW90ZSB0aGF0IHRoZSB0ZXN0IGlzIGNvbXBsZXRlZCwgdW5sZXNzIHdlIGRlY2lkZSB0byBhZGQgYSAqLworICAgIC8qIG51bWJlciBvZiBtZXNzYWdlcyB0byB0aGUgdGVzdC4gKi8KKyAgICAKKyAgICAvKiB0aGUgdGVzdCBpcyBvdmVyLCBzbyBnZXQgc3RhdHMgYW5kIHN0dWZmICovCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLAkKKwkgICAgICZlbGFwc2VkX3RpbWUpOworICAgIAorICAgIGlmICghbm9fY29udHJvbCkgeworICAgICAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIHJlbW90ZSBlbmQJKi8KKyAgICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKwlpZiAoZGVidWcpCisJICBmcHJpbnRmKHdoZXJlLCJzZW5kX3VkcF9zdHJlYW06IHJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJcGVycm9yKCJzZW5kX3VkcF9zdHJlYW06IGVycm9yIG9uIHJlbW90ZSIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBtZXNzYWdlc19yZWN2ZCA9IHVkcF9zdHJlYW1fcmVzdWx0cy0+bWVzc2FnZXNfcmVjdmQ7CisgICAgICBieXRlc19yZWN2ZCAgICA9IChkb3VibGUpIHNlbmRfc2l6ZSAqIChkb3VibGUpIG1lc3NhZ2VzX3JlY3ZkOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHNpbmNlIHRoZXJlIHdhcyBubyBjb250cm9sIGNvbm5lY3Rpb24sIHdlJ3ZlIG5vIGlkZWEgd2hhdCB3YXMKKwkgYWN0dWFsbHkgcmVjZWl2ZWQuIHJhaiAyMDA3LTAyLTA4ICovCisgICAgICBtZXNzYWdlc19yZWN2ZCA9IC0xOworICAgICAgYnl0ZXNfcmVjdmQgPSAtMS4wOworICAgIH0KKworICAgIGJ5dGVzX3NlbnQgICAgPSAoZG91YmxlKSBzZW5kX3NpemUgKiAoZG91YmxlKSBtZXNzYWdlc19zZW50OworICAgIGxvY2FsX3RocnVwdXQgPSBjYWxjX3RocnVwdXQoYnl0ZXNfc2VudCk7CisgICAgCisgICAgCisgICAgLyogd2UgYXN1bWUgdGhhdCB0aGUgcmVtb3RlIHJhbiBmb3IgYXMgbG9uZyBhcyB3ZSBkaWQgKi8KKyAgICAKKyAgICByZW1vdGVfdGhydXB1dCA9IGNhbGNfdGhydXB1dChieXRlc19yZWN2ZCk7CisgICAgCisgICAgLyogcHJpbnQgdGhlIHJlc3VsdHMgZm9yIHRoaXMgc29ja2V0IGFuZCBtZXNzYWdlIHNpemUgKi8KKyAgICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAgIC8qIHV0aWxpemF0aW9uIGZvciB0aGUgc3lzdGVtKHMpIFdlIHBhc3MgemVyb3MgZm9yIHRoZSBsb2NhbCAqLworICAgICAgLyogY3B1IHV0aWxpemF0aW9uIGFuZCBlbGFwc2VkIHRpbWUgdG8gdGVsbCB0aGUgcm91dGluZSB0byB1c2UgKi8KKyAgICAgIC8qIHRoZSBsaWJyYXJpZXMgb3duIHZhbHVlcyBmb3IgdGhvc2UuICovCisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gY2FsY19jcHVfdXRpbCgwLjApOworCS8qIHNob3VsZG4ndCB0aGlzIHJlYWxseSBiZSBiYXNlZCBvbiBieXRlc19yZWN2ZCwgc2luY2UgdGhhdCBpcyAqLworCS8qIHRoZSBlZmZlY3RpdmUgdGhyb3VnaHB1dCBvZiB0aGUgdGVzdD8gSSB0aGluayB0aGF0IGl0IHNob3VsZCwgKi8KKwkvKiBzbyB3aWxsIG1ha2UgdGhlIGNoYW5nZSByYWogMTEvOTQgKi8KKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfcmVjdmQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICAwKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWxvY2FsX2NwdV91dGlsaXphdGlvbgk9IChmbG9hdCkgLTEuMDsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogVGhlIGxvY2FsIGNhbGN1bGF0aW9ucyBjb3VsZCB1c2UgdmFyaWFibGVzIGJlaW5nIGtlcHQgYnkgKi8KKyAgICAgIC8qIHRoZSBsb2NhbCBuZXRsaWIgcm91dGluZXMuIFRoZSByZW1vdGUgY2FsY3VhdGlvbnMgbmVlZCB0byAqLworICAgICAgLyogaGF2ZSBhIGZldyB0aGluZ3MgcGFzc2VkIHRvIHRoZW0uICovCisgICAgICBpZiAocmVtb3RlX2NwdV91c2FnZSkgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24JPSB1ZHBfc3RyZWFtX3Jlc3VsdHMtPmNwdV91dGlsOworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfcmVjdmQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgICAgdWRwX3N0cmVhbV9yZXN1bHRzLT5udW1fY3B1cyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3ZXJlIG5vdCBtZWFzdXJpbmcgY3B1LCBmb3IgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYsIHdlICovCisgICAgICAvKiBzaG91bGQgbWFrZSBpdCAtMS4wICovCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24gID0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSByZW1vdGVfdGhydXB1dCwKKwkJCSBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSByZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgIAorICAgIC8qIHNpbmNlIHRoZSByb3V0aW5lIGNhbGN1bGF0ZV9jb25maWRlbmNlIGlzIHJhdGhlciBnZW5lcmljLCBhbmQgKi8KKyAgICAvKiB3ZSBoYXZlIGEgZmV3IG90aGVyIHBhcm1zIG9mIGludGVyZXN0LCB3ZSB3aWxsIGRvIGEgbGl0dGxlIHdvcmsgKi8KKyAgICAvKiBoZXJlIHRvIGNhY2x1bGF0ZSB0aGVpciBhdmVyYWdlLiAqLworICAgIHN1bV9tZXNzYWdlc19zZW50ICArPSBtZXNzYWdlc19zZW50OworICAgIHN1bV9tZXNzYWdlc19yZWN2ZCArPSBtZXNzYWdlc19yZWN2ZDsKKyAgICBzdW1fZmFpbGVkX3NlbmRzICAgKz0gZmFpbGVkX3NlbmRzOworICAgIHN1bV9sb2NhbF90aHJ1cHV0ICArPSBsb2NhbF90aHJ1cHV0OworICAgIAorICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uKys7CisKKyAgICAvKiB0aGlzIGRhdGFwb2ludCBpcyBkb25lLCBzbyB3ZSBkb24ndCBuZWVkIHRoZSBzb2NrZXQgYW55IGxvbmdlciAqLworICAgIGNsb3NlKGRhdGFfc29ja2V0KTsKKworICB9CisKKyAgLyogd2Ugc2hvdWxkIHJlYWNoIHRoaXMgcG9pbnQgb25jZSB0aGUgdGVzdCBpcyBmaW5pc2hlZCAqLworCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmcmVtb3RlX3RocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgLyogc29tZSBvZiB0aGUgaW50ZXJlc3RpbmcgdmFsdWVzIGFyZW4ndCBjb3ZlcmVkIGJ5IHRoZSBnZW5lcmljICovCisgIC8qIGNvbmZpZGVuY2Ugcm91dGluZSAqLworICBtZXNzYWdlc19zZW50ICAgID0gc3VtX21lc3NhZ2VzX3NlbnQgLyAoY29uZmlkZW5jZV9pdGVyYXRpb24gLTEpOworICBtZXNzYWdlc19yZWN2ZCAgID0gc3VtX21lc3NhZ2VzX3JlY3ZkIC8gKGNvbmZpZGVuY2VfaXRlcmF0aW9uIC0xKTsKKyAgZmFpbGVkX3NlbmRzICAgICA9IHN1bV9mYWlsZWRfc2VuZHMgLyAoY29uZmlkZW5jZV9pdGVyYXRpb24gLTEpOworICBsb2NhbF90aHJ1cHV0ICAgID0gc3VtX2xvY2FsX3RocnVwdXQgLyAoY29uZmlkZW5jZV9pdGVyYXRpb24gLTEpOworCisgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworICAgIAorICAKKyAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgLyogd2UgZGlkIG5vdCBoaXQgY29uZmlkZW5jZSwgYnV0IHdlcmUgd2UgYXNrZWQgdG8gbG9vayBmb3IgaXQ/ICovCisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBkaXNwbGF5X2NvbmZpZGVuY2UoKTsKKyAgICB9CisgIH0KKworICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZCh1ZHBfc3RyZWFtX3Jlc3VsdHMtPmNwdV9tZXRob2QpOworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCWxvY2FsX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQsCisJCWxvY2FsX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlmb3JtYXRfdW5pdHMoKSwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCQkgICAgICAgIC8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIG1lc3NhZ2VzX3NlbnQsCisJICAgICAgZmFpbGVkX3NlbmRzLAorCSAgICAgIGxvY2FsX3RocnVwdXQsIAkJLyogd2hhdCB3YXMgdGhlIHhmZXIgcmF0ZSAqLworCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcnNyX3NpemUsCisJICAgICAgZWxhcHNlZF90aW1lLAorCSAgICAgIG1lc3NhZ2VzX3JlY3ZkLAorCSAgICAgIHJlbW90ZV90aHJ1cHV0LAorCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIGxvY2FsX3RocnVwdXQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsIAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHNlbmRzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgbWVzc2FnZXNfc2VudCwKKwkgICAgICBmYWlsZWRfc2VuZHMsCisJICAgICAgbG9jYWxfdGhydXB1dCwKKwkgICAgICByc3Jfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgZWxhcHNlZF90aW1lLAorCSAgICAgIG1lc3NhZ2VzX3JlY3ZkLAorCSAgICAgIHJlbW90ZV90aHJ1cHV0KTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGZmbHVzaCh3aGVyZSk7CisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJcbkhpc3RvZ3JhbSBvZiB0aW1lIHNwZW50IGluIHNlbmQoKSBjYWxsXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIEhJU1RfcmVwb3J0KHRpbWVfaGlzdCk7CisgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCit9CisMCisKKyAvKiB0aGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgcmVjZWl2ZSBzaWRlIChuZXRzZXJ2ZXIpIG9mIHRoZSAqLworIC8qIFVEUF9TVFJFQU0gcGVyZm9ybWFuY2UgdGVzdC4gKi8KKwordm9pZAorcmVjdl91ZHBfc3RyZWFtKCkKK3sKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbXlhZGRyX2luOworICBTT0NLRVQJc19kYXRhOworICBuZXRwZXJmX3NvY2tsZW5fdCAJYWRkcmxlbjsKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcmVtb3RlX2FkZHI7CisgIG5ldHBlcmZfc29ja2xlbl90IHJlbW90ZV9hZGRybGVuOworCisgIGludAlsZW4gPSAwOworICB1bnNpZ25lZCBpbnQJYnl0ZXNfcmVjZWl2ZWQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBpbnQJbWVzc2FnZV9zaXplOworICB1bnNpZ25lZCBpbnQJbWVzc2FnZXNfcmVjdmQgPSAwOworICAKKyAgc3RydWN0CXVkcF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKnVkcF9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXVkcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSp1ZHBfc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJdWRwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqdWRwX3N0cmVhbV9yZXN1bHRzOworICAKKyAgdWRwX3N0cmVhbV9yZXF1ZXN0ICA9IAorICAgIChzdHJ1Y3QgdWRwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdWRwX3N0cmVhbV9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgdWRwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB1ZHBfc3RyZWFtX3Jlc3VsdHMgID0gCisgICAgKHN0cnVjdCB1ZHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl91ZHBfc3RyZWFtOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwgKi8KKyAgLyogc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGRldGVybWluZWQsICovCisgIC8qIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvIHdyb25nIGZvciBhbnkgKi8KKyAgLyogcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQgKi8KKyAgLyogd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMgKi8KKyAgLyogdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cyB1bmV4cGVjdGVkICovCisgIC8qIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9zdHJlYW06IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gVURQX1NUUkVBTV9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZyA+IDIpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9zdHJlYW06IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGFsdGVyIHRoZSBtZXNzYWdlX3B0ciB2YXJpYWJsZSB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnQgd2l0aCB0aGUgZGVzaXJlZCBvZmZzZXQuICovCisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl91ZHBfc3RyZWFtOiByZXF1ZXN0ZWQgYWxpZ25tZW50IG9mICVkXG4iLAorCSAgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgcmVjdl93aWR0aCA9IDE7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkgICB1ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHVkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9zdHJlYW06IHJlY2VpdmUgYWxpZ25tZW50IGFuZCBvZmZzZXQgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdWRwX3N0cmVhbTogZ3JhYmJpbmcgYSBzb2NrZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBjcmVhdGVfZGF0YV9zb2NrZXQgZXhwZWN0cyB0byBmaW5kIHNvbWUgdGhpbmdzIGluIHRoZSBnbG9iYWwgKi8KKyAgLyogdmFyaWFibGVzLCBzbyBzZXQgdGhlIGdsb2JhbHMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgcmVxdWVzdC4gKi8KKyAgLyogb25jZSB0aGUgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQsIHdlIHdpbGwgc2V0IHRoZSByZXNwb25zZSB2YWx1ZXMgKi8KKyAgLyogYmFzZWQgb24gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgdGhvc2UgZ2xvYmFscy4gcmFqIDcvOTQgKi8KKyAgbHNyX3NpemVfcmVxID0gdWRwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplOworICBsb2NfcmN2YXZvaWQgPSB1ZHBfc3RyZWFtX3JlcXVlc3QtPnNvX3JjdmF2b2lkOworICBsb2Nfc25kYXZvaWQgPSB1ZHBfc3RyZWFtX3JlcXVlc3QtPnNvX3NuZGF2b2lkOworICBsb2NhbF9jb25uZWN0ZWQgPSB1ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfY29ubmVjdGVkOworCisgIHNldF9ob3N0bmFtZV9hbmRfcG9ydChsb2NhbF9uYW1lLAorCQkJcG9ydF9idWZmZXIsCisJCQluZl90b19hZih1ZHBfc3RyZWFtX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCXVkcF9zdHJlYW1fcmVxdWVzdC0+cG9ydCk7CisKKyAgbG9jYWxfcmVzID0gY29tcGxldGVfYWRkcmluZm8obG9jYWxfbmFtZSwKKwkJCQlsb2NhbF9uYW1lLAorCQkJCXBvcnRfYnVmZmVyLAorCQkJCW5mX3RvX2FmKHVkcF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJCVNPQ0tfREdSQU0sCisJCQkJSVBQUk9UT19VRFAsCisJCQkJMCk7CisKKyAgc19kYXRhID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgIAorICBpZiAoc19kYXRhID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIHVkcF9zdHJlYW1fcmVzcG9uc2UtPnRlc3RfbGVuZ3RoID0gdWRwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aDsKKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfZGF0YSwgCisJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfaW4sCisJCSAgJmFkZHJsZW4pID09IFNPQ0tFVF9FUlJPUil7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX2RhdGEpOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3cgbXlhZGRyX2luIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzICovCisgIC8qIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0IHRoZSAqLworICAvKiBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiAqLworICAKKyAgdWRwX3N0cmVhbV9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlciA9IAorICAgIChpbnQpIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopJm15YWRkcl9pbiktPnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgLTEgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHVkcF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlICAgID0gKGZsb2F0KTAuMDsgLyogYXNzdW1lIG5vIGNwdSAqLworICB1ZHBfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIGlmICh1ZHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgLyogV2Ugd2lsbCBwYXNzIHRoZSByYXRlIGludG8gdGhlIGNhbGlicmF0aW9uIHJvdXRpbmUuIElmIHRoZSAqLworICAgIC8qIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IG9uZSwgaXQgd2lsbCBiZSAwLjAsIGFuZCB3ZSB3aWxsIGRvIGEgKi8KKyAgICAvKiAicmVhbCIgY2FsaWJyYXRpb24uIE90aGVyd2lzZSwgYWxsIGl0IHdpbGwgcmVhbGx5IGRvIGlzICovCisgICAgLyogc3RvcmUgaXQgYXdheS4uLiAqLworICAgIHVkcF9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICB1ZHBfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdSh1ZHBfc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKyAgbWVzc2FnZV9zaXplCT0gdWRwX3N0cmVhbV9yZXF1ZXN0LT5tZXNzYWdlX3NpemU7CisgIHRlc3RfdGltZQk9IHVkcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGg7CisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHVkcF9zdHJlYW1fcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgdWRwX3N0cmVhbV9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworICB1ZHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgdWRwX3N0cmVhbV9yZXNwb25zZS0+c29fc25kYXZvaWQgPSBsb2Nfc25kYXZvaWQ7CisKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHVkcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworICAKKyNpZmRlZiBXSU4zMgorICAvKiB0aGlzIGlzIHVzZWQgc28gdGhlIHRpbWVyIHRocmVhZCBjYW4gY2xvc2UgdGhlIHNvY2tldCBvdXQgZnJvbSAqLworICAvKiB1bmRlciB1cywgd2hpY2ggdG8gZGF0ZSBpcyB0aGUgZWFzaWVzdC9jbGVhbmVzdC9sZWFzdCAqLworICAvKiBXaW5kb3dzLXNwZWNpZmljIHdheSBJIGNhbiBmaW5kIHRvIGZvcmNlIHRoZSB3aW5zb2NrIGNhbGxzIHRvICovCisgIC8qIHJldHVybiBXU0FFSU5UUiB3aXRoIHRoZSB0ZXN0IGlzIG92ZXIuIGFueXRoaW5nIHRoYXQgd2lsbCBydW4gb24gKi8KKyAgLyogOTUgYW5kIE5UIGFuZCBpcyBjbG9zZXIgdG8gd2hhdCBuZXRwZXJmIGV4cGVjdHMgZnJvbSBVbml4IHNpZ25hbHMgKi8KKyAgLyogYW5kIHN1Y2ggd291bGQgYmUgYXBwcmVjaWF0ZWQgcmFqIDEvOTYgKi8KKyAgd2luX2tsdWRnZV9zb2NrZXQgPSBzX2RhdGE7CisjZW5kaWYgLyogV0lOMzIgKi8KKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSB0aW1lciBwb3BzLCBvciBpZiB3ZSBoYXBwZW4gdG8gcmVjdiBhICovCisgIC8qIG1lc3NhZ2Ugb2YgbGVzcyB0aGFuIHNlbmRfc2l6ZSBieXRlcy4uLiAqLworICAKKyAgdGltZXNfdXAgPSAwOworCisgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSArIFBBRF9USU1FKTsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9zdHJlYW06IGFib3V0IHRvIGVudGVyIGlubmVyIHNhbmN0dW0uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogV2UgImNvbm5lY3QiIHVwIHRvIHRoZSByZW1vdGUgcG9zdCB0byBhbGxvdyB1cyB0byB1c2UgdGhlIHJlY3YgKi8KKyAgLyogY2FsbCBpbnN0ZWFkIG9mIHRoZSByZWN2ZnJvbSBjYWxsLiBQcmVzdW1lYWJseSwgdGhpcyBpcyBhIGxpdHRsZSAqLworICAvKiBzaW1wbGVyLCBhbmQgYSBsaXR0bGUgbW9yZSBlZmZpY2llbnQuICovCisgCisgIGlmIChsb2NhbF9jb25uZWN0ZWQpIHsKKworICAgIC8qIFJlY2VpdmUgdGhlIGZpcnN0IG1lc3NhZ2UgdXNpbmcgcmVjdmZyb20gdG8gZmluZCB0aGUgcmVtb3RlIGFkZHJlc3MgKi8KKyAgICByZW1vdGVfYWRkcmxlbiA9IHNpemVvZihyZW1vdGVfYWRkcik7CisgICAgbGVuID0gcmVjdmZyb20oc19kYXRhLCByZWN2X3JpbmctPmJ1ZmZlcl9wdHIsCisgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zaXplLCAwLAorICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIqKSZyZW1vdGVfYWRkciwgJnJlbW90ZV9hZGRybGVuKTsKKyAgICBpZiAobGVuICE9IG1lc3NhZ2Vfc2l6ZSkgeworICAgICAgaWYgKChsZW4gPT0gU09DS0VUX0VSUk9SKSAmJiAhU09DS0VUX0VJTlRSKGxlbikpIHsKKyAgICAgICAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICAgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgIH0KKyAgICBtZXNzYWdlc19yZWN2ZCsrOworICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworCisgICAgLyogTm93IGNvbm5lY3Qgd2l0aCB0aGUgcmVtb3RlIHNvY2tldCBhZGRyZXNzICovCisgICAgaWYgKGNvbm5lY3Qoc19kYXRhLAorICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIqKSZyZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICByZW1vdGVfYWRkcmxlbiApPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICAgICAgY2xvc2Uoc19kYXRhKTsKKyAgICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmIChkZWJ1ZykgeworICAgICAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9zdHJlYW06IGNvbm5lY3RlZCBkYXRhIHNvY2tldFxuIik7CisgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgIH0KKyAgfQorICAKKyAgd2hpbGUgKCF0aW1lc191cCkgeworICAgIGlmKGxvY2FsX2Nvbm5lY3RlZCkgeworICAgICAgIGxlbiA9IHJlY3Yoc19kYXRhLAorICAgICAgICAgICAgICAgICAgcmVjdl9yaW5nLT5idWZmZXJfcHRyLAorICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zaXplLAorICAgICAgICAgICAgICAgICAgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICBsZW4gPSByZWN2ZnJvbShzX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgcmVjdl9yaW5nLT5idWZmZXJfcHRyLAorICAgIAkgICAgICAgICAgICAgIG1lc3NhZ2Vfc2l6ZSwgCisJCSAgICAgIDAsMCwwKTsKKyAgICB9CisgICAgICAgCisgICAgaWYgKGxlbiAhPSBtZXNzYWdlX3NpemUpIHsKKyAgICAgIGlmICgobGVuID09IFNPQ0tFVF9FUlJPUikgJiYgIVNPQ0tFVF9FSU5UUihsZW4pKSB7CisgICAgICAgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworCSAgICBzZW5kX3Jlc3BvbnNlKCk7CisJICAgIGV4aXQoMSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgbWVzc2FnZXNfcmVjdmQrKzsKKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdWRwX3N0cmVhbTogZ290ICVkIG1lc3NhZ2VzLlxuIixtZXNzYWdlc19yZWN2ZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgCisgIC8qIFRoZSBsb29wIG5vdyBleGl0cyBkdWUgdGltZXIgb3IgPCBzZW5kX3NpemUgYnl0ZXMgcmVjZWl2ZWQuIGluICovCisgIC8qIHJlYWxpdHksIHdlIG9ubHkgcmVhbGx5IHN1cHBvcnQgYSB0aW1lZCBVRFBfU1RSRUFNIHRlc3QuIHJhaiAqLworICAvKiAxMi85NSAqLworICAKKyAgY3B1X3N0b3AodWRwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lc191cCkgeworICAgIC8qIHdlIGVuZGVkIG9uIGEgdGltZXIsIHN1YnRyYWN0IHRoZSBQQURfVElNRSAqLworICAgIGVsYXBzZWRfdGltZSAtPSAoZmxvYXQpUEFEX1RJTUU7CisgIH0KKyAgZWxzZSB7CisgICAgc3RvcF90aW1lcigpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9zdHJlYW06IHRlc3QgZW5kZWQgaW4gJWYgc2Vjb25kcy5cbiIsZWxhcHNlZF90aW1lKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAKKyAgLyogV2Ugd2lsbCBjb3VudCB0aGUgIm9mZiIgbWVzc2FnZSB0aGF0IGdvdCB1cyBvdXQgb2YgdGhlIGxvb3AgKi8KKyAgYnl0ZXNfcmVjZWl2ZWQgPSAobWVzc2FnZXNfcmVjdmQgKiBtZXNzYWdlX3NpemUpICsgbGVuOworICAKKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3VkcF9zdHJlYW06IGdvdCAlZCBieXRlc1xuIiwKKwkgICAgYnl0ZXNfcmVjZWl2ZWQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlCT0gVURQX1NUUkVBTV9SRVNVTFRTOworICB1ZHBfc3RyZWFtX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkCT0gaHRvbmwoYnl0ZXNfcmVjZWl2ZWQpOworICB1ZHBfc3RyZWFtX3Jlc3VsdHMtPm1lc3NhZ2VzX3JlY3ZkCT0gbWVzc2FnZXNfcmVjdmQ7CisgIHVkcF9zdHJlYW1fcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICB1ZHBfc3RyZWFtX3Jlc3VsdHMtPmNwdV9tZXRob2QgICAgICAgID0gY3B1X21ldGhvZDsKKyAgdWRwX3N0cmVhbV9yZXN1bHRzLT5udW1fY3B1cyAgICAgICAgICA9IGxpYl9udW1fbG9jX2NwdXM7CisgIGlmICh1ZHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgdWRwX3N0cmVhbV9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoZWxhcHNlZF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICB1ZHBfc3RyZWFtX3Jlc3VsdHMtPmNwdV91dGlsCT0gKGZsb2F0KSAtMS4wOworICB9CisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdWRwX3N0cmVhbTogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworCisgIGNsb3NlKHNfZGF0YSk7CisKK30KKwwKK3ZvaWQKK3NlbmRfdWRwX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisKKyAgY2hhciAqdHB1dF90aXRsZV9iYW5kID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCAgUmVzcC4gICBFbGFwc2VkICBcblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICAgU2l6ZSAgICBUaW1lICAgICBUaHJvdWdocHV0IFxuXAorYnl0ZXMgIEJ5dGVzICBieXRlcyAgICBieXRlcyAgIHNlY3MuICAgICVzL3NlYyAgIFxuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmICVzXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICAlLTZkICAlLTYuMmYgICAlNy4yZiAgICVzXG4iOworCisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHJhbnMuICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgUmF0ZSAgICAgbG9jYWwgIHJlbW90ZSBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICBieXRlcyAgIGJ5dGVzICBzZWNzLiAgIHBlciBzZWMgICUlICVjICAgICUlICVjICAgIHVzL1RyICAgdXMvVHJcblxuIjsKKworICBjaGFyICpjcHVfdGl0bGVfdHB1dCA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHB1dCAgICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgJS04LjhzIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAlYyAgICAlJSAlYyAgICB1cy9UciAgIHVzL1RyXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZiAlYyAlc1xuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICUtNmQgJS02LjJmICAlLTYuMmYgICAlLTYuMmYgJS02LjJmICUtNi4zZiAgJS02LjNmICVzXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBpbnQJbGVuOworICBpbnQJbnVtbWVzc2FnZXM7CisgIFNPQ0tFVAlzZW5kX3NvY2tldDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgaW50CWJ5dGVzX3hmZXJkOworICAKKyAgaW50CXJzcF9ieXRlc19yZWN2ZDsKKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzOworICAKKyAgc3RydWN0CXVkcF9ycl9yZXF1ZXN0X3N0cnVjdAkqdWRwX3JyX3JlcXVlc3Q7CisgIHN0cnVjdAl1ZHBfcnJfcmVzcG9uc2Vfc3RydWN0CSp1ZHBfcnJfcmVzcG9uc2U7CisgIHN0cnVjdAl1ZHBfcnJfcmVzdWx0c19zdHJ1Y3QJKnVkcF9ycl9yZXN1bHQ7CisKKyAgdWRwX3JyX3JlcXVlc3QgID0KKyAgICAoc3RydWN0IHVkcF9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdWRwX3JyX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHVkcF9ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB1ZHBfcnJfcmVzdWx0CSA9CisgICAgKHN0cnVjdCB1ZHBfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIHRpbWVfaGlzdCA9IEhJU1RfbmV3KCk7CisgIH0KKyNlbmRpZgorICAKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZSAqLworICAvKiBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50ICovCisgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgIC8qIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKyAgCisgIGNvbXBsZXRlX2FkZHJpbmZvcygmcmVtb3RlX3JlcywKKwkJICAgICAmbG9jYWxfcmVzLAorCQkgICAgIHJlbW90ZV9ob3N0LAorCQkgICAgIFNPQ0tfREdSQU0sCisJCSAgICAgSVBQUk9UT19VRFAsCisJCSAgICAgMCk7CisKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIHByaW50X3RvcF90ZXN0X2hlYWRlcigiVURQIFJFUVVFU1QvUkVTUE9OU0UgVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycyAqLworICAKKyAgc2VuZF9yaW5nICAgICA9IE5VTEw7CisgIHJlY3ZfcmluZyAgICAgPSBOVUxMOworICBudW1tZXNzYWdlcwk9IDA7CisgIGJ5dGVzX3hmZXJkCT0gMDsKKyAgdGltZXNfdXAgCT0gMDsKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKworICAvKiB3ZSBoYXZlIGEgZ3JlYXQtYmlnIHdoaWxlIGxvb3Agd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyAqLworICAvKiB3ZSBydW4gYSBwYXJ0aWN1bGFyIHRlc3QuIHRoaXMgaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBhICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKEkgcmVhbGx5IHNob3VsZCBoYXZlIHN0YXllZCBhd2FrZSBkdXJpbmcgKi8KKyAgLyogcHJvYnN0YXRzIDopLiBJZiB0aGUgdXNlciBkaWQgbm90IHJlcXVlc3QgY29uZmlkZW5jZSBtZWFzdXJlbWVudCAqLworICAvKiAobm8gY29uZmlkZW5jZSBpcyB0aGUgZGVmYXVsdCkgdGhlbiB3ZSB3aWxsIG9ubHkgZ28gdGhvdWdoIHRoZSAqLworICAvKiBsb29wIG9uY2UuIHRoZSBjb25maWRlbmNlIHN0dWZmIG9yaWdpbmF0ZXMgZnJvbSB0aGUgZm9sa3MgYXQgSUJNICovCisKKyAgd2hpbGUgKCgoY29uZmlkZW5jZSA8IDApICYmIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8IGl0ZXJhdGlvbl9tYXgpKSB8fAorCSAoY29uZmlkZW5jZV9pdGVyYXRpb24gPD0gaXRlcmF0aW9uX21pbikpIHsKKyAgICAKKyAgICBudW1tZXNzYWdlcyAgICAgPSAwOworICAgIGJ5dGVzX3hmZXJkICAgICA9IDA7CisgICAgdGltZXNfdXAgICAgICAgID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIAorICAgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXJzIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldCAqLworICAgIAorICAgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICAgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworICAgIAorICAgIGlmIChzZW5kX3JpbmcgPT0gTlVMTCkgeworICAgICAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICAgICAgcmVxX3NpemUsCisJCQkJICAgICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3NlbmRfb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgaWYgKHJlY3ZfcmluZyA9PSBOVUxMKSB7CisgICAgICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgICAgICByc3Bfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfcmVjdl9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfcmVjdl9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgICAgCisgICAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF91ZHBfcnI6IHVkcCByciBkYXRhIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX3VkcF9ycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgICAKKyAgICAvKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGNwdSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudHMsIHdlIG11c3QgKi8KKyAgICAvKiBjYWxpYnJhdGUgdGhlIGNwdShzKS4gV2Ugd2lsbCBwZXJmb3JtIHRoaXMgdGFzayB3aXRoaW4gdGhlIHRlc3RzICovCisgICAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgICAvKiBjYWxpYnJhdGVfbG9jYWxfY3B1IHdpbGwgcmV0dXJuIHJhdGhlciBxdWlja2x5IGFzIGl0IHdpbGwgaGF2ZSAqLworICAgIC8qIG5vdGhpbmcgdG8gZG8uIElmIGxvY2FsX2NwdV9yYXRlIGlzIHplcm8sIHRoZW4gd2Ugd2lsbCBnbyB0aHJvdWdoICovCisgICAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suIElmICovCisgICAgLyogdGhlcmUgaXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwgaWRsZSBsb29wLCB0aGUgKi8KKyAgICAvKiBsb2NhbF9jcHVfcmF0ZSB3aWxsIGJlIHNldCB0byAtMS4gKi8KKyAgICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZQorCSBzb2NrZXQgcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZQorCSByZWFzb24gZm9yIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAKKwkgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywKKwkgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUKKwkgdGhhdCBubyBjaGFuZ2VzIGJleW9uZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzaG91bGQgYmUKKwkgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgZGVmYXVsdCB0byA4LCB3aGljaAorCSB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQk9IERPX1VEUF9SUjsKKyAgICAgIHVkcF9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0gcnNyX3NpemVfcmVxOworICAgICAgdWRwX3JyX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPSByc3Nfc2l6ZV9yZXE7CisgICAgICB1ZHBfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQgICAgICA9IHJlbW90ZV9yZWN2X2FsaWduOworICAgICAgdWRwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CSAgICAgICAgPSByZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgICB1ZHBfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQgICAgICA9IHJlbW90ZV9zZW5kX2FsaWduOworICAgICAgdWRwX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0CSAgICAgICAgPSByZW1vdGVfc2VuZF9vZmZzZXQ7CisgICAgICB1ZHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplCT0gcmVxX3NpemU7CisgICAgICB1ZHBfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZQk9IHJzcF9zaXplOworICAgICAgdWRwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CSAgICAgICAgPSByZW1vdGVfY3B1X3VzYWdlOworICAgICAgdWRwX3JyX3JlcXVlc3QtPmNwdV9yYXRlCSAgICAgICAgPSByZW1vdGVfY3B1X3JhdGU7CisgICAgICB1ZHBfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQJICAgICAgICA9IHJlbV9yY3Zhdm9pZDsKKyAgICAgIHVkcF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZAkgICAgICAgID0gcmVtX3NuZGF2b2lkOworICAgICAgaWYgKHRlc3RfdGltZSkgeworCXVkcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9IHRlc3RfdGltZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXVkcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9IHRlc3RfdHJhbnMgKiAtMTsKKyAgICAgIH0KKyAgICAgIHVkcF9ycl9yZXF1ZXN0LT5wb3J0ICAgICAgICAgICAgICAgID0gYXRvaShyZW1vdGVfZGF0YV9wb3J0KTsKKyAgICAgIHVkcF9ycl9yZXF1ZXN0LT5pcGZhbWlseSA9IGFmX3RvX25mKHJlbW90ZV9yZXMtPmFpX2ZhbWlseSk7CisgICAgICAKKyAgICAgIGlmIChkZWJ1ZyA+IDEpIHsKKwlmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX3VkcF9ycjogcmVxdWVzdGluZyBVRFAgci9yIHRlc3RcbiIpOworICAgICAgfQorICAgICAgCisgICAgICBzZW5kX3JlcXVlc3QoKTsKKyAgICAKKyAgICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQKKwkgc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sKKwkgaW50byB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuCisJIFRoZSByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwKKwkgaGF2ZSBkb25lIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUKKwkgY3B1IGxvY2FsbHkgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlCisJIGNvdW50ZXIgdmFsdWUgcmlnaHQgYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZQorCSB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQgYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzCisJIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMgYmVpbmcgc2VudCBmb3IgdGhlIFVEUAorCSB0ZXN0cy4gICovCisgICAgCisgICAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgCisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisJcnNyX3NpemUJICAgICAgID0JdWRwX3JyX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworCXJzc19zaXplCSAgICAgICA9CXVkcF9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKwlyZW1vdGVfY3B1X3VzYWdlID0JdWRwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKwlyZW1vdGVfY3B1X3JhdGUgID0gCXVkcF9ycl9yZXNwb25zZS0+Y3B1X3JhdGU7CisJLyogcG9ydCBudW1iZXJzIGluIHByb3BlciBvcmRlciAqLworCXNldF9wb3J0X251bWJlcihyZW1vdGVfcmVzLChzaG9ydCl1ZHBfcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgICAgfQorICAgICAgZWxzZSB7CisJU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlmcHJpbnRmKHdoZXJlLAorCQkibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkJbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCXBlcnJvcigiIik7CisJZmZsdXNoKHdoZXJlKTsKKwlleGl0KDEpOworICAgICAgfQorICAgIH0KKworI2lmZGVmIFdBTlRfREVNTworICAgIERFTU9fUlJfU0VUVVAoMTAwKQorI2VuZGlmCisKKyAgICAvKiBDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQuIFRoaXMgd2lsbCBzZXQgKi8KKyAgICAvKiB0aGUgZGVmYXVsdCBkZXN0aW5hdGlvbiBhZGRyZXNzIG9uIHRoaXMgc29ja2V0LiBXaXRoIFVEUCwgdGhpcyAqLworICAgIC8qIGRvZXMgbWFrZSBhIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2UgYXMgd2UgbWF5IG5vdCBoYXZlIHRvIGRvIGFzICovCisgICAgLyogbWFueSByb3V0aW5nIGxvb2t1cHMsIGhvd2V2ZXIsIEkgZXhwZWN0IHRoYXQgYSBjbGllbnQgd291bGQgKi8KKyAgICAvKiBiZWhhdmUgdGhpcyB3YXkuIHJhaiAxLzk0ICovCisgICAgCisgICAgaWYgKCBjb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJIHJlbW90ZV9yZXMtPmFpX2FkZHIsCisJCSByZW1vdGVfcmVzLT5haV9hZGRybGVuKSA9PSBJTlZBTElEX1NPQ0tFVCApIHsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisjaWZkZWYgV0lOMzIKKyAgLyogdGhpcyBpcyB1c2VkIHNvIHRoZSB0aW1lciB0aHJlYWQgY2FuIGNsb3NlIHRoZSBzb2NrZXQgb3V0IGZyb20gKi8KKyAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAvKiByZXR1cm4gV1NBRUlOVFIgd2l0aCB0aGUgdGVzdCBpcyBvdmVyLiBhbnl0aGluZyB0aGF0IHdpbGwgcnVuIG9uICovCisgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0ID0gc2VuZF9zb2NrZXQ7CisjZW5kaWYgLyogV0lOMzIgKi8KKyAgICAKKyAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciB0aGUgKi8KKyAgICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAgIC8qIGluZGljYXRlZCBhIHByb2JsZW0uIEkgZmFpbGVkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlIGV4dHJhICovCisgICAgLyogbWVzc2FnZSBhZnRlciB0aGUgYWNjZXB0IG9uIHRoZSByZW1vdGUuIElmIGl0IGZhaWxlZCwgd2UnbGwgc2VlIGl0ICovCisgICAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgICAKKyAgICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgdGhleSAqLworICAgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKworICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICAgIHRpbWVzX3VwID0gMDsKKyAgICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgICBzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFRoZSB0ZXN0ZXIgd2FudGVkIHRvIHNlbmQgYSBudW1iZXIgb2YgYnl0ZXMuICovCisgICAgICB0cmFuc19yZW1haW5pbmcgPSB0ZXN0X2J5dGVzOworICAgICAgdGltZXNfdXAgPSAxOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgICAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgICAgCisgICAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICBpZiAoZGVtb19tb2RlKSB7CisgICAgICBISVNUX3RpbWVzdGFtcChkZW1vX29uZV9wdHIpOworICAgIH0KKyNlbmRpZiAKKworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgSU5URVJWQUxTX0lOSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgIAorICAgIC8qIFdlIHVzZSBhbiAiT1IiIHRvIGNvbnRyb2wgdGVzdCBleGVjdXRpb24uIFdoZW4gdGhlIHRlc3QgaXMgKi8KKyAgICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiAqLworICAgIC8qIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCwgdGhlIHRpbWUgdGVzdCAqLworICAgIC8qIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgdGhlIHdob2xlICovCisgICAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiBJIHRoaW5rICovCisgICAgLyogSSBqdXN0IGFyYml0cmFyaWx5IGRlY3JlbWVudCB0cmFuc19yZW1haW5pbmcgZm9yIHRoZSB0aW1lZCAqLworICAgIC8qIHRlc3QsIGJ1dCB3aWxsIG5vdCBkbyB0aGF0IGp1c3QgeWV0Li4uIE9uZSBvdGhlciBxdWVzdGlvbiBpcyAqLworICAgIC8qIHdoZXRoZXIgb3Igbm90IHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSAqLworICAgIC8qIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKworI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBmaXJzdF9idXJzdF9zaXplOyBpKyspIHsKKwlpZigobGVuPXNlbmQoc2VuZF9zb2NrZXQsCisJCSAgICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgICAgIHJlcV9zaXplLAorCQkgICAgIDApKSAhPSByZXFfc2l6ZSkgeworCSAgLyogd2Ugc2hvdWxkIG5ldmVyIGhpdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IGluIHRoZSBmaXJzdCBidXJzdCAqLworCSAgcGVycm9yKCJzZW5kX3VkcF9ycjogaW5pdGlhbCBidXJzdCBkYXRhIHNlbmQgZXJyb3IiKTsKKwkgIGV4aXQoLTEpOworCX0KKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogV0FOVF9GSVJTVF9CVVJTVCAqLworCisgICAgd2hpbGUgKCghdGltZXNfdXApIHx8ICh0cmFuc19yZW1haW5pbmcgPiAwKSkgeworICAgICAgLyogc2VuZCB0aGUgcmVxdWVzdCAqLworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworCUhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisgICAgICB9CisjZW5kaWYKKyAgICAgIGlmKChsZW49c2VuZChzZW5kX3NvY2tldCwKKwkJICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgICByZXFfc2l6ZSwKKwkJICAgMCkpICE9IHJlcV9zaXplKSB7CisgICAgICAgIGlmIChTT0NLRVRfRUlOVFIobGVuKSkgeworCSAgICAgIC8qIFdlIGxpa2VseSBoaXQgKi8KKwkgICAgICAvKiB0ZXN0LWVuZCB0aW1lLiAqLworCSAgICAgIGJyZWFrOworCQl9CisJICAgIHBlcnJvcigic2VuZF91ZHBfcnI6IGRhdGEgc2VuZCBlcnJvciIpOworCSAgICBleGl0KDEpOworCSAgfQorICAgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgICAgCisgICAgICAvKiByZWNlaXZlIHRoZSByZXNwb25zZS4gd2l0aCBVRFAgd2Ugd2lsbCBnZXQgaXQgYWxsLCBvciBub3RoaW5nICovCisgICAgICAKKyAgICAgIGlmKChyc3BfYnl0ZXNfcmVjdmQ9cmVjdihzZW5kX3NvY2tldCwKKwkJCSAgICAgICByZWN2X3JpbmctPmJ1ZmZlcl9wdHIsCisJCQkgICAgICAgcnNwX3NpemUsCisJCQkgICAgICAgMCkpICE9IHJzcF9zaXplKSB7CisJICAgIGlmIChTT0NLRVRfRUlOVFIocnNwX2J5dGVzX3JlY3ZkKSkKKwkJeworICAgIAkgIC8qIEFnYWluLCB3ZSBoYXZlIGxpa2VseSBoaXQgdGVzdC1lbmQgdGltZSAqLworCSAgICAgIGJyZWFrOworCQl9CisJICAgIHBlcnJvcigic2VuZF91ZHBfcnI6IGRhdGEgcmVjdiBlcnJvciIpOworCSAgICBleGl0KDEpOworICAgICAgfQorICAgICAgcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisJSElTVF90aW1lc3RhbXAoJnRpbWVfdHdvKTsKKwlISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworICAgICAgfQorCisjZW5kaWYKKworICAgICAgLyogYXQgdGhpcyBwb2ludCwgd2UgbWF5IHdpc2ggdG8gc2xlZXAgZm9yIHNvbWUgcGVyaW9kIG9mICovCisgICAgICAvKiB0aW1lLCBzbyB3ZSBzZWUgaG93IGxvbmcgdGhhdCBsYXN0IHRyYW5zYWN0aW9uIGp1c3QgdG9vaywgKi8KKyAgICAgIC8qIGFuZCBzbGVlcCBmb3IgdGhlIGRpZmZlcmVuY2Ugb2YgdGhhdCBhbmQgdGhlIGludGVydmFsLiBXZSAqLworICAgICAgLyogd2lsbCBub3Qgc2xlZXAgaWYgdGhlIHRpbWUgd291bGQgYmUgbGVzcyB0aGFuIGEgKi8KKyAgICAgIC8qIG1pbGxpc2Vjb25kLiAgKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgICAgREVNT19SUl9JTlRFUlZBTCgxKTsKKyNlbmRpZgorCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMgICAgICAKKyAgICAgIElOVEVSVkFMU19XQUlUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIAorICAgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisJdHJhbnNfcmVtYWluaW5nLS07CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChkZWJ1ZyA+IDMpIHsKKwlpZiAoKG51bW1lc3NhZ2VzICUgMTAwKSA9PSAwKSB7CisJICBmcHJpbnRmKHdoZXJlLCJUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZWRcbiIsbnVtbWVzc2FnZXMpOworCSAgZmZsdXNoKHdoZXJlKTsKKwl9CisgICAgICB9CisgICAgICAKKyAgICB9CisgICAgCisgICAgLyogZm9yIHNvbWUgc3RyYW5nZSByZWFzb24sIEkgdXNlZCB0byBjYWxsIHNodXRkb3duIG9uIHRoZSBVRFAgKi8KKyAgICAvKiBkYXRhIHNvY2tldCBoZXJlLiBJJ20gbm90IHN1cmUgd2h5LCBiZWNhdXNlIGl0IHdvdWxkIG5vdCBoYXZlICovCisgICAgLyogYW55IGVmZmVjdC4uLiByYWogMTEvOTQgKi8KKyAgICAKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgICAgLyogd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgICAKKyAgICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgKi8KKwkJCQkJCS8qIG1lYXN1cmVkPyBob3cgbG9uZyAqLworCQkJCQkJLyogZGlkIHdlIHJlYWxseSBydW4/ICovCisgICAgCisgICAgaWYgKCFub19jb250cm9sKSB7CisgICAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUKKwkgY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nCisJIHRoaW5ncy4gSWYgaXQgd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMKKwkgdmFsdWVzLiAqLworICAgIAorICAgICAgcmVjdl9yZXNwb25zZSgpOworICAgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworCWlmIChkZWJ1ZykKKwkgIGZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJZnByaW50Zih3aGVyZSwKKwkJIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlwZXJyb3IoIiIpOworCWZmbHVzaCh3aGVyZSk7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyIHRocnVwdXQgd2FzIGZvciB0aGUgdGVzdC4gSW4gdGhlICovCisgICAgLyogZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBpbmNsdWRlIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRocnVwdXQgKi8KKyAgICAvKiBtZWFzdXJlZCBieSB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgKi8KKyAgICAvKiBVRFAgcnIgdGVzdCwgdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiAqLworICAgIC8qIFdlIGNhbGN1bGF0ZSBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggKi8KKyAgICAvKiB3YXMgY29udHJvbGxlZC4gICovCisgICAgCisgICAgYnl0ZXNfeGZlcmQJPSAocmVxX3NpemUgKiBudW1tZXNzYWdlcykgKyAocnNwX3NpemUgKiBudW1tZXNzYWdlcyk7CisgICAgdGhydXB1dAk9IG51bW1lc3NhZ2VzIC8gZWxhcHNlZF90aW1lOworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworCisgICAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlICovCisgICAgICAvKiBpbmZvcm1hdGlvbiBtaWdodCBiZSBib2d1cyBiZWNhdXNlIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgKi8KKyAgICAgIC8qIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcyBmb3IgdGhlICovCisgICAgICAvKiB1c2VyJ3MgYmVuZWZpdCBieSBwbGFjaW5nIGEgY29kZSBmb3IgdGhlIG1ldG9kIHVzZWQgaW4gdGhlICovCisgICAgICAvKiB0ZXN0IGJhbm5lciAqLworCisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uID0gY2FsY19jcHVfdXRpbCgwLjApOworCQorCS8qIHNpbmNlIGNhbGNfc2VydmljZSBkZW1hbmQgaXMgZG9pbmcgbXMvS3VuaXQgd2Ugd2lsbCAqLworCS8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKwkvKiAiZ29vZCIgbnVtYmVycyAqLworCQorCWxvY2FsX3NlcnZpY2VfZGVtYW5kICA9IGNhbGNfc2VydmljZV9kZW1hbmQoKGRvdWJsZSkgbnVtbWVzc2FnZXMqMTAyNCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgMC4wLAorCQkJCQkJICAgIDApOworICAgICAgfQorICAgICAgZWxzZSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgfQorICAgICAgCisgICAgICBpZiAocmVtb3RlX2NwdV91c2FnZSkgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSB1ZHBfcnJfcmVzdWx0LT5jcHVfdXRpbDsKKwkKKwkvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKwkvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisJLyogImdvb2QiIG51bWJlcnMgKi8KKwkKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgICAwLjAsCisJCQkJCQkgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgIHVkcF9ycl9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3ZXJlIG5vdCBtZWFzdXJpbmcgY3B1LCBmb3IgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYsIHdlICovCisgICAgICAvKiBzaG91bGQgbWFrZSBpdCAtMS4wICovCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgCisgICAgCisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24rKzsKKyAgICAKKyAgICAvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBzb2NrZXQgKi8KKyAgICBjbG9zZShzZW5kX3NvY2tldCk7CisgIH0KKworICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIG1hZGUgYWxsIHRoZSBpdGVyYXRpb25zIHdlIGFyZSBnb2luZyB0byAqLworICAvKiBtYWtlLiAqLworICByZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKCZlbGFwc2VkX3RpbWUsCisJCQkgICAgJnRocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgIAorICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKyAgCisgIGlmIChjb25maWRlbmNlIDwgMCkgeworICAgIC8qIHdlIGRpZCBub3QgaGl0IGNvbmZpZGVuY2UsIGJ1dCB3ZXJlIHdlIGFza2VkIHRvIGxvb2sgZm9yIGl0PyAqLworICAgIGlmIChpdGVyYXRpb25fbWF4ID4gMSkgeworICAgICAgZGlzcGxheV9jb25maWRlbmNlKCk7CisgICAgfQorICB9CisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZCh1ZHBfcnJfcmVzdWx0LT5jcHVfbWV0aG9kKTsKKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorICAgICAgICAgICAgICAgICgocHJpbnRfaGVhZGVycykgfHwKKyAgICAgICAgICAgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorCQlyZW1vdGVfY3B1X21ldGhvZCwKKyAgICAgICAgICAgICAgICAoKHByaW50X2hlYWRlcnMpIHx8CisgICAgICAgICAgICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKyAgICAgICAgaWYgKCd4JyA9PSBsaWJmbXQpIHsKKyAgICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICAgY3B1X3RpdGxlLAorICAgICAgICAgICAgICAgICAgbG9jYWxfY3B1X21ldGhvZCwKKyAgICAgICAgICAgICAgICAgIHJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICAgY3B1X3RpdGxlX3RwdXQsCisgICAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdHMoKSwKKyAgICAgICAgICAgICAgICAgIGxvY2FsX2NwdV9tZXRob2QsCisgICAgICAgICAgICAgICAgICByZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogZ3Vlc3MgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICAoJ3gnID09IGxpYmZtdCkgPyB0aHJ1cHV0IDogCisJICAgICAgY2FsY190aHJ1cHV0X2ludGVydmFsX29tbmkodGhydXB1dCAqIChyZXFfc2l6ZStyc3Bfc2l6ZSksCisJCQkJCQkJCQkgMS4wKSwKKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQsCS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLAorCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgICgneCcgPT0gbGliZm10KSA/IHRocnVwdXQgOgorCSAgICAgIGNhbGNfdGhydXB1dF9pbnRlcnZhbF9vbW5pKHRocnVwdXQgKiAocmVxX3NpemUrcnNwX3NpemUpLAorCQkJCQkgMS4wKSwKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCSgneCcgPT0gbGliZm10KSA/IHRwdXRfdGl0bGUgOiB0cHV0X3RpdGxlX2JhbmQsCisJCWZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKyAgICAKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzEsCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXNwb25zZXMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICAoJ3gnID09IGxpYmZtdCkgPyAgdGhydXB1dCA6IAorCSAgICAgIGNhbGNfdGhydXB1dF9pbnRlcnZhbF9vbW5pKHRocnVwdXQgKiAocmVxX3NpemUrcnNwX3NpemUpLAorCQkJCQkgMS4wKSwKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzIsCisJICAgICAgcnNzX3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIAorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGZmbHVzaCh3aGVyZSk7CisKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgLyogaG93IHRvIGhhbmRsZSB0aGUgdmVyYm9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YgKi8KKyAgLyogY29uZmlkZW5jZSBpbnRlcnZhbHMgaXMgeWV0IHRvIGJlIGRldGVybWluZWQuLi4gcmFqIDExLzk0ICovCisKKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8ga25vdyBpdCBhbGwsIHNvIHdlIHdpbGwgZ2l2ZSBpdCB0byBoaW0uICovCisgICAgLyogVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluY2x1ZGUgYXMgbXVjaCBhcyB3ZSBjYW4gZmluZCBhYm91dCAqLworICAgIC8qIFVEUCBzdGF0aXN0aWNzLCB0aGUgYWxpZ25tZW50cyBvZiB0aGUgc2VuZHMgYW5kIHJlY2VpdmVzICovCisgICAgLyogYW5kIGFsbCB0aGF0IHNvcnQgb2Ygcm90Li4uICovCisgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICBmcHJpbnRmKHdoZXJlLCJcbkhpc3RvZ3JhbSBvZiByZXF1ZXN0L3JlcG9uc2UgdGltZXMuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIEhJU1RfcmVwb3J0KHRpbWVfaGlzdCk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgfQorfQorDAorIC8qIHRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSByZWNlaXZlIHNpZGUgKG5ldHNlcnZlcikgb2YgYSBVRFBfUlIgKi8KKyAvKiB0ZXN0LiAqLwordm9pZAorcmVjdl91ZHBfcnIoKQoreworICAKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgICAgICAgIG15YWRkcl9pbjsKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgICAgcGVlcmFkZHI7IAorICBTT0NLRVQJc19kYXRhOworICBuZXRwZXJmX3NvY2tsZW5fdCAJYWRkcmxlbjsKKyAgaW50CXRyYW5zX3JlY2VpdmVkOworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBpbnQgICByZXF1ZXN0X2J5dGVzX3JlY3ZkOworICBpbnQgICByZXNwb25zZV9ieXRlc19zZW50OworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBzdHJ1Y3QJdWRwX3JyX3JlcXVlc3Rfc3RydWN0CSp1ZHBfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXVkcF9ycl9yZXNwb25zZV9zdHJ1Y3QJKnVkcF9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXVkcF9ycl9yZXN1bHRzX3N0cnVjdAkqdWRwX3JyX3Jlc3VsdHM7CisgIAorICB1ZHBfcnJfcmVxdWVzdCAgPSAKKyAgICAoc3RydWN0IHVkcF9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdWRwX3JyX3Jlc3BvbnNlID0gCisgICAgKHN0cnVjdCB1ZHBfcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdWRwX3JyX3Jlc3VsdHMgID0gCisgICAgKHN0cnVjdCB1ZHBfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X3VkcF9ycjogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQgKi8KKyAgLyogcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZiAqLworICAvKiBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZSAqLworICAvKiBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9ycjogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBVRFBfUlJfUkVTUE9OU0U7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3VkcF9ycjogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlcyB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnRzIHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0cy4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdWRwX3JyOiByZXF1ZXN0ZWQgcmVjdiBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICB1ZHBfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJICAgIHVkcF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl91ZHBfcnI6IHJlcXVlc3RlZCBzZW5kIGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIHVkcF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkgICAgdWRwX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgdWRwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJCQkgICB1ZHBfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJCQkJICAgdWRwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKworICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIHVkcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgIHVkcF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkJCQkgICB1ZHBfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdWRwX3JyOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogR3JhYiBhIHNvY2tldCB0byBsaXN0ZW4gb24sIGFuZCB0aGVuIGxpc3RlbiBvbiBpdC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdWRwX3JyOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKworICAvKiBjcmVhdGVfZGF0YV9zb2NrZXQgZXhwZWN0cyB0byBmaW5kIHNvbWUgdGhpbmdzIGluIHRoZSBnbG9iYWwgKi8KKyAgLyogdmFyaWFibGVzLCBzbyBzZXQgdGhlIGdsb2JhbHMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgcmVxdWVzdC4gKi8KKyAgLyogb25jZSB0aGUgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQsIHdlIHdpbGwgc2V0IHRoZSByZXNwb25zZSB2YWx1ZXMgKi8KKyAgLyogYmFzZWQgb24gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgdGhvc2UgZ2xvYmFscy4gcmFqIDcvOTQgKi8KKyAgbHNzX3NpemVfcmVxID0gdWRwX3JyX3JlcXVlc3QtPnNlbmRfYnVmX3NpemU7CisgIGxzcl9zaXplX3JlcSA9IHVkcF9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplOworICBsb2NfcmN2YXZvaWQgPSB1ZHBfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQ7CisgIGxvY19zbmRhdm9pZCA9IHVkcF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYodWRwX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCXVkcF9ycl9yZXF1ZXN0LT5wb3J0KTsKKworICBsb2NhbF9yZXMgPSBjb21wbGV0ZV9hZGRyaW5mbyhsb2NhbF9uYW1lLAorCQkJCWxvY2FsX25hbWUsCisJCQkJcG9ydF9idWZmZXIsCisJCQkJbmZfdG9fYWYodWRwX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX0RHUkFNLAorCQkJCUlQUFJPVE9fVURQLAorCQkJCTApOworCQkJCQorICBzX2RhdGEgPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgCisgIGlmIChzX2RhdGEgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBub3cgZ2V0IHRoZSBwb3J0IG51bWJlciBhc3NpZ25lZCBieSB0aGUgc3lzdGVtICAqLworICBhZGRybGVuID0gc2l6ZW9mKG15YWRkcl9pbik7CisgIGlmIChnZXRzb2NrbmFtZShzX2RhdGEsIAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLAorCQkgICZhZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19kYXRhKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHVkcF9ycl9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlciA9IAorICAgIChpbnQpIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopJm15YWRkcl9pbiktPnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdiBwb3J0IG51bWJlciAlZFxuIiwKKwkgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmbXlhZGRyX2luKS0+c2luX3BvcnQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAwLjAgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHVkcF9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgICAgPSAoZmxvYXQpMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICB1ZHBfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMDsKKyAgaWYgKHVkcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHVkcF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHVkcF9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KHVkcF9ycl9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHVkcF9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICB1ZHBfcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgdWRwX3JyX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCAgID0gbG9jX3JjdmF2b2lkOworICB1ZHBfcnJfcmVzcG9uc2UtPnNvX3NuZGF2b2lkICAgPSBsb2Nfc25kYXZvaWQ7CisgCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIAorICAvKiBOb3cgaXQncyB0aW1lIHRvIHN0YXJ0IHJlY2VpdmluZyBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLiBXZSB3aWxsICovCisgIC8qIGZpcnN0IGdyYWIgdGhlIGFwcm9wcmlhdGUgY291bnRlcnMgYW5kIHRoZW4gc3RhcnQgZ3JhYmJpbmcuICovCisgIAorICBjcHVfc3RhcnQodWRwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisjaWZkZWYgV0lOMzIKKyAgLyogdGhpcyBpcyB1c2VkIHNvIHRoZSB0aW1lciB0aHJlYWQgY2FuIGNsb3NlIHRoZSBzb2NrZXQgb3V0IGZyb20gKi8KKyAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAvKiByZXR1cm4gV1NBRUlOVFIgd2l0aCB0aGUgdGVzdCBpcyBvdmVyLiBhbnl0aGluZyB0aGF0IHdpbGwgcnVuIG9uICovCisgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0ID0gc19kYXRhOworI2VuZGlmIC8qIFdJTjMyICovCisgIAorICBpZiAodWRwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHVkcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0gdWRwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICogLTE7CisgIH0KKworICBhZGRybGVuID0gc2l6ZW9mKHBlZXJhZGRyKTsgCisgIGJ6ZXJvKChjaGFyICopJnBlZXJhZGRyLCBhZGRybGVuKTsKKyAgCisgIHRyYW5zX3JlY2VpdmVkID0gMDsKKworICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgCisgICAgLyogcmVjZWl2ZSB0aGUgcmVxdWVzdCBmcm9tIHRoZSBvdGhlciBzaWRlICovCisgICAgaWYgKChyZXF1ZXN0X2J5dGVzX3JlY3ZkID0gcmVjdmZyb20oc19kYXRhLAorCQkgcmVjdl9yaW5nLT5idWZmZXJfcHRyLAorCQkgdWRwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJIDAsCisJCSAoc3RydWN0IHNvY2thZGRyICopJnBlZXJhZGRyLAorCQkgJmFkZHJsZW4pKSAhPSB1ZHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplKSB7CisJICBpZiAoIFNPQ0tFVF9FSU5UUihyZXF1ZXN0X2J5dGVzX3JlY3ZkKSApCisJICB7CisJICAgIC8qIHdlIG11c3QgaGF2ZSBoaXQgdGhlIGVuZCBvZiB0ZXN0IHRpbWUuICovCisJICAgIGJyZWFrOworICAgICAgfQorICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSAqLworICAgIGlmICgocmVzcG9uc2VfYnl0ZXNfc2VudCA9IHNlbmR0byhzX2RhdGEsCisJCQkJICAgICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkJCSAgICAgIHVkcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgICAgIDAsCisJCQkJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkciwKKwkJCQkgICAgICBhZGRybGVuKSkgIT0gCisJdWRwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUpIHsKKyAgICAgIGlmICggU09DS0VUX0VJTlRSKHJlc3BvbnNlX2J5dGVzX3NlbnQpICkKKwkgIHsKKwkgICAgLyogd2UgaGF2ZSBoaXQgZW5kIG9mIHRlc3QgdGltZS4gKi8KKwkgICAgYnJlYWs7CisgICAgICB9CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgIAorICAgIHRyYW5zX3JlY2VpdmVkKys7CisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAicmVjdl91ZHBfcnI6IFRyYW5zYWN0aW9uICVkIGNvbXBsZXRlLlxuIiwKKwkgICAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICAKKyAgfQorICAKKyAgCisgIC8qIFRoZSBsb29wIG5vdyBleGl0cyBkdWUgdG8gdGltZW91dCBvciB0cmFuc2FjdGlvbiBjb3VudCBiZWluZyAqLworICAvKiByZWFjaGVkICovCisgIAorICBjcHVfc3RvcCh1ZHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICBpZiAodGltZXNfdXApIHsKKyAgICAvKiB3ZSBlbmRlZCB0aGUgdGVzdCBieSB0aW1lLCB3aGljaCB3YXMgYXQgbGVhc3QgMiBzZWNvbmRzICovCisgICAgLyogbG9uZ2VyIHRoYW4gd2Ugd2FudGVkIHRvIHJ1bi4gc28sIHdlIHdhbnQgdG8gc3VidHJhY3QgKi8KKyAgICAvKiBQQURfVElNRSBmcm9tIHRoZSBlbGFwc2VkX3RpbWUuICovCisgICAgZWxhcHNlZF90aW1lIC09IFBBRF9USU1FOworICB9CisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl91ZHBfcnI6IGdvdCAlZCB0cmFuc2FjdGlvbnNcbiIsCisJICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICB1ZHBfcnJfcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQgPSAodHJhbnNfcmVjZWl2ZWQgKiAKKwkJCQkgICAgKHVkcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkgICAgIHVkcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplKSk7CisgIHVkcF9ycl9yZXN1bHRzLT50cmFuc19yZWNlaXZlZCA9IHRyYW5zX3JlY2VpdmVkOworICB1ZHBfcnJfcmVzdWx0cy0+ZWxhcHNlZF90aW1lCSA9IGVsYXBzZWRfdGltZTsKKyAgdWRwX3JyX3Jlc3VsdHMtPmNwdV9tZXRob2QgICAgID0gY3B1X21ldGhvZDsKKyAgdWRwX3JyX3Jlc3VsdHMtPm51bV9jcHVzICAgICAgID0gbGliX251bV9sb2NfY3B1czsKKyAgaWYgKHVkcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHVkcF9ycl9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoZWxhcHNlZF90aW1lKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdWRwX3JyOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzZW5kX3Jlc3BvbnNlKCk7CisKKyAgLyogd2UgYXJlIGRvbmUgd2l0aCB0aGUgc29ja2V0IG5vdyAqLworICBjbG9zZShzX2RhdGEpOworCisgICAgICB9CisKKwwKKyAvKiB0aGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgcmVjZWl2ZSAobmV0c2VydmVyKSBzaWRlIG9mIGEgVENQX1JSICovCisgLyogdGVzdCAqLwordm9pZAorcmVjdl90Y3BfcnIoKQoreworICAKKyAgc3RydWN0IHJpbmdfZWx0ICpzZW5kX3Jpbmc7CisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyAgc3RydWN0CXNvY2thZGRyX3N0b3JhZ2UgICAgICAgIG15YWRkcl9pbiwKKyAgcGVlcmFkZHJfaW47CisgIFNPQ0tFVAlzX2xpc3RlbixzX2RhdGE7CisgIG5ldHBlcmZfc29ja2xlbl90IAlhZGRybGVuOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludAlieXRlc19zZW50OworICBpbnQJcmVxdWVzdF9ieXRlc19yZWN2ZDsKKyAgaW50CXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nOworICBpbnQJdGltZWRfb3V0ID0gMDsKKyAgaW50ICAgc29ja19jbG9zZWQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBzdHJ1Y3QJdGNwX3JyX3JlcXVlc3Rfc3RydWN0CSp0Y3BfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9ycl9yZXNwb25zZV9zdHJ1Y3QJKnRjcF9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXRjcF9ycl9yZXN1bHRzX3N0cnVjdAkqdGNwX3JyX3Jlc3VsdHM7CisgIAorICB0Y3BfcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3QgdGNwX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfcnJfcmVzcG9uc2UgPQorICAgIChzdHJ1Y3QgdGNwX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9ycl9yZXN1bHRzID0KKyAgICAoc3RydWN0IHRjcF9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3ZfdGNwX3JyOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwgKi8KKyAgLyogc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGRldGVybWluZWQsICovCisgIC8qIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvIHdyb25nIGZvciBhbnkgKi8KKyAgLyogcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQgKi8KKyAgLyogd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMgKi8KKyAgLyogdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cyB1bmV4cGVjdGVkICovCisgIC8qIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3JyOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IFRDUF9SUl9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3JyOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIGFsbG9jYXRlIHRoZSByZWN2IGFuZCBzZW5kIHJpbmdzIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnRzICovCisgIC8qIGFuZCBvZmZzZXRzLiByYWogNy85NCAqLworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9ycjogcmVxdWVzdGVkIHJlY3YgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgdGNwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICB0Y3BfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3JyOiByZXF1ZXN0ZWQgc2VuZCBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICB0Y3BfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJICAgIHRjcF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGF0IHNvbWUgcG9pbnQsIHRoZXNlIG5lZWQgdG8gY29tZSB0byB1cyBmcm9tIHRoZSByZW1vdGUgc3lzdGVtICovCisgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKworICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIHRjcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgIHRjcF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkJCQkgICB0Y3BfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgdGNwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJCQkgICB0Y3BfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJCQkJICAgdGNwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKworICAKKyAgLyogR3JhYiBhIHNvY2tldCB0byBsaXN0ZW4gb24sIGFuZCB0aGVuIGxpc3RlbiBvbiBpdC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3JyOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSB0Y3BfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemVfcmVxID0gdGNwX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19ub2RlbGF5ID0gdGNwX3JyX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSB0Y3BfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQ7CisgIGxvY19zbmRhdm9pZCA9IHRjcF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYodGNwX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCXRjcF9ycl9yZXF1ZXN0LT5wb3J0KTsKKworICBsb2NhbF9yZXMgPSBjb21wbGV0ZV9hZGRyaW5mbyhsb2NhbF9uYW1lLAorCQkJCWxvY2FsX25hbWUsCisJCQkJcG9ydF9idWZmZXIsCisJCQkJbmZfdG9fYWYodGNwX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NUUkVBTSwKKwkJCQlJUFBST1RPX1RDUCwKKwkJCQkwKTsKKworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisjaWZkZWYgV0lOMzIKKyAgLyogVGhlIHRlc3QgdGltZXIgY2FuIGZpcmUgZHVyaW5nIG9wZXJhdGlvbnMgb24gdGhlIGxpc3RlbmluZyBzb2NrZXQsCisgICAgIHNvIHRvIG1ha2UgdGhlIHN0YXJ0X3RpbWVyIGJlbG93IHdvcmsgd2UgaGF2ZSB0byBtb3ZlCisgICAgIGl0IHRvIGNsb3NlIHNfbGlzdGVuIHdoaWxlIHdlIGFyZSBibG9ja2VkIG9uIGFjY2VwdC4gKi8KKyAgd2luX2tsdWRnZV9zb2NrZXQyID0gc19saXN0ZW47CisjZW5kaWYKKworICAKKyAgLyogTm93LCBsZXQncyBzZXQtdXAgdGhlIHNvY2tldCB0byBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zICovCisgIGlmIChsaXN0ZW4oc19saXN0ZW4sIDUpID09IFNPQ0tFVF9FUlJPUikgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAKKyAgLyogbm93IGdldCB0aGUgcG9ydCBudW1iZXIgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSAgKi8KKyAgYWRkcmxlbiA9IHNpemVvZihteWFkZHJfaW4pOworICBpZiAoZ2V0c29ja25hbWUoc19saXN0ZW4sCisJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfaW4sIAorCQkgICZhZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHRjcF9ycl9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlciA9IAorICAgIChpbnQpIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopJm15YWRkcl9pbiktPnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICB0Y3BfcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gKGZsb2F0KTAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgdGNwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisKKyAgaWYgKHRjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHRjcF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHRjcF9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KHRjcF9ycl9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgCisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHRjcF9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICB0Y3BfcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgdGNwX3JyX3Jlc3BvbnNlLT5ub19kZWxheSA9IGxvY19ub2RlbGF5OworICB0Y3BfcnJfcmVzcG9uc2UtPnNvX3JjdmF2b2lkID0gbG9jX3JjdmF2b2lkOworICB0Y3BfcnJfcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworICB0Y3BfcnJfcmVzcG9uc2UtPnRlc3RfbGVuZ3RoID0gdGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoOworICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorICBhZGRybGVuID0gc2l6ZW9mKHBlZXJhZGRyX2luKTsKKyAgCisgIGlmICgoc19kYXRhID0gYWNjZXB0KHNfbGlzdGVuLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJICAgICAgICZhZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAvKiBMZXQncyBqdXN0IHB1bnQuIFRoZSByZW1vdGUgd2lsbCBiZSBnaXZlbiBzb21lIGluZm9ybWF0aW9uICovCisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisjaWZkZWYgS0xVREdFX1NPQ0tFVF9PUFRJT05TCisgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MgKi8KKyAgLyogYXR0cmlidXRlcyBhY3Jvc3MgYW4gYWNjZXB0KCkgY2FsbC4gSW5jbHVkaW5nIHRoaXMgZ29lcyBhZ2FpbnN0ICovCisgIC8qIG15IGJldHRlciBqdWRnZW1lbnQgOiggcmFqIDExLzk1ICovCisKKyAga2x1ZGdlX3NvY2tldF9vcHRpb25zKHNfZGF0YSk7CisKKyNlbmRpZiAvKiBLTFVER0VfU09DS0VUX09QVElPTlMgKi8KKworI2lmZGVmIFdJTjMyCisgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgIC8qIFdpbmRvd3Mtc3BlY2lmaWMgd2F5IEkgY2FuIGZpbmQgdG8gZm9yY2UgdGhlIHdpbnNvY2sgY2FsbHMgdG8gKi8KKyAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAvKiBhbmQgc3VjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCByYWogMS85NiAqLworICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNfZGF0YTsKKyAgd2luX2tsdWRnZV9zb2NrZXQyID0gSU5WQUxJRF9TT0NLRVQ7CisjZW5kaWYgLyogV0lOMzIgKi8KKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9ycjogYWNjZXB0IGNvbXBsZXRlcyBvbiB0aGUgZGF0YSBjb25uZWN0aW9uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHRjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSk7CisgIAorICAvKiBUaGUgbG9vcCB3aWxsIGV4aXQgd2hlbiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCB0aW1lLCBvciB3aGVuICovCisgIC8qIHdlIGhhdmUgZXhjaGFuZ2VkIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucy4gKi8KKyAgCisgIGlmICh0Y3BfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggPiAwKSB7CisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIodGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICsgUEFEX1RJTUUpOworICB9CisgIGVsc2UgeworICAgIHRpbWVzX3VwID0gMTsKKyAgICB0cmFuc19yZW1haW5pbmcgPSB0Y3BfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKKyAgfQorCisgIHRyYW5zX3JlY2VpdmVkID0gMDsKKyAgCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKyAgICB0ZW1wX21lc3NhZ2VfcHRyID0gcmVjdl9yaW5nLT5idWZmZXJfcHRyOworICAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nCT0gdGNwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZTsKKyAgICB3aGlsZShyZXF1ZXN0X2J5dGVzX3JlbWFpbmluZyA+IDApIHsKKyAgICAgIGlmKChyZXF1ZXN0X2J5dGVzX3JlY3ZkPXJlY3Yoc19kYXRhLAorCQkJCSAgIHRlbXBfbWVzc2FnZV9wdHIsCisJCQkJICAgcmVxdWVzdF9ieXRlc19yZW1haW5pbmcsCisJCQkJICAgMCkpID09IFNPQ0tFVF9FUlJPUikgeworCWlmIChTT0NLRVRfRUlOVFIocmVxdWVzdF9ieXRlc19yZWN2ZCkpCisJeworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKworCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisJc2VuZF9yZXNwb25zZSgpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBlbHNlIGlmKCByZXF1ZXN0X2J5dGVzX3JlY3ZkID09IDAgKSB7CisJaWYgKGRlYnVnKSB7CisJICBmcHJpbnRmKHdoZXJlLCJ6ZXJvIGlzIG15IGhlcm9cbiIpOworCSAgZmZsdXNoKHdoZXJlKTsKKwl9CisJc29ja19jbG9zZWQgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVxdWVzdF9ieXRlc19yZW1haW5pbmcgLT0gcmVxdWVzdF9ieXRlc19yZWN2ZDsKKwl0ZW1wX21lc3NhZ2VfcHRyICArPSByZXF1ZXN0X2J5dGVzX3JlY3ZkOworICAgICAgfQorICAgIH0KKworICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworICAgIGlmICgodGltZWRfb3V0KSB8fCAoc29ja19jbG9zZWQpKSB7CisgICAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBiYXNlZCBvbiB0aW1lIC0gb3IgdGhlIHNvY2tldAorCSBjbG9zZWQgb24gdXMgYWxvbmcgdGhlIHdheS4gIGJhaWwgb3V0IG9mIGhlcmUgbm93Li4uICovCisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJ5bzVcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CQkJCQkJCisgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgLyogTm93LCBzZW5kIHRoZSByZXNwb25zZSB0byB0aGUgcmVtb3RlICovCisgICAgaWYoKGJ5dGVzX3NlbnQ9c2VuZChzX2RhdGEsCisJCQlzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCQl0Y3BfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSwKKwkJCTApKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIGlmIChTT0NLRVRfRUlOVFIoYnl0ZXNfc2VudCkpIHsKKwkvKiB0aGUgdGVzdCB0aW1lciBoYXMgcG9wcGVkICovCisJdGltZWRfb3V0ID0gMTsKKwlmcHJpbnRmKHdoZXJlLCJ5bzZcbiIpOworCWZmbHVzaCh3aGVyZSk7CQkJCQkJCisJYnJlYWs7CisgICAgICB9CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IDk5MjsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKworICAgIHRyYW5zX3JlY2VpdmVkKys7CisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICB9CisgIAorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0byB0aW1lb3V0IG9yIHRyYW5zYWN0aW9uIGNvdW50IGJlaW5nICovCisgIC8qIHJlYWNoZWQgKi8KKyAgCisgIGNwdV9zdG9wKHRjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIHN0b3BfdGltZXIoKTsKKworICBpZiAodGltZWRfb3V0KSB7CisgICAgLyogd2UgZW5kZWQgdGhlIHRlc3QgYnkgdGltZSwgd2hpY2ggd2FzIGF0IGxlYXN0IDIgc2Vjb25kcyAqLworICAgIC8qIGxvbmdlciB0aGFuIHdlIHdhbnRlZCB0byBydW4uIHNvLCB3ZSB3YW50IHRvIHN1YnRyYWN0ICovCisgICAgLyogUEFEX1RJTUUgZnJvbSB0aGUgZWxhcHNlZF90aW1lLiAqLworICAgIGVsYXBzZWRfdGltZSAtPSBQQURfVElNRTsKKyAgfQorCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3BfcnI6IGdvdCAlZCB0cmFuc2FjdGlvbnNcbiIsCisJICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICB0Y3BfcnJfcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQgPSAodHJhbnNfcmVjZWl2ZWQgKiAKKwkJCQkgICAgKHRjcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkgICAgIHRjcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplKSk7CisgIHRjcF9ycl9yZXN1bHRzLT50cmFuc19yZWNlaXZlZCA9IHRyYW5zX3JlY2VpdmVkOworICB0Y3BfcnJfcmVzdWx0cy0+ZWxhcHNlZF90aW1lICAgPSBlbGFwc2VkX3RpbWU7CisgIHRjcF9ycl9yZXN1bHRzLT5jcHVfbWV0aG9kICAgICA9IGNwdV9tZXRob2Q7CisgIHRjcF9ycl9yZXN1bHRzLT5udW1fY3B1cyAgICAgICA9IGxpYl9udW1fbG9jX2NwdXM7CisgIGlmICh0Y3BfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB0Y3BfcnJfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF9ycjogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldHMgKi8KKyAgY2xvc2Uoc19kYXRhKTsKKyAgY2xvc2Uoc19saXN0ZW4pOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisKKwwKK3ZvaWQKK2xvY19jcHVfcmF0ZSgpCit7CisjaWYgZGVmaW5lZChVU0VfTE9PUEVSKQorICBmbG9hdCBkdW1teTsKKyNlbmRpZgorCisgIC8qIGEgcmF0aGVyIHNpbXBsZSBsaXR0bGUgdGVzdCAtIGl0IG1lcmVseSBjYWxpYnJhdGVzIHRoZSBsb2NhbCBjcHUgKi8KKyAgLyogYW5kIHByaW50cyB0aGUgcmVzdWx0cy4gVGhlcmUgYXJlIG5vIGhlYWRlcnMgdG8gYWxsb3cgc29tZW9uZSB0byAqLworICAvKiBmaW5kIGEgcmF0ZSBhbmQgdXNlIGl0IGluIG90aGVyIHRlc3RzIGF1dG9tYWdpY2FsbHkgYnkgc2V0dGluZyBhICovCisgIC8qIHZhcmlhYmxlIGVxdWFsIHRvIHRoZSBvdXRwdXQgb2YgdGhpcyB0ZXN0LiBXZSBpZ25vcmUgYW55IHJhdGVzICovCisgIC8qIHRoYXQgbWF5IGhhdmUgYmVlbiBzcGVjaWZpZWQuIEluIGZhY3QsIHdlIGlnbm9yZSBhbGwgb2YgdGhlICovCisgIC8qIGNvbW1hbmQgbGluZSBhcmdzISAqLworICAKKyAgZnByaW50Zih3aGVyZSwKKwkgICIlZyIsCisJICBjYWxpYnJhdGVfbG9jYWxfY3B1KDAuMCkpOworCisgIGlmICh2ZXJib3NpdHkgPiAxKQorICAgIGZwcmludGYod2hlcmUsCisJICAgICJcblRoZXJlICVzICVkIGxvY2FsICVzXG4iLAorCSAgICAobGliX251bV9sb2NfY3B1cyA+IDEpID8gImFyZSIgOiAiaXMiLAorCSAgICBsaWJfbnVtX2xvY19jcHVzLAorCSAgICAobGliX251bV9sb2NfY3B1cyA+IDEpID8gImNwdXMiIDogImNwdSIpOworCSAgICAKKyAgLyogd2UgbmVlZCB0aGUgY3B1X3N0YXJ0LCBjcHVfc3RvcCBpbiB0aGUgbG9vcGVyIGNhc2UgdG8ga2lsbCB0aGUgKi8KKyAgLyogY2hpbGQgcHJvY2VzZXMgcmFqIDQvOTUgKi8KKworI2lmZGVmIFVTRV9MT09QRVIKKyAgY3B1X3N0YXJ0KDEpOworICBjcHVfc3RvcCgxLCZkdW1teSk7CisjZW5kaWYgLyogVVNFX0xPT1BFUiAqLworCit9CQorCit2b2lkCityZW1fY3B1X3JhdGUoKQoreworICAvKiB0aGlzIHRlc3QgaXMgbXVjaCBsaWtlIHRoZSBsb2NhbCB2YXJpYW50LCBleGNlcHQgdGhhdCBpdCB3b3JrcyBmb3IgKi8KKyAgLyogdGhlIHJlbW90ZSBzeXN0ZW0sIHNvIGluIHRoaXMgY2FzZSwgd2UgZG8gcGF5IGF0dGVudGlvbiB0byB0aGUgKi8KKyAgLyogdmFsdWUgb2YgdGhlICctSCcgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAqLworICAKKyAgZnByaW50Zih3aGVyZSwKKwkgICIlZyIsCisJICBjYWxpYnJhdGVfcmVtb3RlX2NwdSgpKTsKKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKQorICAgIGZwcmludGYod2hlcmUsCisJICAgICJcblRoZXJlICVzICVkIHJlbW90ZSAlc1xuIiwKKwkgICAgKGxpYl9udW1fcmVtX2NwdXMgPiAxKSA/ICJhcmUiIDogImlzIiwKKwkgICAgbGliX251bV9yZW1fY3B1cywKKwkgICAgKGxpYl9udW1fcmVtX2NwdXMgPiAxKSA/ICJjcHVzIiA6ICJjcHUiKTsKKworfQorDAorCisgLyogdGhpcyB0ZXN0IGlzIGludGVuZGVkIHRvIHRlc3QgdGhlIHBlcmZvcm1hbmNlIG9mIGVzdGFibGlzaGluZyBhCisgICAgY29ubmVjdGlvbiwgZXhjaGFuZ2luZyBhIHJlcXVlc3QvcmVzcG9uc2UgcGFpciwgYW5kIHJlcGVhdGluZy4gaXQKKyAgICBpcyBleHBlY3RlZCB0aGF0IHRoaXMgd291bGQgYmUgYSBnb29kIHN0YXJ0aW5nLXBvaW50IGZvcgorICAgIGNvbXBhcmlzaW9uIG9mIFQvVENQIHdpdGggY2xhc3NpYyBUQ1AgZm9yIHRyYW5zYWN0aW9uYWwgd29ya2xvYWRzLgorICAgIGl0IHdpbGwgYWxzbyBsb29rIChjYW4gbG9vaykgbXVjaCBsaWtlIHRoZSBjb21tdW5pY2F0aW9uIHBhdHRlcm4KKyAgICBvZiBodHRwIGZvciB3d3cgYWNjZXNzLiAqLworCit2b2lkCitzZW5kX3RjcF9jb25uX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgXG4iOworICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0IFJlc3AuICBFbGFwc2VkIFRyYW5zLiAgIENQVSAgICBDUFUgICAgUy5kZW0gICBTLmRlbVxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIFJhdGUgICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAgICAgICUlICAgICAgdXMvVHIgICB1cy9UclxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2ZcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAlLTZkICUtNi4yZiAgJS02LjJmICAgJS02LjJmICUtNi4yZiAlLTYuM2YgICUtNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlxuXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0XG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdlxuXAorJTVkICAlNWQgICAlNWQgICU1ZFxuIjsKKyAgCisgIAorICBpbnQJCQl0aW1lZF9vdXQgPSAwOworICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIGludAlsZW47CisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CW51bW1lc3NhZ2VzOworICBTT0NLRVQJc2VuZF9zb2NrZXQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGRvdWJsZQlieXRlc194ZmVyZDsKKyAgaW50CXJzcF9ieXRlc19sZWZ0OworICBpbnQJcnNwX2J5dGVzX3JlY3ZkOworICAKKyAgZmxvYXQJbG9jYWxfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgZmxvYXQJcmVtb3RlX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworICBkb3VibGUJdGhydXB1dDsKKyAgCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXM7CisKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlwb3J0OworICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CisKKyAgc3RydWN0CXRjcF9jb25uX3JyX3JlcXVlc3Rfc3RydWN0CSp0Y3BfY29ubl9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJdGNwX2Nvbm5fcnJfcmVzcG9uc2Vfc3RydWN0CSp0Y3BfY29ubl9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXRjcF9jb25uX3JyX3Jlc3VsdHNfc3RydWN0CSp0Y3BfY29ubl9ycl9yZXN1bHQ7CisgIAorICB0Y3BfY29ubl9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCB0Y3BfY29ubl9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX2Nvbm5fcnJfcmVzcG9uc2UgPSAKKyAgICAoc3RydWN0IHRjcF9jb25uX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9jb25uX3JyX3Jlc3VsdCA9CisgICAgKHN0cnVjdCB0Y3BfY29ubl9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIHRpbWVfaGlzdCA9IEhJU1RfbmV3KCk7CisgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKworICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgcHJpbnRfdG9wX3Rlc3RfaGVhZGVyKCJUQ1AgQ29ubmVjdC9SZXF1ZXN0L1Jlc3BvbnNlIFRFU1QiLGxvY2FsX3JlcyxyZW1vdGVfcmVzKTsKKyAgfQorICAKKyAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycyAqLworICAKKyAgbnVtbWVzc2FnZXMJPQkwOworICBieXRlc194ZmVyZAk9CTAuMDsKKyAgdGltZXNfdXAgCT0gCTA7CisgIAorICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVycyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQgKi8KKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgcmVxX3NpemUsCisJCQkJICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICBsb2NhbF9zZW5kX29mZnNldCk7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICByc3Bfc2l6ZSwKKwkJCQkgICBsb2NhbF9yZWN2X2FsaWduLAorCQkJCSAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfdGNwX2Nvbm5fcnI6IHNlbmRfc29ja2V0IG9idGFpbmVkLi4uXG4iKTsKKyAgfQorICAKKyAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suKi8KKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICB9CisKKyAgaWYgKCFub19jb250cm9sKSB7CisgIAorICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZQorICAgICAgIHNvY2tldCBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlCisgICAgICAgcmVhc29uIGZvciBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmCisgICAgICAgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlCisgICAgICAgcGFzc2VkIGFzIDAsIHdoaWNoIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZSB0aGF0IG5vIGNoYW5nZXMKKyAgICAgICBiZXlvbmQgdGhlIHN5c3RlbSdzIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUKKyAgICAgICBleGNlcHRpb24sIGl0IHdpbGwgZGVmYXVsdCB0byA4LCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudAorICAgICAgIGFsdGVyYXRpb25zLiAqLworICAKKyAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUgPQlET19UQ1BfQ1JSOworICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZV9yZXE7CisgICAgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZQk9CXJzc19zaXplX3JlcTsKKyAgICB0Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudAk9CXJlbW90ZV9yZWN2X2FsaWduOworICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50CT0JcmVtb3RlX3NlbmRfYWxpZ247CisgICAgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQJPQlyZW1vdGVfc2VuZF9vZmZzZXQ7CisgICAgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplCT0JcmVxX3NpemU7CisgICAgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZQk9CXJzcF9zaXplOworICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPm5vX2RlbGF5CT0JcmVtX25vZGVsYXk7CisgICAgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUJPQlyZW1vdGVfY3B1X3VzYWdlOworICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPmNwdV9yYXRlCT0JcmVtb3RlX2NwdV9yYXRlOworICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnNvX3JjdmF2b2lkCT0JcmVtX3JjdmF2b2lkOworICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnNvX3NuZGF2b2lkCT0JcmVtX3NuZGF2b2lkOworICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90aW1lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90cmFucyAqIC0xOworICAgIH0KKyAgICB0Y3BfY29ubl9ycl9yZXF1ZXN0LT5wb3J0ICAgICAgICAgICA9IGF0b2kocmVtb3RlX2RhdGFfcG9ydCk7CisgICAgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+aXBmYW1pbHkgICAgICAgPSBhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworICAgIAorICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfdGNwX2Nvbm5fcnI6IHJlcXVlc3RpbmcgVENQIGNyciB0ZXN0XG4iKTsKKyAgICB9CisgICAgCisgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgCisgICAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudAorICAgICAgIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrCisgICAgICAgaW50byB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuCisgICAgICAgVGhlIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlCisgICAgICAgZG9uZSBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlIGNwdQorICAgICAgIGxvY2FsbHkgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIKKyAgICAgICB2YWx1ZSByaWdodCBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUKKyAgICAgICBjb3VudGVyIHJpZ2h0IGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcyB0aGUgaGFzc2xlIG9mCisgICAgICAgZXh0cmEgbWVzc2FnZXMgYmVpbmcgc2VudCBmb3IgdGhlIFRDUCB0ZXN0cy4gICovCisgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgcnNyX3NpemUJICAgICAgID0JdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisgICAgICByc3Nfc2l6ZQkgICAgICAgPQl0Y3BfY29ubl9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICAgIHJlbV9ub2RlbGF5ICAgICAgPQl0Y3BfY29ubl9ycl9yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgICByZW1vdGVfY3B1X3VzYWdlID0JdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgICAgcmVtb3RlX2NwdV9yYXRlICA9IAl0Y3BfY29ubl9ycl9yZXNwb25zZS0+Y3B1X3JhdGU7CisgICAgICAvKiBtYWtlIHN1cmUgdGhhdCBwb3J0IG51bWJlcnMgYXJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgIHNldF9wb3J0X251bWJlcihyZW1vdGVfcmVzLAorCQkgICAgICAodW5zaWduZWQgc2hvcnQpdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgICAgCisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcG9ydCBpcyAldVxuIixnZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcykpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgcGVycm9yKCIiKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgfQorI2lmZGVmIFdBTlRfREVNTworICBERU1PX1JSX1NFVFVQKDEwMCkKKyNlbmRpZgorCisgIC8qIHBpY2sgYSBuaWNlIHJhbmRvbSBzcG90IGJldHdlZW4gY2xpZW50X3BvcnRfbWluIGFuZCAqLworICAvKiBjbGllbnRfcG9ydF9tYXggZm9yIG91ciBpbml0aWFsIHBvcnQgbnVtYmVyICovCisgIHNyYW5kKGdldHBpZCgpKTsKKyAgaWYgKGNsaWVudF9wb3J0X21heCAtIGNsaWVudF9wb3J0X21pbikgeworICAgIG15cG9ydCA9IGNsaWVudF9wb3J0X21pbiArIAorICAgICAgKHJhbmQoKSAlIChjbGllbnRfcG9ydF9tYXggLSBjbGllbnRfcG9ydF9taW4pKTsKKyAgfQorICBlbHNlIHsKKyAgICBteXBvcnQgPSBjbGllbnRfcG9ydF9taW47CisgIH0KKyAgLyogdGhlcmUgd2lsbCBiZSBhICsrIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBiaW5kLCBzbyBzdWJ0cmFjdCBvbmUgKi8KKyAgbXlwb3J0LS07CisgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCB0aGV5ICovCisgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgCisgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgdGltZXNfdXAgPSAxOworICB9CisgIAorICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKworICAKKyAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIGlmIChkZW1vX21vZGUpIHsKKwlISVNUX3RpbWVzdGFtcChkZW1vX29uZV9wdHIpOworICAgICAgfQorI2VuZGlmCisgIAorICAvKiBXZSB1c2UgYW4gIk9SIiB0byBjb250cm9sIHRlc3QgZXhlY3V0aW9uLiBXaGVuIHRoZSB0ZXN0IGlzICovCisgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAvKiBXaGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCwgdGhlIHRpbWUgdGVzdCB3aWxsICovCisgIC8qIGFsd2F5cyByZXR1cm4gZmFsc2UuIFdoZW4gdGhlIHRlc3QgaXMgZmluaXNoZWQsIHRoZSB3aG9sZSAqLworICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuIEkgdGhpbmsgSSAqLworICAvKiBqdXN0IGFyYml0cmFyaWx5IGRlY3JlbWVudCB0cmFuc19yZW1haW5pbmcgZm9yIHRoZSB0aW1lZCB0ZXN0LCBidXQgKi8KKyAgLyogd2lsbCBub3QgZG8gdGhhdCBqdXN0IHlldC4uLiBPbmUgb3RoZXIgcXVlc3Rpb24gaXMgd2hldGhlciBvciBub3QgKi8KKyAgLyogdGhlIHNlbmQgYnVmZmVyIGFuZCB0aGUgcmVjZWl2ZSBidWZmZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKworICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgICAvKiB0aW1lc3RhbXAganVzdCBiZWZvcmUgb3VyIGNhbGwgdG8gY3JlYXRlIHRoZSBzb2NrZXQsIGFuZCB0aGVuICovCisgICAgICAvKiBhZ2FpbiBqdXN0IGFmdGVyIHRoZSByZWNlaXZlIHJhaiAzLzk1ICovCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCituZXdwb3J0OgorICAgIC8qIHBpY2sgYSBuZXcgcG9ydCBudW1iZXIgKi8KKyAgICBteXBvcnQrKzsKKworICAgIC8qIHdyYXAgdGhlIHBvcnQgbnVtYmVyIHdoZW4gd2UgZ2V0IHRvIGNsaWVudF9wb3J0X21heC4gTk9URSwgc29tZSAqLworICAgIC8qIGJyb2tlbiBUQ1AncyBtaWdodCB0cmVhdCB0aGUgcG9ydCBudW1iZXIgYXMgYSBzaWduZWQgMTYgYml0ICovCisgICAgLyogcXVhbnRpdHkuICB3ZSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiB0ZXN0aW5nIHN1Y2ggYnJva2VuICovCisgICAgLyogaW1wbGVtZW50YXRpb25zIDopIHNvIHdlIHdvbid0IG1ha2Ugc3VyZSB0aGF0IGl0IGlzIGJlbG93IDMyNzY3ICovCisgICAgLyogcmFqIDgvOTQgICovCisgICAgaWYgKG15cG9ydCA+PSBjbGllbnRfcG9ydF9tYXgpIHsKKyAgICAgIG15cG9ydCA9IGNsaWVudF9wb3J0X21pbjsKKyAgICB9CisKKyAgICAvKiB3ZSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIHBvcnQgbnVtYmVyIHRoYXQgdGhlIHNlcnZlciBpcyAqLworICAgIC8qIHNpdHRpbmcgYXQgLSB0aGlzIHdvdWxkIGNhdXNlIHVzIHRvIGZhaWwgaW4gYSBsb29wYmFjayB0ZXN0LiB3ZSAqLworICAgIC8qIGNvdWxkIGp1c3QgcmVseSBvbiB0aGUgZmFpbHVyZSBvZiB0aGUgYmluZCB0byBnZXQgdXMgcGFzdCB0aGlzLCAqLworICAgIC8qIGJ1dCBJJ20gZ3Vlc3NpbmcgdGhhdCBpbiB0aGlzIG9uZSBjYXNlIGF0IGxlYXN0LCBpdCBpcyBtdWNoICovCisgICAgLyogZmFzdGVyLCBnaXZlbiB0aGF0IHdlICprbm93KiB0aGF0IHBvcnQgbnVtYmVyIGlzIGFscmVhZHkgaW4gdXNlICovCisgICAgLyogKG9yIHJhdGhlciB3b3VsZCBiZSBpbiBhIGxvb3BiYWNrIHRlc3QpICovCisKKyAgICBpZiAobXlwb3J0ID09IGdldF9wb3J0X251bWJlcihyZW1vdGVfcmVzKSkgbXlwb3J0Kys7CisKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGlmICgobnVtbWVzc2FnZXMgJSAxMDApID09IDApIHsKKwlwcmludGYoInBvcnQgJWRcbiIsbXlwb3J0KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICovCisgICAgc2V0X3BvcnRfbnVtYmVyKGxvY2FsX3JlcywgKHVuc2lnbmVkIHNob3J0KW15cG9ydCk7CisgICAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgCisgICAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfdGNwX2Nvbm5fcnI6IHRjcCBzdHJlYW0gZGF0YSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisKKyAgICAvKiB3ZSB1c2VkIHRvIGNhbGwgYmluZCBoZXJlLCBidXQgdGhhdCBpcyBub3cgdGFrZW4tY2FyZS1vZiBieSB0aGUKKyAgICAgICBjcmVhdGVfZGF0YV9zb2NrZXQgcm91dGluZS4gKi8KKworICAgIC8qIENvbm5lY3QgdXAgdG8gdGhlIHJlbW90ZSBwb3J0IG9uIHRoZSBkYXRhIHNvY2tldCAgKi8KKyAgICBpZiAoKHJldCA9IGNvbm5lY3Qoc2VuZF9zb2NrZXQsIAorCQkgICAgICAgcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJICAgICAgIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4pKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBpZiAoU09DS0VUX0VJTlRSKHJldCkpCisJICB7CisJICAgIC8qIHdlIGhpdCB0aGUgZW5kIG9mIGEgKi8KKwkgICAgLyogdGltZWQgdGVzdC4gKi8KKwkgICAgdGltZWRfb3V0ID0gMTsKKwkgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoKFNPQ0tFVF9FQUREUklOVVNFKHJldCkpIHx8IFNPQ0tFVF9FQUREUk5PVEFWQUlMKHJldCkpIHsKKwkvKiBsaWtlbHkgc29tZXRoaW5nIG91ciBleHBsaWNpdCBiaW5kKCkgd291bGQgaGF2ZSBjYXVnaHQgaW4KKyAgICAgICAgICAgdGhlIHBhc3QsIHNvIGdvIGdldCBhbm90aGVyIHBvcnQsIHZpYSBjcmVhdGVfZGF0YV9zb2NrZXQuCisgICAgICAgICAgIHllcywgdGhpcyBpcyBhIGJpdCBtb3JlIG92ZXJoZWFkIHRoYW4gYmVmb3JlLCBidXQgdGhlCisgICAgICAgICAgIGNvbmRpdGlvbiBzaG91bGQgYmUgcmF0aGVyIHJhcmUuICByYWogMjAwNS0wMi0wOCAqLworCWNsb3NlKHNlbmRfc29ja2V0KTsKKwlnb3RvIG5ld3BvcnQ7CisgICAgICB9CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICBwcmludGYoIlx0YXR0ZW1wdGVkIHRvIGNvbm5lY3Qgb24gc29ja2V0ICVkIHRvIHBvcnQgJWQiLAorCSAgICAgc2VuZF9zb2NrZXQsCisJICAgICBnZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcykpOworICAgICAgcHJpbnRmKCIgZnJvbSBwb3J0ICVkIFxuIixnZXRfcG9ydF9udW1iZXIobG9jYWxfcmVzKSk7CisgICAgICBleGl0KDEpOworICAgIH0KKworCisgICAgLyogc2VuZCB0aGUgcmVxdWVzdCAqLworICAgIGlmKChsZW49c2VuZChzZW5kX3NvY2tldCwKKwkJIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJIHJlcV9zaXplLAorCQkgMCkpICE9IHJlcV9zaXplKSB7CisgICAgICBpZiAoU09DS0VUX0VJTlRSKGxlbikpCisJICB7CisJICAgIC8qIHdlIGhpdCB0aGUgZW5kIG9mIGEgKi8KKwkgICAgLyogdGltZWQgdGVzdC4gKi8KKwkgICAgdGltZWRfb3V0ID0gMTsKKwkgICAgYnJlYWs7CisgICAgICB9CisgICAgICBwZXJyb3IoInNlbmRfdGNwX2Nvbm5fcnI6IGRhdGEgc2VuZCBlcnJvciIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworCisgICAgLyogcmVjZWl2ZSB0aGUgcmVzcG9uc2UgKi8KKyAgICByc3BfYnl0ZXNfbGVmdCA9IHJzcF9zaXplOworICAgIHRlbXBfbWVzc2FnZV9wdHIgID0gcmVjdl9yaW5nLT5idWZmZXJfcHRyOworCisKKyAgICBkbyB7CisgICAgICByc3BfYnl0ZXNfcmVjdmQgPSByZWN2KHNlbmRfc29ja2V0LAorCQkJICAgICB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJICAgICByc3BfYnl0ZXNfbGVmdCwKKwkJCSAgICAgMCk7CisgICAgICBpZiAocnNwX2J5dGVzX3JlY3ZkID4gMCkgeworCXJzcF9ieXRlc19sZWZ0IC09IHJzcF9ieXRlc19yZWN2ZDsKKwl0ZW1wX21lc3NhZ2VfcHRyICs9IHJzcF9ieXRlc19yZWN2ZDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWJyZWFrOworICAgICAgfQorICAgIH0gd2hpbGUgKHJzcF9ieXRlc19sZWZ0KTsKKworCisgICAgLyogT0ssIHdlIGFyZSBvdXQgb2YgdGhlIGxvb3AgLSBub3cgd2hhdD8gKi8KKyAgICBpZiAocnNwX2J5dGVzX3JlY3ZkIDwgMCkgeworICAgICAgLyogZGlkIHRoZSB0aW1lciBoaXQsIG9yIHdhcyB0aGVyZSBhbiBlcnJvcj8gKi8KKyAgICAgIGlmIChTT0NLRVRfRUlOVFIocnNwX2J5dGVzX3JlY3ZkKSkKKwkgIHsKKwkgICAgLyogV2UgaGl0IHRoZSBlbmQgb2YgYSB0aW1lZCB0ZXN0LiAqLworCSAgICB0aW1lZF9vdXQgPSAxOworCSAgICBicmVhazsKKwkgIH0KKwkgIHBlcnJvcigic2VuZF90Y3BfY29ubl9ycjogZGF0YSByZWN2IGVycm9yIik7CisJICBleGl0KDEpOworICAgIH0KKworICAgIC8qIGlmIHRoaXMgaXMgYSBub19jb250cm9sIHRlc3QsIHdlIGluaXRpYXRlIGNvbm5lY3Rpb24gY2xvc2UsCisgICAgICAgb3RoZXJ3aXNlIHRoZSByZW1vdGUgbmV0c2VydmVyIGRvZXMgaXQgdG8gcmVtYWluIGp1c3QgbGlrZQorICAgICAgIHByZXZpb3VzIGJlaGF2aW91ci4gcmFqIDIwMDctMjctMDggKi8KKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIHNodXRkb3duKHNlbmRfc29ja2V0LFNIVVRfV1IpOworICAgIH0KKworICAgIC8qIHdlIGFyZSBleHBlY3RpbmcgdG8gZ2V0IGVpdGhlciBhIHJldHVybiBvZiB6ZXJvIGluZGljYXRpbmcKKyAgICAgICBjb25uZWN0aW9uIGNsb3NlLCBvciBhbiBlcnJvci4gICovCisgICAgcnNwX2J5dGVzX3JlY3ZkID0gcmVjdihzZW5kX3NvY2tldCwKKwkJCSAgIHRlbXBfbWVzc2FnZV9wdHIsCisJCQkgICAxLAorCQkJICAgMCk7CisKKyAgICAvKiBvdXIgZXhpdCBmcm9tIHRoZSB3aGlsZSBsb29wIHNob3VsZCBnZW5lcmFsbHkgYmUgd2hlbiAqLworICAgIC8qIHRtcF9ieXRlc19yZWN2ZCBpcyBlcXVhbCB0byB6ZXJvLCB3aGljaCBpbXBsaWVzIHRoZSBjb25uZWN0aW9uICovCisgICAgLyogaGFzIGJlZW4gY2xvc2VkIGJ5IHRoZSBzZXJ2ZXIgc2lkZS4gQnkgd2FpdGluZyB1bnRpbCB3ZSBnZXQgdGhlICovCisgICAgLyogemVybyByZXR1cm4gd2UgY2FuIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB0aGF0IHN0aWNrIHVzIHdpdGggdGhlICovCisgICAgLyogVElNRV9XQUlUIGNvbm5lY3Rpb24gYW5kIG5vdCB0aGUgc2VydmVyLiByYWogOC85NiAqLworCisjaWZkZWYgVk1XQVJFX1VXCisgICAgLyogd2h5IHRoaXMgc2hvdWxkIGJlIGZvciBWTXdhcmUgSSdtIG5vdCBzdXJlLCBidXQgaXQgd2FzIGdpdmVuIGFzCisgICAgICAgcGFydCBvZiB0aGUgcGF0Y2hlcywgc28gd2UgaW5jbHVkZSBpdCBoZXJlLCBidXQgcHV0IGl0IHVuZGVyIGFuCisgICAgICAgaWZkZWYgVk1XQVJFX1VXLiByYWogMjAwOC0wNy0yNSAqLworICAgIGlmIChzcF9ieXRlc19yZWN2ZCA8IDAgJiYgZXJybm8gPT0gRUNPTk5SRVNFVCkgeworICAgICAgcnNwX2J5dGVzX3JlY3ZkID0gMDsKKyAgICB9IAorI2VuZGlmIC8qIFZNV0FSRV9VVyAqLworCisgICAgaWYgKHJzcF9ieXRlc19yZWN2ZCA9PSAwKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlLCBjYWxsIGNsb3NlLiB3ZSBhc3N1bWUgdGhhdCB0aGUgcmVxdWlzaXRlICovCisgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkICovCisgICAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwlISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworCUhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgICAgREVNT19SUl9JTlRFUlZBTCgxKQorI2VuZGlmCisKKyAgICAgIG51bW1lc3NhZ2VzKys7ICAgICAgICAgIAorICAgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworCXRyYW5zX3JlbWFpbmluZy0tOworICAgICAgfQorICAgIAorICAgICAgaWYgKGRlYnVnID4gMykgeworCWZwcmludGYod2hlcmUsCisJCSJUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZWQgb24gbG9jYWwgcG9ydCAlZFxuIiwKKwkJbnVtbWVzc2FnZXMsCisJCWdldF9wb3J0X251bWJlcihsb2NhbF9yZXMpKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorCisgICAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBpdCB3YXMgbGVzcyB0aGFuIHplcm8gLSBhbiBlcnJvciBvY2N1cmVkICovCisgICAgICBpZiAoU09DS0VUX0VJTlRSKHJzcF9ieXRlc19yZWN2ZCkpCisJICB7CisJICAgIC8qIFdlIGhpdCB0aGUgZW5kIG9mIGEgdGltZWQgdGVzdC4gKi8KKwkgICAgdGltZWRfb3V0ID0gMTsKKwkgICAgYnJlYWs7CisJICB9CisJICBwZXJyb3IoInNlbmRfdGNwX2Nvbm5fcnI6IGRhdGEgcmVjdiBlcnJvciIpOworCSAgZXhpdCgxKTsKKyAgICB9CisgICAgICAKKyAgfQorCisgIAorICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgIC8qIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1IHV0aWxpemF0aW9uICovCisKKyAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nIG1lYXN1cmVkPyAqLworICAvKiBob3cgbG9uZyBkaWQgd2UgcmVhbGx5IHJ1bj8gKi8KKyAgCisgIGlmICghbm9fY29udHJvbCkgeworICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZQorICAgICAgIGNhbGN1bGF0ZWQgc2VydmljZSBkZW1hbmQgYW5kIGFsbCB0aG9zZSBpbnRlcmVzdGluZyB0aGluZ3MuIElmCisgICAgICAgaXQgd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLworICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKworICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyIHRocnVwdXQgd2FzIGZvciB0aGUgdGVzdC4gSW4gdGhlIGZ1dHVyZSwgKi8KKyAgLyogd2UgbWF5IHdhbnQgdG8gaW5jbHVkZSBhIGNhbGN1bGF0aW9uIG9mIHRoZSB0aHJ1cHV0IG1lYXN1cmVkIGJ5ICovCisgIC8qIHRoZSByZW1vdGUsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCBmb3IgYSBUQ1Agc3RyZWFtIHRlc3QsICovCisgIC8qIHRoYXQgdGhlIHR3byBudW1iZXJzIHNob3VsZCBiZSAqdmVyeSogY2xvc2UuLi4gV2UgY2FsY3VsYXRlICovCisgIC8qIGJ5dGVzX3NlbnQgcmVnYXJkbGVzcyBvZiB0aGUgd2F5IHRoZSB0ZXN0IGxlbmd0aCB3YXMgY29udHJvbGxlZC4gKi8KKyAgLyogSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5ICovCisgIC8qIGhhdmUgc3BlY2lmaWVkIGEgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Fzbid0IGEgbXVsdGlwbGUgb2YgdGhlICovCisgIC8qIHNlbmRfc2l6ZSwgc28gd2UgcmVhbGx5IGRpZG4ndCBzZW5kIHdoYXQgaGUgYXNrZWQgZm9yIDstKSBXZSB1c2UgKi8KKyAgLyogS2J5dGVzL3MgYXMgdGhlIHVuaXRzIG9mIHRocnVwdXQgZm9yIGEgVENQIHN0cmVhbSB0ZXN0LCB3aGVyZSBLID0gKi8KKyAgLyogMTAyNC4gQSBmdXR1cmUgZW5oYW5jZW1lbnQgKm1pZ2h0KiBiZSB0byBjaG9vc2UgZnJvbSBhIGNvdXBsZSBvZiAqLworICAvKiB1bml0IHNlbGVjdGlvbnMuICovIAorICAKKyAgYnl0ZXNfeGZlcmQJPSAocmVxX3NpemUgKiBudW1tZXNzYWdlcykgKyAocnNwX3NpemUgKiBudW1tZXNzYWdlcyk7CisgIHRocnVwdXQJPSBjYWxjX3RocnVwdXQoYnl0ZXNfeGZlcmQpOworICAKKyAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgIC8qIHV0aWxpemF0aW9uIGZvciB0aGUgc3lzdGVtKHMpICovCisgICAgLyogT2YgY291cnNlLCBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBtaWdodCBiZSBib2d1cyBiZWNhdXNlICovCisgICAgLyogdGhlcmUgd2FzIG5vIGlkbGUgY291bnRlciBpbiB0aGUga2VybmVsKHMpLiBXZSBuZWVkIHRvIG1ha2UgKi8KKyAgICAvKiBhIG5vdGUgb2YgdGhpcyBmb3IgdGhlIHVzZXIncyBiZW5lZml0Li4uKi8KKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICBpZiAobG9jYWxfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwKKwkJIldBUk5JTkcgV0FSTklORyBXQVJOSU5HICBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyFcbiIpOworCWZwcmludGYod2hlcmUsCisJCSJMb2NhbCBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uID0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgfQorICAgIAorICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICBpZiAocmVtb3RlX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsCisJCSJEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiAgREFOR0VSICBEQU5HRVIgICAgREFOR0VSIVxuIik7CisJZnByaW50Zih3aGVyZSwKKwkJIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHRjcF9jb25uX3JyX3Jlc3VsdC0+Y3B1X3V0aWw7CisgICAgICAvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKyAgICAgIC8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKyAgICAgIC8qICJnb29kIiBudW1iZXJzICovCisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgdGNwX2Nvbm5fcnJfcmVzdWx0LT5udW1fY3B1cyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgfQorICAgIAorICAgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgICAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgICAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgICAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorCisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCWNwdV90aXRsZSwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGd1ZXNzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lLAorCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLAorCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgICAgfQorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8xLAkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAorCSAgICAgIGxzcl9zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVzcG9uc2VzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzIsCisJICAgICAgcnNzX3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIAorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvKiBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBzb21lIG9mIHRoZSAqLworICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAvKiBtb21lbnQsIEkgZG8gbm90IHdpc2ggdG8gZmlndXJlLW91dCBhbGwgdGhlICBmb3JtYXR0aW5nLCBzbyBJIHdpbGwgKi8KKyAgLyoganVzdCBwdXQgdGhpcyBjb21tZW50IGhlcmUgdG8gaGVscCByZW1pbmQgbWUgdGhhdCBpdCBpcyBzb21ldGhpbmcgKi8KKyAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisgIAorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgICAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCwKKwkgICAgbG9jYWxfc2VuZF9vZmZzZXQsCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCk7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuSGlzdG9ncmFtIG9mIHJlcXVlc3QvcmVzcG9uc2UgdGltZXNcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIH0KKyAgCit9CisKKwwKK3ZvaWQKK3JlY3ZfdGNwX2Nvbm5fcnIoKQoreworICAKKyAgY2hhciAgKm1lc3NhZ2U7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyAgc3RydWN0CXNvY2thZGRyX3N0b3JhZ2UgICAgICAgIG15YWRkcl9pbiwgcGVlcmFkZHJfaW47CisgIFNPQ0tFVAlzX2xpc3RlbixzX2RhdGE7CisgIG5ldHBlcmZfc29ja2xlbl90IAlhZGRybGVuOworICBjaGFyCSpyZWN2X21lc3NhZ2VfcHRyOworICBjaGFyCSpzZW5kX21lc3NhZ2VfcHRyOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludAlieXRlc19zZW50OworICBpbnQJcmVxdWVzdF9ieXRlc19yZWN2ZDsKKyAgaW50CXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nOworICBpbnQJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworICAKKyAgc3RydWN0CXRjcF9jb25uX3JyX3JlcXVlc3Rfc3RydWN0CSp0Y3BfY29ubl9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJdGNwX2Nvbm5fcnJfcmVzcG9uc2Vfc3RydWN0CSp0Y3BfY29ubl9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXRjcF9jb25uX3JyX3Jlc3VsdHNfc3RydWN0CSp0Y3BfY29ubl9ycl9yZXN1bHRzOworICAKKyAgdGNwX2Nvbm5fcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3QgdGNwX2Nvbm5fcnJfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9jb25uX3JyX3Jlc3BvbnNlID0gCisgICAgKHN0cnVjdCB0Y3BfY29ubl9ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfY29ubl9ycl9yZXN1bHRzID0gCisgICAgKHN0cnVjdCB0Y3BfY29ubl9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3ZfdGNwX2Nvbm5fcnI6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfY29ubl9ycjogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBUQ1BfQ1JSX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfY29ubl9ycjogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlciB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQgKi8KKyAgbWVzc2FnZSA9IChjaGFyICopbWFsbG9jKERBVEFCVUZGRVJMRU4pOworICBpZiAobWVzc2FnZSA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIERBVEFCVUZGRVJMRU4pOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGVzIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudHMgd2l0aCB0aGUgZGVzaXJlZCBvZmZzZXRzLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdGNwX2Nvbm5fcnI6IHJlcXVlc3RlZCByZWN2IGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICB0Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdGNwX2Nvbm5fcnI6IHJlcXVlc3RlZCBzZW5kIGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCSAgICB0Y3BfY29ubl9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIHJlY3ZfbWVzc2FnZV9wdHIgPSBBTElHTl9CVUZGRVIobWVzc2FnZSwgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsIHRjcF9jb25uX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgCisgIHNlbmRfbWVzc2FnZV9wdHIgPSBBTElHTl9CVUZGRVIobWVzc2FnZSwgdGNwX2Nvbm5fcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsIHRjcF9jb25uX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX2Nvbm5fcnI6IHJlY2VpdmUgYWxpZ25tZW50IGFuZCBvZmZzZXQgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfY29ubl9ycjogZ3JhYmJpbmcgYSBzb2NrZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBjcmVhdGVfZGF0YV9zb2NrZXQgZXhwZWN0cyB0byBmaW5kIHNvbWUgdGhpbmdzIGluIHRoZSBnbG9iYWwgKi8KKyAgLyogdmFyaWFibGVzLCBzbyBzZXQgdGhlIGdsb2JhbHMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgcmVxdWVzdC4gKi8KKyAgLyogb25jZSB0aGUgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQsIHdlIHdpbGwgc2V0IHRoZSByZXNwb25zZSB2YWx1ZXMgKi8KKyAgLyogYmFzZWQgb24gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgdGhvc2UgZ2xvYmFscy4gcmFqIDcvOTQgKi8KKyAgbHNzX3NpemVfcmVxID0gdGNwX2Nvbm5fcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemVfcmVxID0gdGNwX2Nvbm5fcnJfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZTsKKyAgbG9jX25vZGVsYXkgPSB0Y3BfY29ubl9ycl9yZXF1ZXN0LT5ub19kZWxheTsKKyAgbG9jX3JjdmF2b2lkID0gdGNwX2Nvbm5fcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQ7CisgIGxvY19zbmRhdm9pZCA9IHRjcF9jb25uX3JyX3JlcXVlc3QtPnNvX3NuZGF2b2lkOworICAKKyAgc2V0X2hvc3RuYW1lX2FuZF9wb3J0KGxvY2FsX25hbWUsCisJCQlwb3J0X2J1ZmZlciwKKwkJCW5mX3RvX2FmKHRjcF9jb25uX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCXRjcF9jb25uX3JyX3JlcXVlc3QtPnBvcnQpOworCisgIGxvY2FsX3JlcyA9IGNvbXBsZXRlX2FkZHJpbmZvKGxvY2FsX25hbWUsCisJCQkJbG9jYWxfbmFtZSwKKwkJCQlwb3J0X2J1ZmZlciwKKwkJCQluZl90b19hZih0Y3BfY29ubl9ycl9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQkJU09DS19TVFJFQU0sCisJCQkJSVBQUk9UT19UQ1AsCisJCQkJMCk7CisKKyAgc19saXN0ZW4gPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgCisgIGlmIChzX2xpc3RlbiA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiY291bGQgbm90IGNyZWF0ZSBkYXRhIHNvY2tldFxuIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICBleGl0KDEpOworICB9CisKKyNpZmRlZiBXSU4zMgorICAgIC8qIFRoZSB0ZXN0IHRpbWVyIGNhbiBmaXJlIGR1cmluZyBvcGVyYXRpb25zIG9uIHRoZSBsaXN0ZW5pbmcgc29ja2V0LAorICAgICAgIHNvIHRvIG1ha2UgdGhlIHN0YXJ0X3RpbWVyIGJlbG93IHdvcmsgd2UgaGF2ZSB0byBtb3ZlCisgICAgICAgaXQgdG8gY2xvc2Ugc19saXN0ZW4gd2hpbGUgd2UgYXJlIGJsb2NrZWQgb24gYWNjZXB0LiAqLworICAgIHdpbl9rbHVkZ2Vfc29ja2V0MiA9IHNfbGlzdGVuOworI2VuZGlmCisKKworICAvKiBOb3csIGxldCdzIHNldC11cCB0aGUgc29ja2V0IHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgKi8KKyAgaWYgKGxpc3RlbihzX2xpc3RlbiwgNSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiY291bGQgbm90IGxpc3RlblxuIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBub3cgZ2V0IHRoZSBwb3J0IG51bWJlciBhc3NpZ25lZCBieSB0aGUgc3lzdGVtICAqLworICBhZGRybGVuID0gc2l6ZW9mKG15YWRkcl9pbik7CisgIGlmIChnZXRzb2NrbmFtZShzX2xpc3RlbiwKKwkJICAoc3RydWN0IHNvY2thZGRyICopJm15YWRkcl9pbiwKKwkJICAmYWRkcmxlbikgPT0gU09DS0VUX0VSUk9SKXsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgZ2V0c29ja25hbWVcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHRjcF9jb25uX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyID0gCisgICAgKGludCkgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmbXlhZGRyX2luKS0+c2luX3BvcnQpOworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJ0ZWxsaW5nIHRoZSByZW1vdGUgdG8gY2FsbCBtZSBhdCAlZFxuIiwKKwkgICAgdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICB0Y3BfY29ubl9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSAoZmxvYXQpMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBpZiAodGNwX2Nvbm5fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB0Y3BfY29ubl9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHRjcF9jb25uX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdSh0Y3BfY29ubl9ycl9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgCisKKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHRjcF9jb25uX3JyX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHRjcF9jb25uX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSBzZW5kZXIgZG9lcyBhIHNodXRkb3duLCB3aGljaCB3aWxsICovCisgIC8qIHJldHVybiBhIGxlbmd0aCBvZiB6ZXJvICAgKi8KKyAgCisgIGlmICh0Y3BfY29ubl9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCA+IDApIHsKKyAgICB0aW1lc191cCA9IDA7CisgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICBzdGFydF90aW1lcih0Y3BfY29ubl9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0gdGNwX2Nvbm5fcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKKyAgfQorICAKKyAgdHJhbnNfcmVjZWl2ZWQgPSAwOworCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKworICAgIC8qIGFjY2VwdCBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgcmVtb3RlICovCisjaWZkZWYgV0lOMzIKKyAgICAvKiBUaGUgdGVzdCB0aW1lciB3aWxsIHByb2JhYmx5IGZpcmUgZHVyaW5nIHRoaXMgYWNjZXB0LCAKKyAgICAgICBzbyB0byBtYWtlIHRoZSBzdGFydF90aW1lciBhYm92ZSB3b3JrIHdlIGhhdmUgdG8gbW92ZQorICAgICAgIGl0IHRvIGNsb3NlIHNfbGlzdGVuIHdoaWxlIHdlIGFyZSBibG9ja2VkIG9uIGFjY2VwdC4gKi8KKyAgICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNfbGlzdGVuOworI2VuZGlmCisgICAgaWYgKChzX2RhdGE9YWNjZXB0KHNfbGlzdGVuLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJICAgICAgICZhZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHRoZSB0aW1lciBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfY29ubl9ycjogYWNjZXB0OiBlcnJubyA9ICVkXG4iLGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9jb25uX3JyOiBhY2NlcHRlZCBkYXRhIGNvbm5lY3Rpb24uXG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAKKyNpZmRlZiBXSU4zMgorICAvKiB0aGlzIGlzIHVzZWQgc28gdGhlIHRpbWVyIHRocmVhZCBjYW4gY2xvc2UgdGhlIHNvY2tldCBvdXQgZnJvbSAqLworICAvKiB1bmRlciB1cywgd2hpY2ggdG8gZGF0ZSBpcyB0aGUgZWFzaWVzdC9jbGVhbmVzdC9sZWFzdCAqLworICAvKiBXaW5kb3dzLXNwZWNpZmljIHdheSBJIGNhbiBmaW5kIHRvIGZvcmNlIHRoZSB3aW5zb2NrIGNhbGxzIHRvICovCisgIC8qIHJldHVybiBXU0FFSU5UUiB3aXRoIHRoZSB0ZXN0IGlzIG92ZXIuIGFueXRoaW5nIHRoYXQgd2lsbCBydW4gb24gKi8KKyAgLyogOTUgYW5kIE5UIGFuZCBpcyBjbG9zZXIgdG8gd2hhdCBuZXRwZXJmIGV4cGVjdHMgZnJvbSBVbml4IHNpZ25hbHMgKi8KKyAgLyogYW5kIHN1Y2ggd291bGQgYmUgYXBwcmVjaWF0ZWQgcmFqIDEvOTYgKi8KKyAgd2luX2tsdWRnZV9zb2NrZXQgPSBzX2RhdGE7CisjZW5kaWYgLyogV0lOMzIgKi8KKworI2lmZGVmIEtMVURHRV9TT0NLRVRfT1BUSU9OUworICAgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MgKi8KKyAgICAvKiBhdHRyaWJ1dGVzIGFjcm9zcyBhbiBhY2NlcHQoKSBjYWxsLiBJbmNsdWRpbmcgdGhpcyBnb2VzIGFnYWluc3QgKi8KKyAgICAvKiBteSBiZXR0ZXIganVkZ2VtZW50IDooIHJhaiAxMS85NSAqLworICAgIAorICAgIGtsdWRnZV9zb2NrZXRfb3B0aW9ucyhzX2RhdGEpOworCisjZW5kaWYgLyogS0xVREdFX1NPQ0tFVF9PUFRJT05TICovCisgIAorICAgIHRlbXBfbWVzc2FnZV9wdHIJPSByZWN2X21lc3NhZ2VfcHRyOworICAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nCT0gdGNwX2Nvbm5fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplOworICAgIAorICAgIC8qIHJlY2VpdmUgdGhlIHJlcXVlc3QgZnJvbSB0aGUgb3RoZXIgc2lkZSAqLworICAgIHdoaWxlICghdGltZXNfdXAgJiYgKHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAgIGlmKChyZXF1ZXN0X2J5dGVzX3JlY3ZkPXJlY3Yoc19kYXRhLAorCQkJCSAgIHRlbXBfbWVzc2FnZV9wdHIsCisJCQkJICAgcmVxdWVzdF9ieXRlc19yZW1haW5pbmcsCisJCQkJICAgMCkpID09IFNPQ0tFVF9FUlJPUikgeworCWlmIChTT0NLRVRfRUlOVFIocmVxdWVzdF9ieXRlc19yZWN2ZCkpCisJeworCSAgLyogdGhlIHRpbWVyIHBvcHBlZCAqLworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKwluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworCXNlbmRfcmVzcG9uc2UoKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVxdWVzdF9ieXRlc19yZW1haW5pbmcgLT0gcmVxdWVzdF9ieXRlc19yZWN2ZDsKKwl0ZW1wX21lc3NhZ2VfcHRyICArPSByZXF1ZXN0X2J5dGVzX3JlY3ZkOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBiYXNlZCBvbiB0aW1lIC0gbGV0cyAqLworICAgICAgLyogYmFpbCBvdXQgb2YgaGVyZSBub3cuLi4gKi8KKyAgICAgIGZwcmludGYod2hlcmUsInlvNVxuIik7CisgICAgICBmZmx1c2god2hlcmUpOwkJCQkJCQorICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSAqLworICAgIGlmKChieXRlc19zZW50PXNlbmQoc19kYXRhLAorCQkJc2VuZF9tZXNzYWdlX3B0ciwKKwkJCXRjcF9jb25uX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUsCisJCQkwKSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiB0aGUgdGVzdCB0aW1lciBoYXMgcG9wcGVkICovCisJdGltZWRfb3V0ID0gMTsKKwlmcHJpbnRmKHdoZXJlLCJ5bzZcbiIpOworCWZmbHVzaCh3aGVyZSk7CQkJCQkJCisJYnJlYWs7CisgICAgICB9CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IDk5OworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgdHJhbnNfcmVjZWl2ZWQrKzsKKyAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisgICAgICB0cmFuc19yZW1haW5pbmctLTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJyZWN2X3RjcF9jb25uX3JyOiBUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZVxuIiwKKwkgICAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKworICAgIC8qIGNsb3NlIHRoZSBjb25uZWN0aW9uLiB0aGUgc2VydmVyIHdpbGwgbGlrZWx5IGRvIGEgZ3JhY2VmdWwgKi8KKyAgICAvKiBjbG9zZSBvZiB0aGUgY29ubmVjdGlvbiwgaW5zdXJpbmcgdGhhdCBhbGwgZGF0YSBoYXMgYXJyaXZlZCBhdCAqLworICAgIC8qIHRoZSBjbGllbnQuIGZvciB0aGlzIGl0IHdpbGwgY2FsbCBzaHV0ZG93bigpLCBhbmQgdGhlbiByZWN2KCkgYW5kICovCisgICAgLyogdGhlbiBjbG9zZSgpLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhhdCB0aGlzIGlzIHRoZSAqLworICAgIC8qIGFwcHJvcHJpYXRlIHNlcXVlbmNlIG9mIGNhbGxzIC0gSSB3b3VsZCBsaWtlIHRvIGhlYXIgb2YgKi8KKyAgICAvKiBleGFtcGxlcyBpbiB3ZWIgc2VydmVycyB0byB0aGUgY29udHJhcnkuIHJhaiAxMC85NSovCisjaWZkZWYgVENQX0NSUl9TSFVURE9XTgorICAgIHNodXRkb3duKHNfZGF0YSxTSFVUX1dSKTsKKyAgICByZWN2KHNfZGF0YSwKKwkgcmVjdl9tZXNzYWdlX3B0ciwKKwkgMSwKKwkgMCk7CisgICAgY2xvc2Uoc19kYXRhKTsKKyNlbHNlCisgICAgY2xvc2Uoc19kYXRhKTsKKyNlbmRpZiAvKiBUQ1BfQ1JSX1NIVVRET1dOICovCisKKyAgfQorICAKKyAgCisgIC8qIFRoZSBsb29wIG5vdyBleGl0cyBkdWUgdG8gdGltZW91dCBvciB0cmFuc2FjdGlvbiBjb3VudCBiZWluZyAqLworICAvKiByZWFjaGVkICovCisgIAorICBjcHVfc3RvcCh0Y3BfY29ubl9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lZF9vdXQpIHsKKyAgICAvKiB3ZSBlbmRlZCB0aGUgdGVzdCBieSB0aW1lLCB3aGljaCB3YXMgYXQgbGVhc3QgMiBzZWNvbmRzICovCisgICAgLyogbG9uZ2VyIHRoYW4gd2Ugd2FudGVkIHRvIHJ1bi4gc28sIHdlIHdhbnQgdG8gc3VidHJhY3QgKi8KKyAgICAvKiBQQURfVElNRSBmcm9tIHRoZSBlbGFwc2VkX3RpbWUuICovCisgICAgZWxhcHNlZF90aW1lIC09IFBBRF9USU1FOworICB9CisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3BfY29ubl9ycjogZ290ICVkIHRyYW5zYWN0aW9uc1xuIiwKKwkgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHRjcF9jb25uX3JyX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkCT0gKHRyYW5zX3JlY2VpdmVkICogCisJCQkJCSAgICh0Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkJICAgIHRjcF9jb25uX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUpKTsKKyAgdGNwX2Nvbm5fcnJfcmVzdWx0cy0+dHJhbnNfcmVjZWl2ZWQJPSB0cmFuc19yZWNlaXZlZDsKKyAgdGNwX2Nvbm5fcnJfcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICBpZiAodGNwX2Nvbm5fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB0Y3BfY29ubl9ycl9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoZWxhcHNlZF90aW1lKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdGNwX2Nvbm5fcnI6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisMCisKKyNpZmRlZiBET18xNjQ0CisKKyAvKiB0aGlzIHRlc3QgaXMgaW50ZW5kZWQgdG8gdGVzdCB0aGUgcGVyZm9ybWFuY2Ugb2YgZXN0YWJsaXNoaW5nIGEgKi8KKyAvKiBjb25uZWN0aW9uLCBleGNoYW5naW5nIGEgcmVxdWVzdC9yZXNwb25zZSBwYWlyLCBhbmQgcmVwZWF0aW5nLiBpdCAqLworIC8qIGlzIGV4cGVjdGVkIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmctcG9pbnQgZm9yICovCisgLyogY29tcGFyaXNpb24gb2YgVC9UQ1Agd2l0aCBjbGFzc2ljIFRDUCBmb3IgdHJhbnNhY3Rpb25hbCB3b3JrbG9hZHMuICovCisgLyogaXQgd2lsbCBhbHNvIGxvb2sgKGNhbiBsb29rKSBtdWNoIGxpa2UgdGhlIGNvbW11bmljYXRpb24gcGF0dGVybiAqLworIC8qIG9mIGh0dHAgZm9yIHd3dyBhY2Nlc3MuICovCisKK2ludCAKK3NlbmRfdGNwX3RyYW5fcnIoY2hhciByZW1vdGVfaG9zdFtdKQoreworICAKKyAgY2hhciAqdHB1dF90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgIFJlc3AuICAgRWxhcHNlZCAgVHJhbnMuXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgIFNpemUgICAgVGltZSAgICAgUmF0ZSAgICAgICAgIFxuXAorYnl0ZXMgIEJ5dGVzICBieXRlcyAgICBieXRlcyAgIHNlY3MuICAgIHBlciBzZWMgICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZlxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAgJS02ZCAgJS02LjJmICAgJTcuMmYgICBcbiI7CisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHJhbnMuICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgUmF0ZSAgICAgbG9jYWwgIHJlbW90ZSBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICBieXRlcyAgIGJ5dGVzICBzZWNzLiAgIHBlciBzZWMgICUlICAgICAgJSUgICAgICB1cy9UciAgIHVzL1RyXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICUtNmQgJS02LjJmICAlLTYuMmYgICAlLTYuMmYgJS02LjJmICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICprc2lua19mbXQgPSAiXG5cCitBbGlnbm1lbnQgICAgICBPZmZzZXRcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGVcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2XG5cCislNWQgICU1ZCAgICU1ZCAgJTVkXG4iOworICAKKyAgCisgIGludCAJCQlvbmUgPSAxOworICBpbnQJCQl0aW1lZF9vdXQgPSAwOworICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIGludAlsZW47CisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CW51bW1lc3NhZ2VzOworICBTT0NLRVQJc2VuZF9zb2NrZXQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGRvdWJsZQlieXRlc194ZmVyZDsKKyAgaW50CXNvY2tfb3B0X2xlbiA9IHNpemVvZihpbnQpOworICBpbnQJcnNwX2J5dGVzX2xlZnQ7CisgIGludAlyc3BfYnl0ZXNfcmVjdmQ7CisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisgIGRvdWJsZQl0aHJ1cHV0OworICAKKyAgc3RydWN0CWhvc3RlbnQJICAgICAgICAqaHA7CisgIHN0cnVjdAlzb2NrYWRkcl9pbglzZXJ2ZXI7CisgIHN0cnVjdCAgICAgICAgc29ja2FkZHJfaW4gICAgICpteWFkZHI7CisgIHVuc2lnbmVkICAgICAgaW50ICAgICAgICAgICAgIGFkZHI7CisgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cG9ydDsKKworICBzdHJ1Y3QJdGNwX3RyYW5fcnJfcmVxdWVzdF9zdHJ1Y3QJKnRjcF90cmFuX3JyX3JlcXVlc3Q7CisgIHN0cnVjdAl0Y3BfdHJhbl9ycl9yZXNwb25zZV9zdHJ1Y3QJKnRjcF90cmFuX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX3RyYW5fcnJfcmVzdWx0c19zdHJ1Y3QJKnRjcF90cmFuX3JyX3Jlc3VsdDsKKyAgCisgIHRjcF90cmFuX3JyX3JlcXVlc3QgPSAKKyAgICAoc3RydWN0IHRjcF90cmFuX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfdHJhbl9ycl9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgdGNwX3RyYW5fcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX3RyYW5fcnJfcmVzdWx0ID0KKyAgICAoc3RydWN0IHRjcF90cmFuX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZSAqLworICAvKiBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50ICovCisgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgIC8qIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKyAgCisgIG15YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKTsKKyAgaWYgKG15YWRkciA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpOworICAgIGV4aXQoMSk7CisgIH0KKworICBiemVybygoY2hhciAqKSZzZXJ2ZXIsCisJc2l6ZW9mKHNlcnZlcikpOworICBiemVybygoY2hhciAqKW15YWRkciwKKwlzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKTsKKyAgbXlhZGRyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKworICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgcHJpbnRfdG9wX3Rlc3RfaGVhZGVyKCJUQ1AgVHJhbnNhY3Rpb25hbC9SZXF1ZXN0L1Jlc3BvbnNlIFRFU1QiLGxvY2FsX3JlcyxyZW1vdGVfcmVzKTsKKyAgfQorICAKKyAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycyAqLworICAKKyAgbnVtbWVzc2FnZXMJPQkwOworICBieXRlc194ZmVyZAk9CTAuMDsKKyAgdGltZXNfdXAgCT0gCTA7CisgIAorICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVycyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQgKi8KKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgcmVxX3NpemUsCisJCQkJICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICBsb2NhbF9zZW5kX29mZnNldCk7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICByc3Bfc2l6ZSwKKwkJCQkgICBsb2NhbF9yZWN2X2FsaWduLAorCQkJCSAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfdGNwX3RyYW5fcnI6IHNlbmRfc29ja2V0IG9idGFpbmVkLi4uXG4iKTsKKyAgfQorICAKKyAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suKi8KKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICB9CisgIAorICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUgc29ja2V0ICovCisgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAvKiBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggKi8KKyAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgIC8qIGRlZmF1bHQgdG8gOCwgd2hpY2ggd2lsbCBiZSBubyBhbGlnbm1lbnQgYWx0ZXJhdGlvbnMuICovCisgIAorICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJICAgICAgICA9CURPX1RDUF9UUlI7CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZV9yZXE7CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZV9yZXE7CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50CT0JcmVtb3RlX3JlY3ZfYWxpZ247CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudAk9CXJlbW90ZV9zZW5kX2FsaWduOworICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldAk9CXJlbW90ZV9zZW5kX29mZnNldDsKKyAgdGNwX3RyYW5fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplCT0JcmVxX3NpemU7CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUJPQlyc3Bfc2l6ZTsKKyAgdGNwX3RyYW5fcnJfcmVxdWVzdC0+bm9fZGVsYXkJICAgICAgICA9CXJlbV9ub2RlbGF5OworICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdQk9CXJlbW90ZV9jcHVfdXNhZ2U7CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPmNwdV9yYXRlCSAgICAgICAgPQlyZW1vdGVfY3B1X3JhdGU7CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnNvX3JjdmF2b2lkCT0JcmVtX3JjdmF2b2lkOworICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZAk9CXJlbV9zbmRhdm9pZDsKKyAgaWYgKHRlc3RfdGltZSkgeworICAgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90aW1lOworICB9CisgIGVsc2UgeworICAgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90cmFucyAqIC0xOworICB9CisgIHRjcF90cmFuX3JyX3JlcXVlc3QtPnBvcnQgICAgICAgICAgICAgPSAgICAgICBhdG9pKHJlbW90ZV9kYXRhX3BvcnQpOworICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5pcGZhbWlseSAgICAgICAgPSAgICAgICBhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX3RjcF90cmFuX3JyOiByZXF1ZXN0aW5nIFRDUF9UUlIgdGVzdFxuIik7CisgIH0KKyAgCisgIHNlbmRfcmVxdWVzdCgpOworICAKKyAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAJKi8KKyAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodAkqLworICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodAkqLworICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAvKiBiZWluZyBzZW50IGZvciB0aGUgVENQIHRlc3RzLgkJCQkJKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICByc3Jfc2l6ZQk9CXRjcF90cmFuX3JyX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICAgIHJzc19zaXplCT0JdGNwX3RyYW5fcnJfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisgICAgcmVtX25vZGVsYXkJPQl0Y3BfdHJhbl9ycl9yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgcmVtb3RlX2NwdV91c2FnZT0JdGNwX3RyYW5fcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgIHJlbW90ZV9jcHVfcmF0ZSA9IAl0Y3BfdHJhbl9ycl9yZXNwb25zZS0+Y3B1X3JhdGU7CisgICAgLyogbWFrZSBzdXJlIHRoYXQgcG9ydCBudW1iZXJzIGFyZSBpbiBuZXR3b3JrIG9yZGVyICovCisgICAgc2VydmVyLnNpbl9wb3J0CT0JdGNwX3RyYW5fcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXI7CisgICAgc2VydmVyLnNpbl9wb3J0ID0JaHRvbnMoc2VydmVyLnNpbl9wb3J0KTsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIHBvcnQgaXMgJWRcbiIsbnRvaHMoc2VydmVyLnNpbl9wb3J0KSk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCSAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCIiKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKworICAvKiBwaWNrIGEgbmljZSByYW5kb20gc3BvdCBiZXR3ZWVuIGNsaWVudF9wb3J0X21pbiBhbmQgKi8KKyAgLyogY2xpZW50X3BvcnRfbWF4IGZvciBvdXIgaW5pdGlhbCBwb3J0IG51bWJlci4gaWYgdGhleSBhcmUgdGhlICovCisgIC8qIHNhbWUsIHRoZW4ganVzdCBzZXQgdG8gX21pbiAqLworICBpZiAoY2xpZW50X3BvcnRfbWF4IC0gY2xpZW50X3BvcnRfbWluKSB7CisgICAgc3JhbmQoZ2V0cGlkKCkpOworICAgIG15cG9ydCA9IGNsaWVudF9wb3J0X21pbiArIAorICAgICAgKHJhbmQoKSAlIChjbGllbnRfcG9ydF9tYXggLSBjbGllbnRfcG9ydF9taW4pKTsKKyAgfQorICBlbHNlIHsKKyAgICBteXBvcnQgPSBjbGllbnRfcG9ydF9taW47CisgIH0KKworICAvKiB0aGVyZSB3aWxsIGJlIGEgKysgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIGJpbmQsIHNvIHN1YnRyYWN0IG9uZSAqLworICBteXBvcnQtLTsKKyAgbXlhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydClteXBvcnQpOworICAKKyAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIHRoZXkgKi8KKyAgLyogY2FuIGJlIGVpdGhlciB0aW1lIG9yIHRyYW5zYWN0aW9uIGJhc2VkLiAqLworICAKKyAgaWYgKHRlc3RfdGltZSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICB0aW1lc191cCA9IDA7CisgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICBzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgd2FudGVkIHRvIHNlbmQgYSBudW1iZXIgb2YgYnl0ZXMuICovCisgICAgdHJhbnNfcmVtYWluaW5nID0gdGVzdF9ieXRlczsKKyAgICB0aW1lc191cCA9IDE7CisgIH0KKyAgCisgIC8qIFRoZSBjcHVfc3RhcnQgcm91dGluZSB3aWxsIGdyYWIgdGhlIGN1cnJlbnQgdGltZSBhbmQgcG9zc2libHkgKi8KKyAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAKKyAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisgIAorICAvKiBXZSB1c2UgYW4gIk9SIiB0byBjb250cm9sIHRlc3QgZXhlY3V0aW9uLiBXaGVuIHRoZSB0ZXN0IGlzICovCisgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAvKiBXaGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCwgdGhlIHRpbWUgdGVzdCB3aWxsICovCisgIC8qIGFsd2F5cyByZXR1cm4gZmFsc2UuIFdoZW4gdGhlIHRlc3QgaXMgZmluaXNoZWQsIHRoZSB3aG9sZSAqLworICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuIEkgdGhpbmsgSSAqLworICAvKiBqdXN0IGFyYml0cmFyaWx5IGRlY3JlbWVudCB0cmFuc19yZW1haW5pbmcgZm9yIHRoZSB0aW1lZCB0ZXN0LCBidXQgKi8KKyAgLyogd2lsbCBub3QgZG8gdGhhdCBqdXN0IHlldC4uLiBPbmUgb3RoZXIgcXVlc3Rpb24gaXMgd2hldGhlciBvciBub3QgKi8KKyAgLyogdGhlIHNlbmQgYnVmZmVyIGFuZCB0aGUgcmVjZWl2ZSBidWZmZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKworICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgICAvKiB0aW1lc3RhbXAganVzdCBiZWZvcmUgb3VyIGNhbGwgdG8gY3JlYXRlIHRoZSBzb2NrZXQsIGFuZCB0aGVuICovCisgICAgICAvKiBhZ2FpbiBqdXN0IGFmdGVyIHRoZSByZWNlaXZlIHJhaiAzLzk1ICovCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgICAgLyogc2V0IHVwIHRoZSBkYXRhIHNvY2tldCAtIGlzIHRoaXMgcmVhbGx5IG5lY2Vzc2FyeSBvciBjYW4gSSBqdXN0ICovCisgICAgLyogcmUtdXNlIHRoZSBzYW1lIHNvY2tldCBhbmQgbW92ZSB0aGlzIGNhbCBvdXQgb2YgdGhlIHdoaWxlIGxvb3AuICovCisgICAgLyogaXQgZG9lcyBpbnRyb2N1ZGVhICpib2F0bG9hZCogb2Ygc3lzdGVtIGNhbGxzLiBJIGd1ZXNzIHRoYXQgaXQgKi8KKyAgICAvKiBhbGwgZGVwZW5kcyBvbiAicmVhbGl0eSBvZiBwcm9ncmFtbWluZy4iIGtlZXBpbmcgaXQgdGhpcyB3YXkgaXMgKi8KKyAgICAvKiBhIGJpdCBtb3JlIGNvbnNlcnZhdGl2ZSBJIGltYWdpbmUgLSByYWogMy85NSAqLworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgIAorICAgIGlmIChzZW5kX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3RjcF90cmFuX3JyOiB0Y3Agc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8qIHdlIHNldCBTT19SRVVTRUFERFIgb24gdGhlIHByZW1pcyB0aGF0IG5vIHVucmVzZXJ2ZWQgcG9ydCAqLworICAgIC8qIG51bWJlciBvbiB0aGUgbG9jYWwgc3lzdGVtIGlzIGdvaW5nIHRvIGJlIGFscmVhZHkgY29ubmVjdGVkIHRvICovCisgICAgLyogdGhlIHJlbW90ZSBuZXRzZXJ2ZXIncyBwb3J0IG51bWJlci4gT25lIHRoaW5nIHRoYXQgSSBtaWdodCAqLworICAgIC8qIHRyeSBsYXRlciBpcyB0byBoYXZlIHRoZSByZW1vdGUgYWN0dWFsbHkgYWxsb2NhdGUgYSBjb3VwbGUgb2YgKi8KKyAgICAvKiBwb3J0IG51bWJlcnMgYW5kIGN5Y2xlIHRocm91Z2ggdGhvc2UgYXMgd2VsbC4gZGVwZW5kcyBvbiBpZiB3ZSAqLworICAgIC8qIGNhbiBnZXQgdGhyb3VnaCBhbGwgdGhlIHVucmVzZXJ2ZWQgcG9ydCBudW1iZXJzIGluIGxlc3MgdGhhbiAqLworICAgIC8qIHRoZSBsZW5ndGggb2YgdGhlIFRJTUVfV0FJVCBzdGF0ZSByYWogOC85NCAqLworICAgIG9uZSA9IDE7CisgICAgaWYoc2V0c29ja29wdChzZW5kX3NvY2tldCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLAorCQkgIChjaGFyICopJm9uZSwgc29ja19vcHRfbGVuKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF90Y3BfdHJhbl9ycjogc29fcmV1c2VhZGRyIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworbmV3cG9ydDoKKyAgICAvKiBwaWNrIGEgbmV3IHBvcnQgbnVtYmVyICovCisgICAgbXlwb3J0ID0gbnRvaHMobXlhZGRyLT5zaW5fcG9ydCk7CisgICAgbXlwb3J0Kys7CisKKyAgICAvKiB3ZSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIHBvcnQgbnVtYmVyIHRoYXQgdGhlIHNlcnZlciBpcyAqLworICAgIC8qIHNpdHRpbmcgYXQgLSB0aGlzIHdvdWxkIGNhdXNlIHVzIHRvIGZhaWwgaW4gYSBsb29wYmFjayB0ZXN0LiB3ZSAqLworICAgIC8qIGNvdWxkIGp1c3QgcmVseSBvbiB0aGUgZmFpbHVyZSBvZiB0aGUgYmluZCB0byBnZXQgdXMgcGFzdCB0aGlzLCAqLworICAgIC8qIGJ1dCBJJ20gZ3Vlc3NpbmcgdGhhdCBpbiB0aGlzIG9uZSBjYXNlIGF0IGxlYXN0LCBpdCBpcyBtdWNoICovCisgICAgLyogZmFzdGVyLCBnaXZlbiB0aGF0IHdlICprbm93KiB0aGF0IHBvcnQgbnVtYmVyIGlzIGFscmVhZHkgaW4gdXNlICovCisgICAgLyogKG9yIHJhdGhlciB3b3VsZCBiZSBpbiBhIGxvb3BiYWNrIHRlc3QpICovCisKKyAgICBpZiAobXlwb3J0ID09IG50b2hzKHNlcnZlci5zaW5fcG9ydCkpIG15cG9ydCsrOworCisgICAgLyogd3JhcCB0aGUgcG9ydCBudW1iZXIgd2hlbiB3ZSBnZXQgdG8gNjU1MzUuIE5PVEUsIHNvbWUgYnJva2VuICovCisgICAgLyogVENQJ3MgbWlnaHQgdHJlYXQgdGhlIHBvcnQgbnVtYmVyIGFzIGEgc2lnbmVkIDE2IGJpdCBxdWFudGl0eS4gKi8KKyAgICAvKiB3ZSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiB0ZXN0aW5nIHN1Y2ggYnJva2VuIGltcGxlbWVudGF0aW9ucyA6KSAqLworICAgIC8qIHJhaiA4Lzk0ICAqLworICAgIGlmIChteXBvcnQgPj0gY2xpZW50X3BvcnRfbWF4KSB7CisgICAgICBteXBvcnQgPSBjbGllbnRfcG9ydF9taW47CisgICAgfQorICAgIG15YWRkci0+c2luX3BvcnQgPSBodG9ucygodW5zaWduZWQgc2hvcnQpbXlwb3J0KTsKKworICAgIGlmIChkZWJ1ZykgeworICAgICAgaWYgKChudW1tZXNzYWdlcyAlIDEwMCkgPT0gMCkgeworCXByaW50ZigicG9ydCAlZFxuIixteXBvcnQpOworICAgICAgfQorICAgIH0KKworICAgIC8qIHdlIHdhbnQgdG8gYmluZCBvdXIgc29ja2V0IHRvIGEgcGFydGljdWxhciBwb3J0IG51bWJlci4gKi8KKyAgICBpZiAoYmluZChzZW5kX3NvY2tldCwKKwkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilteWFkZHIsCisJICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIC8qIGlmIHRoZSBiaW5kIGZhaWxlZCwgc29tZW9uZSBlbHNlIG11c3QgaGF2ZSB0aGF0IHBvcnQgbnVtYmVyICovCisgICAgICAvKiAtIHBlcmhhcHMgaW4gdGhlIGxpc3RlbiBzdGF0ZS4gc2luY2Ugd2UgY2FuJ3QgdXNlIGl0LCBza2lwIHRvICovCisgICAgICAvKiB0aGUgbmV4dCBwb3J0IG51bWJlci4gd2UgbWF5IGhhdmUgdG8gZG8gdGhpcyBhZ2FpbiBsYXRlciwgYnV0ICovCisgICAgICAvKiB0aGF0J3MganVzdCB0b28gYmFkIDopICovCisgICAgICBpZiAoZGVidWcgPiAxKSB7CisJZnByaW50Zih3aGVyZSwKKwkJInNlbmRfdGNwX3RyYW5fcnI6IHRyaWVkIHRvIGJpbmQgdG8gcG9ydCAlZCBlcnJubyAlZFxuIiwKKwkJbnRvaHMobXlhZGRyLT5zaW5fcG9ydCksCisJCWVycm5vKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorCS8qIHllcywgZ290bydzIGFyZSBzdXBwb3NlZCB0byBiZSBldmlsLCBidXQgdGhleSBkbyBoYXZlIHRoZWlyICovCisJLyogdXNlcyBmcm9tIHRpbWUgdG8gdGltZS4gdGhlIHJlYWwgd29ybGQgZG9lc24ndCBhbHdheXMgaGF2ZSAqLworCS8qIHRvIGNvZGUgdG8gZ2UgdHRoZSBBIGluIENTIDEwMSA6KSByYWogMy85NSAqLworCWdvdG8gbmV3cG9ydDsKKyAgICB9CisKKyAgICAvKiBDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQuIFNpbmNlIHRoaXMgaXMgKi8KKyAgICAvKiBhIHRlc3QgZm9yIFJGQ18xNjQ0LXN0eWxlIHRyYW5zYWN0aW9uYWwgVENQLCB3ZSBjYW4gdXNlIHRoZSAqLworICAgIC8qIHNlbmR0bygpIGNhbGwgaW5zdGVhZCBvZiBjYWxsaW5nIGNvbm5lY3QgYW5kIHRoZW4gc2VuZCgpICovCisKKyAgICAvKiBzZW5kIHRoZSByZXF1ZXN0ICovCisgICAgaWYoKGxlbj1zZW5kdG8oc2VuZF9zb2NrZXQsCisJCSAgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgcmVxX3NpemUsCisJCSAgIE1TR19FT0YsIAorCQkgICAoc3RydWN0IHNvY2thZGRyICopJnNlcnZlciwKKwkJICAgc2l6ZW9mKHNlcnZlcikpKSAhPSByZXFfc2l6ZSkgeworICAgICAgaWYgKFNPQ0tFVF9FSU5UUihsZW4pKQorCSAgeworCSAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiBhICovCisJICAgIC8qIHRpbWVkIHRlc3QuICovCisJICAgIHRpbWVkX291dCA9IDE7CisJICAgIGJyZWFrOworICAgICAgfQorICAgICAgcGVycm9yKCJzZW5kX3RjcF90cmFuX3JyOiBkYXRhIHNlbmQgZXJyb3IiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKworICAgIC8qIHJlY2VpdmUgdGhlIHJlc3BvbnNlICovCisgICAgcnNwX2J5dGVzX2xlZnQgPSByc3Bfc2l6ZTsKKyAgICB0ZW1wX21lc3NhZ2VfcHRyICA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICB3aGlsZShyc3BfYnl0ZXNfbGVmdCA+IDApIHsKKyAgICAgIGlmKChyc3BfYnl0ZXNfcmVjdmQ9cmVjdihzZW5kX3NvY2tldCwKKwkJCSAgICAgICB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJICAgICAgIHJzcF9ieXRlc19sZWZ0LAorCQkJICAgICAgIDApKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkgICAgaWYgKFNPQ0tFVF9FSU5UUihyc3BfYnl0ZXNfcmVjdmQpKQorCQl7CisJICAgICAgLyogV2UgaGl0IHRoZSBlbmQgb2YgYSB0aW1lZCB0ZXN0LiAqLworCSAgICAgIHRpbWVkX291dCA9IDE7CisJICAgICAgYnJlYWs7CisJCX0KKwkgICAgcGVycm9yKCJzZW5kX3RjcF90cmFuX3JyOiBkYXRhIHJlY3YgZXJyb3IiKTsKKwkgICAgZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIHJzcF9ieXRlc19sZWZ0IC09IHJzcF9ieXRlc19yZWN2ZDsKKyAgICAgIHRlbXBfbWVzc2FnZV9wdHIgICs9IHJzcF9ieXRlc19yZWN2ZDsKKyAgICB9CQorICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworICAgIGlmICh0aW1lZF9vdXQpIHsKKyAgICAgIC8qIHdlIG1heSBoYXZlIGJlZW4gaW4gYSBuZXN0ZWQgd2hpbGUgbG9vcCAtIHdlIG5lZWQgKi8KKyAgICAgIC8qIGFub3RoZXIgY2FsbCB0byBicmVhay4gKi8KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNsb3NlKHNlbmRfc29ja2V0KTsKKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAgIEhJU1RfdGltZXN0YW1wKCZ0aW1lX3R3byk7CisgICAgICBISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZyA+IDMpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIlRyYW5zYWN0aW9uICVkIGNvbXBsZXRlZCBvbiBsb2NhbCBwb3J0ICVkXG4iLAorCSAgICAgIG51bW1lc3NhZ2VzLAorCSAgICAgIG50b2hzKG15YWRkci0+c2luX3BvcnQpKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorCisKKyAgfQorICAKKyAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworCisgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyBtZWFzdXJlZD8gKi8KKyAgLyogaG93IGxvbmcgZGlkIHdlIHJlYWxseSBydW4/ICovCisgIAorICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgLyogY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nIHRoaW5ncy4gSWYgaXQgKi8KKyAgLyogd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLworICAKKyAgcmVjdl9yZXNwb25zZSgpOworICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgaWYgKGRlYnVnKQorICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoIiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZSBmdXR1cmUsICovCisgIC8qIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dCBtZWFzdXJlZCBieSAqLworICAvKiB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgVENQIHN0cmVhbSB0ZXN0LCAqLworICAvKiB0aGF0IHRoZSB0d28gbnVtYmVycyBzaG91bGQgYmUgKnZlcnkqIGNsb3NlLi4uIFdlIGNhbGN1bGF0ZSAqLworICAvKiBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICovCisgIC8qIElmIGl0IHdhcyB0aW1lLCB3ZSBuZWVkZWQgdG8sIGFuZCBpZiBpdCB3YXMgYnkgYnl0ZXMsIHRoZSB1c2VyIG1heSAqLworICAvKiBoYXZlIHNwZWNpZmllZCBhIG51bWJlciBvZiBieXRlcyB0aGF0IHdhc24ndCBhIG11bHRpcGxlIG9mIHRoZSAqLworICAvKiBzZW5kX3NpemUsIHNvIHdlIHJlYWxseSBkaWRuJ3Qgc2VuZCB3aGF0IGhlIGFza2VkIGZvciA7LSkgV2UgdXNlICovCisgIC8qIEtieXRlcy9zIGFzIHRoZSB1bml0cyBvZiB0aHJ1cHV0IGZvciBhIFRDUCBzdHJlYW0gdGVzdCwgd2hlcmUgSyA9ICovCisgIC8qIDEwMjQuIEEgZnV0dXJlIGVuaGFuY2VtZW50ICptaWdodCogYmUgdG8gY2hvb3NlIGZyb20gYSBjb3VwbGUgb2YgKi8KKyAgLyogdW5pdCBzZWxlY3Rpb25zLiAqLyAKKyAgCisgIGJ5dGVzX3hmZXJkCT0gKHJlcV9zaXplICogbnVtbWVzc2FnZXMpICsgKHJzcF9zaXplICogbnVtbWVzc2FnZXMpOworICB0aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3hmZXJkKTsKKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgaWYgKGxvY2FsX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsIldBUk5JTkcgV0FSTklORyBXQVJOSU5HICBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyFcbiIpOworCWZwcmludGYod2hlcmUsIkxvY2FsIENQVSB1c2FnZSBudW1iZXJzIGJhc2VkIG9uIHByb2Nlc3MgaW5mb3JtYXRpb24gb25seSFcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24gPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgICAgICAvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKyAgICAgIC8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKyAgICAgIC8qICJnb29kIiBudW1iZXJzICovCisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMC4wLAorCQkJCQkJICAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChyZW1vdGVfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiREFOR0VSICBEQU5HRVIgIERBTkdFUiAgICBEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiFcbiIpOworCWZwcmludGYod2hlcmUsIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHRjcF90cmFuX3JyX3Jlc3VsdC0+Y3B1X3V0aWw7CisgICAgICAvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKyAgICAgIC8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKyAgICAgIC8qICJnb29kIiBudW1iZXJzICovCisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgdGNwX3RyYW5fcnJfcmVzdWx0LT5udW1fY3B1cyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgfQorICAgIAorICAgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgICAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgICAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgICAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorCisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCWNwdV90aXRsZSwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGd1ZXNzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lLAorCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLAorCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgICAgfQorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8xLAkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAorCSAgICAgIGxzcl9zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVzcG9uc2VzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzIsCisJICAgICAgcnNzX3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIAorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvKiBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBzb21lIG9mIHRoZSAqLworICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAvKiBtb21lbnQsIEkgZG8gbm90IHdpc2ggdG8gZmlndXJlLW91dCBhbGwgdGhlICBmb3JtYXR0aW5nLCBzbyBJIHdpbGwgKi8KKyAgLyoganVzdCBwdXQgdGhpcyBjb21tZW50IGhlcmUgdG8gaGVscCByZW1pbmQgbWUgdGhhdCBpdCBpcyBzb21ldGhpbmcgKi8KKyAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisgIAorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgICAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCwKKwkgICAgbG9jYWxfc2VuZF9vZmZzZXQsCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCk7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuSGlzdG9ncmFtIG9mIHJlcXVlc3QvcmVzcG9uc2UgdGltZXNcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIH0KKyAgCit9CisKKwwKK2ludCAKK3JlY3ZfdGNwX3RyYW5fcnIoKQoreworICAKKyAgY2hhciAgKm1lc3NhZ2U7CisgIHN0cnVjdAlzb2NrYWRkcl9pbiAgICAgICAgbXlhZGRyX2luLAorICBwZWVyYWRkcl9pbjsKKyAgU09DS0VUCXNfbGlzdGVuLHNfZGF0YTsKKyAgbmV0cGVyZl9zb2NrbGVuX3QgCWFkZHJsZW47CisgIGludCAgIE5vUHVzaCA9IDE7CisKKyAgY2hhcgkqcmVjdl9tZXNzYWdlX3B0cjsKKyAgY2hhcgkqc2VuZF9tZXNzYWdlX3B0cjsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CXRyYW5zX3JlY2VpdmVkOworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBpbnQJYnl0ZXNfc2VudDsKKyAgaW50CXJlcXVlc3RfYnl0ZXNfcmVjdmQ7CisgIGludAlyZXF1ZXN0X2J5dGVzX3JlbWFpbmluZzsKKyAgaW50CXRpbWVkX291dCA9IDA7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgCisgIHN0cnVjdAl0Y3BfdHJhbl9ycl9yZXF1ZXN0X3N0cnVjdAkqdGNwX3RyYW5fcnJfcmVxdWVzdDsKKyAgc3RydWN0CXRjcF90cmFuX3JyX3Jlc3BvbnNlX3N0cnVjdAkqdGNwX3RyYW5fcnJfcmVzcG9uc2U7CisgIHN0cnVjdAl0Y3BfdHJhbl9ycl9yZXN1bHRzX3N0cnVjdAkqdGNwX3RyYW5fcnJfcmVzdWx0czsKKyAgCisgIHRjcF90cmFuX3JyX3JlcXVlc3QgPSAKKyAgICAoc3RydWN0IHRjcF90cmFuX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfdHJhbl9ycl9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgdGNwX3RyYW5fcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX3RyYW5fcnJfcmVzdWx0cyA9IAorICAgIChzdHJ1Y3QgdGNwX3RyYW5fcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X3RjcF90cmFuX3JyOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwgKi8KKyAgLyogc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGRldGVybWluZWQsICovCisgIC8qIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvIHdyb25nIGZvciBhbnkgKi8KKyAgLyogcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQgKi8KKyAgLyogd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMgKi8KKyAgLyogdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cyB1bmV4cGVjdGVkICovCisgIC8qIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3RyYW5fcnI6IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gVENQX1RSUl9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3RyYW5fcnI6IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0ICovCisgIG1lc3NhZ2UgPSAoY2hhciAqKW1hbGxvYyhEQVRBQlVGRkVSTEVOKTsKKyAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkgeworICAgIHByaW50ZigibWFsbG9jKCVkKSBmYWlsZWQhXG4iLCBEQVRBQlVGRkVSTEVOKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlcyB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnRzIHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0cy4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF90cmFuX3JyOiByZXF1ZXN0ZWQgcmVjdiBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkgICAgdGNwX3RyYW5fcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF90cmFuX3JyOiByZXF1ZXN0ZWQgc2VuZCBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkgICAgdGNwX3RyYW5fcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICByZWN2X21lc3NhZ2VfcHRyID0gQUxJR05fQlVGRkVSKG1lc3NhZ2UsIHRjcF90cmFuX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LCB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgIAorICBzZW5kX21lc3NhZ2VfcHRyID0gQUxJR05fQlVGRkVSKG1lc3NhZ2UsIHRjcF90cmFuX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LCB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF90cmFuX3JyOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTGV0J3MgY2xlYXItb3V0IG91ciBzb2NrYWRkciBmb3IgdGhlIHNha2Ugb2YgY2xlYW5saW5lcy4gVGhlbiB3ZSAqLworICAvKiBjYW4gcHV0IGluIE9VUiB2YWx1ZXMgIS0pIEF0IHNvbWUgcG9pbnQsIHdlIG1heSB3YW50IHRvIG5haWwgdGhpcyAqLworICAvKiBzb2NrZXQgdG8gYSBwYXJ0aWN1bGFyIG5ldHdvcmstbGV2ZWwgYWRkcmVzcywgYnV0IGZvciBub3csICovCisgIC8qIElOQUREUl9BTlkgc2hvdWxkIGJlIGp1c3QgZmluZS4gKi8KKyAgCisgIGJ6ZXJvKChjaGFyICopJm15YWRkcl9pbiwKKwlzaXplb2YobXlhZGRyX2luKSk7CisgIG15YWRkcl9pbi5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOworICBteWFkZHJfaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgbXlhZGRyX2luLnNpbl9wb3J0ICAgICAgICA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCl0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5wb3J0KTsKKyAgCisgIC8qIEdyYWIgYSBzb2NrZXQgdG8gbGlzdGVuIG9uLCBhbmQgdGhlbiBsaXN0ZW4gb24gaXQuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF90cmFuX3JyOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZV9yZXEgPSB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplOworICBsb2Nfbm9kZWxheSA9IHRjcF90cmFuX3JyX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0gdGNwX3RyYW5fcnJfcmVxdWVzdC0+c29fc25kYXZvaWQ7CisgIAorICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYodGNwX3RyYW5fcnJfcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJdGNwX3RyYW5fcnJfcmVxdWVzdC0+cG9ydCk7CisKKyAgbG9jYWxfcmVzID0gY29tcGxldGVfYWRkcmluZm8obG9jYWxfbmFtZSwKKwkJCQlsb2NhbF9uYW1lLAorCQkJCXBvcnRfYnVmZmVyLAorCQkJCW5mX3RvX2FmKHRjcF90cmFuX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NUUkVBTSwKKwkJCQlJUFBST1RPX1RDUCwKKwkJCQkwKTsKKworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgY3JlYXRlIGRhdGEgc29ja2V0XG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGV4aXQoMSk7CisgIH0KKworI2lmZGVmIFdJTjMyCisgIC8qIFRoZSB0ZXN0IHRpbWVyIGNhbiBmaXJlIGR1cmluZyBvcGVyYXRpb25zIG9uIHRoZSBsaXN0ZW5pbmcgc29ja2V0LAorICAgICBzbyB0byBtYWtlIHRoZSBzdGFydF90aW1lciBiZWxvdyB3b3JrIHdlIGhhdmUgdG8gbW92ZQorICAgICBpdCB0byBjbG9zZSBzX2xpc3RlbiB3aGlsZSB3ZSBhcmUgYmxvY2tlZCBvbiBhY2NlcHQuICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0MiA9IHNfbGlzdGVuOworI2VuZGlmCisKKworICAvKiBMZXQncyBnZXQgYW4gYWRkcmVzcyBhc3NpZ25lZCB0byB0aGlzIHNvY2tldCBzbyB3ZSBjYW4gdGVsbCB0aGUgKi8KKyAgLyogaW5pdGlhdG9yIGhvdyB0byByZWFjaCB0aGUgZGF0YSBzb2NrZXQuIFRoZXJlIG1heSBiZSBhIGRlc2lyZSB0byAqLworICAvKiBuYWlsIHRoaXMgc29ja2V0IHRvIGEgc3BlY2lmaWMgSVAgYWRkcmVzcyBpbiBhIG11bHRpLWhvbWVkLCAqLworICAvKiBtdWx0aS1jb25uZWN0aW9uIHNpdHVhdGlvbiwgYnV0IGZvciBub3csIHdlJ2xsIGlnbm9yZSB0aGUgaXNzdWUgKi8KKyAgLyogYW5kIGNvbmNlbnRyYXRlIG9uIHNpbmdsZSBjb25uZWN0aW9uIHRlc3RpbmcuICovCisgIAorICBpZiAoYmluZChzX2xpc3RlbiwKKwkgICAoc3RydWN0IHNvY2thZGRyICopJm15YWRkcl9pbiwKKwkgICBzaXplb2YobXlhZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiY291bGQgbm90IGJpbmRcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgZXhpdCgxKTsKKyAgfQorCisgIC8qIHdlIHdhbnQgdG8gZGlzYWJsZSB0aGUgaW1wbGljaXQgUFVTSCBvbiBhbGwgc2VuZHMuIGF0IHNvbWUgcG9pbnQsICovCisgIC8qIHRoaXMgbWlnaHQgd2FudCB0byBiZSBhIHBhcm0gdG8gdGhlIHRlc3QgcmFqIDMvOTUgKi8KKyAgaWYgKHNldHNvY2tvcHQoc19saXN0ZW4sCisJCSBJUFBST1RPX1RDUCwKKwkJIFRDUF9OT1BVU0gsIAorCQkgKGNvbnN0IGNoYXIgKikmTm9QdXNoLAorCQkgc2l6ZW9mKGludCkpID09IFNPQ0tFVF9FUlJPUikgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF90cmFuX3JyOiBjb3VsZCBub3Qgc2V0IFRDUF9OT1BVU0ggZXJybm8gJWRcbiIsCisJICAgIGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgfQorCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfbGlzdGVuLCA1KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgbGlzdGVuXG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLAorCQkgICZhZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsImNvdWxkIG5vdCBnZWV0c29ja25hbWVcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHRjcF90cmFuX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyID0gKGludCkgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KTsKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwidGVsbGluZyB0aGUgcmVtb3RlIHRvIGNhbGwgbWUgYXQgJWRcbiIsCisJICAgIHRjcF90cmFuX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIDAuMCB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgdGNwX3RyYW5fcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBpZiAodGNwX3RyYW5fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB0Y3BfdHJhbl9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHRjcF90cmFuX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdSh0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgCisKKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgdGNwX3RyYW5fcnJfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgdGNwX3RyYW5fcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgdGNwX3RyYW5fcnJfcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHRjcF90cmFuX3JyX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgdGNwX3RyYW5fcnJfcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHRjcF90cmFuX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSBzZW5kZXIgZG9lcyBhIHNodXRkb3duLCB3aGljaCB3aWxsICovCisgIC8qIHJldHVybiBhIGxlbmd0aCBvZiB6ZXJvICAgKi8KKyAgCisgIGlmICh0Y3BfdHJhbl9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCA+IDApIHsKKyAgICB0aW1lc191cCA9IDA7CisgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICBzdGFydF90aW1lcih0Y3BfdHJhbl9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0gdGNwX3RyYW5fcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKKyAgfQorICAKKyAgdHJhbnNfcmVjZWl2ZWQgPSAwOworCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKworICAgIC8qIGFjY2VwdCBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgcmVtb3RlICovCisgICAgaWYgKChzX2RhdGE9YWNjZXB0KHNfbGlzdGVuLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJICAgICAgICZhZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHRoZSB0aW1lciBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfdHJhbl9ycjogYWNjZXB0OiBlcnJubyA9ICVkXG4iLGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX3RyYW5fcnI6IGFjY2VwdGVkIGRhdGEgY29ubmVjdGlvbi5cbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIAorI2lmZGVmIFdJTjMyCisgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgIC8qIFdpbmRvd3Mtc3BlY2lmaWMgd2F5IEkgY2FuIGZpbmQgdG8gZm9yY2UgdGhlIHdpbnNvY2sgY2FsbHMgdG8gKi8KKyAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAvKiBhbmQgc3VjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCByYWogMS85NiAqLworICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNfZGF0YTsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisjaWZkZWYgS0xVREdFX1NPQ0tFVF9PUFRJT05TCisgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MgKi8KKyAgLyogYXR0cmlidXRlcyBhY3Jvc3MgYW4gYWNjZXB0KCkgY2FsbC4gSW5jbHVkaW5nIHRoaXMgZ29lcyBhZ2FpbnN0ICovCisgIC8qIG15IGJldHRlciBqdWRnZW1lbnQgOiggcmFqIDExLzk1ICovCisKKyAga2x1ZGdlX3NvY2tldF9vcHRpb25zKHNfZGF0YSk7CisKKyNlbmRpZiAvKiBLTFVER0VfU09DS0VUX09QVElPTlMgKi8KKyAgCisgICAgdGVtcF9tZXNzYWdlX3B0cgk9IHJlY3ZfbWVzc2FnZV9wdHI7CisgICAgcmVxdWVzdF9ieXRlc19yZW1haW5pbmcJPSB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemU7CisgICAgCisgICAgLyogcmVjZWl2ZSB0aGUgcmVxdWVzdCBmcm9tIHRoZSBvdGhlciBzaWRlLiB3ZSBjYW4ganVzdCByZWNlaXZlICovCisgICAgLyogdW50aWwgd2UgZ2V0IHplcm8gYnl0ZXMsIGJ1dCB0aGF0IHdvdWxkIGJlIGEgc2xpZ2h0IHN0cnVjdHVyZSAqLworICAgIC8qIGNoYW5nZSBpbiB0aGUgY29kZSwgd2l0aCBtaW5pbWFsIHBlcmZvbWFuY2UgZWZmZWN0cy4gSWYgKi8KKyAgICAvKiBob3dldmVyLCBJIGhhcyB2YXJpYWJsZS1sZW5ndGggbWVzc2FnZXMsIEkgd291bGQgd2FudCB0byBkbyAqLworICAgIC8qIHRoaXMgdG8gYXZvaWQgbmVlZGluZyAiZG91YmxlIHJlYWRzIiAtIG9uZSBmb3IgdGhlIG1lc3NhZ2UgKi8KKyAgICAvKiBsZW5ndGgsIGFuZCBvbmUgZm9yIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlIHJhaiAzLzk1ICovCisgICAgd2hpbGUocmVxdWVzdF9ieXRlc19yZW1haW5pbmcgPiAwKSB7CisgICAgICBpZigocmVxdWVzdF9ieXRlc19yZWN2ZD1yZWN2KHNfZGF0YSwKKwkJCQkgICB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJCSAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nLAorCQkJCSAgIDApKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkgICAgaWYgKCBTT0NLRVRfRUlOVFIocmVxdWVzdF9ieXRlc19yZWN2ZCkgKQorCQl7CisJICAgICAgLyogdGhlIHRpbWVyIHBvcHBlZCAqLworCSAgICAgIHRpbWVkX291dCA9IDE7CisJICAgICAgYnJlYWs7CisJCX0KKwkgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKwkgICAgc2VuZF9yZXNwb25zZSgpOworCSAgICBleGl0KDEpOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVxdWVzdF9ieXRlc19yZW1haW5pbmcgLT0gcmVxdWVzdF9ieXRlc19yZWN2ZDsKKwl0ZW1wX21lc3NhZ2VfcHRyICArPSByZXF1ZXN0X2J5dGVzX3JlY3ZkOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBiYXNlZCBvbiB0aW1lIC0gbGV0cyAqLworICAgICAgLyogYmFpbCBvdXQgb2YgaGVyZSBub3cuLi4gKi8KKyAgICAgIGZwcmludGYod2hlcmUsInlvNVxuIik7CisgICAgICBmZmx1c2god2hlcmUpOwkJCQkJCQorICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSB3ZSBjYW4gdXNlIHNlbmR0byBoZXJlIHRvICovCisgICAgLyogaGVscCByZW1pbmQgcGVvcGxlIHRoYXQgdGhpcyBpcyBhbiByZmMgMTY0NCBzdHlsZSBvZiB0ZXN0ICovCisgICAgaWYoKGJ5dGVzX3NlbnQ9c2VuZHRvKHNfZGF0YSwKKwkJCSAgc2VuZF9tZXNzYWdlX3B0ciwKKwkJCSAgdGNwX3RyYW5fcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSwKKwkJCSAgTVNHX0VPRiwKKwkJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSkpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgaWYgKFNPQ0tFVF9FSU5UUihieXRlc19zZW50KSkgeworCS8qIHRoZSB0ZXN0IHRpbWVyIGhhcyBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWZwcmludGYod2hlcmUsInlvNlxuIik7CisJZmZsdXNoKHdoZXJlKTsJCQkJCQkKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gOTk7CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICB0cmFuc19yZWNlaXZlZCsrOworICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInJlY3ZfdGNwX3RyYW5fcnI6IFRyYW5zYWN0aW9uICVkIGNvbXBsZXRlXG4iLAorCSAgICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorCisgICAgLyogY2xvc2UgdGhlIGNvbm5lY3Rpb24uIHNpbmNlIHdlIGhhdmUgZGlzYWJsZSBQVVNIIG9uIHNlbmRzLCB0aGUgKi8KKyAgICAvKiBGSU4gc2hvdWxkIGJlIHRhY2tlZC1vbnRvIG91ciBsYXN0IHNlbmQgaW5zdGVhZCBvZiBiZWluZyAqLworICAgIC8qIHN0YW5kYWxvbmUgKi8KKyAgICBjbG9zZShzX2RhdGEpOworCisgIH0KKyAgCisgIAorICAvKiBUaGUgbG9vcCBub3cgZXhpdHMgZHVlIHRvIHRpbWVvdXQgb3IgdHJhbnNhY3Rpb24gY291bnQgYmVpbmcgKi8KKyAgLyogcmVhY2hlZCAqLworICAKKyAgY3B1X3N0b3AodGNwX3RyYW5fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICBpZiAodGltZWRfb3V0KSB7CisgICAgLyogd2UgZW5kZWQgdGhlIHRlc3QgYnkgdGltZSwgd2hpY2ggd2FzIGF0IGxlYXN0IDIgc2Vjb25kcyAqLworICAgIC8qIGxvbmdlciB0aGFuIHdlIHdhbnRlZCB0byBydW4uIHNvLCB3ZSB3YW50IHRvIHN1YnRyYWN0ICovCisgICAgLyogUEFEX1RJTUUgZnJvbSB0aGUgZWxhcHNlZF90aW1lLiAqLworICAgIGVsYXBzZWRfdGltZSAtPSBQQURfVElNRTsKKyAgfQorICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdGNwX3RyYW5fcnI6IGdvdCAlZCB0cmFuc2FjdGlvbnNcbiIsCisJICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICB0Y3BfdHJhbl9ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZAk9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCQkgICAodGNwX3RyYW5fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplICsgCisJCQkJCSAgICB0Y3BfdHJhbl9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplKSk7CisgIHRjcF90cmFuX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkCT0gdHJhbnNfcmVjZWl2ZWQ7CisgIHRjcF90cmFuX3JyX3Jlc3VsdHMtPmVsYXBzZWRfdGltZQk9IGVsYXBzZWRfdGltZTsKKyAgaWYgKHRjcF90cmFuX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgdGNwX3RyYW5fcnJfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF90cmFuX3JyOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorfQorI2VuZGlmIC8qIERPXzE2NDQgKi8KKwwKKyNpZmRlZiBET19OQlJSCisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHNlbmRpbmcgKG5ldHBlcmYpIHNpZGUgb2YgdGhlIFRDUF9SUiAqLworIC8qIHRlc3QgdXNpbmcgUE9TSVgtc3R5bGUgbm9uLWJsb2NraW5nIHNvY2tldHMuICovCisKK3ZvaWQKK3NlbmRfdGNwX25icnIoY2hhciByZW1vdGVfaG9zdFtdKQoreworICAKKyAgY2hhciAqdHB1dF90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgIFJlc3AuICAgRWxhcHNlZCAgVHJhbnMuXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgIFNpemUgICAgVGltZSAgICAgUmF0ZSAgICAgICAgIFxuXAorYnl0ZXMgIEJ5dGVzICBieXRlcyAgICBieXRlcyAgIHNlY3MuICAgIHBlciBzZWMgICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZlxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAgJS02ZCAgJS02LjJmICAgJTcuMmYgICBcbiI7CisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHJhbnMuICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgUmF0ZSAgICAgbG9jYWwgIHJlbW90ZSBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICBieXRlcyAgIGJ5dGVzICBzZWNzLiAgIHBlciBzZWMgICUlICVjICAgICUlICVjICAgIHVzL1RyICAgdXMvVHJcblxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMCA9CisgICAgIiU2LjNmICVjXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgJS02ZCAlLTYuMmYgICUtNi4yZiAgJS02LjJmICUtNi4yZiAlLTYuM2YgICUtNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlwKK0FsaWdubWVudCAgICAgIE9mZnNldFxuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZVxuXAorU2VuZCAgIFJlY3YgICAgU2VuZCAgIFJlY3ZcblwKKyU1ZCAgJTVkICAgJTVkICAlNWRcbiI7CisgIAorICAKKyAgaW50CQkJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorICBpbnQJbGVuOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJbnVtbWVzc2FnZXM7CisgIFNPQ0tFVAlzZW5kX3NvY2tldDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgZG91YmxlCWJ5dGVzX3hmZXJkOworCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKyAgCisgIGludAlyc3BfYnl0ZXNfbGVmdDsKKyAgaW50CXJzcF9ieXRlc19yZWN2ZDsKKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QJaG9zdGVudAkgICAgICAgICpocDsKKyAgc3RydWN0CXNvY2thZGRyX3N0b3JhZ2UJc2VydmVyOworICB1bnNpZ25lZCAgICAgIGludCAgICAgICAgICAgICBhZGRyOworICAKKyAgc3RydWN0CXRjcF9ycl9yZXF1ZXN0X3N0cnVjdAkqdGNwX3JyX3JlcXVlc3Q7CisgIHN0cnVjdAl0Y3BfcnJfcmVzcG9uc2Vfc3RydWN0CSp0Y3BfcnJfcmVzcG9uc2U7CisgIHN0cnVjdAl0Y3BfcnJfcmVzdWx0c19zdHJ1Y3QJKnRjcF9ycl9yZXN1bHQ7CisKKyAgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzOworICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKworICB0Y3BfcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3QgdGNwX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfcnJfcmVzcG9uc2U9CisgICAgKHN0cnVjdCB0Y3BfcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX3JyX3Jlc3VsdAk9CisgICAgKHN0cnVjdCB0Y3BfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIHRpbWVfaGlzdCA9IEhJU1RfbmV3KCk7CisgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisKKyAgYnplcm8oKGNoYXIgKikmc2VydmVyLAorCXNpemVvZihzZXJ2ZXIpKTsKKyAgCisgIGNvbXBsZXRlX2FkZHJpbmZvcygmcmVtb3RlX3JlcywKKwkJICAgICAmbG9jYWxfcmVzLAorCQkgICAgIHJlbW90ZV9ob3N0LAorCQkgICAgIFNPQ0tfU1RSRUFNLAorCQkgICAgIElQUFJPVE9fVENQLAorCQkgICAgIDApOworCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIlRDUCBOb24tQmxvY2tpbmcgUkVRVUVTVC9SRVNQT05TRSBURVNUIixsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisgIH0KKyAgCisgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMgKi8KKyAgCisgIHNlbmRfcmluZyA9IE5VTEw7CisgIHJlY3ZfcmluZyA9IE5VTEw7CisgIGNvbmZpZGVuY2VfaXRlcmF0aW9uID0gMTsKKyAgaW5pdF9zdGF0KCk7CisKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisKKyAgICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzLiB3ZSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgd2UgbWlnaHQgYmUgKi8KKyAgICAvKiBnb2luZyB0aHJvdWdoIHRoZSBsb29wIG1vcmUgdGhhbiBvbmNlLiAqLworCisgICAgbnVtbWVzc2FnZXMgICAgID0gMDsKKyAgICBieXRlc194ZmVyZCAgICAgPSAwLjA7CisgICAgdGltZXNfdXAgICAgICAgID0gMDsKKyAgICB0aW1lZF9vdXQgICAgICAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisKKyAgICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVycyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQuICovCisgICAgLyogc2luY2UgdGhpcyBpcyBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgZGVmYXVsdCB0aGUgc2VuZF93aWR0aCBhbmQgKi8KKyAgICAvKiByZWN2X3dpZHRoIHRvIDEgYW5kIG5vdCB0d28gcmFqIDcvOTQgKi8KKworICAgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICAgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworICAKKyAgICBpZiAoc2VuZF9yaW5nID09IE5VTEwpIHsKKyAgICAgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgICAgIHJlcV9zaXplLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgfQorCisgICAgaWYgKHJlY3ZfcmluZyA9PSBOVUxMKSB7CisgICAgICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgICAgICByc3Bfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfcmVjdl9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfcmVjdl9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgIAorICAgIGlmIChzZW5kX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfdGNwX25icnI6IHRjcCBzdHJlYW0gZGF0YSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwic2VuZF90Y3BfbmJycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiovCisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICB9CisgICAgCisgICAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlIHNvY2tldCAqLworICAgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAgIC8qIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkICovCisgICAgLyogbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGV5IHdpbGwgYmUgcGFzc2VkIGFzIDAsIHdoaWNoICovCisgICAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgICAgLyogZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgKi8KKyAgICAvKiBkZWZhdWx0IHRvIDgsIHdoaWNoIHdpbGwgYmUgbm8gYWxpZ25tZW50IGFsdGVyYXRpb25zLiAqLworICAgIAorICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQk9CURPX1RDUF9OQlJSOworICAgIHRjcF9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemVfcmVxOworICAgIHRjcF9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplCT0JcnNzX3NpemVfcmVxOworICAgIHRjcF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCAgICAgID0JcmVtb3RlX3JlY3ZfYWxpZ247CisgICAgdGNwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CSAgICAgICAgPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgdGNwX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50ICAgICAgPQlyZW1vdGVfc2VuZF9hbGlnbjsKKyAgICB0Y3BfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQJICAgICAgICA9CXJlbW90ZV9zZW5kX29mZnNldDsKKyAgICB0Y3BfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplCT0JcmVxX3NpemU7CisgICAgdGNwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUJPQlyc3Bfc2l6ZTsKKyAgICB0Y3BfcnJfcmVxdWVzdC0+bm9fZGVsYXkJICAgICAgICA9CXJlbV9ub2RlbGF5OworICAgIHRjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdQkgICAgICAgID0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICB0Y3BfcnJfcmVxdWVzdC0+Y3B1X3JhdGUJICAgICAgICA9CXJlbW90ZV9jcHVfcmF0ZTsKKyAgICB0Y3BfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQJICAgICAgICA9CXJlbV9yY3Zhdm9pZDsKKyAgICB0Y3BfcnJfcmVxdWVzdC0+c29fc25kYXZvaWQJICAgICAgICA9CXJlbV9zbmRhdm9pZDsKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICB0Y3BfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RpbWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90cmFucyAqIC0xOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcgPiAxKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX3RjcF9uYnJyOiByZXF1ZXN0aW5nIFRDUCByciB0ZXN0XG4iKTsKKyAgICB9CisgICAgCisgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgCisgICAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgICAvKiBzb2NrZXQgcGFyYW1ldGVycyBmb3IgdGhpcyB0ZXN0IHR5cGUuIFdlIHdpbGwgcHV0IHRoZW0gYmFjayBpbnRvICovCisgICAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgICAgLyogcmVtb3RlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIENQVSBpZiBuZWNlc3NhcnksIGFuZCB3aWxsIGhhdmUgZG9uZQkqLworICAgIC8qIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUgY3B1IGxvY2FsbHkJKi8KKyAgICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodCovCisgICAgLyogYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZSB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQqLworICAgIC8qIGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcyB0aGUgaGFzc2xlIG9mIGV4dHJhIG1lc3NhZ2VzCSovCisgICAgLyogYmVpbmcgc2VudCBmb3IgdGhlIFRDUCB0ZXN0cy4JCQkJCSovCisgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworICAgICAgcnNyX3NpemUgICAgICAgICAgPSB0Y3BfcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisgICAgICByc3Nfc2l6ZSAgICAgICAgICA9IHRjcF9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICAgIHJlbV9ub2RlbGF5ICAgICAgID0gdGNwX3JyX3Jlc3BvbnNlLT5ub19kZWxheTsKKyAgICAgIHJlbW90ZV9jcHVfdXNhZ2UgID0gdGNwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKyAgICAgIHJlbW90ZV9jcHVfcmF0ZSAgID0gdGNwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKyAgICAgIC8qIG1ha2Ugc3VyZSB0aGF0IHBvcnQgbnVtYmVycyBhcmUgaW4gbmV0d29yayBvcmRlciAqLworICAgICAgc2VydmVyLnNpbl9wb3J0ICAgPSAodW5zaWduZWQgc2hvcnQpdGNwX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyOworICAgICAgc2VydmVyLnNpbl9wb3J0ICAgPSBodG9ucyhzZXJ2ZXIuc2luX3BvcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCSAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigiIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgICAgaWYgKGNvbm5lY3Qoc2VuZF9zb2NrZXQsIAorCQlyZW1vdGVfcmVzLT5haV9hZGRyLAorCQlyZW1vdGVfcmVzLT5haV9hZGRybGVuKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIG5vdyB0aGF0IHdlIGFyZSBjb25uZWN0ZWQsIG1hcmsgdGhlIHNvY2tldCBhcyBub24tYmxvY2tpbmcgKi8KKyAgICBpZiAoIXNldF9ub25ibG9jayhzZW5kX3NvY2tldCkpIHsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2V0X25vbmJsb2NrIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworI2lmZGVmIFdJTjMyCisgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgIC8qIFdpbmRvd3Mtc3BlY2lmaWMgd2F5IEkgY2FuIGZpbmQgdG8gZm9yY2UgdGhlIHdpbnNvY2sgY2FsbHMgdG8gKi8KKyAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAvKiBhbmQgc3VjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCByYWogMS85NiAqLworICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNlbmRfc29ja2V0OworI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciB0aGUgKi8KKyAgICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAgIC8qIGluZGljYXRlZCBhIHByb2JsZW0uIEkgZmFpbGVkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlIGV4dHJhICovCisgICAgLyogbWVzc2FnZSBhZnRlciB0aGUgYWNjZXB0IG9uIHRoZSByZW1vdGUuIElmIGl0IGZhaWxlZCwgd2UnbGwgc2VlIGl0ICovCisgICAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgICAKKyAgICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgdGhleSAqLworICAgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgICAKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgICB0aW1lc191cCA9IDA7CisgICAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgICAgdHJhbnNfcmVtYWluaW5nID0gdGVzdF9ieXRlczsKKyAgICAgIHRpbWVzX3VwID0gMTsKKyAgICB9CisgICAgCisgICAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAgIAorICAgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBJTlRFUlZBTFNfSU5JVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgCisgICAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuIEkgdGhpbmsgSSAqLworICAgIC8qIGp1c3QgYXJiaXRyYXJpbHkgZGVjcmVtZW50IHRyYW5zX3JlbWFpbmluZyBmb3IgdGhlIHRpbWVkIHRlc3QsIGJ1dCAqLworICAgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgICAgLyogdGhlIHNlbmQgYnVmZmVyIGFuZCB0aGUgcmVjZWl2ZSBidWZmZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKworICAgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAgIC8qIHNlbmQgdGhlIHJlcXVlc3QuIHdlIGFzc3VtZSB0aGF0IGlmIHdlIHVzZSBhIGJsb2NraW5nIHNvY2tldCwgKi8KKyAgICAgIC8qIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudCBhdCBvbmUgc2hvdC4gKi8KKyAgICAgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworCS8qIHRpbWVzdGFtcCBqdXN0IGJlZm9yZSBvdXIgY2FsbCB0byBzZW5kLCBhbmQgdGhlbiBhZ2FpbiBqdXN0ICovCisJLyogYWZ0ZXIgdGhlIHJlY2VpdmUgcmFqIDgvOTQgKi8KKwlISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgICAgIC8qIGV2ZW4gdGhvdWdoIHRoaXMgaXMgYSBub24tYmxvY2tpbmcgc29ja2V0LCB3ZSB3aWxsIGFzc3VtZSBmb3IgKi8KKyAgICAgIC8qIHRoZSB0aW1lIGJlaW5nIHRoYXQgd2Ugd2lsbCBiZSBhYmxlIHRvIHNlbmQgYW4gZW50aXJlIHJlcXVlc3QgKi8KKyAgICAgIC8qIHdpdGhvdXQgZ2V0dGluZyBhbiBFQUdBSU4gKi8KKyAgICAgIGlmKChsZW49c2VuZChzZW5kX3NvY2tldCwKKwkJICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgICByZXFfc2l6ZSwKKwkJICAgMCkpICE9IHJlcV9zaXplKSB7CisJaWYgKFNPQ0tFVF9FSU5UUihsZW4pKSB7CisJICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiBhICovCisJICAvKiB0aW1lZCB0ZXN0LiAqLworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKwlwZXJyb3IoInNlbmRfdGNwX25icnI6IGRhdGEgc2VuZCBlcnJvciIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisgICAgICAKKyAgICAgIC8qIHJlY2VpdmUgdGhlIHJlc3BvbnNlLiBzaW5jZSB3ZSBhcmUgdXNpbmcgbm9uLWJsb2NraW5nIEkvTywgd2UgKi8KKyAgICAgIC8qIHdpbGwgInNwaW4iIG9uIHRoZSByZWN2cyAqLworICAgICAgcnNwX2J5dGVzX2xlZnQgPSByc3Bfc2l6ZTsKKyAgICAgIHRlbXBfbWVzc2FnZV9wdHIgID0gcmVjdl9yaW5nLT5idWZmZXJfcHRyOworICAgICAgd2hpbGUocnNwX2J5dGVzX2xlZnQgPiAwKSB7CisJaWYoKHJzcF9ieXRlc19yZWN2ZD1yZWN2KHNlbmRfc29ja2V0LAorCQkJCSB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJCSByc3BfYnl0ZXNfbGVmdCwKKwkJCQkgMCkpID09IFNPQ0tFVF9FUlJPUikgeworCSAgaWYgKFNPQ0tFVF9FSU5UUihyc3BfYnl0ZXNfcmVjdmQpKQorCSAgeworCSAgICAvKiBXZSBoaXQgdGhlIGVuZCBvZiBhIHRpbWVkIHRlc3QuICovCisJICAgIHRpbWVkX291dCA9IDE7CisJICAgIGJyZWFrOworCSAgfQorI2lmbmRlZiBXSU4zMiAgLy8gQnV0IHdoYXQgZG9lcyBXaW5OVCBpbmRpY2F0ZSBpbiB0aGlzIHNpdHVhdGlvbi4uLgorCSAgZWxzZSBpZiAoZXJybm8gPT0gRUFHQUlOKSB7CisJICAgIFNldF9lcnJubygwKTsKKwkgICAgY29udGludWU7CisJICB9CisjZW5kaWYKKwkgIGVsc2UgeworCSAgICBwZXJyb3IoInNlbmRfdGNwX25icnI6IGRhdGEgcmVjdiBlcnJvciIpOworCSAgICBleGl0KDEpOworCSAgfQorCX0KKwlyc3BfYnl0ZXNfbGVmdCAtPSByc3BfYnl0ZXNfcmVjdmQ7CisJdGVtcF9tZXNzYWdlX3B0ciAgKz0gcnNwX2J5dGVzX3JlY3ZkOworICAgICAgfQkKKyAgICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKyAgICAgIAorICAgICAgaWYgKHRpbWVkX291dCkgeworCS8qIHdlIG1heSBoYXZlIGJlZW4gaW4gYSBuZXN0ZWQgd2hpbGUgbG9vcCAtIHdlIG5lZWQgKi8KKwkvKiBhbm90aGVyIGNhbGwgdG8gYnJlYWsuICovCisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwlISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworCUhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyNpZmRlZiBXQU5UX0lOVEVSVkFMUyAgICAgIAorICAgICAgSU5URVJWQUxTX1dBSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgICAgCisgICAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKwl0cmFuc19yZW1haW5pbmctLTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGRlYnVnID4gMykgeworCWlmICgobnVtbWVzc2FnZXMgJSAxMDApID09IDApIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgIlRyYW5zYWN0aW9uICVkIGNvbXBsZXRlZFxuIiwKKwkJICBudW1tZXNzYWdlcyk7CisJICBmZmx1c2god2hlcmUpOworCX0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IHdlIHVzZWQgdG8gY2FsbCBzaHV0ZG93biBvbiB0aGUgZGF0YSBzb2NrZXQgdG8gYmUgKi8KKyAgICAvKiBzdXJlIGFsbCB0aGUgZGF0YSB3YXMgZGVsaXZlcmVkLCBidXQgdGhpcyB3YXMgbm90IGdlcm1hbmUgaW4gYSAqLworICAgIC8qIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgYW5kIGl0IHdhcyBjYXVzaW5nIHRoZSB0ZXN0cyB0byAiaGFuZyIgd2hlbiAqLworICAgIC8qIHRoZXkgd2VyZSBiZWluZyBjb250cm9sbGVkIGJ5IHRpbWUuIFNvLCBJIGhhdmUgcmVwbGFjZWQgdGhpcyAqLworICAgIC8qIHNodXRkb3duIGNhbGwgd2l0aCBhIGNhbGwgdG8gY2xvc2UgdGhhdCBjYW4gYmUgZm91bmQgbGF0ZXIgaW4gdGhlICovCisgICAgLyogcHJvY2VkdXJlLiAqLworICAgIAorICAgIC8qIHRoaXMgY2FsbCB3aWxsIGFsd2F5cyBnaXZlIHVzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSB0ZXN0LCBhbmQgKi8KKyAgICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworICAgIAorICAgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyAqLworCQkJCQkJLyogbWVhc3VyZWQ/IGhvdyBsb25nICovCisJCQkJCQkvKiBkaWQgd2UgcmVhbGx5IHJ1bj8gKi8KKyAgICAKKyAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgICAvKiBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZiBpdCAqLworICAgIC8qIHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8KKyAgICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuICovCisgIAorICAgIGJ5dGVzX3hmZXJkCT0gKHJlcV9zaXplICogbnVtbWVzc2FnZXMpICsgKHJzcF9zaXplICogbnVtbWVzc2FnZXMpOworICAgIHRocnVwdXQJPSBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWU7CisgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgICAgLyogdGhlcmUgd2FzIG5vIGlkbGUgY291bnRlciBpbiB0aGUga2VybmVsKHMpLiBXZSBuZWVkIHRvIG1ha2UgKi8KKyAgICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWxvY2FsX2NwdV91dGlsaXphdGlvbiA9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKwkvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKwkvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisJLyogImdvb2QiIG51bWJlcnMgKi8KKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZCAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgICAgMC4wLAorCQkJCQkJICAgIDAuMCwKKwkJCQkJCSAgICAwKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWxvY2FsX2NwdV91dGlsaXphdGlvbgk9IChmbG9hdCkgLTEuMDsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gdGNwX3JyX3Jlc3VsdC0+Y3B1X3V0aWw7CisJLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisJLyogbXVsdGlwbHkgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBieSAxMDI0IHRvIGdldCAqLworCS8qICJnb29kIiBudW1iZXJzICovCisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgIDAuMCwKKwkJCQkJCSAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgIHRjcF9ycl9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICAgIAorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHdlIHdlcmUgbm90IG1lYXN1cmluZyBjcHUsIGZvciB0aGUgY29uZmlkZW5jZSBzdHVmZiwgd2UgKi8KKyAgICAgIC8qIHNob3VsZCBtYWtlIGl0IC0xLjAgKi8KKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbgk9IChmbG9hdCkgLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgfQorCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW5mb3JtYXRpb24uICovCisgICAgLyogaWYgZGVidWdnaW5nIGlzIG9uLCBjYWxjdWxhdGVfY29uZmlkZW5jZSB3aWxsIHByaW50LW91dCB0aGUgKi8KKyAgICAvKiBwYXJhbWV0ZXJzIHdlIHBhc3MgaXQgKi8KKyAgICAKKyAgICBjYWxjdWxhdGVfY29uZmlkZW5jZShjb25maWRlbmNlX2l0ZXJhdGlvbiwKKwkJCSBlbGFwc2VkX3RpbWUsCisJCQkgdGhydXB1dCwKKwkJCSBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSByZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgIAorICAgIAorICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uKys7CisKKyAgICAvKiB3ZSBhcmUgbm93IGRvbmUgd2l0aCB0aGUgc29ja2V0LCBzbyBjbG9zZSBpdCAqLworICAgIGNsb3NlKHNlbmRfc29ja2V0KTsKKworICB9CisKKyAgcmV0cmlldmVfY29uZmlkZW50X3ZhbHVlcygmZWxhcHNlZF90aW1lLAorCQkJICAgICZ0aHJ1cHV0LAorCQkJICAgICZsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgICAgJnJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkgICAgJmxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJICAgICZyZW1vdGVfc2VydmljZV9kZW1hbmQpOworCisgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworCisgIGlmIChjb25maWRlbmNlIDwgMCkgeworICAgIC8qIHdlIGRpZCBub3QgaGl0IGNvbmZpZGVuY2UsIGJ1dCB3ZXJlIHdlIGFza2VkIHRvIGxvb2sgZm9yIGl0PyAqLworICAgIGlmIChpdGVyYXRpb25fbWF4ID4gMSkgeworICAgICAgZGlzcGxheV9jb25maWRlbmNlKCk7CisgICAgfQorICB9CisKKyAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgbG9jYWxfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKGNwdV9tZXRob2QpOworICAgIHJlbW90ZV9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QodGNwX3JyX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJbG9jYWxfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogZ3Vlc3MgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LAorCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLAorCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIHRocnVwdXQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMSwJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwKKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlc3BvbnNlcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIHRocnVwdXQpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgcnNyX3NpemUpOworICAgICAgCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIC8qIGhvdyB0byBoYW5kbGUgdGhlIHZlcmJvc2UgaW5mb3JtYXRpb24gaW4gdGhlIHByZXNlbmNlIG9mICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGlzIHlldCB0byBiZSBkZXRlcm1pbmVkLi4uIHJhaiAxMS85NCAqLworICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgICAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCwKKwkgICAgbG9jYWxfc2VuZF9vZmZzZXQsCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCk7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuSGlzdG9ncmFtIG9mIHJlcXVlc3QvcmVzcG9uc2UgdGltZXNcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIH0KKyAgCit9CisMCisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgKG5ldHNlcnZlcikgc2lkZSBvZiBhIFRDUF9SUiAqLworIC8qIHRlc3QgKi8KK3ZvaWQgCityZWN2X3RjcF9uYnJyKCkKK3sKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBzdHJ1Y3QJc29ja2FkZHJfaW4gICAgICAgIG15YWRkcl9pbiwKKyAgcGVlcmFkZHJfaW47CisgIFNPQ0tFVAlzX2xpc3RlbixzX2RhdGE7CisgIG5ldHBlcmZfc29ja2xlbl90IAlhZGRybGVuOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludAlieXRlc19zZW50OworICBpbnQJcmVxdWVzdF9ieXRlc19yZWN2ZDsKKyAgaW50CXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nOworICBpbnQJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisgIAorICBzdHJ1Y3QJdGNwX3JyX3JlcXVlc3Rfc3RydWN0CSp0Y3BfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9ycl9yZXNwb25zZV9zdHJ1Y3QJKnRjcF9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXRjcF9ycl9yZXN1bHRzX3N0cnVjdAkqdGNwX3JyX3Jlc3VsdHM7CisgIAorICB0Y3BfcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3QgdGNwX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfcnJfcmVzcG9uc2UgPQorICAgIChzdHJ1Y3QgdGNwX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHRjcF9ycl9yZXN1bHRzID0KKyAgICAoc3RydWN0IHRjcF9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3ZfdGNwX25icnI6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfbmJycjogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBUQ1BfUlJfUkVTUE9OU0U7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9uYnJyOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIGFsbG9jYXRlIHRoZSByZWN2IGFuZCBzZW5kIHJpbmdzIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnRzICovCisgIC8qIGFuZCBvZmZzZXRzLiByYWogNy85NCAqLworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9uYnJyOiByZXF1ZXN0ZWQgcmVjdiBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICB0Y3BfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJICAgIHRjcF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfbmJycjogcmVxdWVzdGVkIHNlbmQgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgdGNwX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCSAgICB0Y3BfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBhdCBzb21lIHBvaW50LCB0aGVzZSBuZWVkIHRvIGNvbWUgdG8gdXMgZnJvbSB0aGUgcmVtb3RlIHN5c3RlbSAqLworICBpZiAoc2VuZF93aWR0aCA9PSAwKSBzZW5kX3dpZHRoID0gMTsKKyAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgcmVjdl93aWR0aCA9IDE7CisKKyAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICB0Y3BfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSwKKwkJCQkgICB0Y3BfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJCQkJICAgdGNwX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKworICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgIHRjcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUsCisJCQkJICAgdGNwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHRjcF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisKKyAgCisgIC8qIExldCdzIGNsZWFyLW91dCBvdXIgc29ja2FkZHIgZm9yIHRoZSBzYWtlIG9mIGNsZWFubGluZXMuIFRoZW4gd2UgKi8KKyAgLyogY2FuIHB1dCBpbiBPVVIgdmFsdWVzICEtKSBBdCBzb21lIHBvaW50LCB3ZSBtYXkgd2FudCB0byBuYWlsIHRoaXMgKi8KKyAgLyogc29ja2V0IHRvIGEgcGFydGljdWxhciBuZXR3b3JrLWxldmVsIGFkZHJlc3MsIGJ1dCBmb3Igbm93LCAqLworICAvKiBJTkFERFJfQU5ZIHNob3VsZCBiZSBqdXN0IGZpbmUuICovCisgIAorICBiemVybygoY2hhciAqKSZteWFkZHJfaW4sCisJc2l6ZW9mKG15YWRkcl9pbikpOworICBteWFkZHJfaW4uc2luX2ZhbWlseSAgICAgID0gQUZfSU5FVDsKKyAgbXlhZGRyX2luLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisgIG15YWRkcl9pbi5zaW5fcG9ydCAgICAgICAgPSBodG9ucygodW5zaWduZWQgc2hvcnQpdGNwX3JyX3JlcXVlc3QtPnBvcnQpOworICAKKyAgLyogR3JhYiBhIHNvY2tldCB0byBsaXN0ZW4gb24sIGFuZCB0aGVuIGxpc3RlbiBvbiBpdC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX25icnI6IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogY3JlYXRlX2RhdGFfc29ja2V0IGV4cGVjdHMgdG8gZmluZCBzb21lIHRoaW5ncyBpbiB0aGUgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcywgc28gc2V0IHRoZSBnbG9iYWxzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuICovCisgIC8qIG9uY2UgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCB3ZSB3aWxsIHNldCB0aGUgcmVzcG9uc2UgdmFsdWVzICovCisgIC8qIGJhc2VkIG9uIHRoZSB1cGRhdGVkIHZhbHVlIG9mIHRob3NlIGdsb2JhbHMuIHJhaiA3Lzk0ICovCisgIGxzc19zaXplX3JlcSA9IHRjcF9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZV9yZXEgPSB0Y3BfcnJfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZTsKKyAgbG9jX25vZGVsYXkgPSB0Y3BfcnJfcmVxdWVzdC0+bm9fZGVsYXk7CisgIGxvY19yY3Zhdm9pZCA9IHRjcF9ycl9yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0gdGNwX3JyX3JlcXVlc3QtPnNvX3NuZGF2b2lkOworICAKKyAgc2V0X2hvc3RuYW1lX2FuZF9wb3J0KGxvY2FsX25hbWUsCisJCQlwb3J0X2J1ZmZlciwKKwkJCW5mX3RvX2FmKHRjcF9ycl9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQl0Y3BfcnJfcmVxdWVzdC0+cG9ydCk7CisKKyAgbG9jYWxfcmVzID0gY29tcGxldGVfYWRkcmluZm8obG9jYWxfbmFtZSwKKwkJCQlsb2NhbF9uYW1lLAorCQkJCXBvcnRfYnVmZmVyLAorCQkJCW5mX3RvX2FmKHRjcF9ycl9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQkJU09DS19TVFJFQU0sCisJCQkJSVBQUk9UT19UQ1AsCisJCQkJMCk7CisKKyAgc19saXN0ZW4gPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgCisgIGlmIChzX2xpc3RlbiA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIExldCdzIGdldCBhbiBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoaXMgc29ja2V0IHNvIHdlIGNhbiB0ZWxsIHRoZSAqLworICAvKiBpbml0aWF0b3IgaG93IHRvIHJlYWNoIHRoZSBkYXRhIHNvY2tldC4gVGhlcmUgbWF5IGJlIGEgZGVzaXJlIHRvICovCisgIC8qIG5haWwgdGhpcyBzb2NrZXQgdG8gYSBzcGVjaWZpYyBJUCBhZGRyZXNzIGluIGEgbXVsdGktaG9tZWQsICovCisgIC8qIG11bHRpLWNvbm5lY3Rpb24gc2l0dWF0aW9uLCBidXQgZm9yIG5vdywgd2UnbGwgaWdub3JlIHRoZSBpc3N1ZSAqLworICAvKiBhbmQgY29uY2VudHJhdGUgb24gc2luZ2xlIGNvbm5lY3Rpb24gdGVzdGluZy4gKi8KKyAgCisgIGlmIChiaW5kKHNfbGlzdGVuLAorCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLAorCSAgIHNpemVvZihteWFkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93LCBsZXQncyBzZXQtdXAgdGhlIHNvY2tldCB0byBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zICovCisgIGlmIChsaXN0ZW4oc19saXN0ZW4sIDUpID09IFNPQ0tFVF9FUlJPUikgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAKKyAgLyogbm93IGdldCB0aGUgcG9ydCBudW1iZXIgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSAgKi8KKyAgYWRkcmxlbiA9IHNpemVvZihteWFkZHJfaW4pOworICBpZiAoZ2V0c29ja25hbWUoc19saXN0ZW4sCisJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfaW4sICZhZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3cgbXlhZGRyX2luIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzICovCisgIC8qIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0IHRoZSAqLworICAvKiBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiAqLworICAKKyAgdGNwX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyID0gKGludCkgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICB0Y3BfcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICB0Y3BfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMDsKKworICBpZiAodGNwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgdGNwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgdGNwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUodGNwX3JyX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgdGNwX3JyX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHRjcF9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworICB0Y3BfcnJfcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHRjcF9ycl9yZXNwb25zZS0+c29fcmN2YXZvaWQgPSBsb2NfcmN2YXZvaWQ7CisgIHRjcF9ycl9yZXNwb25zZS0+c29fc25kYXZvaWQgPSBsb2Nfc25kYXZvaWQ7CisgIHRjcF9ycl9yZXNwb25zZS0+dGVzdF9sZW5ndGggPSB0Y3BfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGg7CisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworICAKKyAgaWYgKChzX2RhdGEgPSBhY2NlcHQoc19saXN0ZW4sCisJCSAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnBlZXJhZGRyX2luLAorCQkgICAgICAgJmFkZHJsZW4pKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIC8qIExldCdzIGp1c3QgcHVudC4gVGhlIHJlbW90ZSB3aWxsIGJlIGdpdmVuIHNvbWUgaW5mb3JtYXRpb24gKi8KKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfbmJycjogYWNjZXB0IGNvbXBsZXRlcyBvbiB0aGUgZGF0YSBjb25uZWN0aW9uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisjaWZkZWYgS0xVREdFX1NPQ0tFVF9PUFRJT05TCisgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MgKi8KKyAgLyogYXR0cmlidXRlcyBhY3Jvc3MgYW4gYWNjZXB0KCkgY2FsbC4gSW5jbHVkaW5nIHRoaXMgZ29lcyBhZ2FpbnN0ICovCisgIC8qIG15IGJldHRlciBqdWRnZW1lbnQgOiggcmFqIDExLzk1ICovCisKKyAga2x1ZGdlX3NvY2tldF9vcHRpb25zKHNfZGF0YSk7CisKKyNlbmRpZiAvKiBLTFVER0VfU09DS0VUX09QVElPTlMgKi8KKyAgICAKKyAgLyogbm93IHRoYXQgd2UgYXJlIGNvbm5lY3RlZCwgbWFyayB0aGUgc29ja2V0IGFzIG5vbi1ibG9ja2luZyAqLworICBpZiAoIXNldF9ub25ibG9jayhzX2RhdGEpKSB7CisgICAgY2xvc2Uoc19kYXRhKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydCh0Y3BfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworCisjaWZkZWYgV0lOMzIKKyAgLyogdGhpcyBpcyB1c2VkIHNvIHRoZSB0aW1lciB0aHJlYWQgY2FuIGNsb3NlIHRoZSBzb2NrZXQgb3V0IGZyb20gKi8KKyAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAvKiByZXR1cm4gV1NBRUlOVFIgd2l0aCB0aGUgdGVzdCBpcyBvdmVyLiBhbnl0aGluZyB0aGF0IHdpbGwgcnVuIG9uICovCisgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0ID0gc19kYXRhOworI2VuZGlmIC8qIFdJTjMyICovCisgIAorICAvKiBUaGUgbG9vcCB3aWxsIGV4aXQgd2hlbiB0aGUgc2VuZGVyIGRvZXMgYSBzaHV0ZG93biwgd2hpY2ggd2lsbCAqLworICAvKiByZXR1cm4gYSBsZW5ndGggb2YgemVybyAgICovCisgIAorICBpZiAodGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHRjcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0gdGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICogLTE7CisgIH0KKworICB0cmFuc19yZWNlaXZlZCA9IDA7CisgIAorICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgdGVtcF9tZXNzYWdlX3B0ciA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICByZXF1ZXN0X2J5dGVzX3JlbWFpbmluZwk9IHRjcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemU7CisgICAgd2hpbGUocmVxdWVzdF9ieXRlc19yZW1haW5pbmcgPiAwKSB7CisgICAgICBpZigocmVxdWVzdF9ieXRlc19yZWN2ZD1yZWN2KHNfZGF0YSwKKwkJCQkgICB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJCSAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nLAorCQkJCSAgIDApKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkgICAgaWYgKCBTT0NLRVRfRUlOVFIocmVxdWVzdF9ieXRlc19yZWN2ZCkpCisJCXsKKwkgICAgICAvKiB0aGUgdGltZXIgcG9wcGVkICovCisJICAgICAgdGltZWRfb3V0ID0gMTsKKwkgICAgICBicmVhazsKKwkJfQorI2lmbmRlZiBXSU4zMiAgLy8gQnV0IHdoYXQgZG9lcyBXaW5OVCBpbmRpY2F0ZSBpbiB0aGlzIHNpdHVhdGlvbi4uLgorCSAgICBlbHNlIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKKwkgICAgICBTZXRfZXJybm8oMCk7CisJICAgICAgaWYgKHRpbWVzX3VwKSB7CisJICAgICAgICB0aW1lZF9vdXQgPSAxOworCSAgICAgICAgYnJlYWs7CisJCSAgfQorCSAgICAgIGNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkgICAgZWxzZSB7CisJICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKwkgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisJICAgICAgZXhpdCgxKTsKKwkJfQorICAgICAgfQorICAgICAgZWxzZSB7CisJcmVxdWVzdF9ieXRlc19yZW1haW5pbmcgLT0gcmVxdWVzdF9ieXRlc19yZWN2ZDsKKwl0ZW1wX21lc3NhZ2VfcHRyICArPSByZXF1ZXN0X2J5dGVzX3JlY3ZkOworICAgICAgfQorICAgIH0KKworICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworICAgIGlmICh0aW1lZF9vdXQpIHsKKyAgICAgIC8qIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IGJhc2VkIG9uIHRpbWUgLSBsZXRzICovCisgICAgICAvKiBiYWlsIG91dCBvZiBoZXJlIG5vdy4uLiAqLworICAgICAgZnByaW50Zih3aGVyZSwieW81XG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CQkJCQkJCisgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgLyogTm93LCBzZW5kIHRoZSByZXNwb25zZSB0byB0aGUgcmVtb3RlICovCisgICAgaWYoKGJ5dGVzX3NlbnQ9c2VuZChzX2RhdGEsCisJCQlzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCQl0Y3BfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSwKKwkJCTApKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIGlmIChTT0NLRVRfRUlOVFIoYnl0ZXNfc2VudCkpIHsKKwkvKiB0aGUgdGVzdCB0aW1lciBoYXMgcG9wcGVkICovCisJdGltZWRfb3V0ID0gMTsKKwlmcHJpbnRmKHdoZXJlLCJ5bzZcbiIpOworCWZmbHVzaCh3aGVyZSk7CQkJCQkJCisJYnJlYWs7CisgICAgICB9CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IDk5MjsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKworICAgIHRyYW5zX3JlY2VpdmVkKys7CisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICB9CisgIAorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0byB0aW1lb3V0IG9yIHRyYW5zYWN0aW9uIGNvdW50IGJlaW5nICovCisgIC8qIHJlYWNoZWQgKi8KKyAgCisgIGNwdV9zdG9wKHRjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIHN0b3BfdGltZXIoKTsKKworICBpZiAodGltZWRfb3V0KSB7CisgICAgLyogd2UgZW5kZWQgdGhlIHRlc3QgYnkgdGltZSwgd2hpY2ggd2FzIGF0IGxlYXN0IDIgc2Vjb25kcyAqLworICAgIC8qIGxvbmdlciB0aGFuIHdlIHdhbnRlZCB0byBydW4uIHNvLCB3ZSB3YW50IHRvIHN1YnRyYWN0ICovCisgICAgLyogUEFEX1RJTUUgZnJvbSB0aGUgZWxhcHNlZF90aW1lLiAqLworICAgIGVsYXBzZWRfdGltZSAtPSBQQURfVElNRTsKKyAgfQorCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3BfbmJycjogZ290ICVkIHRyYW5zYWN0aW9uc1xuIiwKKwkgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHRjcF9ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZCA9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCSAgICAodGNwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSArIAorCQkJCSAgICAgdGNwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUpKTsKKyAgdGNwX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkID0gdHJhbnNfcmVjZWl2ZWQ7CisgIHRjcF9ycl9yZXN1bHRzLT5lbGFwc2VkX3RpbWUgICA9IGVsYXBzZWRfdGltZTsKKyAgdGNwX3JyX3Jlc3VsdHMtPmNwdV9tZXRob2QgICAgID0gY3B1X21ldGhvZDsKKyAgdGNwX3JyX3Jlc3VsdHMtPm51bV9jcHVzICAgICAgID0gbGliX251bV9sb2NfY3B1czsKKyAgaWYgKHRjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHRjcF9ycl9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoZWxhcHNlZF90aW1lKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfdGNwX25icnI6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIHdlIGFyZSBkb25lIHdpdGggdGhlIHNvY2tldCwgZnJlZSBpdCAqLworICBjbG9zZShzX2RhdGEpOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisKKyNlbmRpZiAvKiBET19OQlJSICovCisMCisKKyAvKiB0aGlzIHRlc3QgaXMgaW50ZW5kZWQgdG8gdGVzdCB0aGUgcGVyZm9ybWFuY2Ugb2YgZXN0YWJsaXNoaW5nIGEgKi8KKyAvKiBjb25uZWN0aW9uLCBhbmQgdGhlbiBjbG9zaW5nIGl0IGFnYWluLiB0aGlzIHRlc3QgaXMgb2Ygc29tZXdoYXQgKi8KKyAvKiBhcmNhbmUgaW50ZXJlc3Qgc2luY2Ugbm8gcGFja2V0cyBhcmUgZXhjaGFuZ2VkIGJldHdlZW4gdGhlICovCisgLyogdXNlci1zcGFjZSBwcm9jZXNzZXMsIGJ1dCBpdCB3aWxsIHNob3cgdGhlIHJhdyBvdmVyaGVhZCBvZiAqLworIC8qIGVzdGFibGlzaGluZyBhIFRDUCBjb25uZWN0aW9uLiB0aGF0IHNlcnZpY2UgZGVtYW5kIGNvdWxkIHRoZW4gYmUgKi8KKyAvKiBjb21wYXJlZCB3aXRoIHRoZSBzdW0gb2YgdGhlIHNlcnZpY2UgZGVtYW5kcyBvZiBhIFRDUF9DUlIgYW5kICovCisgLyogVENQX1JSIHRlc3QgLSBwcmVzdW1lYWJseSwgdGhleSB3b3VsZCBhbGwgcmVsYXRlICovCisKK3ZvaWQKK3NlbmRfdGNwX2NjKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgXG4iOworICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0IFJlc3AuICBFbGFwc2VkIFRyYW5zLiAgIENQVSAgICBDUFUgICAgUy5kZW0gICBTLmRlbVxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIFJhdGUgICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAgICAgICUlICAgICAgdXMvVHIgICB1cy9UclxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2ZcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAlLTZkICUtNi4yZiAgJS02LjJmICAgJS02LjJmICUtNi4yZiAlLTYuM2YgICUtNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlxuXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0XG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdlxuXAorJTVkICAlNWQgICAlNWQgICU1ZFxuIjsKKyAgCisgIAorICBpbnQJCQl0aW1lZF9vdXQgPSAwOworICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIGNoYXIJdGVtcF9tZXNzYWdlX3B0clsxXTsKKyAgaW50CW51bW1lc3NhZ2VzOworICBTT0NLRVQJc2VuZF9zb2NrZXQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGRvdWJsZQlieXRlc194ZmVyZDsKKyAgaW50CXJzcF9ieXRlc19sZWZ0ID0gMTsKKyAgaW50CXJzcF9ieXRlc19yZWN2ZDsKKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzOworCisgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cG9ydDsKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OworCisgIHN0cnVjdAl0Y3BfY2NfcmVxdWVzdF9zdHJ1Y3QJKnRjcF9jY19yZXF1ZXN0OworICBzdHJ1Y3QJdGNwX2NjX3Jlc3BvbnNlX3N0cnVjdAkqdGNwX2NjX3Jlc3BvbnNlOworICBzdHJ1Y3QJdGNwX2NjX3Jlc3VsdHNfc3RydWN0CSp0Y3BfY2NfcmVzdWx0OworICAKKyAgdGNwX2NjX3JlcXVlc3QgPSAKKyAgICAoc3RydWN0IHRjcF9jY19yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX2NjX3Jlc3BvbnNlID0gCisgICAgKHN0cnVjdCB0Y3BfY2NfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgdGNwX2NjX3Jlc3VsdCA9CisgICAgKHN0cnVjdCB0Y3BfY2NfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICB0aW1lX2hpc3QgPSBISVNUX25ldygpOworICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgIC8qIGNvbnRyb2wgc29ja2V0LCBhbmQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBkaWZmZXJlbnQgKi8KKyAgLyogcHJvdG9jb2xzIGFuZCBzdWNoLCB3ZSBhcmUgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaG9zdCBhbmQgKi8KKyAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworICAKKyAgY29tcGxldGVfYWRkcmluZm9zKCZyZW1vdGVfcmVzLAorCQkgICAgICZsb2NhbF9yZXMsCisJCSAgICAgcmVtb3RlX2hvc3QsCisJCSAgICAgU09DS19TVFJFQU0sCisJCSAgICAgSVBQUk9UT19UQ1AsCisJCSAgICAgMCk7CisKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIHByaW50X3RvcF90ZXN0X2hlYWRlcigiVENQIENvbm5lY3QvQ2xvc2UgVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICB9CisgIAorICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzICovCisgIAorICBudW1tZXNzYWdlcwk9CTA7CisgIGJ5dGVzX3hmZXJkCT0JMC4wOworICB0aW1lc191cCAJPSAJMDsKKyAgCisgIC8qIHNpbmNlIHRoZXJlIGFyZSBubyBkYXRhIGJ1ZmZlcnMgaW4gdGhpcyB0ZXN0LCB3ZSBuZWVkIG5vIHNlbmQgb3IgKi8KKyAgLyogcmVjdiByaW5ncyAqLworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfdGNwX2NjOiBzZW5kX3NvY2tldCBvYnRhaW5lZC4uLlxuIik7CisgIH0KKyAgCisgIC8qIElmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgY3B1IHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cywgd2UgbXVzdCAqLworICAvKiBjYWxpYnJhdGUgdGhlIGNwdShzKS4gV2Ugd2lsbCBwZXJmb3JtIHRoaXMgdGFzayB3aXRoaW4gdGhlIHRlc3RzICovCisgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgIC8qIGNhbGlicmF0ZV9sb2NhbF9jcHUgd2lsbCByZXR1cm4gcmF0aGVyIHF1aWNrbHkgYXMgaXQgd2lsbCBoYXZlICovCisgIC8qIG5vdGhpbmcgdG8gZG8uIElmIGxvY2FsX2NwdV9yYXRlIGlzIHplcm8sIHRoZW4gd2Ugd2lsbCBnbyB0aHJvdWdoICovCisgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiovCisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgfQorICAKKyAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlIHNvY2tldCAqLworICAvKiBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgKi8KKyAgLyogYWxsIHRoZSB2YWx1ZXMgYmVpbmcgcGFzc2VkIGluIHRoZSBzZXR1cCBtZXNzYWdlLiBJZiB0aGUgdXNlciBkaWQgKi8KKyAgLyogbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGV5IHdpbGwgYmUgcGFzc2VkIGFzIDAsIHdoaWNoICovCisgIC8qIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZSB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyAqLworICAvKiBkZWZhdWx0IHNob3VsZCBiZSB1c2VkLiBBbGlnbm1lbnQgaXMgdGhlIGV4Y2VwdGlvbiwgaXQgd2lsbCAqLworICAvKiBkZWZhdWx0IHRvIDgsIHdoaWNoIHdpbGwgYmUgbm8gYWxpZ25tZW50IGFsdGVyYXRpb25zLiAqLworICAKKyAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlCT0JRE9fVENQX0NDOworICB0Y3BfY2NfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZQkgICAgICAgID0JcnNyX3NpemVfcmVxOworICB0Y3BfY2NfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZQkgICAgICAgID0JcnNzX3NpemVfcmVxOworICB0Y3BfY2NfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQJPQlyZW1vdGVfcmVjdl9hbGlnbjsKKyAgdGNwX2NjX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CSAgICAgICAgPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgIHRjcF9jY19yZXF1ZXN0LT5zZW5kX2FsaWdubWVudAk9CXJlbW90ZV9zZW5kX2FsaWduOworICB0Y3BfY2NfcmVxdWVzdC0+c2VuZF9vZmZzZXQJICAgICAgICA9CXJlbW90ZV9zZW5kX29mZnNldDsKKyAgdGNwX2NjX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZQkgICAgICAgID0JcmVxX3NpemU7CisgIHRjcF9jY19yZXF1ZXN0LT5yZXNwb25zZV9zaXplCSAgICAgICAgPQlyc3Bfc2l6ZTsKKyAgdGNwX2NjX3JlcXVlc3QtPm5vX2RlbGF5CSAgICAgICAgPQlyZW1fbm9kZWxheTsKKyAgdGNwX2NjX3JlcXVlc3QtPm1lYXN1cmVfY3B1CSAgICAgICAgPQlyZW1vdGVfY3B1X3VzYWdlOworICB0Y3BfY2NfcmVxdWVzdC0+Y3B1X3JhdGUJICAgICAgICA9CXJlbW90ZV9jcHVfcmF0ZTsKKyAgdGNwX2NjX3JlcXVlc3QtPnNvX3JjdmF2b2lkCT0JcmVtX3JjdmF2b2lkOworICB0Y3BfY2NfcmVxdWVzdC0+c29fc25kYXZvaWQJPQlyZW1fc25kYXZvaWQ7CisgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICB0Y3BfY2NfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RpbWU7CisgIH0KKyAgZWxzZSB7CisgICAgdGNwX2NjX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90cmFucyAqIC0xOworICB9CisgIHRjcF9jY19yZXF1ZXN0LT5wb3J0ICAgICAgICAgID0gYXRvaShyZW1vdGVfZGF0YV9wb3J0KTsKKyAgdGNwX2NjX3JlcXVlc3QtPmlwZmFtaWx5ICA9IGFmX3RvX25mKHJlbW90ZV9yZXMtPmFpX2ZhbWlseSk7CisKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfdGNwX2NjOiByZXF1ZXN0aW5nIFRDUCBjcnIgdGVzdFxuIik7CisgIH0KKyAgCisgIHNlbmRfcmVxdWVzdCgpOworICAKKyAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAJKi8KKyAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodAkqLworICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodAkqLworICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAvKiBiZWluZyBzZW50IGZvciB0aGUgVENQIHRlc3RzLgkJCQkJKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICByc3Jfc2l6ZQk9CXRjcF9jY19yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKyAgICByc3Nfc2l6ZQk9CXRjcF9jY19yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICByZW1fbm9kZWxheQk9CXRjcF9jY19yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgcmVtb3RlX2NwdV91c2FnZT0JdGNwX2NjX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKyAgICByZW1vdGVfY3B1X3JhdGUgPSAJdGNwX2NjX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKyAgICAvKiBtYWtlIHN1cmUgdGhhdCBwb3J0IG51bWJlcnMgYXJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICBzZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcywodW5zaWduZWQgc2hvcnQpdGNwX2NjX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyKTsKKworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcG9ydCBpcyAlZFxuIixnZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcykpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgIHBlcnJvcigiIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgREVNT19SUl9TRVRVUCgxMDApCisjZW5kaWYKKyAgCisgIC8qIHBpY2sgYSBuaWNlIHJhbmRvbSBzcG90IGJldHdlZW4gY2xpZW50X3BvcnRfbWluIGFuZCAqLworICAvKiBjbGllbnRfcG9ydF9tYXggZm9yIG91ciBpbml0aWFsIHBvcnQgbnVtYmVyICovCisgIHNyYW5kKGdldHBpZCgpKTsKKyAgaWYgKGNsaWVudF9wb3J0X21heCAtIGNsaWVudF9wb3J0X21pbikgeworICAgIG15cG9ydCA9IGNsaWVudF9wb3J0X21pbiArIAorICAgICAgKHJhbmQoKSAlIChjbGllbnRfcG9ydF9tYXggLSBjbGllbnRfcG9ydF9taW4pKTsKKyAgfQorICBlbHNlIHsKKyAgICBteXBvcnQgPSBjbGllbnRfcG9ydF9taW47CisgIH0KKyAgLyogdGhlcmUgd2lsbCBiZSBhICsrIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBiaW5kLCBzbyBzdWJ0cmFjdCBvbmUgKi8KKyAgbXlwb3J0LS07CisgIAorICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgdGhleSAqLworICAvKiBjYW4gYmUgZWl0aGVyIHRpbWUgb3IgdHJhbnNhY3Rpb24gYmFzZWQuICovCisgIAorICBpZiAodGVzdF90aW1lKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICB0cmFuc19yZW1haW5pbmcgPSB0ZXN0X2J5dGVzOworICAgIHRpbWVzX3VwID0gMTsKKyAgfQorICAKKyAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAvKiB2YWx1ZSBvZiB0aGUgaWRsZSBjb3VudGVyIGZvciBsYXRlciB1c2UgaW4gbWVhc3VyaW5nIGNwdSAqLworICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgIAorICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKworI2lmZGVmIFdBTlRfREVNTworICBpZiAoZGVtb19tb2RlKSB7CisgICAgSElTVF90aW1lc3RhbXAoZGVtb19vbmVfcHRyKTsKKyAgfQorI2VuZGlmCisKKyAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gKi8KKyAgLyogV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3Qgd2lsbCAqLworICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiBJIHRoaW5rIEkgKi8KKyAgLyoganVzdCBhcmJpdHJhcmlseSBkZWNyZW1lbnQgdHJhbnNfcmVtYWluaW5nIGZvciB0aGUgdGltZWQgdGVzdCwgYnV0ICovCisgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgIC8qIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSB0aGUgc2FtZSBidWZmZXIuICovCisKKyAgd2hpbGUgKCghdGltZXNfdXApIHx8ICh0cmFuc19yZW1haW5pbmcgPiAwKSkgeworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgICAgLyogdGltZXN0YW1wIGp1c3QgYmVmb3JlIG91ciBjYWxsIHRvIGNyZWF0ZSB0aGUgc29ja2V0LCBhbmQgdGhlbiAqLworICAgICAgLyogYWdhaW4ganVzdCBhZnRlciB0aGUgcmVjZWl2ZSByYWogMy85NSAqLworICAgICAgSElTVF90aW1lc3RhbXAoJnRpbWVfb25lKTsKKyAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworICAgIC8qIHNldCB1cCB0aGUgZGF0YSBzb2NrZXQgKi8KKyAgICAvKiBuZXdwb3J0OiBpcyB0aGlzIGxhYmVsIHJlYWxseSByZXF1aXJlZCBhbnkgbG9uZ2VyPyAqLworICAgIC8qIHBpY2sgYSBuZXcgcG9ydCBudW1iZXIgKi8KKyAgICBteXBvcnQrKzsKKworICAgIC8qIHdyYXAgdGhlIHBvcnQgbnVtYmVyIHdoZW4gd2UgZ2V0IHRvIGNsaWVudF9wb3J0X21heC4gTk9URSwgc29tZSAqLworICAgIC8qIGJyb2tlbiBUQ1AncyBtaWdodCB0cmVhdCB0aGUgcG9ydCBudW1iZXIgYXMgYSBzaWduZWQgMTYgYml0ICovCisgICAgLyogcXVhbnRpdHkuICB3ZSBhcmVuJ3QgaW50ZXJlc3RlZCBpbiB0ZXN0aW5nIHN1Y2ggYnJva2VuICovCisgICAgLyogaW1wbGVtZW50YXRpb25zIDopIHNvIHdlIHdvbid0IG1ha2Ugc3VyZSB0aGF0IGl0IGlzIGJlbG93IDMyNzY3ICovCisgICAgLyogcmFqIDgvOTQgICovCisgICAgaWYgKG15cG9ydCA+PSBjbGllbnRfcG9ydF9tYXgpIHsKKyAgICAgIG15cG9ydCA9IGNsaWVudF9wb3J0X21pbjsKKyAgICB9CisKKyAgICAvKiB3ZSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIHBvcnQgbnVtYmVyIHRoYXQgdGhlIHNlcnZlciBpcyAqLworICAgIC8qIHNpdHRpbmcgYXQgLSB0aGlzIHdvdWxkIGNhdXNlIHVzIHRvIGZhaWwgaW4gYSBsb29wYmFjayB0ZXN0LiB3ZSAqLworICAgIC8qIGNvdWxkIGp1c3QgcmVseSBvbiB0aGUgZmFpbHVyZSBvZiB0aGUgYmluZCB0byBnZXQgdXMgcGFzdCB0aGlzLCAqLworICAgIC8qIGJ1dCBJJ20gZ3Vlc3NpbmcgdGhhdCBpbiB0aGlzIG9uZSBjYXNlIGF0IGxlYXN0LCBpdCBpcyBtdWNoICovCisgICAgLyogZmFzdGVyLCBnaXZlbiB0aGF0IHdlICprbm93KiB0aGF0IHBvcnQgbnVtYmVyIGlzIGFscmVhZHkgaW4gdXNlICovCisgICAgLyogKG9yIHJhdGhlciB3b3VsZCBiZSBpbiBhIGxvb3BiYWNrIHRlc3QpICovCisKKyAgICBpZiAobXlwb3J0ID09IGdldF9wb3J0X251bWJlcihyZW1vdGVfcmVzKSkgbXlwb3J0Kys7CisKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGlmICgobnVtbWVzc2FnZXMgJSAxMDApID09IDApIHsKKwlwcmludGYoInBvcnQgJWRcbiIsbXlwb3J0KTsKKyAgICAgIH0KKyAgICB9CisgICAgc2V0X3BvcnRfbnVtYmVyKGxvY2FsX3JlcywgKHVuc2lnbmVkIHNob3J0KW15cG9ydCk7CisgICAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKworICAgIGlmIChzZW5kX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3RjcF9jYzogdGNwIHN0cmVhbSBkYXRhIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyNpZmRlZiBXSU4zMgorICAgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgICAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgICAvKiBXaW5kb3dzLXNwZWNpZmljIHdheSBJIGNhbiBmaW5kIHRvIGZvcmNlIHRoZSB3aW5zb2NrIGNhbGxzIHRvICovCisgICAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgICAgLyogYW5kIHN1Y2ggd291bGQgYmUgYXBwcmVjaWF0ZWQgcmFqIDEvOTYgKi8KKyAgICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNlbmRfc29ja2V0OworI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiB3ZSB1c2VkIHRvIGhhdmUgYSBjYWxsIHRvIGJpbmQoKSBoZXJlLCBidXQgdGhhdCBpcyBiZWluZworICAgICAgIHRha2VuIGNhcmUgb2YgYnkgY3JlYXRlX2RhdGFfc29ja2V0KCkuIHJhaiAyMDA1LTAyLTA4ICovCisKKyAgICAvKiBDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgICAgaWYgKChyZXQgPSBjb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJICAgICAgIHJlbW90ZV9yZXMtPmFpX2FkZHIsCisJCSAgICAgICByZW1vdGVfcmVzLT5haV9hZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgaWYgKFNPQ0tFVF9FSU5UUihyZXQpKQorCSAgeworCSAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiBhICovCisJICAgIC8qIHRpbWVkIHRlc3QuICovCisJICAgIHRpbWVkX291dCA9IDE7CisJICAgIGJyZWFrOworICAgICAgfQorICAgICAgcGVycm9yKCJuZXRwZXJmOiBkYXRhIHNvY2tldCBjb25uZWN0IGZhaWxlZCIpOworICAgICAgcHJpbnRmKCJcdGF0dGVtcHRlZCB0byBjb25uZWN0IG9uIHNvY2tldCAlZCB0byBwb3J0ICVkIiwKKwkgICAgIHNlbmRfc29ja2V0LAorCSAgICAgZ2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMpKTsKKyAgICAgIHByaW50ZigiIGZyb20gcG9ydCAldSBcbiIsZ2V0X3BvcnRfbnVtYmVyKGxvY2FsX3JlcykpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICAvKiB3ZSBoYW5nIGluIGEgcmVjdigpIHRvIGdldCB0aGUgcmVtb3RlJ3MgY2xvc2UgaW5kaWNhdGlvbiAqLworCisgICAgcnNwX2J5dGVzX3JlY3ZkPXJlY3Yoc2VuZF9zb2NrZXQsCisJCQkgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCSByc3BfYnl0ZXNfbGVmdCwKKwkJCSAwKTsKKworCisgICAgaWYgKHJzcF9ieXRlc19yZWN2ZCA9PSAwKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlLCBjYWxsIGNsb3NlLiB3ZSBhc3N1bWUgdGhhdCB0aGUgcmVxdWlzaXRlICovCisgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkICovCisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwlISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworCUhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgICAgREVNT19SUl9JTlRFUlZBTCgxKQorI2VuZGlmCisKKyAgICAgIG51bW1lc3NhZ2VzKys7ICAgICAgICAgIAorICAgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworCXRyYW5zX3JlbWFpbmluZy0tOworICAgICAgfQorICAgIAorICAgICAgaWYgKGRlYnVnID4gMykgeworCWZwcmludGYod2hlcmUsCisJCSJUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZWQgb24gbG9jYWwgcG9ydCAldVxuIiwKKwkJbnVtbWVzc2FnZXMsCisJCWdldF9wb3J0X251bWJlcihsb2NhbF9yZXMpKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorCisgICAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBpdCB3YXMgbGVzcyB0aGFuIHplcm8gLSBhbiBlcnJvciBvY2N1cmVkICovCisgICAgICBpZiAoU09DS0VUX0VJTlRSKHJzcF9ieXRlc19yZWN2ZCkpCisJICB7CisJICAgIC8qIFdlIGhpdCB0aGUgZW5kIG9mIGEgdGltZWQgdGVzdC4gKi8KKwkgICAgdGltZWRfb3V0ID0gMTsKKwkgICAgYnJlYWs7CisJICB9CisJICBwZXJyb3IoInNlbmRfdGNwX2NjOiBkYXRhIHJlY3YgZXJyb3IiKTsKKwkgIGV4aXQoMSk7CisgICAgfQorICAgICAgCisgIH0KKworICAKKyAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworCisgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyBtZWFzdXJlZD8gKi8KKyAgLyogaG93IGxvbmcgZGlkIHdlIHJlYWxseSBydW4/ICovCisgIAorICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgLyogY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nIHRoaW5ncy4gSWYgaXQgKi8KKyAgLyogd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLworICAKKyAgcmVjdl9yZXNwb25zZSgpOworICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgaWYgKGRlYnVnKQorICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCIiKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZSBmdXR1cmUsICovCisgIC8qIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dCBtZWFzdXJlZCBieSAqLworICAvKiB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgVENQIHN0cmVhbSB0ZXN0LCAqLworICAvKiB0aGF0IHRoZSB0d28gbnVtYmVycyBzaG91bGQgYmUgKnZlcnkqIGNsb3NlLi4uIFdlIGNhbGN1bGF0ZSAqLworICAvKiBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICovCisgIC8qIElmIGl0IHdhcyB0aW1lLCB3ZSBuZWVkZWQgdG8sIGFuZCBpZiBpdCB3YXMgYnkgYnl0ZXMsIHRoZSB1c2VyIG1heSAqLworICAvKiBoYXZlIHNwZWNpZmllZCBhIG51bWJlciBvZiBieXRlcyB0aGF0IHdhc24ndCBhIG11bHRpcGxlIG9mIHRoZSAqLworICAvKiBzZW5kX3NpemUsIHNvIHdlIHJlYWxseSBkaWRuJ3Qgc2VuZCB3aGF0IGhlIGFza2VkIGZvciA7LSkgV2UgdXNlICovCisgIC8qIEtieXRlcy9zIGFzIHRoZSB1bml0cyBvZiB0aHJ1cHV0IGZvciBhIFRDUCBzdHJlYW0gdGVzdCwgd2hlcmUgSyA9ICovCisgIC8qIDEwMjQuIEEgZnV0dXJlIGVuaGFuY2VtZW50ICptaWdodCogYmUgdG8gY2hvb3NlIGZyb20gYSBjb3VwbGUgb2YgKi8KKyAgLyogdW5pdCBzZWxlY3Rpb25zLiAqLyAKKyAgCisgIGJ5dGVzX3hmZXJkCT0gKHJlcV9zaXplICogbnVtbWVzc2FnZXMpICsgKHJzcF9zaXplICogbnVtbWVzc2FnZXMpOworICB0aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3hmZXJkKTsKKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgaWYgKGxvY2FsX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsIldBUk5JTkcgV0FSTklORyBXQVJOSU5HICBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyFcbiIpOworCWZwcmludGYod2hlcmUsIkxvY2FsIENQVSB1c2FnZSBudW1iZXJzIGJhc2VkIG9uIHByb2Nlc3MgaW5mb3JtYXRpb24gb25seSFcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24gPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgICAgICAvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKyAgICAgIC8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKyAgICAgIC8qICJnb29kIiBudW1iZXJzICovCisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMC4wLAorCQkJCQkJICAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChyZW1vdGVfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiREFOR0VSICBEQU5HRVIgIERBTkdFUiAgICBEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiFcbiIpOworCWZwcmludGYod2hlcmUsIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHRjcF9jY19yZXN1bHQtPmNwdV91dGlsOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgIHRjcF9jY19yZXN1bHQtPm51bV9jcHVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICB9CisgICAgCisgICAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgICAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgICAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgICAKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogZ3Vlc3MgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUsCisJICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAkvKiBsb2NhbCBjcHUgKi8KKwkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAkvKiByZW1vdGUgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzIsCisJICAgICAgcnNzX3NpemUsCisJICAgICAgcnNyX3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgICB9CisKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzEsCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXNwb25zZXMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgcnNyX3NpemUpOworICAgICAgCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBUQ1Agc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCwKKwkgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICBsb2NhbF9zZW5kX29mZnNldCwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0KTsKKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgZnByaW50Zih3aGVyZSwiXG5IaXN0b2dyYW0gb2YgcmVxdWVzdC9yZXNwb25zZSB0aW1lc1xuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgfQorICAKK30KKworDAordm9pZAorcmVjdl90Y3BfY2MoKQoreworICAKKyAgY2hhciAgKm1lc3NhZ2U7CisKKyAgc3RydWN0IGFkZHJpbmZvICpsb2NhbF9yZXM7CisgIGNoYXIgbG9jYWxfbmFtZVtCVUZTSVpdOworICBjaGFyIHBvcnRfYnVmZmVyW1BPUlRCVUZTSVpFXTsKKworICBzdHJ1Y3QJc29ja2FkZHJfc3RvcmFnZSAgICAgICAgbXlhZGRyX2luLCAgcGVlcmFkZHJfaW47CisgIFNPQ0tFVAlzX2xpc3RlbixzX2RhdGE7CisgIG5ldHBlcmZfc29ja2xlbl90IAlhZGRybGVuOworICBjaGFyCSpyZWN2X21lc3NhZ2VfcHRyOworICBjaGFyCSpzZW5kX21lc3NhZ2VfcHRyOworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludAl0aW1lZF9vdXQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBzdHJ1Y3QJdGNwX2NjX3JlcXVlc3Rfc3RydWN0CSp0Y3BfY2NfcmVxdWVzdDsKKyAgc3RydWN0CXRjcF9jY19yZXNwb25zZV9zdHJ1Y3QJKnRjcF9jY19yZXNwb25zZTsKKyAgc3RydWN0CXRjcF9jY19yZXN1bHRzX3N0cnVjdAkqdGNwX2NjX3Jlc3VsdHM7CisgIAorICB0Y3BfY2NfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3QgdGNwX2NjX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfY2NfcmVzcG9uc2UgPSAKKyAgICAoc3RydWN0IHRjcF9jY19yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB0Y3BfY2NfcmVzdWx0cyA9IAorICAgIChzdHJ1Y3QgdGNwX2NjX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl90Y3BfY2M6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfY2M6IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gVENQX0NDX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfY2M6IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0ICovCisgIG1lc3NhZ2UgPSAoY2hhciAqKW1hbGxvYyhEQVRBQlVGRkVSTEVOKTsKKyAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkgeworICAgIHByaW50ZigibWFsbG9jKCVkKSBmYWlsZWQhXG4iLCBEQVRBQlVGRkVSTEVOKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlcyB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnRzIHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0cy4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF9jYzogcmVxdWVzdGVkIHJlY3YgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgdGNwX2NjX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICB0Y3BfY2NfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3RjcF9jYzogcmVxdWVzdGVkIHNlbmQgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgdGNwX2NjX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCSAgICB0Y3BfY2NfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICByZWN2X21lc3NhZ2VfcHRyID0gQUxJR05fQlVGRkVSKG1lc3NhZ2UsIHRjcF9jY19yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwgdGNwX2NjX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgCisgIHNlbmRfbWVzc2FnZV9wdHIgPSBBTElHTl9CVUZGRVIobWVzc2FnZSwgdGNwX2NjX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LCB0Y3BfY2NfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX2NjOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogR3JhYiBhIHNvY2tldCB0byBsaXN0ZW4gb24sIGFuZCB0aGVuIGxpc3RlbiBvbiBpdC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfdGNwX2NjOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSB0Y3BfY2NfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemVfcmVxID0gdGNwX2NjX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19ub2RlbGF5ID0gdGNwX2NjX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSB0Y3BfY2NfcmVxdWVzdC0+c29fcmN2YXZvaWQ7CisgIGxvY19zbmRhdm9pZCA9IHRjcF9jY19yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYodGNwX2NjX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCXRjcF9jY19yZXF1ZXN0LT5wb3J0KTsKKworICBsb2NhbF9yZXMgPSBjb21wbGV0ZV9hZGRyaW5mbyhsb2NhbF9uYW1lLAorCQkJCWxvY2FsX25hbWUsCisJCQkJcG9ydF9idWZmZXIsCisJCQkJbmZfdG9fYWYodGNwX2NjX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NUUkVBTSwKKwkJCQlJUFBST1RPX1RDUCwKKwkJCQkwKTsKKworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgY3JlYXRlIGRhdGEgc29ja2V0XG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGV4aXQoMSk7CisgIH0KKworI2lmZGVmIFdJTjMyCisgIC8qIFRoZSB0ZXN0IHRpbWVyIGNhbiBmaXJlIGR1cmluZyBvcGVyYXRpb25zIG9uIHRoZSBsaXN0ZW5pbmcgc29ja2V0LAorICAgICBzbyB0byBtYWtlIHRoZSBzdGFydF90aW1lciBiZWxvdyB3b3JrIHdlIGhhdmUgdG8gbW92ZQorICAgICBpdCB0byBjbG9zZSBzX2xpc3RlbiB3aGlsZSB3ZSBhcmUgYmxvY2tlZCBvbiBhY2NlcHQuICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0MiA9IHNfbGlzdGVuOworI2VuZGlmCisKKworICAvKiBOb3csIGxldCdzIHNldC11cCB0aGUgc29ja2V0IHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgKi8KKyAgaWYgKGxpc3RlbihzX2xpc3RlbiwgNSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiY291bGQgbm90IGxpc3RlblxuIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBub3cgZ2V0IHRoZSBwb3J0IG51bWJlciBhc3NpZ25lZCBieSB0aGUgc3lzdGVtICAqLworICBhZGRybGVuID0gc2l6ZW9mKG15YWRkcl9pbik7CisgIGlmIChnZXRzb2NrbmFtZShzX2xpc3RlbiwKKwkJICAoc3RydWN0IHNvY2thZGRyICopJm15YWRkcl9pbiwKKwkJICAmYWRkcmxlbikgPT0gU09DS0VUX0VSUk9SKXsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgZ2VldHNvY2tuYW1lXG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIE5vdyBteWFkZHJfaW4gY29udGFpbnMgdGhlIHBvcnQgYW5kIHRoZSBpbnRlcm5ldCBhZGRyZXNzIHRoaXMgaXMgKi8KKyAgLyogcmV0dXJuZWQgdG8gdGhlIHNlbmRlciBhbHNvIGltcGxpY2l0bHkgdGVsbGluZyB0aGUgc2VuZGVyIHRoYXQgdGhlICovCisgIC8qIHNvY2tldCBidWZmZXIgc2l6aW5nIGhhcyBiZWVuIGRvbmUuICovCisgIAorICB0Y3BfY2NfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAKKyAgICAoaW50KSBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZteWFkZHJfaW4pLT5zaW5fcG9ydCk7CisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInRlbGxpbmcgdGhlIHJlbW90ZSB0byBjYWxsIG1lIGF0ICVkXG4iLAorCSAgICB0Y3BfY2NfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICB0Y3BfY2NfcmVzcG9uc2UtPmNwdV9yYXRlID0gKGZsb2F0KTAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgaWYgKHRjcF9jY19yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHRjcF9jY19yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHRjcF9jY19yZXNwb25zZS0+Y3B1X3JhdGUgPSAKKyAgICAgIGNhbGlicmF0ZV9sb2NhbF9jcHUodGNwX2NjX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKworICAKKyAgLyogYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3BvbnNlIGJhY2sgdG8gdGhlIGluaXRpYXRvciwgcHVsbCBzb21lIG9mICovCisgIC8qIHRoZSBzb2NrZXQgcGFybXMgZnJvbSB0aGUgZ2xvYmFscyAqLworICB0Y3BfY2NfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgdGNwX2NjX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplID0gbHNyX3NpemU7CisgIHRjcF9jY19yZXNwb25zZS0+bm9fZGVsYXkgPSBsb2Nfbm9kZWxheTsKKyAgdGNwX2NjX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgdGNwX2NjX3Jlc3BvbnNlLT5zb19zbmRhdm9pZCA9IGxvY19zbmRhdm9pZDsKKworICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorICBhZGRybGVuID0gc2l6ZW9mKHBlZXJhZGRyX2luKTsKKyAgCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydCh0Y3BfY2NfcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworICAKKyAgLyogVGhlIGxvb3Agd2lsbCBleGl0IHdoZW4gdGhlIHNlbmRlciBkb2VzIGEgc2h1dGRvd24sIHdoaWNoIHdpbGwgKi8KKyAgLyogcmV0dXJuIGEgbGVuZ3RoIG9mIHplcm8gICAqLworICAKKyAgaWYgKHRjcF9jY19yZXF1ZXN0LT50ZXN0X2xlbmd0aCA+IDApIHsKKyAgICB0aW1lc191cCA9IDA7CisgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICBzdGFydF90aW1lcih0Y3BfY2NfcmVxdWVzdC0+dGVzdF9sZW5ndGggKyBQQURfVElNRSk7CisgIH0KKyAgZWxzZSB7CisgICAgdGltZXNfdXAgPSAxOworICAgIHRyYW5zX3JlbWFpbmluZyA9IHRjcF9jY19yZXF1ZXN0LT50ZXN0X2xlbmd0aCAqIC0xOworICB9CisgIAorICB0cmFuc19yZWNlaXZlZCA9IDA7CisKKyAgd2hpbGUgKCghdGltZXNfdXApIHx8ICh0cmFuc19yZW1haW5pbmcgPiAwKSkgeworI2lmZGVmIFdJTjMyCisgICAgLyogVGhlIHRlc3QgdGltZXIgd2lsbCBwcm9iYWJseSBmaXJlIGR1cmluZyB0aGlzIGFjY2VwdCwgCisgICAgICAgc28gdG8gbWFrZSB0aGUgc3RhcnRfdGltZXIgYWJvdmUgd29yayB3ZSBoYXZlIHRvIG1vdmUKKyAgICAgICBpdCB0byBjbG9zZSBzX2xpc3RlbiB3aGlsZSB3ZSBhcmUgYmxvY2tlZCBvbiBhY2NlcHQuICovCisgICAgd2luX2tsdWRnZV9zb2NrZXQgPSBzX2xpc3RlbjsKKyNlbmRpZgorICAgIC8qIGFjY2VwdCBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgcmVtb3RlICovCisgICAgaWYgKChzX2RhdGE9YWNjZXB0KHNfbGlzdGVuLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJICAgICAgICZhZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHRoZSB0aW1lciBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgZnByaW50Zih3aGVyZSwicmVjdl90Y3BfY2M6IGFjY2VwdDogZXJybm8gPSAlZFxuIixlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgY2xvc2Uoc19saXN0ZW4pOworICAgICAgCisgICAgICBleGl0KDEpOworICAgIH0KKworI2lmZGVmIEtMVURHRV9TT0NLRVRfT1BUSU9OUworICAgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MgKi8KKyAgICAvKiBhdHRyaWJ1dGVzIGFjcm9zcyBhbiBhY2NlcHQoKSBjYWxsLiBJbmNsdWRpbmcgdGhpcyBnb2VzIGFnYWluc3QgKi8KKyAgICAvKiBteSBiZXR0ZXIganVkZ2VtZW50IDooIHJhaiAxMS85NSAqLworICAgIAorICAgIGtsdWRnZV9zb2NrZXRfb3B0aW9ucyhzX2RhdGEpOworCisjZW5kaWYgLyogS0xVREdFX1NPQ0tFVF9PUFRJT05TICovCisgIAorI2lmZGVmIFdJTjMyCisgIC8qIHRoaXMgaXMgdXNlZCBzbyB0aGUgdGltZXIgdGhyZWFkIGNhbiBjbG9zZSB0aGUgc29ja2V0IG91dCBmcm9tICovCisgIC8qIHVuZGVyIHVzLCB3aGljaCB0byBkYXRlIGlzIHRoZSBlYXNpZXN0L2NsZWFuZXN0L2xlYXN0ICovCisgIC8qIFdpbmRvd3Mtc3BlY2lmaWMgd2F5IEkgY2FuIGZpbmQgdG8gZm9yY2UgdGhlIHdpbnNvY2sgY2FsbHMgdG8gKi8KKyAgLyogcmV0dXJuIFdTQUVJTlRSIHdpdGggdGhlIHRlc3QgaXMgb3Zlci4gYW55dGhpbmcgdGhhdCB3aWxsIHJ1biBvbiAqLworICAvKiA5NSBhbmQgTlQgYW5kIGlzIGNsb3NlciB0byB3aGF0IG5ldHBlcmYgZXhwZWN0cyBmcm9tIFVuaXggc2lnbmFscyAqLworICAvKiBhbmQgc3VjaCB3b3VsZCBiZSBhcHByZWNpYXRlZCByYWogMS85NiAqLworICB3aW5fa2x1ZGdlX3NvY2tldCA9IHNfZGF0YTsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3RjcF9jYzogYWNjZXB0ZWQgZGF0YSBjb25uZWN0aW9uLlxuIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgCisKKyAgICAvKiBjbG9zZSB0aGUgY29ubmVjdGlvbi4gdGhlIHNlcnZlciB3aWxsIGxpa2VseSBkbyBhIGdyYWNlZnVsICovCisgICAgLyogY2xvc2Ugb2YgdGhlIGNvbm5lY3Rpb24sIGluc3VyaW5nIHRoYXQgYWxsIGRhdGEgaGFzIGFycml2ZWQgYXQgKi8KKyAgICAvKiB0aGUgY2xpZW50LiBmb3IgdGhpcyBpdCB3aWxsIGNhbGwgc2h1dGRvd24oKSwgYW5kIHRoZW4gcmVjdigpIGFuZCAqLworICAgIC8qIHRoZW4gY2xvc2UoKS4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgdGhpcyBpcyB0aGUgKi8KKyAgICAvKiBhcHByb3ByaWF0ZSBzZXF1ZW5jZSBvZiBjYWxscyAtIEkgd291bGQgbGlrZSB0byBoZWFyIG9mICovCisgICAgLyogZXhhbXBsZXMgaW4gd2ViIHNlcnZlcnMgdG8gdGhlIGNvbnRyYXJ5LiByYWogMTAvOTUqLworICAgIGNsb3NlKHNfZGF0YSk7CisKKyAgICB0cmFuc19yZWNlaXZlZCsrOworICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInJlY3ZfdGNwX2NjOiBUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZVxuIiwKKwkgICAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKworICB9CisgIAorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0byB0aW1lb3V0IG9yIHRyYW5zYWN0aW9uIGNvdW50IGJlaW5nICovCisgIC8qIHJlYWNoZWQgKi8KKyAgCisgIGNwdV9zdG9wKHRjcF9jY19yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lZF9vdXQpIHsKKyAgICAvKiB3ZSBlbmRlZCB0aGUgdGVzdCBieSB0aW1lLCB3aGljaCB3YXMgYXQgbGVhc3QgMiBzZWNvbmRzICovCisgICAgLyogbG9uZ2VyIHRoYW4gd2Ugd2FudGVkIHRvIHJ1bi4gc28sIHdlIHdhbnQgdG8gc3VidHJhY3QgKi8KKyAgICAvKiBQQURfVElNRSBmcm9tIHRoZSBlbGFwc2VkX3RpbWUuICovCisgICAgZWxhcHNlZF90aW1lIC09IFBBRF9USU1FOworICB9CisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3BfY2M6IGdvdCAlZCB0cmFuc2FjdGlvbnNcbiIsCisJICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICB0Y3BfY2NfcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQJPSAodHJhbnNfcmVjZWl2ZWQgKiAKKwkJCQkJICAgKHRjcF9jY19yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkJICAgIHRjcF9jY19yZXF1ZXN0LT5yZXNwb25zZV9zaXplKSk7CisgIHRjcF9jY19yZXN1bHRzLT50cmFuc19yZWNlaXZlZAk9IHRyYW5zX3JlY2VpdmVkOworICB0Y3BfY2NfcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICBpZiAodGNwX2NjX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgdGNwX2NjX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbChlbGFwc2VkX3RpbWUpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl90Y3BfY2M6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisMCit2b2lkCitwcmludF9zb2NrZXRzX3VzYWdlKCkKK3sKKworICBmd3JpdGUoc29ja2V0c191c2FnZSwgc2l6ZW9mKGNoYXIpLCBzdHJsZW4oc29ja2V0c191c2FnZSksIHN0ZG91dCk7CisgIGV4aXQoMSk7CisKK30KKwordm9pZAorc2Nhbl9zb2NrZXRzX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKworeworCisjZGVmaW5lIFNPQ0tFVFNfQVJHUyAiYjpDRG5OaEg6TDptOk06cDpQOnI6czpTOlQ6Vnc6Vzp6NDYiCisKKyAgZXh0ZXJuIGNoYXIJKm9wdGFyZzsJICAvKiBwb2ludGVyIHRvIG9wdGlvbiBzdHJpbmcJKi8KKyAgCisgIGludAkJYzsKKyAgCisgIGNoYXIJCisgICAgYXJnMVtCVUZTSVpdLCAgLyogYXJndW1lbnQgaG9sZGVycwkJKi8KKyAgICBhcmcyW0JVRlNJWl07CisKKyAgaWYgKGRlYnVnKSB7CisgICAgaW50IGk7CisgICAgcHJpbnRmKCIlcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50IHZlY3RvclxuIiwKKwkgICBfX2Z1bmNfXyk7CisgICAgZm9yIChpID0gMDsgaTwgYXJnYzsgaSsrKSB7CisgICAgICBwcmludGYoIiVzICIsYXJndltpXSk7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKyAgfQorCisgIHN0cm5jcHkobG9jYWxfZGF0YV9wb3J0LCIwIixzaXplb2YobG9jYWxfZGF0YV9wb3J0KSk7CisgIHN0cm5jcHkocmVtb3RlX2RhdGFfcG9ydCwiMCIsc2l6ZW9mKHJlbW90ZV9kYXRhX3BvcnQpKTsKKworICAvKiBHbyB0aHJvdWdoIGFsbCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgYnJlYWsgdGhlbSAqLworICAvKiBvdXQuIEZvciB0aG9zZSBvcHRpb25zIHRoYXQgdGFrZSB0d28gcGFybXMsIHNwZWNpZnlpbmcgb25seSAqLworICAvKiB0aGUgZmlyc3Qgd2lsbCBzZXQgYm90aCB0byB0aGF0IHZhbHVlLiBTcGVjaWZ5aW5nIG9ubHkgdGhlICovCisgIC8qIHNlY29uZCB3aWxsIGxlYXZlIHRoZSBmaXJzdCB1bnRvdWNoZWQuIFRvIGNoYW5nZSBvbmx5IHRoZSAqLworICAvKiBmaXJzdCwgdXNlIHRoZSBmb3JtICJmaXJzdCwiIChzZWUgdGhlIHJvdXRpbmUgYnJlYWtfYXJncy4uICovCisgIAorICB3aGlsZSAoKGM9IGdldG9wdChhcmdjLCBhcmd2LCBTT0NLRVRTX0FSR1MpKSAhPSBFT0YpIHsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICc/JzoJCisgICAgY2FzZSAnNCc6CisgICAgICByZW1vdGVfZGF0YV9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgbG9jYWxfZGF0YV9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnNic6CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgICAgIHJlbW90ZV9kYXRhX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgbG9jYWxfZGF0YV9mYW1pbHkgPSBBRl9JTkVUNjsKKyNlbHNlCisgICAgICBmcHJpbnRmKHN0ZGVyciwKKwkgICAgICAiVGhpcyBuZXRwZXJmIHdhcyBub3QgY29tcGlsZWQgb24gYW4gSVB2NiBjYXBhYmxlIGhvc3QhXG4iKTsKKyAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgZXhpdCgtMSk7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2gnOgorICAgICAgcHJpbnRfc29ja2V0c191c2FnZSgpOworICAgICAgZXhpdCgxKTsKKyAgICBjYXNlICdiJzoKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgICAgICBmaXJzdF9idXJzdF9zaXplID0gYXRvaShvcHRhcmcpOworI2Vsc2UgLyogV0FOVF9GSVJTVF9CVVJTVCAqLworICAgICAgcHJpbnRmKCJJbml0aWFsIHJlcXVlc3QgYnVyc3QgZnVuY3Rpb25hbGl0eSBub3QgY29tcGlsZWQtaW4hXG4iKTsKKyNlbmRpZiAvKiBXQU5UX0ZJUlNUX0JVUlNUICovCisgICAgICBicmVhazsKKyAgICBjYXNlICdDJzoKKyNpZmRlZiBUQ1BfQ09SSworICAgICAgLyogc2V0IFRDUF9DT1JLICovCisgICAgICBsb2NfdGNwY29yayA9IDE7CisgICAgICByZW1fdGNwY29yayA9IDE7IC8qIGhvd2V2ZXIsIGF0IGZpcnN0LCB3ZSBvbnkgaGF2ZSBjb3JrIGFmZmVjdCBsb2MgKi8KKyNlbHNlIAorICAgICAgcHJpbnRmKCJXQVJOSU5HOiBUQ1BfQ09SSyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0hXG4iKTsKKyNlbmRpZiAvKiBUQ1BfQ09SSyAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAnRCc6CisgICAgICAvKiBzZXQgdGhlIFRDUCBub2RlbGF5IGZsYWcgKi8KKyAgICAgIGxvY19ub2RlbGF5ID0gMTsKKyAgICAgIHJlbV9ub2RlbGF5ID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0gnOgorICAgICAgYnJlYWtfYXJnc19leHBsaWNpdChvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSB7CisJLyogbWFrZSBzdXJlIHdlIGxlYXZlIHJvb20gZm9yIHRoZSBOVUxMIHRlcm1pbmF0aW9uIGJveXMgYW5kCisJICAgZ2lybHMuIHJhaiAyMDA1LTAyLTgyICovIAorCXJlbW90ZV9kYXRhX2FkZHJlc3MgPSBtYWxsb2Moc3RybGVuKGFyZzEpKzEpOworCXN0cm5jcHkocmVtb3RlX2RhdGFfYWRkcmVzcyxhcmcxLHN0cmxlbihhcmcxKSk7CisgICAgICB9CisgICAgICBpZiAoYXJnMlswXSkKKwlyZW1vdGVfZGF0YV9mYW1pbHkgPSBwYXJzZV9hZGRyZXNzX2ZhbWlseShhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0wnOgorICAgICAgYnJlYWtfYXJnc19leHBsaWNpdChvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSB7CisJLyogbWFrZSBzdXJlIHdlIGxlYXZlIHJvb20gZm9yIHRoZSBOVUxMIHRlcm1pbmF0aW9uIGJveXMgYW5kCisJICAgZ2lybHMuIHJhaiAyMDA1LTAyLTgyICovIAorCWxvY2FsX2RhdGFfYWRkcmVzcyA9IG1hbGxvYyhzdHJsZW4oYXJnMSkrMSk7CisJc3RybmNweShsb2NhbF9kYXRhX2FkZHJlc3MsYXJnMSxzdHJsZW4oYXJnMSkpOworICAgICAgfQorICAgICAgaWYgKGFyZzJbMF0pCisJbG9jYWxfZGF0YV9mYW1pbHkgPSBwYXJzZV9hZGRyZXNzX2ZhbWlseShhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3MnOgorICAgICAgLyogc2V0IGxvY2FsIHNvY2tldCBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCWxzc19zaXplX3JlcSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlsc3Jfc2l6ZV9yZXEgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnUyc6CisgICAgICAvKiBzZXQgcmVtb3RlIHNvY2tldCBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCXJzc19zaXplX3JlcSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlyc3Jfc2l6ZV9yZXEgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6CisgICAgICAvKiBzZXQgdGhlIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlyZXFfc2l6ZSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJcnNwX3NpemUgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgICAvKiBzZXQgdGhlIHNlbmQgc2l6ZSAqLworICAgICAgc2VuZF9zaXplID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgICAvKiBzZXQgdGhlIHJlY3Ygc2l6ZSAqLworICAgICAgcmVjdl9zaXplID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICAvKiBzZXQgdGhlIGxvY2FsIHNvY2tldCB0eXBlKi8KKyAgICAgIGxvY2FsX2Nvbm5lY3RlZCA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAgIC8qIHNldCB0aGUgcmVtb3RlIHNvY2tldCB0eXBlKi8KKyAgICAgIHJlbW90ZV9jb25uZWN0ZWQgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncCc6CisgICAgICAvKiBzZXQgdGhlIG1pbiBhbmQgbWF4IHBvcnQgbnVtYmVycyBmb3IgdGhlIFRDUF9DUlIgYW5kIFRDUF9UUlIgKi8KKyAgICAgIC8qIHRlc3RzLiAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCWNsaWVudF9wb3J0X21pbiA9IGF0b2koYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJY2xpZW50X3BvcnRfbWF4ID0gYXRvaShhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1AnOgorICAgICAgLyogc2V0IHRoZSBsb2NhbCBhbmQgcmVtb3RlIGRhdGEgcG9ydCBudW1iZXJzIGZvciB0aGUgdGVzdHMgdG8KKwkgYWxsb3cgdGhlbSB0byBydW4gdGhyb3VnaCB0aG9zZSBibGFua2V0eSBibGFuayBlbmQtdG8tZW5kCisJIGJyZWFraW5nIGZpcmV3YWxscy4gcmFqIDIwMDQtMDYtMTUgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlzdHJuY3B5KGxvY2FsX2RhdGFfcG9ydCxhcmcxLHNpemVvZihsb2NhbF9kYXRhX3BvcnQpKTsKKyAgICAgIGlmIChhcmcyWzBdKQkKKwlzdHJuY3B5KHJlbW90ZV9kYXRhX3BvcnQsYXJnMixzaXplb2YocmVtb3RlX2RhdGFfcG9ydCkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICAvKiBzZXQgdGhlIHRlc3QgbmFtZSAqLworICAgICAgc3RyY3B5KHRlc3RfbmFtZSxvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVyc6CisgICAgICAvKiBzZXQgdGhlICJ3aWR0aCIgb2YgdGhlIHVzZXIgc3BhY2UgZGF0YSAqLworICAgICAgLyogYnVmZmVyLiBUaGlzIHdpbGwgYmUgdGhlIG51bWJlciBvZiAqLworICAgICAgLyogc2VuZF9zaXplIGJ1ZmZlcnMgbWFsbG9jJ2QgaW4gdGhlICovCisgICAgICAvKiAqX1NUUkVBTSB0ZXN0LiBJdCBtYXkgYmUgZW5oYW5jZWQgdG8gc2V0ICovCisgICAgICAvKiBib3RoIHNlbmQgYW5kIHJlY2VpdmUgIndpZHRocyIgYnV0IGZvciBub3cgKi8KKyAgICAgIC8qIGl0IGlzIGp1c3QgdGhlIHNlbmRpbmcgKl9TVFJFQU0uICovCisgICAgICBzZW5kX3dpZHRoID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVicgOgorICAgICAgLyogd2Ugd2FudCB0byBkbyBjb3B5IGF2b2lkYW5jZSBhbmQgd2lsbCBzZXQgKi8KKyAgICAgIC8qIGl0IGZvciBldmVyeXRoaW5nLCBldmVyeXdoZXJlLCBpZiB3ZSByZWFsbHkgKi8KKyAgICAgIC8qIGNhbi4gb2YgY291cnNlLCB3ZSBkb24ndCBrbm93IGFueXRoaW5nICovCisgICAgICAvKiBhYm91dCB0aGUgcmVtb3RlLi4uICovCisjaWZkZWYgU09fU05EX0NPUFlBVk9JRAorICAgICAgbG9jX3NuZGF2b2lkID0gMTsKKyNlbHNlCisgICAgICBsb2Nfc25kYXZvaWQgPSAwOworICAgICAgcHJpbnRmKCJMb2NhbCBzZW5kIGNvcHkgYXZvaWRhbmNlIG5vdCBhdmFpbGFibGUuXG4iKTsKKyNlbmRpZgorI2lmZGVmIFNPX1JDVl9DT1BZQVZPSUQKKyAgICAgIGxvY19yY3Zhdm9pZCA9IDE7CisjZWxzZQorICAgICAgbG9jX3JjdmF2b2lkID0gMDsKKyAgICAgIHByaW50ZigiTG9jYWwgcmVjdiBjb3B5IGF2b2lkYW5jZSBub3QgYXZhaWxhYmxlLlxuIik7CisjZW5kaWYKKyAgICAgIHJlbV9zbmRhdm9pZCA9IDE7CisgICAgICByZW1fcmN2YXZvaWQgPSAxOworICAgICAgYnJlYWs7CisgICAgfTsKKyAgfQorCisjaWYgZGVmaW5lZChXQU5UX0ZJUlNUX0JVUlNUKSAKKyNpZiBkZWZpbmVkKFdBTlRfSElTVE9HUkFNKQorICAvKiBpZiBXQU5UX0ZJUlNUX0JVUlNUIGFuZCBXQU5UX0hJU1RPR1JBTSBhcmUgZGVmaW5lZCBhbmQgdGhlIHVzZXIKKyAgICAgaW5kZWVkIHdhbnRzIGEgbm9uLXplcm8gZmlyc3QgYnVyc3Qgc2l6ZSwgYW5kIHdlIHdvdWxkIGVtaXQgYQorICAgICBoaXN0b2dyYW0sIHRoZW4gd2Ugc2hvdWxkIGVtaXQgYSB3YXJuaW5nIHRoYXQgdGhlIHR3byBhcmUgbm90CisgICAgIGNvbXBhdGlibGUuIHJhaiAyMDA2LTAxLTMxICovCisgIGlmICgoZmlyc3RfYnVyc3Rfc2l6ZSA+IDApICYmICh2ZXJib3NpdHkgPj0gMikpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwKKwkgICAgIldBUk5JTkchIEhpc3RvZ3JhbXMgYW5kIGZpcnN0IGJ1cnN0cyBhcmUgaW5jb21wYXRpYmxlIVxuIik7CisgICAgZmZsdXNoKHN0ZGVycik7CisgIH0KKyNlbmRpZgorI2VuZGlmCisKKyAgLyogd2UgZG8gbm90IHdhbnQgdG8gbWFrZSByZW1vdGVfZGF0YV9hZGRyZXNzIG5vbi1OVUxMIGJlY2F1c2UgaWYKKyAgICAgdGhlIHVzZXIgaGFzIG5vdCBzcGVjaWZpZWQgYSByZW1vdGUgYWRhdGEgYWRkcmVzcywgd2Ugd2FudCB0bworICAgICB0YWtlIGl0IGZyb20gdGhlIGhvc3RuYW1lIGluIHRoZSAtSCBnbG9iYWwgb3B0aW9uLiByYWoKKyAgICAgMjAwNS0wMi0wOCAqLworCisgIC8qIHNvLCBpZiB0aGVyZSBpcyB0byBiZSBubyBjb250cm9sIGNvbm5lY3Rpb24sIHdlIHdhbnQgdG8gaGF2ZSBzb21lCisgICAgIGRpZmZlcmVudCBzZXR0aW5ncyBmb3IgYSBmZXcgdGhpbmdzICovCisKKyAgaWYgKG5vX2NvbnRyb2wpIHsKKworICAgIGlmIChzdHJjbXAocmVtb3RlX2RhdGFfcG9ydCwiMCIpID09IDApIHsKKyAgICAgIC8qIHdlIG5lZWQgdG8gc2VsZWN0IGVpdGhlciB0aGUgZGlzY2FyZCBwb3J0LCBlY2hvIHBvcnQgb3IKKwkgY2hhcmdlbiBwb3J0IGRlZGVwZW5kaW5nIG9uIHRoZSB0ZXN0IG5hbWUuIHJhaiAyMDA3LTAyLTA4ICovCisgICAgICBpZiAoc3Ryc3RyKHRlc3RfbmFtZSwiU1RSRUFNIikgfHwKKwkgIHN0cnN0cih0ZXN0X25hbWUsIlNFTkRGSUxFIikpIHsKKwlzdHJuY3B5KHJlbW90ZV9kYXRhX3BvcnQsImRpc2NhcmQiLHNpemVvZihyZW1vdGVfZGF0YV9wb3J0KSk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJzdHIodGVzdF9uYW1lLCJSUiIpKSB7CisJc3RybmNweShyZW1vdGVfZGF0YV9wb3J0LCJlY2hvIixzaXplb2YocmVtb3RlX2RhdGFfcG9ydCkpOworICAgICAgfQorICAgICAgZWxzZSBpZiAoc3Ryc3RyKHRlc3RfbmFtZSwiTUFFUlRTIikpIHsKKwlzdHJuY3B5KHJlbW90ZV9kYXRhX3BvcnQsImNoYXJnZW4iLHNpemVvZihyZW1vdGVfZGF0YV9wb3J0KSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlwcmludGYoIk5vIGRlZmF1bHQgcG9ydCBrbm93biBmb3IgdGhlICVzIHRlc3QsIHBsZWFzZSBzZXQgb25lIHlvdXJzZWxmXG4iLHRlc3RfbmFtZSk7CisJZXhpdCgtMSk7CisgICAgICB9CisgICAgfQorICAgIHJlbW90ZV9kYXRhX3BvcnRbc2l6ZW9mKHJlbW90ZV9kYXRhX3BvcnQpIC0gMV0gPSAnXDAnOworCisgICAgLyogSSBnbyBiYWNrIGFuZCBmb3J0aCBvbiB3aGV0aGVyIHRoZXNlIHNob3VsZCBiZWNvbWUgLTEgb3IgaWYKKyAgICAgICB0aGV5IHNob3VsZCBiZWNvbWUgMCBmb3IgYSBub19jb250cm9sIHRlc3QuIHdoYXQgZG8geW91IHRoaW5rPworICAgICAgIHJhaiAyMDA2LTAyLTA4ICovCisKKyAgICByZW1fcmN2YXZvaWQgPSAtMTsKKyAgICByZW1fc25kYXZvaWQgPSAtMTsKKyAgICByc3Nfc2l6ZV9yZXEgPSAtMTsKKyAgICByc3Jfc2l6ZV9yZXEgPSAtMTsKKyAgICByZW1fbm9kZWxheSA9IC0xOworCisgICAgaWYgKHN0cnN0cih0ZXN0X25hbWUsIlNUUkVBTSIpIHx8CisJc3Ryc3RyKHRlc3RfbmFtZSwiU0VOREZJTEUiKSkgeworICAgICAgcmVjdl9zaXplID0gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cnN0cih0ZXN0X25hbWUsIlJSIikpIHsKKyAgICAgIC8qIEkgYW0gaG93ZXZlciBfY2VydGFpbl8gdGhhdCBmb3IgYSBubyBjb250cm9sIFJSIHRlc3QgdGhlCisJIHJlc3BvbnNlIHNpemUgbXVzdCBlcXVhbCB0aGUgcmVxdWVzdCBzaXplIHNpbmNlIDk5IHRpbWVzIG91dAorCSBvZiB0ZW4gd2Ugd2lsbCBiZSBzcGVha2luZyB0byB0aGUgZWNobyBzZXJ2aWNlIHNvbWV3aGVyZSAqLworICAgICAgcnNwX3NpemUgPSByZXFfc2l6ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3Ryc3RyKHRlc3RfbmFtZSwiTUFFUlRTIikpIHsKKyAgICAgIHNlbmRfc2l6ZSA9IC0xOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHByaW50ZigiTm8gZGVmYXVsdCBwb3J0IGtub3duIGZvciB0aGUgJXMgdGVzdCwgcGxlYXNlIHNldCBvbmUgeW91cnNlbGZcbiIsdGVzdF9uYW1lKTsKKyAgICAgIGV4aXQoLTEpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9ic2QuaCBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfYnNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjYzBjMgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfYnNkLmgKQEAgLTAsMCArMSw2MzUgQEAKKy8qCisgICAgICAgIENvcHlyaWdodCAoQykgMTk5My0yMDA0IEhld2xldHQtUGFja2FyZCBDb21wYW55CisqLworCisgLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0ZXN0LXNwZWNpZmljIGRlZmluaXRpb25zIGZvciBuZXRwZXJmJ3MgQlNEICovCisgLyogc29ja2V0cyB0ZXN0cyAqLworCisvKiB3ZWxsIGJveXMgYW5kIGdpcmxzLCBzZWVtcyB0aGF0IHdoaWxlIEFGX0lORVQgaXMgIjIiIGFuZCBBRl9VTlNQRUMKKyAgIGlzICIwIiB0aGUgd29ybGQgb3ZlciwgQUZfSU5FVDYgaXMgZGlmZmVyZW50IHZhbHVlcyBkZXBlbmRpbmcgb24KKyAgIHRoZSBwbGF0Zm9ybS4uLiBncnJyLiAgT24gSFAtVVggMTFpIGl0IGlzICIyMiIgYW5kIG9uIExpbnV4IDIuNiBpdAorICAgaXMgIjEwIiBzb29vb28uLi4gd2UgaGF2ZSB0byBkZWZpbmUgb3VyIG93biBzcGFjZSBmb3IgbmV0cGVyZiB0bworICAgZW5hYmxlIHVzIHRvIHBhc3MgdmFsdWVzIGFyb3VuZCBmcm9tIG1hY2hpbmUgdG8gbWFjaGluZS4gcmFqCisgICAyMDA1LTAyLTA4ICovCisjZGVmaW5lIE5GX1VOU1BFQyAwCisjZGVmaW5lIE5GX0lORVQgICA0CisjZGVmaW5lIE5GX0lORVQ2ICA2CisKKy8qIGl0IHdvdWxkIGFsc28gc2VlbSB0aGF0IHRoZSBzb2NrZXQgdHlwZSBkZWZpbmVzIGRpZmZlciBmcm9tCisgICBwbGF0Zm9ybSB0byBwbGF0Zm9ybSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0byBkZWZpbmUgb3VyIG93biB2YWx1ZXMKKyAgIHRvIHBhc3MgYmV0d2VlbiBuZXRwZXJmIGFuZCBuZXRzZXJ2ZXIgc28gdGhleSBjYW4gYmUgdHJhbnNsYXRlZCB0bworICAgdGhlIGxvY2FsIHZlcnNpb25zLiAgTlNUID09IE5ldHBlcmYgU29ja2V0IFR5cGUgcmFqIDIwMDgtMDEtMTQgKi8KKyNkZWZpbmUgTlNUX1VOS04gICAtMQorI2RlZmluZSBOU1RfU1RSRUFNIDEKKyNkZWZpbmUgTlNUX0RHUkFNICAyCisjZGVmaW5lIE5TVF9EQ0NQICAgMworCisKKyNpZmRlZiBXQU5UX09NTkkKK3N0cnVjdCAgb21uaV9yZXF1ZXN0X3N0cnVjdCB7CisgIGludDMyX3QgICAgc2VuZF9idWZfc2l6ZTsgICAgICAgICAvKiBTT19TTkRCVUYgKi8KKyAgdWludDMyX3QgICBzZW5kX3NpemU7ICAgICAgICAgICAgIC8qIGJ5dGVzIHBlciBzZW5kKCkgY2FsbCAqLworICB1aW50MzJfdCAgIHNlbmRfYWxpZ25tZW50OyAgICAgICAgLyogYWxpZ25tZW50IG9mIHNlbmQgYnVmZmVyICovCisgIHVpbnQzMl90ICAgc2VuZF9vZmZzZXQ7ICAgICAgICAgICAvKiBvZmZzZXQgZnJvbSBzZW5kIGFsaWdubWVudCAqLworICB1aW50MzJfdCAgIHNlbmRfd2lkdGg7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIHNlbmQgYnVmZmVycyB0byB1c2UgKi8KKyAgaW50MzJfdCAgICByZXF1ZXN0X3NpemU7ICAgICAgICAgIC8qIHNpemUgb2YgYSByZXF1ZXN0ICovCisKKyAgaW50MzJfdCAgICByZWN2X2J1Zl9zaXplOyAgICAgICAgIC8qIFNPX1JDVkJVRiAqLworICB1aW50MzJfdCAgIHJlY2VpdmVfc2l6ZTsgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXJzIGluIHJlY3YgKi8KKyAgdWludDMyX3QgICByZWN2X2FsaWdubWVudDsgICAgICAgIC8qIGFsaWdubWVudCBvZiByZWN2IGJ1ZmZlciAqLworICB1aW50MzJfdCAgIHJlY3Zfb2Zmc2V0OyAgICAgICAgICAgLyogb2Zmc2V0IGZyb20gcmVjdiBhbGlnbm1lbnQgKi8KKyAgdWludDMyX3QgICByZWN2X3dpZHRoOyAgICAgICAgICAgIC8qIG51bWJlciBvZiByZWN2IGJ1ZmZlcnMgdG8gdXNlICovCisgIGludDMyX3QgICAgcmVzcG9uc2Vfc2l6ZTsgICAgICAgICAvKiBzaXplIG9mIGEgcmVzcG9uc2UgKi8KKworICB1aW50MzJfdCAgIG5vX2RlbGF5OyAgICAgICAgICAgICAgLyogZG8gd2Ugc2V0IG11bWJsZV9OT0RFTEFZPyAqLworICB1aW50MzJfdCAgIHVzZV9zZW5kZmlsZTsgICAgICAgICAgLyogdXNlIHNlbmRmaWxlIHJhdGhlciB0aGFuIHNlbmQ/ICovCisgIHVpbnQzMl90ICAgY29ubmVjdF90ZXN0OyAgICAgICAgICAvKiBkb2VzIHRoZSB0ZXN0IGluY2x1ZGUgY29ubmVjdD8gKi8KKworICB1aW50MzJfdCAgIG1lYXN1cmVfY3B1OyAgICAvKiBkbyB3ZSBtZWFzdXJlIENQVT8gKi8KKyAgZmxvYXQgICAgICBjcHVfcmF0ZTsgICAgICAgLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzIGFscmVhZHk/ICovCisKKyAgaW50MzJfdCAgICB0ZXN0X2xlbmd0aDsgICAgLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/ICovCisKKyAgdWludDMyX3QgICBzb19yY3Zhdm9pZDsgICAgLyogYXZvaWQgY29waWVzIG9uIHJlY3Y/ICovCisgIHVpbnQzMl90ICAgc29fc25kYXZvaWQ7ICAgIC8qIGF2b2lkIGNvcGllcyBvbiBzZW5kPyAqLworICB1aW50MzJfdCAgIHNlbmRfZGlydHlfY291bnQ7IC8qIGJ5dGVzIHRvIGRpcnR5IGJlZm9yZSBjYWxsaW5nIHNlbmQgKi8KKyAgdWludDMyX3QgICByZWN2X2RpcnR5X2NvdW50OyAvKiBieXRlcyB0byBkaXJ0eSBiZWZvcmUgY2FsbGluZyByZWN2ICovCisgIHVpbnQzMl90ICAgcmVjdl9jbGVhbl9jb3VudDsgLyogYnl0ZXMgdG8gYWNjZXNzIGJlZm9yZSBjYWxsaW5nIHJlY3YgKi8KKworICB1aW50MzJfdCAgIGNoZWNrc3VtX29mZjsgIC8qIHNob3VsZCBjaGVja3N1bXMgYmUgZGlzYWJsZWQ/ICovCisgIHVpbnQzMl90ICAgZGF0YV9wb3J0OyAgICAgLyogd2hhdCBwb3J0IG51bWJlciBzaG91bGQgbmV0c2VydmVyIHVzZT8gKi8KKyAgdWludDMyX3QgICBpcGZhbWlseTsgICAgICAvKiBhZGRyZXNzIGZhbWlseSBvZiB0aGUgZGF0YSBjb25uZWN0aW9uICovCisgIHVpbnQzMl90ICAgc29ja2V0X3R5cGU7ICAgLyogZGdyYW0/IHN0cmVhbT8gb3RoZXI/ICovCisgIHVpbnQzMl90ICAgcHJvdG9jb2w7ICAgICAgLyogdGhlIHByb3RvY29sIG9mIHRoZSBkYXRhIGNvbm5lY3Rpb24gKi8KKyAgdWludDMyX3QgICBkaXJlY3Rpb247ICAgICAvKiB3aGljaCB3YXkgZmxvd3MgdGhlIGRhdGE/ICovCisgIHVpbnQzMl90ICAgbmV0cGVyZl9wb3J0OyAgLyogd2hlbiBuZXRzZXJ2ZXIgbmVlZHMgbmV0cGVyZidzIGRhdGEgcG9ydCAqLworICB1aW50MzJfdCAgIGludGVydmFsX2J1cnN0Oy8qIGhvdyBtYW55IHRoaW5ncyB0byBkbyBlYWNoIGludGVydmFsICovCisgIHVpbnQzMl90ICAgaW50ZXJ2YWxfdXNlY3M7LyogaG93IGxvbmcgZWFjaCBpbnRlcnZhbCBzaG91bGQgYmUgKi8KKyAgdWludDMyX3QgICBpcGFkZHJbNF07ICAgICAvKiB3aGVuIG5ldHNlcnZlciBuZWVkcyBuZXRwZXJmJ3MgZGF0YSBJUCAqLworfTsKKworc3RydWN0ICBvbW5pX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludDMyX3QgICAgcmVjdl9idWZfc2l6ZTsKKyAgdWludDMyX3QgICByZWNlaXZlX3NpemU7CisgIGludDMyX3QgICAgcmVjdl93aWR0aDsKKworICBpbnQzMl90ICAgIHNlbmRfYnVmX3NpemU7CisgIHVpbnQzMl90ICAgc2VuZF9zaXplOworICBpbnQzMl90ICAgIHNlbmRfd2lkdGg7CisKKyAgdWludDMyX3QgICBub19kZWxheTsKKyAgdWludDMyX3QgICB1c2Vfc2VuZGZpbGU7CisKKyAgdWludDMyX3QgICBtZWFzdXJlX2NwdTsKKyAgZmxvYXQgICAgICBjcHVfcmF0ZTsKKworICB1aW50MzJfdCAgIHRlc3RfbGVuZ3RoOworCisgIHVpbnQzMl90ICAgc29fcmN2YXZvaWQ7CisgIHVpbnQzMl90ICAgc29fc25kYXZvaWQ7CisKKyAgdWludDMyX3QgICBkYXRhX3BvcnQ7ICAgICAvKiBjb25uZWN0IHRvIHRoaXMgcG9ydCBudW1iZXIgKi8KKworICB1aW50MzJfdCAgIGludGVydmFsX2J1cnN0Oy8qIGhvdyBtYW55IHRoaW5ncyB0byBkbyBlYWNoIGludGVydmFsICovCisgIHVpbnQzMl90ICAgaW50ZXJ2YWxfdXNlY3M7LyogaG93IGxvbmcgZWFjaCBpbnRlcnZhbCBzaG91bGQgYmUgKi8KKyAgLyogdGhlcmUgYXJlIDE2IGludHMgYWJvdmUgaGVyZSwgYW5kIHdlIGhhdmUgMjQ4IC0gKDE2KjQpIG9yIDE4NCBieXRlcworICAgICByZW1haW5pbmcgKi8KKyAgLyogdGhlc2UgYXJlIGhlcmUgYmVjYXVzZSB0aGV5IGNhbiBiZSBjaGVja2VkIGJlZm9yZSBhY3R1YWwgZGF0YQorICAgICBjb25uZWN0aW9ucyBhcmUgbWFkZSwgYW5kIHRoZSBvbW5pX3Jlc3VsdHNfc3RydWN0IGlzIGFscmVhZHkKKyAgICAgZnVsbCAqLworICB1aW50MzJfdCAgIGNwdV9mcmVxdWVuY3k7ICAvKiB0aGlzIHNob3VsZCBiZSBtZWdhaGVydHogKi8KKyAgdWludDMyX3QgICBzZWN1cml0eV9pbmZvOworI2RlZmluZSBPTU5JX1JFU1BPTlNFX0NPTlZfQ1VUT0ZGIDE4CisgIGNoYXIgICAgICAgc3lzdGVtX21vZGVsWzMzXTsKKyAgY2hhciAgICAgICBjcHVfbW9kZWxbODBdOyAgLyogc2VlbXMgbGlrZSBhbiBhd2Z1bCBsb3QgZG9lc24ndAorCQkJCWl0LiBzb21lIGNsZXZlciBwZXJzb24gYXQgSW50ZWwKKwkJCQlkZWNpZGVkIHRvIGdpdmUgTW9udGVjaXRvIHByb2Nlc3NvcnMgYQorCQkJCW5hbWUgdGhhdCBsb25nIC0gYW5kIHN0aWxsIGRpZG4ndAorCQkJCWluY2x1ZGUgdGhlIDlOTk4gbW9kZWwgbnVtYmVyISAqLworICBjaGFyICAgICAgIHNlY3VyaXR5X3N0cmluZ1sxNl07CisgIC8qIDQ4IGJ5dGVzIGxlZnQgKi8KKyAgCit9OworCitzdHJ1Y3Qgb21uaV9yZXN1bHRzX3N0cnVjdCB7CisgIHVpbnQzMl90ICAgYnl0ZXNfcmVjZWl2ZWRfaGk7ICAvKiB3aHk/IGJlY2F1c2Ugd2UgY2Fubm90IGVhc2lseSBzZW5kICovCisgIHVpbnQzMl90ICAgYnl0ZXNfcmVjZWl2ZWRfbG87ICAvKiB1aW50NjRfdCBvciBkb3VibGVzIGJldHdlZW4gZW5kaWFuZXNzICovCisgIHVpbnQzMl90ICAgcmVjdl9jYWxsczsKKyAgaW50MzJfdCAgICByZWN2X2J1Zl9zaXplOyAvKiBTT19SQ1ZCVUYgYXQgZW5kIG9mIHRlc3QgKi8KKworICB1aW50MzJfdCAgIGJ5dGVzX3NlbnRfaGk7CisgIHVpbnQzMl90ICAgYnl0ZXNfc2VudF9sbzsKKyAgdWludDMyX3QgICBzZW5kX2NhbGxzOworICBpbnQzMl90ICAgIHNlbmRfYnVmX3NpemU7IC8qIFNPX1NOREJVRiBhdCBlbmQgb2YgdGVzdCAqLworICB1aW50MzJfdCAgIGZhaWxlZF9zZW5kczsKKyAgdWludDMyX3QgICB0cmFuc19yZWNlaXZlZDsgCisKKyAgZmxvYXQgICAgICBlbGFwc2VkX3RpbWU7ICAvKiBsZW5ndGggb2YgdGVzdCBpbiBzZWNvbmRzICovCisKKyAgZmxvYXQgICAgICBjcHVfdXRpbDsKKyAgZmxvYXQgICAgICBzZXJ2X2RlbTsKKyAgdWludDMyX3QgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIENQVSB1dGlsIG1lYXN1cmVkPyAqLworICB1aW50MzJfdCAgIG51bV9jcHVzOyAgICAgIC8qIG51bWJlciBvZiBDUFVzIGluIHJlbW90ZSAqLworCisgIGludDMyX3QgICAgcGVha19jcHVfaWQ7ICAgLyogSUQgb2YgdGhlIG1vc3QgdXRpbGl6ZWQgQ1BVICovCisgIGZsb2F0ICAgICAgcGVha19jcHVfdXRpbDsgLyogaXRzIGluZGl2aWR1YWwgdXRpbGl6YXRpb24gKi8KKyAgaW50MzJfdCAgICB2ZW5kb3I7CisgIGludDMyX3QgICAgZGV2aWNlOyAgICAgICAgLyogcGNpIGRldmljZSBpZCBvZiB0aGUgcHJvYmFibGUgZWdyZXNzCisJCQkgICAgICAgaW50ZXJmYWNlICovIAorICBpbnQzMl90ICAgIHN1YnZlbmRvcjsKKyAgaW50MzJfdCAgICBzdWJkZXZpY2U7CisgICNkZWZpbmUgT01OSV9SRVNVTFRTX0NPTkZfQ1VUT0ZGIDIxCisgIC8qIHRoaXMgaXMgdGhlIDIyZG4gMzItYml0IHdvcmQgYW5kIHdlIGhhdmUgMjQ4LSgxNyo0KSBieXRlcworICAgICBhdmFpbGFibGUgZnJvbSBoZXJlICovCisgIGNoYXIgICAgICAgaWZuYW1lWzE2XTsgICAgLyogdGhlIHByb2JhYmxlIGVncmVzcyBpbnRlcmZhY2UgKi8KKyAgY2hhciAgICAgICBkcml2ZXJbMzJdOyAgICAvKiBzaXplIGJhc2VkIG9uIGxpbnV4L2V0aHRvb2wuaCAqLworICBjaGFyICAgICAgIHZlcnNpb25bMzJdOworICBjaGFyICAgICAgIGZpcm13YXJlWzMyXTsgIAorICBjaGFyICAgICAgIGJ1c1szMl07CisgIGNoYXIgICAgICAgaWZzbG90WzE2XTsgICAgLyogc2xvdCBpZCBvZiB0aGUgcHJvYmFibGUgZWdyZXNzIGludGVyZmFjZSAqLworICAvKiBvbmx5IDQgYnl0ZXMgbGVmdC4uLiAqLworfTsKKworI2VuZGlmIC8qIFdBTlRfT01OSSAqLworCitzdHJ1Y3QJdGNwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdCAtIHRoZSAqLworCQkJLyogcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHRoYXQgaXMgKi8gCisgIGludAlyZWNlaXZlX3NpemU7ICAgLyogaG93IG1hbnkgYnl0ZXMgZG8gd2Ugd2FudCB0byByZWNlaXZlIGF0IG9uZSAqLworCQkJLyogdGltZT8gKi8gCisgIGludAlyZWN2X2FsaWdubWVudDsgLyogd2hhdCBpcyB0aGUgYWxpZ25tZW50IG9mIHRoZSByZWNlaXZlICovCisJCQkvKiBidWZmZXI/ICovIAorICBpbnQJcmVjdl9vZmZzZXQ7ICAgIC8qIGFuZCBhdCB3aGF0IG9mZnNldCBmcm9tIHRoYXQgYWxpZ25tZW50PyAqLyAKKyAgaW50CW5vX2RlbGF5OyAgICAgICAvKiBkbyB3ZSBkaXNhYmxlIHRoZSBuYWdsZSBhbGdvcml0aG0gZm9yIHNlbmQgKi8KKwkJCS8qIGNvYWxlc2Npbmc/ICovIAorICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUgdXRpbGl6YXRpb24gKi8KKwkJCS8qIG1lYXN1cmVkPyAqLyAKKyAgZmxvYXQJY3B1X3JhdGU7CS8qIGRvIHdlIGtub3cgaG93IGZhc3QgdGhlIGNwdSBpcyBhbHJlYWR5PyAqLyAKKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzb19yY3Zhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIGNvcGllcyBvbiAqLworCQkJLyogcmVjZWl2ZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgZGlydHlfY291bnQ7ICAgIC8qIGhvdyBtYW55IGludGVnZXJzIGluIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCQkJLyogc2hvdWxkIGJlIG1hZGUgZGlydHkgYmVmb3JlIGNhbGxpbmcgcmVjdj8gKi8gIAorICBpbnQgICBjbGVhbl9jb3VudDsgICAgLyogaG93IG1hbnkgaW50ZWdlcnMgc2hvdWxkIGJlIHJlYWQgZnJvbSB0aGUgKi8KKwkJCS8qIHJlY3YgYnVmZmVyIGJlZm9yZSBjYWxsaW5nIHJlY3Y/ICovIAorICBpbnQgICBwb3J0OyAgICAgICAgICAgLyogdGhlIHBvcnQgdG8gd2hpY2ggdGhlIHJlY3Ygc2lkZSBzaG91bGQgYmluZAorCQkJICAgdG8gYWxsb3cgbmV0cGVyZiB0byBydW4gdGhyb3VnaCB0aG9zZSBldmlsCisJCQkgICBmaXJld2FsbCB0aGluZ3MgKi8KKyAgaW50ICAgaXBmYW1pbHk7ICAgICAgIC8qIHRoZSBhZGRyZXNzIGZhbWlseSBvZiBpcGFkZHJlc3MgKi8KK307CisKK3N0cnVjdAl0Y3Bfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlyZWNlaXZlX3NpemU7CisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CS8qIGNvbm5lY3QgdG8gbWUgaGVyZQkqLworICBmbG9hdAljcHVfcmF0ZTsJCS8qIGNvdWxkIHdlIG1lYXN1cmUJKi8KKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworfTsKKworc3RydWN0IHRjcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgeworICBkb3VibGUgICAgICAgICBieXRlc19yZWNlaXZlZDsKKyAgdW5zaWduZWQgaW50CSByZWN2X2NhbGxzOwkKKyAgZmxvYXQJICAgICAgICAgZWxhcHNlZF90aW1lOwkvKiBob3cgbG9uZyB0aGUgdGVzdCByYW4gKi8KKyAgZmxvYXQJICAgICAgICAgY3B1X3V0aWw7CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBmbG9hdAkgICAgICAgICBzZXJ2X2RlbTsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGludCAgICAgICAgICAgIGNwdV9tZXRob2Q7ICAgIC8qIGhvdyB3YXMgY3B1IHV0aWwgbWVhc3VyZWQ/ICovCisgIGludCAgICAgICAgICAgIG51bV9jcHVzOyAgICAgIC8qIGhvdyBtYW55IENQVXMgaGFkIHRoZSByZW1vdGU/ICovCisgIGludCAgICAgICAgICAgIHJlY3ZfYnVmX3NpemU7IC8qIGhvdyBsYXJnZSB3YXMgaXQgYXQgdGhlIGVuZD8gKi8KKyAgaW50ICAgICAgICAgICAgc2VuZF9idWZfc2l6ZTsgLyogaG93IGxhcmdlIHdhcyBpdCBhdCB0aGUgZW5kPyAqLworfTsKKworc3RydWN0CXRjcF9tYWVydHNfcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQgLSB0aGUgKi8KKwkJCS8qIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciB0aGF0IGlzICovIAorICBpbnQJc2VuZF9zaXplOyAgICAgIC8qIGhvdyBtYW55IGJ5dGVzIGRvIHdlIHdhbnQgbmV0c2VydmVyIHRvIHNlbmQKKwkJCSAgIGF0IG9uZSB0aW1lPyAqLworICBpbnQJc2VuZF9hbGlnbm1lbnQ7IC8qIHdoYXQgaXMgdGhlIGFsaWdubWVudCBvZiB0aGUgc2VuZCAqLworCQkJLyogYnVmZmVyPyAqLyAKKyAgaW50CXNlbmRfb2Zmc2V0OyAgICAvKiBhbmQgYXQgd2hhdCBvZmZzZXQgZnJvbSB0aGF0IGFsaWdubWVudD8gKi8gCisgIGludAlub19kZWxheTsgICAgICAgLyogZG8gd2UgZGlzYWJsZSB0aGUgbmFnbGUgYWxnb3JpdGhtIGZvciBzZW5kICovCisJCQkvKiBjb2FsZXNjaW5nPyAqLyAKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1IHV0aWxpemF0aW9uICovCisJCQkvKiBtZWFzdXJlZD8gKi8gCisgIGZsb2F0CWNwdV9yYXRlOwkvKiBkbyB3ZSBrbm93IGhvdyBmYXN0IHRoZSBjcHUgaXMgYWxyZWFkeT8gKi8gCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBjb3BpZXMgb24gKi8KKwkJCS8qIHJlY2VpdmVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIGRpcnR5X2NvdW50OyAgICAvKiBob3cgbWFueSBpbnRlZ2VycyBpbiB0aGUgc2VuZCBidWZmZXIgKi8KKwkJCS8qIHNob3VsZCBiZSBtYWRlIGRpcnR5IGJlZm9yZSBjYWxsaW5nIHJlY3Y/ICovICAKKyAgaW50ICAgY2xlYW5fY291bnQ7ICAgIC8qIGhvdyBtYW55IGludGVnZXJzIHNob3VsZCBiZSByZWFkIGZyb20gdGhlICovCisJCQkvKiByZWN2IGJ1ZmZlciBiZWZvcmUgY2FsbGluZyByZWN2PyAqLyAKKyAgaW50ICAgcG9ydDsgICAgICAgICAgIC8qIHRoZSBwb3J0IHRvIHdoaWNoIHRoZSByZWN2IHNpZGUgc2hvdWxkIGJpbmQKKwkJCSAgIHRvIGFsbG93IG5ldHBlcmYgdG8gcnVuIHRocm91Z2ggdGhvc2UgZXZpbAorCQkJICAgZmlyZXdhbGwgdGhpbmdzICovCisgIGludCAgIGlwZmFtaWx5OworfTsKKworc3RydWN0CXRjcF9tYWVydHNfcmVzcG9uc2Vfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQJKi8KKyAgaW50CXNlbmRfc2l6ZTsKKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJZGF0YV9wb3J0X251bWJlcjsJLyogY29ubmVjdCB0byBtZSBoZXJlCSovCisgIGZsb2F0CWNwdV9yYXRlOwkJLyogY291bGQgd2UgbWVhc3VyZQkqLworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCit9OworCitzdHJ1Y3QgdGNwX21hZXJ0c19yZXN1bHRzX3N0cnVjdCB7CisgIGRvdWJsZSAgICAgICAgIGJ5dGVzX3NlbnQ7CisgIHVuc2lnbmVkIGludAkgc2VuZF9jYWxsczsJCisgIGZsb2F0CSAgICAgICAgIGVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CSAgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIGNwdSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIGhhZCB0aGUgcmVtb3RlPyAqLworfTsKKworc3RydWN0CXRjcF9ycl9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJcmVjdl9hbGlnbm1lbnQ7CisgIGludAlyZWN2X29mZnNldDsKKyAgaW50CXNlbmRfYWxpZ25tZW50OworICBpbnQJc2VuZF9vZmZzZXQ7CisgIGludAlyZXF1ZXN0X3NpemU7CisgIGludAlyZXNwb25zZV9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzPwkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSAqLworCQkJLyogY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHBvcnQ7ICAgICAgICAgICAvKiB0aGUgcG9ydCB0byB3aGljaCB0aGUgcmVjdiBzaWRlIHNob3VsZCBiaW5kCisJCQkgICB0byBhbGxvdyBuZXRwZXJmIHRvIHJ1biB0aHJvdWdoIHRob3NlIGV2aWwKKwkJCSAgIGZpcmV3YWxsIHRoaW5ncyAqLworICBpbnQgICBpcGZhbWlseTsKK307CisKK3N0cnVjdAl0Y3BfcnJfcmVzcG9uc2Vfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQJKi8KKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJZGF0YV9wb3J0X251bWJlcjsJLyogY29ubmVjdCB0byBtZSBoZXJlCSovCisgIGZsb2F0CWNwdV9yYXRlOwkJLyogY291bGQgd2UgbWVhc3VyZQkqLworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCBzZW5kIGNvcGllcz8gKi8KK307CisKK3N0cnVjdCB0Y3BfcnJfcmVzdWx0c19zdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgIGJ5dGVzX3JlY2VpdmVkOwkvKiBpZ25vcmVkIGluaXRpYWxseSAqLworICB1bnNpZ25lZCBpbnQJcmVjdl9jYWxsczsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXRyYW5zX3JlY2VpdmVkOwkvKiBub3QgaWdub3JlZCAgKi8KKyAgZmxvYXQJICAgICAgICBlbGFwc2VkX3RpbWU7CS8qIGhvdyBsb25nIHRoZSB0ZXN0IHJhbiAqLworICBmbG9hdAkgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICBzZXJ2X2RlbTsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGludCAgICAgICAgICAgY3B1X21ldGhvZDsgICAgLyogaG93IHdhcyBjcHUgdXRpbCBtZWFzdXJlZD8gKi8KKyAgaW50ICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIGhhZCB0aGUgcmVtb3RlPyAqLworfTsKKworc3RydWN0CXRjcF9jb25uX3JyX3JlcXVlc3Rfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQJKi8KKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlyZWN2X2FsaWdubWVudDsKKyAgaW50CXJlY3Zfb2Zmc2V0OworICBpbnQJc2VuZF9hbGlnbm1lbnQ7CisgIGludAlzZW5kX29mZnNldDsKKyAgaW50CXJlcXVlc3Rfc2l6ZTsKKyAgaW50CXJlc3BvbnNlX3NpemU7CisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGZsb2F0CWNwdV9yYXRlOwkvKiBkbyB3ZSBrbm93IGhvdyBmYXN0IHRoZSBjcHUgaXM/CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCByZWNlaXZlICovCisJCQkvKiBjb3BpZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgcG9ydDsgICAgICAgICAgIC8qIHRoZSBwb3J0IHRvIHdoaWNoIHRoZSByZWN2IHNpZGUgc2hvdWxkIGJpbmQKKwkJCSAgIHRvIGFsbG93IG5ldHBlcmYgdG8gcnVuIHRocm91Z2ggdGhvc2UgZXZpbAorCQkJICAgZmlyZXdhbGwgdGhpbmdzICovCisgIGludCAgIGlwZmFtaWx5OworfTsKKworCitzdHJ1Y3QJdGNwX2Nvbm5fcnJfcmVzcG9uc2Vfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQJKi8KKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJZGF0YV9wb3J0X251bWJlcjsJLyogY29ubmVjdCB0byBtZSBoZXJlCSovCisgIGZsb2F0CWNwdV9yYXRlOwkJLyogY291bGQgd2UgbWVhc3VyZQkqLworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCBzZW5kIGNvcGllcz8gKi8KK307CisKK3N0cnVjdCB0Y3BfY29ubl9ycl9yZXN1bHRzX3N0cnVjdCB7CisgIHVuc2lnbmVkIGludAlieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIHVuc2lnbmVkIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CSAgICAgICAgZWxhcHNlZF90aW1lOwkvKiBob3cgbG9uZyB0aGUgdGVzdCByYW4gKi8KKyAgZmxvYXQJICAgICAgICBjcHVfdXRpbDsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGZsb2F0CSAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgIGNwdV9tZXRob2Q7ICAgIC8qIGhvdyB3YXMgY3B1IHV0aWwgbWVhc3VyZWQ/ICovCisgIGludCAgICAgICAgICAgbnVtX2NwdXM7ICAgICAgLyogaG93IG1hbnkgQ1BVcyBoYWQgdGhlIHJlbW90ZT8gKi8KK307CisKK3N0cnVjdAl0Y3BfdHJhbl9ycl9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJcmVjdl9hbGlnbm1lbnQ7CisgIGludAlyZWN2X29mZnNldDsKKyAgaW50CXNlbmRfYWxpZ25tZW50OworICBpbnQJc2VuZF9vZmZzZXQ7CisgIGludAlyZXF1ZXN0X3NpemU7CisgIGludAlyZXNwb25zZV9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzPwkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSAqLworCQkJLyogY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHBvcnQ7ICAgICAgICAgICAvKiB0aGUgcG9ydCB0byB3aGljaCB0aGUgcmVjdiBzaWRlIHNob3VsZCBiaW5kCisJCQkgICB0byBhbGxvdyBuZXRwZXJmIHRvIHJ1biB0aHJvdWdoIHRob3NlIGV2aWwKKwkJCSAgIGZpcmV3YWxsIHRoaW5ncyAqLworICBpbnQgICBpcGZhbWlseTsKK307CisKKworc3RydWN0CXRjcF90cmFuX3JyX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CS8qIGNvbm5lY3QgdG8gbWUgaGVyZQkqLworICBmbG9hdAljcHVfcmF0ZTsJCS8qIGNvdWxkIHdlIG1lYXN1cmUJKi8KKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLworICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCit9OworCitzdHJ1Y3QgdGNwX3RyYW5fcnJfcmVzdWx0c19zdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQJYnl0ZXNfcmVjZWl2ZWQ7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIHVuc2lnbmVkIGludAlyZWN2X2NhbGxzOwkvKiBpZ25vcmVkIGluaXRpYWxseSAqLworICB1bnNpZ25lZCBpbnQJdHJhbnNfcmVjZWl2ZWQ7CS8qIG5vdCBpZ25vcmVkICAqLworICBmbG9hdAkgICAgICAgIGVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CSAgICAgICAgY3B1X3V0aWw7CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBmbG9hdAkgICAgICAgIHNlcnZfZGVtOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgaW50ICAgICAgICAgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIGNwdSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICAgICAgICAgIG51bV9jcHVzOyAgICAgIC8qIGhvdyBtYW55IENQVXMgaGFkIHRoZSByZW1vdGU/ICovCisKK307CisKK3N0cnVjdAl1ZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CisgIGludAltZXNzYWdlX3NpemU7CisgIGludCAgIHJlY3ZfY29ubmVjdGVkOworICBpbnQJcmVjdl9hbGlnbm1lbnQ7CisgIGludAlyZWN2X29mZnNldDsKKyAgaW50CWNoZWNrc3VtX29mZjsKKyAgaW50CW1lYXN1cmVfY3B1OworICBmbG9hdAljcHVfcmF0ZTsKKyAgaW50CXRlc3RfbGVuZ3RoOworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCByZWNlaXZlICovCisJCQkvKiBjb3BpZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgcG9ydDsgICAgICAgICAgIC8qIHRoZSBwb3J0IHRvIHdoaWNoIHRoZSByZWN2IHNpZGUgc2hvdWxkIGJpbmQKKwkJCSAgIHRvIGFsbG93IG5ldHBlcmYgdG8gcnVuIHRocm91Z2ggdGhvc2UgZXZpbAorCQkJICAgZmlyZXdhbGwgdGhpbmdzICovCisgIGludCAgIGlwZmFtaWx5OworICAKK307CisKK3N0cnVjdAl1ZHBfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CW1lYXN1cmVfY3B1OworICBpbnQJdGVzdF9sZW5ndGg7CisgIGludAlkYXRhX3BvcnRfbnVtYmVyOworICBmbG9hdAljcHVfcmF0ZTsKKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLworICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCit9OworCitzdHJ1Y3QJdWRwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCB7CisgIHVuc2lnbmVkIGludAltZXNzYWdlc19yZWN2ZDsKKyAgdW5zaWduZWQgaW50CWJ5dGVzX3JlY2VpdmVkOworICBmbG9hdAkgICAgICAgIGVsYXBzZWRfdGltZTsKKyAgZmxvYXQJICAgICAgICBjcHVfdXRpbDsKKyAgaW50ICAgICAgICAgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIGNwdSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICAgICAgICAgIG51bV9jcHVzOyAgICAgIC8qIGhvdyBtYW55IENQVXMgaGFkIHRoZSByZW1vdGU/ICovCit9OworCisKK3N0cnVjdAl1ZHBfcnJfcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAlzZW5kX2FsaWdubWVudDsKKyAgaW50CXNlbmRfb2Zmc2V0OworICBpbnQJcmVxdWVzdF9zaXplOworICBpbnQJcmVzcG9uc2Vfc2l6ZTsKKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CS8qIGRvIHdlIGtub3cgaG93IGZhc3QgdGhlIGNwdSBpcz8JKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzb19yY3Zhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHJlY2VpdmUgKi8KKwkJCS8qIGNvcGllcz8gKi8gCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBwb3J0OyAgICAgICAgICAgLyogdGhlIHBvcnQgdG8gd2hpY2ggdGhlIHJlY3Ygc2lkZSBzaG91bGQgYmluZAorCQkJICAgdG8gYWxsb3cgbmV0cGVyZiB0byBydW4gdGhyb3VnaCB0aG9zZSBldmlsCisJCQkgICBmaXJld2FsbCB0aGluZ3MgKi8KKyAgaW50ICAgaXBmYW1pbHk7Cit9OworCitzdHJ1Y3QJdWRwX3JyX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CS8qIGNvbm5lY3QgdG8gbWUgaGVyZQkqLworICBmbG9hdAljcHVfcmF0ZTsJCS8qIGNvdWxkIHdlIG1lYXN1cmUJKi8KKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLworICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCit9OworCitzdHJ1Y3QgdWRwX3JyX3Jlc3VsdHNfc3RydWN0IHsKKyAgdW5zaWduZWQgaW50CWJ5dGVzX3JlY2VpdmVkOwkvKiBpZ25vcmVkIGluaXRpYWxseSAqLworICB1bnNpZ25lZCBpbnQJcmVjdl9jYWxsczsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXRyYW5zX3JlY2VpdmVkOwkvKiBub3QgaWdub3JlZCAgKi8KKyAgZmxvYXQJICAgICAgICBlbGFwc2VkX3RpbWU7CS8qIGhvdyBsb25nIHRoZSB0ZXN0IHJhbiAqLworICBmbG9hdAkgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICBzZXJ2X2RlbTsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGludCAgICAgICAgICAgY3B1X21ldGhvZDsgICAgLyogaG93IHdhcyBjcHUgdXRpbCBtZWFzdXJlZD8gKi8KKyAgaW50ICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIGhhZCB0aGUgcmVtb3RlPyAqLworfTsKKworc3RydWN0CXRjcF9jY19yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJcmVjdl9hbGlnbm1lbnQ7CisgIGludAlyZWN2X29mZnNldDsKKyAgaW50CXNlbmRfYWxpZ25tZW50OworICBpbnQJc2VuZF9vZmZzZXQ7CisgIGludAlyZXF1ZXN0X3NpemU7CisgIGludAlyZXNwb25zZV9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzPwkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSAqLworCQkJLyogY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHBvcnQ7ICAgICAgICAgICAvKiB0aGUgcG9ydCB0byB3aGljaCB0aGUgcmVjdiBzaWRlIHNob3VsZCBiaW5kCisJCQkgICB0byBhbGxvdyBuZXRwZXJmIHRvIHJ1biB0aHJvdWdoIHRob3NlIGV2aWwKKwkJCSAgIGZpcmV3YWxsIHRoaW5ncyAqLworICBpbnQgICBpcGZhbWlseTsKK307CisKKworc3RydWN0CXRjcF9jY19yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlkYXRhX3BvcnRfbnVtYmVyOwkvKiBjb25uZWN0IHRvIG1lIGhlcmUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludAlzb19yY3Zhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworfTsKKworc3RydWN0IHRjcF9jY19yZXN1bHRzX3N0cnVjdCB7CisgIHVuc2lnbmVkIGludAlieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIHVuc2lnbmVkIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CSAgICAgICAgZWxhcHNlZF90aW1lOwkvKiBob3cgbG9uZyB0aGUgdGVzdCByYW4gKi8KKyAgZmxvYXQJICAgICAgICBjcHVfdXRpbDsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGZsb2F0CSAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgIGNwdV9tZXRob2Q7ICAgIC8qIGhvdyB3YXMgY3B1IHV0aWwgbWVhc3VyZWQ/ICovCisgIGludCAgICAgICAgICAgbnVtX2NwdXM7ICAgICAgLyogaG93IG1hbnkgQ1BVcyBoYWQgdGhlIHJlbW90ZT8gKi8KK307CisKK2V4dGVybiBpbnQKKyAgc29ja2V0X3R5cGUsICAgICAgLyogaW5pdGlhbGx5IHVzZWQgYnkgdGhlICJvbW5pIiB0ZXN0cyAqLworICByc3Nfc2l6ZV9yZXEsICAgICAvKiByZXF1ZXN0ZWQgcmVtb3RlIHNvY2tldCBzZW5kIGJ1ZmZlciBzaXplICovCisgIHJzcl9zaXplX3JlcSwgICAgIC8qIHJlcXVlc3RlZCByZW1vdGUgc29ja2V0IHJlY3YgYnVmZmVyIHNpemUgKi8KKyAgcnNzX3NpemUsICAgICAgICAgLyogcmVtb3RlIHNvY2tldCBzZW5kIGJ1ZmZlciBzaXplICAgICAgICovCisgIHJzcl9zaXplLCAgICAgICAgIC8qIHJlbW90ZSBzb2NrZXQgcmVjdiBidWZmZXIgc2l6ZSAgICAgICAqLworICByc3Jfc2l6ZV9lbmQsCisgIHJzc19zaXplX2VuZCwKKyAgbHNzX3NpemVfcmVxLCAgICAgLyogcmVxdWVzdGVkIGxvY2FsIHNvY2tldCBzZW5kIGJ1ZmZlciBzaXplICovCisgIGxzcl9zaXplX3JlcSwgICAgIC8qIHJlcXVlc3RlZCBsb2NhbCBzb2NrZXQgcmVjdiBidWZmZXIgc2l6ZSAqLworICBsc3Nfc2l6ZSwgICAgICAgICAvKiBsb2NhbCAgc29ja2V0IHNlbmQgYnVmZmVyIHNpemUgICAgICAgKi8KKyAgbHNyX3NpemUsICAgICAgICAgLyogbG9jYWwgIHNvY2tldCByZWN2IGJ1ZmZlciBzaXplICAgICAgICovCisgIGxzc19zaXplX2VuZCwKKyAgbHNyX3NpemVfZW5kLAorICByZXFfc2l6ZSwgICAgICAgICAvKiByZXF1ZXN0IHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgcnNwX3NpemUsICAgICAgICAgLyogcmVzcG9uc2Ugc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHNlbmRfc2l6ZSwgICAgICAgIC8qIGhvdyBiaWcgYXJlIGluZGl2aWR1YWwgc2VuZHMgICAgICAgICAqLworICByZWN2X3NpemUsICAgICAgICAvKiBob3cgYmlnIGFyZSBpbmRpdmlkdWFsIHJlY2VpdmVzICAgICAgKi8KKyAgbG9jX25vZGVsYXksICAgICAgICAgIC8qIGRvbid0L2RvIHVzZSBOT0RFTEFZIGxvY2FsbHkgICAgICAgICAqLworICByZW1fbm9kZWxheSwgICAgICAgICAgLyogZG9uJ3QvZG8gdXNlIE5PREVMQVkgcmVtb3RlbHkgICAgICAgICovCisgIGxvY19zbmRhdm9pZCwgICAgICAgICAvKiBhdm9pZCBzZW5kIGNvcGllcyBsb2NhbGx5ICAgICAgICAgICAgKi8KKyAgbG9jX3JjdmF2b2lkLCAgICAgICAgIC8qIGF2b2lkIHJlY3YgY29waWVzIGxvY2FsbHkgICAgICAgICAgICAqLworICByZW1fc25kYXZvaWQsICAgICAgICAgLyogYXZvaWQgc2VuZCBjb3BpZXMgcmVtb3RlbHkgICAgICAgICAgICovCisgIHJlbV9yY3Zhdm9pZDsgICAgICAgICAvKiBhdm9pZCByZWN2X2NvcGllcyByZW1vdGVseSAgICAgICAgICAgKi8KKworCisjaWZkZWYgV0FOVF9PTU5JCitleHRlcm4gdm9pZCBzY2FuX29tbmlfYXJncyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgc2Nhbl9zb2NrZXRzX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CitleHRlcm4gc3RydWN0IGFkZHJpbmZvICpjb21wbGV0ZV9hZGRyaW5mbyhjaGFyICpjb250cm9saG9zdCwgCisJCQkJICAgY2hhciAqZGF0YV9hZGRyZXNzLCAKKwkJCQkgICBjaGFyICpwb3J0LCAKKwkJCQkgICBpbnQgZmFtaWx5LCAKKwkJCQkgICBpbnQgdHlwZSwgCisJCQkJICAgaW50IHByb3RvY29sLCAKKwkJCQkgICBpbnQgZmxhZ3MpOworZXh0ZXJuIHZvaWQgY29tcGxldGVfYWRkcmluZm9zKHN0cnVjdCBhZGRyaW5mbyAqKnJlbW90ZSwKKwkJCSAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKipsb2NhbCwgCisJCQkgICAgICAgY2hhciByZW1vdGVfaG9zdFtdLCAKKwkJCSAgICAgICBpbnQgdHlwZSwgCisJCQkgICAgICAgaW50IHByb3RvY29sLCAKKwkJCSAgICAgICBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBhZl90b19uZihpbnQgYWYpOworZXh0ZXJuIGludCBuZl90b19hZihpbnQgbmYpOworZXh0ZXJuIGludCBuc3RfdG9faHN0KGludCBuc3QpOworZXh0ZXJuIGludCBoc3RfdG9fbnN0KGludCBoc3QpOworZXh0ZXJuIGNoYXIgKmhzdF90b19zdHIoaW50IGhzdCk7CitleHRlcm4gY2hhciAqcHJvdG9jb2xfdG9fc3RyKGludCBwcm90b2NvbCk7CitleHRlcm4gdm9pZCBwcmludF90b3BfdGVzdF9oZWFkZXIoY2hhciB0ZXN0X25hbWVbXSwgCisJCQkJICBzdHJ1Y3QgYWRkcmluZm8gKnNvdXJjZSwgCisJCQkJICBzdHJ1Y3QgYWRkcmluZm8gKmRlc3RpbmF0aW9uKTsKK2V4dGVybiB2b2lkIHNldF9wb3J0X251bWJlcihzdHJ1Y3QgYWRkcmluZm8gKnJlcywgCisJCQkgICAgdW5zaWduZWQgc2hvcnQgcG9ydCk7CitleHRlcm4gdm9pZCBzZXRfaG9zdG5hbWVfYW5kX3BvcnQoY2hhciAqaG9zdG5hbWUsIAorCQkJCSAgY2hhciAqcG9ydHN0ciwgCisJCQkJICBpbnQgZmFtaWx5LCAKKwkJCQkgIGludCBwb3J0KTsKK2V4dGVybiB2b2lkIHNldF9zb2NrYWRkcl9mYW1pbHlfYWRkcl9wb3J0KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzb2NrYWRkciwKKwkJCQkJICBpbnQgZmFtaWx5LAorCQkJCQkgIHZvaWQgKmFkZHIsCisJCQkJCSAgaW50IHBvcnQpOworZXh0ZXJuIGludCAgZ2V0X3NvY2thZGRyX2ZhbWlseV9hZGRyX3BvcnQoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNvY2thZGRyLAorCQkJCQkgIGludCBmYW1pbHksCisJCQkJCSAgdm9pZCAqYWRkciwKKwkJCQkJICBpbnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgc2VuZF90Y3BfbXNzKGNoYXIgcmVtb3RlX2hvc3RbXSk7CitleHRlcm4gdm9pZCBzZW5kX3RjcF9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKTsKK2V4dGVybiB2b2lkIHNlbmRfdGNwX21hZXJ0cyhjaGFyIHJlbW90ZV9ob3N0W10pOworZXh0ZXJuIHZvaWQgc2VuZF90Y3BfcnIoY2hhciByZW1vdGVfaG9zdFtdKTsKK2V4dGVybiB2b2lkIHNlbmRfdGNwX2Nvbm5fcnIoY2hhciByZW1vdGVfaG9zdFtdKTsKK2V4dGVybiB2b2lkIHNlbmRfdGNwX2NjKGNoYXIgcmVtb3RlX2hvc3RbXSk7CitleHRlcm4gdm9pZCBzZW5kX3VkcF9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKTsKK2V4dGVybiB2b2lkIHNlbmRfdWRwX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSk7CisKK2V4dGVybiB2b2lkIHNlbmRfb21uaShjaGFyIHJlbW90ZV9ob3N0W10pOworZXh0ZXJuIHZvaWQgcHJpbnRfdXVpZChjaGFyIHJlbW90ZV9ob3N0W10pOworZXh0ZXJuIHZvaWQgcmVjdl9vbW5pKCk7CisKK2V4dGVybiB2b2lkIHJlY3ZfdGNwX3N0cmVhbSgpOworZXh0ZXJuIHZvaWQgcmVjdl90Y3BfbWFlcnRzKCk7CitleHRlcm4gdm9pZCByZWN2X3RjcF9ycigpOworZXh0ZXJuIHZvaWQgcmVjdl90Y3BfY29ubl9ycigpOworZXh0ZXJuIHZvaWQgcmVjdl90Y3BfY2MoKTsKK2V4dGVybiB2b2lkIHJlY3ZfdWRwX3N0cmVhbSgpOworZXh0ZXJuIHZvaWQgcmVjdl91ZHBfcnIoKTsKKworZXh0ZXJuIHZvaWQgbG9jX2NwdV9yYXRlKCk7CitleHRlcm4gdm9pZCByZW1fY3B1X3JhdGUoKTsKKworI2lmZGVmIEhBVkVfSUNTQ19FWFMKK2V4dGVybiB2b2lkIHNlbmRfZXhzX3RjcF9zdHJlYW0oY2hhciByZW1vdGVob3N0W10pOworI2VuZGlmIC8qIEhBVkVfSUNTQ19FWFMgKi8KKworI2lmZGVmIEhBVkVfU0VOREZJTEUKK2V4dGVybiB2b2lkIHNlbmRmaWxlX3RjcF9zdHJlYW0oY2hhciByZW1vdGVob3N0W10pOworI2VuZGlmIC8qIEhBVkVfU0VOREZJTEUgKi8KKworI2lmICFkZWZpbmVkKEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UpICYmICFkZWZpbmVkKHNvY2thZGRyX3N0b3JhZ2UpCisjZGVmaW5lIHNvY2thZGRyX3N0b3JhZ2Ugc29ja2FkZHJfaW4KKyNlbmRpZgorCisjaWZkZWYgRE9fTkJSUgorZXh0ZXJuIHZvaWQgc2VuZF90Y3BfbmJycihjaGFyIHJlbW90ZV9ob3N0W10pOworCitleHRlcm4gdm9pZCByZWN2X3RjcF9uYnJyKCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfZGxwaS5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9kbHBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzZTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfZGxwaS5jCkBAIC0wLDAgKzEsMzc5OCBAQAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCQkJCQkJCQkqLworLyoJbmV0dGVzdF9kbHBpLmMJCQkJCQkqLworLyoJCQkJCQkJCSovCisvKgl0aGUgYWN0dWFsIHRlc3Qgcm91dGluZXMuLi4JCQkJKi8KKy8qCQkJCQkJCQkqLworLyoJc2VuZF9kbHBpX2NvX3N0cmVhbSgpCXBlcmZvcm0gYSBDTyBETFBJIHN0cmVhbSB0ZXN0CSovCisvKglyZWN2X2RscGlfY29fc3RyZWFtKCkJCQkJCSovCisvKglzZW5kX2RscGlfY29fcnIoKQlwZXJmb3JtIGEgQ08gRExQSSByZXEvcmVzCSovCisvKglyZWN2X2RscGlfY29fcnIoKQkJCQkJKi8KKy8qCXNlbmRfZGxwaV9jbF9zdHJlYW0oKQlwZXJmb3JtIGEgQ0wgRExQSSBzdHJlYW0gdGVzdAkqLworLyoJcmVjdl9kbHBpX2NsX3N0cmVhbSgpCQkJCQkqLworLyoJc2VuZF9kbHBpX2NsX3JyKCkJcGVyZm9ybSBhIENMIERMUEkgcmVxL3JlcwkqLworLyoJcmVjdl9kbHBpX2NsX3JyKCkJCQkJCSovCisvKgkJCQkJCQkJKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpZmRlZiBXQU5UX0RMUEkKK2NoYXIJbmV0dGVzdF9kbHBpX2lkW109IlwKK0AoIyluZXR0ZXN0X2RscGkuYyAoYykgQ29weXJpZ2h0IDE5OTMsMTk5NSwyMDA0IEhld2xldHQtUGFja2FyZCBDby4gVmVyc2lvbiAyLjQuMyI7CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2luY2x1ZGUgPHN5cy9zdHJvcHRzLmg+CisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNpZmRlZiBfX29zZl9fCisjaW5jbHVkZSA8c3lzL2RscGloZHIuaD4KKyNlbHNlIC8qIF9fb3NmX18gKi8KKyNpbmNsdWRlIDxzeXMvZGxwaS5oPgorI2lmZGVmIF9faHB1eF9fCisjaW5jbHVkZSA8c3lzL2RscGlfZXh0Lmg+CisjZW5kaWYgLyogX19ocHV4X18gKi8KKyNlbmRpZiAvKiBfX29zZl9fICovCisKKyNpbmNsdWRlICJuZXRsaWIuaCIKKyNpbmNsdWRlICJuZXRzaC5oIgorI2luY2x1ZGUgIm5ldHRlc3RfZGxwaS5oIgorDAorLyogdGhlc2UgYXJlIHNvbWUgdmFyaWFibGVzIGdsb2JhbCB0byBhbGwgdGhlIERMUEkgdGVzdHMuIGRlY2xhcmUgKi8KKy8qIHRoZW0gc3RhdGljIHRvIG1ha2UgdGhlbSBnbG9iYWwgb25seSB0byB0aGlzIGZpbGUgKi8KKworc3RhdGljIGludCAKKyAgcnN3X3NpemUsCQkvKiByZW1vdGUgc2VuZCB3aW5kb3cgc2l6ZQkqLworICBycndfc2l6ZSwJCS8qIHJlbW90ZSByZWN2IHdpbmRvdyBzaXplCSovCisgIGxzd19zaXplLAkJLyogbG9jYWwgIHNlbmQgd2luZG93IHNpemUgCSovCisgIGxyd19zaXplLAkJLyogbG9jYWwgIHJlY3Ygd2luZG93IHNpemUgCSovCisgIHJlcV9zaXplID0gMTAwLAkvKiByZXF1ZXN0IHNpemUgICAgICAgICAgICAgICAgICAgCSovCisgIHJzcF9zaXplID0gMjAwLAkvKiByZXNwb25zZSBzaXplCQkJKi8KKyAgc2VuZF9zaXplLAkJLyogaG93IGJpZyBhcmUgaW5kaXZpZHVhbCBzZW5kcwkJKi8KKyAgcmVjdl9zaXplOwkJLyogaG93IGJpZyBhcmUgaW5kaXZpZHVhbCByZWNlaXZlcwkqLworCitpbnQKKyAgbG9jX3BwYSA9IDQsICAgICAgICAgIC8qIHRoZSBwcGEgZm9yIHRoZSBsb2NhbCBpbnRlcmZhY2UsICovCisgIC8qIGFzIHNob3duIGFzIHRoZSBOTSBJZCBpbiBsYW5zY2FuICovCisgIHJlbV9wcGEgPSA0LCAgICAgICAgICAvKiB0aGUgcHBhIGZvciB0aGUgcmVtb3RlIGludGVyZmFjZSAqLworICBkbHBpX3NhcCA9IDg0OyAgICAgICAgLyogd2hpY2ggODAyLjIgU0FQIHNob3VsZCB3ZSB1c2U/ICAgKi8KKworY2hhciBsb2NfZGxwaV9kZXZpY2VbMzJdID0gIi9kZXYvZGxwaSI7CitjaGFyIHJlbV9kbHBpX2RldmljZVszMl0gPSAiL2Rldi9kbHBpIjsKKworY2hhciBkbHBpX3VzYWdlW10gPSAiXG5cCitVc2FnZTogbmV0cGVyZiBbZ2xvYmFsIG9wdGlvbnNdIC0tIFt0ZXN0IG9wdGlvbnNdIFxuXAorXG5cCitDTy9DTCBETFBJIFRlc3QgT3B0aW9uczpcblwKKyAgICAtRCBkZXZbLGRldl0gICAgICBTZXQgdGhlIGxvY2FsL3JlbW90ZSBETFBJIGRldmljZSBmaWxlIG5hbWVcblwKKyAgICAtaCAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgdGV4dFxuXAorICAgIC1NIGJ5dGVzICAgICAgICAgIFNldCB0aGUgcmVjdiBzaXplIChETENPX1NUUkVBTSwgRExDTF9TVFJFQU0pXG5cCisgICAgLW0gYnl0ZXMgICAgICAgICAgU2V0IHRoZSBzZW5kIHNpemUgKERMQ09fU1RSRUFNLCBETENMX1NUUkVBTSlcblwKKyAgICAtcCBsb2NbLHJlbV0gICAgICBTZXQgdGhlIGxvY2FsL3JlbW90ZSBQUEEgZm9yIHRoZSB0ZXN0XG5cCisgICAgLVIgYnl0ZXMgICAgICAgICAgU2V0IHJlc3BvbnNlIHNpemUgKERMQ09fUlIsIERMQ0xfUlIpXG5cCisgICAgLXIgYnl0ZXMgICAgICAgICAgU2V0IHJlcXVlc3Qgc2l6ZSAoRExDT19SUiwgRExDTF9SUilcblwKKyAgICAtcyBzYXAgICAgICAgICAgICBTZXQgdGhlIDgwMi4yIHNhcCBmb3IgdGhlIHRlc3RcblwKKyAgICAtVyBzZW5kWyxyZWN2XSAgICBTZXQgcmVtb3RlIHNlbmQvcmVjdiB3aW5kb3cgc2l6ZXNcblwKKyAgICAtdyBzZW5kWyxyZWN2XSAgICBTZXQgbG9jYWwgc2VuZC9yZWN2IHdpbmRvdyBzaXplc1xuXAorXG5cCitGb3IgdGhvc2Ugb3B0aW9ucyB0YWtpbmcgdHdvIHBhcm1zLCBhdCBsZWFzdCBvbmUgbXVzdCBiZSBzcGVjaWZpZWQ7XG5cCitzcGVjaWZ5aW5nIG9uZSB2YWx1ZSB3aXRob3V0IGEgY29tbWEgd2lsbCBzZXQgYm90aCBwYXJtcyB0byB0aGF0XG5cCit2YWx1ZSwgc3BlY2lmeWluZyBhIHZhbHVlIHdpdGggYSBsZWFkaW5nIGNvbW1hIHdpbGwgc2V0IGp1c3QgdGhlIHNlY29uZFxuXAorcGFybSwgYSB2YWx1ZSB3aXRoIGEgdHJhaWxpbmcgY29tbWEgd2lsbCBzZXQganVzdCB0aGUgZmlyc3QuIFRvIHNldFxuXAorZWFjaCBwYXJtIHRvIHVuaXF1ZSB2YWx1ZXMsIHNwZWNpZnkgYm90aCBhbmQgc2VwYXJhdGUgdGhlbSB3aXRoIGFcblwKK2NvbW1hLlxuIjsgCisKKwwKKy8qIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBDTyB1bmlkaXJlY3Rpb25hbCBkYXRhIHRyYW5zZmVyIHRlc3QgKi8KKy8qIChhLmsuYS4gc3RyZWFtKSBmb3IgdGhlIHNvY2tldHMgaW50ZXJmYWNlLiBJdCByZWNlaXZlcyBpdHMgKi8KKy8qIHBhcmFtZXRlcnMgdmlhIGdsb2JhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc2hlbGwgYW5kIHdyaXRlcyBpdHMgKi8KKy8qIG91dHB1dCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworCisKK3ZvaWQgCitzZW5kX2RscGlfY29fc3RyZWFtKCkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cCitXaW5kb3cgV2luZG93ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIFxuXAorZnJhbWVzIGZyYW1lcyAgYnl0ZXMgICAgc2Vjcy4gICAgJXMvc2VjICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZlxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzEgPQorICAgICIlNWQgICU1ZCAgJTZkICAgICUtNi4yZiAgICU3LjJmICAgXG4iOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpemF0aW9uICAgIFNlcnZpY2UgRGVtYW5kXG5cCitXaW5kb3cgV2luZG93ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBTZW5kICAgUmVjdiAgICBTZW5kICAgIFJlY3ZcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIGxvY2FsICByZW1vdGUgIGxvY2FsICAgcmVtb3RlXG5cCitmcmFtZXMgZnJhbWVzICBieXRlcyAgICBzZWNzLiAgICAlLTguOHMvcyAgJSUgICAgICAlJSAgICAgICB1cy9LQiAgIHVzL0tCXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMSA9CisgICAgIiU1ZCAgJTVkICAlNmQgICAgJS02LjJmICAgICAlNy4yZiAgICUtNi4yZiAlLTYuMmYgICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlxuXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0ICAgICAgICAgJS04LjhzICUtOC44cyAgICBTZW5kcyAgICUtOC44cyBSZWN2c1xuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZSAgWGZlcmVkICAgUGVyICAgICAgICAgICAgICAgICBQZXJcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2ICAgICAgICAgICAgIFNlbmQgKGF2ZykgICAgICAgICAgUmVjdiAoYXZnKVxuXAorJTVkICAgJTVkICAlNWQgICAlNWQgJTYuNGcgICU2LjJmICAgICAlNmQgJTYuMmYgICAlNmRcbiI7CisgIAorICAKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIGludCBpbnRlcnZhbF9jb3VudDsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAKKyAgLyogd2hhdCB3ZSB3YW50IGlzIHRvIGhhdmUgYSBidWZmZXIgc3BhY2UgdGhhdCBpcyBhdCBsZWFzdCBvbmUgKi8KKyAgLyogc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc2VuZCB3aW5kb3cuIHRoaXMgd2lsbCBpbnN1cmUgdGhhdCB3ZSAqLworICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgLyogb2YgdGhlIHRyYW5zcG9ydC4gVGhpcyBidWZmZXIgd2lsbCBiZSBtYWxsb2MnZCBhZnRlciB3ZSBoYXZlIGZvdW5kICovCisgIC8qIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBzZW5jIHNvY2tldCBidWZmZXIuIFdlIHdpbGwgd2FudCB0byBkZWFsICovCisgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBjaGFyCSptZXNzYWdlOworICBjaGFyCSptZXNzYWdlX3B0cjsKKyAgc3RydWN0IHN0cmJ1ZiBzZW5kX21lc3NhZ2U7CisgIGNoYXIgIGRsc2FwW0JVRlNJWl07CisgIGludCAgIGRsc2FwX2xlbjsKKyAgaW50CSptZXNzYWdlX2ludF9wdHI7CisgIGludAltZXNzYWdlX29mZnNldDsKKyAgaW50CW1hbGxvY19zaXplOworICAKKyAgaW50CWxlbjsKKyAgaW50CW51bW1lc3NhZ2VzOworICBpbnQJc2VuZF9kZXNjcmlwdG9yOworICBpbnQJYnl0ZXNfcmVtYWluaW5nOworICAvKiB3aXRoIGxpbmtzIGxpa2UgZmRkaSwgb25lIGNhbiBzZW5kID4gMzIgYml0cyB3b3J0aCBvZiBieXRlcyAqLworICAvKiBkdXJpbmcgYSB0ZXN0Li4uIDstKSAqLworICBkb3VibGUJYnl0ZXNfc2VudDsKKyAgCisjaWZkZWYgRElSVFkKKyAgaW50CWk7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QJZGxwaV9jb19zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKmRscGlfY29fc3RyZWFtX3JlcXVlc3Q7CisgIHN0cnVjdAlkbHBpX2NvX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QJKmRscGlfY29fc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJZGxwaV9jb19zdHJlYW1fcmVzdWx0c19zdHJ1Y3QJKmRscGlfY29fc3RyZWFtX3Jlc3VsdDsKKyAgCisgIGRscGlfY29fc3RyZWFtX3JlcXVlc3QJPSAKKyAgICAoc3RydWN0IGRscGlfY29fc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkbHBpX2NvX3N0cmVhbV9yZXNwb25zZQk9CisgICAgKHN0cnVjdCBkbHBpX2NvX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkbHBpX2NvX3N0cmVhbV9yZXN1bHQJICAgICAgICA9IAorICAgIChzdHJ1Y3QgZGxwaV9jb19zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIGZwcmludGYod2hlcmUsIkRMUEkgQ08gU1RSRUFNIFRFU1RcbiIpOworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkKKyAgICAgIGZwcmludGYod2hlcmUsY3B1X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICBlbHNlCisgICAgICBmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICB9CisgIAorICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzICovCisgIAorICBudW1tZXNzYWdlcwk9CTA7CisgIGJ5dGVzX3NlbnQJPQkwLjA7CisgIHRpbWVzX3VwIAk9IAkwOworICAKKyAgLypzZXQgdXAgdGhlIGRhdGEgZGVzY3JpcHRvciAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHNlbmRfZGVzY3JpcHRvciA9IGRsX29wZW4obG9jX2RscGlfZGV2aWNlLGxvY19wcGEpOyAgCisgIGlmIChzZW5kX2Rlc2NyaXB0b3IgPCAwKXsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfZGxwaV9jb19zdHJlYW06IGRscGkgc3RyZWFtIGRhdGEgZGVzY3JpcHRvciIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIGJpbmQgdGhlIHB1cHB5IGFuZCBnZXQgdGhlIGFzc2lnbmVkIGRsc2FwICovCisgIGRsc2FwX2xlbiA9IEJVRlNJWjsKKyAgaWYgKGRsX2JpbmQoc2VuZF9kZXNjcmlwdG9yLCAKKyAgICAgICAgICAgICAgZGxwaV9zYXAsIERMX0NPRExTLCBkbHNhcCwgJmRsc2FwX2xlbikgIT0gMCkgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfZGxwaV9jb19ycjogYmluZCBmYWlsdXJlXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfZGxwaV9jb19zdHJlYW06IHNlbmRfZGVzY3JpcHRvciBvYnRhaW5lZC4uLlxuIik7CisgIH0KKyAgCisjaWZkZWYgRExfSFBfU0VUX0xPQ0FMX1dJTl9SRVEKKyAgaWYgKGxzd19zaXplID4gMCkgeworICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfZGxwaV9jb19zdHJlYW06IHdpbmRvdyBzZW5kIHNpemUgYWx0ZXJlZCBmcm9tIHN5c3RlbSBkZWZhdWx0Li4uXG4iKTsKKyAgICAgIGZwcmludGYod2hlcmUsIiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZDogJWRcbiIsbHN3X3NpemUpOworICAgIH0KKyAgfQorICBpZiAobHJ3X3NpemUgPiAwKSB7CisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogc2VuZF9kbHBpX2NvX3N0cmVhbTogd2luZG93IHJlY3Ygc2l6ZSBhbHRlcmVkIGZyb20gc3lzdGVtIGRlZmF1bHQuLi5cbiIpOworICAgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgICAgICAgICAgICAgICAgICByZWN2OiAlZFxuIixscndfc2l6ZSk7CisgICAgfQorICB9CisgIAorICAKKyAgLyogTm93LCB3ZSB3aWxsIGZpbmQtb3V0IHdoYXQgdGhlIHNpemUgYWN0dWFsbHkgYmVjYW1lLCBhbmQgcmVwb3J0ICovCisgIC8qIHRoYXQgYmFjayB0byB0aGUgdXNlci4gSWYgdGhlIGNhbGwgZmFpbHMsIHdlIHdpbGwganVzdCByZXBvcnQgYSAtMSAqLworICAvKiBiYWNrIHRvIHRoZSBpbml0aWF0b3IgZm9yIHRoZSByZWN2IGJ1ZmZlciBzaXplLiAqLworICAKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJuZXRwZXJmOiBzZW5kX2RscGlfY29fc3RyZWFtOiB3aW5kb3cgc2l6ZXMgZGV0ZXJtaW5lZC4uLlxuIik7CisgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgc2VuZDogJWQgcmVjdjogJWRcbiIsbHN3X3NpemUsbHJ3X3NpemUpOworICAgIGZmbHVjaCh3aGVyZSk7CisgIH0KKyAgCisjZWxzZSAvKiBETF9IUF9TRVRfTE9DQUxfV0lOX1JFUSAqLworICAKKyAgbHN3X3NpemUgPSAtMTsKKyAgbHJ3X3NpemUgPSAtMTsKKyAgCisjZW5kaWYgLyogRExfSFBfU0VUX0xPQ0FMX1dJTl9SRVEgKi8KKyAgCisgIC8qIHdlIHNob3VsZCBwaWNrIGEgZGVmYXVsdCBzZW5kX3NpemUsIGl0IHNob3VsZCBub3QgYmUgbGFyZ2VyIHRoYW4gKi8KKyAgLyogdGhlIG1pbiBvZiB0aGUgdHdvIGludGVyZmFjZSBNVFUncywgYW5kIHNob3VsZCBwZXJoYXBzIGRlZmF1bHQgdG8gKi8KKyAgLyogdGhlIEludGVyZmFjZSBNVFUsIGJ1dCBmb3Igbm93LCB3ZSB3aWxsIGRlZmF1bHQgaXQgdG8gMTAyNC4uLiBpZiAqLworICAvKiBzb21lb25lIHdhbnRzIHRvIGNoYW5nZSB0aGlzLCB0aGUgc2hvdWxkIGNoYW5nZSB0aGUgY29ycmVzcG9uZGluZyAqLworICAvKiBsaW5lcyBpbiB0aGUgcmVjdl9kbHBpX2NvX3N0cmVhbSByb3V0aW5lICovCisgIAorICBpZiAoc2VuZF9zaXplID09IDApIHsKKyAgICBzZW5kX3NpemUgPSAxMDI0OworICB9CisgIAorICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldC4gKi8KKyAgLyogQWZ0ZXIgd2UgaGF2ZSBjYWxjdWxhdGVkIHRoZSBwcm9wZXIgc3RhcnRpbmcgYWRkcmVzcywgd2Ugd2FudCB0byAqLworICAvKiBwdXQgdGhhdCBiYWNrIGludG8gdGhlIG1lc3NhZ2UgdmFyaWFibGUgc28gd2UgZ28gYmFjayB0byB0aGUgKi8KKyAgLyogcHJvcGVyIHBsYWNlLiBub3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGZpcnN0IHNlbmQgaXMgKi8KKyAgLyogZ3VhcmFudGVlZCB0byBiZSBhdCB0aGUgYWxpZ25tZW50IHNwZWNpZmllZCBieSB0aGUgLWEgcGFyYW1ldGVyLiBJICovCisgIC8qIHRoaW5rIHRoYXQgdGhpcyBpcyBhIGxpdHRsZSBtb3JlICJyZWFsLXdvcmxkIiB0aGFuIHdoYXQgd2FzIGZvdW5kICovCisgIC8qIGluIHByZXZpb3VzIHZlcnNpb25zLiBub3RlIGFsc28gdGhhdCB3ZSBoYXZlIGFsbG9jYXRlZCBhIHF1YW50aXR5ICovCisgIC8qIG9mIG1lbW9yeSB0aGF0IGlzIGF0IGxlYXN0IG9uZSBzZW5kLXNpemUgZ3JlYXRlciB0aGFuIG91ciBzb2NrZXQgKi8KKyAgLyogYnVmZmVyIHNpemUuIFdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gKi8KKyAgLyogYnVmZmVycyBhbGxvY2F0ZWQgLSB0aGlzIGNhbiBiZSBhIGJpdCBvZiBhIHByb2JsZW0gd2hlbiB0aGUgKi8KKyAgLyogc2VuZF9zaXplIGlzIGJpZ2dlciB0aGFuIHRoZSBzb2NrZXQgc2l6ZSwgc28gd2UgbXVzdCBjaGVjay4uLiB0aGUgKi8KKyAgLyogdXNlciBtYXkgaGF2ZSB3YW50ZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlICJ3aWR0aCIgb2Ygb3VyIHNlbmQgKi8KKyAgLyogYnVmZmVycywgd2Ugc2hvdWxkIHJlc3BlY3QgdGhhdCB3aXNoLi4uICovCisgIGlmIChzZW5kX3dpZHRoID09IDApIHsKKyAgICBzZW5kX3dpZHRoID0gKGxzd19zaXplL3NlbmRfc2l6ZSkgKyAxOworICAgIGlmIChzZW5kX3dpZHRoID09IDEpIHNlbmRfd2lkdGgrKzsKKyAgfQorICAKKyAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICBzZW5kX3NpemUsCisJCQkJICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICBsb2NhbF9zZW5kX29mZnNldCk7CisgIAorICBzZW5kX21lc3NhZ2UubWF4bGVuID0gc2VuZF9zaXplOworICBzZW5kX21lc3NhZ2UubGVuID0gc2VuZF9zaXplOworICBzZW5kX21lc3NhZ2UuYnVmID0gc2VuZF9yaW5nLT5idWZmZXJfcHRyOworICAKKyAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suKi8KKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICB9CisgIAorICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUgc29ja2V0ICovCisgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAvKiBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggKi8KKyAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuICovCisgIAorICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJID0JRE9fRExQSV9DT19TVFJFQU07CisgIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPnNlbmRfd2luX3NpemUgPQlyc3dfc2l6ZTsKKyAgZGxwaV9jb19zdHJlYW1fcmVxdWVzdC0+cmVjdl93aW5fc2l6ZSA9CXJyd19zaXplOworICBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5yZWNlaXZlX3NpemUJID0JcmVjdl9zaXplOworICBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudD0JcmVtb3RlX3JlY3ZfYWxpZ247CisgIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CSA9CXJlbW90ZV9yZWN2X29mZnNldDsKKyAgZGxwaV9jb19zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUJID0JcmVtb3RlX2NwdV91c2FnZTsKKyAgZGxwaV9jb19zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUJID0JcmVtb3RlX2NwdV9yYXRlOworICBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5wcGEgICAgICAgICAgID0gICAgICByZW1fcHBhOworICBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5zYXAgICAgICAgICAgID0gICAgICBkbHBpX3NhcDsKKyAgZGxwaV9jb19zdHJlYW1fcmVxdWVzdC0+ZGV2X25hbWVfbGVuICA9ICAgICAgc3RybGVuKHJlbV9kbHBpX2RldmljZSk7CisgIHN0cmNweShkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5kbHBpX2RldmljZSwKKwkgcmVtX2RscGlfZGV2aWNlKTsKKyAgCisjaWZkZWYgX19hbHBoYQorICAKKyAgLyogb2sgLSBldmVuIG9uIGEgREVDIGJveCwgc3RyaW5ncyBhcmUgc3RyaW5ncy4gSSBkaWRuJ3QgcmVhbGx5IHdhbnQgKi8KKyAgLyogdG8gbnRvaGwgdGhlIHdvcmRzIG9mIGEgc3RyaW5nLiBzaW5jZSBJIGRvbid0IHdhbnQgdG8gdGVhY2ggdGhlICovCisgIC8qIHNlbmRfIGFuZCByZWN2XyBfcmVxdWVzdCBhbmQgX3Jlc3BvbnNlIHJvdXRpbmVzIGFib3V0IHRoZSB0eXBlcywgKi8KKyAgLyogSSB3aWxsIHB1dCAiYW50aS1udG9obCIgY2FsbHMgaGVyZS4gSSBpbWFnaW5lIHRoYXQgdGhlICJwdXJlIiAqLworICAvKiBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgWERSLCBidXQgSSBhbSBzdGlsbCBsZWFyeSBvZiBiZWluZyBhYmxlICovCisgIC8qIHRvIGZpbmQgWERSIGxpYnMgb24gYWxsIHBsYXRmb3JtcyBJIHdhbnQgcnVubmluZyBuZXRwZXJmLiByYWogKi8KKyAgeworICAgIGludCAqY2hhcndvcmQ7CisgICAgaW50ICppbml0d29yZDsKKyAgICBpbnQgKmxhc3R3b3JkOworICAgIAorICAgIGluaXR3b3JkID0gKGludCAqKSBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5kbHBpX2RldmljZTsKKyAgICBsYXN0d29yZCA9IGluaXR3b3JkICsgKChzdHJsZW4ocmVtX2RscGlfZGV2aWNlKSArIDMpIC8gNCk7CisgICAgCisgICAgZm9yIChjaGFyd29yZCA9IGluaXR3b3JkOworCSBjaGFyd29yZCA8IGxhc3R3b3JkOworCSBjaGFyd29yZCsrKSB7CisgICAgICAKKyAgICAgICpjaGFyd29yZCA9IG50b2hsKCpjaGFyd29yZCk7CisgICAgfQorICB9CisjZW5kaWYgLyogX19hbHBoYSAqLworICAKKyAgaWYgKHRlc3RfdGltZSkgeworICAgIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90aW1lOworICB9CisgIGVsc2UgeworICAgIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF9ieXRlczsKKyAgfQorI2lmZGVmIERJUlRZCisgIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPmRpcnR5X2NvdW50ICAgICAgID0gICAgICAgcmVtX2RpcnR5X2NvdW50OworICBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICAgICA9ICAgICAgIHJlbV9jbGVhbl9jb3VudDsKKyNlbmRpZiAvKiBESVJUWSAqLworICAKKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAibmV0cGVyZjogc2VuZF9kbHBpX2NvX3N0cmVhbTogcmVxdWVzdGluZyBETFBJIENPIHN0cmVhbSB0ZXN0XG4iKTsKKyAgfQorICAKKyAgc2VuZF9yZXF1ZXN0KCk7CisgIAorICAvKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIHJlbGV2YW50IAkqLworICAvKiBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrIGludG8gCSovCisgIC8qIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4gIFRoZQkqLworICAvKiByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwgaGF2ZSBkb25lCSovCisgIC8qIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUgY3B1IGxvY2FsbHkJKi8KKyAgLyogYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgdmFsdWUgcmlnaHQJKi8KKyAgLyogYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZSB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQJKi8KKyAgLyogYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMJKi8KKyAgLyogYmVpbmcgc2VudCBmb3IgdGhlIFRDUCB0ZXN0cy4JCQkJCSovCisgIAorICByZWN2X3Jlc3BvbnNlKCk7CisgIAorICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgaWYgKGRlYnVnKQorICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisgICAgcnJ3X3NpemUJPQlkbHBpX2NvX3N0cmVhbV9yZXNwb25zZS0+cmVjdl93aW5fc2l6ZTsKKyAgICByc3dfc2l6ZQk9CWRscGlfY29fc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX3dpbl9zaXplOworICAgIHJlbW90ZV9jcHVfdXNhZ2U9CWRscGlfY29fc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKyAgICByZW1vdGVfY3B1X3JhdGUgPSAJZGxwaV9jb19zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCJuZXRwZXJmOiByZW1vdGUgZXJyb3IiKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBkZXNjcmlwdG9yICovCisgIGlmKGRsX2Nvbm5lY3Qoc2VuZF9kZXNjcmlwdG9yLAorCQlkbHBpX2NvX3N0cmVhbV9yZXNwb25zZS0+c3RhdGlvbl9hZGRyLAorCQlkbHBpX2NvX3N0cmVhbV9yZXNwb25zZS0+c3RhdGlvbl9hZGRyX2xlbikgIT0gMCkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jb19zdHJlYW06IGNvbm5lY3QgZmFpbHVyZVxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciB0aGUgKi8KKyAgLyogY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkIGhhdmUgKi8KKyAgLyogaW5kaWNhdGVkIGEgcHJvYmxlbS4gSSBmYWlsZWQgdG8gc2VlIHRoZSB2YWx1ZSBvZiB0aGUgZXh0cmEgKi8KKyAgLyogbWVzc2FnZSBhZnRlciB0aGUgYWNjZXB0IG9uIHRoZSByZW1vdGUuIElmIGl0IGZhaWxlZCwgd2UnbGwgc2VlIGl0ICovCisgIC8qIGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nIGRhdGEuICovCisgIAorICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHN0cmVhbSB0ZXN0LCB0aGV5IGNhbiBiZSAqLworICAvKiBlaXRoZXIgdGltZSBvciBieXRlLWNvdW50IGJhc2VkLiAqLworICAKKyAgaWYgKHRlc3RfdGltZSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICB0aW1lc191cCA9IDA7CisgICAgYnl0ZXNfcmVtYWluaW5nID0gMDsKKyAgICBzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgd2FudGVkIHRvIHNlbmQgYSBudW1iZXIgb2YgYnl0ZXMuICovCisgICAgYnl0ZXNfcmVtYWluaW5nID0gdGVzdF9ieXRlczsKKyAgICB0aW1lc191cCA9IDE7CisgIH0KKyAgCisgIC8qIFRoZSBjcHVfc3RhcnQgcm91dGluZSB3aWxsIGdyYWIgdGhlIGN1cnJlbnQgdGltZSBhbmQgcG9zc2libHkgKi8KKyAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAKKyAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisgIAorICAvKiBXZSB1c2UgYW4gIk9SIiB0byBjb250cm9sIHRlc3QgZXhlY3V0aW9uLiBXaGVuIHRoZSB0ZXN0IGlzICovCisgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAvKiBXaGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCwgdGhlIHRpbWUgdGVzdCB3aWxsICovCisgIC8qIGFsd2F5cyByZXR1cm4gZmFsc2UuIFdoZW4gdGhlIHRlc3QgaXMgZmluaXNoZWQsIHRoZSB3aG9sZSAqLworICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuICovCisgIAorI2lmZGVmIERJUlRZCisgIC8qIGluaXRpYWxpemUgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBwdXR0aW5nIGRpcnR5IHN0dWZmICovCisgIC8qIGludG8gdGhlIHNlbmQgYnVmZmVyLiByYWogKi8KKyAgc3JhbmQoKGludCkgZ2V0cGlkKCkpOworI2VuZGlmIC8qIERJUlRZICovCisgIAorICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKGJ5dGVzX3JlbWFpbmluZyA+IDApKSB7CisgICAgCisjaWZkZWYgRElSVFkKKyAgICAvKiB3ZSB3YW50IHRvIGRpcnR5IHNvbWUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVnZXJzIGluIHRoZSBidWZmZXIgKi8KKyAgICAvKiB3ZSBhcmUgYWJvdXQgdG8gc2VuZC4gd2UgbWF5IGFsc28gd2FudCB0byBicmluZyBzb21lIG51bWJlciBvZiAqLworICAgIC8qIHRoZW0gY2xlYW5seSBpbnRvIHRoZSBjYWNoZS4gVGhlIGNsZWFuIG9uZXMgd2lsbCBmb2xsb3cgYW55IGRpcnR5ICovCisgICAgLyogb25lcyBpbnRvIHRoZSBjYWNoZS4gKi8KKyAgICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopbWVzc2FnZV9wdHI7CisgICAgZm9yIChpID0gMDsgaSA8IGxvY19kaXJ0eV9jb3VudDsgaSsrKSB7CisgICAgICAqbWVzc2FnZV9pbnRfcHRyID0gcmFuZCgpOworICAgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBsb2NfY2xlYW5fY291bnQ7IGkrKykgeworICAgICAgbG9jX2RpcnR5X2NvdW50ID0gKm1lc3NhZ2VfaW50X3B0cjsKKyAgICAgIG1lc3NhZ2VfaW50X3B0cisrOworICAgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworICAgIAorICAgIGlmKChwdXRtc2coc2VuZF9kZXNjcmlwdG9yLAorCSAgICAgICAwLAorCSAgICAgICAmc2VuZF9tZXNzYWdlLAorCSAgICAgICAwKSkgIT0gMCkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorCWJyZWFrOworICAgICAgcGVycm9yKCJuZXRwZXJmOiBkYXRhIHNlbmQgZXJyb3IiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKyAgICBzZW5kX21lc3NhZ2UuYnVmID0gc2VuZF9yaW5nLT5idWZmZXJfcHRyOworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgZm9yIChpbnRlcnZhbF9jb3VudCA9IDA7CisJIGludGVydmFsX2NvdW50IDwgaW50ZXJ2YWxfd2F0ZTsKKwkgaW50ZXJ2YWxfY291bnQrKyk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAKKyAgICBpZiAoZGVidWcgPiA0KSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX2NscGlfY29fc3RyZWFtOiBwdXRtc2cgY2FsbGVkICIpOworICAgICAgZnByaW50Zih3aGVyZSwibGVuIGlzICVkXG4iLHNlbmRfbWVzc2FnZS5sZW4pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgaWYgKGJ5dGVzX3JlbWFpbmluZykgeworICAgICAgYnl0ZXNfcmVtYWluaW5nIC09IHNlbmRfc2l6ZTsKKyAgICB9CisgIH0KKyAgCisgIC8qIFRoZSB0ZXN0IGlzIG92ZXIuIEZsdXNoIHRoZSBidWZmZXJzIHRvIHRoZSByZW1vdGUgZW5kLiBXZSBkbyBhICovCisgIC8qIGdyYWNlZnVsIHJlbGVhc2UgdG8gaW5zdXJlIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4gdGFrZW4gYnkgdGhlICovCisgIC8qIHJlbW90ZS4gdGhpcyBuZWVkcyBhIGxpdHRsZSB3b3JrIC0gdGhlcmUgaXMgbm8gdGhyZWUtd2F5ICovCisgIC8qIGhhbmRzaGFrZSB3aXRoIHR5cGUgdHdvIGFzIHRoZXJlIGlzIHdpdGggVENQLCBzbyB0aGVyZSByZWFsbHkgKi8KKyAgLyogc2hvdWxkIGJlIGEgbWVzc2FnZSBleGNoYW5nZSBoZXJlLiBob3dldmVyLCB3ZSB3aWxsIGZpbmVzc2UgaXQgYnkgKi8KKyAgLyogc2F5aW5nIHRoYXQgdGhlIHRlc3RzIHNob3VkbCBydW4gZm9yIGEgd2hpbGUuICovIAorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwic2VuZGluZyB0ZXN0IGVuZCBzaWduYWwgXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzZW5kX21lc3NhZ2UubGVuID0gKHNlbmRfc2l6ZSAtIDEpOworICBpZiAoc2VuZF9tZXNzYWdlLmxlbiA9PSAwKSBzZW5kX21lc3NhZ2UubGVuID0gMjsKKyAgCisgIGlmKChwdXRtc2coc2VuZF9kZXNjcmlwdG9yLAorCSAgICAgMCwKKwkgICAgICZzZW5kX21lc3NhZ2UsCisJICAgICAwKSkgIT0gMCkgeworICAgIHBlcnJvcigibmV0cGVyZjogZGF0YSBzZW5kIGVycm9yIik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworICAKKyAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nIG1lYXN1cmVkPyAqLworICAvKiBob3cgbG9uZyBkaWQgd2UgcmVhbGx5IHJ1bj8gKi8KKyAgCisgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZSAqLworICAvKiBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZiBpdCAqLworICAvKiB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQgd2lsbCByZXR1cm4gb2J2aW91cyB2YWx1ZXMuICovCisgIAorICByZWN2X3Jlc3BvbnNlKCk7CisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHJlbW90ZSBlcnJvciIpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhydXB1dCB3YXMgZm9yIHRoZSB0ZXN0LiBJbiB0aGUgZnV0dXJlLCAqLworICAvKiB3ZSBtYXkgd2FudCB0byBpbmNsdWRlIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRocnVwdXQgbWVhc3VyZWQgYnkgKi8KKyAgLyogdGhlIHJlbW90ZSwgYnV0IGl0IHNob3VsZCBiZSB0aGUgY2FzZSB0aGF0IGZvciBhIFRDUCBzdHJlYW0gdGVzdCwgKi8KKyAgLyogdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiBXZSBjYWxjdWxhdGUgKi8KKyAgLyogYnl0ZXNfc2VudCByZWdhcmRsZXNzIG9mIHRoZSB3YXkgdGhlIHRlc3QgbGVuZ3RoIHdhcyBjb250cm9sbGVkLiAqLworICAvKiBJZiBpdCB3YXMgdGltZSwgd2UgbmVlZGVkIHRvLCBhbmQgaWYgaXQgd2FzIGJ5IGJ5dGVzLCB0aGUgdXNlciBtYXkgKi8KKyAgLyogaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgKi8KKyAgLyogc2VuZF9zaXplLCBzbyB3ZSByZWFsbHkgZGlkbid0IHNlbmQgd2hhdCBoZSBhc2tlZCBmb3IgOy0pICovCisgIAorICBieXRlc19zZW50CT0gKChkb3VibGUpIHNlbmRfc2l6ZSAqIChkb3VibGUpIG51bW1lc3NhZ2VzKSArIChkb3VibGUpIGxlbjsKKyAgdGhydXB1dAkJPSBjYWxjX3RocnVwdXQoYnl0ZXNfc2VudCk7CisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChsb2NhbF9jcHVfcmF0ZSA9PSAwLjApIHsKKwlmcHJpbnRmKHdoZXJlLAorCQkiV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HICBXQVJOSU5HIVxuIik7CisJZnByaW50Zih3aGVyZSwKKwkJIkxvY2FsIENQVSB1c2FnZSBudW1iZXJzIGJhc2VkIG9uIHByb2Nlc3MgaW5mb3JtYXRpb24gb25seSFcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbgk9IC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IC0xLjA7CisgICAgfQorICAgIAorICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICBpZiAocmVtb3RlX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsCisJCSJEQU5HRVIgICBEQU5HRVIgIERBTkdFUiAgIERBTkdFUiAgIERBTkdFUiAgREFOR0VSICAgREFOR0VSIVxuIik7CisJZnByaW50Zih3aGVyZSwKKwkJIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbgk9IGRscGlfY29fc3RyZWFtX3Jlc3VsdC0+Y3B1X3V0aWw7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQJPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgICAgZGxwaV9jb19zdHJlYW1fcmVzdWx0LT5udW1fY3B1cyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gLTEuMDsKKyAgICB9CisgICAgCisgICAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgICAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgICAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgcnJ3X3NpemUsCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgbHN3X3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LCAJCS8qIHdoYXQgd2FzIHRoZSB4ZmVyIHJhdGUgKi8KKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIHRocnVwdXQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgcnJ3X3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGxzd19zaXplLCAJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIHRocnVwdXQpOy8qIGhvdyBmYXN0IGRpZCBpdCBnbyAqLworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvKiBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBzb21lIG9mIHRoZSAqLworICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAvKiBtb21lbnQsIEkgZG8gbm90IHdpc2ggdG8gZmlndXJlLW91dCBhbGwgdGhlICBmb3JtYXR0aW5nLCBzbyBJIHdpbGwgKi8KKyAgLyoganVzdCBwdXQgdGhpcyBjb21tZW50IGhlcmUgdG8gaGVscCByZW1pbmQgbWUgdGhhdCBpdCBpcyBzb21ldGhpbmcgKi8KKyAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisgIAorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgICAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X2FsaWduLAorCSAgICBsb2NhbF9zZW5kX29mZnNldCwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICBieXRlc19zZW50LAorCSAgICBieXRlc19zZW50IC8gKGRvdWJsZSludW1tZXNzYWdlcywKKwkgICAgbnVtbWVzc2FnZXMsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKWRscGlfY29fc3RyZWFtX3Jlc3VsdC0+cmVjdl9jYWxscywKKwkgICAgZGxwaV9jb19zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzKTsKKyAgfQorICAKK30KKwwKKworLyogVGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgcm91dGluZSBmb3IgdGhlIHRjcCBzdHJlYW0gdGVzdC4gSXQgaXMgKi8KKy8qIGltcGxlbWVudGVkIGFzIG9uZSByb3V0aW5lLiBJIGNvdWxkIGJyZWFrIHRoaW5ncy1vdXQgc29tZXdoYXQsIGJ1dCAqLworLyogZGlkbid0IGZlZWwgaXQgd2FzIG5lY2Vzc2FyeS4gKi8KKworaW50IAorICByZWN2X2RscGlfY29fc3RyZWFtKCkKK3sKKyAgCisgIGludAlkYXRhX2Rlc2NyaXB0b3I7CisgIGludAlmbGFncyA9IDA7CisgIGludAltZWFzdXJlX2NwdTsKKyAgaW50CWJ5dGVzX3JlY2VpdmVkOworICBpbnQJcmVjZWl2ZV9jYWxsczsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworICAKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIGNoYXIJKm1lc3NhZ2VfcHRyOworICBjaGFyCSptZXNzYWdlOworICBpbnQgICAqbWVzc2FnZV9pbnRfcHRyOworICBzdHJ1Y3Qgc3RyYnVmIHJlY3ZfbWVzc2FnZTsKKyAgaW50ICAgZGlydHlfY291bnQ7CisgIGludCAgIGNsZWFuX2NvdW50OworICBpbnQgICBpOworICAKKyAgc3RydWN0CWRscGlfY29fc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSpkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QJZGxwaV9jb19zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpkbHBpX2NvX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0CWRscGlfY29fc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSpkbHBpX2NvX3N0cmVhbV9yZXN1bHRzOworICAKKyAgZGxwaV9jb19zdHJlYW1fcmVxdWVzdAk9IChzdHJ1Y3QgZGxwaV9jb19zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRscGlfY29fc3RyZWFtX3Jlc3BvbnNlCT0gKHN0cnVjdCBkbHBpX2NvX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkbHBpX2NvX3N0cmVhbV9yZXN1bHRzCT0gKHN0cnVjdCBkbHBpX2NvX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3ZfZGxwaV9jb19zdHJlYW06IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBETFBJX0NPX1NUUkVBTV9SRVNQT05TRTsKKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGUgdG8gYmUgYXQgdGhlIGRlc2lyZWQgKi8KKyAgLyogYWxpZ25tZW50IHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0LiAqLworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jb19zdHJlYW06IHJlcXVlc3RlZCBhbGlnbm1lbnQgb2YgJWRcbiIsCisJICAgIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAKKyAgLyogR3JhYiBhIGRlc2NyaXB0b3IgdG8gbGlzdGVuIG9uLCBhbmQgdGhlbiBsaXN0ZW4gb24gaXQuICovCisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kbHBpX2NvX3N0cmVhbTogZ3JhYmJpbmcgYSBkZXNjcmlwdG9yLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAKKyAgCisjaWZkZWYgX19hbHBoYQorICAKKyAgLyogb2sgLSBldmVuIG9uIGEgREVDIGJveCwgc3RyaW5ncyBhcmUgc3RyaW5ncy4gSSBkaW4ndCByZWFsbHkgd2FudCAqLworICAvKiB0byBudG9obCB0aGUgd29yZHMgb2YgYSBzdHJpbmcuIHNpbmNlIEkgZG9uJ3Qgd2FudCB0byB0ZWFjaCB0aGUgKi8KKyAgLyogc2VuZF8gYW5kIHJlY3ZfIF9yZXF1ZXN0IGFuZCBfcmVzcG9uc2Ugcm91dGluZXMgYWJvdXQgdGhlIHR5cGVzLCAqLworICAvKiBJIHdpbGwgcHV0ICJhbnRpLW50b2hsIiBjYWxscyBoZXJlLiBJIGltYWdpbmUgdGhhdCB0aGUgInB1cmUiICovCisgIC8qIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVzZSBYRFIsIGJ1dCBJIGFtIHN0aWxsIGxlYXJ5IG9mIGJlaW5nIGFibGUgKi8KKyAgLyogdG8gZmluZCBYRFIgbGlicyBvbiBhbGwgcGxhdGZvcm1zIEkgd2FudCBydW5uaW5nIG5ldHBlcmYuIHJhaiAqLworICB7CisgICAgaW50ICpjaGFyd29yZDsKKyAgICBpbnQgKmluaXR3b3JkOworICAgIGludCAqbGFzdHdvcmQ7CisgICAgCisgICAgaW5pdHdvcmQgPSAoaW50ICopIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPmRscGlfZGV2aWNlOworICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPmRldl9uYW1lX2xlbiArIDMpIC8gNCk7CisgICAgCisgICAgZm9yIChjaGFyd29yZCA9IGluaXR3b3JkOworCSBjaGFyd29yZCA8IGxhc3R3b3JkOworCSBjaGFyd29yZCsrKSB7CisgICAgICAKKyAgICAgICpjaGFyd29yZCA9IGh0b25sKCpjaGFyd29yZCk7CisgICAgfQorICB9CisjZW5kaWYgLyogX19hbHBoYSAqLworICAKKyAgZGF0YV9kZXNjcmlwdG9yID0gZGxfb3BlbihkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5kbHBpX2RldmljZSwKKwkJCSAgICBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5wcGEpOworICBpZiAoZGF0YV9kZXNjcmlwdG9yIDwgMCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIExldCdzIGdldCBhbiBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoaXMgZGVzY3JpcHRvciBzbyB3ZSBjYW4gdGVsbCB0aGUgKi8KKyAgLyogaW5pdGlhdG9yIGhvdyB0byByZWFjaCB0aGUgZGF0YSBkZXNjcmlwdG9yLiBUaGVyZSBtYXkgYmUgYSBkZXNpcmUgdG8gKi8KKyAgLyogbmFpbCB0aGlzIGRlc2NyaXB0b3IgdG8gYSBzcGVjaWZpYyBhZGRyZXNzIGluIGEgbXVsdGktaG9tZWQsICovCisgIC8qIG11bHRpLWNvbm5lY3Rpb24gc2l0dWF0aW9uLCBidXQgZm9yIG5vdywgd2UnbGwgaWdub3JlIHRoZSBpc3N1ZSAqLworICAvKiBhbmQgY29uY2VudHJhdGUgb24gc2luZ2xlIGNvbm5lY3Rpb24gdGVzdGluZy4gKi8KKyAgCisgIC8qIGJpbmQgdGhlIHNhcCBhbmQgcmV0cmlldmUgdGhlIGRsc2FwIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGRscGlfY29fc3RyZWFtX3Jlc3BvbnNlLT5zdGF0aW9uX2FkZHJfbGVuID0gMTQ7IC8qIGFyYml0cmFyeSAqLworICBpZiAoZGxfYmluZChkYXRhX2Rlc2NyaXB0b3IsCisJICAgICAgZGxwaV9jb19zdHJlYW1fcmVxdWVzdC0+c2FwLAorCSAgICAgIERMX0NPRExTLAorCSAgICAgIChjaGFyICopZGxwaV9jb19zdHJlYW1fcmVzcG9uc2UtPnN0YXRpb25fYWRkciwKKwkgICAgICAmZGxwaV9jb19zdHJlYW1fcmVzcG9uc2UtPnN0YXRpb25fYWRkcl9sZW4pICE9IDApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RscGlfY29fc3RyZWFtOiBiaW5kIGZhaWx1cmVcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogVGhlIGluaXRpYXRvciBtYXkgaGF2ZSB3aXNoZWQtdXMgdG8gbW9kaWZ5IHRoZSBzb2NrZXQgYnVmZmVyICovCisgIC8qIHNpemVzLiBXZSBzaG91bGQgZ2l2ZSBpdCBhIHNob3QuIElmIGhlIGRpZG4ndCBhc2sgdXMgdG8gY2hhbmdlIHRoZSAqLworICAvKiBzaXplcywgd2Ugc2hvdWxkIGxldCBoaW0ga25vdyB3aGF0IHNpemVzIHdlcmUgaW4gdXNlIGF0IHRoaXMgZW5kLiAqLworICAvKiBJZiBub25lIG9mIHRoaXMgY29kZSBpcyBjb21waWxlZC1pbiwgdGhlbiB3ZSB3aWxsIHRlbGwgdGhlICovCisgIC8qIGluaXRpYXRvciB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHBsYXkgd2l0aCB0aGUgc29ja2V0IGJ1ZmZlciBieSAqLworICAvKiBzZXR0aW5nIHRoZSBzaXplIGluIHRoZSByZXNwb25zZSB0byAtMS4gKi8KKyAgCisjaWZkZWYgRExfSFBfU0VUX0xPQ0FMX1dJTl9SRVEKKyAgCisgIGlmIChkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X3dpbl9zaXplKSB7CisgIH0KKyAgLyogTm93LCB3ZSB3aWxsIGZpbmQtb3V0IHdoYXQgdGhlIHNpemUgYWN0dWFsbHkgYmVjYW1lLCBhbmQgcmVwb3J0ICovCisgIC8qIHRoYXQgYmFjayB0byB0aGUgdXNlci4gSWYgdGhlIGNhbGwgZmFpbHMsIHdlIHdpbGwganVzdCByZXBvcnQgYSAtMSAqLworICAvKiBiYWNrIHRvIHRoZSBpbml0aWF0b3IgZm9yIHRoZSByZWN2IGJ1ZmZlciBzaXplLiAqLworICAKKyNlbHNlIC8qIHRoZSBzeXN0ZW0gd29uJ3QgbGV0IHVzIHBsYXkgd2l0aCB0aGUgYnVmZmVycyAqLworICAKKyAgZGxwaV9jb19zdHJlYW1fcmVzcG9uc2UtPnJlY3Zfd2luX3NpemUJPSAtMTsKKyAgCisjZW5kaWYgLyogRExfSFBfU0VUX0xPQ0FMX1dJTl9SRVEgKi8KKyAgCisgIC8qIHdoYXQgc29ydCBvZiBzaXplcyBkaWQgd2UgZW5kLXVwIHdpdGg/ICovCisgIC8qIHRoaXMgYml0IG9mIGNvZGUgd2hvdWxkIGRlZmF1bHQgdG8gdGhlIEludGVyZmFjZSBNVFUgKi8KKyAgaWYgKGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZSA9PSAwKSB7CisgICAgcmVjdl9zaXplID0gMTAyNDsKKyAgfQorICBlbHNlIHsKKyAgICByZWN2X3NpemUgPSBkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5yZWNlaXZlX3NpemU7CisgIH0KKyAgCisgIC8qIHRlbGwgdGhlIG90aGVyIGZlbGxvdyB3aGF0IG91ciByZWNlaXZlIHNpemUgYmVjYW1lICovCisgIGRscGlfY29fc3RyZWFtX3Jlc3BvbnNlLT5yZWNlaXZlX3NpemUgPSByZWN2X3NpemU7CisgIAorICAvKiBqdXN0IGEgbGl0dGxlIHByZXAgd29yayBmb3Igd2hlbiB3ZSBtYXkgaGF2ZSB0byBiZWhhdmUgbGlrZSB0aGUgKi8KKyAgLyogc2VuZGluZyBzaWRlLi4uICovCisgIG1lc3NhZ2UgPSAoY2hhciAqKW1hbGxvYyhyZWN2X3NpemUgKiAyKTsKKyAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkgeworICAgIHByaW50ZigibWFsbG9jKCVkKSBmYWlsZWQhXG4iLCByZWN2X3NpemUgKiAyKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgbWVzc2FnZV9wdHIgPSBBTElHTl9CVUZGRVIobWVzc2FnZSwgZGxwaV9jb19zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsIGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgcmVjdl9tZXNzYWdlLm1heGxlbiA9IHJlY3Zfc2l6ZTsKKyAgcmVjdl9tZXNzYWdlLmxlbiA9IDA7CisgIHJlY3ZfbWVzc2FnZS5idWYgPSBtZXNzYWdlX3B0cjsKKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kbHBpX2NvX3N0cmVhbTogcmVjZWl2ZSBhbGlnbm1lbnQgYW5kIG9mZnNldCBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIC0xIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICBkbHBpX2NvX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGUgPSAwLjA7IAkvKiBhc3N1bWUgbm8gY3B1ICovCisgIGlmIChkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIGRscGlfY29fc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgZGxwaV9jb19zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlID0gCisgICAgICBjYWxpYnJhdGVfbG9jYWxfY3B1KGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgLyogYWNjZXB0IGEgY29ubmVjdGlvbiBvbiB0aGlzIGZpbGUgZGVzY3JpcHRvci4gYXQgc29tZSBwb2ludCwgKi8KKyAgLyogZGxfYWNjZXB0IHdpbGwgImRvIHRoZSByaWdodCB0aGluZyIgd2l0aCB0aGUgbGFzdCB0d28gcGFybXMsIGJ1dCAqLworICAvKiBmb3Igbm93IGl0IGlnbm9yZXMgdGhlbSwgc28gd2Ugd2lsbCBwYXNzIHplcm9zLiAqLworICAKKyAgaWYoZGxfYWNjZXB0KGRhdGFfZGVzY3JpcHRvciwgMCwgMCkgIT0gMCkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X2RscGlfY29fc3RyZWFtOiBlcnJvciBpbiBhY2NlcHQsIGVycm5vICVkXG4iLAorCSAgICBlcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6cmVjdl9kbHBpX2NvX3N0cmVhbTogY29ubmVjdGlvbiBhY2NlcHRlZFxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisjaWZkZWYgRElSVFkKKyAgLyogd2Ugd2FudCB0byBkaXJ0eSBzb21lIG51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlZ2VycyBpbiB0aGUgYnVmZmVyICovCisgIC8qIHdlIGFyZSBhYm91dCB0byByZWN2LiB3ZSBtYXkgYWxzbyB3YW50IHRvIGJyaW5nIHNvbWUgbnVtYmVyIG9mICovCisgIC8qIHRoZW0gY2xlYW5seSBpbnRvIHRoZSBjYWNoZS4gVGhlIGNsZWFuIG9uZXMgd2lsbCBmb2xsb3cgYW55IGRpcnR5ICovCisgIC8qIG9uZXMgaW50byB0aGUgY2FjaGUuICovCisgIAorICBkaXJ0eV9jb3VudCA9IGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPmRpcnR5X2NvdW50OworICBjbGVhbl9jb3VudCA9IGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPmNsZWFuX2NvdW50OworICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopbWVzc2FnZV9wdHI7CisgIGZvciAoaSA9IDA7IGkgPCBkaXJ0eV9jb3VudDsgaSsrKSB7CisgICAgKm1lc3NhZ2VfaW50X3B0ciA9IHJhbmQoKTsKKyAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgY2xlYW5fY291bnQ7IGkrKykgeworICAgIGRpcnR5X2NvdW50ID0gKm1lc3NhZ2VfaW50X3B0cjsKKyAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgfQorI2VuZGlmIC8qIERJUlRZICovCisgIAorICByZWN2X21lc3NhZ2UubGVuID0gcmVjdl9zaXplOyAKKyAgd2hpbGUgKHJlY3ZfbWVzc2FnZS5sZW4gPT0gcmVjdl9zaXplKSB7CisgICAgaWYgKGdldG1zZyhkYXRhX2Rlc2NyaXB0b3IsIAorCSAgICAgICAwLAorCSAgICAgICAmcmVjdl9tZXNzYWdlLCAKKwkgICAgICAgJmZsYWdzKSAhPSAwKSB7CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgYnl0ZXNfcmVjZWl2ZWQgKz0gcmVjdl9tZXNzYWdlLmxlbjsKKyAgICByZWNlaXZlX2NhbGxzKys7CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJuZXRzZXJ2ZXI6cmVjdl9kbHBpX2NvX3N0cmVhbTogZ2V0bXNnIGFjY2VwdGVkICVkIGJ5dGVzXG4iLAorCSAgICAgIHJlY3ZfbWVzc2FnZS5sZW4pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgICAgCisjaWZkZWYgRElSVFkKKyAgICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopbWVzc2FnZV9wdHI7CisgICAgZm9yIChpID0gMDsgaSA8IGRpcnR5X2NvdW50OyBpKyspIHsKKyAgICAgICptZXNzYWdlX2ludF9wdHIgPSByYW5kKCk7CisgICAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IGNsZWFuX2NvdW50OyBpKyspIHsKKyAgICAgIGRpcnR5X2NvdW50ID0gKm1lc3NhZ2VfaW50X3B0cjsKKyAgICAgIG1lc3NhZ2VfaW50X3B0cisrOworICAgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworICAgIAorICB9CisgIAorICAvKiBUaGUgbG9vcCBub3cgZXhpdHMgZHVlIHRvIHplcm8gYnl0ZXMgcmVjZWl2ZWQuICovCisgIC8qIHNob3VsZCBwZXJmb3JtIGEgZGlzY29ubmVjdCB0byBzaWduYWwgdGhlIHNlbmRlciB0aGF0ICovCisgIC8qIHdlIGhhdmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhIHNlbnQuICovCisgIAorICBpZiAoY2xvc2UoZGF0YV9kZXNjcmlwdG9yKSA9PSAtMSkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIGNwdV9zdG9wKGRscGlfY29fc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1LCZlbGFwc2VkX3RpbWUpOworICAKKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X2RscGlfY29fc3RyZWFtOiBnb3QgJWQgYnl0ZXNcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kbHBpX2NvX3N0cmVhbTogZ290ICVkIHJlY3ZzXG4iLAorCSAgICByZWNlaXZlX2NhbGxzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBkbHBpX2NvX3N0cmVhbV9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZAk9IGJ5dGVzX3JlY2VpdmVkOworICBkbHBpX2NvX3N0cmVhbV9yZXN1bHRzLT5lbGFwc2VkX3RpbWUJPSBlbGFwc2VkX3RpbWU7CisgIGRscGlfY29fc3RyZWFtX3Jlc3VsdHMtPnJlY3ZfY2FsbHMJCT0gcmVjZWl2ZV9jYWxsczsKKyAgCisgIGlmIChkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIGRscGlfY29fc3RyZWFtX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbCgwLjApOworICB9OworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X2RscGlfY29fc3RyZWFtOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzZW5kX3Jlc3BvbnNlKCk7Cit9CisMCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgc2VuZF9kbHBpX2NvX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorIExvY2FsIC9SZW1vdGVcblwKKyBXaW5kb3cgU2l6ZSAgIFJlcXVlc3QgIFJlc3AuICAgRWxhcHNlZCAgVHJhbnMuXG5cCisgU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKKyBmcmFtZXMgZnJhbWVzIGJ5dGVzICAgIGJ5dGVzICAgc2Vjcy4gICAgcGVyIHNlYyAgIFxuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzEgPSAiXAorICUtNmQgJS02ZCAlLTZkICAgJS02ZCAgJS02LjJmICAgJTcuMmYgICBcbiI7CisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8yID0gIlwKKyAlLTZkICUtNmRcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorIExvY2FsIC9SZW1vdGVcblwKKyBXaW5kb3cgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHJhbnMuICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCisgU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIFJhdGUgICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKKyBmcmFtZXMgZnJhbWVzIGJ5dGVzICAgYnl0ZXMgIHNlY3MuICAgcGVyIHNlYyAgJSUgICAgICAlJSAgICAgIHVzL1RyICAgdXMvVHJcblxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMCA9CisgICAgIiU2LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMSA9ICJcCisgJS02ZCAlLTZkICUtNmQgICUtNmQgJS02LjJmICAlLTYuMmYgICAlLTYuMmYgJS02LjJmICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMiA9ICJcCisgJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlwKKyBBbGlnbm1lbnQgICAgICBPZmZzZXRcblwKKyBMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlXG5cCisgU2VuZCAgIFJlY3YgICAgU2VuZCAgIFJlY3ZcblwKKyAlNWQgICU1ZCAgICU1ZCAgJTVkXG4iOworICAKKyAgCisgIGludAkJCXRpbWVkX291dCA9IDA7CisgIGZsb2F0CQkJZWxhcHNlZF90aW1lOworICBpbnQJICAgIGRsc2FwX2xlbjsKKyAgY2hhciAgICAgIGRsc2FwW0JVRlNJWl07CisgIAorICBpbnQgICBmbGFncyA9IDA7CisgIGNoYXIJKnNlbmRfbWVzc2FnZV9wdHI7CisgIGNoYXIJKnJlY3ZfbWVzc2FnZV9wdHI7CisgIGNoYXIJKnRlbXBfbWVzc2FnZV9wdHI7CisgIHN0cnVjdCBzdHJidWYgc2VuZF9tZXNzYWdlOworICBzdHJ1Y3Qgc3RyYnVmIHJlY3ZfbWVzc2FnZTsKKyAgCisgIGludAludW1tZXNzYWdlczsKKyAgaW50CXNlbmRfZGVzY3JpcHRvcjsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgZG91YmxlCWJ5dGVzX3hmZXJkOworICAKKyAgaW50CXJzcF9ieXRlc19sZWZ0OworICAKKyAgLyogd2UgYXNzdW1lIHRoYXQgc3RhdGlvbiBhZHJlc3NlcyBmaXQgd2l0aGluIHR3byBpbnRzICovCisgIHVuc2lnbmVkIGludCAgIHJlbW90ZV9hZGRyZXNzWzFdOworICAKKyAgZmxvYXQJbG9jYWxfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgZmxvYXQJcmVtb3RlX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworICBkb3VibGUJdGhydXB1dDsKKyAgCisgIHN0cnVjdAlkbHBpX2NvX3JyX3JlcXVlc3Rfc3RydWN0CSpkbHBpX2NvX3JyX3JlcXVlc3Q7CisgIHN0cnVjdAlkbHBpX2NvX3JyX3Jlc3BvbnNlX3N0cnVjdAkqZGxwaV9jb19ycl9yZXNwb25zZTsKKyAgc3RydWN0CWRscGlfY29fcnJfcmVzdWx0c19zdHJ1Y3QJKmRscGlfY29fcnJfcmVzdWx0OworICAKKyAgZGxwaV9jb19ycl9yZXF1ZXN0CT0gCisgICAgKHN0cnVjdCBkbHBpX2NvX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkbHBpX2NvX3JyX3Jlc3BvbnNlCT0gCisgICAgKHN0cnVjdCBkbHBpX2NvX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRscGlfY29fcnJfcmVzdWx0CT0gCisgICAgKHN0cnVjdCBkbHBpX2NvX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgZnByaW50Zih3aGVyZSwiRExQSSBDTyBSRVFVRVNUL1JFU1BPTlNFIFRFU1RcbiIpOworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkKKyAgICAgIGZwcmludGYod2hlcmUsY3B1X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICBlbHNlCisgICAgICBmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICB9CisgIAorICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzICovCisgIAorICBudW1tZXNzYWdlcwk9CTA7CisgIGJ5dGVzX3hmZXJkCT0JMC4wOworICB0aW1lc191cCAJPSAJMDsKKyAgCisgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXJzIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldCAqLworICB0ZW1wX21lc3NhZ2VfcHRyID0gKGNoYXIgKiltYWxsb2MocmVxX3NpemUrTUFYQUxJR05NRU5UK01BWE9GRlNFVCk7CisgIGlmICh0ZW1wX21lc3NhZ2VfcHRyID09IE5VTEwpIHsKKyAgICBwcmludGYoIm1hbGxvYyglZCkgZmFpbGVkIVxuIiwgcmVxX3NpemUrTUFYQUxJR05NRU5UK01BWE9GRlNFVCk7CisgICAgZXhpdCgxKTsKKyAgfQorICBzZW5kX21lc3NhZ2VfcHRyID0gKGNoYXIgKikoKCAobG9uZykgdGVtcF9tZXNzYWdlX3B0ciArIAorCQkJICAgICAgIChsb25nKSBsb2NhbF9zZW5kX2FsaWduIC0gMSkgJgkKKwkJCSAgICAgIH4oKGxvbmcpIGxvY2FsX3NlbmRfYWxpZ24gLSAxKSk7CisgIHNlbmRfbWVzc2FnZV9wdHIgPSBzZW5kX21lc3NhZ2VfcHRyICsgbG9jYWxfc2VuZF9vZmZzZXQ7CisgIHNlbmRfbWVzc2FnZS5tYXhsZW4gPSByZXFfc2l6ZStNQVhBTElHTk1FTlQrTUFYT0ZGU0VUOworICBzZW5kX21lc3NhZ2UubGVuICAgID0gcmVxX3NpemU7CisgIHNlbmRfbWVzc2FnZS5idWYgICAgPSBzZW5kX21lc3NhZ2VfcHRyOworICAKKyAgdGVtcF9tZXNzYWdlX3B0ciA9IChjaGFyICopbWFsbG9jKHJzcF9zaXplK01BWEFMSUdOTUVOVCtNQVhPRkZTRVQpOworICBpZiAodGVtcF9tZXNzYWdlX3B0ciA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIHJzcF9zaXplK01BWEFMSUdOTUVOVCtNQVhPRkZTRVQpOworICAgIGV4aXQoMSk7CisgIH0KKyAgcmVjdl9tZXNzYWdlX3B0ciA9IChjaGFyICopKCggKGxvbmcpIHRlbXBfbWVzc2FnZV9wdHIgKyAKKwkJCSAgICAgICAobG9uZykgbG9jYWxfcmVjdl9hbGlnbiAtIDEpICYJCisJCQkgICAgICB+KChsb25nKSBsb2NhbF9yZWN2X2FsaWduIC0gMSkpOworICByZWN2X21lc3NhZ2VfcHRyID0gcmVjdl9tZXNzYWdlX3B0ciArIGxvY2FsX3JlY3Zfb2Zmc2V0OworICByZWN2X21lc3NhZ2UubWF4bGVuID0gcnNwX3NpemUrTUFYQUxJR05NRU5UK01BWE9GRlNFVDsKKyAgcmVjdl9tZXNzYWdlLmxlbiAgICA9IDA7CisgIHJlY3ZfbWVzc2FnZS5idWYgICAgPSBzZW5kX21lc3NhZ2VfcHRyOworICAKKyAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgCisgIHNlbmRfZGVzY3JpcHRvciA9IGRsX29wZW4obG9jX2RscGlfZGV2aWNlLGxvY19wcGEpOworICBpZiAoc2VuZF9kZXNjcmlwdG9yIDwgMCl7CisgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX2RscGlfY29fcnI6IHRjcCBzdHJlYW0gZGF0YSBkZXNjcmlwdG9yIik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwic2VuZF9kbHBpX2NvX3JyOiBzZW5kX2Rlc2NyaXB0b3Igb2J0YWluZWQuLi5cbiIpOworICB9CisgIAorICAvKiBiaW5kIHRoZSBwdXBweSBhbmQgZ2V0IHRoZSBhc3NpZ25lZCBkbHNhcCAqLworICAKKyAgZGxzYXBfbGVuID0gQlVGU0laOworICBpZiAoZGxfYmluZChzZW5kX2Rlc2NyaXB0b3IsIAorCSAgICAgIGRscGlfc2FwLCBETF9DT0RMUywgZGxzYXAsICZkbHNhcF9sZW4pICE9IDApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX2RscGlfY29fcnI6IGJpbmQgZmFpbHVyZVxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBNb2RpZnkgdGhlIGxvY2FsIHNvY2tldCBzaXplLiBUaGUgcmVhc29uIHdlIGFsdGVyIHRoZSBzZW5kIGJ1ZmZlciAqLworICAvKiBzaXplIGhlcmUgcmF0aGVyIHRoYW4gd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIGlzIHRvIHRha2UgY2FyZSAqLworICAvKiBvZiBkZWNyZWFzZXMgaW4gYnVmZmVyIHNpemUuIERlY3JlYXNpbmcgdGhlIHdpbmRvdyBzaXplIGFmdGVyICovCisgIC8qIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBpcyBhIFRDUCBuby1uby4gQWxzbywgYnkgc2V0dGluZyB0aGUgKi8KKyAgLyogYnVmZmVyICh3aW5kb3cpIHNpemUgYmVmb3JlIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCB3ZSBjYW4gKi8KKyAgLyogY29udHJvbCB0aGUgVENQIE1TUyAoc2VnbWVudCBzaXplKS4gVGhlIE1TUyBpcyBuZXZlciBtb3JlIHRoYXQgMS8yICovCisgIC8qIHRoZSBtaW5pbXVtIHJlY2VpdmUgYnVmZmVyIHNpemUgYXQgZWFjaCBoYWxmIG9mIHRoZSBjb25uZWN0aW9uLiAqLworICAvKiBUaGlzIGlzIHdoeSB3ZSBhcmUgYWx0ZXJpbmcgdGhlIHJlY2VpdmUgYnVmZmVyIHNpemUgb24gdGhlIHNlbmRpbmcgKi8KKyAgLyogc2l6ZSBvZiBhIHVuaWRpcmVjdGlvbmFsIHRyYW5zZmVyLiBJZiB0aGUgdXNlciBoYXMgbm90IHJlcXVlc3RlZCAqLworICAvKiB0aGF0IHRoZSBzb2NrZXQgYnVmZmVycyBiZSBhbHRlcmVkLCB3ZSB3aWxsIHRyeSB0byBmaW5kLW91dCB3aGF0ICovCisgIC8qIHRoZWlyIHZhbHVlcyBhcmUuIElmIHdlIGNhbm5vdCB0b3VjaCB0aGUgc29ja2V0IGJ1ZmZlciBpbiBhbnkgd2F5LCAqLworICAvKiB3ZSB3aWxsIHNldCB0aGUgdmFsdWVzIHRvIC0xIHRvIGluZGljYXRlIHRoYXQuICAqLworICAKKyNpZmRlZiBETF9IUF9TRVRfTE9DQUxfV0lOX1JFUQorICBpZiAobHN3X3NpemUgPiAwKSB7CisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwibmV0cGVyZjogc2VuZF9kbHBpX2NvX3JyOiBzb2NrZXQgc2VuZCBzaXplIGFsdGVyZWQgZnJvbSBzeXN0ZW0gZGVmYXVsdC4uLlxuIik7CisgICAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6ICVkXG4iLGxzd19zaXplKTsKKyAgICB9CisgIH0KKyAgaWYgKGxyd19zaXplID4gMCkgeworICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfZGxwaV9jb19ycjogc29ja2V0IHJlY3Ygc2l6ZSBhbHRlcmVkIGZyb20gc3lzdGVtIGRlZmF1bHQuLi5cbiIpOworICAgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgICAgICAgICAgICAgICAgICByZWN2OiAlZFxuIixscndfc2l6ZSk7CisgICAgfQorICB9CisgIAorICAKKyAgLyogTm93LCB3ZSB3aWxsIGZpbmQtb3V0IHdoYXQgdGhlIHNpemUgYWN0dWFsbHkgYmVjYW1lLCBhbmQgcmVwb3J0ICovCisgIC8qIHRoYXQgYmFjayB0byB0aGUgdXNlci4gSWYgdGhlIGNhbGwgZmFpbHMsIHdlIHdpbGwganVzdCByZXBvcnQgYSAtMSAqLworICAvKiBiYWNrIHRvIHRoZSBpbml0aWF0b3IgZm9yIHRoZSByZWN2IGJ1ZmZlciBzaXplLiAqLworICAKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfZGxwaV9jb19ycjogc29ja2V0IHNpemVzIGRldGVybWluZWQuLi5cbiIpOworICAgIGZwcmludGYod2hlcmUsIiAgICAgICAgIHNlbmQ6ICVkIHJlY3Y6ICVkXG4iLGxzd19zaXplLGxyd19zaXplKTsKKyAgfQorICAKKyNlbHNlIC8qIERMX0hQX1NFVF9MT0NBTF9XSU5fUkVRICovCisgIAorICBsc3dfc2l6ZSA9IC0xOworICBscndfc2l6ZSA9IC0xOworICAKKyNlbmRpZiAvKiBETF9IUF9TRVRfTE9DQUxfV0lOX1JFUSAqLworICAKKyAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suKi8KKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICB9CisgIAorICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUgc29ja2V0ICovCisgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAvKiBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggKi8KKyAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgIC8qIGRlZmF1bHQgdG8gOCwgd2hpY2ggd2lsbCBiZSBubyBhbGlnbm1lbnQgYWx0ZXJhdGlvbnMuICovCisgIAorICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJICAgICAgICA9CURPX0RMUElfQ09fUlI7CisgIGRscGlfY29fcnJfcmVxdWVzdC0+cmVjdl93aW5fc2l6ZQk9CXJyd19zaXplOworICBkbHBpX2NvX3JyX3JlcXVlc3QtPnNlbmRfd2luX3NpemUJPQlyc3dfc2l6ZTsKKyAgZGxwaV9jb19ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudAk9CXJlbW90ZV9yZWN2X2FsaWduOworICBkbHBpX2NvX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICBkbHBpX2NvX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50CT0JcmVtb3RlX3NlbmRfYWxpZ247CisgIGRscGlfY29fcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQJPQlyZW1vdGVfc2VuZF9vZmZzZXQ7CisgIGRscGlfY29fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplCT0JcmVxX3NpemU7CisgIGRscGlfY29fcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZQk9CXJzcF9zaXplOworICBkbHBpX2NvX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgZGxwaV9jb19ycl9yZXF1ZXN0LT5jcHVfcmF0ZQkgICAgICAgID0JcmVtb3RlX2NwdV9yYXRlOworICBkbHBpX2NvX3JyX3JlcXVlc3QtPnBwYSAgICAgICAgICAgICAgID0gICAgICAgcmVtX3BwYTsKKyAgZGxwaV9jb19ycl9yZXF1ZXN0LT5zYXAgICAgICAgICAgICAgICA9ICAgICAgIGRscGlfc2FwOworICBkbHBpX2NvX3JyX3JlcXVlc3QtPmRldl9uYW1lX2xlbiAgICAgID0gICAgICAgc3RybGVuKHJlbV9kbHBpX2RldmljZSk7CisgIHN0cmNweShkbHBpX2NvX3JyX3JlcXVlc3QtPmRscGlfZGV2aWNlLAorCSByZW1fZGxwaV9kZXZpY2UpOworI2lmZGVmIF9fYWxwaGEKKyAgCisgIC8qIG9rIC0gZXZlbiBvbiBhIERFQyBib3gsIHN0cmluZ3MgYXJlIHN0cmluZ3MuIEkgZGluJ3QgcmVhbGx5IHdhbnQgKi8KKyAgLyogdG8gbnRvaGwgdGhlIHdvcmRzIG9mIGEgc3RyaW5nLiBzaW5jZSBJIGRvbid0IHdhbnQgdG8gdGVhY2ggdGhlICovCisgIC8qIHNlbmRfIGFuZCByZWN2XyBfcmVxdWVzdCBhbmQgX3Jlc3BvbnNlIHJvdXRpbmVzIGFib3V0IHRoZSB0eXBlcywgKi8KKyAgLyogSSB3aWxsIHB1dCAiYW50aS1udG9obCIgY2FsbHMgaGVyZS4gSSBpbWFnaW5lIHRoYXQgdGhlICJwdXJlIiAqLworICAvKiBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgWERSLCBidXQgSSBhbSBzdGlsbCBsZWFyeSBvZiBiZWluZyBhYmxlICovCisgIC8qIHRvIGZpbmQgWERSIGxpYnMgb24gYWxsIHBsYXRmb3JtcyBJIHdhbnQgcnVubmluZyBuZXRwZXJmLiByYWogKi8KKyAgeworICAgIGludCAqY2hhcndvcmQ7CisgICAgaW50ICppbml0d29yZDsKKyAgICBpbnQgKmxhc3R3b3JkOworICAgIAorICAgIGluaXR3b3JkID0gKGludCAqKSBkbHBpX2NvX3JyX3JlcXVlc3QtPmRscGlfZGV2aWNlOworICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKHN0cmxlbihyZW1fZGxwaV9kZXZpY2UpICsgMykgLyA0KTsKKyAgICAKKyAgICBmb3IgKGNoYXJ3b3JkID0gaW5pdHdvcmQ7CisJIGNoYXJ3b3JkIDwgbGFzdHdvcmQ7CisJIGNoYXJ3b3JkKyspIHsKKyAgICAgIAorICAgICAgKmNoYXJ3b3JkID0gbnRvaGwoKmNoYXJ3b3JkKTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBfX2FscGhhICovCisgIAorICBpZiAodGVzdF90aW1lKSB7CisgICAgZGxwaV9jb19ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgfQorICBlbHNlIHsKKyAgICBkbHBpX2NvX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90cmFucyAqIC0xOworICB9CisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0cGVyZjogc2VuZF9kbHBpX2NvX3JyOiByZXF1ZXN0aW5nIFRDUCBzdHJlYW0gdGVzdFxuIik7CisgIH0KKyAgCisgIHNlbmRfcmVxdWVzdCgpOworICAKKyAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAJKi8KKyAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodAkqLworICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodAkqLworICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAvKiBiZWluZyBzZW50IGZvciB0aGUgVENQIHRlc3RzLgkJCQkJKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKyAgICBycndfc2l6ZQk9CWRscGlfY29fcnJfcmVzcG9uc2UtPnJlY3Zfd2luX3NpemU7CisgICAgcnN3X3NpemUJPQlkbHBpX2NvX3JyX3Jlc3BvbnNlLT5zZW5kX3dpbl9zaXplOworICAgIHJlbW90ZV9jcHVfdXNhZ2U9CWRscGlfY29fcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgIHJlbW90ZV9jcHVfcmF0ZSA9IAlkbHBpX2NvX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKyAgICAKKyAgfQorICBlbHNlIHsKKyAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgIHBlcnJvcigibmV0cGVyZjogcmVtb3RlIGVycm9yIik7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBkZXNjcmlwdG9yICAqLworICAKKyAgaWYoZGxfY29ubmVjdChzZW5kX2Rlc2NyaXB0b3IsCisJCWRscGlfY29fcnJfcmVzcG9uc2UtPnN0YXRpb25fYWRkciwKKwkJZGxwaV9jb19ycl9yZXNwb25zZS0+c3RhdGlvbl9hZGRyX2xlbikgIT0gMCkgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfZGxwaV9jb19ycjogY29ubmVjdCBmYWlsdXJlXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIERhdGEgU29ja2V0IHNldC11cCBpcyBmaW5pc2hlZC4gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcywgZWl0aGVyIHRoZSAqLworICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAvKiBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBleHRyYSAqLworICAvKiBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCB3ZSdsbCBzZWUgaXQgKi8KKyAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgCisgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCB0aGV5ICovCisgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgCisgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgdGltZXNfdXAgPSAxOworICB9CisgIAorICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgCisgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworICAKKyAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gKi8KKyAgLyogV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3Qgd2lsbCAqLworICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiBJIHRoaW5rIEkgKi8KKyAgLyoganVzdCBhcmJpdHJhcmlseSBkZWNyZW1lbnQgdHJhbnNfcmVtYWluaW5nIGZvciB0aGUgdGltZWQgdGVzdCwgYnV0ICovCisgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgIC8qIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSB0aGUgc2FtZSBidWZmZXIuICovCisgIAorICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgLyogc2VuZCB0aGUgcmVxdWVzdCAqLworICAgIGlmKChwdXRtc2coc2VuZF9kZXNjcmlwdG9yLAorCSAgICAgICAwLAorCSAgICAgICAmc2VuZF9tZXNzYWdlLAorCSAgICAgICAwKSkgIT0gMCkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJLyogd2UgaGl0IHRoZSBlbmQgb2YgYSAqLworCS8qIHRpbWVkIHRlc3QuICovCisJdGltZWRfb3V0ID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHBlcnJvcigic2VuZF9kbHBpX2NvX3JyOiBwdXRtc2cgZXJyb3IiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwicmVjdl9tZXNzYWdlLmxlbiAlZFxuIixyZWN2X21lc3NhZ2UubGVuKTsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfbWVzc2FnZS5sZW4gJWRcbiIsc2VuZF9tZXNzYWdlLmxlbik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICAKKyAgICAvKiByZWNlaXZlIHRoZSByZXNwb25zZSAqLworICAgIC8qIHRoaXMgbmVlZHMgc29tZSB3b3JrIHdpdGggc3RyZWFtcyBidWZmZXJzIGlmIHdlIGFyZSBnb2luZyB0byAqLworICAgIC8qIHN1cHBvcnQgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBsYXJnZXIgdGhhbiB0aGUgTVRVIG9mIHRoZSAqLworICAgIC8qIG5ldHdvcmssIGJ1dCB0aGlzIGNhbiB3YWl0IHVudGlsIGxhdGVyICovCisgICAgcnNwX2J5dGVzX2xlZnQgPSByc3Bfc2l6ZTsKKyAgICByZWN2X21lc3NhZ2UubGVuID0gcnNwX3NpemU7CisgICAgd2hpbGUocnNwX2J5dGVzX2xlZnQgPiAwKSB7CisgICAgICBpZigoZ2V0bXNnKHNlbmRfZGVzY3JpcHRvciwKKwkJIDAsCisJCSAmcmVjdl9tZXNzYWdlLAorCQkgJmZsYWdzKSkgPCAwKSB7CisJaWYgKGVycm5vID09IEVJTlRSKSB7CisJICAvKiBXZSBoaXQgdGhlIGVuZCBvZiBhIHRpbWVkIHRlc3QuICovCisJICB0aW1lZF9vdXQgPSAxOworCSAgYnJlYWs7CisJfQorCXBlcnJvcigic2VuZF9kbHBpX2NvX3JyOiBkYXRhIHJlY3YgZXJyb3IiKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgcnNwX2J5dGVzX2xlZnQgLT0gcmVjdl9tZXNzYWdlLmxlbjsKKyAgICB9CQorICAgIAorICAgIGlmICh0aW1lZF9vdXQpIHsKKyAgICAgIC8qIHdlIG1heSBoYXZlIGJlZW4gaW4gYSBuZXN0ZWQgd2hpbGUgbG9vcCAtIHdlIG5lZWQgKi8KKyAgICAgIC8qIGFub3RoZXIgY2FsbCB0byBicmVhay4gKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisgICAgICB0cmFuc19yZW1haW5pbmctLTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnID4gMykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiVHJhbnNhY3Rpb24gJWQgY29tcGxldGVkXG4iLAorCSAgICAgIG51bW1lc3NhZ2VzKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICB9CisgIAorICAvKiBBdCB0aGlzIHBvaW50IHdlIHVzZWQgdG8gY2FsbCBzaHV0ZG93biBvbnRoZSBkYXRhIHNvY2tldCB0byBiZSAqLworICAvKiBzdXJlIGFsbCB0aGUgZGF0YSB3YXMgZGVsaXZlcmVkLCBidXQgdGhpcyB3YXMgbm90IGdlcm1hbmUgaW4gYSAqLworICAvKiByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIGFuZCBpdCB3YXMgY2F1c2luZyB0aGUgdGVzdHMgdG8gImhhbmciIHdoZW4gKi8KKyAgLyogdGhleSB3ZXJlIGJlaW5nIGNvbnRyb2xsZWQgYnkgdGltZS4gU28sIEkgaGF2ZSByZXBsYWNlZCB0aGlzICovCisgIC8qIHNodXRkb3duIGNhbGwgd2l0aCBhIGNhbGwgdG8gY2xvc2UgdGhhdCBjYW4gYmUgZm91bmQgbGF0ZXIgaW4gdGhlICovCisgIC8qIHByb2NlZHVyZS4gKi8KKyAgCisgIC8qIHRoaXMgY2FsbCB3aWxsIGFsd2F5cyBnaXZlIHVzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSB0ZXN0LCBhbmQgKi8KKyAgLyogd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgCisgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyBtZWFzdXJlZD8gKi8KKyAgLyogaG93IGxvbmcgZGlkIHdlIHJlYWxseSBydW4/ICovCisgIAorICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgLyogY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nIHRoaW5ncy4gSWYgaXQgKi8KKyAgLyogd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLworICAKKyAgcmVjdl9yZXNwb25zZSgpOworICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgaWYgKGRlYnVnKQorICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCJuZXRwZXJmOiByZW1vdGUgZXJyb3IiKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyIHRocnVwdXQgd2FzIGZvciB0aGUgdGVzdC4gSW4gdGhlIGZ1dHVyZSwgKi8KKyAgLyogd2UgbWF5IHdhbnQgdG8gaW5jbHVkZSBhIGNhbGN1bGF0aW9uIG9mIHRoZSB0aHJ1cHV0IG1lYXN1cmVkIGJ5ICovCisgIC8qIHRoZSByZW1vdGUsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCBmb3IgYSBUQ1Agc3RyZWFtIHRlc3QsICovCisgIC8qIHRoYXQgdGhlIHR3byBudW1iZXJzIHNob3VsZCBiZSAqdmVyeSogY2xvc2UuLi4gV2UgY2FsY3VsYXRlICovCisgIC8qIGJ5dGVzX3NlbnQgcmVnYXJkbGVzcyBvZiB0aGUgd2F5IHRoZSB0ZXN0IGxlbmd0aCB3YXMgY29udHJvbGxlZC4gKi8KKyAgLyogSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5ICovCisgIC8qIGhhdmUgc3BlY2lmaWVkIGEgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Fzbid0IGEgbXVsdGlwbGUgb2YgdGhlICovCisgIC8qIHNlbmRfc2l6ZSwgc28gd2UgcmVhbGx5IGRpZG4ndCBzZW5kIHdoYXQgaGUgYXNrZWQgZm9yIDstKSBXZSB1c2UgKi8KKyAgLyogS2J5dGVzL3MgYXMgdGhlIHVuaXRzIG9mIHRocnVwdXQgZm9yIGEgVENQIHN0cmVhbSB0ZXN0LCB3aGVyZSBLID0gKi8KKyAgLyogMTAyNC4gQSBmdXR1cmUgZW5oYW5jZW1lbnQgKm1pZ2h0KiBiZSB0byBjaG9vc2UgZnJvbSBhIGNvdXBsZSBvZiAqLworICAvKiB1bml0IHNlbGVjdGlvbnMuICovIAorICAKKyAgYnl0ZXNfeGZlcmQJPSAocmVxX3NpemUgKiBudW1tZXNzYWdlcykgKyAocnNwX3NpemUgKiBudW1tZXNzYWdlcyk7CisgIHRocnVwdXQJCT0gY2FsY190aHJ1cHV0KGJ5dGVzX3hmZXJkKTsKKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgaWYgKGxvY2FsX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsIldBUk5JTkcgV0FSTklORyBXQVJOSU5HICBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyFcbiIpOworCWZwcmludGYod2hlcmUsIkxvY2FsIENQVSB1c2FnZSBudW1iZXJzIGJhc2VkIG9uIHByb2Nlc3MgaW5mb3JtYXRpb24gb25seSFcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24gPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgICAgICAvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKyAgICAgIC8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKyAgICAgIC8qICJnb29kIiBudW1iZXJzICovCisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMC4wLAorCQkJCQkJICAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAtMS4wOworICAgIH0KKyAgICAKKyAgICBpZiAocmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgaWYgKHJlbW90ZV9jcHVfcmF0ZSA9PSAwLjApIHsKKwlmcHJpbnRmKHdoZXJlLCJEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiAgREFOR0VSICBEQU5HRVIgICAgREFOR0VSIVxuIik7CisJZnByaW50Zih3aGVyZSwiUmVtb3RlIENQVSB1c2FnZSBudW1iZXJzIGJhc2VkIG9uIHByb2Nlc3MgaW5mb3JtYXRpb24gb25seSFcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gZGxwaV9jb19ycl9yZXN1bHQtPmNwdV91dGlsOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgIGRscGlfY29fcnJfcmVzdWx0LT5udW1fY3B1cyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gLTEuMDsKKyAgICB9CisgICAgCisgICAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgICAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgICAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHN3X3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBscndfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogZ3Vlc3MgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUsCisJICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAkvKiBsb2NhbCBjcHUgKi8KKwkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAkvKiByZW1vdGUgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzIsCisJICAgICAgcnN3X3NpemUsCisJICAgICAgcnJ3X3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzEsCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHN3X3NpemUsCisJICAgICAgbHJ3X3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXNwb25zZXMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3dfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgcnJ3X3NpemUpOworICAgICAgCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBUQ1Agc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCk7CisgIH0KKyAgLyogVGhlIHRlc3QgaXMgb3Zlci4gS2lsbCB0aGUgZGF0YSBkZXNjcmlwdG9yICovCisgIAorICBpZiAoY2xvc2Uoc2VuZF9kZXNjcmlwdG9yKSA9PSAtMSkgeworICAgIHBlcnJvcigic2VuZF9kbHBpX2NvX3JyOiBjYW5ub3Qgc2h1dGRvd24gdGNwIHN0cmVhbSBkZXNjcmlwdG9yIik7CisgIH0KKyAgCit9CisMCit2b2lkCisgIHNlbmRfZGxwaV9jbF9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKQoreworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKgkJCQkJCQkJCSovCisgIC8qICAgICAgICAgICAgICAgCVVEUCBVbmlkaXJlY3Rpb25hbCBTZW5kIFRlc3QgICAgICAgICAgICAgICAgICAgICovCisgIC8qCQkJCQkJCQkJKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgY2hhciAqdHB1dF90aXRsZSA9CisgICAgIldpbmRvdyAgTWVzc2FnZSAgRWxhcHNlZCAgICAgIE1lc3NhZ2VzICAgICAgICAgICAgICAgIFxuXAorU2l6ZSAgICBTaXplICAgICBUaW1lICAgICAgICAgT2theSBFcnJvcnMgICBUaHJvdWdocHV0XG5cCitmcmFtZXMgIGJ5dGVzICAgIHNlY3MgICAgICAgICAgICAjICAgICAgIyAgICVzL3NlY1xuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMSA9CisgICAgIiU1ZCAgICU1ZCAgICAlLTcuMmYgICAlN2QgJTZkICAgICU3LjJmXG5cCislNWQgICAgICAgICAgICAlLTcuMmYgICAlN2QgICAgICAgICAgICU3LjJmXG5cbiI7CisgIAorICAKKyAgY2hhciAqY3B1X3RpdGxlID0KKyAgICAiV2luZG93ICBNZXNzYWdlICBFbGFwc2VkICAgICAgTWVzc2FnZXMgICAgICAgICAgICAgICAgICAgQ1BVICAgICBTZXJ2aWNlXG5cCitTaXplICAgIFNpemUgICAgIFRpbWUgICAgICAgICBPa2F5IEVycm9ycyAgIFRocm91Z2hwdXQgICBVdGlsICAgIERlbWFuZFxuXAorZnJhbWVzICBieXRlcyAgICBzZWNzICAgICAgICAgICAgIyAgICAgICMgICAlcy9zZWMgICAlJSAgICAgICB1cy9LQlxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuMmZcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzEgPQorICAgICIlNWQgICAlNWQgICAgJS03LjJmICAgJTdkICU2ZCAgICAlNy4xZiAgICAgICUtNi4yZiAgJS02LjNmXG5cCislNWQgICAgICAgICAgICAlLTcuMmYgICAlN2QgICAgICAgICAgICU3LjFmICAgICAgJS02LjJmICAlLTYuM2ZcblxuIjsKKyAgCisgIGludAltZXNzYWdlc19yZWN2ZDsKKyAgZmxvYXQJZWxhcHNlZF90aW1lLAorICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sIAorICByZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICAKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQsIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCWxvY2FsX3RocnVwdXQsIHJlbW90ZV90aHJ1cHV0OworICBkb3VibGUJYnl0ZXNfc2VudDsKKyAgZG91YmxlCWJ5dGVzX3JlY3ZkOworICAKKyAgCisgIGludAkqbWVzc2FnZV9pbnRfcHRyOworICBjaGFyCSptZXNzYWdlX3B0cjsKKyAgY2hhcgkqbWVzc2FnZTsKKyAgY2hhciAgc2N0bF9kYXRhW0JVRlNJWl07CisgIHN0cnVjdCBzdHJidWYgc2VuZF9tZXNzYWdlOworICBzdHJ1Y3Qgc3RyYnVmIHNjdGxfbWVzc2FnZTsKKyAgZGxfdW5pdGRhdGFfcmVxX3QgKmRhdGFfcmVxID0gKGRsX3VuaXRkYXRhX3JlcV90ICopc2N0bF9kYXRhOworICAKKyAgY2hhciBkbHNhcFtCVUZTSVpdOworICBpbnQgIGRsc2FwX2xlbjsKKyAgaW50CW1lc3NhZ2Vfb2Zmc2V0OworICBpbnQJbWVzc2FnZV9tYXhfb2Zmc2V0OworICBpbnQJZmFpbGVkX3NlbmRzOworICBpbnQJZmFpbGVkX2Nvd3M7CisgIGludCAJbWVzc2FnZXNfc2VudDsKKyAgaW50IAlkYXRhX2Rlc2NyaXB0b3I7CisgIAorICAKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICBpbnQJaW50ZXJ2YWxfY291bnQ7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyNpZmRlZiBESVJUWQorICBpbnQJaTsKKyNlbmRpZiAvKiBESVJUWSAqLworICAKKyAgc3RydWN0CWRscGlfY2xfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSpkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QJZGxwaV9jbF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpkbHBpX2NsX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0CWRscGlfY2xfc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSpkbHBpX2NsX3N0cmVhbV9yZXN1bHRzOworICAKKyAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdAk9IChzdHJ1Y3QgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRscGlfY2xfc3RyZWFtX3Jlc3BvbnNlCT0gKHN0cnVjdCBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkbHBpX2NsX3N0cmVhbV9yZXN1bHRzCT0gKHN0cnVjdCBkbHBpX2NsX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgcHJpbnRmKCJETFBJIENMIFVOSURJUkVDVElPTkFMIFNFTkQgVEVTVFxuIik7CisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKQorICAgICAgcHJpbnRmKGNwdV90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgZWxzZQorICAgICAgcHJpbnRmKHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICB9CQorICAKKyAgZmFpbGVkX3NlbmRzCT0gMDsKKyAgbWVzc2FnZXNfc2VudAk9IDA7CisgIHRpbWVzX3VwCT0gMDsKKyAgCisgIC8qc2V0IHVwIHRoZSBkYXRhIGRlc2NyaXB0b3IJCQkqLworICAKKyAgZGF0YV9kZXNjcmlwdG9yID0gZGxfb3Blbihsb2NfZGxwaV9kZXZpY2UsbG9jX3BwYSk7CisgIGlmIChkYXRhX2Rlc2NyaXB0b3IgPCAwKXsKKyAgICBwZXJyb3IoInNlbmRfZGxwaV9jbF9zdHJlYW06IGRhdGEgZGVzY3JpcHRvciIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIGJpbmQgdGhlIHB1cHB5IGFuZCBnZXQgdGhlIGFzc2lnbmVkIGRsc2FwICovCisgIGRsc2FwX2xlbiA9IEJVRlNJWjsKKyAgaWYgKGRsX2JpbmQoZGF0YV9kZXNjcmlwdG9yLCAKKyAgICAgICAgICAgICAgZGxwaV9zYXAsIERMX0NMRExTLCBkbHNhcCwgJmRsc2FwX2xlbikgIT0gMCkgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfZGxwaV9jbF9zdHJlYW06IGJpbmQgZmFpbHVyZVxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBNb2RpZnkgdGhlIGxvY2FsIHNvY2tldCBzaXplIChTTkRCVUYgc2l6ZSkgICAgKi8KKyAgCisjaWZkZWYgRExfSFBfU0VUX0xPQ0FMX1dJTl9SRVEKKyAgaWYgKGxzd19zaXplID4gMCkgeworICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfZGxwaV9jbF9zdHJlYW06IGRlc2NyaXB0b3Igc2VuZCBzaXplIGFsdGVyZWQgZnJvbSBzeXN0ZW0gZGVmYXVsdC4uLlxuIik7CisgICAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6ICVkXG4iLGxzd19zaXplKTsKKyAgICB9CisgIH0KKyAgaWYgKGxyd19zaXplID4gMCkgeworICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfZGxwaV9jbF9zdHJlYW06IGRlc2NyaXB0b3IgcmVjdiBzaXplIGFsdGVyZWQgZnJvbSBzeXN0ZW0gZGVmYXVsdC4uLlxuIik7CisgICAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Y6ICVkXG4iLGxyd19zaXplKTsKKyAgICB9CisgIH0KKyAgCisgIAorICAvKiBOb3csIHdlIHdpbGwgZmluZC1vdXQgd2hhdCB0aGUgc2l6ZSBhY3R1YWxseSBiZWNhbWUsIGFuZCByZXBvcnQgKi8KKyAgLyogdGhhdCBiYWNrIHRvIHRoZSB1c2VyLiBJZiB0aGUgY2FsbCBmYWlscywgd2Ugd2lsbCBqdXN0IHJlcG9ydCBhIC0xICovCisgIC8qIGJhY2sgdG8gdGhlIGluaXRpYXRvciBmb3IgdGhlIHJlY3YgYnVmZmVyIHNpemUuICovCisgIAorI2Vsc2UgLyogRExfSFBfU0VUX0xPQ0FMX1dJTl9SRVEgKi8KKyAgCisgIGxzd19zaXplID0gLTE7CisgIGxyd19zaXplID0gLTE7CisgIAorI2VuZGlmIC8qIERMX0hQX1NFVF9MT0NBTF9XSU5fUkVRICovCisgIAorICAvKiBub3csIHdlIHdhbnQgdG8gc2VlIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBzZW5kX3NpemUgKi8KKyAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgc2VuZF9zaXplID0gMTAyNDsKKyAgfQorICAKKyAgCisgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LCAqLworICAvKiBtb3N0IG9mIHRoZSBudW1iZXJzIGhlcmUgYXJlIGp1c3QgYSBoYWNrIHRvIHBpY2sgc29tZXRoaW5nIG5pY2UgKi8KKyAgLyogYW5kIGJpZyBpbiBhbiBhdHRlbXB0IHRvIG5ldmVyIHRyeSB0byBzZW5kIGEgYnVmZmVyIGEgc2Vjb25kIHRpbWUgKi8KKyAgLyogYmVmb3JlIGl0IGxlYXZlcyB0aGUgbm9kZS4uLnVubGVzcyB0aGUgdXNlciBzZXQgdGhlIHdpZHRoICovCisgIC8qIGV4cGxpY2l0bHkuICovCisgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAzMjsKKyAgbWVzc2FnZSA9IChjaGFyICopbWFsbG9jKHNlbmRfc2l6ZSAqIChzZW5kX3dpZHRoICsgMSkgKyBsb2NhbF9zZW5kX2FsaWduICsgbG9jYWxfc2VuZF9vZmZzZXQpOworICBpZiAobWVzc2FnZSA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIHNlbmRfc2l6ZSAqIChzZW5kX3dpZHRoICsgMSkgKyBsb2NhbF9zZW5kX2FsaWduICsgbG9jYWxfc2VuZF9vZmZzZXQpOworICAgIGV4aXQoMSk7CisgIH0KKyAgbWVzc2FnZV9wdHIgPSAoY2hhciAqKSgoIChsb25nKSBtZXNzYWdlICsgCisJCQkgIChsb25nKSBsb2NhbF9zZW5kX2FsaWduIC0gMSkgJgkKKwkJCSB+KChsb25nKSBsb2NhbF9zZW5kX2FsaWduIC0gMSkpOworICBtZXNzYWdlX3B0ciA9IG1lc3NhZ2VfcHRyICsgbG9jYWxfc2VuZF9vZmZzZXQ7CisgIG1lc3NhZ2UgPSBtZXNzYWdlX3B0cjsKKyAgc2VuZF9tZXNzYWdlLm1heGxlbiA9IHNlbmRfc2l6ZTsKKyAgc2VuZF9tZXNzYWdlLmxlbiA9IHNlbmRfc2l6ZTsKKyAgc2VuZF9tZXNzYWdlLmJ1ZiA9IG1lc3NhZ2U7CisgIAorICBzY3RsX21lc3NhZ2UubWF4bGVuID0gQlVGU0laOworICBzY3RsX21lc3NhZ2UubGVuICAgID0gMDsKKyAgc2N0bF9tZXNzYWdlLmJ1ZiAgICA9IHNjdGxfZGF0YTsKKyAgCisgIC8qIGlmIHRoZSB1c2VyIHN1cHBsaWVkIGEgY3B1IHJhdGUsIHRoaXMgY2FsbCB3aWxsIGNvbXBsZXRlIHJhdGhlciAqLworICAvKiBxdWlja2x5LCBvdGhlcndpc2UsIHRoZSBjcHUgcmF0ZSB3aWxsIGJlIHJldHVyZWQgdG8gdXMgZm9yICovCisgIC8qIHBvc3NpYmxlIGRpc3BsYXkuIFRoZSBMaWJyYXJ5IHdpbGwga2VlcCBpdCdzIG93biBjb3B5IG9mIHRoaXMgZGF0YSAqLworICAvKiBmb3IgdXNlIGVsc2V3aGVyZS4gV2Ugd2lsbCBvbmx5IGRpc3BsYXkgaXQuIChEb2VzIHRoYXQgbWFrZSBpdCAqLworICAvKiAib3BhcXVlIiB0byB1cz8pICovCisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlKQorICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgIAorICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIHNldCB1cCB0aGUgZGF0YSBjb25uZWN0aW9uLiBUaGUgc2VydmVyICovCisgIC8qIHNlbmRzIGJhY2sgdGhlIHBvcnQgbnVtYmVyIGFuZCBhbHRlcnMgdGhlIHNvY2tldCBwYXJhbWV0ZXJzIHRoZXJlLiAqLworICAvKiBPZiBjb3Vyc2UgdGhpcyBpcyBhIGRhdGFncmFtIHNlcnZpY2Ugc28gbm8gY29ubmVjdGlvbiBpcyBhY3R1YWxseSAqLworICAvKiBzZXQgdXAsIHRoZSBzZXJ2ZXIganVzdCBzZXRzIHVwIHRoZSBzb2NrZXQgYW5kIGJpbmRzIGl0LiAqLworICAKKyAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlICAgICAgICAgICAgICAgICA9IERPX0RMUElfQ0xfU1RSRUFNOworICBkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X3dpbl9zaXplCSAgICAgICAgPSBycndfc2l6ZTsKKyAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+bWVzc2FnZV9zaXplCSAgICAgICAgPSBzZW5kX3NpemU7CisgIGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50CT0gcmVtb3RlX3JlY3ZfYWxpZ247CisgIGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CQk9IHJlbW90ZV9yZWN2X29mZnNldDsKKyAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUJCT0gcmVtb3RlX2NwdV91c2FnZTsKKyAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUJCT0gcmVtb3RlX2NwdV9yYXRlOworICBkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5wcGEgICAgICAgICAgICAgICAgICAgPSByZW1fcHBhOworICBkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5zYXAgICAgICAgICAgICAgICAgICAgPSBkbHBpX3NhcDsKKyAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+ZGV2X25hbWVfbGVuICAgICAgICAgID0gc3RybGVuKHJlbV9kbHBpX2RldmljZSk7CisgIHN0cmNweShkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5kbHBpX2RldmljZSwKKwkgcmVtX2RscGlfZGV2aWNlKTsKKyAgCisjaWZkZWYgX19hbHBoYQorICAKKyAgLyogb2sgLSBldmVuIG9uIGEgREVDIGJveCwgc3RyaW5ncyBhcmUgc3RyaW5ncy4gSSBkaW4ndCByZWFsbHkgd2FudCAqLworICAvKiB0byBudG9obCB0aGUgd29yZHMgb2YgYSBzdHJpbmcuIHNpbmNlIEkgZG9uJ3Qgd2FudCB0byB0ZWFjaCB0aGUgKi8KKyAgLyogc2VuZF8gYW5kIHJlY3ZfIF9yZXF1ZXN0IGFuZCBfcmVzcG9uc2Ugcm91dGluZXMgYWJvdXQgdGhlIHR5cGVzLCAqLworICAvKiBJIHdpbGwgcHV0ICJhbnRpLW50b2hsIiBjYWxscyBoZXJlLiBJIGltYWdpbmUgdGhhdCB0aGUgInB1cmUiICovCisgIC8qIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVzZSBYRFIsIGJ1dCBJIGFtIHN0aWxsIGxlYXJ5IG9mIGJlaW5nIGFibGUgKi8KKyAgLyogdG8gZmluZCBYRFIgbGlicyBvbiBhbGwgcGxhdGZvcm1zIEkgd2FudCBydW5uaW5nIG5ldHBlcmYuIHJhaiAqLworICB7CisgICAgaW50ICpjaGFyd29yZDsKKyAgICBpbnQgKmluaXR3b3JkOworICAgIGludCAqbGFzdHdvcmQ7CisgICAgCisgICAgaW5pdHdvcmQgPSAoaW50ICopIGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPmRscGlfZGV2aWNlOworICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKHN0cmxlbihyZW1fZGxwaV9kZXZpY2UpICsgMykgLyA0KTsKKyAgICAKKyAgICBmb3IgKGNoYXJ3b3JkID0gaW5pdHdvcmQ7CisJIGNoYXJ3b3JkIDwgbGFzdHdvcmQ7CisJIGNoYXJ3b3JkKyspIHsKKyAgICAgIAorICAgICAgKmNoYXJ3b3JkID0gbnRvaGwoKmNoYXJ3b3JkKTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBfX2FscGhhICovCisgIAorICBpZiAodGVzdF90aW1lKSB7CisgICAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RpbWU7CisgIH0KKyAgZWxzZSB7CisgICAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X2J5dGVzICogLTE7CisgIH0KKyAgCisgIAorICBzZW5kX3JlcXVlc3QoKTsKKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX2RscGlfY2xfc3RyZWFtOiByZW1vdGUgZGF0YSBjb25uZWN0aW9uIGRvbmUuXG4iKTsKKyAgfQorICBlbHNlIHsKKyAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgIHBlcnJvcigic2VuZF9kbHBpX2NsX3N0cmVhbTogZXJyb3Igb24gcmVtb3RlIik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogcGxhY2Ugc29tZSBvZiB0aGUgcmVtb3RlJ3MgYWRkcmVzc2luZyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBzZW5kICovCisgIC8qIHN0cnVjdHVyZSBzbyBvdXIgc2VuZHMgY2FuIGJlIHNlbnQgdG8gdGhlIGNvcnJlY3QgcGxhY2UuIEFsc28gZ2V0ICovCisgIC8qIHNvbWUgb2YgdGhlIHJldHVybmVkIHNvY2tldCBidWZmZXIgaW5mb3JtYXRpb24gZm9yIHVzZXIgZGlzcGxheS4gKi8KKyAgCisgIC8qIHNldC11cCB0aGUgZGVzdGluYXRpb24gYWRkcmVzc2luZyBjb250cm9sIGluZm8gKi8KKyAgZGF0YV9yZXEtPmRsX3ByaW1pdGl2ZSA9IERMX1VOSVREQVRBX1JFUTsKKyAgYmNvcHkoKGNoYXIgKikoZGxwaV9jbF9zdHJlYW1fcmVzcG9uc2UtPnN0YXRpb25fYWRkciksCisJKChjaGFyICopZGF0YV9yZXEgKyBzaXplb2YoZGxfdW5pdGRhdGFfcmVxX3QpKSwKKwlkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+c3RhdGlvbl9hZGRyX2xlbik7CisgIGRhdGFfcmVxLT5kbF9kZXN0X2FkZHJfb2Zmc2V0ID0gc2l6ZW9mKGRsX3VuaXRkYXRhX3JlcV90KTsKKyAgZGF0YV9yZXEtPmRsX2Rlc3RfYWRkcl9sZW5ndGggPSBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+c3RhdGlvbl9hZGRyX2xlbjsKKyAgLyogdGhlcmUgaXMgYSBkbF9wcmlvcml0eSBzdHJ1Y3R1cmUgdG9vLCBidXQgSSBhbSBpZ25vcmluZyBpdCBmb3IgKi8KKyAgLyogdGhlIHRpbWUgYmVpbmcuICovCisgIC8qIGhvd2V2ZXIuLi4gaXQgaXMgYmVzdCB0byBwdXQgc29tZSB2YWx1ZSBpbiB0aGVyZSBsZXN0IHNvbWUgY29kZQorICAgICBnZXQgZ3J1bXB5IGFib3V0IGl0IC0gZml4IGZyb20gTmljb2xhcyBUaG9tYXMgKi8KKyAgZGF0YV9yZXEtPmRsX3ByaW9yaXR5LmRsX21pbiA9IERMX1FPU19ET05UX0NBUkU7CisgIGRhdGFfcmVxLT5kbF9wcmlvcml0eS5kbF9tYXggPSBETF9RT1NfRE9OVF9DQVJFOworCisgIHNjdGxfbWVzc2FnZS5sZW4gPSBzaXplb2YoZGxfdW5pdGRhdGFfcmVxX3QpICsgCisgICAgZGF0YV9yZXEtPmRsX2Rlc3RfYWRkcl9sZW5ndGg7CisgIAorICBycndfc2l6ZQkgICAgICAgID0gZGxwaV9jbF9zdHJlYW1fcmVzcG9uc2UtPnJlY3Zfd2luX3NpemU7CisgIHJzd19zaXplCSAgICAgICAgPSBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+c2VuZF93aW5fc2l6ZTsKKyAgcmVtb3RlX2NwdV9yYXRlCT0gZGxwaV9jbF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlOworICAKKyAgCisgIC8qIHNldCB1cCB0aGUgdGltZXIgdG8gY2FsbCB1cyBhZnRlciB0ZXN0X3RpbWUJKi8KKyAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgCisgIC8qIEdldCB0aGUgc3RhcnQgY291bnQgZm9yIHRoZSBpZGxlIGNvdW50ZXIgYW5kIHRoZSBzdGFydCB0aW1lICovCisgIAorICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKyAgCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAKKyAgLyogU2VuZCBkYXRhZ3JhbXMgbGlrZSB0aGVyZSB3YXMgbm8gdG9tb3Jyb3cgKi8KKyAgd2hpbGUgKCF0aW1lc191cCkgeworI2lmZGVmIERJUlRZCisgICAgLyogd2Ugd2FudCB0byBkaXJ0eSBzb21lIG51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlZ2VycyBpbiB0aGUgYnVmZmVyICovCisgICAgLyogd2UgYXJlIGFib3V0IHRvIHNlbmQuIHdlIG1heSBhbHNvIHdhbnQgdG8gYnJpbmcgc29tZSBudW1iZXIgb2YgKi8KKyAgICAvKiB0aGVtIGNsZWFubHkgaW50byB0aGUgY2FjaGUuIFRoZSBjbGVhbiBvbmVzIHdpbGwgZm9sbG93IGFueSBkaXJ0eSAqLworICAgIC8qIG9uZXMgaW50byB0aGUgY2FjaGUuICovCisgICAgbWVzc2FnZV9pbnRfcHRyID0gKGludCAqKW1lc3NhZ2VfcHRyOworICAgIGZvciAoaSA9IDA7IGkgPCBsb2NfZGlydHlfY291bnQ7IGkrKykgeworICAgICAgKm1lc3NhZ2VfaW50X3B0ciA9IDQ7CisgICAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IGxvY19jbGVhbl9jb3VudDsgaSsrKSB7CisgICAgICBsb2NfZGlydHlfY291bnQgPSAqbWVzc2FnZV9pbnRfcHRyOworICAgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgICAgfQorI2VuZGlmIC8qIERJUlRZICovCisgICAgaWYgKHB1dG1zZyhkYXRhX2Rlc2NyaXB0b3IsCisJICAgICAgICZzY3RsX21lc3NhZ2UsCisJICAgICAgICZzZW5kX21lc3NhZ2UsCisJICAgICAgIDApICAhPSAwKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChlcnJubyA9PSBFTk9CVUZTKSB7CisJLyogd2UgbWlnaHQgbm90IGV2ZXIgaGl0IHRoaXMgd2l0aCBTVFJFQU1TLCBpdCB3b3VsZCBwcm9iYWJseSAqLworCS8qIGJlIGJldHRlciB0byBkbyBhIGdldGluZm8gcmVxdWVzdCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHRvICovCisJLyogZ2V0IGFsbCBzb3J0cyBvZiBnb3J5IHN0YXRpc3RpY3MuIGluIHRoZSBtZWFudGltZSwgd2Ugd2lsbCAqLworCS8qIGtlZXAgdGhpcyBjb2RlIGluIHBsYWNlLiAqLworCWZhaWxlZF9zZW5kcysrOworCWNvbnRpbnVlOworICAgICAgfQorICAgICAgcGVycm9yKCJzZW5kX2RscGlfY2xfc3RyZWFtOiBkYXRhIHNlbmQgZXJyb3IiKTsKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsIm1lc3NhZ2VzX3NlbnQgJXVcbiIsbWVzc2FnZXNfc2VudCk7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIG1lc3NhZ2VzX3NlbnQrKzsgICAgICAgICAgCisgICAgCisgICAgLyogbm93IHdlIHdhbnQgdG8gbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgbmV4dCBwb3NpdGlvbiBpbiB0aGUgKi8KKyAgICAvKiBkYXRhIGJ1ZmZlci4uLnNpbmNlIHRoZXJlIHdhcyBhIHN1Y2Nlc3NmdWwgc2VuZCAqLworICAgIAorICAgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgaW50ZXJ2YWwgY291bnQgaXMgdGhlIGNvdW50LWRvd24gY291dGVyICovCisgICAgLyogdG8gZGVjaWRlIHRvIHNsZWVwIGZvciBhIGxpdHRsZSBiaXQgKi8KKyAgICBpZiAoKGludGVydmFsX2J1cnN0KSAmJiAoLS1pbnRlcnZhbF9jb3VudCA9PSAwKSkgeworICAgICAgLyogY2FsbCB0aGUgc2xlZXAgcm91dGluZSBmb3Igc29tZSBtaWxsaXNlY29uZHMsIGlmIG91ciAqLworICAgICAgLyogdGltZXIgcG9wcGVkIHdoaWxlIHdlIHdlcmUgaW4gdGhlcmUsIHdlIHdhbnQgdG8gKi8KKyAgICAgIC8qIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4gKi8KKyAgICAgIGlmIChtc2VjX3NsZWVwKGludGVydmFsX3dhdGUpKSB7CisJYnJlYWs7CisgICAgICB9CisgICAgICBpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OworICAgIH0KKyAgICAKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgIAorICB9CisgIAorICAvKiBUaGlzIGlzIGEgdGltZWQgdGVzdCwgc28gdGhlIHJlbW90ZSB3aWxsIGJlIHJldHVybmluZyB0byB1cyBhZnRlciAqLworICAvKiBhIHRpbWUuIFdlIHNob3VsZCBub3QgbmVlZCB0byBzZW5kIGFueSAic3RyYW5nZSIgbWVzc2FnZXMgdG8gdGVsbCAqLworICAvKiB0aGUgcmVtb3RlIHRoYXQgdGhlIHRlc3QgaXMgY29tcGxldGVkLCB1bmxlc3Mgd2UgZGVjaWRlIHRvIGFkZCBhICovCisgIC8qIG51bWJlciBvZiBtZXNzYWdlcyB0byB0aGUgdGVzdC4gKi8KKyAgCisgIC8qIHRoZSB0ZXN0IGlzIG92ZXIsIHNvIGdldCBzdGF0cyBhbmQgc3R1ZmYgKi8KKyAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLAkKKwkgICAmZWxhcHNlZF90aW1lKTsKKyAgCisgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kCSovCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgIGlmIChkZWJ1ZykKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfZGxwaV9jbF9zdHJlYW06IHJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgfQorICBlbHNlIHsKKyAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgIHBlcnJvcigic2VuZF9kbHBpX2NsX3N0cmVhbTogZXJyb3Igb24gcmVtb3RlIik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgYnl0ZXNfc2VudAk9IHNlbmRfc2l6ZSAqIG1lc3NhZ2VzX3NlbnQ7CisgIGxvY2FsX3RocnVwdXQJPSBjYWxjX3RocnVwdXQoYnl0ZXNfc2VudCk7CisgIAorICBtZXNzYWdlc19yZWN2ZAk9IGRscGlfY2xfc3RyZWFtX3Jlc3VsdHMtPm1lc3NhZ2VzX3JlY3ZkOworICBieXRlc19yZWN2ZAk9IHNlbmRfc2l6ZSAqIG1lc3NhZ2VzX3JlY3ZkOworICAKKyAgLyogd2UgYXN1bWUgdGhhdCB0aGUgcmVtb3RlIHJhbiBmb3IgYXMgbG9uZyBhcyB3ZSBkaWQgKi8KKyAgCisgIHJlbW90ZV90aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3JlY3ZkKTsKKyAgCisgIC8qIHByaW50IHRoZSByZXN1bHRzIGZvciB0aGlzIGRlc2NyaXB0b3IgYW5kIG1lc3NhZ2Ugc2l6ZSAqLworICAKKyAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgIC8qIHV0aWxpemF0aW9uIGZvciB0aGUgc3lzdGVtKHMpIFdlIHBhc3MgemVyb3MgZm9yIHRoZSBsb2NhbCAqLworICAgIC8qIGNwdSB1dGlsaXphdGlvbiBhbmQgZWxhcHNlZCB0aW1lIHRvIHRlbGwgdGhlIHJvdXRpbmUgdG8gdXNlICovCisgICAgLyogdGhlIGxpYnJhcmllcyBvd24gdmFsdWVzIGZvciB0aG9zZS4gKi8KKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICBpZiAobG9jYWxfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgIFdBUk5JTkcgV0FSTklORyBXQVJOSU5HICBXQVJOSU5HIVxuIik7CisJZnByaW50Zih3aGVyZSwiTG9jYWwgQ1BVIHVzYWdlIG51bWJlcnMgYmFzZWQgb24gcHJvY2VzcyBpbmZvcm1hdGlvbiBvbmx5IVxuIik7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgbG9jYWwgY2FsY3VsYXRpb25zIGNvdWxkIHVzZSB2YXJpYWJsZXMgYmVpbmcga2VwdCBieSAqLworICAgIC8qIHRoZSBsb2NhbCBuZXRsaWIgcm91dGluZXMuIFRoZSByZW1vdGUgY2FsY3VhdGlvbnMgbmVlZCB0byAqLworICAgIC8qIGhhdmUgYSBmZXcgdGhpbmdzIHBhc3NlZCB0byB0aGVtLiAqLworICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICBpZiAocmVtb3RlX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsIkRBTkdFUiAgIERBTkdFUiAgREFOR0VSICAgREFOR0VSICBEQU5HRVIgICBEQU5HRVIgICBEQU5HRVIhXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJSRU1PVEUgQ1BVIHVzYWdlIG51bWJlcnMgYmFzZWQgb24gcHJvY2VzcyBpbmZvcm1hdGlvbiBvbmx5IVxuIik7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbgk9IGRscGlfY2xfc3RyZWFtX3Jlc3VsdHMtPmNwdV91dGlsOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19yZWN2ZCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgICBkbHBpX2NsX3N0cmVhbV9yZXN1bHRzLT5udW1fY3B1cyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbgk9IC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQJPSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgICAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgICAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzd19zaXplLAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHNlbmRzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgbWVzc2FnZXNfc2VudCwKKwkgICAgICBmYWlsZWRfc2VuZHMsCisJICAgICAgbG9jYWxfdGhydXB1dCwgCQkvKiB3aGF0IHdhcyB0aGUgeGZlciByYXRlICovCisJICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAkvKiBsb2NhbCBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICBycndfc2l6ZSwKKwkgICAgICBlbGFwc2VkX3RpbWUsCisJICAgICAgbWVzc2FnZXNfcmVjdmQsCisJICAgICAgcmVtb3RlX3RocnVwdXQsCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgbG9jYWxfdGhydXB1dCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzd19zaXplLCAJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIG1lc3NhZ2VzX3NlbnQsCisJICAgICAgZmFpbGVkX3NlbmRzLAorCSAgICAgIGxvY2FsX3RocnVwdXQsCisJICAgICAgcnJ3X3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGVsYXBzZWRfdGltZSwKKwkgICAgICBtZXNzYWdlc19yZWN2ZCwKKwkgICAgICByZW1vdGVfdGhydXB1dAorCSAgICAgICk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKwwKK2ludAorICByZWN2X2RscGlfY2xfc3RyZWFtKCkKK3sKKyAgCisgIGNoYXIgICptZXNzYWdlOworICBpbnQJZGF0YV9kZXNjcmlwdG9yOworICBpbnQJbGVuOworICBjaGFyCSptZXNzYWdlX3B0cjsKKyAgY2hhciAgcmN0bF9kYXRhW0JVRlNJWl07CisgIHN0cnVjdCBzdHJidWYgcmVjdl9tZXNzYWdlOworICBzdHJ1Y3Qgc3RyYnVmIHJjdGxfbWVzc2FnZTsKKyAgaW50IGZsYWdzID0gMDsKKyAgLyogdGhlc2UgYXJlIHRvIG1ha2UgcmVhZGluZyBzb21lIG9mIHRoZSBETFBJIGNvbnRyb2wgbWVzc2FnZXMgZWFzaWVyICovCisgIGRsX3VuaXRkYXRhX2luZF90ICpkYXRhX2luZCA9IChkbF91bml0ZGF0YV9pbmRfdCAqKXJjdGxfZGF0YTsKKyAgZGxfdWRlcnJvcl9pbmRfdCAgKnVkZXJfaW5kID0gKGRsX3VkZXJyb3JfaW5kX3QgKilyY3RsX2RhdGE7CisgIAorICBpbnQJYnl0ZXNfcmVjZWl2ZWQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBpbnQJbWVzc2FnZV9zaXplOworICBpbnQJbWVzc2FnZXNfcmVjdmQgPSAwOworICBpbnQJbWVhc3VyZV9jcHU7CisgIAorICBzdHJ1Y3QJZGxwaV9jbF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKmRscGlfY2xfc3RyZWFtX3JlcXVlc3Q7CisgIHN0cnVjdAlkbHBpX2NsX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QJKmRscGlfY2xfc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJZGxwaV9jbF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QJKmRscGlfY2xfc3RyZWFtX3Jlc3VsdHM7CisgIAorICBkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0CT0gKHN0cnVjdCBkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgZGxwaV9jbF9zdHJlYW1fcmVzcG9uc2UJPSAoc3RydWN0IGRscGlfY2xfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRscGlfY2xfc3RyZWFtX3Jlc3VsdHMJPSAoc3RydWN0IGRscGlfY2xfc3RyZWFtX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9kbHBpX2NsX3N0cmVhbTogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBkZXNjcmlwdG9yIHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jbF9zdHJlYW06IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gRExQSV9DTF9TVFJFQU1fUkVTUE9OU0U7CisgIAorICBpZiAoZGVidWcgPiAyKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kbHBpX2NsX3N0cmVhbTogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlciB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQgKi8KKyAgbWVzc2FnZSA9IChjaGFyICopbWFsbG9jKERBVEFCVUZGRVJMRU4pOworICBpZiAobWVzc2FnZSA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIERBVEFCVUZGRVJMRU4pOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGUgdG8gYmUgYXQgdGhlIGRlc2lyZWQgKi8KKyAgLyogYWxpZ25tZW50IHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0LiAqLworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jbF9zdHJlYW06IHJlcXVlc3RlZCBhbGlnbm1lbnQgb2YgJWRcbiIsCisJICAgIGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgbWVzc2FnZV9wdHIgPSBBTElHTl9CVUZGRVIobWVzc2FnZSwgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsIGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgCisgIGlmIChkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5tZXNzYWdlX3NpemUgPiAwKSB7CisgICAgcmVjdl9tZXNzYWdlLm1heGxlbiA9IGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPm1lc3NhZ2Vfc2l6ZTsKKyAgfQorICBlbHNlIHsKKyAgICByZWN2X21lc3NhZ2UubWF4bGVuID0gNDA5NjsKKyAgfQorICByZWN2X21lc3NhZ2UubGVuICAgID0gMDsKKyAgcmVjdl9tZXNzYWdlLmJ1ZiAgICA9IG1lc3NhZ2VfcHRyOworICAKKyAgcmN0bF9tZXNzYWdlLm1heGxlbiA9IEJVRlNJWjsKKyAgcmN0bF9tZXNzYWdlLmxlbiAgICA9IDA7CisgIHJjdGxfbWVzc2FnZS5idWYgICAgPSByY3RsX2RhdGE7CisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGxwaV9jbF9zdHJlYW06IHJlY2VpdmUgYWxpZ25tZW50IGFuZCBvZmZzZXQgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kbHBpX2NsX3N0cmVhbTogZ3JhYmJpbmcgYSBkZXNjcmlwdG9yLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorI2lmZGVmIF9fYWxwaGEKKyAgCisgIC8qIG9rIC0gZXZlbiBvbiBhIERFQyBib3gsIHN0cmluZ3MgYXJlIHN0cmluZ3MuIEkgZGluJ3QgcmVhbGx5IHdhbnQgKi8KKyAgLyogdG8gbnRvaGwgdGhlIHdvcmRzIG9mIGEgc3RyaW5nLiBzaW5jZSBJIGRvbid0IHdhbnQgdG8gdGVhY2ggdGhlICovCisgIC8qIHNlbmRfIGFuZCByZWN2XyBfcmVxdWVzdCBhbmQgX3Jlc3BvbnNlIHJvdXRpbmVzIGFib3V0IHRoZSB0eXBlcywgKi8KKyAgLyogSSB3aWxsIHB1dCAiYW50aS1udG9obCIgY2FsbHMgaGVyZS4gSSBpbWFnaW5lIHRoYXQgdGhlICJwdXJlIiAqLworICAvKiBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgWERSLCBidXQgSSBhbSBzdGlsbCBsZWFyeSBvZiBiZWluZyBhYmxlICovCisgIC8qIHRvIGZpbmQgWERSIGxpYnMgb24gYWxsIHBsYXRmb3JtcyBJIHdhbnQgcnVubmluZyBuZXRwZXJmLiByYWogKi8KKyAgeworICAgIGludCAqY2hhcndvcmQ7CisgICAgaW50ICppbml0d29yZDsKKyAgICBpbnQgKmxhc3R3b3JkOworICAgIAorICAgIGluaXR3b3JkID0gKGludCAqKSBkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5kbHBpX2RldmljZTsKKyAgICBsYXN0d29yZCA9IGluaXR3b3JkICsgKChkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5kZXZfbmFtZV9sZW4gKyAzKSAvIDQpOworICAgIAorICAgIGZvciAoY2hhcndvcmQgPSBpbml0d29yZDsKKwkgY2hhcndvcmQgPCBsYXN0d29yZDsKKwkgY2hhcndvcmQrKykgeworICAgICAgCisgICAgICAqY2hhcndvcmQgPSBodG9ubCgqY2hhcndvcmQpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIF9fYWxwaGEgKi8KKyAgCisgIGRhdGFfZGVzY3JpcHRvciA9IGRsX29wZW4oZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+ZGxwaV9kZXZpY2UsCisJCQkgICAgZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+cHBhKTsKKyAgaWYgKGRhdGFfZGVzY3JpcHRvciA8IDApIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBUaGUgaW5pdGlhdG9yIG1heSBoYXZlIHdpc2hlZC11cyB0byBtb2RpZnkgdGhlIHdpbmRvdyAqLworICAvKiBzaXplcy4gV2Ugc2hvdWxkIGdpdmUgaXQgYSBzaG90LiBJZiBoZSBkaWRuJ3QgYXNrIHVzIHRvIGNoYW5nZSB0aGUgKi8KKyAgLyogc2l6ZXMsIHdlIHNob3VsZCBsZXQgaGltIGtub3cgd2hhdCBzaXplcyB3ZXJlIGluIHVzZSBhdCB0aGlzIGVuZC4gKi8KKyAgLyogSWYgbm9uZSBvZiB0aGlzIGNvZGUgaXMgY29tcGlsZWQtaW4sIHRoZW4gd2Ugd2lsbCB0ZWxsIHRoZSAqLworICAvKiBpbml0aWF0b3IgdGhhdCB3ZSB3ZXJlIHVuYWJsZSB0byBwbGF5IHdpdGggdGhlIHNpemVzIGJ5ICovCisgIC8qIHNldHRpbmcgdGhlIHNpemUgaW4gdGhlIHJlc3BvbnNlIHRvIC0xLiAqLworICAKKyNpZmRlZiBETF9IUF9TRVRfTE9DQUxfV0lOX1JFUQorICAKKyAgaWYgKGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfd2luX3NpemUpIHsKKyAgICBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+cmVjdl93aW5fc2l6ZQk9IC0xOworICB9CisgIAorI2Vsc2UgLyogdGhlIHN5c3RlbSB3b24ndCBsZXQgdXMgcGxheSB3aXRoIHRoZSBidWZmZXJzICovCisgIAorICBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+cmVjdl93aW5fc2l6ZQk9IC0xOworICAKKyNlbmRpZiAvKiBETF9IUF9TRVRfTE9DQUxfV0lOX1JFUSAqLworICAKKyAgZGxwaV9jbF9zdHJlYW1fcmVzcG9uc2UtPnRlc3RfbGVuZ3RoID0gZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGg7CisgIAorICAvKiBiaW5kIHRoZSBzYXAgYW5kIHJldHJpZXZlIHRoZSBkbHNhcCBhc3NpZ25lZCBieSB0aGUgc3lzdGVtICAqLworICBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+c3RhdGlvbl9hZGRyX2xlbiA9IDE0OyAvKiBhcmJpdHJhcnkgKi8KKyAgaWYgKGRsX2JpbmQoZGF0YV9kZXNjcmlwdG9yLAorCSAgICAgIGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPnNhcCwKKwkgICAgICBETF9DTERMUywKKwkgICAgICAoY2hhciAqKWRscGlfY2xfc3RyZWFtX3Jlc3BvbnNlLT5zdGF0aW9uX2FkZHIsCisJICAgICAgJmRscGlfY2xfc3RyZWFtX3Jlc3BvbnNlLT5zdGF0aW9uX2FkZHJfbGVuKSAhPSAwKSB7CisgICAgZnByaW50Zih3aGVyZSwic2VuZF9kbHBpX2NsX3N0cmVhbTogYmluZCBmYWlsdXJlXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIC0xIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGUgPSAwLjA7IAkvKiBhc3N1bWUgbm8gY3B1ICovCisgIGlmIChkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIC8qIFdlIHdpbGwgcGFzcyB0aGUgcmF0ZSBpbnRvIHRoZSBjYWxpYnJhdGlvbiByb3V0aW5lLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBvbmUsIGl0IHdpbGwgYmUgMC4wLCBhbmQgd2Ugd2lsbCBkbyBhICovCisgICAgLyogInJlYWwiIGNhbGlicmF0aW9uLiBPdGhlcndpc2UsIGFsbCBpdCB3aWxsIHJlYWxseSBkbyBpcyAqLworICAgIC8qIHN0b3JlIGl0IGF3YXkuLi4gKi8KKyAgICBkbHBpX2NsX3N0cmVhbV9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIGRscGlfY2xfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUoZGxwaV9jbF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIAorICBtZXNzYWdlX3NpemUJPSBkbHBpX2NsX3N0cmVhbV9yZXF1ZXN0LT5tZXNzYWdlX3NpemU7CisgIHRlc3RfdGltZQk9IGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoOworICAKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSB0aW1lciBwb3BzLCBvciBpZiB3ZSBoYXBwZW4gdG8gcmVjdiBhICovCisgIC8qIG1lc3NhZ2Ugb2YgbGVzcyB0aGFuIHNlbmRfc2l6ZSBieXRlcy4uLiAqLworICAKKyAgdGltZXNfdXAgPSAwOworICBzdGFydF90aW1lcih0ZXN0X3RpbWUgKyBQQURfVElNRSk7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RscGlfY2xfc3RyZWFtOiBhYm91dCB0byBlbnRlciBpbm5lciBzYW5jdHVtLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgd2hpbGUgKCF0aW1lc191cCkgeworICAgIGlmKChnZXRtc2coZGF0YV9kZXNjcmlwdG9yLCAKKwkgICAgICAgJnJjdGxfbWVzc2FnZSwgICAgCisJICAgICAgICZyZWN2X21lc3NhZ2UsCisJICAgICAgICZmbGFncykgIT0gMCkgfHwgCisgICAgICAgKGRhdGFfaW5kLT5kbF9wcmltaXRpdmUgIT0gRExfVU5JVERBVEFfSU5EKSkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJLyogQWdhaW4sIHdlIGhhdmUgbGlrZWx5IGhpdCB0ZXN0LWVuZCB0aW1lICovCisJYnJlYWs7CisgICAgICB9CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJkbHBpX3JlY3ZfY2xfc3RyZWFtOiBnZXRtc2cgZmFpbHVyZTogZXJybm8gJWQgcHJpbWl0aXZlIDB4JXhcbiIsCisJICAgICAgZXJybm8sCisJICAgICAgZGF0YV9pbmQtPmRsX3ByaW1pdGl2ZSk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSA5OTY7CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBtZXNzYWdlc19yZWN2ZCsrOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RscGlfY2xfc3RyZWFtOiBnb3QgJWQgbWVzc2FnZXMuXG4iLG1lc3NhZ2VzX3JlY3ZkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0aW1lciBvciA8IHNlbmRfc2l6ZSBieXRlcyByZWNlaXZlZC4gKi8KKyAgCisgIGNwdV9zdG9wKGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1LCZlbGFwc2VkX3RpbWUpOworICAKKyAgaWYgKHRpbWVzX3VwKSB7CisgICAgLyogd2UgZW5kZWQgb24gYSB0aW1lciwgc3VidHJhY3QgdGhlIFBBRF9USU1FICovCisgICAgZWxhcHNlZF90aW1lIC09IChmbG9hdClQQURfVElNRTsKKyAgfQorICBlbHNlIHsKKyAgICBzdG9wX3RpbWVyKCk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jbF9zdHJlYW06IHRlc3QgZW5kZWQgaW4gJWYgc2Vjb25kcy5cbiIsZWxhcHNlZF90aW1lKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAKKyAgLyogV2Ugd2lsbCBjb3VudCB0aGUgIm9mZiIgbWVzc2FnZSAqLworICBieXRlc19yZWNlaXZlZCA9IChtZXNzYWdlc19yZWN2ZCAqIG1lc3NhZ2Vfc2l6ZSkgKyBsZW47CisgIAorICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGxwaV9jbF9zdHJlYW06IGdvdCAlZCBieXRlc1xuIiwKKwkgICAgYnl0ZXNfcmVjZWl2ZWQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlCQk9IERMUElfQ0xfU1RSRUFNX1JFU1VMVFM7CisgIGRscGlfY2xfc3RyZWFtX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkCT0gYnl0ZXNfcmVjZWl2ZWQ7CisgIGRscGlfY2xfc3RyZWFtX3Jlc3VsdHMtPm1lc3NhZ2VzX3JlY3ZkCT0gbWVzc2FnZXNfcmVjdmQ7CisgIGRscGlfY2xfc3RyZWFtX3Jlc3VsdHMtPmVsYXBzZWRfdGltZQk9IGVsYXBzZWRfdGltZTsKKyAgaWYgKGRscGlfY2xfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgZGxwaV9jbF9zdHJlYW1fcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgZWxzZSB7CisgICAgZGxwaV9jbF9zdHJlYW1fcmVzdWx0cy0+Y3B1X3V0aWwJPSAtMS4wOworICB9CisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGxwaV9jbF9zdHJlYW06IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisMCitpbnQgc2VuZF9kbHBpX2NsX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorV2luZG93IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2ZyYW1lcyBmcmFtZXMgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgXG4iOworICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorV2luZG93IFNpemUgICBSZXF1ZXN0IFJlc3AuICBFbGFwc2VkIFRyYW5zLiAgIENQVSAgICBDUFUgICAgUy5kZW0gICBTLmRlbVxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIFJhdGUgICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2ZyYW1lcyBmcmFtZXMgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAgICAgICUlICAgICAgdXMvVHIgICB1cy9UclxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2ZcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAlLTZkICUtNi4yZiAgJS02LjJmICAgJS02LjJmICUtNi4yZiAlLTYuM2YgICUtNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlwKK0FsaWdubWVudCAgICAgIE9mZnNldFxuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZVxuXAorU2VuZCAgIFJlY3YgICAgU2VuZCAgIFJlY3ZcblwKKyU1ZCAgJTVkICAgJTVkICAlNWRcbiI7CisgIAorICAKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorICBpbnQgICBkbHNhcF9sZW47CisgIGludCAgIGZsYWdzID0gMDsKKyAgY2hhcgkqc2VuZF9tZXNzYWdlX3B0cjsKKyAgY2hhcgkqcmVjdl9tZXNzYWdlX3B0cjsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgY2hhciAgc2N0bF9kYXRhW0JVRlNJWl07CisgIGNoYXIgIHJjdGxfZGF0YVtCVUZTSVpdOworICBjaGFyICBkbHNhcFtCVUZTSVpdOworICBzdHJ1Y3Qgc3RyYnVmIHNlbmRfbWVzc2FnZTsKKyAgc3RydWN0IHN0cmJ1ZiByZWN2X21lc3NhZ2U7CisgIHN0cnVjdCBzdHJidWYgc2N0bF9tZXNzYWdlOworICBzdHJ1Y3Qgc3RyYnVmIHJjdGxfbWVzc2FnZTsKKyAgCisgIC8qIHRoZXNlIGFyZSB0byBtYWtlIHJlYWRpbmcgc29tZSBvZiB0aGUgRExQSSBjb250cm9sIG1lc3NhZ2VzIGVhc2llciAqLworICBkbF91bml0ZGF0YV9pbmRfdCAqZGF0YV9pbmQgPSAoZGxfdW5pdGRhdGFfaW5kX3QgKilyY3RsX2RhdGE7CisgIGRsX3VuaXRkYXRhX3JlcV90ICpkYXRhX3JlcSA9IChkbF91bml0ZGF0YV9yZXFfdCAqKXNjdGxfZGF0YTsKKyAgZGxfdWRlcnJvcl9pbmRfdCAgKnVkZXJfaW5kID0gKGRsX3VkZXJyb3JfaW5kX3QgKilyY3RsX2RhdGE7CisgIAorICBpbnQJbnVtbWVzc2FnZXM7CisgIGludAlzZW5kX2Rlc2NyaXB0b3I7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludAlieXRlc194ZmVyZDsKKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlIHRocnVwdXQ7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIC8qIHRpbWluZyBzdHVmZiAqLworI2RlZmluZQlNQVhfS0VQVF9USU1FUwkxMDI0CisgIGludAl0aW1lX2luZGV4ID0gMDsKKyAgaW50CXVudXNlZF9idWNrZXRzOworICBpbnQJa2VwdF90aW1lc1tNQVhfS0VQVF9USU1FU107CisgIGludAlzbGVlcF91c2VjczsKKyAgdW5zaWduZWQJaW50CXRvdGFsX3RpbWVzPTA7CisgIHN0cnVjdAl0aW1lem9uZQlkdW1teV96b25lOworICBzdHJ1Y3QJdGltZXZhbAkJc2VuZF90aW1lOworICBzdHJ1Y3QJdGltZXZhbAkJcmVjdl90aW1lOworICBzdHJ1Y3QJdGltZXZhbAkJc2xlZXBfdGltZXZhbDsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAKKyAgc3RydWN0CWRscGlfY2xfcnJfcmVxdWVzdF9zdHJ1Y3QJKmRscGlfY2xfcnJfcmVxdWVzdDsKKyAgc3RydWN0CWRscGlfY2xfcnJfcmVzcG9uc2Vfc3RydWN0CSpkbHBpX2NsX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJZGxwaV9jbF9ycl9yZXN1bHRzX3N0cnVjdAkqZGxwaV9jbF9ycl9yZXN1bHQ7CisgIAorICBkbHBpX2NsX3JyX3JlcXVlc3QJPSAKKyAgICAoc3RydWN0IGRscGlfY2xfcnJfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRscGlfY2xfcnJfcmVzcG9uc2UJPSAKKyAgICAoc3RydWN0IGRscGlfY2xfcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgZGxwaV9jbF9ycl9yZXN1bHQJPSAKKyAgICAoc3RydWN0IGRscGlfY2xfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgLyogd2Ugd2FudCB0byB6ZXJvIG91dCB0aGUgdGltZXMsIHNvIHdlIGNhbiBkZXRlY3QgdW51c2VkIGVudHJpZXMuICovCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgdGltZV9pbmRleCA9IDA7CisgIHdoaWxlICh0aW1lX2luZGV4IDwgTUFYX0tFUFRfVElNRVMpIHsKKyAgICBrZXB0X3RpbWVzW3RpbWVfaW5kZXhdID0gMDsKKyAgICB0aW1lX2luZGV4ICs9IDE7CisgIH0KKyAgdGltZV9pbmRleCA9IDA7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgCisgIGlmIChwcmludF9oZWFkZXJzKSB7CisgICAgZnByaW50Zih3aGVyZSwiRExQSSBDTCBSRVFVRVNUL1JFU1BPTlNFIFRFU1RcbiIpOworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkKKyAgICAgIGZwcmludGYod2hlcmUsY3B1X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICBlbHNlCisgICAgICBmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICB9CisgIAorICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzICovCisgIAorICBudW1tZXNzYWdlcwk9CTA7CisgIGJ5dGVzX3hmZXJkCT0JMDsKKyAgdGltZXNfdXAgCT0gCTA7CisgIAorICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldCAqLworICB0ZW1wX21lc3NhZ2VfcHRyID0gKGNoYXIgKiltYWxsb2MocmVxX3NpemUrTUFYQUxJR05NRU5UK01BWE9GRlNFVCk7CisgIGlmICh0ZW1wX21lc3NhZ2VfcHRyID09IE5VTEwpIHsKKyAgICBwcmludGYoIm1hbGxvYyglZCkgZmFpbGVkIVxuIiwgcmVxX3NpemUrTUFYQUxJR05NRU5UK01BWE9GRlNFVCk7CisgICAgZXhpdCgxKTsKKyAgfQorICBzZW5kX21lc3NhZ2VfcHRyID0gKGNoYXIgKikoKCAobG9uZyl0ZW1wX21lc3NhZ2VfcHRyICsgCisJCQkgICAgICAgKGxvbmcpIGxvY2FsX3NlbmRfYWxpZ24gLSAxKSAmCQorCQkJICAgICAgfigobG9uZykgbG9jYWxfc2VuZF9hbGlnbiAtIDEpKTsKKyAgc2VuZF9tZXNzYWdlX3B0ciA9IHNlbmRfbWVzc2FnZV9wdHIgKyBsb2NhbF9zZW5kX29mZnNldDsKKyAgc2VuZF9tZXNzYWdlLm1heGxlbiA9IHJlcV9zaXplOworICBzZW5kX21lc3NhZ2UubGVuICAgID0gcmVxX3NpemU7CisgIHNlbmRfbWVzc2FnZS5idWYgICAgPSBzZW5kX21lc3NhZ2VfcHRyOworICAKKyAgdGVtcF9tZXNzYWdlX3B0ciA9IChjaGFyICopbWFsbG9jKHJzcF9zaXplK01BWEFMSUdOTUVOVCtNQVhPRkZTRVQpOworICBpZiAodGVtcF9tZXNzYWdlX3B0ciA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIHJzcF9zaXplK01BWEFMSUdOTUVOVCtNQVhPRkZTRVQpOworICAgIGV4aXQoMSk7CisgIH0KKyAgcmVjdl9tZXNzYWdlX3B0ciA9IChjaGFyICopKCggKGxvbmcpdGVtcF9tZXNzYWdlX3B0ciArIAorCQkJICAgICAgIChsb25nKSBsb2NhbF9yZWN2X2FsaWduIC0gMSkgJgkKKwkJCSAgICAgIH4oKGxvbmcpIGxvY2FsX3JlY3ZfYWxpZ24gLSAxKSk7CisgIHJlY3ZfbWVzc2FnZV9wdHIgPSByZWN2X21lc3NhZ2VfcHRyICsgbG9jYWxfcmVjdl9vZmZzZXQ7CisgIHJlY3ZfbWVzc2FnZS5tYXhsZW4gPSByc3Bfc2l6ZTsKKyAgcmVjdl9tZXNzYWdlLmxlbiAgICA9IDA7CisgIHJlY3ZfbWVzc2FnZS5idWYgICAgPSByZWN2X21lc3NhZ2VfcHRyOworICAKKyAgc2N0bF9tZXNzYWdlLm1heGxlbiA9IEJVRlNJWjsKKyAgc2N0bF9tZXNzYWdlLmxlbiAgICA9IDA7CisgIHNjdGxfbWVzc2FnZS5idWYgICAgPSBzY3RsX2RhdGE7CisgIAorICByY3RsX21lc3NhZ2UubWF4bGVuID0gQlVGU0laOworICByY3RsX21lc3NhZ2UubGVuICAgID0gMDsKKyAgcmN0bF9tZXNzYWdlLmJ1ZiAgICA9IHJjdGxfZGF0YTsKKyAgCisgIC8qIGxldHMgZ2V0IG91cnNlbHZlcyBhIGZpbGUgZGVzY3JpcHRvciAqLworICAKKyAgc2VuZF9kZXNjcmlwdG9yID0gZGxfb3Blbihsb2NfZGxwaV9kZXZpY2UsbG9jX3BwYSk7CisgIGlmIChzZW5kX2Rlc2NyaXB0b3IgPCAwKXsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfZGxwaV9jbF9ycjogZGxwaSBjbCByciBzZW5kIGRlc2NyaXB0b3IiKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX2RscGlfY2xfcnI6IHNlbmRfZGVzY3JpcHRvciBvYnRhaW5lZC4uLlxuIik7CisgIH0KKyAgCisgIC8qIGJpbmQgdGhlIHNhcCB0byB0aGUgZGVzY3JpcHRvciBhbmQgZ2V0IHRoZSBkbHNhcCAqLworICBkbHNhcF9sZW4gPSBCVUZTSVo7CisgIGlmIChkbF9iaW5kKHNlbmRfZGVzY3JpcHRvciwKKwkgICAgICBkbHBpX3NhcCwKKwkgICAgICBETF9DTERMUywKKwkgICAgICBkbHNhcCwKKwkgICAgICAmZGxzYXBfbGVuKSAhPSAwKSB7CisgICAgZnByaW50Zih3aGVyZSwic2VuZF9kbHBpX2NsX3JyOiBiaW5kIGZhaWx1cmVcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTW9kaWZ5IHRoZSBsb2NhbCBzb2NrZXQgc2l6ZS4gSWYgdGhlIHVzZXIgaGFzIG5vdCByZXF1ZXN0ZWQgdGhhdCAqLworICAvKiB0aGUgc29ja2V0IGJ1ZmZlcnMgYmUgYWx0ZXJlZCwgd2Ugd2lsbCB0cnkgdG8gZmluZC1vdXQgd2hhdCB0aGVpciAqLworICAvKiB2YWx1ZXMgYXJlLiBJZiB3ZSBjYW5ub3QgdG91Y2ggdGhlIHNvY2tldCBidWZmZXIgaW4gYW55IHdheSwgd2UgKi8KKyAgLyogd2lsbCBzZXQgdGhlIHZhbHVlcyB0byAtMSB0byBpbmRpY2F0ZSB0aGF0LiAgVGhlIHJlY2VpdmUgc29ja2V0ICovCisgIC8qIG11c3QgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gaG9sZCBhZGRyZXNzaW5nIGluZm9ybWF0aW9uIHNvICs9IGEgKi8KKyAgLyogc2l6ZW9mIHN0cnVjdCBzb2NrYWRkcl9pbiB0byBpdC4gKi8gCisgIAorICAvKiB0aGlzIGlzIGFjdHVhbGx5IG5vdGhpbmcgY29kZSwgYW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSAqLworICAvKiBhbGFsYWdvdXMgY2FsbHMgaW4gdGhlIFNUUkVBTSB0ZXN0IHdoZXJlIHRoZSB3aW5kb3cgc2l6ZSBpcyBzZXQgKi8KKyAgLyogd2l0aCB0aGUgSFAgRExQSSBFeHRlbnNpb24uIHJhaiA4Lzk0ICovCisjaWZkZWYgU09fU05EQlVGCisgIGlmIChsc3dfc2l6ZSA+IDApIHsKKyAgICBpZiAoZGVidWcgPiAxKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX2RscGlfY2xfcnI6IGxvY2FsIHdpbmRvdyBzaXplIGFsdGVyZWQgZnJvbSBzeXN0ZW0gZGVmYXVsdC4uLlxuIik7CisgICAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdzogJWRcbiIsbHN3X3NpemUpOworICAgIH0KKyAgfQorICBpZiAobHJ3X3NpemUgPiAwKSB7CisgICAgaWYgKGRlYnVnID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwibmV0cGVyZjogc2VuZF9kbHBpX2NsX3JyOiByZW1vdGUgd2luZG93IHNpemUgYWx0ZXJlZCBmcm9tIHN5c3RlbSBkZWZhdWx0Li4uXG4iKTsKKyAgICAgIGZwcmludGYod2hlcmUsIiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlOiAlZFxuIixscndfc2l6ZSk7CisgICAgfQorICB9CisgIAorICAKKyAgLyogTm93LCB3ZSB3aWxsIGZpbmQtb3V0IHdoYXQgdGhlIHNpemUgYWN0dWFsbHkgYmVjYW1lLCBhbmQgcmVwb3J0ICovCisgIC8qIHRoYXQgYmFjayB0byB0aGUgdXNlci4gSWYgdGhlIGNhbGwgZmFpbHMsIHdlIHdpbGwganVzdCByZXBvcnQgYSAtMSAqLworICAvKiBiYWNrIHRvIHRoZSBpbml0aWF0b3IgZm9yIHRoZSByZWN2IGJ1ZmZlciBzaXplLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0cGVyZjogc2VuZF9kbHBpX2NsX3JyOiBzb2NrZXQgc2l6ZXMgZGV0ZXJtaW5lZC4uLlxuIik7CisgICAgZnByaW50Zih3aGVyZSwiICAgICAgICAgc2VuZDogJWQgcmVjdjogJWRcbiIsbHN3X3NpemUsbHJ3X3NpemUpOworICB9CisgIAorI2Vsc2UgLyogU09fU05EQlVGICovCisgIAorICBsc3dfc2l6ZSA9IC0xOworICBscndfc2l6ZSA9IC0xOworICAKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKyAgCisgIC8qIElmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgY3B1IHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cywgd2UgbXVzdCAqLworICAvKiBjYWxpYnJhdGUgdGhlIGNwdShzKS4gV2Ugd2lsbCBwZXJmb3JtIHRoaXMgdGFzayB3aXRoaW4gdGhlIHRlc3RzICovCisgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgIC8qIGNhbGlicmF0ZV9sb2NhbF9jcHUgd2lsbCByZXR1cm4gcmF0aGVyIHF1aWNrbHkgYXMgaXQgd2lsbCBoYXZlICovCisgIC8qIG5vdGhpbmcgdG8gZG8uIElmIGxvY2FsX2NwdV9yYXRlIGlzIHplcm8sIHRoZW4gd2Ugd2lsbCBnbyB0aHJvdWdoICovCisgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiBJZiAqLworICAvKiB0aGVyZSBpcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbCBpZGxlIGxvb3AsIHRoZSAqLworICAvKiBsb2NhbF9jcHVfcmF0ZSB3aWxsIGJlIHNldCB0byAtMS4gKi8KKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICB9CisgIAorICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUgc29ja2V0ICovCisgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAvKiBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggKi8KKyAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgIC8qIGRlZmF1bHQgdG8gOCwgd2hpY2ggd2lsbCBiZSBubyBhbGlnbm1lbnQgYWx0ZXJhdGlvbnMuICovCisgIAorICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJICAgICAgICA9CURPX0RMUElfQ0xfUlI7CisgIGRscGlfY2xfcnJfcmVxdWVzdC0+cmVjdl93aW5fc2l6ZQk9CXJyd19zaXplOworICBkbHBpX2NsX3JyX3JlcXVlc3QtPnNlbmRfd2luX3NpemUJPQlyc3dfc2l6ZTsKKyAgZGxwaV9jbF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudAk9CXJlbW90ZV9yZWN2X2FsaWduOworICBkbHBpX2NsX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICBkbHBpX2NsX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50CT0JcmVtb3RlX3NlbmRfYWxpZ247CisgIGRscGlfY2xfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQJPQlyZW1vdGVfc2VuZF9vZmZzZXQ7CisgIGRscGlfY2xfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplCT0JcmVxX3NpemU7CisgIGRscGlfY2xfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZQk9CXJzcF9zaXplOworICBkbHBpX2NsX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgZGxwaV9jbF9ycl9yZXF1ZXN0LT5jcHVfcmF0ZQkgICAgICAgID0JcmVtb3RlX2NwdV9yYXRlOworICBkbHBpX2NsX3JyX3JlcXVlc3QtPnBwYSAgICAgICAgICAgICAgID0gICAgICAgcmVtX3BwYTsKKyAgZGxwaV9jbF9ycl9yZXF1ZXN0LT5zYXAgICAgICAgICAgICAgICA9ICAgICAgIGRscGlfc2FwOworICBkbHBpX2NsX3JyX3JlcXVlc3QtPmRldl9uYW1lX2xlbiAgICAgID0gICAgICAgc3RybGVuKHJlbV9kbHBpX2RldmljZSk7CisgIHN0cmNweShkbHBpX2NsX3JyX3JlcXVlc3QtPmRscGlfZGV2aWNlLAorCSByZW1fZGxwaV9kZXZpY2UpOworICAKKyNpZmRlZiBfX2FscGhhCisgIAorICAvKiBvayAtIGV2ZW4gb24gYSBERUMgYm94LCBzdHJpbmdzIGFyZSBzdHJpbmdzLiBJIGRpbid0IHJlYWxseSB3YW50ICovCisgIC8qIHRvIG50b2hsIHRoZSB3b3JkcyBvZiBhIHN0cmluZy4gc2luY2UgSSBkb24ndCB3YW50IHRvIHRlYWNoIHRoZSAqLworICAvKiBzZW5kXyBhbmQgcmVjdl8gX3JlcXVlc3QgYW5kIF9yZXNwb25zZSByb3V0aW5lcyBhYm91dCB0aGUgdHlwZXMsICovCisgIC8qIEkgd2lsbCBwdXQgImFudGktbnRvaGwiIGNhbGxzIGhlcmUuIEkgaW1hZ2luZSB0aGF0IHRoZSAicHVyZSIgKi8KKyAgLyogc29sdXRpb24gd291bGQgYmUgdG8gdXNlIFhEUiwgYnV0IEkgYW0gc3RpbGwgbGVhcnkgb2YgYmVpbmcgYWJsZSAqLworICAvKiB0byBmaW5kIFhEUiBsaWJzIG9uIGFsbCBwbGF0Zm9ybXMgSSB3YW50IHJ1bm5pbmcgbmV0cGVyZi4gcmFqICovCisgIHsKKyAgICBpbnQgKmNoYXJ3b3JkOworICAgIGludCAqaW5pdHdvcmQ7CisgICAgaW50ICpsYXN0d29yZDsKKyAgICAKKyAgICBpbml0d29yZCA9IChpbnQgKikgZGxwaV9jbF9ycl9yZXF1ZXN0LT5kbHBpX2RldmljZTsKKyAgICBsYXN0d29yZCA9IGluaXR3b3JkICsgKChzdHJsZW4ocmVtX2RscGlfZGV2aWNlKSArIDMpIC8gNCk7CisgICAgCisgICAgZm9yIChjaGFyd29yZCA9IGluaXR3b3JkOworCSBjaGFyd29yZCA8IGxhc3R3b3JkOworCSBjaGFyd29yZCsrKSB7CisgICAgICAKKyAgICAgICpjaGFyd29yZCA9IG50b2hsKCpjaGFyd29yZCk7CisgICAgfQorICB9CisjZW5kaWYgLyogX19hbHBoYSAqLworICAKKyAgaWYgKHRlc3RfdGltZSkgeworICAgIGRscGlfY2xfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RpbWU7CisgIH0KKyAgZWxzZSB7CisgICAgZGxwaV9jbF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdHJhbnMgKiAtMTsKKyAgfQorICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfZGxwaV9jbF9ycjogcmVxdWVzdGluZyBETFBJIENMIHJlcXVlc3QvcmVzcG9uc2UgdGVzdFxuIik7CisgIH0KKyAgCisgIHNlbmRfcmVxdWVzdCgpOworICAKKyAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAJKi8KKyAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodAkqLworICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodAkqLworICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAvKiBiZWluZyBzZW50IGZvciB0aGUgdGVzdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKyAgICBycndfc2l6ZQk9CWRscGlfY2xfcnJfcmVzcG9uc2UtPnJlY3Zfd2luX3NpemU7CisgICAgcnN3X3NpemUJPQlkbHBpX2NsX3JyX3Jlc3BvbnNlLT5zZW5kX3dpbl9zaXplOworICAgIHJlbW90ZV9jcHVfdXNhZ2U9CWRscGlfY2xfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgIHJlbW90ZV9jcHVfcmF0ZSA9IAlkbHBpX2NsX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKyAgICAKKyAgICAvKiBzZXQtdXAgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NpbmcgY29udHJvbCBpbmZvICovCisgICAgZGF0YV9yZXEtPmRsX3ByaW1pdGl2ZSA9IERMX1VOSVREQVRBX1JFUTsKKyAgICBiY29weSgoY2hhciAqKShkbHBpX2NsX3JyX3Jlc3BvbnNlLT5zdGF0aW9uX2FkZHIpLAorCSAgKChjaGFyICopZGF0YV9yZXEgKyBzaXplb2YoZGxfdW5pdGRhdGFfcmVxX3QpKSwKKwkgIGRscGlfY2xfcnJfcmVzcG9uc2UtPnN0YXRpb25fYWRkcl9sZW4pOworICAgIGRhdGFfcmVxLT5kbF9kZXN0X2FkZHJfb2Zmc2V0ID0gc2l6ZW9mKGRsX3VuaXRkYXRhX3JlcV90KTsKKyAgICBkYXRhX3JlcS0+ZGxfZGVzdF9hZGRyX2xlbmd0aCA9IGRscGlfY2xfcnJfcmVzcG9uc2UtPnN0YXRpb25fYWRkcl9sZW47CisgICAgLyogdGhlcmUgaXMgYSBkbF9wcmlvcml0eSBzdHJ1Y3R1cmUgdG9vLCBidXQgSSBhbSBpZ25vcmluZyBpdCBmb3IgKi8KKyAgICAvKiB0aGUgdGltZSBiZWluZy4gKi8KKyAgICBzY3RsX21lc3NhZ2UubGVuID0gc2l6ZW9mKGRsX3VuaXRkYXRhX3JlcV90KSArIAorICAgICAgZGF0YV9yZXEtPmRsX2Rlc3RfYWRkcl9sZW5ndGg7CisgICAgLyogZmFtb3VzIGxhc3Qgd29yZHMgLSBzb21lIERMUEkgcHJvdmlkZXJzIGdldCB1bmhhcHB5IGlmIHRoZQorICAgICAgIHByaW9yaXR5IHN0dWZmIGlzIG5vdCBpbml0aWFsaXplZC4gIGZpeCBmcm9tIE5pY29sYXMgVGhvbWFzLiAqLworICAgIGRhdGFfcmVxLT5kbF9wcmlvcml0eS5kbF9taW4gPSBETF9RT1NfRE9OVF9DQVJFOworICAgIGRhdGFfcmVxLT5kbF9wcmlvcml0eS5kbF9tYXggPSBETF9RT1NfRE9OVF9DQVJFOworCisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHJlbW90ZSBlcnJvciIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIERhdGEgU29ja2V0IHNldC11cCBpcyBmaW5pc2hlZC4gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcywgZWl0aGVyIHRoZSAqLworICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAvKiBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBleHRyYSAqLworICAvKiBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCB3ZSdsbCBzZWUgaXQgKi8KKyAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgCisgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCB0aGV5ICovCisgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgCisgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgdGltZXNfdXAgPSAxOworICB9CisgIAorICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgCisgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworICAKKyAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gKi8KKyAgLyogV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3Qgd2lsbCAqLworICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiBJIHRoaW5rIEkgKi8KKyAgLyoganVzdCBhcmJpdHJhcmlseSBkZWNyZW1lbnQgdHJhbnNfcmVtYWluaW5nIGZvciB0aGUgdGltZWQgdGVzdCwgYnV0ICovCisgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgIC8qIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSB0aGUgc2FtZSBidWZmZXIuICovCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAvKiBzZW5kIHRoZSByZXF1ZXN0ICovCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBnZXR0aW1lb2ZkYXkoJnNlbmRfdGltZSwmZHVtbXlfem9uZSk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICBpZihwdXRtc2coc2VuZF9kZXNjcmlwdG9yLAorCSAgICAgICZzY3RsX21lc3NhZ2UsCisJICAgICAgJnNlbmRfbWVzc2FnZSwKKwkgICAgICAwKSAhPSAwKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiBXZSBsaWtlbHkgaGl0ICovCisJLyogdGVzdC1lbmQgdGltZS4gKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIC8qIHRoZXJlIGlzIG1vcmUgd2UgY291bGQgZG8gaGVyZSwgYnV0IGl0IGNhbiB3YWl0ICovCisgICAgICBwZXJyb3IoInNlbmRfZGxwaV9jbF9ycjogZGF0YSBzZW5kIGVycm9yIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiByZWNlaXZlIHRoZSByZXNwb25zZS4gYXQgc29tZSBwb2ludCwgd2Ugd2lsbCBuZWVkIHRvIGhhbmRsZSAqLworICAgIC8qIHNlbmRpbmcgcmVzcG9uc2VzIHdoaWNoIGFyZSBncmVhdGVyIHRoYW4gdGhlIGRhdGFsaW5rIE1UVS4gd2UgKi8KKyAgICAvKiBtYXkgYWxzbyB3YW50IHRvIGFkZCBzb21lIERMUEkgZXJyb3IgY2hlY2tpbmcsIGJ1dCBmb3Igbm93IHdlICovCisgICAgLyogd2lsbCBpZ25vcmUgdGhhdCBhbmQganVzdCBsZXQgZXJyb3JzIHN0b3AgdGhlIHRlc3Qgd2l0aCBsaXR0bGUgKi8KKyAgICAvKiBpbmRpY2F0aW9uIG9mIHdoYXQgbWlnaHQgYWN0dWFsbHkgYmUgd3JvbmcuICovCisgICAgCisgICAgaWYoKGdldG1zZyhzZW5kX2Rlc2NyaXB0b3IsIAorCSAgICAgICAmcmN0bF9tZXNzYWdlLCAgICAKKwkgICAgICAgJnJlY3ZfbWVzc2FnZSwKKwkgICAgICAgJmZsYWdzKSAhPSAwKSB8fCAKKyAgICAgICAoZGF0YV9pbmQtPmRsX3ByaW1pdGl2ZSAhPSBETF9VTklUREFUQV9JTkQpKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiBBZ2Fpbiwgd2UgaGF2ZSBsaWtlbHkgaGl0IHRlc3QtZW5kIHRpbWUgKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInNlbmRfZGxwaV9jbF9ycjogcmVjdiBlcnJvcjogZXJybm8gJWQgcHJpbWl0aXZlIDB4JXhcbiIsCisJICAgICAgZXJybm8sCisJICAgICAgZGF0YV9pbmQtPmRsX3ByaW1pdGl2ZSk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBnZXR0aW1lb2ZkYXkoJnJlY3ZfdGltZSwmZHVtbXlfem9uZSk7CisgICAgCisgICAgLyogbm93IHdlIGRvIHNvbWUgYXJpdGhtYXRpYyBvbiB0aGUgdHdvIHRpbWV2YWxzICovCisgICAgaWYgKHJlY3ZfdGltZS50dl91c2VjIDwgc2VuZF90aW1lLnR2X3VzZWMpIHsKKyAgICAgIC8qIHdlIHdyYXBwZWQgYXJvdW5kIGEgc2Vjb25kICovCisgICAgICByZWN2X3RpbWUudHZfdXNlYyArPSAxMDAwMDAwOworICAgICAgcmVjdl90aW1lLnR2X3NlYyAgLT0gMTsKKyAgICB9CisgICAgCisgICAgLyogYW5kIHN0b3JlIGl0IGF3YXkgKi8KKyAgICBrZXB0X3RpbWVzW3RpbWVfaW5kZXhdID0gKHJlY3ZfdGltZS50dl9zZWMgLSBzZW5kX3RpbWUudHZfc2VjKSAqIDEwMDAwMDA7CisgICAga2VwdF90aW1lc1t0aW1lX2luZGV4XSArPSAocmVjdl90aW1lLnR2X3VzZWMgLSBzZW5kX3RpbWUudHZfdXNlYyk7CisgICAgCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2UgbWF5IHdpc2ggdG8gc2xlZXAgZm9yIHNvbWUgcGVyaW9kIG9mICovCisgICAgLyogdGltZSwgc28gd2Ugc2VlIGhvdyBsb25nIHRoYXQgbGFzdCB0cmFuc2FjdGlvbiBqdXN0IHRvb2ssICovCisgICAgLyogYW5kIHNsZWVwIGZvciB0aGUgZGlmZmVyZW5jZSBvZiB0aGF0IGFuZCB0aGUgaW50ZXJ2YWwuIFdlICovCisgICAgLyogd2lsbCBub3Qgc2xlZXAgaWYgdGhlIHRpbWUgd291bGQgYmUgbGVzcyB0aGFuIGEgKi8KKyAgICAvKiBtaWxsaXNlY29uZC4gICovCisgICAgaWYgKGludGVydmFsX3VzZWNzID4gMCkgeworICAgICAgc2xlZXBfdXNlY3MgPSBpbnRlcnZhbF91c2VjcyAtIGtlcHRfdGltZXNbdGltZV9pbmRleF07CisgICAgICBpZiAoc2xlZXBfdXNlY3MgPiAxMDAwKSB7CisJLyogd2Ugc2xlZXAgKi8KKwlzbGVlcF90aW1ldmFsLnR2X3NlYyA9IHNsZWVwX3VzZWNzIC8gMTAwMDAwMDsKKwlzbGVlcF90aW1ldmFsLnR2X3VzZWMgPSBzbGVlcF91c2VjcyAlIDEwMDAwMDA7CisJc2VsZWN0KDAsCisJICAgICAgIDAsCisJICAgICAgIDAsCisJICAgICAgIDAsCisJICAgICAgICZzbGVlcF90aW1ldmFsKTsKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogbm93IHVwIHRoZSB0aW1lIGluZGV4ICovCisgICAgdGltZV9pbmRleCA9ICh0aW1lX2luZGV4ICsxKSVNQVhfS0VQVF9USU1FUzsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgIG51bW1lc3NhZ2VzKys7ICAgICAgICAgIAorICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcgPiAzKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZWRcbiIsbnVtbWVzc2FnZXMpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgIH0KKyAgCisgIC8qIHRoaXMgY2FsbCB3aWxsIGFsd2F5cyBnaXZlIHVzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSB0ZXN0LCBhbmQgKi8KKyAgLyogd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgCisgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyBtZWFzdXJlZD8gKi8KKyAgLyogaG93IGxvbmcgZGlkIHdlIHJlYWxseSBydW4/ICovCisgIAorICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgLyogY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nIHRoaW5ncy4gSWYgaXQgKi8KKyAgLyogd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLworICAKKyAgcmVjdl9yZXNwb25zZSgpOworICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgaWYgKGRlYnVnKQorICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCJuZXRwZXJmOiByZW1vdGUgZXJyb3IiKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyIHRocnVwdXQgd2FzIGZvciB0aGUgdGVzdC4gSW4gdGhlIGZ1dHVyZSwgKi8KKyAgLyogd2UgbWF5IHdhbnQgdG8gaW5jbHVkZSBhIGNhbGN1bGF0aW9uIG9mIHRoZSB0aHJ1cHV0IG1lYXN1cmVkIGJ5ICovCisgIC8qIHRoZSByZW1vdGUsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCBmb3IgYSBVRFAgc3RyZWFtIHRlc3QsICovCisgIC8qIHRoYXQgdGhlIHR3byBudW1iZXJzIHNob3VsZCBiZSAqdmVyeSogY2xvc2UuLi4gV2UgY2FsY3VsYXRlICovCisgIC8qIGJ5dGVzX3NlbnQgcmVnYXJkbGVzcyBvZiB0aGUgd2F5IHRoZSB0ZXN0IGxlbmd0aCB3YXMgY29udHJvbGxlZC4gKi8KKyAgLyogSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5ICovCisgIC8qIGhhdmUgc3BlY2lmaWVkIGEgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Fzbid0IGEgbXVsdGlwbGUgb2YgdGhlICovCisgIC8qIHNlbmRfc2l6ZSwgc28gd2UgcmVhbGx5IGRpZG4ndCBzZW5kIHdoYXQgaGUgYXNrZWQgZm9yIDstKSBXZSB1c2UgKi8KKyAgCisgIGJ5dGVzX3hmZXJkCT0gKHJlcV9zaXplICogbnVtbWVzc2FnZXMpICsgKHJzcF9zaXplICogbnVtbWVzc2FnZXMpOworICB0aHJ1cHV0CQk9IGNhbGNfdGhydXB1dChieXRlc194ZmVyZCk7CisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChsb2NhbF9jcHVfcmF0ZSA9PSAwLjApIHsKKwlmcHJpbnRmKHdoZXJlLCJXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgIFdBUk5JTkchXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJMb2NhbCBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uID0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gLTEuMDsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChyZW1vdGVfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiREFOR0VSICBEQU5HRVIgIERBTkdFUiAgICBEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiFcbiIpOworCWZwcmludGYod2hlcmUsIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IGRscGlfY2xfcnJfcmVzdWx0LT5jcHVfdXRpbDsKKyAgICAgIC8qIHNpbmNlIGNhbGNfc2VydmljZSBkZW1hbmQgaXMgZG9pbmcgbXMvS3VuaXQgd2Ugd2lsbCAqLworICAgICAgLyogbXVsdGlwbHkgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBieSAxMDI0IHRvIGdldCAqLworICAgICAgLyogImdvb2QiIG51bWJlcnMgKi8KKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgICAwLjAsCisJCQkJCQkgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgZGxwaV9jbF9ycl9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgICAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgICAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHN3X3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBscndfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogZ3Vlc3MgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUsCisJICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAkvKiBsb2NhbCBjcHUgKi8KKwkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAkvKiByZW1vdGUgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzIsCisJICAgICAgcnN3X3NpemUsCisJICAgICAgcnJ3X3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8xLAkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzd19zaXplLAorCSAgICAgIGxyd19zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVzcG9uc2VzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzIsCisJICAgICAgcnN3X3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIHJyd19zaXplKTsKKyAgICAgIAorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvKiBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBzb21lIG9mIHRoZSAqLworICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAvKiBtb21lbnQsIEkgZG8gbm90IHdpc2ggdG8gZmlndXJlLW91dCBhbGwgdGhlICBmb3JtYXR0aW5nLCBzbyBJIHdpbGwgKi8KKyAgLyoganVzdCBwdXQgdGhpcyBjb21tZW50IGhlcmUgdG8gaGVscCByZW1pbmQgbWUgdGhhdCBpdCBpcyBzb21ldGhpbmcgKi8KKyAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisgIAorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVURQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgICAKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICAgIGtlcHRfdGltZXNbTUFYX0tFUFRfVElNRVNdID0gMDsKKyAgICB0aW1lX2luZGV4ID0gMDsKKyAgICB3aGlsZSAodGltZV9pbmRleCA8IE1BWF9LRVBUX1RJTUVTKSB7CisgICAgICBpZiAoa2VwdF90aW1lc1t0aW1lX2luZGV4XSA+IDApIHsKKwl0b3RhbF90aW1lcyArPSBrZXB0X3RpbWVzW3RpbWVfaW5kZXhdOworICAgICAgfQorICAgICAgZWxzZQorCXVudXNlZF9idWNrZXRzKys7CisgICAgICB0aW1lX2luZGV4ICs9IDE7CisgICAgfQorICAgIHRvdGFsX3RpbWVzIC89IChNQVhfS0VQVF9USU1FUy11bnVzZWRfYnVja2V0cyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIkF2ZXJhZ2UgcmVzcG9uc2UgdGltZSAlZCB1c2Vjc1xuIiwKKwkgICAgdG90YWxfdGltZXMpOworI2VuZGlmCisgIH0KK30KKwwKK2ludCAKKyAgcmVjdl9kbHBpX2NsX3JyKCkKK3sKKyAgCisgIGNoYXIgICptZXNzYWdlOworICBpbnQJZGF0YV9kZXNjcmlwdG9yOworICBpbnQgICBmbGFncyA9IDA7CisgIGludAltZWFzdXJlX2NwdTsKKyAgCisgIGNoYXIJKnJlY3ZfbWVzc2FnZV9wdHI7CisgIGNoYXIJKnNlbmRfbWVzc2FnZV9wdHI7CisgIGNoYXIgIHNjdGxfZGF0YVtCVUZTSVpdOworICBjaGFyICByY3RsX2RhdGFbQlVGU0laXTsKKyAgY2hhciAgZGxzYXBbQlVGU0laXTsKKyAgc3RydWN0IHN0cmJ1ZiBzZW5kX21lc3NhZ2U7CisgIHN0cnVjdCBzdHJidWYgcmVjdl9tZXNzYWdlOworICBzdHJ1Y3Qgc3RyYnVmIHNjdGxfbWVzc2FnZTsKKyAgc3RydWN0IHN0cmJ1ZiByY3RsX21lc3NhZ2U7CisgIAorICAvKiB0aGVzZSBhcmUgdG8gbWFrZSByZWFkaW5nIHNvbWUgb2YgdGhlIERMUEkgY29udHJvbCBtZXNzYWdlcyBlYXNpZXIgKi8KKyAgZGxfdW5pdGRhdGFfaW5kX3QgKmRhdGFfaW5kID0gKGRsX3VuaXRkYXRhX2luZF90ICopcmN0bF9kYXRhOworICBkbF91bml0ZGF0YV9yZXFfdCAqZGF0YV9yZXEgPSAoZGxfdW5pdGRhdGFfcmVxX3QgKilzY3RsX2RhdGE7CisgIGRsX3VkZXJyb3JfaW5kX3QgICp1ZGVyX2luZCA9IChkbF91ZGVycm9yX2luZF90ICopcmN0bF9kYXRhOworICAKKyAgaW50CXRyYW5zX3JlY2VpdmVkOworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBzdHJ1Y3QJZGxwaV9jbF9ycl9yZXF1ZXN0X3N0cnVjdAkqZGxwaV9jbF9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJZGxwaV9jbF9ycl9yZXNwb25zZV9zdHJ1Y3QJKmRscGlfY2xfcnJfcmVzcG9uc2U7CisgIHN0cnVjdAlkbHBpX2NsX3JyX3Jlc3VsdHNfc3RydWN0CSpkbHBpX2NsX3JyX3Jlc3VsdHM7CisgIAorICBkbHBpX2NsX3JyX3JlcXVlc3QgID0gCisgICAgKHN0cnVjdCBkbHBpX2NsX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkbHBpX2NsX3JyX3Jlc3BvbnNlID0gCisgICAgKHN0cnVjdCBkbHBpX2NsX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRscGlfY2xfcnJfcmVzdWx0cyAgPSAKKyAgICAoc3RydWN0IGRscGlfY2xfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X2RscGlfY2xfcnI6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gZGVzY3JpcHRvciB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgZGVzY3JpcHRvciBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RscGlfY2xfcnI6IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gRExQSV9DTF9SUl9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jbF9ycjogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlciB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQgKi8KKyAgbWVzc2FnZSA9IChjaGFyICopbWFsbG9jKERBVEFCVUZGRVJMRU4pOworICBpZiAobWVzc2FnZSA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIERBVEFCVUZGRVJMRU4pOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGVzIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudHMgd2l0aCB0aGUgZGVzaXJlZCBvZmZzZXRzLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGxwaV9jbF9ycjogcmVxdWVzdGVkIHJlY3YgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgZGxwaV9jbF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkgICAgZGxwaV9jbF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGxwaV9jbF9ycjogcmVxdWVzdGVkIHNlbmQgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgZGxwaV9jbF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkgICAgZGxwaV9jbF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIHJlY3ZfbWVzc2FnZV9wdHIgPSBBTElHTl9CVUZGRVIobWVzc2FnZSwgZGxwaV9jbF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwgZGxwaV9jbF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgIHJlY3ZfbWVzc2FnZS5tYXhsZW4gPSBkbHBpX2NsX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZTsKKyAgcmVjdl9tZXNzYWdlLmxlbiAgICA9IDA7CisgIHJlY3ZfbWVzc2FnZS5idWYgICAgPSByZWN2X21lc3NhZ2VfcHRyOworICAKKyAgc2VuZF9tZXNzYWdlX3B0ciA9IEFMSUdOX0JVRkZFUihtZXNzYWdlLCBkbHBpX2NsX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LCBkbHBpX2NsX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgc2VuZF9tZXNzYWdlLm1heGxlbiA9IGRscGlfY2xfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZTsKKyAgc2VuZF9tZXNzYWdlLmxlbiAgICA9IGRscGlfY2xfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZTsKKyAgc2VuZF9tZXNzYWdlLmJ1ZiAgICA9IHNlbmRfbWVzc2FnZV9wdHI7CisgIAorICBzY3RsX21lc3NhZ2UubWF4bGVuID0gQlVGU0laOworICBzY3RsX21lc3NhZ2UubGVuICAgID0gMDsKKyAgc2N0bF9tZXNzYWdlLmJ1ZiAgICA9IHNjdGxfZGF0YTsKKyAgCisgIHJjdGxfbWVzc2FnZS5tYXhsZW4gPSBCVUZTSVo7CisgIHJjdGxfbWVzc2FnZS5sZW4gICAgPSAwOworICByY3RsX21lc3NhZ2UuYnVmICAgID0gcmN0bF9kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kbHBpX2NsX3JyOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kbHBpX2NsX3JyOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgCisjaWZkZWYgX19hbHBoYQorICAKKyAgLyogb2sgLSBldmVuIG9uIGEgREVDIGJveCwgc3RyaW5ncyBhcmUgc3RyaW5ncy4gSSBkaW4ndCByZWFsbHkgd2FudCAqLworICAvKiB0byBudG9obCB0aGUgd29yZHMgb2YgYSBzdHJpbmcuIHNpbmNlIEkgZG9uJ3Qgd2FudCB0byB0ZWFjaCB0aGUgKi8KKyAgLyogc2VuZF8gYW5kIHJlY3ZfIF9yZXF1ZXN0IGFuZCBfcmVzcG9uc2Ugcm91dGluZXMgYWJvdXQgdGhlIHR5cGVzLCAqLworICAvKiBJIHdpbGwgcHV0ICJhbnRpLW50b2hsIiBjYWxscyBoZXJlLiBJIGltYWdpbmUgdGhhdCB0aGUgInB1cmUiICovCisgIC8qIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVzZSBYRFIsIGJ1dCBJIGFtIHN0aWxsIGxlYXJ5IG9mIGJlaW5nIGFibGUgKi8KKyAgLyogdG8gZmluZCBYRFIgbGlicyBvbiBhbGwgcGxhdGZvcm1zIEkgd2FudCBydW5uaW5nIG5ldHBlcmYuIHJhaiAqLworICB7CisgICAgaW50ICpjaGFyd29yZDsKKyAgICBpbnQgKmluaXR3b3JkOworICAgIGludCAqbGFzdHdvcmQ7CisgICAgCisgICAgaW5pdHdvcmQgPSAoaW50ICopIGRscGlfY2xfcnJfcmVxdWVzdC0+ZGxwaV9kZXZpY2U7CisgICAgbGFzdHdvcmQgPSBpbml0d29yZCArICgoZGxwaV9jbF9ycl9yZXF1ZXN0LT5kZXZfbmFtZV9sZW4gKyAzKSAvIDQpOworICAgIAorICAgIGZvciAoY2hhcndvcmQgPSBpbml0d29yZDsKKwkgY2hhcndvcmQgPCBsYXN0d29yZDsKKwkgY2hhcndvcmQrKykgeworICAgICAgCisgICAgICAqY2hhcndvcmQgPSBodG9ubCgqY2hhcndvcmQpOworICAgIH0KKyAgfQorI2VuZGlmIC8qIF9fYWxwaGEgKi8KKyAgCisgIGRhdGFfZGVzY3JpcHRvciA9IGRsX29wZW4oZGxwaV9jbF9ycl9yZXF1ZXN0LT5kbHBpX2RldmljZSwKKwkJCSAgICBkbHBpX2NsX3JyX3JlcXVlc3QtPnBwYSk7CisgIGlmIChkYXRhX2Rlc2NyaXB0b3IgPCAwKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisgIC8qIFRoZSBpbml0aWF0b3IgbWF5IGhhdmUgd2lzaGVkLXVzIHRvIG1vZGlmeSB0aGUgd2luZG93ICovCisgIC8qIHNpemVzLiBXZSBzaG91bGQgZ2l2ZSBpdCBhIHNob3QuIElmIGhlIGRpZG4ndCBhc2sgdXMgdG8gY2hhbmdlIHRoZSAqLworICAvKiBzaXplcywgd2Ugc2hvdWxkIGxldCBoaW0ga25vdyB3aGF0IHNpemVzIHdlcmUgaW4gdXNlIGF0IHRoaXMgZW5kLiAqLworICAvKiBJZiBub25lIG9mIHRoaXMgY29kZSBpcyBjb21waWxlZC1pbiwgdGhlbiB3ZSB3aWxsIHRlbGwgdGhlICovCisgIC8qIGluaXRpYXRvciB0aGF0IHdlIHdlcmUgdW5hYmxlIHRvIHBsYXkgd2l0aCB0aGUgc2l6ZXMgYnkgKi8KKyAgLyogc2V0dGluZyB0aGUgc2l6ZSBpbiB0aGUgcmVzcG9uc2UgdG8gLTEuICovCisgIAorI2lmZGVmIERMX0hQX1NFVF9MT0NBTF9XSU5fUkVRCisgIAorICBpZiAoZGxwaV9jbF9ycl9yZXF1ZXN0LT5yZWN2X3dpbl9zaXplKSB7CisgIH0KKyAgCisgIGlmIChkbHBpX2NsX3JyX3JlcXVlc3QtPnNlbmRfd2luX3NpemUpIHsKKyAgfQorICAKKyAgLyogTm93LCB3ZSB3aWxsIGZpbmQtb3V0IHdoYXQgdGhlIHNpemVzIGFjdHVhbGx5IGJlY2FtZSwgYW5kIHJlcG9ydCAqLworICAvKiB0aGVtIGJhY2sgdG8gdGhlIHVzZXIuIElmIHRoZSBjYWxscyBmYWlsLCB3ZSB3aWxsIGp1c3QgcmVwb3J0IGEgLTEgKi8KKyAgLyogYmFjayB0byB0aGUgaW5pdGlhdG9yIGZvciB0aGUgYnVmZmVyIHNpemUuICovCisgIAorI2Vsc2UgLyogdGhlIHN5c3RlbSB3b24ndCBsZXQgdXMgcGxheSB3aXRoIHRoZSBidWZmZXJzICovCisgIAorICBkbHBpX2NsX3JyX3Jlc3BvbnNlLT5yZWN2X3dpbl9zaXplCT0gLTE7CisgIGRscGlfY2xfcnJfcmVzcG9uc2UtPnNlbmRfd2luX3NpemUJPSAtMTsKKyAgCisjZW5kaWYgLyogRExfSFBfU0VUX0xPQ0FMX1dJTl9SRVEgKi8KKyAgCisgIC8qIGJpbmQgdGhlIHNhcCBhbmQgcmV0cmlldmUgdGhlIGRsc2FwIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGRscGlfY2xfcnJfcmVzcG9uc2UtPnN0YXRpb25fYWRkcl9sZW4gPSAxNDsgLyogYXJiaXRyYXJ5ICovCisgIGlmIChkbF9iaW5kKGRhdGFfZGVzY3JpcHRvciwKKwkgICAgICBkbHBpX2NsX3JyX3JlcXVlc3QtPnNhcCwKKwkgICAgICBETF9DTERMUywKKwkgICAgICAoY2hhciAqKWRscGlfY2xfcnJfcmVzcG9uc2UtPnN0YXRpb25fYWRkciwKKwkgICAgICAmZGxwaV9jbF9ycl9yZXNwb25zZS0+c3RhdGlvbl9hZGRyX2xlbikgIT0gMCkgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfZGxwaV9jbF9ycjogYmluZCBmYWlsdXJlXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIDAuMCB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgZGxwaV9jbF9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSAwLjA7IAkvKiBhc3N1bWUgbm8gY3B1ICovCisgIGlmIChkbHBpX2NsX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgZGxwaV9jbF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIGRscGlfY2xfcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShkbHBpX2NsX3JyX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IHJlY2VpdmluZy4gKi8KKyAgCisgIGNwdV9zdGFydChkbHBpX2NsX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIGlmIChkbHBpX2NsX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKGRscGlfY2xfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKyBQQURfVElNRSk7CisgIH0KK2Vsc2UgeworICB0aW1lc191cCA9IDE7CisgIHRyYW5zX3JlbWFpbmluZyA9IGRscGlfY2xfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKK30KKyAgCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAKKyAgICAvKiByZWNlaXZlIHRoZSByZXF1ZXN0IGZyb20gdGhlIG90aGVyIHNpZGUuIGF0IHNvbWUgcG9pbnQgd2UgbmVlZCAqLworICAgIC8qIHRvIGhhbmRsZSAibG9naWNhbCIgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyB3aGljaCBhcmUgbGFyZ2VyICovCisgICAgLyogdGhhbiB0aGUgZGF0YSBsaW5rIE1UVSAqLworICAgIAorICAgIGlmKChnZXRtc2coZGF0YV9kZXNjcmlwdG9yLCAKKwkgICAgICAgJnJjdGxfbWVzc2FnZSwgICAgCisJICAgICAgICZyZWN2X21lc3NhZ2UsCisJICAgICAgICZmbGFncykgIT0gMCkgfHwgCisgICAgICAgKGRhdGFfaW5kLT5kbF9wcmltaXRpdmUgIT0gRExfVU5JVERBVEFfSU5EKSkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJLyogQWdhaW4sIHdlIGhhdmUgbGlrZWx5IGhpdCB0ZXN0LWVuZCB0aW1lICovCisJYnJlYWs7CisgICAgICB9CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJkbHBpX3JlY3ZfY2xfcnI6IGdldG1zZyBmYWlsdXJlOiBlcnJubyAlZCBwcmltaXRpdmUgMHgleFxuIiwKKwkgICAgICBlcnJubywKKwkgICAgICBkYXRhX2luZC0+ZGxfcHJpbWl0aXZlKTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIiAgICAgICAgICAgICAgICAgcmVjZXZpZWQgJXUgdHJhbnNhY3Rpb25zXG4iLAorCSAgICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IDk5NTsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZS4gZmlyc3QgY29weSB0aGUgZGxzYXAgKi8KKyAgICAvKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWNlaXZlIHRvIHRoZSBzZW5kaW5nIGNvbnRyb2wgbWVzc2FnZSAqLworICAgIAorICAgIGRhdGFfcmVxLT5kbF9kZXN0X2FkZHJfb2Zmc2V0ID0gc2l6ZW9mKGRsX3VuaXRkYXRhX3JlcV90KTsKKyAgICBiY29weSgoY2hhciAqKWRhdGFfaW5kICsgZGF0YV9pbmQtPmRsX3NyY19hZGRyX29mZnNldCwKKwkgIChjaGFyICopZGF0YV9yZXEgKyBkYXRhX3JlcS0+ZGxfZGVzdF9hZGRyX29mZnNldCwKKwkgIGRhdGFfaW5kLT5kbF9zcmNfYWRkcl9sZW5ndGgpOworICAgIGRhdGFfcmVxLT5kbF9kZXN0X2FkZHJfbGVuZ3RoID0gZGF0YV9pbmQtPmRsX3NyY19hZGRyX2xlbmd0aDsKKyAgICBkYXRhX3JlcS0+ZGxfcHJpbWl0aXZlID0gRExfVU5JVERBVEFfUkVROworICAgIC8qIGJlIHN1cmUgdG8gaW5pdGlhbGl6ZSB0aGUgcHJpb3JpdHkgZmllbGRzLiBmaXggZnJvbSBOaWNob2xhcworICAgICAgIFRob21hcyAqLworICAgIGRhdGFfcmVxLT5kbF9wcmlvcml0eS5kbF9taW4gPSBETF9RT1NfRE9OVF9DQVJFOworICAgIGRhdGFfcmVxLT5kbF9wcmlvcml0eS5kbF9tYXggPSBETF9RT1NfRE9OVF9DQVJFOworCisgICAgc2N0bF9tZXNzYWdlLmxlbiA9IHNpemVvZihkbF91bml0ZGF0YV9yZXFfdCkgKworICAgICAgZGF0YV9pbmQtPmRsX3NyY19hZGRyX2xlbmd0aDsKKyAgICBpZihwdXRtc2coZGF0YV9kZXNjcmlwdG9yLAorCSAgICAgICZzY3RsX21lc3NhZ2UsCisJICAgICAgJnNlbmRfbWVzc2FnZSwKKwkgICAgICAwKSAhPSAwKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiBXZSBsaWtlbHkgaGl0ICovCisJLyogdGVzdC1lbmQgdGltZS4gKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIC8qIHRoZXJlIGlzIG1vcmUgd2UgY291bGQgZG8gaGVyZSwgYnV0IGl0IGNhbiB3YWl0ICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJkbHBpX3JlY3ZfY2xfcnI6IHB1dG1zZyBmYWlsdXJlOiBlcnJubyAlZFxuIiwKKwkgICAgICBlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSA5OTM7CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICB0cmFuc19yZWNlaXZlZCsrOworICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInJlY3ZfZGxwaV9jbF9ycjogVHJhbnNhY3Rpb24gJWQgY29tcGxldGUuXG4iLAorCSAgICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIAorICB9CisgIAorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0byB0aW1lb3V0IG9yIHRyYW5zYWN0aW9uIGNvdW50IGJlaW5nICovCisgIC8qIHJlYWNoZWQgKi8KKyAgCisgIGNwdV9zdG9wKGRscGlfY2xfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICBpZiAodGltZXNfdXApIHsKKyAgICAvKiB3ZSBlbmRlZCB0aGUgdGVzdCBieSB0aW1lLCB3aGljaCB3YXMgYXQgbGVhc3QgMiBzZWNvbmRzICovCisgICAgLyogbG9uZ2VyIHRoYW4gd2Ugd2FudGVkIHRvIHJ1bi4gc28sIHdlIHdhbnQgdG8gc3VidHJhY3QgKi8KKyAgICAvKiBQQURfVElNRSBmcm9tIHRoZSBlbGFwc2VkX3RpbWUuICovCisgICAgZWxhcHNlZF90aW1lIC09IFBBRF9USU1FOworICB9CisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kbHBpX2NsX3JyOiBnb3QgJWQgdHJhbnNhY3Rpb25zXG4iLAorCSAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgZGxwaV9jbF9ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZAk9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCQkgICAoZGxwaV9jbF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkJICAgIGRscGlfY2xfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSkpOworICBkbHBpX2NsX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkCT0gdHJhbnNfcmVjZWl2ZWQ7CisgIGRscGlfY2xfcnJfcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICBpZiAoZGxwaV9jbF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIGRscGlfY2xfcnJfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X2RscGlfY2xfcnI6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisMCitpbnQgCisgIHJlY3ZfZGxwaV9jb19ycigpCit7CisgIAorICBjaGFyICAqbWVzc2FnZTsKKyAgU09DS0VUCXNfbGlzdGVuLGRhdGFfZGVzY3JpcHRvcjsKKyAgCisgIGludAltZWFzdXJlX2NwdTsKKyAgCisgIGludCAgIGZsYWdzID0gMDsKKyAgY2hhcgkqcmVjdl9tZXNzYWdlX3B0cjsKKyAgY2hhcgkqc2VuZF9tZXNzYWdlX3B0cjsKKyAgc3RydWN0IHN0cmJ1ZiBzZW5kX21lc3NhZ2U7CisgIHN0cnVjdCBzdHJidWYgcmVjdl9tZXNzYWdlOworICAKKyAgaW50CXRyYW5zX3JlY2VpdmVkOworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBpbnQJcmVxdWVzdF9ieXRlc19yZW1haW5pbmc7CisgIGludAl0aW1lZF9vdXQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBzdHJ1Y3QJZGxwaV9jb19ycl9yZXF1ZXN0X3N0cnVjdAkqZGxwaV9jb19ycl9yZXF1ZXN0OworICBzdHJ1Y3QJZGxwaV9jb19ycl9yZXNwb25zZV9zdHJ1Y3QJKmRscGlfY29fcnJfcmVzcG9uc2U7CisgIHN0cnVjdAlkbHBpX2NvX3JyX3Jlc3VsdHNfc3RydWN0CSpkbHBpX2NvX3JyX3Jlc3VsdHM7CisgIAorICBkbHBpX2NvX3JyX3JlcXVlc3QJPSAoc3RydWN0IGRscGlfY29fcnJfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRscGlfY29fcnJfcmVzcG9uc2UJPSAoc3RydWN0IGRscGlfY29fcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgZGxwaV9jb19ycl9yZXN1bHRzCT0gKHN0cnVjdCBkbHBpX2NvX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9kbHBpX2NvX3JyOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwgKi8KKyAgLyogc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGRldGVybWluZWQsICovCisgIC8qIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvIHdyb25nIGZvciBhbnkgKi8KKyAgLyogcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQgKi8KKyAgLyogd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMgKi8KKyAgLyogdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cyB1bmV4cGVjdGVkICovCisgIC8qIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jb19ycjogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBETFBJX0NPX1JSX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kbHBpX2NvX3JyOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldCAqLworICBtZXNzYWdlID0gKGNoYXIgKiltYWxsb2MoREFUQUJVRkZFUkxFTik7CisgIGlmIChtZXNzYWdlID09IE5VTEwpIHsKKyAgICBwcmludGYoIm1hbGxvYyglZCkgZmFpbGVkIVxuIiwgREFUQUJVRkZFUkxFTik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGFsdGVyIHRoZSBtZXNzYWdlX3B0ciB2YXJpYWJsZXMgdG8gYmUgYXQgdGhlIGRlc2lyZWQgKi8KKyAgLyogYWxpZ25tZW50cyB3aXRoIHRoZSBkZXNpcmVkIG9mZnNldHMuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kbHBpX2NvX3JyOiByZXF1ZXN0ZWQgcmVjdiBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICBkbHBpX2NvX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICBkbHBpX2NvX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kbHBpX2NvX3JyOiByZXF1ZXN0ZWQgc2VuZCBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICBkbHBpX2NvX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCSAgICBkbHBpX2NvX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgcmVjdl9tZXNzYWdlX3B0ciA9IEFMSUdOX0JVRkZFUihtZXNzYWdlLCBkbHBpX2NvX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LCBkbHBpX2NvX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgcmVjdl9tZXNzYWdlLm1heGxlbiA9IGRscGlfY29fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplOworICByZWN2X21lc3NhZ2UubGVuICAgID0gMDsKKyAgcmVjdl9tZXNzYWdlLmJ1ZiAgICA9IHJlY3ZfbWVzc2FnZV9wdHI7CisgIAorICBzZW5kX21lc3NhZ2VfcHRyID0gQUxJR05fQlVGRkVSKG1lc3NhZ2UsIGRscGlfY29fcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsIGRscGlfY29fcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworICBzZW5kX21lc3NhZ2UubWF4bGVuID0gZGxwaV9jb19ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplOworICBzZW5kX21lc3NhZ2UubGVuICAgID0gZGxwaV9jb19ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplOworICBzZW5kX21lc3NhZ2UuYnVmICAgID0gc2VuZF9tZXNzYWdlX3B0cjsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jb19ycjogcmVjZWl2ZSBhbGlnbm1lbnQgYW5kIG9mZnNldCBzZXQuLi5cbiIpOworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGxwaV9jb19ycjogc2VuZF9tZXNzYWdlLmJ1ZiAleCAubGVuICVkIC5tYXhsZW4gJWRcbiIsCisJICAgIHNlbmRfbWVzc2FnZS5idWYsc2VuZF9tZXNzYWdlLmxlbixzZW5kX21lc3NhZ2UubWF4bGVuKTsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RscGlfY29fcnI6IHJlY3ZfbWVzc2FnZS5idWYgJXggLmxlbiAlZCAubWF4bGVuICVkXG4iLAorCSAgICByZWN2X21lc3NhZ2UuYnVmLHJlY3ZfbWVzc2FnZS5sZW4scmVjdl9tZXNzYWdlLm1heGxlbik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTGV0J3MgY2xlYXItb3V0IG91ciBzb2NrYWRkciBmb3IgdGhlIHNha2Ugb2YgY2xlYW5saW5lcy4gVGhlbiB3ZSAqLworICAvKiBjYW4gcHV0IGluIE9VUiB2YWx1ZXMgIS0pIEF0IHNvbWUgcG9pbnQsIHdlIG1heSB3YW50IHRvIG5haWwgdGhpcyAqLworICAvKiBzb2NrZXQgdG8gYSBwYXJ0aWN1bGFyIG5ldHdvcmstbGV2ZWwgYWRkcmVzcywgYnV0IGZvciBub3csICovCisgIC8qIElOQUREUl9BTlkgc2hvdWxkIGJlIGp1c3QgZmluZS4gKi8KKyAgCisgIC8qIEdyYWIgYSBzb2NrZXQgdG8gbGlzdGVuIG9uLCBhbmQgdGhlbiBsaXN0ZW4gb24gaXQuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RscGlfY29fcnI6IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBsZXRzIGdyYWIgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIGEgcGFydGljdWxhciBsaW5rICovCisgIAorI2lmZGVmIF9fYWxwaGEKKyAgCisgIC8qIG9rIC0gZXZlbiBvbiBhIERFQyBib3gsIHN0cmluZ3MgYXJlIHN0cmluZ3MuIEkgZGluJ3QgcmVhbGx5IHdhbnQgKi8KKyAgLyogdG8gbnRvaGwgdGhlIHdvcmRzIG9mIGEgc3RyaW5nLiBzaW5jZSBJIGRvbid0IHdhbnQgdG8gdGVhY2ggdGhlICovCisgIC8qIHNlbmRfIGFuZCByZWN2XyBfcmVxdWVzdCBhbmQgX3Jlc3BvbnNlIHJvdXRpbmVzIGFib3V0IHRoZSB0eXBlcywgKi8KKyAgLyogSSB3aWxsIHB1dCAiYW50aS1udG9obCIgY2FsbHMgaGVyZS4gSSBpbWFnaW5lIHRoYXQgdGhlICJwdXJlIiAqLworICAvKiBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgWERSLCBidXQgSSBhbSBzdGlsbCBsZWFyeSBvZiBiZWluZyBhYmxlICovCisgIC8qIHRvIGZpbmQgWERSIGxpYnMgb24gYWxsIHBsYXRmb3JtcyBJIHdhbnQgcnVubmluZyBuZXRwZXJmLiByYWogKi8KKyAgeworICAgIGludCAqY2hhcndvcmQ7CisgICAgaW50ICppbml0d29yZDsKKyAgICBpbnQgKmxhc3R3b3JkOworICAgIAorICAgIGluaXR3b3JkID0gKGludCAqKSBkbHBpX2NvX3JyX3JlcXVlc3QtPmRscGlfZGV2aWNlOworICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKGRscGlfY29fcnJfcmVxdWVzdC0+ZGV2X25hbWVfbGVuICsgMykgLyA0KTsKKyAgICAKKyAgICBmb3IgKGNoYXJ3b3JkID0gaW5pdHdvcmQ7CisJIGNoYXJ3b3JkIDwgbGFzdHdvcmQ7CisJIGNoYXJ3b3JkKyspIHsKKyAgICAgIAorICAgICAgKmNoYXJ3b3JkID0gaHRvbmwoKmNoYXJ3b3JkKTsKKyAgICB9CisgIH0KKyNlbmRpZiAvKiBfX2FscGhhICovCisgIAorICBpZiAoKGRhdGFfZGVzY3JpcHRvciA9IGRsX29wZW4oZGxwaV9jb19ycl9yZXF1ZXN0LT5kbHBpX2RldmljZSwKKwkJCQkgZGxwaV9jb19ycl9yZXF1ZXN0LT5wcGEpKSA8IDApIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBiaW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gYSBzYXAgYW5kIGdldCB0aGUgcmVzdWx0YW50IGRsc2FwICovCisgIGRscGlfY29fcnJfcmVzcG9uc2UtPnN0YXRpb25fYWRkcl9sZW4gPSAxNDsgLyphcmJpdHJhcnkgbmVlZHMgZml4aW5nICovCisgIGlmIChkbF9iaW5kKGRhdGFfZGVzY3JpcHRvciwgCisgICAgICAgICAgICAgIGRscGlfY29fcnJfcmVxdWVzdC0+c2FwLCAKKyAgICAgICAgICAgICAgRExfQ09ETFMsCisgICAgICAgICAgICAgIChjaGFyICopZGxwaV9jb19ycl9yZXNwb25zZS0+c3RhdGlvbl9hZGRyLAorICAgICAgICAgICAgICAmZGxwaV9jb19ycl9yZXNwb25zZS0+c3RhdGlvbl9hZGRyX2xlbikgIT0gMCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFRoZSBpbml0aWF0b3IgbWF5IGhhdmUgd2lzaGVkLXVzIHRvIG1vZGlmeSB0aGUgc29ja2V0IGJ1ZmZlciAqLworICAvKiBzaXplcy4gV2Ugc2hvdWxkIGdpdmUgaXQgYSBzaG90LiBJZiBoZSBkaWRuJ3QgYXNrIHVzIHRvIGNoYW5nZSB0aGUgKi8KKyAgLyogc2l6ZXMsIHdlIHNob3VsZCBsZXQgaGltIGtub3cgd2hhdCBzaXplcyB3ZXJlIGluIHVzZSBhdCB0aGlzIGVuZC4gKi8KKyAgLyogSWYgbm9uZSBvZiB0aGlzIGNvZGUgaXMgY29tcGlsZWQtaW4sIHRoZW4gd2Ugd2lsbCB0ZWxsIHRoZSAqLworICAvKiBpbml0aWF0b3IgdGhhdCB3ZSB3ZXJlIHVuYWJsZSB0byBwbGF5IHdpdGggdGhlIHNvY2tldCBidWZmZXIgYnkgKi8KKyAgLyogc2V0dGluZyB0aGUgc2l6ZSBpbiB0aGUgcmVzcG9uc2UgdG8gLTEuICovCisgIAorI2lmZGVmIERMX0hQX1NFVF9MT0NBTF9XSU5fUkVRCisgIAorICBpZiAoZGxwaV9jb19ycl9yZXF1ZXN0LT5yZWN2X3dpbl9zaXplKSB7CisgICAgLyogU01PUCAqLworICB9CisgIAorICBpZiAoZGxwaV9jb19ycl9yZXF1ZXN0LT5zZW5kX3dpbl9zaXplKSB7CisgICAgLyogU01PUCAqLworICB9CisgIAorICAvKiBOb3csIHdlIHdpbGwgZmluZC1vdXQgd2hhdCB0aGUgc2l6ZXMgYWN0dWFsbHkgYmVjYW1lLCBhbmQgcmVwb3J0ICovCisgIC8qIHRoZW0gYmFjayB0byB0aGUgdXNlci4gSWYgdGhlIGNhbGxzIGZhaWwsIHdlIHdpbGwganVzdCByZXBvcnQgYSAtMSAqLworICAvKiBiYWNrIHRvIHRoZSBpbml0aWF0b3IgZm9yIHRoZSBidWZmZXIgc2l6ZS4gKi8KKyAgCisjZWxzZSAvKiB0aGUgc3lzdGVtIHdvbid0IGxldCB1cyBwbGF5IHdpdGggdGhlIGJ1ZmZlcnMgKi8KKyAgCisgIGRscGlfY29fcnJfcmVzcG9uc2UtPnJlY3Zfd2luX3NpemUJPSAtMTsKKyAgZGxwaV9jb19ycl9yZXNwb25zZS0+c2VuZF93aW5fc2l6ZQk9IC0xOworICAKKyNlbmRpZiAvKiBETF9IUF9TRVRfTE9DQUxfV0lOX1JFUSAqLworICAKKyAgLyogd2UgbWF5IGhhdmUgYmVlbiByZXF1ZXN0ZWQgdG8gZW5hYmxlIHRoZSBjb3B5IGF2b2lkYW5jZSBmZWF0dXJlcy4gKi8KKyAgLyogY2FuIHdlIGFjdHVhbGx5IGRvIHRoaXMgd2l0aCBETFBJLCB0aGUgd29ybGQgd29uZGVycyAqLworICAKKyAgaWYgKGRscGlfY29fcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQpIHsKKyNpZmRlZiBTT19SQ1ZfQ09QWUFWT0lECisgICAgZGxwaV9jb19ycl9yZXNwb25zZS0+c29fcmN2YXZvaWQgPSAwOworI2Vsc2UKKyAgICAvKiBpdCB3YXNuJ3QgY29tcGlsZWQgaW4uLi4gKi8KKyAgICBkbHBpX2NvX3JyX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IDA7CisjZW5kaWYKKyAgfQorICAKKyAgaWYgKGRscGlfY29fcnJfcmVxdWVzdC0+c29fc25kYXZvaWQpIHsKKyNpZmRlZiBTT19TTkRfQ09QWUFWT0lECisgICAgZGxwaV9jb19ycl9yZXNwb25zZS0+c29fc25kYXZvaWQgPSAwOworI2Vsc2UKKyAgICAvKiBpdCB3YXNuJ3QgY29tcGlsZWQgaW4uLi4gKi8KKyAgICBkbHBpX2NvX3JyX3Jlc3BvbnNlLT5zb19zbmRhdm9pZCA9IDA7CisjZW5kaWYKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICBkbHBpX2NvX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IDAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgaWYgKGRscGlfY29fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICBkbHBpX2NvX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgZGxwaV9jb19ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGRscGlfY29fcnJfcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIAorICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorICAvKiBhY2NlcHQgYSBjb25uZWN0aW9uIG9uIHRoaXMgZmlsZSBkZXNjcmlwdG9yLiBhdCBzb21lIHBvaW50LCAqLworICAvKiBkbF9hY2NlcHQgd2lsbCAiZG8gdGhlIHJpZ2h0IHRoaW5nIiB3aXRoIHRoZSBsYXN0IHR3byBwYXJtcywgYnV0ICovCisgIC8qIGZvciBub3cgaXQgaWdub3JlcyB0aGVtLCBzbyB3ZSB3aWxsIHBhc3MgemVyb3MuICovCisgIAorICBpZihkbF9hY2NlcHQoZGF0YV9kZXNjcmlwdG9yLCAwLCAwKSAhPSAwKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGxwaV9jb19ycjogZXJyb3IgaW4gYWNjZXB0LCBlcnJubyAlZFxuIiwKKwkgICAgZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGxwaV9jb19ycjogYWNjZXB0IGNvbXBsZXRlcyBvbiB0aGUgZGF0YSBjb25uZWN0aW9uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KGRscGlfY29fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworICAKKyAgLyogVGhlIGxvb3Agd2lsbCBleGl0IHdoZW4gdGhlIHNlbmRlciBkb2VzIGEgc2h1dGRvd24sIHdoaWNoIHdpbGwgKi8KKyAgLyogcmV0dXJuIGEgbGVuZ3RoIG9mIHplcm8gICAqLworICAKKyAgaWYgKGRscGlfY29fcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggPiAwKSB7CisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIoZGxwaV9jb19ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorZWxzZSB7CisgIHRpbWVzX3VwID0gMTsKKyAgdHJhbnNfcmVtYWluaW5nID0gZGxwaV9jb19ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCAqIC0xOworfQorICAKKyAgd2hpbGUgKCghdGltZXNfdXApIHx8ICh0cmFuc19yZW1haW5pbmcgPiAwKSkgeworICAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nCT0gZGxwaV9jb19ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemU7CisgICAgCisgICAgLyogcmVjZWl2ZSB0aGUgcmVxdWVzdCBmcm9tIHRoZSBvdGhlciBzaWRlLiB0aGVyZSBuZWVkcyB0byBiZSBzb21lICovCisgICAgLyogbW9yZSBsb2dpbiBpbiBwbGFjZSBmb3IgaGFuZGxpbmcgbWVzc2FnZXMgbGFyZ2VyIHRoYW4gbGluayBtdHUsICovCisgICAgLyogYnV0IHRoYXQgY2FuIHdhaXQgZm9yIGxhdGVyICovCisgICAgd2hpbGUocmVxdWVzdF9ieXRlc19yZW1haW5pbmcgPiAwKSB7CisgICAgICBpZigoZ2V0bXNnKGRhdGFfZGVzY3JpcHRvciwKKwkJIDAsCisJCSAmcmVjdl9tZXNzYWdlLAorCQkgJmZsYWdzKSkgPCAwKSB7CisJaWYgKGVycm5vID09IEVJTlRSKSB7CisJICAvKiB0aGUgdGltZXIgcG9wcGVkICovCisJICB0aW1lZF9vdXQgPSAxOworCSAgYnJlYWs7CisJfQorCQorICAgICAgICBpZiAoZGVidWcpIHsKKwkgIGZwcmludGYod2hlcmUsImZhaWxlZCBnZXRtc2cgY2FsbCBlcnJubyAlZFxuIixlcnJubyk7CisJICBmcHJpbnRmKHdoZXJlLCJyZWN2X21lc3NhZ2UubGVuICVkXG4iLHJlY3ZfbWVzc2FnZS5sZW4pOworCSAgZnByaW50Zih3aGVyZSwic2VuZF9tZXNzYWdlLmxlbiAlZFxuIixzZW5kX21lc3NhZ2UubGVuKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisgICAgICAgIH0KKwkKKwluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworCXNlbmRfcmVzcG9uc2UoKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVxdWVzdF9ieXRlc19yZW1haW5pbmcgLT0gcmVjdl9tZXNzYWdlLmxlbjsKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHRpbWVkX291dCkgeworICAgICAgLyogd2UgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgYmFzZWQgb24gdGltZSAtIGxldHMgYmFpbCBvdXQgb2YgKi8KKyAgICAgIC8qIGhlcmUgbm93Li4uICovIAorICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwicmVjdl9tZXNzYWdlLmxlbiAlZFxuIixyZWN2X21lc3NhZ2UubGVuKTsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfbWVzc2FnZS5sZW4gJWRcbiIsc2VuZF9tZXNzYWdlLmxlbik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICAKKyAgICAvKiBOb3csIHNlbmQgdGhlIHJlc3BvbnNlIHRvIHRoZSByZW1vdGUgKi8KKyAgICBpZigocHV0bXNnKGRhdGFfZGVzY3JpcHRvciwKKwkgICAgICAgMCwKKwkgICAgICAgJnNlbmRfbWVzc2FnZSwKKwkgICAgICAgMCkpICE9IDApIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHRoZSB0ZXN0IHRpbWVyIGhhcyBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSA5OTQ7CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICB0cmFuc19yZWNlaXZlZCsrOworICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInJlY3ZfZGxwaV9jb19ycjogVHJhbnNhY3Rpb24gJWQgY29tcGxldGVcbiIsCisJICAgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIH0KKyAgCisgIAorICAvKiBUaGUgbG9vcCBub3cgZXhpdHMgZHVlIHRvIHRpbWVvdXQgb3IgdHJhbnNhY3Rpb24gY291bnQgYmVpbmcgKi8KKyAgLyogcmVhY2hlZCAqLworICAKKyAgY3B1X3N0b3AoZGxwaV9jb19ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lZF9vdXQpIHsKKyAgICAvKiB3ZSBlbmRlZCB0aGUgdGVzdCBieSB0aW1lLCB3aGljaCB3YXMgYXQgbGVhc3QgMiBzZWNvbmRzICovCisgICAgLyogbG9uZ2VyIHRoYW4gd2Ugd2FudGVkIHRvIHJ1bi4gc28sIHdlIHdhbnQgdG8gc3VidHJhY3QgKi8KKyAgICAvKiBQQURfVElNRSBmcm9tIHRoZSBlbGFwc2VkX3RpbWUuICovCisgICAgZWxhcHNlZF90aW1lIC09IFBBRF9USU1FOworICB9CisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kbHBpX2NvX3JyOiBnb3QgJWQgdHJhbnNhY3Rpb25zXG4iLAorCSAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgZGxwaV9jb19ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZAk9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCQkgICAoZGxwaV9jb19ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkJICAgIGRscGlfY29fcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSkpOworICBkbHBpX2NvX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkCT0gdHJhbnNfcmVjZWl2ZWQ7CisgIGRscGlfY29fcnJfcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICBpZiAoZGxwaV9jb19ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIGRscGlfY29fcnJfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X2RscGlfY29fcnI6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisMCisvKiB0aGlzIHJvdXRpbmUgd2lsbCBkaXNwbGF5IHRoZSB1c2FnZSBzdHJpbmcgZm9yIHRoZSBETFBJIHRlc3RzICovCit2b2lkCisgIHByaW50X2RscGlfdXNhZ2UoKQorCit7CisgIGZ3cml0ZShkbHBpX3VzYWdlLCBzaXplb2YoY2hhciksIHN0cmxlbihkbHBpX3VzYWdlKSwgc3Rkb3V0KTsKK30KKworDAorLyogdGhpcyByb3V0aW5lIHdpbGwgc2NhbiB0aGUgY29tbWFuZCBsaW5lIGZvciBETFBJIHRlc3QgYXJndW1lbnRzICovCit2b2lkCisgIHNjYW5fZGxwaV9hcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGV4dGVybiBpbnQJb3B0aW5kLCBvcHRlcnJzOyAgLyogaW5kZXggb2YgZmlyc3QgdW51c2VkIGFyZyAJKi8KKyAgZXh0ZXJuIGNoYXIJKm9wdGFyZzsJICAvKiBwb2ludGVyIHRvIG9wdGlvbiBzdHJpbmcJKi8KKyAgCisgIGludAkJYzsKKyAgCisgIGNoYXIJYXJnMVtCVUZTSVpdLCAgLyogYXJndW1lbnQgaG9sZGVycwkJKi8KKyAgYXJnMltCVUZTSVpdOworCisgIGlmIChub19jb250cm9sKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIlRoZSBETFBJIHRlc3RzIGRvIG5vdCBrbm93IGhvdyB0byBydW4gd2l0aCBubyBjb250cm9sIGNvbm5lY3Rpb25cbiIpOworICAgIGV4aXQoLTEpOworICB9CisgIAorICAvKiBHbyB0aHJvdWdoIGFsbCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgYnJlYWsgdGhlbSAqLworICAvKiBvdXQuIEZvciB0aG9zZSBvcHRpb25zIHRoYXQgdGFrZSB0d28gcGFybXMsIHNwZWNpZnlpbmcgb25seSAqLworICAvKiB0aGUgZmlyc3Qgd2lsbCBzZXQgYm90aCB0byB0aGF0IHZhbHVlLiBTcGVjaWZ5aW5nIG9ubHkgdGhlICovCisgIC8qIHNlY29uZCB3aWxsIGxlYXZlIHRoZSBmaXJzdCB1bnRvdWNoZWQuIFRvIGNoYW5nZSBvbmx5IHRoZSAqLworICAvKiBmaXJzdCwgdXNlIHRoZSBmb3JtIGZpcnN0LCAoc2VlIHRoZSByb3V0aW5lIGJyZWFrX2FyZ3MuLiAqLworICAKKyNkZWZpbmUgRExQSV9BUkdTICJEOmhNOm06cDpyOnM6Vzp3OiIKKyAgCisgIHdoaWxlICgoYz0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIERMUElfQVJHUykpICE9IEVPRikgeworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgJz8nOgkKKyAgICBjYXNlICdoJzoKKyAgICAgIHByaW50X2RscGlfdXNhZ2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgY2FzZSAnRCc6CisgICAgICAvKiBzZXQgdGhlIGRscGkgZGV2aWNlIGZpbGUgbmFtZShzKSAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCXN0cmNweShsb2NfZGxwaV9kZXZpY2UsYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlzdHJjcHkocmVtX2RscGlfZGV2aWNlLGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgICAvKiBzZXQgdGhlIHNlbmQgc2l6ZSAqLworICAgICAgc2VuZF9zaXplID0gYXRvaShvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgICAvKiBzZXQgdGhlIHJlY3Ygc2l6ZSAqLworICAgICAgcmVjdl9zaXplID0gYXRvaShvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncCc6CisgICAgICAvKiBzZXQgdGhlIGxvY2FsL3JlbW90ZSBwcGEgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlsb2NfcHBhID0gYXRvaShhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCXJlbV9wcGEgPSBhdG9pKGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6CisgICAgICAvKiBzZXQgdGhlIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlyZXFfc2l6ZSA9IGF0b2koYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJcnNwX3NpemUgPSBhdG9pKGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgICAvKiBzZXQgdGhlIDgwMi4yIHNhcCBmb3IgdGhlIHRlc3QgKi8KKyAgICAgIGRscGlfc2FwID0gYXRvaShvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAndyc6CisgICAgICAvKiBzZXQgbG9jYWwgd2luZG93IHNpemVzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJbHN3X3NpemUgPSBhdG9pKGFyZzEpOworICAgICAgaWYgKGFyZzJbMF0pCisJbHJ3X3NpemUgPSBhdG9pKGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVyc6CisgICAgICAvKiBzZXQgcmVtb3RlIHdpbmRvdyBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCXJzd19zaXplID0gYXRvaShhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCXJyd19zaXplID0gYXRvaShhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIH07CisgIH0KK30KKworCisjZW5kaWYgLyogV0FOVF9ETFBJICovCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X2RscGkuaCBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfZGxwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjkyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X2RscGkuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAgICAgICAgQ29weXJpZ2h0IChDKSAxOTkzLCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorKi8KKworIC8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgdGVzdC1zcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbmV0cGVyZidzICovCisgLyogRExQSSB0ZXN0cyAqLworCisKK3N0cnVjdAlkbHBpX2NvX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X3dpbl9zaXplOworICBpbnQJc2VuZF93aW5fc2l6ZTsKKyAgaW50CXJlY2VpdmVfc2l6ZTsgICAvKiBob3cgbWFueSBieXRlcyBkbyB3ZSB3YW50IHRvICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWNlaXZlIGF0IG9uZSB0aW1lPyAqLworICBpbnQJcmVjdl9hbGlnbm1lbnQ7IC8qIHdoYXQgaXMgdGhlIGFsaWdubWVudCBvZiB0aGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlY2VpdmUgYnVmZmVyPyAqLworICBpbnQJcmVjdl9vZmZzZXQ7ICAgIC8qIGFuZCBhdCB3aGF0IG9mZnNldCBmcm9tIHRoYXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsaWdubWVudD8gKi8KKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1ICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB1dGlsaXphdGlvbiBtZWFzdXJlZD8gKi8KKyAgZmxvYXQJY3B1X3JhdGU7CS8qIGRvIHdlIGtub3cgaG93IGZhc3QgdGhlIGNwdSBpcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxyZWFkeT8gKi8gCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogY29waWVzIG9uIHJlY2VpdmVzPyAqLworICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgZGlydHlfY291bnQ7ICAgIC8qIGhvdyBtYW55IGludGVnZXJzIGluIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCQkJLyogc2hvdWxkIGJlIG1hZGUgZGlydHkgYmVmb3JlIGNhbGxpbmcgcmVjdj8gKi8KKyAgaW50ICAgY2xlYW5fY291bnQ7ICAgIC8qIGhvdyBtYW55IGludGVnZXJzIHNob3VsZCBiZSByZWFkIGZyb20gdGhlICovCisJCQkvKiByZWN2IGJ1ZmZlciBiZWZvcmUgY2FsbGluZyByZWN2PyAqLyAKKyAgaW50ICAgc2FwOyAgICAgICAgICAgIC8qICovCisgIGludCAgIHBwYTsgICAgICAgICAgICAvKiB3aGljaCBkZXZpY2UgZG8gd2Ugd2lzaCB0byB1c2U/ICovCisgIGludCAgIGRldl9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgZGxwaV9kZXZpY2VbMzJdOyAvKiB0aGUgcGF0aCB0byB0aGUgZGxwaSBkZXZpY2UgKi8KK307CisKK3N0cnVjdAlkbHBpX2NvX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl93aW5fc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF93aW5fc2l6ZTsKKyAgaW50CXJlY2VpdmVfc2l6ZTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJZGF0YV9wb3J0X251bWJlcjsJLyogY29ubmVjdCB0byBtZSBoZXJlCSovCisgIGZsb2F0CWNwdV9yYXRlOwkJLyogY291bGQgd2UgbWVhc3VyZQkqLworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgc3RhdGlvbl9hZGRyX2xlbjsKKyAgaW50ICAgc3RhdGlvbl9hZGRyWzFdOy8qIHdoYXQgaXMgdGhlIHN0YXRpb24gYWRkcmVzcyBmb3IgdGhlICovCisJCQkvKiBzcGVjaWZpZWQgcHBhPyAqLworfTsKKworc3RydWN0IGRscGlfY29fc3RyZWFtX3Jlc3VsdHNfc3RydWN0IHsKKyAgaW50CWJ5dGVzX3JlY2VpdmVkOwkvKiBpZ25vcmVkIGluaXRpYWxseSAqLworICBpbnQJcmVjdl9jYWxsczsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgZmxvYXQJZWxhcHNlZF90aW1lOwkvKiBob3cgbG9uZyB0aGUgdGVzdCByYW4gKi8KKyAgZmxvYXQJY3B1X3V0aWw7CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBmbG9hdAlzZXJ2X2RlbTsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGludCAgIGNwdV9tZXRob2Q7ICAgICAvKiBob3cgd2FzIENQVSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICBudW1fY3B1czsgICAgICAgLyogaG93IG1hbnkgQ1BVcyB3ZXJlIHRoZXJlPyAqLworfTsKKworc3RydWN0CWRscGlfY29fcnJfcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl93aW5fc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF93aW5fc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAlzZW5kX2FsaWdubWVudDsKKyAgaW50CXNlbmRfb2Zmc2V0OworICBpbnQJcmVxdWVzdF9zaXplOworICBpbnQJcmVzcG9uc2Vfc2l6ZTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGZsb2F0CWNwdV9yYXRlOwkvKiBkbyB3ZSBrbm93IGhvdyBmYXN0IHRoZSBjcHUgaXM/CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHBwYTsgICAgICAgICAgICAvKiB3aGljaCBkZXZpY2UgZG8gd2Ugd2lzaCB0byB1c2U/ICovCisgIGludCAgIHNhcDsgICAgICAgICAgICAvKiB3aGljaCBzYXAgc2hvdWxkIGJlIHVzZWQ/ICovCisgIGludCAgIGRldl9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgZGxwaV9kZXZpY2VbMzJdOyAvKiB0aGUgcGF0aCB0byB0aGUgZGxwaSBkZXZpY2UgKi8KK307CisKK3N0cnVjdAlkbHBpX2NvX3JyX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X3dpbl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX3dpbl9zaXplOworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlkYXRhX3BvcnRfbnVtYmVyOwkvKiBjb25uZWN0IHRvIG1lIGhlcmUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludAlzb19yY3Zhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBzdGF0aW9uX2FkZHJfbGVuOyAgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBzdGF0aW9uIGFkZHJlc3MgKi8KKyAgaW50ICAgc3RhdGlvbl9hZGRyWzFdOyAgICAgLyogdGhlIHJlbW90ZSdzIHN0YXRpb24gYWRkcmVzcyAqLworfTsKKworc3RydWN0IGRscGlfY29fcnJfcmVzdWx0c19zdHJ1Y3QgeworICBpbnQJYnl0ZXNfcmVjZWl2ZWQ7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIGludAlyZWN2X2NhbGxzOwkvKiBpZ25vcmVkIGluaXRpYWxseSAqLworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CS8qIG5vdCBpZ25vcmVkICAqLworICBmbG9hdAllbGFwc2VkX3RpbWU7CS8qIGhvdyBsb25nIHRoZSB0ZXN0IHJhbiAqLworICBmbG9hdAljcHVfdXRpbDsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGZsb2F0CXNlcnZfZGVtOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgaW50ICAgY3B1X21ldGhvZDsgICAgIC8qIGhvdyB3YXMgQ1BVIHV0aWwgbWVhc3VyZWQ/ICovCisgIGludCAgIG51bV9jcHVzOyAgICAgICAvKiBob3cgbWFueSBDUFVzIHdlcmUgdGhlcmU/ICovCit9OworCitzdHJ1Y3QJZGxwaV9jbF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl93aW5fc2l6ZTsKKyAgaW50CW1lc3NhZ2Vfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAljaGVja3N1bV9vZmY7CisgIGludAltZWFzdXJlX2NwdTsKKyAgZmxvYXQJY3B1X3JhdGU7CisgIGludAl0ZXN0X2xlbmd0aDsKKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBwcGE7ICAgICAgICAgICAgLyogd2hpY2ggZGV2aWNlIGRvIHdlIHdpc2ggdG8gdXNlPyAqLworICBpbnQgICBzYXA7CisgIGludCAgIGRldl9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgZGxwaV9kZXZpY2VbMzJdOyAvKiB0aGUgcGF0aCB0byB0aGUgZGxwaSBkZXZpY2UgKi8KK307CisKK3N0cnVjdAlkbHBpX2NsX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl93aW5fc2l6ZTsKKyAgaW50CXNlbmRfd2luX3NpemU7CisgIGludAltZWFzdXJlX2NwdTsKKyAgaW50CXRlc3RfbGVuZ3RoOworICBpbnQJZGF0YV9wb3J0X251bWJlcjsKKyAgZmxvYXQJY3B1X3JhdGU7CisgIGludAlzb19yY3Zhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBzdGF0aW9uX2FkZHJfbGVuOyAgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBzdGF0aW9uIGFkZHJlc3MgKi8KKyAgaW50ICAgc3RhdGlvbl9hZGRyWzFdOyAgICAgLyogdGhlIHJlbW90ZSdzIHN0YXRpb24gYWRkcmVzcyAqLworfTsKKworc3RydWN0CWRscGlfY2xfc3RyZWFtX3Jlc3VsdHNfc3RydWN0IHsKKyAgaW50CW1lc3NhZ2VzX3JlY3ZkOworICBpbnQJYnl0ZXNfcmVjZWl2ZWQ7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgZmxvYXQJY3B1X3V0aWw7CisgIGludCAgIG51bV9jcHVzOworfTsKKworCitzdHJ1Y3QJZGxwaV9jbF9ycl9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X3dpbl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX3dpbl9zaXplOworICBpbnQJcmVjdl9hbGlnbm1lbnQ7CisgIGludAlyZWN2X29mZnNldDsKKyAgaW50CXNlbmRfYWxpZ25tZW50OworICBpbnQJc2VuZF9vZmZzZXQ7CisgIGludAlyZXF1ZXN0X3NpemU7CisgIGludAlyZXNwb25zZV9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzPwkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSAqLworCQkJLyogY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHBwYTsgICAgICAgICAgICAvKiB3aGljaCBkZXZpY2UgZG8gd2Ugd2lzaCB0byB1c2U/ICovCisgIGludCAgIHNhcDsgICAgICAgICAgICAvKiB3aGljaCBzYXA/ICovCisgIGludCAgIGRldl9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgZGxwaV9kZXZpY2VbMzJdOyAvKiB0aGUgcGF0aCB0byB0aGUgZGxwaSBkZXZpY2UgKi8KK307CisKK3N0cnVjdAlkbHBpX2NsX3JyX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X3dpbl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX3dpbl9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CS8qIGNvbm5lY3QgdG8gbWUgaGVyZQkqLworICBmbG9hdAljcHVfcmF0ZTsJCS8qIGNvdWxkIHdlIG1lYXN1cmUJKi8KKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLworICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHN0YXRpb25fYWRkcl9sZW47ICAgIC8qIHRoZSBsZW5ndGggb2YgdGhlIHN0YXRpb24gYWRkcmVzcyAqLworICBpbnQgICBzdGF0aW9uX2FkZHJbMV07ICAgICAvKiB0aGUgcmVtb3RlJ3Mgc3RhdGlvbiBhZGRyZXNzICovCit9OworCitzdHJ1Y3QgZGxwaV9jbF9ycl9yZXN1bHRzX3N0cnVjdCB7CisgIGludAlieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CWVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CWNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICBjcHVfbWV0aG9kOyAgICAgLyogaG93IHdhcyBDUFUgdXRpbCBtZWFzdXJlZD8gKi8KKyAgaW50ICAgbnVtX2NwdXM7ICAgICAgIC8qIGhvdyBtYW55IENQVXMgd2VyZSB0aGVyZT8gKi8KK307CisKK2V4dGVybiB2b2lkIHNlbmRfZGxwaV9jb19zdHJlYW0oKTsKKworZXh0ZXJuIGludCByZWN2X2RscGlfY29fc3RyZWFtKCk7CisKK2V4dGVybiBpbnQgc2VuZF9kbHBpX2NvX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSk7CisKK2V4dGVybiB2b2lkIHNlbmRfZGxwaV9jbF9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKTsKKworZXh0ZXJuIGludCByZWN2X2RscGlfY2xfc3RyZWFtKCk7CisKK2V4dGVybiBpbnQgc2VuZF9kbHBpX2NsX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSk7CisKK2V4dGVybiBpbnQgcmVjdl9kbHBpX2NsX3JyKCk7CisKK2V4dGVybiBpbnQgcmVjdl9kbHBpX2NvX3JyKCk7CisKK2V4dGVybiB2b2lkIHNjYW5fZGxwaV9hcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10pOwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9vbW5pLmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X29tbmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGIyNTYwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9vbW5pLmMKQEAgLTAsMCArMSw2MTI3IEBACisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpZmRlZiBXQU5UX09NTkkKK2NoYXIgbmV0dGVzdF9vbW5pX2lkW109IlwKK0AoIyluZXR0ZXN0X29tbmkuYyAoYykgQ29weXJpZ2h0IDIwMDggSGV3bGV0dC1QYWNrYXJkIENvLiBWZXJzaW9uIDIuNS4wcHJlIjsKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhU1REQ19IRUFERVJTICYmIEhBVkVfTUVNT1JZX0gKKyMgIGluY2x1ZGUgPG1lbW9yeS5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HU19ICisjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfSU5UVFlQRVNfSAorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERJTlRfSAorIyAgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2lmbmRlZiBXSU4zMgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKworI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmZGVmIE5PU1RETElCSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmIC8qIE5PU1RETElCSCAqLworCisjaWZkZWYgV0FOVF9TQ1RQCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjZW5kaWYKKworI2lmbmRlZiBXSU4zMgorI2lmICFkZWZpbmVkKF9fVk1TKQorI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNlbmRpZiAvKiAhZGVmaW5lZChfX1ZNUykgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbHNlIC8qIFdJTjMyICovCisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2RlZmluZSBuZXRwZXJmX3NvY2tsZW5fdCBzb2NrbGVuX3QKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCisvKiB3aGlsZSBpdCBpcyB1bmxpa2VseSB0aGF0IGFueW9uZSBydW5uaW5nIFdpbmRvd3MgMjAwMCBvciBOVCA0IGlzCisgICBnb2luZyB0byBiZSB0cnlpbmcgdG8gY29tcGlsZSB0aGlzLCBpZiB0aGV5IGFyZSB0aGV5IHdpbGwgd2FudCB0bworICAgZGVmaW5lIERPTlRfSVBWNiBpbiB0aGUgc291cmNlcyBmaWxlICovCisjaWZuZGVmIERPTlRfSVBWNgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNkZWZpbmUgc2xlZXAoeCkgU2xlZXAoKHgpKjEwMDApCisKKyNkZWZpbmUgX19mdW5jX18gX19GVU5DVElPTl9fCisjZW5kaWYgLyogV0lOMzIgKi8KKworLyogV2UgZG9uJ3Qgd2FudCB0byB1c2UgYmFyZSBjb25zdGFudHMgaW4gdGhlIHNodXRkb3duKCkgY2FsbC4gIEluIHRoZQorICAgZXh0cmVtZWx5IHVubGlrZWx5IGV2ZW50IHRoYXQgU0hVVF9XUiBpc24ndCBkZWZpbmVkLCB3ZSB3aWxsIGRlZmluZQorICAgaXQgdG8gdGhlIHZhbHVlIHdlIHVzZWQgdG8gYmUgcGFzc2luZyB0byBzaHV0ZG93bigpIGFueXdheS4gIHJhagorICAgMjAwNy0wMi0wOCAqLworI2lmICFkZWZpbmVkKFNIVVRfV1IpCisjZGVmaW5lIFNIVVRfV1IgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSB8fCAhZGVmaW5lZChIQVZFX0dFVE5BTUVJTkZPKQorIyBpbmNsdWRlICJtaXNzaW5nL2dldGFkZHJpbmZvLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIm5ldGxpYi5oIgorI2luY2x1ZGUgIm5ldHNoLmgiCisjaW5jbHVkZSAibmV0dGVzdF9ic2QuaCIKKworI2lmIGRlZmluZWQoV0FOVF9ISVNUT0dSQU0pIHx8IGRlZmluZWQoV0FOVF9ERU1PKSAKKyNpbmNsdWRlICJoaXN0LmgiCisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisjaWZkZWYgSEFWRV9HRVRIUlRJTUUKK3N0YXRpYyBocnRpbWVfdCB0aW1lX29uZTsKK3N0YXRpYyBocnRpbWVfdCB0aW1lX3R3bzsKKyNlbGlmIEhBVkVfR0VUX0hSVAorI2luY2x1ZGUgImhydC5oIgorc3RhdGljIGhydF90IHRpbWVfb25lOworc3RhdGljIGhydF90IHRpbWVfdHdvOworI2VsaWYgZGVmaW5lZChXSU4zMikKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIHRpbWVfb25lOworc3RhdGljIExBUkdFX0lOVEVHRVIgdGltZV90d287CisjZWxzZQorc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVfb25lOworc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWVfdHdvOworI2VuZGlmIC8qIEhBVkVfR0VUSFJUSU1FICovCitzdGF0aWMgSElTVCB0aW1lX2hpc3Q7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworI2lmZGVmIFdBTlRfREVNTworI2lmZGVmIEhBVkVfR0VUSFJUSU1FCitzdGF0aWMgaHJ0aW1lX3QgZGVtb19vbmU7CitzdGF0aWMgaHJ0aW1lX3QgZGVtb190d287CitzdGF0aWMgaHJ0aW1lX3QgKmRlbW9fb25lX3B0ciA9ICZkZW1vX29uZTsKK3N0YXRpYyBocnRpbWVfdCAqZGVtb190d29fcHRyID0gJmRlbW9fdHdvOworc3RhdGljIGhydGltZV90ICp0ZW1wX2RlbW9fcHRyID0gJmRlbW9fb25lOworI2VsaWYgZGVmaW5lZChXSU4zMikKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIGRlbW9fb25lOworc3RhdGljIExBUkdFX0lOVEVHRVIgZGVtb190d287CitzdGF0aWMgTEFSR0VfSU5URUdFUiAqZGVtb19vbmVfcHRyID0gJmRlbW9fb25lOworc3RhdGljIExBUkdFX0lOVEVHRVIgKmRlbW9fdHdvX3B0ciA9ICZkZW1vX3R3bzsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICp0ZW1wX2RlbW9fcHRyID0gJmRlbW9fb25lOworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBkZW1vX29uZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBkZW1vX3R3bzsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCAqZGVtb19vbmVfcHRyID0gJmRlbW9fb25lOworc3RhdGljIHN0cnVjdCB0aW1ldmFsICpkZW1vX3R3b19wdHIgPSAmZGVtb190d287CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgKnRlbXBfZGVtb19wdHIgPSAmZGVtb19vbmU7CisjZW5kaWYgCisKKy8qIGZvciBhIF9TVFJFQU0gdGVzdCwgImEiIHNob3VsZCBiZSBsc3Nfc2l6ZSBhbmQgImIiIHNob3VsZCBiZQorICAgcnNyX3NpemUuIGZvciBhIF9NQUVSVFMgdGVzdCwgImEiIHNob3VsZCBiZSBsc3Jfc2l6ZSBhbmQgImIiIHNob3VsZAorICAgYmUgcnNzX3NpemUuIHJhaiAyMDA1LTA0LTA2ICovCisjZGVmaW5lIERFTU9fU1RSRUFNX1NFVFVQKGEsYikgXAorICAgIGlmICgoZGVtb19tb2RlKSAmJiAoZGVtb191bml0cyA9PSAwKSkgeyBcCisgICAgICAvKiB0YWtlIG91ciBkZWZhdWx0IHZhbHVlIG9mIGRlbW9fdW5pdHMgdG8gYmUgdGhlIGxhcmdlciBvZiBcCisJIHR3aWNlIHRoZSByZW1vdGUncyBTT19SQ1ZCVUYgb3IgdHdpY2Ugb3VyIFNPX1NOREJVRiAqLyBcCisgICAgICBpZiAoYSA+IGIpIHsgXAorCWRlbW9fdW5pdHMgPSAyKmE7IFwKKyAgICAgIH0gXAorICAgICAgZWxzZSB7IFwKKwlkZW1vX3VuaXRzID0gMipiOyBcCisgICAgICB9IFwKKyAgICB9CisKKyNkZWZpbmUgREVNT19JTlRFUlZBTCh1bml0cykgXAorICAgICAgaWYgKGRlbW9fbW9kZSkgeyBcCisJZG91YmxlIGFjdHVhbF9pbnRlcnZhbDsgXAorCXVuaXRzX3RoaXNfdGljayArPSB1bml0czsgXAorCWlmICh1bml0c190aGlzX3RpY2sgPj0gZGVtb191bml0cykgeyBcCisJICAvKiB0aW1lIHRvIHBvc3NpYmx5IHVwZGF0ZSBkZW1vX3VuaXRzIGFuZCBtYXliZSBvdXRwdXQgYW4gXAorCSAgICAgaW50ZXJpbSByZXN1bHQgKi8gXAorCSAgSElTVF90aW1lc3RhbXAoZGVtb190d29fcHRyKTsgXAorCSAgYWN0dWFsX2ludGVydmFsID0gZGVsdGFfbWljcm8oZGVtb19vbmVfcHRyLGRlbW9fdHdvX3B0cik7IFwKKwkgIC8qIHdlIGFsd2F5cyB3YW50IHRvIGZpbmUtdHVuZSBkZW1vX3VuaXRzIGhlcmUgd2hldGhlciB3ZSBcCisJICAgICBlbWl0IGFuIGludGVyaW0gcmVzdWx0IG9yIG5vdC4gIGlmIHdlIGFyZSBzaG9ydCwgdGhpcyBcCisJICAgICB3aWxsIGxlbmd0aGVuIGRlbW9fdW5pdHMuICBpZiB3ZSBhcmUgbG9uZywgdGhpcyB3aWxsIFwKKwkgICAgIHNob3J0ZW4gaXQgKi8gXAorCSAgZGVtb191bml0cyA9IGRlbW9fdW5pdHMgKiAoZGVtb19pbnRlcnZhbCAvIGFjdHVhbF9pbnRlcnZhbCk7IFwKKwkgIGlmIChhY3R1YWxfaW50ZXJ2YWwgPj0gZGVtb19pbnRlcnZhbCkgeyBcCisJICAgIC8qIHRpbWUgdG8gZW1pdCBhbiBpbnRlcmltIHJlc3VsdCAqLyBcCisJICAgIGZwcmludGYod2hlcmUsIFwKKwkJICAgICJJbnRlcmltIHJlc3VsdDogJTcuMmYgJXMvcyBvdmVyICUuMmYgc2Vjb25kc1xuIiwgXAorCQkgICAgY2FsY190aHJ1cHV0X2ludGVydmFsKHVuaXRzX3RoaXNfdGljaywgXAorCQkJCQkgIGFjdHVhbF9pbnRlcnZhbC8xMDAwMDAwLjApLCBcCisJCSAgICBmb3JtYXRfdW5pdHMoKSwgXAorCQkgICAgYWN0dWFsX2ludGVydmFsLzEwMDAwMDAuMCk7IFwKKwkgICAgdW5pdHNfdGhpc190aWNrID0gMC4wOyBcCisJICAgIC8qIG5vdyBnZXQgYSBuZXcgc3RhcnRpbmcgdGltZXN0YW1wLiAgd2UgY291bGQgYmUgY2xldmVyIFwKKwkgICAgICAgYW5kIHN3YXAgcG9pbnRlcnMgLSB0aGUgbWF0aCB3ZSBkbyBwcm9iYWJseSBkb2VzIG5vdCBcCisJICAgICAgIHRha2UgYWxsIHRoYXQgbG9uZywgYnV0IGZvciBub3cgdGhpcyB3aWxsIHN1ZmZpY2UgKi8gXAorCSAgICB0ZW1wX2RlbW9fcHRyID0gZGVtb19vbmVfcHRyOyBcCisJICAgIGRlbW9fb25lX3B0ciA9IGRlbW9fdHdvX3B0cjsgXAorCSAgICBkZW1vX3R3b19wdHIgPSB0ZW1wX2RlbW9fcHRyOyBcCisJICB9IFwKKwl9IFwKKyAgICAgIH0KKworI2RlZmluZSBERU1PX1NUUkVBTV9JTlRFUlZBTCh1bml0cykgREVNT19JTlRFUlZBTCh1bml0cykKKworI2RlZmluZSBERU1PX1JSX1NFVFVQKGEpIFwKKyAgICBpZiAoKGRlbW9fbW9kZSkgJiYgKGRlbW9fdW5pdHMgPT0gMCkpIHsgXAorICAgICAgLyogdGFrZSB3aGF0ZXZlciB3ZSBhcmUgZ2l2ZW4gKi8gXAorCWRlbW9fdW5pdHMgPSBhOyBcCisgICAgfQorCisjZGVmaW5lIERFTU9fUlJfSU5URVJWQUwodW5pdHMpIERFTU9fSU5URVJWQUwodW5pdHMpCisKKyNlbmRpZiAKKworI2lmZGVmIFdBTlRfSU5URVJWQUxTCitpbnQgaW50ZXJ2YWxfY291bnQ7CisjaWZuZGVmIFdBTlRfU1BJTgorc2lnc2V0X3Qgc2lnbmFsX3NldDsKKyNkZWZpbmUgSU5URVJWQUxTX0lOSVQoKSBcCisgICAgaWYgKGludGVydmFsX2J1cnN0KSB7IFwKKyAgICAgIC8qIHplcm8gbWVhbnMgdGhhdCB3ZSBuZXZlciBwYXVzZSwgc28gd2UgbmV2ZXIgc2hvdWxkIG5lZWQgdGhlIFwKKyAgICAgICAgIGludGVydmFsIHRpbWVyLiB3ZSB1c2VkIHRvIHVzZSBpdCBmb3IgZGVtbyBtb2RlLCBidXQgd2UgZGVhbCBcCisJIHdpdGggdGhhdCB3aXRoIGEgdmFyaWFudCBvbiB3YXRjaGluZyB0aGUgY2xvY2sgcmF0aGVyIHRoYW4gXAorCSB3YWl0aW5nIGZvciBhIHRpbWVyLiByYWogMjAwNi0wMi0wNiAqLyBcCisgICAgICBzdGFydF9pdGltZXIoaW50ZXJ2YWxfd2F0ZSk7IFwKKyAgICB9IFwKKyAgICBpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OyBcCisgICAgLyogZ2V0IHRoZSBzaWduYWwgc2V0IGZvciB0aGUgY2FsbCB0byBzaWdzdXNwZW5kICovIFwKKyAgICBpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCAoc2lnc2V0X3QgKilOVUxMLCAmc2lnbmFsX3NldCkgIT0gMCkgeyBcCisgICAgICBmcHJpbnRmKHdoZXJlLCBcCisJICAgICAgIiVzOiB1bmFibGUgdG8gZ2V0IHNpZ21hc2sgZXJybm8gJWRcbiIsIFwKKwkgICAgICBfX2Z1bmNfXywgXAorCSAgICAgIGVycm5vKTsgXAorICAgICAgZmZsdXNoKHdoZXJlKTsgXAorICAgICAgZXhpdCgxKTsgXAorICAgIH0KKworI2RlZmluZSBJTlRFUlZBTFNfV0FJVCgpIFwKKyAgICAgIC8qIGluIHRoaXMgY2FzZSwgdGhlIGludGVydmFsIGNvdW50IGlzIHRoZSBjb3VudC1kb3duIGNvdXRlciBcCisJIHRvIGRlY2lkZSB0byBzbGVlcCBmb3IgYSBsaXR0bGUgYml0ICovIFwKKyAgICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpICYmICgtLWludGVydmFsX2NvdW50ID09IDApKSB7IFwKKwkvKiBjYWxsIHNpZ3N1c3BlbmQgYW5kIHdhaXQgZm9yIHRoZSBpbnRlcnZhbCB0aW1lciB0byBnZXQgdXMgXAorCSAgIG91dCAqLyBcCisJaWYgKGRlYnVnID4gMSkgeyBcCisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzdXNwZW5kXG4iKTsgXAorCSAgZmZsdXNoKHdoZXJlKTsgXAorCX0gXAorCWlmIChzaWdzdXNwZW5kKCZzaWduYWxfc2V0KSA9PSBFRkFVTFQpIHsgXAorCSAgZnByaW50Zih3aGVyZSwgXAorCQkgICIlczogZmF1bHQgd2l0aCBzaWdzdXNwZW5kLlxuIiwgXAorICAgICAgICAgICAgICAgICAgX19mdW5jX18pOyBcCisJICBmZmx1c2god2hlcmUpOyBcCisJICBleGl0KDEpOyBcCisJfSBcCisJaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsgXAorICAgICAgfQorI2Vsc2UKKy8qIGZpcnN0IG91dCB0aW1lc3RhbXAgKi8KKyNpZmRlZiBIQVZFX0dFVEhSVElNRQorc3RhdGljIGhydGltZV90IGludHZsX29uZTsKK3N0YXRpYyBocnRpbWVfdCBpbnR2bF90d287CitzdGF0aWMgaHJ0aW1lX3QgKmludHZsX29uZV9wdHIgPSAmaW50dmxfb25lOworc3RhdGljIGhydGltZV90ICppbnR2bF90d29fcHRyID0gJmludHZsX3R3bzsKK3N0YXRpYyBocnRpbWVfdCAqdGVtcF9pbnR2bF9wdHIgPSAmaW50dmxfb25lOworI2VsaWYgZGVmaW5lZChXSU4zMikKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIGludHZsX29uZTsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSIGludHZsX3R3bzsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICppbnR2bF9vbmVfcHRyID0gJmludHZsX29uZTsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICppbnR2bF90d29fcHRyID0gJmludHZsX3R3bzsKK3N0YXRpYyBMQVJHRV9JTlRFR0VSICp0ZW1wX2ludHZsX3B0ciA9ICZpbnR2bF9vbmU7CisjZWxzZQorc3RhdGljIHN0cnVjdCB0aW1ldmFsIGludHZsX29uZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBpbnR2bF90d287CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgKmludHZsX29uZV9wdHIgPSAmaW50dmxfb25lOworc3RhdGljIHN0cnVjdCB0aW1ldmFsICppbnR2bF90d29fcHRyID0gJmludHZsX3R3bzsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCAqdGVtcF9pbnR2bF9wdHIgPSAmaW50dmxfb25lOworI2VuZGlmCisKKyNkZWZpbmUgSU5URVJWQUxTX0lOSVQoKSBcCisgICAgICBpZiAoaW50ZXJ2YWxfYnVyc3QpIHsgXAorCUhJU1RfdGltZXN0YW1wKGludHZsX29uZV9wdHIpOyBcCisgICAgICB9IFwKKyAgICAgIGludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7IFwKKworI2RlZmluZSBJTlRFUlZBTFNfV0FJVCgpIFwKKyAgICAgIC8qIGluIHRoaXMgY2FzZSwgdGhlIGludGVydmFsIGNvdW50IGlzIHRoZSBjb3VudC1kb3duIGNvdXRlciBcCisJIHRvIGRlY2lkZSB0byBzbGVlcCBmb3IgYSBsaXR0bGUgYml0ICovIFwKKyAgICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpICYmICgtLWludGVydmFsX2NvdW50ID09IDApKSB7IFwKKwkvKiBjYWxsIHNpZ3N1c3BlbmQgYW5kIHdhaXQgZm9yIHRoZSBpbnRlcnZhbCB0aW1lciB0byBnZXQgdXMgXAorCSAgIG91dCAqLyBcCisJaWYgKGRlYnVnID4gMSkgeyBcCisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzcGluIHN1c3BlbmRcbiIpOyBcCisJICBmZmx1c2god2hlcmUpOyBcCisJfSBcCisgICAgICAgIEhJU1RfdGltZXN0YW1wKGludHZsX3R3b19wdHIpOyBcCisgICAgICAgIHdoaWxlKGRlbHRhX21pY3JvKGludHZsX29uZV9wdHIsaW50dmxfdHdvX3B0cikgPCBpbnRlcnZhbF91c2VjcykgeyBcCisJICBISVNUX3RpbWVzdGFtcChpbnR2bF90d29fcHRyKTsgXAorCX0gXAorCXRlbXBfaW50dmxfcHRyID0gaW50dmxfb25lX3B0cjsgXAorCWludHZsX29uZV9wdHIgPSBpbnR2bF90d29fcHRyOyBcCisJaW50dmxfdHdvX3B0ciA9IHRlbXBfaW50dmxfcHRyOyBcCisJaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsgXAorICAgICAgfQorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBORVRQRVJGX1dBSVRBTEwgMHgxCisjZGVmaW5lIE5FVFBFUkZfWE1JVCAweDIKKyNkZWZpbmUgTkVUUEVSRl9SRUNWIDB4NAorCisjZGVmaW5lIE5FVFBFUkZfSVNfUlIoeCkgKCgoeCAmIE5FVFBFUkZfWE1JVCkgJiYgKHggJiBORVRQRVJGX1JFQ1YpKSB8fCBcCisJCQkgICghKCh4ICYgTkVUUEVSRl9YTUlUKSB8fCAoeCAmIE5FVFBFUkZfUkVDVikpKSkKKworI2RlZmluZSBORVRQRVJGX1JFQ1ZfT05MWSh4KSAoKHggJiBORVRQRVJGX1JFQ1YpICYmICEoeCAmIE5FVFBFUkZfWE1JVCkpCisKKyNkZWZpbmUgTkVUUEVSRl9YTUlUX09OTFkoeCkgKCh4ICYgTkVUUEVSRl9YTUlUKSAmJiAhKHggJiBORVRQRVJGX1JFQ1YpKQorCisjZGVmaW5lIE5FVFBFUkZfQ0MoeCkgKCEoeCAmIE5FVFBFUkZfWE1JVCkgJiYgISh4ICYgTkVUUEVSRl9SRUNWKSkKKworZXh0ZXJuIHZvaWQgZ2V0X3V1aWRfc3RyaW5nKGNoYXIgKnN0cmluZywgc2l6ZV90IHNpemUpOworCisvKiBhIGJvYXRsb2FkIG9mIGdsb2JhbHMgd2hpbGUgSSBzZXR0bGUgdGhpbmdzIG91dCAqLworY2hhciAqY3N2X3NlbGVjdGlvbl9maWxlID0gTlVMTDsKK2NoYXIgKmh1bWFuX3NlbGVjdGlvbl9maWxlID0gTlVMTDsKK2NoYXIgKmtleXdvcmRfc2VsZWN0aW9uX2ZpbGUgPSBOVUxMOworCitjaGFyIHRlc3RfdXVpZFszOF07CisKK2RvdWJsZSByZXN1bHRfY29uZmlkX3BjdCA9IC0xLjA7Citkb3VibGUgbG9jX2NwdV9jb25maWRfcGN0ID0gLTEuMDsKK2RvdWJsZSByZW1fY3B1X2NvbmZpZF9wY3QgPSAtMS4wOworZG91YmxlIGludGVydmFsX3BjdCA9IC0xLjA7CisKK2ludCBwcm90b2NvbDsKK2ludCBkaXJlY3Rpb247CitpbnQgcmVtb3RlX3NlbmRfc2l6ZSA9IC0xOworaW50IHJlbW90ZV9yZWN2X3NpemUgPSAtMTsKK2ludCByZW1vdGVfc2VuZF9zaXplX3JlcSA9IC0xOworaW50IHJlbW90ZV9yZWN2X3NpemVfcmVxID0gLTE7CitpbnQgcmVtb3RlX3VzZV9zZW5kZmlsZTsKKyNpZiAwCitpbnQgcmVtb3RlX3NlbmRfZGlydHlfY291bnQ7CitpbnQgcmVtb3RlX3JlY3ZfZGlydHlfY291bnQ7CitpbnQgcmVtb3RlX3JlY3ZfY2xlYW5fY291bnQ7CisjZW5kaWYKK2V4dGVybiBpbnQgbG9jX2RpcnR5X2NvdW50OworZXh0ZXJuIGludCBsb2NfY2xlYW5fY291bnQ7CitleHRlcm4gaW50IHJlbV9kaXJ0eV9jb3VudDsKK2V4dGVybiBpbnQgcmVtX2NsZWFuX2NvdW50OworaW50IHJlbW90ZV9jaGVja3N1bV9vZmY7CitpbnQgY29ubmVjdGlvbl90ZXN0OworaW50IG5lZWRfdG9fY29ubmVjdDsKK2ludCBuZWVkX2Nvbm5lY3Rpb247CitpbnQgYnl0ZXNfdG9fc2VuZDsKK2RvdWJsZSBieXRlc19wZXJfc2VuZDsKK2ludCBmYWlsZWRfc2VuZHM7CitpbnQgYnl0ZXNfdG9fcmVjdjsKK2RvdWJsZSBieXRlc19wZXJfcmVjdjsKK2ludCBudWxsX21lc3NhZ2Vfb2sgPSAwOworaW50IGNzdiA9IDA7CitpbnQga2V5d29yZCA9IDA7Cit1aW50NjRfdCAgICAgIHRyYW5zX2NvbXBsZXRlZCA9IDA7Cit1aW50NjRfdCAgICAgIHVuaXRzX3JlbWFpbmluZzsKK3VpbnQ2NF90ICAgICAgYnl0ZXNfc2VudCA9IDA7Cit1aW50NjRfdCAgICAgIGJ5dGVzX3JlY2VpdmVkID0gMDsKK3VpbnQ2NF90ICAgICAgbG9jYWxfc2VuZF9jYWxscyA9IDA7Cit1aW50NjRfdCAgICAgIGxvY2FsX3JlY2VpdmVfY2FsbHMgPSAwOwordWludDY0X3QgICAgICByZW1vdGVfYnl0ZXNfc2VudDsKK3VpbnQ2NF90ICAgICAgcmVtb3RlX2J5dGVzX3JlY2VpdmVkOwordWludDY0X3QgICAgICByZW1vdGVfc2VuZF9jYWxsczsKK3VpbnQ2NF90ICAgICAgcmVtb3RlX3JlY2VpdmVfY2FsbHM7Citkb3VibGUgICAgICAgIGJ5dGVzX3hmZXJkOworZG91YmxlICAgICAgICByZW1vdGVfYnl0ZXNfeGZlcmQ7Citkb3VibGUgICAgICAgIHJlbW90ZV9ieXRlc19wZXJfcmVjdjsKK2RvdWJsZSAgICAgICAgcmVtb3RlX2J5dGVzX3Blcl9zZW5kOworZmxvYXQgICAgICAgICBlbGFwc2VkX3RpbWU7CitmbG9hdCAgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbjsKK2Zsb2F0CSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kOworZmxvYXQgICAgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uOworZmxvYXQJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworZG91YmxlCSAgICAgIHRocnVwdXQ7Citkb3VibGUgICAgICAgIGxvY2FsX3NlbmRfdGhydXB1dDsKK2RvdWJsZSAgICAgICAgbG9jYWxfcmVjdl90aHJ1cHV0OworZG91YmxlICAgICAgICByZW1vdGVfc2VuZF90aHJ1cHV0OworZG91YmxlICAgICAgICByZW1vdGVfcmVjdl90aHJ1cHV0OworCisvKiBrbHVkZ2VzIGZvciBvbW5pIG91dHB1dCAqLworZG91YmxlICAgICAgZWxhcHNlZF90aW1lX2RvdWJsZTsKK2RvdWJsZSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbl9kb3VibGU7Citkb3VibGUgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZF9kb3VibGU7Citkb3VibGUgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uX2RvdWJsZTsKK2RvdWJsZSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZF9kb3VibGU7Citkb3VibGUgICAgICB0cmFuc2FjdGlvbl9yYXRlID0gMS4wOworZG91YmxlICAgICAgcnR0X2xhdGVuY3kgPSAtMS4wOworaW50MzJfdCAgICAgdHJhbnNwb3J0X21zcyA9IC0yOworY2hhciAgICAgICAgKmxvY2FsX2ludGVyZmFjZV9uYW1lPU5VTEw7CitjaGFyICAgICAgICAqcmVtb3RlX2ludGVyZmFjZV9uYW1lPU5VTEw7CitjaGFyICAgICAgICBsb2NhbF9kcml2ZXJfbmFtZVszMl09IiI7CitjaGFyICAgICAgICBsb2NhbF9kcml2ZXJfdmVyc2lvblszMl09IiI7CitjaGFyICAgICAgICBsb2NhbF9kcml2ZXJfZmlybXdhcmVbMzJdPSIiOworY2hhciAgICAgICAgbG9jYWxfZHJpdmVyX2J1c1szMl09IiI7CitjaGFyICAgICAgICByZW1vdGVfZHJpdmVyX25hbWVbMzJdPSIiOworY2hhciAgICAgICAgcmVtb3RlX2RyaXZlcl92ZXJzaW9uWzMyXT0iIjsKK2NoYXIgICAgICAgIHJlbW90ZV9kcml2ZXJfZmlybXdhcmVbMzJdPSIiOworY2hhciAgICAgICAgcmVtb3RlX2RyaXZlcl9idXNbMzJdPSIiOworY2hhciAgICAgICAgKmxvY2FsX2ludGVyZmFjZV9zbG90PU5VTEw7CitjaGFyICAgICAgICAqcmVtb3RlX2ludGVyZmFjZV9zbG90PU5VTEw7CitpbnQgICAgICAgICByZW1vdGVfaW50ZXJmYWNlX3ZlbmRvcjsKK2ludCAgICAgICAgIHJlbW90ZV9pbnRlcmZhY2VfZGV2aWNlOworaW50ICAgICAgICAgcmVtb3RlX2ludGVyZmFjZV9zdWJ2ZW5kb3I7CitpbnQgICAgICAgICByZW1vdGVfaW50ZXJmYWNlX3N1YmRldmljZTsKK2ludCAgICAgICAgIGxvY2FsX2ludGVyZmFjZV92ZW5kb3I7CitpbnQgICAgICAgICBsb2NhbF9pbnRlcmZhY2VfZGV2aWNlOworaW50ICAgICAgICAgbG9jYWxfaW50ZXJmYWNlX3N1YnZlbmRvcjsKK2ludCAgICAgICAgIGxvY2FsX2ludGVyZmFjZV9zdWJkZXZpY2U7CitjaGFyICAgICAgICAqbG9jYWxfc3lzdGVtX21vZGVsOworY2hhciAgICAgICAgKmxvY2FsX2NwdV9tb2RlbDsKK2ludCAgICAgICAgIGxvY2FsX2NwdV9mcmVxdWVuY3k7CitjaGFyICAgICAgICAqcmVtb3RlX3N5c3RlbV9tb2RlbDsKK2NoYXIgICAgICAgICpyZW1vdGVfY3B1X21vZGVsOworaW50ICAgICAgICAgcmVtb3RlX2NwdV9mcmVxdWVuY3k7CisKK2ludCAgICAgICAgIGxvY2FsX3NlY3VyaXR5X3R5cGVfaWQ7CitpbnQgICAgICAgICBsb2NhbF9zZWN1cml0eV9lbmFibGVkX251bTsKK2NoYXIgICAgICAgICpsb2NhbF9zZWN1cml0eV90eXBlOworY2hhciAgICAgICAgKmxvY2FsX3NlY3VyaXR5X2VuYWJsZWQ7CitjaGFyICAgICAgICAqbG9jYWxfc2VjdXJpdHlfc3BlY2lmaWM7CitpbnQgICAgICAgICByZW1vdGVfc2VjdXJpdHlfdHlwZV9pZDsKK2ludCAgICAgICAgIHJlbW90ZV9zZWN1cml0eV9lbmFibGVkX251bTsKK2NoYXIgICAgICAgICpyZW1vdGVfc2VjdXJpdHlfZW5hYmxlZDsKK2NoYXIgICAgICAgICpyZW1vdGVfc2VjdXJpdHlfdHlwZTsKK2NoYXIgICAgICAgICpyZW1vdGVfc2VjdXJpdHlfc3BlY2lmaWM7CisKK2ludCBwcmludGluZ19pbml0aWFsaXplZCA9IDA7CisKK2NoYXIgKnNkX3N0cjsKK2NoYXIgKnRocnVwdXRfZm9ybWF0X3N0cjsKKworY2hhciAqc29ja2V0X3R5cGVfc3RyOworY2hhciAqcHJvdG9jb2xfc3RyOworY2hhciAqZGlyZWN0aW9uX3N0cjsKKworZXh0ZXJuIGludCBmaXJzdF9idXJzdF9zaXplOworCisjaWYgZGVmaW5lZChIQVZFX1NFTkRGSUxFKSAmJiAoZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fc3VuKSkKKyNpbmNsdWRlIDxzeXMvc2VuZGZpbGUuaD4KKyNlbmRpZiAvKiBIQVZFX1NFTkRGSUxFICYmIChfX2xpbnV4IHx8IF9fc3VuKSAqLworCitzdGF0aWMgaW50IGNvbmZpZGVuY2VfaXRlcmF0aW9uOworCitzdGF0aWMgIGludCBsb2NhbF9jcHVfbWV0aG9kOworc3RhdGljICBpbnQgcmVtb3RlX2NwdV9tZXRob2Q7CisKKy8qIHRoZXNlIHdpbGwgY29udHJvbCB0aGUgd2lkdGggb2YgcG9ydCBudW1iZXJzIHdlIHRyeSB0byB1c2UgaW4gdGhlICovCisvKiBUQ1BfQ1JSIGFuZC9vciBUQ1BfVFJSIHRlc3RzLiByYWogMy85NSAqLworc3RhdGljIGludCBjbGllbnRfcG9ydF9taW4gPSA1MDAwOworc3RhdGljIGludCBjbGllbnRfcG9ydF9tYXggPSA2NTUzNTsKKworIC8qIGRpZmZlcmVudCBvcHRpb25zIGZvciB0aGUgc29ja2V0cwkJCQkqLworCitpbnQKKyAgbG9jX25vZGVsYXksCQkvKiBkb24ndC9kbyB1c2UgTk9ERUxBWQlsb2NhbGx5CQkqLworICByZW1fbm9kZWxheSwJCS8qIGRvbid0L2RvIHVzZSBOT0RFTEFZIHJlbW90ZWx5CSovCisgIGxvY19zbmRhdm9pZCwJCS8qIGF2b2lkIHNlbmQgY29waWVzIGxvY2FsbHkJCSovCisgIGxvY19yY3Zhdm9pZCwJCS8qIGF2b2lkIHJlY3YgY29waWVzIGxvY2FsbHkJCSovCisgIHJlbV9zbmRhdm9pZCwJCS8qIGF2b2lkIHNlbmQgY29waWVzIHJlbW90ZWx5CQkqLworICByZW1fcmN2YXZvaWQ7IAkvKiBhdm9pZCByZWN2X2NvcGllcyByZW1vdGVseQkJKi8KKworZXh0ZXJuIGludAorICBsb2NfdGNwY29yaywKKyAgcmVtX3RjcGNvcmssCisgIGxvY2FsX2Nvbm5lY3RlZCwKKyAgcmVtb3RlX2Nvbm5lY3RlZDsKKworLyogeW91IHNob3VsZCBhZGQgdG8gdGhpcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBzaG91bGQgYXBwZWFyIGluCisgICB0aGUgZGVmYXVsdCBjc3YgKGV2ZXJ5dGhpbmcpIG91dHB1dCAqLworCitlbnVtIG5ldHBlcmZfb3V0cHV0X25hbWUgeworICBPVVRQVVRfTk9ORSwKKyAgU09DS0VUX1RZUEUsCisgIFBST1RPQ09MLAorICBESVJFQ1RJT04sCisgIEVMQVBTRURfVElNRSwKKyAgVEhST1VHSFBVVCwKKyAgVEhST1VHSFBVVF9VTklUUywKKyAgTFNTX1NJWkVfUkVRLAorICBMU1NfU0laRSwKKyAgTFNTX1NJWkVfRU5ELAorICBMU1JfU0laRV9SRVEsCisgIExTUl9TSVpFLAorICBMU1JfU0laRV9FTkQsCisgIFJTU19TSVpFX1JFUSwKKyAgUlNTX1NJWkUsCisgIFJTU19TSVpFX0VORCwKKyAgUlNSX1NJWkVfUkVRLAorICBSU1JfU0laRSwKKyAgUlNSX1NJWkVfRU5ELAorICBMT0NBTF9TRU5EX1NJWkUsCisgIExPQ0FMX1JFQ1ZfU0laRSwKKyAgUkVNT1RFX1NFTkRfU0laRSwKKyAgUkVNT1RFX1JFQ1ZfU0laRSwKKyAgUkVRVUVTVF9TSVpFLAorICBSRVNQT05TRV9TSVpFLAorICBMT0NBTF9DUFVfVVRJTCwKKyAgTE9DQUxfQ1BVX01FVEhPRCwKKyAgTE9DQUxfU0QsCisgIFJFTU9URV9DUFVfVVRJTCwKKyAgUkVNT1RFX0NQVV9NRVRIT0QsCisgIFJFTU9URV9TRCwKKyAgU0RfVU5JVFMsCisgIENPTkZJREVOQ0VfTEVWRUwsCisgIENPTkZJREVOQ0VfSU5URVJWQUwsCisgIENPTkZJREVOQ0VfSVRFUkFUSU9OLAorICBUSFJPVUdIUFVUX0NPTkZJRCwKKyAgTE9DQUxfQ1BVX0NPTkZJRCwKKyAgUkVNT1RFX0NQVV9DT05GSUQsCisgIFRSQU5TQUNUSU9OX1JBVEUsCisgIFJUX0xBVEVOQ1ksCisgIEJVUlNUX1NJWkUsCisgIFRSQU5TUE9SVF9NU1MsCisgIExPQ0FMX1NFTkRfVEhST1VHSFBVVCwKKyAgTE9DQUxfUkVDVl9USFJPVUdIUFVULAorICBSRU1PVEVfU0VORF9USFJPVUdIUFVULAorICBSRU1PVEVfUkVDVl9USFJPVUdIUFVULAorICBMT0NBTF9DUFVfQklORCwKKyAgTE9DQUxfQ1BVX0NPVU5ULAorICBMT0NBTF9DUFVfUEVBS19VVElMLAorICBMT0NBTF9DUFVfUEVBS19JRCwKKyAgTE9DQUxfQ1BVX01PREVMLAorICBMT0NBTF9DUFVfRlJFUVVFTkNZLAorICBSRU1PVEVfQ1BVX0JJTkQsCisgIFJFTU9URV9DUFVfQ09VTlQsCisgIFJFTU9URV9DUFVfUEVBS19VVElMLAorICBSRU1PVEVfQ1BVX1BFQUtfSUQsCisgIFJFTU9URV9DUFVfTU9ERUwsCisgIFJFTU9URV9DUFVfRlJFUVVFTkNZLAorICBTT1VSQ0VfUE9SVCwKKyAgU09VUkNFX0FERFIsCisgIFNPVVJDRV9GQU1JTFksCisgIERFU1RfUE9SVCwKKyAgREVTVF9BRERSLAorICBERVNUX0ZBTUlMWSwKKyAgTE9DQUxfU0VORF9DQUxMUywKKyAgTE9DQUxfUkVDVl9DQUxMUywKKyAgTE9DQUxfQllURVNfUEVSX1JFQ1YsCisgIExPQ0FMX0JZVEVTX1BFUl9TRU5ELAorICBMT0NBTF9CWVRFU19TRU5ULAorICBMT0NBTF9CWVRFU19SRUNWRCwKKyAgTE9DQUxfQllURVNfWEZFUkQsCisgIExPQ0FMX1NFTkRfT0ZGU0VULAorICBMT0NBTF9SRUNWX09GRlNFVCwKKyAgTE9DQUxfU0VORF9BTElHTiwKKyAgTE9DQUxfUkVDVl9BTElHTiwKKyAgTE9DQUxfU0VORF9XSURUSCwKKyAgTE9DQUxfUkVDVl9XSURUSCwKKyAgTE9DQUxfU0VORF9ESVJUWV9DT1VOVCwKKyAgTE9DQUxfUkVDVl9ESVJUWV9DT1VOVCwKKyAgTE9DQUxfUkVDVl9DTEVBTl9DT1VOVCwKKyAgTE9DQUxfTk9ERUxBWSwKKyAgTE9DQUxfQ09SSywKKyAgUkVNT1RFX1NFTkRfQ0FMTFMsCisgIFJFTU9URV9SRUNWX0NBTExTLAorICBSRU1PVEVfQllURVNfUEVSX1JFQ1YsCisgIFJFTU9URV9CWVRFU19QRVJfU0VORCwKKyAgUkVNT1RFX0JZVEVTX1NFTlQsCisgIFJFTU9URV9CWVRFU19SRUNWRCwKKyAgUkVNT1RFX0JZVEVTX1hGRVJELAorICBSRU1PVEVfU0VORF9PRkZTRVQsCisgIFJFTU9URV9SRUNWX09GRlNFVCwKKyAgUkVNT1RFX1NFTkRfQUxJR04sCisgIFJFTU9URV9SRUNWX0FMSUdOLAorICBSRU1PVEVfU0VORF9XSURUSCwKKyAgUkVNT1RFX1JFQ1ZfV0lEVEgsCisgIFJFTU9URV9TRU5EX0RJUlRZX0NPVU5ULAorICBSRU1PVEVfUkVDVl9ESVJUWV9DT1VOVCwKKyAgUkVNT1RFX1JFQ1ZfQ0xFQU5fQ09VTlQsCisgIFJFTU9URV9OT0RFTEFZLAorICBSRU1PVEVfQ09SSywKKyAgTE9DQUxfU1lTTkFNRSwKKyAgTE9DQUxfU1lTVEVNX01PREVMLAorICBMT0NBTF9SRUxFQVNFLAorICBMT0NBTF9WRVJTSU9OLAorICBMT0NBTF9NQUNISU5FLAorICBSRU1PVEVfU1lTTkFNRSwKKyAgUkVNT1RFX1NZU1RFTV9NT0RFTCwKKyAgUkVNT1RFX1JFTEVBU0UsCisgIFJFTU9URV9WRVJTSU9OLAorICBSRU1PVEVfTUFDSElORSwKKyAgTE9DQUxfSU5URVJGQUNFX05BTUUsCisgIExPQ0FMX0lOVEVSRkFDRV9WRU5ET1IsCisgIExPQ0FMX0lOVEVSRkFDRV9ERVZJQ0UsCisgIExPQ0FMX0lOVEVSRkFDRV9TVUJWRU5ET1IsCisgIExPQ0FMX0lOVEVSRkFDRV9TVUJERVZJQ0UsCisgIExPQ0FMX0RSSVZFUl9OQU1FLAorICBMT0NBTF9EUklWRVJfVkVSU0lPTiwKKyAgTE9DQUxfRFJJVkVSX0ZJUk1XQVJFLAorICBMT0NBTF9EUklWRVJfQlVTLAorICBMT0NBTF9JTlRFUkZBQ0VfU0xPVCwKKyAgUkVNT1RFX0lOVEVSRkFDRV9OQU1FLAorICBSRU1PVEVfSU5URVJGQUNFX1ZFTkRPUiwKKyAgUkVNT1RFX0lOVEVSRkFDRV9ERVZJQ0UsCisgIFJFTU9URV9JTlRFUkZBQ0VfU1VCVkVORE9SLAorICBSRU1PVEVfSU5URVJGQUNFX1NVQkRFVklDRSwKKyAgUkVNT1RFX0RSSVZFUl9OQU1FLAorICBSRU1PVEVfRFJJVkVSX1ZFUlNJT04sCisgIFJFTU9URV9EUklWRVJfRklSTVdBUkUsCisgIFJFTU9URV9EUklWRVJfQlVTLAorICBSRU1PVEVfSU5URVJGQUNFX1NMT1QsCisgIExPQ0FMX0lOVEVSVkFMX1VTRUNTLAorICBMT0NBTF9JTlRFUlZBTF9CVVJTVCwKKyAgUkVNT1RFX0lOVEVSVkFMX1VTRUNTLAorICBSRU1PVEVfSU5URVJWQUxfQlVSU1QsCisgIExPQ0FMX1NFQ1VSSVRZX1RZUEVfSUQsCisgIExPQ0FMX1NFQ1VSSVRZX1RZUEUsCisgIExPQ0FMX1NFQ1VSSVRZX0VOQUJMRURfTlVNLAorICBMT0NBTF9TRUNVUklUWV9FTkFCTEVELAorICBMT0NBTF9TRUNVUklUWV9TUEVDSUZJQywKKyAgUkVNT1RFX1NFQ1VSSVRZX1RZUEVfSUQsCisgIFJFTU9URV9TRUNVUklUWV9UWVBFLAorICBSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF9OVU0sCisgIFJFTU9URV9TRUNVUklUWV9FTkFCTEVELAorICBSRU1PVEVfU0VDVVJJVFlfU1BFQ0lGSUMsCisgIFJFU1VMVF9CUkFORCwKKyAgVVVJRCwKKyAgQ09NTUFORF9MSU5FLAorICBPVVRQVVRfRU5ELAorICBORVRQRVJGX09VVFBVVF9NQVgKK307CisKK3R5cGVkZWYgc3RydWN0IG5ldHBlcmZfb3V0cHV0X2VsdCB7CisgIGVudW0gbmV0cGVyZl9vdXRwdXRfbmFtZSBvdXRwdXRfbmFtZTsgIC8qIGJlbHQgYW5kIHN1c3BlbmRlcnMgKi8KKyAgaW50IG1heF9saW5lX2xlbjsgLyogbGVuZ3RoIG9mIHRoZSBsb25nZXN0IG9mIHRoZSAibGluZXMiICovCisgIGludCB0b3RfbGluZV9sZW47IC8qIHRvdGFsIGxlbmd0aCBvZiBhbGwgbGluZXMsIGluY2x1ZGluZyBzcGFjZXMgKi8KKyAgY2hhciAqbGluZVs0XTsKKyAgY2hhciAqYnJpZWY7ICAgICAgICAgIC8qIHRoZSBicmllZiBuYW1lIG9mIHRoZSB2YWx1ZSAqLworICBjaGFyICpmb3JtYXQ7ICAgICAgICAgLyogZm9ybWF0IHRvIGFwcGx5IHRvIHZhbHVlICovCisgIHZvaWQgKmRpc3BsYXlfdmFsdWU7ICAvKiB3aGVyZSB0byBmaW5kIHRoZSB2YWx1ZSAqLworfSBuZXRwZXJmX291dHB1dF9lbHRfdDsKKworbmV0cGVyZl9vdXRwdXRfZWx0X3QgbmV0cGVyZl9vdXRwdXRfc291cmNlW05FVFBFUkZfT1VUUFVUX01BWF07CisKKy8qIHRoZSBsaXN0IG9mIHRoaW5ncyB3ZSB3aWxsIGVtaXQgZm9yIENTViBvdXRwdXQuICBJIHN1cHBvc2Ugd2UgY291bGQKKyAgIGF0IHNvbWUgcG9pbnQgdHJ5IHRvIG1ha2UgdGhpcyBhIHNwZWNpYWwgY2FzZSBvZiBvdXRwdXRfaHVtYW5fbGlzdCwKKyAgIG9yIGF0IGxlYXN0IHVzZSBzb21lIG9mIHRoYXQgc3BhY2UuLi4gYnV0IGZvciBub3cgd2Ugd29uJ3Qgd29ycnkKKyAgIGFib3V0IGl0LiAgdGhhdCBjYW4gY29tZSBhZnRlciB0aGluZ3MgYXJlIGFjdHVhbGx5IHdvcmtpbmcgOikgcmFqCisgICAyMDA4LTAxLTIzICAqLworZW51bSBuZXRwZXJmX291dHB1dF9uYW1lIG91dHB1dF9jc3ZfbGlzdFtORVRQRVJGX09VVFBVVF9NQVhdOworCisvKiB0aGUgbGlzdCBvZiB0aGluZ3Mgd2Ugd2lsbCBlbWl0IGZvciAiaHVtYW4iIG91dHB1dC4gdXAgdG8KKyAgIE5FVFBFUkZfTUFYX0JMT0NLUyBvZiBvdXRwdXQgKGdyb3VwcyBvZiBsaW5lcykgZWFjaCBvdXQgdG8KKyAgIE5FVFBFUkZfT1VUUFVUX01BWCBlbnRyaWVzLiB0aGF0IHNob3VsZCBtb3JlIHRoYW4gY292ZXIgaXQgKi8KKworI2RlZmluZSBORVRQRVJGX01BWF9CTE9DS1MgNAorZW51bSBuZXRwZXJmX291dHB1dF9uYW1lIG91dHB1dF9odW1hbl9saXN0W05FVFBFUkZfTUFYX0JMT0NLU11bTkVUUEVSRl9PVVRQVVRfTUFYXTsKKworY2hhciAqZGlyZWN0aW9uX3RvX3N0cihpbnQgZGlyZWN0aW9uKSB7CisgIGlmIChORVRQRVJGX1JFQ1ZfT05MWShkaXJlY3Rpb24pKSByZXR1cm4gIlJlY2VpdmUiOworICBpZiAoTkVUUEVSRl9YTUlUX09OTFkoZGlyZWN0aW9uKSkgcmV0dXJuICJTZW5kIjsKKyAgaWYgKE5FVFBFUkZfQ0MoZGlyZWN0aW9uKSkgcmV0dXJuICJDb25uZWN0aW9uIjsKKyAgZWxzZSByZXR1cm4gIlNlbmR8UmVjdiI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydAorZ2V0X3BvcnRfbnVtYmVyKHN0cnVjdCBhZGRyaW5mbyAqcmVzKSAKK3sKKyAgc3dpdGNoKHJlcy0+YWlfZmFtaWx5KSB7CisgIGNhc2UgQUZfSU5FVDogeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqZm9vID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJlcy0+YWlfYWRkcjsKKyAgICByZXR1cm4obnRvaHMoZm9vLT5zaW5fcG9ydCkpOworICAgIGJyZWFrOworICB9CisjaWYgZGVmaW5lZChBRl9JTkVUNikKKyAgY2FzZSBBRl9JTkVUNjogeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmZvbyA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVzLT5haV9hZGRyOworICAgIHJldHVybihudG9ocyhmb28tPnNpbjZfcG9ydCkpOworICAgIGJyZWFrOworICB9CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiVW5leHBlY3RlZCBBZGRyZXNzIEZhbWlseSAldVxuIixyZXMtPmFpX2ZhbWlseSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KC0xKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorZXh0cmFjdF9pbmV0X2FkZHJlc3NfYW5kX3BvcnQoc3RydWN0IGFkZHJpbmZvICpyZXMsIHZvaWQgKmFkZHIsIGludCBsZW4sIGludCAqcG9ydCkKK3sKKyBzd2l0Y2gocmVzLT5haV9mYW1pbHkpIHsKKyAgY2FzZSBBRl9JTkVUOiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luICpmb28gPSAoc3RydWN0IHNvY2thZGRyX2luICopcmVzLT5haV9hZGRyOworICAgICpwb3J0ID0gZm9vLT5zaW5fcG9ydDsKKyAgICBtZW1jcHkoYWRkciwmKGZvby0+c2luX2FkZHIpLG1pbihsZW4sc2l6ZW9mKGZvby0+c2luX2FkZHIpKSk7CisgICAgYnJlYWs7CisgIH0KKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICBjYXNlIEFGX0lORVQ2OiB7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiAqZm9vID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHI7CisgICAgKnBvcnQgPSBmb28tPnNpbjZfcG9ydDsKKyAgICBtZW1jcHkoYWRkciwmKGZvby0+c2luNl9hZGRyKSxtaW4obGVuLHNpemVvZihmb28tPnNpbjZfYWRkcikpKTsKKyAgICBicmVhazsKKyAgfQorI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgKnBvcnQgPSAweERFQURCRUVGOworICAgIHN0cm5jcHkoYWRkciwiVU5LTiBGQU1JTFkiLGxlbik7CisgIH0KK30KKwordm9pZAorcGlja19uZXh0X3BvcnRfbnVtYmVyKHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzLCBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXMpIHsKKworICBzdGF0aWMgaW50IG15cG9ydF9pbml0ID0gMDsKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG15cG9ydCA9IDA7CisKKyAgaWYgKDAgPT0gbXlwb3J0X2luaXQpICB7CisgICAgLyogcGljayBhIG5pY2UgcmFuZG9tIHNwb3QgYmV0d2VlbiBjbGllbnRfcG9ydF9taW4gYW5kCisgICAgICAgY2xpZW50X3BvcnRfbWF4IGZvciBvdXIgaW5pdGlhbCBwb3J0IG51bWJlciwgYnV0IG9ubHkgZm9yIGEKKyAgICAgICBjb25uZWN0aW9uIG9yaWVudGVkIHRlc3QuIG90aGVyd2lzZSwgd2Ugd2lsbCB3YW50IHRvIHNldCBteXBvcnQKKyAgICAgICB0byBhIHNwZWNpZmljIHBvcnQgcHJvdmlkZWQgYnkgdGhlIHVzZXIgaWYgdGhleSBoYXZlIHNvIHByb3ZpZGVkCisgICAgICAgYSBzcGVjaWZpYyBwb3J0IDopICByYWogMjAwOC0wMS0wOCAqLworICAgIHNyYW5kKGdldHBpZCgpKTsKKyAgICBpZiAoY2xpZW50X3BvcnRfbWF4IC0gY2xpZW50X3BvcnRfbWluKSB7CisgICAgICBteXBvcnQgPSBjbGllbnRfcG9ydF9taW4gKyAKKwkocmFuZCgpICUgKGNsaWVudF9wb3J0X21heCAtIGNsaWVudF9wb3J0X21pbikpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG15cG9ydCA9IGNsaWVudF9wb3J0X21pbjsKKyAgICB9CisgICAgLyogdGhlcmUgd2lsbCBiZSBhICsrIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBiaW5kLCBzbyBzdWJ0cmFjdCBvbmUgKi8KKyAgICBteXBvcnQtLTsKKyAgICBteXBvcnRfaW5pdCA9IDE7CisgIH0KKyAgICAKKyBuZXdwb3J0OgorICAgIC8qIHBpY2sgYSBuZXcgcG9ydCBudW1iZXIgKi8KKyAgbXlwb3J0Kys7CisgICAgCisgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgdXNpbmcgdGhlIHBvcnQgbnVtYmVyIG9uIHdoaWNoIHRoZQorICAgICBzZXJ2ZXIgaXMgc2l0dGluZyBfYmVmb3JlXyB3ZSBjaGVjayBhZ2FpbnN0IHRoZSBib3VuZGFyaWVzIGxlc3QKKyAgICAgdGhlIHNlcnZlciBzaXRzIGF0IHRoZSB1cHBlciBib3VuZGFyeS4gaWYgdGhpcyBoYXBwZW5zIHRvIGJlIGEKKyAgICAgbG9vcGJhY2sgdGVzdCwgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBwb3J0bnVtYmVyIHdvdWxkIGxlYWQgdG8KKyAgICAgdW5zYXRpc2Z5aW5nIHJlc3VsdHMgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiAgaWYgdGhpcyBpc24ndCBhCisgICAgIGxvb3BiYWNrIHRlc3QsIGF2b2lkaW5nIHVzaW5nIHRoZSBzYW1lIHBvcnQgbnVtYmVyIGRvZXNuJ3QKKyAgICAgc2VyaW91c2x5IGFmZmVjdCBhbnl0aGluZyBhbnl3YXkgKi8KKyAgCisgIGlmIChteXBvcnQgPT0gZ2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMpKSBteXBvcnQrKzsKKyAgCisgIC8qIHdyYXAgdGhlIHBvcnQgbnVtYmVyIHdoZW4gd2UgcmVhY2ggdGhlIHVwcGVyIGJvdW5kLiAgZm9yCisgICAgIHN0dWRlbnRzIG9mIG5ldHdvcmtpbmcgaGlzdG9yeSwgc29tZSBhbmNpZW50IHN0YWNrcyAoMTk4MCdzIGFuZAorICAgICBlYXJseSAxOTkwJ3MgcGVyaGFwcykgbWlzdGFrZW5seSB0cmVhdGVkIHRoZXNlIHBvcnQgbnVtYmVycyBhcworICAgICBzaWduZWQgMTYgYml0IHF1YW50aXRpZXMuICB3ZSBtYWtlIG5vIGVmZm9ydCBoZXJlIHRvIHN1cHBvcnQKKyAgICAgc3VjaCBzdGFja3MuIHJhaiAyMDA4LTAxLTA4ICovCisgIGlmIChteXBvcnQgPj0gY2xpZW50X3BvcnRfbWF4KSB7CisgICAgbXlwb3J0ID0gY2xpZW50X3BvcnRfbWluOworICB9CisgIAorICAvKiBzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICovCisgIHNldF9wb3J0X251bWJlcihsb2NhbF9yZXMsICh1bnNpZ25lZCBzaG9ydClteXBvcnQpOworfQorCitjaGFyICoKK25ldHBlcmZfb3V0cHV0X2VudW1fdG9fc3RyKGVudW0gbmV0cGVyZl9vdXRwdXRfbmFtZSBvdXRwdXRfbmFtZSkKK3sKKyAgc3dpdGNoIChvdXRwdXRfbmFtZSkgeworICBjYXNlIE9VVFBVVF9OT05FOgorICAgIHJldHVybiAiT1VUUFVUX05PTkUiOworICBjYXNlICAgQ09NTUFORF9MSU5FOgorICAgIHJldHVybiAiQ09NTUFORF9MSU5FIjsKKyAgY2FzZSBVVUlEOgorICAgIHJldHVybiAiVVVJRCI7CisgIGNhc2UgUkVTVUxUX0JSQU5EOgorICAgIHJldHVybiAiUkVTVUxUX0JSQU5EIjsKKyAgY2FzZSAgIFNPQ0tFVF9UWVBFOgorICAgIHJldHVybiAiU09DS0VUX1RZUEUiOworICBjYXNlICAgRElSRUNUSU9OOgorICAgIHJldHVybiAiRElSRUNUSU9OIjsKKyAgY2FzZSAgIFBST1RPQ09MOgorICAgIHJldHVybiAiUFJPVE9DT0wiOworICBjYXNlICAgRUxBUFNFRF9USU1FOgorICAgIHJldHVybiAiRUxBUFNFRF9USU1FIjsKKyAgY2FzZSAgIFNPVVJDRV9QT1JUOgorICAgIHJldHVybiAiU09VUkNFX1BPUlQiOworICBjYXNlICAgU09VUkNFX0FERFI6CisgICAgcmV0dXJuICJTT1VSQ0VfQUREUiI7CisgIGNhc2UgU09VUkNFX0ZBTUlMWToKKyAgICByZXR1cm4gIlNPVVJDRV9GQU1JTFkiOworICBjYXNlICAgREVTVF9QT1JUOgorICAgIHJldHVybiAiREVTVF9QT1JUIjsKKyAgY2FzZSAgIERFU1RfQUREUjoKKyAgICByZXR1cm4gIkRFU1RfQUREUiI7CisgIGNhc2UgREVTVF9GQU1JTFk6CisgICAgcmV0dXJuICJERVNUX0ZBTUlMWSI7CisgIGNhc2UgVEhST1VHSFBVVDoKKyAgICByZXR1cm4gIlRIUk9VR0hQVVQiOworICBjYXNlIExPQ0FMX1NFTkRfVEhST1VHSFBVVDoKKyAgICByZXR1cm4gIkxPQ0FMX1NFTkRfVEhST1VHSFBVVCI7CisgIGNhc2UgTE9DQUxfUkVDVl9USFJPVUdIUFVUOgorICAgIHJldHVybiAiTE9DQUxfUkVDVl9USFJPVUdIUFVUIjsKKyAgY2FzZSBSRU1PVEVfU0VORF9USFJPVUdIUFVUOgorICAgIHJldHVybiAiUkVNT1RFX1NFTkRfVEhST1VHSFBVVCI7CisgIGNhc2UgUkVNT1RFX1JFQ1ZfVEhST1VHSFBVVDoKKyAgICByZXR1cm4gIlJFTU9URV9SRUNWX1RIUk9VR0hQVVQiOworICBjYXNlIFRIUk9VR0hQVVRfVU5JVFM6CisgICAgcmV0dXJuICJUSFJPVUdIUFVUX1VOSVRTIjsKKyAgY2FzZSBDT05GSURFTkNFX0xFVkVMOgorICAgIHJldHVybiAiQ09ORklERU5DRV9MRVZFTCI7CisgIGNhc2UgQ09ORklERU5DRV9JTlRFUlZBTDoKKyAgICByZXR1cm4gIkNPTkZJREVOQ0VfSU5URVJWQUwiOworICBjYXNlIENPTkZJREVOQ0VfSVRFUkFUSU9OOgorICAgIHJldHVybiAiQ09ORklERU5DRV9JVEVSQVRJT04iOworICBjYXNlIFRIUk9VR0hQVVRfQ09ORklEOgorICAgIHJldHVybiAiVEhST1VHSFBVVF9DT05GSUQiOworICBjYXNlIExPQ0FMX0NQVV9DT05GSUQ6CisgICAgcmV0dXJuICJMT0NBTF9DUFVfQ09ORklEIjsKKyAgY2FzZSBSRU1PVEVfQ1BVX0NPTkZJRDoKKyAgICByZXR1cm4gIlJFTU9URV9DUFVfQ09ORklEIjsKKyAgY2FzZSBSVF9MQVRFTkNZOgorICAgIHJldHVybiAiUlRfTEFURU5DWSI7CisgIGNhc2UgVFJBTlNBQ1RJT05fUkFURToKKyAgICByZXR1cm4gIlRSQU5TQUNUSU9OX1JBVEUiOworICBjYXNlIEJVUlNUX1NJWkU6CisgICAgcmV0dXJuICJCVVJTVF9TSVpFIjsKKyAgY2FzZSBUUkFOU1BPUlRfTVNTOgorICAgIHJldHVybiAiVFJBTlNQT1JUX01TUyI7CisgIGNhc2UgUkVRVUVTVF9TSVpFOgorICAgIHJldHVybiAiUkVRVUVTVF9TSVpFIjsKKyAgY2FzZSBSRVNQT05TRV9TSVpFOgorICAgIHJldHVybiAiUkVTUE9OU0VfU0laRSI7CisgIGNhc2UgICBMU1NfU0laRV9SRVE6CisgICAgcmV0dXJuICJMU1NfU0laRV9SRVEiOworICBjYXNlICAgTFNTX1NJWkU6CisgICAgcmV0dXJuICJMU1NfU0laRSI7CisgIGNhc2UgICBMU1NfU0laRV9FTkQ6CisgICAgcmV0dXJuICJMU1NfU0laRV9FTkQiOworICBjYXNlICAgTFNSX1NJWkVfUkVROgorICAgIHJldHVybiAiTFNSX1NJWkVfUkVRIjsKKyAgY2FzZSAgIExTUl9TSVpFOgorICAgIHJldHVybiAiTFNSX1NJWkUiOworICBjYXNlICAgTFNSX1NJWkVfRU5EOgorICAgIHJldHVybiAiTFNSX1NJWkVfRU5EIjsKKyAgY2FzZSAgIExPQ0FMX1NFTkRfU0laRToKKyAgICByZXR1cm4gIkxPQ0FMX1NFTkRfU0laRSI7CisgIGNhc2UgICBMT0NBTF9SRUNWX1NJWkU6CisgICAgcmV0dXJuICJMT0NBTF9SRUNWX1NJWkUiOworICBjYXNlICAgTE9DQUxfU0VORF9DQUxMUzoKKyAgICByZXR1cm4gIkxPQ0FMX1NFTkRfQ0FMTFMiOworICBjYXNlICAgTE9DQUxfUkVDVl9DQUxMUzoKKyAgICByZXR1cm4gIkxPQ0FMX1JFQ1ZfQ0FMTFMiOworICBjYXNlICAgTE9DQUxfQllURVNfUEVSX1JFQ1Y6CisgICAgcmV0dXJuICJMT0NBTF9CWVRFU19QRVJfUkVDViI7CisgIGNhc2UgICBMT0NBTF9CWVRFU19QRVJfU0VORDoKKyAgICByZXR1cm4gIkxPQ0FMX0JZVEVTX1BFUl9TRU5EIjsKKyAgY2FzZSAgIExPQ0FMX0JZVEVTX1NFTlQ6CisgICAgcmV0dXJuICJMT0NBTF9CWVRFU19TRU5UIjsKKyAgY2FzZSAgIExPQ0FMX0JZVEVTX1JFQ1ZEOgorICAgIHJldHVybiAiTE9DQUxfQllURVNfUkVDVkQiOworICBjYXNlICAgTE9DQUxfQllURVNfWEZFUkQ6CisgICAgcmV0dXJuICJMT0NBTF9CWVRFU19YRkVSRCI7CisgIGNhc2UgTE9DQUxfU0VORF9PRkZTRVQ6CisgICAgcmV0dXJuICJMT0NBTF9TRU5EX09GRlNFVCI7CisgIGNhc2UgTE9DQUxfUkVDVl9PRkZTRVQ6CisgICAgcmV0dXJuICJMT0NBTF9SRUNWX09GRlNFVCI7CisgIGNhc2UgTE9DQUxfUkVDVl9BTElHTjoKKyAgICByZXR1cm4gIkxPQ0FMX1JFQ1ZfQUxJR04iOworICBjYXNlIExPQ0FMX1NFTkRfQUxJR046CisgICAgcmV0dXJuICJMT0NBTF9TRU5EX0FMSUdOIjsKKyAgY2FzZSBMT0NBTF9TRU5EX1dJRFRIOgorICAgIHJldHVybiAiTE9DQUxfU0VORF9XSURUSCI7CisgIGNhc2UgTE9DQUxfUkVDVl9XSURUSDoKKyAgICByZXR1cm4gIkxPQ0FMX1JFQ1ZfV0lEVEgiOworICBjYXNlICAgTE9DQUxfU0VORF9ESVJUWV9DT1VOVDoKKyAgICByZXR1cm4gIkxPQ0FMX1NFTkRfRElSVFlfQ09VTlQiOworICBjYXNlICAgTE9DQUxfUkVDVl9ESVJUWV9DT1VOVDoKKyAgICByZXR1cm4gIkxPQ0FMX1JFQ1ZfRElSVFlfQ09VTlQiOworICBjYXNlICAgTE9DQUxfUkVDVl9DTEVBTl9DT1VOVDoKKyAgICByZXR1cm4gIkxPQ0FMX1JFQ1ZfQ0xFQU5fQ09VTlQiOworICBjYXNlICAgTE9DQUxfQ1BVX1VUSUw6CisgICAgcmV0dXJuICJMT0NBTF9DUFVfVVRJTCI7CisgIGNhc2UgICBMT0NBTF9DUFVfQklORDoKKyAgICByZXR1cm4gIkxPQ0FMX0NQVV9CSU5EIjsKKyAgY2FzZSAgIExPQ0FMX1NEOgorICAgIHJldHVybiAiTE9DQUxfU0QiOworICBjYXNlICAgU0RfVU5JVFM6CisgICAgcmV0dXJuICJTRF9VTklUUyI7CisgIGNhc2UgICBMT0NBTF9DUFVfTUVUSE9EOgorICAgIHJldHVybiAiTE9DQUxfQ1BVX01FVEhPRCI7CisgIGNhc2UgTE9DQUxfQ1BVX0NPVU5UOgorICAgIHJldHVybiAiTE9DQUxfQ1BVX0NPVU5UIjsKKyAgY2FzZSAgIExPQ0FMX0NQVV9QRUFLX1VUSUw6CisgICAgcmV0dXJuICJMT0NBTF9DUFVfUEVBS19VVElMIjsKKyAgY2FzZSBMT0NBTF9DUFVfUEVBS19JRDoKKyAgICByZXR1cm4gIkxPQ0FMX0NQVV9QRUFLX0lEIjsKKyAgY2FzZSAgIExPQ0FMX05PREVMQVk6CisgICAgcmV0dXJuICJMT0NBTF9OT0RFTEFZIjsKKyAgY2FzZSAgIExPQ0FMX0NPUks6CisgICAgcmV0dXJuICJMT0NBTF9DT1JLIjsKKyAgY2FzZSAgIFJTU19TSVpFX1JFUToKKyAgICByZXR1cm4gIlJTU19TSVpFX1JFUSI7CisgIGNhc2UgICBSU1NfU0laRToKKyAgICByZXR1cm4gIlJTU19TSVpFIjsKKyAgY2FzZSAgIFJTU19TSVpFX0VORDoKKyAgICByZXR1cm4gIlJTU19TSVpFX0VORCI7CisgIGNhc2UgICBSU1JfU0laRV9SRVE6CisgICAgcmV0dXJuICJSU1JfU0laRV9SRVEiOworICBjYXNlICAgUlNSX1NJWkU6CisgICAgcmV0dXJuICJSU1JfU0laRSI7CisgIGNhc2UgICBSU1JfU0laRV9FTkQ6CisgICAgcmV0dXJuICJSU1JfU0laRV9FTkQiOworICBjYXNlICAgUkVNT1RFX1NFTkRfU0laRToKKyAgICByZXR1cm4gIlJFTU9URV9TRU5EX1NJWkUiOworICBjYXNlICAgUkVNT1RFX1JFQ1ZfU0laRToKKyAgICByZXR1cm4gIlJFTU9URV9SRUNWX1NJWkUiOworICBjYXNlICAgUkVNT1RFX1NFTkRfQ0FMTFM6CisgICAgcmV0dXJuICJSRU1PVEVfU0VORF9DQUxMUyI7CisgIGNhc2UgICBSRU1PVEVfUkVDVl9DQUxMUzoKKyAgICByZXR1cm4gIlJFTU9URV9SRUNWX0NBTExTIjsKKyAgY2FzZSAgIFJFTU9URV9CWVRFU19QRVJfUkVDVjoKKyAgICByZXR1cm4gIlJFTU9URV9CWVRFU19QRVJfUkVDViI7CisgIGNhc2UgICBSRU1PVEVfQllURVNfUEVSX1NFTkQ6CisgICAgcmV0dXJuICJSRU1PVEVfQllURVNfUEVSX1NFTkQiOworICBjYXNlICAgUkVNT1RFX0JZVEVTX1NFTlQ6CisgICAgcmV0dXJuICJSRU1PVEVfQllURVNfU0VOVCI7CisgIGNhc2UgICBSRU1PVEVfQllURVNfUkVDVkQ6CisgICAgcmV0dXJuICJSRU1PVEVfQllURVNfUkVDVkQiOworICBjYXNlICAgUkVNT1RFX0JZVEVTX1hGRVJEOgorICAgIHJldHVybiAiUkVNT1RFX0JZVEVTX1hGRVJEIjsKKyAgY2FzZSBSRU1PVEVfU0VORF9PRkZTRVQ6CisgICAgcmV0dXJuICJSRU1PVEVfU0VORF9PRkZTRVQiOworICBjYXNlIFJFTU9URV9SRUNWX09GRlNFVDoKKyAgICByZXR1cm4gIlJFTU9URV9SRUNWX09GRlNFVCI7CisgIGNhc2UgUkVNT1RFX1JFQ1ZfQUxJR046CisgICAgcmV0dXJuICJSRU1PVEVfUkVDVl9BTElHTiI7CisgIGNhc2UgUkVNT1RFX1NFTkRfQUxJR046CisgICAgcmV0dXJuICJSRU1PVEVfU0VORF9BTElHTiI7CisgIGNhc2UgUkVNT1RFX1NFTkRfV0lEVEg6CisgICAgcmV0dXJuICJSRU1PVEVfU0VORF9XSURUSCI7CisgIGNhc2UgUkVNT1RFX1JFQ1ZfV0lEVEg6CisgICAgcmV0dXJuICJSRU1PVEVfUkVDVl9XSURUSCI7CisgIGNhc2UgICBSRU1PVEVfU0VORF9ESVJUWV9DT1VOVDoKKyAgICByZXR1cm4gIlJFTU9URV9TRU5EX0RJUlRZX0NPVU5UIjsKKyAgY2FzZSAgIFJFTU9URV9SRUNWX0RJUlRZX0NPVU5UOgorICAgIHJldHVybiAiUkVNT1RFX1JFQ1ZfRElSVFlfQ09VTlQiOworICBjYXNlICAgUkVNT1RFX1JFQ1ZfQ0xFQU5fQ09VTlQ6CisgICAgcmV0dXJuICJSRU1PVEVfUkVDVl9DTEVBTl9DT1VOVCI7CisgIGNhc2UgICBSRU1PVEVfQ1BVX1VUSUw6CisgICAgcmV0dXJuICJSRU1PVEVfQ1BVX1VUSUwiOworICBjYXNlICAgUkVNT1RFX0NQVV9CSU5EOgorICAgIHJldHVybiAiUkVNT1RFX0NQVV9CSU5EIjsKKyAgY2FzZSAgIFJFTU9URV9TRDoKKyAgICByZXR1cm4gIlJFTU9URV9TRCI7CisgIGNhc2UgICBSRU1PVEVfQ1BVX01FVEhPRDoKKyAgICByZXR1cm4gIlJFTU9URV9DUFVfTUVUSE9EIjsKKyAgY2FzZSBSRU1PVEVfQ1BVX0NPVU5UOgorICAgIHJldHVybiAiUkVNT1RFX0NQVV9DT1VOVCI7CisgIGNhc2UgUkVNT1RFX0NQVV9QRUFLX1VUSUw6CisgICAgcmV0dXJuICJSRU1PVEVfQ1BVX1BFQUtfVVRJTCI7CisgIGNhc2UgUkVNT1RFX0NQVV9QRUFLX0lEOgorICAgIHJldHVybiAiUkVNT1RFX0NQVV9QRUFLX0lEIjsKKyAgY2FzZSAgIFJFTU9URV9OT0RFTEFZOgorICAgIHJldHVybiAiUkVNT1RFX05PREVMQVkiOworICBjYXNlICAgUkVNT1RFX0NPUks6CisgICAgcmV0dXJuICJSRU1PVEVfQ09SSyI7CisgIGNhc2UgTE9DQUxfSU5URVJGQUNFX1NMT1Q6CisgICAgcmV0dXJuICJMT0NBTF9JTlRFUkZBQ0VfU0xPVCI7CisgIGNhc2UgUkVNT1RFX0lOVEVSRkFDRV9TTE9UOgorICAgIHJldHVybiAiUkVNT1RFX0lOVEVSRkFDRV9TTE9UIjsKKyAgY2FzZSBSRU1PVEVfSU5URVJGQUNFX1NVQkRFVklDRToKKyAgICByZXR1cm4gIlJFTU9URV9JTlRFUkZBQ0VfU1VCREVWSUNFIjsKKyAgY2FzZSBSRU1PVEVfSU5URVJGQUNFX1NVQlZFTkRPUjoKKyAgICByZXR1cm4gIlJFTU9URV9JTlRFUkZBQ0VfU1VCVkVORE9SIjsKKyAgY2FzZSBSRU1PVEVfSU5URVJGQUNFX0RFVklDRToKKyAgICByZXR1cm4gIlJFTU9URV9JTlRFUkZBQ0VfREVWSUNFIjsKKyAgY2FzZSBSRU1PVEVfSU5URVJGQUNFX1ZFTkRPUjoKKyAgICByZXR1cm4gIlJFTU9URV9JTlRFUkZBQ0VfVkVORE9SIjsKKyAgY2FzZSBMT0NBTF9JTlRFUkZBQ0VfU1VCREVWSUNFOgorICAgIHJldHVybiAiTE9DQUxfSU5URVJGQUNFX1NVQkRFVklDRSI7CisgIGNhc2UgTE9DQUxfSU5URVJGQUNFX1NVQlZFTkRPUjoKKyAgICByZXR1cm4gIkxPQ0FMX0lOVEVSRkFDRV9TVUJWRU5ET1IiOworICBjYXNlIExPQ0FMX0lOVEVSRkFDRV9ERVZJQ0U6CisgICAgcmV0dXJuICJMT0NBTF9JTlRFUkZBQ0VfREVWSUNFIjsKKyAgY2FzZSBMT0NBTF9JTlRFUkZBQ0VfVkVORE9SOgorICAgIHJldHVybiAiTE9DQUxfSU5URVJGQUNFX1ZFTkRPUiI7CisgIGNhc2UgTE9DQUxfSU5URVJGQUNFX05BTUU6CisgICAgcmV0dXJuICJMT0NBTF9JTlRFUkZBQ0VfTkFNRSI7CisgIGNhc2UgUkVNT1RFX0lOVEVSRkFDRV9OQU1FOgorICAgIHJldHVybiAiUkVNT1RFX0lOVEVSRkFDRV9OQU1FIjsKKyAgY2FzZSBSRU1PVEVfRFJJVkVSX05BTUU6CisgICAgcmV0dXJuICJSRU1PVEVfRFJJVkVSX05BTUUiOworICBjYXNlIFJFTU9URV9EUklWRVJfVkVSU0lPTjoKKyAgICByZXR1cm4gIlJFTU9URV9EUklWRVJfVkVSU0lPTiI7CisgIGNhc2UgUkVNT1RFX0RSSVZFUl9GSVJNV0FSRToKKyAgICByZXR1cm4gIlJFTU9URV9EUklWRVJfRklSTVdBUkUiOworICBjYXNlIFJFTU9URV9EUklWRVJfQlVTOgorICAgIHJldHVybiAiUkVNT1RFX0RSSVZFUl9CVVMiOworICBjYXNlIExPQ0FMX0RSSVZFUl9OQU1FOgorICAgIHJldHVybiAiTE9DQUxfRFJJVkVSX05BTUUiOworICBjYXNlIExPQ0FMX0RSSVZFUl9WRVJTSU9OOgorICAgIHJldHVybiAiTE9DQUxfRFJJVkVSX1ZFUlNJT04iOworICBjYXNlIExPQ0FMX0RSSVZFUl9GSVJNV0FSRToKKyAgICByZXR1cm4gIkxPQ0FMX0RSSVZFUl9GSVJNV0FSRSI7CisgIGNhc2UgTE9DQUxfSU5URVJWQUxfVVNFQ1M6CisgICAgcmV0dXJuICJMT0NBTF9JTlRFUlZBTF9VU0VDUyI7CisgIGNhc2UgTE9DQUxfSU5URVJWQUxfQlVSU1Q6CisgICAgcmV0dXJuICJMT0NBTF9JTlRFUlZBTF9CVVJTVCI7CisgIGNhc2UgUkVNT1RFX0lOVEVSVkFMX1VTRUNTOgorICAgIHJldHVybiAiUkVNT1RFX0lOVEVSVkFMX1VTRUNTIjsKKyAgY2FzZSBSRU1PVEVfSU5URVJWQUxfQlVSU1Q6CisgICAgcmV0dXJuICJSRU1PVEVfSU5URVJWQUxfQlVSU1QiOworICBjYXNlIExPQ0FMX1NFQ1VSSVRZX1RZUEVfSUQ6CisgICAgcmV0dXJuICJMT0NBTF9TRUNVUklUWV9UWVBFX0lEIjsKKyAgY2FzZSBMT0NBTF9TRUNVUklUWV9FTkFCTEVEX05VTToKKyAgICByZXR1cm4gIkxPQ0FMX1NFQ1VSSVRZX0VOQUJMRURfTlVNIjsKKyAgY2FzZSBMT0NBTF9TRUNVUklUWV9UWVBFOgorICAgIHJldHVybiAiTE9DQUxfU0VDVVJJVFlfVFlQRSI7CisgIGNhc2UgTE9DQUxfU0VDVVJJVFlfRU5BQkxFRDoKKyAgICByZXR1cm4gIkxPQ0FMX1NFQ1VSSVRZX0VOQUJMRUQiOworICBjYXNlIExPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDOgorICAgIHJldHVybiAiTE9DQUxfU0VDVVJJVFlfU1BFQ0lGSUMiOworICBjYXNlIFJFTU9URV9TRUNVUklUWV9UWVBFX0lEOgorICAgIHJldHVybiAiUkVNT1RFX1NFQ1VSSVRZX1RZUEVfSUQiOworICBjYXNlIFJFTU9URV9TRUNVUklUWV9FTkFCTEVEX05VTToKKyAgICByZXR1cm4gIlJFTU9URV9TRUNVUklUWV9FTkFCTEVEX05VTSI7CisgIGNhc2UgUkVNT1RFX1NFQ1VSSVRZX1RZUEU6CisgICAgcmV0dXJuICJSRU1PVEVfU0VDVVJJVFlfVFlQRSI7CisgIGNhc2UgUkVNT1RFX1NFQ1VSSVRZX0VOQUJMRUQ6CisgICAgcmV0dXJuICJSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRCI7CisgIGNhc2UgUkVNT1RFX1NFQ1VSSVRZX1NQRUNJRklDOgorICAgIHJldHVybiAiUkVNT1RFX1NFQ1VSSVRZX1NQRUNJRklDIjsKKyAgY2FzZSBMT0NBTF9EUklWRVJfQlVTOgorICAgIHJldHVybiAiTE9DQUxfRFJJVkVSX0JVUyI7CisgIGNhc2UgUkVNT1RFX1NZU05BTUU6CisgICAgcmV0dXJuICJSRU1PVEVfU1lTTkFNRSI7CisgIGNhc2UgUkVNT1RFX01BQ0hJTkU6CisgICAgcmV0dXJuICJSRU1PVEVfTUFDSElORSI7CisgIGNhc2UgUkVNT1RFX1ZFUlNJT046CisgICAgcmV0dXJuICJSRU1PVEVfVkVSU0lPTiI7CisgIGNhc2UgUkVNT1RFX1JFTEVBU0U6CisgICAgcmV0dXJuICJSRU1PVEVfUkVMRUFTRSI7CisgIGNhc2UgTE9DQUxfU1lTTkFNRToKKyAgICByZXR1cm4gIkxPQ0FMX1NZU05BTUUiOworICBjYXNlIExPQ0FMX01BQ0hJTkU6CisgICAgcmV0dXJuICJMT0NBTF9NQUNISU5FIjsKKyAgY2FzZSBMT0NBTF9WRVJTSU9OOgorICAgIHJldHVybiAiTE9DQUxfVkVSU0lPTiI7CisgIGNhc2UgTE9DQUxfUkVMRUFTRToKKyAgICByZXR1cm4gIkxPQ0FMX1JFTEVBU0UiOworICBjYXNlIFJFTU9URV9DUFVfTU9ERUw6CisgICAgcmV0dXJuICJSRU1PVEVfQ1BVX01PREVMIjsKKyAgY2FzZSBSRU1PVEVfQ1BVX0ZSRVFVRU5DWToKKyAgICByZXR1cm4gIlJFTU9URV9DUFVfRlJFUVVFTkNZIjsKKyAgY2FzZSBSRU1PVEVfU1lTVEVNX01PREVMOgorICAgIHJldHVybiAiUkVNT1RFX1NZU1RFTV9NT0RFTCI7CisgIGNhc2UgTE9DQUxfQ1BVX01PREVMOgorICAgIHJldHVybiAiTE9DQUxfQ1BVX01PREVMIjsKKyAgY2FzZSBMT0NBTF9DUFVfRlJFUVVFTkNZOgorICAgIHJldHVybiAiTE9DQUxfQ1BVX0ZSRVFVRU5DWSI7CisgIGNhc2UgTE9DQUxfU1lTVEVNX01PREVMOgorICAgIHJldHVybiAiTE9DQUxfU1lTVEVNX01PREVMIjsKKyAgY2FzZSBPVVRQVVRfRU5EOgorICAgIHJldHVybiAiT1VUUFVUX0VORCI7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuICIhVU5LTk9XTiBPVVRQVVQgU0VMRUNUT1IhIjsKKyAgfQorfQorCit2b2lkCitwcmludF9uZXRwZXJmX291dHB1dF9lbnRyeShGSUxFICp3aGVyZSwgZW51bSBuZXRwZXJmX291dHB1dF9uYW1lIHdoYXQpCit7Cit9CisKK3ZvaWQgcHJpbnRfb21uaV9pbml0X2xpc3QoKTsKKwordm9pZAorZHVtcF9uZXRwZXJmX291dHB1dF9saXN0KEZJTEUgKndoZXJlLCBpbnQgY3N2KSB7CisgIGludCBpOworCisgIHByaW50X29tbmlfaW5pdF9saXN0KCk7CisKKyAgZm9yIChpID0gT1VUUFVUX05PTkU7IGkgPCBORVRQRVJGX09VVFBVVF9NQVg7IGkrKyl7CisgICAgaWYgKE9VVFBVVF9OT05FICE9IGkpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIiVjIiwoY3N2KSA/ICcsJyA6ICdcbicpOworICAgIH0KKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiJXMiLAorCSAgICBuZXRwZXJmX291dHB1dF9lbnVtX3RvX3N0cihuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0ub3V0cHV0X25hbWUpKTsKKyAgfQorICBmcHJpbnRmKHdoZXJlLCJcbiIpOworICBmZmx1c2god2hlcmUpOworfQorCit2b2lkCitkdW1wX25ldHBlcmZfb3V0cHV0X3NvdXJjZShGSUxFICp3aGVyZSkKK3sKKyAgaW50IGk7CisKKyAgLyogYmVsdHMgYW5kIHN1c3BlbmRlcnMgZXZlcnlvbmUuLi4gKi8KKyAgZm9yIChpID0gT1VUUFVUX05PTkU7IGkgPCBORVRQRVJGX09VVFBVVF9NQVg7IGkrKykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJPdXRwdXQgTmFtZTogJXNcbiIsCisJICAgIG5ldHBlcmZfb3V0cHV0X2VudW1fdG9fc3RyKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5vdXRwdXRfbmFtZSkpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJcdG1heF9saW5lX2xlbiAlZCB0b3RfbGluZV9sZW4gJWQgZGlzcGxheV92YWx1ZSAlcFxuIiwKKwkgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLm1heF9saW5lX2xlbiwKKwkgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLnRvdF9saW5lX2xlbiwKKwkgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLmRpc3BsYXlfdmFsdWUpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJcdGxpbmVbMF06IHwlc3xcbiIsCisJICAgIChuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0ubGluZVswXSA9PSBOVUxMKSA/ICIiIDogCisJICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5saW5lWzBdKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiXHRsaW5lWzFdOiB8JXN8XG4iLAorCSAgICAobmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLmxpbmVbMV0gPT0gTlVMTCkgPyAiIiA6IAorCSAgICBuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0ubGluZVsxXSk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIlx0bGluZVsyXTogfCVzfFxuIiwKKwkgICAgKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5saW5lWzJdID09IE5VTEwpID8gIiIgOiAKKwkgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLmxpbmVbMl0pOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJcdGxpbmVbM106IHwlc3xcbiIsCisJICAgIChuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0ubGluZVszXSA9PSBOVUxMKSA/ICIiIDogCisJICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5saW5lWzNdKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiXHRicmllZjogfCVzfFxuIiwKKwkgICAgKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5icmllZiA9PSBOVUxMKSA/ICIiIDogCisJICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5icmllZik7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIlx0Zm9ybWF0OiB8JXN8XG4iLAorCSAgICAobmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLmZvcm1hdCA9PSBOVUxMKSA/ICIiIDogCisJICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5mb3JtYXQpOworICB9CisgIGZmbHVzaCh3aGVyZSk7Cit9CisKKyNkZWZpbmUgTVlfTUFYKGEsYikgKChhID4gYikgPyBhIDogYikKKworI2RlZmluZSBORVRQRVJGX0xJTkVfTUFYKHgpIFwKKyAgICBNWV9NQVgoTVlfTUFYKE1ZX01BWChzdHJsZW4obmV0cGVyZl9vdXRwdXRfc291cmNlW3hdLmxpbmVbMF0pLFwKKwkJICAgICAgICAgc3RybGVuKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVt4XS5saW5lWzFdKSksXAorCSAgICAgICAgICBzdHJsZW4obmV0cGVyZl9vdXRwdXRfc291cmNlW3hdLmxpbmVbMl0pKSxcCisJICAgc3RybGVuKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVt4XS5saW5lWzNdKSkKKworI2RlZmluZSBORVRQRVJGX0xJTkVfVE9UKHgpIFwKKyAgICBzdHJsZW4obmV0cGVyZl9vdXRwdXRfc291cmNlW3hdLmxpbmVbMF0pICtcCisgICAgc3RybGVuKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVt4XS5saW5lWzFdKSArXAorICAgIHN0cmxlbihuZXRwZXJmX291dHB1dF9zb3VyY2VbeF0ubGluZVsyXSkgK1wKKyAgICBzdHJsZW4obmV0cGVyZl9vdXRwdXRfc291cmNlW3hdLmxpbmVbM10pICsgNAorCitlbnVtIG5ldHBlcmZfb3V0cHV0X25hbWUKK21hdGNoX3N0cmluZ190b19vdXRwdXQoY2hhciAqY2FuZGlkYXRlKQoreworICBjaGFyICpoMSwqdGVtcDsKKyAgZW51bSBuZXRwZXJmX291dHB1dF9uYW1lIG5hbWU7CisgIGludCBrLGxlbjsKKworICAvKiBhdCBzb21lIHBvaW50IHdlIG1heSBuZWVkL3dhbnQgdG8gd29ycnkgYWJvdXQgbGVhZGluZyBhbmQKKyAgICAgdHJhaWxpbmcgc3BhY2VzLCBidXQgZm9yIG5vdyB3ZSB3aWxsIGxlYXZlIHRoYXQgb251cyBvbiB0aGUKKyAgICAgdXNlci4gKi8KKworICBmb3IgKG5hbWUgPSBPVVRQVVRfTk9ORTsgbmFtZSA8IE5FVFBFUkZfT1VUUFVUX01BWDsgbmFtZSsrKSB7CisgICAgLyogdHJ5IGZvciBhIG1hdGNoIGJhc2VkIG9uIHRoZSBubWVtb25pYy9lbnVtICovCisgICAgaWYgKCFzdHJjYXNlY21wKGNhbmRpZGF0ZSxuZXRwZXJmX291dHB1dF9lbnVtX3RvX3N0cihuYW1lKSkpCisgICAgICByZXR1cm4gbmFtZTsKKyAgICAKKyAgICAvKiB0cnkgZm9yIGEgbWF0Y2ggb24gdGhlIGFjdHVhbCBoZWFkZXIgdGV4dCAqLworICAgIHRlbXAgPSBtYWxsb2MoTkVUUEVSRl9MSU5FX1RPVChuYW1lKSk7CisgICAgaDEgPSB0ZW1wOworICAgIGlmIChoMSAhPSBOVUxMKSB7CisgICAgICBmb3IgKGsgPSAwOyAoKGsgPCA0KSAmJgorCQkgICAoTlVMTCAhPSBuZXRwZXJmX291dHB1dF9zb3VyY2VbbmFtZV0ubGluZVtrXSkgJiYKKwkJICAgKHN0cmNtcCgiIixuZXRwZXJmX291dHB1dF9zb3VyY2VbbmFtZV0ubGluZVtrXSkpKTsgaysrKSB7CisJbGVuID0gc3ByaW50ZihoMSwKKwkJICAgICAgIiVzIiwKKwkJICAgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW25hbWVdLmxpbmVba10pOworCSooaDEgKyBsZW4pID0gJyAnOworCS8qIG5vdyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXJ0aW5nIGNvbHVtbi4gZm9yIGNzdiB3ZSBhcmVuJ3Qgd29ycmllZAorCSAgIGFib3V0IGFsaWdubWVudCBiZXR3ZWVuIHRoZSBoZWFkZXIgYW5kIHRoZSB2YWx1ZSBsaW5lcyAqLworCWgxICs9IGxlbiArIDE7CisgICAgICB9CisgICAgICAvKiB0aGlzIHRpbWUgd2Ugd2FudCBudWxsIHRlcm1pbmF0aW9uIHBsZWFzZSAqLworICAgICAgKihoMSAtIDEpID0gMDsKKyAgICAgIGlmICghc3RyY2FzZWNtcChjYW5kaWRhdGUsdGVtcCkpIHsKKwlmcmVlKHRlbXApOworCXJldHVybiBuYW1lOworICAgICAgfQorICAgICAgZWxzZSAKKwlmcmVlKHRlbXApOworICAgIH0KKyAgfQorICAvKiBpZiB3ZSBnZXQgaGVyZSBpdCBtZWFucyB0aGVyZSB3YXMgbm8gbWF0Y2ggKi8KKyAgcmV0dXJuIE9VVFBVVF9OT05FOworfQorCit2b2lkCitwYXJzZV9vdXRwdXRfY3N2X3NlbGVjdGlvbl9maWxlKGNoYXIgKnNlbGVjdGlvbl9maWxlKSB7CisgIEZJTEUgKnNlbGVjdGlvbnM7CisgIGNoYXIgbmFtZVs4MV07IC8qIGJlc3QgYmUgbW9yZSB0aGFuIGVub3VnaCAqLworICBpbnQgbmFtZXBvczsKKyAgaW50IGM7CisgIGludCBqOworICBlbnVtIG5ldHBlcmZfb3V0cHV0X25hbWUgbWF0Y2g7CisgIGludCBsaW5lLGNvbHVtbjsKKworICBzZWxlY3Rpb25zID0gZm9wZW4oc2VsZWN0aW9uX2ZpbGUsInIiKTsKKyAgaWYgKCFzZWxlY3Rpb25zKSB7CisgICAgcGVycm9yKCJDb3VsZCBOb3QgT3BlbiBvdXRwdXQgc2VsZWN0aW9uIGZpbGUiKTsKKyAgICBleGl0KC0xKTsKKyAgfQorICAKKyAgLyogc2hvdWxkIHRoaXMgcmVhbGx5IGJlIG5lY2Vzc2FyeT8gKi8KKyAgcmV3aW5kKHNlbGVjdGlvbnMpOworCisgIGxpbmUgPSAwOworICBjb2x1bW4gPSAxOworICBuYW1lcG9zID0gMDsKKyAgbmFtZVswXSA9IDA7CisgIG5hbWVbODBdID0gMDsKKyAgaiA9IDA7CisgIC8qIGxldCdzIGFsbG93IHRoZSBjc3YgdG8gdHVybiB0aGUgZm91ciBsaW5lcyBvZiBhIGh1bWFuIHJlYWRhYmxlCisgICAgIG91dHB1dCBmaWxlIHRvIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2luZ2xlIGxpbmUgY3N2IG91dHB1dCBmaWxlIGJ5CisgICAgIG5vdCB3b3JyeWluZyBhYm91dCB0aGUgbGluZSBjb3VudC4gcmFqIDIwMDgtLTAyLTA0ICovCisgIHdoaWxlICgoYyA9IGZnZXRjKHNlbGVjdGlvbnMpKSAhPSBFT0YpIHsKKyAgICBpZiAobmFtZXBvcyA9PSA4MCkgeworICAgICAgLyogdG9vIGxvbmcgKi8KKyAgICAgIAorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiT3V0cHV0IHNlbGVjdGlvbiBzdGFydGluZyBjb2x1bW4gJWQgb24gbGluZSAlZCBpcyB0b28gbG9uZ1xuIiwKKwkgICAgICBsaW5lICsgMSwKKwkgICAgICBjb2x1bW4pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGV4aXQoLTEpOworICAgIH0KKyAgICBpZiAoYyA9PSAnLCcpIHsKKyAgICAgIC8qIHRpbWUgdG8gY2hlY2sgZm9yIGEgbWF0Y2gsIGJ1dCBvbmx5IGlmIHdlIHdvbid0IG92ZXJmbG93IHRoZQorCSBjdXJyZW50IHJvdyBvZiB0aGUgYXJyYXkgICovCisgICAgICBpZiAoaiA9PSBORVRQRVJGX09VVFBVVF9NQVgpIHsKKwlmcHJpbnRmKHdoZXJlLCJUb28gbWFueSBvdXRwdXQgc2VsZWN0b3JzIG9uIGxpbmUgJWRcbiIsbGluZSk7CisJZmZsdXNoKHdoZXJlKTsKKwlleGl0KC0xKTsKKyAgICAgIH0KKyAgICAgIG5hbWVbbmFtZXBvc10gPSAwOworICAgICAgb3V0cHV0X2Nzdl9saXN0W2orK10gPSBtYXRjaF9zdHJpbmdfdG9fb3V0cHV0KG5hbWUpOworICAgICAgbmFtZXBvcyA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKGMgPT0gJ1xuJykgeworICAgICAgLyogbW92ZSB0byB0aGUgbmV4dCBsaW5lIGFmdGVyIGNoZWNraW5nIGZvciBhIG1hdGNoICovCisgICAgICBuYW1lW25hbWVwb3NdID0gMDsKKyAgICAgIG91dHB1dF9jc3ZfbGlzdFtqKytdID0gbWF0Y2hfc3RyaW5nX3RvX291dHB1dChuYW1lKTsKKyAgICAgIGxpbmUrKzsKKyAgICAgIG5hbWVwb3MgPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChpc3ByaW50KGMpKSB7CisgICAgICBuYW1lW25hbWVwb3MrK10gPSBjOworICAgIH0KKyAgICBjb2x1bW4rKzsKKyAgfQorCisgIC8qIG9rLCBkbyB3ZSBuZWVkL3dhbnQgdG8gZG8gYW55dGhpbmcgaGVyZT8gYXQgcHJlc2VudCB3ZSB3aWxsCisgICAgIHNpbGVudGx5IGlnbm9yZSB0aGUgcmVzdCBvZiB0aGUgZmlsZSBpZiB3ZSBleGl0IHRoZSBsb29wIG9uIGxpbmUKKyAgICAgY291bnQgKi8KKyAgaWYgKChjID09IEVPRikgJiYgKG5hbWVwb3MgPiAwKSkgeworICAgIG5hbWVbbmFtZXBvc10gPSAwOworICAgIG91dHB1dF9jc3ZfbGlzdFtqXSA9ICAgbWF0Y2hfc3RyaW5nX3RvX291dHB1dChuYW1lKTsKKyAgfQorfQordm9pZAorcGFyc2Vfb3V0cHV0X2h1bWFuX3NlbGVjdGlvbl9maWxlKGNoYXIgKnNlbGVjdGlvbl9maWxlKSB7CisgIEZJTEUgKnNlbGVjdGlvbnM7CisgIGNoYXIgbmFtZVs4MV07IC8qIGJlc3QgYmUgbW9yZSB0aGFuIGVub3VnaCAqLworICBpbnQgbmFtZXBvczsKKyAgY2hhciBjOworICBpbnQgajsKKyAgZW51bSBuZXRwZXJmX291dHB1dF9uYW1lIG1hdGNoOworICBpbnQgbGluZSxjb2x1bW47CisKKyAgc2VsZWN0aW9ucyA9IGZvcGVuKHNlbGVjdGlvbl9maWxlLCJyIik7CisgIGlmICghc2VsZWN0aW9ucykgeworICAgIHBlcnJvcigiQ291bGQgTm90IE9wZW4gb3V0cHV0IHNlbGVjdGlvbiBmaWxlIik7CisgICAgZXhpdCgtMSk7CisgIH0KKyAgCisgIGxpbmUgPSAwOworICBjb2x1bW4gPSAxOworICBuYW1lcG9zID0gMDsKKyAgbmFtZVswXSA9IDA7CisgIG5hbWVbODBdID0gMDsKKyAgaiA9IDA7CisgIHdoaWxlICgoKGMgPSBmZ2V0YyhzZWxlY3Rpb25zKSkgIT0gRU9GKSAmJiAobGluZSA8IDQpKSB7CisgICAgaWYgKG5hbWVwb3MgPT0gODApIHsKKyAgICAgIC8qIHRvbyBsb25nICovCisgICAgICAKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIk91dHB1dCBzZWxlY3Rpb24gc3RhcnRpbmcgY29sdW1uICVkIG9uIGxpbmUgJWQgaXMgdG9vIGxvbmdcbiIsCisJICAgICAgbGluZSArIDEsCisJICAgICAgY29sdW1uKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KC0xKTsKKyAgICB9CisgICAgaWYgKGMgPT0gJywnKSB7CisgICAgICAvKiB0aW1lIHRvIGNoZWNrIGZvciBhIG1hdGNoLCBidXQgb25seSBpZiB3ZSB3b24ndCBvdmVyZmxvdyB0aGUKKwkgY3VycmVudCByb3cgb2YgdGhlIGFycmF5ICAqLworICAgICAgaWYgKGogPT0gTkVUUEVSRl9PVVRQVVRfTUFYKSB7CisJZnByaW50Zih3aGVyZSwiVG9vIG1hbnkgb3V0cHV0IHNlbGVjdG9ycyBvbiBsaW5lICVkXG4iLGxpbmUpOworCWZmbHVzaCh3aGVyZSk7CisJZXhpdCgtMSk7CisgICAgICB9CisgICAgICBuYW1lW25hbWVwb3NdID0gMDsKKyAgICAgIG91dHB1dF9odW1hbl9saXN0W2xpbmVdW2orK10gPSBtYXRjaF9zdHJpbmdfdG9fb3V0cHV0KG5hbWUpOworICAgICAgbmFtZXBvcyA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKGMgPT0gJ1xuJykgeworICAgICAgLyogbW92ZSB0byB0aGUgbmV4dCBsaW5lIGFmdGVyIGNoZWNraW5nIGZvciBhIG1hdGNoICovCisgICAgICBuYW1lW25hbWVwb3NdID0gMDsKKyAgICAgIG91dHB1dF9odW1hbl9saXN0W2xpbmUrK11baisrXSA9IG1hdGNoX3N0cmluZ190b19vdXRwdXQobmFtZSk7CisgICAgICBuYW1lcG9zID0gMDsKKyAgICAgIGogPSAwOworICAgIH0KKyAgICBlbHNlIGlmIChpc3ByaW50KGMpKSB7CisgICAgICBuYW1lW25hbWVwb3MrK10gPSBjOworICAgIH0KKyAgICBjb2x1bW4rKzsKKyAgfQorCisgIC8qIG9rLCBkbyB3ZSBuZWVkL3dhbnQgdG8gZG8gYW55dGhpbmcgaGVyZT8gYXQgcHJlc2VudCB3ZSB3aWxsCisgICAgIHNpbGVudGx5IGlnbm9yZSB0aGUgcmVzdCBvZiB0aGUgZmlsZSBpZiB3ZSBleGl0IHRoZSBsb29wIG9uIGxpbmUKKyAgICAgY291bnQgKi8KKyAgaWYgKChjID09IEVPRikgJiYgKG5hbWVwb3MgPiAwKSkgeworICAgIG5hbWVbbmFtZXBvc10gPSAwOworICAgIG91dHB1dF9odW1hbl9saXN0W2xpbmVdW2pdID0gICBtYXRjaF9zdHJpbmdfdG9fb3V0cHV0KG5hbWUpOworICB9CisKK30KKwordm9pZAorc2V0X291dHB1dF9jc3ZfbGlzdF9kZWZhdWx0KCkgeworCisgIGludCAgaSA9IDA7CisgIGVudW0gbmV0cGVyZl9vdXRwdXRfbmFtZSBqOworCisgIC8qIHRoaXMgc2hvdWxkIGNhdXNlIHVzIHRvIGNhdGNoIGV2ZXJ5dGhpbmcgdW5sZXNzIHNvbWVvbmUgYm90Y2hlcworICAgICBhZGRpbmcgYW4gb3V0cHV0IG5hbWUgdG8gdGhlIGVudW0uICByYWogMjAwOC0wMi0yMiAqLworICBmb3IgKGogPSBTT0NLRVRfVFlQRTsgaiA8IE9VVFBVVF9FTkQ7IGorKykgeworICAgIG91dHB1dF9jc3ZfbGlzdFtpKytdID0gajsKKyAgfQorCit9CisKK3ZvaWQKK3NldF9vdXRwdXRfaHVtYW5fbGlzdF9kZWZhdWx0KCkgeworCisgIGludCBpLCBqOyAgLyogbGluZSwgY29sdW1uICovCisgIGVudW0gbmV0cGVyZl9vdXRwdXRfbmFtZSBrOworCisgIC8qIExpbmUgT25lIFNPQ0tFVF9UWVBFIHRvIFJFU1BPTlNFX1NJWkUgKi8KKyAgaSA9IDA7CisgIGogPSAwOworICBmb3IgKGsgPSBTT0NLRVRfVFlQRTsgayA8PSBSRVNQT05TRV9TSVpFOyBrKyspCisgICAgb3V0cHV0X2h1bWFuX2xpc3RbaV1baisrXSA9IGs7CisKKyAgLyogTGluZSBUd28gTE9DQUxfQ1BVX1VUSUwgdG8gVFJBTlNQT1JUX01TUyAqLworICBpID0gMTsKKyAgaiA9IDA7CisgIGZvciAoayA9IExPQ0FMX0NQVV9VVElMOyBrIDw9IFRSQU5TUE9SVF9NU1M7IGsrKykKKyAgICBvdXRwdXRfaHVtYW5fbGlzdFtpXVtqKytdID0gazsKKworICAvKiBMaW5lIFRocmVlIExPQ0FMX1NFTkRfVEhST1VHSFBVVCB0aHJvdWdodCBSRU1PVEVfQ09SSyAqLworICBpID0gMjsKKyAgaiA9IDA7CisgIGZvciAoayA9IExPQ0FMX1NFTkRfVEhST1VHSFBVVDsgayA8PSBSRU1PVEVfQ09SSzsgaysrKQorICAgIG91dHB1dF9odW1hbl9saXN0W2ldW2orK10gPSBrOworCisgIC8qIExpbmUgRm91ciBMT0NBTF9TWVNOQU1FIHRocm91Z2ggQ09NTUFORF9MSU5FICovCisgIGkgPSAzOworICBqID0gMDsKKyAgZm9yIChrID0gTE9DQUxfU1lTTkFNRTsgayA8PSBDT01NQU5EX0xJTkU7IGsrKykKKyAgICBvdXRwdXRfaHVtYW5fbGlzdFtpXVtqKytdID0gazsKKworfQorCit2b2lkCitwcmludF9vbW5pX2luaXRfbGlzdCgpIHsKKworICBpbnQgaTsKKworICAvKiBiZWx0cyBhbmQgc3VzcGVuZGVycyBldmVyeW9uZS4uLiAqLworICBmb3IgKGkgPSBPVVRQVVRfTk9ORTsgaSA8IE5FVFBFUkZfT1VUUFVUX01BWDsgaSsrKSB7CisgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLm91dHB1dF9uYW1lID0gaTsKKyAgICBuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0ubWF4X2xpbmVfbGVuID0gMDsKKyAgICBuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0udG90X2xpbmVfbGVuID0gMDsKKyAgICBuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0ubGluZVswXSA9ICIiOworICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5saW5lWzFdID0gIiI7CisgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW2ldLmxpbmVbMl0gPSAiIjsKKyAgICBuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0ubGluZVszXSA9ICIiOworICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5icmllZiA9ICIiOworICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtpXS5mb3JtYXQgPSAiIjsKKyAgICBuZXRwZXJmX291dHB1dF9zb3VyY2VbaV0uZGlzcGxheV92YWx1ZSA9IE5VTEw7CisgIH0KKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX05PTkVdLm91dHB1dF9uYW1lID0gT1VUUFVUX05PTkU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtPVVRQVVRfTk9ORV0ubGluZVswXSA9ICIgIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW09VVFBVVF9OT05FXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX05PTkVdLmRpc3BsYXlfdmFsdWUgPSAmIiAiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX05PTkVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoT1VUUFVUX05PTkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX05PTkVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoT1VUUFVUX05PTkUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT01NQU5EX0xJTkVdLm91dHB1dF9uYW1lID0gQ09NTUFORF9MSU5FOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09NTUFORF9MSU5FXS5saW5lWzBdID0gIkNvbW1hbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09NTUFORF9MSU5FXS5saW5lWzFdID0gIkxpbmUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09NTUFORF9MSU5FXS5mb3JtYXQgPSAiXCIlc1wiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0NPTU1BTkRfTElORV0uZGlzcGxheV92YWx1ZSA9IGNvbW1hbmRfbGluZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0NPTU1BTkRfTElORV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChDT01NQU5EX0xJTkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09NTUFORF9MSU5FXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKENPTU1BTkRfTElORSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1VVSURdLm91dHB1dF9uYW1lID0gVVVJRDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1VVSURdLmxpbmVbMF0gPSAiVGVzdCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtVVUlEXS5saW5lWzFdID0gIlVVSUQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVVVJRF0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1VVSURdLmRpc3BsYXlfdmFsdWUgPSB0ZXN0X3V1aWQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtVVUlEXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFVVSUQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVVVJRF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChVVUlEKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTVUxUX0JSQU5EXS5vdXRwdXRfbmFtZSA9IFJFU1VMVF9CUkFORDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFU1VMVF9CUkFORF0ubGluZVswXSA9ICJSZXN1bHQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTVUxUX0JSQU5EXS5saW5lWzFdID0gIlRhZyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVNVTFRfQlJBTkRdLmZvcm1hdCA9ICJcIiVzXCIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTVUxUX0JSQU5EXS5kaXNwbGF5X3ZhbHVlID0gcmVzdWx0X2JyYW5kOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTVUxUX0JSQU5EXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFU1VMVF9CUkFORCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVNVTFRfQlJBTkRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVTVUxUX0JSQU5EKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09DS0VUX1RZUEVdLm91dHB1dF9uYW1lID0gU09DS0VUX1RZUEU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT0NLRVRfVFlQRV0ubGluZVswXSA9ICJTb2NrZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09DS0VUX1RZUEVdLmxpbmVbMV0gPSAiVHlwZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT0NLRVRfVFlQRV0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NPQ0tFVF9UWVBFXS5kaXNwbGF5X3ZhbHVlID0gc29ja2V0X3R5cGVfc3RyOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09DS0VUX1RZUEVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoU09DS0VUX1RZUEUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09DS0VUX1RZUEVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoU09DS0VUX1RZUEUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtESVJFQ1RJT05dLm91dHB1dF9uYW1lID0gRElSRUNUSU9OOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbRElSRUNUSU9OXS5saW5lWzBdID0gIkRpcmVjdGlvbiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtESVJFQ1RJT05dLmxpbmVbMV0gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RJUkVDVElPTl0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RJUkVDVElPTl0uZGlzcGxheV92YWx1ZSA9IGRpcmVjdGlvbl9zdHI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtESVJFQ1RJT05dLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoRElSRUNUSU9OKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RJUkVDVElPTl0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChESVJFQ1RJT04pOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtQUk9UT0NPTF0ub3V0cHV0X25hbWUgPSBQUk9UT0NPTDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1BST1RPQ09MXS5saW5lWzBdID0gIlByb3RvY29sIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1BST1RPQ09MXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUFJPVE9DT0xdLmRpc3BsYXlfdmFsdWUgPSBwcm90b2NvbF9zdHI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtQUk9UT0NPTF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChQUk9UT0NPTCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtQUk9UT0NPTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChQUk9UT0NPTCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0VMQVBTRURfVElNRV0ub3V0cHV0X25hbWUgPSBFTEFQU0VEX1RJTUU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtFTEFQU0VEX1RJTUVdLmxpbmVbMF0gPSAiRWxhcHNlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtFTEFQU0VEX1RJTUVdLmxpbmVbMV0gPSAiVGltZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtFTEFQU0VEX1RJTUVdLmxpbmVbMl0gPSAiKHNlYykiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbRUxBUFNFRF9USU1FXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtFTEFQU0VEX1RJTUVdLmRpc3BsYXlfdmFsdWUgPSAmZWxhcHNlZF90aW1lX2RvdWJsZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0VMQVBTRURfVElNRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChFTEFQU0VEX1RJTUUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbRUxBUFNFRF9USU1FXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKEVMQVBTRURfVElNRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NPVVJDRV9QT1JUXS5vdXRwdXRfbmFtZSA9IFNPVVJDRV9QT1JUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09VUkNFX1BPUlRdLmxpbmVbMF0gPSAiU291cmNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NPVVJDRV9QT1JUXS5saW5lWzFdID0gIlBvcnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09VUkNFX1BPUlRdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfUE9SVF0uZGlzcGxheV92YWx1ZSA9IGxvY2FsX2RhdGFfcG9ydDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NPVVJDRV9QT1JUXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFNPVVJDRV9QT1JUKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NPVVJDRV9QT1JUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFNPVVJDRV9QT1JUKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09VUkNFX0FERFJdLm91dHB1dF9uYW1lID0gU09VUkNFX0FERFI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfQUREUl0ubGluZVswXSA9ICJTb3VyY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09VUkNFX0FERFJdLmxpbmVbMV0gPSAiQWRkcmVzcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfQUREUl0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NPVVJDRV9BRERSXS5kaXNwbGF5X3ZhbHVlID0gbG9jYWxfZGF0YV9hZGRyZXNzOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09VUkNFX0FERFJdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoU09VUkNFX0FERFIpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09VUkNFX0FERFJdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoU09VUkNFX0FERFIpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfRkFNSUxZXS5vdXRwdXRfbmFtZSA9IFNPVVJDRV9GQU1JTFk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfRkFNSUxZXS5saW5lWzBdID0gIlNvdXJjZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfRkFNSUxZXS5saW5lWzFdID0gIkZhbWlseSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfRkFNSUxZXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU09VUkNFX0ZBTUlMWV0uZGlzcGxheV92YWx1ZSA9ICZsb2NhbF9kYXRhX2ZhbWlseTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NPVVJDRV9GQU1JTFldLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoU09VUkNFX0ZBTUlMWSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTT1VSQ0VfRkFNSUxZXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFNPVVJDRV9GQU1JTFkpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtERVNUX1BPUlRdLm91dHB1dF9uYW1lID0gREVTVF9QT1JUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbREVTVF9QT1JUXS5saW5lWzBdID0gIkRlc3RpbmF0aW9uIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfUE9SVF0ubGluZVsxXSA9ICJQb3J0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfUE9SVF0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfUE9SVF0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9kYXRhX3BvcnQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtERVNUX1BPUlRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoREVTVF9QT1JUKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfUE9SVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChERVNUX1BPUlQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtERVNUX0FERFJdLm91dHB1dF9uYW1lID0gREVTVF9BRERSOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbREVTVF9BRERSXS5saW5lWzBdID0gIkRlc3RpbmF0aW9uIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfQUREUl0ubGluZVsxXSA9ICJBZGRyZXNzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfQUREUl0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfQUREUl0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9kYXRhX2FkZHJlc3M7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtERVNUX0FERFJdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoREVTVF9BRERSKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfQUREUl0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChERVNUX0FERFIpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtERVNUX0ZBTUlMWV0ub3V0cHV0X25hbWUgPSBERVNUX0ZBTUlMWTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfRkFNSUxZXS5saW5lWzBdID0gIkRlc3RpbmF0aW9uIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfRkFNSUxZXS5saW5lWzFdID0gIkZhbWlseSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtERVNUX0ZBTUlMWV0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfRkFNSUxZXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9kYXRhX2ZhbWlseTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfRkFNSUxZXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKERFU1RfRkFNSUxZKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0RFU1RfRkFNSUxZXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKERFU1RfRkFNSUxZKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF0ub3V0cHV0X25hbWUgPSBUSFJPVUdIUFVUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF0ubGluZVswXSA9ICJUaHJvdWdocHV0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRdLmxpbmVbMV0gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRdLmZvcm1hdCA9ICIlLjJmIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRdLmRpc3BsYXlfdmFsdWUgPSAmdGhydXB1dDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoVEhST1VHSFBVVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUSFJPVUdIUFVUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFRIUk9VR0hQVVQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX1RIUk9VR0hQVVRdLm91dHB1dF9uYW1lID0gTE9DQUxfU0VORF9USFJPVUdIUFVUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9USFJPVUdIUFVUXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfVEhST1VHSFBVVF0ubGluZVsxXSA9ICJTZW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfVEhST1VHSFBVVF0ubGluZVsyXSA9ICJUaHJvdWdocHV0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfVEhST1VHSFBVVF0uZm9ybWF0ID0gIiUuMmYiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9USFJPVUdIUFVUXS5kaXNwbGF5X3ZhbHVlID0gJmxvY2FsX3NlbmRfdGhydXB1dDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfVEhST1VHSFBVVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9TRU5EX1RIUk9VR0hQVVQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9USFJPVUdIUFVUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1NFTkRfVEhST1VHSFBVVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfVEhST1VHSFBVVF0ub3V0cHV0X25hbWUgPSBMT0NBTF9SRUNWX1RIUk9VR0hQVVQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1RIUk9VR0hQVVRdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9USFJPVUdIUFVUXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9USFJPVUdIUFVUXS5saW5lWzJdID0gIlRocm91Z2hwdXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9USFJPVUdIUFVUXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1RIUk9VR0hQVVRdLmRpc3BsYXlfdmFsdWUgPSAmbG9jYWxfcmVjdl90aHJ1cHV0OworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9USFJPVUdIUFVUXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1JFQ1ZfVEhST1VHSFBVVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1RIUk9VR0hQVVRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfUkVDVl9USFJPVUdIUFVUKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfVEhST1VHSFBVVF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfU0VORF9USFJPVUdIUFVUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfVEhST1VHSFBVVF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfVEhST1VHSFBVVF0ubGluZVsxXSA9ICJTZW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX1RIUk9VR0hQVVRdLmxpbmVbMl0gPSAiVGhyb3VnaHB1dCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9USFJPVUdIUFVUXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9USFJPVUdIUFVUXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9zZW5kX3RocnVwdXQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9USFJPVUdIUFVUXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9TRU5EX1RIUk9VR0hQVVQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfVEhST1VHSFBVVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfU0VORF9USFJPVUdIUFVUKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfVEhST1VHSFBVVF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfUkVDVl9USFJPVUdIUFVUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfVEhST1VHSFBVVF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfVEhST1VHSFBVVF0ubGluZVsxXSA9ICJSZWN2IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1RIUk9VR0hQVVRdLmxpbmVbMl0gPSAiVGhyb3VnaHB1dCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9USFJPVUdIUFVUXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9USFJPVUdIUFVUXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9yZWN2X3RocnVwdXQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9USFJPVUdIUFVUXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9SRUNWX1RIUk9VR0hQVVQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfVEhST1VHSFBVVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfUkVDVl9USFJPVUdIUFVUKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF9VTklUU10ub3V0cHV0X25hbWUgPSBUSFJPVUdIUFVUX1VOSVRTOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF9VTklUU10ubGluZVswXSA9ICJUaHJvdWdocHV0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRfVU5JVFNdLmxpbmVbMV0gPSAiVW5pdHMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF9VTklUU10uZm9ybWF0ID0gIiVzL3MiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF9VTklUU10uZGlzcGxheV92YWx1ZSA9IHRocnVwdXRfZm9ybWF0X3N0cjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRfVU5JVFNdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoVEhST1VHSFBVVF9VTklUUyk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUSFJPVUdIUFVUX1VOSVRTXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFRIUk9VR0hQVVRfVU5JVFMpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0xFVkVMXS5vdXRwdXRfbmFtZSA9IENPTkZJREVOQ0VfTEVWRUw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0xFVkVMXS5saW5lWzBdID0gIkNvbmZpZGVuY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9MRVZFTF0ubGluZVsxXSA9ICJMZXZlbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0xFVkVMXS5saW5lWzJdID0gIlBlcmNlbnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9MRVZFTF0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0NPTkZJREVOQ0VfTEVWRUxdLmRpc3BsYXlfdmFsdWUgPSAmY29uZmlkZW5jZV9sZXZlbDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0NPTkZJREVOQ0VfTEVWRUxdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoQ09ORklERU5DRV9MRVZFTCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0xFVkVMXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKENPTkZJREVOQ0VfTEVWRUwpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lOVEVSVkFMXS5vdXRwdXRfbmFtZSA9IENPTkZJREVOQ0VfSU5URVJWQUw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lOVEVSVkFMXS5saW5lWzBdID0gIkNvbmZpZGVuY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9JTlRFUlZBTF0ubGluZVsxXSA9ICJXaWR0aCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lOVEVSVkFMXS5saW5lWzJdID0gIlRhcmdldCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lOVEVSVkFMXS5mb3JtYXQgPSAiJWYiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9JTlRFUlZBTF0uZGlzcGxheV92YWx1ZSA9ICZpbnRlcnZhbF9wY3Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lOVEVSVkFMXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKENPTkZJREVOQ0VfSU5URVJWQUwpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9JTlRFUlZBTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChDT05GSURFTkNFX0lOVEVSVkFMKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9JVEVSQVRJT05dLm91dHB1dF9uYW1lID0gQ09ORklERU5DRV9JVEVSQVRJT047CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lURVJBVElPTl0ubGluZVswXSA9ICJDb25maWRlbmNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0NPTkZJREVOQ0VfSVRFUkFUSU9OXS5saW5lWzFdID0gIkl0ZXJhdGlvbnMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9JVEVSQVRJT05dLmxpbmVbMl0gPSAiUnVuIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0NPTkZJREVOQ0VfSVRFUkFUSU9OXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQ09ORklERU5DRV9JVEVSQVRJT05dLmRpc3BsYXlfdmFsdWUgPSAmY29uZmlkZW5jZV9pdGVyYXRpb247CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lURVJBVElPTl0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChDT05GSURFTkNFX0lURVJBVElPTik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtDT05GSURFTkNFX0lURVJBVElPTl0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChDT05GSURFTkNFX0lURVJBVElPTik7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRfQ09ORklEXS5vdXRwdXRfbmFtZSA9IFRIUk9VR0hQVVRfQ09ORklEOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF9DT05GSURdLmxpbmVbMF0gPSAiVGhyb3VnaHB1dCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUSFJPVUdIUFVUX0NPTkZJRF0ubGluZVsxXSA9ICJDb25maWRlbmNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RIUk9VR0hQVVRfQ09ORklEXS5saW5lWzJdID0gIldpZHRoICglKSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUSFJPVUdIUFVUX0NPTkZJRF0uZm9ybWF0ID0gIiUuM2YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVEhST1VHSFBVVF9DT05GSURdLmRpc3BsYXlfdmFsdWUgPSAmcmVzdWx0X2NvbmZpZF9wY3Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUSFJPVUdIUFVUX0NPTkZJRF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChUSFJPVUdIUFVUX0NPTkZJRCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUSFJPVUdIUFVUX0NPTkZJRF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChUSFJPVUdIUFVUX0NPTkZJRCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT05GSURdLm91dHB1dF9uYW1lID0gTE9DQUxfQ1BVX0NPTkZJRDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT05GSURdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0NPTkZJRF0ubGluZVsxXSA9ICJDUFUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0NPTkZJRF0ubGluZVsyXSA9ICJDb25maWRlbmNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT05GSURdLmxpbmVbM10gPSAiV2lkdGggKCUpIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT05GSURdLmZvcm1hdCA9ICIlLjNmIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT05GSURdLmRpc3BsYXlfdmFsdWUgPSAmbG9jX2NwdV9jb25maWRfcGN0OworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0NPTkZJRF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9DUFVfQ09ORklEKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT05GSURdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfQ1BVX0NPTkZJRCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfQ09ORklEXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9DUFVfQ09ORklEOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9DT05GSURdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfQ09ORklEXS5saW5lWzFdID0gIkNQVSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPTkZJRF0ubGluZVsyXSA9ICJDb25maWRlbmNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfQ09ORklEXS5saW5lWzNdID0gIldpZHRoICglKSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPTkZJRF0uZm9ybWF0ID0gIiUuM2YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9DT05GSURdLmRpc3BsYXlfdmFsdWUgPSAmcmVtX2NwdV9jb25maWRfcGN0OworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9DT05GSURdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0NQVV9DT05GSUQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9DT05GSURdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0NQVV9DT05GSUQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSVF9MQVRFTkNZXS5vdXRwdXRfbmFtZSA9IFJUX0xBVEVOQ1k7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSVF9MQVRFTkNZXS5saW5lWzBdID0gIlJvdW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JUX0xBVEVOQ1ldLmxpbmVbMV0gPSAiVHJpcCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSVF9MQVRFTkNZXS5saW5lWzJdID0gIkxhdGVuY3kiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlRfTEFURU5DWV0ubGluZVszXSA9ICJ1c2VjL3RyYW4iOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlRfTEFURU5DWV0uZm9ybWF0ID0gIiUuM2YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlRfTEFURU5DWV0uZGlzcGxheV92YWx1ZSA9ICZydHRfbGF0ZW5jeTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JUX0xBVEVOQ1ldLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUlRfTEFURU5DWSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSVF9MQVRFTkNZXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJUX0xBVEVOQ1kpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUUkFOU0FDVElPTl9SQVRFXS5vdXRwdXRfbmFtZSA9IFRSQU5TQUNUSU9OX1JBVEU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUUkFOU0FDVElPTl9SQVRFXS5saW5lWzBdID0gIlRyYW5zYWN0aW9uIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RSQU5TQUNUSU9OX1JBVEVdLmxpbmVbMV0gPSAiUmF0ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUUkFOU0FDVElPTl9SQVRFXS5saW5lWzJdID0gIlRyYW4vcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUUkFOU0FDVElPTl9SQVRFXS5mb3JtYXQgPSAiJS4zZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUUkFOU0FDVElPTl9SQVRFXS5kaXNwbGF5X3ZhbHVlID0gJnRyYW5zYWN0aW9uX3JhdGU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUUkFOU0FDVElPTl9SQVRFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFRSQU5TQUNUSU9OX1JBVEUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVFJBTlNBQ1RJT05fUkFURV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChUUkFOU0FDVElPTl9SQVRFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVFJBTlNQT1JUX01TU10ub3V0cHV0X25hbWUgPSBUUkFOU1BPUlRfTVNTOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVFJBTlNQT1JUX01TU10ubGluZVswXSA9ICJUcmFuc3BvcnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVFJBTlNQT1JUX01TU10ubGluZVsxXSA9ICJNU1MiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVFJBTlNQT1JUX01TU10ubGluZVsyXSA9ICJieXRlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtUUkFOU1BPUlRfTVNTXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVFJBTlNQT1JUX01TU10uZGlzcGxheV92YWx1ZSA9ICZ0cmFuc3BvcnRfbXNzOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbVFJBTlNQT1JUX01TU10ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChUUkFOU1BPUlRfTVNTKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1RSQU5TUE9SVF9NU1NdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoVFJBTlNQT1JUX01TUyk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFUVVFU1RfU0laRV0ub3V0cHV0X25hbWUgPSBSRVFVRVNUX1NJWkU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVFVRVNUX1NJWkVdLmxpbmVbMF0gPSAiUmVxdWVzdCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVFVRVNUX1NJWkVdLmxpbmVbMV0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVFVRVNUX1NJWkVdLmxpbmVbMl0gPSAiQnl0ZXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVRVUVTVF9TSVpFXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVRVUVTVF9TSVpFXS5kaXNwbGF5X3ZhbHVlID0gJnJlcV9zaXplOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVRVUVTVF9TSVpFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFUVVFU1RfU0laRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVFVRVNUX1NJWkVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVRVUVTVF9TSVpFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTUE9OU0VfU0laRV0ub3V0cHV0X25hbWUgPSBSRVNQT05TRV9TSVpFOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTUE9OU0VfU0laRV0ubGluZVswXSA9ICJSZXNwb25zZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVNQT05TRV9TSVpFXS5saW5lWzFdID0gIlNpemUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTUE9OU0VfU0laRV0ubGluZVsyXSA9ICJCeXRlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVNQT05TRV9TSVpFXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVTUE9OU0VfU0laRV0uZGlzcGxheV92YWx1ZSA9ICZyc3Bfc2l6ZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFU1BPTlNFX1NJWkVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVTUE9OU0VfU0laRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRVNQT05TRV9TSVpFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFU1BPTlNFX1NJWkUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtCVVJTVF9TSVpFXS5vdXRwdXRfbmFtZSA9IEJVUlNUX1NJWkU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtCVVJTVF9TSVpFXS5saW5lWzBdID0gIkluaXRpYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQlVSU1RfU0laRV0ubGluZVsxXSA9ICJCdXJzdCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtCVVJTVF9TSVpFXS5saW5lWzJdID0gIlJlcXVlc3RzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0JVUlNUX1NJWkVdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtCVVJTVF9TSVpFXS5kaXNwbGF5X3ZhbHVlID0gJmZpcnN0X2J1cnN0X3NpemU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtCVVJTVF9TSVpFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKEJVUlNUX1NJWkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbQlVSU1RfU0laRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChCVVJTVF9TSVpFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVfUkVRXS5vdXRwdXRfbmFtZSA9IExTU19TSVpFX1JFUTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFX1JFUV0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV9SRVFdLmxpbmVbMV0gPSAiU2VuZCBTb2NrZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVfUkVRXS5saW5lWzJdID0gIlNpemUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVfUkVRXS5saW5lWzNdID0gIlJlcXVlc3RlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV9SRVFdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV9SRVFdLmRpc3BsYXlfdmFsdWUgPSAmbHNzX3NpemVfcmVxOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVfUkVRXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExTU19TSVpFX1JFUSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV9SRVFdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTFNTX1NJWkVfUkVRKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVdLm91dHB1dF9uYW1lID0gTFNTX1NJWkU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV0ubGluZVsxXSA9ICJTZW5kIFNvY2tldCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV0ubGluZVsyXSA9ICJTaXplIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFXS5saW5lWzNdID0gIkluaXRpYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV0uZGlzcGxheV92YWx1ZSA9ICZsc3Nfc2l6ZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExTU19TSVpFKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExTU19TSVpFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVfRU5EXS5vdXRwdXRfbmFtZSA9IExTU19TSVpFX0VORDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFX0VORF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV9FTkRdLmxpbmVbMV0gPSAiU2VuZCBTb2NrZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVfRU5EXS5saW5lWzJdID0gIlNpemUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNTX1NJWkVfRU5EXS5saW5lWzNdID0gIkZpbmFsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFX0VORF0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFX0VORF0uZGlzcGxheV92YWx1ZSA9ICZsc3Nfc2l6ZV9lbmQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1NfU0laRV9FTkRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTFNTX1NJWkVfRU5EKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTU19TSVpFX0VORF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMU1NfU0laRV9FTkQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV9SRVFdLm91dHB1dF9uYW1lID0gTFNSX1NJWkVfUkVROworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVfUkVRXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFX1JFUV0ubGluZVsxXSA9ICJSZWN2IFNvY2tldCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV9SRVFdLmxpbmVbMl0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV9SRVFdLmxpbmVbM10gPSAiUmVxdWVzdGVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFX1JFUV0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFX1JFUV0uZGlzcGxheV92YWx1ZSA9ICZsc3Jfc2l6ZV9yZXE7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV9SRVFdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTFNSX1NJWkVfUkVRKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFX1JFUV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMU1JfU0laRV9SRVEpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV0ub3V0cHV0X25hbWUgPSBMU1JfU0laRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFXS5saW5lWzFdID0gIlJlY3YgU29ja2V0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFXS5saW5lWzJdID0gIlNpemUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVdLmxpbmVbM10gPSAiSW5pdGlhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFXS5kaXNwbGF5X3ZhbHVlID0gJmxzcl9zaXplOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTFNSX1NJWkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTFNSX1NJWkUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV9FTkRdLm91dHB1dF9uYW1lID0gTFNSX1NJWkVfRU5EOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVfRU5EXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFX0VORF0ubGluZVsxXSA9ICJSZWN2IFNvY2tldCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV9FTkRdLmxpbmVbMl0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMU1JfU0laRV9FTkRdLmxpbmVbM10gPSAiRmluYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVfRU5EXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVfRU5EXS5kaXNwbGF5X3ZhbHVlID0gJmxzcl9zaXplX2VuZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xTUl9TSVpFX0VORF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMU1JfU0laRV9FTkQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTFNSX1NJWkVfRU5EXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExTUl9TSVpFX0VORCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfU0laRV0ub3V0cHV0X25hbWUgPSBMT0NBTF9TRU5EX1NJWkU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX1NJWkVdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9TSVpFXS5saW5lWzFdID0gIlNlbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9TSVpFXS5saW5lWzJdID0gIlNpemUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9TSVpFXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX1NJWkVdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX1NJWkVdLmRpc3BsYXlfdmFsdWUgPSAmc2VuZF9zaXplOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9TSVpFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1NFTkRfU0laRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX1NJWkVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfU0VORF9TSVpFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9TSVpFXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1JFQ1ZfU0laRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfU0laRV0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1NJWkVdLmxpbmVbMV0gPSAiUmVjdiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1NJWkVdLmxpbmVbMl0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1NJWkVdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfU0laRV0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfU0laRV0uZGlzcGxheV92YWx1ZSA9ICZyZWN2X3NpemU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1NJWkVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfUkVDVl9TSVpFKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfU0laRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9SRUNWX1NJWkUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0NBTExTXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1NFTkRfQ0FMTFM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0NBTExTXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfQ0FMTFNdLmxpbmVbMV0gPSAiU2VuZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0NBTExTXS5saW5lWzJdID0gIkNhbGxzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfQ0FMTFNdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfQ0FMTFNdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0NBTExTXS5kaXNwbGF5X3ZhbHVlID0gJmxvY2FsX3NlbmRfY2FsbHM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0NBTExTXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1NFTkRfQ0FMTFMpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9DQUxMU10udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9TRU5EX0NBTExTKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9DQUxMU10ub3V0cHV0X25hbWUgPSBMT0NBTF9SRUNWX0NBTExTOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9DQUxMU10ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0NBTExTXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9DQUxMU10ubGluZVsyXSA9ICJDYWxscyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0NBTExTXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0NBTExTXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9DQUxMU10uZGlzcGxheV92YWx1ZSA9ICZsb2NhbF9yZWNlaXZlX2NhbGxzOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9DQUxMU10ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9SRUNWX0NBTExTKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfQ0FMTFNdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfUkVDVl9DQUxMUyk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9SRUNWXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0JZVEVTX1BFUl9SRUNWOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUEVSX1JFQ1ZdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUEVSX1JFQ1ZdLmxpbmVbMV0gPSAiQnl0ZXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUEVSX1JFQ1ZdLmxpbmVbMl0gPSAiUGVyIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9SRUNWXS5saW5lWzNdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUEVSX1JFQ1ZdLmZvcm1hdCA9ICIlLjJmIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9SRUNWXS5kaXNwbGF5X3ZhbHVlID0gJmJ5dGVzX3Blcl9yZWN2OworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUEVSX1JFQ1ZdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfQllURVNfUEVSX1JFQ1YpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUEVSX1JFQ1ZdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfQllURVNfUEVSX1JFQ1YpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19QRVJfU0VORF0ub3V0cHV0X25hbWUgPSBMT0NBTF9CWVRFU19QRVJfU0VORDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9TRU5EXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9TRU5EXS5saW5lWzFdID0gIkJ5dGVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9TRU5EXS5saW5lWzJdID0gIlBlciI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19QRVJfU0VORF0ubGluZVszXSA9ICJTZW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9TRU5EXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19QRVJfU0VORF0uZGlzcGxheV92YWx1ZSA9ICZieXRlc19wZXJfc2VuZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9TRU5EXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0JZVEVTX1BFUl9TRU5EKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1BFUl9TRU5EXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0JZVEVTX1BFUl9TRU5EKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUkVDVkRdLm91dHB1dF9uYW1lID0gTE9DQUxfQllURVNfUkVDVkQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19SRUNWRF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19SRUNWRF0ubGluZVsxXSA9ICJCeXRlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19SRUNWRF0ubGluZVsyXSA9ICJSZWNlaXZlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19SRUNWRF0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUkVDVkRdLmZvcm1hdCA9ICIlbGxkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1JFQ1ZEXS5kaXNwbGF5X3ZhbHVlID0gJmJ5dGVzX3JlY2VpdmVkOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUkVDVkRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfQllURVNfUkVDVkQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfUkVDVkRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfQllURVNfUkVDVkQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19TRU5UXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0JZVEVTX1NFTlQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19TRU5UXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1NFTlRdLmxpbmVbMV0gPSAiQnl0ZXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfU0VOVF0ubGluZVsyXSA9ICJTZW50IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1NFTlRdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1NFTlRdLmZvcm1hdCA9ICIlbGxkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1NFTlRdLmRpc3BsYXlfdmFsdWUgPSAmYnl0ZXNfc2VudDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1NFTlRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfQllURVNfU0VOVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19TRU5UXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0JZVEVTX1NFTlQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19YRkVSRF0ub3V0cHV0X25hbWUgPSBMT0NBTF9CWVRFU19YRkVSRDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1hGRVJEXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1hGRVJEXS5saW5lWzFdID0gIkJ5dGVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1hGRVJEXS5saW5lWzJdID0gIlhmZXJyZWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQllURVNfWEZFUkRdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1hGRVJEXS5mb3JtYXQgPSAiJS4wZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9CWVRFU19YRkVSRF0uZGlzcGxheV92YWx1ZSA9ICZieXRlc194ZmVyZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1hGRVJEXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0JZVEVTX1hGRVJEKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0JZVEVTX1hGRVJEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0JZVEVTX1hGRVJEKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9XSURUSF0ub3V0cHV0X25hbWUgPSBMT0NBTF9TRU5EX1dJRFRIOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9XSURUSF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX1dJRFRIXS5saW5lWzFdID0gIlNlbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9XSURUSF0ubGluZVsyXSA9ICJXaWR0aCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX1dJRFRIXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9XSURUSF0uZGlzcGxheV92YWx1ZSA9ICZzZW5kX3dpZHRoOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9XSURUSF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9TRU5EX1dJRFRIKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfV0lEVEhdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfU0VORF9XSURUSCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfV0lEVEhdLm91dHB1dF9uYW1lID0gTE9DQUxfUkVDVl9XSURUSDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfV0lEVEhdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9XSURUSF0ubGluZVsxXSA9ICJSZWN2IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfV0lEVEhdLmxpbmVbMl0gPSAiV2lkdGgiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9XSURUSF0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfV0lEVEhdLmRpc3BsYXlfdmFsdWUgPSAmcmVjdl93aWR0aDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfV0lEVEhdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfUkVDVl9XSURUSCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX1dJRFRIXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1JFQ1ZfV0lEVEgpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX09GRlNFVF0ub3V0cHV0X25hbWUgPSBMT0NBTF9TRU5EX09GRlNFVDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfT0ZGU0VUXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfT0ZGU0VUXS5saW5lWzFdID0gIlNlbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9PRkZTRVRdLmxpbmVbMl0gPSAiT2Zmc2V0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfT0ZGU0VUXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9PRkZTRVRdLmRpc3BsYXlfdmFsdWUgPSAmbG9jYWxfc2VuZF9vZmZzZXQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX09GRlNFVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9TRU5EX09GRlNFVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX09GRlNFVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9TRU5EX09GRlNFVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfT0ZGU0VUXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1JFQ1ZfT0ZGU0VUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9PRkZTRVRdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9PRkZTRVRdLmxpbmVbMV0gPSAiUmVjdiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX09GRlNFVF0ubGluZVsyXSA9ICJPZmZzZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9PRkZTRVRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX09GRlNFVF0uZGlzcGxheV92YWx1ZSA9ICZsb2NhbF9yZWN2X29mZnNldDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfT0ZGU0VUXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1JFQ1ZfT0ZGU0VUKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfT0ZGU0VUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1JFQ1ZfT0ZGU0VUKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9BTElHTl0ub3V0cHV0X25hbWUgPSBMT0NBTF9SRUNWX0FMSUdOOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9BTElHTl0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0FMSUdOXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9BTElHTl0ubGluZVsyXSA9ICJBbGlnbm1lbnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9BTElHTl0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfQUxJR05dLmRpc3BsYXlfdmFsdWUgPSAmbG9jYWxfcmVjdl9hbGlnbjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfQUxJR05dLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfUkVDVl9BTElHTik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0FMSUdOXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1JFQ1ZfQUxJR04pOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0FMSUdOXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1NFTkRfQUxJR047CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0FMSUdOXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfQUxJR05dLmxpbmVbMV0gPSAiU2VuZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0FMSUdOXS5saW5lWzJdID0gIkFsaWdubWVudCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0FMSUdOXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9BTElHTl0uZGlzcGxheV92YWx1ZSA9ICZsb2NhbF9zZW5kX2FsaWduOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9BTElHTl0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9TRU5EX0FMSUdOKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfQUxJR05dLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfU0VORF9BTElHTik7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfRElSVFlfQ09VTlRdLm91dHB1dF9uYW1lID0gTE9DQUxfU0VORF9ESVJUWV9DT1VOVDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfRElSVFlfQ09VTlRdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9ESVJUWV9DT1VOVF0ubGluZVsxXSA9ICJTZW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFTkRfRElSVFlfQ09VTlRdLmxpbmVbMl0gPSAiRGlydHkiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9ESVJUWV9DT1VOVF0ubGluZVszXSA9ICJDb3VudCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0RJUlRZX0NPVU5UXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9ESVJUWV9DT1VOVF0uZGlzcGxheV92YWx1ZSA9ICZsb2NfZGlydHlfY291bnQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRU5EX0RJUlRZX0NPVU5UXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1NFTkRfRElSVFlfQ09VTlQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VORF9ESVJUWV9DT1VOVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9TRU5EX0RJUlRZX0NPVU5UKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9ESVJUWV9DT1VOVF0ub3V0cHV0X25hbWUgPSBMT0NBTF9SRUNWX0RJUlRZX0NPVU5UOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9ESVJUWV9DT1VOVF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0RJUlRZX0NPVU5UXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9ESVJUWV9DT1VOVF0ubGluZVsyXSA9ICJEaXJ0eSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0RJUlRZX0NPVU5UXS5saW5lWzNdID0gIkNvdW50IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfRElSVFlfQ09VTlRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0RJUlRZX0NPVU5UXS5kaXNwbGF5X3ZhbHVlID0gJmxvY19kaXJ0eV9jb3VudDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfRElSVFlfQ09VTlRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfUkVDVl9ESVJUWV9DT1VOVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0RJUlRZX0NPVU5UXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1JFQ1ZfRElSVFlfQ09VTlQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0NMRUFOX0NPVU5UXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1JFQ1ZfQ0xFQU5fQ09VTlQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0NMRUFOX0NPVU5UXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfQ0xFQU5fQ09VTlRdLmxpbmVbMV0gPSAiUmVjdiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUNWX0NMRUFOX0NPVU5UXS5saW5lWzJdID0gIkNsZWFuIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfQ0xFQU5fQ09VTlRdLmxpbmVbM10gPSAiQ291bnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9DTEVBTl9DT1VOVF0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfQ0xFQU5fQ09VTlRdLmRpc3BsYXlfdmFsdWUgPSAmbG9jX2NsZWFuX2NvdW50OworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVDVl9DTEVBTl9DT1VOVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9SRUNWX0NMRUFOX0NPVU5UKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFQ1ZfQ0xFQU5fQ09VTlRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfUkVDVl9DTEVBTl9DT1VOVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9VVElMXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0NQVV9VVElMOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1VUSUxdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1VUSUxdLmxpbmVbMV0gPSAiQ1BVIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9VVElMXS5saW5lWzJdID0gIlV0aWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1VUSUxdLmxpbmVbM10gPSAiJSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfVVRJTF0uZm9ybWF0ID0gIiUuMmYiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1VUSUxdLmRpc3BsYXlfdmFsdWUgPSAmbG9jYWxfY3B1X3V0aWxpemF0aW9uX2RvdWJsZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9VVElMXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0NQVV9VVElMKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9VVElMXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0NQVV9VVElMKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1BFQUtfVVRJTF0ub3V0cHV0X25hbWUgPSBMT0NBTF9DUFVfUEVBS19VVElMOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1BFQUtfVVRJTF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfUEVBS19VVElMXS5saW5lWzFdID0gIlBlYWsiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1BFQUtfVVRJTF0ubGluZVsyXSA9ICJQZXIgQ1BVIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9QRUFLX1VUSUxdLmxpbmVbM10gPSAiVXRpbCAlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9QRUFLX1VUSUxdLmZvcm1hdCA9ICIlLjJmIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9QRUFLX1VUSUxdLmRpc3BsYXlfdmFsdWUgPSAmbGliX2xvY2FsX3BlYWtfY3B1X3V0aWw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfUEVBS19VVElMXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0NQVV9QRUFLX1VUSUwpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1BFQUtfVVRJTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9DUFVfUEVBS19VVElMKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1BFQUtfSURdLm91dHB1dF9uYW1lID0gTE9DQUxfQ1BVX1BFQUtfSUQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfUEVBS19JRF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfUEVBS19JRF0ubGluZVsxXSA9ICJQZWFrIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9QRUFLX0lEXS5saW5lWzJdID0gIlBlciBDUFUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1BFQUtfSURdLmxpbmVbM10gPSAiSUQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX1BFQUtfSURdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfUEVBS19JRF0uZGlzcGxheV92YWx1ZSA9ICZsaWJfbG9jYWxfcGVha19jcHVfaWQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfUEVBS19JRF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9DUFVfUEVBS19JRCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfUEVBS19JRF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9DUFVfUEVBS19JRCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9CSU5EXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0NQVV9CSU5EOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0JJTkRdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0JJTkRdLmxpbmVbMV0gPSAiQ1BVIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9CSU5EXS5saW5lWzJdID0gIkJpbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0JJTkRdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9CSU5EXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0JJTkRdLmRpc3BsYXlfdmFsdWUgPSAmbG9jYWxfcHJvY19hZmZpbml0eTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9CSU5EXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0NQVV9CSU5EKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9CSU5EXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0NQVV9CSU5EKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0RdLm91dHB1dF9uYW1lID0gTE9DQUxfU0Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRF0ubGluZVsxXSA9ICJTZXJ2aWNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NEXS5saW5lWzJdID0gIkRlbWFuZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRF0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0RdLmZvcm1hdCA9ICIlLjNmIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NEXS5kaXNwbGF5X3ZhbHVlID0gJmxvY2FsX3NlcnZpY2VfZGVtYW5kX2RvdWJsZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NEXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1NEKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1NEKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU0RfVU5JVFNdLm91dHB1dF9uYW1lID0gU0RfVU5JVFM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTRF9VTklUU10ubGluZVswXSA9ICJTZXJ2aWNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NEX1VOSVRTXS5saW5lWzFdID0gIkRlbWFuZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTRF9VTklUU10ubGluZVsyXSA9ICJVbml0cyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtTRF9VTklUU10uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1NEX1VOSVRTXS5kaXNwbGF5X3ZhbHVlID0gc2Rfc3RyOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU0RfVU5JVFNdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoU0RfVU5JVFMpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbU0RfVU5JVFNdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoU0RfVU5JVFMpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTUVUSE9EXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0NQVV9NRVRIT0Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTUVUSE9EXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9NRVRIT0RdLmxpbmVbMV0gPSAiQ1BVIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9NRVRIT0RdLmxpbmVbMl0gPSAiVXRpbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTUVUSE9EXS5saW5lWzNdID0gIk1ldGhvZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTUVUSE9EXS5mb3JtYXQgPSAiJWMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX01FVEhPRF0uZGlzcGxheV92YWx1ZSA9ICZsb2NhbF9jcHVfbWV0aG9kOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX01FVEhPRF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9DUFVfTUVUSE9EKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9NRVRIT0RdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfQ1BVX01FVEhPRCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT1VOVF0ub3V0cHV0X25hbWUgPSBMT0NBTF9DUFVfQ09VTlQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfQ09VTlRdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0NPVU5UXS5saW5lWzFdID0gIkNQVSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfQ09VTlRdLmxpbmVbMl0gPSAiQ291bnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0NPVU5UXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0NPVU5UXS5kaXNwbGF5X3ZhbHVlID0gJmxpYl9udW1fbG9jX2NwdXM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfQ09VTlRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfQ1BVX0NPVU5UKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9DT1VOVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9DUFVfQ09VTlQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9OT0RFTEFZXS5vdXRwdXRfbmFtZSA9IExPQ0FMX05PREVMQVk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9OT0RFTEFZXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX05PREVMQVldLmxpbmVbMV0gPSAiTk9ERUxBWSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9OT0RFTEFZXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9OT0RFTEFZXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9OT0RFTEFZXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfTk9ERUxBWV0uZGlzcGxheV92YWx1ZSA9ICZsb2Nfbm9kZWxheTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX05PREVMQVldLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfTk9ERUxBWSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9OT0RFTEFZXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX05PREVMQVkpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DT1JLXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0NPUks7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DT1JLXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NPUktdLmxpbmVbMV0gPSAiQ29yayI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DT1JLXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DT1JLXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DT1JLXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ09SS10uZGlzcGxheV92YWx1ZSA9ICZsb2NfdGNwY29yazsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NPUktdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfQ09SSyk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DT1JLXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0NPUkspOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9SRVFdLm91dHB1dF9uYW1lID0gUlNTX1NJWkVfUkVROworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVfUkVRXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9SRVFdLmxpbmVbMV0gPSAiU2VuZCBTb2NrZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVfUkVRXS5saW5lWzJdID0gIlNpemUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVfUkVRXS5saW5lWzNdID0gIlJlcXVlc3RlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9SRVFdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9SRVFdLmRpc3BsYXlfdmFsdWUgPSAmcnNzX3NpemVfcmVxOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVfUkVRXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJTU19TSVpFX1JFUSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9SRVFdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUlNTX1NJWkVfUkVRKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVdLm91dHB1dF9uYW1lID0gUlNTX1NJWkU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVdLmxpbmVbMV0gPSAiU2VuZCBTb2NrZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVdLmxpbmVbMl0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV0ubGluZVszXSA9ICJJbml0aWFsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTU19TSVpFXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVdLmRpc3BsYXlfdmFsdWUgPSAmcnNzX3NpemU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSU1NfU0laRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSU1NfU0laRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTU19TSVpFX0VORF0ub3V0cHV0X25hbWUgPSBSU1NfU0laRV9FTkQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9FTkRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTU19TSVpFX0VORF0ubGluZVsxXSA9ICJTZW5kIFNvY2tldCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9FTkRdLmxpbmVbMl0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1NfU0laRV9FTkRdLmxpbmVbM10gPSAiRmluYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVfRU5EXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVfRU5EXS5kaXNwbGF5X3ZhbHVlID0gJnJzc19zaXplX2VuZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTU19TSVpFX0VORF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSU1NfU0laRV9FTkQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNTX1NJWkVfRU5EXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJTU19TSVpFX0VORCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX1JFUV0ub3V0cHV0X25hbWUgPSBSU1JfU0laRV9SRVE7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV9SRVFdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX1JFUV0ubGluZVsxXSA9ICJSZWN2IFNvY2tldCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV9SRVFdLmxpbmVbMl0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV9SRVFdLmxpbmVbM10gPSAiUmVxdWVzdGVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX1JFUV0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX1JFUV0uZGlzcGxheV92YWx1ZSA9ICZyc3Jfc2l6ZV9yZXE7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV9SRVFdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUlNSX1NJWkVfUkVRKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX1JFUV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSU1JfU0laRV9SRVEpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV0ub3V0cHV0X25hbWUgPSBSU1JfU0laRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV0ubGluZVsxXSA9ICJSZWN2IFNvY2tldCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV0ubGluZVsyXSA9ICJTaXplIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFXS5saW5lWzNdID0gIkluaXRpYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNSX1NJWkVdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV0uZGlzcGxheV92YWx1ZSA9ICZyc3Jfc2l6ZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJTUl9TSVpFKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJTUl9TSVpFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNSX1NJWkVfRU5EXS5vdXRwdXRfbmFtZSA9IFJTUl9TSVpFX0VORDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX0VORF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNSX1NJWkVfRU5EXS5saW5lWzFdID0gIlJlY3YgU29ja2V0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX0VORF0ubGluZVsyXSA9ICJTaXplIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JTUl9TSVpFX0VORF0ubGluZVszXSA9ICJGaW5hbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV9FTkRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV9FTkRdLmRpc3BsYXlfdmFsdWUgPSAmcnNyX3NpemVfZW5kOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUlNSX1NJWkVfRU5EXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJTUl9TSVpFX0VORCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSU1JfU0laRV9FTkRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUlNSX1NJWkVfRU5EKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfU0laRV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfU0VORF9TSVpFOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfU0laRV0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfU0laRV0ubGluZVsxXSA9ICJTZW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX1NJWkVdLmxpbmVbMl0gPSAiU2l6ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9TSVpFXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9TSVpFXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfU0laRV0uZGlzcGxheV92YWx1ZSA9ICZyZW1vdGVfc2VuZF9zaXplOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfU0laRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VORF9TSVpFKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX1NJWkVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX1NFTkRfU0laRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1NJWkVdLm91dHB1dF9uYW1lID0gUkVNT1RFX1JFQ1ZfU0laRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1NJWkVdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1NJWkVdLmxpbmVbMV0gPSAiUmVjdiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9TSVpFXS5saW5lWzJdID0gIlNpemUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfU0laRV0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfU0laRV0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1NJWkVdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX3JlY3Zfc2l6ZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1NJWkVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX1JFQ1ZfU0laRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9TSVpFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9SRUNWX1NJWkUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9DQUxMU10ub3V0cHV0X25hbWUgPSBSRU1PVEVfU0VORF9DQUxMUzsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0NBTExTXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9DQUxMU10ubGluZVsxXSA9ICJTZW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0NBTExTXS5saW5lWzJdID0gIkNhbGxzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0NBTExTXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9DQUxMU10uZm9ybWF0ID0gIiVsbGQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfQ0FMTFNdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX3NlbmRfY2FsbHM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9DQUxMU10ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VORF9DQUxMUyk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9DQUxMU10udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfU0VORF9DQUxMUyk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0NBTExTXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9SRUNWX0NBTExTOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQ0FMTFNdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0NBTExTXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQ0FMTFNdLmxpbmVbMl0gPSAiQ2FsbHMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQ0FMTFNdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0NBTExTXS5mb3JtYXQgPSAiJWxsZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9DQUxMU10uZGlzcGxheV92YWx1ZSA9ICZyZW1vdGVfcmVjZWl2ZV9jYWxsczsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0NBTExTXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9SRUNWX0NBTExTKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0NBTExTXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9SRUNWX0NBTExTKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9SRUNWXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9CWVRFU19QRVJfUkVDVjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19QRVJfUkVDVl0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9SRUNWXS5saW5lWzFdID0gIkJ5dGVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19QRVJfUkVDVl0ubGluZVsyXSA9ICJQZXIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9SRUNWXS5saW5lWzNdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9SRUNWXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfUEVSX1JFQ1ZdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX2J5dGVzX3Blcl9yZWN2OworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9SRUNWXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9CWVRFU19QRVJfUkVDVik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfUEVSX1JFQ1ZdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0JZVEVTX1BFUl9SRUNWKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9TRU5EXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9CWVRFU19QRVJfU0VORDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19QRVJfU0VORF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9TRU5EXS5saW5lWzFdID0gIkJ5dGVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19QRVJfU0VORF0ubGluZVsyXSA9ICJQZXIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9TRU5EXS5saW5lWzNdID0gIlNlbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9TRU5EXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfUEVSX1NFTkRdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX2J5dGVzX3Blcl9zZW5kOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1BFUl9TRU5EXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9CWVRFU19QRVJfU0VORCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfUEVSX1NFTkRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0JZVEVTX1BFUl9TRU5EKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1JFQ1ZEXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9CWVRFU19SRUNWRDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19SRUNWRF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1JFQ1ZEXS5saW5lWzFdID0gIkJ5dGVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19SRUNWRF0ubGluZVsyXSA9ICJSZWNlaXZlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfUkVDVkRdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19SRUNWRF0uZm9ybWF0ID0gIiVsbGQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1JFQ1ZEXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9ieXRlc19yZWNlaXZlZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19SRUNWRF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfQllURVNfUkVDVkQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1JFQ1ZEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9CWVRFU19SRUNWRCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19TRU5UXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9CWVRFU19TRU5UOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1NFTlRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19TRU5UXS5saW5lWzFdID0gIkJ5dGVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19TRU5UXS5saW5lWzJdID0gIlNlbnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1NFTlRdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19TRU5UXS5mb3JtYXQgPSAiJWxsZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfU0VOVF0uZGlzcGxheV92YWx1ZSA9ICZyZW1vdGVfYnl0ZXNfc2VudDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19TRU5UXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9CWVRFU19TRU5UKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19TRU5UXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9CWVRFU19TRU5UKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1hGRVJEXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9CWVRFU19YRkVSRDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19YRkVSRF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1hGRVJEXS5saW5lWzFdID0gIkJ5dGVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19YRkVSRF0ubGluZVsyXSA9ICJYZmVycmVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9CWVRFU19YRkVSRF0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1hGRVJEXS5mb3JtYXQgPSAiJS4wZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfWEZFUkRdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX2J5dGVzX3hmZXJkOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0JZVEVTX1hGRVJEXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9CWVRFU19YRkVSRCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQllURVNfWEZFUkRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0JZVEVTX1hGRVJEKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfV0lEVEhdLm91dHB1dF9uYW1lID0gUkVNT1RFX1NFTkRfV0lEVEg7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9XSURUSF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfV0lEVEhdLmxpbmVbMV0gPSAiU2VuZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9XSURUSF0ubGluZVsyXSA9ICJXaWR0aCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9XSURUSF0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX1dJRFRIXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9zZW5kX3dpZHRoOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfV0lEVEhdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX1NFTkRfV0lEVEgpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfV0lEVEhdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX1NFTkRfV0lEVEgpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9XSURUSF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfUkVDVl9XSURUSDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1dJRFRIXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9XSURUSF0ubGluZVsxXSA9ICJSZWN2IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1dJRFRIXS5saW5lWzJdID0gIldpZHRoIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX1dJRFRIXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfV0lEVEhdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX3JlY3Zfd2lkdGg7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9XSURUSF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfUkVDVl9XSURUSCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9XSURUSF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfUkVDVl9XSURUSCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX09GRlNFVF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfU0VORF9PRkZTRVQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9PRkZTRVRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX09GRlNFVF0ubGluZVsxXSA9ICJTZW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX09GRlNFVF0ubGluZVsyXSA9ICJPZmZzZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfT0ZGU0VUXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfT0ZGU0VUXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9zZW5kX29mZnNldDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX09GRlNFVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VORF9PRkZTRVQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfT0ZGU0VUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9TRU5EX09GRlNFVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX09GRlNFVF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfUkVDVl9PRkZTRVQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9PRkZTRVRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX09GRlNFVF0ubGluZVsxXSA9ICJSZWN2IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX09GRlNFVF0ubGluZVsyXSA9ICJPZmZzZXQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfT0ZGU0VUXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfT0ZGU0VUXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9yZWN2X29mZnNldDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX09GRlNFVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfUkVDVl9PRkZTRVQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfT0ZGU0VUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9SRUNWX09GRlNFVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0FMSUdOXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9SRUNWX0FMSUdOOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQUxJR05dLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0FMSUdOXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQUxJR05dLmxpbmVbMl0gPSAiQWxpZ25tZW50IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0FMSUdOXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQUxJR05dLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX3JlY3ZfYWxpZ247CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9BTElHTl0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfUkVDVl9BTElHTik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9BTElHTl0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfUkVDVl9BTElHTik7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0FMSUdOXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9TRU5EX0FMSUdOOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfQUxJR05dLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0FMSUdOXS5saW5lWzFdID0gIlNlbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfQUxJR05dLmxpbmVbMl0gPSAiQWxpZ25tZW50IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0FMSUdOXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfQUxJR05dLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX3NlbmRfYWxpZ247CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9BTElHTl0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VORF9BTElHTik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9BTElHTl0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfU0VORF9BTElHTik7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0RJUlRZX0NPVU5UXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9TRU5EX0RJUlRZX0NPVU5UOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfRElSVFlfQ09VTlRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRU5EX0RJUlRZX0NPVU5UXS5saW5lWzFdID0gIlNlbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfRElSVFlfQ09VTlRdLmxpbmVbMl0gPSAiRGlydHkiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfRElSVFlfQ09VTlRdLmxpbmVbM10gPSAiQ291bnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFTkRfRElSVFlfQ09VTlRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9ESVJUWV9DT1VOVF0uZGlzcGxheV92YWx1ZSA9ICZyZW1fZGlydHlfY291bnQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9ESVJUWV9DT1VOVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VORF9ESVJUWV9DT1VOVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VORF9ESVJUWV9DT1VOVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfU0VORF9ESVJUWV9DT1VOVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0RJUlRZX0NPVU5UXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9SRUNWX0RJUlRZX0NPVU5UOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfRElSVFlfQ09VTlRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0RJUlRZX0NPVU5UXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfRElSVFlfQ09VTlRdLmxpbmVbMl0gPSAiRGlydHkiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfRElSVFlfQ09VTlRdLmxpbmVbM10gPSAiQ291bnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfRElSVFlfQ09VTlRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9ESVJUWV9DT1VOVF0uZGlzcGxheV92YWx1ZSA9ICZyZW1fZGlydHlfY291bnQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9ESVJUWV9DT1VOVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfUkVDVl9ESVJUWV9DT1VOVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9ESVJUWV9DT1VOVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfUkVDVl9ESVJUWV9DT1VOVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0NMRUFOX0NPVU5UXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9SRUNWX0NMRUFOX0NPVU5UOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQ0xFQU5fQ09VTlRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUNWX0NMRUFOX0NPVU5UXS5saW5lWzFdID0gIlJlY3YiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQ0xFQU5fQ09VTlRdLmxpbmVbMl0gPSAiQ2xlYW4iOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQ0xFQU5fQ09VTlRdLmxpbmVbM10gPSAiQ291bnQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFQ1ZfQ0xFQU5fQ09VTlRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9DTEVBTl9DT1VOVF0uZGlzcGxheV92YWx1ZSA9ICZyZW1fY2xlYW5fY291bnQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9DTEVBTl9DT1VOVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfUkVDVl9DTEVBTl9DT1VOVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVDVl9DTEVBTl9DT1VOVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfUkVDVl9DTEVBTl9DT1VOVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfVVRJTF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfQ1BVX1VUSUw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1VUSUxdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfVVRJTF0ubGluZVsxXSA9ICJDUFUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9VVElMXS5saW5lWzJdID0gIlV0aWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9VVElMXS5saW5lWzNdID0gIiUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9VVElMXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1VUSUxdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX2NwdV91dGlsaXphdGlvbl9kb3VibGU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1VUSUxdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0NQVV9VVElMKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfVVRJTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfQ1BVX1VUSUwpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfVVRJTF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfQ1BVX1BFQUtfVVRJTDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19VVElMXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfVVRJTF0ubGluZVsxXSA9ICJQZWFrIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19VVElMXS5saW5lWzJdID0gIlBlciBDUFUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9QRUFLX1VUSUxdLmxpbmVbM10gPSAiVXRpbCAlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19VVElMXS5mb3JtYXQgPSAiJS4yZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfVVRJTF0uZGlzcGxheV92YWx1ZSA9ICZsaWJfcmVtb3RlX3BlYWtfY3B1X3V0aWw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfVVRJTF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfQ1BVX1BFQUtfVVRJTCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfVVRJTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfQ1BVX1BFQUtfVVRJTCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19JRF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfQ1BVX1BFQUtfSUQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfSURdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19JRF0ubGluZVsxXSA9ICJQZWFrIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19JRF0ubGluZVsyXSA9ICJQZXIgQ1BVIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19JRF0ubGluZVszXSA9ICJJRCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfSURdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX1BFQUtfSURdLmRpc3BsYXlfdmFsdWUgPSAmbGliX3JlbW90ZV9wZWFrX2NwdV9pZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfUEVBS19JRF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfQ1BVX1BFQUtfSUQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9QRUFLX0lEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9DUFVfUEVBS19JRCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfQklORF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfQ1BVX0JJTkQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0JJTkRdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfQklORF0ubGluZVsxXSA9ICJDUFUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9CSU5EXS5saW5lWzJdID0gIkJpbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9CSU5EXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0JJTkRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0JJTkRdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX3Byb2NfYWZmaW5pdHk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0JJTkRdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0NQVV9CSU5EKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfQklORF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfQ1BVX0JJTkQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0RdLm91dHB1dF9uYW1lID0gUkVNT1RFX1NEOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NEXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0RdLmxpbmVbMV0gPSAiU2VydmljZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0RdLmxpbmVbMl0gPSAiRGVtYW5kIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRF0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NEXS5mb3JtYXQgPSAiJS4zZiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0RdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kX2RvdWJsZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0QpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9TRCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfTUVUSE9EXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9DUFVfTUVUSE9EOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NRVRIT0RdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfTUVUSE9EXS5saW5lWzFdID0gIkNQVSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX01FVEhPRF0ubGluZVsyXSA9ICJVdGlsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfTUVUSE9EXS5saW5lWzNdID0gIk1ldGhvZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX01FVEhPRF0uZm9ybWF0ID0gIiVjIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfTUVUSE9EXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9jcHVfbWV0aG9kOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NRVRIT0RdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0NQVV9NRVRIT0QpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NRVRIT0RdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0NQVV9NRVRIT0QpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPVU5UXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9DUFVfQ09VTlQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPVU5UXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPVU5UXS5saW5lWzFdID0gIkNQVSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPVU5UXS5saW5lWzJdID0gIkNvdW50IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfQ09VTlRdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPVU5UXS5kaXNwbGF5X3ZhbHVlID0gJmxpYl9udW1fcmVtX2NwdXM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0NPVU5UXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9DUFVfQ09VTlQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9DT1VOVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfQ1BVX0NPVU5UKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX05PREVMQVldLm91dHB1dF9uYW1lID0gUkVNT1RFX05PREVMQVk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTk9ERUxBWV0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX05PREVMQVldLmxpbmVbMV0gPSAiTk9ERUxBWSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTk9ERUxBWV0ubGluZVsyXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX05PREVMQVldLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9OT0RFTEFZXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX05PREVMQVldLmRpc3BsYXlfdmFsdWUgPSAmcmVtX25vZGVsYXk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTk9ERUxBWV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfTk9ERUxBWSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTk9ERUxBWV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfTk9ERUxBWSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DT1JLXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9DT1JLOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NPUktdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DT1JLXS5saW5lWzFdID0gIkNvcmsiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NPUktdLmxpbmVbMl0gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DT1JLXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ09SS10uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DT1JLXS5kaXNwbGF5X3ZhbHVlID0gJnJlbV90Y3Bjb3JrOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NPUktdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0NPUkspOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NPUktdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0NPUkspOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9EUklWRVJfTkFNRV0ub3V0cHV0X25hbWUgPSBMT0NBTF9EUklWRVJfTkFNRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9OQU1FXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9OQU1FXS5saW5lWzFdID0gIkRyaXZlciI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9EUklWRVJfTkFNRV0ubGluZVsyXSA9ICJOYW1lIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9OQU1FXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9EUklWRVJfTkFNRV0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9OQU1FXS5kaXNwbGF5X3ZhbHVlID0gbG9jYWxfZHJpdmVyX25hbWU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9EUklWRVJfTkFNRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9EUklWRVJfTkFNRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9EUklWRVJfTkFNRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9EUklWRVJfTkFNRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9WRVJTSU9OXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0RSSVZFUl9WRVJTSU9OOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX1ZFUlNJT05dLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX1ZFUlNJT05dLmxpbmVbMV0gPSAiRHJpdmVyIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9WRVJTSU9OXS5saW5lWzJdID0gIlZlcnNpb24iOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX1ZFUlNJT05dLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9WRVJTSU9OXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX1ZFUlNJT05dLmRpc3BsYXlfdmFsdWUgPSBsb2NhbF9kcml2ZXJfdmVyc2lvbjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9WRVJTSU9OXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0RSSVZFUl9WRVJTSU9OKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9WRVJTSU9OXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0RSSVZFUl9WRVJTSU9OKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX0ZJUk1XQVJFXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0RSSVZFUl9GSVJNV0FSRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9GSVJNV0FSRV0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9EUklWRVJfRklSTVdBUkVdLmxpbmVbMV0gPSAiRHJpdmVyIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9GSVJNV0FSRV0ubGluZVsyXSA9ICJGaXJtd2FyZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9EUklWRVJfRklSTVdBUkVdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9GSVJNV0FSRV0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9GSVJNV0FSRV0uZGlzcGxheV92YWx1ZSA9IGxvY2FsX2RyaXZlcl9maXJtd2FyZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9GSVJNV0FSRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9EUklWRVJfRklSTVdBUkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX0ZJUk1XQVJFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0RSSVZFUl9GSVJNV0FSRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9CVVNdLm91dHB1dF9uYW1lID0gTE9DQUxfRFJJVkVSX0JVUzsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9CVVNdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX0JVU10ubGluZVsxXSA9ICJEcml2ZXIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX0JVU10ubGluZVsyXSA9ICJCdXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX0JVU10ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX0JVU10uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9CVVNdLmRpc3BsYXlfdmFsdWUgPSBsb2NhbF9kcml2ZXJfYnVzOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfRFJJVkVSX0JVU10ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9EUklWRVJfQlVTKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0RSSVZFUl9CVVNdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfRFJJVkVSX0JVUyk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9EUklWRVJfTkFNRV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfRFJJVkVSX05BTUU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX05BTUVdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9EUklWRVJfTkFNRV0ubGluZVsxXSA9ICJEcml2ZXIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9OQU1FXS5saW5lWzJdID0gIk5hbWUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9OQU1FXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX05BTUVdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX05BTUVdLmRpc3BsYXlfdmFsdWUgPSByZW1vdGVfZHJpdmVyX25hbWU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX05BTUVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0RSSVZFUl9OQU1FKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9EUklWRVJfTkFNRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfRFJJVkVSX05BTUUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX1ZFUlNJT05dLm91dHB1dF9uYW1lID0gUkVNT1RFX0RSSVZFUl9WRVJTSU9OOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9WRVJTSU9OXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX1ZFUlNJT05dLmxpbmVbMV0gPSAiRHJpdmVyIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9EUklWRVJfVkVSU0lPTl0ubGluZVsyXSA9ICJWZXJzaW9uIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9EUklWRVJfVkVSU0lPTl0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9WRVJTSU9OXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9WRVJTSU9OXS5kaXNwbGF5X3ZhbHVlID0gcmVtb3RlX2RyaXZlcl92ZXJzaW9uOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9WRVJTSU9OXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9EUklWRVJfVkVSU0lPTik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX1ZFUlNJT05dLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0RSSVZFUl9WRVJTSU9OKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9GSVJNV0FSRV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfRFJJVkVSX0ZJUk1XQVJFOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9GSVJNV0FSRV0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9GSVJNV0FSRV0ubGluZVsxXSA9ICJEcml2ZXIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9GSVJNV0FSRV0ubGluZVsyXSA9ICJGaXJtd2FyZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX0ZJUk1XQVJFXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX0ZJUk1XQVJFXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9GSVJNV0FSRV0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9kcml2ZXJfZmlybXdhcmU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX0ZJUk1XQVJFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9EUklWRVJfRklSTVdBUkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9GSVJNV0FSRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfRFJJVkVSX0ZJUk1XQVJFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9CVVNdLm91dHB1dF9uYW1lID0gUkVNT1RFX0RSSVZFUl9CVVM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX0JVU10ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9CVVNdLmxpbmVbMV0gPSAiRHJpdmVyIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9EUklWRVJfQlVTXS5saW5lWzJdID0gIkJ1cyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX0JVU10ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9CVVNdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfRFJJVkVSX0JVU10uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9kcml2ZXJfYnVzOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9CVVNdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0RSSVZFUl9CVVMpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0RSSVZFUl9CVVNdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0RSSVZFUl9CVVMpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU1VCREVWSUNFXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0lOVEVSRkFDRV9TVUJERVZJQ0U7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU1VCREVWSUNFXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TVUJERVZJQ0VdLmxpbmVbMV0gPSAiSW50ZXJmYWNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TVUJERVZJQ0VdLmxpbmVbMl0gPSAiU3ViZGV2aWNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TVUJERVZJQ0VdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TVUJERVZJQ0VdLmZvcm1hdCA9ICIweCUuNHgiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX1NVQkRFVklDRV0uZGlzcGxheV92YWx1ZSA9ICZsb2NhbF9pbnRlcmZhY2Vfc3ViZGV2aWNlOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX1NVQkRFVklDRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9JTlRFUkZBQ0VfU1VCREVWSUNFKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TVUJERVZJQ0VdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfSU5URVJGQUNFX1NVQkRFVklDRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9ERVZJQ0VdLm91dHB1dF9uYW1lID0gTE9DQUxfSU5URVJGQUNFX0RFVklDRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9ERVZJQ0VdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX0RFVklDRV0ubGluZVsxXSA9ICJJbnRlcmZhY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX0RFVklDRV0ubGluZVsyXSA9ICJEZXZpY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX0RFVklDRV0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX0RFVklDRV0uZm9ybWF0ID0gIjB4JS40eCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfREVWSUNFXS5kaXNwbGF5X3ZhbHVlID0gJmxvY2FsX2ludGVyZmFjZV9kZXZpY2U7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfREVWSUNFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0lOVEVSRkFDRV9ERVZJQ0UpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX0RFVklDRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9JTlRFUkZBQ0VfREVWSUNFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX1NVQlZFTkRPUl0ub3V0cHV0X25hbWUgPSBMT0NBTF9JTlRFUkZBQ0VfU1VCVkVORE9SOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX1NVQlZFTkRPUl0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU1VCVkVORE9SXS5saW5lWzFdID0gIkludGVyZmFjZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU1VCVkVORE9SXS5saW5lWzJdID0gIlN1YnZlbmRvciI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU1VCVkVORE9SXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU1VCVkVORE9SXS5mb3JtYXQgPSAiMHglLjR4IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TVUJWRU5ET1JdLmRpc3BsYXlfdmFsdWUgPSAmbG9jYWxfaW50ZXJmYWNlX3N1YnZlbmRvcjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TVUJWRU5ET1JdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfSU5URVJGQUNFX1NVQlZFTkRPUik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU1VCVkVORE9SXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0lOVEVSRkFDRV9TVUJWRU5ET1IpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfVkVORE9SXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0lOVEVSRkFDRV9WRU5ET1I7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfVkVORE9SXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9WRU5ET1JdLmxpbmVbMV0gPSAiSW50ZXJmYWNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9WRU5ET1JdLmxpbmVbMl0gPSAiVmVuZG9yIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9WRU5ET1JdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9WRU5ET1JdLmZvcm1hdCA9ICIweCUuNHgiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX1ZFTkRPUl0uZGlzcGxheV92YWx1ZSA9ICZsb2NhbF9pbnRlcmZhY2VfdmVuZG9yOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJGQUNFX1ZFTkRPUl0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9JTlRFUkZBQ0VfVkVORE9SKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9WRU5ET1JdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfSU5URVJGQUNFX1ZFTkRPUik7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU1VCREVWSUNFXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9JTlRFUkZBQ0VfU1VCREVWSUNFOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJERVZJQ0VdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU1VCREVWSUNFXS5saW5lWzFdID0gIkludGVyZmFjZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NVQkRFVklDRV0ubGluZVsyXSA9ICJTdWJkZXZpY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJERVZJQ0VdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU1VCREVWSUNFXS5mb3JtYXQgPSAiMHglLjR4IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU1VCREVWSUNFXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9pbnRlcmZhY2Vfc3ViZGV2aWNlOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJERVZJQ0VdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0lOVEVSRkFDRV9TVUJERVZJQ0UpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJERVZJQ0VdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0lOVEVSRkFDRV9TVUJERVZJQ0UpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX0RFVklDRV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfSU5URVJGQUNFX0RFVklDRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfREVWSUNFXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX0RFVklDRV0ubGluZVsxXSA9ICJJbnRlcmZhY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9ERVZJQ0VdLmxpbmVbMl0gPSAiRGV2aWNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfREVWSUNFXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX0RFVklDRV0uZm9ybWF0ID0gIjB4JS40eCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX0RFVklDRV0uZGlzcGxheV92YWx1ZSA9ICZyZW1vdGVfaW50ZXJmYWNlX2RldmljZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfREVWSUNFXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9JTlRFUkZBQ0VfREVWSUNFKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfREVWSUNFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9JTlRFUkZBQ0VfREVWSUNFKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJWRU5ET1JdLm91dHB1dF9uYW1lID0gUkVNT1RFX0lOVEVSRkFDRV9TVUJWRU5ET1I7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NVQlZFTkRPUl0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJWRU5ET1JdLmxpbmVbMV0gPSAiSW50ZXJmYWNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU1VCVkVORE9SXS5saW5lWzJdID0gIlN1YnZlbmRvciI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NVQlZFTkRPUl0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJWRU5ET1JdLmZvcm1hdCA9ICIweCUuNHgiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TVUJWRU5ET1JdLmRpc3BsYXlfdmFsdWUgPSAmcmVtb3RlX2ludGVyZmFjZV9zdWJ2ZW5kb3I7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NVQlZFTkRPUl0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfSU5URVJGQUNFX1NVQlZFTkRPUik7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NVQlZFTkRPUl0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfSU5URVJGQUNFX1NVQlZFTkRPUik7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfVkVORE9SXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9JTlRFUkZBQ0VfVkVORE9SOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9WRU5ET1JdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfVkVORE9SXS5saW5lWzFdID0gIkludGVyZmFjZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1ZFTkRPUl0ubGluZVsyXSA9ICJWZW5kb3IiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9WRU5ET1JdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfVkVORE9SXS5mb3JtYXQgPSAiMHglLjR4IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfVkVORE9SXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9pbnRlcmZhY2VfdmVuZG9yOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9WRU5ET1JdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0lOVEVSRkFDRV9WRU5ET1IpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9WRU5ET1JdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX0lOVEVSRkFDRV9WRU5ET1IpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfTkFNRV0ub3V0cHV0X25hbWUgPSBMT0NBTF9JTlRFUkZBQ0VfTkFNRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9OQU1FXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9OQU1FXS5saW5lWzFdID0gIkludGVyZmFjZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfTkFNRV0ubGluZVsyXSA9ICJOYW1lIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9OQU1FXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfTkFNRV0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9OQU1FXS5kaXNwbGF5X3ZhbHVlID0gbG9jYWxfaW50ZXJmYWNlX25hbWU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfTkFNRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9JTlRFUkZBQ0VfTkFNRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfTkFNRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9JTlRFUkZBQ0VfTkFNRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfTkFNRV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfSU5URVJGQUNFX05BTUU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX05BTUVdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfTkFNRV0ubGluZVsxXSA9ICJJbnRlcmZhY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9OQU1FXS5saW5lWzJdID0gIk5hbWUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9OQU1FXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX05BTUVdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX05BTUVdLmRpc3BsYXlfdmFsdWUgPSByZW1vdGVfaW50ZXJmYWNlX25hbWU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX05BTUVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0lOVEVSRkFDRV9OQU1FKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfTkFNRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfSU5URVJGQUNFX05BTUUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU0xPVF0ub3V0cHV0X25hbWUgPSBMT0NBTF9JTlRFUkZBQ0VfU0xPVDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TTE9UXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TTE9UXS5saW5lWzFdID0gIkludGVyZmFjZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU0xPVF0ubGluZVsyXSA9ICJTbG90IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TTE9UXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU0xPVF0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSRkFDRV9TTE9UXS5kaXNwbGF5X3ZhbHVlID0gbG9jYWxfaW50ZXJmYWNlX3Nsb3Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU0xPVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9JTlRFUkZBQ0VfU0xPVCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUkZBQ0VfU0xPVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9JTlRFUkZBQ0VfU0xPVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU0xPVF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfSU5URVJGQUNFX1NMT1Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NMT1RdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU0xPVF0ubGluZVsxXSA9ICJJbnRlcmZhY2UiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TTE9UXS5saW5lWzJdID0gIlNsb3QiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSRkFDRV9TTE9UXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NMT1RdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NMT1RdLmRpc3BsYXlfdmFsdWUgPSByZW1vdGVfaW50ZXJmYWNlX3Nsb3Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJGQUNFX1NMT1RdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0lOVEVSRkFDRV9TTE9UKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUkZBQ0VfU0xPVF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfSU5URVJGQUNFX1NMT1QpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTUFDSElORV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfTUFDSElORTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9NQUNISU5FXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTUFDSElORV0ubGluZVsxXSA9ICJNYWNoaW5lIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9NQUNISU5FXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTUFDSElORV0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX01BQ0hJTkVdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfTUFDSElORV0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9tYWNoaW5lOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX01BQ0hJTkVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX01BQ0hJTkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX01BQ0hJTkVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX01BQ0hJTkUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfVkVSU0lPTl0ub3V0cHV0X25hbWUgPSBSRU1PVEVfVkVSU0lPTjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9WRVJTSU9OXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfVkVSU0lPTl0ubGluZVsxXSA9ICJWZXJzaW9uIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9WRVJTSU9OXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfVkVSU0lPTl0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1ZFUlNJT05dLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfVkVSU0lPTl0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV92ZXJzaW9uOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1ZFUlNJT05dLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX1ZFUlNJT04pOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1ZFUlNJT05dLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX1ZFUlNJT04pOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVMRUFTRV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfUkVMRUFTRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUxFQVNFXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVMRUFTRV0ubGluZVsxXSA9ICJSZWxlYXNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9SRUxFQVNFXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVMRUFTRV0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFTEVBU0VdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfUkVMRUFTRV0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9yZWxlYXNlOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFTEVBU0VdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX1JFTEVBU0UpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1JFTEVBU0VdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX1JFTEVBU0UpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU1lTTkFNRV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfU1lTTkFNRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TWVNOQU1FXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU1lTTkFNRV0ubGluZVsxXSA9ICJTeXNuYW1lIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TWVNOQU1FXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU1lTTkFNRV0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU05BTUVdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU1lTTkFNRV0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9zeXNuYW1lOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU05BTUVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX1NZU05BTUUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU05BTUVdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoUkVNT1RFX1NZU05BTUUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9NQUNISU5FXS5vdXRwdXRfbmFtZSA9IExPQ0FMX01BQ0hJTkU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9NQUNISU5FXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX01BQ0hJTkVdLmxpbmVbMV0gPSAiTWFjaGluZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9NQUNISU5FXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9NQUNISU5FXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9NQUNISU5FXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfTUFDSElORV0uZGlzcGxheV92YWx1ZSA9IGxvY2FsX21hY2hpbmU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9NQUNISU5FXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX01BQ0hJTkUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfTUFDSElORV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9NQUNISU5FKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfVkVSU0lPTl0ub3V0cHV0X25hbWUgPSBMT0NBTF9WRVJTSU9OOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfVkVSU0lPTl0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9WRVJTSU9OXS5saW5lWzFdID0gIlZlcnNpb24iOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfVkVSU0lPTl0ubGluZVsyXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfVkVSU0lPTl0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfVkVSU0lPTl0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1ZFUlNJT05dLmRpc3BsYXlfdmFsdWUgPSBsb2NhbF92ZXJzaW9uOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfVkVSU0lPTl0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9WRVJTSU9OKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1ZFUlNJT05dLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfVkVSU0lPTik7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFTEVBU0VdLm91dHB1dF9uYW1lID0gTE9DQUxfUkVMRUFTRTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFTEVBU0VdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfUkVMRUFTRV0ubGluZVsxXSA9ICJSZWxlYXNlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFTEVBU0VdLmxpbmVbMl0gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFTEVBU0VdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFTEVBU0VdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUxFQVNFXS5kaXNwbGF5X3ZhbHVlID0gbG9jYWxfcmVsZWFzZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1JFTEVBU0VdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfUkVMRUFTRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9SRUxFQVNFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1JFTEVBU0UpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNOQU1FXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1NZU05BTUU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNOQU1FXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NZU05BTUVdLmxpbmVbMV0gPSAiU3lzbmFtZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNOQU1FXS5saW5lWzJdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNOQU1FXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNOQU1FXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU1lTTkFNRV0uZGlzcGxheV92YWx1ZSA9IGxvY2FsX3N5c25hbWU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNOQU1FXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1NZU05BTUUpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU1lTTkFNRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9TWVNOQU1FKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSVkFMX1VTRUNTXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9JTlRFUlZBTF9VU0VDUzsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUlZBTF9VU0VDU10ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSVkFMX1VTRUNTXS5saW5lWzFdID0gIkludGVydmFsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUlZBTF9VU0VDU10ubGluZVsyXSA9ICJVc2VjcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJWQUxfVVNFQ1NdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUlZBTF9VU0VDU10uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUlZBTF9VU0VDU10uZGlzcGxheV92YWx1ZSA9ICZyZW1vdGVfaW50ZXJ2YWxfdXNlY3M7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJWQUxfVVNFQ1NdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoUkVNT1RFX0lOVEVSVkFMX1VTRUNTKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUlZBTF9VU0VDU10udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfSU5URVJWQUxfVVNFQ1MpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJWQUxfQlVSU1RdLm91dHB1dF9uYW1lID0gUkVNT1RFX0lOVEVSVkFMX0JVUlNUOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSVkFMX0JVUlNUXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfSU5URVJWQUxfQlVSU1RdLmxpbmVbMV0gPSAiSW50ZXJ2YWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSVkFMX0JVUlNUXS5saW5lWzJdID0gIkJ1cnN0IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUlZBTF9CVVJTVF0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSVkFMX0JVUlNUXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSVkFMX0JVUlNUXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9pbnRlcnZhbF9idXJzdDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9JTlRFUlZBTF9CVVJTVF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfSU5URVJWQUxfQlVSU1QpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0lOVEVSVkFMX0JVUlNUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9JTlRFUlZBTF9CVVJTVCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX0VOQUJMRURdLm91dHB1dF9uYW1lID0gTE9DQUxfU0VDVVJJVFlfRU5BQkxFRDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX0VOQUJMRURdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF0ubGluZVsxXSA9ICJPUyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEXS5saW5lWzJdID0gIlNlY3VyaXR5IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX0VOQUJMRURdLmxpbmVbM10gPSAiRW5hYmxlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF0uZGlzcGxheV92YWx1ZSA9IGxvY2FsX3NlY3VyaXR5X2VuYWJsZWQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1NFQ1VSSVRZX0VOQUJMRUQpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9TRUNVUklUWV9FTkFCTEVEKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfVFlQRV0ub3V0cHV0X25hbWUgPSBMT0NBTF9TRUNVUklUWV9UWVBFOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfVFlQRV0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9UWVBFXS5saW5lWzFdID0gIk9TIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1RZUEVdLmxpbmVbMl0gPSAiU2VjdXJpdHkiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfVFlQRV0ubGluZVszXSA9ICJUeXBlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1RZUEVdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9UWVBFXS5kaXNwbGF5X3ZhbHVlID0gbG9jYWxfc2VjdXJpdHlfdHlwZTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1RZUEVdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfU0VDVVJJVFlfVFlQRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9UWVBFXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1NFQ1VSSVRZX1RZUEUpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9TUEVDSUZJQ10ub3V0cHV0X25hbWUgPSBMT0NBTF9TRUNVUklUWV9TUEVDSUZJQzsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDXS5saW5lWzFdID0gIk9TIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDXS5saW5lWzJdID0gIlNlY3VyaXR5IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDXS5saW5lWzNdID0gIlNwZWNpZmljIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfU1BFQ0lGSUNdLmRpc3BsYXlfdmFsdWUgPSBsb2NhbF9zZWN1cml0eV9zcGVjaWZpYzsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1NFQ1VSSVRZX1NQRUNJRklDKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF9OVU1dLm91dHB1dF9uYW1lID0gTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF9OVU07CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEX05VTV0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEX05VTV0ubGluZVsxXSA9ICJPUyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEX05VTV0ubGluZVsyXSA9ICJTZWN1cml0eSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEX05VTV0ubGluZVszXSA9ICJFbmFibGVkIE51bSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9FTkFCTEVEX05VTV0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX0VOQUJMRURfTlVNXS5kaXNwbGF5X3ZhbHVlID0gJmxvY2FsX3NlY3VyaXR5X2VuYWJsZWRfbnVtOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF9OVU1dLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF9OVU0pOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF9OVU1dLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoTE9DQUxfU0VDVVJJVFlfRU5BQkxFRF9OVU0pOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9UWVBFX0lEXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1NFQ1VSSVRZX1RZUEVfSUQ7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9UWVBFX0lEXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1RZUEVfSURdLmxpbmVbMV0gPSAiT1MiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfVFlQRV9JRF0ubGluZVsyXSA9ICJTZWN1cml0eSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9UWVBFX0lEXS5saW5lWzNdID0gIlR5cGUgSUQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU0VDVVJJVFlfVFlQRV9JRF0uZm9ybWF0ID0gIiVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1RZUEVfSURdLmRpc3BsYXlfdmFsdWUgPSAmbG9jYWxfc2VjdXJpdHlfdHlwZV9pZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NFQ1VSSVRZX1RZUEVfSURdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfU0VDVVJJVFlfVFlQRV9JRCk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TRUNVUklUWV9UWVBFX0lEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1NFQ1VSSVRZX1RZUEVfSUQpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9FTkFCTEVEXS5saW5lWzBdID0gIlJlbW90ZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF0ubGluZVsxXSA9ICJPUyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF0ubGluZVsyXSA9ICJTZWN1cml0eSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF0ubGluZVszXSA9ICJFbmFibGVkIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9FTkFCTEVEXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX0VOQUJMRURdLmRpc3BsYXlfdmFsdWUgPSByZW1vdGVfc2VjdXJpdHlfZW5hYmxlZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9FTkFCTEVEXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9TRUNVUklUWV9FTkFCTEVEKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9FTkFCTEVEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9TRUNVUklUWV9FTkFCTEVEKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1RZUEVdLm91dHB1dF9uYW1lID0gUkVNT1RFX1NFQ1VSSVRZX1RZUEU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfVFlQRV0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1RZUEVdLmxpbmVbMV0gPSAiT1MiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1RZUEVdLmxpbmVbMl0gPSAiU2VjdXJpdHkiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1RZUEVdLmxpbmVbM10gPSAiVHlwZSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfVFlQRV0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9UWVBFXS5kaXNwbGF5X3ZhbHVlID0gcmVtb3RlX3NlY3VyaXR5X3R5cGU7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfVFlQRV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VDVVJJVFlfVFlQRSk7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfVFlQRV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfU0VDVVJJVFlfVFlQRSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9TUEVDSUZJQ10ub3V0cHV0X25hbWUgPSBSRU1PVEVfU0VDVVJJVFlfU1BFQ0lGSUM7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfU1BFQ0lGSUNdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9TUEVDSUZJQ10ubGluZVsxXSA9ICJPUyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfU1BFQ0lGSUNdLmxpbmVbMl0gPSAiU2VjdXJpdHkiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1NQRUNJRklDXS5saW5lWzNdID0gIlNwZWNpZmljIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9TUEVDSUZJQ10uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9TUEVDSUZJQ10uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9zZWN1cml0eV9zcGVjaWZpYzsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9TUEVDSUZJQ10ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VDVVJJVFlfU1BFQ0lGSUMpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1NQRUNJRklDXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9TRUNVUklUWV9TUEVDSUZJQyk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9FTkFCTEVEX05VTV0ub3V0cHV0X25hbWUgPSBSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF9OVU07CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF9OVU1dLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9FTkFCTEVEX05VTV0ubGluZVsxXSA9ICJPUyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF9OVU1dLmxpbmVbMl0gPSAiU2VjdXJpdHkiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX0VOQUJMRURfTlVNXS5saW5lWzNdID0gIkVuYWJsZWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX0VOQUJMRURfTlVNXS5mb3JtYXQgPSAiJWQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX0VOQUJMRURfTlVNXS5kaXNwbGF5X3ZhbHVlID0gJnJlbW90ZV9zZWN1cml0eV9lbmFibGVkX251bTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9FTkFCTEVEX05VTV0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChSRU1PVEVfU0VDVVJJVFlfRU5BQkxFRF9OVU0pOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX0VOQUJMRURfTlVNXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9TRUNVUklUWV9FTkFCTEVEX05VTSk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9UWVBFX0lEXS5vdXRwdXRfbmFtZSA9IFJFTU9URV9TRUNVUklUWV9UWVBFX0lEOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1RZUEVfSURdLmxpbmVbMF0gPSAiUmVtb3RlIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9UWVBFX0lEXS5saW5lWzFdID0gIk9TIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9UWVBFX0lEXS5saW5lWzJdID0gIlNlY3VyaXR5IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9UWVBFX0lEXS5saW5lWzNdID0gIlR5cGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NFQ1VSSVRZX1RZUEVfSURdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU0VDVVJJVFlfVFlQRV9JRF0uZGlzcGxheV92YWx1ZSA9ICZyZW1vdGVfc2VjdXJpdHlfdHlwZV9pZDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9UWVBFX0lEXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9TRUNVUklUWV9UWVBFX0lEKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9TRUNVUklUWV9UWVBFX0lEXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9TRUNVUklUWV9UWVBFX0lEKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJWQUxfVVNFQ1NdLm91dHB1dF9uYW1lID0gTE9DQUxfSU5URVJWQUxfVVNFQ1M7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9VU0VDU10ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9VU0VDU10ubGluZVsxXSA9ICJJbnRlcnZhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9VU0VDU10ubGluZVsyXSA9ICJVc2VjcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9VU0VDU10ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJWQUxfVVNFQ1NdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9VU0VDU10uZGlzcGxheV92YWx1ZSA9ICZpbnRlcnZhbF91c2VjczsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSVkFMX1VTRUNTXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0lOVEVSVkFMX1VTRUNTKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSVkFMX1VTRUNTXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0lOVEVSVkFMX1VTRUNTKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJWQUxfQlVSU1RdLm91dHB1dF9uYW1lID0gTE9DQUxfSU5URVJWQUxfQlVSU1Q7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9CVVJTVF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9CVVJTVF0ubGluZVsxXSA9ICJJbnRlcnZhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9CVVJTVF0ubGluZVsyXSA9ICJCdXJzdCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9CVVJTVF0ubGluZVszXSA9ICIiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfSU5URVJWQUxfQlVSU1RdLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9JTlRFUlZBTF9CVVJTVF0uZGlzcGxheV92YWx1ZSA9ICZpbnRlcnZhbF9idXJzdDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSVkFMX0JVUlNUXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0lOVEVSVkFMX0JVUlNUKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0lOVEVSVkFMX0JVUlNUXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX0lOVEVSVkFMX0JVUlNUKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU1RFTV9NT0RFTF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfU1lTVEVNX01PREVMOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU1RFTV9NT0RFTF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU1RFTV9NT0RFTF0ubGluZVsxXSA9ICJTeXN0ZW0iOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU1RFTV9NT0RFTF0ubGluZVsyXSA9ICJNb2RlbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU1lTVEVNX01PREVMXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU1lTVEVNX01PREVMXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU1RFTV9NT0RFTF0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9zeXN0ZW1fbW9kZWw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfU1lTVEVNX01PREVMXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9TWVNURU1fTU9ERUwpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX1NZU1RFTV9NT0RFTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfU1lTVEVNX01PREVMKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NT0RFTF0ub3V0cHV0X25hbWUgPSBSRU1PVEVfQ1BVX01PREVMOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NT0RFTF0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NT0RFTF0ubGluZVsxXSA9ICJDUFUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NT0RFTF0ubGluZVsyXSA9ICJNb2RlbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX01PREVMXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX01PREVMXS5mb3JtYXQgPSAiJXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NT0RFTF0uZGlzcGxheV92YWx1ZSA9IHJlbW90ZV9jcHVfbW9kZWw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX01PREVMXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9DUFVfTU9ERUwpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9NT0RFTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChSRU1PVEVfQ1BVX01PREVMKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9GUkVRVUVOQ1ldLm91dHB1dF9uYW1lID0gUkVNT1RFX0NQVV9GUkVRVUVOQ1k7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0ZSRVFVRU5DWV0ubGluZVswXSA9ICJSZW1vdGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9GUkVRVUVOQ1ldLmxpbmVbMV0gPSAiQ1BVIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfRlJFUVVFTkNZXS5saW5lWzJdID0gIkZyZXF1ZW5jeSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0ZSRVFVRU5DWV0ubGluZVszXSA9ICJNSHoiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbUkVNT1RFX0NQVV9GUkVRVUVOQ1ldLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtSRU1PVEVfQ1BVX0ZSRVFVRU5DWV0uZGlzcGxheV92YWx1ZSA9ICZyZW1vdGVfY3B1X2ZyZXF1ZW5jeTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfRlJFUVVFTkNZXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKFJFTU9URV9DUFVfRlJFUVVFTkNZKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW1JFTU9URV9DUFVfRlJFUVVFTkNZXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKFJFTU9URV9DUFVfRlJFUVVFTkNZKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU1lTVEVNX01PREVMXS5vdXRwdXRfbmFtZSA9IExPQ0FMX1NZU1RFTV9NT0RFTDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NZU1RFTV9NT0RFTF0ubGluZVswXSA9ICJMb2NhbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNURU1fTU9ERUxdLmxpbmVbMV0gPSAiU3lzdGVtIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NZU1RFTV9NT0RFTF0ubGluZVsyXSA9ICJNb2RlbCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9TWVNURU1fTU9ERUxdLmxpbmVbM10gPSAiIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NZU1RFTV9NT0RFTF0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NZU1RFTV9NT0RFTF0uZGlzcGxheV92YWx1ZSA9IGxvY2FsX3N5c3RlbV9tb2RlbDsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX1NZU1RFTV9NT0RFTF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChMT0NBTF9TWVNURU1fTU9ERUwpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfU1lTVEVNX01PREVMXS50b3RfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfVE9UKExPQ0FMX1NZU1RFTV9NT0RFTCk7CisKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9NT0RFTF0ub3V0cHV0X25hbWUgPSBMT0NBTF9DUFVfTU9ERUw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTU9ERUxdLmxpbmVbMF0gPSAiTG9jYWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX01PREVMXS5saW5lWzFdID0gIkNQVSI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTU9ERUxdLmxpbmVbMl0gPSAiTW9kZWwiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX01PREVMXS5saW5lWzNdID0gIiI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTU9ERUxdLmZvcm1hdCA9ICIlcyI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTU9ERUxdLmRpc3BsYXlfdmFsdWUgPSBsb2NhbF9jcHVfbW9kZWw7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfTU9ERUxdLm1heF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9NQVgoTE9DQUxfQ1BVX01PREVMKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9NT0RFTF0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9DUFVfTU9ERUwpOworCisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfRlJFUVVFTkNZXS5vdXRwdXRfbmFtZSA9IExPQ0FMX0NQVV9GUkVRVUVOQ1k7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfRlJFUVVFTkNZXS5saW5lWzBdID0gIkxvY2FsIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9GUkVRVUVOQ1ldLmxpbmVbMV0gPSAiQ1BVIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9GUkVRVUVOQ1ldLmxpbmVbMl0gPSAiRnJlcXVlbmN5IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9GUkVRVUVOQ1ldLmxpbmVbM10gPSAiTUh6IjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW0xPQ0FMX0NQVV9GUkVRVUVOQ1ldLmZvcm1hdCA9ICIlZCI7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfRlJFUVVFTkNZXS5kaXNwbGF5X3ZhbHVlID0gJmxvY2FsX2NwdV9mcmVxdWVuY3k7CisgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtMT0NBTF9DUFVfRlJFUVVFTkNZXS5tYXhfbGluZV9sZW4gPSAKKyAgICBORVRQRVJGX0xJTkVfTUFYKExPQ0FMX0NQVV9GUkVRVUVOQ1kpOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbTE9DQUxfQ1BVX0ZSRVFVRU5DWV0udG90X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX1RPVChMT0NBTF9DUFVfRlJFUVVFTkNZKTsKKworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX0VORF0ub3V0cHV0X25hbWUgPSBPVVRQVVRfRU5EOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX0VORF0ubGluZVswXSA9ICJUaGlzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW09VVFBVVF9FTkRdLmxpbmVbMV0gPSAiSXMiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX0VORF0ubGluZVsyXSA9ICJUaGUiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX0VORF0ubGluZVszXSA9ICJFbmQiOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX0VORF0uZm9ybWF0ID0gIiVzIjsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW09VVFBVVF9FTkRdLmRpc3BsYXlfdmFsdWUgPSBOVUxMOworICBuZXRwZXJmX291dHB1dF9zb3VyY2VbT1VUUFVUX0VORF0ubWF4X2xpbmVfbGVuID0gCisgICAgTkVUUEVSRl9MSU5FX01BWChPVVRQVVRfRU5EKTsKKyAgbmV0cGVyZl9vdXRwdXRfc291cmNlW09VVFBVVF9FTkRdLnRvdF9saW5lX2xlbiA9IAorICAgIE5FVFBFUkZfTElORV9UT1QoT1VUUFVUX0VORCk7CisKK30KKy8qIGxvdHMgb2YgYm9yaW5nLCByZXBldGl0aXZlIGNvZGUgKi8KK3ZvaWQgCitwcmludF9vbW5pX2luaXQoKSB7CisKKyAgaW50IGksajsKKworICBpZiAocHJpbnRpbmdfaW5pdGlhbGl6ZWQpIHJldHVybjsKKworICBwcmludGluZ19pbml0aWFsaXplZCA9IDE7CisKKyAgcHJpbnRfb21uaV9pbml0X2xpc3QoKTsKKworICAvKiBiZWx0cyBhbmQgc3VzcGVuZGVycyAqLworICBmb3IgKGkgPSBPVVRQVVRfTk9ORTsgaSA8IE5FVFBFUkZfT1VUUFVUX01BWDsgaSsrKQorICAgIG91dHB1dF9jc3ZfbGlzdFtpXSA9IE9VVFBVVF9FTkQ7CisKKyAgZm9yIChqID0gMDsgaiA8IE5FVFBFUkZfTUFYX0JMT0NLUzsgaisrKQorICAgIGZvciAoaSA9IE9VVFBVVF9OT05FOyBpIDwgTkVUUEVSRl9PVVRQVVRfTUFYOyBpKyspCisgICAgICBvdXRwdXRfaHVtYW5fbGlzdFtqXVtpXSA9IE9VVFBVVF9FTkQ7CisKKworICAvKiB0aGUgZGVmYXVsdCBmb3IgY3N2IGlzIHRoZSBraXRjaGVuLXNpbmsuICB1bHRpbWF0ZWx5IGl0IHdpbGwgYmUKKyAgICAgcG9zc2libGUgdG8gb3ZlcnJpZGUgYnkgcHJvdmlkaW5nIG9uZSdzIG93biBsaXN0IGluIGEgZmlsZSAqLworCisgIGlmICgoY3N2KSB8fCAoa2V5d29yZCkpIHsKKyAgICBpZiAoY3N2X3NlbGVjdGlvbl9maWxlKSAKKyAgICAgIC8qIG5hbWUgb2YgZmlsZSwgbGlzdCB0byBmaWxsLCBudW1iZXIgb2Ygcm93cy9saW5lcyAqLworICAgICAgcGFyc2Vfb3V0cHV0X2Nzdl9zZWxlY3Rpb25fZmlsZShjc3Zfc2VsZWN0aW9uX2ZpbGUpOworICAgIGVsc2UKKyAgICAgIHNldF9vdXRwdXRfY3N2X2xpc3RfZGVmYXVsdChvdXRwdXRfY3N2X2xpc3QpOworICB9CisgIGVsc2UgeworICAgIGlmIChodW1hbl9zZWxlY3Rpb25fZmlsZSkKKyAgICAgIHBhcnNlX291dHB1dF9odW1hbl9zZWxlY3Rpb25fZmlsZShodW1hbl9zZWxlY3Rpb25fZmlsZSk7CisgICAgZWxzZQorICAgICAgc2V0X291dHB1dF9odW1hbl9saXN0X2RlZmF1bHQob3V0cHV0X2h1bWFuX2xpc3QpOworICB9CisgICAgICAKKworfQorCisvKiB3aHk/IGJlY2F1c2Ugb25lIGNhbm5vdCBzaW1wbHkgcGFzcyBhIHBvaW50ZXIgdG8gc25wcmludGYgOikgZm9yCisgICBvdXIgbmVmYXJpb3VzIHBvcnBvaXNlcywgd2Ugb25seSBleHBlY3QgdG8gaGFuZGxlIHNpbmdsZS12YWx1ZQorICAgZm9ybWF0IHN0YXRlbWVudHMsIG5vdCBhIGZ1bGwtYmxvd24gZm9ybWF0ICovCitpbnQgCitteV9sb25nX2xvbmdfc25wcmludGYoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2b2lkICp2YWx1ZSkKK3sKKyAgY29uc3QgY2hhciAqZm10ID0gZm9ybWF0OworICB3aGlsZSAoKmZtdCkKKyAgICBzd2l0Y2ggKCpmbXQrKykgeworICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ2knOgorICAgICAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgZm9ybWF0LCAqKGxvbmcgbG9uZyAqKXZhbHVlKTsKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICdvJzoKKyAgICBjYXNlICd4JzoKKyAgICBjYXNlICdYJzoKKyAgICAgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgKih1bnNpZ25lZCBsb25nIGxvbmcgKil2YWx1ZSk7CisgICAgfQorICByZXR1cm4gLTE7Cit9CisKK2ludAorbXlfbG9uZ19zbnByaW50ZihjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZvaWQgKnZhbHVlKQoreworICBjb25zdCBjaGFyICpmbXQgPSBmb3JtYXQ7CisgIHdoaWxlICgqZm10KQorICAgIHN3aXRjaCAoKmZtdCsrKSB7CisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAnaSc6CisgICAgICByZXR1cm4gc25wcmludGYoYnVmZmVyLCBzaXplLCBmb3JtYXQsICoobG9uZyAqKXZhbHVlKTsKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICdvJzoKKyAgICBjYXNlICd4JzoKKyAgICBjYXNlICdYJzoKKyAgICAgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgKih1bnNpZ25lZCBsb25nICopdmFsdWUpOworICAgIGNhc2UgJ2wnOgorICAgICAgcmV0dXJuIG15X2xvbmdfbG9uZ19zbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgdmFsdWUpOworICAgIH0KKyAgcmV0dXJuIC0xOworfQorCitpbnQKK215X3NucHJpbnRmKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdm9pZCAqdmFsdWUpCit7CisgIGNvbnN0IGNoYXIgKmZtdCA9IGZvcm1hdDsKKworICB3aGlsZSAoKmZtdCkKKyAgICBzd2l0Y2ggKCpmbXQrKykgeworICAgIGNhc2UgJ2MnOgorICAgICAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgZm9ybWF0LCAqKGludCAqKXZhbHVlKTsKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlICdlJzoKKyAgICBjYXNlICdFJzoKKyAgICBjYXNlICdnJzoKKyAgICBjYXNlICdHJzoKKyAgICAgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgKihkb3VibGUgKil2YWx1ZSk7CisgICAgY2FzZSAncyc6CisgICAgICByZXR1cm4gc25wcmludGYoYnVmZmVyLCBzaXplLCBmb3JtYXQsIChjaGFyICopdmFsdWUpOworICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ2knOgorICAgICAgcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgZm9ybWF0LCAqKGludCAqKXZhbHVlKTsKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICdvJzoKKyAgICBjYXNlICd4JzoKKyAgICBjYXNlICdYJzoKKyAgICAgIHJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgKih1bnNpZ25lZCBpbnQgKil2YWx1ZSk7CisgICAgY2FzZSAnbCc6CisgICAgICByZXR1cm4gbXlfbG9uZ19zbnByaW50ZihidWZmZXIsIHNpemUsIGZvcm1hdCwgdmFsdWUpOworICAgIH0KKyAgcmV0dXJuIC0xOworfQorCit2b2lkCitwcmludF9vbW5pX2NzdigpCit7CisKKyAgaW50IGosayxidWZsZW4sdmFsbGVuOworCisgIGNoYXIgKmhkcjEgPSBOVUxMOworICBjaGFyICp2YWwxID0gTlVMTDsKKyAgY2hhciB0bXB2YWxbMTAyNF07CisKKyAgYnVmbGVuID0gMDsKKyAgZm9yIChqID0gMDsgCisgICAgICAgKChqIDwgTkVUUEVSRl9PVVRQVVRfTUFYKSAmJiAKKwkob3V0cHV0X2Nzdl9saXN0W2pdICE9IE9VVFBVVF9FTkQpKTsKKyAgICAgICBqKyspIHsKKyAgICBpZiAoKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfY3N2X2xpc3Rbal1dLmZvcm1hdCAhPSBOVUxMKSAmJgorCShuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2Nzdl9saXN0W2pdXS5kaXNwbGF5X3ZhbHVlICE9IE5VTEwpKSB7CisgICAgICB2YWxsZW4gPSAKKwlteV9zbnByaW50Zih0bXB2YWwsCisJCSAgICAxMDI0LAorCQkgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0uZm9ybWF0LAorCQkgICAgKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfY3N2X2xpc3Rbal1dLmRpc3BsYXlfdmFsdWUpKTsKKyAgICAgIGlmICh2YWxsZW4gPT0gLTEpIHsKKwlmcHJpbnRmKHdoZXJlLCJteV9zbnByaW50ZiBmYWlsZWQgb24gJXMgd2l0aCBmb3JtYXQgJXNcbiIsCisJCW5ldHBlcmZfb3V0cHV0X2VudW1fdG9fc3RyKGopLAorCQluZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2Nzdl9saXN0W2pdXS5mb3JtYXQpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICB2YWxsZW4gKz0gMTsgLyogZm9yZ2V0IG5vdCB0aGUgdGVybWluYXRvciAqLworICAgIH0KKyAgICBlbHNlCisgICAgICB2YWxsZW4gPSAwOworCisgICAgaWYgKHZhbGxlbiA+IAorCW5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfY3N2X2xpc3Rbal1dLnRvdF9saW5lX2xlbikKKyAgICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfY3N2X2xpc3Rbal1dLnRvdF9saW5lX2xlbiA9IHZhbGxlbjsKKyAgICAKKyAgICBidWZsZW4gKz0gCisgICAgICBuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2Nzdl9saXN0W2pdXS50b3RfbGluZV9sZW47CisgIH0KKworICBpZiAocHJpbnRfaGVhZGVycykgaGRyMSA9IG1hbGxvYyhidWZsZW4gKyAxKTsKKyAgdmFsMSA9IG1hbGxvYyhidWZsZW4gKyAxKTsKKworICBpZiAoKChoZHIxID09IE5VTEwpICYmIChwcmludF9oZWFkZXJzKSkgfHwKKyAgICAgICh2YWwxID09IE5VTEwpKSB7CisgICAgZnByaW50Zih3aGVyZSwidW5hYmxlIHRvIGFsbG9jYXRlIG91dHB1dCBidWZmZXJzXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoLTEpOworICB9CisKKyAgaWYgKHByaW50X2hlYWRlcnMpIG1lbXNldChoZHIxLCcgJyxidWZsZW4gKyAxKTsKKyAgbWVtc2V0KHZhbDEsJyAnLGJ1ZmxlbiArIDEpOworCisgIC8qIG9zdGVuc2libHksIHdlIG5vdyAia25vdyIgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSBpbiBhbGwgb3VyCisgICAgIHN0cmluZ3MsIGFuZCB3ZSBoYXZlIHNwYWNlcyB3aGVyZSB3ZSB3YW50IHRoZW0gZXRjICovCisgIGNoYXIgKmgxID0gaGRyMTsKKyAgY2hhciAqdjEgPSB2YWwxOworICBmb3IgKGogPSAwOyAKKyAgICAgICAoKGogPCBORVRQRVJGX09VVFBVVF9NQVgpICYmIAorCShvdXRwdXRfY3N2X2xpc3Rbal0gIT0gT1VUUFVUX0VORCkpOworICAgICAgIGorKykgeworICAgIGludCBsZW47CisgICAgbGVuID0gMDsgCisgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKyAgICAgIGZvciAoayA9IDA7ICgoayA8IDQpICYmIAorCQkgICAoTlVMTCAhPSAKKwkJICAgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfY3N2X2xpc3Rbal1dLmxpbmVba10pICYmCisJCSAgIChzdHJjbXAoIiIsbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0ubGluZVtrXSkpKTsgaysrKSB7CisKKwlsZW4gPSBzcHJpbnRmKGgxLAorCQkgICAgICAiJXMiLAorCQkgICAgICBuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2Nzdl9saXN0W2pdXS5saW5lW2tdKTsKKwkqKGgxICsgbGVuKSA9ICcgJzsKKwkvKiBub3cgbW92ZSB0byB0aGUgbmV4dCBzdGFydGluZyBjb2x1bW4uIGZvciBjc3Ygd2UgYXJlbid0IHdvcnJpZWQKKwkgICBhYm91dCBhbGlnbm1lbnQgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCB0aGUgdmFsdWUgbGluZXMgKi8KKwloMSArPSBsZW4gKyAxOworICAgICAgfQorICAgICAgKihoMSAtIDEpID0gJywnOworICAgIH0KKyAgICBpZiAoKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfY3N2X2xpc3Rbal1dLmZvcm1hdCAhPSBOVUxMKSAmJgorCShuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2Nzdl9saXN0W2pdXS5kaXNwbGF5X3ZhbHVlICE9IE5VTEwpKSB7CisgICAgICAvKiB0b3RfbGluZV9sZW4gaXMgYm9ndXMgaGVyZSwgYnV0IHNob3VsZCBiZSAiT0siID8gKi8KKyAgICAgIGxlbiA9IG15X3NucHJpbnRmKHYxLAorCQkJbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0udG90X2xpbmVfbGVuLAorCQkJbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0uZm9ybWF0LAorCQkJbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0uZGlzcGxheV92YWx1ZSk7CisKKyAgICAgIC8qIG51a2UgdGhlIHRyYWlsaW5nIFxuIiBmcm9tIHRoZSBzdHJpbmcgcm91dGluZS4gICovCisgICAgICAqKHYxICsgbGVuKSA9ICcsJzsKKyAgICAgIHYxICs9IGxlbiArIDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogd2UgbmVlZCBhICcsJyBldmVuIGlmIHRoZXJlIGlzIG5vIHZhbHVlICovCisgICAgICAqdjEgPSAnLCc7CisgICAgICB2MSArPSAyOworICAgIH0KKyAgfQorCisgIC8qIG9rLCBfbm93XyBudWxsIHRlcm1pbmF0ZSBlYWNoIGxpbmUgYnkgbnVraW5nIHRoZSBsYXN0IGNvbW1hLiAgZG8KKyAgICAgd2UgaGF2ZSBhbiBPQk9CIGhlcmU/ICovCisgIGlmIChwcmludF9oZWFkZXJzKSAqKGgxLTEpID0gMDsKKyAgKih2MS0xKSA9IDA7CisgIC8qIGFuZCBub3cgc3BpdCBpdCBvdXQsIGJ1dCBvbmx5IGlmIGl0IGlzIGdvaW5nIHRvIGhhdmUgc29tZXRoaW5nCisgICAgIGluIGl0LiB3ZSBkb24ndCB3YW50IGEgYnVuY2ggb2YgYmxhbmsgbGluZXMgb3IgbnVsbHMuLi4gICovCisgIGlmIChvdXRwdXRfY3N2X2xpc3RbMF0gIT0gT1VUUFVUX0VORCkgeworICAgIGlmIChwcmludF9oZWFkZXJzKSBwcmludGYoIiVzXG4iLGhkcjEpOworICAgIHByaW50ZigiJXNcbiIsdmFsMSk7CisgIH0KKworICBpZiAoaGRyMSAhPSBOVUxMKSBmcmVlKGhkcjEpOworICBpZiAodmFsMSAhPSBOVUxMKSBmcmVlKHZhbDEpOworCit9CisKK3ZvaWQKK3ByaW50X29tbmlfa2V5d29yZCgpCit7CisgIC8qIHRoaXMgb25lIHNob3VsZCBiZSB0aGUgc2ltcGxlc3Qgb2YgYWxsIC0gbm8gYnVmZmVycyB0byBhbGxvY2F0ZSwKKyAgICAganVzdCBzcGl0IGl0IGFsbCBvdXQuIHJhaiAyMDA4MDgwNSAqLworCisgIGludCBqOworICBjaGFyIHRtcHZhbFsxMDI0XTsKKyAgaW50IHZhbGxlbjsKKworICBmb3IgKGogPSAwOyAKKyAgICAgICAoKGogPCBORVRQRVJGX09VVFBVVF9NQVgpICYmIAorCShvdXRwdXRfY3N2X2xpc3Rbal0gIT0gT1VUUFVUX0VORCkpOworICAgICAgIGorKykgeworICAgIGlmICgobmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0uZm9ybWF0ICE9IE5VTEwpICYmCisJKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfY3N2X2xpc3Rbal1dLmRpc3BsYXlfdmFsdWUgIT0gTlVMTCkpIHsKKyAgICAgIHZhbGxlbiA9IAorCW15X3NucHJpbnRmKHRtcHZhbCwKKwkJICAgIDEwMjQsCisJCSAgICBuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2Nzdl9saXN0W2pdXS5mb3JtYXQsCisJCSAgICAobmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0uZGlzcGxheV92YWx1ZSkpOworICAgICAgaWYgKHZhbGxlbiA9PSAtMSkgeworCXNucHJpbnRmKHRtcHZhbCwKKwkJIDEwMjQsCisJCSAibXlfc25wcmludGYgZmFpbGVkIHdpdGggZm9ybWF0ICVzXG4iLAorCQkgbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9jc3ZfbGlzdFtqXV0uZm9ybWF0KTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIiVzPSVzXG4iLG5ldHBlcmZfb3V0cHV0X2VudW1fdG9fc3RyKG91dHB1dF9jc3ZfbGlzdFtqXSksCisJICAgICAgdG1wdmFsKTsKKyAgICB9CisgIH0KKyAgZmZsdXNoKHdoZXJlKTsKK30KKwordm9pZAorcHJpbnRfb21uaV9odW1hbigpCit7CisgIAorICBpbnQgaSxqLGssYnVmbGVuLGJ1Zmxlbl9tYXg7CisKKyAgY2hhciAqaGRyWzRdOworICBjaGFyICp2YWwxID0gTlVMTDsKKyAgY2hhciB0bXB2YWxbMTAyNF07ICAvKiBleGNlc3NpdmUsIGJ1dCB3ZSBtYXkgaGF2ZSB0aGUgY29tbWFuZCBsaW5lICovCisgIGludCAgdmFsbGVuOworCisgIGZvciAoayA9IDA7IGsgPCA0OyBrICsrKSB7CisgICAgaGRyW2tdID0gTlVMTDsKKyAgfQorCisgIC8qIGRlY2lzaW9ucywgZGVjaXNpb25zLi4uIHdhbGsgdGhlIGxpc3QgdHdpY2UgdG8gb25seSBuZWVkIHRvCisgICAgIGFsbG9jYXRlIHRoZSBjaGFyY3RlciBidWZmZXJzIG9uY2UsIG9yIHdhbGsgaXQgb25jZSBhbmQgcG9zc2libHkKKyAgICAgcmVhbGxvY2F0ZSB0aGVtIGFzIEkgZ28uLi4gb2gsIGxldHMgd2FsayBpdCB0d2ljZSBqdXN0IGZvciBmdW4gdG8KKyAgICAgc3RhcnQuIHNpbmNlIG9ubHkgbm93IGRvIHdlIGtub3cgdGhhdCB0aGUgdmFsdWVzIGFyZSBhcm91bmQgdG8gYmUKKyAgICAgcHJpbnRlZCwgd2Ugc2hvdWxkIHRyeSB0aGUgc25wcmludGYgZm9yIHRoZSB2YWx1ZSBhbmQgc2VlIGhvdworICAgICBtdWNoIHNwYWNlIGl0IHdhbnRzIGFuZCB1cGRhdGUgbWF4X2xpbmVfbGVuIGFjY29yZGluZ2x5ICovCisgIGJ1Zmxlbl9tYXggPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTkVUUEVSRl9NQVhfQkxPQ0tTOyBpKyspIHsKKyAgICBidWZsZW4gPSAwOworICAgIGZvciAoaiA9IDA7IAorCSAoKGogPCBORVRQRVJGX09VVFBVVF9NQVgpICYmIAorCSAgKG91dHB1dF9odW1hbl9saXN0W2ldW2pdICE9IE9VVFBVVF9FTkQpKTsKKwkgaisrKSB7CisgICAgICBpZiAoKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfaHVtYW5fbGlzdFtpXVtqXV0uZm9ybWF0ICE9IE5VTEwpICYmCisJICAobmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5kaXNwbGF5X3ZhbHVlICE9IE5VTEwpKQorCXZhbGxlbiA9IG15X3NucHJpbnRmKHRtcHZhbCwKKwkJCSAgICAgMTAyNCwKKwkJCSAgICAgbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5mb3JtYXQsCisJCQkgICAgIChuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2h1bWFuX2xpc3RbaV1bal1dLmRpc3BsYXlfdmFsdWUpKSArIDE7IC8qIG5lZWQgdG8gY291bnQgdGhlIFxuICovCisgICAgICBlbHNlCisJdmFsbGVuID0gMDsKKworICAgICAgaWYgKHZhbGxlbiA+IAorCSAgbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5tYXhfbGluZV9sZW4pCisJbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5tYXhfbGluZV9sZW4gPSB2YWxsZW47CisgICAgICAKKyAgICAgIGJ1ZmxlbiArPSAKKwluZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2h1bWFuX2xpc3RbaV1bal1dLm1heF9saW5lX2xlbiArIDE7CisgICAgfQorCisgICAgaWYgKGJ1ZmxlbiA+IGJ1Zmxlbl9tYXgpIAorICAgICAgYnVmbGVuX21heCA9IGJ1ZmxlbjsKKyAgfQorCisgIC8qIG1vcmUgYmVsdHMgYW5kIHN1c3BlbmRlcnMgKi8KKyAgZm9yIChrID0gMDsgKGsgPCA0KSAmJiAocHJpbnRfaGVhZGVycyk7IGsrKykgeworICAgIGhkcltrXSA9IG1hbGxvYyhidWZsZW5fbWF4KzEpOworICB9CisgIHZhbDEgPSBtYWxsb2MoYnVmbGVuX21heCsxKTsKKyAgCisgIC8qIHdlIGNvdWxkIHByb2JhYmx5IGJlIG1vcmUgc3VjY2luY3QgaGVyZSBidXQgcGVyaGFwcyB0aGUgY29tcGlsZXIKKyAgICAgY2FuIGZpZ3VyZSB0aGF0IG91dCBmb3IgdXMgOikgKi8KKyAgZm9yIChrID0gMDsgKGsgPCA0KSAmJiAocHJpbnRfaGVhZGVycyk7IGsrKykgeworICAgIGlmIChoZHJba10gPT0gTlVMTCkgeworICAgICAgZnByaW50Zih3aGVyZSwiVW5hYmxlIHRvIGFsbG9jYXRlIG91dHB1dCBidWZmZXJzXG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KC0xKTsKKyAgICB9CisgIH0KKworICAvKiBvc3RlbnNpYmx5LCB3ZSBub3cgImtub3ciIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgaW4gYWxsIG91cgorICAgICBzdHJpbmdzLCBhbmQgd2UgaGF2ZSBzcGFjZXMgd2hlcmUgd2Ugd2FudCB0aGVtIGV0YyAqLworICBmb3IgKGkgPSAwOyBpIDwgTkVUUEVSRl9NQVhfQkxPQ0tTOyBpKyspIHsKKyAgICBjaGFyICpoWzRdOworICAgIGNoYXIgKnYxID0gdmFsMTsKKworICAgIGZvciAoayA9IDA7IGsgPCA0OyBrKyspIGhba10gPSBoZHJba107CisKKyAgICAvKiB3ZSB3YW50IHRvIGJsYW5rIHRoaW5ncyBvdXQgZWFjaCB0aW1lIHNpbmNlIHdlIHNraXAgYXJvdW5kIGEgbG90ICovCisgICAgZm9yIChrID0gMDsgKGsgPCA0KSAmJiAocHJpbnRfaGVhZGVycyk7IGsrKykgeworICAgICAgbWVtc2V0KGhkcltrXSwnICcsYnVmbGVuX21heCsxKTsKKyAgICB9CisgICAgbWVtc2V0KHZhbDEsJyAnLGJ1Zmxlbl9tYXgrMSk7CisKKworICAgIGZvciAoaiA9IDA7IAorCSAoKGogPCBORVRQRVJGX09VVFBVVF9NQVgpICYmIAorCSAgKG91dHB1dF9odW1hbl9saXN0W2ldW2pdICE9IE9VVFBVVF9FTkQpKTsKKwkgaisrKSB7CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKKwkgIG1lbWNweShoW2tdLAorCQkgbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5saW5lW2tdLAorCQkgc3RybGVuKG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfaHVtYW5fbGlzdFtpXVtqXV0ubGluZVtrXSkpOworCX0KKyAgICAgIH0KKyAgICAgIGlmICgobmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5mb3JtYXQgIT0gTlVMTCkgJiYKKwkgIChuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2h1bWFuX2xpc3RbaV1bal1dLmRpc3BsYXlfdmFsdWUgIT0gTlVMTCkpIHsKKwlpbnQgbGVuOworCWxlbiA9IG15X3NucHJpbnRmKHYxLAorCQkJICBuZXRwZXJmX291dHB1dF9zb3VyY2Vbb3V0cHV0X2h1bWFuX2xpc3RbaV1bal1dLm1heF9saW5lX2xlbiwKKwkJCSAgbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5mb3JtYXQsCisJCQkgIG5ldHBlcmZfb3V0cHV0X3NvdXJjZVtvdXRwdXRfaHVtYW5fbGlzdFtpXVtqXV0uZGlzcGxheV92YWx1ZSk7CisJLyogbnVrZSB0aGUgdHJhaWxpbmcgXG4iIGZyb20gdGhlIHN0cmluZyByb3V0aW5lLiAgKi8KKwkqKHYxICsgbGVuKSA9ICcgJzsKKyAgICAgIH0KKyAgICAgIC8qIG5vdyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXJ0aW5nIGNvbHVtbiAqLworICAgIGZvciAoayA9IDA7IChrIDwgNCkgJiYgKHByaW50X2hlYWRlcnMpOyBrKyspIHsKKwloW2tdICs9IAorCSAgbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5tYXhfbGluZV9sZW4gKyAxOworICAgICAgfQorICAgICAgdjEgKz0gbmV0cGVyZl9vdXRwdXRfc291cmNlW291dHB1dF9odW1hbl9saXN0W2ldW2pdXS5tYXhfbGluZV9sZW4gKyAxOworICAgIH0KKyAgICAvKiBvaywgX25vd18gbnVsbCB0ZXJtaW5hdGUgZWFjaCBsaW5lLiAgZG8gd2UgaGF2ZSBhbiBPQk9CIGhlcmU/ICovCisgICAgZm9yIChrID0gMDsgKGsgPCA0KSAmJiAocHJpbnRfaGVhZGVycyk7IGsrKykgeworICAgICAgKmhba10gPSAwOworICAgIH0KKyAgICAqdjEgPSAwOworICAgIC8qIGFuZCBub3cgc3BpdCBpdCBvdXQsIGJ1dCBvbmx5IGlmIGl0IGlzIGdvaW5nIHRvIGhhdmUgc29tZXRoaW5nCisgICAgICAgaW4gaXQuIHdlIGRvbid0IHdhbnQgYSBidW5jaCBvZiBibGFuayBsaW5lcyBvciBudWxscy4uLiBhdCBzb21lCisgICAgIHBvaW50IHdlIG1pZ2h0IHdhbnQgdG8gd29yayBiYWNrd2FyZHMgY29sbGFwc2luZSB3aGl0ZXNwYWNlIGZyb20KKyAgICAgdGhlIHJpZ2h0IGJ1dCBmb3Igbm93LCB3ZSB3b24ndCBib3RoZXIgKi8KKyAgICBpZiAob3V0cHV0X2h1bWFuX2xpc3RbaV1bMF0gIT0gT1VUUFVUX0VORCkgeworICAgICAgaWYgKGkgPiAwKSBwcmludGYoIlxuIik7IC8qIHdlIHdhbnQgYSBibGFuayBsaW5lIGJldHdlZW4gYmxvY2tzID8gKi8KKyAgICAgIGZvciAoayA9IDA7IChrIDwgNCkgJiYgKHByaW50X2hlYWRlcnMpOyBrKyspIHsKKwlwcmludGYoIiVzXG4iLGhkcltrXSk7CisgICAgICB9CisgICAgICBwcmludGYoIiVzXG4iLHZhbDEpOworICAgIH0KKyAgfTsKKyAgZm9yIChrID0gMDsgayA8IDQ7IGsrKykgeworICAgIGlmIChoZHJba10gIT0gTlVMTCkgZnJlZShoZHJba10pOworICB9Cit9CisKK3ZvaWQKK3ByaW50X29tbmkoKQoreworCisgIHByaW50X29tbmlfaW5pdCgpOworCisgIGlmIChkZWJ1ZyA+IDIpIAorICAgIGR1bXBfbmV0cGVyZl9vdXRwdXRfc291cmNlKHdoZXJlKTsKKworICBpZiAoY3N2KSAKKyAgICBwcmludF9vbW5pX2NzdigpOworICBlbHNlIGlmIChrZXl3b3JkKQorICAgIHByaW50X29tbmlfa2V5d29yZCgpOworICBlbHNlCisgICAgcHJpbnRfb21uaV9odW1hbigpOworCit9CisvKiBmb3IgdGhlIG5leHQgZmV3IHJvdXRpbmVzIChjb25uZWN0LCBhY2NlcHQsIHNlbmQsIHJlY3YsCisgICBkaXNjb25uZWN0L2Nsb3NlKSB3ZSB3aWxsIHVzZSBhIHJldHVybiBvZiAtMSB0byBtZWFuIHRpbWVzIHVwLCAtMgorICAgdG8gbWVhbiBhIHRyYW5zaWVudCBlcnJvciAoZWcgRU5PQlVGUyBvbiBhIFVEUCBzZW5kIGNhbGwpIGFuZCAtMyB0bworICAgbWVhbiBoYXJkIGVycm9yLiAgdGhpcyBtZWFucyBpdCBpcyBvayBmb3IgdGhlIGNvbm5lY3Qgcm91dGluZSB0bworICAgcmV0dXJuIGEgMCAoemVybykgaWYgdGhhdCBoYXBwZW5zIHRvIGJlIHRoZSBmZC9TT0NLRVQgd2UgZ2V0IGFuZCBpbgorICAgdGhlb3J5IHdlIHdpbGwgYmUgYWJsZSB0byBzdXBwb3J0IHplcm8tbGVuZ3RoIG1lc3NhZ2VzIG9uIHRob3NlCisgICBwcm90b2NvbHMgd2hpY2ggc3VwcG9ydCBpdC4gIGFsbCBpbiB0aGVvcnkgb2YgY291cnNlLiByYWoKKyAgIDIwMDgtMDEtMDkgKi8KKworaW50Citjb25uZWN0X2RhdGFfc29ja2V0KFNPQ0tFVCBzZW5kX3NvY2tldCwgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzKSAKK3sKKyAgaW50IHJldDsKKyAgIAorICAvKiBDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgIGlmICgocmV0ID0gY29ubmVjdChzZW5kX3NvY2tldCwgCisJCSAgICAgcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJICAgICByZW1vdGVfcmVzLT5haV9hZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICBpZiAoU09DS0VUX0VJTlRSKHJldCkpICB7CisgICAgICAvKiB3ZSBpbnRlcnByZXQgdGhpcyB0byBtZWFuIHRoYXQgdGhlIHRlc3QgaXMgc3VwcG9zZWQgdG8gYmUKKwkgb3Zlciwgc28gcmV0dXJuIGEgdmFsdWUgb2YgLTEgdG8gdGhlIGNhbGxlciAqLworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoKFNPQ0tFVF9FQUREUklOVVNFKHJldCkpIHx8IFNPQ0tFVF9FQUREUk5PVEFWQUlMKHJldCkpIHsKKyAgICAgIC8qIGxpa2VseSBzb21ldGhpbmcgb3VyIGV4cGxpY2l0IGJpbmQoKSB3b3VsZCBoYXZlIGNhdWdodCBpbgorCSB0aGUgcGFzdCwgc28gZ28gZ2V0IGFub3RoZXIgcG9ydCwgdmlhIGNyZWF0ZV9kYXRhX3NvY2tldC4KKwkgeWVzLCB0aGlzIGlzIGEgYml0IG1vcmUgb3ZlcmhlYWQgdGhhbiBiZWZvcmUsIGJ1dCB0aGUKKwkgY29uZGl0aW9uIHNob3VsZCBiZSByYXRoZXIgcmFyZS4gd2Ugb25seSBnZXQgYSBuZXcgcG9ydCBpZgorCSB0aGlzIHdhcyBhIGNvbm5lY3Rpb24taW5jbHVkaW5nIHRlc3QgbGlrZSBUQ1BfQ1JSIG9yCisJIFRDUF9DQy4gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gcmV0dXJuIGFuIGVycm9yLiByYWoKKwkgMjAwOC0wMS0wOCAqLworICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICBlbHNlIAorICAgICAgLyogLTMgbWVhbnMgdGhlcmUgd2FzIGFuIGVycm9yICovCisgICAgICByZXR1cm4gLTM7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludAorc2VuZF9kYXRhKFNPQ0tFVCBkYXRhX3NvY2tldCwgc3RydWN0IHJpbmdfZWx0ICpzZW5kX3JpbmcsIHVpbnQzMl90IGJ5dGVzX3RvX3NlbmQsIHN0cnVjdCBzb2NrYWRkciAqZGVzdGluYXRpb24sIGludCBkZXN0bGVuKSB7CisKKyAgaW50IGxlbjsKKworICAvKiBpZiB0aGUgdXNlciBoYXMgc3VwcGxpZWQgYSBkZXN0aW5hdGlvbiwgd2UgdXNlIHNlbmR0bywgb3RoZXJ3aXNlCisgICAgIHdlIHVzZSBzZW5kLiAgd2UgYXNzLXUtbWUgYmxvY2tpbmcgb3BlcmF0aW9ucyBhbHdheXMsIHNvIG5vIG5lZWQKKyAgICAgdG8gY2hlY2sgZm9yIGVhZ2FpbiBvciB0aGUgbGlrZS4gKi8KKworICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInNlbmRfZGF0YSBzb2NrICVkIHJpbmcgJXAgYnl0ZXMgJWQgZGVzdCAlcCBsZW4gJWRcbiIsCisJICAgIGRhdGFfc29ja2V0LAorCSAgICBzZW5kX3JpbmcsCisJICAgIGJ5dGVzX3RvX3NlbmQsCisJICAgIGRlc3RpbmF0aW9uLAorCSAgICBkZXN0bGVuKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKGRlc3RpbmF0aW9uKSB7CisgICAgbGVuID0gc2VuZHRvKGRhdGFfc29ja2V0LAorCQkgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgYnl0ZXNfdG9fc2VuZCwKKwkJIDAsCisJCSBkZXN0aW5hdGlvbiwKKwkJIGRlc3RsZW4pOworICB9CisgIGVsc2UgeworICAgIGxlbiA9IHNlbmQoZGF0YV9zb2NrZXQsCisJICAgICAgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkgICAgICAgYnl0ZXNfdG9fc2VuZCwKKwkgICAgICAgMCk7CisgIH0KKyAgaWYobGVuICE9IGJ5dGVzX3RvX3NlbmQpIHsKKyAgICAvKiBkb24ndCBmb3JnZXQgdGhhdCBzb21lIHBsYXRmb3JtcyBtYXkgZG8gYSBwYXJ0aWFsIHNlbmQgdXBvbgorICAgICAgIHJlY2VpcHQgb2YgdGhlIGludGVycnVwdCBhbmQgbm90IHJldHVybiBhbiBFSU5UUi4uLiAqLworICAgIGlmIChTT0NLRVRfRUlOVFIobGVuKSB8fCAobGVuID49IDApKQorICAgICAgeworCS8qIHdlIGhpdCB0aGUgZW5kIG9mIGEgIHRpbWVkIHRlc3QuICovCisJcmV0dXJuIC0xOworICAgICAgfQorICAgIC8qIGlmIHRoaXMgaXMgVURQIGl0IGlzIHBvc3NpYmxlIHRvIHJlY2VpdmUgYW4gRU5PQlVGUyBvbiB0aGUgc2VuZAorICAgICAgIGNhbGwgYW5kIGl0IHdvdWxkIG5vdCBiZSBhIGZhdGFsIGVycm9yLiAgb2YgY291cnNlIGlmIHdlIHdlcmUKKyAgICAgICB0byByZXR1cm4gMCB0aGVuIGl0IHdvdWxkIG1ha2UgdGhlIHRlc3QgdGhpbmsgaXQgd2FzIG92ZXIgd2hlbgorICAgICAgIGl0IHJlYWxseSB3YXNuJ3QuICB0aGUgcXVlc3Rpb24gYmVjb21lcyB3aGF0IHRvIGRvLiAgZm9yIHRoZQorICAgICAgIHRpbWUgYmVpbmcsIHRoZSBhbnN3ZXIgd2lsbCBsaWtlbHkgYmUgdG8gcmV0dXJuIHNvbWV0aGluZyBsaWtlCisgICAgICAgLTIgdG8gaW5kaWNhdGUgYSBub24tZmF0YWwgZXJyb3IgaGFwcGVuZWQgb24gdGhlIHNlbmQgYW5kIGxldAorICAgICAgIHRoZSBjYWxsZXIgZmlndXJlIGl0IG91dCA6KSB3ZSB3b24ndCBhY3R1YWxseSBjaGVjayB0byBzZWUgaWYKKyAgICAgICB0aGlzIGlzIFVEUCAtIGl0IGlzIHRoZSBhdXRob3IncyBleHBlcmllbmNlIGluIG1hbnksIE1hbnksIE1BTlkKKyAgICAgICB5ZWFycyB0aGF0IHRoZSBvbmx5IHRpbWUgYW4gRU5PQlVGUyBoYXMgYmVlbiByZXR1cm5lZCBpbiBhCisgICAgICAgbmV0cGVyZiB0ZXN0IGhhcyBiZWVuIHdpdGggVURQLiAgZmFtb3VzIGxhc3Qgd29yZHMgOikgKi8KKyAgICBpZiAoZXJybm8gPT0gRU5PQlVGUykKKyAgICAgIHJldHVybiAtMjsKKyAgICBlbHNlIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfZGF0YTogZGF0YSBzZW5kIGVycm9yOiBlcnJubyAlZCIsZXJybm8pOworICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgfQorICByZXR1cm4gbGVuOworfQorCitpbnQKK3JlY3ZfZGF0YShTT0NLRVQgZGF0YV9zb2NrZXQsIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nLCB1aW50MzJfdCBieXRlc190b19yZWN2LCBzdHJ1Y3Qgc29ja2FkZHIgKnNvdXJjZSwgaW50ICpzb3VyY2VsZW4sIHVpbnQzMl90IGZsYWdzLCB1aW50MzJfdCAqbnVtX3JlY2VpdmVzKSB7CisKKyAgY2hhciAqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50IGJ5dGVzX2xlZnQ7CisgIGludCBieXRlc19yZWN2ZDsKKyAgaW50IG15X3JlY3ZzOworCisgIC8qIHJlY2VpdmUgZGF0YSBvZmYgdGhlIGRhdGFfc29ja2V0LCBhc3MtdS1tZS1pbmcgYSBibG9ja2luZyBzb2NrZXQKKyAgICAgYWxsIHRoZSB3YXkhLSkgMjAwOC0wMS0wOCAqLworICBteV9yZWN2cyA9IDA7CisgIGJ5dGVzX2xlZnQgPSBieXRlc190b19yZWN2OworICB0ZW1wX21lc3NhZ2VfcHRyICA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKworICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGF0YSBzb2NrICVkLCBlbHQgJXAsIGJ5dGVzICVkIHNvdXJjZSAlcCBzcmNsZW4gJWQsIGZsYWdzICV4IG51bV9yZWN2ICVwXG4iLAorCSAgICBkYXRhX3NvY2tldCwKKwkgICAgcmVjdl9yaW5nLAorCSAgICBieXRlc190b19yZWN2LAorCSAgICBzb3VyY2UsCisJICAgIChzb3VyY2UgIT0gTlVMTCkgPyAqc291cmNlbGVuIDogLTEsCisJICAgIGZsYWdzLAorCSAgICBudW1fcmVjZWl2ZXMpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgZG8geworICAgIGlmIChzb3VyY2UpIHsKKyAgICAgIC8qIGNhbGwgcmVjdmZyb20gaXQgZG9lcyBsb29rIGEgbGl0dGxlIHNpbGx5IGhlcmUgaW5zaWRlIHRoZSBkbworCSB3aGlsZSwgYnV0IEkgdGhpbmsgaXQgaXMgb2sgLSBhIFVEUCBvciBvdGhlciBER1JBTSBvcgorCSBTRVFQQUNLRVQgKD8pIHNvY2tldCwgd2hpY2ggc2hvdWxkIGJlIHRoZSBvbmx5IHRpbWUgd2UKKwkgcGFzcy1pbiBhIHNvdXJjZSBwb2ludGVyIHdpbGwgaGF2ZSBhIHNlbWFudGljIHRoYXQgc2hvdWxkIGdldAorCSB1cyBvdXQgb2YgdGhlIGRvd2hpbGUgb24gdGhlIGZpcnN0IGNhbGwgYW55d2F5LiAgaWYgaXQKKwkgdHVybnMtb3V0IG5vdCB0byBiZSB0aGUgY2FzZSwgdGhlbiB3ZSBjYW4gaG9pc3QgdGhlIGlmIGFib3ZlCisJIHRoZSBkbyBhbmQgcHV0IHRoZSBkb3doaWxlIGluIHRoZSBlbHNlLiAqLworICAgICAgYnl0ZXNfcmVjdmQgPSByZWN2ZnJvbShkYXRhX3NvY2tldCwKKwkJCSAgICAgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCSAgICAgYnl0ZXNfbGVmdCwKKwkJCSAgICAgMCwKKwkJCSAgICAgc291cmNlLAorCQkJICAgICBzb3VyY2VsZW4pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGp1c3QgY2FsbCByZWN2ICovCisgICAgICBieXRlc19yZWN2ZCA9IHJlY3YoZGF0YV9zb2NrZXQsCisJCQkgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCSBieXRlc19sZWZ0LAorCQkJIDApOworICAgIH0KKyAgICBpZiAoYnl0ZXNfcmVjdmQgPiAwKSB7CisgICAgICBieXRlc19sZWZ0IC09IGJ5dGVzX3JlY3ZkOworICAgICAgdGVtcF9tZXNzYWdlX3B0ciArPSBieXRlc19yZWN2ZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgbXlfcmVjdnMrKzsKKyAgfSB3aGlsZSAoKGJ5dGVzX2xlZnQgPiAwKSAmJiAoZmxhZ3MgJiBORVRQRVJGX1dBSVRBTEwpKTsKKyAgCisgICpudW1fcmVjZWl2ZXMgPSBteV9yZWN2czsKKyAgCisgIC8qIE9LLCB3ZSBhcmUgb3V0IG9mIHRoZSBsb29wIC0gbm93IHdoYXQ/ICovCisgIGlmIChieXRlc19yZWN2ZCA8IDApIHsKKyAgICAvKiBkaWQgdGhlIHRpbWVyIGhpdCwgb3Igd2FzIHRoZXJlIGFuIGVycm9yPyAqLworICAgIGlmIChTT0NLRVRfRUlOVFIoYnl0ZXNfcmVjdmQpKQorICAgICAgeworCS8qIFdlIGhpdCB0aGUgZW5kIG9mIGEgdGltZWQgdGVzdC4gKi8KKwlyZXR1cm4gLTE7CisgICAgICB9CisgICAgLyogaXQgd2FzIGEgaGFyZCBlcnJvciAqLworICAgIHJldHVybiAtMzsKKyAgfQorICAKKyAgCisgIC8qIHRoaXMgbG9va3MgYSBsaXR0bGUgZnVubnksIGJ1dCBzaG91bGQgYmUgY29ycmVjdC4gIGlmIHdlIGhhZAorICAgICBORVRQRVJGX1dBSVRBTEwgc2V0IGFuZCB3ZSBnb3QgaGVyZSwgaXQgbWVhbnMgd2UgZ290IGFsbCB0aGUKKyAgICAgYnl0ZXMgb2YgdGhlIHJlcXVlc3QvcmVzcG9uc2UuICBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSBoaXQgdGhlCisgICAgIGVycm9yIG9yIGVuZCBvZiB0ZXN0IGNhc2VzLiAgaWYgTkVUUEVSRl9XQUlUQUxMIGlzbid0IHNldCwgdGhpcworICAgICBpcyBhIFNUUkVBTSB0ZXN0LCBhbmQgd2Ugd2lsbCBoYXZlIG9ubHkgbWFkZSBvbmUgY2FsbCB0byByZWN2LCBzbworICAgICBieXRlc19yZWN2ZCB3aWxsIGJlIGFjY3VyYXRlLiAqLworICBpZiAoYnl0ZXNfbGVmdCkgCisgICAgcmV0dXJuIGJ5dGVzX3JlY3ZkOworICBlbHNlCisgICAgcmV0dXJuIGJ5dGVzX3RvX3JlY3Y7CisKK30KKworCitpbnQKK2Nsb3NlX2RhdGFfc29ja2V0KFNPQ0tFVCBkYXRhX3NvY2tldCwgc3RydWN0IHNvY2thZGRyICpwZWVyLCBpbnQgcGVlcmxlbikKK3sKKworICBpbnQgcmV0OworICBjaGFyIGJ1ZmZlcls0XTsKKworICBpZiAocHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICBpZiAocGVlcikgCisJcmV0ID0gc2VuZHRvKGRhdGFfc29ja2V0LAorCQkgICAgIGJ1ZmZlciwKKwkJICAgICAwLAorCQkgICAgIDAsCisJCSAgICAgcGVlciwKKwkJICAgICBwZWVybGVuKTsKKyAgICAgIGVsc2UKKwlyZXQgPSBzZW5kKGRhdGFfc29ja2V0LAorCQkgICBidWZmZXIsCisJCSAgIDAsCisJCSAgIDApOworICAgICAgaWYgKFNPQ0tFVF9FSU5UUihyZXQpKSB7CisJY2xvc2UoZGF0YV9zb2NrZXQpOworCXJldHVybiAtMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0ID0gY2xvc2UoZGF0YV9zb2NrZXQpOworCisgIGlmIChTT0NLRVRfRUlOVFIocmV0KSkgeworICAgIC8qIGVuZCBvZiB0ZXN0ICovCisgICAgcmV0dXJuIC0xOworICB9CisgIGVsc2UgaWYgKHJldCA9PSAwKSB7CisgICAgcmV0dXJuIHJldDsKKyAgfQorICBlbHNlCisgICAgcmV0dXJuIC0zOworICAgIAorfQorCitpbnQKK2Rpc2Nvbm5lY3RfZGF0YV9zb2NrZXQoU09DS0VUIGRhdGFfc29ja2V0LCBpbnQgaW5pdGlhdGUsIGludCBkb19jbG9zZSwgc3RydWN0IHNvY2thZGRyICpwZWVyLCBpbnQgcGVlcmxlbikgCit7CisKKyAgY2hhciBidWZmZXJbNF07CisgIGludCBieXRlc19yZWN2ZDsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiZGlzY29ubmVjdF9kX3Mgc29jayAlZCBpbml0ICVkIGRvX2Nsb3NlICVkIHByb3RvY29sICVkXG4iLAorCSAgICBkYXRhX3NvY2tldCwKKwkgICAgaW5pdGlhdGUsCisJICAgIGRvX2Nsb3NlLAorCSAgICBwcm90b2NvbCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGF0IHNvbWUgcG9pbnQgd2UnbGwgbmVlZCB0byBhYnN0cmFjdCB0aGlzIGEgbGl0dGxlLiAgZm9yIG5vdywgaWYKKyAgICAgdGhlIHByb3RvY29sIGlzIFVEUCwgd2UgdHJ5IHRvIHNlbmQgc29tZSBudW1iZXIgb2YgemVyby1sZW5ndGgKKyAgICAgZGF0YWdyYW1zIHRvIGFsbG93IHRoZSByZW1vdGUgdG8gZ2V0IG91dCBvZiBpdHMgbG9vcCB3aXRob3V0CisgICAgIGhhdmluZyB0byB3YWl0IGZvciB0aGUgcGFkZGVkIHRpbWVyIHRvIGV4cGlyZS4gaWYgaXQgaXNuJ3QgVURQLAorICAgICB3ZSBhc3N1bWUgYSByZWxpYWJsZSBjb25uZWN0aW9uIGFuZCBjYW4gZG8gdGhlIHVzdWFsIGdyYWNlZnVsCisgICAgIHNodXRkb3duIHRoaW5nICovCisKKyAgaWYgKHByb3RvY29sICE9IElQUFJPVE9fVURQKSB7CisgICAgaWYgKGluaXRpYXRlKQorICAgICAgc2h1dGRvd24oZGF0YV9zb2NrZXQsIFNIVVRfV1IpOworICAgIAorICAgIC8qIHdlIGFyZSBleHBlY3RpbmcgdG8gZ2V0IGVpdGhlciBhIHJldHVybiBvZiB6ZXJvIGluZGljYXRpbmcKKyAgICAgICBjb25uZWN0aW9uIGNsb3NlLCBvciBhbiBlcnJvci4gICovCisgICAgYnl0ZXNfcmVjdmQgPSByZWN2KGRhdGFfc29ja2V0LAorCQkgICAgICAgYnVmZmVyLAorCQkgICAgICAgMSwKKwkJICAgICAgIDApOworICAgIAorICAgIGlmIChieXRlc19yZWN2ZCAhPSAwKSB7CisgICAgICAvKiBjb25uZWN0aW9uIGNsb3NlLCBjYWxsIGNsb3NlLiB3ZSBhc3N1bWUgdGhhdCB0aGUgcmVxdWlzaXRlICovCisgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkICovCisgICAgICBpZiAoU09DS0VUX0VJTlRSKGJ5dGVzX3JlY3ZkKSkKKwl7CisJICAvKiBXZSBoaXQgdGhlIGVuZCBvZiBhIHRpbWVkIHRlc3QuICovCisJICByZXR1cm4gLTE7CisJfQorICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICBpZiAocGVlcikgCisJYnl0ZXNfcmVjdmQgPSBzZW5kdG8oZGF0YV9zb2NrZXQsCisJCQkgICAgIGJ1ZmZlciwKKwkJCSAgICAgMCwKKwkJCSAgICAgMCwKKwkJCSAgICAgcGVlciwKKwkJCSAgICAgcGVlcmxlbik7CisgICAgICBlbHNlCisJYnl0ZXNfcmVjdmQgPSBzZW5kKGRhdGFfc29ja2V0LAorCQkJICAgYnVmZmVyLAorCQkJICAgMCwKKwkJCSAgIDApOworICAgICAgLyogd2Ugb25seSByZWFsbHkgY2FyZSBpZiB0aGUgdGltZXIgZXhwaXJlZCBvbiB1cyAqLworICAgICAgaWYgKFNPQ0tFVF9FSU5UUihieXRlc19yZWN2ZCkpIHsKKwlpZiAoZG9fY2xvc2UpIGNsb3NlKGRhdGFfc29ja2V0KTsKKwlyZXR1cm4gLTE7CisgICAgICB9CisgICAgfQorICB9CisgIAorICBpZiAoZG9fY2xvc2UpIAorICAgIGNsb3NlKGRhdGFfc29ja2V0KTsKKyAgCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZ2V0X3RyYW5zcG9ydF9pbmZvKFNPQ0tFVCBzb2NrZXQsIGludCAqbXNzLCBpbnQgcHJvdG9jb2wpCit7CisKKyAgbmV0cGVyZl9zb2NrbGVuX3Qgc29ja19vcHRfbGVuOworICBpbnQgb3B0aW9uOworICBzb2NrX29wdF9sZW4gPSBzaXplb2YobmV0cGVyZl9zb2NrbGVuX3QpOworCisgIHN3aXRjaCAocHJvdG9jb2wpIHsKKyNpZiBkZWZpbmVkKElQUFJPVE9fVENQKSAmJiBkZWZpbmVkKFRDUF9NQVhTRUcpCisgIGNhc2UgSVBQUk9UT19UQ1A6CisgICAgb3B0aW9uID0gVENQX01BWFNFRzsKKyAgICBicmVhazsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChJUFBST1RPX1NDVFApICYmIGRlZmluZWQoU0NUUF9NQVhTRUcpCisgIGNhc2UgSVBQUk9UT19TQ1RQOgorICAgIG9wdGlvbiA9IFNDVFBfTUFYU0VHOworICAgIGJyZWFrOworI2VuZGlmCisgIGRlZmF1bHQ6CisgICAgKm1zcyA9IC0xOworICAgIHJldHVybjsKKyAgfQorICAKKyAgaWYgKGdldHNvY2tvcHQoc29ja2V0LAorCQkgcHJvdG9jb2wsCisJCSBvcHRpb24sCisJCSAoY2hhciAqKW1zcywKKwkJICZzb2NrX29wdF9sZW4pID09IFNPQ0tFVF9FUlJPUikgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJuZXRwZXJmOiBnZXRfdHJhbnNwb3J0X2luZm86IGdldHNvY2tvcHQ6IGVycm5vICVkXG4iLAorCSAgICBlcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAqbXNzID0gLTE7CisgIH0KK30KKworLyogYnJhaW4gZGVhZCBzaW1wbGUgd2F5IHRvIGdldCBuZXRwZXJmIHRvIGVtaXQgYSB1dWlkLiBzYWRseSwgYnkgdGhpcworICAgcG9pbnQgd2Ugd2lsbCBoYXZlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiBidXQKKyAgIHRob3NlIGFyZSB0aGUgYnJlYWtzLiB3ZSBkbyBfTk9UXyBpbmNsdWRlIGEgdHJhaWxpbmcgbmV3bGluZQorICAgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoaXMgaW4gYSBzY3JpcHQgKi8KKwordm9pZAorcHJpbnRfdXVpZChjaGFyIHJlbW90ZV9ob3N0W10pCit7CisgIHByaW50ZigiJXMiLHRlc3RfdXVpZCk7Cit9CisKKyAvKiB0aGlzIGNvZGUgaXMgaW50ZW5kZWQgdG8gYmUgInRoZSB0d28gcm91dGluZXMgdG8gcnVuIHRoZW0gYWxsIiBmb3IKKyAgICBCU0Rpc2ggc29ja2V0cy4gIGl0IGNvbWVzIGFib3V0IGFzIHBhcnQgb2YgYSBkZXNpcmUgdG8gc2hyaW5rIHRoZQorICAgIGNvZGUgZm9vdHByaW50IG9mIG5ldHBlcmYgYW5kIHRvIGF2b2lkIGhhdmluZyBzbyBtYW55IGJsZXNzZWQKKyAgICByb3V0aW5lcyB0byBhbHRlciBhcyB0aW1lIGdvZXMgYnkuICB0aGUgZG93bnNpZGUgaXMgdGhlcmUgd2lsbCBiZQorICAgIG1vcmUgImlmcyIgdGhhbiB0aGVyZSB3ZXJlIGJlZm9yZS4gdGhlcmUgbWF5IGJlIHNvbWUgb3RoZXIKKyAgICAiY29tcGxpY2F0aW9ucyIgZm9yIHRoaW5ncyBsaWtlIGRlbW8gbW9kZSBvciBwZXJoYXBzIGhpc3RvZ3JhbXMgaWYKKyAgICB3ZSBldmVyIHdhbnQgdG8gdHJhY2sgaW5kaXZpZHVhbCBSVFRzIHdoZW4gYnVyc3QgbW9kZSBpcyBpbiB1c2UKKyAgICBldGMgZXRjLi4uIHJhaiAyMDA4LTAxLTA3ICovCisKK3ZvaWQKK3NlbmRfb21uaShjaGFyIHJlbW90ZV9ob3N0W10pCit7CisgIAorICAKKyAgaW50IGxlbjsKKyAgaW50IHJldCxycmV0OworICBpbnQgY29ubmVjdGVkID0gMDsKKyAgaW50IHRpbWVkX291dCA9IDA7CisgIGludCBwYWRfdGltZSA9IDA7CisKKyAgc3RydWN0IHJpbmdfZWx0ICpzZW5kX3Jpbmc7CisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworCisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHJlbW90ZV9hZGRyOworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBteV9hZGRyOworICBpbnQgICAgICAgICAgICAgICAgICAgICByZW1vdGVfYWRkcl9sZW4gPSBzaXplb2YocmVtb3RlX2FkZHIpOworICBpbnQgICAgICAgICAgICAgICAgICAgICBteV9hZGRyX2xlbiA9IHNpemVvZihteV9hZGRyKTsKKworICBTT0NLRVQJZGF0YV9zb2NrZXQ7CisgIGludCAgICAgICAgICAgbmVlZF9zb2NrZXQ7CisKKyAgaW50ICAgdGVtcF9yZWN2czsKKyAgCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXM7CisKKyAgc3RydWN0CW9tbmlfcmVxdWVzdF9zdHJ1Y3QJKm9tbmlfcmVxdWVzdDsKKyAgc3RydWN0CW9tbmlfcmVzcG9uc2Vfc3RydWN0CSpvbW5pX3Jlc3BvbnNlOworICBzdHJ1Y3QJb21uaV9yZXN1bHRzX3N0cnVjdAkqb21uaV9yZXN1bHQ7CisgIAorI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyNkZWZpbmUgUkVRVUVTVF9DV05EX0lOSVRJQUwgMgorICAvKiAiaW4gdGhlIGJlZ2lubmluZy4uLiIgdGhlIFdBTlRfRklSU1RfQlVSU1Qgc3R1ZmYgd2FzIGxpa2UgYm90aAorICAgICBVbml4IGFuZCB0aGUgc3RhdGUgb2YgTmV3IEplcnNleSAtIGJvdGggd2VyZSBzaW1wbGUgYW4gdW5zcG9pbGVkLgorICAgICB0aGVuIGl0IHdhcyByZWFsaXplZCB0aGF0IHNvbWUgc3RhY2tzIGFyZSBxdWl0ZSBwaWNreSBhYm91dAorICAgICBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93cyBhbmQgYSBub24tdHJpdmlhbCBpbml0aWFsIGJ1cnN0IG9mCisgICAgIHJlcXVlc3RzIHdvdWxkIG5vdCBiZSBpbmRpdmlkdWFsIHNlZ21lbnRzIGV2ZW4gd2l0aCBUQ1BfTk9ERUxBWQorICAgICBzZXQuIHNvLCB3ZSBoYXZlIHRvIHN0YXJ0IHRyYWNraW5nIGEgcG9vci1tYW4ncyBjb25nZXN0aW9uIHdpbmRvdworICAgICB1cCBoZXJlIGluIHdpbmRvdyBzcGFjZSBiZWNhdXNlIHdlIHdhbnQgdG8gdHJ5IHRvIG1ha2Ugc29tZXRoaW5nCisgICAgIGhhcHBlbiB0aGF0IGZyYW5rbHksIHdlIGNhbm5vdCBndWFyYW50ZWUgd2l0aCB0aGUgc3BlY2lmaWNhdGlvbgorICAgICBvZiBUQ1AuICBhaW4ndCB0aGF0IGdyYW5kPy0pICByYWogMjAwNi0wMS0zMCAqLworICBpbnQgcmVxdWVzdHNfb3V0c3RhbmRpbmcgPSAwOworICBpbnQgcmVxdWVzdF9jd25kID0gUkVRVUVTVF9DV05EX0lOSVRJQUw7ICAvKiB3ZSBhc3MtdS1tZSB0aGF0IGhhdmluZworCQkJCQkgICAgICAgdGhyZWUgcmVxdWVzdHMKKwkJCQkJICAgICAgIG91dHN0YW5kaW5nIGF0IHRoZQorCQkJCQkgICAgICAgYmVnaW5uaW5nIG9mIHRoZSB0ZXN0CisJCQkJCSAgICAgICBpcyBvayB3aXRoIFRDUCBzdGFja3MKKwkJCQkJICAgICAgIG9mIGludGVyZXN0LiB0aGUgZmlyc3QKKwkJCQkJICAgICAgIHR3byB3aWxsIGNvbWUgZnJvbSBvdXIKKwkJCQkJICAgICAgIGZpcnN0X2J1cnN0IGxvb3AsIGFuZAorCQkJCQkgICAgICAgdGhlIHRoaXJkIGZyb20gb3VyCisJCQkJCSAgICAgICByZWd1bGFybHkgc2NoZWR1bGVkCisJCQkJCSAgICAgICBzZW5kICovCisjZW5kaWYKKworICBvbW5pX3JlcXVlc3QgPSAKKyAgICAoc3RydWN0IG9tbmlfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIG9tbmlfcmVzcG9uc2UgPSAKKyAgICAoc3RydWN0IG9tbmlfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgb21uaV9yZXN1bHQgPQorICAgIChzdHJ1Y3Qgb21uaV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorCisgIC8qIGJlZm9yZSB3ZSBzdGFydCBkb2luZyB0aGluZ3Mgd2l0aCBvdXIgb3duIHJlcXVlc3RzIGFuZCByZXNwb25zZXMKKyAgICAgbGV0cyBnbyBhaGVhZCBhbmQgZmluZC1vdXQgYWJvdXQgdGhlIHJlbW90ZSBzeXN0ZW0uIGF0IHNvbWUgcG9pbnQKKyAgICAgd2UgcHJvYmFibHkgbmVlZCB0byBwdXQgdGhpcyBzb21ld2hlcmUgZWxzZS4uLiAqLworICBnZXRfcmVtb3RlX3N5c3RlbV9pbmZvKCk7CisgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZQorICAgICBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50CisgICAgIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kCisgICAgIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKyAgCisgIGNvbXBsZXRlX2FkZHJpbmZvcygmcmVtb3RlX3JlcywKKwkJICAgICAmbG9jYWxfcmVzLAorCQkgICAgIHJlbW90ZV9ob3N0LAorCQkgICAgIHNvY2tldF90eXBlLAorCQkgICAgIHByb3RvY29sLAorCQkgICAgIDApOworCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIk9NTkkgVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICB9CisKKyAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycyAqLworICAKKyAgbmVlZF9zb2NrZXQgICA9IDE7CisKKyAgaWYgKGNvbm5lY3Rpb25fdGVzdCkgCisgICAgcGlja19uZXh0X3BvcnRfbnVtYmVyKGxvY2FsX3JlcyxyZW1vdGVfcmVzKTsKKworICAKKyAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suKi8KKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICB9CisKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKworICBzZW5kX3JpbmcgPSBOVUxMOworICByZWN2X3JpbmcgPSBOVUxMOworCisgIC8qIHlvdSB3aWxsIGtlZXAgcnVubmluZyB0aGUgdGVzdCB1bnRpbCB5b3UgZ2V0IGl0IHJpZ2h0ISA6KSAqLworICB3aGlsZSAoKChjb25maWRlbmNlIDwgMCkgJiYgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9tYXgpKSB8fAorCSAoY29uZmlkZW5jZV9pdGVyYXRpb24gPD0gaXRlcmF0aW9uX21pbikpIHsKKworICAgIHRyYW5zX2NvbXBsZXRlZCA9IDA7CisgICAgYnl0ZXNfeGZlcmQJPSAwLjA7CisgICAgcmVtb3RlX2J5dGVzX3hmZXJkID0gMC4wOworICAgIHRpbWVzX3VwIAk9IDA7CisgICAgYnl0ZXNfc2VudCA9IDA7CisgICAgYnl0ZXNfcmVjZWl2ZWQgPSAwOworICAgIGxvY2FsX3NlbmRfY2FsbHMgPSAwOworICAgIGxvY2FsX3JlY2VpdmVfY2FsbHMgPSAwOworCisjaWZkZWYgV0FOVF9GSVJTVF9CVVJTVAorICAgIC8qIHdlIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmVzZXQgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbnMKKyAgICAgICBvdXRzdGFuZGluZyBhbmQgdGhlICJjb25nZXN0aW9uIHdpbmRvdyBmb3IgZWFjaCBuZXcKKyAgICAgICBpdGVyYXRpb24uIHJhaiAyMDA2LTAxLTMxICovCisgICAgcmVxdWVzdHNfb3V0c3RhbmRpbmcgPSAwOworICAgIHJlcXVlc3RfY3duZCA9IFJFUVVFU1RfQ1dORF9JTklUSUFMOworI2VuZGlmCisKKworICAgIGRhdGFfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgICAgCisgICAgaWYgKGRhdGFfc29ja2V0ID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfb21uaTogdW5hYmxlIHRvIGNyZWF0ZSBkYXRhIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgbmVlZF9zb2NrZXQgPSAwOworCisgICAgLyogd2UgbmVlZCB0byBjb25zaWRlciBpZiB0aGlzIGlzIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCBpZiB3ZQorICAgICAgIGFyZSByZWNlaXZpbmcsIGlmIHdlIGFyZSBzZW5kaW5nLCBldGMsIHdoZW4gc2V0dGluZy11cCBvdXIgcmVjdgorICAgICAgIGFuZCBzZW5kIGJ1ZmZlciByaW5ncy4gd2Ugc2hvdWxkIG9ubHkgbmVlZCB0byBkbyB0aGlzIG9uY2UsIGFuZAorICAgICAgIHRoYXQgd291bGQgYmUgd2hlbiB0aGUgcmVsZXZhbnQgX3JpbmcgdmFyaWFibGUgaXMgTlVMTC4gcmFqCisgICAgICAgMjAwOC0wMS0xOCAqLworICAgIGlmICgoZGlyZWN0aW9uICYgTkVUUEVSRl9YTUlUKSAmJiAoTlVMTCA9PSBzZW5kX3JpbmcpKSB7CisgICAgICBpZiAocmVxX3NpemUgPiAwKSB7CisJLyogcmVxdWVzdC9yZXNwb25zZSB0ZXN0ICovCisJaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisJYnl0ZXNfdG9fc2VuZCA9IHJlcV9zaXplOworICAgICAgfQorICAgICAgZWxzZSB7CisJLyogc3RyZWFtIHRlc3QgKi8KKwlpZiAoc2VuZF9zaXplID09IDApIHsKKwkgIGlmIChsc3Nfc2l6ZSA+IDApIHsKKwkgICAgc2VuZF9zaXplID0gbHNzX3NpemU7CisJICB9CisJICBlbHNlIHsKKwkgICAgc2VuZF9zaXplID0gNDA5NjsKKwkgIH0KKwl9CisJaWYgKHNlbmRfd2lkdGggPT0gMCkgCisJICBzZW5kX3dpZHRoID0gKGxzc19zaXplL3NlbmRfc2l6ZSkgKyAxOworCWlmIChzZW5kX3dpZHRoID09IDEpIHNlbmRfd2lkdGgrKzsKKwlieXRlc190b19zZW5kID0gc2VuZF9zaXplOworICAgICAgfQorICAgICAgCisgICAgICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgICAgICBieXRlc190b19zZW5kLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQkic2VuZF9vbW5pOiAlZCBlbnRyeSBzZW5kX3Jpbmcgb2J0YWluZWQuLi5cbiIsCisJCXNlbmRfd2lkdGgpOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoKGRpcmVjdGlvbiAmIE5FVFBFUkZfUkVDVikgJiYgKE5VTEwgPT0gcmVjdl9yaW5nKSkgeworICAgICAgaWYgKHJzcF9zaXplID4gMCkgeworCWlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCWJ5dGVzX3RvX3JlY3YgPSByc3Bfc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCS8qIHN0cmVhbSB0ZXN0ICovCisJaWYgKHJlY3Zfc2l6ZSA9PSAwKSB7CisJICBpZiAobHNyX3NpemUgPiAwKSB7CisJICAgIHJlY3Zfc2l6ZSA9IGxzcl9zaXplOworCSAgfQorCSAgZWxzZSB7CisJICAgIHJlY3Zfc2l6ZSA9IDQwOTY7CisJICB9CisJfQorCWlmIChyZWN2X3dpZHRoID09IDApIHsKKwkgIHJlY3Zfd2lkdGggPSAobHNyX3NpemUvcmVjdl9zaXplKSArIDE7CisJICBpZiAocmVjdl93aWR0aCA9PSAxKSByZWN2X3dpZHRoKys7CisJfQorCWJ5dGVzX3RvX3JlY3YgPSByZWN2X3NpemU7CisgICAgICB9CisgICAgICAKKyAgICAgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgICAgIGJ5dGVzX3RvX3JlY3YsCisJCQkJICAgICAgIGxvY2FsX3JlY3ZfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsCisJCSJzZW5kX29tbmk6ICVkIGVudHJ5IHJlY3ZfcmluZyBvYnRhaW5lZC4uLlxuIiwKKwkJcmVjdl93aWR0aCk7CisgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghbm9fY29udHJvbCkgeyAvKiBmb28gKi8KKyAgCisgICAgICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuIG9yIG90aGVyd2lzZSBwcmVwYXJlIGZvcgorCSB3aGF0IGlzIHRvIGNvbWUuIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgcGFyYW10ZXJzIG9uIHRoZQorCSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZSByZWFzb24gZm9yIGFsbCB0aGUgdmFsdWVzCisJIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5CisJIGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyB2YWx1ZXMgd2hpY2ggd2lsbAorCSBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzCisJIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsCisJIGRlZmF1bHQgdG8gOCwgd2hpY2ggd2lsbCBwcm9iYWJseSBiZSBubyBhbGlnbm1lbnQKKwkgYWx0ZXJhdGlvbnMuICovCisgICAgICAKKyAgICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZSA9IERPX09NTkk7CisgICAgICBvbW5pX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJICAgPSByc3Nfc2l6ZV9yZXE7CisgICAgICBvbW5pX3JlcXVlc3QtPnNlbmRfc2l6ZSAgICAgICAgICAgICAgPSByZW1vdGVfc2VuZF9zaXplX3JlcTsKKyAgICAgIG9tbmlfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQJICAgPSByZW1vdGVfc2VuZF9hbGlnbjsKKyAgICAgIG9tbmlfcmVxdWVzdC0+c2VuZF9vZmZzZXQJICAgICAgICAgICA9IHJlbW90ZV9zZW5kX29mZnNldDsKKyAgICAgIG9tbmlfcmVxdWVzdC0+c2VuZF93aWR0aCAgICAgICAgICAgICA9IDE7IC8qIEZJWCBUSElTICovCisgICAgICBvbW5pX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZQkgICA9IHJlcV9zaXplOworICAgICAgCisgICAgICBvbW5pX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJICAgPSByc3Jfc2l6ZV9yZXE7CisgICAgICBvbW5pX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZSAgICAgICAgICAgPSByZW1vdGVfcmVjdl9zaXplX3JlcTsKKyAgICAgIG9tbmlfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQJICAgPSByZW1vdGVfcmVjdl9hbGlnbjsKKyAgICAgIG9tbmlfcmVxdWVzdC0+cmVjdl9vZmZzZXQJICAgICAgICAgICA9IHJlbW90ZV9yZWN2X29mZnNldDsKKyAgICAgIG9tbmlfcmVxdWVzdC0+cmVjdl93aWR0aCAgICAgICAgICAgICA9IDE7IC8qIEZJWCBUSElTICovCisgICAgICBvbW5pX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUJICAgPSByc3Bfc2l6ZTsKKyAgICAgIAorICAgICAgb21uaV9yZXF1ZXN0LT5ub19kZWxheQkgICAgICAgICAgID0gcmVtX25vZGVsYXk7CisgICAgICBvbW5pX3JlcXVlc3QtPnVzZV9zZW5kZmlsZSAgICAgICAgICAgPSByZW1vdGVfdXNlX3NlbmRmaWxlOworICAgICAgb21uaV9yZXF1ZXN0LT5jb25uZWN0X3Rlc3QgICAgICAgICAgID0gY29ubmVjdGlvbl90ZXN0OworICAgICAgCisgICAgICBvbW5pX3JlcXVlc3QtPm1lYXN1cmVfY3B1CSAgICAgICAgICAgPSByZW1vdGVfY3B1X3VzYWdlOworICAgICAgb21uaV9yZXF1ZXN0LT5jcHVfcmF0ZQkgICAgICAgICAgID0gcmVtb3RlX2NwdV9yYXRlOworICAgICAgaWYgKHRlc3RfdGltZSkKKwlvbW5pX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCSAgID0gdGVzdF90aW1lOworICAgICAgZWxzZQorCW9tbmlfcmVxdWVzdC0+dGVzdF9sZW5ndGgJICAgPSB0ZXN0X3RyYW5zICogLTE7CisgICAgICBvbW5pX3JlcXVlc3QtPnNvX3JjdmF2b2lkCSAgICAgICAgICAgPSByZW1fcmN2YXZvaWQ7CisgICAgICBvbW5pX3JlcXVlc3QtPnNvX3NuZGF2b2lkCSAgICAgICAgICAgPSByZW1fc25kYXZvaWQ7CisgICAgICBvbW5pX3JlcXVlc3QtPnNlbmRfZGlydHlfY291bnQgICAgICAgPSByZW1fZGlydHlfY291bnQ7CisgICAgICBvbW5pX3JlcXVlc3QtPnJlY3ZfZGlydHlfY291bnQgICAgICAgPSByZW1fZGlydHlfY291bnQ7CisgICAgICBvbW5pX3JlcXVlc3QtPnJlY3ZfY2xlYW5fY291bnQgICAgICAgPSByZW1fY2xlYW5fY291bnQ7CisgICAgICAKKyAgICAgIG9tbmlfcmVxdWVzdC0+Y2hlY2tzdW1fb2ZmICAgICAgICAgICA9IHJlbW90ZV9jaGVja3N1bV9vZmY7CisgICAgICBvbW5pX3JlcXVlc3QtPmRhdGFfcG9ydCAgICAgICAgICAgICAgPSBhdG9pKHJlbW90ZV9kYXRhX3BvcnQpOworICAgICAgb21uaV9yZXF1ZXN0LT5pcGZhbWlseSAgICAgICAgICAgICAgID0gYWZfdG9fbmYocmVtb3RlX3Jlcy0+YWlfZmFtaWx5KTsKKyAgICAgIG9tbmlfcmVxdWVzdC0+c29ja2V0X3R5cGUgICAgICAgICAgICA9IGhzdF90b19uc3Qoc29ja2V0X3R5cGUpOworICAgICAgb21uaV9yZXF1ZXN0LT5wcm90b2NvbCAgICAgICAgICAgICAgID0gcHJvdG9jb2w7CisKKyAgICAgIG9tbmlfcmVxdWVzdC0+aW50ZXJ2YWxfYnVyc3QgICAgICAgICA9IHJlbW90ZV9pbnRlcnZhbF9idXJzdDsKKyAgICAgIG9tbmlfcmVxdWVzdC0+aW50ZXJ2YWxfdXNlY3MgICAgICAgICA9IHJlbW90ZV9pbnRlcnZhbF91c2VjczsKKworICAgICAgb21uaV9yZXF1ZXN0LT5kaXJlY3Rpb24gICAgICAgICAgICAgID0gMDsKKyAgICAgIC8qIHllcywgdGhlIHNlbnNlIGhlcmUgaXMgY29ycmVjdCAtIGlmIHdlIGFyZSB0cmFuc21pdHRpbmcsIHRoZXkKKwkgcmVjZWl2ZSwgaWYgd2UgYXJlIHJlY2VpdmluZywgdGhleSBhcmUgdHJhbnNtaXR0aW5nLi4uICovCisgICAgICBpZiAoZGlyZWN0aW9uICYgTkVUUEVSRl9YTUlUKQorCW9tbmlfcmVxdWVzdC0+ZGlyZWN0aW9uIHw9IE5FVFBFUkZfUkVDVjsKKyAgICAgIGlmIChkaXJlY3Rpb24gJiBORVRQRVJGX1JFQ1YpCisJb21uaV9yZXF1ZXN0LT5kaXJlY3Rpb24gfD0gTkVUUEVSRl9YTUlUOworICAgIAorICAgICAgLyogc29tZSB0ZXN0cyBtYXkgcmVxdWlyZSBrbm93bGVkZ2Ugb2Ygb3VyIGxvY2FsIGFkZHJlc3NpbmcuIHN1Y2gKKwkgdGVzdHMgd2lsbCBmb3IgdGhlIHRpbWUgYmVpbmcgcmVxdWlyZSB0aGF0IHRoZSB1c2VyIHNwZWNpZnkgYQorCSBsb2NhbCBJUC9uYW1lIHNvIHdlIGNhbiBleHRyYWN0IHRoZW0gZnJvbSB0aGUgZGF0YV9zb2NrZXQuICovCisgICAgICBnZXRzb2NrbmFtZShkYXRhX3NvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZteV9hZGRyLCAmbXlfYWRkcl9sZW4pOworICAgICAgcmV0ID0gZ2V0X3NvY2thZGRyX2ZhbWlseV9hZGRyX3BvcnQoJm15X2FkZHIsCisJCQkJCSAgbmZfdG9fYWYob21uaV9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQkJCSAgb21uaV9yZXF1ZXN0LT5pcGFkZHIsCisJCQkJCSAgJihvbW5pX3JlcXVlc3QtPm5ldHBlcmZfcG9ydCkpOworICAgICAgCisgICAgICBpZiAoZGVidWcgPiAxKSB7CisJZnByaW50Zih3aGVyZSwibmV0cGVyZjogc2VuZF9vbW5pOiByZXF1ZXN0aW5nIE9NTkkgdGVzdFxuIik7CisgICAgICB9CisgICAgCisKKyAgICAgIHNlbmRfcmVxdWVzdCgpOworCisgICAgCisgICAgICAvKiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHNob3VsZCBjb250YWluIGFsbCB0aGUgcmVsZXZhbnQKKwkgc29ja2V0IGFuZCBvdGhlciBwYXJhbWV0ZXJzIHdlIG5lZWQgdG8ga25vdyBmb3IgdGhpcyB0ZXN0LgorCSBzbywgd2UgY2FuIHNob3ZlIHRoZW0gYmFjayBpbnRvIHRoZSByZWxldmFudCB2YXJpYWJsZXMgaGVyZQorCSBhbmQgYmUgb24gb3VyIHdheS4gKi8KKworICAgICAgcmVjdl9yZXNwb25zZV9uKE9NTklfUkVTUE9OU0VfQ09OVl9DVVRPRkYpOyAvKiBicml0dGxlLCBidXQgZnVuY3Rpb25hbCAqLworICAKKyAgICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKwlyc3Jfc2l6ZQkgPSBvbW5pX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworCXJlbW90ZV9yZWN2X3NpemUgPSBvbW5pX3Jlc3BvbnNlLT5yZWNlaXZlX3NpemU7CisJcnNzX3NpemUJID0gb21uaV9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKwlyZW1vdGVfc2VuZF9zaXplID0gb21uaV9yZXNwb25zZS0+c2VuZF9zaXplOworCXJlbV9ub2RlbGF5ICAgICAgPSBvbW5pX3Jlc3BvbnNlLT5ub19kZWxheTsKKwlyZW1vdGVfdXNlX3NlbmRmaWxlID0gb21uaV9yZXNwb25zZS0+dXNlX3NlbmRmaWxlOworCXJlbW90ZV9jcHVfdXNhZ2UgPSBvbW5pX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKwlyZW1vdGVfY3B1X3JhdGUgID0gb21uaV9yZXNwb25zZS0+Y3B1X3JhdGU7CisJcmVtb3RlX3NlbmRfd2lkdGggPSBvbW5pX3Jlc3BvbnNlLT5zZW5kX3dpZHRoOworCXJlbW90ZV9yZWN2X3dpZHRoID0gb21uaV9yZXNwb25zZS0+cmVjdl93aWR0aDsKKwkvKiBtYWtlIHN1cmUgdGhhdCBwb3J0IG51bWJlcnMgYXJlIGluIG5ldHdvcmsgb3JkZXIgYmVjYXVzZQorCSAgIHJlY3ZfcmVzcG9uc2Ugd2lsbCBoYXZlIHB1dCBldmVyeXRoaW5nIGludG8gaG9zdCBvcmRlciAqLworCXNldF9wb3J0X251bWJlcihyZW1vdGVfcmVzLAorCQkJKHVuc2lnbmVkIHNob3J0KW9tbmlfcmVzcG9uc2UtPmRhdGFfcG9ydCk7CisJCisJaWYgKGRlYnVnKSB7CisJICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKwkgIGZwcmludGYod2hlcmUsInJlbW90ZSBwb3J0IGlzICV1XG4iLGdldF9wb3J0X251bWJlcihyZW1vdGVfcmVzKSk7CisJICBmZmx1c2god2hlcmUpOworCX0KKwkvKiBqdXN0IGluIGNhc2UgdGhlIHJlbW90ZSBkaWRuJ3QgbnVsbCB0ZXJtaW5hdGUgKi8KKwlpZiAoTlVMTCA9PSByZW1vdGVfc3lzdGVtX21vZGVsKSB7CisJICBvbW5pX3Jlc3BvbnNlLT5zeXN0ZW1fbW9kZWxbc2l6ZW9mKG9tbmlfcmVzcG9uc2UtPnN5c3RlbV9tb2RlbCktMV0gPSAwOworCSAgcmVtb3RlX3N5c3RlbV9tb2RlbCA9IHN0cmR1cChvbW5pX3Jlc3BvbnNlLT5zeXN0ZW1fbW9kZWwpOworCX0KKwlpZiAoTlVMTCA9PSByZW1vdGVfY3B1X21vZGVsKSB7CisJICBvbW5pX3Jlc3BvbnNlLT5jcHVfbW9kZWxbc2l6ZW9mKG9tbmlfcmVzcG9uc2UtPmNwdV9tb2RlbCkgLTEgXSA9IDA7CisJICByZW1vdGVfY3B1X21vZGVsID0gc3RyZHVwKG9tbmlfcmVzcG9uc2UtPmNwdV9tb2RlbCk7CisJfQorCXJlbW90ZV9jcHVfZnJlcXVlbmN5ID0gb21uaV9yZXNwb25zZS0+Y3B1X2ZyZXF1ZW5jeTsKKworCWlmIChOVUxMID09IHJlbW90ZV9zZWN1cml0eV9zcGVjaWZpYykgeworCSAgb21uaV9yZXNwb25zZS0+c2VjdXJpdHlfc3RyaW5nW3NpemVvZihvbW5pX3Jlc3BvbnNlLT5zZWN1cml0eV9zdHJpbmcpIC0gMV0gPSAwOworCSAgcmVtb3RlX3NlY3VyaXR5X3NwZWNpZmljID0gc3RyZHVwKG9tbmlfcmVzcG9uc2UtPnNlY3VyaXR5X3N0cmluZyk7CisJfQorCS8qIHRvcCBiaXRzIHR5cGUsIGJvdHRvbSBiaXRzIGVuYWJsZWQgKi8KKwlyZW1vdGVfc2VjdXJpdHlfdHlwZV9pZCA9IChpbnQpIG9tbmlfcmVzcG9uc2UtPnNlY3VyaXR5X2luZm8gPj4gMTY7CisJcmVtb3RlX3NlY3VyaXR5X2VuYWJsZWRfbnVtID0gKHNob3J0KW9tbmlfcmVzcG9uc2UtPnNlY3VyaXR5X2luZm87CisJcmVtb3RlX3NlY3VyaXR5X3R5cGUgPSBuc2VjX3R5cGVfdG9fc3RyKHJlbW90ZV9zZWN1cml0eV90eXBlX2lkKTsKKwlyZW1vdGVfc2VjdXJpdHlfZW5hYmxlZCA9IAorCSAgbnNlY19lbmFibGVkX3RvX3N0cihyZW1vdGVfc2VjdXJpdHlfZW5hYmxlZF9udW0pOworICAgICAgfQorICAgICAgZWxzZSB7CisJU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlmcHJpbnRmKHdoZXJlLAorCQkibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkJbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCXBlcnJvcigiIik7CisJZmZsdXNoKHdoZXJlKTsKKwlleGl0KDEpOworICAgICAgfQorICAgIAorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmIChOVUxMID09IHJlbW90ZV9zeXN0ZW1fbW9kZWwpIAorCXJlbW90ZV9zeXN0ZW1fbW9kZWwgPSBzdHJkdXAoIlVua25vd24gU3lzdGVtIE1vZGVsIik7CisgICAgICBpZiAoTlVMTCA9PSByZW1vdGVfY3B1X21vZGVsKQorCXJlbW90ZV9jcHVfbW9kZWwgPSBzdHJkdXAoIlVua25vd24gQ1BVIE1vZGVsIik7CisgICAgICByZW1vdGVfY3B1X2ZyZXF1ZW5jeSA9IC0xOworICAgIH0KKworI2lmZGVmIFdBTlRfREVNTworICAgIC8qIGF0IHNvbWUgcG9pbnQgd2Ugd2lsbCBoYXZlIHRvIGJlIG1vcmUgY2xldmVyIGFib3V0IHRoaXMsIGJ1dAorICAgICAgIGZvciBub3cgd2Ugd29uJ3QgKi8KKworICAgIERFTU9fUlJfU0VUVVAoMTAwKTsKKyNlbmRpZgorCisgICAgLyogaWYgd2UgYXJlIG5vdCBhIGNvbm5lY3Rpb25sZXNzIHByb3RvY29sLCB3ZSBuZWVkIHRvIGNvbm5lY3QuIGF0CisgICAgICAgc29tZSBwb2ludCBldmVuIGlmIHdlIGFyZSBhIGNvbm5lY3Rpb25sZXNzIHByb3RvY29sLCB3ZSBtYXkKKyAgICAgICBzdGlsbCB3YW50IHRvICJjb25uZWN0IiBmb3IgY29udmVuaWVuY2UgcmFqIDIwMDgtMDEtMTQgKi8KKyAgICBuZWVkX3RvX2Nvbm5lY3QgPSAocHJvdG9jb2wgIT0gSVBQUk9UT19VRFApOworICAgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgdGVzdHMgb3ZlciBhCisgICAgICAgInJlbGlhYmxlL2Nvbm5lY3Rpb24tb3JpZW50ZWQiIHRyYW5zcG9ydCAoZWcgVENQLCBTQ1RQLCBldGMpIHRoaXMKKyAgICAgICBjYW4gYmUgZWl0aGVyIHRpbWUgb3IgYnl0ZS90cmFuc2FjdGlvbiBjb3VudCBiYXNlZC4gIGZvcgorICAgICAgIHVucmVsaWFibGUgdHJhbnNwb3J0IG9yIGNvbm5lY3Rpb24gdGVzdHMgaXQgY2FuIG9ubHkgYmUgdGltZQorICAgICAgIGJhc2VkLiAgaGF2aW5nIHNhaWQgdGhhdCwgd2UgcmVseSBlbnRpcmVseSBvbiBvdGhlciBjb2RlIHRvCisgICAgICAgZW5mb3JjZSB0aGlzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLiByYWogMjAwOC0wMS0wOCAqLworICAgIAorICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gIGlmCisJIHdlIGFyZSBhIHJlY3Ytb25seSB0ZXN0LCB3ZSBuZWVkIHRvIHByb3RlY3Qgb3Vyc2VsZiBhZ2FpbnN0CisJIHRoZSByZW1vdGUgZ29pbmcgcG9vZiwgYnV0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0CisJIGdpdmUtdXAgYmVmb3JlIHRoZXkgZmluaXNoLCBzbyB3ZSB3aWxsIGFkZCBhIFBBRF9USU1FIHRvIHRoZQorCSB0aW1lci4gIGlmIHdlIGFyZSBSUiBvciBYTUlULCB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCBmb3IKKwkgcGFkZGluZyAqLworICAgICAgdGltZXNfdXAgPSAwOworICAgICAgdW5pdHNfcmVtYWluaW5nID0gMDsKKyAgICAgIGlmICgoIW5vX2NvbnRyb2wpICYmIChORVRQRVJGX1JFQ1ZfT05MWShkaXJlY3Rpb24pKSkKKwlwYWRfdGltZSA9IFBBRF9USU1FOworICAgICAgc3RhcnRfdGltZXIodGVzdF90aW1lICsgcGFkX3RpbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFRoZSB0ZXN0ZXIgd2FudGVkIHRvIHNlbmQgYSBudW1iZXIgb2YgYnl0ZXMgb3IgZXhjaGFuZ2UgYQorCSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zLiAqLworICAgICAgaWYgKE5FVFBFUkZfSVNfUlIoZGlyZWN0aW9uKSkKKwl1bml0c19yZW1haW5pbmcgPSB0ZXN0X3RyYW5zOworICAgICAgZWxzZQorCXVuaXRzX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgICB0aW1lc191cCA9IDE7CisgICAgfQorICAgIAorICAgIC8qIGdyYWIgdGhlIGN1cnJlbnQgdGltZSwgYW5kIGlmIG5lY2Vzc2FyeSBhbnkgc3RhcnRpbmcgaW5mb3JtYXRpb24KKyAgICAgICBmb3IgdGhlIGdhdGhlcmluZyBvZiBDUFUgdXRpbGl6YXRpb24gYXQgdGhpcyBlbmQuICovCisgICAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisKKyNpZiBkZWZpbmVkKFdBTlRfSU5URVJWQUxTKQorICAgIElOVEVSVkFMU19JTklUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgIGlmIChkZW1vX21vZGUpIHsKKyAgICAgIEhJU1RfdGltZXN0YW1wKGRlbW9fb25lX3B0cik7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgLyogdGhlICJPUiIgaGVyZSBhbGxvd3MgdXMgdG8gY29udHJvbCB0ZXN0IGxlbmd0aCBieSBlaXRoZXIKKyAgICAgICBieXRlL3RyYW5zYWN0aW9uIGNvdW50IG9yIGJ5IHRpbWVyLiAgd2hlbiB0aGUgdGVzdCBpcworICAgICAgIGJ5dGUvdHJhbnNhY3Rpb24gY291bnQgYmFzZWQgdGhlIHRpbWUgdGVzdCB3aWxsIGFsd2F5cyBldmFsdWF0ZQorICAgICAgIGZhbHNlLiB3aGVuIHRoZSB0ZXN0IGlzIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUvdHJhbnNhY3Rpb24KKyAgICAgICBjb3VudCB3aWxsIGFsd2F5cyBldmFsdWF0ZSB0byBmYWxzZS4gIHdoZW4gdGhlIHRlc3QgaXMgZmluaXNoZWQKKyAgICAgICB0aGUgd2hvbGUgZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZworICAgICAgIGRhdGEuIGF0IGxlYXN0IHRoYXQgaXMgdGhlIHBsYW4gOikgIHJhaiAyMDA4LTAxLTA4ICovCisgICAgCisgICAgd2hpbGUgKCghdGltZXNfdXApIHx8ICh1bml0c19yZW1haW5pbmcgPiAwKSkgeworICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIC8qIG9ubHkgcHVsbCB0aGUgdGltZXN0YW1wIGlmIHdlIGFyZSBhY3R1YWxseSBnb2luZyB0byB1c2UgdGhlCisJIHJlc3VsdHMgb2YgdGhlIHdvcmsuICB3ZSBwdXQgdGhlIGNhbGwgaGVyZSBzbyBpdCBjYW4gd29yayBmb3IKKwkgYW55IHNvcnQgb2YgdGVzdCAtIGNvbm5lY3Rpb24sIHJlcXVlc3QvcmVzcG9uc2UsIG9yIHN0cmVhbS4KKwkgbm8sIGl0IGlzbid0ICJwZXJmZWN0IiBmb3IgYWxsIG9mIHRoZW0gLSBmb3Igc29tZSBpdCB3aWxsCisJIGluY2x1ZGUgYSBmZXcgbW9yZSAiaWYncyIgdGhhbiBhIHB1cnBvc2Utd3JpdHRlbiByb3V0aW5lLCBidXQKKwkgaXQgX3Nob3VsZF8gYmUgdGhlIGNhc2UgdGhhdCB0aGUgdGltZSBzcGVudCB1cCBoZXJlIGlzCisJIGVwc2lsb24gY29tcGFyZWQgdG8gdGltZSBzcGVudCBlbHNld2hlcmUgaW4gdGhlIHN0YWNrIHNvIGl0CisJIHNob3VsZCBub3QgYmUgYSBiaWcgZGVhbC4gIGZhbW91cyBsYXN0IHdvcmRzIG9mIHJhagorCSAyMDA4LTAxLTA4ICovCisgICAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworCUhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworICAgIGFnYWluOgorCisgICAgICBpZiAobmVlZF9zb2NrZXQpIHsKKwlpZiAoY29ubmVjdGlvbl90ZXN0KSAKKwkgIHBpY2tfbmV4dF9wb3J0X251bWJlcihsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisKKwlkYXRhX3NvY2tldCA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKwlpZiAoZGF0YV9zb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkgIHBlcnJvcigibmV0cGVyZjogc2VuZF9vbW5pOiB1bmFibGUgdG8gY3JlYXRlIGRhdGEgc29ja2V0Iik7CisJICBleGl0KDEpOworCX0KKwluZWVkX3NvY2tldCA9IDA7CisgICAgICB9CisKKyAgICAgIC8qIG9ubHkgY29ubmVjdCBpZiBhbmQgd2hlbiB3ZSBuZWVkIHRvICovCisgICAgICBpZiAobmVlZF90b19jb25uZWN0KSB7CisJLyogYXNzaWduIHRvIGRhdGFfc29ja2V0IHNpbmNlIGNvbm5lY3RfZGF0YV9zb2NrZXQgcmV0dXJucworCSAgIFNPQ0tFVCBhbmQgbm90IGludCB0aGFua3MgdG8gV2luZG93cy4gKi8KKwlyZXQgPSBjb25uZWN0X2RhdGFfc29ja2V0KGRhdGFfc29ja2V0LHJlbW90ZV9yZXMpOworCWlmIChyZXQgPT0gMCkgeworCSAgY29ubmVjdGVkID0gMTsKKwkgIG5lZWRfdG9fY29ubmVjdCA9IDA7CisJfQorCWVsc2UgaWYgKHJldCA9PSAtMSkgeworCSAgdGltZXNfdXAgPSAxOworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKwllbHNlIGlmICgocmV0ID09IC0yKSAmJiBjb25uZWN0aW9uX3Rlc3QpIHsKKwkgIC8qIHRyYW5zaWVudCBlcnJvciAgb24gYSBjb25uZWN0aW9uIHRlc3QgbWVhbnMgZ28gYXJvdW5kIGFuZAorCSAgICAgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBsb2NhbCBwb3J0IG51bWJlciAqLworCSAgZnByaW50Zih3aGVyZSwidHJhbnNpZW50ISB0cmFuc2llbnQhIHRvcnBlZG8gaW4gdGhlIHdhdGVyIVxuIik7CisJICBmZmx1c2god2hlcmUpOworCSAgY2xvc2UoZGF0YV9zb2NrZXQpOworCSAgY29ubmVjdGVkID0gMDsgIC8qIHByb2JhYmx5IHJlZHVuZGFudCBidXQgd2hhdCB0aGUgaGVjay4uLiAqLworCSAgbmVlZF9zb2NrZXQgPSAxOworCSAgbmVlZF90b19jb25uZWN0ID0gMTsKKwkgIC8qIHRoaXMgd2lsbCBzdHVmZiB0aGUgbmV4dCBsb2NhbCBwb3J0IG51bWJlciB3aXRoaW4gYm91bmRzCisJICAgICBpbnRvIG91ciBsb2NhbCByZXMsIGFuZCB0aGVuIHdoZW4gdGhlIGdvdG8gaGFzIHVzCisJICAgICBhbGxvY2F0aW5nIGEgbmV3IHNvY2tldCBpdCB3aWxsIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIHRoZQorCSAgICAgYmluZCgpIGNhbGwgKi8KKwkgIHBpY2tfbmV4dF9wb3J0X251bWJlcihsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisJICBnb3RvIGFnYWluOworCX0KKwllbHNlIHsKKwkgIC8qIGVpdGhlciB0aGlzIHdhcyBhIGhhcmQgZmFpbHVyZSAoLTMpIG9yIGEgc29mdCBmYWlsdXJlIG9uCisJICAgICBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGNvbm5lY3Rpb24gdGVzdCAqLworCSAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX29tbmk6IGNvbm5lY3RfZGF0YV9zb2NrZXQgZmFpbGVkIik7CisJICBleGl0KDEpOworCX0KKyAgICAgIH0KKworI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICAgIC8qIHdlIGNhbiBpbmplY3Qgbm8gbW9yZSB0aGFuIHJlcXVlc3RfY3duZCwgd2hpY2ggd2lsbCBncm93IHdpdGgKKwkgdGltZSwgYW5kIG5vIG1vcmUgdGhhbiBmaXJzdF9idXJzdF9zaXplLiAgd2UgZG9uJ3QgdXNlIDw9IHRvCisJIGFjY291bnQgZm9yIHRoZSAicmVndWxhcmx5IHNjaGVkdWxlZCIgc2VuZCBjYWxsLiAgb2YgY291cnNlCisJIHRoYXQgbWFrZXMgaXQgbW9yZSBhICJtYXhfb3V0c3RhbmRpbmdfIHRoYW4gYQorCSAiZmlyc3RfYnVyc3Rfc2l6ZSIgYnV0IGZvciBub3cgd2Ugd29uJ3QgZml4IHRoZSBuYW1lcy4gYWxzbywKKwkgSSBzdXNwZWN0IHRoZSBleHRyYSBjaGVjayBhZ2FpbnN0IDwgZmlyc3RfYnVyc3Rfc2l6ZSBpcworCSByZWR1bmRhbnQgc2luY2UgbGF0ZXIgSSBleHBlY3QgdG8gbWFrZSBzdXJlIHRoYXQgcmVxdWVzdF9jd25kCisJIGNhbiBuZXZlciBnZXQgbGFyZ2VyIHRoYW4gZmlyc3RfYnVyc3Rfc2l6ZSwgYnV0IGp1c3QgYXQgdGhlCisJIG1vbWVudCBJJ20gZmVlbGluZyBsaWtlIGEgYmVsdCBhbmQgc3VzcGVuZGVycyBraW5kIG9mCisJIHByb2dyYW1tZXIuIHJhaiAyMDA2LTAxLTMwICovCisgICAgICAvKiB3ZSBvbmx5IHdhbnQgdG8gaW5qZWN0IHRoZSBidXJzdCBpZiB0aGlzIGlzIGEgZnVsbC1vbgorCSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QuIG90aGVyd2lzZSBpdCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlCisJIGFueXdheS4gcmFqIDIwMDgtMDEtMjUgKi8KKyAgICAgIHdoaWxlICgoZmlyc3RfYnVyc3Rfc2l6ZSA+IDApICYmCisJICAgICAocmVxdWVzdHNfb3V0c3RhbmRpbmcgPCByZXF1ZXN0X2N3bmQpICYmCisJICAgICAocmVxdWVzdHNfb3V0c3RhbmRpbmcgPCBmaXJzdF9idXJzdF9zaXplKSAmJgorCSAgICAgKE5FVFBFUkZfSVNfUlIoZGlyZWN0aW9uKSkgJiYKKwkgICAgICghY29ubmVjdGlvbl90ZXN0KSkgeworCWlmIChkZWJ1ZykgeworCSAgZnByaW50Zih3aGVyZSwKKwkJICAiaW5qZWN0aW5nLCByZXFfb3V0c3RhbmRpbmcgJWQgcmVxX2N3bmQgJWQgYnVyc3QgJWRcbiIsCisJCSAgcmVxdWVzdHNfb3V0c3RhbmRpbmcsCisJCSAgcmVxdWVzdF9jd25kLAorCQkgIGZpcnN0X2J1cnN0X3NpemUpOworCX0KKwlpZiAoKHJldCA9IHNlbmRfZGF0YShkYXRhX3NvY2tldCwKKwkJCSAgICAgc2VuZF9yaW5nLAorCQkJICAgICBieXRlc190b19zZW5kLAorCQkJICAgICAoY29ubmVjdGVkKSA/IE5VTEwgOiByZW1vdGVfcmVzLT5haV9hZGRyLAorCQkJICAgICByZW1vdGVfcmVzLT5haV9hZGRybGVuKSkgIT0gYnl0ZXNfdG9fc2VuZCkgeworCSAgLyogaW4gdGhlb3J5LCB3ZSBzaG91bGQgbmV2ZXIgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgaW4gdGhlCisJICAgICBmaXJzdCBidXJzdCAqLworCSAgcGVycm9yKCJzZW5kX29tbmk6IGluaXRpYWwgYnVyc3QgZGF0YSBzZW5kIGVycm9yIik7CisJICBleGl0KC0xKTsKKwl9CisJbG9jYWxfc2VuZF9jYWxscyArPSAxOworCXJlcXVlc3RzX291dHN0YW5kaW5nICs9IDE7CisgICAgICB9CisKKyNlbmRpZiAvKiBXQU5UX0ZJUlNUX0JVUlNUICovCisKKyAgICAgIC8qIGlmIHdlIHNob3VsZCB0cnkgdG8gc2VuZCBzb21ldGhpbmcsIHRoZW4gYnkgYWxsIG1lYW5zLCBsZXQgdXMKKwkgdHJ5IHRvIHNlbmQgc29tZXRoaW5nLiAqLworICAgICAgaWYgKGRpcmVjdGlvbiAmIE5FVFBFUkZfWE1JVCkgeworCXJldCA9IHNlbmRfZGF0YShkYXRhX3NvY2tldCwKKwkJCXNlbmRfcmluZywKKwkJCWJ5dGVzX3RvX3NlbmQsCisJCQkoY29ubmVjdGVkKSA/IE5VTEwgOiByZW1vdGVfcmVzLT5haV9hZGRyLAorCQkJLyogaWYgdGhlIGRlc3RpbmF0aW9uIGFib3ZlIGlzIE5VTEwsIHRoaXMgaXMgaWdub3JlZCAqLworCQkJcmVtb3RlX3Jlcy0+YWlfYWRkcmxlbik7CisJLyogdGhlIG9yZGVyIG9mIHRoZXNlIGlmJ3Mgd2lsbCBzZWVtIGEgdHJpZmZsZSBzdHJhbmdlLCBidXQgdGhleQorCSAgIGFyZSBteSBiZXN0IGd1ZXNzIGFzIHRvIG9yZGVyIG9mIHByb2JhYmlsdHkgYW5kL29yIGltcG9ydGFuY2UKKwkgICB0byB0aGUgb3ZlcmhlYWQgcmFqIDIwMDgtMDEtMDkqLworCWlmIChyZXQgPT0gYnl0ZXNfdG9fc2VuZCkgeworCSAgLyogaWYgdGhpcyBpcyBhIHNlbmQtb25seSB0ZXN0IGNvbnRyb2xsZWQgYnkgYnl0ZSBjb3VudCB3ZQorCSAgICAgZGVjcmVtZW50IHVuaXRzX3JlbWFpbmluZyBieSB0aGUgYnl0ZXMgc2VudCAqLworCSAgaWYgKCEoZGlyZWN0aW9uICYgTkVUUEVSRl9SRUNWKSAmJiAodW5pdHNfcmVtYWluaW5nID4gMCkpIHsKKwkgICAgdW5pdHNfcmVtYWluaW5nIC09IHJldDsKKwkgIH0KKwkgIGJ5dGVzX3NlbnQgKz0gcmV0OworCSAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworCSAgbG9jYWxfc2VuZF9jYWxscysrOworCX0KKwllbHNlIGlmIChyZXQgPT0gLTIpIHsKKwkgIC8qIHdoYXQgdG8gZG8gaGVyZSAtMiBtZWFucyBhIG5vbi1mYXRhbCBlcnJvciAtIHByb2JhYmx5CisJICAgICBFTk9CVUZTIGFuZCBzbyBvdXIgc2VuZCBkaWRuJ3QgaGFwcGVuLiAgaW4gdGhlIG9sZCBjb2RlIGZvcgorCSAgICAgVURQX1NUUkVBTSB3ZSB3b3VsZCBqdXN0IGNvbnRpbnVlIGluIHRoZSB3aGlsZSBsb29wLiAgaXQKKwkgICAgIGlzbid0IGNsZWFyIHRoYXQgaXMgd2hhdCB0byBkbyBoZXJlLCBzbyB3ZSB3aWxsIHNpbXBseQorCSAgICAgaW5jcmVtZW50IHRoZSBmYWlsZWRfc2VuZHMgc3RhdCBhbmQgZmFsbC10aHJvdWdoLiBJZiB0aGlzCisJICAgICBpcyBhIFVEUF9TVFJFQU0gc3R5bGUgb2YgdGVzdCwgdGhlIG5ldCBlZmZlY3Qgc2hvdWxkIGJlIHRoZQorCSAgICAgc2FtZS4gaWYgdGhpcyBpcyBhIFVEUF9SUiB3aXRoIGEgcmVhbGx5LWJpZyBidXJzdCBjb3VudCwgSQorCSAgICAgZG9uJ3QgdGhpbmsgd2Ugd2VyZSBjaGVja2luZyBmb3IgRU5PQlVGUyB0aGVyZSBhbnl3YXkgYW5kCisJICAgICBzbyB3b3VsZCBoYXZlIGZhaWxlZC4gIEhlcmUgd2UgY2FuIGp1c3QgbGV0IHRoaW5ncworCSAgICAgc2xpZGUuICovCisJICBmYWlsZWRfc2VuZHMrKzsKKwl9CisJZWxzZSBpZiAocmV0ID09IDApIHsKKwkgIC8qIHdhcyB0aGlzIGEgemVyby1ieXRlIHNlbmQ/IGlmIGl0IHdhcywgdGhlbiBvc3RlbnNpYmx5IHdlCisJICAgICB3b3VsZCBoaXQgdGhlIHJldCA9PSBieXRlc190b19zZW5kIGNhc2Ugd2hpY2ggbWVhbnMgd2UnZAorCSAgICAgbmV2ZXIgZ2V0IGhlcmUgYXMgd2UgYXJlIHVzaW5nIGJsb2NraW5nIHNlbWFudGljcyAqLworCSAgZnByaW50Zih3aGVyZSwiSE9XIERJRCBJIEdFVCBIRVJFP1xuIik7CisJICBmZmx1c2god2hlcmUpOworCX0KKwllbHNlIGlmIChyZXQgPT0gLTEpIHsKKwkgIHRpbWVzX3VwID0gMTsKKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9CisJZWxzZSB7CisJICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfb21uaTogc2VuZF9kYXRhIGZhaWxlZCIpOworCSAgZXhpdCgxKTsKKwl9CisKKyAgICAgIH0KKworI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICAgIC8qIGl0IGlzbid0IGNsZWFyIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGRpcmVjdGlvbnMgaGVyZS4gIHRoZQorCSBpbmNyZW1lbnQgc2hvdWxkIGJlIGNoZWFwZXIgdGhhbiB0aGUgY29uZGl0aW9uYWwsIGFuZCBpdAorCSBzaG91bGRuJ3QgaHVydCB0aGUgb3RoZXIgZGlyZWN0aW9ucyBiZWNhdXNlIHRoZXknbGwgbmV2ZXIKKwkgbG9vayBhdCB0aGVtLiBmYW1vdXMgbGFzdCB3b3JkcyBvZiByYWogMjAwOC0wMS0yNSAqLworICAgICAgcmVxdWVzdHNfb3V0c3RhbmRpbmcgKz0gMTsKKyNlbmRpZgorCisgICAgICBpZiAoZGlyZWN0aW9uICYgTkVUUEVSRl9SRUNWKSB7CisJcnJldCA9IHJlY3ZfZGF0YShkYXRhX3NvY2tldCwKKwkJCXJlY3ZfcmluZywKKwkJCWJ5dGVzX3RvX3JlY3YsCisJCQkoY29ubmVjdGVkKSA/IE5VTEwgOiAoc3RydWN0IHNvY2thZGRyICopJnJlbW90ZV9hZGRyLAorCQkJLyogaWYgcmVtb3RlX2FkZHIgTlVMTCB0aGlzIGlzIGlnbm9yZWQgKi8KKwkJCSZyZW1vdGVfYWRkcl9sZW4sCisJCQkvKiBpZiBYTUlUIGFsc28gc2V0IHRoaXMgaXMgUlIgc28gd2FpdGFsbCAqLworCQkJKGRpcmVjdGlvbiAmIE5FVFBFUkZfWE1JVCkgPyBORVRQRVJGX1dBSVRBTEw6IDAsCisJCQkmdGVtcF9yZWN2cyk7CisJaWYgKHJyZXQgPiAwKSB7CisJICAvKiBpZiB0aGlzIGlzIGEgcmVjdi1vbmx5IHRlc3QgY29udHJvbGxlZCBieSBieXRlIGNvdW50IHdlCisJICAgICBkZWNyZW1lbnQgdGhlIHVuaXRzX3JlbWFpbmluZyBieSB0aGUgYnl0ZXMgcmVjZWl2ZWQgKi8KKwkgIGlmICghKGRpcmVjdGlvbiAmIE5FVFBFUkZfWE1JVCkgJiYgKHVuaXRzX3JlbWFpbmluZyA+IDApKSB7CisJICAgIHVuaXRzX3JlbWFpbmluZyAtPSBycmV0OworCSAgfQorCSAgYnl0ZXNfcmVjZWl2ZWQgKz0gcnJldDsKKwkgIGxvY2FsX3JlY2VpdmVfY2FsbHMgKz0gdGVtcF9yZWN2czsKKwl9CisJZWxzZSBpZiAocnJldCA9PSAwKSB7CisJICAvKiBpcyB0aGlzIHRoZSBlbmQgb2YgYSB0ZXN0LCBqdXN0IGEgemVyby1ieXRlIHJlY3YsIG9yCisJICAgICBzb21ldGhpbmcgZWxzZT8gdGhhdCBpcyBhbiBleGNlZWRpbmdseSBnb29kIHF1ZXN0aW9uIGFuZAorCSAgICAgb25lIGZvciB3aGljaCBJIGRvbid0IHByZXNlbnRseSBoYXZlIGEgZ29vZCBhbnN3ZXIsIGJ1dAorCSAgICAgdGhhdCB3b24ndCBzdG9wIG1lIGZyb20gZ3Vlc3NpbmcgOikgcmFqIDIwMDgtMDEtMDkgKi8KKwkgIGlmICghKChjb25uZWN0aW9uX3Rlc3QpIHx8IChudWxsX21lc3NhZ2Vfb2spKSkgeworCSAgICAvKiBpZiBpdCBpcyBuZWl0aGVyIGEgY29ubmVjdGlvbl90ZXN0IG5vciBudWxsX21lc3NhZ2Vfb2sgaXQKKwkgICAgICAgbXVzdCBiZSB0aGUgZW5kIG9mIHRoZSB0ZXN0ICovCisJICAgIHRpbWVzX3VwID0gMTsgLyogb3N0ZW5zaWJseSB0aGUgc2lnbmFsIGhhbmRsZXIgZGlkIHRoaXMgKi8KKwkgICAgYnJlYWs7CisJICB9CisJICBsb2NhbF9yZWNlaXZlX2NhbGxzICs9IHRlbXBfcmVjdnM7CisJfQorCWVsc2UgaWYgKHJyZXQgPT0gLTEpIHsKKwkgIC8qIHRlc3QgdGltZWQtb3V0ICovCisJICB0aW1lc191cCA9IDE7CisJICB0aW1lZF9vdXQgPSAxOworCSAgYnJlYWs7CisJfQorCWVsc2UgeworCSAgLyogcHJlc2VudGx5IGF0IGxlYXN0LCAtMiBhbmQgLTMgYXJlIGVxdWFsbHkgYmFkIG9uIHJlY3YgKi8KKwkgIHBlcnJvcigibmV0cGVyZjogc2VuZF9vbW5pOiByZWN2X2RhdGEgZmFpbGVkIik7CisJICBleGl0KDEpOworCX0KKwlyZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisJLyogc28sIHNpbmNlIHdlJ3ZlIGdvdHRlbiBhIHJlc3BvbnNlIGJhY2ssIHVwZGF0ZSB0aGUKKwkgICBib29ra2VlcGluZyBhY2NvcmRpbmdseS4gIHRoZXJlIGlzIG9uZSBsZXNzIHJlcXVlc3QKKwkgICBvdXRzdGFuZGluZyBhbmQgd2UgY2FuIHB1dCBvbmUgbW9yZSBvdXQgdGhlcmUgdGhhbiBiZWZvcmUuICovCisJcmVxdWVzdHNfb3V0c3RhbmRpbmcgLT0gMTsKKwlpZiAoKHJlcXVlc3RfY3duZCA8IGZpcnN0X2J1cnN0X3NpemUpICYmCisJICAgIChORVRQRVJGX0lTX1JSKGRpcmVjdGlvbikpKSB7CisJICByZXF1ZXN0X2N3bmQgKz0gMTsKKwkgIGlmIChkZWJ1ZykgeworCSAgICBmcHJpbnRmKHdoZXJlLAorCQkgICAgImluY3IgcmVxX2N3bmQgdG8gJWQgZmlyc3RfYnVyc3QgJWQgcmVxc19vdXRzdG5kbmcgJWRcbiIsCisJCSAgICByZXF1ZXN0X2N3bmQsCisJCSAgICBmaXJzdF9idXJzdF9zaXplLAorCQkgICAgcmVxdWVzdHNfb3V0c3RhbmRpbmcpOworCSAgfQorCX0KKyNlbmRpZgorCisgICAgICB9CisgICAgICAKKyAgICAgIC8qIGlmIHRoaXMgaXMgYSBjb25uZWN0aW9uIHRlc3QsIHdlIHdhbnQgdG8gZG8gc29tZSBzdHVmZiBhYm91dAorCSBjb25uZWN0aW9uIGNsb3NlIGhlcmUgaW4gdGhlIHRlc3QgbG9vcC4gcmFqIDIwMDgtMDEtMDggKi8KKyAgICAgIGlmIChjb25uZWN0aW9uX3Rlc3QpIHsKKworI2lmZGVmIF9fbGludXgKKwkvKiBzbywgIkxpbnV4IiB3aXRoIGF1dG90dW5pbmcgbGlrZXMgdG8gYWx0ZXIgdGhlIHNvY2tldCBidWZmZXIKKwkgICBzaXplcyBvdmVyIHRoZSBsaWZlIG9mIHRoZSBjb25uZWN0aW9uLCBidXQgb25seSBkb2VzIHNvIHdoZW4KKwkgICBvbmUgdGFrZXMgdGhlIGRlZmF1bHRzIGF0IHRpbWUgb2Ygc29ja2V0IGNyZWF0aW9uLiAgaWYgd2UKKwkgICB0b29rIHRob3NlIGRlZmF1bHRzLCB3ZSBzaG91bGQgaW5xdWlyZSBhcyB0byB3aGF0IHRoZSB2YWx1ZXMKKwkgICB1bHRpbWF0ZWx5IGJlY2FtZS4gcmFqIDIwMDgtMDEtMTUgKi8KKwlpZiAobHNyX3NpemVfcmVxIDwgMCkKKwkgIGdldF9zb2NrX2J1ZmZlcihkYXRhX3NvY2tldCwgUkVDVl9CVUZGRVIsICZsc3Jfc2l6ZV9lbmQpOworCWVsc2UKKwkgIGxzcl9zaXplX2VuZCA9IGxzcl9zaXplOworCWlmIChsc3Nfc2l6ZV9yZXEgPCAwKQorCSAgZ2V0X3NvY2tfYnVmZmVyKGRhdGFfc29ja2V0LCBTRU5EX0JVRkZFUiwgJmxzc19zaXplX2VuZCk7CisJZWxzZQorCSAgbHNzX3NpemVfZW5kID0gbHNzX3NpemU7CisjZWxzZQorCWxzcl9zaXplX2VuZCA9IGxzcl9zaXplOworCWxzc19zaXplX2VuZCA9IGxzc19zaXplOworI2VuZGlmCisKKwkvKiB3ZSB3aWxsIG9ubHkgbWFrZSB0aGlzIGNhbGwgdGhlIG9uZSB0aW1lIC0gYWZ0ZXIgdGhlIGZpcnN0CisJICAgY2FsbCwgdGhlIHZhbHVlIHdpbGwgYmUgcmVhbCBvciAtMS4gaWYgdGhpcyBpcyBhIGNvbm5lY3Rpb24KKwkgICB0ZXN0IHdlIHdhbnQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2UgbGF0ZXIgd2Ugd29uJ3QgYmUKKwkgICBjb25uZWN0ZWQgYW5kIHRoZSBkYXRhIG1heSBubyBsb25nZXIgYmUgYXZhaWxhYmxlICovCisJaWYgKHRyYW5zcG9ydF9tc3MgPT0gLTIpIAorCSAgZ2V0X3RyYW5zcG9ydF9pbmZvKGRhdGFfc29ja2V0LAorCQkJICAgICAmdHJhbnNwb3J0X21zcywKKwkJCSAgICAgbG9jYWxfcmVzLT5haV9wcm90b2NvbCk7CisKKworCXJldCA9IGRpc2Nvbm5lY3RfZGF0YV9zb2NrZXQoZGF0YV9zb2NrZXQsCisJCQkJICAgICAobm9fY29udHJvbCkgPyAxIDogMCwKKwkJCQkgICAgIDEsCisJCQkJICAgICBOVUxMLAorCQkJCSAgICAgMCk7CisJaWYgKHJldCA9PSAwKSB7CisJICAvKiB3ZSB3aWxsIG5lZWQgYSBuZXcgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZCBuZXh0IHRpbWUKKwkgICAgIGFyb3VuZCB0aGUgbG9vcCAqLworCSAgbmVlZF90b19jb25uZWN0ID0gMTsKKwkgIGNvbm5lY3RlZCA9IDA7CisJICBuZWVkX3NvY2tldCA9IDE7CisJICBwaWNrX25leHRfcG9ydF9udW1iZXIobG9jYWxfcmVzLHJlbW90ZV9yZXMpOworCX0KKwllbHNlIGlmIChyZXQgPT0gLTEpIHsKKwkgIHRpbWVzX3VwID0gMTsKKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9CisJZWxzZSB7CisJICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfb21uaTogZGlzY29ubmVjdF9kYXRhX3NvY2tldCBmYWlsZWQiKTsKKwkgIGV4aXQoMSk7CisJfQorICAgICAgfQorCisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwlISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworCUhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgICAKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIGlmIChORVRQRVJGX0lTX1JSKGRpcmVjdGlvbikpIHsKKwlERU1PX0lOVEVSVkFMKDEpOworICAgICAgfQorICAgICAgZWxzZSBpZiAoTkVUUEVSRl9YTUlUX09OTFkoZGlyZWN0aW9uKSkgeworCURFTU9fSU5URVJWQUwoYnl0ZXNfdG9fc2VuZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlERU1PX0lOVEVSVkFMKHJyZXQpOworICAgICAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdBTlRfSU5URVJWQUxTKQorICAgICAgSU5URVJWQUxTX1dBSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisKKyAgICAgIC8qIHdhcyB0aGlzIGEgInRyYW5zYWN0aW9uIiB0ZXN0PyAqLyAKKyAgICAgIGlmIChORVRQRVJGX0lTX1JSKGRpcmVjdGlvbikpIHsKKwl0cmFuc19jb21wbGV0ZWQrKzsKKwlpZiAodW5pdHNfcmVtYWluaW5nKSB7CisJICB1bml0c19yZW1haW5pbmctLTsKKwl9CisgICAgICB9CisgICAgCisgICAgCisgICAgfQorCisgICAgLyogd2UgYXJlIG5vdywgb3N0ZW5zaWJseSwgYXQgdGhlIGVuZCBvZiB0aGlzIGl0ZXJhdGlvbiAqLworCisgICAgaWYgKHRyYW5zcG9ydF9tc3MgPT0gLTIpIAorICAgICAgZ2V0X3RyYW5zcG9ydF9pbmZvKGRhdGFfc29ja2V0LAorCQkJICZ0cmFuc3BvcnRfbXNzLAorCQkJIGxvY2FsX3Jlcy0+YWlfcHJvdG9jb2wpOworICAgIAorCisgICAgZmluZF9zZWN1cml0eV9pbmZvKCZsb2NhbF9zZWN1cml0eV9lbmFibGVkX251bSwKKwkJICAgICAgICZsb2NhbF9zZWN1cml0eV90eXBlX2lkLAorCQkgICAgICAgJmxvY2FsX3NlY3VyaXR5X3NwZWNpZmljKTsKKyAgICBsb2NhbF9zZWN1cml0eV9lbmFibGVkID0gbnNlY19lbmFibGVkX3RvX3N0cihsb2NhbF9zZWN1cml0eV9lbmFibGVkX251bSk7CisgICAgbG9jYWxfc2VjdXJpdHlfdHlwZSAgICA9IG5zZWNfdHlwZV90b19zdHIobG9jYWxfc2VjdXJpdHlfdHlwZV9pZCk7CisKKyAgICAvKiBzbywgaWYgd2UgaGF2ZS9oYWQgYSBkYXRhIGNvbm5lY3Rpb24sIHdlIHdpbGwgd2FudCB0byBjbG9zZSBpdAorICAgICAgIG5vdywgYW5kIHRoaXMgd2lsbCBiZSBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZXJlIGlzIGEgY29udHJvbAorICAgICAgIGNvbm5lY3Rpb24uICovCisKKyAgICBpZiAoY29ubmVjdGVkKSB7CisKKyNpZmRlZiBfX2xpbnV4CisgICAgICAvKiBzbywgIkxpbnV4IiB3aXRoIGF1dG90dW5pbmcgbGlrZXMgdG8gYWx0ZXIgdGhlIHNvY2tldCBidWZmZXIKKwkgc2l6ZXMgb3ZlciB0aGUgbGlmZSBvZiB0aGUgY29ubmVjdGlvbiwgYnV0IG9ubHkgZG9lcyBzbyB3aGVuCisJIG9uZSB0YWtlcyB0aGUgZGVmYXVsdHMgYXQgdGltZSBvZiBzb2NrZXQgY3JlYXRpb24uICBpZiB3ZSB0b29rCisJIHRob3NlIGRlZmF1bHRzLCB3ZSBzaG91bGQgaW5xdWlyZSBhcyB0byB3aGF0IHRoZSB2YWx1ZXMKKwkgdWx0aW1hdGVseSBiZWNhbWUuIHJhaiAyMDA4LTAxLTE1ICovCisgICAgICBpZiAobHNyX3NpemVfcmVxIDwgMCkKKwlnZXRfc29ja19idWZmZXIoZGF0YV9zb2NrZXQsIFJFQ1ZfQlVGRkVSLCAmbHNyX3NpemVfZW5kKTsKKyAgICAgIGVsc2UKKwlsc3Jfc2l6ZV9lbmQgPSBsc3Jfc2l6ZTsKKyAgICAgIGlmIChsc3Nfc2l6ZV9yZXEgPCAwKQorCWdldF9zb2NrX2J1ZmZlcihkYXRhX3NvY2tldCwgU0VORF9CVUZGRVIsICZsc3Nfc2l6ZV9lbmQpOworICAgICAgZWxzZQorCWxzc19zaXplX2VuZCA9IGxzc19zaXplOworI2Vsc2UKKyAgICAgIGxzcl9zaXplX2VuZCA9IGxzcl9zaXplOworICAgICAgbHNzX3NpemVfZW5kID0gbHNzX3NpemU7CisjZW5kaWYKKyAgICAgIC8qIENIRUNLIFBBUk1TIEhFUkU7ICovCisgICAgICByZXQgPSBkaXNjb25uZWN0X2RhdGFfc29ja2V0KGRhdGFfc29ja2V0LAorCQkJCSAgIDEsCisJCQkJICAgMSwKKwkJCQkgICBOVUxMLAorCQkJCSAgIDApOworICAgICAgY29ubmVjdGVkID0gMDsKKyAgICAgIG5lZWRfc29ja2V0ID0gMTsKKworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHRoaXMgaXMgdGhlIFVEUCBjYXNlIGF0IHByZXNlbnQgKi8KKyAgICAgIHJldCA9IGRpc2Nvbm5lY3RfZGF0YV9zb2NrZXQoZGF0YV9zb2NrZXQsCisJCQkJICAgMSwKKwkJCQkgICAxLAorCQkJCSAgIHJlbW90ZV9yZXMtPmFpX2FkZHIsCisJCQkJICAgcmVtb3RlX3Jlcy0+YWlfYWRkcmxlbik7CisgICAgICBuZWVkX3NvY2tldCA9IDE7CisgICAgICBsc3Jfc2l6ZV9lbmQgPSBsc3Jfc2l6ZTsKKyAgICAgIGxzc19zaXplX2VuZCA9IGxzc19zaXplOworICAgIH0KKworICAgIC8qIHRoaXMgY2FsbCB3aWxsIGFsd2F5cyBnaXZlIHVzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSB0ZXN0LCBhbmQKKyAgICAgICB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOworICAgIAorICAgIGZpbmRfc3lzdGVtX2luZm8oJmxvY2FsX3N5c3RlbV9tb2RlbCwKKwkJICAgICAmbG9jYWxfY3B1X21vZGVsLAorCQkgICAgICZsb2NhbF9jcHVfZnJlcXVlbmN5KTsKKworICAgIGxvY2FsX2ludGVyZmFjZV9uYW1lID0gCisgICAgICBmaW5kX2VncmVzc19pbnRlcmZhY2UobG9jYWxfcmVzLT5haV9hZGRyLHJlbW90ZV9yZXMtPmFpX2FkZHIpOworCisgICAgZmluZF9kcml2ZXJfaW5mbyhsb2NhbF9pbnRlcmZhY2VfbmFtZSxsb2NhbF9kcml2ZXJfbmFtZSxsb2NhbF9kcml2ZXJfdmVyc2lvbixsb2NhbF9kcml2ZXJfZmlybXdhcmUsbG9jYWxfZHJpdmVyX2J1cywzMik7CisKKyAgICBsb2NhbF9pbnRlcmZhY2Vfc2xvdCA9IGZpbmRfaW50ZXJmYWNlX3Nsb3QobG9jYWxfaW50ZXJmYWNlX25hbWUpOworCisgICAgZmluZF9pbnRlcmZhY2VfaWRzKGxvY2FsX2ludGVyZmFjZV9uYW1lLAorCQkgICAgICAgJmxvY2FsX2ludGVyZmFjZV92ZW5kb3IsCisJCSAgICAgICAmbG9jYWxfaW50ZXJmYWNlX2RldmljZSwKKwkJICAgICAgICZsb2NhbF9pbnRlcmZhY2Vfc3VidmVuZG9yLAorCQkgICAgICAgJmxvY2FsX2ludGVyZmFjZV9zdWJkZXZpY2UpOworCisgICAgLyogaWYgd2UgdGltZWQtb3V0LCBhbmQgaGFkIHBhZGRlZCB0aGUgdGltZXIsIHdlIG5lZWQgdG8gc3VidHJhY3QKKyAgICAgICB0aGUgcGFkX3RpbWUgZnJvbSB0aGUgZWxhcHNlZCB0aW1lIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UKKyAgICAgICB3ZXJlIGVzc2VudGlhbGx5IGlkbGUgZm9yIHBhZF90aW1lIGFuZCBqdXN0IHdhaXRpbmcgZm9yIGEgdGltZXIKKyAgICAgICB0byBleHBpcmUgb24gc29tZXRoaW5nIGxpa2UgYSBVRFAgdGVzdC4gIGlmIHdlIGhhdmUgbm90IHBhZGRlZAorICAgICAgIHRoZSB0aW1lciwgcGFkX3RpbWUgd2lsbCBiZSB6ZXJvLiAgaWYgd2UgaGF2ZSBub3QgdGltZWQgb3V0CisgICAgICAgdGhlbiB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIHRoZSB0aW1lci4gKi8KKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJBZGp1c3RpbmcgZWxhcHNlZF90aW1lIGJ5ICVkIHNlY29uZHNcbiIscGFkX3RpbWUpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBlbGFwc2VkX3RpbWUgLT0gKGZsb2F0KXBhZF90aW1lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHN0b3BfdGltZXIoKTsKKyAgICB9CisKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZQorCSBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZgorCSBpdCB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQgd2lsbCByZXR1cm4gb2J2aW91cyB2YWx1ZXMuICovCisgIAorICAgICAgcmVjdl9yZXNwb25zZV9uKE9NTklfUkVTVUxUU19DT05GX0NVVE9GRik7CisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworCXJlbW90ZV9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2Qob21uaV9yZXN1bHQtPmNwdV9tZXRob2QpOworCS8qIHdoeT8gIGJlY2F1c2Ugc29tZSBzdGFja3Mgd2FudCB0byBiZSBjbGV2ZXIgYW5kIGF1dG90dW5lIHRoZWlyCisJICAgc29ja2V0IGJ1ZmZlciBzaXplcywgd2hpY2ggbWVhbnMgdGhhdCBpZiB3ZSBhY2NlcHQgdGhlIGRlZmF1bHRzLAorCSAgIHRoZSBzaXplIHdlIGdldCBmcm9tIGdldHNvY2tvcHQoKSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKwkgICBjb25uZWN0aW9uIG1heSBub3QgYmUgd2hhdCB3ZSB3b3VsZCBnZXQgYXQgdGhlIGVuZCBvZiB0aGUKKwkgICBjb25uZWN0aW9uLi4uICovCisJbGliX251bV9yZW1fY3B1cyA9IG9tbmlfcmVzdWx0LT5udW1fY3B1czsKKwlsaWJfcmVtb3RlX3BlYWtfY3B1X3V0aWwgPSAoZG91YmxlKW9tbmlfcmVzdWx0LT5wZWFrX2NwdV91dGlsOworCWxpYl9yZW1vdGVfcGVha19jcHVfaWQgPSBvbW5pX3Jlc3VsdC0+cGVha19jcHVfaWQ7CisJcnNyX3NpemVfZW5kID0gb21uaV9yZXN1bHQtPnJlY3ZfYnVmX3NpemU7CisJcnNzX3NpemVfZW5kID0gb21uaV9yZXN1bHQtPnNlbmRfYnVmX3NpemU7CisJcmVtb3RlX2J5dGVzX3NlbnQgPSAodWludDY0X3Qpb21uaV9yZXN1bHQtPmJ5dGVzX3NlbnRfaGkgPDwgMzI7CisJcmVtb3RlX2J5dGVzX3NlbnQgKz0gb21uaV9yZXN1bHQtPmJ5dGVzX3NlbnRfbG87CisJcmVtb3RlX3NlbmRfY2FsbHMgPSBvbW5pX3Jlc3VsdC0+c2VuZF9jYWxsczsKKwlyZW1vdGVfYnl0ZXNfcmVjZWl2ZWQgPSAodWludDY0X3Qpb21uaV9yZXN1bHQtPmJ5dGVzX3JlY2VpdmVkX2hpIDw8IDMyOworCXJlbW90ZV9ieXRlc19yZWNlaXZlZCArPSBvbW5pX3Jlc3VsdC0+Ynl0ZXNfcmVjZWl2ZWRfbG87CisJcmVtb3RlX3JlY2VpdmVfY2FsbHMgPSBvbW5pX3Jlc3VsdC0+cmVjdl9jYWxsczsKKwlyZW1vdGVfYnl0ZXNfeGZlcmQgPSByZW1vdGVfYnl0ZXNfcmVjZWl2ZWQgKyByZW1vdGVfYnl0ZXNfc2VudDsKKwlpZiAob21uaV9yZXN1bHQtPnJlY3ZfY2FsbHMgPiAwKQorCSAgcmVtb3RlX2J5dGVzX3Blcl9yZWN2ID0gKGRvdWJsZSkgcmVtb3RlX2J5dGVzX3JlY2VpdmVkIC8KKwkgICAgKGRvdWJsZSkgb21uaV9yZXN1bHQtPnJlY3ZfY2FsbHM7CisJZWxzZQorCSAgcmVtb3RlX2J5dGVzX3Blcl9yZWN2ID0gMC4wOworCWlmIChvbW5pX3Jlc3VsdC0+c2VuZF9jYWxscyA+IDApCisJICByZW1vdGVfYnl0ZXNfcGVyX3NlbmQgPSAoZG91YmxlKSByZW1vdGVfYnl0ZXNfc2VudCAvCisJICAgIChkb3VibGUpIG9tbmlfcmVzdWx0LT5zZW5kX2NhbGxzOworCWVsc2UKKwkgIHJlbW90ZV9ieXRlc19wZXJfc2VuZCA9IDAuMDsKKwlvbW5pX3Jlc3VsdC0+aWZuYW1lWzE1XSA9IDA7IC8qIGJlbHQgYW5kIHN1c3BlbmRlcnMgKi8KKwlyZW1vdGVfaW50ZXJmYWNlX25hbWUgPSBzdHJkdXAob21uaV9yZXN1bHQtPmlmbmFtZSk7CisJcmVtb3RlX2ludGVyZmFjZV9zbG90ID0gc3RyZHVwKG9tbmlfcmVzdWx0LT5pZnNsb3QpOworCXN0cm5jcHkocmVtb3RlX2RyaXZlcl9uYW1lLG9tbmlfcmVzdWx0LT5kcml2ZXIsMzIpOworCXN0cm5jcHkocmVtb3RlX2RyaXZlcl92ZXJzaW9uLG9tbmlfcmVzdWx0LT52ZXJzaW9uLDMyKTsKKwlzdHJuY3B5KHJlbW90ZV9kcml2ZXJfZmlybXdhcmUsb21uaV9yZXN1bHQtPmZpcm13YXJlLDMyKTsKKwlzdHJuY3B5KHJlbW90ZV9kcml2ZXJfYnVzLG9tbmlfcmVzdWx0LT5idXMsMzIpOworCXJlbW90ZV9kcml2ZXJfbmFtZVszMV0gPSAwOworCXJlbW90ZV9kcml2ZXJfdmVyc2lvblszMV0gPSAwOworCXJlbW90ZV9kcml2ZXJfZmlybXdhcmVbMzFdID0gMDsKKwlyZW1vdGVfZHJpdmVyX2J1c1szMV0gPSAwOworCXJlbW90ZV9pbnRlcmZhY2VfdmVuZG9yID0gb21uaV9yZXN1bHQtPnZlbmRvcjsKKwlyZW1vdGVfaW50ZXJmYWNlX2RldmljZSA9IG9tbmlfcmVzdWx0LT5kZXZpY2U7CisJcmVtb3RlX2ludGVyZmFjZV9zdWJ2ZW5kb3IgPSBvbW5pX3Jlc3VsdC0+c3VidmVuZG9yOworCXJlbW90ZV9pbnRlcmZhY2Vfc3ViZGV2aWNlID0gb21uaV9yZXN1bHQtPnN1YmRldmljZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJZnByaW50Zih3aGVyZSwKKwkJIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlwZXJyb3IoIiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICAKKwlleGl0KDEpOworICAgICAgfQorICAgIH0KKworICAgIC8qIHNvLCB3aGF0IHdhcyB0aGUgZW5kIHJlc3VsdD8gKi8KKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisKKyAgICBpZiAobG9jYWxfc2VuZF9jYWxscyA+IDApIAorICAgICAgYnl0ZXNfcGVyX3NlbmQgPSAoZG91YmxlKSBieXRlc19zZW50IC8gKGRvdWJsZSkgbG9jYWxfc2VuZF9jYWxsczsKKyAgICBlbHNlIGJ5dGVzX3Blcl9zZW5kID0gMC4wOworCisgICAgaWYgKGxvY2FsX3JlY2VpdmVfY2FsbHMgPiAwKQorICAgICAgYnl0ZXNfcGVyX3JlY3YgPSAoZG91YmxlKSBieXRlc19yZWNlaXZlZCAvIChkb3VibGUpIGxvY2FsX3JlY2VpdmVfY2FsbHM7CisgICAgZWxzZQorICAgICAgYnl0ZXNfcGVyX3JlY3YgPSAwLjA7CisgICAgCisgICAgYnl0ZXNfeGZlcmQgID0gYnl0ZXNfc2VudCArIGJ5dGVzX3JlY2VpdmVkOworCisgICAgLyogaWYgdGhlIG91dHB1dCBmb3JtYXQgaXMgJ3gnIHdlIGtub3cgdGhlIHRlc3Qgd2FzCisgICAgICAgcmVxdWVzdC9yZXNwb25zZS4gIGlmIHRoZSBsaWJmbXQgaXMgc29tZXRoaW5nIGVsc2UsIGl0IGNvdWxkIGJlCisgICAgICAgeG1pdCwgcmVjdiBvciBiaWRpcmVjdGlvbmFsLiBpZiB3ZSB3ZXJlIHRoZSByZWNlaXZlciB0aGVuIHdlCisgICAgICAgY2FuIHVzZSBvdXIgYnl0ZSB0b3RhbHMgZXZlbiBpZiBpdCBpcworICAgICAgIFVEUC91bnJlbGlhYmxlLiBvdGhlcndpc2UsIHdlIHVzZSB0aGUgcmVtb3RlIHRvdGFscyAtIHRoZXkKKyAgICAgICBzaG91bGQgYmUgdGhlIHNhbWUgaWYgdGhlIHByb3RvY29sIGlzIHJlbGlhYmxlLCBhbmQgaWYgaXQgaXMKKyAgICAgICB1bnJlbGlhYmxlIHRoZW4gd2Ugd2FudCB3aGF0IHdhcyBhY3R1YWxseSByZWNlaXZlZCAqLworICAgIGlmICgneCcgPT0gbGliZm10KQorICAgICAgLyogaXQgd2FzIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0ICovCisgICAgICB0aHJ1cHV0ID0gY2FsY190aHJ1cHV0KHRyYW5zX2NvbXBsZXRlZCk7CisgICAgZWxzZSBpZiAoTkVUUEVSRl9SRUNWX09OTFkoZGlyZWN0aW9uKSkKKyAgICAgIHRocnVwdXQgICAgICA9IGNhbGNfdGhydXB1dChieXRlc194ZmVyZCk7CisgICAgZWxzZSAKKyAgICAgIHRocnVwdXQgPSBjYWxjX3RocnVwdXQocmVtb3RlX2J5dGVzX3hmZXJkKTsKKworICAgIGlmIChORVRQRVJGX0lTX1JSKGRpcmVjdGlvbikpIHsKKyAgICAgIGNoYXIgdG1wZm10OworICAgICAgaWYgKCFjb25uZWN0aW9uX3Rlc3QpIHsKKyAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgcm91bmQgdHJpcCBsYXRlbmN5LCB1c2luZyB0aGUgdHJhbnNhY3Rpb24gcmF0ZQorCSB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciB3YXMgYXNraW5nIGZvciB0aHJ1cHV0IHRvIGJlIGluICd4JworCSB1bml0cyBwbGVhc2UuLi4gaG93ZXZlci4uLiBhIGNvbm5lY3Rpb25fdGVzdCBvbmx5IGV2ZXIgaGFzCisJIG9uZSB0cmFuc2FjdGlvbiBpbiBmbGlnaHQgYXQgb25lIHRpbWUgKi8KKyAgICAgIHJ0dF9sYXRlbmN5ID0gCisJKCgoZG91YmxlKTEuMC8odHJhbnNfY29tcGxldGVkL2VsYXBzZWRfdGltZSkpICogKGRvdWJsZSkxMDAwMDAwLjApICogCisJKGRvdWJsZSkgKDEgKyAoKGZpcnN0X2J1cnN0X3NpemUgPiAwKSA/IGZpcnN0X2J1cnN0X3NpemUgOiAwKSk7CisgICAgICB9CisgICAgICBlbHNlIAorCXJ0dF9sYXRlbmN5ID0gCisJICAoKGRvdWJsZSkxLjAvKHRyYW5zX2NvbXBsZXRlZC9lbGFwc2VkX3RpbWUpKSAqIChkb3VibGUpMTAwMDAwMC4wOworICAgICAgdG1wZm10ID0gbGliZm10OworICAgICAgbGliZm10ID0gJ3gnOworICAgICAgdHJhbnNhY3Rpb25fcmF0ZSA9IGNhbGNfdGhydXB1dCh0cmFuc19jb21wbGV0ZWQpOworICAgICAgbGliZm10ID0gdG1wZm10OworICAgIH0KKworICAgIC8qIG9rLCB0aW1lIHRvIHBvc3NpYmx5IGNhbGN1bGF0ZSBjcHUgdXRpbCBhbmQvb3Igc2VydmljZSBkZW1hbmQgKi8KKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisKKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiA9IGNhbGNfY3B1X3V0aWwoZWxhcHNlZF90aW1lKTsKKworICAgICAgLyogd2UgbmVlZCB0byBkZWNpZGUgd2hhdCB0byBmZWVkIHRoZSBzZXJ2aWNlIGRlbWFuZCBiZWFzdCwKKwkgd2hpY2ggd2lsbCwgdWx0aW1hdGVseSwgZGVwZW5kIG9uIHdoYXQgc29ydCBvZiB0ZXN0IGl0IGlzIGFuZAorCSB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBhc2tlZCBmb3Igc29tZXRoaW5nIHNwZWNpZmljIC0gYXMgaW4KKwkgcGVyIEtCIGV2ZW4gb24gYSBUQ1BfUlIgdGVzdCBpZiBpdCBpcyBiZWluZyAoYWIpdXNlZCBhcyBhCisJIGJpZGlyZWN0aW9uYWwgYnVsay10cmFuc2ZlciB0ZXN0LiByYWogMjAwOC0wMS0xNCAqLworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgID0gCisJY2FsY19zZXJ2aWNlX2RlbWFuZF9mbXQoKCd4JyA9PSBsaWJmbXQpID8gKGRvdWJsZSl0cmFuc19jb21wbGV0ZWQ6IGJ5dGVzX3hmZXJkLAorCQkJCTAuMCwKKwkJCQkwLjAsCisJCQkJMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgfQorCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IG9tbmlfcmVzdWx0LT5jcHVfdXRpbDsKKworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kID0gCisJY2FsY19zZXJ2aWNlX2RlbWFuZF9mbXQoKCd4JyA9PSBsaWJmbXQpID8gKGRvdWJsZSkgdHJhbnNfY29tcGxldGVkOiBieXRlc194ZmVyZCwKKwkJCQkwLjAsCisJCQkJcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQlvbW5pX3Jlc3VsdC0+bnVtX2NwdXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiB0aW1lIHRvIGNhbGN1bGF0ZSBvdXIgY29uZmlkZW5jZSAqLworICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgICAvKiB0aGlzIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgY29uZmlkZW5jZSB3aGlsZSBsb29wPyAqLworICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uKys7CisgIH0KKworICAvKiB3ZSBlbmQgd2l0aCBjb25maWRlbmNlX2l0ZXJhdGlvbiBvbmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZgorICAgICBpdGVyYXRpb25zLiAgaWYgd2Ugd2VyZW4ndCBkb2luZyBjb25maWRlbmNlIGludGVydmFscyB0aGlzIHdpbGwKKyAgICAgc3RpbGwgYmUgcmVwb3J0ZWQgYXMgb25lICovCisgIGNvbmZpZGVuY2VfaXRlcmF0aW9uLS07CisKKyAgLyogYXQgc29tZSBwb2ludCB3ZSBtYXkgd2FudCB0byBhY3R1YWxseSBkaXNwbGF5IHNvbWUgcmVzdWx0cyA6KSAqLworCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmdGhydXB1dCwKKwkJCSAgICAmbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSAgICAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKworICAvKiBhIGtsdWRnZSBmb3Igb21uaSBwcmludGluZyBiZWNhdXNlIEkgZG9uJ3Qga25vdyBob3cgdG8gdGVsbCB0aGF0CisgICAgIHNvbWV0aGluZyBpcyBhIGZsb2F0IHZzIGEgZG91YmxlIGluIG15X3NucHJpbnRmKCkgZ2l2ZW4gd2hhdCBpdAorICAgICBpcyBwYXNzZWQgYW5kIEknbSBub3QgcmVhZHkgdG8gZm9yY2UgYWxsIHRoZSBuZXRsaWIuYyBzdHVmZiB0bworICAgICB1c2UgZG91YmxlcyByYXRoZXIgdGhhbiBmbG9hdHMuIGhlbHAgdGhlcmUgd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQuIHJhaiAyMDA4LTAxLTI4ICovCisgIGVsYXBzZWRfdGltZV9kb3VibGUgPSAoZG91YmxlKSBlbGFwc2VkX3RpbWU7CisgIGxvY2FsX2NwdV91dGlsaXphdGlvbl9kb3VibGUgPSAoZG91YmxlKWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgbG9jYWxfc2VydmljZV9kZW1hbmRfZG91YmxlID0gKGRvdWJsZSlsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgcmVtb3RlX2NwdV91dGlsaXphdGlvbl9kb3VibGUgPSAoZG91YmxlKXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZF9kb3VibGUgPSAoZG91YmxlKXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKworICBpZiAoJ3gnID09IGxpYmZtdCkgc2Rfc3RyID0gInVzZWMvVHJhbiI7CisgIGVsc2Ugc2Rfc3RyID0gInVzZWMvS0IiOworICAKKyAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgcmVzdWx0X2NvbmZpZF9wY3QgPSBnZXRfcmVzdWx0X2NvbmZpZCgpOworICAgIGxvY19jcHVfY29uZmlkX3BjdCA9IGdldF9sb2NfY3B1X2NvbmZpZCgpOworICAgIHJlbV9jcHVfY29uZmlkX3BjdCA9IGdldF9yZW1fY3B1X2NvbmZpZCgpOworICAgIGludGVydmFsX3BjdCA9IGludGVydmFsICogMTAwLjA7CisgIH0KKworICAvKiBhdCBzb21lIHBvaW50IHdlIG5lZWQgdG8gYXZlcmFnZSB0aGVzZSBkdXJpbmcgYSBjb25maWRlbmNlCisgICAgIGludGVydmFsIHJ1biwgYW5kIHdoZW4gd2UgZG8gZG8gdGhhdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UKKyAgICAgcmVzdG9yZSB0aGUgdmFsdWUgb2YgbGliZm10IGNvcnJlY3RseSAqLworICBpZiAoJ3gnID09IGxpYmZtdCkgbGliZm10ID0gJ20nOworICBsb2NhbF9zZW5kX3RocnVwdXQgPSBjYWxjX3RocnVwdXQoYnl0ZXNfc2VudCk7CisgIGxvY2FsX3JlY3ZfdGhydXB1dCA9IGNhbGNfdGhydXB1dChieXRlc19yZWNlaXZlZCk7CisgIHJlbW90ZV9zZW5kX3RocnVwdXQgPSBjYWxjX3RocnVwdXQocmVtb3RlX2J5dGVzX3NlbnQpOworICByZW1vdGVfcmVjdl90aHJ1cHV0ID0gY2FsY190aHJ1cHV0KHJlbW90ZV9ieXRlc19yZWNlaXZlZCk7CisKKyAgcHJpbnRfb21uaSgpOworCisjaWYgZGVmaW5lZChERUJVR19PTU5JX09VVFBVVCkgIAorIHsKKyAgIC8qIGp1c3Qgc29tZXRoaW5nIHF1aWNrIHRvIHNhbml0eSBjaGVjayB0aGUgb3V0cHV0IHNlbGVjdG9ycy4gdGhpcworICAgICAgc2hvdWxkIGJlIGdvbmUgZm9yICJwcm9kdWN0aW9uIiA6KSAqLworICAgaW50IGk7CisgICBwcmludF9vbW5pX2luaXQoKTsKKyAgIG91dHB1dF9jc3ZfbGlzdFsxXSA9IE9VVFBVVF9FTkQ7CisgICBmb3IgKGkgPSBPVVRQVVRfTk9ORTsgaSA8IE5FVFBFUkZfT1VUUFVUX01BWDsgaSsrKSB7CisgICAgIG91dHB1dF9jc3ZfbGlzdFswXSA9IGk7CisgICAgIHByaW50X29tbmlfY3N2KCk7CisgICB9CisgfQorI2VuZGlmCisKKyAgLyogbGlrZWx5IGFzIG5vdCB3ZSBhcmUgZ29pbmcgdG8gZG8gc29tZXRoaW5nIHNsaWdodGx5IGRpZmZlcmVudCBoZXJlICovCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuSGlzdG9ncmFtIG9mICIpOworICAgIGlmIChORVRQRVJGX1JFQ1ZfT05MWShkaXJlY3Rpb24pKSAKKyAgICAgIGZwcmludGYod2hlcmUsInJlY3YiKTsKKyAgICBpZiAoTkVUUEVSRl9YTUlUX09OTFkoZGlyZWN0aW9uKSkKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmQiKTsKKyAgICBpZiAoTkVUUEVSRl9JU19SUihkaXJlY3Rpb24pKSB7CisgICAgICBpZiAoY29ubmVjdGlvbl90ZXN0KSB7CisJaWYgKE5FVFBFUkZfQ0MoZGlyZWN0aW9uKSkgeworCSAgZnByaW50Zih3aGVyZSwiY29ubmVjdC9jbG9zZSIpOworCX0KKwllbHNlIHsKKwkgIGZwcmludGYod2hlcmUsImNvbm5lY3QvcmVxdWVzdC9yZXNwb25zZS9jbG9zZSIpOworCX0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsInJlcXVlc3QvcmVzcG9uc2UiKTsKKyAgICAgIH0KKyAgICB9CisgICAgZnByaW50Zih3aGVyZSwiIHRpbWVzXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIEhJU1RfcmVwb3J0KHRpbWVfaGlzdCk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworICB9CisgIAorfQorCisMCisKKy8qIHRoZSBuYW1lIGlzIHNvbWV0aGluZyBvZiBhIG1pc25vbWVyIHNpbmNlIHRoaXMgdGVzdCBjb3VsZCBzZW5kLCBvcgorICAgcmVjZWl2ZSwgb3IgYm90aCwgYnV0IGl0IG1hdGNoZXMgdGhlIGhpc3RvcmljYWwgbmV0cGVyZiByb3V0aW5lCisgICBuYW1pbmcuICovCit2b2lkCityZWN2X29tbmkoKQoreworICAKKyAgY2hhciAgKm1lc3NhZ2U7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbXlhZGRyX2luLCBwZWVyYWRkcl9pbjsKKyAgU09DS0VUIHNfbGlzdGVuLCBkYXRhX3NvY2tldDsKKyAgbmV0cGVyZl9zb2NrbGVuX3QgCWFkZHJsZW47CisKKyAgc3RydWN0IHJpbmdfZWx0ICpzZW5kX3Jpbmc7CisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworCisgIGludAl0aW1lZF9vdXQgPSAwOworICBpbnQgICBwYWRfdGltZSA9IDA7CisgIGludCAgIG5lZWRfdG9fY29ubmVjdDsKKyAgaW50ICAgbmVlZF90b19hY2NlcHQ7CisgIGludCAgIGNvbm5lY3RlZDsKKyAgaW50ICAgcmV0OworICBpbnQgICB0ZW1wX3JlY3ZzOworICAKKyAgc3RydWN0CW9tbmlfcmVxdWVzdF9zdHJ1Y3QJKm9tbmlfcmVxdWVzdDsKKyAgc3RydWN0CW9tbmlfcmVzcG9uc2Vfc3RydWN0CSpvbW5pX3Jlc3BvbnNlOworICBzdHJ1Y3QJb21uaV9yZXN1bHRzX3N0cnVjdAkqb21uaV9yZXN1bHRzOworICAKKyAgb21uaV9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCBvbW5pX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBvbW5pX3Jlc3BvbnNlID0gCisgICAgKHN0cnVjdCBvbW5pX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIG9tbmlfcmVzdWx0cyA9IAorICAgIChzdHJ1Y3Qgb21uaV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3Zfb21uaTogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogYmFzZWQgb24gd2hhdCB3ZSBoYXZlIGJlZW4gdG9sZCBieSB0aGUgcmVtb3RlIG5ldHBlcmYsIHdlIHdhbnQgdG8KKyAgICAgc2V0dXAgb3VyIGVuZHBvaW50IGZvciB0aGUgImRhdGEgY29ubmVjdGlvbiIgYW5kIGxldCB0aGUgcmVtb3RlCisgICAgIG5ldHBlcmYga25vdyB0aGUgc2l0dWF0aW9uLiAqLworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfb21uaTogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBPTU5JX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9vbW5pOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9vbW5pOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbAorICAgICB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LgorICAgICBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcworICAgICBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSBvbW5pX3JlcXVlc3QtPnNlbmRfYnVmX3NpemU7CisgIGxzcl9zaXplX3JlcSA9IG9tbmlfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZTsKKyAgbG9jX25vZGVsYXkgPSBvbW5pX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSBvbW5pX3JlcXVlc3QtPnNvX3JjdmF2b2lkOworICBsb2Nfc25kYXZvaWQgPSBvbW5pX3JlcXVlc3QtPnNvX3NuZGF2b2lkOworCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgaW50ZXJ2YWxfdXNlY3MgPSBvbW5pX3JlcXVlc3QtPmludGVydmFsX3VzZWNzOworICBpbnRlcnZhbF93YXRlICA9IGludGVydmFsX3VzZWNzIC8gMTAwMDsKKyAgaW50ZXJ2YWxfYnVyc3QgPSBvbW5pX3JlcXVlc3QtPmludGVydmFsX2J1cnN0OworI2Vsc2UKKyAgaW50ZXJ2YWxfdXNlY3MgPSAwOworICBpbnRlcnZhbF93YXRlICA9IDE7CisgIGludGVydmFsX2J1cnN0ID0gMDsKKyNlbmRpZgorCisgIGNvbm5lY3Rpb25fdGVzdCA9IG9tbmlfcmVxdWVzdC0+Y29ubmVjdF90ZXN0OworICBkaXJlY3Rpb24gICAgICAgPSBvbW5pX3JlcXVlc3QtPmRpcmVjdGlvbjsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYob21uaV9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQlvbW5pX3JlcXVlc3QtPmRhdGFfcG9ydCk7CisKKyAgbG9jYWxfcmVzID0gY29tcGxldGVfYWRkcmluZm8obG9jYWxfbmFtZSwKKwkJCQlsb2NhbF9uYW1lLAorCQkJCXBvcnRfYnVmZmVyLAorCQkJCW5mX3RvX2FmKG9tbmlfcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJCW5zdF90b19oc3Qob21uaV9yZXF1ZXN0LT5zb2NrZXRfdHlwZSksCisJCQkJb21uaV9yZXF1ZXN0LT5wcm90b2NvbCwKKwkJCQkwKTsKKworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgY3JlYXRlIGRhdGEgc29ja2V0XG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGV4aXQoMSk7CisgIH0KKworICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlcyB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnRzIHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0cy4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X29tbmk6IHJlcXVlc3RlZCByZWN2IGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIG9tbmlfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJICAgIG9tbmlfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X29tbmk6IHJlcXVlc3RlZCBzZW5kIGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIG9tbmlfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJICAgIG9tbmlfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBvbW5pX3Jlc3BvbnNlLT5zZW5kX3NpemUgPSBvbW5pX3JlcXVlc3QtPnNlbmRfc2l6ZTsKKyAgb21uaV9yZXNwb25zZS0+c2VuZF93aWR0aCA9IG9tbmlfcmVxdWVzdC0+c2VuZF93aWR0aDsKKyAgaWYgKG9tbmlfcmVxdWVzdC0+ZGlyZWN0aW9uICYgTkVUUEVSRl9YTUlUKSB7CisgICAgaWYgKG9tbmlfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSA+IDApIHsKKyAgICAgIC8qIHJlcXVlc3QvcmVzcG9uc2VfdGVzdCAqLworICAgICAgYnl0ZXNfdG9fc2VuZCA9IG9tbmlfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZTsKKyAgICAgIGlmIChvbW5pX3JlcXVlc3QtPnNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgICAgICBlbHNlIHNlbmRfd2lkdGggPSBvbW5pX3JlcXVlc3QtPnNlbmRfd2lkdGg7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKG9tbmlfcmVxdWVzdC0+c2VuZF9zaXplID09IC0xKSB7CisJaWYgKGxzc19zaXplID4gMCkgYnl0ZXNfdG9fc2VuZCA9IGxzc19zaXplOworCWVsc2UgYnl0ZXNfdG9fc2VuZCA9IDQwOTY7CisgICAgICB9CisgICAgICBlbHNlIGJ5dGVzX3RvX3NlbmQgPSBvbW5pX3JlcXVlc3QtPnNlbmRfc2l6ZTsKKyAgICAgIC8qIHNldCB0aGUgc2VuZF93aWR0aCAqLworICAgICAgaWYgKG9tbmlfcmVxdWVzdC0+c2VuZF93aWR0aCA9PSAwKSB7CisJc2VuZF93aWR0aCA9IChsc3Nfc2l6ZS9ieXRlc190b19zZW5kKSArIDE7CisJaWYgKHNlbmRfd2lkdGggPT0gMSkgc2VuZF93aWR0aCsrOworICAgICAgfQorICAgICAgZWxzZQorCXNlbmRfd2lkdGggPSBvbW5pX3JlcXVlc3QtPnNlbmRfd2lkdGg7CisgICAgfQorICAgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgICBieXRlc190b19zZW5kLAorCQkJCSAgICAgb21uaV9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkJCQkgICAgIG9tbmlfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCQkJCSAgICAgCisgICAgb21uaV9yZXNwb25zZS0+c2VuZF93aWR0aCA9IHNlbmRfd2lkdGg7CisgICAgb21uaV9yZXNwb25zZS0+c2VuZF9zaXplID0gYnl0ZXNfdG9fc2VuZDsKKyAgfQorCisgIG9tbmlfcmVzcG9uc2UtPnJlY2VpdmVfc2l6ZSA9IG9tbmlfcmVxdWVzdC0+cmVjZWl2ZV9zaXplOworICBvbW5pX3Jlc3BvbnNlLT5yZWN2X3dpZHRoID0gb21uaV9yZXNwb25zZS0+cmVjdl93aWR0aDsKKyAgaWYgKG9tbmlfcmVxdWVzdC0+ZGlyZWN0aW9uICYgTkVUUEVSRl9SRUNWKSB7CisgICAgaWYgKG9tbmlfcmVxdWVzdC0+cmVxdWVzdF9zaXplID4gMCkgeworICAgICAgLyogcmVxdWVzdC9yZXNwb25zZSB0ZXN0ICovCisgICAgICBieXRlc190b19yZWN2ID0gb21uaV9yZXF1ZXN0LT5yZXF1ZXN0X3NpemU7CisgICAgICBpZiAob21uaV9yZXF1ZXN0LT5yZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworICAgICAgZWxzZSByZWN2X3dpZHRoID0gb21uaV9yZXF1ZXN0LT5yZWN2X3dpZHRoOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGlmIChvbW5pX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZSA9PSAtMSkgeworCWlmIChsc3Jfc2l6ZSA+IDApIGJ5dGVzX3RvX3JlY3YgPSBsc3Jfc2l6ZTsKKwllbHNlICBieXRlc190b19yZWN2ID0gNDA5NjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWJ5dGVzX3RvX3JlY3YgPSBvbW5pX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZTsKKyAgICAgIH0KKyAgICAgIC8qIHNldCB0aGUgcmVjdl93aWR0aCAqLworICAgICAgaWYgKG9tbmlfcmVxdWVzdC0+cmVjdl93aWR0aCA9PSAwKSB7CisJcmVjdl93aWR0aCA9IChsc3Jfc2l6ZS9ieXRlc190b19yZWN2KSArIDE7CisJaWYgKHJlY3Zfd2lkdGggPT0gMSkgcmVjdl93aWR0aCsrOworICAgICAgfQorICAgICAgZWxzZSAKKwlyZWN2X3dpZHRoID0gb21uaV9yZXF1ZXN0LT5yZWN2X3dpZHRoOworICAgIH0KKyAgICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgICAgYnl0ZXNfdG9fcmVjdiwKKwkJCQkgICAgIG9tbmlfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJCQkJICAgICBvbW5pX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKwkJCQkgICAgIAorICAgIG9tbmlfcmVzcG9uc2UtPnJlY2VpdmVfc2l6ZSA9IGJ5dGVzX3RvX3JlY3Y7CisgICAgb21uaV9yZXNwb25zZS0+cmVjdl93aWR0aCA9IHJlY3Zfd2lkdGg7CisgIH0KKworI2lmZGVmIFdJTjMyCisgIC8qIFRoZSB0ZXN0IHRpbWVyIGNhbiBmaXJlIGR1cmluZyBvcGVyYXRpb25zIG9uIHRoZSBsaXN0ZW5pbmcgc29ja2V0LAorICAgICBzbyB0byBtYWtlIHRoZSBzdGFydF90aW1lciBiZWxvdyB3b3JrIHdlIGhhdmUgdG8gbW92ZQorICAgICBpdCB0byBjbG9zZSBzX2xpc3RlbiB3aGlsZSB3ZSBhcmUgYmxvY2tlZCBvbiBhY2NlcHQuICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0MiA9IHNfbGlzdGVuOworI2VuZGlmCisKKyAgbmVlZF90b19hY2NlcHQgPSAob21uaV9yZXF1ZXN0LT5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCk7CisgIAorICAvKiB3ZSBuZWVkIHRvIGhhbmcgYSBsaXN0ZW4gZm9yIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyBhdCBsZWFzdCBvbmUKKyAgICAgYWNjZXB0ICovCisgIGlmIChuZWVkX3RvX2FjY2VwdCkgeworICAgIGlmIChsaXN0ZW4oc19saXN0ZW4sIDUpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsImNvdWxkIG5vdCBsaXN0ZW5cbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBleGl0KDEpOworICAgIH0KKyAgfQorCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLAorCQkgICZhZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsImNvdWxkIG5vdCBnZXRzb2NrbmFtZVxuIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3cgbXlhZGRyX2luIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzCisgICAgIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0CisgICAgIHRoZSBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiBsaWtlbHkgYXMgbm90LCB0aGUgSVAKKyAgICAgYWRkcmVzcyB3aWxsIGJlIHRoZSB3aWxkY2FyZCAtIHNvIHdlIG9ubHkgcmVhbGx5IG5lZWQgdG8gZXh0cmFjdAorICAgICB0aGUgcG9ydCBudW1iZXIuIHNpbmNlIHNlbmRfcmVzcG9uc2UgaXMgZ29pbmcgdG8gY2FsbCBodG9ubCBvbgorICAgICBhbGwgdGhlIGZpZWxkcywgd2Ugd2FudCB0byBpbml0aWFsbHkgcHV0IHRoZSBwb3J0IG51bWJlciBpbiB0aGVyZQorICAgICBpbiBob3N0IG9yZGVyLiAqLworICAKKyAgb21uaV9yZXNwb25zZS0+ZGF0YV9wb3J0ID0gCisgICAgKGludCkgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmbXlhZGRyX2luKS0+c2luX3BvcnQpOworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJ0ZWxsaW5nIHRoZSByZW1vdGUgdG8gY2FsbCBtZSBhdCAlZFxuIiwKKwkgICAgb21uaV9yZXNwb25zZS0+ZGF0YV9wb3J0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIDAuMCB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgb21uaV9yZXNwb25zZS0+Y3B1X3JhdGUgPSAoZmxvYXQpMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBvbW5pX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIGlmIChvbW5pX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgb21uaV9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIG9tbmlfcmVzcG9uc2UtPmNwdV9yYXRlID0gCisgICAgICBjYWxpYnJhdGVfbG9jYWxfY3B1KG9tbmlfcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIG9tbmlfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgb21uaV9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworICBvbW5pX3Jlc3BvbnNlLT5ub19kZWxheSA9IGxvY19ub2RlbGF5OworICBvbW5pX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgb21uaV9yZXNwb25zZS0+c29fc25kYXZvaWQgPSBsb2Nfc25kYXZvaWQ7CisgIG9tbmlfcmVzcG9uc2UtPmludGVydmFsX3VzZWNzID0gaW50ZXJ2YWxfdXNlY3M7CisgIG9tbmlfcmVzcG9uc2UtPmludGVydmFsX2J1cnN0ID0gaW50ZXJ2YWxfYnVyc3Q7CisKKyAgZmluZF9zeXN0ZW1faW5mbygmbG9jYWxfc3lzdGVtX21vZGVsLCZsb2NhbF9jcHVfbW9kZWwsJmxvY2FsX2NwdV9mcmVxdWVuY3kpOworICBzdHJuY3B5KG9tbmlfcmVzcG9uc2UtPnN5c3RlbV9tb2RlbCxsb2NhbF9zeXN0ZW1fbW9kZWwsc2l6ZW9mKG9tbmlfcmVzcG9uc2UtPnN5c3RlbV9tb2RlbCkpOworICBvbW5pX3Jlc3BvbnNlLT5zeXN0ZW1fbW9kZWxbc2l6ZW9mKG9tbmlfcmVzcG9uc2UtPnN5c3RlbV9tb2RlbCktMV0gPSAwOworICBzdHJuY3B5KG9tbmlfcmVzcG9uc2UtPmNwdV9tb2RlbCxsb2NhbF9jcHVfbW9kZWwsc2l6ZW9mKG9tbmlfcmVzcG9uc2UtPmNwdV9tb2RlbCkpOworICBvbW5pX3Jlc3BvbnNlLT5jcHVfbW9kZWxbc2l6ZW9mKG9tbmlfcmVzcG9uc2UtPmNwdV9tb2RlbCktMV0gPSAwOworICBvbW5pX3Jlc3BvbnNlLT5jcHVfZnJlcXVlbmN5ID0gbG9jYWxfY3B1X2ZyZXF1ZW5jeTsKKworICBmaW5kX3NlY3VyaXR5X2luZm8oJmxvY2FsX3NlY3VyaXR5X2VuYWJsZWRfbnVtLAorCQkgICAgICZsb2NhbF9zZWN1cml0eV90eXBlX2lkLAorCQkgICAgICZsb2NhbF9zZWN1cml0eV9zcGVjaWZpYyk7CisgIC8qIHRvcCBiaXRzIHR5cGUsIGJvdHRvbSBiaXRzIGVuYWJsZWQgKi8KKyAgb21uaV9yZXNwb25zZS0+c2VjdXJpdHlfaW5mbyA9IGxvY2FsX3NlY3VyaXR5X3R5cGVfaWQgPDwgMTY7CisgIG9tbmlfcmVzcG9uc2UtPnNlY3VyaXR5X2luZm8gKz0gbG9jYWxfc2VjdXJpdHlfZW5hYmxlZF9udW0gJiAweGZmZmY7CisgIHN0cm5jcHkob21uaV9yZXNwb25zZS0+c2VjdXJpdHlfc3RyaW5nLAorCSAgbG9jYWxfc2VjdXJpdHlfc3BlY2lmaWMsCisJICBzaXplb2Yob21uaV9yZXNwb25zZS0+c2VjdXJpdHlfc3RyaW5nKSk7CisgIG9tbmlfcmVzcG9uc2UtPnNlY3VyaXR5X3N0cmluZ1tzaXplb2Yob21uaV9yZXNwb25zZS0+c2VjdXJpdHlfc3RyaW5nKS0xXSA9IDA7CisKKyAgc2VuZF9yZXNwb25zZV9uKE9NTklfUkVTUE9OU0VfQ09OVl9DVVRPRkYpOyAvKiBicml0dGxlLCBidXQgZnVuY3Rpb25hbCAqLworCisgIGxvY2FsX3NlbmRfY2FsbHMgPSAwOworICBsb2NhbF9yZWNlaXZlX2NhbGxzID0gMDsKKworICBhZGRybGVuID0gc2l6ZW9mKHBlZXJhZGRyX2luKTsKKyAgbWVtc2V0KCZwZWVyYWRkcl9pbiwwLHNpemVvZihwZWVyYWRkcl9pbikpOworCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydChvbW5pX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKworICAvKiBpZiB0aGUgdGVzdCBpcyB0aW1lZCwgc2V0IGEgdGltZXIgb2Ygc3VpdGFibGUgbGVuZ3RoLiAgaWYgdGhlCisgICAgIHRlc3QgaXMgYnkgYnl0ZS90cmFuc2FjdGlvbiBjb3VudCwgd2UgZG9uJ3QgbmVlZCBhIHRpbWVyIC0gb3IKKyAgICAgcmF0aGVyIHdlIHJlbHkgb24gdGhlIG5ldHBlcmYgdG8gb25seSBhc2sgdXMgdG8gZG8gdHJhbnNhY3Rpb24KKyAgICAgY291bnRzIG92ZXIgInJlbGlhYmxlIiBwcm90b2NvbHMuICBwZXJoYXBzIGF0IHNvbWUgcG9pbnQgd2UKKyAgICAgc2hvdWxkIGFkZCBhIGNoZWNrIGhlcmVib3V0cyB0byB2ZXJpZnkgdGhhdC4uLiAqLworCisgIGlmIChvbW5pX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB1bml0c19yZW1haW5pbmcgPSAwOworICAgIC8qIGlmIHdlIGFyZSB0aGUgc2VuZGVyIGFuZCBvbmx5IHNlbmRpbmcsIHRoZW4gd2UgZG9uJ3QgbmVlZC93YW50CisgICAgICAgdGhlIHBhZGRpbmcsIG90aGVyd2lzZSwgd2UgbmVlZCB0aGUgcGFkZGluZyAqLyAKKyAgICBpZiAoIShORVRQRVJGX1hNSVRfT05MWShvbW5pX3JlcXVlc3QtPmRpcmVjdGlvbikpKQorICAgICAgcGFkX3RpbWUgPSBQQURfVElNRTsKKyAgICBzdGFydF90aW1lcihvbW5pX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICsgcGFkX3RpbWUpOworICB9CisgIGVsc2UgeworICAgIHRpbWVzX3VwID0gMTsKKyAgICB1bml0c19yZW1haW5pbmcgPSBvbW5pX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICogLTE7CisgIH0KKworI2lmIGRlZmluZWQoV0FOVF9JTlRFUlZBTFMpCisgIElOVEVSVkFMU19JTklUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgCisgIAorICB0cmFuc19jb21wbGV0ZWQgPSAwOworICBieXRlc19zZW50ID0gMDsKKyAgYnl0ZXNfcmVjZWl2ZWQgPSAwOworICBjb25uZWN0ZWQgPSAwOworCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodW5pdHNfcmVtYWluaW5nID4gMCkpIHsKKworICAgIGlmIChuZWVkX3RvX2FjY2VwdCkgeworICAgICAgLyogYWNjZXB0IGEgY29ubmVjdGlvbiBmcm9tIHRoZSByZW1vdGUgKi8KKyNpZmRlZiBXSU4zMgorICAgICAgLyogVGhlIHRlc3QgdGltZXIgd2lsbCBwcm9iYWJseSBmaXJlIGR1cmluZyB0aGlzIGFjY2VwdCwgCisJIHNvIHRvIG1ha2UgdGhlIHN0YXJ0X3RpbWVyIGFib3ZlIHdvcmsgd2UgaGF2ZSB0byBtb3ZlCisJIGl0IHRvIGNsb3NlIHNfbGlzdGVuIHdoaWxlIHdlIGFyZSBibG9ja2VkIG9uIGFjY2VwdC4gKi8KKyAgICAgIHdpbl9rbHVkZ2Vfc29ja2V0ID0gc19saXN0ZW47CisjZW5kaWYKKyAgICAgIGlmICgoZGF0YV9zb2NrZXQ9YWNjZXB0KHNfbGlzdGVuLAorCQkJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJCSAgICAgICZhZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwlpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkgIC8qIHRoZSB0aW1lciBwb3BwZWQgKi8KKwkgIHRpbWVzX3VwID0gMTsgLyogb3N0ZW5zaWJseSB0aGUgc2lnbmFsIGhhbmRlciBkZWFsdCB3aXRoIHRoaXM/Ki8KKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9CisJZnByaW50Zih3aGVyZSwicmVjdl9vbW5pOiBhY2NlcHQ6IGVycm5vID0gJWRcbiIsZXJybm8pOworCWZmbHVzaCh3aGVyZSk7CisJY2xvc2Uoc19saXN0ZW4pOworCQorCWV4aXQoMSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsInJlY3Zfb21uaTogYWNjZXB0ZWQgZGF0YSBjb25uZWN0aW9uLlxuIik7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIG5lZWRfdG9fYWNjZXB0ID0gMDsKKyAgICAgIGNvbm5lY3RlZCA9IDE7CisKKyNpZmRlZiBLTFVER0VfU09DS0VUX09QVElPTlMKKyAgICAgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MKKwkgYXR0cmlidXRlcyBhY3Jvc3MgYW4gYWNjZXB0KCkgY2FsbC4gSW5jbHVkaW5nIHRoaXMgZ29lcworCSBhZ2FpbnN0IG15IGJldHRlciBqdWRnZW1lbnQgOiggcmFqIDExLzk1ICovCisgICAgCisgICAgICBrbHVkZ2Vfc29ja2V0X29wdGlvbnMoZGF0YV9zb2NrZXQpOworCisjZW5kaWYgLyogS0xVREdFX1NPQ0tFVF9PUFRJT05TICovCisgIAorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIEkgd29uZGVyIGlmIGR1cGluZyB3b3VsZCBiZSBiZXR0ZXIgaGVyZT8gd2UgYWxzbyBuZWVkIHRvIHNldAorCSBwZWVyYWRkcl9pbiBzbyB3ZSBjYW4gc2VuZCB0byBuZXRwZXJmIGlmIHRoaXMgaXNuJ3QgYQorCSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3Qgb3IgaWYgd2UgYXJlIGdvaW5nIHRvIGNvbm5lY3QoKSB0aGUKKwkgc29ja2V0ICovCisgICAgICBpZiAob21uaV9yZXF1ZXN0LT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgeworCWRhdGFfc29ja2V0ID0gc19saXN0ZW47CisJc2V0X3NvY2thZGRyX2ZhbWlseV9hZGRyX3BvcnQoJnBlZXJhZGRyX2luLAorCQkJCSAgICAgIG5mX3RvX2FmKG9tbmlfcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJCSAgICAgIG9tbmlfcmVxdWVzdC0+aXBhZGRyLAorCQkJCSAgICAgIG9tbmlfcmVxdWVzdC0+bmV0cGVyZl9wb3J0KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmVlZF90b19jb25uZWN0KSB7CisgICAgICAvKiBpbml0aWFsbHkgdGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgVURQIHRlc3RzIGFzIGEgVENQIG9yCisJIG90aGVyIGNvbm5lY3Rpb24tb3JpZW50ZWQgdGVzdCB3aWxsIGFsd2F5cyBoYXZlIHVzIG1ha2luZyBhbgorCSBhY2NlcHQoKSBjYWxsIHJhaiAyMDA4LTAxLTExICovCisgICAgfQorICAKKyNpZmRlZiBXSU4zMgorICAvKiB0aGlzIGlzIHVzZWQgc28gdGhlIHRpbWVyIHRocmVhZCBjYW4gY2xvc2UgdGhlIHNvY2tldCBvdXQgZnJvbQorICAgICB1bmRlciB1cywgd2hpY2ggdG8gZGF0ZSBpcyB0aGUgZWFzaWVzdC9jbGVhbmVzdC9sZWFzdAorICAgICBXaW5kb3dzLXNwZWNpZmljIHdheSBJIGNhbiBmaW5kIHRvIGZvcmNlIHRoZSB3aW5zb2NrIGNhbGxzIHRvCisgICAgIHJldHVybiBXU0FFSU5UUiB3aXRoIHRoZSB0ZXN0IGlzIG92ZXIuIGFueXRoaW5nIHRoYXQgd2lsbCBydW4gb24KKyAgICAgOTUgYW5kIE5UIGFuZCBpcyBjbG9zZXIgdG8gd2hhdCBuZXRwZXJmIGV4cGVjdHMgZnJvbSBVbml4IHNpZ25hbHMKKyAgICAgYW5kIHN1Y2ggd291bGQgYmUgYXBwcmVjaWF0ZWQgcmFqIDEvOTYgKi8KKyAgd2luX2tsdWRnZV9zb2NrZXQgPSBkYXRhX3NvY2tldDsKKyNlbmRpZiAvKiBXSU4zMiAqLworCisgICAgLyogaW4gcmVjdl9vbW5pLCB3ZSBjaGVjayByZWN2IGZpcnN0LCBhbmQgX3RoZW5fIHNlbmQsIG90aGVyd2lzZSwKKyAgICAgICBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCB3aWxsIGJlIGFsbCBtZXNzZWQtdXAgOikgYW5kIHRoYXQgdGhlbgorICAgICAgIGlzIHdoeSB0aGVyZSBhcmUgdHdvIHJvdXRpbmVzIHRvIHJ1bGUgdGhlbSBhbGwgcmF0aGVyIHRoYW4ganVzdAorICAgICAgIG9uZSA6KSAqLworICAgIGlmICgob21uaV9yZXF1ZXN0LT5kaXJlY3Rpb24gJiBORVRQRVJGX1JFQ1YpICYmCisJIXRpbWVzX3VwKSB7CisgICAgICByZXQgPSByZWN2X2RhdGEoZGF0YV9zb2NrZXQsCisJCSAgICAgIHJlY3ZfcmluZywKKwkJICAgICAgYnl0ZXNfdG9fcmVjdiwKKwkJICAgICAgKGNvbm5lY3RlZCkgPyBOVUxMIDogKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJICAgICAgJmFkZHJsZW4sCisJCSAgICAgIC8qIGlmIFhNSVQgYWxzbywgdGhlbiB0aGlzIGlzIFJSIHRlc3Qgc28gd2FpdGFsbCAqLworCQkgICAgICAoZGlyZWN0aW9uICYgTkVUUEVSRl9YTUlUKSA/IE5FVFBFUkZfV0FJVEFMTDogMCwKKwkJICAgICAgJnRlbXBfcmVjdnMpOworICAgICAgaWYgKHJldCA+IDApIHsKKwkvKiBpZiB0aGlzIGlzIGEgcmVjdi1vbmx5IHRlc3QgY29udHJvbGxlZCBieSBieXRlIGNvdW50IHdlCisJICAgZGVjcmVtZW50IHRoZSB1bml0c19yZW1haW5pbmcgYnkgdGhlIGJ5dGVzIHJlY2VpdmVkICovCisJaWYgKCEoZGlyZWN0aW9uICYgTkVUUEVSRl9YTUlUKSAmJiAodW5pdHNfcmVtYWluaW5nID4gMCkpIHsKKwkgIHVuaXRzX3JlbWFpbmluZyAtPSByZXQ7CisJfQorCWJ5dGVzX3JlY2VpdmVkICs9IHJldDsKKwlsb2NhbF9yZWNlaXZlX2NhbGxzICs9IHRlbXBfcmVjdnM7CisgICAgICB9CisgICAgICBlbHNlIGlmIChyZXQgPT0gMCkgeworCS8qIGlzIHRoaXMgdGhlIGVuZCBvZiBhIHRlc3QsIGp1c3QgYSB6ZXJvLWJ5dGUgcmVjdiwgb3IKKwkgICBzb21ldGhpbmcgZWxzZT8gdGhhdCBpcyBhbiBleGNlZWRpbmdseSBnb29kIHF1ZXN0aW9uIGFuZAorCSAgIG9uZSBmb3Igd2hpY2ggSSBkb24ndCBwcmVzZW50bHkgaGF2ZSBhIGdvb2QgYW5zd2VyLCBidXQKKwkgICB0aGF0IHdvbid0IHN0b3AgbWUgZnJvbSBndWVzc2luZyA6KSByYWogMjAwOC0wMS0wOSAqLworCWZwcmludGYod2hlcmUsInJlYWQgemVybyBjb25uX3Rlc3QgJWQgbnVsbF9tZXNzYWdlX29rICVkXG4iLAorCQljb25uZWN0aW9uX3Rlc3QsbnVsbF9tZXNzYWdlX29rKTsKKwlmZmx1c2god2hlcmUpOworCWlmICghKChjb25uZWN0aW9uX3Rlc3QpIHx8IChudWxsX21lc3NhZ2Vfb2spKSkgeworCSAgLyogaWYgaXQgaXMgbmVpdGhlciBhIGNvbm5lY3Rpb25fdGVzdCBub3IgbnVsbF9tZXNzYWdlX29rIGl0CisJICAgICBtdXN0IGJlIHRoZSBlbmQgb2YgdGhlIHRlc3QgKi8KKwkgIHRpbWVzX3VwID0gMTsKKwkgIGJyZWFrOworCX0KKwlsb2NhbF9yZWNlaXZlX2NhbGxzICs9IHRlbXBfcmVjdnM7CisgICAgICB9CisgICAgICBlbHNlIGlmIChyZXQgPT0gLTEpIHsKKwkvKiB0ZXN0IHRpbWVkLW91dCAqLworCWZwcmludGYod2hlcmUsIllPISBUSU1FU1VQIVxuIik7CisJZmZsdXNoKHdoZXJlKTsKKwl0aW1lc191cCA9IDE7CisJdGltZWRfb3V0ID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCS8qIHByZXNlbnRseSBhdCBsZWFzdCwgLTIgYW5kIC0zIGFyZSBlcXVhbGx5IGJhZCBvbiByZWN2ICovCisJLyogd2UgbmVlZCBhIHJlc3BvbnNlIG1lc3NhZ2UgaGVyZSBmb3IgdGhlIGNvbnRyb2wgY29ubmVjdGlvbgorCSAgIGJlZm9yZSB3ZSBleGl0ISAqLworCWV4aXQoMSk7CisgICAgICB9CisgICAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisgICAgfQorCisgICAgLyogaWYgd2Ugc2hvdWxkIHRyeSB0byBzZW5kIHNvbWV0aGluZywgdGhlbiBieSBhbGwgbWVhbnMsIGxldCB1cworICAgICAgIHRyeSB0byBzZW5kIHNvbWV0aGluZy4gKi8KKyAgICBpZiAoKG9tbmlfcmVxdWVzdC0+ZGlyZWN0aW9uICYgTkVUUEVSRl9YTUlUKSAmJgorCSF0aW1lc191cCkgeworICAgICAgcmV0ID0gc2VuZF9kYXRhKGRhdGFfc29ja2V0LAorCQkgICAgICBzZW5kX3JpbmcsCisJCSAgICAgIGJ5dGVzX3RvX3NlbmQsCisJCSAgICAgIChjb25uZWN0ZWQpID8gTlVMTCA6IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcmFkZHJfaW4sCisJCSAgICAgIGFkZHJsZW4pOworCisgICAgICAvKiB0aGUgb3JkZXIgb2YgdGhlc2UgaWYncyB3aWxsIHNlZW0gYSB0cmlmZmxlIHN0cmFuZ2UsIGJ1dCB0aGV5CisJIGFyZSBteSBiZXN0IGd1ZXNzIGFzIHRvIG9yZGVyIG9mIHByb2JhYmlsdHkgYW5kL29yIGltcG9ydGFuY2UKKwkgdG8gdGhlIG92ZXJoZWFkIHJhaiAyMDA4LTAxLTA5Ki8KKyAgICAgIGlmIChyZXQgPT0gYnl0ZXNfdG9fc2VuZCkgeworCS8qIGlmIHRoaXMgaXMgYSBzZW5kLW9ubHkgdGVzdCBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQgd2UKKwkgICBkZWNyZW1lbnQgdW5pdHNfcmVtYWluaW5nIGJ5IHRoZSBieXRlcyBzZW50ICovCisJaWYgKCEoZGlyZWN0aW9uICYgTkVUUEVSRl9SRUNWKSAmJiAodW5pdHNfcmVtYWluaW5nID4gMCkpIHsKKwkgIHVuaXRzX3JlbWFpbmluZyAtPSByZXQ7CisJfQorCWJ5dGVzX3NlbnQgKz0gcmV0OworCXNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKwlsb2NhbF9zZW5kX2NhbGxzKys7CisgICAgICB9CisgICAgICBlbHNlIGlmIChyZXQgPT0gLTIpIHsKKwkvKiB3aGF0IHRvIGRvIGhlcmUgLTIgbWVhbnMgYSBub24tZmF0YWwgZXJyb3IgLSBwcm9iYWJseQorCSAgIEVOT0JVRlMgYW5kIHNvIG91ciBzZW5kIGRpZG4ndCBoYXBwZW4uICBpbiB0aGUgb2xkIGNvZGUgZm9yCisJICAgVURQX1NUUkVBTSB3ZSB3b3VsZCBqdXN0IGNvbnRpbnVlIGluIHRoZSB3aGlsZSBsb29wLiAgaXQKKwkgICBpc24ndCBjbGVhciB0aGF0IGlzIHdoYXQgdG8gZG8gaGVyZSwgc28gd2Ugd2lsbCBzaW1wbHkKKwkgICBpbmNyZW1lbnQgdGhlIGZhaWxlZF9zZW5kcyBzdGF0IGFuZCBmYWxsLXRocm91Z2guIElmIHRoaXMKKwkgICBpcyBhIFVEUF9TVFJFQU0gc3R5bGUgb2YgdGVzdCwgdGhlIG5ldCBlZmZlY3Qgc2hvdWxkIGJlIHRoZQorCSAgIHNhbWUuIGlmIHRoaXMgaXMgYSBVRFBfUlIgd2l0aCBhIHJlYWxseS1iaWcgYnVyc3QgY291bnQsIEkKKwkgICBkb24ndCB0aGluayB3ZSB3ZXJlIGNoZWNraW5nIGZvciBFTk9CVUZTIHRoZXJlIGFueXdheSBhbmQKKwkgICBzbyB3b3VsZCBoYXZlIGZhaWxlZC4gIEhlcmUgd2UgY2FuIGp1c3QgbGV0IHRoaW5ncworCSAgIHNsaWRlLiAqLworCWZhaWxlZF9zZW5kcysrOworICAgICAgfQorICAgICAgZWxzZSBpZiAocmV0ID09IDApIHsKKwkvKiB3YXMgdGhpcyBhIHplcm8tYnl0ZSBzZW5kPyBpZiBpdCB3YXMsIHRoZW4gb3N0ZW5zaWJseSB3ZQorCSAgIHdvdWxkIGhpdCB0aGUgcmV0ID09IGJ5dGVzX3RvX3NlbmQgY2FzZSB3aGljaCBtZWFucyB3ZSdkCisJICAgbmV2ZXIgZ2V0IGhlcmUgYXMgd2UgYXJlIHVzaW5nIGJsb2NraW5nIHNlbWFudGljcyAqLworICAgICAgfQorICAgICAgZWxzZSBpZiAocmV0ID09IC0xKSB7CisJdGltZXNfdXAgPSAxOworCXRpbWVkX291dCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgICAgICBlbHNlIHsKKwkvKiB3ZSBuZWVkIGEgcmVzcG9uc2UgbWVzc2FnZSBiYWNrIHRvIG5ldHBlcmYgaGVyZSBiZWZvcmUgd2UKKwkgICBleGl0ICovCisJLyogTkVFRCBSRVNQT05TRTsgKi8KKwlleGl0KDEpOworICAgICAgfQorCisgICAgfQorCisgICAgaWYgKGNvbm5lY3Rpb25fdGVzdCkgeworI2lmZGVmIF9fbGludXgKKyAgICAgIC8qIHNvLCAiTGludXgiIHdpdGggYXV0b3R1bmluZyBsaWtlcyB0byBhbHRlciB0aGUgc29ja2V0IGJ1ZmZlcgorCSBzaXplcyBvdmVyIHRoZSBsaWZlIG9mIHRoZSBjb25uZWN0aW9uLCBidXQgb25seSBkb2VzIHNvIHdoZW4KKwkgb25lIHRha2VzIHRoZSBkZWZhdWx0cyBhdCB0aW1lIG9mIHNvY2tldCBjcmVhdGlvbi4gIGlmIHdlCisJIHRvb2sgdGhvc2UgZGVmYXVsdHMsIHdlIHNob3VsZCBpbnF1aXJlIGFzIHRvIHdoYXQgdGhlIHZhbHVlcworCSB1bHRpbWF0ZWx5IGJlY2FtZS4gcmFqIDIwMDgtMDEtMTUgKi8KKyAgICAgIGlmIChsc3Jfc2l6ZV9yZXEgPCAwKQorCWdldF9zb2NrX2J1ZmZlcihkYXRhX3NvY2tldCwgUkVDVl9CVUZGRVIsICZsc3Jfc2l6ZV9lbmQpOworICAgICAgZWxzZQorCWxzcl9zaXplX2VuZCA9IGxzcl9zaXplOworICAgICAgaWYgKGxzc19zaXplX3JlcSA8IDApCisJZ2V0X3NvY2tfYnVmZmVyKGRhdGFfc29ja2V0LCBTRU5EX0JVRkZFUiwgJmxzc19zaXplX2VuZCk7CisgICAgICBlbHNlCisJbHNzX3NpemVfZW5kID0gbHNzX3NpemU7CisjZWxzZQorICAgICAgbHNyX3NpemVfZW5kID0gbHNyX3NpemU7CisgICAgICBsc3Nfc2l6ZV9lbmQgPSBsc3Nfc2l6ZTsKKyNlbmRpZgorICAgICAgcmV0ID0gY2xvc2VfZGF0YV9zb2NrZXQoZGF0YV9zb2NrZXQsTlVMTCwwKTsKKyAgICAgIGlmIChyZXQgPT0gLTEpIHsKKwl0aW1lc191cCA9IDE7CisJdGltZWRfb3V0ID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHJldCA8IDApIHsKKwlwZXJyb3IoIm5ldHBlcmY6IHJlY3Zfb21uaTogY2xvc2VfZGF0YV9zb2NrZXQgZmFpbGVkIik7CisJZmZsdXNoKHdoZXJlKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgLyogd2Ugd2lsbCBuZWVkIGEgbmV3IGNvbm5lY3Rpb24gdG8gYmUgZXN0YWJsaXNoZWQgKi8KKyAgICAgIG5lZWRfdG9fYWNjZXB0ID0gMTsKKyAgICAgIGNvbm5lY3RlZCA9IDA7CisgICAgfQorCisjaWYgZGVmaW5lZChXQU5UX0lOVEVSVkFMUykKKyAgICBJTlRFUlZBTFNfV0FJVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisKKyAgICAvKiB3YXMgdGhpcyBhICJ0cmFuc2FjdGlvbiIgdGVzdD8gZG9uJ3QgZm9yIGdldCB0aGF0IGEgVENQX0NDCisgICAgICAgc3R5bGUgdGVzdCB3aWxsIGhhdmUgbm8geG1pdCBvciByZWN2IDopIHNvLCB3ZSBjaGVjayBmb3IgZWl0aGVyCisgICAgICAgYm90aCBYTUlUIGFuZCBSRUNWIHNldCwgb3IgbmVpdGhlciBYTUlUIG5vciBSRUNWIHNldCAqLworICAgIGlmIChORVRQRVJGX0lTX1JSKG9tbmlfcmVxdWVzdC0+ZGlyZWN0aW9uKSkgeworICAgICAgdHJhbnNfY29tcGxldGVkKys7CisgICAgICBpZiAodW5pdHNfcmVtYWluaW5nKSB7CisJdW5pdHNfcmVtYWluaW5nLS07CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogVGhlIGN1cnJlbnQgaXRlcmF0aW9uIGxvb3Agbm93IGV4aXRzIGR1ZSB0byB0aW1lb3V0IG9yIHVuaXQgY291bnQKKyAgICAgYmVpbmcgIHJlYWNoZWQgKi8KKyAgCisgIGNwdV9zdG9wKG9tbmlfcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICBpZiAodGltZWRfb3V0KSB7CisgICAgLyogd2UgZW5kZWQgdGhlIHRlc3QgYnkgdGltZSwgd2hpY2ggbWF5IGhhdmUgYmVlbiBQQURfVElNRSBzZWNvbmRzCisgICAgICAgbG9uZ2VyIHRoYW4gd2Ugd2FudGVkIHRvIHJ1bi4gc28sIHdlIHdhbnQgdG8gc3VidHJhY3QgcGFkX3RpbWUKKyAgICAgICBmcm9tIHRoZSBlbGFwc2VkX3RpbWUuIGlmIHdlIGRpZG4ndCBwYWQgdGhlIHRpbWVyIHBhZF90aW1lIHdpbGwKKyAgICAgICBiZSAwIHNvIHdlIGNhbiBqdXN0IHN1YnRyYWN0IGl0IGFueXdheSA6KSAqLworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiQWRqdXN0aW5nIGVsYXBzZWQgdGltZSBieSAlZCBzZWNvbmRzXG4iLHBhZF90aW1lKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGVsYXBzZWRfdGltZSAtPSBwYWRfdGltZTsKKyAgfQorCisgIGlmIChjb25uZWN0ZWQpIHsKKyNpZmRlZiBfX2xpbnV4CisgICAgLyogc28sICJMaW51eCIgd2l0aCBhdXRvdHVuaW5nIGxpa2VzIHRvIGFsdGVyIHRoZSBzb2NrZXQgYnVmZmVyCisgICAgICAgc2l6ZXMgb3ZlciB0aGUgbGlmZSBvZiB0aGUgY29ubmVjdGlvbiwgYnV0IG9ubHkgZG9lcyBzbyB3aGVuCisgICAgICAgb25lIHRha2VzIHRoZSBkZWZhdWx0cyBhdCB0aW1lIG9mIHNvY2tldCBjcmVhdGlvbi4gIGlmIHdlIHRvb2sKKyAgICAgICB0aG9zZSBkZWZhdWx0cywgd2Ugc2hvdWxkIGlucXVpcmUgYXMgdG8gd2hhdCB0aGUgdmFsdWVzCisgICAgICAgdWx0aW1hdGVseSBiZWNhbWUuIHJhaiAyMDA4LTAxLTE1ICovCisgICAgaWYgKGxzcl9zaXplX3JlcSA8IDApCisgICAgICBnZXRfc29ja19idWZmZXIoZGF0YV9zb2NrZXQsIFJFQ1ZfQlVGRkVSLCAmbHNyX3NpemVfZW5kKTsKKyAgICBlbHNlCisgICAgICBsc3Jfc2l6ZV9lbmQgPSBsc3Jfc2l6ZTsKKyAgICBpZiAobHNzX3NpemVfcmVxIDwgMCkKKyAgICAgIGdldF9zb2NrX2J1ZmZlcihkYXRhX3NvY2tldCwgU0VORF9CVUZGRVIsICZsc3Nfc2l6ZV9lbmQpOworICAgIGVsc2UKKyAgICAgIGxzc19zaXplX2VuZCA9IGxzc19zaXplOworI2Vsc2UKKyAgICBsc3Jfc2l6ZV9lbmQgPSBsc3Jfc2l6ZTsKKyAgICBsc3Nfc2l6ZV9lbmQgPSBsc3Nfc2l6ZTsKKyNlbmRpZgorICAgIGNsb3NlX2RhdGFfc29ja2V0KGRhdGFfc29ja2V0LE5VTEwsMCk7CisgIH0KKyAgZWxzZSB7CisgICAgY2xvc2VfZGF0YV9zb2NrZXQoZGF0YV9zb2NrZXQsKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbixhZGRybGVuKTsKKyAgICBsc3Jfc2l6ZV9lbmQgPSBsc3Jfc2l6ZTsKKyAgICBsc3Nfc2l6ZV9lbmQgPSBsc3Nfc2l6ZTsKKyAgfQorCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlciAgKi8KKyAgCisgIG9tbmlfcmVzdWx0cy0+c2VuZF9jYWxscyAgICAgID0gbG9jYWxfc2VuZF9jYWxsczsKKyAgb21uaV9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZF9sbyA9IGJ5dGVzX3JlY2VpdmVkICYgMHgwMDAwMDAwMEZGRkZGRkZGVUxMOworICBvbW5pX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkX2hpID0gKGJ5dGVzX3JlY2VpdmVkICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMjsKKyAgb21uaV9yZXN1bHRzLT5yZWN2X2J1Zl9zaXplICAgPSBsc3Jfc2l6ZV9lbmQ7CisgIG9tbmlfcmVzdWx0cy0+cmVjdl9jYWxscyAgICAgID0gbG9jYWxfcmVjZWl2ZV9jYWxsczsKKyAgb21uaV9yZXN1bHRzLT5ieXRlc19zZW50X2xvICAgPSBieXRlc19zZW50ICYgMHgwMDAwMDAwMEZGRkZGRkZGVUxMOworICBvbW5pX3Jlc3VsdHMtPmJ5dGVzX3NlbnRfaGkgICA9IChieXRlc19zZW50ICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMjsKKyAgb21uaV9yZXN1bHRzLT5zZW5kX2J1Zl9zaXplICAgPSBsc3Nfc2l6ZV9lbmQ7CisgIG9tbmlfcmVzdWx0cy0+dHJhbnNfcmVjZWl2ZWQJPSB0cmFuc19jb21wbGV0ZWQ7CisgIG9tbmlfcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICBvbW5pX3Jlc3VsdHMtPmNwdV9tZXRob2QgICAgICA9IGNwdV9tZXRob2Q7CisgIG9tbmlfcmVzdWx0cy0+bnVtX2NwdXMgICAgICAgID0gbGliX251bV9sb2NfY3B1czsKKyAgaWYgKG9tbmlfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICBvbW5pX3Jlc3VsdHMtPmNwdV91dGlsID0gY2FsY19jcHVfdXRpbChlbGFwc2VkX3RpbWUpOworICB9CisgIG9tbmlfcmVzdWx0cy0+cGVha19jcHVfdXRpbCAgID0gKGZsb2F0KWxpYl9sb2NhbF9wZWFrX2NwdV91dGlsOworICBvbW5pX3Jlc3VsdHMtPnBlYWtfY3B1X2lkICAgICA9IGxpYl9sb2NhbF9wZWFrX2NwdV9pZDsKKyAgbG9jYWxfaW50ZXJmYWNlX25hbWUgPSAKKyAgICBmaW5kX2VncmVzc19pbnRlcmZhY2UobG9jYWxfcmVzLT5haV9hZGRyLChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcmFkZHJfaW4pOworICBzdHJuY3B5KG9tbmlfcmVzdWx0cy0+aWZuYW1lLGxvY2FsX2ludGVyZmFjZV9uYW1lLDE2KTsKKyAgb21uaV9yZXN1bHRzLT5pZm5hbWVbMTVdID0gMDsKKyAgbG9jYWxfaW50ZXJmYWNlX3Nsb3QgPSBmaW5kX2ludGVyZmFjZV9zbG90KGxvY2FsX2ludGVyZmFjZV9uYW1lKTsKKyAgc3RybmNweShvbW5pX3Jlc3VsdHMtPmlmc2xvdCxsb2NhbF9pbnRlcmZhY2Vfc2xvdCwxNik7CisgIG9tbmlfcmVzdWx0cy0+aWZzbG90WzE1XSA9IDA7CisgIGZpbmRfaW50ZXJmYWNlX2lkcyhsb2NhbF9pbnRlcmZhY2VfbmFtZSwKKwkJICAgICAmb21uaV9yZXN1bHRzLT52ZW5kb3IsCisJCSAgICAgJm9tbmlfcmVzdWx0cy0+ZGV2aWNlLAorCQkgICAgICZvbW5pX3Jlc3VsdHMtPnN1YnZlbmRvciwKKwkJICAgICAmb21uaV9yZXN1bHRzLT5zdWJkZXZpY2UpOworICBmaW5kX2RyaXZlcl9pbmZvKGxvY2FsX2ludGVyZmFjZV9uYW1lLAorCQkgICBvbW5pX3Jlc3VsdHMtPmRyaXZlciwKKwkJICAgb21uaV9yZXN1bHRzLT52ZXJzaW9uLAorCQkgICBvbW5pX3Jlc3VsdHMtPmZpcm13YXJlLAorCQkgICBvbW5pX3Jlc3VsdHMtPmJ1cywKKwkJICAgMzIpOworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9vbW5pOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzZW5kX3Jlc3BvbnNlX24oT01OSV9SRVNVTFRTX0NPTkZfQ1VUT0ZGKTsKKworICAvKiB3aGVuIHdlIGltcGxlbWVudCB0aGlzLCBpdCB3aWxsIGxvb2sgYSBsaXR0bGUgc3RyYW5nZSwgYnV0IHdlIGRvCisgICAgIGl0IHRvIGF2b2lkIGNlcnRhaW4gb3ZlcmhlYWRzIHdoZW4gcnVubmluZyBhZ2dyZWdhdGVzIGFuZCB1c2luZworICAgICBjb25maWRlbmNlIGludGVydmFscy4gIHdlIHdpbGwgcG9zdCBhIHJlY3ZfcmVxdWVzdCgpIGNhbGwgdG8gZ2V0CisgICAgIHRoZSBuZXh0IG1lc3NhZ2Ugb3IgRU9GIG9uIHRoZSBjb250cm9sIGNvbm5lY3Rpb24uICBlaXRoZXIgdGhlCisgICAgIG5ldHBlcmYgd2lsbCBjbG9zZSB0aGUgY29udHJvbCBjb25uZWN0aW9uLCB3aGljaCB3aWxsIHRlbGwgdXMgd2UKKyAgICAgYXJlIGRvbmUsIG9yIHRoZSBuZXRwZXJmIHdpbGwgc2VuZCB1cyBhbm90aGVyICJET19PTU5JIiBtZXNzYWdlLAorICAgICB3aGljaCBieSBkZWZpbml0aW9uIHNob3VsZCBiZSBpZGVudGljYWwgdG8gdGhlIGZpcnN0IERPX09NTkkKKyAgICAgbWVzc2FnZSB3ZSByZWNlaXZlZC4KKworICAgICBpbiB0aGlzIHdheSB3ZSBjYW4gYXZvaWQgb3ZlcmhlYWRzIGxpa2UgYWxsb2NhdGluZyB0aGUgYnVmZmVyCisgICAgIHJpbmdzIGFuZCB0aGUgbGlzdGVuIHNvY2tldCBhbmQgdGhlIGxpa2UgKi8KKyAgCit9CisMCit2b2lkCitzY2FuX29tbmlfYXJncyhpbnQgYXJnYywgY2hhciAqYXJndltdKQorCit7CisKKyNkZWZpbmUgT01OSV9BUkdTICJiOmNDZDpEbk5oSDprTDptOk06b09wOlA6cjpzOlM6dDpUOnU6Vnc6Vzo0NiIKKworICBleHRlcm4gY2hhcgkqb3B0YXJnOwkgIC8qIHBvaW50ZXIgdG8gb3B0aW9uIHN0cmluZwkqLworICAKKyAgaW50CQljOworICBpbnQgICAgICAgICAgIGhhdmVfdXVpZCA9IDA7CisKKyAgY2hhcgkKKyAgICBhcmcxW0JVRlNJWl0sICAvKiBhcmd1bWVudCBob2xkZXJzCQkqLworICAgIGFyZzJbQlVGU0laXTsKKworICBpZiAoZGVidWcpIHsKKyAgICBpbnQgaTsKKyAgICBwcmludGYoIiVzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQgdmVjdG9yXG4iLAorCSAgIF9fZnVuY19fKTsKKyAgICBmb3IgKGkgPSAwOyBpPCBhcmdjOyBpKyspIHsKKyAgICAgIHByaW50ZigiJXMgIixhcmd2W2ldKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworICB9CisKKyAgc3RybmNweShsb2NhbF9kYXRhX3BvcnQsIjAiLHNpemVvZihsb2NhbF9kYXRhX3BvcnQpKTsKKyAgc3RybmNweShyZW1vdGVfZGF0YV9wb3J0LCIwIixzaXplb2YocmVtb3RlX2RhdGFfcG9ydCkpOworCisgIC8qIGRlZmF1bHQgdG8gYSBTVFJFQU0gc29ja2V0IHR5cGUuIGkgd29uZGVyIGlmIHRoaXMgc2hvdWxkIGJlIHBhcnQKKyAgICAgb2Ygc2VuZF9vbW5pIG9yIGhlcmUuLi4gKi8KKyAgc29ja2V0X3R5cGUgPSBuc3RfdG9faHN0KE5TVF9TVFJFQU0pOworICBzb2NrZXRfdHlwZV9zdHIgPSBoc3RfdG9fc3RyKHNvY2tldF90eXBlKTsKKworICAvKiBkZWZhdWx0IHRvIFRDUC4gaSB3b25kZXIgaWYgdGhpcyBzaG91bGQgYmUgaGVyZSBvciBpbgorICAgICBzZW5kX29tbmk/ICovCisjaWZkZWYgSVBQUk9UT19UQ1AKKyAgcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKyNlbmRpZgorCisgIC8qIHdlIHdpbGwgY2hlY2sgdG8gc2VlIGlmIHRoaXMgbmVlZHMgdG8gcmVtYWluIDAgb3Igc2V0IHRvCisgICAgIHNvbWV0aGluZyBlbHNlIHdoZW4gd2UgZ2V0IGZpbmlzaGVkIHNjYW5uaW5nIGFsbCB0aGUgYXJndW1lbnQKKyAgICAgdmFsdWVzICovCisgIGRpcmVjdGlvbiA9IDA7CisKKyAgLyogZGVmYXVsdCBpcyB0byBiZSBhIHN0cmVhbSB0ZXN0LCBzbyByZXFfc2l6ZSBhbmQgcnNwX3NpemUgc2hvdWxkCisgICAgIGJlIDwgMCkgICovCisKKyAgcmVxX3NpemUgPSByc3Bfc2l6ZSA9IC0xOworICAgICAKKyAgLyogR28gdGhyb3VnaCBhbGwgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGJyZWFrIHRoZW0gKi8KKyAgLyogb3V0LiBGb3IgdGhvc2Ugb3B0aW9ucyB0aGF0IHRha2UgdHdvIHBhcm1zLCBzcGVjaWZ5aW5nIG9ubHkgKi8KKyAgLyogdGhlIGZpcnN0IHdpbGwgc2V0IGJvdGggdG8gdGhhdCB2YWx1ZS4gU3BlY2lmeWluZyBvbmx5IHRoZSAqLworICAvKiBzZWNvbmQgd2lsbCBsZWF2ZSB0aGUgZmlyc3QgdW50b3VjaGVkLiBUbyBjaGFuZ2Ugb25seSB0aGUgKi8KKyAgLyogZmlyc3QsIHVzZSB0aGUgZm9ybSAiZmlyc3QsIiAoc2VlIHRoZSByb3V0aW5lIGJyZWFrX2FyZ3MuLiAqLworICAKKyAgd2hpbGUgKChjPSBnZXRvcHQoYXJnYywgYXJndiwgT01OSV9BUkdTKSkgIT0gRU9GKSB7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnPyc6CQorICAgIGNhc2UgJzQnOgorICAgICAgcmVtb3RlX2RhdGFfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGxvY2FsX2RhdGFfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJzYnOgorI2lmIGRlZmluZWQoQUZfSU5FVDYpCisgICAgICByZW1vdGVfZGF0YV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGxvY2FsX2RhdGFfZmFtaWx5ID0gQUZfSU5FVDY7CisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsCisJICAgICAgIlRoaXMgbmV0cGVyZiB3YXMgbm90IGNvbXBpbGVkIG9uIGFuIElQdjYgY2FwYWJsZSBob3N0IVxuIik7CisgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgIGV4aXQoLTEpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlICdoJzoKKyAgICAgIHByaW50X3NvY2tldHNfdXNhZ2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgY2FzZSAnYic6CisjaWZkZWYgV0FOVF9GSVJTVF9CVVJTVAorICAgICAgZmlyc3RfYnVyc3Rfc2l6ZSA9IGF0b2kob3B0YXJnKTsKKyNlbHNlIC8qIFdBTlRfRklSU1RfQlVSU1QgKi8KKyAgICAgIHByaW50ZigiSW5pdGlhbCByZXF1ZXN0IGJ1cnN0IGZ1bmN0aW9uYWxpdHkgbm90IGNvbXBpbGVkLWluIVxuIik7CisjZW5kaWYgLyogV0FOVF9GSVJTVF9CVVJTVCAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSAnYyc6CisgICAgICAvKiB0aGlzIGlzIGEgY29ubmVjdGlvbiB0ZXN0ICovCisgICAgICBjb25uZWN0aW9uX3Rlc3QgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnQyc6CisjaWZkZWYgVENQX0NPUksKKyAgICAgIC8qIHNldCBUQ1BfQ09SSyAqLworICAgICAgbG9jX3RjcGNvcmsgPSAxOworICAgICAgcmVtX3RjcGNvcmsgPSAxOyAvKiBob3dldmVyLCBhdCBmaXJzdCwgd2Ugb255IGhhdmUgY29yayBhZmZlY3QgbG9jICovCisjZWxzZSAKKyAgICAgIHByaW50ZigiV0FSTklORzogVENQX0NPUksgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIVxuIik7CisjZW5kaWYgLyogVENQX0NPUksgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2QnOgorICAgICAgLyogYXJiaXRyYXJpbHkgc2V0IHRoZSBkaXJlY3Rpb24gdmFyaWFibGUgKi8KKyAgICAgIGRpcmVjdGlvbiA9IHN0cnRvbChvcHRhcmcsTlVMTCwwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0QnOgorICAgICAgLyogc2V0IHRoZSBUQ1Agbm9kZWxheSBmbGFnICovCisgICAgICBsb2Nfbm9kZWxheSA9IDE7CisgICAgICByZW1fbm9kZWxheSA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdIJzoKKyAgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgeworCS8qIG1ha2Ugc3VyZSB3ZSBsZWF2ZSByb29tIGZvciB0aGUgTlVMTCB0ZXJtaW5hdGlvbiBib3lzIGFuZAorCSAgIGdpcmxzLiByYWogMjAwNS0wMi04MiAqLyAKKwlyZW1vdGVfZGF0YV9hZGRyZXNzID0gbWFsbG9jKHN0cmxlbihhcmcxKSsxKTsKKwlzdHJjcHkocmVtb3RlX2RhdGFfYWRkcmVzcyxhcmcxKTsKKyAgICAgIH0KKyAgICAgIGlmIChhcmcyWzBdKQorCXJlbW90ZV9kYXRhX2ZhbWlseSA9IHBhcnNlX2FkZHJlc3NfZmFtaWx5KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnayc6CisgICAgICBjc3YgPSAwOworICAgICAga2V5d29yZCA9IDE7CisgICAgICAvKiBvYmxpdGVyYXRlIGFueSBwcmV2aW91cyBmaWxlIG5hbWUgKi8KKyAgICAgIGlmIChodW1hbl9zZWxlY3Rpb25fZmlsZSkgeworCWZyZWUoaHVtYW5fc2VsZWN0aW9uX2ZpbGUpOworCWh1bWFuX3NlbGVjdGlvbl9maWxlID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGlmIChjc3Zfc2VsZWN0aW9uX2ZpbGUpIHsKKwlmcmVlKGNzdl9zZWxlY3Rpb25fZmlsZSk7CisJY3N2X3NlbGVjdGlvbl9maWxlID0gTlVMTDsKKyAgICAgIH0KKyAgICAgIGlmIChhcmd2W29wdGluZF0gJiYgKCh1bnNpZ25lZCBjaGFyKWFyZ3Zbb3B0aW5kXVswXSAhPSAnLScpKSB7CisJLyogd2UgYXNzdW1lIHRoYXQgd2hhdCBmb2xsb3dzIGlzIHRoZSBuYW1lIG9mIGEgZmlsZSB3aXRoIHRoZQorCSAgIGxpc3Qgb2YgZGVzaXJlZCBvdXRwdXQgdmFsdWVzLiAqLworCWNzdl9zZWxlY3Rpb25fZmlsZSA9IHN0cmR1cChhcmd2W29wdGluZF0pOworCW9wdGluZCsrOworCS8qIHNwZWNpYWwgY2FzZSAtIGlmIHRoZSBmaWxlIG5hbWUgaXMgIj8iIHRoZW4gd2Ugd2lsbCBlbWl0IGEKKwkgICBsaXN0IG9mIHRoZSBhdmFpbGFibGUgb3V0cHV0cyAqLworCWlmIChzdHJjbXAoY3N2X3NlbGVjdGlvbl9maWxlLCI/IikgPT0gMCkgeworCSAgZHVtcF9uZXRwZXJmX291dHB1dF9saXN0KHN0ZG91dCwxKTsKKwkgIGV4aXQoMSk7CisJfQorICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnTCc6CisgICAgICBicmVha19hcmdzX2V4cGxpY2l0KG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pIHsKKwkvKiBtYWtlIHN1cmUgd2UgbGVhdmUgcm9vbSBmb3IgdGhlIE5VTEwgdGVybWluYXRpb24gYm95cyBhbmQKKwkgICBnaXJscy4gcmFqIDIwMDUtMDItODIgKi8gCisJbG9jYWxfZGF0YV9hZGRyZXNzID0gbWFsbG9jKHN0cmxlbihhcmcxKSsxKTsKKwlzdHJjcHkobG9jYWxfZGF0YV9hZGRyZXNzLGFyZzEpOworICAgICAgfQorICAgICAgaWYgKGFyZzJbMF0pCisJbG9jYWxfZGF0YV9mYW1pbHkgPSBwYXJzZV9hZGRyZXNzX2ZhbWlseShhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ20nOgorICAgICAgLyogc2V0IHRoZSBzZW5kIHNpemUuIGlmIHdlIHNldCB0aGUgbG9jYWwgc2VuZCBzaXplIGl0IHdpbGwgYWRkCisJIFhNSVQgdG8gZGlyZWN0aW9uLiAgaWYgd2Ugc2V0IHRoZSByZW1vdGUgc2VuZCBzaXplIGl0IHdpbGwKKwkgYWRkIFJFQ1YgdG8gdGhlIGRpcmVjdGlvbi4gIGxpa2VseSBhcyBub3QgdGhpcyB3aWxsIG5lZWQgc29tZQorCSBhZGRpdGlvbmFsIHRocm91Z2h0ICovCisgICAgICBicmVha19hcmdzX2V4cGxpY2l0KG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pIHsKKwlzZW5kX3NpemUgPSBjb252ZXJ0KGFyZzEpOworCWRpcmVjdGlvbiB8PSBORVRQRVJGX1hNSVQ7CisgICAgICB9CisgICAgICBpZiAoYXJnMlswXSkgeworCXJlbW90ZV9zZW5kX3NpemVfcmVxID0gY29udmVydChhcmcyKTsKKwlkaXJlY3Rpb24gfD0gTkVUUEVSRl9SRUNWOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgICAvKiBzZXQgdGhlIHJlY3Ygc2l6ZXMuICBpZiB3ZSBzZXQgdGhlIGxvY2FsIHJlY3Ygc2l6ZSBpdCB3aWxsCisJIGFkZCBSRUNWIHRvIGRpcmVjdGlvbi4gIGlmIHdlIHNldCB0aGUgcmVtb3RlIHJlY3Ygc2l6ZSBpdAorCSB3aWxsIGFkZCBYTUlUIHRvIGRpcmVjdGlvbiAgKi8KKyAgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgeworCXJlbW90ZV9yZWN2X3NpemVfcmVxID0gY29udmVydChhcmcxKTsKKwlkaXJlY3Rpb24gfD0gTkVUUEVSRl9YTUlUOworICAgICAgfQorICAgICAgaWYgKGFyZzJbMF0pIHsKKwlyZWN2X3NpemUgPSBjb252ZXJ0KGFyZzIpOworCWRpcmVjdGlvbiB8PSBORVRQRVJGX1JFQ1Y7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgIC8qIHNldCB0aGUgbG9jYWwgc29ja2V0IHR5cGUgKi8KKyAgICAgIGxvY2FsX2Nvbm5lY3RlZCA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAgIC8qIHNldCB0aGUgcmVtb3RlIHNvY2tldCB0eXBlICovCisgICAgICByZW1vdGVfY29ubmVjdGVkID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ28nOgorICAgICAgY3N2ID0gMTsKKyAgICAgIGtleXdvcmQgPSAwOworICAgICAgLyogb2JsaXRlcmF0ZSBhbnkgcHJldmlvdXMgZmlsZSBuYW1lICovCisgICAgICBpZiAoaHVtYW5fc2VsZWN0aW9uX2ZpbGUpIHsKKwlmcmVlKGh1bWFuX3NlbGVjdGlvbl9maWxlKTsKKwlodW1hbl9zZWxlY3Rpb25fZmlsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZiAoY3N2X3NlbGVjdGlvbl9maWxlKSB7CisJZnJlZShjc3Zfc2VsZWN0aW9uX2ZpbGUpOworCWNzdl9zZWxlY3Rpb25fZmlsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZiAoYXJndltvcHRpbmRdICYmICgodW5zaWduZWQgY2hhcilhcmd2W29wdGluZF1bMF0gIT0gJy0nKSkgeworCS8qIHdlIGFzc3VtZSB0aGF0IHdoYXQgZm9sbG93cyBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgd2l0aCB0aGUKKwkgICBsaXN0IG9mIGRlc2lyZWQgb3V0cHV0IHZhbHVlcy4gKi8KKwljc3Zfc2VsZWN0aW9uX2ZpbGUgPSBzdHJkdXAoYXJndltvcHRpbmRdKTsKKwlvcHRpbmQrKzsKKwkvKiBzcGVjaWFsIGNhc2UgLSBpZiB0aGUgZmlsZSBuYW1lIGlzICI/IiB0aGVuIHdlIHdpbGwgZW1pdCBhCisJICAgbGlzdCBvZiB0aGUgYXZhaWxhYmxlIG91dHB1dHMgKi8KKwlpZiAoc3RyY21wKGNzdl9zZWxlY3Rpb25fZmlsZSwiPyIpID09IDApIHsKKwkgIGR1bXBfbmV0cGVyZl9vdXRwdXRfbGlzdChzdGRvdXQsMSk7CisJICBleGl0KDEpOworCX0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ08nOgorICAgICAgY3N2ID0gMDsKKyAgICAgIGtleXdvcmQgPSAwOworICAgICAgLyogb2JsaXRlcmF0ZSBhbnkgcHJldmlvdXMgZmlsZSBuYW1lICovCisgICAgICBpZiAoaHVtYW5fc2VsZWN0aW9uX2ZpbGUpIHsKKwlmcmVlKGh1bWFuX3NlbGVjdGlvbl9maWxlKTsKKwlodW1hbl9zZWxlY3Rpb25fZmlsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZiAoY3N2X3NlbGVjdGlvbl9maWxlKSB7CisJZnJlZShjc3Zfc2VsZWN0aW9uX2ZpbGUpOworCWNzdl9zZWxlY3Rpb25fZmlsZSA9IE5VTEw7CisgICAgICB9CisgICAgICBpZiAoYXJndltvcHRpbmRdICYmICgodW5zaWduZWQgY2hhcilhcmd2W29wdGluZF1bMF0gIT0gJy0nKSkgeworCS8qIHdlIGFzc3VtZSB0aGF0IHdoYXQgZm9sbG93cyBpcyB0aGUgbmFtZSBvZiBhIGZpbGUgd2l0aCB0aGUKKwkgICBsaXN0IG9mIGRlc2lyZWQgb3V0cHV0IHZhbHVlcyAqLworCWh1bWFuX3NlbGVjdGlvbl9maWxlID0gc3RyZHVwKGFyZ3Zbb3B0aW5kXSk7CisJb3B0aW5kKys7CisJaWYgKHN0cmNtcChodW1hbl9zZWxlY3Rpb25fZmlsZSwiPyIpID09IDApIHsKKwkgIGR1bXBfbmV0cGVyZl9vdXRwdXRfbGlzdChzdGRvdXQsMCk7CisJICBleGl0KDEpOworCX0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3AnOgorICAgICAgLyogc2V0IHRoZSBtaW4gYW5kIG1heCBwb3J0IG51bWJlcnMgZm9yIHRoZSBUQ1BfQ1JSIGFuZCBUQ1BfVFJSICovCisgICAgICAvKiB0ZXN0cy4gKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwljbGllbnRfcG9ydF9taW4gPSBhdG9pKGFyZzEpOworICAgICAgaWYgKGFyZzJbMF0pCQorCWNsaWVudF9wb3J0X21heCA9IGF0b2koYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdQJzoKKyAgICAgIC8qIHNldCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBkYXRhIHBvcnQgbnVtYmVycyBmb3IgdGhlIHRlc3RzIHRvCisJIGFsbG93IHRoZW0gdG8gcnVuIHRocm91Z2ggdGhvc2UgYmxhbmtldHkgYmxhbmsgZW5kLXRvLWVuZAorCSBicmVha2luZyBmaXJld2FsbHMuIHJhaiAyMDA0LTA2LTE1ICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJc3RybmNweShsb2NhbF9kYXRhX3BvcnQsYXJnMSxzaXplb2YobG9jYWxfZGF0YV9wb3J0KSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJc3RybmNweShyZW1vdGVfZGF0YV9wb3J0LGFyZzIsc2l6ZW9mKHJlbW90ZV9kYXRhX3BvcnQpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3InOgorICAgICAgLyogc2V0IHRoZSByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzLiBzZXR0aW5nIHJlcXVlc3QvcmVzcG9uc2UKKwkgc2l6ZXMgaW1wbGljaXRseSBzZXRzIGRpcmVjdGlvbiB0byBYTUlUIGFuZCBSRUNWICovIAorICAgICAgZGlyZWN0aW9uIHw9IE5FVFBFUkZfWE1JVDsKKyAgICAgIGRpcmVjdGlvbiB8PSBORVRQRVJGX1JFQ1Y7CisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJcmVxX3NpemUgPSBjb252ZXJ0KGFyZzEpOworICAgICAgaWYgKGFyZzJbMF0pCQorCXJzcF9zaXplID0gY29udmVydChhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3MnOgorICAgICAgLyogc2V0IGxvY2FsIHNvY2tldCBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCWxzc19zaXplX3JlcSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlsc3Jfc2l6ZV9yZXEgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnUyc6CisgICAgICAvKiBzZXQgcmVtb3RlIHNvY2tldCBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCXJzc19zaXplX3JlcSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlyc3Jfc2l6ZV9yZXEgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICAvKiBzZXQgdGhlIHNvY2tldCB0eXBlICovCisgICAgICBzb2NrZXRfdHlwZSA9IHBhcnNlX3NvY2tldF90eXBlKG9wdGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICdUJzoKKyAgICAgIC8qIHNldCB0aGUgcHJvdG9jb2wgLSBha2EgIlRyYW5zcG9ydCIgKi8KKyAgICAgIHByb3RvY29sID0gcGFyc2VfcHJvdG9jb2wob3B0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3UnOgorICAgICAgLyogdXNlIHRoZSBzdXBwbGllZCBzdHJpbmcgYXMgdGhlIFVVSUQgZm9yIHRoaXMgdGVzdC4gYXQgc29tZQorCSBwb2ludCB3ZSBtYXkgd2FudCB0byBzYW5pdHkgY2hlY2sgdGhlIHN0cmluZyB3ZSBhcmUgZ2l2ZW4gYnV0CisJIGZvciBub3cgd2Ugd29uJ3Qgd29ycnkgYWJvdXQgaXQgKi8KKyAgICAgIHN0cm5jcHkodGVzdF91dWlkLG9wdGFyZyxzaXplb2YodGVzdF91dWlkKSk7CisgICAgICAvKiBzdHJuY3B5IG1heSBsZWF2ZSB1cyB3aXRoIGEgc3RyaW5nIHdpdGhvdXQgYSBudWxsIGF0IHRoZSBlbmQgKi8KKyAgICAgIHRlc3RfdXVpZFtzaXplb2YodGVzdF91dWlkKSAtIDFdID0gMDsKKyAgICAgIGhhdmVfdXVpZCA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdXJzoKKyAgICAgIC8qIHNldCB0aGUgIndpZHRoIiBvZiB0aGUgdXNlciBzcGFjZSBkYXRhICovCisgICAgICAvKiBidWZmZXIuIFRoaXMgd2lsbCBiZSB0aGUgbnVtYmVyIG9mICovCisgICAgICAvKiBzZW5kX3NpemUgYnVmZmVycyBtYWxsb2MnZCBpbiB0aGUgKi8KKyAgICAgIC8qICpfU1RSRUFNIHRlc3QuIEl0IG1heSBiZSBlbmhhbmNlZCB0byBzZXQgKi8KKyAgICAgIC8qIGJvdGggc2VuZCBhbmQgcmVjZWl2ZSAid2lkdGhzIiBidXQgZm9yIG5vdyAqLworICAgICAgLyogaXQgaXMganVzdCB0aGUgc2VuZGluZyAqX1NUUkVBTS4gKi8KKyAgICAgIHNlbmRfd2lkdGggPSBjb252ZXJ0KG9wdGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICdWJyA6CisgICAgICAvKiB3ZSB3YW50IHRvIGRvIGNvcHkgYXZvaWRhbmNlIGFuZCB3aWxsIHNldCAqLworICAgICAgLyogaXQgZm9yIGV2ZXJ5dGhpbmcsIGV2ZXJ5d2hlcmUsIGlmIHdlIHJlYWxseSAqLworICAgICAgLyogY2FuLiBvZiBjb3Vyc2UsIHdlIGRvbid0IGtub3cgYW55dGhpbmcgKi8KKyAgICAgIC8qIGFib3V0IHRoZSByZW1vdGUuLi4gKi8KKyNpZmRlZiBTT19TTkRfQ09QWUFWT0lECisgICAgICBsb2Nfc25kYXZvaWQgPSAxOworI2Vsc2UKKyAgICAgIGxvY19zbmRhdm9pZCA9IDA7CisgICAgICBwcmludGYoIkxvY2FsIHNlbmQgY29weSBhdm9pZGFuY2Ugbm90IGF2YWlsYWJsZS5cbiIpOworI2VuZGlmCisjaWZkZWYgU09fUkNWX0NPUFlBVk9JRAorICAgICAgbG9jX3JjdmF2b2lkID0gMTsKKyNlbHNlCisgICAgICBsb2NfcmN2YXZvaWQgPSAwOworICAgICAgcHJpbnRmKCJMb2NhbCByZWN2IGNvcHkgYXZvaWRhbmNlIG5vdCBhdmFpbGFibGUuXG4iKTsKKyNlbmRpZgorICAgICAgcmVtX3NuZGF2b2lkID0gMTsKKyAgICAgIHJlbV9yY3Zhdm9pZCA9IDE7CisgICAgICBicmVhazsKKyAgICB9OworICB9CisKKyAgLyogZ2VuZXJhdGUgdGhlIFVVSUQgZm9yIHRoaXMgdGVzdCBpZiB0aGUgdXNlciBoYXMgbm90IHN1cHBsaWVkIGl0ICovCisgIGlmICghaGF2ZV91dWlkKQorICAgIGdldF91dWlkX3N0cmluZyh0ZXN0X3V1aWQsc2l6ZW9mKHRlc3RfdXVpZCkpOworCisKKyAgcHJvdG9jb2xfc3RyID0gcHJvdG9jb2xfdG9fc3RyKHByb3RvY29sKTsKKyAgLyogb2ssIGlmIHdlIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCB0aGF0LCBhbmQgZGlyZWN0aW9uIGlzIHN0aWxsCisgICAgIHplcm8sIGxldCB1cyBzZWUgaWYgaXQgbmVlZHMgdG8gYmUgc2V0IHRvIHNvbWV0aGluZyBlbHNlLiAqLworICBpZiAoKDAgPT0gZGlyZWN0aW9uKSAmJiAoIWNvbm5lY3Rpb25fdGVzdCkpIGRpcmVjdGlvbiA9IE5FVFBFUkZfWE1JVDsKKyAgZGlyZWN0aW9uX3N0ciA9IGRpcmVjdGlvbl90b19zdHIoZGlyZWN0aW9uKTsKKyAgLyogc29tZSBvdGhlciBzYW5pdHkgY2hlY2tzIHdlIG5lZWQgdG8gbWFrZSB3b3VsZCBpbmNsdWRlIHN0dWZmIHdoZW4KKyAgICAgdGhlIHVzZXIgaGFzIHNldCAtbSBhbmQgLU0gc3VjaCB0aGF0IGJvdGggWE1JVCBhbmQgUkVDViBhcmUgc2V0CisgICAgIGFuZCBoYXMgbm90IHNldCAtci4gaW5pdGlhbGx5IHdlIHdpbGwgbm90IGFsbG93IHRoYXQuICBhdCBzb21lCisgICAgIHBvaW50IHdlIG1pZ2h0IGFsbG93IHRoYXQgaWYgdGhlIHVzZXIgaGFzIGFsc28gc2V0IC1yLCBidXQgdW50aWwKKyAgICAgdGhlbiB0aGUgY29kZSB3aWxsIHNpbXBseSBpZ25vcmUgdGhlIHZhbHVlcyBmcm9tIC1tIGFuZCAtTSB3aGVuCisgICAgIC1yIGlzIHNldC4gKi8KKworI2lmIGRlZmluZWQoV0FOVF9GSVJTVF9CVVJTVCkgCisjaWYgZGVmaW5lZChXQU5UX0hJU1RPR1JBTSkKKyAgLyogaWYgV0FOVF9GSVJTVF9CVVJTVCBhbmQgV0FOVF9ISVNUT0dSQU0gYXJlIGRlZmluZWQgYW5kIHRoZSB1c2VyCisgICAgIGluZGVlZCB3YW50cyBhIG5vbi16ZXJvIGZpcnN0IGJ1cnN0IHNpemUsIGFuZCB3ZSB3b3VsZCBlbWl0IGEKKyAgICAgaGlzdG9ncmFtLCB0aGVuIHdlIHNob3VsZCBlbWl0IGEgd2FybmluZyB0aGF0IHRoZSB0d28gYXJlIG5vdAorICAgICBjb21wYXRpYmxlLiByYWogMjAwNi0wMS0zMSAqLworICBpZiAoKGZpcnN0X2J1cnN0X3NpemUgPiAwKSAmJiAodmVyYm9zaXR5ID49IDIpKSB7CisgICAgZnByaW50ZihzdGRlcnIsCisJICAgICJXQVJOSU5HISBIaXN0b2dyYW1zIGFuZCBmaXJzdCBidXJzdHMgYXJlIGluY29tcGF0aWJsZSFcbiIpOworICAgIGZmbHVzaChzdGRlcnIpOworICB9CisjZW5kaWYKKyNlbmRpZgorCisgIC8qIG9rLCB0aW1lIHRvIHNhbml0eSBjaGVjayB0aGUgb3V0cHV0IHVuaXRzICovCisgIGlmICgnPycgPT0gbGliZm10KSB7CisgICAgLyogaWYgdGhpcyBpcyBhIFJSIHRlc3QgdGhlbiBzZXQgaXQgdG8gJ3gnIGZvciB0cmFuc2FjdGlvbnMgKi8KKyAgICBpZiAoTkVUUEVSRl9JU19SUihkaXJlY3Rpb24pKSB7CisgICAgICBsaWJmbXQgPSAneCc7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbGliZm10ID0gJ20nOworICAgIH0KKyAgfQorICBlbHNlIGlmICgneCcgPT0gbGliZm10KSB7CisgICAgLyogbm93LCBhIGZvcm1hdCBvZiAneCcgbWFrZXMgbm8gc2Vuc2UgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4KKyAgICAgICBhbiBSUiB0ZXN0LiBpZiBzb21lb25lIGhhcyBiZWVuIHNpbGx5IGVub3VnaCB0byB0cnkgdG8gc2V0CisgICAgICAgdGhhdCwgd2Ugd2lsbCByZXNldCBpdCBzaWxlbnRseSB0byBkZWZhdWx0IC0gbmFtZWx5ICdtJyAqLworICAgIGlmICghTkVUUEVSRl9JU19SUihkaXJlY3Rpb24pKSB7CisgICAgICBsaWJmbXQgPSAnbSc7CisgICAgfQorICB9CisKKyAgLyogdGhpcyBuZWVkcyB0byBiZSBzdHJkdXAgOikgKi8KKyAgdGhydXB1dF9mb3JtYXRfc3RyID0gc3RyZHVwKGZvcm1hdF91bml0cygpKTsKKworICAvKiBzbywgaWYgdGhlcmUgaXMgdG8gYmUgbm8gY29udHJvbCBjb25uZWN0aW9uLCB3ZSB3YW50IHRvIGhhdmUgc29tZQorICAgICBkaWZmZXJlbnQgc2V0dGluZ3MgZm9yIGEgZmV3IHRoaW5ncyAqLworCisgIGlmIChub19jb250cm9sKSB7CisKKyAgICBmcHJpbnRmKHdoZXJlLCJJIGRvbid0IGtub3cgYWJvdXQgbm8gY29udHJvbCBjb25uZWN0aW9uIHRlc3RzIHlldFxuIik7CisgICAgZXhpdCgxKTsKKworICAgIGlmIChzdHJjbXAocmVtb3RlX2RhdGFfcG9ydCwiMCIpID09IDApIHsKKyAgICAgIC8qIHdlIG5lZWQgdG8gc2VsZWN0IGVpdGhlciB0aGUgZGlzY2FyZCBwb3J0LCBlY2hvIHBvcnQgb3IKKwkgY2hhcmdlbiBwb3J0IGRlZGVwZW5kaW5nIG9uIHRoZSB0ZXN0IG5hbWUuIHJhaiAyMDA3LTAyLTA4ICovCisgICAgICBpZiAoc3Ryc3RyKHRlc3RfbmFtZSwiU1RSRUFNIikgfHwKKwkgIHN0cnN0cih0ZXN0X25hbWUsIlNFTkRGSUxFIikpIHsKKwlzdHJuY3B5KHJlbW90ZV9kYXRhX3BvcnQsImRpc2NhcmQiLHNpemVvZihyZW1vdGVfZGF0YV9wb3J0KSk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJzdHIodGVzdF9uYW1lLCJSUiIpKSB7CisJc3RybmNweShyZW1vdGVfZGF0YV9wb3J0LCJlY2hvIixzaXplb2YocmVtb3RlX2RhdGFfcG9ydCkpOworICAgICAgfQorICAgICAgZWxzZSBpZiAoc3Ryc3RyKHRlc3RfbmFtZSwiTUFFUlRTIikpIHsKKwlzdHJuY3B5KHJlbW90ZV9kYXRhX3BvcnQsImNoYXJnZW4iLHNpemVvZihyZW1vdGVfZGF0YV9wb3J0KSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlwcmludGYoIk5vIGRlZmF1bHQgcG9ydCBrbm93biBmb3IgdGhlICVzIHRlc3QsIHBsZWFzZSBzZXQgb25lIHlvdXJzZWxmXG4iLHRlc3RfbmFtZSk7CisJZXhpdCgtMSk7CisgICAgICB9CisgICAgfQorICAgIHJlbW90ZV9kYXRhX3BvcnRbc2l6ZW9mKHJlbW90ZV9kYXRhX3BvcnQpIC0gMV0gPSAnXDAnOworCisgICAgLyogSSBnbyBiYWNrIGFuZCBmb3J0aCBvbiB3aGV0aGVyIHRoZXNlIHNob3VsZCBiZWNvbWUgLTEgb3IgaWYKKyAgICAgICB0aGV5IHNob3VsZCBiZWNvbWUgMCBmb3IgYSBub19jb250cm9sIHRlc3QuIHdoYXQgZG8geW91IHRoaW5rPworICAgICAgIHJhaiAyMDA2LTAyLTA4ICovCisKKyAgICByZW1fcmN2YXZvaWQgPSAtMTsKKyAgICByZW1fc25kYXZvaWQgPSAtMTsKKyAgICByc3Nfc2l6ZV9yZXEgPSAtMTsKKyAgICByc3Jfc2l6ZV9yZXEgPSAtMTsKKyAgICByZW1fbm9kZWxheSA9IC0xOworCisgICAgaWYgKHN0cnN0cih0ZXN0X25hbWUsIlNUUkVBTSIpIHx8CisJc3Ryc3RyKHRlc3RfbmFtZSwiU0VOREZJTEUiKSkgeworICAgICAgcmVjdl9zaXplID0gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKHN0cnN0cih0ZXN0X25hbWUsIlJSIikpIHsKKyAgICAgIC8qIEkgYW0gaG93ZXZlciBfY2VydGFpbl8gdGhhdCBmb3IgYSBubyBjb250cm9sIFJSIHRlc3QgdGhlCisJIHJlc3BvbnNlIHNpemUgbXVzdCBlcXVhbCB0aGUgcmVxdWVzdCBzaXplIHNpbmNlIDk5IHRpbWVzIG91dAorCSBvZiB0ZW4gd2Ugd2lsbCBiZSBzcGVha2luZyB0byB0aGUgZWNobyBzZXJ2aWNlIHNvbWV3aGVyZSAqLworICAgICAgcnNwX3NpemUgPSByZXFfc2l6ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3Ryc3RyKHRlc3RfbmFtZSwiTUFFUlRTIikpIHsKKyAgICAgIHNlbmRfc2l6ZSA9IC0xOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHByaW50ZigiTm8gZGVmYXVsdCBwb3J0IGtub3duIGZvciB0aGUgJXMgdGVzdCwgcGxlYXNlIHNldCBvbmUgeW91cnNlbGZcbiIsdGVzdF9uYW1lKTsKKyAgICAgIGV4aXQoLTEpOworICAgIH0KKyAgfQorfQorCisjZW5kaWYgLyogV0FOVF9PTU5JICovCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X3NjdHAuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3Rfc2N0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZmNkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X3NjdHAuYwpAQCAtMCwwICsxLDQ4NjkgQEAKKyNpZm5kZWYgbGludAorY2hhcgluZXR0ZXN0X3NjdHBbXT0iXAorQCgjKW5ldHRlc3Rfc2N0cC5jIChjKSBDb3B5cmlnaHQgMjAwNS0yMDA3IEhld2xldHQtUGFja2FyZCBDby4gVmVyc2lvbiAyLjQuMyI7CisjZWxzZQorI2RlZmluZSBESVJUWQorI2RlZmluZSBXQU5UX0hJU1RPR1JBTQorI2RlZmluZSBXQU5UX0lOVEVSVkFMUworI2VuZGlmIC8qIGxpbnQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCQkJCQkJKi8KKy8qCW5ldHRlc3Rfc2N0cC5jCQkJCQkJKi8KKy8qCQkJCQkJCQkqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHNjYW5fc2N0cF9hcmdzKCkgICAgICAgIGdldCB0aGUgc2N0cCBjb21tYW5kIGxpbmUgYXJncyAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoJdGhlIGFjdHVhbCB0ZXN0IHJvdXRpbmVzLi4uCQkJCSovCisvKgkJCQkJCQkJKi8KKy8qCXNlbmRfc2N0cF9zdHJlYW0oKQlwZXJmb3JtIGEgc2N0cCBzdHJlYW0gdGVzdAkqLworLyoJcmVjdl9zY3RwX3N0cmVhbSgpCQkJCQkqLworLyoJc2VuZF9zY3RwX3JyKCkJCXBlcmZvcm0gYSBzY3RwIHJlcXVlc3QvcmVzcG9uc2UJKi8KKy8qCXJlY3Zfc2N0cF9ycigpCQkJCQkJKi8KKy8qCXNlbmRfc2N0cF9zdHJlYW1fdWRwKCkJcGVyZm9ybSBhIHNjdHAgcmVxdWVzdC9yZXNwb25zZQkqLworLyoJcmVjdl9zY3RwX3N0cmVhbV91cGQoKQl1c2luZyBVRFAgc3R5bGUgQVBJCQkqLworLyoJc2VuZF9zY3RwX3JyX3VkcCgpCXBlcmZvcm0gYSBzY3RwIHJlcXVlc3QvcmVzcG9uc2UJKi8KKy8qCXJlY3Zfc2N0cF9ycl91cGQoKQl1c2luZyBVRFAgc3R5bGUgQVBJCQkqLworLyoJCQkJCQkJCSovCisvKiAgICAgIHJlbGllcyBvbiBjcmVhdGVfZGF0YV9zb2NrZXQgaW4gbmV0dGVzdF9ic2QuYyAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXQU5UX1NDVFApCisgICAgIAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBOT1NURExJQkgKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbHNlIC8qIE5PU1RETElCSCAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmIC8qIE5PU1RETElCSCAqLworCisjaWYgIWRlZmluZWQoX19WTVMpCisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2VuZGlmIC8qICFkZWZpbmVkKF9fVk1TKSAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCisvKiB3b3VsZCBzZWVtIHRoYXQgbm90IGFsbCBzY3RwLmggZmlsZXMgZGVmaW5lIGEgTVNHX0VPRiwgYnV0IHRoYXQKKyAgIE1TR19FT0YgY2FuIGJlIHRoZSBzYW1lIGFzIE1TR19GSU4gc28gbGV0cyB3b3JrIHdpdGggdGhhdAorICAgYXNzdW1wdGlvbi4gIGluaXRpYWwgZmluZCBieSBKb24gUGVkZXJzZW4uIHJhaiAyMDA2LTAyLTAxICovCisjaWZuZGVmIE1TR19FT0YKKyNpZmRlZiBNU0dfRklOCisjZGVmaW5lIE1TR19FT0YgTVNHX0ZJTgorI2Vsc2UKKyNlcnJvciBNdXN0IGhhdmUgZWl0aGVyIE1TR19FT0Ygb3IgTVNHX0ZJTiBkZWZpbmVkCisjZW5kaWYKKyNlbmRpZiAKKworI2luY2x1ZGUgIm5ldGxpYi5oIgorI2luY2x1ZGUgIm5ldHNoLmgiCisvKiBnZXQgc29tZSBvZiB0aGUgZnVuY3Rpb25zIGZyb20gbmV0dGVzdF9ic2QuYyAqLworI2luY2x1ZGUgIm5ldHRlc3RfYnNkLmgiCisjaW5jbHVkZSAibmV0dGVzdF9zY3RwLmgiCisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorI2lmZGVmIF9fc2dpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBfX3NnaSAqLworI2luY2x1ZGUgImhpc3QuaCIKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisjaWZkZWYgV0FOVF9GSVJTVF9CVVJTVAorZXh0ZXJuIGludCBmaXJzdF9idXJzdF9zaXplOworI2VuZGlmIC8qIFdBTlRfRklSU1RfQlVSU1QgKi8KKworDAorCisvKiB0aGVzZSB2YXJpYWJsZXMgYXJlIHNwZWNpZmljIHRvIFNDVFAgdGVzdHMuIGRlY2xhcmUgKi8KKy8qIHRoZW0gc3RhdGljIHRvIG1ha2UgdGhlbSBnbG9iYWwgb25seSB0byB0aGlzIGZpbGUuICovCisKK3N0YXRpYyBpbnQJCisgIG1zZ19jb3VudCA9IDAsCS8qIG51bWJlciBvZiBtZXNzYWdlcyB0byB0cmFuc21pdCBvbiBhc3NvY2lhdGlvbiAqLworICBub25fYmxvY2sgPSAwLAkvKiBkZWZhdWx0IHRvIGJsb2NraW5nIHNvY2tldHMgKi8KKyAgbnVtX2Fzc29jaWF0aW9ucyA9IDE7IC8qIG51bWJlciBvZiBhc3NvY2lhdGlvbnMgb24gdGhlIGVuZHBvaW50ICovCisKK3N0YXRpYyAgaW50IGNvbmZpZGVuY2VfaXRlcmF0aW9uOworc3RhdGljICBjaGFyICBsb2NhbF9jcHVfbWV0aG9kOworc3RhdGljICBjaGFyICByZW1vdGVfY3B1X21ldGhvZDsKKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZV9vbmU7CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZV90d287CitzdGF0aWMgSElTVCB0aW1lX2hpc3Q7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworCitjaGFyIHNjdHBfdXNhZ2VbXSA9ICJcblwKK1VzYWdlOiBuZXRwZXJmIFtnbG9iYWwgb3B0aW9uc10gLS0gW3Rlc3Qgb3B0aW9uc10gXG5cCitcblwKK1NDVFAgU29ja2V0cyBUZXN0IE9wdGlvbnM6XG5cCisgICAgLWIgbnVtYmVyICAgICAgICAgU2VuZCBudW1iZXIgcmVxdWVzdHMgYXQgdGhlIHN0YXJ0IG9mIF9SUiB0ZXN0c1xuXAorICAgIC1EIFtMXVssUl0gICAgICAgIFNldCBTQ1RQX05PREVMQVkgbG9jYWxseSBhbmQvb3IgcmVtb3RlbHlcblwKKyAgICAtaCAgICAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgdGV4dFxuXAorICAgIC1IIG5hbWUsZmFtICAgICAgIFVzZSBuYW1lIChvciBJUCkgYW5kIGZhbWlseSBhcyB0YXJnZXQgb2YgZGF0YSBjb25uZWN0aW9uXG5cCisgICAgLUwgbmFtZSxmYW0gICAgICAgVXNlIG5hbWUgKG9yIElQKSBhbmQgZmFtaWx5IGFzIHNvdXJjZSBvZiBkYXRhIGNvbm5leHRpb25cblwKKyAgICAtbSBieXRlcyAgICAgICAgICBTZXQgdGhlIHNpemUgb2YgZWFjaCBzZW50IG1lc3NhZ2VcblwKKyAgICAtTSBieXRlcyAgICAgICAgICBTZXQgdGhlIHNpemUgb2YgZWFjaCByZWNlaXZlZCBtZXNzYWdlc1xuXAorICAgIC1QIGxvY2FsWyxyZW1vdGVdIFNldCB0aGUgbG9jYWwvcmVtb3RlIHBvcnQgZm9yIHRoZSBkYXRhIHNvY2tldFxuXAorICAgIC1yIHJlcSxbcnNwXSAgICAgIFNldCByZXF1ZXN0L3Jlc3BvbnNlIHNpemVzIChfUlIgdGVzdHMpXG5cCisgICAgLXMgc2VuZFsscmVjdl0gICAgU2V0IGxvY2FsIHNvY2tldCBzZW5kL3JlY3YgYnVmZmVyIHNpemVzXG5cCisgICAgLVMgc2VuZFsscmVjdl0gICAgU2V0IHJlbW90ZSBzb2NrZXQgc2VuZC9yZWN2IGJ1ZmZlciBzaXplc1xuXAorICAgIC1WIAkJICAgICAgRW5hYmxlIGNvcHkgYXZvaWRhbmNlIGlmIHN1cHBvcnRlZFxuXAorICAgIC1OIG51bWJlcgkgICAgICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0byBzZW5kIChfU1RSRUFNIHRlc3RzKVxuXAorICAgIC1CCQkgICAgICBydW4gdGhlIHRlc3QgaW4gbm9uLWJsb2NraW5nIG1vZGVcblwKKyAgICAtVCBudW1iZXIJICAgICAgTnVtYmVyIG9mIGFzc29jaWF0aW9ucyB0byBjcmVhdGUgKF9NQU5ZIHRlc3RzKVxuXAorICAgIC00ICAgICAgICAgICAgICAgIFVzZSBBRl9JTkVUIChlZyBJUHY0KSBvbiBib3RoIGVuZHMgb2YgdGhlIGRhdGEgY29ublxuXAorICAgIC02ICAgICAgICAgICAgICAgIFVzZSBBRl9JTkVUNiAoZWcgSVB2Nikgb24gYm90aCBlbmRzIG9mIHRoZSBkYXRhIGNvbm5cblwKK1xuXAorRm9yIHRob3NlIG9wdGlvbnMgdGFraW5nIHR3byBwYXJtcywgYXQgbGVhc3Qgb25lIG11c3QgYmUgc3BlY2lmaWVkO1xuXAorc3BlY2lmeWluZyBvbmUgdmFsdWUgd2l0aG91dCBhIGNvbW1hIHdpbGwgc2V0IGJvdGggcGFybXMgdG8gdGhhdFxuXAordmFsdWUsIHNwZWNpZnlpbmcgYSB2YWx1ZSB3aXRoIGEgbGVhZGluZyBjb21tYSB3aWxsIHNldCBqdXN0IHRoZSBzZWNvbmRcblwKK3Bhcm0sIGEgdmFsdWUgd2l0aCBhIHRyYWlsaW5nIGNvbW1hIHdpbGwgc2V0IGp1c3QgdGhlIGZpcnN0LiBUbyBzZXRcblwKK2VhY2ggcGFybSB0byB1bmlxdWUgdmFsdWVzLCBzcGVjaWZ5IGJvdGggYW5kIHNlcGFyYXRlIHRoZW0gd2l0aCBhXG5cCitjb21tYS5cbiI7IAorICAgICAKKwwKKyAvKiBUaGlzIHJvdXRpbmUgaXMgaW50ZW5kZWQgdG8gcmV0cmlldmUgaW50ZXJlc3RpbmcgYXNwZWN0cyBvZiB0Y3AgKi8KKyAvKiBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbi4gYXQgZmlyc3QsIGl0IGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZSAqLworIC8qIG1heGltdW0gc2VnbWVudCBzaXplLiBsYXRlciwgaXQgbWlnaHQgYmUgbW9kaWZpZWQgdG8gcmV0cmlldmUgKi8KKyAvKiBvdGhlciBpbmZvcm1hdGlvbiwgYnV0IGl0IG11c3QgYmUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgKi8KKyAvKiByZXRyaWV2ZWQgcXVpY2tseSBhcyBpdCBpcyBjYWxsZWQgZHVyaW5nIHRoZSB0aW1pbmcgb2YgdGhlIHRlc3QuICovCisgLyogZm9yIHRoYXQgcmVhc29uLCBhIHNlY29uZCByb3V0aW5lIG1heSBiZSBjcmVhdGVkIHRoYXQgY2FuIGJlICovCisgLyogY2FsbGVkIG91dHNpZGUgb2YgdGhlIHRpbWluZyBsb29wICovCitzdGF0aWMKK3ZvaWQKK2dldF9zY3RwX2luZm8oc29ja2V0LCBtc3MpCisgICAgIGludCBzb2NrZXQ7CisgICAgIGludCAqbXNzOworeworCisgIGludCBzb2NrX29wdF9sZW47CisKKyAgaWYgKHNjdHBfb3B0X2luZm8oc29ja2V0LAorCQkgICAgMCwKKwkJICAgIFNDVFBfTUFYU0VHLAorCQkgICAgbXNzLAorCQkgICAgJnNvY2tfb3B0X2xlbikgPCAwKSB7CisgICAgbHNzX3NpemUgPSAtMTsKKyAgfQorfQorCisMCitzdGF0aWMKK3ZvaWQKK3NjdHBfZW5hYmxlX2V2ZW50cyhzb2NrZXQsIGV2X21hc2spCisgICAgaW50IHNvY2tldDsKKyAgICBpbnQgZXZfbWFzazsKK3sKKyAgICBzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUgZXY7CisKKyAgICBiemVybygmZXYsIHNpemVvZihldikpOworCisgICAgaWYgKGV2X21hc2sgJiBTQ1RQX1NORFJDVl9JTkZPX0VWKQorCWV2LnNjdHBfZGF0YV9pb19ldmVudCA9IDE7CisKKyAgICBpZiAoZXZfbWFzayAmIFNDVFBfQVNTT0NfQ0hBTkdFX0VWKQorCWV2LnNjdHBfYXNzb2NpYXRpb25fZXZlbnQgPSAxOworCisgICAgaWYgKGV2X21hc2sgJiBTQ1RQX1BFRVJBRERSX0NIQU5HRV9FVikKKwlldi5zY3RwX2FkZHJlc3NfZXZlbnQgPSAxOworCisgICAgaWYgKGV2X21hc2sgJiBTQ1RQX1NORF9GQUlMRURfRVYpCisJZXYuc2N0cF9zZW5kX2ZhaWx1cmVfZXZlbnQgPSAxOworCisgICAgaWYgKGV2X21hc2sgJiBTQ1RQX1JFTU9URV9FUlJPUl9FVikKKwlldi5zY3RwX3BlZXJfZXJyb3JfZXZlbnQgPSAxOworCisgICAgaWYgKGV2X21hc2sgJiBTQ1RQX1NIVVRET1dOX0VWKQorCWV2LnNjdHBfc2h1dGRvd25fZXZlbnQgPSAxOworCisgICAgaWYgKGV2X21hc2sgJiBTQ1RQX1BEX0VWKQorCWV2LnNjdHBfcGFydGlhbF9kZWxpdmVyeV9ldmVudCA9IDE7CisKKyAgICBpZiAoZXZfbWFzayAmIFNDVFBfQURBUFRfRVYpCisjaWZkZWYgSEFWRV9TQ1RQX0FEQVBUQVRJT05fTEFZRVJfRVZFTlQKKwlldi5zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQgPSAxOworI2Vsc2UKKwlldi5zY3RwX2FkYXB0aW9uX2xheWVyX2V2ZW50ID0gMTsKKyNlbmRpZgorCisgICAgaWYgKHNldHNvY2tvcHQoc29ja2V0LAorCQkgICBJUFBST1RPX1NDVFAsCisjaWZkZWYgU0NUUF9FVkVOVFMKKwkJICAgU0NUUF9FVkVOVFMsCisjZWxzZQorCQkgICBTQ1RQX1NFVF9FVkVOVFMsCisjZW5kaWYKKwkJICAgKGNvbnN0IGNoYXIqKSZldiwKKwkJICAgc2l6ZW9mKGV2KSkgIT0gMCApIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInNjdHBfZW5hYmxlX2V2ZW50OiBjb3VsZCBub3Qgc2V0IHNjdHAgZXZlbnRzIGVycm5vICVkXG4iLAorCSAgICAgIGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KK30KKwwKKworc3RhdGljCitzY3RwX2Rpc3Bvc2l0aW9uX3QKK3NjdHBfcHJvY2Vzc19ldmVudChzb2NrZXQsIGJ1ZikKKyAgICBpbnQgc29ja2V0OworICAgIHZvaWQgKmJ1ZjsKK3sKKworICAgIHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqc2FjOworICAgIHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkICpzc2Y7CisgICAgc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICpzcGM7CisgICAgc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yICpzcmU7CisgICAgdW5pb24gc2N0cF9ub3RpZmljYXRpb24gKnNucDsKKworICAgIHNucCA9IGJ1ZjsKKworICAgIHN3aXRjaCAoc25wLT5zbl9oZWFkZXIuc25fdHlwZSkgeworICAgIGNhc2UgU0NUUF9BU1NPQ19DSEFOR0U6CisJaWYgKGRlYnVnKSB7CisJICAgIGZwcmludGYod2hlcmUsICJcdFNDVFBfQVNTT0NfQ0hBTkdFIGV2ZW50LCB0eXBlOiIpOworCSAgICBmZmx1c2god2hlcmUpOworCX0KKwlzYWMgPSAmc25wLT5zbl9hc3NvY19jaGFuZ2U7CisJc3dpdGNoIChzYWMtPnNhY190eXBlKSB7CisJICAgIGNhc2UgU0NUUF9DT01NX1VQOgorCQlpZiAoZGVidWcpIHsKKwkJICAgIGZwcmludGYod2hlcmUsICIgIFNDVFBfQ09NTV9VUFxuIik7CisJCSAgICBmZmx1c2god2hlcmUpOworCQl9CisJCWJyZWFrOworCSAgICBjYXNlIFNDVFBfUkVTVEFSVDoKKwkJaWYgKGRlYnVnKSB7CisJCSAgICBmcHJpbnRmKHdoZXJlLCAiICBTQ1RQX1JFU1RBUlRcbiIpOworCQkgICAgZmZsdXNoKHdoZXJlKTsKKwkJfQorCQlicmVhazsKKwkgICAgY2FzZSBTQ1RQX0NBTlRfU1RSX0FTU09DOgorCQlpZiAoZGVidWcpIHsKKwkJICAgIGZwcmludGYod2hlcmUsICIgIFNDVFBfQ0FOVF9TVFJfQVNTT0NcbiIpOworCQkgICAgZmZsdXNoKHdoZXJlKTsKKwkJfQorCQlicmVhazsJLyogRklYTUUgaWdub3JlIGFib3ZlIHN0YXR1cyBjaGFuZ2VzICovCisJICAgIGNhc2UgU0NUUF9DT01NX0xPU1Q6CisJCWlmIChkZWJ1ZykgeworCQkgICAgZnByaW50Zih3aGVyZSwgIiAgU0NUUF9DT01NX0xPU1RcbiIpOworCQkgICAgZmZsdXNoKHdoZXJlKTsKKwkJfQorCQlyZXR1cm4gU0NUUF9DTE9TRTsKKwkgICAgY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVA6CisJCWlmIChkZWJ1ZykgeworCQkgICAgZnByaW50Zih3aGVyZSwgIiAgU0NUUF9TSFVURE9XTl9DT01QTEVURVxuIik7CisJCSAgICBmZmx1c2god2hlcmUpOworCQl9CisJCXJldHVybiBTQ1RQX0NMT1NFOworCQlicmVhazsKKwl9CisKKyAgICBjYXNlIFNDVFBfU0VORF9GQUlMRUQ6CisJaWYgKGRlYnVnKSB7CisJICAgIGZwcmludGYod2hlcmUsICJcdFNDVFBfU0VORF9GQUlMRUQgZXZlbnRcbiIpOworCSAgICBmZmx1c2god2hlcmUpOworCX0KKwlzc2YgPSAmc25wLT5zbl9zZW5kX2ZhaWxlZDsKKwlicmVhazsgIC8qIEZJWE1FID8/PyBpZ25vcmUgdGhpcyBmb3Igbm93ICovCisKKyAgICBjYXNlIFNDVFBfUEVFUl9BRERSX0NIQU5HRToKKwlpZiAoZGVidWcpIHsKKwkgICAgZnByaW50Zih3aGVyZSwgIlx0U0NUUF9QRUVSX0FERFJfQ0hBTkdFIGV2ZW50XG4iKTsKKwkgICAgZmZsdXNoKHdoZXJlKTsKKwl9CisJc3BjID0gJnNucC0+c25fcGFkZHJfY2hhbmdlOworCWJyZWFrOwkvKiBGSVhNRSA/Pz8gaWdub3JlIHRoaXMgZm9yIG5vdyAqLworCisgICAgY2FzZSBTQ1RQX1JFTU9URV9FUlJPUjoKKwlpZiAoZGVidWcpIHsKKwkgICAgZnByaW50Zih3aGVyZSwgIlx0U0NUUF9SRU1PVEVfRVJST1IgZXZlbnRcbiIpOworCSAgICBmZmx1c2god2hlcmUpOworCX0KKwlzcmUgPSAmc25wLT5zbl9yZW1vdGVfZXJyb3I7CisJYnJlYWs7CS8qIEZJWE1FID8/PyBpZ25vcmUgdGhpcyBmb3Igbm93ICovCisgICAgY2FzZSBTQ1RQX1NIVVRET1dOX0VWRU5UOgorCWlmIChkZWJ1ZykgeworCSAgICBmcHJpbnRmKHdoZXJlLCAiXHRTQ1RQX1NIVVRET1dOIGV2ZW50XG4iKTsKKwkgICAgZmZsdXNoKHdoZXJlKTsKKwl9CisJcmV0dXJuIFNDVFBfQ0xPU0U7CisgICAgZGVmYXVsdDoKKwlmcHJpbnRmKHdoZXJlLCAidW5rbm93biB0eXBlOiAlaHVcbiIsIHNucC0+c25faGVhZGVyLnNuX3R5cGUpOworCWZmbHVzaCh3aGVyZSk7CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBTQ1RQX09LOworfQorCisMCisKKy8qIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBTQ1RQIHVuaWRpcmVjdGlvbmFsIGRhdGEgdHJhbnNmZXIgdGVzdCAqLworLyogKGEuay5hLiBzdHJlYW0pIGZvciB0aGUgc29ja2V0cyBpbnRlcmZhY2UuIEl0IHJlY2VpdmVzIGl0cyAqLworLyogcGFyYW1ldGVycyB2aWEgZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIHRoZSBzaGVsbCBhbmQgd3JpdGVzIGl0cyAqLworLyogb3V0cHV0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisKKwordm9pZCAKK3NlbmRfc2N0cF9zdHJlYW0ocmVtb3RlX2hvc3QpCitjaGFyCXJlbW90ZV9ob3N0W107Cit7CisgIAorICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgXG5cCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICBcblwKK2J5dGVzICBieXRlcyAgIGJ5dGVzICAgIHNlY3MuICAgICVzL3NlYyAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xID0KKyAgICAiJTZkICU2ZCAlNmQgICAgJS02LjJmICAgJTcuMmYgICBcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl6YXRpb24gICAgICAgU2VydmljZSBEZW1hbmRcblwKK1NvY2tldCBTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICAgICAgICAgIFNlbmQgICAgIFJlY3YgICAgIFNlbmQgICAgUmVjdlxuXAorU2l6ZSAgIFNpemUgICAgU2l6ZSAgICAgVGltZSAgICAgVGhyb3VnaHB1dCAgbG9jYWwgICAgcmVtb3RlICAgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgIGJ5dGVzICAgIHNlY3MuICAgICUtOC44cy9zICAlJSAlYyAgICAgICUlICVjICAgICAgdXMvS0IgICB1cy9LQlxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2YgJWNcbiI7CisKKyAgY2hhciAqY3B1X2ZtdF8xID0KKyAgICAiJTZkICU2ZCAlNmQgICAgJS02LjJmICAgICAlNy4yZiAgICUtNi4yZiAgICUtNi4yZiAgICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlxuXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0ICAgICAgICAgJS04LjhzICUtOC44cyAgICBTZW5kcyAgICUtOC44cyBSZWN2c1xuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZSAgWGZlcmVkICAgUGVyICAgICAgICAgICAgICAgICBQZXJcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2ICAgICAgICAgICAgIFNlbmQgKGF2ZykgICAgICAgICAgUmVjdiAoYXZnKVxuXAorJTVkICAgJTVkICAlNWQgICAlNWQgJTYuNGcgICU2LjJmICAgICU2ZCAgICU2LjJmICU2ZFxuIjsKKworICBjaGFyICprc2lua19mbXQyID0gIlxuXAorTWF4aW11bVxuXAorU2VnbWVudFxuXAorU2l6ZSAoYnl0ZXMpXG5cCislNmRcbiI7CisgIAorICAKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIGludCBpbnRlcnZhbF9jb3VudDsKKyAgc2lnc2V0X3Qgc2lnbmFsX3NldDsKKyNlbmRpZgorICAKKyAgLyogd2hhdCB3ZSB3YW50IGlzIHRvIGhhdmUgYSBidWZmZXIgc3BhY2UgdGhhdCBpcyBhdCBsZWFzdCBvbmUgKi8KKyAgLyogc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc2VuZCB3aW5kb3cuIHRoaXMgd2lsbCBpbnN1cmUgdGhhdCB3ZSAqLworICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgLyogb2YgdGhlIHRyYW5zcG9ydC4gVGhpcyBidWZmZXIgd2lsbCBiZSBtYWxsb2MnZCBhZnRlciB3ZSBoYXZlIGZvdW5kICovCisgIC8qIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBzZW5jIHNvY2tldCBidWZmZXIuIFdlIHdpbGwgd2FudCB0byBkZWFsICovCisgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKyAgCisjaWZkZWYgRElSVFkKKyAgaW50CSptZXNzYWdlX2ludF9wdHI7CisjZW5kaWYKKworICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKyAgCisgIGludCBsZW47CisgIHVuc2lnbmVkIGludCBudW1tZXNzYWdlcyA9IDA7CisgIGludCBzZW5kX3NvY2tldDsKKyAgaW50IGJ5dGVzX3JlbWFpbmluZzsKKyAgaW50IHNjdHBfbXNzOworICBpbnQgdGltZWRfb3V0OworCisgIC8qIHdpdGggbGlua3MgbGlrZSBmZGRpLCBvbmUgY2FuIHNlbmQgPiAzMiBiaXRzIHdvcnRoIG9mIGJ5dGVzICovCisgIC8qIGR1cmluZyBhIHRlc3QuLi4gOy0pIGF0IHNvbWUgcG9pbnQsIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlY29tZSBhICovCisgIC8qIDY0Yml0IGludGVncmFsIHR5cGUsIGJ1dCB0aG9zZSBhcmUgbm90IGVudGlyZWx5IGNvbW1vbiB5ZXQgKi8KKyAgZG91YmxlCWJ5dGVzX3NlbnQgPSAwLjA7CisgIAorI2lmZGVmIERJUlRZCisgIGludAlpOworI2VuZGlmIC8qIERJUlRZICovCisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8JKnJlbW90ZV9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbwkqbG9jYWxfcmVzOworICBzdHJ1Y3QgYWRkcmluZm8JKmxvY2FsX3JlbW90ZV9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbwkqbG9jYWxfbG9jYWxfcmVzOworCisgIHN0cnVjdAlzY3RwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdAkqc2N0cF9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXNjdHBfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdAkqc2N0cF9zdHJlYW1fcmVzcG9uc2U7CisgIHN0cnVjdAlzY3RwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqc2N0cF9zdHJlYW1fcmVzdWx0OworICAKKyAgc2N0cF9zdHJlYW1fcmVxdWVzdCAgPSAKKyAgICAoc3RydWN0IHNjdHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzY3RwX3N0cmVhbV9yZXNwb25zZSA9CisgICAgKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzY3RwX3N0cmVhbV9yZXN1bHQgICA9IAorICAgIChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgIC8qIGNvbnRyb2wgc29ja2V0LCBhbmQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBkaWZmZXJlbnQgKi8KKyAgLyogcHJvdG9jb2xzIGFuZCBzdWNoLCB3ZSBhcmUgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaG9zdCBhbmQgKi8KKyAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworICAKKyAgLyogY29tcGxldGVfYWRkcmluZm9zIHdpbGwgZWl0aGVyIHN1Y2NlZGUgb3IgZXhpdCB0aGUgcHJvY2VzcyAqLworICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1NDVFAsCisJCSAgICAgMCk7CisKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIHByaW50X3RvcF90ZXN0X2hlYWRlcigiU0NUUCBTVFJFQU0gVEVTVCIsIGxvY2FsX3JlcywgcmVtb3RlX3Jlcyk7CisgIH0KKworICBzZW5kX3JpbmcgPSBOVUxMOworICBjb25maWRlbmNlX2l0ZXJhdGlvbiA9IDE7CisgIGluaXRfc3RhdCgpOworCisgIC8qIHdlIGhhdmUgYSBncmVhdC1iaWcgd2hpbGUgbG9vcCB3aGljaCBjb250cm9scyB0aGUgbnVtYmVyIG9mIHRpbWVzICovCisgIC8qIHdlIHJ1biBhIHBhcnRpY3VsYXIgdGVzdC4gdGhpcyBpcyBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIGEgKi8KKyAgLyogY29uZmlkZW5jZSBpbnRlcnZhbCAoSSByZWFsbHkgc2hvdWxkIGhhdmUgc3RheWVkIGF3YWtlIGR1cmluZyAqLworICAvKiBwcm9ic3RhdHMgOikuIElmIHRoZSB1c2VyIGRpZCBub3QgcmVxdWVzdCBjb25maWRlbmNlIG1lYXN1cmVtZW50ICovCisgIC8qIChubyBjb25maWRlbmNlIGlzIHRoZSBkZWZhdWx0KSB0aGVuIHdlIHdpbGwgb25seSBnbyB0aG91Z2ggdGhlICovCisgIC8qIGxvb3Agb25jZS4gdGhlIGNvbmZpZGVuY2Ugc3R1ZmYgb3JpZ2luYXRlcyBmcm9tIHRoZSBmb2xrcyBhdCBJQk0gKi8KKworICB3aGlsZSAoKChjb25maWRlbmNlIDwgMCkgJiYgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDwgaXRlcmF0aW9uX21heCkpIHx8CisJIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8PSBpdGVyYXRpb25fbWluKSkgeworCisgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgLyogZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZS4gKi8KKyAgICAKKyAgICBudW1tZXNzYWdlcyAgICA9CTA7CisgICAgYnl0ZXNfc2VudCAgICAgPQkwLjA7CisgICAgdGltZXNfdXAgICAgICAgPSAJMDsKKyAgICB0aW1lZF9vdXQJICAgPSAgICAwOworICAgIAorICAgIC8qc2V0IHVwIHRoZSBkYXRhIHNvY2tldCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgICAKKyAgICBpZiAoc2VuZF9zb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3NjdHBfc3RyZWFtOiBzY3RwIHN0cmVhbSBkYXRhIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX3NjdHBfc3RyZWFtOiBzZW5kX3NvY2tldCBvYnRhaW5lZC4uLlxuIik7CisgICAgfQorICAgIAorICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZWl0aGVyIHJldHJpZXZlZCB0aGUgc29ja2V0IGJ1ZmZlciBzaXplcywgKi8KKyAgICAvKiBvciBoYXZlIHRyaWVkIHRvIHNldCB0aGVtLCBzbyBub3csIHdlIG1heSB3YW50IHRvIHNldCB0aGUgc2VuZCAqLworICAgIC8qIHNpemUgYmFzZWQgb24gdGhhdCAoYmVjYXVzZSB0aGUgdXNlciBlaXRoZXIgZGlkIG5vdCB1c2UgYSAtbSAqLworICAgIC8qIG9wdGlvbiwgb3IgdXNlZCBvbmUgd2l0aCBhbiBhcmd1bWVudCBvZiAwKS4gSWYgdGhlIHNvY2tldCBidWZmZXIgKi8KKyAgICAvKiBzaXplIGlzIG5vdCBhdmFpbGFibGUsIHdlIHdpbGwgc2V0IHRoZSBzZW5kIHNpemUgdG8gNEtCIC0gbm8gKi8KKyAgICAvKiBwYXJ0aWN1bGFyIHJlYXNvbiwganVzdCBhcmJpdHJhcnkuLi4gKi8KKyAgICBpZiAoc2VuZF9zaXplID09IDApIHsKKyAgICAgIGlmIChsc3Nfc2l6ZSA+IDApIHsKKwlzZW5kX3NpemUgPSBsc3Nfc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXNlbmRfc2l6ZSA9IDQwOTY7CisgICAgICB9CisgICAgfQorICAgIAorICAgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgcmluZyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQuICovCisgICAgLyogbm90ZSBhbHNvIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgYSBxdWFudGl0eSAqLworICAgIC8qIG9mIG1lbW9yeSB0aGF0IGlzIGF0IGxlYXN0IG9uZSBzZW5kLXNpemUgZ3JlYXRlciB0aGFuIG91ciBzb2NrZXQgKi8KKyAgICAvKiBidWZmZXIgc2l6ZS4gV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAqLworICAgIC8qIGJ1ZmZlcnMgYWxsb2NhdGVkIC0gdGhpcyBjYW4gYmUgYSBiaXQgb2YgYSBwcm9ibGVtIHdoZW4gdGhlICovCisgICAgLyogc2VuZF9zaXplIGlzIGJpZ2dlciB0aGFuIHRoZSBzb2NrZXQgc2l6ZSwgc28gd2UgbXVzdCBjaGVjay4uLiB0aGUgKi8KKyAgICAvKiB1c2VyIG1heSBoYXZlIHdhbnRlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgIndpZHRoIiBvZiBvdXIgc2VuZCAqLworICAgIC8qIGJ1ZmZlcnMsIHdlIHNob3VsZCByZXNwZWN0IHRoYXQgd2lzaC4uLiAqLworICAgIGlmIChzZW5kX3dpZHRoID09IDApIHsKKyAgICAgIHNlbmRfd2lkdGggPSAobHNzX3NpemUvc2VuZF9zaXplKSArIDE7CisgICAgICBpZiAoc2VuZF93aWR0aCA9PSAxKSBzZW5kX3dpZHRoKys7CisgICAgfQorICAgIAorICAgIGlmIChzZW5kX3JpbmcgPT0gTlVMTCkgeworICAgICAgLyogb25seSBhbGxvY2F0ZSB0aGUgc2VuZCByaW5nIG9uY2UuIHRoaXMgaXMgYSBuZXR3b3JraW5nIHRlc3QsICovCisgICAgICAvKiBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbiB0ZXN0LiB0aGlzIHdheSwgd2UgZG8gbm90IG5lZWQgYSAqLworICAgICAgLyogZGVhbGxvY2F0ZV9idWZmZXJfcmluZygpIHJvdXRpbmUsIGFuZCBJIGRvbid0IGZlZWwgbGlrZSAqLworICAgICAgLyogd3JpdGluZyBvbmUgYW55d2F5IDopIHJhaiAxMS85NCAqLworICAgICAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICAgICAgc2VuZF9zaXplLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgfQorCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiAqLworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgICAgfQorICAgIAorICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgKi8KKyAgICAvKiBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgKi8KKyAgICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAgIC8qIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCAqLworICAgIC8qIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZSB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyAqLworICAgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgICAgLyogZGVmYXVsdCB0byAxLCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJPQlET19TQ1RQX1NUUkVBTTsKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplCT0JcnNzX3NpemVfcmVxOworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZV9yZXE7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplCT0JcmVjdl9zaXplOworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPm5vX2RlbGF5CT0JcmVtX25vZGVsYXk7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQJPQlyZW1vdGVfcmVjdl9hbGlnbjsKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X29mZnNldAk9CXJlbW90ZV9yZWN2X29mZnNldDsKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdQk9CXJlbW90ZV9jcHVfdXNhZ2U7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUJPQlyZW1vdGVfY3B1X3JhdGU7CisgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RpbWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKG1zZ19jb3VudCkKKwkgIHRlc3RfYnl0ZXMgPSBzZW5kX3NpemUgKiBtc2dfY291bnQ7CisKKyAgICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF9ieXRlczsKKyAgICB9CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+c29fcmN2YXZvaWQJPQlyZW1fcmN2YXZvaWQ7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQJPQlyZW1fc25kYXZvaWQ7CisjaWZkZWYgRElSVFkKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5kaXJ0eV9jb3VudCAgICA9ICAgICAgIHJlbV9kaXJ0eV9jb3VudDsKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICA9ICAgICAgIHJlbV9jbGVhbl9jb3VudDsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnBvcnQJCT0JaHRvbmwoYXRvaShyZW1vdGVfZGF0YV9wb3J0KSk7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkJPQlhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPm5vbl9ibG9ja2luZyAgID0Jbm9uX2Jsb2NrOworICAgIAorICAgIAorICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIm5ldHBlcmY6IHNlbmRfc2N0cF9zdHJlYW06IHJlcXVlc3Rpbmcgc2N0cCBzdHJlYW0gdGVzdFxuIik7CisgICAgfQorICAgIAorICAgIHNlbmRfcmVxdWVzdCgpOworICAgIAorICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQgCSovCisgICAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAqLworICAgIC8qIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4gIFRoZQkqLworICAgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgICAvKiBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlIGNwdSBsb2NhbGx5CSovCisgICAgLyogYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgdmFsdWUgcmlnaHQqLworICAgIC8qIGFmdGVyIHRoZSBjb25uZWN0IHJldHVybnMuIFRoZSByZW1vdGUgd2lsbCBncmFiIHRoZSBjb3VudGVyIHJpZ2h0Ki8KKyAgICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAgIC8qIGJlaW5nIHNlbnQgZm9yIHRoZSBzY3RwIHRlc3RzLgkJCQkJKi8KKyAgICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgCisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworICAgICAgcnNyX3NpemUJICAgICAgPQlzY3RwX3N0cmVhbV9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKyAgICAgIHJzc19zaXplCSAgICAgID0Jc2N0cF9zdHJlYW1fcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisgICAgICByZW1fbm9kZWxheSAgICAgPQlzY3RwX3N0cmVhbV9yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgICByZW1vdGVfY3B1X3VzYWdlPQlzY3RwX3N0cmVhbV9yZXNwb25zZS0+bWVhc3VyZV9jcHU7CisgICAgICByZW1vdGVfY3B1X3JhdGUgPSBzY3RwX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGU7CisKKyAgICAgIC8qIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBwb3J0IG51bWJlciBpcyBpbiAqLworICAgICAgLyogbmV0d29yayBvcmRlciAqLworICAgICAgc2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMsIChzaG9ydClzY3RwX3N0cmVhbV9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlcik7CisKKyAgICAgIHJlbV9yY3Zhdm9pZAk9IHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZDsKKyAgICAgIHJlbV9zbmRhdm9pZAk9IHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19zbmRhdm9pZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgICAgaWYgKGNvbm5lY3Qoc2VuZF9zb2NrZXQsIAorCQlyZW1vdGVfcmVzLT5haV9hZGRyLAorCQlyZW1vdGVfcmVzLT5haV9hZGRybGVuKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3NjdHBfc3RyZWFtOiBkYXRhIHNvY2tldCBjb25uZWN0IGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBzY3RwX2VuYWJsZV9ldmVudHMoc2VuZF9zb2NrZXQsIFNDVFBfQVNTT0NfQ0hBTkdFX0VWKTsKKworICAgIGlmIChub25fYmxvY2spIHsKKwkvKiBub3cgdGhhdCB3ZSBhcmUgY29ubmVjdGVkLCBtYXJrIHRoZSBzb2NrZXQgYXMgbm9uLWJsb2NraW5nICovCisJaWYgKCFzZXRfbm9uYmxvY2soc2VuZF9zb2NrZXQpKSB7CisJICBwZXJyb3IoIm5ldHBlcmY6IGZjbnRsIik7CisJICBleGl0KDEpOworCX0KKyAgICB9CisKKyAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciAqLworICAgIC8qIHRoZSBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgKi8KKyAgICAvKiBoYXZlIGluZGljYXRlZCBhIHByb2JsZW0uIEkgZmFpbGVkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlICovCisgICAgLyogZXh0cmEgIG1lc3NhZ2UgYWZ0ZXIgdGhlIGFjY2VwdCBvbiB0aGUgcmVtb3RlLiBJZiBpdCBmYWlsZWQsICovCisgICAgLyogd2UnbGwgc2VlIGl0IGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nICovCisgICAgLyogZGF0YS4gKi8gCisgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSBzdHJlYW0gdGVzdCwgdGhleSBjYW4gYmUgKi8KKyAgICAvKiBlaXRoZXIgdGltZSBvciBieXRlLWNvdW50IGJhc2VkLiAqLworICAgIAorICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICAgIHRpbWVzX3VwID0gMDsKKyAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IDA7CisgICAgICAvKiBpbiBwcmV2aW91cyByZXZpc2lvbnMsIHdlIGhhZCB0aGUgc2FtZSBjb2RlIHJlcGVhdGVkIHRocm91Z2h0ICovCisgICAgICAvKiBhbGwgdGhlIHRlc3Qgc3VpdGVzLiB0aGlzIHdhcyB1bm5lY2Vzc2FyeSwgYW5kIG1lYW50IG1vcmUgKi8KKyAgICAgIC8qIHdvcmsgZm9yIG1lIHdoZW4gSSB3YW50ZWQgdG8gc3dpdGNoIHRvIFBPU0lYIHNpZ25hbHMsIHNvIEkgKi8KKyAgICAgIC8qIGhhdmUgYWJzdHJhY3RlZCB0aGlzIG91dCBpbnRvIGEgcm91dGluZSBpbiBuZXRsaWIuYy4gaWYgeW91ICovCisgICAgICAvKiBhcmUgZXhwZXJpZW5jaW5nIHNpZ25hbCBwcm9ibGVtcywgeW91IG1pZ2h0IHdhbnQgdG8gbG9vayAqLworICAgICAgLyogdGhlcmUuIHJhaiAxMS85NCAqLworICAgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgICAgYnl0ZXNfcmVtYWluaW5nID0gdGVzdF9ieXRlczsKKyAgICAgIHRpbWVzX3VwID0gMTsKKyAgICB9CisgICAgCisgICAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAgIAorICAgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworICAgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgaWYgKChpbnRlcnZhbF9idXJzdCkgfHwgKGRlbW9fbW9kZSkpIHsKKyAgICAgIC8qIHplcm8gbWVhbnMgdGhhdCB3ZSBuZXZlciBwYXVzZSwgc28gd2UgbmV2ZXIgc2hvdWxkIG5lZWQgdGhlICovCisgICAgICAvKiBpbnRlcnZhbCB0aW1lciwgdW5sZXNzIHdlIGFyZSBpbiBkZW1vX21vZGUgKi8KKyAgICAgIHN0YXJ0X2l0aW1lcihpbnRlcnZhbF93YXRlKTsKKyAgICB9CisgICAgaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsKKyAgICAvKiBnZXQgdGhlIHNpZ25hbCBzZXQgZm9yIHRoZSBjYWxsIHRvIHNpZ3N1c3BlbmQgKi8KKyAgICBpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCAoc2lnc2V0X3QgKilOVUxMLCAmc2lnbmFsX3NldCkgIT0gMCkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAic2VuZF9zY3RwX3N0cmVhbTogdW5hYmxlIHRvIGdldCBzaWdtYXNrIGVycm5vICVkXG4iLAorCSAgICAgIGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisjaWZkZWYgRElSVFkKKyAgICAvKiBpbml0aWFsaXplIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3IgcHV0dGluZyBkaXJ0eSBzdHVmZiAqLworICAgIC8qIGludG8gdGhlIHNlbmQgYnVmZmVyLiByYWogKi8KKyAgICBzcmFuZCgoaW50KSBnZXRwaWQoKSk7CisjZW5kaWYKKyAgICAKKyAgICAvKiBiZWZvcmUgd2Ugc3RhcnQsIGluaXRpYWxpemUgYSBmZXcgdmFyaWFibGVzICovCisKKyAgICAvKiBXZSB1c2UgYW4gIk9SIiB0byBjb250cm9sIHRlc3QgZXhlY3V0aW9uLiBXaGVuIHRoZSB0ZXN0IGlzICovCisgICAgLyogY29udHJvbGxlZCBieSB0aW1lLCB0aGUgYnl0ZSBjb3VudCBjaGVjayB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuICovCisgICAgLyogV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3Qgd2lsbCAqLworICAgIC8qIGFsd2F5cyByZXR1cm4gZmFsc2UuIFdoZW4gdGhlIHRlc3QgaXMgZmluaXNoZWQsIHRoZSB3aG9sZSAqLworICAgIC8qIGV4cHJlc3Npb24gd2lsbCBnbyBmYWxzZSBhbmQgd2Ugd2lsbCBzdG9wIHNlbmRpbmcgZGF0YS4gKi8KKyAgICAKKyAgICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKGJ5dGVzX3JlbWFpbmluZyA+IDApKSB7CisgICAgICAKKyNpZmRlZiBESVJUWQorICAgICAgLyogd2Ugd2FudCB0byBkaXJ0eSBzb21lIG51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlZ2VycyBpbiB0aGUgYnVmZmVyICovCisgICAgICAvKiB3ZSBhcmUgYWJvdXQgdG8gc2VuZC4gd2UgbWF5IGFsc28gd2FudCB0byBicmluZyBzb21lIG51bWJlciBvZiAqLworICAgICAgLyogdGhlbSBjbGVhbmx5IGludG8gdGhlIGNhY2hlLiBUaGUgY2xlYW4gb25lcyB3aWxsIGZvbGxvdyBhbnkgZGlydHkgKi8KKyAgICAgIC8qIG9uZXMgaW50byB0aGUgY2FjaGUuIGF0IHNvbWUgcG9pbnQsIHdlIG1pZ2h0IHdhbnQgdG8gcmVwbGFjZSAqLworICAgICAgLyogdGhlIHJhbmQoKSBjYWxsIHdpdGggc29tZXRoaW5nIGZyb20gYSB0YWJsZSB0byByZWR1Y2Ugb3VyIGNhbGwgKi8KKyAgICAgIC8qIG92ZXJoZWFkIGR1cmluZyB0aGUgdGVzdCwgYnV0IGl0IGlzIG5vdCBhIGhpZ2ggcHJpb3JpdHkgaXRlbS4gKi8KKyAgICAgIG1lc3NhZ2VfaW50X3B0ciA9IChpbnQgKikoc2VuZF9yaW5nLT5idWZmZXJfcHRyKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBsb2NfZGlydHlfY291bnQ7IGkrKykgeworCSptZXNzYWdlX2ludF9wdHIgPSByYW5kKCk7CisJbWVzc2FnZV9pbnRfcHRyKys7CisgICAgICB9CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbG9jX2NsZWFuX2NvdW50OyBpKyspIHsKKwlsb2NfZGlydHlfY291bnQgPSAqbWVzc2FnZV9pbnRfcHRyOworCW1lc3NhZ2VfaW50X3B0cisrOworICAgICAgfQorI2VuZGlmIC8qIERJUlRZICovCisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgLyogdGltZXN0YW1wIGp1c3QgYmVmb3JlIHdlIGdvIGludG8gc2VuZCBhbmQgdGhlbiBhZ2FpbiBqdXN0IGFmdGVyICovCisgICAgICAvKiB3ZSBjb21lIG91dCByYWogOC85NCAqLworICAgICAgSElTVF90aW1lc3RhbXAoJnRpbWVfb25lKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAgICAgCisgICAgICB3aGlsZSAoKGxlbj1zY3RwX3NlbmRtc2coc2VuZF9zb2NrZXQsCisJCQkgICAgICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLCBzZW5kX3NpemUsCisJCQkgICAgICAgTlVMTCwgMCwKKwkJCSAgICAgICAwLCAwLCAwLCAwLCAwKSkgIT0gc2VuZF9zaXplKSB7CisJaWYgKG5vbl9ibG9jayAmJiBlcnJubyA9PSBFQUdBSU4pCisJICAgIGNvbnRpbnVlOworCWVsc2UgaWYgKChsZW4gPj0wKSB8fCBTT0NLRVRfRUlOVFIobGVuKSkgeworCSAgLyogdGhlIHRlc3Qgd2FzIGludGVycnVwdGVkLCBtdXN0IGJlIHRoZSBlbmQgb2YgdGVzdCAqLworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKwlwZXJyb3IoIm5ldHBlcmY6IGRhdGEgc2VuZCBlcnJvciIpOworCXByaW50ZigibGVuIHdhcyAlZFxuIixsZW4pOworCWV4aXQoMSk7CisgICAgICB9CisKKyAgICAgIGlmICh0aW1lZF9vdXQpCisJICBicmVhazsJLyogd2UgdGltZWQgb3V0IGR1cmludCBzZW5kbXNnLCBkb25lIHdpdGggdGVzdCAqLworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIC8qIHRpbWVzdGFtcCB0aGUgZXhpdCBmcm9tIHRoZSBzZW5kIGNhbGwgYW5kIHVwZGF0ZSB0aGUgaGlzdG9ncmFtICovCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworICAgICAgSElTVF9hZGQodGltZV9oaXN0LGRlbHRhX21pY3JvKCZ0aW1lX29uZSwmdGltZV90d28pKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLyAgICAgIAorCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMgICAgICAKKyAgICAgIGlmIChkZW1vX21vZGUpIHsKKwl1bml0c190aGlzX3RpY2sgKz0gc2VuZF9zaXplOworICAgICAgfQorICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgaW50ZXJ2YWwgY291bnQgaXMgdGhlIGNvdW50LWRvd24gY291dGVyICovCisgICAgICAvKiB0byBkZWNpZGUgdG8gc2xlZXAgZm9yIGEgbGl0dGxlIGJpdCAqLworICAgICAgaWYgKChpbnRlcnZhbF9idXJzdCkgJiYgKC0taW50ZXJ2YWxfY291bnQgPT0gMCkpIHsKKwkvKiBjYWxsIHNpZ3N1c3BlbmQgYW5kIHdhaXQgZm9yIHRoZSBpbnRlcnZhbCB0aW1lciB0byBnZXQgdXMgKi8KKwkvKiBvdXQgKi8KKwlpZiAoZGVidWcgPiAxKSB7CisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzdXNwZW5kXG4iKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisJfQorCWlmIChzaWdzdXNwZW5kKCZzaWduYWxfc2V0KSA9PSBFRkFVTFQpIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgInNlbmRfc2N0cF9zdHJlYW06IGZhdWx0IHdpdGggc2lnc3VzcGVuZC5cbiIpOworCSAgZmZsdXNoKHdoZXJlKTsKKwkgIGV4aXQoMSk7CisJfQorCWludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIAorICAgICAgLyogbm93IHdlIHdhbnQgdG8gbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgbmV4dCBwb3NpdGlvbiBpbiB0aGUgKi8KKyAgICAgIC8qIGRhdGEgYnVmZmVyLi4ud2UgbWF5IGFsc28gd2FudCB0byB3cmFwIGJhY2sgdG8gdGhlICJiZWdpbm5pbmciICovCisgICAgICAvKiBvZiB0aGUgYnVmZmVyc3BhY2UsIHNvIHdlIHdpbGwgbW9kIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgc2VudCAqLworICAgICAgLyogYnkgdGhlIHNlbmQgd2lkdGgsIGFuZCB1c2UgdGhhdCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCB0byBhZGQgKi8KKyAgICAgIC8qIHRvIHRoZSBiYXNlIHBvaW50ZXIuICovCisgICAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKyAgICAgIGlmIChieXRlc19yZW1haW5pbmcpIHsKKwlieXRlc19yZW1haW5pbmcgLT0gc2VuZF9zaXplOworICAgICAgfQorICAgIH0KKworICAgIC8qIFRoZSB0ZXN0IGlzIG92ZXIuIEZsdXNoIHRoZSBidWZmZXJzIHRvIHRoZSByZW1vdGUgZW5kLiBXZSBkbyBhICovCisgICAgLyogZ3JhY2VmdWwgcmVsZWFzZSB0byBpbnN1cmUgdGhhdCBhbGwgZGF0YSBoYXMgYmVlbiB0YWtlbiBieSB0aGUgKi8KKyAgICAvKiByZW1vdGUuICovIAorCisgICAgLyogYnV0IGZpcnN0LCBpZiB0aGUgdmVyYm9zaXR5IGlzIGdyZWF0ZXIgdGhhbiAxLCBmaW5kLW91dCB3aGF0ICovCisgICAgLyogdGhlIHNjdHAgbWF4aW11bSBzZWdtZW50X3NpemUgd2FzIChpZiBwb3NzaWJsZSkgKi8KKyAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgICAgc2N0cF9tc3MgPSAtMTsKKyAgICAgIGdldF9zY3RwX2luZm8oc2VuZF9zb2NrZXQsICZzY3RwX21zcyk7CisgICAgfQorCisgICAgc2h1dGRvd24oc2VuZF9zb2NrZXQsIFNIVVRfV1IpOworCisgICAgLyogVGhlIHRlc3Qgc2VydmVyIHdpbGwgc2lnbmFsIHRvIHVzIHdoZW4gaXQgd2FudHMgdG8gc2h1dGRvd24uCisgICAgICogSW4gYmxvY2tpbmcgbW9kZSwgd2UgY2FuIGNhbGwgcmVjdm1zZy4gIEluIG5vbi1ibG9ja2luZworICAgICAqIG1vZGUsIHdlIG5lZWQgdG8gc2VsZWN0IG9uIHRoZSBzb2NrZXQgZm9yIHJlYWRpbmcuCisgICAgICogV2UnbGwgYXNzdW1lIHRoYXQgYWxsIHJldHVybnMgYXJlIHN1Y2NlZnVsbAorICAgICAqLworICAgIGlmIChub25fYmxvY2spIHsKKwlmZF9zZXQgcmVhZGZkczsKKworCUZEX1pFUk8oJnJlYWRmZHMpOworCUZEX1NFVChzZW5kX3NvY2tldCwgJnJlYWRmZHMpOworCXNlbGVjdChzZW5kX3NvY2tldCsxLCAmcmVhZGZkcywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgfSBlbHNlIHsKKwlzY3RwX3JlY3Ztc2coc2VuZF9zb2NrZXQsIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwgc2VuZF9zaXplLCBOVUxMLCAKKwkJMCwgTlVMTCwgMCk7CisgICAgfQorICAgIAorICAgIC8qIHRoaXMgY2FsbCB3aWxsIGFsd2F5cyBnaXZlIHVzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSB0ZXN0LCBhbmQgKi8KKyAgICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworICAgIAorICAgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyAqLworCQkJCQkJLyogbWVhc3VyZWQgYW5kIGhvdyAqLworCQkJCQkJLyogbG9uZyBkaWQgd2UgcmVhbGx5ICovCisJCQkJCQkvKiBydW4/ICovCisgICAgCisgICAgLyogd2UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIHNvY2tldCwgc28gY2xvc2UgaXQgdG8gcHJldmVudCBoaXR0aW5nICovCisgICAgLyogdGhlIGxpbWl0IG9uIG1heGltdW0gb3BlbiBmaWxlcy4gKi8KKyAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgICAvKiBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZiBpdCAqLworICAgIC8qIHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8KKyAgICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZSBmdXR1cmUsICovCisgICAgLyogd2UgbWF5IHdhbnQgdG8gaW5jbHVkZSBhIGNhbGN1bGF0aW9uIG9mIHRoZSB0aHJ1cHV0IG1lYXN1cmVkIGJ5ICovCisgICAgLyogdGhlIHJlbW90ZSwgYnV0IGl0IHNob3VsZCBiZSB0aGUgY2FzZSB0aGF0IGZvciBhIHNjdHAgc3RyZWFtIHRlc3QsICovCisgICAgLyogdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiBXZSBjYWxjdWxhdGUgKi8KKyAgICAvKiBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICovCisgICAgLyogSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5ICovCisgICAgLyogaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgKi8KKyAgICAvKiBzZW5kX3NpemUsIHNvIHdlIHJlYWxseSBkaWRuJ3Qgc2VuZCB3aGF0IGhlIGFza2VkIGZvciA7LSkgKi8KKyAgICAKKyAgICBieXRlc19zZW50CT0gbnRvaGQoc2N0cF9zdHJlYW1fcmVzdWx0LT5ieXRlc19yZWNlaXZlZCk7CisKKyAgICB0aHJ1cHV0CT0gKGRvdWJsZSkgY2FsY190aHJ1cHV0KGJ5dGVzX3NlbnQpOworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgICAgLyogdGhlcmUgd2FzIG5vIGlkbGUgY291bnRlciBpbiB0aGUga2VybmVsKHMpLiBXZSBuZWVkIHRvIG1ha2UgKi8KKyAgICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCQorCWxvY2FsX2NwdV91dGlsaXphdGlvbgk9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgICAgfQorICAgICAgZWxzZSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgfQorICAgICAgCisgICAgICBpZiAocmVtb3RlX2NwdV91c2FnZSkgeworCQorCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24JPSBzY3RwX3N0cmVhbV9yZXN1bHQtPmNwdV91dGlsOworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgICBzY3RwX3N0cmVhbV9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICB9ICAgIAorICAgIGVsc2UgeworICAgICAgLyogd2Ugd2VyZSBub3QgbWVhc3VyaW5nIGNwdSwgZm9yIHRoZSBjb25maWRlbmNlIHN0dWZmLCB3ZSAqLworICAgICAgLyogc2hvdWxkIG1ha2UgaXQgLTEuMCAqLworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgCisgICAgCisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24rKzsKKyAgfQorCisgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZmluaXNoZWQgbWFraW5nIGFsbCB0aGUgcnVucyB0aGF0IHdlICovCisgIC8qIHdpbGwgYmUgbWFraW5nLiBzbywgd2Ugc2hvdWxkIGV4dHJhY3Qgd2hhdCB0aGUgY2FsY3VhdGVkIHZhbHVlcyAqLworICAvKiBhcmUgZm9yIGFsbCB0aGUgY29uZmlkZW5jZSBzdHVmZi4gd2UgY291bGQgbWFrZSB0aGUgdmFsdWVzICovCisgIC8qIGdsb2JhbCwgYnV0IHRoYXQgc2VlbWVkIGEgbGl0dGxlIG1lc3N5LCBhbmQgaXQgZGlkIG5vdCBzZWVtIHdvcnRoICovCisgIC8qIGFsbCB0aGUgbXVja2luZyB3aXRoIGhlYWRlciBmaWxlcy4gc28sIHdlIGNyZWF0ZSBhIHJvdXRpbmUgbXVjaCAqLworICAvKiBsaWtlIGNhbGN1YWx0ZV9jb25maWRlbmNlLCB3aGljaCBqdXN0IHJldHVybnMgdGhlIG1lYW4gdmFsdWVzLiAqLworICAvKiByYWogMTEvOTQgKi8KKworICByZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKCZlbGFwc2VkX3RpbWUsCisJCQkgICAgJnRocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisKKyAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgLyogd2UgZGlkIG5vdCBoaXQgY29uZmlkZW5jZSwgYnV0IHdlcmUgd2UgYXNrZWQgdG8gbG9vayBmb3IgaXQ/ICovCisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBkaXNwbGF5X2NvbmZpZGVuY2UoKTsKKyAgICB9CisgIH0KKworICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChzY3RwX3N0cmVhbV9yZXN1bHQtPmNwdV9tZXRob2QpOworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCWxvY2FsX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQsCisJCXJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCWNwdV90aXRsZSwKKwkJZm9ybWF0X3VuaXRzKCksCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCXJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICByc3Jfc2l6ZSwJCSAgICAgICAgLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGxzc19zaXplLAkJICAgICAgICAvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LCAJCSAgICAgICAgLyogd2hhdCB3YXMgdGhlIHhmZXIgcmF0ZSAqLworCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgdGhydXB1dCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgICAgfQorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICByc3Jfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgbHNzX3NpemUsIAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHNlbmRzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgdGhydXB1dCk7LyogaG93IGZhc3QgZGlkIGl0IGdvICovCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBzY3RwIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgIAorICAgIC8qIHRoaXMgc3R1ZmYgbmVlZHMgdG8gYmUgd29ya2VkLW91dCBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZmlkZW5jZSAqLworICAgIC8qIGludGVydmFscyBhbmQgbXVsdGlwbGUgaXRlcmF0aW9ucyBvZiB0aGUgdGVzdC4uLiByYWogMTEvOTQgKi8KKyAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X2FsaWduLAorCSAgICBsb2NhbF9zZW5kX29mZnNldCwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICBieXRlc19zZW50LAorCSAgICBieXRlc19zZW50IC8gKGRvdWJsZSludW1tZXNzYWdlcywKKwkgICAgbnVtbWVzc2FnZXMsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKXNjdHBfc3RyZWFtX3Jlc3VsdC0+cmVjdl9jYWxscywKKwkgICAgc2N0cF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQyLAorCSAgICBzY3RwX21zcyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuXG5IaXN0b2dyYW0gb2YgdGltZSBzcGVudCBpbiBzZW5kKCkgY2FsbC5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICB9CisgIAorfQorCisMCisKKworLyogVGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgcm91dGluZSBmb3IgdGhlIHNjdHAgc3RyZWFtIHRlc3QuIEl0IGlzICovCisvKiBpbXBsZW1lbnRlZCBhcyBvbmUgcm91dGluZS4gSSBjb3VsZCBicmVhayB0aGluZ3Mtb3V0IHNvbWV3aGF0LCBidXQgKi8KKy8qIGRpZG4ndCBmZWVsIGl0IHdhcyBuZWNlc3NhcnkuICovCisKK3ZvaWQKK3JlY3Zfc2N0cF9zdHJlYW0oKQoreworICAKKyAgc3RydWN0IHNvY2thZGRyX2luIG15YWRkcl9pbjsgLyogbmVlZGVkIHRvIGdldCBwb3J0IG51bWJlciAqLworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBwZWVyYWRkcjsJLyogdXNlZCBpbiBhY2NlcHQgKi8KKyAgaW50CXNfbGlzdGVuLHNfZGF0YTsKKyAgaW50IAlhZGRybGVuOworICBpbnQJbGVuOworICB1bnNpZ25lZCBpbnQJcmVjZWl2ZV9jYWxsczsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworICBkb3VibGUgICBieXRlc19yZWNlaXZlZDsKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisgIGludCAgbXNnX2ZsYWdzID0gMDsKKworI2lmZGVmIERJUlRZCisgIGludCAgICptZXNzYWdlX2ludF9wdHI7CisgIGludCAgIGRpcnR5X2NvdW50OworICBpbnQgICBjbGVhbl9jb3VudDsKKyAgaW50ICAgaTsKKyNlbmRpZgorICAKKyNpZmRlZiBET19TRUxFQ1QKKyAgZmRfc2V0IHJlYWRmZHM7CisgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisjZW5kaWYgLyogRE9fU0VMRUNUICovCisKKyAgc3RydWN0CXNjdHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSpzY3RwX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QJc2N0cF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpzY3RwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0CXNjdHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSpzY3RwX3N0cmVhbV9yZXN1bHRzOworICAKKyNpZmRlZiBET19TRUxFQ1QKKyAgRkRfWkVSTygmcmVhZGZkcyk7CisgIHRpbWVvdXQudHZfc2VjID0gMTsKKyAgdGltZW91dC50dl91c2VjID0gMDsKKyNlbmRpZiAvKiBET19TRUxFQ1QgKi8KKworICBzY3RwX3N0cmVhbV9yZXF1ZXN0CT0gCisgICAgKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UJPSAKKyAgICAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNjdHBfc3RyZWFtX3Jlc3VsdHMJPSAKKyAgICAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9zY3RwX3N0cmVhbTogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQgKi8KKyAgLyogcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZiAqLworICAvKiBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZSAqLworICAvKiBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3NjdHBfc3RyZWFtOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IFNDVFBfU1RSRUFNX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3N0cmVhbTogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudCB3aXRoIHRoZSBkZXNpcmVkIG9mZnNldC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2N0cF9zdHJlYW06IHJlcXVlc3RlZCBhbGlnbm1lbnQgb2YgJWRcbiIsCisJICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogY3JlYXRlX2RhdGFfc29ja2V0IGV4cGVjdHMgdG8gZmluZCBzb21lIHRoaW5ncyBpbiB0aGUgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcywgc28gc2V0IHRoZSBnbG9iYWxzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuICovCisgIC8qIG9uY2UgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCB3ZSB3aWxsIHNldCB0aGUgcmVzcG9uc2UgdmFsdWVzICovCisgIC8qIGJhc2VkIG9uIHRoZSB1cGRhdGVkIHZhbHVlIG9mIHRob3NlIGdsb2JhbHMuIHJhaiA3Lzk0ICovCisgIGxzc19zaXplX3JlcSA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPnNlbmRfYnVmX3NpemU7CisgIGxzcl9zaXplX3JlcSA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19ub2RlbGF5ID0gc2N0cF9zdHJlYW1fcmVxdWVzdC0+bm9fZGVsYXk7CisgIGxvY19yY3Zhdm9pZCA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPnNvX3JjdmF2b2lkOworICBsb2Nfc25kYXZvaWQgPSBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKyAgbm9uX2Jsb2NrID0gc2N0cF9zdHJlYW1fcmVxdWVzdC0+bm9uX2Jsb2NraW5nOworCisgIHNldF9ob3N0bmFtZV9hbmRfcG9ydChsb2NhbF9uYW1lLAorCQkJcG9ydF9idWZmZXIsCisJCQluZl90b19hZihzY3RwX3N0cmVhbV9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQlzY3RwX3N0cmVhbV9yZXF1ZXN0LT5wb3J0KTsKKworICBsb2NhbF9yZXMgPSBjb21wbGV0ZV9hZGRyaW5mbyhsb2NhbF9uYW1lLAorCQkJCWxvY2FsX25hbWUsCisJCQkJcG9ydF9idWZmZXIsCisJCQkJbmZfdG9fYWYoc2N0cF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJCVNPQ0tfU1RSRUFNLAorCQkJCUlQUFJPVE9fU0NUUCwKKwkJCQkwKTsKKworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuIDwgMCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIHdoYXQgc29ydCBvZiBzaXplcyBkaWQgd2UgZW5kLXVwIHdpdGg/ICovCisgIGlmIChzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWNlaXZlX3NpemUgPT0gMCkgeworICAgIGlmIChsc3Jfc2l6ZSA+IDApIHsKKyAgICAgIHJlY3Zfc2l6ZSA9IGxzcl9zaXplOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlY3Zfc2l6ZSA9IDQwOTY7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHJlY3Zfc2l6ZSA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZTsKKyAgfQorICAKKyAgLyogd2Ugd2FudCB0byBzZXQtdXAgb3VyIHJlY3ZfcmluZyBpbiBhIG1hbm5lciBhbmFsYWdvdXMgdG8gd2hhdCB3ZSAqLworICAvKiBkbyBvbiB0aGUgc2VuZGluZyBzaWRlLiB0aGlzIGlzIG1vcmUgZm9yIHRoZSBzYWtlIG9mIHN5bW1ldHJ5ICovCisgIC8qIHRoYW4gZm9yIHRoZSBuZWVkcyBvZiBzYXkgY29weSBhdm9pZGFuY2UsIGJ1dCBpdCBtaWdodCBhbHNvIGJlICovCisgIC8qIG1vcmUgcmVhbGlzdGljIC0gdGhpcyB3YXkgb25lIGNvdWxkIGNvbmNlaXZhYmx5IGdvIHdpdGggYSAqLworICAvKiBkb3VibGUtYnVmZmVyaW5nIHNjaGVtZSB3aGVuIHRha2luZyB0aGUgZGF0YSBhbiBwdXR0aW5nIGl0IGludG8gKi8KKyAgLyogdGhlIGZpbGVzeXN0ZW0gb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gcmFqIDcvOTQgKi8KKworICBpZiAocmVjdl93aWR0aCA9PSAwKSB7CisgICAgcmVjdl93aWR0aCA9IChsc3Jfc2l6ZS9yZWN2X3NpemUpICsgMTsKKyAgICBpZiAocmVjdl93aWR0aCA9PSAxKSByZWN2X3dpZHRoKys7CisgIH0KKworICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgIHJlY3Zfc2l6ZSwKKwkJCQkgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkJCQkgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3N0cmVhbTogc2V0IHJlY3Zfc2l6ZSA9ICVkLCBhbGlnbiA9ICVkLCBvZmZzZXQgPSAlZC5cbiIsCisJCSAgIHJlY3Zfc2l6ZSwgc2N0cF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJCSAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBub3cgZ2V0IHRoZSBwb3J0IG51bWJlciBhc3NpZ25lZCBieSB0aGUgc3lzdGVtICAqLworICBhZGRybGVuID0gc2l6ZW9mKG15YWRkcl9pbik7CisgIGlmIChnZXRzb2NrbmFtZShzX2xpc3RlbiwgCisJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfaW4sCisJCSAgJmFkZHJsZW4pID09IC0xKXsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyID0gKGludCkgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgLTEgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IChmbG9hdCkwLjA7IAkvKiBhc3N1bWUgbm8gY3B1ICovCisgIGlmIChzY3RwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlID0gCisgICAgICBjYWxpYnJhdGVfbG9jYWxfY3B1KHNjdHBfc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICBlbHNlIHsKKyAgICBzY3RwX3N0cmVhbV9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAwOworICB9CisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplID0gbHNyX3NpemU7CisgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5ub19kZWxheSA9IGxvY19ub2RlbGF5OworICBzY3RwX3N0cmVhbV9yZXNwb25zZS0+c29fcmN2YXZvaWQgPSBsb2NfcmN2YXZvaWQ7CisgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19zbmRhdm9pZCA9IGxvY19zbmRhdm9pZDsKKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPnJlY2VpdmVfc2l6ZSA9IHJlY3Zfc2l6ZTsKKworICAvKiBOb3csIGxldCdzIHNldC11cCB0aGUgc29ja2V0IHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgKi8KKyAgaWYgKGxpc3RlbihzX2xpc3RlbiwgNSkgPT0gLTEpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgYWRkcmxlbiA9IHNpemVvZihwZWVyYWRkcik7CisgIAorICBpZiAoKHNfZGF0YSA9IGFjY2VwdChzX2xpc3RlbiwKKwkJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkciwKKwkJICAgICAgJmFkZHJsZW4pKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIC8qIExldCdzIGp1c3QgcHVudC4gVGhlIHJlbW90ZSB3aWxsIGJlIGdpdmVuIHNvbWUgaW5mb3JtYXRpb24gKi8KKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIHNjdHBfZW5hYmxlX2V2ZW50cyhzX2RhdGEsIFNDVFBfQVNTT0NfQ0hBTkdFX0VWIHwgU0NUUF9TSFVURE9XTl9FVik7CisKKyAgLyogbm93IHRoYXQgd2UgYXJlIGNvbm5lY3RlZCwgbWFyayB0aGUgc29ja2V0IGFzIG5vbi1ibG9ja2luZyAqLworICBpZiAobm9uX2Jsb2NrKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCAic2V0dGluZyBzb2NrZXQgYXMgbm9uYmxvY2tpbmdcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGlmICghc2V0X25vbmJsb2NrKHNfZGF0YSkpIHsKKwljbG9zZShzX2RhdGEpOworCWV4aXQoMSk7CisgICAgICB9CisgIH0KKworI2lmZGVmIEtMVURHRV9TT0NLRVRfT1BUSU9OUworICAvKiB0aGlzIGlzIGZvciB0aG9zZSBzeXN0ZW1zIHdoaWNoICpJTkNPUlJFQ1RMWSogZmFpbCB0byBwYXNzICovCisgIC8qIGF0dHJpYnV0ZXMgYWNyb3NzIGFuIGFjY2VwdCgpIGNhbGwuIEluY2x1ZGluZyB0aGlzIGdvZXMgYWdhaW5zdCAqLworICAvKiBteSBiZXR0ZXIganVkZ2VtZW50IDooIHJhaiAxMS85NSAqLworCisgIGtsdWRnZV9zb2NrZXRfb3B0aW9ucyhzX2RhdGEpOworCisjZW5kaWYgLyogS0xVREdFX1NPQ0tFVF9PUFRJT05TICovCisgIAorICAvKiBOb3cgaXQncyB0aW1lIHRvIHN0YXJ0IHJlY2VpdmluZyBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLiBXZSB3aWxsICovCisgIC8qIGZpcnN0IGdyYWIgdGhlIGFwcm9wcmlhdGUgY291bnRlcnMgYW5kIHRoZW4gc3RhcnQgZ3JhYmJpbmcuICovCisgIAorICBjcHVfc3RhcnQoc2N0cF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSBzZW5kZXIgZG9lcyBhIHNodXRkb3duLCB3aGljaCB3aWxsICovCisgIC8qIHJldHVybiBhIGxlbmd0aCBvZiB6ZXJvICAgKi8KKyAgCisjaWZkZWYgRElSVFkKKyAgICAvKiB3ZSB3YW50IHRvIGRpcnR5IHNvbWUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVnZXJzIGluIHRoZSBidWZmZXIgKi8KKyAgICAvKiB3ZSBhcmUgYWJvdXQgdG8gcmVjdi4gd2UgbWF5IGFsc28gd2FudCB0byBicmluZyBzb21lIG51bWJlciBvZiAqLworICAgIC8qIHRoZW0gY2xlYW5seSBpbnRvIHRoZSBjYWNoZS4gVGhlIGNsZWFuIG9uZXMgd2lsbCBmb2xsb3cgYW55IGRpcnR5ICovCisgICAgLyogb25lcyBpbnRvIHRoZSBjYWNoZS4gKi8KKworICBkaXJ0eV9jb3VudCA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPmRpcnR5X2NvdW50OworICBjbGVhbl9jb3VudCA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPmNsZWFuX2NvdW50OworICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopcmVjdl9yaW5nLT5idWZmZXJfcHRyOworICBmb3IgKGkgPSAwOyBpIDwgZGlydHlfY291bnQ7IGkrKykgeworICAgICptZXNzYWdlX2ludF9wdHIgPSByYW5kKCk7CisgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IGNsZWFuX2NvdW50OyBpKyspIHsKKyAgICBkaXJ0eV9jb3VudCA9ICptZXNzYWdlX2ludF9wdHI7CisgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworCisgIGJ5dGVzX3JlY2VpdmVkID0gMDsKKyAgcmVjZWl2ZV9jYWxscyAgPSAwOworICAKKyAgd2hpbGUgKChsZW4gPSBzY3RwX3JlY3Ztc2coc19kYXRhLAorCQkJICAgIHJlY3ZfcmluZy0+YnVmZmVyX3B0ciwgcmVjdl9zaXplLAorCQkJICAgIE5VTEwsIDAsIE5VTEwsICZtc2dfZmxhZ3MpKSAhPSAwKSB7CisgICAgaWYgKGxlbiA9PSBTT0NLRVRfRVJST1IpIHsKKwlpZiAobm9uX2Jsb2NrICYmIGVycm5vID09IEVBR0FJTikgeworCSAgIGlmIChkZWJ1Zyl7CisJICAgICBmcHJpbnRmKHdoZXJlLAorCQkgICAgInJlY3Zfc2N0cF9zdHJlYW06IHNjdHBfcmVjdm1zZyB0aW1lZCBvdXQsIHRyeWluZyBhZ2FpblxuIik7CisJICAgICBmZmx1c2god2hlcmUpOworCSAgIH0KKwkgICBTZXRfZXJybm8oMCk7CisJICAgY29udGludWU7CisJfQorCWlmIChkZWJ1ZykgeworCSAgICBmcHJpbnRmKHdoZXJlLAorCQkgICAgInJlY3Zfc2N0cF9zdHJlYW06IHNjdHBfcmVjdm1zZyBlcnJvciAlZCwgZXhpdGluZyIsCisJCSAgICBlcnJubyk7CisJICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAgIH0KKwluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworCXNlbmRfcmVzcG9uc2UoKTsKKwljbG9zZShzX2RhdGEpOworCWV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKG1zZ19mbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkgbXNnX2ZsYWdzID0gMDsKKwkgaWYgKGRlYnVnKSB7CisJICAgZnByaW50Zih3aGVyZSwKKwkJICAgICJyZWN2X3NjdHBfc3RyZWFtOiBHb3Qgbm90aWZpY2F0aW9uLi4uIHByb2Nlc3NpbmdcbiIpOworCSAgICAgZmZsdXNoKHdoZXJlKTsKKwl9CisJaWYgKHNjdHBfcHJvY2Vzc19ldmVudChzX2RhdGEsIHJlY3ZfcmluZy0+YnVmZmVyX3B0cikgPT0gU0NUUF9DTE9TRSkKKwkgICAgYnJlYWs7CS8qIGJyZWFrIG91dCBvZiB0aGUgcmVjdm1zZyBsb29wICovCisKKwljb250aW51ZTsKKyAgICB9CisKKyAgICBieXRlc19yZWNlaXZlZCArPSBsZW47CisgICAgcmVjZWl2ZV9jYWxscysrOworCisgICAgLyogbW9yZSB0byB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIHJlY3ZfcmluZyAqLworICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworI2lmZGVmIFBBVVNFCisgICAgc2xlZXAoMSk7CisjZW5kaWYgLyogUEFVU0UgKi8KKworI2lmZGVmIERJUlRZCisgICAgbWVzc2FnZV9pbnRfcHRyID0gKGludCAqKShyZWN2X3JpbmctPmJ1ZmZlcl9wdHIpOworICAgIGZvciAoaSA9IDA7IGkgPCBkaXJ0eV9jb3VudDsgaSsrKSB7CisgICAgICAqbWVzc2FnZV9pbnRfcHRyID0gcmFuZCgpOworICAgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBjbGVhbl9jb3VudDsgaSsrKSB7CisgICAgICBkaXJ0eV9jb3VudCA9ICptZXNzYWdlX2ludF9wdHI7CisgICAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgICB9CisjZW5kaWYgLyogRElSVFkgKi8KKworI2lmZGVmIERPX1NFTEVDVAorCUZEX1NFVChzX2RhdGEsJnJlYWRmZHMpOworCXNlbGVjdChzX2RhdGErMSwmcmVhZGZkcyxOVUxMLE5VTEwsJnRpbWVvdXQpOworI2VuZGlmIC8qIERPX1NFTEVDVCAqLworCisgIH0KKyAgCisgIC8qIHBlcmZvcm0gYSBzaHV0ZG93biB0byBzaWduYWwgdGhlIHNlbmRlciB0aGF0ICovCisgIC8qIHdlIGhhdmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhIHNlbnQuIHJhaiA0LzkzICovCisKKyAgaWYgKGNsb3NlKHNfZGF0YSkgPT0gLTEpIHsKKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgCisgIGNwdV9zdG9wKHNjdHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1LCZlbGFwc2VkX3RpbWUpOworICAKKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3NjdHBfc3RyZWFtOiBnb3QgJWcgYnl0ZXNcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zY3RwX3N0cmVhbTogZ290ICVkIHJlY3ZzXG4iLAorCSAgICByZWNlaXZlX2NhbGxzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzY3RwX3N0cmVhbV9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZAk9IGh0b25kKGJ5dGVzX3JlY2VpdmVkKTsKKyAgc2N0cF9zdHJlYW1fcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICBzY3RwX3N0cmVhbV9yZXN1bHRzLT5yZWN2X2NhbGxzCT0gcmVjZWl2ZV9jYWxsczsKKyAgCisgIGlmIChzY3RwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHNjdHBfc3RyZWFtX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbCgwLjApOworICB9OworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2N0cF9zdHJlYW06IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICIgICAgICAgICAgICAgICAgIGJ5dGVzX3JlY2VpdmVkICVnIHJlY2VpdmVfY2FsbHMgJWRcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkLAorCSAgICByZWNlaXZlX2NhbGxzKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiICAgICAgICAgICAgICAgICBsZW4gJWRcbiIsCisJICAgIGxlbik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2N0cF9zdHJlYW1fcmVzdWx0cy0+Y3B1X21ldGhvZCA9IGNwdV9tZXRob2Q7CisgIHNjdHBfc3RyZWFtX3Jlc3VsdHMtPm51bV9jcHVzICAgPSBsaWJfbnVtX2xvY19jcHVzOworICBzZW5kX3Jlc3BvbnNlKCk7CisKKyAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldHMgKi8KKyAgY2xvc2Uoc19saXN0ZW4pOworCit9CisMCisKKy8qIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBTQ1RQIHVuaWRpcmVjdGlvbmFsIGRhdGEgdHJhbnNmZXIgdGVzdCAqLworLyogKGEuay5hLiBzdHJlYW0pIGZvciB0aGUgc29ja2V0cyBpbnRlcmZhY2UuIEl0IHJlY2VpdmVzIGl0cyAqLworLyogcGFyYW1ldGVycyB2aWEgZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIHRoZSBzaGVsbCBhbmQgd3JpdGVzIGl0cyAqLworLyogb3V0cHV0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCisKKwordm9pZCAKK3NlbmRfc2N0cF9zdHJlYW1fMXRvTWFueShyZW1vdGVfaG9zdCkKK2NoYXIJcmVtb3RlX2hvc3RbXTsKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIFxuXAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgJXMvc2VjICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZlxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzEgPQorICAgICIlNmQgJTZkICU2ZCAgICAlLTYuMmYgICAlNy4yZiAgIFxuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXphdGlvbiAgICAgICBTZXJ2aWNlIERlbWFuZFxuXAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgU2VuZCAgICAgUmVjdiAgICAgU2VuZCAgICBSZWN2XG5cCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICBsb2NhbCAgICByZW1vdGUgICBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgJS04LjhzL3MgICUlICVjICAgICAgJSUgJWMgICAgICB1cy9LQiAgIHVzL0tCXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZiAlY1xuIjsKKworICBjaGFyICpjcHVfZm10XzEgPQorICAgICIlNmQgJTZkICU2ZCAgICAlLTYuMmYgICAgICU3LjJmICAgJS02LjJmICAgJS02LjJmICAgJS02LjNmICAlLTYuM2ZcbiI7CisgIAorICBjaGFyICprc2lua19mbXQgPSAiXG5cCitBbGlnbm1lbnQgICAgICBPZmZzZXQgICAgICAgICAlLTguOHMgJS04LjhzICAgIFNlbmRzICAgJS04LjhzIFJlY3ZzXG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlICBYZmVyZWQgICBQZXIgICAgICAgICAgICAgICAgIFBlclxuXAorU2VuZCAgIFJlY3YgICAgU2VuZCAgIFJlY3YgICAgICAgICAgICAgU2VuZCAoYXZnKSAgICAgICAgICBSZWN2IChhdmcpXG5cCislNWQgICAlNWQgICU1ZCAgICU1ZCAlNi40ZyAgJTYuMmYgICAgJTZkICAgJTYuMmYgJTZkXG4iOworCisgIGNoYXIgKmtzaW5rX2ZtdDIgPSAiXG5cCitNYXhpbXVtXG5cCitTZWdtZW50XG5cCitTaXplIChieXRlcylcblwKKyU2ZFxuIjsKKyAgCisgIAorICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgaW50IGludGVydmFsX2NvdW50OworICBzaWdzZXRfdCBzaWduYWxfc2V0OworI2VuZGlmCisgIAorICAvKiB3aGF0IHdlIHdhbnQgaXMgdG8gaGF2ZSBhIGJ1ZmZlciBzcGFjZSB0aGF0IGlzIGF0IGxlYXN0IG9uZSAqLworICAvKiBzZW5kLXNpemUgZ3JlYXRlciB0aGFuIG91ciBzZW5kIHdpbmRvdy4gdGhpcyB3aWxsIGluc3VyZSB0aGF0IHdlICovCisgIC8qIGFyZSBuZXZlciB0cnlpbmcgdG8gcmUtdXNlIGEgYnVmZmVyIHRoYXQgbWF5IHN0aWxsIGJlIGluIHRoZSBoYW5kcyAqLworICAvKiBvZiB0aGUgdHJhbnNwb3J0LiBUaGlzIGJ1ZmZlciB3aWxsIGJlIG1hbGxvYydkIGFmdGVyIHdlIGhhdmUgZm91bmQgKi8KKyAgLyogdGhlIHNpemUgb2YgdGhlIGxvY2FsIHNlbmMgc29ja2V0IGJ1ZmZlci4gV2Ugd2lsbCB3YW50IHRvIGRlYWwgKi8KKyAgLyogd2l0aCBhbGlnbm1lbnQgYW5kIG9mZnNldCBjb25jZXJucyBhcyB3ZWxsLiAqLworICAKKyNpZmRlZiBESVJUWQorICBpbnQJKm1lc3NhZ2VfaW50X3B0cjsKKyNlbmRpZgorCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICAKKyAgaW50IGxlbjsKKyAgdW5zaWduZWQgaW50IG51bW1lc3NhZ2VzID0gMDsKKyAgaW50ICpzZW5kX3NvY2tldDsKKyAgaW50IGJ5dGVzX3JlbWFpbmluZzsKKyAgaW50IHNjdHBfbXNzOworCisgIC8qIHdpdGggbGlua3MgbGlrZSBmZGRpLCBvbmUgY2FuIHNlbmQgPiAzMiBiaXRzIHdvcnRoIG9mIGJ5dGVzICovCisgIC8qIGR1cmluZyBhIHRlc3QuLi4gOy0pIGF0IHNvbWUgcG9pbnQsIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlY29tZSBhICovCisgIC8qIDY0Yml0IGludGVncmFsIHR5cGUsIGJ1dCB0aG9zZSBhcmUgbm90IGVudGlyZWx5IGNvbW1vbiB5ZXQgKi8KKyAgZG91YmxlCWJ5dGVzX3NlbnQgPSAwLjA7CisgIAorI2lmZGVmIERJUlRZCisgIGludAlpOworI2VuZGlmIC8qIERJUlRZICovCisgIGludCBqOworCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKworICBkb3VibGUJdGhydXB1dDsKKyAgCisgIHN0cnVjdCBhZGRyaW5mbyAqcmVtb3RlX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICpsb2NhbF9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAqbGFzdF9yZW1vdGVfcmVzOworICBzdHJ1Y3QgYWRkcmluZm8gKmxhc3RfbG9jYWxfcmVzOworCisgIHN0cnVjdAlzY3RwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdAkqc2N0cF9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXNjdHBfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdAkqc2N0cF9zdHJlYW1fcmVzcG9uc2U7CisgIHN0cnVjdAlzY3RwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqc2N0cF9zdHJlYW1fcmVzdWx0OworICAKKyAgc2N0cF9zdHJlYW1fcmVxdWVzdCAgPSAKKyAgICAoc3RydWN0IHNjdHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzY3RwX3N0cmVhbV9yZXNwb25zZSA9CisgICAgKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzY3RwX3N0cmVhbV9yZXN1bHQgICA9IAorICAgIChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAKKyAgY29tcGxldGVfYWRkcmluZm9zKCZyZW1vdGVfcmVzLAorCQkgICAgICZsb2NhbF9yZXMsCisJCSAgICAgcmVtb3RlX2hvc3QsCisJCSAgICAgU09DS19TRVFQQUNLRVQsCisJCSAgICAgSVBQUk9UT19TQ1RQLAorCQkgICAgIDApOworICAKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIHByaW50X3RvcF90ZXN0X2hlYWRlcigiU0NUUCAxLVRPLU1BTlkgU1RSRUFNIFRFU1QiLGxvY2FsX3JlcyxyZW1vdGVfcmVzKTsKKyAgfQorCisgIHNlbmRfcmluZyA9IE5VTEw7CisgIGNvbmZpZGVuY2VfaXRlcmF0aW9uID0gMTsKKyAgaW5pdF9zdGF0KCk7CisKKyAgc2VuZF9zb2NrZXQgPSBtYWxsb2Moc2l6ZW9mIChpbnQpICogbnVtX2Fzc29jaWF0aW9ucyk7CisgIGlmIChzZW5kX3NvY2tldCA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCAic2VuZF9zY3RwX3N0cmVhbV8xdG9NYW55OiBmYWlsZWQgdG8gYWxsb2NhdGlvbiBzb2NrZXRzIVxuIik7CisgICAgICBleGl0KDEpOworICB9CisKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisKKyAgICBpbnQJCWo9MDsKKyAgICBpbnQJCXRpbWVkX291dCA9IDA7CisgICAgCisKKyAgICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzLiB3ZSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgd2UgbWlnaHQgYmUgKi8KKyAgICAvKiBnb2luZyB0aHJvdWdoIHRoZSBsb29wIG1vcmUgdGhhbiBvbmNlLiAqLworICAgIAorICAgIG51bW1lc3NhZ2VzICAgID0JMDsKKyAgICBieXRlc19zZW50ICAgICA9CTAuMDsKKyAgICB0aW1lc191cCAgICAgICA9IAkwOworICAgIAorICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZWl0aGVyIHJldHJpZXZlZCB0aGUgc29ja2V0IGJ1ZmZlciBzaXplcywgKi8KKyAgICAvKiBvciBoYXZlIHRyaWVkIHRvIHNldCB0aGVtLCBzbyBub3csIHdlIG1heSB3YW50IHRvIHNldCB0aGUgc2VuZCAqLworICAgIC8qIHNpemUgYmFzZWQgb24gdGhhdCAoYmVjYXVzZSB0aGUgdXNlciBlaXRoZXIgZGlkIG5vdCB1c2UgYSAtbSAqLworICAgIC8qIG9wdGlvbiwgb3IgdXNlZCBvbmUgd2l0aCBhbiBhcmd1bWVudCBvZiAwKS4gSWYgdGhlIHNvY2tldCBidWZmZXIgKi8KKyAgICAvKiBzaXplIGlzIG5vdCBhdmFpbGFibGUsIHdlIHdpbGwgc2V0IHRoZSBzZW5kIHNpemUgdG8gNEtCIC0gbm8gKi8KKyAgICAvKiBwYXJ0aWN1bGFyIHJlYXNvbiwganVzdCBhcmJpdHJhcnkuLi4gKi8KKyAgICBpZiAoc2VuZF9zaXplID09IDApIHsKKyAgICAgIGlmIChsc3Nfc2l6ZSA+IDApIHsKKwlzZW5kX3NpemUgPSBsc3Nfc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXNlbmRfc2l6ZSA9IDQwOTY7CisgICAgICB9CisgICAgfQorICAgIAorICAgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgcmluZyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQuICovCisgICAgLyogbm90ZSBhbHNvIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgYSBxdWFudGl0eSAqLworICAgIC8qIG9mIG1lbW9yeSB0aGF0IGlzIGF0IGxlYXN0IG9uZSBzZW5kLXNpemUgZ3JlYXRlciB0aGFuIG91ciBzb2NrZXQgKi8KKyAgICAvKiBidWZmZXIgc2l6ZS4gV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAqLworICAgIC8qIGJ1ZmZlcnMgYWxsb2NhdGVkIC0gdGhpcyBjYW4gYmUgYSBiaXQgb2YgYSBwcm9ibGVtIHdoZW4gdGhlICovCisgICAgLyogc2VuZF9zaXplIGlzIGJpZ2dlciB0aGFuIHRoZSBzb2NrZXQgc2l6ZSwgc28gd2UgbXVzdCBjaGVjay4uLiB0aGUgKi8KKyAgICAvKiB1c2VyIG1heSBoYXZlIHdhbnRlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgIndpZHRoIiBvZiBvdXIgc2VuZCAqLworICAgIC8qIGJ1ZmZlcnMsIHdlIHNob3VsZCByZXNwZWN0IHRoYXQgd2lzaC4uLiAqLworICAgIGlmIChzZW5kX3dpZHRoID09IDApIHsKKyAgICAgIHNlbmRfd2lkdGggPSAobHNzX3NpemUvc2VuZF9zaXplKSArIDE7CisgICAgICBpZiAoc2VuZF93aWR0aCA9PSAxKSBzZW5kX3dpZHRoKys7CisgICAgfQorICAgIAorICAgIGlmIChzZW5kX3JpbmcgPT0gTlVMTCkgeworICAgICAgLyogb25seSBhbGxvY2F0ZSB0aGUgc2VuZCByaW5nIG9uY2UuIHRoaXMgaXMgYSBuZXR3b3JraW5nIHRlc3QsICovCisgICAgICAvKiBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbiB0ZXN0LiB0aGlzIHdheSwgd2UgZG8gbm90IG5lZWQgYSAqLworICAgICAgLyogZGVhbGxvY2F0ZV9idWZmZXJfcmluZygpIHJvdXRpbmUsIGFuZCBJIGRvbid0IGZlZWwgbGlrZSAqLworICAgICAgLyogd3JpdGluZyBvbmUgYW55d2F5IDopIHJhaiAxMS85NCAqLworICAgICAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICAgICAgc2VuZF9zaXplLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgfQorCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiAqLworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgICAgfQorICAgIAorICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgKi8KKyAgICAvKiBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgKi8KKyAgICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAgIC8qIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCAqLworICAgIC8qIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZSB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyAqLworICAgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgICAgLyogZGVmYXVsdCB0byAxLCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJPQlET19TQ1RQX1NUUkVBTV9NQU5ZOworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZV9yZXE7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9idWZfc2l6ZQk9CXJzcl9zaXplX3JlcTsKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWNlaXZlX3NpemUJPQlyZWN2X3NpemU7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+bm9fZGVsYXkJPQlyZW1fbm9kZWxheTsKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudAk9CXJlbW90ZV9yZWN2X2FsaWduOworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5jcHVfcmF0ZQk9CXJlbW90ZV9jcHVfcmF0ZTsKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAobXNnX2NvdW50KQorCSAgdGVzdF9ieXRlcyA9IHNlbmRfc2l6ZSAqIG1zZ19jb3VudDsKKworICAgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X2J5dGVzKm51bV9hc3NvY2lhdGlvbnM7CisgICAgfQorICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnNvX3JjdmF2b2lkCT0JcmVtX3JjdmF2b2lkOworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPnNvX3NuZGF2b2lkCT0JcmVtX3NuZGF2b2lkOworI2lmZGVmIERJUlRZCisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+ZGlydHlfY291bnQgICAgPSAgICAgICByZW1fZGlydHlfY291bnQ7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+Y2xlYW5fY291bnQgICAgPSAgICAgICByZW1fY2xlYW5fY291bnQ7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5wb3J0CQk9IAkoYXRvaShyZW1vdGVfZGF0YV9wb3J0KSk7CisgICAgc2N0cF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkJPQlhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworICAgIHNjdHBfc3RyZWFtX3JlcXVlc3QtPm5vbl9ibG9ja2luZyAgID0Jbm9uX2Jsb2NrOworICAgIAorICAgIAorICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIm5ldHBlcmY6IHNlbmRfc2N0cF9zdHJlYW1fMXRvTWFueTogcmVxdWVzdGluZyBzY3RwIHN0cmVhbSB0ZXN0XG4iKTsKKyAgICB9CisgICAgCisgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgCisgICAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgICAvKiBzb2NrZXQgcGFyYW1ldGVycyBmb3IgdGhpcyB0ZXN0IHR5cGUuIFdlIHdpbGwgcHV0IHRoZW0gYmFjayBpbnRvICovCisgICAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgICAgLyogcmVtb3RlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIENQVSBpZiBuZWNlc3NhcnksIGFuZCB3aWxsIGhhdmUgZG9uZQkqLworICAgIC8qIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUgY3B1IGxvY2FsbHkJKi8KKyAgICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodCovCisgICAgLyogYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZSB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQqLworICAgIC8qIGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcyB0aGUgaGFzc2xlIG9mIGV4dHJhIG1lc3NhZ2VzCSovCisgICAgLyogYmVpbmcgc2VudCBmb3IgdGhlIHNjdHAgdGVzdHMuCQkJCQkqLworICAgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICBpZiAoZGVidWcpCisJZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisgICAgICByc3Jfc2l6ZQkgICAgICA9CXNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICAgICAgcnNzX3NpemUJICAgICAgPQlzY3RwX3N0cmVhbV9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICAgIHJlbV9ub2RlbGF5ICAgICA9CXNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5ub19kZWxheTsKKyAgICAgIHJlbW90ZV9jcHVfdXNhZ2U9CXNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKyAgICAgIHJlbW90ZV9jcHVfcmF0ZSA9IHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKworICAgICAgLyogd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc2VydmVyIHBvcnQgbnVtYmVyIGlzIGluICovCisgICAgICAvKiBuZXR3b3JrIG9yZGVyICovCisgICAgICBzZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcywgKHVuc2lnbmVkIHNob3J0KXNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyKTsKKyAgICAgIHJlbV9yY3Zhdm9pZAk9IHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZDsKKyAgICAgIHJlbV9zbmRhdm9pZAk9IHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19zbmRhdm9pZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLypzZXQgdXAgdGhlIHRoZSBhcnJheSBvZiBkYXRhIHNvY2tldHMgIGFuZCBjb25uZWN0IHRoZW0gdG8gdGhlIHNlcnZlciAqLworCisgICAgZm9yIChqID0gMDsgaiA8IG51bV9hc3NvY2lhdGlvbnM7IGorKykgeworCXNlbmRfc29ja2V0W2pdID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgICAgCisJaWYgKHNlbmRfc29ja2V0W2pdIDwgMCl7CisJICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfc2N0cF9zdHJlYW1fMXRvTWFueTogc2N0cCBzdHJlYW0gZGF0YSBzb2NrZXQiKTsKKwkgIGV4aXQoMSk7CisJfQorCQorCWlmIChkZWJ1ZykgeworCSAgZnByaW50Zih3aGVyZSwic2VuZF9zY3RwX3N0cmVhbV8xdG9NYW55OiBzZW5kX3NvY2tldCBvYnRhaW5lZC4uLlxuIik7CisJfQorCisJLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisJaWYgKGNvbm5lY3Qoc2VuZF9zb2NrZXRbal0sIAorCQkgICAgcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJICAgIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4pID09IElOVkFMSURfU09DS0VUKXsKKwkgIHBlcnJvcigibmV0cGVyZjogc2VuZF9zY3RwX3N0cmVhbV8xdG9NYW55OiBkYXRhIHNvY2tldCBjb25uZWN0IGZhaWxlZCIpOworCSAgZXhpdCgxKTsKKwl9CisKKwkvKiBEbyBpdCBhZnRlciBjb25uZWN0IGlzIHN1Y2Nlc3NmdWxsLCBzbyB0aGF0IHdlIGRvbid0IHNlZSBDT01NX1VQICovCisJc2N0cF9lbmFibGVfZXZlbnRzKHNlbmRfc29ja2V0W2pdLCBTQ1RQX0FTU09DX0NIQU5HRV9FVik7CisKKwlpZiAobm9uX2Jsb2NrKSB7CisJICAgIC8qIG5vdyB0aGF0IHdlIGFyZSBjb25uZWN0ZWQsIG1hcmsgdGhlIHNvY2tldCBhcyBub24tYmxvY2tpbmcgKi8KKwkgICAgaWYgKCFzZXRfbm9uYmxvY2soc2VuZF9zb2NrZXRbal0pKSB7CisJICAgICAgcGVycm9yKCJuZXRwZXJmOiBmY250bCIpOworCSAgICAgIGV4aXQoMSk7CisJICAgIH0KKwl9CisgICAgfQorCisgICAgLyogRGF0YSBTb2NrZXQgc2V0LXVwIGlzIGZpbmlzaGVkLiBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zLCBlaXRoZXIgKi8KKyAgICAvKiB0aGUgY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkICovCisgICAgLyogaGF2ZSBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSAqLworICAgIC8qIGV4dHJhICBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCAqLworICAgIC8qIHdlJ2xsIHNlZSBpdCBoZXJlLiBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGFzIHdlbGwgc3RhcnQgcHVtcGluZyAqLworICAgIC8qIGRhdGEuICovIAorICAgIAorICAgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgc3RyZWFtIHRlc3QsIHRoZXkgY2FuIGJlICovCisgICAgLyogZWl0aGVyIHRpbWUgb3IgYnl0ZS1jb3VudCBiYXNlZC4gKi8KKyAgICAKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgICB0aW1lc191cCA9IDA7CisgICAgICBieXRlc19yZW1haW5pbmcgPSAwOworICAgICAgLyogaW4gcHJldmlvdXMgcmV2aXNpb25zLCB3ZSBoYWQgdGhlIHNhbWUgY29kZSByZXBlYXRlZCB0aHJvdWdodCAqLworICAgICAgLyogYWxsIHRoZSB0ZXN0IHN1aXRlcy4gdGhpcyB3YXMgdW5uZWNlc3NhcnksIGFuZCBtZWFudCBtb3JlICovCisgICAgICAvKiB3b3JrIGZvciBtZSB3aGVuIEkgd2FudGVkIHRvIHN3aXRjaCB0byBQT1NJWCBzaWduYWxzLCBzbyBJICovCisgICAgICAvKiBoYXZlIGFic3RyYWN0ZWQgdGhpcyBvdXQgaW50byBhIHJvdXRpbmUgaW4gbmV0bGliLmMuIGlmIHlvdSAqLworICAgICAgLyogYXJlIGV4cGVyaWVuY2luZyBzaWduYWwgcHJvYmxlbXMsIHlvdSBtaWdodCB3YW50IHRvIGxvb2sgKi8KKyAgICAgIC8qIHRoZXJlLiByYWogMTEvOTQgKi8KKyAgICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXMgKiBudW1fYXNzb2NpYXRpb25zOworICAgICAgdGltZXNfdXAgPSAxOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgICAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgICAgCisgICAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisgICAgCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBpZiAoKGludGVydmFsX2J1cnN0KSB8fCAoZGVtb19tb2RlKSkgeworICAgICAgLyogemVybyBtZWFucyB0aGF0IHdlIG5ldmVyIHBhdXNlLCBzbyB3ZSBuZXZlciBzaG91bGQgbmVlZCB0aGUgKi8KKyAgICAgIC8qIGludGVydmFsIHRpbWVyLCB1bmxlc3Mgd2UgYXJlIGluIGRlbW9fbW9kZSAqLworICAgICAgc3RhcnRfaXRpbWVyKGludGVydmFsX3dhdGUpOworICAgIH0KKyAgICBpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OworICAgIC8qIGdldCB0aGUgc2lnbmFsIHNldCBmb3IgdGhlIGNhbGwgdG8gc2lnc3VzcGVuZCAqLworICAgIGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIChzaWdzZXRfdCAqKU5VTEwsICZzaWduYWxfc2V0KSAhPSAwKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJzZW5kX3NjdHBfc3RyZWFtXzF0b01hbnk6IHVuYWJsZSB0byBnZXQgc2lnbWFzayBlcnJubyAlZFxuIiwKKwkgICAgICBlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKworI2lmZGVmIERJUlRZCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIHB1dHRpbmcgZGlydHkgc3R1ZmYgKi8KKyAgICAvKiBpbnRvIHRoZSBzZW5kIGJ1ZmZlci4gcmFqICovCisgICAgc3JhbmQoKGludCkgZ2V0cGlkKCkpOworI2VuZGlmCisgICAgCisgICAgLyogYmVmb3JlIHdlIHN0YXJ0LCBpbml0aWFsaXplIGEgZmV3IHZhcmlhYmxlcyAqLworCisgICAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuICovCisgICAgCisgICAgd2hpbGUgKCghdGltZXNfdXApIHx8IChieXRlc19yZW1haW5pbmcgPiAwKSkgeworICAgICAgCisjaWZkZWYgRElSVFkKKyAgICAgIC8qIHdlIHdhbnQgdG8gZGlydHkgc29tZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZWdlcnMgaW4gdGhlIGJ1ZmZlciAqLworICAgICAgLyogd2UgYXJlIGFib3V0IHRvIHNlbmQuIHdlIG1heSBhbHNvIHdhbnQgdG8gYnJpbmcgc29tZSBudW1iZXIgb2YgKi8KKyAgICAgIC8qIHRoZW0gY2xlYW5seSBpbnRvIHRoZSBjYWNoZS4gVGhlIGNsZWFuIG9uZXMgd2lsbCBmb2xsb3cgYW55IGRpcnR5ICovCisgICAgICAvKiBvbmVzIGludG8gdGhlIGNhY2hlLiBhdCBzb21lIHBvaW50LCB3ZSBtaWdodCB3YW50IHRvIHJlcGxhY2UgKi8KKyAgICAgIC8qIHRoZSByYW5kKCkgY2FsbCB3aXRoIHNvbWV0aGluZyBmcm9tIGEgdGFibGUgdG8gcmVkdWNlIG91ciBjYWxsICovCisgICAgICAvKiBvdmVyaGVhZCBkdXJpbmcgdGhlIHRlc3QsIGJ1dCBpdCBpcyBub3QgYSBoaWdoIHByaW9yaXR5IGl0ZW0uICovCisgICAgICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopKHNlbmRfcmluZy0+YnVmZmVyX3B0cik7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbG9jX2RpcnR5X2NvdW50OyBpKyspIHsKKwkqbWVzc2FnZV9pbnRfcHRyID0gcmFuZCgpOworCW1lc3NhZ2VfaW50X3B0cisrOworICAgICAgfQorICAgICAgZm9yIChpID0gMDsgaSA8IGxvY19jbGVhbl9jb3VudDsgaSsrKSB7CisJbG9jX2RpcnR5X2NvdW50ID0gKm1lc3NhZ2VfaW50X3B0cjsKKwltZXNzYWdlX2ludF9wdHIrKzsKKyAgICAgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIC8qIHRpbWVzdGFtcCBqdXN0IGJlZm9yZSB3ZSBnbyBpbnRvIHNlbmQgYW5kIHRoZW4gYWdhaW4ganVzdCBhZnRlciAqLworICAgICAgLyogd2UgY29tZSBvdXQgcmFqIDgvOTQgKi8KKyAgICAgIGdldHRpbWVvZmRheSgmdGltZV9vbmUsTlVMTCk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgICAgIAorICAgICAgZm9yIChqID0gMDsgaiA8IG51bV9hc3NvY2lhdGlvbnM7IGorKykgeworCisJICBpZigobGVuPXNjdHBfc2VuZG1zZyhzZW5kX3NvY2tldFtqXSwKKwkJCSAgICAgICBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCQkgICAgICAgc2VuZF9zaXplLAorCQkJICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilyZW1vdGVfcmVzLT5haV9hZGRyLAorCQkJICAgICAgIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4sCisJCQkgICAgICAgMCwgMCwgMCwgMCwgMCkpICE9IHNlbmRfc2l6ZSkgeworCSAgICBpZiAoKGxlbiA+PTApIHx8IFNPQ0tFVF9FSU5UUihsZW4pKSB7CisJICAgICAgLyogdGhlIHRlc3Qgd2FzIGludGVycnVwdGVkLCBtdXN0IGJlIHRoZSBlbmQgb2YgdGVzdCAqLworCSAgICAgIHRpbWVkX291dCA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0gZWxzZSBpZiAobm9uX2Jsb2NrICYmIGVycm5vID09IEVBR0FJTikgeworCQlqLS07CSAvKiBzZW5kIGFnYWluIG9uIHRoZSBzYW1lIHNvY2tldCAqLworCQlTZXRfZXJybm8oMCk7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIHBlcnJvcigibmV0cGVyZjogZGF0YSBzZW5kIGVycm9yIik7CisJICAgIHByaW50ZigibGVuIHdhcyAlZFxuIixsZW4pOworCSAgICBleGl0KDEpOworCSAgfQorICAgICAgfQorCisgICAgICBpZiAodGltZWRfb3V0KQorCSAgYnJlYWs7CS8qIHRlc3QgaXMgb3ZlciwgdHJ5IG5leHQgaXRlcmF0aW9uICovCisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgLyogdGltZXN0YW1wIHRoZSBleGl0IGZyb20gdGhlIHNlbmQgY2FsbCBhbmQgdXBkYXRlIHRoZSBoaXN0b2dyYW0gKi8KKyAgICAgIGdldHRpbWVvZmRheSgmdGltZV90d28sTlVMTCk7CisgICAgICBISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovICAgICAgCisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUyAgICAgIAorICAgICAgaWYgKGRlbW9fbW9kZSkgeworCXVuaXRzX3RoaXNfdGljayArPSBzZW5kX3NpemU7CisgICAgICB9CisgICAgICAvKiBpbiB0aGlzIGNhc2UsIHRoZSBpbnRlcnZhbCBjb3VudCBpcyB0aGUgY291bnQtZG93biBjb3V0ZXIgKi8KKyAgICAgIC8qIHRvIGRlY2lkZSB0byBzbGVlcCBmb3IgYSBsaXR0bGUgYml0ICovCisgICAgICBpZiAoKGludGVydmFsX2J1cnN0KSAmJiAoLS1pbnRlcnZhbF9jb3VudCA9PSAwKSkgeworCS8qIGNhbGwgc2lnc3VzcGVuZCBhbmQgd2FpdCBmb3IgdGhlIGludGVydmFsIHRpbWVyIHRvIGdldCB1cyAqLworCS8qIG91dCAqLworCWlmIChkZWJ1ZyA+IDEpIHsKKwkgIGZwcmludGYod2hlcmUsImFib3V0IHRvIHN1c3BlbmRcbiIpOworCSAgZmZsdXNoKHdoZXJlKTsKKwl9CisJaWYgKHNpZ3N1c3BlbmQoJnNpZ25hbF9zZXQpID09IEVGQVVMVCkgeworCSAgZnByaW50Zih3aGVyZSwKKwkJICAic2VuZF9zY3RwX3N0cmVhbV8xdG9NYW55OiBmYXVsdCB3aXRoIHNpZ3N1c3BlbmQuXG4iKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisJICBleGl0KDEpOworCX0KKwlpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgICAKKyAgICAgIC8qIG5vdyB3ZSB3YW50IHRvIG1vdmUgb3VyIHBvaW50ZXIgdG8gdGhlIG5leHQgcG9zaXRpb24gaW4gdGhlICovCisgICAgICAvKiBkYXRhIGJ1ZmZlci4uLndlIG1heSBhbHNvIHdhbnQgdG8gd3JhcCBiYWNrIHRvIHRoZSAiYmVnaW5uaW5nIiAqLworICAgICAgLyogb2YgdGhlIGJ1ZmZlcnNwYWNlLCBzbyB3ZSB3aWxsIG1vZCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgKi8KKyAgICAgIC8qIGJ5IHRoZSBzZW5kIHdpZHRoLCBhbmQgdXNlIHRoYXQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgdG8gYWRkICovCisgICAgICAvKiB0byB0aGUgYmFzZSBwb2ludGVyLiAqLworICAgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisgICAgICBpZiAoYnl0ZXNfcmVtYWluaW5nKSB7CisJYnl0ZXNfcmVtYWluaW5nIC09IHNlbmRfc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUaGUgdGVzdCBpcyBvdmVyLiBGbHVzaCB0aGUgYnVmZmVycyB0byB0aGUgcmVtb3RlIGVuZC4gV2UgZG8gYSAqLworICAgIC8qIGdyYWNlZnVsIHJlbGVhc2UgdG8gaW5zdXJlIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4gdGFrZW4gYnkgdGhlICovCisgICAgLyogcmVtb3RlLiAqLyAKKworICAgIC8qIGJ1dCBmaXJzdCwgaWYgdGhlIHZlcmJvc2l0eSBpcyBncmVhdGVyIHRoYW4gMSwgZmluZC1vdXQgd2hhdCAqLworICAgIC8qIHRoZSBzY3RwIG1heGltdW0gc2VnbWVudF9zaXplIHdhcyAoaWYgcG9zc2libGUpICovCisgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAgIHNjdHBfbXNzID0gLTE7CisgICAgICBnZXRfc2N0cF9pbmZvKHNlbmRfc29ja2V0WzBdLCAmc2N0cF9tc3MpOworICAgIH0KKworICAgIC8qIHNpZ25hbCB0aGUgc2VydmVyIHRoYXQgd2UgYXJlIGFsbCBkb25lIHdyaXRpbmcsIHRoaXMgd2lsbAorICAgICAqIGluaXRpYXRlIGEgc2h1dGRvbncgb2Ygb25lIG9mIHRoZSBhc3NvY2lhdGlvbnMgb24gdGhlCisgICAgICogc2VydmVyIGFuZCB0cmlnZ2VyIGFuIGV2ZW50IHRlbGxpbmcgdGhlIHNlcnZlciBpdCdzIGFsbCBkb25lCisgICAgICovIAorICAgIHNjdHBfc2VuZG1zZyhzZW5kX3NvY2tldFswXSwgTlVMTCwgMCwgcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4sIDAsIE1TR19FT0YsIDAsIDAsIDApOworCisgICAgCisgICAgLyogVGhlIHRlc3Qgc2VydmVyIHdpbGwgaW5pdGlhdGUgY2xvc3VyZSBvZiBhbGwgYXNzb2NpYXRpb25zCisgICAgICogd2hlbiBpdCdzIGRvbmUgcmVhZGluZy4gV2Ugd2FudCBhIGJhc2ljIG1lY2hhbmlzbSB0byBjYXRjaCB0aGlzCisgICAgICogYW5kIGFyZSB1c2luZyBTQ1RQIGV2ZW50cyBmb3IgdGhpcy4KKyAgICAgKiBJbiBibG9ja2luZyBtb2RlLCB3ZSBjYW4gY2FsbCByZWN2bXNnIHdpdGggdGhlIGxhc3Qgc29ja2V0IHdlIGNyZWF0ZWQuCisgICAgICogSW4gbm9uLWJsb2NraW5nICBtb2RlLCB3ZSBuZWVkIHRvIHNlbGVjdCBvbiB0aGUgc29ja2V0IGZvciByZWFkaW5nLgorICAgICAqIFdlJ2xsIGFzc3VtZSB0aGF0IGFsbCByZXR1cm5zIGFyZSBzdWNjZWZ1bGwgYW5kIHNpZ25pZnkKKyAgICAgKiBjbG9zdXJlLgorICAgICAqIEl0IGlzIHN1ZmZpY2llbnQgdG8gZG8gdGhpcyBvbiBhIHNpbmdsZSBzb2NrZXQgaW4gdGhlIGNsaWVudC4KKyAgICAgKiBXZSBjaG9vc2UgdG8gZG8gaXQgb24gYSBzb2NrZXQgb3RoZXIgdGhlbiB0aGUgb25lIHRoYXQgc2VuZCBNU0dfRU9GLgorICAgICAqIFRoaXMgbWVhbnMgdGhhdCBhbnl0aGluZyBjb21taW5nIGluIG9uIHRoYXQgc29ja2V0IHdpbGwgYmUgYSBzaHV0ZG93bi4KKyAgICAgKi8KKyAgICBpZiAobm9uX2Jsb2NrKSB7CisJZmRfc2V0IHJlYWRmZHM7CisKKwlGRF9aRVJPKCZyZWFkZmRzKTsKKwlGRF9TRVQoc2VuZF9zb2NrZXRbbnVtX2Fzc29jaWF0aW9ucy0xXSwgJnJlYWRmZHMpOworCXNlbGVjdChzZW5kX3NvY2tldFtudW1fYXNzb2NpYXRpb25zLTFdKzEsICZyZWFkZmRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICB9IGVsc2UgeworCXNjdHBfcmVjdm1zZyhzZW5kX3NvY2tldFtudW1fYXNzb2NpYXRpb25zXSwgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgICAgIHNlbmRfc2l6ZSwgTlVMTCwgMCwgTlVMTCwgMCk7CisgICAgfQorICAgIAorICAgIC8qIHRoaXMgY2FsbCB3aWxsIGFsd2F5cyBnaXZlIHVzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSB0ZXN0LCBhbmQgKi8KKyAgICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworICAgIAorICAgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyAqLworCQkJCQkJLyogbWVhc3VyZWQgYW5kIGhvdyAqLworCQkJCQkJLyogbG9uZyBkaWQgd2UgcmVhbGx5ICovCisJCQkJCQkvKiBydW4/ICovCisgICAgCisgICAgLyogd2UgYXJlIGZpbmlzaGVkIHdpdGggb3VyIHNvY2tldHMsIHNvIGNsb3NlIHRoZW0gdG8gcHJldmVudCBoaXR0aW5nICovCisgICAgLyogdGhlIGxpbWl0IG9uIG1heGltdW0gb3BlbiBmaWxlcy4gKi8KKyAgICBmb3IgKGogPSAwOyBqIDwgbnVtX2Fzc29jaWF0aW9uczsgaisrKQorCWNsb3NlKHNlbmRfc29ja2V0W2pdKTsKKworICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZSAqLworICAgIC8qIGNhbGN1bGF0ZWQgc2VydmljZSBkZW1hbmQgYW5kIGFsbCB0aG9zZSBpbnRlcmVzdGluZyB0aGluZ3MuIElmIGl0ICovCisgICAgLyogd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLworICAgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICBpZiAoZGVidWcpCisJZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCSAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigiIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgCisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyIHRocnVwdXQgd2FzIGZvciB0aGUgdGVzdC4gSW4gdGhlIGZ1dHVyZSwgKi8KKyAgICAvKiB3ZSBtYXkgd2FudCB0byBpbmNsdWRlIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRocnVwdXQgbWVhc3VyZWQgYnkgKi8KKyAgICAvKiB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgc2N0cCBzdHJlYW0gdGVzdCwgKi8KKyAgICAvKiB0aGF0IHRoZSB0d28gbnVtYmVycyBzaG91bGQgYmUgKnZlcnkqIGNsb3NlLi4uIFdlIGNhbGN1bGF0ZSAqLworICAgIC8qIGJ5dGVzX3NlbnQgcmVnYXJkbGVzcyBvZiB0aGUgd2F5IHRoZSB0ZXN0IGxlbmd0aCB3YXMgY29udHJvbGxlZC4gKi8KKyAgICAvKiBJZiBpdCB3YXMgdGltZSwgd2UgbmVlZGVkIHRvLCBhbmQgaWYgaXQgd2FzIGJ5IGJ5dGVzLCB0aGUgdXNlciBtYXkgKi8KKyAgICAvKiBoYXZlIHNwZWNpZmllZCBhIG51bWJlciBvZiBieXRlcyB0aGF0IHdhc24ndCBhIG11bHRpcGxlIG9mIHRoZSAqLworICAgIC8qIHNlbmRfc2l6ZSwgc28gd2UgcmVhbGx5IGRpZG4ndCBzZW5kIHdoYXQgaGUgYXNrZWQgZm9yIDstKSAqLworICAgIAorICAgIGJ5dGVzX3NlbnQJPSBudG9oZChzY3RwX3N0cmVhbV9yZXN1bHQtPmJ5dGVzX3JlY2VpdmVkKTsKKworICAgIHRocnVwdXQJPSAoZG91YmxlKSBjYWxjX3RocnVwdXQoYnl0ZXNfc2VudCk7CisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgICAgLyogT2YgY291cnNlLCBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBtaWdodCBiZSBib2d1cyBiZWNhdXNlICovCisgICAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJCisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gY2FsY19jcHVfdXRpbCgwLjApOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19zZW50LAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisJbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJCisJcmVtb3RlX2NwdV91dGlsaXphdGlvbgk9IHNjdHBfc3RyZWFtX3Jlc3VsdC0+Y3B1X3V0aWw7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19zZW50LAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgICAgIHNjdHBfc3RyZWFtX3Jlc3VsdC0+bnVtX2NwdXMpOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgICAgfQorICAgIH0gICAgCisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3ZXJlIG5vdCBtZWFzdXJpbmcgY3B1LCBmb3IgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYsIHdlICovCisgICAgICAvKiBzaG91bGQgbWFrZSBpdCAtMS4wICovCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgIH0KKworICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBjb25maWRlbmNlIGluZm9ybWF0aW9uLiAqLworICAgIC8qIGlmIGRlYnVnZ2luZyBpcyBvbiwgY2FsY3VsYXRlX2NvbmZpZGVuY2Ugd2lsbCBwcmludC1vdXQgdGhlICovCisgICAgLyogcGFyYW1ldGVycyB3ZSBwYXNzIGl0ICovCisgICAgCisgICAgY2FsY3VsYXRlX2NvbmZpZGVuY2UoY29uZmlkZW5jZV9pdGVyYXRpb24sCisJCQkgZWxhcHNlZF90aW1lLAorCQkJIHRocnVwdXQsCisJCQkgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkgbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAKKyAgICAKKyAgICBjb25maWRlbmNlX2l0ZXJhdGlvbisrOworICB9CisKKyAgLyogYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBmaW5pc2hlZCBtYWtpbmcgYWxsIHRoZSBydW5zIHRoYXQgd2UgKi8KKyAgLyogd2lsbCBiZSBtYWtpbmcuIHNvLCB3ZSBzaG91bGQgZXh0cmFjdCB3aGF0IHRoZSBjYWxjdWF0ZWQgdmFsdWVzICovCisgIC8qIGFyZSBmb3IgYWxsIHRoZSBjb25maWRlbmNlIHN0dWZmLiB3ZSBjb3VsZCBtYWtlIHRoZSB2YWx1ZXMgKi8KKyAgLyogZ2xvYmFsLCBidXQgdGhhdCBzZWVtZWQgYSBsaXR0bGUgbWVzc3ksIGFuZCBpdCBkaWQgbm90IHNlZW0gd29ydGggKi8KKyAgLyogYWxsIHRoZSBtdWNraW5nIHdpdGggaGVhZGVyIGZpbGVzLiBzbywgd2UgY3JlYXRlIGEgcm91dGluZSBtdWNoICovCisgIC8qIGxpa2UgY2FsY3VhbHRlX2NvbmZpZGVuY2UsIHdoaWNoIGp1c3QgcmV0dXJucyB0aGUgbWVhbiB2YWx1ZXMuICovCisgIC8qIHJhaiAxMS85NCAqLworCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmdGhydXB1dCwKKwkJCSAgICAmbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSAgICAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKworICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKworICBpZiAoY29uZmlkZW5jZSA8IDApIHsKKyAgICAvKiB3ZSBkaWQgbm90IGhpdCBjb25maWRlbmNlLCBidXQgd2VyZSB3ZSBhc2tlZCB0byBsb29rIGZvciBpdD8gKi8KKyAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworICAgIH0KKyAgfQorCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChjcHVfbWV0aG9kKTsKKyAgICByZW1vdGVfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKHNjdHBfc3RyZWFtX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJbG9jYWxfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlmb3JtYXRfdW5pdHMoKSwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgIAorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIHJzcl9zaXplLAkJICAgICAgICAvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgbHNzX3NpemUsCQkgICAgICAgIC8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIHRocnVwdXQsIAkJICAgICAgICAvKiB3aGF0IHdhcyB0aGUgeGZlciByYXRlICovCisJICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAkvKiBsb2NhbCBjcHUgKi8KKwkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAkvKiByZW1vdGUgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICB0aHJ1cHV0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgICB9CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIHJzcl9zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICBsc3Nfc2l6ZSwgCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICB0aHJ1cHV0KTsvKiBob3cgZmFzdCBkaWQgaXQgZ28gKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8ga25vdyBpdCBhbGwsIHNvIHdlIHdpbGwgZ2l2ZSBpdCB0byBoaW0uICovCisgICAgLyogVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluY2x1ZGUgYXMgbXVjaCBhcyB3ZSBjYW4gZmluZCBhYm91dCAqLworICAgIC8qIHNjdHAgc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgCisgICAgLyogdGhpcyBzdHVmZiBuZWVkcyB0byBiZSB3b3JrZWQtb3V0IGluIHRoZSBwcmVzZW5jZSBvZiBjb25maWRlbmNlICovCisgICAgLyogaW50ZXJ2YWxzIGFuZCBtdWx0aXBsZSBpdGVyYXRpb25zIG9mIHRoZSB0ZXN0Li4uIHJhaiAxMS85NCAqLworIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3ZfYWxpZ24sCisJICAgIGxvY2FsX3NlbmRfb2Zmc2V0LAorCSAgICByZW1vdGVfcmVjdl9vZmZzZXQsCisJICAgIGJ5dGVzX3NlbnQsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKW51bW1lc3NhZ2VzLAorCSAgICBudW1tZXNzYWdlcywKKwkgICAgYnl0ZXNfc2VudCAvIChkb3VibGUpc2N0cF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzLAorCSAgICBzY3RwX3N0cmVhbV9yZXN1bHQtPnJlY3ZfY2FsbHMpOworICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdDIsCisJICAgIHNjdHBfbXNzKTsKKyAgICBmZmx1c2god2hlcmUpOworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgZnByaW50Zih3aGVyZSwiXG5cbkhpc3RvZ3JhbSBvZiB0aW1lIHNwZW50IGluIHNlbmQoKSBjYWxsLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIH0KKyAgCit9CisKKwwKKworLyogVGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgcm91dGluZSBmb3IgdGhlIHNjdHAgc3RyZWFtIHRlc3QuIEl0IGlzICovCisvKiBpbXBsZW1lbnRlZCBhcyBvbmUgcm91dGluZS4gSSBjb3VsZCBicmVhayB0aGluZ3Mtb3V0IHNvbWV3aGF0LCBidXQgKi8KKy8qIGRpZG4ndCBmZWVsIGl0IHdhcyBuZWNlc3NhcnkuICovCisKK3ZvaWQKK3JlY3Zfc2N0cF9zdHJlYW1fMXRvTWFueSgpCit7CisgIAorICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbXlhZGRyX2luOworICBpbnQJc19yZWN2OworICBpbnQgCWFkZHJsZW47CisgIGludAlsZW47CisgIHVuc2lnbmVkIGludAlyZWNlaXZlX2NhbGxzOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIGRvdWJsZSAgIGJ5dGVzX3JlY2VpdmVkOworICBpbnQJbXNnX2ZsYWdzID0gMDsKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyNpZmRlZiBESVJUWQorICBpbnQgICAqbWVzc2FnZV9pbnRfcHRyOworICBpbnQgICBkaXJ0eV9jb3VudDsKKyAgaW50ICAgY2xlYW5fY291bnQ7CisgIGludCAgIGk7CisjZW5kaWYKKyAgCisjaWZkZWYgRE9fU0VMRUNUCisgIGZkX3NldCByZWFkZmRzOworICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworI2VuZGlmCisKKyAgc3RydWN0CXNjdHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSpzY3RwX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QJc2N0cF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpzY3RwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0CXNjdHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSpzY3RwX3N0cmVhbV9yZXN1bHRzOworICAKKyNpZmRlZiBET19TRUxFQ1QKKyAgRkRfWkVSTygmcmVhZGZkcyk7CisgIHRpbWVvdXQudHZfc2VjID0gMTsKKyAgdGltZW91dC50dl91c2VjID0gMDsKKyNlbmRpZgorCisgIHNjdHBfc3RyZWFtX3JlcXVlc3QJPSAKKyAgICAoc3RydWN0IHNjdHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzY3RwX3N0cmVhbV9yZXNwb25zZQk9IAorICAgIChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2N0cF9zdHJlYW1fcmVzdWx0cwk9IAorICAgIChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X3NjdHBfc3RyZWFtOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwgKi8KKyAgLyogc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGRldGVybWluZWQsICovCisgIC8qIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvIHdyb25nIGZvciBhbnkgKi8KKyAgLyogcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQgKi8KKyAgLyogd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMgKi8KKyAgLyogdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cyB1bmV4cGVjdGVkICovCisgIC8qIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2N0cF9zdHJlYW1fMXRvTWFueTogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBTQ1RQX1NUUkVBTV9NQU5ZX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3N0cmVhbV8xdG9NYW55OiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGUgdG8gYmUgYXQgdGhlIGRlc2lyZWQgKi8KKyAgLyogYWxpZ25tZW50IHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3N0cmVhbV8xdG9NYW55OiByZXF1ZXN0ZWQgYWxpZ25tZW50IG9mICVkXG4iLAorCSAgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZV9yZXEgPSBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplOworICBsb2Nfbm9kZWxheSA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0gc2N0cF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQ7CisgIG5vbl9ibG9jayA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPm5vbl9ibG9ja2luZzsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYoc2N0cF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJc2N0cF9zdHJlYW1fcmVxdWVzdC0+cG9ydCk7CisKKyAgbG9jYWxfcmVzID0gY29tcGxldGVfYWRkcmluZm8obG9jYWxfbmFtZSwKKwkJCQlsb2NhbF9uYW1lLAorCQkJCXBvcnRfYnVmZmVyLAorCQkJCW5mX3RvX2FmKHNjdHBfc3RyZWFtX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NFUVBBQ0tFVCwKKwkJCQlJUFBST1RPX1NDVFAsCisJCQkJMCk7CisKKyAgc19yZWN2ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgIAorICBpZiAoc19yZWN2IDwgMCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIHdoYXQgc29ydCBvZiBzaXplcyBkaWQgd2UgZW5kLXVwIHdpdGg/ICovCisgIGlmIChzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWNlaXZlX3NpemUgPT0gMCkgeworICAgIGlmIChsc3Jfc2l6ZSA+IDApIHsKKyAgICAgIHJlY3Zfc2l6ZSA9IGxzcl9zaXplOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlY3Zfc2l6ZSA9IDQwOTY7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHJlY3Zfc2l6ZSA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZTsKKyAgfQorICAKKyAgLyogd2Ugd2FudCB0byBzZXQtdXAgb3VyIHJlY3ZfcmluZyBpbiBhIG1hbm5lciBhbmFsYWdvdXMgdG8gd2hhdCB3ZSAqLworICAvKiBkbyBvbiB0aGUgc2VuZGluZyBzaWRlLiB0aGlzIGlzIG1vcmUgZm9yIHRoZSBzYWtlIG9mIHN5bW1ldHJ5ICovCisgIC8qIHRoYW4gZm9yIHRoZSBuZWVkcyBvZiBzYXkgY29weSBhdm9pZGFuY2UsIGJ1dCBpdCBtaWdodCBhbHNvIGJlICovCisgIC8qIG1vcmUgcmVhbGlzdGljIC0gdGhpcyB3YXkgb25lIGNvdWxkIGNvbmNlaXZhYmx5IGdvIHdpdGggYSAqLworICAvKiBkb3VibGUtYnVmZmVyaW5nIHNjaGVtZSB3aGVuIHRha2luZyB0aGUgZGF0YSBhbiBwdXR0aW5nIGl0IGludG8gKi8KKyAgLyogdGhlIGZpbGVzeXN0ZW0gb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gcmFqIDcvOTQgKi8KKworICBpZiAocmVjdl93aWR0aCA9PSAwKSB7CisgICAgcmVjdl93aWR0aCA9IChsc3Jfc2l6ZS9yZWN2X3NpemUpICsgMTsKKyAgICBpZiAocmVjdl93aWR0aCA9PSAxKSByZWN2X3dpZHRoKys7CisgIH0KKworICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgIHJlY3Zfc2l6ZSwKKwkJCQkgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkJCQkgICBzY3RwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3N0cmVhbTogcmVjZWl2ZSBhbGlnbm1lbnQgYW5kIG9mZnNldCBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfcmVjdiwgNSkgPT0gLTEpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfcmVjdik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKworICAvKiBub3cgZ2V0IHRoZSBwb3J0IG51bWJlciBhc3NpZ25lZCBieSB0aGUgc3lzdGVtICAqLworICBhZGRybGVuID0gc2l6ZW9mKG15YWRkcl9pbik7CisgIGlmIChnZXRzb2NrbmFtZShzX3JlY3YsIAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLAorCQkgICZhZGRybGVuKSA9PSAtMSl7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX3JlY3YpOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3cgbXlhZGRyX2luIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzICovCisgIC8qIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0IHRoZSAqLworICAvKiBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiAqLworICAKKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAoaW50KSBudG9ocyhteWFkZHJfaW4uc2luX3BvcnQpOworICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyAgID0gMDsKKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAtMSB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlID0gKGZsb2F0KTAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgaWYgKHNjdHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICBzY3RwX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGUgPSAKKyAgICAgIGNhbGlicmF0ZV9sb2NhbF9jcHUoc2N0cF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIGVsc2UgeworICAgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIH0KKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHNjdHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgc2N0cF9zdHJlYW1fcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworICBzY3RwX3N0cmVhbV9yZXNwb25zZS0+cmVjZWl2ZV9zaXplID0gcmVjdl9zaXplOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisKKyAgc2N0cF9lbmFibGVfZXZlbnRzKHNfcmVjdiwgU0NUUF9BU1NPQ19DSEFOR0VfRVYgfCBTQ1RQX1NIVVRET1dOX0VWKTsKKyAgCisgIC8qIG5vdyB0aGF0IHdlIGFyZSBjb25uZWN0ZWQsIG1hcmsgdGhlIHNvY2tldCBhcyBub24tYmxvY2tpbmcgKi8KKyAgaWYgKG5vbl9ibG9jaykgeworICAgICAgaWYgKCFzZXRfbm9uYmxvY2soc19yZWN2KSkgeworCWNsb3NlKHNfcmVjdik7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgfQorCisKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHNjdHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSBzZW5kZXIgZG9lcyBhIHNodXRkb3duLCB3aGljaCB3aWxsICovCisgIC8qIHJldHVybiBhIGxlbmd0aCBvZiB6ZXJvICAgKi8KKyAgCisjaWZkZWYgRElSVFkKKyAgICAvKiB3ZSB3YW50IHRvIGRpcnR5IHNvbWUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVnZXJzIGluIHRoZSBidWZmZXIgKi8KKyAgICAvKiB3ZSBhcmUgYWJvdXQgdG8gcmVjdi4gd2UgbWF5IGFsc28gd2FudCB0byBicmluZyBzb21lIG51bWJlciBvZiAqLworICAgIC8qIHRoZW0gY2xlYW5seSBpbnRvIHRoZSBjYWNoZS4gVGhlIGNsZWFuIG9uZXMgd2lsbCBmb2xsb3cgYW55IGRpcnR5ICovCisgICAgLyogb25lcyBpbnRvIHRoZSBjYWNoZS4gKi8KKworICBkaXJ0eV9jb3VudCA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPmRpcnR5X2NvdW50OworICBjbGVhbl9jb3VudCA9IHNjdHBfc3RyZWFtX3JlcXVlc3QtPmNsZWFuX2NvdW50OworICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopcmVjdl9yaW5nLT5idWZmZXJfcHRyOworICBmb3IgKGkgPSAwOyBpIDwgZGlydHlfY291bnQ7IGkrKykgeworICAgICptZXNzYWdlX2ludF9wdHIgPSByYW5kKCk7CisgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IGNsZWFuX2NvdW50OyBpKyspIHsKKyAgICBkaXJ0eV9jb3VudCA9ICptZXNzYWdlX2ludF9wdHI7CisgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworCisgIGJ5dGVzX3JlY2VpdmVkID0gMDsKKyAgcmVjZWl2ZV9jYWxscyAgPSAwOworICAKKyAgd2hpbGUgKChsZW4gPSBzY3RwX3JlY3Ztc2coc19yZWN2LCByZWN2X3JpbmctPmJ1ZmZlcl9wdHIsIHJlY3Zfc2l6ZSwKKwkJCSAgICAgTlVMTCwgMCwgIC8qIHdlIGRvbid0IGNhcmUgd2hvIGl0J3MgZnJvbSAqLworCQkJICAgICBOVUxMLCAmbXNnX2ZsYWdzKSkgIT0gMCkgeworICAgIGlmIChsZW4gPCAwKSB7CisgICAgICBpZiAobm9uX2Jsb2NrICYmIGVycm5vID09IEVBR0FJTikgeworCVNldF9lcnJubygwKTsKKwljb250aW51ZTsKKyAgICAgIH0KKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBjbG9zZShzX3JlY3YpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZiAobXNnX2ZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworCWlmIChzY3RwX3Byb2Nlc3NfZXZlbnQoc19yZWN2LCByZWN2X3JpbmctPmJ1ZmZlcl9wdHIpID09IFNDVFBfQ0xPU0UpCisJICAgIGJyZWFrOworCisJY29udGludWU7CisgICAgfQorICAgIAorICAgIGJ5dGVzX3JlY2VpdmVkICs9IGxlbjsKKyAgICByZWNlaXZlX2NhbGxzKys7CisKKyAgICAvKiBtb3JlIHRvIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUgcmVjdl9yaW5nICovCisgICAgcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworCisjaWZkZWYgUEFVU0UKKyAgICBzbGVlcCgxKTsKKyNlbmRpZiAvKiBQQVVTRSAqLworCisjaWZkZWYgRElSVFkKKyAgICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopKHJlY3ZfcmluZy0+YnVmZmVyX3B0cik7CisgICAgZm9yIChpID0gMDsgaSA8IGRpcnR5X2NvdW50OyBpKyspIHsKKyAgICAgICptZXNzYWdlX2ludF9wdHIgPSByYW5kKCk7CisgICAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IGNsZWFuX2NvdW50OyBpKyspIHsKKyAgICAgIGRpcnR5X2NvdW50ID0gKm1lc3NhZ2VfaW50X3B0cjsKKyAgICAgIG1lc3NhZ2VfaW50X3B0cisrOworICAgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworCisjaWZkZWYgRE9fU0VMRUNUCisJRkRfU0VUKHNfcmVjdiwmcmVhZGZkcyk7CisJc2VsZWN0KHNfcmVjdisxLCZyZWFkZmRzLE5VTEwsTlVMTCwmdGltZW91dCk7CisjZW5kaWYgLyogRE9fU0VMRUNUICovCisKKyAgfQorICAKKyAgLyogcGVyZm9ybSBhIHNodXRkb3duIHRvIHNpZ25hbCB0aGUgc2VuZGVyLiAgaW4gdGhpcyBjYXNlLCBzY3RwCisgICAqIHdpbGwgY2xvc2UgYWxsIGFzc29jaWF0aW9ucyBvbiB0aGlzIHNvY2tldAorICAgKi8KKyAgaWYgKGNsb3NlKHNfcmVjdikgPT0gLTEpIHsKKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICB9CisgIAorICBjcHVfc3RvcChzY3RwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zY3RwX3N0cmVhbTogZ290ICVnIGJ5dGVzXG4iLAorCSAgICBieXRlc19yZWNlaXZlZCk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2N0cF9zdHJlYW06IGdvdCAlZCByZWN2c1xuIiwKKwkgICAgcmVjZWl2ZV9jYWxscyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2N0cF9zdHJlYW1fcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQJPSBodG9uZChieXRlc19yZWNlaXZlZCk7CisgIHNjdHBfc3RyZWFtX3Jlc3VsdHMtPmVsYXBzZWRfdGltZQk9IGVsYXBzZWRfdGltZTsKKyAgc2N0cF9zdHJlYW1fcmVzdWx0cy0+cmVjdl9jYWxscwk9IHJlY2VpdmVfY2FsbHM7CisgIAorICBpZiAoc2N0cF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICBzY3RwX3N0cmVhbV9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKyAgfTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3NjdHBfc3RyZWFtOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiICAgICAgICAgICAgICAgICBieXRlc19yZWNlaXZlZCAlZyByZWNlaXZlX2NhbGxzICVkXG4iLAorCSAgICBieXRlc19yZWNlaXZlZCwKKwkgICAgcmVjZWl2ZV9jYWxscyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiAgICAgICAgICAgICAgICAgbGVuICVkXG4iLAorCSAgICBsZW4pOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNjdHBfc3RyZWFtX3Jlc3VsdHMtPmNwdV9tZXRob2QgPSBjcHVfbWV0aG9kOworICBzY3RwX3N0cmVhbV9yZXN1bHRzLT5udW1fY3B1cyAgID0gbGliX251bV9sb2NfY3B1czsKKyAgc2VuZF9yZXNwb25zZSgpOworfQorDAorCisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHNlbmRpbmcgKG5ldHBlcmYpIHNpZGUgb2YgdGhlIFNDVFBfUlIgKi8KKyAvKiB0ZXN0LiAqLworCit2b2lkCitzZW5kX3NjdHBfcnIocmVtb3RlX2hvc3QpCisgICAgIGNoYXIJcmVtb3RlX2hvc3RbXTsKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgXG4iOworICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0IFJlc3AuICBFbGFwc2VkIFRyYW5zLiAgIENQVSAgICBDUFUgICAgUy5kZW0gICBTLmRlbVxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIFJhdGUgICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAlYyAgICAlJSAlYyAgICB1cy9UciAgIHVzL1RyXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZiAlY1xuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICUtNmQgJS02LjJmICAlLTYuMmYgICUtNi4yZiAlLTYuMmYgJS02LjNmICAlLTYuM2ZcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmtzaW5rX2ZtdCA9ICJcCitBbGlnbm1lbnQgICAgICBPZmZzZXRcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGVcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2XG5cCislNWQgICU1ZCAgICU1ZCAgJTVkXG4iOworICAKKyAgCisgIGludAkJCXRpbWVkX291dCA9IDA7CisgIGZsb2F0CQkJZWxhcHNlZF90aW1lOworICAKKyAgaW50CWxlbjsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CW51bW1lc3NhZ2VzOworICBpbnQJc2VuZF9zb2NrZXQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludCAgIG1zZ19mbGFncyA9IDA7CisgIGRvdWJsZQlieXRlc194ZmVyZDsKKworICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIAorICBpbnQJcnNwX2J5dGVzX2xlZnQ7CisgIGludAlyc3BfYnl0ZXNfcmVjdmQ7CisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisgIGRvdWJsZQl0aHJ1cHV0OworCisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7CisgIHN0cnVjdCBhZGRyaW5mbyAqcmVtb3RlX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICpsb2NhbF9yZXM7CisKKyAgc3RydWN0CXNjdHBfcnJfcmVxdWVzdF9zdHJ1Y3QJKnNjdHBfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXNjdHBfcnJfcmVzcG9uc2Vfc3RydWN0CSpzY3RwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJc2N0cF9ycl9yZXN1bHRzX3N0cnVjdAkqc2N0cF9ycl9yZXN1bHQ7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIGludAlpbnRlcnZhbF9jb3VudDsKKyAgc2lnc2V0X3Qgc2lnbmFsX3NldDsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisgIHNjdHBfcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3Qgc2N0cF9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2N0cF9ycl9yZXNwb25zZSA9CisgICAgKHN0cnVjdCBzY3RwX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNjdHBfcnJfcmVzdWx0ID0KKyAgICAoc3RydWN0IHNjdHBfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICB0aW1lX2hpc3QgPSBISVNUX25ldygpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZSAqLworICAvKiBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50ICovCisgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgIC8qIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKworICAvKiBjb21wbGV0ZV9hZGRyaW5mb3Mgd2lsbCBlaXRoZXIgc3VjY2VkZSBvciBleGl0IHRoZSBwcm9jZXNzICovCisgIGNvbXBsZXRlX2FkZHJpbmZvcygmcmVtb3RlX3JlcywKKwkJICAgICAmbG9jYWxfcmVzLAorCQkgICAgIHJlbW90ZV9ob3N0LAorCQkgICAgIFNPQ0tfU1RSRUFNLAorCQkgICAgIElQUFJPVE9fU0NUUCwKKwkJICAgICAwKTsKKworICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgcHJpbnRfdG9wX3Rlc3RfaGVhZGVyKCJTQ1RQIFJFUVVFU1QvUkVTUE9OU0UgVEVTVCIsIGxvY2FsX3JlcywgcmVtb3RlX3Jlcyk7CisgIH0KKyAgCisgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMgKi8KKyAgCisgIHNlbmRfcmluZyA9IE5VTEw7CisgIHJlY3ZfcmluZyA9IE5VTEw7CisgIGNvbmZpZGVuY2VfaXRlcmF0aW9uID0gMTsKKyAgaW5pdF9zdGF0KCk7CisKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisKKyAgICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzLiB3ZSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgd2UgbWlnaHQgYmUgKi8KKyAgICAvKiBnb2luZyB0aHJvdWdoIHRoZSBsb29wIG1vcmUgdGhhbiBvbmNlLiAqLworCisgICAgbnVtbWVzc2FnZXMgICAgID0gMDsKKyAgICBieXRlc194ZmVyZCAgICAgPSAwLjA7CisgICAgdGltZXNfdXAgICAgICAgID0gMDsKKyAgICB0aW1lZF9vdXQgICAgICAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisKKyAgICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVycyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQuICovCisgICAgLyogc2luY2UgdGhpcyBpcyBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgZGVmYXVsdCB0aGUgc2VuZF93aWR0aCBhbmQgKi8KKyAgICAvKiByZWN2X3dpZHRoIHRvIDEgYW5kIG5vdCB0d28gcmFqIDcvOTQgKi8KKworICAgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICAgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworICAKKyAgICBpZiAoc2VuZF9yaW5nID09IE5VTEwpIHsKKyAgICAgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgICAgIHJlcV9zaXplLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgfQorCisgICAgaWYgKHJlY3ZfcmluZyA9PSBOVUxMKSB7CisgICAgICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgICAgICByc3Bfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfcmVjdl9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfcmVjdl9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgIAorICAgIGlmIChzZW5kX3NvY2tldCA8IDApeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3NjdHBfcnI6IHNjdHAgc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfc2N0cF9ycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiovCisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICB9CisgICAgCisgICAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlIHNvY2tldCAqLworICAgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAgIC8qIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkICovCisgICAgLyogbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGV5IHdpbGwgYmUgcGFzc2VkIGFzIDAsIHdoaWNoICovCisgICAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgICAgLyogZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgKi8KKyAgICAvKiBkZWZhdWx0IHRvIDgsIHdoaWNoIHdpbGwgYmUgbm8gYWxpZ25tZW50IGFsdGVyYXRpb25zLiAqLworICAgIAorICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQk9CURPX1NDVFBfUlI7CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemVfcmVxOworICAgIHNjdHBfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZQk9CXJzc19zaXplX3JlcTsKKyAgICBzY3RwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50ICAgICA9CXJlbW90ZV9yZWN2X2FsaWduOworICAgIHNjdHBfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQgICAgICAgID0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICAgIHNjdHBfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQgICAgID0JcmVtb3RlX3NlbmRfYWxpZ247CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldAk9CXJlbW90ZV9zZW5kX29mZnNldDsKKyAgICBzY3RwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZQk9CXJlcV9zaXplOworICAgIHNjdHBfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZQk9CXJzcF9zaXplOworICAgIHNjdHBfcnJfcmVxdWVzdC0+bm9fZGVsYXkJICAgICAgICA9CXJlbV9ub2RlbGF5OworICAgIHNjdHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUJPQlyZW1vdGVfY3B1X3VzYWdlOworICAgIHNjdHBfcnJfcmVxdWVzdC0+Y3B1X3JhdGUJICAgICAgICA9CXJlbW90ZV9jcHVfcmF0ZTsKKyAgICBzY3RwX3JyX3JlcXVlc3QtPnNvX3JjdmF2b2lkCSAgICAgICAgPQlyZW1fcmN2YXZvaWQ7CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZAkgICAgICAgID0JcmVtX3NuZGF2b2lkOworICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIHNjdHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RpbWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgc2N0cF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdHJhbnMgKiAtMTsKKyAgICB9CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5ub25fYmxvY2tpbmcJPSAJbm9uX2Jsb2NrOworICAgIHNjdHBfcnJfcmVxdWVzdC0+aXBmYW1pbHkgICAgICAgICAgID0gYWZfdG9fbmYocmVtb3RlX3Jlcy0+YWlfZmFtaWx5KTsKKworICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfc2N0cF9ycjogcmVxdWVzdGluZyBTQ1RQIHJyIHRlc3RcbiIpOworICAgIH0KKyAgICAKKyAgICBzZW5kX3JlcXVlc3QoKTsKKyAgICAKKyAgICAvKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIHJlbGV2YW50IAkqLworICAgIC8qIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrIGludG8gKi8KKyAgICAvKiB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuICBUaGUJKi8KKyAgICAvKiByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwgaGF2ZSBkb25lCSovCisgICAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAgIC8qIGJlZm9yZSBzZW5kaW5nIHRoZSByZXF1ZXN0LCBhbmQgd2lsbCBncmFiIHRoZSBjb3VudGVyIHZhbHVlIHJpZ2h0Ki8KKyAgICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodCovCisgICAgLyogYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMJKi8KKyAgICAvKiBiZWluZyBzZW50IGZvciB0aGUgc2N0cCB0ZXN0cy4JCQkJCSovCisgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworICAgICAgcnNyX3NpemUgICAgICAgICAgPSBzY3RwX3JyX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICAgICAgcnNzX3NpemUgICAgICAgICAgPSBzY3RwX3JyX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplOworICAgICAgcmVtX25vZGVsYXkgICAgICAgPSBzY3RwX3JyX3Jlc3BvbnNlLT5ub19kZWxheTsKKyAgICAgIHJlbW90ZV9jcHVfdXNhZ2UgID0gc2N0cF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHU7CisgICAgICByZW1vdGVfY3B1X3JhdGUgICA9IHNjdHBfcnJfcmVzcG9uc2UtPmNwdV9yYXRlOworICAgICAgLyogbWFrZSBzdXJlIHRoYXQgcG9ydCBudW1iZXJzIGFyZSBpbiBuZXR3b3JrIG9yZGVyICovCisgICAgICBzZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcywgCisJCSAgICAgICh1bnNpZ25lZCBzaG9ydClzY3RwX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgICAgaWYgKGNvbm5lY3Qoc2VuZF9zb2NrZXQsIAorCQlyZW1vdGVfcmVzLT5haV9hZGRyLAorCQlyZW1vdGVfcmVzLT5haV9hZGRybGVuKSA8MCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfc2N0cF9yciBkYXRhIHNvY2tldCBjb25uZWN0IGZhaWxlZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICAvKiBkb24ndCBuZWVkIGV2ZW50cyBmb3IgMS10by0xIEFQSSB3aXRoIHJlcXVlc3QtcmVzcG9uc2UgdGVzdHMgKi8KKyAgICBzY3RwX2VuYWJsZV9ldmVudHMoc2VuZF9zb2NrZXQsIDApOworCisgICAgLyogc2V0IG5vbi1ibG9ja2luZyBpZiBuZWVkZWQgKi8KKyAgICBpZiAobm9uX2Jsb2NrKSB7CisgICAgICAgaWYgKCFzZXRfbm9uYmxvY2soc2VuZF9zb2NrZXQpKSB7CisJICAgIGNsb3NlKHNlbmRfc29ja2V0KTsKKwkgICAgZXhpdCgxKTsKKwl9CisgICAgfQorICAgIAorICAgIC8qIERhdGEgU29ja2V0IHNldC11cCBpcyBmaW5pc2hlZC4gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcywgZWl0aGVyIHRoZSAqLworICAgIC8qIGNvbm5lY3Qgd291bGQgaGF2ZSBmYWlsZWQsIG9yIHRoZSBwcmV2aW91cyByZXNwb25zZSB3b3VsZCBoYXZlICovCisgICAgLyogaW5kaWNhdGVkIGEgcHJvYmxlbS4gSSBmYWlsZWQgdG8gc2VlIHRoZSB2YWx1ZSBvZiB0aGUgZXh0cmEgKi8KKyAgICAvKiBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCB3ZSdsbCBzZWUgaXQgKi8KKyAgICAvKiBoZXJlLiBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGFzIHdlbGwgc3RhcnQgcHVtcGluZyBkYXRhLiAqLworICAgIAorICAgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCB0aGV5ICovCisgICAgLyogY2FuIGJlIGVpdGhlciB0aW1lIG9yIHRyYW5zYWN0aW9uIGJhc2VkLiAqLworICAgIAorICAgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBlbmQgdGhlIHRlc3QgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZS4gKi8KKyAgICAgIHRpbWVzX3VwID0gMDsKKyAgICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgICBzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFRoZSB0ZXN0ZXIgd2FudGVkIHRvIHNlbmQgYSBudW1iZXIgb2YgYnl0ZXMuICovCisgICAgICB0cmFuc19yZW1haW5pbmcgPSB0ZXN0X2J5dGVzOworICAgICAgdGltZXNfdXAgPSAxOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgICAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgICAgCisgICAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpIHx8IChkZW1vX21vZGUpKSB7CisgICAgICAvKiB6ZXJvIG1lYW5zIHRoYXQgd2UgbmV2ZXIgcGF1c2UsIHNvIHdlIG5ldmVyIHNob3VsZCBuZWVkIHRoZSAqLworICAgICAgLyogaW50ZXJ2YWwgdGltZXIsIHVubGVzcyB3ZSBhcmUgaW4gZGVtb19tb2RlICovCisgICAgICBzdGFydF9pdGltZXIoaW50ZXJ2YWxfd2F0ZSk7CisgICAgfQorICAgIGludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisgICAgLyogZ2V0IHRoZSBzaWduYWwgc2V0IGZvciB0aGUgY2FsbCB0byBzaWdzdXNwZW5kICovCisgICAgaWYgKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgKHNpZ3NldF90ICopTlVMTCwgJnNpZ25hbF9zZXQpICE9IDApIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInNlbmRfc2N0cF9ycjogdW5hYmxlIHRvIGdldCBzaWdtYXNrIGVycm5vICVkXG4iLAorCSAgICAgIGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisgICAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuIEkgdGhpbmsgSSAqLworICAgIC8qIGp1c3QgYXJiaXRyYXJpbHkgZGVjcmVtZW50IHRyYW5zX3JlbWFpbmluZyBmb3IgdGhlIHRpbWVkIHRlc3QsIGJ1dCAqLworICAgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgICAgLyogdGhlIHNlbmQgYnVmZmVyIGFuZCB0aGUgcmVjZWl2ZSBidWZmZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKworI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBmaXJzdF9idXJzdF9zaXplOyBpKyspIHsKKyAJaWYoKGxlbj1zY3RwX3NlbmRtc2coc2VuZF9zb2NrZXQsCisgCQkJICAgICBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsIHJlcV9zaXplLAorIAkJCSAgICAgTlVMTCwgMCwJLyogZG9uJ3QgbmVlZCBhZGRycyB3aXRoIDEtdG8tMSAqLworIAkJCSAgICAgMCwgMCwgMCwgMCwgMCkpICE9IHJlcV9zaXplKSB7CisJICAvKiB3ZSBzaG91bGQgbmV2ZXIgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgaW4gdGhlIGZpcnN0IGJ1cnN0ICovCisJICBwZXJyb3IoInNlbmRfc2N0cF9ycjogaW5pdGlhbCBidXJzdCBkYXRhIHNlbmQgZXJyb3IiKTsKKwkgIGV4aXQoMSk7CisJfQorICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBXQU5UX0ZJUlNUX0JVUlNUICovCisKKyAgICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgICAvKiBzZW5kIHRoZSByZXF1ZXN0LiB3ZSBhc3N1bWUgdGhhdCBpZiB3ZSB1c2UgYSBibG9ja2luZyBzb2NrZXQsICovCisgICAgICAvKiB0aGUgcmVxdWVzdCB3aWxsIGJlIHNlbnQgYXQgb25lIHNob3QuICovCisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgLyogdGltZXN0YW1wIGp1c3QgYmVmb3JlIG91ciBjYWxsIHRvIHNlbmQsIGFuZCB0aGVuIGFnYWluIGp1c3QgKi8KKyAgICAgIC8qIGFmdGVyIHRoZSByZWNlaXZlIHJhaiA4Lzk0ICovCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgICAgICAKKyAgICAgIHdoaWxlICgobGVuPXNjdHBfc2VuZG1zZyhzZW5kX3NvY2tldCwKKwkJCSAgICAgICBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsIHJlcV9zaXplLAorCQkJICAgICAgIE5VTEwsIDAsIC8qIGRvbid0IG5lZWQgYWRkcnMgd2l0aCAxLXRvLTEgKi8KKwkJCSAgICAgICAwLCAwLCAwLCAwLCAwKSkgIT0gcmVxX3NpemUpIHsKKwlpZiAobm9uX2Jsb2NrICYmIGVycm5vID09IEVBR0FJTikgeworCSAgICAvKiB0cnkgc2VuZGluZyBhZ2FpbiAqLworCSAgICBjb250aW51ZTsKKwl9IGVsc2UgaWYgKFNPQ0tFVF9FSU5UUihsZW4pIHx8IChlcnJubyA9PSAwKSkgeworCSAgLyogd2UgaGl0IHRoZSBlbmQgb2YgYSAqLworCSAgLyogdGltZWQgdGVzdC4gKi8KKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9CisJcGVycm9yKCJzZW5kX3NjdHBfcnI6IGRhdGEgc2VuZCBlcnJvciIpOworCWV4aXQoMSk7CisgICAgICB9CisKKyAgICAgIGlmICh0aW1lZF9vdXQpIHsKKwkvKiB3ZSB0aW1lZCBvdXQgd2hpbGUgc2VuZGluZy4gYnJlYWsgb3V0IGFub3RoZXIgbGV2ZWwgKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKyAgICAgIAorICAgICAgLyogcmVjZWl2ZSB0aGUgcmVzcG9uc2UgKi8KKyAgICAgIHJzcF9ieXRlc19sZWZ0ID0gcnNwX3NpemU7CisgICAgICB0ZW1wX21lc3NhZ2VfcHRyICA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICAgIGRvIHsKKwltc2dfZmxhZ3MgPSAwOworCWlmICgocnNwX2J5dGVzX3JlY3ZkPXNjdHBfcmVjdm1zZyhzZW5kX3NvY2tldCwKKwkJCQkJIHRlbXBfbWVzc2FnZV9wdHIsIHJzcF9ieXRlc19sZWZ0LAorCQkJCQkgTlVMTCwgMCwKKwkJCQkJIE5VTEwsICZtc2dfZmxhZ3MpKSA8IDApIHsKKwkgIGlmIChlcnJubyA9PSBFSU5UUikgeworCSAgICAvKiBXZSBoaXQgdGhlIGVuZCBvZiBhIHRpbWVkIHRlc3QuICovCisJICAgIHRpbWVkX291dCA9IDE7CisJICAgIGJyZWFrOworCSAgfSBlbHNlIGlmIChub25fYmxvY2sgJiYgZXJybm8gPT0gRUFHQUlOKSB7CisJICAgICAgY29udGludWU7CisJICB9CisJICBwZXJyb3IoInNlbmRfc2N0cF9ycjogZGF0YSByZWN2IGVycm9yIik7CisJICBleGl0KDEpOworCX0KKwlyc3BfYnl0ZXNfbGVmdCAtPSByc3BfYnl0ZXNfcmVjdmQ7CisJdGVtcF9tZXNzYWdlX3B0ciAgKz0gcnNwX2J5dGVzX3JlY3ZkOworICAgICAgfQl3aGlsZSAoIShtc2dfZmxhZ3MgJiBNU0dfRU9SKSk7CisgICAgICAKKyAgICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKyAgICAgIAorICAgICAgaWYgKHRpbWVkX291dCkgeworCS8qIHdlIG1heSBoYXZlIGJlZW4gaW4gYSBuZXN0ZWQgd2hpbGUgbG9vcCAtIHdlIG5lZWQgKi8KKwkvKiBhbm90aGVyIGNhbGwgdG8gYnJlYWsuICovCisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgSElTVF90aW1lc3RhbXAoJnRpbWVfdHdvKTsKKyAgICAgIEhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyNpZmRlZiBXQU5UX0lOVEVSVkFMUyAgICAgIAorICAgICAgaWYgKGRlbW9fbW9kZSkgeworCXVuaXRzX3RoaXNfdGljayArPSAxOworICAgICAgfQorICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgaW50ZXJ2YWwgY291bnQgaXMgdGhlIGNvdW50LWRvd24gY291dGVyICovCisgICAgICAvKiB0byBkZWNpZGUgdG8gc2xlZXAgZm9yIGEgbGl0dGxlIGJpdCAqLworICAgICAgaWYgKChpbnRlcnZhbF9idXJzdCkgJiYgKC0taW50ZXJ2YWxfY291bnQgPT0gMCkpIHsKKwkvKiBjYWxsIHNpZ3N1c3BlbmQgYW5kIHdhaXQgZm9yIHRoZSBpbnRlcnZhbCB0aW1lciB0byBnZXQgdXMgKi8KKwkvKiBvdXQgKi8KKwlpZiAoZGVidWcgPiAxKSB7CisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzdXNwZW5kXG4iKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisJfQorCWlmIChzaWdzdXNwZW5kKCZzaWduYWxfc2V0KSA9PSBFRkFVTFQpIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgInNlbmRfc2N0cF9ycjogZmF1bHQgd2l0aCBzaWduYWwgc2V0IVxuIik7CisJICBmZmx1c2god2hlcmUpOworCSAgZXhpdCgxKTsKKwl9CisJaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgICAgCisgICAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKwl0cmFuc19yZW1haW5pbmctLTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGRlYnVnID4gMykgeworCWlmICgobnVtbWVzc2FnZXMgJSAxMDApID09IDApIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgIlRyYW5zYWN0aW9uICVkIGNvbXBsZXRlZFxuIiwKKwkJICBudW1tZXNzYWdlcyk7CisJICBmZmx1c2god2hlcmUpOworCX0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IHdlIHVzZWQgdG8gY2FsbCBzaHV0ZG93biBvbiB0aGUgZGF0YSBzb2NrZXQgdG8gYmUgKi8KKyAgICAvKiBzdXJlIGFsbCB0aGUgZGF0YSB3YXMgZGVsaXZlcmVkLCBidXQgdGhpcyB3YXMgbm90IGdlcm1hbmUgaW4gYSAqLworICAgIC8qIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgYW5kIGl0IHdhcyBjYXVzaW5nIHRoZSB0ZXN0cyB0byAiaGFuZyIgd2hlbiAqLworICAgIC8qIHRoZXkgd2VyZSBiZWluZyBjb250cm9sbGVkIGJ5IHRpbWUuIFNvLCBJIGhhdmUgcmVwbGFjZWQgdGhpcyAqLworICAgIC8qIHNodXRkb3duIGNhbGwgd2l0aCBhIGNhbGwgdG8gY2xvc2UgdGhhdCBjYW4gYmUgZm91bmQgbGF0ZXIgaW4gdGhlICovCisgICAgLyogcHJvY2VkdXJlLiAqLworICAgIAorICAgIC8qIHRoaXMgY2FsbCB3aWxsIGFsd2F5cyBnaXZlIHVzIHRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSB0ZXN0LCBhbmQgKi8KKyAgICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworICAgIAorICAgIGNwdV9zdG9wKGxvY2FsX2NwdV91c2FnZSwmZWxhcHNlZF90aW1lKTsJLyogd2FzIGNwdSBiZWluZyAqLworCQkJCQkJLyogbWVhc3VyZWQ/IGhvdyBsb25nICovCisJCQkJCQkvKiBkaWQgd2UgcmVhbGx5IHJ1bj8gKi8KKyAgICAKKyAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgICAvKiBjYWxjdWxhdGVkIENQVSB1dGlsaXphdGlvbi4gSWYgaXQgd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0ICovCisgICAgLyogd2lsbCByZXR1cm4gb2J2aW91cyB2YWx1ZXMuICovIAorICAgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICBpZiAoZGVidWcpCisJZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCSAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigiIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJvdWdocHV0IHdhcyBmb3IgdGhlIHRlc3QuICovCisgIAorICAgIGJ5dGVzX3hmZXJkCT0gKHJlcV9zaXplICogbnVtbWVzc2FnZXMpICsgKHJzcF9zaXplICogbnVtbWVzc2FnZXMpOworICAgIHRocnVwdXQJPSBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWU7CisgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgICAgLyogdGhlcmUgd2FzIG5vIGlkbGUgY291bnRlciBpbiB0aGUga2VybmVsKHMpLiBXZSBuZWVkIHRvIG1ha2UgKi8KKyAgICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWxvY2FsX2NwdV91dGlsaXphdGlvbiA9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKwkvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKwkvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisJLyogImdvb2QiIG51bWJlcnMgKi8KKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZCAgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgICAgMC4wLAorCQkJCQkJICAgIDAuMCwKKwkJCQkJCSAgICAwKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWxvY2FsX2NwdV91dGlsaXphdGlvbgk9IChmbG9hdCkgLTEuMDsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gc2N0cF9ycl9yZXN1bHQtPmNwdV91dGlsOworCS8qIHNpbmNlIGNhbGNfc2VydmljZSBkZW1hbmQgaXMgZG9pbmcgbXMvS3VuaXQgd2Ugd2lsbCAqLworCS8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKwkvKiAiZ29vZCIgbnVtYmVycyAqLworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCA9IGNhbGNfc2VydmljZV9kZW1hbmQoKGRvdWJsZSkgbnVtbWVzc2FnZXMqMTAyNCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgICBzY3RwX3JyX3Jlc3VsdC0+bnVtX2NwdXMpOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgICAgfQorICAgICAgCisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogd2Ugd2VyZSBub3QgbWVhc3VyaW5nIGNwdSwgZm9yIHRoZSBjb25maWRlbmNlIHN0dWZmLCB3ZSAqLworICAgICAgLyogc2hvdWxkIG1ha2UgaXQgLTEuMCAqLworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgCisgICAgCisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24rKzsKKworICAgIC8qIHdlIGFyZSBub3cgZG9uZSB3aXRoIHRoZSBzb2NrZXQsIHNvIGNsb3NlIGl0ICovCisgICAgY2xvc2Uoc2VuZF9zb2NrZXQpOworCisgIH0KKworICByZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKCZlbGFwc2VkX3RpbWUsCisJCQkgICAgJnRocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisKKyAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgLyogd2UgZGlkIG5vdCBoaXQgY29uZmlkZW5jZSwgYnV0IHdlcmUgd2UgYXNrZWQgdG8gbG9vayBmb3IgaXQ/ICovCisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBkaXNwbGF5X2NvbmZpZGVuY2UoKTsKKyAgICB9CisgIH0KKworICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChzY3RwX3JyX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJbG9jYWxfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogZ3Vlc3MgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LAorCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLAorCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIHRocnVwdXQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMSwJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwKKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlc3BvbnNlcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIHRocnVwdXQpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgcnNyX3NpemUpOworICAgICAgCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIC8qIGhvdyB0byBoYW5kbGUgdGhlIHZlcmJvc2UgaW5mb3JtYXRpb24gaW4gdGhlIHByZXNlbmNlIG9mICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGlzIHlldCB0byBiZSBkZXRlcm1pbmVkLi4uIHJhaiAxMS85NCAqLworICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgICAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCwKKwkgICAgbG9jYWxfc2VuZF9vZmZzZXQsCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCk7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuSGlzdG9ncmFtIG9mIHJlcXVlc3QvcmVzcG9uc2UgdGltZXNcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIH0KKyAgCit9CisKKwwKKyAvKiB0aGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgcmVjZWl2ZSAobmV0c2VydmVyKSBzaWRlIG9mIGEgVENQX1JSICovCisgLyogdGVzdCAqLwordm9pZAorcmVjdl9zY3RwX3JyKCkKK3sKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKyAgCisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciBwb3J0X2J1ZmZlcltQT1JUQlVGU0laRV07CisKKyAgc3RydWN0IHNvY2thZGRyX2luICAgICAgICBteWFkZHJfaW4sIHBlZXJhZGRyX2luOworICBpbnQJc19saXN0ZW4sIHNfZGF0YTsKKyAgaW50IAlhZGRybGVuOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludAlieXRlc19zZW50OworICBpbnQJcmVxdWVzdF9ieXRlc19yZWN2ZDsKKyAgaW50CXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nOworICBpbnQJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworICAKKyAgc3RydWN0CXNjdHBfcnJfcmVxdWVzdF9zdHJ1Y3QJKnNjdHBfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXNjdHBfcnJfcmVzcG9uc2Vfc3RydWN0CSpzY3RwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJc2N0cF9ycl9yZXN1bHRzX3N0cnVjdAkqc2N0cF9ycl9yZXN1bHRzOworICAKKyAgc2N0cF9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCBzY3RwX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzY3RwX3JyX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHNjdHBfcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2N0cF9ycl9yZXN1bHRzID0KKyAgICAoc3RydWN0IHNjdHBfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X3NjdHBfcnI6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3JyOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IFNDVFBfUlJfUkVTUE9OU0U7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3NjdHBfcnI6IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogYWxsb2NhdGUgdGhlIHJlY3YgYW5kIHNlbmQgcmluZ3Mgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudHMgKi8KKyAgLyogYW5kIG9mZnNldHMuIHJhaiA3Lzk0ICovCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2N0cF9ycjogcmVxdWVzdGVkIHJlY3YgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgc2N0cF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkgICAgc2N0cF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3JyOiByZXF1ZXN0ZWQgc2VuZCBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICBzY3RwX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCSAgICBzY3RwX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogYXQgc29tZSBwb2ludCwgdGhlc2UgbmVlZCB0byBjb21lIHRvIHVzIGZyb20gdGhlIHJlbW90ZSBzeXN0ZW0gKi8KKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgc2N0cF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgIHNjdHBfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJCQkJICAgc2N0cF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICBzY3RwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJCQkgICBzY3RwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHNjdHBfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3JyOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSBzY3RwX3JyX3JlcXVlc3QtPnNlbmRfYnVmX3NpemU7CisgIGxzcl9zaXplX3JlcSA9IHNjdHBfcnJfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZTsKKyAgbG9jX25vZGVsYXkgPSBzY3RwX3JyX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSBzY3RwX3JyX3JlcXVlc3QtPnNvX3JjdmF2b2lkOworICBsb2Nfc25kYXZvaWQgPSBzY3RwX3JyX3JlcXVlc3QtPnNvX3NuZGF2b2lkOworICBub25fYmxvY2sgPSBzY3RwX3JyX3JlcXVlc3QtPm5vbl9ibG9ja2luZzsKKworICBzZXRfaG9zdG5hbWVfYW5kX3BvcnQobG9jYWxfbmFtZSwKKwkJCXBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYoc2N0cF9ycl9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQlzY3RwX3JyX3JlcXVlc3QtPnBvcnQpOworCisgIGxvY2FsX3JlcyA9IGNvbXBsZXRlX2FkZHJpbmZvKGxvY2FsX25hbWUsCisJCQkJbG9jYWxfbmFtZSwKKwkJCQlwb3J0X2J1ZmZlciwKKwkJCQluZl90b19hZihzY3RwX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NUUkVBTSwKKwkJCQlJUFBST1RPX1NDVFAsCisJCQkJMCk7CisKKyAgc19saXN0ZW4gPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgCisgIGlmIChzX2xpc3RlbiA8IDApIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3csIGxldCdzIHNldC11cCB0aGUgc29ja2V0IHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMgKi8KKyAgaWYgKGxpc3RlbihzX2xpc3RlbiwgNSkgPT0gLTEpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLCAmYWRkcmxlbikgPT0gLTEpeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3cgbXlhZGRyX2luIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzICovCisgIC8qIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0IHRoZSAqLworICAvKiBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiAqLworICAKKyAgc2N0cF9ycl9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlciA9IChpbnQpIG50b2hzKG15YWRkcl9pbi5zaW5fcG9ydCk7CisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIDAuMCB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgc2N0cF9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSAoZmxvYXQpMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBzY3RwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisKKyAgaWYgKHNjdHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICBzY3RwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgc2N0cF9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KHNjdHBfcnJfcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIAorICAKKyAgLyogYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3BvbnNlIGJhY2sgdG8gdGhlIGluaXRpYXRvciwgcHVsbCBzb21lIG9mICovCisgIC8qIHRoZSBzb2NrZXQgcGFybXMgZnJvbSB0aGUgZ2xvYmFscyAqLworICBzY3RwX3JyX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHNjdHBfcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgc2N0cF9ycl9yZXNwb25zZS0+bm9fZGVsYXkgPSBsb2Nfbm9kZWxheTsKKyAgc2N0cF9ycl9yZXNwb25zZS0+c29fcmN2YXZvaWQgPSBsb2NfcmN2YXZvaWQ7CisgIHNjdHBfcnJfcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworICBzY3RwX3JyX3Jlc3BvbnNlLT50ZXN0X2xlbmd0aCA9IHNjdHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGg7CisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworCisgIGlmICgoc19kYXRhID0gYWNjZXB0KHNfbGlzdGVuLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl9pbiwKKwkJICAgICAgICZhZGRybGVuKSkgPT0gLTEpIHsKKyAgICAvKiBMZXQncyBqdXN0IHB1bnQuIFRoZSByZW1vdGUgd2lsbCBiZSBnaXZlbiBzb21lIGluZm9ybWF0aW9uICovCisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKworICAvKiB3ZSBkbyBub3QgbmVlZCBldmVudHMgb24gYSAxLXRvLTEgUlIgdGVzdC4gIFRoZSB0ZXN0IHdpbGwgZmluaXNoCisgICAqIG9uY2UgYWxsIHRyYW5zYWN0aW9ucyBhcmUgZG9uZS4KKyAgICovCisKKyAgLyogbm93IHRoYXQgd2UgYXJlIGNvbm5lY3RlZCwgbWFyayB0aGUgc29ja2V0IGFzIG5vbi1ibG9ja2luZyAqLworICBpZiAobm9uX2Jsb2NrKSB7CisgICAgaWYgKCFzZXRfbm9uYmxvY2soc19kYXRhKSkgeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZXRfbm9uYmxvY2siKTsKKwlleGl0KDEpOworICAgIH0KKyAgfQorCisjaWZkZWYgS0xVREdFX1NPQ0tFVF9PUFRJT05TCisgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MgKi8KKyAgLyogYXR0cmlidXRlcyBhY3Jvc3MgYW4gYWNjZXB0KCkgY2FsbC4gSW5jbHVkaW5nIHRoaXMgZ29lcyBhZ2FpbnN0ICovCisgIC8qIG15IGJldHRlciBqdWRnZW1lbnQgOiggcmFqIDExLzk1ICovCisKKyAga2x1ZGdlX3NvY2tldF9vcHRpb25zKHNfZGF0YSk7CisKKyNlbmRpZiAvKiBLTFVER0VfU09DS0VUX09QVElPTlMgKi8KKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3NjdHBfcnI6IGFjY2VwdCBjb21wbGV0ZXMgb24gdGhlIGRhdGEgY29ubmVjdGlvbi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydChzY3RwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHRpbWUsIG9yIHdoZW4gKi8KKyAgLyogd2UgaGF2ZSBleGNoYW5nZWQgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgdHJhbnNhY3Rpb25zLiAqLworICAKKyAgaWYgKHNjdHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggPiAwKSB7CisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIoc2N0cF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0gc2N0cF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCAqIC0xOworICB9CisKKyAgdHJhbnNfcmVjZWl2ZWQgPSAwOworICAKKyAgd2hpbGUgKCghdGltZXNfdXApIHx8ICh0cmFuc19yZW1haW5pbmcgPiAwKSkgeworICAgIGludCBtc2dfZmxhZ3MgPSAwOworCisgICAgdGVtcF9tZXNzYWdlX3B0ciA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICByZXF1ZXN0X2J5dGVzX3JlbWFpbmluZyA9IHNjdHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplOworICAgIHdoaWxlKCEobXNnX2ZsYWdzICYgTVNHX0VPUikpIHsKKyAgICAgIGlmKChyZXF1ZXN0X2J5dGVzX3JlY3ZkPXNjdHBfcmVjdm1zZyhzX2RhdGEsCisJCQkJCXRlbXBfbWVzc2FnZV9wdHIsCisJCQkJCXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nLAorCQkJCQlOVUxMLCAwLAorCQkJCQlOVUxMLCAmbXNnX2ZsYWdzKSkgPCAwKSB7CisJaWYgKGVycm5vID09IEVJTlRSKSB7CisJICAvKiB0aGUgdGltZXIgcG9wcGVkICovCisJICB0aW1lZF9vdXQgPSAxOworCSAgYnJlYWs7CisJfSBlbHNlIGlmIChub25fYmxvY2sgJiYgZXJybm8gPT0gRUFHQUlOKSB7CisJICAgIGNvbnRpbnVlOyAgLyogd2hpbGUgcmVxdWVzdF9ieXRlc19yZW1haW5pbmcgKi8KKwl9CisJbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKwlzZW5kX3Jlc3BvbnNlKCk7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nIC09IHJlcXVlc3RfYnl0ZXNfcmVjdmQ7CisgICAgICB0ZW1wX21lc3NhZ2VfcHRyICs9IHJlcXVlc3RfYnl0ZXNfcmVjdmQ7CisgICAgfQorCisgICAgcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworCisgICAgaWYgKHRpbWVkX291dCkgeworICAgICAgLyogd2UgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgYmFzZWQgb24gdGltZSAtIGxldHMgKi8KKyAgICAgIC8qIGJhaWwgb3V0IG9mIGhlcmUgbm93Li4uICovCisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJ5bzU1XG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQkJCQkJCQorICAgICAgYnJlYWs7CisgICAgfQorICAgIAorCisgICAgLyogTm93LCBzZW5kIHRoZSByZXNwb25zZSB0byB0aGUgcmVtb3RlCisgICAgICogSW4gMS10by0xIEFQSSBkZXN0aW5hdGlvbiBhZGRyIGlzIG5vdCBuZWVkZWQuCisgICAgICovCisgICAgd2hpbGUgKChieXRlc19zZW50PXNjdHBfc2VuZG1zZyhzX2RhdGEsCisJCQkJICAgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJCQkgICAgc2N0cF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgICBOVUxMLCAwLAorCQkJCSAgICAwLCAwLCAwLCAwLCAwKSkgPT0gLTEpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHRoZSB0ZXN0IHRpbWVyIGhhcyBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWJyZWFrOworICAgICAgfSBlbHNlIGlmIChub25fYmxvY2sgJiYgZXJybm8gPT0gRUFHQUlOKSB7CisJIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IDk4MjsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKHRpbWVkX291dCkgeworICAgICAgLyogd2UgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgYmFzZWQgb24gdGltZSAtIGxldHMgKi8KKyAgICAgIC8qIGJhaWwgb3V0IG9mIGhlcmUgbm93Li4uICovCisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJ5bzZcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CQkJCQkJCisgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworCisgICAgdHJhbnNfcmVjZWl2ZWQrKzsKKyAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisgICAgICB0cmFuc19yZW1haW5pbmctLTsKKyAgICB9CisgIH0KKyAgCisgIAorICAvKiBUaGUgbG9vcCBub3cgZXhpdHMgZHVlIHRvIHRpbWVvdXQgb3IgdHJhbnNhY3Rpb24gY291bnQgYmVpbmcgKi8KKyAgLyogcmVhY2hlZCAqLworICAKKyAgY3B1X3N0b3Aoc2N0cF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIHN0b3BfdGltZXIoKTsKKworICBpZiAodGltZWRfb3V0KSB7CisgICAgLyogd2UgZW5kZWQgdGhlIHRlc3QgYnkgdGltZSwgd2hpY2ggd2FzIGF0IGxlYXN0IDIgc2Vjb25kcyAqLworICAgIC8qIGxvbmdlciB0aGFuIHdlIHdhbnRlZCB0byBydW4uIHNvLCB3ZSB3YW50IHRvIHN1YnRyYWN0ICovCisgICAgLyogUEFEX1RJTUUgZnJvbSB0aGUgZWxhcHNlZF90aW1lLiAqLworICAgIGVsYXBzZWRfdGltZSAtPSBQQURfVElNRTsKKyAgfQorCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zY3RwX3JyOiBnb3QgJWQgdHJhbnNhY3Rpb25zXG4iLAorCSAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2N0cF9ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZCA9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCSAgICAoc2N0cF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkgICAgIHNjdHBfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSkpOworICBzY3RwX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkID0gdHJhbnNfcmVjZWl2ZWQ7CisgIHNjdHBfcnJfcmVzdWx0cy0+ZWxhcHNlZF90aW1lICAgPSBlbGFwc2VkX3RpbWU7CisgIHNjdHBfcnJfcmVzdWx0cy0+Y3B1X21ldGhvZCAgICAgPSBjcHVfbWV0aG9kOworICBzY3RwX3JyX3Jlc3VsdHMtPm51bV9jcHVzICAgICAgID0gbGliX251bV9sb2NfY3B1czsKKyAgaWYgKHNjdHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICBzY3RwX3JyX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbChlbGFwc2VkX3RpbWUpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zY3RwX3JyOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiB3ZSBhcmUgbm93IGRvbmUgd2l0aCB0aGUgc29ja2V0cyAqLworICBzZW5kX3Jlc3BvbnNlKCk7CisKKyAgY2xvc2Uoc19kYXRhKTsKKyAgY2xvc2Uoc19saXN0ZW4pOworICAKK30KKworDAorCisvKiB0aGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgc2VuZGluZyAobmV0cGVyZikgc2lkZSBvZiB0aGUKKyAgIFNDVFBfUlJfMVRPTUFOWSB0ZXN0ICovCisKK3ZvaWQKK3NlbmRfc2N0cF9ycl8xdG9NYW55KHJlbW90ZV9ob3N0KQorICAgICBjaGFyCXJlbW90ZV9ob3N0W107Cit7CisgIAorICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCAgUmVzcC4gICBFbGFwc2VkICBUcmFucy5cblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICAgU2l6ZSAgICBUaW1lICAgICBSYXRlICAgICAgICAgXG5cCitieXRlcyAgQnl0ZXMgIGJ5dGVzICAgIGJ5dGVzICAgc2Vjcy4gICAgcGVyIHNlYyAgIFxuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICAlLTZkICAlLTYuMmYgICAlNy4yZiAgIFxuIjsKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCBSZXNwLiAgRWxhcHNlZCBUcmFucy4gICBDUFUgICAgQ1BVICAgIFMuZGVtICAgUy5kZW1cblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICBTaXplICAgVGltZSAgICBSYXRlICAgICBsb2NhbCAgcmVtb3RlIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgIHNlY3MuICAgcGVyIHNlYyAgJSUgJWMgICAgJSUgJWMgICAgdXMvVHIgICB1cy9UclxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2YgJWNcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAlLTZkICUtNi4yZiAgJS02LjJmICAlLTYuMmYgJS02LjJmICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICprc2lua19mbXQgPSAiXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0XG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdlxuXAorJTVkICAlNWQgICAlNWQgICU1ZFxuIjsKKyAgCisgIAorICBpbnQJCQl0aW1lZF9vdXQgPSAwOworICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIGludAlsZW4sIGogPSAwOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJbnVtbWVzc2FnZXM7CisgIGludAkqc2VuZF9zb2NrZXQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGRvdWJsZQlieXRlc194ZmVyZDsKKyAgaW50ICAgbXNnX2ZsYWdzID0gMDsKKworICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIAorICBpbnQJcnNwX2J5dGVzX2xlZnQ7CisgIGludAlyc3BfYnl0ZXNfcmVjdmQ7CisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisgIGRvdWJsZQl0aHJ1cHV0OworCisgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXM7CisKKyAgc3RydWN0CXNjdHBfcnJfcmVxdWVzdF9zdHJ1Y3QJKnNjdHBfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXNjdHBfcnJfcmVzcG9uc2Vfc3RydWN0CSpzY3RwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJc2N0cF9ycl9yZXN1bHRzX3N0cnVjdAkqc2N0cF9ycl9yZXN1bHQ7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIGludAlpbnRlcnZhbF9jb3VudDsKKyAgc2lnc2V0X3Qgc2lnbmFsX3NldDsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisgIHNjdHBfcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3Qgc2N0cF9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2N0cF9ycl9yZXNwb25zZSA9CisgICAgKHN0cnVjdCBzY3RwX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNjdHBfcnJfcmVzdWx0ID0KKyAgICAoc3RydWN0IHNjdHBfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICB0aW1lX2hpc3QgPSBISVNUX25ldygpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZSAqLworICAvKiBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50ICovCisgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgIC8qIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKworICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NFUVBBQ0tFVCwKKwkJICAgICBJUFBST1RPX1NDVFAsCisJCSAgICAgMCk7CisKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIHByaW50X3RvcF90ZXN0X2hlYWRlcigiU0NUUCAxLVRPLU1BTlkgUkVRVUVTVC9SRVNQT05TRSBURVNUIixsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisgIH0KKworICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzICovCisgIAorICBzZW5kX3JpbmcgPSBOVUxMOworICByZWN2X3JpbmcgPSBOVUxMOworICBjb25maWRlbmNlX2l0ZXJhdGlvbiA9IDE7CisgIGluaXRfc3RhdCgpOworCisgIHNlbmRfc29ja2V0ID0gbWFsbG9jKHNpemVvZihpbnQpICogbnVtX2Fzc29jaWF0aW9ucyk7CisgIGlmIChzZW5kX3NvY2tldCA9PSBOVUxMKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJDb3VsZCBub3QgY3JlYXRlIHRoZSBzb2NrZXQgYXJyYXkgZm9yICVkIGFzc29jaWF0aW9ucyIsCisJICAgICAgbnVtX2Fzc29jaWF0aW9ucyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgfQorCisgIC8qIHdlIGhhdmUgYSBncmVhdC1iaWcgd2hpbGUgbG9vcCB3aGljaCBjb250cm9scyB0aGUgbnVtYmVyIG9mIHRpbWVzICovCisgIC8qIHdlIHJ1biBhIHBhcnRpY3VsYXIgdGVzdC4gdGhpcyBpcyBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIGEgKi8KKyAgLyogY29uZmlkZW5jZSBpbnRlcnZhbCAoSSByZWFsbHkgc2hvdWxkIGhhdmUgc3RheWVkIGF3YWtlIGR1cmluZyAqLworICAvKiBwcm9ic3RhdHMgOikuIElmIHRoZSB1c2VyIGRpZCBub3QgcmVxdWVzdCBjb25maWRlbmNlIG1lYXN1cmVtZW50ICovCisgIC8qIChubyBjb25maWRlbmNlIGlzIHRoZSBkZWZhdWx0KSB0aGVuIHdlIHdpbGwgb25seSBnbyB0aG91Z2ggdGhlICovCisgIC8qIGxvb3Agb25jZS4gdGhlIGNvbmZpZGVuY2Ugc3R1ZmYgb3JpZ2luYXRlcyBmcm9tIHRoZSBmb2xrcyBhdCBJQk0gKi8KKworICB3aGlsZSAoKChjb25maWRlbmNlIDwgMCkgJiYgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDwgaXRlcmF0aW9uX21heCkpIHx8CisJIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8PSBpdGVyYXRpb25fbWluKSkgeworCisgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgLyogZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZS4gKi8KKworICAgIG51bW1lc3NhZ2VzICAgICA9IDA7CisgICAgYnl0ZXNfeGZlcmQgICAgID0gMC4wOworICAgIHRpbWVzX3VwICAgICAgICA9IDA7CisgICAgdGltZWRfb3V0ICAgICAgID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworCisgICAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlcnMgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LiAqLworICAgIC8qIHNpbmNlIHRoaXMgaXMgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIGRlZmF1bHQgdGhlIHNlbmRfd2lkdGggYW5kICovCisgICAgLyogcmVjdl93aWR0aCB0byAxIGFuZCBub3QgdHdvIHJhaiA3Lzk0ICovCisKKyAgICBpZiAoc2VuZF93aWR0aCA9PSAwKSBzZW5kX3dpZHRoID0gMTsKKyAgICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKyAgCisgICAgaWYgKHNlbmRfcmluZyA9PSBOVUxMKSB7CisgICAgICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgICAgICByZXFfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9vZmZzZXQpOworICAgIH0KKworICAgIGlmIChyZWN2X3JpbmcgPT0gTlVMTCkgeworICAgICAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICAgICAgcnNwX3NpemUsCisJCQkJICAgICAgIGxvY2FsX3JlY3ZfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiovCisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICB9CisgICAgCisgICAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlIHNvY2tldCAqLworICAgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAgIC8qIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkICovCisgICAgLyogbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGV5IHdpbGwgYmUgcGFzc2VkIGFzIDAsIHdoaWNoICovCisgICAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgICAgLyogZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgKi8KKyAgICAvKiBkZWZhdWx0IHRvIDgsIHdoaWNoIHdpbGwgYmUgbm8gYWxpZ25tZW50IGFsdGVyYXRpb25zLiAqLworICAgIAorICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZSA9CURPX1NDVFBfUlJfTUFOWTsKKyAgICBzY3RwX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUgICAgID0JcnNyX3NpemVfcmVxOworICAgIHNjdHBfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZSAgICAgPQlyc3Nfc2l6ZV9yZXE7CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCAgICA9CXJlbW90ZV9yZWN2X2FsaWduOworICAgIHNjdHBfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQgICAgICAgPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCAgICA9CXJlbW90ZV9zZW5kX2FsaWduOworICAgIHNjdHBfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQgICAgICAgPQlyZW1vdGVfc2VuZF9vZmZzZXQ7CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgICAgICA9CXJlcV9zaXplOworICAgIHNjdHBfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSAgICAgPQlyc3Bfc2l6ZTsKKyAgICBzY3RwX3JyX3JlcXVlc3QtPm5vX2RlbGF5CSAgICAgICA9CXJlbV9ub2RlbGF5OworICAgIHNjdHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUgICAgICAgPQlyZW1vdGVfY3B1X3VzYWdlOworICAgIHNjdHBfcnJfcmVxdWVzdC0+Y3B1X3JhdGUJICAgICAgID0JcmVtb3RlX2NwdV9yYXRlOworICAgIHNjdHBfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQgICAgICAgPQlyZW1fcmN2YXZvaWQ7CisgICAgc2N0cF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZCAgICAgICA9CXJlbV9zbmRhdm9pZDsKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICBzY3RwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICAgICA9CXRlc3RfdGltZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBzY3RwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICAgICA9CXRlc3RfdHJhbnMgKiBudW1fYXNzb2NpYXRpb25zCisJCQkJCQkqIC0xOworICAgIH0KKyAgICBzY3RwX3JyX3JlcXVlc3QtPm5vbl9ibG9ja2luZyAgICAgID0gCW5vbl9ibG9jazsKKyAgICBzY3RwX3JyX3JlcXVlc3QtPnBvcnQgICAgICAgICAgICAgID0gICAgICAgYXRvaShyZW1vdGVfZGF0YV9wb3J0KTsKKyAgICBzY3RwX3JyX3JlcXVlc3QtPmlwZmFtaWx5ICAgICAgICAgID0gICAgICAgYWZfdG9fbmYocmVtb3RlX3Jlcy0+YWlfZmFtaWx5KTsKKyAgICBpZiAoZGVidWcgPiAxKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX3NjdHBfcnJfMXRvTWFueTogcmVxdWVzdGluZyBTQ1RQIHJyIHRlc3RcbiIpOworICAgIH0KKyAgICAKKyAgICBzZW5kX3JlcXVlc3QoKTsKKyAgICAKKyAgICAvKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIHJlbGV2YW50IAkqLworICAgIC8qIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrIGludG8gKi8KKyAgICAvKiB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuICBUaGUJKi8KKyAgICAvKiByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwgaGF2ZSBkb25lCSovCisgICAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAgIC8qIGJlZm9yZSBzZW5kaW5nIHRoZSByZXF1ZXN0LCBhbmQgd2lsbCBncmFiIHRoZSBjb3VudGVyIHZhbHVlIHJpZ2h0Ki8KKyAgICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodCovCisgICAgLyogYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMJKi8KKyAgICAvKiBiZWluZyBzZW50IGZvciB0aGUgc2N0cCB0ZXN0cy4JCQkJCSovCisgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgcnNyX3NpemUgICAgICAgICAgPSBzY3RwX3JyX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICAgICAgcnNzX3NpemUgICAgICAgICAgPSBzY3RwX3JyX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplOworICAgICAgcmVtX25vZGVsYXkgICAgICAgPSBzY3RwX3JyX3Jlc3BvbnNlLT5ub19kZWxheTsKKyAgICAgIHJlbW90ZV9jcHVfdXNhZ2UgID0gc2N0cF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHU7CisgICAgICByZW1vdGVfY3B1X3JhdGUgICA9IHNjdHBfcnJfcmVzcG9uc2UtPmNwdV9yYXRlOworICAgICAgLyogbWFrZSBzdXJlIHRoYXQgcG9ydCBudW1iZXJzIGFyZSBpbiBuZXR3b3JrIG9yZGVyICovCisgICAgICBzZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcywKKwkJICAgICAgKHVuc2lnbmVkIHNob3J0KXNjdHBfcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCSAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigiIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgCisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgbGlzdCAgKi8KKyAgICBmb3IgKGogPSAwOyBqIDwgbnVtX2Fzc29jaWF0aW9uczsgaisrKSB7CisgICAgICBzZW5kX3NvY2tldFtqXSA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgICAgIGlmIChzZW5kX3NvY2tldCA8IDApeworCXBlcnJvcigibmV0cGVyZjogc2VuZF9zY3RwX3JyXzF0b01hbnk6IHNjdHAgc3RyZWFtIGRhdGEgc29ja2V0Iik7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgICAgICBpZiAoY29ubmVjdChzZW5kX3NvY2tldFtqXSwgCisJCSAgcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJICByZW1vdGVfcmVzLT5haV9hZGRybGVuKSA8IDApeworCXBlcnJvcigibmV0cGVyZjogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKwkKKwlleGl0KDEpOworICAgICAgfQorICAgICAgCisgICAgICAvKiBUaGUgY2xpZW50IGVuZCBvZiB0aGUgMS10by1NYW55IHRlc3QgdXNlcyAxLXRvLTEgc29ja2V0cy4KKyAgICAgICAqIGl0IGRvZXNuJ3QgbmVlZCBldmVudHMuCisgICAgICAgKi8KKyAgICAgIHNjdHBfZW5hYmxlX2V2ZW50cyhzZW5kX3NvY2tldFtqXSwgMCk7CisgICAgICAKKyAgICAgIGlmIChub25fYmxvY2spIHsKKyAgICAgICAgaWYgKCFzZXRfbm9uYmxvY2soc2VuZF9zb2NrZXRbal0pKSB7CisJICBjbG9zZShzZW5kX3NvY2tldFtqXSk7CisJICBleGl0KDEpOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogRGF0YSBTb2NrZXQgc2V0LXVwIGlzIGZpbmlzaGVkLiBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zLCBlaXRoZXIgdGhlICovCisgICAgLyogY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkIGhhdmUgKi8KKyAgICAvKiBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBleHRyYSAqLworICAgIC8qIG1lc3NhZ2UgYWZ0ZXIgdGhlIGFjY2VwdCBvbiB0aGUgcmVtb3RlLiBJZiBpdCBmYWlsZWQsIHdlJ2xsIHNlZSBpdCAqLworICAgIC8qIGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nIGRhdGEuICovCisgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIHRoZXkgKi8KKyAgICAvKiBjYW4gYmUgZWl0aGVyIHRpbWUgb3IgdHJhbnNhY3Rpb24gYmFzZWQuICovCisgICAgCisgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgICAgdGltZXNfdXAgPSAwOworICAgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXMgKiBudW1fYXNzb2NpYXRpb25zOworICAgICAgdGltZXNfdXAgPSAxOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgICAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgICAgCisgICAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpIHx8IChkZW1vX21vZGUpKSB7CisgICAgICAvKiB6ZXJvIG1lYW5zIHRoYXQgd2UgbmV2ZXIgcGF1c2UsIHNvIHdlIG5ldmVyIHNob3VsZCBuZWVkIHRoZSAqLworICAgICAgLyogaW50ZXJ2YWwgdGltZXIsIHVubGVzcyB3ZSBhcmUgaW4gZGVtb19tb2RlICovCisgICAgICBzdGFydF9pdGltZXIoaW50ZXJ2YWxfd2F0ZSk7CisgICAgfQorICAgIGludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisgICAgLyogZ2V0IHRoZSBzaWduYWwgc2V0IGZvciB0aGUgY2FsbCB0byBzaWdzdXNwZW5kICovCisgICAgaWYgKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgKHNpZ3NldF90ICopTlVMTCwgJnNpZ25hbF9zZXQpICE9IDApIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInNlbmRfc2N0cF9ycl8xdG9NYW55OiB1bmFibGUgdG8gZ2V0IHNpZ21hc2sgZXJybm8gJWRcbiIsCisJICAgICAgZXJybm8pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisKKyAgICAvKiBXZSB1c2UgYW4gIk9SIiB0byBjb250cm9sIHRlc3QgZXhlY3V0aW9uLiBXaGVuIHRoZSB0ZXN0IGlzICovCisgICAgLyogY29udHJvbGxlZCBieSB0aW1lLCB0aGUgYnl0ZSBjb3VudCBjaGVjayB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuICovCisgICAgLyogV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3Qgd2lsbCAqLworICAgIC8qIGFsd2F5cyByZXR1cm4gZmFsc2UuIFdoZW4gdGhlIHRlc3QgaXMgZmluaXNoZWQsIHRoZSB3aG9sZSAqLworICAgIC8qIGV4cHJlc3Npb24gd2lsbCBnbyBmYWxzZSBhbmQgd2Ugd2lsbCBzdG9wIHNlbmRpbmcgZGF0YS4gSSB0aGluayBJICovCisgICAgLyoganVzdCBhcmJpdHJhcmlseSBkZWNyZW1lbnQgdHJhbnNfcmVtYWluaW5nIGZvciB0aGUgdGltZWQgdGVzdCwgYnV0ICovCisgICAgLyogd2lsbCBub3QgZG8gdGhhdCBqdXN0IHlldC4uLiBPbmUgb3RoZXIgcXVlc3Rpb24gaXMgd2hldGhlciBvciBub3QgKi8KKyAgICAvKiB0aGUgc2VuZCBidWZmZXIgYW5kIHRoZSByZWNlaXZlIGJ1ZmZlciBzaG91bGQgYmUgdGhlIHNhbWUgYnVmZmVyLiAqLworCisjaWZkZWYgV0FOVF9GSVJTVF9CVVJTVAorICAgIHsKKyAgICAgIGludCBpOworICAgICAgZm9yIChqID0gMDsgaiA8IG51bV9hc3NvY2lhdGlvbnM7IGorKykgeworCSAgZm9yIChpID0gMDsgaSA8IGZpcnN0X2J1cnN0X3NpemU7IGkrKykgeworCSAgICBpZigobGVuPXNjdHBfc2VuZG1zZyhzZW5kX3NvY2tldFtqXSwKKwkJCSBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsIHNlbmRfc2l6ZSwKKwkJCSByZW1vdGVfcmVzLT5haV9hZGRyLAorCQkJIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4sCisJCQkgMCwgMCwgMCwgMCwgMCkpICE9IHJlcV9zaXplKSB7CisJICAgICAgLyogd2Ugc2hvdWxkIG5ldmVyIGhpdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IGluIHRoZSBmaXJzdCBidXJzdCAqLworCSAgICAgIHBlcnJvcigic2VuZF9zY3RwX3JyXzF0b01hbnk6IGluaXRpYWwgYnVyc3QgZGF0YSBzZW5kIGVycm9yIik7CisJICAgICAgZXhpdCgxKTsKKwkgICAgfQorCSAgfQorICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBXQU5UX0ZJUlNUX0JVUlNUICovCisKKyAgICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgICAvKiBzZW5kIHRoZSByZXF1ZXN0LiB3ZSBhc3N1bWUgdGhhdCBpZiB3ZSB1c2UgYSBibG9ja2luZyBzb2NrZXQsICovCisgICAgICAvKiB0aGUgcmVxdWVzdCB3aWxsIGJlIHNlbnQgYXQgb25lIHNob3QuICovCisgICAgICAKKyAgICAgIC8qIHRoaXMgaXMgYSBmYWlybHkgcG9vciB3YXkgb2YgdGVzdGluZyAxdG9NYW55IGNvbm5lY3Rpb25zLgorICAgICAgICogRm9yIGVhY2ggYXNzb2NpYXRpb24gd2UgbWVhc3VyZSByb3VuZCB0cmlwIHRpbWUgdG8gYWNjb3VudCBmb3IKKyAgICAgICAqIGFueSBkZWxheSBpbiBsb29rdXBzIGFuZCBkZWxpdmVyeS4gIFRvIHN0cmVzcyB0aGUgc2VydmVyIGEgYml0CisgICAgICAgKiBtb3JlIHdlIHdvdWxkIG5lZWQgYSBkaXN0cmlidXRlZCBjbGllbnQgdGVzdCwgb3IgYXQgbGVhc3QgbXVsdGlwbGUKKyAgICAgICAqIHByb2Nlc3Nlcy4gIEkgd2FudCB0byBmb3JjZSBhcyBtdWNoIHBhcmFsZWxsaXNtIGFzIHBvc3NpYmxlLCBidXQKKyAgICAgICAqIHRoaXMgd2lsbCBkbyBmb3IgdGhlIGZpc3QgdGFrZS4gdmxhZAorICAgICAgICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtX2Fzc29jaWF0aW9uczsgaisrKSB7CisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKwkvKiB0aW1lc3RhbXAganVzdCBiZWZvcmUgb3VyIGNhbGwgdG8gc2VuZCwgYW5kIHRoZW4gYWdhaW4ganVzdCAqLworCS8qIGFmdGVyIHRoZSByZWNlaXZlIHJhaiA4Lzk0ICovCisJZ2V0dGltZW9mZGF5KCZ0aW1lX29uZSxOVUxMKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCQorCXdoaWxlICgobGVuPXNjdHBfc2VuZG1zZyhzZW5kX3NvY2tldFtqXSwKKwkJCQkgc2VuZF9yaW5nLT5idWZmZXJfcHRyLCBzZW5kX3NpemUsCisJCQkJIHJlbW90ZV9yZXMtPmFpX2FkZHIsCisJCQkJIHJlbW90ZV9yZXMtPmFpX2FkZHJsZW4sCisJCQkJIDAsIDAsIDAsIDAsIDApKSAhPSByZXFfc2l6ZSkgeworCSAgaWYgKG5vbl9ibG9jayAmJiBlcnJubyA9PSBFQUdBSU4pIHsKKwkgICAgLyogdHJ5IHNlbmRpbmcgYWdhaW4gKi8KKwkgICAgY29udGludWU7CisJICB9IGVsc2UgaWYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IDApKSB7CisJICAgIC8qIHdlIGhpdCB0aGUgZW5kIG9mIGEgKi8KKwkgICAgLyogdGltZWQgdGVzdC4gKi8KKwkgICAgdGltZWRfb3V0ID0gMTsKKwkgICAgYnJlYWs7CisJICB9CisJICBwZXJyb3IoInNlbmRfc2N0cF9ycl8xdG9NYW55OiBkYXRhIHNlbmQgZXJyb3IiKTsKKwkgIGV4aXQoMSk7CisJfQorCisJaWYgKHRpbWVkX291dCkgeworCSAgLyogd2UgbWF5IGhhdmUgYmVlbiBpbiBhIG5lc3RlZCB3aGlsZSBsb29wIC0gd2UgbmVlZCAqLworCSAgLyogYW5vdGhlciBjYWxsIHRvIGJyZWFrLiAqLworCSAgYnJlYWs7CisJfQorCQorCS8qIHNldHVwIGZvciB0aGUgbmV4dCB0aW1lICovCisJc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworCQorCXJzcF9ieXRlc19sZWZ0ID0gcnNwX3NpemU7CisJdGVtcF9tZXNzYWdlX3B0ciAgPSByZWN2X3JpbmctPmJ1ZmZlcl9wdHI7CisJd2hpbGUgKCEobXNnX2ZsYWdzICYgTVNHX0VPUikpIHsKKwkgIGlmKChyc3BfYnl0ZXNfcmVjdmQgPSBzY3RwX3JlY3Ztc2coc2VuZF9zb2NrZXRbal0sCisJCQkJCSAgICAgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCQkJICAgICByc3BfYnl0ZXNfbGVmdCwKKwkJCQkJICAgICBOVUxMLCAwLAorCQkJCQkgICAgIE5VTEwsICZtc2dfZmxhZ3MpKSA8IDApIHsKKwkgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJICAgICAgLyogV2UgaGl0IHRoZSBlbmQgb2YgYSB0aW1lZCB0ZXN0LiAqLworCSAgICAgIHRpbWVkX291dCA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0gZWxzZSBpZiAobm9uX2Jsb2NrICYmIGVycm5vID09IEVBR0FJTikgeworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisJICAgIHBlcnJvcigic2VuZF9zY3RwX3JyXzF0b01hbnk6IGRhdGEgcmVjdiBlcnJvciIpOworCSAgICBleGl0KDEpOworCSAgfQorCSAgcnNwX2J5dGVzX2xlZnQgLT0gcnNwX2J5dGVzX3JlY3ZkOworCSAgdGVtcF9tZXNzYWdlX3B0ciAgKz0gcnNwX2J5dGVzX3JlY3ZkOworCX0JCisJcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworCQorCWlmICh0aW1lZF9vdXQpIHsKKwkgIC8qIHdlIG1heSBoYXZlIGJlZW4gaW4gYSBuZXN0ZWQgd2hpbGUgbG9vcCAtIHdlIG5lZWQgKi8KKwkgIC8qIGFub3RoZXIgY2FsbCB0byBicmVhay4gKi8KKwkgIGJyZWFrOworCX0KKwkKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorCWdldHRpbWVvZmRheSgmdGltZV90d28sTlVMTCk7CisJSElTVF9hZGQodGltZV9oaXN0LGRlbHRhX21pY3JvKCZ0aW1lX29uZSwmdGltZV90d28pKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCQorCW51bW1lc3NhZ2VzKys7ICAgICAgICAgIAorCWlmICh0cmFuc19yZW1haW5pbmcpIHsKKwkgIHRyYW5zX3JlbWFpbmluZy0tOworCX0KKwkKKwlpZiAoZGVidWcgPiAzKSB7CisJICBpZiAoKG51bW1lc3NhZ2VzICUgMTAwKSA9PSAwKSB7CisJICAgIGZwcmludGYod2hlcmUsCisJCSAgICAiVHJhbnNhY3Rpb24gJWQgY29tcGxldGVkXG4iLAorCQkgICAgbnVtbWVzc2FnZXMpOworCSAgICBmZmx1c2god2hlcmUpOworCSAgfQorCX0KKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogQXQgdGhpcyBwb2ludCB3ZSB1c2VkIHRvIGNhbGwgc2h1dGRvd24gb24gdGhlIGRhdGEgc29ja2V0IHRvIGJlICovCisgICAgLyogc3VyZSBhbGwgdGhlIGRhdGEgd2FzIGRlbGl2ZXJlZCwgYnV0IHRoaXMgd2FzIG5vdCBnZXJtYW5lIGluIGEgKi8KKyAgICAvKiByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIGFuZCBpdCB3YXMgY2F1c2luZyB0aGUgdGVzdHMgdG8gImhhbmciIHdoZW4gKi8KKyAgICAvKiB0aGV5IHdlcmUgYmVpbmcgY29udHJvbGxlZCBieSB0aW1lLiBTbywgSSBoYXZlIHJlcGxhY2VkIHRoaXMgKi8KKyAgICAvKiBzaHV0ZG93biBjYWxsIHdpdGggYSBjYWxsIHRvIGNsb3NlIHRoYXQgY2FuIGJlIGZvdW5kIGxhdGVyIGluIHRoZSAqLworICAgIC8qIHByb2NlZHVyZS4gKi8KKyAgICAKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgICAgLyogd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgICAKKyAgICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgKi8KKwkJCQkJCS8qIG1lYXN1cmVkPyBob3cgbG9uZyAqLworCQkJCQkJLyogZGlkIHdlIHJlYWxseSBydW4/ICovCisgICAgCisgICAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIHJlbW90ZSBlbmQuIFRoZSByZW1vdGUgd2lsbCBoYXZlICovCisgICAgLyogY2FsY3VsYXRlZCBDUFUgdXRpbGl6YXRpb24uIElmIGl0IHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCAqLworICAgIC8qIHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLyAKKyAgICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhyb3VnaHB1dCB3YXMgZm9yIHRoZSB0ZXN0LiAqLworICAKKyAgICBieXRlc194ZmVyZAk9IChyZXFfc2l6ZSAqIG51bW1lc3NhZ2VzKSArIChyc3Bfc2l6ZSAqIG51bW1lc3NhZ2VzKTsKKyAgICB0aHJ1cHV0CT0gbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lOworICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAgIC8qIHV0aWxpemF0aW9uIGZvciB0aGUgc3lzdGVtKHMpICovCisgICAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgICAvKiBhIG5vdGUgb2YgdGhpcyBmb3IgdGhlIHVzZXIncyBiZW5lZml0Li4uKi8KKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24gPSBjYWxjX2NwdV91dGlsKDAuMCk7CisJLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisJLyogbXVsdGlwbHkgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBieSAxMDI0IHRvIGdldCAqLworCS8qICJnb29kIiBudW1iZXJzICovCisJbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgIDAuMCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisJbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHNjdHBfcnJfcmVzdWx0LT5jcHVfdXRpbDsKKwkvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKwkvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisJLyogImdvb2QiIG51bWJlcnMgKi8KKwlyZW1vdGVfc2VydmljZV9kZW1hbmQgPSBjYWxjX3NlcnZpY2VfZGVtYW5kKChkb3VibGUpIG51bW1lc3NhZ2VzKjEwMjQsCisJCQkJCQkgICAgMC4wLAorCQkJCQkJICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgc2N0cF9ycl9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICAgIAorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHdlIHdlcmUgbm90IG1lYXN1cmluZyBjcHUsIGZvciB0aGUgY29uZmlkZW5jZSBzdHVmZiwgd2UgKi8KKyAgICAgIC8qIHNob3VsZCBtYWtlIGl0IC0xLjAgKi8KKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbgk9IChmbG9hdCkgLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgfQorCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW5mb3JtYXRpb24uICovCisgICAgLyogaWYgZGVidWdnaW5nIGlzIG9uLCBjYWxjdWxhdGVfY29uZmlkZW5jZSB3aWxsIHByaW50LW91dCB0aGUgKi8KKyAgICAvKiBwYXJhbWV0ZXJzIHdlIHBhc3MgaXQgKi8KKyAgICAKKyAgICBjYWxjdWxhdGVfY29uZmlkZW5jZShjb25maWRlbmNlX2l0ZXJhdGlvbiwKKwkJCSBlbGFwc2VkX3RpbWUsCisJCQkgdGhydXB1dCwKKwkJCSBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSByZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgIAorICAgIAorICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uKys7CisKKyAgICAvKiB3ZSBhcmUgbm93IGRvbmUgd2l0aCB0aGUgc29ja2V0LCBzbyBjbG9zZSBpdCAqLworICAgIGZvciAoaiA9IDA7IGogPCBudW1fYXNzb2NpYXRpb25zOyBqKyspCisJY2xvc2Uoc2VuZF9zb2NrZXRbal0pOworICB9CisKKyAgcmV0cmlldmVfY29uZmlkZW50X3ZhbHVlcygmZWxhcHNlZF90aW1lLAorCQkJICAgICZ0aHJ1cHV0LAorCQkJICAgICZsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgICAgJnJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkgICAgJmxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJICAgICZyZW1vdGVfc2VydmljZV9kZW1hbmQpOworCisgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworCisgIGlmIChjb25maWRlbmNlIDwgMCkgeworICAgIC8qIHdlIGRpZCBub3QgaGl0IGNvbmZpZGVuY2UsIGJ1dCB3ZXJlIHdlIGFza2VkIHRvIGxvb2sgZm9yIGl0PyAqLworICAgIGlmIChpdGVyYXRpb25fbWF4ID4gMSkgeworICAgICAgZGlzcGxheV9jb25maWRlbmNlKCk7CisgICAgfQorICB9CisKKyAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgbG9jYWxfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKGNwdV9tZXRob2QpOworICAgIHJlbW90ZV9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2Qoc2N0cF9ycl9yZXN1bHQtPmNwdV9tZXRob2QpOworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCWxvY2FsX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQsCisJCXJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCWNwdV90aXRsZSwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGd1ZXNzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgdGhydXB1dCwKKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwKKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICB0aHJ1cHV0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgICB9CisKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzEsCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXNwb25zZXMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICB0aHJ1cHV0KTsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzIsCisJICAgICAgcnNzX3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIAorICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvKiBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBzb21lIG9mIHRoZSAqLworICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAvKiBtb21lbnQsIEkgZG8gbm90IHdpc2ggdG8gZmlndXJlLW91dCBhbGwgdGhlICBmb3JtYXR0aW5nLCBzbyBJIHdpbGwgKi8KKyAgLyoganVzdCBwdXQgdGhpcyBjb21tZW50IGhlcmUgdG8gaGVscCByZW1pbmQgbWUgdGhhdCBpdCBpcyBzb21ldGhpbmcgKi8KKyAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisgIAorICAvKiBob3cgdG8gaGFuZGxlIHRoZSB2ZXJib3NlIGluZm9ybWF0aW9uIGluIHRoZSBwcmVzZW5jZSBvZiAqLworICAvKiBjb25maWRlbmNlIGludGVydmFscyBpcyB5ZXQgdG8gYmUgZGV0ZXJtaW5lZC4uLiByYWogMTEvOTQgKi8KKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8ga25vdyBpdCBhbGwsIHNvIHdlIHdpbGwgZ2l2ZSBpdCB0byBoaW0uICovCisgICAgLyogVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluY2x1ZGUgYXMgbXVjaCBhcyB3ZSBjYW4gZmluZCBhYm91dCAqLworICAgIC8qIFRDUCBzdGF0aXN0aWNzLCB0aGUgYWxpZ25tZW50cyBvZiB0aGUgc2VuZHMgYW5kIHJlY2VpdmVzICovCisgICAgLyogYW5kIGFsbCB0aGF0IHNvcnQgb2Ygcm90Li4uICovCisgICAgCisgICAgZnByaW50Zih3aGVyZSwKKwkgICAga3NpbmtfZm10LAorCSAgICBsb2NhbF9zZW5kX2FsaWduLAorCSAgICByZW1vdGVfcmVjdl9vZmZzZXQsCisJICAgIGxvY2FsX3NlbmRfb2Zmc2V0LAorCSAgICByZW1vdGVfcmVjdl9vZmZzZXQpOworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICBmcHJpbnRmKHdoZXJlLCJcbkhpc3RvZ3JhbSBvZiByZXF1ZXN0L3Jlc3BvbnNlIHRpbWVzXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIEhJU1RfcmVwb3J0KHRpbWVfaGlzdCk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworICB9CisgIAorfQorCisMCisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgKG5ldHNlcnZlcikgc2lkZSBvZiBhIFRDUF9SUiAqLworIC8qIHRlc3QgKi8KK3ZvaWQKK3JlY3Zfc2N0cF9ycl8xdG9NYW55KCkKK3sKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKyAgCisKKyAgc3RydWN0IHNvY2thZGRyX2luICAgICAgICBteWFkZHJfaW47IAkvKiBuZWVkZWQgdG8gZ2V0IHRoZSBwb3J0IG51bWJlciAqLworICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAgIHBlZXJhZGRyOyAgIC8qIHRvIGNvbW11bmljYXRlIHdpdGggcGVlciAqLworICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgY2hhciAgIGxvY2FsX25hbWVbQlVGU0laXTsKKyAgY2hhciAgIHBvcnRfYnVmZmVyW1BPUlRCVUZTSVpFXTsKKyAgaW50ICAgIG1zZ19mbGFnczsKKworICBpbnQJc19yY3Y7CisgIGludCAJYWRkcmxlbjsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CXRyYW5zX3JlY2VpdmVkOworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBpbnQJYnl0ZXNfc2VudDsKKyAgaW50CWJ5dGVzX3JlY3ZkOworICBpbnQJcmVjdl9idWZfc2l6ZTsKKyAgaW50CXRpbWVkX291dCA9IDA7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgCisgIHN0cnVjdAlzY3RwX3JyX3JlcXVlc3Rfc3RydWN0CSpzY3RwX3JyX3JlcXVlc3Q7CisgIHN0cnVjdAlzY3RwX3JyX3Jlc3BvbnNlX3N0cnVjdAkqc2N0cF9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXNjdHBfcnJfcmVzdWx0c19zdHJ1Y3QJKnNjdHBfcnJfcmVzdWx0czsKKyAgCisgIHNjdHBfcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3Qgc2N0cF9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2N0cF9ycl9yZXNwb25zZSA9CisgICAgKHN0cnVjdCBzY3RwX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNjdHBfcnJfcmVzdWx0cyA9CisgICAgKHN0cnVjdCBzY3RwX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9zY3RwX3JyXzF0b01hbnk6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3JyXzF0b01hbnk6IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gU0NUUF9SUl9NQU5ZX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zY3RwX3JyXzF0b01hbnk6IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogYWxsb2NhdGUgdGhlIHJlY3YgYW5kIHNlbmQgcmluZ3Mgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudHMgKi8KKyAgLyogYW5kIG9mZnNldHMuIHJhaiA3Lzk0ICovCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2N0cF9ycl8xdG9NYW55OiByZXF1ZXN0ZWQgcmVjdiBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICBzY3RwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICBzY3RwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3NjdHBfcnJfMXRvTWFueTogcmVxdWVzdGVkIHNlbmQgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgc2N0cF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkgICAgc2N0cF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGF0IHNvbWUgcG9pbnQsIHRoZXNlIG5lZWQgdG8gY29tZSB0byB1cyBmcm9tIHRoZSByZW1vdGUgc3lzdGVtICovCisgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKworICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIHNjdHBfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSwKKwkJCQkgICBzY3RwX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCQkJCSAgIHNjdHBfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgc2N0cF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUsCisJCQkJICAgc2N0cF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkJCQkgICBzY3RwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKworICAKKyAgLyogY3JlYXRlX2RhdGFfc29ja2V0IGV4cGVjdHMgdG8gZmluZCBzb21lIHRoaW5ncyBpbiB0aGUgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcywgc28gc2V0IHRoZSBnbG9iYWxzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuICovCisgIC8qIG9uY2UgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCB3ZSB3aWxsIHNldCB0aGUgcmVzcG9uc2UgdmFsdWVzICovCisgIC8qIGJhc2VkIG9uIHRoZSB1cGRhdGVkIHZhbHVlIG9mIHRob3NlIGdsb2JhbHMuIHJhaiA3Lzk0ICovCisgIGxzc19zaXplX3JlcSA9IHNjdHBfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemVfcmVxID0gc2N0cF9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplOworICBsb2Nfbm9kZWxheSA9IHNjdHBfcnJfcmVxdWVzdC0+bm9fZGVsYXk7CisgIGxvY19yY3Zhdm9pZCA9IHNjdHBfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQ7CisgIGxvY19zbmRhdm9pZCA9IHNjdHBfcnJfcmVxdWVzdC0+c29fc25kYXZvaWQ7CisgIG5vbl9ibG9jayA9IHNjdHBfcnJfcmVxdWVzdC0+bm9uX2Jsb2NraW5nOworCisgIHNldF9ob3N0bmFtZV9hbmRfcG9ydChsb2NhbF9uYW1lLAorCQkgICAgICAgIHBvcnRfYnVmZmVyLAorCQkJbmZfdG9fYWYoc2N0cF9ycl9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQlzY3RwX3JyX3JlcXVlc3QtPnBvcnQpOworCisgIGxvY2FsX3JlcyA9IGNvbXBsZXRlX2FkZHJpbmZvKGxvY2FsX25hbWUsCisJCQkJbG9jYWxfbmFtZSwKKwkJCQlwb3J0X2J1ZmZlciwKKwkJCQluZl90b19hZihzY3RwX3JyX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCQlTT0NLX1NFUVBBQ0tFVCwKKwkJCQlJUFBST1RPX1NDVFAsCisJCQkJMCk7CisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3NjdHBfcnJfMXRvTWFueTogZ3JhYmJpbmcgYSBzb2NrZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBzX3JjdiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfcmN2IDwgMCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfcmN2LCA1KSA9PSAtMSkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19yY3YpOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAKKyAgLyogbm93IGdldCB0aGUgcG9ydCBudW1iZXIgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSAgKi8KKyAgYWRkcmxlbiA9IHNpemVvZihteWFkZHJfaW4pOworICBpZiAoZ2V0c29ja25hbWUoc19yY3YsCisJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfaW4sICZhZGRybGVuKSA9PSAtMSl7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX3Jjdik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIE5vdyBteWFkZHJfaW4gY29udGFpbnMgdGhlIHBvcnQgYW5kIHRoZSBpbnRlcm5ldCBhZGRyZXNzIHRoaXMgaXMgKi8KKyAgLyogcmV0dXJuZWQgdG8gdGhlIHNlbmRlciBhbHNvIGltcGxpY2l0bHkgdGVsbGluZyB0aGUgc2VuZGVyIHRoYXQgdGhlICovCisgIC8qIHNvY2tldCBidWZmZXIgc2l6aW5nIGhhcyBiZWVuIGRvbmUuICovCisgIAorICBzY3RwX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyID0gKGludCkgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICBzY3RwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IChmbG9hdCkwLjA7IAkvKiBhc3N1bWUgbm8gY3B1ICovCisgIHNjdHBfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMDsKKworICBpZiAoc2N0cF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHNjdHBfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICBzY3RwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUoc2N0cF9ycl9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgCisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHNjdHBfcnJfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgc2N0cF9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworICBzY3RwX3JyX3Jlc3BvbnNlLT5ub19kZWxheSA9IGxvY19ub2RlbGF5OworICBzY3RwX3JyX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgc2N0cF9ycl9yZXNwb25zZS0+c29fc25kYXZvaWQgPSBsb2Nfc25kYXZvaWQ7CisgIHNjdHBfcnJfcmVzcG9uc2UtPnRlc3RfbGVuZ3RoID0gc2N0cF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aDsKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgLyogRG9uJ3QgbmVlZCBldmVudHMgKi8KKyAgc2N0cF9lbmFibGVfZXZlbnRzKHNfcmN2LCAwKTsKKworICAvKiBub3cgdGhhdCB3ZSBhcmUgY29ubmVjdGVkLCBtYXJrIHRoZSBzb2NrZXQgYXMgbm9uLWJsb2NraW5nICovCisgIGlmIChub25fYmxvY2spIHsKKyAgICBpZiAoIXNldF9ub25ibG9jayhzX3JjdikpIHsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2V0X25vbmJsb2NrIik7CisJZXhpdCgxKTsKKyAgICB9CisgIH0KKworICAvKiBGSVhNRTogIFRoZSB3YXkgMS10by1NYW55IHRlc3Qgb3BlcmF0ZXMgcmlnaHQgbm93LCB3ZSBhcmUgaW5jbHVkaW5nCisgICAqIGFzc29jaWF0aW9uIHNldHVwIHRpbWUgaW50byBvdXIgbWVhc3VyZW1lbnRzLiAgVGhlIHJlYXNvbiBmb3IgdGhpcworICAgKiBpcyB0aGF0IHRoZSBjbGllbnQgY3JlYXRlcyBtdWx0aXBsZSBlbmRwb2ludHMgYW5kIGNvbm5lY3RzIGVhY2gKKyAgICogZW5kcG9pbnQgdG8gdXMgdXNpbmcgdGhlIGNvbm5lY3QgY2FsbC4gIE9uIHRoaXMgZW5kIHdlIHNpbXBseSBjYWxsCisgICAqIHJlY3Ztc2coKSB0byBnZXQgZGF0YSBiZWN1YXNlIHRoZXJlIGlzIG5vIGVxdWl2YWxlbiBvZiBhY2NlcHQoKSBmb3IKKyAgICogMS10by1NYW55IEFQSS4gIAorICAgKiBJIHRoaW5rIHRoaXMgaXMgT0ssIGJ1dCBpZiBpdCB3ZXJlIHRvIGJlIGZpeGVkLCB0aGUgc2VydmVyIHNpZGUKKyAgICogd291bGQgbmVlZCB0byBrbm93IGhvdyBtYW55IGFzc29jaWF0aW9ucyBhcmUgYmVpbmcgc2V0dXAgYW5kCisgICAqIGhhdmUgYSByZWN2bXNnKCkgbG9vcCB3aXRoIFNDVFBfQVNTT0NfQ0hBTkdFIGV2ZW50cyB3YWl0aW5nIGZvcgorICAgKiBhbGwgdGhlIGFzc29jaWF0aW9ucyB0byBiZSBiZSBlc3RhYmxpc2hlZC4KKyAgICogSSBhbSBwdW50aW5nIG9uIHRoaXMgZm9yIG5vdy4KKyAgICovCisKKworICBhZGRybGVuID0gc2l6ZW9mKHBlZXJhZGRyKTsKKworICAvKiBOb3cgaXQncyB0aW1lIHRvIHN0YXJ0IHJlY2VpdmluZyBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLiBXZSB3aWxsICovCisgIC8qIGZpcnN0IGdyYWIgdGhlIGFwcm9wcmlhdGUgY291bnRlcnMgYW5kIHRoZW4gc3RhcnQgZ3JhYmJpbmcuICovCisgIAorICBjcHVfc3RhcnQoc2N0cF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSk7CisgIAorICAvKiBUaGUgbG9vcCB3aWxsIGV4aXQgd2hlbiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCB0aW1lLCBvciB3aGVuICovCisgIC8qIHdlIGhhdmUgZXhjaGFuZ2VkIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucy4gKi8KKyAgCisgIGlmIChzY3RwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHNjdHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKyBQQURfVElNRSk7CisgIH0KKyAgZWxzZSB7CisgICAgdGltZXNfdXAgPSAxOworICAgIHRyYW5zX3JlbWFpbmluZyA9IHNjdHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKKyAgfQorCisgIHRyYW5zX3JlY2VpdmVkID0gMDsKKyAgCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKworICAgIHJlY3ZfYnVmX3NpemUgPSBzY3RwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZTsKKyAKKyAgICAvKiBSZWNlaXZlIHRoZSBkYXRhLiAgV2UgZG9uJ3QgcGFydGljdWxhcmx5IGNhcmUgd2hpY2ggYXNzb2NpYXRpb24KKyAgICAgKiB0aGUgZGF0YSBjYW1lIGluIG9uLiAgV2UnbGwgc2ltcGx5IGJlIGRvaW5nIGEgcmVjZWl2ZSB1bnRpbGwKKyAgICAgKiB3ZSBnZXQgYW5kIE1TR19FT1IgZmxhZyAobWVhbmluZyB0aGF0IGEgc2luZ2xlIHRyYW5zbWlzc2lvbiB3YXMKKyAgICAgKiByZWNlaXZlZCkgYW5kIGEgc2VuZCB0byB0aGUgc2FtZSBhZGRyZXNzLCBzbyB0aGUgUlIgd291bGQgYmUgZm9yCisgICAgICogdGhlIHNhbWUgYXNzb2NpYXRpb25zLgorICAgICAqIFdlIGNhbiBnZXQgYXdheSB3aXRoIHRoaXMgYmVjYXVzZSB0aGUgY2xpZW50IHdpbGwgZXN0YWJsaXNoIGFsbAorICAgICAqIHRoZSBhc3NvY2lhdGlvbnMgYmVmb3JlIHRyYW5zbWl0dGluZyBhbnkgZGF0YS4gIEFueSBwYXJ0aWFsIGRhdGEKKyAgICAgKiB3aWxsIG5vdCBoYXZlIEVPUiB0aHVzIHdpbGwgd2Ugd2lsbCBub3Qgc2VuZCBhIHJlc3BvbnNlIHVudGlsbAorICAgICAqIHdlIGdldCBldmVyeXRoaW5nLgorICAgICAqLworICAgIAorICAgIGRvIHsKKyAgICAgIG1zZ19mbGFncyA9IDA7CisgICAgICBpZigoYnl0ZXNfcmVjdmQgPSBzY3RwX3JlY3Ztc2coc19yY3YsCisJCQkJICAgICByZWN2X3JpbmctPmJ1ZmZlcl9wdHIsCisJCQkJICAgICByZWN2X2J1Zl9zaXplLAorCQkJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkciwgJmFkZHJsZW4sCisJCQkJICAgICAwLCAmbXNnX2ZsYWdzKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJaWYgKFNPQ0tFVF9FSU5UUihieXRlc19yZWN2ZCkpIHsKKwkgIC8qIHRoZSB0aW1lciBwb3BwZWQgKi8KKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9IGVsc2UgaWYgKG5vbl9ibG9jayAmIGVycm5vID09IEVBR0FJTikgeworCSAgICAvKiBkbyByZWN2bXNnIGFnYWluICovCisJICAgIGNvbnRpbnVlOworCX0KKwluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworCXNlbmRfcmVzcG9uc2UoKTsKKwlleGl0KDEpOworICAgICAgfQorICAgIH0gd2hpbGUoIShtc2dfZmxhZ3MgJiBNU0dfRU9SKSk7CisKKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBiYXNlZCBvbiB0aW1lIC0gbGV0cyAqLworICAgICAgLyogYmFpbCBvdXQgb2YgaGVyZSBub3cuLi4gKi8KKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsInlvNVxuIik7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0JCQkJCQkKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICAvKiBOb3csIHNlbmQgdGhlIHJlc3BvbnNlIHRvIHRoZSByZW1vdGUgKi8KKyAgICB3aGlsZSAoKGJ5dGVzX3NlbnQ9c2N0cF9zZW5kbXNnKHNfcmN2LAorCQkJICAgICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkJICAgICAgc2N0cF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkciwgYWRkcmxlbiwKKwkJCSAgICAgIDAsIDAsIDAsIDAsIDApKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIGlmIChTT0NLRVRfRUlOVFIoYnl0ZXNfc2VudCkpIHsKKwkvKiB0aGUgdGVzdCB0aW1lciBoYXMgcG9wcGVkICovCisJdGltZWRfb3V0ID0gMTsKKwlicmVhazsKKyAgICAgIH0gZWxzZSBpZiAobm9uX2Jsb2NrICYmIGVycm5vID09IEVBR0FJTikgeworCSBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSA5OTI7CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmICh0aW1lZF9vdXQpIHsKKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsInlvNlxuIik7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0JCQkJCQkKKyAgICAgIC8qIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IGJhc2VkIG9uIHRpbWUgLSBsZXRzICovCisgICAgICAvKiBiYWlsIG91dCBvZiBoZXJlIG5vdy4uLiAqLworICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKworICAgIHRyYW5zX3JlY2VpdmVkKys7CisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICB9CisgIAorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0byB0aW1lb3V0IG9yIHRyYW5zYWN0aW9uIGNvdW50IGJlaW5nICovCisgIC8qIHJlYWNoZWQgKi8KKyAgCisgIGNwdV9zdG9wKHNjdHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICBzdG9wX3RpbWVyKCk7CisKKyAgaWYgKHRpbWVkX291dCkgeworICAgIC8qIHdlIGVuZGVkIHRoZSB0ZXN0IGJ5IHRpbWUsIHdoaWNoIHdhcyBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyAgICAvKiBsb25nZXIgdGhhbiB3ZSB3YW50ZWQgdG8gcnVuLiBzbywgd2Ugd2FudCB0byBzdWJ0cmFjdCAqLworICAgIC8qIFBBRF9USU1FIGZyb20gdGhlIGVsYXBzZWRfdGltZS4gKi8KKyAgICBlbGFwc2VkX3RpbWUgLT0gUEFEX1RJTUU7CisgIH0KKworICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2N0cF9ycjogZ290ICVkIHRyYW5zYWN0aW9uc1xuIiwKKwkgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNjdHBfcnJfcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQgPSAodHJhbnNfcmVjZWl2ZWQgKiAKKwkJCQkgICAgKHNjdHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplICsgCisJCQkJICAgICBzY3RwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUpKTsKKyAgc2N0cF9ycl9yZXN1bHRzLT50cmFuc19yZWNlaXZlZCA9IHRyYW5zX3JlY2VpdmVkOworICBzY3RwX3JyX3Jlc3VsdHMtPmVsYXBzZWRfdGltZSAgID0gZWxhcHNlZF90aW1lOworICBzY3RwX3JyX3Jlc3VsdHMtPmNwdV9tZXRob2QgICAgID0gY3B1X21ldGhvZDsKKyAgc2N0cF9ycl9yZXN1bHRzLT5udW1fY3B1cyAgICAgICA9IGxpYl9udW1fbG9jX2NwdXM7CisgIGlmIChzY3RwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgc2N0cF9ycl9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoZWxhcHNlZF90aW1lKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2N0cF9ycjogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldHMgKi8KKyAgY2xvc2Uoc19yY3YpOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisKKwordm9pZAorcHJpbnRfc2N0cF91c2FnZSgpCit7CisKKyAgcHJpbnRmKCIlcyIsc2N0cF91c2FnZSk7CisgIGV4aXQoMSk7CisKK30KK3ZvaWQKK3NjYW5fc2N0cF9hcmdzKGFyZ2MsIGFyZ3YpCisgICAgIGludAlhcmdjOworICAgICBjaGFyCSphcmd2W107CisKK3sKKworI2RlZmluZSBTT0NLRVRTX0FSR1MgIkJEaEg6STpMOm06TTpQOnI6czpTOlZOOlQ6NDYiCisKKyAgZXh0ZXJuIGNoYXIJKm9wdGFyZzsJICAvKiBwb2ludGVyIHRvIG9wdGlvbiBzdHJpbmcJKi8KKyAgCisgIGludAkJYzsKKyAgCisgIGNoYXIJCisgICAgYXJnMVtCVUZTSVpdLCAgLyogYXJndW1lbnQgaG9sZGVycwkJKi8KKyAgICBhcmcyW0JVRlNJWl07CisKKyAgaWYgKG5vX2NvbnRyb2wpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiVGhlIFNDVFAgdGVzdHMgZG8gbm90IGtub3cgaG93IHRvIGRlYWwgd2l0aCBubyBjb250cm9sIHRlc3RzXG4iKTsKKyAgICBleGl0KC0xKTsKKyAgfQorCisgIHN0cm5jcHkobG9jYWxfZGF0YV9wb3J0LCIwIixzaXplb2YobG9jYWxfZGF0YV9wb3J0KSk7CisgIHN0cm5jcHkocmVtb3RlX2RhdGFfcG9ydCwiMCIsc2l6ZW9mKHJlbW90ZV9kYXRhX3BvcnQpKTsKKyAgCisgIC8qIEdvIHRocm91Z2ggYWxsIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBicmVhayB0aGVtICovCisgIC8qIG91dC4gRm9yIHRob3NlIG9wdGlvbnMgdGhhdCB0YWtlIHR3byBwYXJtcywgc3BlY2lmeWluZyBvbmx5ICovCisgIC8qIHRoZSBmaXJzdCB3aWxsIHNldCBib3RoIHRvIHRoYXQgdmFsdWUuIFNwZWNpZnlpbmcgb25seSB0aGUgKi8KKyAgLyogc2Vjb25kIHdpbGwgbGVhdmUgdGhlIGZpcnN0IHVudG91Y2hlZC4gVG8gY2hhbmdlIG9ubHkgdGhlICovCisgIC8qIGZpcnN0LCB1c2UgdGhlIGZvcm0gImZpcnN0LCIgKHNlZSB0aGUgcm91dGluZSBicmVha19hcmdzLi4gKi8KKyAgCisgIHdoaWxlICgoYz0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFNPQ0tFVFNfQVJHUykpICE9IEVPRikgeworICAgIHN3aXRjaCAoYykgeworICAgIGNhc2UgJz8nOgkKKyAgICBjYXNlICc0JzoKKyAgICAgIHJlbW90ZV9kYXRhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICBsb2NhbF9kYXRhX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICc2JzoKKyNpZiBkZWZpbmVkKEFGX0lORVQ2KQorICAgICAgcmVtb3RlX2RhdGFfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICBsb2NhbF9kYXRhX2ZhbWlseSA9IEFGX0lORVQ2OworI2Vsc2UKKyAgICAgIGZwcmludGYoc3RkZXJyLAorCSAgICAgICJUaGlzIG5ldHBlcmYgd2FzIG5vdCBjb21waWxlZCBvbiBhbiBJUHY2IGNhcGFibGUgaG9zdCFcbiIpOworICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICBleGl0KC0xKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisgICAgY2FzZSAnaCc6CisgICAgICBwcmludF9zY3RwX3VzYWdlKCk7CisgICAgICBleGl0KDEpOworICAgIGNhc2UgJ2InOgorI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICAgIGZpcnN0X2J1cnN0X3NpemUgPSBhdG9pKG9wdGFyZyk7CisjZWxzZSAvKiBXQU5UX0ZJUlNUX0JVUlNUICovCisgICAgICBwcmludGYoIkluaXRpYWwgcmVxdWVzdCBidXJzdCBmdW5jdGlvbmFsaXR5IG5vdCBjb21waWxlZC1pbiFcbiIpOworI2VuZGlmIC8qIFdBTlRfRklSU1RfQlVSU1QgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0QnOgorICAgICAgLyogc2V0IHRoZSBub2RlbGF5IGZsYWcgKi8KKyAgICAgIGxvY19ub2RlbGF5ID0gMTsKKyAgICAgIHJlbV9ub2RlbGF5ID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0gnOgorICAgICAgYnJlYWtfYXJnc19leHBsaWNpdChvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSB7CisJLyogbWFrZSBzdXJlIHdlIGxlYXZlIHJvb20gZm9yIHRoZSBOVUxMIHRlcm1pbmF0aW9uIGJveXMgYW5kCisJICAgZ2lybHMuIHJhaiAyMDA1LTAyLTgyICovIAorCXJlbW90ZV9kYXRhX2FkZHJlc3MgPSBtYWxsb2Moc3RybGVuKGFyZzEpKzEpOworCXN0cm5jcHkocmVtb3RlX2RhdGFfYWRkcmVzcyxhcmcxLHN0cmxlbihhcmcxKSk7CisgICAgICB9CisgICAgICBpZiAoYXJnMlswXSkKKwlyZW1vdGVfZGF0YV9mYW1pbHkgPSBwYXJzZV9hZGRyZXNzX2ZhbWlseShhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0wnOgorICAgICAgYnJlYWtfYXJnc19leHBsaWNpdChvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKSB7CisJLyogbWFrZSBzdXJlIHdlIGxlYXZlIHJvb20gZm9yIHRoZSBOVUxMIHRlcm1pbmF0aW9uIGJveXMgYW5kCisJICAgZ2lybHMuIHJhaiAyMDA1LTAyLTgyICovIAorCWxvY2FsX2RhdGFfYWRkcmVzcyA9IG1hbGxvYyhzdHJsZW4oYXJnMSkrMSk7CisJc3RybmNweShsb2NhbF9kYXRhX2FkZHJlc3MsYXJnMSxzdHJsZW4oYXJnMSkpOworICAgICAgfQorICAgICAgaWYgKGFyZzJbMF0pCisJbG9jYWxfZGF0YV9mYW1pbHkgPSBwYXJzZV9hZGRyZXNzX2ZhbWlseShhcmcyKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1AnOgorICAgICAgLyogc2V0IHRoZSBsb2NhbCBhbmQgcmVtb3RlIGRhdGEgcG9ydCBudW1iZXJzIGZvciB0aGUgdGVzdHMgdG8KKwkgYWxsb3cgdGhlbSB0byBydW4gdGhyb3VnaCB0aG9zZSBibGFua2V0eSBibGFuayBlbmQtdG8tZW5kCisJIGJyZWFraW5nIGZpcmV3YWxscy4gcmFqIDIwMDQtMDYtMTUgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlzdHJuY3B5KGxvY2FsX2RhdGFfcG9ydCxhcmcxLHNpemVvZihsb2NhbF9kYXRhX3BvcnQpKTsKKyAgICAgIGlmIChhcmcyWzBdKQkKKwlzdHJuY3B5KHJlbW90ZV9kYXRhX3BvcnQsYXJnMixzaXplb2YocmVtb3RlX2RhdGFfcG9ydCkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgICAvKiBzZXQgbG9jYWwgc29ja2V0IHNpemVzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJbHNzX3NpemVfcmVxID0gY29udmVydChhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCWxzcl9zaXplX3JlcSA9IGNvbnZlcnQoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdTJzoKKyAgICAgIC8qIHNldCByZW1vdGUgc29ja2V0IHNpemVzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJcnNzX3NpemVfcmVxID0gY29udmVydChhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCXJzcl9zaXplX3JlcSA9IGNvbnZlcnQoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdyJzoKKyAgICAgIC8qIHNldCB0aGUgcmVxdWVzdC9yZXNwb25zZSBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCXJlcV9zaXplID0gY29udmVydChhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQkKKwlyc3Bfc2l6ZSA9IGNvbnZlcnQoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdtJzoKKyAgICAgIC8qIHNldCBzaXplIG9mIHRoZSBidWZmZXIgZm9yIGVhY2ggc2VudCBtZXNzYWdlICovCisgICAgICBzZW5kX3NpemUgPSBjb252ZXJ0KG9wdGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICdNJzoKKyAgICAgIC8qIHNldCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciBlYWNoIHJlY2VpdmVkIG1lc3NhZ2UgKi8KKyAgICAgIHJlY3Zfc2l6ZSA9IGNvbnZlcnQob3B0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3QnOgorICAgICAgLyogc2V0IHRoZSB0ZXN0IG5hbWUgKi8KKyAgICAgIHN0cmNweSh0ZXN0X25hbWUsb3B0YXJnKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1cnOgorCS8qIHNldCB0aGUgIndpZHRoIiBvZiB0aGUgdXNlciBzcGFjZSBkYXRhICovCisJLyogYnVmZmVyLiBUaGlzIHdpbGwgYmUgdGhlIG51bWJlciBvZiAqLworCS8qIHNlbmRfc2l6ZSBidWZmZXJzIG1hbGxvYydkIGluIHRoZSAqLworCS8qICpfU1RSRUFNIHRlc3QuIEl0IG1heSBiZSBlbmhhbmNlZCB0byBzZXQgKi8KKwkvKiBib3RoIHNlbmQgYW5kIHJlY2VpdmUgIndpZHRocyIgYnV0IGZvciBub3cgKi8KKwkvKiBpdCBpcyBqdXN0IHRoZSBzZW5kaW5nICpfU1RSRUFNLiAqLworCXNlbmRfd2lkdGggPSBjb252ZXJ0KG9wdGFyZyk7CisJYnJlYWs7CisgICAgY2FzZSAnVic6CisgICAgICAvKiB3ZSB3YW50IHRvIGRvIGNvcHkgYXZvaWRhbmNlIGFuZCB3aWxsIHNldCAqLworICAgICAgLyogaXQgZm9yIGV2ZXJ5dGhpbmcsIGV2ZXJ5d2hlcmUsIGlmIHdlIHJlYWxseSAqLworICAgICAgLyogY2FuLiBvZiBjb3Vyc2UsIHdlIGRvbid0IGtub3cgYW55dGhpbmcgKi8KKyAgICAgIC8qIGFib3V0IHRoZSByZW1vdGUuLi4gKi8KKyNpZmRlZiBTT19TTkRfQ09QWUFWT0lECisgICAgICBsb2Nfc25kYXZvaWQgPSAxOworI2Vsc2UKKyAgICAgIGxvY19zbmRhdm9pZCA9IDA7CisgICAgICBwcmludGYoIkxvY2FsIHNlbmQgY29weSBhdm9pZGFuY2Ugbm90IGF2YWlsYWJsZS5cbiIpOworI2VuZGlmCisjaWZkZWYgU09fUkNWX0NPUFlBVk9JRAorICAgICAgbG9jX3JjdmF2b2lkID0gMTsKKyNlbHNlCisgICAgICBsb2NfcmN2YXZvaWQgPSAwOworICAgICAgcHJpbnRmKCJMb2NhbCByZWN2IGNvcHkgYXZvaWRhbmNlIG5vdCBhdmFpbGFibGUuXG4iKTsKKyNlbmRpZgorICAgICAgcmVtX3NuZGF2b2lkID0gMTsKKyAgICAgIHJlbV9yY3Zhdm9pZCA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAgIC8qIHRoaXMgb3B0b24gYWxsb3dzIHRoZSB1c2VyIHRvIHNldCB0aGUgbnVtYmVyIG9mIAorICAgICAgICogbWVzc2FnZXMgdG8gc2VuZC4gIFRoaXMgaW4gZWZmZWN0IG1vZGlmaWVzIHRoZSB0ZXN0CisgICAgICAgKiB0aW1lLiAgSWYgd2Uga25vdyB0aGUgbWVzc2FnZSBzaXplLCB0aGVuIHRoZSB3ZSBjYW4KKyAgICAgICAqIGV4cHJlc3MgdGhlIHRlc3QgdGltZSBhcyBtZXNzYWdlX3NpemUgKiBudW1iZXJfbWVzc2FnZXMKKyAgICAgICAqLworICAgICAgbXNnX2NvdW50ID0gY29udmVydCAob3B0YXJnKTsKKyAgICAgIGlmIChtc2dfY291bnQgPiAwKQorCSAgdGVzdF90aW1lID0gMDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ0InOgorICAgICAgbm9uX2Jsb2NrID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ1QnOgorICAgICAgbnVtX2Fzc29jaWF0aW9ucyA9IGF0b2kob3B0YXJnKTsKKyAgICAgIGlmIChudW1fYXNzb2NpYXRpb25zIDw9IDEpIHsKKwkgIHByaW50ZigiTnVtYmVyIG9mIFNDVFAgYXNzb2NpYXRpb25zIG11c3QgYmUgPj0gMVxuIik7CisJICBleGl0KDEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfTsKKyAgfQorfQorCisjZW5kaWYgIC8qIFdBTlRfU0NUUCAqLwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9zY3RwLmggYi9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X3NjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjk3ODUzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9zY3RwLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgICAgICAgIENvcHlyaWdodCAoQykgMTk5My0yMDAzIEhld2xldHQtUGFja2FyZCBDb21wYW55CisqLworCisgLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0ZXN0LXNwZWNpZmljIGRlZmluaXRpb25zIGZvciBuZXRwZXJmJ3MgQlNEICovCisgLyogc29ja2V0cyB0ZXN0cyAqLworCisKK3N0cnVjdAlzY3RwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdCAtIHRoZSAqLworCQkJLyogcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHRoYXQgaXMgKi8gCisgIGludAlyZWNlaXZlX3NpemU7ICAgLyogaG93IG1hbnkgYnl0ZXMgZG8gd2Ugd2FudCB0byByZWNlaXZlIGF0IG9uZSAqLworCQkJLyogdGltZT8gKi8gCisgIGludAlyZWN2X2FsaWdubWVudDsgLyogd2hhdCBpcyB0aGUgYWxpZ25tZW50IG9mIHRoZSByZWNlaXZlICovCisJCQkvKiBidWZmZXI/ICovIAorICBpbnQJcmVjdl9vZmZzZXQ7ICAgIC8qIGFuZCBhdCB3aGF0IG9mZnNldCBmcm9tIHRoYXQgYWxpZ25tZW50PyAqLyAKKyAgaW50CW5vX2RlbGF5OyAgICAgICAvKiBkbyB3ZSBkaXNhYmxlIHRoZSBuYWdsZSBhbGdvcml0aG0gZm9yIHNlbmQgKi8KKwkJCS8qIGNvYWxlc2Npbmc/ICovIAorICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUgdXRpbGl6YXRpb24gKi8KKwkJCS8qIG1lYXN1cmVkPyAqLyAKKyAgZmxvYXQJY3B1X3JhdGU7CS8qIGRvIHdlIGtub3cgaG93IGZhc3QgdGhlIGNwdSBpcyBhbHJlYWR5PyAqLyAKKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzb19yY3Zhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIGNvcGllcyBvbiAqLworCQkJLyogcmVjZWl2ZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgZGlydHlfY291bnQ7ICAgIC8qIGhvdyBtYW55IGludGVnZXJzIGluIHRoZSByZWNlaXZlIGJ1ZmZlciAqLworCQkJLyogc2hvdWxkIGJlIG1hZGUgZGlydHkgYmVmb3JlIGNhbGxpbmcgcmVjdj8gKi8gIAorICBpbnQgICBjbGVhbl9jb3VudDsgICAgLyogaG93IG1hbnkgaW50ZWdlcnMgc2hvdWxkIGJlIHJlYWQgZnJvbSB0aGUgKi8KKwkJCS8qIHJlY3YgYnVmZmVyIGJlZm9yZSBjYWxsaW5nIHJlY3Y/ICovIAorICBpbnQgICBwb3J0OwkJLyogdGhlIHRvIHBvcnQgdG8gd2hpY2ggcmVjdiBzaWRlIHNob3VsZCBiaW5kCisJCQkgICB0byBhbGxvdyBuZXRwZXJmIHRvIHJ1biB0aHJvdWdoIGZpcmV3YWxscyAqLworICBpbnQgICBpcGZhbWlseTsJLyogYWRkcmVzcyBmYW1pbHkgb2YgaXBhZGRyZXNzICovCisgIGludCAgIG5vbl9ibG9ja2luZzsgICAvKiBydW4gdGhlIHRlc3QgaW4gbm9uLWJsb2NraW5nIG1vZGUgKi8KK307CisKK3N0cnVjdAlzY3RwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJcmVjZWl2ZV9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlkYXRhX3BvcnRfbnVtYmVyOwkvKiBjb25uZWN0IHRvIG1lIGhlcmUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludAlzb19yY3Zhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8gCisgIGludAlzb19zbmRhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgbm9uX2Jsb2NraW5nOyAgIC8qIHJ1biB0aGUgdGVzdCBpbiBub24tYmxvY2tpbmcgbW9kZSAqLworfTsKKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0IHsKKyAgZG91YmxlICAgICAgICAgYnl0ZXNfcmVjZWl2ZWQ7CisgIHVuc2lnbmVkIGludAkgcmVjdl9jYWxsczsJCisgIGZsb2F0CSAgICAgICAgIGVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CSAgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIGNwdSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIGhhZCB0aGUgcmVtb3RlPyAqLworfTsKKworc3RydWN0CXNjdHBfcnJfcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAlzZW5kX2FsaWdubWVudDsKKyAgaW50CXNlbmRfb2Zmc2V0OworICBpbnQJcmVxdWVzdF9zaXplOworICBpbnQJcmVzcG9uc2Vfc2l6ZTsKKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CS8qIGRvIHdlIGtub3cgaG93IGZhc3QgdGhlIGNwdSBpcz8JKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzb19yY3Zhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHJlY2VpdmUgKi8KKwkJCS8qIGNvcGllcz8gKi8gCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBwb3J0OwkJLyogdGhlIHRvIHBvcnQgdG8gd2hpY2ggcmVjdiBzaWRlIHNob3VsZCBiaW5kCisJCQkgICB0byBhbGxvdyBuZXRwZXJmIHRvIHJ1biB0aHJvdWdoIGZpcmV3YWxscyAqLworICBpbnQgICBpcGZhbWlseTsJLyogYWRkcmVzcyBmYW1pbHkgb2YgaXBhZGRyZXNzICovCisgIGludCAgIG5vbl9ibG9ja2luZzsgICAvKiBydW4gdGhlIHRlc3QgaW4gbm9uLWJsb2NraW5nIG1vZGUgKi8KK307CisKK3N0cnVjdAlzY3RwX3JyX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CS8qIGNvbm5lY3QgdG8gbWUgaGVyZQkqLworICBmbG9hdAljcHVfcmF0ZTsJCS8qIGNvdWxkIHdlIG1lYXN1cmUJKi8KKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLworICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIG5vbl9ibG9ja2luZzsgICAvKiBydW4gdGhlIHRlc3QgaW4gbm9uLWJsb2NraW5nIG1vZGUgKi8KK307CisKK3N0cnVjdCBzY3RwX3JyX3Jlc3VsdHNfc3RydWN0IHsKKyAgdW5zaWduZWQgaW50ICBieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIHVuc2lnbmVkIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CSAgICAgICAgZWxhcHNlZF90aW1lOwkvKiBob3cgbG9uZyB0aGUgdGVzdCByYW4gKi8KKyAgZmxvYXQJICAgICAgICBjcHVfdXRpbDsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGZsb2F0CSAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgIGNwdV9tZXRob2Q7ICAgIC8qIGhvdyB3YXMgY3B1IHV0aWwgbWVhc3VyZWQ/ICovCisgIGludCAgICAgICAgICAgbnVtX2NwdXM7ICAgICAgLyogaG93IG1hbnkgQ1BVcyBoYWQgdGhlIHJlbW90ZT8gKi8KK307CisKKyNkZWZpbmUgU0NUUF9TTkRSQ1ZfSU5GT19FVgkJMHgwMQorI2RlZmluZSBTQ1RQX0FTU09DX0NIQU5HRV9FVgkJMHgwMgorI2RlZmluZSBTQ1RQX1BFRVJBRERSX0NIQU5HRV9FVgkJMHgwNAorI2RlZmluZSBTQ1RQX1NORF9GQUlMRURfRVYJCTB4MDgKKyNkZWZpbmUgU0NUUF9SRU1PVEVfRVJST1JfRVYJCTB4MTAKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9FVgkJMHgyMAorI2RlZmluZSBTQ1RQX1BEX0VWCQkJMHg0MAorI2RlZmluZSBTQ1RQX0FEQVBUX0VWCQkJMHg4MAorCit0eXBlZGVmIGVudW0gc2N0cF9kaXNwb3NpdGlvbiB7CisgICAgU0NUUF9PSyA9IDEsCisgICAgU0NUUF9DTE9TRSwKK30gc2N0cF9kaXNwb3NpdGlvbl90OworCitleHRlcm4gdm9pZCBzZW5kX3NjdHBfc3RyZWFtKCk7CitleHRlcm4gdm9pZCBzZW5kX3NjdHBfcnIoKTsKKworZXh0ZXJuIHZvaWQgcmVjdl9zY3RwX3N0cmVhbSgpOworZXh0ZXJuIHZvaWQgcmVjdl9zY3RwX3JyKCk7CisKK2V4dGVybiB2b2lkIGxvY19jcHVfcmF0ZSgpOworZXh0ZXJuIHZvaWQgcmVtX2NwdV9yYXRlKCk7CmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X3NkcC5jIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9zZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZmZDNlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9zZHAuYwpAQCAtMCwwICsxLDM1NTMgQEAKKyNpZm5kZWYgbGludAorY2hhcgluZXR0ZXN0X3NkcFtdPSJcCitAKCMpbmV0dGVzdF9zZHAuYyAoYykgQ29weXJpZ2h0IDIwMDcgSGV3bGV0dC1QYWNrYXJkIENvLiBWZXJzaW9uIDIuNC40IjsKKyNlbHNlCisjZGVmaW5lIERJUlRZCisjZGVmaW5lIFdBTlRfSElTVE9HUkFNCisjZGVmaW5lIFdBTlRfSU5URVJWQUxTCisjZW5kaWYgLyogbGludCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCQkJCQkJCQkqLworLyoJbmV0dGVzdF9zZHAuYwkJCQkJCSovCisvKgkJCQkJCQkJKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzY2FuX3NkcF9hcmdzKCkgICAgICAgIGdldCB0aGUgc2RwIGNvbW1hbmQgbGluZSBhcmdzICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKgl0aGUgYWN0dWFsIHRlc3Qgcm91dGluZXMuLi4JCQkJKi8KKy8qCQkJCQkJCQkqLworLyoJc2VuZF9zZHBfc3RyZWFtKCkJcGVyZm9ybSBhIHNkcCBzdHJlYW0gdGVzdAkqLworLyoJcmVjdl9zZHBfc3RyZWFtKCkJCQkJCSovCisvKglzZW5kX3NkcF9ycigpCQlwZXJmb3JtIGEgc2RwIHJlcXVlc3QvcmVzcG9uc2UJKi8KKy8qCXJlY3Zfc2RwX3JyKCkJCQkJCQkqLworLyoJCQkJCQkJCSovCisvKiAgICAgIHJlbGllcyBvbiBjcmVhdGVfZGF0YV9zb2NrZXQgaW4gbmV0dGVzdF9ic2QuYyAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXQU5UX1NEUCkKKyAgICAgCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmZGVmIE5PU1RETElCSAorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2Vsc2UgLyogTk9TVERMSUJIICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYgLyogTk9TVERMSUJIICovCisKKyNpZiAhZGVmaW5lZChfX1ZNUykKKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisjZW5kaWYgLyogIWRlZmluZWQoX19WTVMpICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKKy8qIHdvdWxkIHNlZW0gdGhhdCBub3QgYWxsIHNkcC5oIGZpbGVzIGRlZmluZSBhIE1TR19FT0YsIGJ1dCB0aGF0CisgICBNU0dfRU9GIGNhbiBiZSB0aGUgc2FtZSBhcyBNU0dfRklOIHNvIGxldHMgd29yayB3aXRoIHRoYXQKKyAgIGFzc3VtcHRpb24uICBpbml0aWFsIGZpbmQgYnkgSm9uIFBlZGVyc2VuLiByYWogMjAwNi0wMi0wMSAqLworI2lmbmRlZiBNU0dfRU9GCisjaWZkZWYgTVNHX0ZJTgorI2RlZmluZSBNU0dfRU9GIE1TR19GSU4KKyNlbHNlCisjZXJyb3IgTXVzdCBoYXZlIGVpdGhlciBNU0dfRU9GIG9yIE1TR19GSU4gZGVmaW5lZAorI2VuZGlmCisjZW5kaWYgCisKKyNpbmNsdWRlICJuZXRsaWIuaCIKKyNpbmNsdWRlICJuZXRzaC5oIgorLyogZ2V0IHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBmcm9tIG5ldHRlc3RfYnNkLmMgKi8KKyNpbmNsdWRlICJuZXR0ZXN0X2JzZC5oIgorI2luY2x1ZGUgIm5ldHRlc3Rfc2RwLmgiCisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorI2lmZGVmIF9fc2dpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBfX3NnaSAqLworI2luY2x1ZGUgImhpc3QuaCIKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisjaWZkZWYgV0FOVF9GSVJTVF9CVVJTVAorZXh0ZXJuIGludCBmaXJzdF9idXJzdF9zaXplOworI2VuZGlmIC8qIFdBTlRfRklSU1RfQlVSU1QgKi8KKworDAorCisvKiB0aGVzZSB2YXJpYWJsZXMgYXJlIHNwZWNpZmljIHRvIFNEUCB0ZXN0cy4gZGVjbGFyZSAqLworLyogdGhlbSBzdGF0aWMgdG8gbWFrZSB0aGVtIGdsb2JhbCBvbmx5IHRvIHRoaXMgZmlsZS4gKi8KKworc3RhdGljIGludAkKKyAgbXNnX2NvdW50ID0gMCwJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHRyYW5zbWl0IG9uIGFzc29jaWF0aW9uICovCisgIG5vbl9ibG9jayA9IDAsCS8qIGRlZmF1bHQgdG8gYmxvY2tpbmcgc29ja2V0cyAqLworICBudW1fYXNzb2NpYXRpb25zID0gMTsgLyogbnVtYmVyIG9mIGFzc29jaWF0aW9ucyBvbiB0aGUgZW5kcG9pbnQgKi8KKworc3RhdGljICBpbnQgY29uZmlkZW5jZV9pdGVyYXRpb247CitzdGF0aWMgIGNoYXIgIGxvY2FsX2NwdV9tZXRob2Q7CitzdGF0aWMgIGNoYXIgIHJlbW90ZV9jcHVfbWV0aG9kOworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lX29uZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lX3R3bzsKK3N0YXRpYyBISVNUIHRpbWVfaGlzdDsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisKK2NoYXIgc2RwX3VzYWdlW10gPSAiXG5cCitVc2FnZTogbmV0cGVyZiBbZ2xvYmFsIG9wdGlvbnNdIC0tIFt0ZXN0IG9wdGlvbnNdIFxuXAorXG5cCitTRFAgU29ja2V0cyBUZXN0IE9wdGlvbnM6XG5cCisgICAgLWIgbnVtYmVyICAgICAgICAgU2VuZCBudW1iZXIgcmVxdWVzdHMgYXQgdGhlIHN0YXJ0IG9mIF9SUiB0ZXN0c1xuXAorICAgIC1EIFtMXVssUl0gICAgICAgIFNldCBTRFBfTk9ERUxBWSBsb2NhbGx5IGFuZC9vciByZW1vdGVseVxuXAorICAgIC1oICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyB0ZXh0XG5cCisgICAgLUggbmFtZSxmYW0gICAgICAgVXNlIG5hbWUgKG9yIElQKSBhbmQgZmFtaWx5IGFzIHRhcmdldCBvZiBkYXRhIGNvbm5lY3Rpb25cblwKKyAgICAtTCBuYW1lLGZhbSAgICAgICBVc2UgbmFtZSAob3IgSVApIGFuZCBmYW1pbHkgYXMgc291cmNlIG9mIGRhdGEgY29ubmV4dGlvblxuXAorICAgIC1tIGJ5dGVzICAgICAgICAgIFNldCB0aGUgc2l6ZSBvZiBlYWNoIHNlbnQgbWVzc2FnZVxuXAorICAgIC1NIGJ5dGVzICAgICAgICAgIFNldCB0aGUgc2l6ZSBvZiBlYWNoIHJlY2VpdmVkIG1lc3NhZ2VzXG5cCisgICAgLVAgbG9jYWxbLHJlbW90ZV0gU2V0IHRoZSBsb2NhbC9yZW1vdGUgcG9ydCBmb3IgdGhlIGRhdGEgc29ja2V0XG5cCisgICAgLXIgcmVxLFtyc3BdICAgICAgU2V0IHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMgKF9SUiB0ZXN0cylcblwKKyAgICAtcyBzZW5kWyxyZWN2XSAgICBTZXQgbG9jYWwgc29ja2V0IHNlbmQvcmVjdiBidWZmZXIgc2l6ZXNcblwKKyAgICAtUyBzZW5kWyxyZWN2XSAgICBTZXQgcmVtb3RlIHNvY2tldCBzZW5kL3JlY3YgYnVmZmVyIHNpemVzXG5cCisgICAgLVYgCQkgICAgICBFbmFibGUgY29weSBhdm9pZGFuY2UgaWYgc3VwcG9ydGVkXG5cCisgICAgLTQgICAgICAgICAgICAgICAgVXNlIEFGX0lORVQgKGVnIElQdjQpIG9uIGJvdGggZW5kcyBvZiB0aGUgZGF0YSBjb25uXG5cCisgICAgLTYgICAgICAgICAgICAgICAgVXNlIEFGX0lORVQ2IChlZyBJUHY2KSBvbiBib3RoIGVuZHMgb2YgdGhlIGRhdGEgY29ublxuXAorXG5cCitGb3IgdGhvc2Ugb3B0aW9ucyB0YWtpbmcgdHdvIHBhcm1zLCBhdCBsZWFzdCBvbmUgbXVzdCBiZSBzcGVjaWZpZWQ7XG5cCitzcGVjaWZ5aW5nIG9uZSB2YWx1ZSB3aXRob3V0IGEgY29tbWEgd2lsbCBzZXQgYm90aCBwYXJtcyB0byB0aGF0XG5cCit2YWx1ZSwgc3BlY2lmeWluZyBhIHZhbHVlIHdpdGggYSBsZWFkaW5nIGNvbW1hIHdpbGwgc2V0IGp1c3QgdGhlIHNlY29uZFxuXAorcGFybSwgYSB2YWx1ZSB3aXRoIGEgdHJhaWxpbmcgY29tbWEgd2lsbCBzZXQganVzdCB0aGUgZmlyc3QuIFRvIHNldFxuXAorZWFjaCBwYXJtIHRvIHVuaXF1ZSB2YWx1ZXMsIHNwZWNpZnkgYm90aCBhbmQgc2VwYXJhdGUgdGhlbSB3aXRoIGFcblwKK2NvbW1hLlxuIjsgCisgICAgIAorDAorIC8qIFRoaXMgcm91dGluZSBpcyBpbnRlbmRlZCB0byByZXRyaWV2ZSBpbnRlcmVzdGluZyBhc3BlY3RzIG9mIHNkcCAqLworIC8qIGZvciB0aGUgZGF0YSBjb25uZWN0aW9uLiBhdCBmaXJzdCwgaXQgYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlICovCisgLyogbWF4aW11bSBzZWdtZW50IHNpemUuIGxhdGVyLCBpdCBtaWdodCBiZSBtb2RpZmllZCB0byByZXRyaWV2ZSAqLworIC8qIG90aGVyIGluZm9ybWF0aW9uLCBidXQgaXQgbXVzdCBiZSBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSAqLworIC8qIHJldHJpZXZlZCBxdWlja2x5IGFzIGl0IGlzIGNhbGxlZCBkdXJpbmcgdGhlIHRpbWluZyBvZiB0aGUgdGVzdC4gKi8KKyAvKiBmb3IgdGhhdCByZWFzb24sIGEgc2Vjb25kIHJvdXRpbmUgbWF5IGJlIGNyZWF0ZWQgdGhhdCBjYW4gYmUgKi8KKyAvKiBjYWxsZWQgb3V0c2lkZSBvZiB0aGUgdGltaW5nIGxvb3AgKi8KK3N0YXRpYwordm9pZAorZ2V0X3NkcF9pbmZvKGludCBzb2NrZXQsIGludCAqIG1zcykKK3sKKworI2lmZGVmIFRDUF9NQVhTRUcKKyAgbmV0cGVyZl9zb2NrbGVuX3Qgc29ja19vcHRfbGVuOworCisgIHNvY2tfb3B0X2xlbiA9IHNpemVvZihuZXRwZXJmX3NvY2tsZW5fdCk7CisgIGlmIChnZXRzb2Nrb3B0KHNvY2tldCwKKwkJIGdldHByb3RvYnluYW1lKCJ0Y3AiKS0+cF9wcm90bywJCisJCSBUQ1BfTUFYU0VHLAorCQkgKGNoYXIgKiltc3MsCisJCSAmc29ja19vcHRfbGVuKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAibmV0cGVyZjogZ2V0X3NkcF9pbmZvOiBnZXRzb2Nrb3B0IFRDUF9NQVhTRUc6IGVycm5vICVkXG4iLAorCSAgICBlcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAqbXNzID0gLTE7CisgIH0KKyNlbHNlCisgICptc3MgPSAtMTsKKyNlbmRpZiAvKiBUQ1BfTUFYU0VHICovCisKK30KKwordm9pZCAKK3NlbmRfc2RwX3N0cmVhbShjaGFyIHJlbW90ZV9ob3N0W10pCit7CisgIAorICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgXG5cCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICBcblwKK2J5dGVzICBieXRlcyAgIGJ5dGVzICAgIHNlY3MuICAgICVzL3NlYyAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmYgJXNcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xID0KKyAgICAiJTZkICU2ZCAlNmQgICAgJS02LjJmICAgJTcuMmYgICAlc1xuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsaXphdGlvbiAgICAgICBTZXJ2aWNlIERlbWFuZFxuXAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgU2VuZCAgICAgUmVjdiAgICAgU2VuZCAgICBSZWN2XG5cCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICBsb2NhbCAgICByZW1vdGUgICBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgJS04LjhzL3MgICUlICVjICAgICAgJSUgJWMgICAgICB1cy9LQiAgIHVzL0tCXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZiAlYyAlc1xuIjsKKworICBjaGFyICpjcHVfZm10XzEgPQorICAgICIlNmQgJTZkICU2ZCAgICAlLTYuMmYgICAgICU3LjJmICAgJS02LjJmICAgJS02LjJmICAgJS02LjNmICAlLTYuM2YgJXNcbiI7CisgIAorICBjaGFyICprc2lua19mbXQgPSAiXG5cCitBbGlnbm1lbnQgICAgICBPZmZzZXQgICAgICAgICAlLTguOHMgJS04LjhzICAgIFNlbmRzICAgJS04LjhzIFJlY3ZzXG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlICBYZmVyZWQgICBQZXIgICAgICAgICAgICAgICAgIFBlclxuXAorU2VuZCAgIFJlY3YgICAgU2VuZCAgIFJlY3YgICAgICAgICAgICAgU2VuZCAoYXZnKSAgICAgICAgICBSZWN2IChhdmcpXG5cCislNWQgICAlNWQgICU1ZCAgICU1ZCAlNi40ZyAgJTYuMmYgICAgJTZkICAgJTYuMmYgJTZkXG4iOworCisgIGNoYXIgKmtzaW5rX2ZtdDIgPSAiXG5cCitNYXhpbXVtXG5cCitTZWdtZW50XG5cCitTaXplIChieXRlcylcblwKKyU2ZFxuIjsKKyAgCisgIAorICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIC8qIHdoYXQgd2Ugd2FudCBpcyB0byBoYXZlIGEgYnVmZmVyIHNwYWNlIHRoYXQgaXMgYXQgbGVhc3Qgb25lICovCisgIC8qIHNlbmQtc2l6ZSBncmVhdGVyIHRoYW4gb3VyIHNlbmQgd2luZG93LiB0aGlzIHdpbGwgaW5zdXJlIHRoYXQgd2UgKi8KKyAgLyogYXJlIG5ldmVyIHRyeWluZyB0byByZS11c2UgYSBidWZmZXIgdGhhdCBtYXkgc3RpbGwgYmUgaW4gdGhlIGhhbmRzICovCisgIC8qIG9mIHRoZSB0cmFuc3BvcnQuIFRoaXMgYnVmZmVyIHdpbGwgYmUgbWFsbG9jJ2QgYWZ0ZXIgd2UgaGF2ZSBmb3VuZCAqLworICAvKiB0aGUgc2l6ZSBvZiB0aGUgbG9jYWwgc2VuYyBzb2NrZXQgYnVmZmVyLiBXZSB3aWxsIHdhbnQgdG8gZGVhbCAqLworICAvKiB3aXRoIGFsaWdubWVudCBhbmQgb2Zmc2V0IGNvbmNlcm5zIGFzIHdlbGwuICovCisgIAorICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKyAgCisgIGludCBsZW47CisgIHVuc2lnbmVkIGludCBudW1tZXNzYWdlcyA9IDA7CisgIFNPQ0tFVCBzZW5kX3NvY2tldDsKKyAgaW50IGJ5dGVzX3JlbWFpbmluZzsKKyAgaW50IHNkcF9tc3MgPSAtMTsgIC8qIHBvc3NpYmx5IHVuaW5pdGlhbGl6ZWQgb24gcHJpbnRmIGZhciBiZWxvdyAqLworCisgIC8qIHdpdGggbGlua3MgbGlrZSBmZGRpLCBvbmUgY2FuIHNlbmQgPiAzMiBiaXRzIHdvcnRoIG9mIGJ5dGVzICovCisgIC8qIGR1cmluZyBhIHRlc3QuLi4gOy0pIGF0IHNvbWUgcG9pbnQsIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlY29tZSBhICovCisgIC8qIDY0Yml0IGludGVncmFsIHR5cGUsIGJ1dCB0aG9zZSBhcmUgbm90IGVudGlyZWx5IGNvbW1vbiB5ZXQgKi8KKworICB1bnNpZ25lZCBsb25nIGxvbmcgbG9jYWxfYnl0ZXNfc2VudCA9IDA7CisgIGRvdWJsZQlieXRlc19zZW50ID0gMC4wOworICAKKyAgZmxvYXQJbG9jYWxfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgZmxvYXQJcmVtb3RlX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworCisgIGRvdWJsZQl0aHJ1cHV0OworICAKKyAgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzOworICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgCisgIHN0cnVjdAlzZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSpzZHBfc3RyZWFtX3JlcXVlc3Q7CisgIHN0cnVjdAlzZHBfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdAkqc2RwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0CXNkcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QJKnNkcF9zdHJlYW1fcmVzdWx0OworICAKKyAgc2RwX3N0cmVhbV9yZXF1ZXN0ICA9IAorICAgIChzdHJ1Y3Qgc2RwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2RwX3N0cmVhbV9yZXNwb25zZSA9CisgICAgKHN0cnVjdCBzZHBfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNkcF9zdHJlYW1fcmVzdWx0ICAgPSAKKyAgICAoc3RydWN0IHNkcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIHRpbWVfaGlzdCA9IEhJU1RfbmV3KCk7CisgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgIC8qIGNvbnRyb2wgc29ja2V0LCBhbmQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBkaWZmZXJlbnQgKi8KKyAgLyogcHJvdG9jb2xzIGFuZCBzdWNoLCB3ZSBhcmUgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaG9zdCBhbmQgKi8KKyAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworICAKKyAgLyogY29tcGxldGVfYWRkcmluZm9zIHdpbGwgZWl0aGVyIHN1Y2NlZGUgb3IgZXhpdCB0aGUgcHJvY2VzcyAqLworICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIlNEUCBTVFJFQU0gVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICB9CisKKyAgc2VuZF9yaW5nID0gTlVMTDsKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKworICAvKiB3ZSBoYXZlIGEgZ3JlYXQtYmlnIHdoaWxlIGxvb3Agd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyAqLworICAvKiB3ZSBydW4gYSBwYXJ0aWN1bGFyIHRlc3QuIHRoaXMgaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBhICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKEkgcmVhbGx5IHNob3VsZCBoYXZlIHN0YXllZCBhd2FrZSBkdXJpbmcgKi8KKyAgLyogcHJvYnN0YXRzIDopLiBJZiB0aGUgdXNlciBkaWQgbm90IHJlcXVlc3QgY29uZmlkZW5jZSBtZWFzdXJlbWVudCAqLworICAvKiAobm8gY29uZmlkZW5jZSBpcyB0aGUgZGVmYXVsdCkgdGhlbiB3ZSB3aWxsIG9ubHkgZ28gdGhvdWdoIHRoZSAqLworICAvKiBsb29wIG9uY2UuIHRoZSBjb25maWRlbmNlIHN0dWZmIG9yaWdpbmF0ZXMgZnJvbSB0aGUgZm9sa3MgYXQgSUJNICovCisKKyAgd2hpbGUgKCgoY29uZmlkZW5jZSA8IDApICYmIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8IGl0ZXJhdGlvbl9tYXgpKSB8fAorCSAoY29uZmlkZW5jZV9pdGVyYXRpb24gPD0gaXRlcmF0aW9uX21pbikpIHsKKworICAgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMuIHdlIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZSBtaWdodCBiZSAqLworICAgIC8qIGdvaW5nIHRocm91Z2ggdGhlIGxvb3AgbW9yZSB0aGFuIG9uY2UuICovCisgICAgCisgICAgbnVtbWVzc2FnZXMgICAgPQkwOworICAgIGJ5dGVzX3NlbnQgICAgID0JMC4wOworICAgIHRpbWVzX3VwICAgICAgID0gCTA7CisgICAgCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBmYWtlIHRoaW5ncyBvdXQgYnkgY2hhbmdpbmcgbG9jYWxfcmVzLT5haV9mYW1pbHkgdG8gQUZfSU5FVF9TRFAgKi8KKyAgICBsb2NhbF9yZXMtPmFpX2ZhbWlseSA9IEFGX0lORVRfU0RQOworICAgIGxvY2FsX3Jlcy0+YWlfcHJvdG9jb2wgPSAwOworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgICAgCisgICAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF9zZHBfc3RyZWFtOiBzZHAgc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfc2RwX3N0cmVhbTogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgICAKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGVpdGhlciByZXRyaWV2ZWQgdGhlIHNvY2tldCBidWZmZXIgc2l6ZXMsICovCisgICAgLyogb3IgaGF2ZSB0cmllZCB0byBzZXQgdGhlbSwgc28gbm93LCB3ZSBtYXkgd2FudCB0byBzZXQgdGhlIHNlbmQgKi8KKyAgICAvKiBzaXplIGJhc2VkIG9uIHRoYXQgKGJlY2F1c2UgdGhlIHVzZXIgZWl0aGVyIGRpZCBub3QgdXNlIGEgLW0gKi8KKyAgICAvKiBvcHRpb24sIG9yIHVzZWQgb25lIHdpdGggYW4gYXJndW1lbnQgb2YgMCkuIElmIHRoZSBzb2NrZXQgYnVmZmVyICovCisgICAgLyogc2l6ZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3aWxsIHNldCB0aGUgc2VuZCBzaXplIHRvIDRLQiAtIG5vICovCisgICAgLyogcGFydGljdWxhciByZWFzb24sIGp1c3QgYXJiaXRyYXJ5Li4uICovCisgICAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgICBpZiAobHNzX3NpemUgPiAwKSB7CisJc2VuZF9zaXplID0gbHNzX3NpemU7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlzZW5kX3NpemUgPSA0MDk2OworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHJpbmcgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LiAqLworICAgIC8qIG5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYWxsb2NhdGVkIGEgcXVhbnRpdHkgKi8KKyAgICAvKiBvZiBtZW1vcnkgdGhhdCBpcyBhdCBsZWFzdCBvbmUgc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc29ja2V0ICovCisgICAgLyogYnVmZmVyIHNpemUuIFdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gKi8KKyAgICAvKiBidWZmZXJzIGFsbG9jYXRlZCAtIHRoaXMgY2FuIGJlIGEgYml0IG9mIGEgcHJvYmxlbSB3aGVuIHRoZSAqLworICAgIC8qIHNlbmRfc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgc29ja2V0IHNpemUsIHNvIHdlIG11c3QgY2hlY2suLi4gdGhlICovCisgICAgLyogdXNlciBtYXkgaGF2ZSB3YW50ZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlICJ3aWR0aCIgb2Ygb3VyIHNlbmQgKi8KKyAgICAvKiBidWZmZXJzLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGF0IHdpc2guLi4gKi8KKyAgICBpZiAoc2VuZF93aWR0aCA9PSAwKSB7CisgICAgICBzZW5kX3dpZHRoID0gKGxzc19zaXplL3NlbmRfc2l6ZSkgKyAxOworICAgICAgaWYgKHNlbmRfd2lkdGggPT0gMSkgc2VuZF93aWR0aCsrOworICAgIH0KKyAgICAKKyAgICBpZiAoc2VuZF9yaW5nID09IE5VTEwpIHsKKyAgICAgIC8qIG9ubHkgYWxsb2NhdGUgdGhlIHNlbmQgcmluZyBvbmNlLiB0aGlzIGlzIGEgbmV0d29ya2luZyB0ZXN0LCAqLworICAgICAgLyogbm90IGEgbWVtb3J5IGFsbG9jYXRpb24gdGVzdC4gdGhpcyB3YXksIHdlIGRvIG5vdCBuZWVkIGEgKi8KKyAgICAgIC8qIGRlYWxsb2NhdGVfYnVmZmVyX3JpbmcoKSByb3V0aW5lLCBhbmQgSSBkb24ndCBmZWVsIGxpa2UgKi8KKyAgICAgIC8qIHdyaXRpbmcgb25lIGFueXdheSA6KSByYWogMTEvOTQgKi8KKyAgICAgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgICAgIHNlbmRfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9vZmZzZXQpOworICAgIH0KKworICAgIC8qIElmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgY3B1IHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cywgd2UgbXVzdCAqLworICAgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgICAvKiB0aGVtc2VsdmVzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBjcHUgcmF0ZSwgdGhlbiAqLworICAgIC8qIGNhbGlicmF0ZV9sb2NhbF9jcHUgd2lsbCByZXR1cm4gcmF0aGVyIHF1aWNrbHkgYXMgaXQgd2lsbCBoYXZlICovCisgICAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgICAvKiBhbGwgdGhlICJub3JtYWwiIGNhbGlicmF0aW9uIHN0dWZmIGFuZCByZXR1cm4gdGhlIHJhdGUgYmFjay4gKi8KKyAgICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZQorCSBzb2NrZXQgcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZQorCSByZWFzb24gZm9yIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAKKwkgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywKKwkgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUKKwkgdGhhdCBubyBjaGFuZ2VzIGJleW9uZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzaG91bGQgYmUKKwkgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgZGVmYXVsdCB0byAxLCB3aGljaAorCSB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZSA9CURPX1NEUF9TVFJFQU07CisgICAgICBzZHBfc3RyZWFtX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZV9yZXE7CisgICAgICBzZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZV9yZXE7CisgICAgICBzZHBfc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZQk9CXJlY3Zfc2l6ZTsKKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+bm9fZGVsYXkJPQlyZW1fbm9kZWxheTsKKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQJPQlyZW1vdGVfcmVjdl9hbGlnbjsKKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQJPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgICBzZHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUJPQlyZW1vdGVfY3B1X3JhdGU7CisgICAgICBpZiAodGVzdF90aW1lKSB7CisJc2RwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXNkcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X2J5dGVzOworICAgICAgfQorICAgICAgc2RwX3N0cmVhbV9yZXF1ZXN0LT5zb19yY3Zhdm9pZAk9CXJlbV9yY3Zhdm9pZDsKKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQJPQlyZW1fc25kYXZvaWQ7CisjaWZkZWYgRElSVFkKKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+ZGlydHlfY291bnQgICAgID0gICAgICAgcmVtX2RpcnR5X2NvdW50OworICAgICAgc2RwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCAgICAgPSAgICAgICByZW1fY2xlYW5fY291bnQ7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+cG9ydCAgICAgICAgICAgID0gICAgYXRvaShyZW1vdGVfZGF0YV9wb3J0KTsKKyAgICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkgPSBhZl90b19uZihyZW1vdGVfcmVzLT5haV9mYW1pbHkpOworICAgICAgaWYgKGRlYnVnID4gMSkgeworCWZwcmludGYod2hlcmUsCisJCSJuZXRwZXJmOiBzZW5kX3NkcF9zdHJlYW06IHJlcXVlc3RpbmcgU0RQIHN0cmVhbSB0ZXN0XG4iKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgICAKKyAgICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQKKyAgICAgICAgIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrCisgICAgICAgICBpbnRvIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4KKyAgICAgICAgIFRoZSByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwKKyAgICAgICAgIGhhdmUgZG9uZSBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlCisgICAgICAgICBjcHUgbG9jYWxseSBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUKKyAgICAgICAgIGNvdW50ZXIgdmFsdWUgcmlnaHQgYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZQorICAgICAgICAgd2lsbCBncmFiIHRoZSBjb3VudGVyIHJpZ2h0IGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcworICAgICAgICAgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcyBiZWluZyBzZW50IGZvciB0aGUgU0RQCisgICAgICAgICB0ZXN0cy4gICovCisgICAgCisgICAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgCisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisJcnNyX3NpemUJICAgICAgPQlzZHBfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworCXJzc19zaXplCSAgICAgID0Jc2RwX3N0cmVhbV9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKwlyZW1fbm9kZWxheSAgICAgPQlzZHBfc3RyZWFtX3Jlc3BvbnNlLT5ub19kZWxheTsKKwlyZW1vdGVfY3B1X3VzYWdlPQlzZHBfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKwlyZW1vdGVfY3B1X3JhdGUgPSBzZHBfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKwkKKwkvKiB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIgcG9ydCBudW1iZXIgaXMgaW4KKwkgICBuZXR3b3JrIG9yZGVyICovCisJc2V0X3BvcnRfbnVtYmVyKHJlbW90ZV9yZXMsCisJCQkoc2hvcnQpc2RwX3N0cmVhbV9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlcik7CisJCisJcmVtX3JjdmF2b2lkCT0gc2RwX3N0cmVhbV9yZXNwb25zZS0+c29fcmN2YXZvaWQ7CisJcmVtX3NuZGF2b2lkCT0gc2RwX3N0cmVhbV9yZXNwb25zZS0+c29fc25kYXZvaWQ7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCWZwcmludGYod2hlcmUsCisJCSJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCQluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJcGVycm9yKCIiKTsKKwlmZmx1c2god2hlcmUpOworCQorCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorCisjaWZkZWYgV0FOVF9ERU1PCisgICAgREVNT19TVFJFQU1fU0VUVVAobHNzX3NpemUscnNyX3NpemUpCisjZW5kaWYKKworICAgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICAgIGlmIChjb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkcmxlbikgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3NkcF9zdHJlYW06IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8qIERhdGEgU29ja2V0IHNldC11cCBpcyBmaW5pc2hlZC4gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcywgZWl0aGVyICovCisgICAgLyogdGhlIGNvbm5lY3Qgd291bGQgaGF2ZSBmYWlsZWQsIG9yIHRoZSBwcmV2aW91cyByZXNwb25zZSB3b3VsZCAqLworICAgIC8qIGhhdmUgaW5kaWNhdGVkIGEgcHJvYmxlbS4gSSBmYWlsZWQgdG8gc2VlIHRoZSB2YWx1ZSBvZiB0aGUgKi8KKyAgICAvKiBleHRyYSAgbWVzc2FnZSBhZnRlciB0aGUgYWNjZXB0IG9uIHRoZSByZW1vdGUuIElmIGl0IGZhaWxlZCwgKi8KKyAgICAvKiB3ZSdsbCBzZWUgaXQgaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgKi8KKyAgICAvKiBkYXRhLiAqLyAKKyAgICAKKyAgICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHN0cmVhbSB0ZXN0LCB0aGV5IGNhbiBiZSAqLworICAgIC8qIGVpdGhlciB0aW1lIG9yIGJ5dGUtY291bnQgYmFzZWQuICovCisgICAgCisgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgICAgdGltZXNfdXAgPSAwOworICAgICAgYnl0ZXNfcmVtYWluaW5nID0gMDsKKyAgICAgIC8qIGluIHByZXZpb3VzIHJldmlzaW9ucywgd2UgaGFkIHRoZSBzYW1lIGNvZGUgcmVwZWF0ZWQgdGhyb3VnaHQgKi8KKyAgICAgIC8qIGFsbCB0aGUgdGVzdCBzdWl0ZXMuIHRoaXMgd2FzIHVubmVjZXNzYXJ5LCBhbmQgbWVhbnQgbW9yZSAqLworICAgICAgLyogd29yayBmb3IgbWUgd2hlbiBJIHdhbnRlZCB0byBzd2l0Y2ggdG8gUE9TSVggc2lnbmFscywgc28gSSAqLworICAgICAgLyogaGF2ZSBhYnN0cmFjdGVkIHRoaXMgb3V0IGludG8gYSByb3V0aW5lIGluIG5ldGxpYi5jLiBpZiB5b3UgKi8KKyAgICAgIC8qIGFyZSBleHBlcmllbmNpbmcgc2lnbmFsIHByb2JsZW1zLCB5b3UgbWlnaHQgd2FudCB0byBsb29rICovCisgICAgICAvKiB0aGVyZS4gcmFqIDExLzk0ICovCisgICAgICBzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFRoZSB0ZXN0ZXIgd2FudGVkIHRvIHNlbmQgYSBudW1iZXIgb2YgYnl0ZXMuICovCisgICAgICBieXRlc19yZW1haW5pbmcgPSB0ZXN0X2J5dGVzOworICAgICAgdGltZXNfdXAgPSAxOworICAgIH0KKyAgICAKKyAgICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgICAgLyogdmFsdWUgb2YgdGhlIGlkbGUgY291bnRlciBmb3IgbGF0ZXIgdXNlIGluIG1lYXN1cmluZyBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgICAgCisgICAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisKKyAgICAvKiB3ZSBvbmx5IHN0YXJ0IHRoZSBpbnRlcnZhbCB0aW1lciBpZiB3ZSBhcmUgdXNpbmcgdGhlCisgICAgICAgdGltZXItdGltZWQgaW50ZXJ2YWxzIHJhdGhlciB0aGFuIHRoZSBzaXQgYW5kIHNwaW4gb25lcy4gcmFqCisgICAgICAgMjAwNi0wMi0wNiAqLyAgICAKKyNpZiBkZWZpbmVkKFdBTlRfSU5URVJWQUxTKQorICAgIElOVEVSVkFMU19JTklUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKworICAgIC8qIGJlZm9yZSB3ZSBzdGFydCwgaW5pdGlhbGl6ZSBhIGZldyB2YXJpYWJsZXMgKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgICAgaWYgKGRlbW9fbW9kZSkgeworCUhJU1RfdGltZXN0YW1wKGRlbW9fb25lX3B0cik7CisgICAgICB9CisjZW5kaWYKKyAgICAgIAorCisgICAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuICovCisgICAgCisgICAgd2hpbGUgKCghdGltZXNfdXApIHx8IChieXRlc19yZW1haW5pbmcgPiAwKSkgeworICAgICAgCisjaWZkZWYgRElSVFkKKyAgICAgIGFjY2Vzc19idWZmZXIoc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgICAgc2VuZF9zaXplLAorCQkgICAgbG9jX2RpcnR5X2NvdW50LAorCQkgICAgbG9jX2NsZWFuX2NvdW50KTsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisJLyogdGltZXN0YW1wIGp1c3QgYmVmb3JlIHdlIGdvIGludG8gc2VuZCBhbmQgdGhlbiBhZ2FpbiBqdXN0CisJIGFmdGVyIHdlIGNvbWUgb3V0IHJhaiA4Lzk0ICovCisJLyogYnV0IGxldHMgb25seSBkbyB0aGlzIGlmIHRoZXJlIGlzIGdvaW5nIHRvIGJlIGEgaGlzdG9ncmFtCisJICAgZGlzcGxheWVkICovCisJSElTVF90aW1lc3RhbXAoJnRpbWVfb25lKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgICAgICBpZigobGVuPXNlbmQoc2VuZF9zb2NrZXQsCisJCSAgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgc2VuZF9zaXplLAorCQkgICAwKSkgIT0gc2VuZF9zaXplKSB7CisgICAgICBpZiAoKGxlbiA+PTApIHx8IFNPQ0tFVF9FSU5UUihsZW4pKSB7CisJICAgIC8qIHRoZSB0ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgbXVzdCBiZSB0aGUgZW5kIG9mIHRlc3QgKi8KKwkgICAgYnJlYWs7CisJICB9CisJcGVycm9yKCJuZXRwZXJmOiBkYXRhIHNlbmQgZXJyb3IiKTsKKwlwcmludGYoImxlbiB3YXMgJWRcbiIsbGVuKTsKKwlleGl0KDEpOworICAgICAgfQorCisgICAgICBsb2NhbF9ieXRlc19zZW50ICs9IHNlbmRfc2l6ZTsKKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworCS8qIHRpbWVzdGFtcCB0aGUgZXhpdCBmcm9tIHRoZSBzZW5kIGNhbGwgYW5kIHVwZGF0ZSB0aGUgaGlzdG9ncmFtICovCisJSElTVF90aW1lc3RhbXAoJnRpbWVfdHdvKTsKKwlISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovICAgICAgCisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICAgIERFTU9fU1RSRUFNX0lOVEVSVkFMKHNlbmRfc2l6ZSkKKyNlbmRpZiAKKworI2lmIGRlZmluZWQoV0FOVF9JTlRFUlZBTFMpCisgICAgICBJTlRFUlZBTFNfV0FJVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgICAKKyAgICAgIC8qIG5vdyB3ZSB3YW50IHRvIG1vdmUgb3VyIHBvaW50ZXIgdG8gdGhlIG5leHQgcG9zaXRpb24gaW4gdGhlICovCisgICAgICAvKiBkYXRhIGJ1ZmZlci4uLndlIG1heSBhbHNvIHdhbnQgdG8gd3JhcCBiYWNrIHRvIHRoZSAiYmVnaW5uaW5nIiAqLworICAgICAgLyogb2YgdGhlIGJ1ZmZlcnNwYWNlLCBzbyB3ZSB3aWxsIG1vZCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgKi8KKyAgICAgIC8qIGJ5IHRoZSBzZW5kIHdpZHRoLCBhbmQgdXNlIHRoYXQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgdG8gYWRkICovCisgICAgICAvKiB0byB0aGUgYmFzZSBwb2ludGVyLiAqLworICAgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisgICAgICBpZiAoYnl0ZXNfcmVtYWluaW5nKSB7CisJYnl0ZXNfcmVtYWluaW5nIC09IHNlbmRfc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUaGUgdGVzdCBpcyBvdmVyLiBGbHVzaCB0aGUgYnVmZmVycyB0byB0aGUgcmVtb3RlIGVuZC4gV2UgZG8gYSAqLworICAgIC8qIGdyYWNlZnVsIHJlbGVhc2UgdG8gaW5zdXJlIHRoYXQgYWxsIGRhdGEgaGFzIGJlZW4gdGFrZW4gYnkgdGhlICovCisgICAgLyogcmVtb3RlLiAqLyAKKworICAgIC8qIGJ1dCBmaXJzdCwgaWYgdGhlIHZlcmJvc2l0eSBpcyBncmVhdGVyIHRoYW4gMSwgZmluZC1vdXQgd2hhdCAqLworICAgIC8qIHRoZSBTRFAgbWF4aW11bSBzZWdtZW50X3NpemUgd2FzIChpZiBwb3NzaWJsZSkgKi8KKyAgICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgICAgc2RwX21zcyA9IC0xOworICAgICAgZ2V0X3NkcF9pbmZvKHNlbmRfc29ja2V0LCZzZHBfbXNzKTsKKyAgICB9CisgICAgCisgICAgaWYgKHNodXRkb3duKHNlbmRfc29ja2V0LFNIVVRfV1IpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBjYW5ub3Qgc2h1dGRvd24gc2RwIHN0cmVhbSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIGhhbmcgYSByZWN2KCkgb2ZmIHRoZSBzb2NrZXQgdG8gYmxvY2sgdW50aWwgdGhlIHJlbW90ZSBoYXMgKi8KKyAgICAvKiBicm91Z2h0IGFsbCB0aGUgZGF0YSB1cCBpbnRvIHRoZSBhcHBsaWNhdGlvbi4gaXQgd2lsbCBkbyBhICovCisgICAgLyogc2h1dGRvd24gdG8gY2F1c2UgYSBGSU4gdG8gYmUgc2VudCBvdXIgd2F5LiBXZSB3aWxsIGFzc3VtZSB0aGF0ICovCisgICAgLyogYW55IGV4aXQgZnJvbSB0aGUgcmVjdigpIGNhbGwgaXMgZ29vZC4uLiByYWogNC85MyAqLworICAgIAorICAgIHJlY3Yoc2VuZF9zb2NrZXQsIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwgc2VuZF9zaXplLCAwKTsKKyAgICAKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgICAgLyogd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgICAKKyAgICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgKi8KKwkJCQkJCS8qIG1lYXN1cmVkIGFuZCBob3cgKi8KKwkJCQkJCS8qIGxvbmcgZGlkIHdlIHJlYWxseSAqLworCQkJCQkJLyogcnVuPyAqLworICAgIAorICAgIC8qIHdlIGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBzb2NrZXQsIHNvIGNsb3NlIGl0IHRvIHByZXZlbnQgaGl0dGluZyAqLworICAgIC8qIHRoZSBsaW1pdCBvbiBtYXhpbXVtIG9wZW4gZmlsZXMuICovCisKKyAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZQorCSBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcKKwkgdGhpbmdzLiBJZiBpdCB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQgd2lsbCByZXR1cm4gb2J2aW91cworCSB2YWx1ZXMuICovCisgICAgCisgICAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICAgICAgfQorICAgICAgZWxzZSB7CisJU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlmcHJpbnRmKHdoZXJlLAorCQkibmV0cGVyZjogcmVtb3RlIGVycm9yICVkIiwKKwkJbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworCXBlcnJvcigiIik7CisJZmZsdXNoKHdoZXJlKTsKKwkKKwlleGl0KDEpOworICAgICAgfQorICAgIAorICAgICAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZQorCSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dAorCSBtZWFzdXJlZCBieSB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEKKwkgU0RQIHN0cmVhbSB0ZXN0LCB0aGF0IHRoZSB0d28gbnVtYmVycyBzaG91bGQgYmUgKnZlcnkqCisJIGNsb3NlLi4uIFdlIGNhbGN1bGF0ZSBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUKKwkgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICBJZiBpdCB3YXMgdGltZSwgd2UgbmVlZGVkIHRvLAorCSBhbmQgaWYgaXQgd2FzIGJ5IGJ5dGVzLCB0aGUgdXNlciBtYXkgaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIKKwkgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgc2VuZF9zaXplLCBzbyB3ZQorCSByZWFsbHkgZGlkbid0IHNlbmQgd2hhdCBoZSBhc2tlZCBmb3IgOy0pICovCisgICAgCisgICAgICBieXRlc19zZW50CT0gbnRvaGQoc2RwX3N0cmVhbV9yZXN1bHQtPmJ5dGVzX3JlY2VpdmVkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBieXRlc19zZW50ID0gKGRvdWJsZSlsb2NhbF9ieXRlc19zZW50OworICAgIH0KKworICAgIHRocnVwdXQJPSBjYWxjX3RocnVwdXQoYnl0ZXNfc2VudCk7CisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgICAgLyogT2YgY291cnNlLCBzb21lIG9mIHRoZSBpbmZvcm1hdGlvbiBtaWdodCBiZSBib2d1cyBiZWNhdXNlICovCisgICAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJCisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gY2FsY19jcHVfdXRpbCgwLjApOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19zZW50LAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisJbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJCisJcmVtb3RlX2NwdV91dGlsaXphdGlvbgk9IHNkcF9zdHJlYW1fcmVzdWx0LT5jcHVfdXRpbDsKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQJPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgICAgc2RwX3N0cmVhbV9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICAgIH0KKyAgICB9ICAgIAorICAgIGVsc2UgeworICAgICAgLyogd2Ugd2VyZSBub3QgbWVhc3VyaW5nIGNwdSwgZm9yIHRoZSBjb25maWRlbmNlIHN0dWZmLCB3ZSAqLworICAgICAgLyogc2hvdWxkIG1ha2UgaXQgLTEuMCAqLworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IChmbG9hdCkgLTEuMDsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgCisgICAgCisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24rKzsKKyAgfQorCisgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZmluaXNoZWQgbWFraW5nIGFsbCB0aGUgcnVucyB0aGF0IHdlICovCisgIC8qIHdpbGwgYmUgbWFraW5nLiBzbywgd2Ugc2hvdWxkIGV4dHJhY3Qgd2hhdCB0aGUgY2FsY3VhdGVkIHZhbHVlcyAqLworICAvKiBhcmUgZm9yIGFsbCB0aGUgY29uZmlkZW5jZSBzdHVmZi4gd2UgY291bGQgbWFrZSB0aGUgdmFsdWVzICovCisgIC8qIGdsb2JhbCwgYnV0IHRoYXQgc2VlbWVkIGEgbGl0dGxlIG1lc3N5LCBhbmQgaXQgZGlkIG5vdCBzZWVtIHdvcnRoICovCisgIC8qIGFsbCB0aGUgbXVja2luZyB3aXRoIGhlYWRlciBmaWxlcy4gc28sIHdlIGNyZWF0ZSBhIHJvdXRpbmUgbXVjaCAqLworICAvKiBsaWtlIGNhbGN1YWx0ZV9jb25maWRlbmNlLCB3aGljaCBqdXN0IHJldHVybnMgdGhlIG1lYW4gdmFsdWVzLiAqLworICAvKiByYWogMTEvOTQgKi8KKworICByZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKCZlbGFwc2VkX3RpbWUsCisJCQkgICAgJnRocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisKKyAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgLyogd2UgZGlkIG5vdCBoaXQgY29uZmlkZW5jZSwgYnV0IHdlcmUgd2UgYXNrZWQgdG8gbG9vayBmb3IgaXQ/ICovCisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBkaXNwbGF5X2NvbmZpZGVuY2UoKTsKKyAgICB9CisgIH0KKworICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChzZHBfc3RyZWFtX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJKChwcmludF9oZWFkZXJzKSB8fCAKKwkJIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQsCisJCXJlbW90ZV9jcHVfbWV0aG9kLAorCQkoKHByaW50X2hlYWRlcnMpIHx8IAorCQkgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwkJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlmb3JtYXRfdW5pdHMoKSwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgIAorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIHJzcl9zaXplLAkJICAgICAgICAvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgbHNzX3NpemUsCQkgICAgICAgIC8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIHRocnVwdXQsIAkJICAgICAgICAvKiB3aGF0IHdhcyB0aGUgeGZlciByYXRlICovCisJICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAkvKiBsb2NhbCBjcHUgKi8KKwkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAkvKiByZW1vdGUgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIHRocnVwdXQsCisJICAgICAgKChwcmludF9oZWFkZXJzKSB8fCAKKwkgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwkJZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgcnNyX3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGxzc19zaXplLCAJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIHRocnVwdXQsICAgICAgICAgICAgICAgICAgLyogaG93IGZhc3QgZGlkIGl0IGdvICovCisJICAgICAgKChwcmludF9oZWFkZXJzKSB8fCAKKwkgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBTRFAgc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgCisgICAgLyogdGhpcyBzdHVmZiBuZWVkcyB0byBiZSB3b3JrZWQtb3V0IGluIHRoZSBwcmVzZW5jZSBvZiBjb25maWRlbmNlICovCisgICAgLyogaW50ZXJ2YWxzIGFuZCBtdWx0aXBsZSBpdGVyYXRpb25zIG9mIHRoZSB0ZXN0Li4uIHJhaiAxMS85NCAqLworIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3ZfYWxpZ24sCisJICAgIGxvY2FsX3NlbmRfb2Zmc2V0LAorCSAgICByZW1vdGVfcmVjdl9vZmZzZXQsCisJICAgIGJ5dGVzX3NlbnQsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKW51bW1lc3NhZ2VzLAorCSAgICBudW1tZXNzYWdlcywKKwkgICAgYnl0ZXNfc2VudCAvIChkb3VibGUpc2RwX3N0cmVhbV9yZXN1bHQtPnJlY3ZfY2FsbHMsCisJICAgIHNkcF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQyLAorCSAgICBzZHBfbXNzKTsKKyAgICBmZmx1c2god2hlcmUpOworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgZnByaW50Zih3aGVyZSwiXG5cbkhpc3RvZ3JhbSBvZiB0aW1lIHNwZW50IGluIHNlbmQoKSBjYWxsLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIH0KKyAgCit9CisKKwwKKworLyogVGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIG5ldHBlcmYtc2lkZSBTRFAgdW5pZGlyZWN0aW9uYWwgZGF0YQorICAgdHJhbnNmZXIgdGVzdCAoYS5rLmEuIHN0cmVhbSkgZm9yIHRoZSBzb2NrZXRzIGludGVyZmFjZSB3aGVyZSB0aGUKKyAgIGRhdGEgZmxvdyBpcyBmcm9tIHRoZSBuZXRzZXJ2ZXIgdG8gdGhlIG5ldHBlcmYuICBJdCByZWNlaXZlcyBpdHMKKyAgIHBhcmFtZXRlcnMgdmlhIGdsb2JhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc2hlbGwgYW5kIHdyaXRlcyBpdHMKKyAgIG91dHB1dCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworCisKK3ZvaWQgCitzZW5kX3NkcF9tYWVydHMoY2hhciByZW1vdGVfaG9zdFtdKQoreworICAKKyAgY2hhciAqdHB1dF90aXRsZSA9ICJcCitSZWN2ICAgU2VuZCAgICBTZW5kICAgICAgICAgICAgICAgICAgICAgICAgICBcblwKK1NvY2tldCBTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICAgICAgICAgIFxuXAorU2l6ZSAgIFNpemUgICAgU2l6ZSAgICAgVGltZSAgICAgVGhyb3VnaHB1dCAgXG5cCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAlcy9zZWMgIFxuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmICVzXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMSA9CisgICAgIiU2ZCAlNmQgJTZkICAgICUtNi4yZiAgICU3LjJmICAgXG4gJXMiOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpemF0aW9uICAgICAgIFNlcnZpY2UgRGVtYW5kXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBTZW5kICAgICBSZWN2ICAgICBTZW5kICAgIFJlY3ZcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIGxvY2FsICAgIHJlbW90ZSAgIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAlLTguOHMvcyAgJSUgJWMgICAgICAlJSAlYyAgICAgIHVzL0tCICAgdXMvS0JcblxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMCA9CisgICAgIiU2LjNmICVjICVzXG4iOworCisgIGNoYXIgKmNwdV9mbXRfMSA9CisgICAgIiU2ZCAlNmQgJTZkICAgICUtNi4yZiAgICAgJTcuMmYgICAlLTYuMmYgICAlLTYuMmYgICAlLTYuM2YgICUtNi4zZiAlc1xuIjsKKyAgCisgIGNoYXIgKmtzaW5rX2ZtdCA9ICJcblwKK0FsaWdubWVudCAgICAgIE9mZnNldCAgICAgICAgICUtOC44cyAlLTguOHMgICAgUmVjdnMgICAlLTguOHMgU2VuZHNcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGUgIFhmZXJlZCAgIFBlciAgICAgICAgICAgICAgICAgUGVyXG5cCitSZWN2ICAgU2VuZCAgICBSZWN2ICAgU2VuZCAgICAgICAgICAgICBSZWN2IChhdmcpICAgICAgICAgIFNlbmQgKGF2ZylcblwKKyU1ZCAgICU1ZCAgJTVkICAgJTVkICU2LjRnICAlNi4yZiAgICAlNmQgICAlNi4yZiAlNmRcbiI7CisKKyAgY2hhciAqa3NpbmtfZm10MiA9ICJcblwKK01heGltdW1cblwKK1NlZ21lbnRcblwKK1NpemUgKGJ5dGVzKVxuXAorJTZkXG4iOworICAKKyAgCisgIGZsb2F0CQkJZWxhcHNlZF90aW1lOworICAKKyAgLyogd2hhdCB3ZSB3YW50IGlzIHRvIGhhdmUgYSBidWZmZXIgc3BhY2UgdGhhdCBpcyBhdCBsZWFzdCBvbmUgKi8KKyAgLyogcmVjdi1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgcmVjdiB3aW5kb3cuIHRoaXMgd2lsbCBpbnN1cmUgdGhhdCB3ZSAqLworICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgLyogb2YgdGhlIHRyYW5zcG9ydC4gVGhpcyBidWZmZXIgd2lsbCBiZSBtYWxsb2MnZCBhZnRlciB3ZSBoYXZlIGZvdW5kICovCisgIC8qIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBzZW5jIHNvY2tldCBidWZmZXIuIFdlIHdpbGwgd2FudCB0byBkZWFsICovCisgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworICAKKyAgaW50IGxlbjsKKyAgdW5zaWduZWQgaW50IG51bW1lc3NhZ2VzID0gMDsKKyAgU09DS0VUIHJlY3Zfc29ja2V0OworICBpbnQgYnl0ZXNfcmVtYWluaW5nOworICBpbnQgc2RwX21zcyA9IC0xOyAgLyogcG9zc2libHkgdW5pbml0aWFsaXplZCBvbiBwcmludGYgZmFyIGJlbG93ICovCisKKyAgLyogd2l0aCBsaW5rcyBsaWtlIGZkZGksIG9uZSBjYW4gcmVjdiA+IDMyIGJpdHMgd29ydGggb2YgYnl0ZXMgKi8KKyAgLyogZHVyaW5nIGEgdGVzdC4uLiA7LSkgYXQgc29tZSBwb2ludCwgdGhpcyBzaG91bGQgcHJvYmFibHkgYmVjb21lIGEgKi8KKyAgLyogNjRiaXQgaW50ZWdyYWwgdHlwZSwgYnV0IHRob3NlIGFyZSBub3QgZW50aXJlbHkgY29tbW9uIHlldCAqLworICBkb3VibGUJYnl0ZXNfc2VudCA9IDAuMDsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGxvY2FsX2J5dGVzX3JlY3ZkID0gMDsKKworICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8gKnJlbW90ZV9yZXM7CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICAKKyAgc3RydWN0CXNkcF9tYWVydHNfcmVxdWVzdF9zdHJ1Y3QJKnNkcF9tYWVydHNfcmVxdWVzdDsKKyAgc3RydWN0CXNkcF9tYWVydHNfcmVzcG9uc2Vfc3RydWN0CSpzZHBfbWFlcnRzX3Jlc3BvbnNlOworICBzdHJ1Y3QJc2RwX21hZXJ0c19yZXN1bHRzX3N0cnVjdAkqc2RwX21hZXJ0c19yZXN1bHQ7CisgIAorICBzZHBfbWFlcnRzX3JlcXVlc3QgID0gCisgICAgKHN0cnVjdCBzZHBfbWFlcnRzX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzZHBfbWFlcnRzX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHNkcF9tYWVydHNfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2RwX21hZXJ0c19yZXN1bHQgICA9IAorICAgIChzdHJ1Y3Qgc2RwX21hZXJ0c19yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludF90b3BfdGVzdF9oZWFkZXIoIlNEUCBNQUVSVFMgVEVTVCIsbG9jYWxfcmVzLHJlbW90ZV9yZXMpOworICB9CisKKyAgcmVjdl9yaW5nID0gTlVMTDsKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKworICAvKiB3ZSBoYXZlIGEgZ3JlYXQtYmlnIHdoaWxlIGxvb3Agd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyAqLworICAvKiB3ZSBydW4gYSBwYXJ0aWN1bGFyIHRlc3QuIHRoaXMgaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBhICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKEkgcmVhbGx5IHNob3VsZCBoYXZlIHN0YXllZCBhd2FrZSBkdXJpbmcgKi8KKyAgLyogcHJvYnN0YXRzIDopLiBJZiB0aGUgdXNlciBkaWQgbm90IHJlcXVlc3QgY29uZmlkZW5jZSBtZWFzdXJlbWVudCAqLworICAvKiAobm8gY29uZmlkZW5jZSBpcyB0aGUgZGVmYXVsdCkgdGhlbiB3ZSB3aWxsIG9ubHkgZ28gdGhvdWdoIHRoZSAqLworICAvKiBsb29wIG9uY2UuIHRoZSBjb25maWRlbmNlIHN0dWZmIG9yaWdpbmF0ZXMgZnJvbSB0aGUgZm9sa3MgYXQgSUJNICovCisKKyAgd2hpbGUgKCgoY29uZmlkZW5jZSA8IDApICYmIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8IGl0ZXJhdGlvbl9tYXgpKSB8fAorCSAoY29uZmlkZW5jZV9pdGVyYXRpb24gPD0gaXRlcmF0aW9uX21pbikpIHsKKworICAgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMuIHdlIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZSBtaWdodCBiZSAqLworICAgIC8qIGdvaW5nIHRocm91Z2ggdGhlIGxvb3AgbW9yZSB0aGFuIG9uY2UuICovCisgICAgCisgICAgbnVtbWVzc2FnZXMgICAgPQkwOworICAgIGJ5dGVzX3NlbnQgICAgID0JMC4wOworICAgIHRpbWVzX3VwICAgICAgID0gCTA7CisgICAgCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBmYWtlIHRoaW5ncyBvdXQgYnkgY2hhbmdpbmcgbG9jYWxfcmVzLT5haV9mYW1pbHkgdG8gQUZfSU5FVF9TRFAgKi8KKyAgICBsb2NhbF9yZXMtPmFpX2ZhbWlseSA9IEFGX0lORVRfU0RQOworICAgIGxvY2FsX3Jlcy0+YWlfcHJvdG9jb2wgPSAwOworICAgIHJlY3Zfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgICAgCisgICAgaWYgKHJlY3Zfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF9zZHBfbWFlcnRzOiBzZHAgc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfc2RwX21hZXJ0czogcmVjdl9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKworICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZWl0aGVyIHJldHJpZXZlZCB0aGUgc29ja2V0IGJ1ZmZlciBzaXplcywgKi8KKyAgICAvKiBvciBoYXZlIHRyaWVkIHRvIHNldCB0aGVtLCBzbyBub3csIHdlIG1heSB3YW50IHRvIHNldCB0aGUgcmVjdiAqLworICAgIC8qIHNpemUgYmFzZWQgb24gdGhhdCAoYmVjYXVzZSB0aGUgdXNlciBlaXRoZXIgZGlkIG5vdCB1c2UgYSAtbSAqLworICAgIC8qIG9wdGlvbiwgb3IgdXNlZCBvbmUgd2l0aCBhbiBhcmd1bWVudCBvZiAwKS4gSWYgdGhlIHNvY2tldCBidWZmZXIgKi8KKyAgICAvKiBzaXplIGlzIG5vdCBhdmFpbGFibGUsIHdlIHdpbGwgc2V0IHRoZSByZWN2IHNpemUgdG8gNEtCIC0gbm8gKi8KKyAgICAvKiBwYXJ0aWN1bGFyIHJlYXNvbiwganVzdCBhcmJpdHJhcnkuLi4gKi8KKyAgICBpZiAocmVjdl9zaXplID09IDApIHsKKyAgICAgIGlmIChsc3Jfc2l6ZSA+IDApIHsKKwlyZWN2X3NpemUgPSBsc3Jfc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlY3Zfc2l6ZSA9IDQwOTY7CisgICAgICB9CisgICAgfQorCisgICAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlciByaW5nIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldC4gKi8KKyAgICAvKiBub3RlIGFsc28gdGhhdCB3ZSBoYXZlIGFsbG9jYXRlZCBhIHF1YW50aXR5ICovCisgICAgLyogb2YgbWVtb3J5IHRoYXQgaXMgYXQgbGVhc3Qgb25lIHJlY3Ytc2l6ZSBncmVhdGVyIHRoYW4gb3VyIHNvY2tldCAqLworICAgIC8qIGJ1ZmZlciBzaXplLiBXZSB3YW50IHRvIGJlIHN1cmUgdGhhdCB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvICovCisgICAgLyogYnVmZmVycyBhbGxvY2F0ZWQgLSB0aGlzIGNhbiBiZSBhIGJpdCBvZiBhIHByb2JsZW0gd2hlbiB0aGUgKi8KKyAgICAvKiByZWN2X3NpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIHNvY2tldCBzaXplLCBzbyB3ZSBtdXN0IGNoZWNrLi4uIHRoZSAqLworICAgIC8qIHVzZXIgbWF5IGhhdmUgd2FudGVkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSAid2lkdGgiIG9mIG91ciByZWN2ICovCisgICAgLyogYnVmZmVycywgd2Ugc2hvdWxkIHJlc3BlY3QgdGhhdCB3aXNoLi4uICovCisgICAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgeworICAgICAgcmVjdl93aWR0aCA9IChsc3Jfc2l6ZS9yZWN2X3NpemUpICsgMTsKKyAgICAgIGlmIChyZWN2X3dpZHRoID09IDEpIHJlY3Zfd2lkdGgrKzsKKyAgICB9CisgICAgCisgICAgaWYgKHJlY3ZfcmluZyA9PSBOVUxMKSB7CisgICAgICAvKiBvbmx5IGFsbG9jYXRlIHRoZSByZWN2IHJpbmcgb25jZS4gdGhpcyBpcyBhIG5ldHdvcmtpbmcgdGVzdCwgKi8KKyAgICAgIC8qIG5vdCBhIG1lbW9yeSBhbGxvY2F0aW9uIHRlc3QuIHRoaXMgd2F5LCB3ZSBkbyBub3QgbmVlZCBhICovCisgICAgICAvKiBkZWFsbG9jYXRlX2J1ZmZlcl9yaW5nKCkgcm91dGluZSwgYW5kIEkgZG9uJ3QgZmVlbCBsaWtlICovCisgICAgICAvKiB3cml0aW5nIG9uZSBhbnl3YXkgOikgcmFqIDExLzk0ICovCisgICAgICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgICAgICByZWN2X3NpemUsCisJCQkJICAgICAgIGxvY2FsX3JlY3ZfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGNwdSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudHMsIHdlIG11c3QgKi8KKyAgICAvKiBjYWxpYnJhdGUgdGhlIGNwdShzKS4gV2Ugd2lsbCBwZXJmb3JtIHRoaXMgdGFzayB3aXRoaW4gdGhlIHRlc3RzICovCisgICAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgICAvKiBjYWxpYnJhdGVfbG9jYWxfY3B1IHdpbGwgcmV0dXJuIHJhdGhlciBxdWlja2x5IGFzIGl0IHdpbGwgaGF2ZSAqLworICAgIC8qIG5vdGhpbmcgdG8gZG8uIElmIGxvY2FsX2NwdV9yYXRlIGlzIHplcm8sIHRoZW4gd2Ugd2lsbCBnbyB0aHJvdWdoICovCisgICAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suICovCisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFub19jb250cm9sKSB7CisgICAgICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUKKwkgc29ja2V0IHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUKKwkgcmVhc29uIGZvciBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwCisJIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsCisJIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlCisJIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzIGRlZmF1bHQgc2hvdWxkIGJlCisJIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsIGRlZmF1bHQgdG8gMSwgd2hpY2gKKwkgd2lsbCBiZSBubyBhbGlnbm1lbnQgYWx0ZXJhdGlvbnMuICovCisKKyAgICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQk9CURPX1NEUF9NQUVSVFM7CisgICAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZV9yZXE7CisgICAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZV9yZXE7CisgICAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPnNlbmRfc2l6ZQk9CXNlbmRfc2l6ZTsKKyAgICAgIHNkcF9tYWVydHNfcmVxdWVzdC0+bm9fZGVsYXkJPQlyZW1fbm9kZWxheTsKKyAgICAgIHNkcF9tYWVydHNfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQJPQlyZW1vdGVfc2VuZF9hbGlnbjsKKyAgICAgIHNkcF9tYWVydHNfcmVxdWVzdC0+c2VuZF9vZmZzZXQJPQlyZW1vdGVfc2VuZF9vZmZzZXQ7CisgICAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICAgIHNkcF9tYWVydHNfcmVxdWVzdC0+Y3B1X3JhdGUJPQlyZW1vdGVfY3B1X3JhdGU7CisgICAgICBpZiAodGVzdF90aW1lKSB7CisJc2RwX21hZXJ0c19yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXNkcF9tYWVydHNfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X2J5dGVzOworICAgICAgfQorICAgICAgc2RwX21hZXJ0c19yZXF1ZXN0LT5zb19yY3Zhdm9pZAk9CXJlbV9yY3Zhdm9pZDsKKyAgICAgIHNkcF9tYWVydHNfcmVxdWVzdC0+c29fc25kYXZvaWQJPQlyZW1fc25kYXZvaWQ7CisjaWZkZWYgRElSVFkKKyAgICAgIHNkcF9tYWVydHNfcmVxdWVzdC0+ZGlydHlfY291bnQgICAgICAgPSAgICAgICByZW1fZGlydHlfY291bnQ7CisgICAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPmNsZWFuX2NvdW50ICAgICAgID0gICAgICAgcmVtX2NsZWFuX2NvdW50OworI2VuZGlmIC8qIERJUlRZICovCisgICAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPnBvcnQgICAgICAgICAgICA9IGF0b2kocmVtb3RlX2RhdGFfcG9ydCk7CisgICAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPmlwZmFtaWx5ICAgICAgICA9IGFmX3RvX25mKHJlbW90ZV9yZXMtPmFpX2ZhbWlseSk7CisgICAgICBpZiAoZGVidWcgPiAxKSB7CisJZnByaW50Zih3aGVyZSwKKwkJIm5ldHBlcmY6IHNlbmRfc2RwX21hZXJ0czogcmVxdWVzdGluZyBTRFAgbWFlcnRzIHRlc3RcbiIpOworICAgICAgfQorICAgICAgCisgICAgICBzZW5kX3JlcXVlc3QoKTsKKyAgICAgIAorICAgICAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudAorCSBzb2NrZXQgcGFyYW1ldGVycyBmb3IgdGhpcyB0ZXN0IHR5cGUuIFdlIHdpbGwgcHV0IHRoZW0gYmFjaworCSBpbnRvIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4KKwkgVGhlIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbAorCSBoYXZlIGRvbmUgYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZQorCSBjcHUgbG9jYWxseSBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUKKwkgY291bnRlciB2YWx1ZSByaWdodCBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlCisJIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodCBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMKKwkgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcyBiZWluZyBzZW50IGZvciB0aGUgU0RQCisJIHRlc3RzLiAgKi8KKyAgICAgIAorICAgICAgcmVjdl9yZXNwb25zZSgpOworICAgIAorICAgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworCWlmIChkZWJ1ZykKKwkgIGZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworCXJzcl9zaXplCT0Jc2RwX21hZXJ0c19yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKwlyc3Nfc2l6ZQk9CXNkcF9tYWVydHNfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisJcmVtX25vZGVsYXkgICAgID0Jc2RwX21hZXJ0c19yZXNwb25zZS0+bm9fZGVsYXk7CisJcmVtb3RlX2NwdV91c2FnZT0Jc2RwX21hZXJ0c19yZXNwb25zZS0+bWVhc3VyZV9jcHU7CisJcmVtb3RlX2NwdV9yYXRlID0gc2RwX21hZXJ0c19yZXNwb25zZS0+Y3B1X3JhdGU7CisJc2VuZF9zaXplICAgICAgID0gc2RwX21hZXJ0c19yZXNwb25zZS0+c2VuZF9zaXplOworCQorCS8qIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBwb3J0IG51bWJlciBpcyBpbgorCSBuZXR3b3JrIG9yZGVyICovCisgICAgICBzZXRfcG9ydF9udW1iZXIocmVtb3RlX3JlcywKKwkJICAgICAgKHNob3J0KXNkcF9tYWVydHNfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgICAgcmVtX3JjdmF2b2lkCT0gc2RwX21hZXJ0c19yZXNwb25zZS0+c29fcmN2YXZvaWQ7CisgICAgICByZW1fc25kYXZvaWQJPSBzZHBfbWFlcnRzX3Jlc3BvbnNlLT5zb19zbmRhdm9pZDsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJZnByaW50Zih3aGVyZSwKKwkJIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlwZXJyb3IoIiIpOworCWZmbHVzaCh3aGVyZSk7CisJCisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICBERU1PX1NUUkVBTV9TRVRVUChsc3Jfc2l6ZSxyc3Nfc2l6ZSkKKyNlbmRpZgorCisgICAgLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgICAgaWYgKGNvbm5lY3QocmVjdl9zb2NrZXQsIAorCQlyZW1vdGVfcmVzLT5haV9hZGRyLAorCQlyZW1vdGVfcmVzLT5haV9hZGRybGVuKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfc2RwX21hZXJ0czogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogRGF0YSBTb2NrZXQgc2V0LXVwIGlzIGZpbmlzaGVkLiBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zLCBlaXRoZXIgKi8KKyAgICAvKiB0aGUgY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkICovCisgICAgLyogaGF2ZSBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSAqLworICAgIC8qIGV4dHJhICBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCAqLworICAgIC8qIHdlJ2xsIHNlZSBpdCBoZXJlLiBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGFzIHdlbGwgc3RhcnQgcHVtcGluZyAqLworICAgIC8qIGRhdGEuICovIAorICAgIAorICAgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgbWFlcnRzIHRlc3QsIHRoZXkgY2FuIGJlICovCisgICAgLyogZWl0aGVyIHRpbWUgb3IgYnl0ZS1jb3VudCBiYXNlZC4gKi8KKyAgICAKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgICB0aW1lc191cCA9IDA7CisgICAgICBieXRlc19yZW1haW5pbmcgPSAwOworICAgICAgLyogaW4gcHJldmlvdXMgcmV2aXNpb25zLCB3ZSBoYWQgdGhlIHNhbWUgY29kZSByZXBlYXRlZCB0aHJvdWdodCAqLworICAgICAgLyogYWxsIHRoZSB0ZXN0IHN1aXRlcy4gdGhpcyB3YXMgdW5uZWNlc3NhcnksIGFuZCBtZWFudCBtb3JlICovCisgICAgICAvKiB3b3JrIGZvciBtZSB3aGVuIEkgd2FudGVkIHRvIHN3aXRjaCB0byBQT1NJWCBzaWduYWxzLCBzbyBJICovCisgICAgICAvKiBoYXZlIGFic3RyYWN0ZWQgdGhpcyBvdXQgaW50byBhIHJvdXRpbmUgaW4gbmV0bGliLmMuIGlmIHlvdSAqLworICAgICAgLyogYXJlIGV4cGVyaWVuY2luZyBzaWduYWwgcHJvYmxlbXMsIHlvdSBtaWdodCB3YW50IHRvIGxvb2sgKi8KKyAgICAgIC8qIHRoZXJlLiByYWogMTEvOTQgKi8KKyAgICAgIGlmICghbm9fY29udHJvbCkgeworCS8qIHRoaXMgaXMgYSBuZXRwZXJmIHRvIG5ldHNlcnZlciB0ZXN0LCBuZXRzZXJ2ZXIgd2lsbCBjbG9zZQorCSAgIHRvIHRlbGwgdXMgdGhlIHRlc3QgaXMgb3Zlciwgc28gdXNlIFBBRF9USU1FIHRvIGF2b2lkCisJICAgY2F1c2luZyB0aGUgbmV0c2VydmVyIGZpdHMuICovCisJc3RhcnRfdGltZXIodGVzdF90aW1lICsgUEFEX1RJTUUpOworICAgICAgfQorICAgICAgZWxzZSB7CisJLyogdGhpcyBpcyBhIG5ldHBlcmYgdG8gZGF0YSBzb3VyY2UgdGVzdCwgbm8gUEFEX1RJTUUgKi8KKwlzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFRoZSB0ZXN0ZXIgd2FudGVkIHRvIHJlY3YgYSBudW1iZXIgb2YgYnl0ZXMuIHdlIGRvbid0IGRvIHRoYXQgCisJIGluIGEgU0RQX01BRVJUUyB0ZXN0LiBzb3JyeS4gcmFqIDIwMDItMDYtMjEgKi8KKyAgICAgIHByaW50ZigibmV0cGVyZjogc2VuZF9zZHBfbWFlcnRzOiB0ZXN0IG11c3QgYmUgdGltZWRcbiIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAgIAorICAgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworICAgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgSU5URVJWQUxTX0lOSVQoKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisgICAgLyogYmVmb3JlIHdlIHN0YXJ0LCBpbml0aWFsaXplIGEgZmV3IHZhcmlhYmxlcyAqLworCisjaWZkZWYgV0FOVF9ERU1PCisgICAgaWYgKGRlbW9fbW9kZSkgeworICAgICAgSElTVF90aW1lc3RhbXAoZGVtb19vbmVfcHRyKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIHRoZSB0ZXN0IHdpbGwgY29udGludWUgdW50aWwgd2UgZWl0aGVyIGdldCBhIHplcm8tYnl0ZSByZWN2KCkKKyAgICAgICBvbiB0aGUgc29ja2V0IG9yIG91ciBmYWlsc2FmZSB0aW1lciBleHBpcmVzLiBtb3N0IG9mIHRoZSB0aW1lCisgICAgICAgd2UgdHJ1c3QgdGhhdCB3ZSBnZXQgYSB6ZXJvLWJ5dGUgcmVjaWV2ZSBmcm9tIHRoZSBzb2NrZXQuIHJhagorICAgICAgIDIwMDItMDYtMjEgKi8KKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAgIC8qIHRpbWVzdGFtcCBqdXN0IGJlZm9yZSB3ZSBnbyBpbnRvIHJlY3YgYW5kIHRoZW4gYWdhaW4ganVzdAorCSBhZnRlciB3ZSBjb21lIG91dCByYWogOC85NCAqLworICAgICAgLyogYnV0IG9ubHkgaWYgd2UgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIGRpc3BsYXkgYSBoaXN0b2dyYW0uIHJhagorCSAyMDA2LTAyLTA3ICovCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworICAgIH0KKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworICAgIAorICAgIHdoaWxlICgoIXRpbWVzX3VwKSAmJiAobGVuPXJlY3YocmVjdl9zb2NrZXQsCisJCQkJICAgIHJlY3ZfcmluZy0+YnVmZmVyX3B0ciwKKwkJCQkgICAgcmVjdl9zaXplLAorCQkJCSAgICAwKSkgPiAwICkgeworCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisJLyogdGltZXN0YW1wIHRoZSBleGl0IGZyb20gdGhlIHJlY3YgY2FsbCBhbmQgdXBkYXRlIHRoZSBoaXN0b2dyYW0gKi8KKwlISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworCUhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8gICAgICAKKworI2lmZGVmIERJUlRZCisgICAgICBhY2Nlc3NfYnVmZmVyKHJlY3ZfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgIHJlY3Zfc2l6ZSwKKwkJICAgIGxvY19kaXJ0eV9jb3VudCwKKwkJICAgIGxvY19jbGVhbl9jb3VudCk7CisjZW5kaWYgLyogRElSVFkgKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgICAgREVNT19TVFJFQU1fSU5URVJWQUwobGVuKTsKKyNlbmRpZgorCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMgICAgICAKKyAgICAgIElOVEVSVkFMU19XQUlUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIAorICAgICAgLyogbm93IHdlIHdhbnQgdG8gbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgbmV4dCBwb3NpdGlvbiBpbiB0aGUgKi8KKyAgICAgIC8qIGRhdGEgYnVmZmVyLi4ud2UgbWF5IGFsc28gd2FudCB0byB3cmFwIGJhY2sgdG8gdGhlICJiZWdpbm5pbmciICovCisgICAgICAvKiBvZiB0aGUgYnVmZmVyc3BhY2UsIHNvIHdlIHdpbGwgbW9kIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgc2VudCAqLworICAgICAgLyogYnkgdGhlIHJlY3Ygd2lkdGgsIGFuZCB1c2UgdGhhdCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCB0byBhZGQgKi8KKyAgICAgIC8qIHRvIHRoZSBiYXNlIHBvaW50ZXIuICovCisgICAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKyAgICAgIGlmIChieXRlc19yZW1haW5pbmcpIHsKKwlieXRlc19yZW1haW5pbmcgLT0gbGVuOworICAgICAgfQorCisgICAgICBsb2NhbF9ieXRlc19yZWN2ZCArPSBsZW47CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwkvKiBtYWtlIHN1cmUgd2UgdGltZXN0YW1wIGp1c3QgYmVmb3JlIHdlIGdvIGludG8gcmVjdiAgKi8KKwkvKiByYWogMjAwNC0wNi0xNSAqLworCUhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgICAKKyAgICB9CisKKyAgICAvKiBhbiBFSU5UUiBpcyB0byBiZSBleHBlY3RlZCB3aGVuIHRoaXMgaXMgYSBub19jb250cm9sIHRlc3QgKi8KKyAgICBpZiAoKChsZW4gPCAwKSB8fCBTT0NLRVRfRUlOVFIobGVuKSkgJiYgKCFub19jb250cm9sKSkgeworICAgICAgcGVycm9yKCJzZW5kX3NkcF9tYWVydHM6IGRhdGEgcmVjdiBlcnJvciIpOworICAgICAgcHJpbnRmKCJsZW4gd2FzICVkXG4iLGxlbik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiBpZiB3ZSBnZXQgaGVyZSwgaXQgbXVzdCBtZWFuIHdlIGhhZCBhIHJlY3YgcmV0dXJuIG9mIDAgYmVmb3JlCisgICAgICAgdGhlIHdhdGNoZG9nIHRpbWVyIGV4cGlyZWQsIG9yIHRoZSB3YXRjaGRvZyB0aW1lciBleHBpcmVkIGFuZAorICAgICAgIHRoaXMgd2FzIGEgbm9fY29udHJvbCB0ZXN0ICovCisKKyAgICAvKiBUaGUgdGVzdCBpcyBvdmVyLiBGbHVzaCB0aGUgYnVmZmVycyB0byB0aGUgcmVtb3RlIGVuZC4gV2UgZG8gYQorICAgICAgIGdyYWNlZnVsIHJlbGVhc2UgdG8gdGVsbCB0aGUgIHJlbW90ZSB3ZSBoYXZlIGFsbCB0aGUgZGF0YS4gKi8gIAorCisgICAgLyogYnV0IGZpcnN0LCBpZiB0aGUgdmVyYm9zaXR5IGlzIGdyZWF0ZXIgdGhhbiAxLCBmaW5kLW91dCB3aGF0ICovCisgICAgLyogdGhlIFNEUCBtYXhpbXVtIHNlZ21lbnRfc2l6ZSB3YXMgKGlmIHBvc3NpYmxlKSAqLworICAgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgICBzZHBfbXNzID0gLTE7CisgICAgICBnZXRfc2RwX2luZm8ocmVjdl9zb2NrZXQsJnNkcF9tc3MpOworICAgIH0KKyAgICAKKyAgICBpZiAoc2h1dGRvd24ocmVjdl9zb2NrZXQsU0hVVF9XUikgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IGNhbm5vdCBzaHV0ZG93biBzZHAgbWFlcnRzIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBzdG9wX3RpbWVyKCk7CisgICAgCisgICAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGxvY2FsIGVsYXBzZWQgdGltZSBmb3IgdGhlCisgICAgICAgdGVzdCwgYW5kIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1CisgICAgICAgdXRpbGl6YXRpb24gKi8gCisgICAgCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nICovCisJCQkJCQkvKiBtZWFzdXJlZCBhbmQgaG93ICovCisJCQkJCQkvKiBsb25nIGRpZCB3ZSByZWFsbHkgKi8KKwkJCQkJCS8qIHJ1bj8gKi8KKyAgICAKKyAgICAvKiB3ZSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgc29ja2V0LCBzbyBjbG9zZSBpdCB0byBwcmV2ZW50IGhpdHRpbmcgKi8KKyAgICAvKiB0aGUgbGltaXQgb24gbWF4aW11bSBvcGVuIGZpbGVzLiAqLworCisgICAgY2xvc2UocmVjdl9zb2NrZXQpOworCisgICAgaWYgKCFub19jb250cm9sKSB7CisgICAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUKKyAgICAgICAgIGNhbGN1bGF0ZWQgc2VydmljZSBkZW1hbmQgYW5kIGFsbCB0aG9zZSBpbnRlcmVzdGluZworICAgICAgICAgdGhpbmdzLiBJZiBpdCB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQgd2lsbCByZXR1cm4gb2J2aW91cworICAgICAgICAgdmFsdWVzLiAqLworICAgIAorICAgICAgcmVjdl9yZXNwb25zZSgpOworICAgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworCWlmIChkZWJ1ZykKKwkgIGZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJZnByaW50Zih3aGVyZSwKKwkJIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlwZXJyb3IoIiIpOworCWZmbHVzaCh3aGVyZSk7CisJCisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZQorCSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dAorCSBtZWFzdXJlZCBieSB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEKKwkgU0RQIG1hZXJ0cyB0ZXN0LCB0aGF0IHRoZSB0d28gbnVtYmVycyBzaG91bGQgYmUgKnZlcnkqCisJIGNsb3NlLi4uIFdlIGNhbGN1bGF0ZSBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUKKwkgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICBJZiBpdCB3YXMgdGltZSwgd2UgbmVlZGVkIHRvLAorCSBhbmQgaWYgaXQgd2FzIGJ5IGJ5dGVzLCB0aGUgdXNlciBtYXkgaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIKKwkgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgcmVjdl9zaXplLCBzbyB3ZQorCSByZWFsbHkgZGlkbid0IHJlY3Ygd2hhdCBoZSBhc2tlZCBmb3IgOy0pICovCisgICAgCisgICAgICBieXRlc19zZW50CT0gbnRvaGQoc2RwX21hZXJ0c19yZXN1bHQtPmJ5dGVzX3NlbnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGJ5dGVzX3NlbnQgPSAoZG91YmxlKWxvY2FsX2J5dGVzX3JlY3ZkOworICAgIH0KKworCisgICAgdGhydXB1dAk9IGNhbGNfdGhydXB1dChieXRlc19zZW50KTsKKworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgICAgLyogdGhlcmUgd2FzIG5vIGlkbGUgY291bnRlciBpbiB0aGUga2VybmVsKHMpLiBXZSBuZWVkIHRvIG1ha2UgKi8KKyAgICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCQorCWxvY2FsX2NwdV91dGlsaXphdGlvbgk9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgICAgfQorICAgICAgZWxzZSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gKGZsb2F0KSAtMS4wOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgfQorICAgICAgCisgICAgICBpZiAocmVtb3RlX2NwdV91c2FnZSkgeworCQorCXJlbW90ZV9jcHVfdXRpbGl6YXRpb24JPSBzZHBfbWFlcnRzX3Jlc3VsdC0+Y3B1X3V0aWw7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19zZW50LAorCQkJCQkJICAgICAgMC4wLAorCQkJCQkJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgICAgIHNkcF9tYWVydHNfcmVzdWx0LT5udW1fY3B1cyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgfSAgICAKKyAgICBlbHNlIHsKKyAgICAgIC8qIHdlIHdlcmUgbm90IG1lYXN1cmluZyBjcHUsIGZvciB0aGUgY29uZmlkZW5jZSBzdHVmZiwgd2UgKi8KKyAgICAgIC8qIHNob3VsZCBtYWtlIGl0IC0xLjAgKi8KKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbgk9IChmbG9hdCkgLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gKGZsb2F0KSAtMS4wOworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgfQorCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW5mb3JtYXRpb24uICovCisgICAgLyogaWYgZGVidWdnaW5nIGlzIG9uLCBjYWxjdWxhdGVfY29uZmlkZW5jZSB3aWxsIHByaW50LW91dCB0aGUgKi8KKyAgICAvKiBwYXJhbWV0ZXJzIHdlIHBhc3MgaXQgKi8KKworICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgCisgICAgCisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24rKzsKKyAgfQorCisgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZmluaXNoZWQgbWFraW5nIGFsbCB0aGUgcnVucyB0aGF0IHdlICovCisgIC8qIHdpbGwgYmUgbWFraW5nLiBzbywgd2Ugc2hvdWxkIGV4dHJhY3Qgd2hhdCB0aGUgY2FsY3VhdGVkIHZhbHVlcyAqLworICAvKiBhcmUgZm9yIGFsbCB0aGUgY29uZmlkZW5jZSBzdHVmZi4gd2UgY291bGQgbWFrZSB0aGUgdmFsdWVzICovCisgIC8qIGdsb2JhbCwgYnV0IHRoYXQgc2VlbWVkIGEgbGl0dGxlIG1lc3N5LCBhbmQgaXQgZGlkIG5vdCBzZWVtIHdvcnRoICovCisgIC8qIGFsbCB0aGUgbXVja2luZyB3aXRoIGhlYWRlciBmaWxlcy4gc28sIHdlIGNyZWF0ZSBhIHJvdXRpbmUgbXVjaCAqLworICAvKiBsaWtlIGNhbGN1YWx0ZV9jb25maWRlbmNlLCB3aGljaCBqdXN0IHJldHVybnMgdGhlIG1lYW4gdmFsdWVzLiAqLworICAvKiByYWogMTEvOTQgKi8KKworICByZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKCZlbGFwc2VkX3RpbWUsCisJCQkgICAgJnRocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisKKyAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgLyogd2UgZGlkIG5vdCBoaXQgY29uZmlkZW5jZSwgYnV0IHdlcmUgd2UgYXNrZWQgdG8gbG9vayBmb3IgaXQ/ICovCisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBkaXNwbGF5X2NvbmZpZGVuY2UoKTsKKyAgICB9CisgIH0KKworICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChzZHBfbWFlcnRzX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJbG9jYWxfY3B1X21ldGhvZCwKKwkJKChwcmludF9oZWFkZXJzKSB8fCAKKwkJIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQsCisJCXJlbW90ZV9jcHVfbWV0aG9kLAorCQkoKHByaW50X2hlYWRlcnMpIHx8IAorCQkgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfdGl0bGUsCisJCWZvcm1hdF91bml0cygpLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgcnNyX3NpemUsCQkgICAgICAgIC8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCSAgICAgICAgLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlY3ZzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgdGhydXB1dCwgCQkgICAgICAgIC8qIHdoYXQgd2FzIHRoZSB4ZmVyIHJhdGUgKi8KKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQsCS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgdGhydXB1dCwKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgICB9CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzcl9zaXplLCAJCS8qIGxvY2FsIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIHJzc19zaXplLCAJCS8qIHJlbW90IHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZWN2cyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIHRocnVwdXQsICAgICAgICAgICAgICAgICAgLyogaG93IGZhc3QgZGlkIGl0IGdvICovCisJICAgICAgKChwcmludF9oZWFkZXJzKSB8fCAKKwkgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBTRFAgc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgCisgICAgLyogdGhpcyBzdHVmZiBuZWVkcyB0byBiZSB3b3JrZWQtb3V0IGluIHRoZSBwcmVzZW5jZSBvZiBjb25maWRlbmNlICovCisgICAgLyogaW50ZXJ2YWxzIGFuZCBtdWx0aXBsZSBpdGVyYXRpb25zIG9mIHRoZSB0ZXN0Li4uIHJhaiAxMS85NCAqLworIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgbG9jYWxfcmVjdl9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3ZfYWxpZ24sCisJICAgIGxvY2FsX3JlY3Zfb2Zmc2V0LAorCSAgICByZW1vdGVfcmVjdl9vZmZzZXQsCisJICAgIGJ5dGVzX3NlbnQsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKW51bW1lc3NhZ2VzLAorCSAgICBudW1tZXNzYWdlcywKKwkgICAgYnl0ZXNfc2VudCAvIChkb3VibGUpc2RwX21hZXJ0c19yZXN1bHQtPnNlbmRfY2FsbHMsCisJICAgIHNkcF9tYWVydHNfcmVzdWx0LT5zZW5kX2NhbGxzKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQyLAorCSAgICBzZHBfbXNzKTsKKyAgICBmZmx1c2god2hlcmUpOworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgZnByaW50Zih3aGVyZSwiXG5cbkhpc3RvZ3JhbSBvZiB0aW1lIHNwZW50IGluIHJlY3YoKSBjYWxsLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIH0KKyAgCit9CisvKiBUaGlzIGlzIHRoZSBzZXJ2ZXItc2lkZSByb3V0aW5lIGZvciB0aGUgc2RwIHN0cmVhbSB0ZXN0LiBJdCBpcyAqLworLyogaW1wbGVtZW50ZWQgYXMgb25lIHJvdXRpbmUuIEkgY291bGQgYnJlYWsgdGhpbmdzLW91dCBzb21ld2hhdCwgYnV0ICovCisvKiBkaWRuJ3QgZmVlbCBpdCB3YXMgbmVjZXNzYXJ5LiAqLworCit2b2lkCityZWN2X3NkcF9zdHJlYW0oKQoreworICAKKyAgc3RydWN0IHNvY2thZGRyX2luIG15YWRkcl9pbiwgcGVlcmFkZHJfaW47CisgIFNPQ0tFVCBzX2xpc3RlbixzX2RhdGE7CisgIG5ldHBlcmZfc29ja2xlbl90IGFkZHJsZW47CisgIGludAlsZW47CisgIHVuc2lnbmVkIGludAlyZWNlaXZlX2NhbGxzOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIGRvdWJsZSAgIGJ5dGVzX3JlY2VpdmVkOworICAKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisKKyAgc3RydWN0IGFkZHJpbmZvICpsb2NhbF9yZXM7CisgIGNoYXIgbG9jYWxfbmFtZVtCVUZTSVpdOworICBjaGFyIHBvcnRfYnVmZmVyW1BPUlRCVUZTSVpFXTsKKworI2lmZGVmIERPX1NFTEVDVAorICBmZF9zZXQgcmVhZGZkczsKKyAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyNlbmRpZiAvKiBET19TRUxFQ1QgKi8KKworICBzdHJ1Y3QJc2RwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdAkqc2RwX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QJc2RwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QJKnNkcF9zdHJlYW1fcmVzcG9uc2U7CisgIHN0cnVjdAlzZHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSpzZHBfc3RyZWFtX3Jlc3VsdHM7CisgIAorI2lmZGVmIERPX1NFTEVDVAorICBGRF9aRVJPKCZyZWFkZmRzKTsKKyAgdGltZW91dC50dl9zZWMgPSAxOworICB0aW1lb3V0LnR2X3VzZWMgPSAwOworI2VuZGlmIC8qIERPX1NFTEVDVCAqLworCisgIHNkcF9zdHJlYW1fcmVxdWVzdAk9IAorICAgIChzdHJ1Y3Qgc2RwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2RwX3N0cmVhbV9yZXNwb25zZQk9IAorICAgIChzdHJ1Y3Qgc2RwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzZHBfc3RyZWFtX3Jlc3VsdHMJPSAKKyAgICAoc3RydWN0IHNkcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X3NkcF9zdHJlYW06IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfc3RyZWFtOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IFNEUF9TVFJFQU1fUkVTUE9OU0U7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3NkcF9zdHJlYW06IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGFsdGVyIHRoZSBtZXNzYWdlX3B0ciB2YXJpYWJsZSB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnQgd2l0aCB0aGUgZGVzaXJlZCBvZmZzZXQuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3NkcF9zdHJlYW06IHJlcXVlc3RlZCBhbGlnbm1lbnQgb2YgJWRcbiIsCisJICAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBjcmVhdGVfZGF0YV9zb2NrZXQgZXhwZWN0cyB0byBmaW5kIHNvbWUgdGhpbmdzIGluIHRoZSBnbG9iYWwgKi8KKyAgLyogdmFyaWFibGVzLCBzbyBzZXQgdGhlIGdsb2JhbHMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgcmVxdWVzdC4gKi8KKyAgLyogb25jZSB0aGUgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQsIHdlIHdpbGwgc2V0IHRoZSByZXNwb25zZSB2YWx1ZXMgKi8KKyAgLyogYmFzZWQgb24gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgdGhvc2UgZ2xvYmFscy4gcmFqIDcvOTQgKi8KKyAgbHNzX3NpemVfcmVxID0gc2RwX3N0cmVhbV9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZV9yZXEgPSBzZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19ub2RlbGF5ICA9IHNkcF9zdHJlYW1fcmVxdWVzdC0+bm9fZGVsYXk7CisgIGxvY19yY3Zhdm9pZCA9IHNkcF9zdHJlYW1fcmVxdWVzdC0+c29fcmN2YXZvaWQ7CisgIGxvY19zbmRhdm9pZCA9IHNkcF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQ7CisKKyAgc2V0X2hvc3RuYW1lX2FuZF9wb3J0KGxvY2FsX25hbWUsCisJCQlwb3J0X2J1ZmZlciwKKwkJCW5mX3RvX2FmKHNkcF9zdHJlYW1fcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJc2RwX3N0cmVhbV9yZXF1ZXN0LT5wb3J0KTsKKworICBsb2NhbF9yZXMgPSBjb21wbGV0ZV9hZGRyaW5mbyhsb2NhbF9uYW1lLAorCQkJCWxvY2FsX25hbWUsCisJCQkJcG9ydF9idWZmZXIsCisJCQkJbmZfdG9fYWYoc2RwX3N0cmVhbV9yZXF1ZXN0LT5pcGZhbWlseSksCisJCQkJU09DS19TVFJFQU0sCisJCQkJSVBQUk9UT19UQ1AsCisJCQkJMCk7CisKKyAgLyogZmFrZSB0aGluZ3Mgb3V0IGJ5IGNoYW5naW5nIGxvY2FsX3Jlcy0+YWlfZmFtaWx5IHRvIEFGX0lORVRfU0RQICovCisgIGxvY2FsX3Jlcy0+YWlfZmFtaWx5ID0gQUZfSU5FVF9TRFA7CisgIGxvY2FsX3Jlcy0+YWlfcHJvdG9jb2wgPSAwOworICBzX2xpc3RlbiA9IGNyZWF0ZV9kYXRhX3NvY2tldChsb2NhbF9yZXMpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyNpZmRlZiBXSU4zMgorICAvKiBUaGUgdGVzdCB0aW1lciBjYW4gZmlyZSBkdXJpbmcgb3BlcmF0aW9ucyBvbiB0aGUgbGlzdGVuaW5nIHNvY2tldCwKKyAgICAgc28gdG8gbWFrZSB0aGUgc3RhcnRfdGltZXIgYmVsb3cgd29yayB3ZSBoYXZlIHRvIG1vdmUKKyAgICAgaXQgdG8gY2xvc2Ugc19saXN0ZW4gd2hpbGUgd2UgYXJlIGJsb2NrZWQgb24gYWNjZXB0LiAqLworICB3aW5fa2x1ZGdlX3NvY2tldDIgPSBzX2xpc3RlbjsKKyNlbmRpZgorICAKKyAgLyogd2hhdCBzb3J0IG9mIHNpemVzIGRpZCB3ZSBlbmQtdXAgd2l0aD8gKi8KKyAgaWYgKHNkcF9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplID09IDApIHsKKyAgICBpZiAobHNyX3NpemUgPiAwKSB7CisgICAgICByZWN2X3NpemUgPSBsc3Jfc2l6ZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZWN2X3NpemUgPSA0MDk2OworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICByZWN2X3NpemUgPSBzZHBfc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZTsKKyAgfQorICAKKyAgLyogd2Ugd2FudCB0byBzZXQtdXAgb3VyIHJlY3ZfcmluZyBpbiBhIG1hbm5lciBhbmFsYWdvdXMgdG8gd2hhdCB3ZSAqLworICAvKiBkbyBvbiB0aGUgc2VuZGluZyBzaWRlLiB0aGlzIGlzIG1vcmUgZm9yIHRoZSBzYWtlIG9mIHN5bW1ldHJ5ICovCisgIC8qIHRoYW4gZm9yIHRoZSBuZWVkcyBvZiBzYXkgY29weSBhdm9pZGFuY2UsIGJ1dCBpdCBtaWdodCBhbHNvIGJlICovCisgIC8qIG1vcmUgcmVhbGlzdGljIC0gdGhpcyB3YXkgb25lIGNvdWxkIGNvbmNlaXZhYmx5IGdvIHdpdGggYSAqLworICAvKiBkb3VibGUtYnVmZmVyaW5nIHNjaGVtZSB3aGVuIHRha2luZyB0aGUgZGF0YSBhbiBwdXR0aW5nIGl0IGludG8gKi8KKyAgLyogdGhlIGZpbGVzeXN0ZW0gb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gcmFqIDcvOTQgKi8KKworICBpZiAocmVjdl93aWR0aCA9PSAwKSB7CisgICAgcmVjdl93aWR0aCA9IChsc3Jfc2l6ZS9yZWN2X3NpemUpICsgMTsKKyAgICBpZiAocmVjdl93aWR0aCA9PSAxKSByZWN2X3dpZHRoKys7CisgIH0KKworICByZWN2X3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhyZWN2X3dpZHRoLAorCQkJCSAgIHJlY3Zfc2l6ZSwKKwkJCQkgICBzZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHNkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2RwX3N0cmVhbTogcmVjZWl2ZSBhbGlnbm1lbnQgYW5kIG9mZnNldCBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfbGlzdGVuLCA1KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLCAKKwkJICAoc3RydWN0IHNvY2thZGRyICopJm15YWRkcl9pbiwKKwkJICAmYWRkcmxlbikgPT0gU09DS0VUX0VSUk9SKXsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHNkcF9zdHJlYW1fcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAoaW50KSBudG9ocyhteWFkZHJfaW4uc2luX3BvcnQpOworICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyAgID0gMDsKKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAtMSB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgc2RwX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGUgPSAoZmxvYXQpMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBpZiAoc2RwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHNkcF9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICBzZHBfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdShzZHBfc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICBlbHNlIHsKKyAgICBzZHBfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIH0KKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgc2RwX3N0cmVhbV9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICBzZHBfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplID0gbHNyX3NpemU7CisgIHNkcF9zdHJlYW1fcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHNkcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3JjdmF2b2lkID0gbG9jX3JjdmF2b2lkOworICBzZHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19zbmRhdm9pZCA9IGxvY19zbmRhdm9pZDsKKyAgc2RwX3N0cmVhbV9yZXNwb25zZS0+cmVjZWl2ZV9zaXplID0gcmVjdl9zaXplOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworICAKKyAgaWYgKChzX2RhdGE9YWNjZXB0KHNfbGlzdGVuLAorCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcmFkZHJfaW4sCisJCSAgICAgJmFkZHJsZW4pKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIC8qIExldCdzIGp1c3QgcHVudC4gVGhlIHJlbW90ZSB3aWxsIGJlIGdpdmVuIHNvbWUgaW5mb3JtYXRpb24gKi8KKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgZXhpdCgxKTsKKyAgfQorCisjaWZkZWYgS0xVREdFX1NPQ0tFVF9PUFRJT05TCisgIC8qIHRoaXMgaXMgZm9yIHRob3NlIHN5c3RlbXMgd2hpY2ggKklOQ09SUkVDVExZKiBmYWlsIHRvIHBhc3MgKi8KKyAgLyogYXR0cmlidXRlcyBhY3Jvc3MgYW4gYWNjZXB0KCkgY2FsbC4gSW5jbHVkaW5nIHRoaXMgZ29lcyBhZ2FpbnN0ICovCisgIC8qIG15IGJldHRlciBqdWRnZW1lbnQgOiggcmFqIDExLzk1ICovCisKKyAga2x1ZGdlX3NvY2tldF9vcHRpb25zKHNfZGF0YSk7CisKKyNlbmRpZiAvKiBLTFVER0VfU09DS0VUX09QVElPTlMgKi8KKyAgCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydChzZHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSBzZW5kZXIgZG9lcyBhIHNodXRkb3duLCB3aGljaCB3aWxsICovCisgIC8qIHJldHVybiBhIGxlbmd0aCBvZiB6ZXJvICAgKi8KKyAgCisgIC8qIHRoZXJlIHVzZWQgdG8gYmUgYW4gI2lmZGVmIERJUlRZIGNhbGwgdG8gYWNjZXNzX2J1ZmZlcigpIGhlcmUsCisgICAgIGJ1dCB3ZSBoYXZlIHN3aXRjaGVkIGZyb20gYWNjZXNzaW5nIHRoZSBidWZmZXIgYmVmb3JlIHRoZSByZWN2KCkKKyAgICAgY2FsbCB0byBhY2Nlc3NpbmcgdGhlIGJ1ZmZlciBhZnRlciB0aGUgcmVjdigpIGNhbGwuICBUaGUKKyAgICAgYWNjZXNzaW5nIGJlZm9yZSB3YXMsIElJUkMsIHJlbGF0ZWQgdG8gaGF2aW5nIGRpcnR5IGRhdGEgd2hlbgorICAgICBkb2luZyBwYWdlLWZsaXBwaW5nIGNvcHkgYXZvaWRhbmNlLiAqLworCisgIGJ5dGVzX3JlY2VpdmVkID0gMDsKKyAgcmVjZWl2ZV9jYWxscyAgPSAwOworCisgIHdoaWxlICgobGVuID0gcmVjdihzX2RhdGEsIHJlY3ZfcmluZy0+YnVmZmVyX3B0ciwgcmVjdl9zaXplLCAwKSkgIT0gMCkgeworICAgIGlmIChsZW4gPT0gU09DS0VUX0VSUk9SICkKKwl7CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgYnl0ZXNfcmVjZWl2ZWQgKz0gbGVuOworICAgIHJlY2VpdmVfY2FsbHMrKzsKKworI2lmZGVmIERJUlRZCisgICAgLyogd2UgYWNjZXNzIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIHJlY3YoKSBjYWxsIG5vdywgcmF0aGVyIHRoYW4gYmVmb3JlICovCisgICAgYWNjZXNzX2J1ZmZlcihyZWN2X3JpbmctPmJ1ZmZlcl9wdHIsCisJCSAgcmVjdl9zaXplLAorCQkgIHNkcF9zdHJlYW1fcmVxdWVzdC0+ZGlydHlfY291bnQsCisJCSAgc2RwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCk7CisjZW5kaWYgLyogRElSVFkgKi8KKworCisgICAgLyogbW92ZSB0byB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIHJlY3ZfcmluZyAqLworICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworI2lmZGVmIFBBVVNFCisgICAgc2xlZXAoMSk7CisjZW5kaWYgLyogUEFVU0UgKi8KKworI2lmZGVmIERPX1NFTEVDVAorCUZEX1NFVChzX2RhdGEsJnJlYWRmZHMpOworCXNlbGVjdChzX2RhdGErMSwmcmVhZGZkcyxOVUxMLE5VTEwsJnRpbWVvdXQpOworI2VuZGlmIC8qIERPX1NFTEVDVCAqLworCisgIH0KKyAgCisgIC8qIHBlcmZvcm0gYSBzaHV0ZG93biB0byBzaWduYWwgdGhlIHNlbmRlciB0aGF0ICovCisgIC8qIHdlIGhhdmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhIHNlbnQuIHJhaiA0LzkzICovCisKKyAgaWYgKHNodXRkb3duKHNfZGF0YSxTSFVUX1dSKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgCisgIGNwdV9zdG9wKHNkcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2RwX3N0cmVhbTogZ290ICVnIGJ5dGVzXG4iLAorCSAgICBieXRlc19yZWNlaXZlZCk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2RwX3N0cmVhbTogZ290ICVkIHJlY3ZzXG4iLAorCSAgICByZWNlaXZlX2NhbGxzKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzZHBfc3RyZWFtX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkCT0gaHRvbmQoYnl0ZXNfcmVjZWl2ZWQpOworICBzZHBfc3RyZWFtX3Jlc3VsdHMtPmVsYXBzZWRfdGltZQk9IGVsYXBzZWRfdGltZTsKKyAgc2RwX3N0cmVhbV9yZXN1bHRzLT5yZWN2X2NhbGxzCT0gcmVjZWl2ZV9jYWxsczsKKyAgCisgIHNkcF9zdHJlYW1fcmVzdWx0cy0+Y3B1X21ldGhvZCA9IGNwdV9tZXRob2Q7CisgIHNkcF9zdHJlYW1fcmVzdWx0cy0+bnVtX2NwdXMgICA9IGxpYl9udW1fbG9jX2NwdXM7CisgIAorICBpZiAoc2RwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHNkcF9zdHJlYW1fcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgIH07CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zZHBfc3RyZWFtOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiICAgICAgICAgICAgICAgICBieXRlc19yZWNlaXZlZCAlZyByZWNlaXZlX2NhbGxzICVkXG4iLAorCSAgICBieXRlc19yZWNlaXZlZCwKKwkgICAgcmVjZWl2ZV9jYWxscyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiAgICAgICAgICAgICAgICAgbGVuICVkXG4iLAorCSAgICBsZW4pOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBzZW5kX3Jlc3BvbnNlKCk7CisKKyAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldHMgKi8KKyAgY2xvc2Uoc19kYXRhKTsKKyAgY2xvc2Uoc19saXN0ZW4pOworCisgIH0KKwwKKy8qIFRoaXMgaXMgdGhlIHNlcnZlci1zaWRlIHJvdXRpbmUgZm9yIHRoZSBzZHAgbWFlcnRzIHRlc3QuIEl0IGlzCisgICBpbXBsZW1lbnRlZCBhcyBvbmUgcm91dGluZS4gSSBjb3VsZCBicmVhayB0aGluZ3Mtb3V0IHNvbWV3aGF0LCBidXQKKyAgIGRpZG4ndCBmZWVsIGl0IHdhcyBuZWNlc3NhcnkuICovIAorCit2b2lkCityZWN2X3NkcF9tYWVydHMoKQoreworICAKKyAgc3RydWN0IHNvY2thZGRyX2luIG15YWRkcl9pbiwgcGVlcmFkZHJfaW47CisgIHN0cnVjdCBhZGRyaW5mbyAqbG9jYWxfcmVzOworICBjaGFyICBsb2NhbF9uYW1lW0JVRlNJWl07CisgIGNoYXIgIHBvcnRfYnVmZmVyW1BPUlRCVUZTSVpFXTsKKworICBTT0NLRVQJc19saXN0ZW4sc19kYXRhOworICBuZXRwZXJmX3NvY2tsZW5fdCAJYWRkcmxlbjsKKyAgaW50CWxlbjsKKyAgdW5zaWduZWQgaW50CXNlbmRfY2FsbHM7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgZG91YmxlICAgYnl0ZXNfc2VudCA9IDAuMCA7CisgIAorICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKworICBzdHJ1Y3QJc2RwX21hZXJ0c19yZXF1ZXN0X3N0cnVjdAkqc2RwX21hZXJ0c19yZXF1ZXN0OworICBzdHJ1Y3QJc2RwX21hZXJ0c19yZXNwb25zZV9zdHJ1Y3QJKnNkcF9tYWVydHNfcmVzcG9uc2U7CisgIHN0cnVjdAlzZHBfbWFlcnRzX3Jlc3VsdHNfc3RydWN0CSpzZHBfbWFlcnRzX3Jlc3VsdHM7CisgIAorICBzZHBfbWFlcnRzX3JlcXVlc3QJPSAKKyAgICAoc3RydWN0IHNkcF9tYWVydHNfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNkcF9tYWVydHNfcmVzcG9uc2UJPSAKKyAgICAoc3RydWN0IHNkcF9tYWVydHNfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2RwX21hZXJ0c19yZXN1bHRzCT0gCisgICAgKHN0cnVjdCBzZHBfbWFlcnRzX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9zZHBfbWFlcnRzOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZAorICAgICBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmCisgICAgIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlCisgICAgIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwKKyAgICAgc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlCisgICAgIGRldGVybWluZWQsIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvCisgICAgIHdyb25nIGZvciBhbnkgcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQKKyAgICAgd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMKKyAgICAgdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cworICAgICB1bmV4cGVjdGVkIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2RwX21hZXJ0czogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBTRFBfTUFFUlRTX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfbWFlcnRzOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGUgdG8gYmUgYXQgdGhlIGRlc2lyZWQgKi8KKyAgLyogYWxpZ25tZW50IHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfbWFlcnRzOiByZXF1ZXN0ZWQgYWxpZ25tZW50IG9mICVkXG4iLAorCSAgICBzZHBfbWFlcnRzX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogR3JhYiBhIHNvY2tldCB0byBsaXN0ZW4gb24sIGFuZCB0aGVuIGxpc3RlbiBvbiBpdC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2RwX21hZXJ0czogZ3JhYmJpbmcgYSBzb2NrZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIGNyZWF0ZV9kYXRhX3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSBzZHBfbWFlcnRzX3JlcXVlc3QtPnNlbmRfYnVmX3NpemU7CisgIGxzcl9zaXplX3JlcSA9IHNkcF9tYWVydHNfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZTsKKyAgbG9jX25vZGVsYXkgPSBzZHBfbWFlcnRzX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSBzZHBfbWFlcnRzX3JlcXVlc3QtPnNvX3JjdmF2b2lkOworICBsb2Nfc25kYXZvaWQgPSBzZHBfbWFlcnRzX3JlcXVlc3QtPnNvX3NuZGF2b2lkOworCisgIHNldF9ob3N0bmFtZV9hbmRfcG9ydChsb2NhbF9uYW1lLAorCQkJcG9ydF9idWZmZXIsCisJCQluZl90b19hZihzZHBfbWFlcnRzX3JlcXVlc3QtPmlwZmFtaWx5KSwKKwkJCXNkcF9tYWVydHNfcmVxdWVzdC0+cG9ydCk7CisKKyAgbG9jYWxfcmVzID0gY29tcGxldGVfYWRkcmluZm8obG9jYWxfbmFtZSwKKwkJCQlsb2NhbF9uYW1lLAorCQkJCXBvcnRfYnVmZmVyLAorCQkJCW5mX3RvX2FmKHNkcF9tYWVydHNfcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJCVNPQ0tfU1RSRUFNLAorCQkJCUlQUFJPVE9fVENQLAorCQkJCTApOworCisgIC8qIGZha2UgdGhpbmdzIG91dCBieSBjaGFuZ2luZyBsb2NhbF9yZXMtPmFpX2ZhbWlseSB0byBBRl9JTkVUX1NEUCAqLworICBsb2NhbF9yZXMtPmFpX2ZhbWlseSA9IEFGX0lORVRfU0RQOworICBsb2NhbF9yZXMtPmFpX3Byb3RvY29sID0gMDsKKyAgc19saXN0ZW4gPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgCisgIGlmIChzX2xpc3RlbiA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisjaWZkZWYgV0lOMzIKKyAgLyogVGhlIHRlc3QgdGltZXIgY2FuIGZpcmUgZHVyaW5nIG9wZXJhdGlvbnMgb24gdGhlIGxpc3RlbmluZyBzb2NrZXQsCisgICAgIHNvIHRvIG1ha2UgdGhlIHN0YXJ0X3RpbWVyIGJlbG93IHdvcmsgd2UgaGF2ZSB0byBtb3ZlCisgICAgIGl0IHRvIGNsb3NlIHNfbGlzdGVuIHdoaWxlIHdlIGFyZSBibG9ja2VkIG9uIGFjY2VwdC4gKi8KKyAgd2luX2tsdWRnZV9zb2NrZXQyID0gc19saXN0ZW47CisjZW5kaWYKKworICAKKyAgLyogd2hhdCBzb3J0IG9mIHNpemVzIGRpZCB3ZSBlbmQtdXAgd2l0aD8gKi8KKyAgaWYgKHNkcF9tYWVydHNfcmVxdWVzdC0+c2VuZF9zaXplID09IDApIHsKKyAgICBpZiAobHNzX3NpemUgPiAwKSB7CisgICAgICBzZW5kX3NpemUgPSBsc3Nfc2l6ZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBzZW5kX3NpemUgPSA0MDk2OworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBzZW5kX3NpemUgPSBzZHBfbWFlcnRzX3JlcXVlc3QtPnNlbmRfc2l6ZTsKKyAgfQorICAKKyAgLyogd2Ugd2FudCB0byBzZXQtdXAgb3VyIHJlY3ZfcmluZyBpbiBhIG1hbm5lciBhbmFsYWdvdXMgdG8gd2hhdCB3ZSAqLworICAvKiBkbyBvbiB0aGUgcmVjdmluZyBzaWRlLiB0aGlzIGlzIG1vcmUgZm9yIHRoZSBzYWtlIG9mIHN5bW1ldHJ5ICovCisgIC8qIHRoYW4gZm9yIHRoZSBuZWVkcyBvZiBzYXkgY29weSBhdm9pZGFuY2UsIGJ1dCBpdCBtaWdodCBhbHNvIGJlICovCisgIC8qIG1vcmUgcmVhbGlzdGljIC0gdGhpcyB3YXkgb25lIGNvdWxkIGNvbmNlaXZhYmx5IGdvIHdpdGggYSAqLworICAvKiBkb3VibGUtYnVmZmVyaW5nIHNjaGVtZSB3aGVuIHRha2luZyB0aGUgZGF0YSBhbiBwdXR0aW5nIGl0IGludG8gKi8KKyAgLyogdGhlIGZpbGVzeXN0ZW0gb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gcmFqIDcvOTQgKi8KKworICBpZiAoc2VuZF93aWR0aCA9PSAwKSB7CisgICAgc2VuZF93aWR0aCA9IChsc3Jfc2l6ZS9zZW5kX3NpemUpICsgMTsKKyAgICBpZiAoc2VuZF93aWR0aCA9PSAxKSBzZW5kX3dpZHRoKys7CisgIH0KKworICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIHNlbmRfc2l6ZSwKKwkJCQkgICBzZHBfbWFlcnRzX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCQkJCSAgIHNkcF9tYWVydHNfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2RwX21hZXJ0czogcmVjZWl2ZSBhbGlnbm1lbnQgYW5kIG9mZnNldCBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfbGlzdGVuLCA1KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLCAKKwkJICAoc3RydWN0IHNvY2thZGRyICopJm15YWRkcl9pbiwKKwkJICAmYWRkcmxlbikgPT0gU09DS0VUX0VSUk9SKXsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHNkcF9tYWVydHNfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAoaW50KSBudG9ocyhteWFkZHJfaW4uc2luX3BvcnQpOworICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyAgID0gMDsKKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAtMSB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgc2RwX21hZXJ0c19yZXNwb25zZS0+Y3B1X3JhdGUgPSAoZmxvYXQpMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBpZiAoc2RwX21hZXJ0c19yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHNkcF9tYWVydHNfcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICBzZHBfbWFlcnRzX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdShzZHBfbWFlcnRzX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICBlbHNlIHsKKyAgICBzZHBfbWFlcnRzX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIH0KKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgc2RwX21hZXJ0c19yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICBzZHBfbWFlcnRzX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplID0gbHNyX3NpemU7CisgIHNkcF9tYWVydHNfcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHNkcF9tYWVydHNfcmVzcG9uc2UtPnNvX3JjdmF2b2lkID0gbG9jX3JjdmF2b2lkOworICBzZHBfbWFlcnRzX3Jlc3BvbnNlLT5zb19zbmRhdm9pZCA9IGxvY19zbmRhdm9pZDsKKyAgc2RwX21hZXJ0c19yZXNwb25zZS0+c2VuZF9zaXplID0gc2VuZF9zaXplOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworCisgIC8qIHdlIHdpbGwgc3RhcnQgdGhlIHRpbWVyIGJlZm9yZSB0aGUgYWNjZXB0KCkgdG8gYmUgc29tZXdoYXQKKyAgICAgYW5hbGFnb3VzIHRvIHRoZSBzdGFydGluZyBvZiB0aGUgdGltZXIgYmVmb3JlIHRoZSBjb25uZWN0KCkgY2FsbAorICAgICBpbiB0aGUgU0RQX1NUUkVBTSB0ZXN0LiByYWogMjAwMi0wNi0yMSAqLworCisgIHN0YXJ0X3RpbWVyKHNkcF9tYWVydHNfcmVxdWVzdC0+dGVzdF9sZW5ndGgpOworCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwKKyAgICAgZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydChzZHBfbWFlcnRzX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisKKyAgaWYgKChzX2RhdGE9YWNjZXB0KHNfbGlzdGVuLAorCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcmFkZHJfaW4sCisJCSAgICAgJmFkZHJsZW4pKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIC8qIExldCdzIGp1c3QgcHVudC4gVGhlIHJlbW90ZSB3aWxsIGJlIGdpdmVuIHNvbWUgaW5mb3JtYXRpb24gKi8KKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgZXhpdCgxKTsKKyAgfQorCisjaWZkZWYgS0xVREdFX1NPQ0tFVF9PUFRJT05TCisgIAorICAvKiB0aGlzIGlzIGZvciB0aG9zZSBzeXN0ZW1zIHdoaWNoICpJTkNPUlJFQ1RMWSogZmFpbCB0byBwYXNzCisgICAgIGF0dHJpYnV0ZXMgYWNyb3NzIGFuIGFjY2VwdCgpIGNhbGwuIEluY2x1ZGluZyB0aGlzIGdvZXMgYWdhaW5zdAorICAgICBteSBiZXR0ZXIganVkZ2VtZW50IDooIHJhaiAxMS85NSAqLworCisgIGtsdWRnZV9zb2NrZXRfb3B0aW9ucyhzX2RhdGEpOworCisjZW5kaWYgLyogS0xVREdFX1NPQ0tFVF9PUFRJT05TICovCisgIAorICAvKiBUaGUgbG9vcCB3aWxsIGV4aXQgd2hlbiB0aGUgc2VuZGVyIGRvZXMgYSBzaHV0ZG93biwgd2hpY2ggd2lsbCAqLworICAvKiByZXR1cm4gYSBsZW5ndGggb2YgemVybyAgICovCisgIAorICBieXRlc19zZW50ID0gMC4wOworICBzZW5kX2NhbGxzICA9IDA7CisKKyAgbGVuID0gMDsgICAvKiBudC1saW50OyBsZW4gaXMgbm90IGluaXRpYWxpemVkIChwcmludGYgZmFyIGJlbG93KSBpZgorCQl0aW1lc191cCBpbml0aWFsbHkgdHJ1ZS4qLworICB0aW1lc191cCA9IDA7IC8qIG11c3QgcmVtZW1iZXIgdG8gaW5pdGlhbGl6ZSB0aGlzIGxpdHRsZSBiZWF1dHkgKi8KKyAgd2hpbGUgKCF0aW1lc191cCkgeworCisjaWZkZWYgRElSVFkKKyAgICAvKiB3ZSB3YW50IHRvIGRpcnR5IHNvbWUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVnZXJzIGluIHRoZSBidWZmZXIgKi8KKyAgICAvKiB3ZSBhcmUgYWJvdXQgdG8gc2VuZC4gd2UgbWF5IGFsc28gd2FudCB0byBicmluZyBzb21lIG51bWJlciBvZiAqLworICAgIC8qIHRoZW0gY2xlYW5seSBpbnRvIHRoZSBjYWNoZS4gVGhlIGNsZWFuIG9uZXMgd2lsbCBmb2xsb3cgYW55IGRpcnR5ICovCisgICAgLyogb25lcyBpbnRvIHRoZSBjYWNoZS4gKi8KKworICBhY2Nlc3NfYnVmZmVyKHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJc2VuZF9zaXplLAorCQlzZHBfbWFlcnRzX3JlcXVlc3QtPmRpcnR5X2NvdW50LAorCQlzZHBfbWFlcnRzX3JlcXVlc3QtPmNsZWFuX2NvdW50KTsKKworI2VuZGlmIC8qIERJUlRZICovCisKKyAgICBpZigobGVuPXNlbmQoc19kYXRhLAorCQkgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgc2VuZF9zaXplLAorCQkgMCkpICE9IHNlbmRfc2l6ZSkgeworCQlpZiAoKGxlbiA+PTApIHx8IFNPQ0tFVF9FSU5UUihsZW4pKSB7CisJICAgICAgLyogdGhlIHRlc3Qgd2FzIGludGVycnVwdGVkLCBtdXN0IGJlIHRoZSBlbmQgb2YgdGVzdCAqLworCSAgICAgIGJyZWFrOworCQl9CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBieXRlc19zZW50ICs9IGxlbjsKKyAgICBzZW5kX2NhbGxzKys7CisKKyAgICAvKiBtb3JlIHRvIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUgc2VuZF9yaW5nICovCisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworCisgIH0KKyAgCisgIC8qIHBlcmZvcm0gYSBzaHV0ZG93biB0byBzaWduYWwgdGhlIHNlbmRlciB0aGF0ICovCisgIC8qIHdlIGhhdmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhIHNlbnQuIHJhaiA0LzkzICovCisKKyAgaWYgKHNodXRkb3duKHNfZGF0YSxTSFVUX1dSKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAvKiBoYW5nIGEgcmVjdigpIG9mZiB0aGUgc29ja2V0IHRvIGJsb2NrIHVudGlsIHRoZSByZW1vdGUgaGFzCisgICAgIGJyb3VnaHQgYWxsIHRoZSBkYXRhIHVwIGludG8gdGhlIGFwcGxpY2F0aW9uLiBpdCB3aWxsIGRvIGEKKyAgICAgc2h1dGRvd24gdG8gY2F1c2UgYSBGSU4gdG8gYmUgc2VudCBvdXIgd2F5LiBXZSB3aWxsIGFzc3VtZSB0aGF0CisgICAgIGFueSBleGl0IGZyb20gdGhlIHJlY3YoKSBjYWxsIGlzIGdvb2QuLi4gcmFqIDQvOTMgKi8KKyAgICAKKyAgcmVjdihzX2RhdGEsIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwgc2VuZF9zaXplLCAwKTsKKyAgICAKKyAgCisgIGNwdV9zdG9wKHNkcF9tYWVydHNfcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2RwX21hZXJ0czogZ290ICVnIGJ5dGVzXG4iLAorCSAgICBieXRlc19zZW50KTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zZHBfbWFlcnRzOiBnb3QgJWQgc2VuZHNcbiIsCisJICAgIHNlbmRfY2FsbHMpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNkcF9tYWVydHNfcmVzdWx0cy0+Ynl0ZXNfc2VudAk9IGh0b25kKGJ5dGVzX3NlbnQpOworICBzZHBfbWFlcnRzX3Jlc3VsdHMtPmVsYXBzZWRfdGltZQk9IGVsYXBzZWRfdGltZTsKKyAgc2RwX21hZXJ0c19yZXN1bHRzLT5zZW5kX2NhbGxzCT0gc2VuZF9jYWxsczsKKyAgCisgIGlmIChzZHBfbWFlcnRzX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgc2RwX21hZXJ0c19yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKyAgfTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3NkcF9tYWVydHM6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICIgICAgICAgICAgICAgICAgIGJ5dGVzX3NlbnQgJWcgc2VuZF9jYWxscyAlZFxuIiwKKwkgICAgYnl0ZXNfc2VudCwKKwkgICAgc2VuZF9jYWxscyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiAgICAgICAgICAgICAgICAgbGVuICVkXG4iLAorCSAgICBsZW4pOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNkcF9tYWVydHNfcmVzdWx0cy0+Y3B1X21ldGhvZCA9IGNwdV9tZXRob2Q7CisgIHNkcF9tYWVydHNfcmVzdWx0cy0+bnVtX2NwdXMgICA9IGxpYl9udW1fbG9jX2NwdXM7CisgIHNlbmRfcmVzcG9uc2UoKTsKKworICAvKiB3ZSBhcmUgbm93IGRvbmUgd2l0aCB0aGUgc29ja2V0cyAqLworICBjbG9zZShzX2RhdGEpOworICBjbG9zZShzX2xpc3Rlbik7CisKKyAgfQorDAorCisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHNlbmRpbmcgKG5ldHBlcmYpIHNpZGUgb2YgdGhlIFNEUF9SUiAqLworIC8qIHRlc3QuICovCisKK3ZvaWQKK3NlbmRfc2RwX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmYgJXNcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgJXNcbiI7CisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHJhbnMuICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgUmF0ZSAgICAgbG9jYWwgIHJlbW90ZSBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICBieXRlcyAgIGJ5dGVzICBzZWNzLiAgIHBlciBzZWMgICUlICVjICAgICUlICVjICAgIHVzL1RyICAgdXMvVHJcblxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMCA9CisgICAgIiU2LjNmICVjICVzXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgJS02ZCAlLTYuMmYgICUtNi4yZiAgJS02LjJmICUtNi4yZiAlLTYuM2YgICUtNi4zZiAlc1xuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlwKK0FsaWdubWVudCAgICAgIE9mZnNldFxuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZVxuXAorU2VuZCAgIFJlY3YgICAgU2VuZCAgIFJlY3ZcblwKKyU1ZCAgJTVkICAgJTVkICAlNWRcbiI7CisgIAorICAKKyAgaW50CQkJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorICBpbnQJbGVuOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJbnVtbWVzc2FnZXM7CisgIFNPQ0tFVAlzZW5kX3NvY2tldDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgZG91YmxlCWJ5dGVzX3hmZXJkOworCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKyAgCisgIGludAlyc3BfYnl0ZXNfbGVmdDsKKyAgaW50CXJzcF9ieXRlc19yZWN2ZDsKKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgc3RydWN0IGFkZHJpbmZvICpyZW1vdGVfcmVzOworCisgIHN0cnVjdAlzZHBfcnJfcmVxdWVzdF9zdHJ1Y3QJKnNkcF9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJc2RwX3JyX3Jlc3BvbnNlX3N0cnVjdAkqc2RwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJc2RwX3JyX3Jlc3VsdHNfc3RydWN0CSpzZHBfcnJfcmVzdWx0OworCisjaWZkZWYgV0FOVF9GSVJTVF9CVVJTVAorI2RlZmluZSBSRVFVRVNUX0NXTkRfSU5JVElBTCAyCisgIC8qICJpbiB0aGUgYmVnaW5uaW5nLi4uIiB0aGUgV0FOVF9GSVJTVF9CVVJTVCBzdHVmZiB3YXMgbGlrZSBib3RoCisgICAgIFVuaXggYW5kIHRoZSBzdGF0ZSBvZiBOZXcgSmVyc2V5IC0gYm90aCB3ZXJlIHNpbXBsZSBhbiB1bnNwb2lsZWQuCisgICAgIHRoZW4gaXQgd2FzIHJlYWxpemVkIHRoYXQgc29tZSBzdGFja3MgYXJlIHF1aXRlIHBpY2t5IGFib3V0CisgICAgIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3dzIGFuZCBhIG5vbi10cml2aWFsIGluaXRpYWwgYnVyc3Qgb2YKKyAgICAgcmVxdWVzdHMgd291bGQgbm90IGJlIGluZGl2aWR1YWwgc2VnbWVudHMgZXZlbiB3aXRoIFRDUF9OT0RFTEFZCisgICAgIHNldC4gc28sIHdlIGhhdmUgdG8gc3RhcnQgdHJhY2tpbmcgYSBwb29yLW1hbidzIGNvbmdlc3Rpb24gd2luZG93CisgICAgIHVwIGhlcmUgaW4gd2luZG93IHNwYWNlIGJlY2F1c2Ugd2Ugd2FudCB0byB0cnkgdG8gbWFrZSBzb21ldGhpbmcKKyAgICAgaGFwcGVuIHRoYXQgZnJhbmtseSwgd2UgY2Fubm90IGd1YXJhbnRlZSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uCisgICAgIG9mIFNEUC4gIGFpbid0IHRoYXQgZ3JhbmQ/LSkgIHJhaiAyMDA2LTAxLTMwICovCisgIGludCByZXF1ZXN0c19vdXRzdGFuZGluZyA9IDA7CisgIGludCByZXF1ZXN0X2N3bmQgPSBSRVFVRVNUX0NXTkRfSU5JVElBTDsgIC8qIHdlIGFzcy11LW1lIHRoYXQgaGF2aW5nCisJCQkJCSAgICAgICB0aHJlZSByZXF1ZXN0cworCQkJCQkgICAgICAgb3V0c3RhbmRpbmcgYXQgdGhlCisJCQkJCSAgICAgICBiZWdpbm5pbmcgb2YgdGhlIHRlc3QKKwkJCQkJICAgICAgIGlzIG9rIHdpdGggU0RQIHN0YWNrcworCQkJCQkgICAgICAgb2YgaW50ZXJlc3QuIHRoZSBmaXJzdAorCQkJCQkgICAgICAgdHdvIHdpbGwgY29tZSBmcm9tIG91cgorCQkJCQkgICAgICAgZmlyc3RfYnVyc3QgbG9vcCwgYW5kCisJCQkJCSAgICAgICB0aGUgdGhpcmQgZnJvbSBvdXIKKwkJCQkJICAgICAgIHJlZ3VsYXJseSBzY2hlZHVsZWQKKwkJCQkJICAgICAgIHNlbmQgKi8KKyNlbmRpZgorCisgIHNkcF9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCBzZHBfcnJfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNkcF9ycl9yZXNwb25zZT0KKyAgICAoc3RydWN0IHNkcF9ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzZHBfcnJfcmVzdWx0CT0KKyAgICAoc3RydWN0IHNkcF9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZSAqLworICAvKiBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50ICovCisgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgIC8qIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKworICBjb21wbGV0ZV9hZGRyaW5mb3MoJnJlbW90ZV9yZXMsCisJCSAgICAgJmxvY2FsX3JlcywKKwkJICAgICByZW1vdGVfaG9zdCwKKwkJICAgICBTT0NLX1NUUkVBTSwKKwkJICAgICBJUFBST1RPX1RDUCwKKwkJICAgICAwKTsKKworICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgcHJpbnRfdG9wX3Rlc3RfaGVhZGVyKCJTRFAgUkVRVUVTVC9SRVNQT05TRSBURVNUIixsb2NhbF9yZXMscmVtb3RlX3Jlcyk7CisgIH0KKyAgCisgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMgKi8KKyAgCisgIHNlbmRfcmluZyA9IE5VTEw7CisgIHJlY3ZfcmluZyA9IE5VTEw7CisgIGNvbmZpZGVuY2VfaXRlcmF0aW9uID0gMTsKKyAgaW5pdF9zdGF0KCk7CisKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisKKyAgICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzLiB3ZSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgd2UgbWlnaHQgYmUgKi8KKyAgICAvKiBnb2luZyB0aHJvdWdoIHRoZSBsb29wIG1vcmUgdGhhbiBvbmNlLiAqLworCisgICAgbnVtbWVzc2FnZXMgICAgID0gMDsKKyAgICBieXRlc194ZmVyZCAgICAgPSAwLjA7CisgICAgdGltZXNfdXAgICAgICAgID0gMDsKKyAgICB0aW1lZF9vdXQgICAgICAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgICAgLyogd2UgaGF2ZSB0byByZW1lbWJlciB0byByZXNldCB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9ucworICAgICAgIG91dHN0YW5kaW5nIGFuZCB0aGUgImNvbmdlc3Rpb24gd2luZG93IGZvciBlYWNoIG5ldworICAgICAgIGl0ZXJhdGlvbi4gcmFqIDIwMDYtMDEtMzEgKi8KKyAgICByZXF1ZXN0c19vdXRzdGFuZGluZyA9IDA7CisgICAgcmVxdWVzdF9jd25kID0gUkVRVUVTVF9DV05EX0lOSVRJQUw7CisjZW5kaWYKKworCisgICAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlcnMgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LiAqLworICAgIC8qIHNpbmNlIHRoaXMgaXMgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIGRlZmF1bHQgdGhlIHNlbmRfd2lkdGggYW5kICovCisgICAgLyogcmVjdl93aWR0aCB0byAxIGFuZCBub3QgdHdvIHJhaiA3Lzk0ICovCisKKyAgICBpZiAoc2VuZF93aWR0aCA9PSAwKSBzZW5kX3dpZHRoID0gMTsKKyAgICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKyAgCisgICAgaWYgKHNlbmRfcmluZyA9PSBOVUxMKSB7CisgICAgICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgICAgICByZXFfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9vZmZzZXQpOworICAgIH0KKworICAgIGlmIChyZWN2X3JpbmcgPT0gTlVMTCkgeworICAgICAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICAgICAgcnNwX3NpemUsCisJCQkJICAgICAgIGxvY2FsX3JlY3ZfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBmYWtlIHRoaW5ncyBvdXQgYnkgY2hhbmdpbmcgbG9jYWxfcmVzLT5haV9mYW1pbHkgdG8gQUZfSU5FVF9TRFAgKi8KKyAgICBsb2NhbF9yZXMtPmFpX2ZhbWlseSA9IEFGX0lORVRfU0RQOworICAgIGxvY2FsX3Jlcy0+YWlfcHJvdG9jb2wgPSAwOworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX2RhdGFfc29ja2V0KGxvY2FsX3Jlcyk7CisgIAorICAgIGlmIChzZW5kX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfc2RwX3JyOiBzZHAgc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfc2RwX3JyOiBzZW5kX3NvY2tldCBvYnRhaW5lZC4uLlxuIik7CisgICAgfQorICAKKyAgICAvKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGNwdSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudHMsIHdlIG11c3QgKi8KKyAgICAvKiBjYWxpYnJhdGUgdGhlIGNwdShzKS4gV2Ugd2lsbCBwZXJmb3JtIHRoaXMgdGFzayB3aXRoaW4gdGhlIHRlc3RzICovCisgICAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgICAvKiBjYWxpYnJhdGVfbG9jYWxfY3B1IHdpbGwgcmV0dXJuIHJhdGhlciBxdWlja2x5IGFzIGl0IHdpbGwgaGF2ZSAqLworICAgIC8qIG5vdGhpbmcgdG8gZG8uIElmIGxvY2FsX2NwdV9yYXRlIGlzIHplcm8sIHRoZW4gd2Ugd2lsbCBnbyB0aHJvdWdoICovCisgICAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suKi8KKyAgICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICAgIH0KKyAgICAKKyAgICBpZiAoIW5vX2NvbnRyb2wpIHsKKyAgICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZQorCSBzb2NrZXQgcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZQorCSByZWFzb24gZm9yIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAKKwkgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywKKwkgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUKKwkgdGhhdCBubyBjaGFuZ2VzIGJleW9uZCB0aGUgc3lzdGVtJ3MgZGVmYXVsdCBzaG91bGQgYmUKKwkgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgZGVmYXVsdCB0byA4LCB3aGljaAorCSB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQk9CURPX1NEUF9SUjsKKyAgICAgIHNkcF9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemVfcmVxOworICAgICAgc2RwX3JyX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZV9yZXE7CisgICAgICBzZHBfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQgICAgPQlyZW1vdGVfcmVjdl9hbGlnbjsKKyAgICAgIHNkcF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldAk9CXJlbW90ZV9yZWN2X29mZnNldDsKKyAgICAgIHNkcF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCAgICA9CXJlbW90ZV9zZW5kX2FsaWduOworICAgICAgc2RwX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0CT0JcmVtb3RlX3NlbmRfb2Zmc2V0OworICAgICAgc2RwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZQk9CXJlcV9zaXplOworICAgICAgc2RwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUJPQlyc3Bfc2l6ZTsKKyAgICAgIHNkcF9ycl9yZXF1ZXN0LT5ub19kZWxheQkgICAgICAgID0JcmVtX25vZGVsYXk7CisgICAgICBzZHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUJPQlyZW1vdGVfY3B1X3VzYWdlOworICAgICAgc2RwX3JyX3JlcXVlc3QtPmNwdV9yYXRlCSAgICAgICAgPQlyZW1vdGVfY3B1X3JhdGU7CisgICAgICBzZHBfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQJPQlyZW1fcmN2YXZvaWQ7CisgICAgICBzZHBfcnJfcmVxdWVzdC0+c29fc25kYXZvaWQJPQlyZW1fc25kYXZvaWQ7CisgICAgICBpZiAodGVzdF90aW1lKSB7CisJc2RwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90aW1lOworICAgICAgfQorICAgICAgZWxzZSB7CisJc2RwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90cmFucyAqIC0xOworICAgICAgfQorICAgICAgc2RwX3JyX3JlcXVlc3QtPnBvcnQgICAgICAgICAgICAgID0gICAgICBhdG9pKHJlbW90ZV9kYXRhX3BvcnQpOworICAgICAgc2RwX3JyX3JlcXVlc3QtPmlwZmFtaWx5ID0gYWZfdG9fbmYocmVtb3RlX3Jlcy0+YWlfZmFtaWx5KTsKKyAgICAgIAorICAgICAgaWYgKGRlYnVnID4gMSkgeworCWZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfc2RwX3JyOiByZXF1ZXN0aW5nIFNEUCByciB0ZXN0XG4iKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgICAKKyAgICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQKKwkgc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sKKwkgaW50byB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuCisJIFRoZSByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwKKwkgaGF2ZSBkb25lIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUKKwkgY3B1IGxvY2FsbHkgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlCisJIGNvdW50ZXIgdmFsdWUgcmlnaHQgYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZQorCSB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQgYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzCisJIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMgYmVpbmcgc2VudCBmb3IgdGhlIFNEUAorCSB0ZXN0cy4gICovCisgIAorICAgICAgcmVjdl9yZXNwb25zZSgpOworICAKKyAgICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKwlpZiAoZGVidWcpCisJICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKwlyc3Jfc2l6ZSAgICAgICAgICA9IHNkcF9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKwlyc3Nfc2l6ZSAgICAgICAgICA9IHNkcF9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKwlyZW1fbm9kZWxheSAgICAgICA9IHNkcF9ycl9yZXNwb25zZS0+bm9fZGVsYXk7CisJcmVtb3RlX2NwdV91c2FnZSAgPSBzZHBfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworCXJlbW90ZV9jcHVfcmF0ZSAgID0gc2RwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKwkvKiBtYWtlIHN1cmUgdGhhdCBwb3J0IG51bWJlcnMgYXJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKwlzZXRfcG9ydF9udW1iZXIocmVtb3RlX3Jlcywoc2hvcnQpc2RwX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCVNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJZnByaW50Zih3aGVyZSwKKwkJIm5ldHBlcmY6IHJlbW90ZSBlcnJvciAlZCIsCisJCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlwZXJyb3IoIiIpOworCWZmbHVzaCh3aGVyZSk7CisJCisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBXQU5UX0RFTU8KKyAgICBERU1PX1JSX1NFVFVQKDEwMDApCisjZW5kaWYKKworICAgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICAgIGlmIChjb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkciwKKwkJcmVtb3RlX3Jlcy0+YWlfYWRkcmxlbikgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgcGVycm9yKCJuZXRwZXJmOiBkYXRhIHNvY2tldCBjb25uZWN0IGZhaWxlZCIpOworICAgICAgCisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciB0aGUgKi8KKyAgICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAgIC8qIGluZGljYXRlZCBhIHByb2JsZW0uIEkgZmFpbGVkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlIGV4dHJhICovCisgICAgLyogbWVzc2FnZSBhZnRlciB0aGUgYWNjZXB0IG9uIHRoZSByZW1vdGUuIElmIGl0IGZhaWxlZCwgd2UnbGwgc2VlIGl0ICovCisgICAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgICAKKyAgICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgdGhleSAqLworICAgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgICAKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgICB0aW1lc191cCA9IDA7CisgICAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgICAgdHJhbnNfcmVtYWluaW5nID0gdGVzdF9ieXRlczsKKyAgICAgIHRpbWVzX3VwID0gMTsKKyAgICB9CisgICAgCisgICAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAgIAorICAgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBJTlRFUlZBTFNfSU5JVCgpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgCisgICAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuIEkgdGhpbmsgSSAqLworICAgIC8qIGp1c3QgYXJiaXRyYXJpbHkgZGVjcmVtZW50IHRyYW5zX3JlbWFpbmluZyBmb3IgdGhlIHRpbWVkIHRlc3QsIGJ1dCAqLworICAgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgICAgLyogdGhlIHNlbmQgYnVmZmVyIGFuZCB0aGUgcmVjZWl2ZSBidWZmZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgICAgaWYgKGRlbW9fbW9kZSkgeworCUhJU1RfdGltZXN0YW1wKGRlbW9fb25lX3B0cik7CisgICAgICB9CisjZW5kaWYKKworICAgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAgIC8qIHNlbmQgdGhlIHJlcXVlc3QuIHdlIGFzc3VtZSB0aGF0IGlmIHdlIHVzZSBhIGJsb2NraW5nIHNvY2tldCwgKi8KKyAgICAgIC8qIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudCBhdCBvbmUgc2hvdC4gKi8KKworI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICAgIC8qIHdlIGNhbiBpbmplY3Qgbm8gbW9yZSB0aGFuIHJlcXVlc3RfY3duZCwgd2hpY2ggd2lsbCBncm93IHdpdGgKKwkgdGltZSwgYW5kIG5vIG1vcmUgdGhhbiBmaXJzdF9idXJzdF9zaXplLiAgd2UgZG9uJ3QgdXNlIDw9IHRvCisJIGFjY291bnQgZm9yIHRoZSAicmVndWxhcmx5IHNjaGVkdWxlZCIgc2VuZCBjYWxsLiAgb2YgY291cnNlCisJIHRoYXQgbWFrZXMgaXQgbW9yZSBhICJtYXhfb3V0c3RhbmRpbmdfIHRoYW4gYQorCSAiZmlyc3RfYnVyc3Rfc2l6ZSIgYnV0IGZvciBub3cgd2Ugd29uJ3QgZml4IHRoZSBuYW1lcy4gYWxzbywKKwkgSSBzdXNwZWN0IHRoZSBleHRyYSBjaGVjayBhZ2FpbnN0IDwgZmlyc3RfYnVyc3Rfc2l6ZSBpcworCSByZWR1bmRhbnQgc2luY2UgbGF0ZXIgSSBleHBlY3QgdG8gbWFrZSBzdXJlIHRoYXQgcmVxdWVzdF9jd25kCisJIGNhbiBuZXZlciBnZXQgbGFyZ2VyIHRoYW4gZmlyc3RfYnVyc3Rfc2l6ZSwgYnV0IGp1c3QgYXQgdGhlCisJIG1vbWVudCBJJ20gZmVlbGluZyBsaWtlIGEgYmVsdCBhbmQgc3VzcGVuZGVycyBraW5kIG9mCisJIHByb2dyYW1tZXIuIHJhaiAyMDA2LTAxLTMwICovCisgICAgICB3aGlsZSAoKGZpcnN0X2J1cnN0X3NpemUgPiAwKSAmJgorCSAgICAgKHJlcXVlc3RzX291dHN0YW5kaW5nIDwgcmVxdWVzdF9jd25kKSAmJgorCSAgICAgKHJlcXVlc3RzX291dHN0YW5kaW5nIDwgZmlyc3RfYnVyc3Rfc2l6ZSkpIHsKKwlpZiAoZGVidWcpIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgImluamVjdGluZywgcmVxX291dHN0bmRuZyAlZCByZXFfY3duZCAlZCBidXJzdCAlZFxuIiwKKwkJICByZXF1ZXN0c19vdXRzdGFuZGluZywKKwkJICByZXF1ZXN0X2N3bmQsCisJCSAgZmlyc3RfYnVyc3Rfc2l6ZSk7CisJfQorCWlmICgobGVuID0gc2VuZChzZW5kX3NvY2tldCwKKwkJCXNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJCXJlcV9zaXplLAorCQkJMCkpICE9IHJlcV9zaXplKSB7CisJICAvKiB3ZSBzaG91bGQgbmV2ZXIgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgaW4gdGhlIGZpcnN0IGJ1cnN0ICovCisJICBwZXJyb3IoInNlbmRfc2RwX3JyOiBpbml0aWFsIGJ1cnN0IGRhdGEgc2VuZCBlcnJvciIpOworCSAgZXhpdCgtMSk7CisJfQorCXJlcXVlc3RzX291dHN0YW5kaW5nICs9IDE7CisgICAgICB9CisKKyNlbmRpZiAvKiBXQU5UX0ZJUlNUX0JVUlNUICovCisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwkvKiB0aW1lc3RhbXAganVzdCBiZWZvcmUgb3VyIGNhbGwgdG8gc2VuZCwgYW5kIHRoZW4gYWdhaW4ganVzdAorCSAgIGFmdGVyIHRoZSByZWNlaXZlIHJhaiA4Lzk0ICovCisJLyogYnV0IG9ubHkgaWYgd2UgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIGRpc3BsYXkgb25lLiByYWoKKwkgICAyMDA3LTAyLTA3ICovCisKKwlISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgICAgICAKKyAgICAgIGlmICgobGVuID0gc2VuZChzZW5kX3NvY2tldCwKKwkJICAgICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkgICAgICByZXFfc2l6ZSwKKwkJICAgICAgMCkpICE9IHJlcV9zaXplKSB7CisJaWYgKFNPQ0tFVF9FSU5UUihsZW4pIHx8IChlcnJubyA9PSAwKSkgeworCSAgLyogd2UgaGl0IHRoZSBlbmQgb2YgYSAqLworCSAgLyogdGltZWQgdGVzdC4gKi8KKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9CisJcGVycm9yKCJzZW5kX3NkcF9ycjogZGF0YSBzZW5kIGVycm9yIik7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKworI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICAgIHJlcXVlc3RzX291dHN0YW5kaW5nICs9IDE7CisjZW5kaWYKKworICAgICAgLyogcmVjZWl2ZSB0aGUgcmVzcG9uc2UgKi8KKyAgICAgIHJzcF9ieXRlc19sZWZ0ID0gcnNwX3NpemU7CisgICAgICB0ZW1wX21lc3NhZ2VfcHRyICA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICAgIHdoaWxlKHJzcF9ieXRlc19sZWZ0ID4gMCkgeworCWlmKChyc3BfYnl0ZXNfcmVjdmQ9cmVjdihzZW5kX3NvY2tldCwKKwkJCQkgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCQkgcnNwX2J5dGVzX2xlZnQsCisJCQkJIDApKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJaWYgKCBTT0NLRVRfRUlOVFIocnNwX2J5dGVzX3JlY3ZkKSApIHsKKwkJICAgIC8qIFdlIGhpdCB0aGUgZW5kIG9mIGEgdGltZWQgdGVzdC4gKi8KKwkJCXRpbWVkX291dCA9IDE7CisJCQlicmVhazsKKwkJfQorCSAgcGVycm9yKCJzZW5kX3NkcF9ycjogZGF0YSByZWN2IGVycm9yIik7CisJICBleGl0KDEpOworCX0KKwlyc3BfYnl0ZXNfbGVmdCAtPSByc3BfYnl0ZXNfcmVjdmQ7CisJdGVtcF9tZXNzYWdlX3B0ciAgKz0gcnNwX2J5dGVzX3JlY3ZkOworICAgICAgfQkKKyAgICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKyAgICAgIAorI2lmZGVmIFdBTlRfRklSU1RfQlVSU1QKKyAgICAgIC8qIHNvLCBzaW5jZSB3ZSd2ZSBnb3R0ZW4gYSByZXNwb25zZSBiYWNrLCB1cGRhdGUgdGhlCisJIGJvb2trZWVwaW5nIGFjY29yZGluZ2x5LiAgdGhlcmUgaXMgb25lIGxlc3MgcmVxdWVzdAorCSBvdXRzdGFuZGluZyBhbmQgd2UgY2FuIHB1dCBvbmUgbW9yZSBvdXQgdGhlcmUgdGhhbiBiZWZvcmUuICovCisgICAgICByZXF1ZXN0c19vdXRzdGFuZGluZyAtPSAxOworICAgICAgaWYgKHJlcXVlc3RfY3duZCA8IGZpcnN0X2J1cnN0X3NpemUpIHsKKwlyZXF1ZXN0X2N3bmQgKz0gMTsKKwlpZiAoZGVidWcpIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgImluY3IgcmVxX2N3bmQgdG8gJWQgZmlyc3RfYnVyc3QgJWQgcmVxc19vdXRzdG5kbmcgJWRcbiIsCisJCSAgcmVxdWVzdF9jd25kLAorCQkgIGZpcnN0X2J1cnN0X3NpemUsCisJCSAgcmVxdWVzdHNfb3V0c3RhbmRpbmcpOworCX0KKyAgICAgIH0KKyNlbmRpZgorICAgICAgaWYgKHRpbWVkX291dCkgeworCS8qIHdlIG1heSBoYXZlIGJlZW4gaW4gYSBuZXN0ZWQgd2hpbGUgbG9vcCAtIHdlIG5lZWQgKi8KKwkvKiBhbm90aGVyIGNhbGwgdG8gYnJlYWsuICovCisJYnJlYWs7CisgICAgICB9CisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKwlISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworCUhJU1RfYWRkKHRpbWVfaGlzdCxkZWx0YV9taWNybygmdGltZV9vbmUsJnRpbWVfdHdvKSk7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworI2lmZGVmIFdBTlRfREVNTworICAgICAgREVNT19SUl9JTlRFUlZBTCgxKTsKKyNlbmRpZgorCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMgICAgICAKKyAgICAgIElOVEVSVkFMU19XQUlUKCk7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIAorICAgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisJdHJhbnNfcmVtYWluaW5nLS07CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChkZWJ1ZyA+IDMpIHsKKwlpZiAoKG51bW1lc3NhZ2VzICUgMTAwKSA9PSAwKSB7CisJICBmcHJpbnRmKHdoZXJlLAorCQkgICJUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZWRcbiIsCisJCSAgbnVtbWVzc2FnZXMpOworCSAgZmZsdXNoKHdoZXJlKTsKKwl9CisgICAgICB9CisgICAgfQorCisgICAgLyogQXQgdGhpcyBwb2ludCB3ZSB1c2VkIHRvIGNhbGwgc2h1dGRvd24gb24gdGhlIGRhdGEgc29ja2V0IHRvIGJlCisgICAgICAgc3VyZSBhbGwgdGhlIGRhdGEgd2FzIGRlbGl2ZXJlZCwgYnV0IHRoaXMgd2FzIG5vdCBnZXJtYW5lIGluIGEKKyAgICAgICByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIGFuZCBpdCB3YXMgY2F1c2luZyB0aGUgdGVzdHMgdG8gImhhbmciCisgICAgICAgd2hlbiB0aGV5IHdlcmUgYmVpbmcgY29udHJvbGxlZCBieSB0aW1lLiBTbywgSSBoYXZlIHJlcGxhY2VkCisgICAgICAgdGhpcyBzaHV0ZG93biBjYWxsIHdpdGggYSBjYWxsIHRvIGNsb3NlIHRoYXQgY2FuIGJlIGZvdW5kIGxhdGVyCisgICAgICAgaW4gdGhlIHByb2NlZHVyZS4gKi8KKyAgICAKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwKKyAgICAgICBhbmQgd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgICAKKyAgICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgKi8KKwkJCQkJCS8qIG1lYXN1cmVkPyBob3cgbG9uZyAqLworCQkJCQkJLyogZGlkIHdlIHJlYWxseSBydW4/ICovCisgICAgCisgICAgaWYgKCFub19jb250cm9sKSB7CisgICAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUKKwkgY2FsY3VsYXRlZCBDUFUgdXRpbGl6YXRpb24uIElmIGl0IHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdAorCSB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8gCisgICAgCisgICAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisJaWYgKGRlYnVnKQorCSAgZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICAgICAgfQorICAgICAgZWxzZSB7CisJU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKwlmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiByZW1vdGUgZXJyb3IgJWQiLAorCQluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisJcGVycm9yKCIiKTsKKwlmZmx1c2god2hlcmUpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgfQorICAgIAorICAgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhyb3VnaHB1dCB3YXMgZm9yIHRoZSB0ZXN0LiAqLworICAKKyAgICBieXRlc194ZmVyZAk9IChyZXFfc2l6ZSAqIG51bW1lc3NhZ2VzKSArIChyc3Bfc2l6ZSAqIG51bW1lc3NhZ2VzKTsKKyAgICB0aHJ1cHV0CT0gbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lOworICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUKKyAgICAgICB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlCisgICAgICAgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluCisgICAgICAgdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzCisgICAgICAgYmVuZWZpdC4uLiAqLworICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWxvY2FsX2NwdV91dGlsaXphdGlvbiA9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKyAJLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsCisJICAgbXVsdGlwbHkgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBieSAxMDI0IHRvIGdldCAiZ29vZCIKKwkgICBudW1iZXJzICovCisJbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgIDAuMCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisJbG9jYWxfc2VydmljZV9kZW1hbmQJPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHNkcF9ycl9yZXN1bHQtPmNwdV91dGlsOworCS8qIHNpbmNlIGNhbGNfc2VydmljZSBkZW1hbmQgaXMgZG9pbmcgbXMvS3VuaXQgd2Ugd2lsbAorCSAgIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgImdvb2QiCisJICAgbnVtYmVycyAqLworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCA9IGNhbGNfc2VydmljZV9kZW1hbmQoKGRvdWJsZSkgbnVtbWVzc2FnZXMqMTAyNCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgICBzZHBfcnJfcmVzdWx0LT5udW1fY3B1cyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gKGZsb2F0KSAtMS4wOworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAoZmxvYXQpIC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3ZXJlIG5vdCBtZWFzdXJpbmcgY3B1LCBmb3IgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYsIHdlICovCisgICAgICAvKiBzaG91bGQgbWFrZSBpdCAtMS4wICovCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAoZmxvYXQpIC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IChmbG9hdCkgLTEuMDsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAoZmxvYXQpIC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gKGZsb2F0KSAtMS4wOworICAgIH0KKworICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBjb25maWRlbmNlIGluZm9ybWF0aW9uLgorICAgICAgIGlmIGRlYnVnZ2luZyBpcyBvbiwgY2FsY3VsYXRlX2NvbmZpZGVuY2Ugd2lsbCBwcmludC1vdXQgdGhlCisgICAgICAgcGFyYW1ldGVycyB3ZSBwYXNzIGl0ICovCisgICAgCisgICAgY2FsY3VsYXRlX2NvbmZpZGVuY2UoY29uZmlkZW5jZV9pdGVyYXRpb24sCisJCQkgZWxhcHNlZF90aW1lLAorCQkJIHRocnVwdXQsCisJCQkgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkgbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAKKyAgICAKKyAgICBjb25maWRlbmNlX2l0ZXJhdGlvbisrOworCisgICAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldCwgc28gY2xvc2UgaXQgKi8KKyAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgfQorCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmdGhydXB1dCwKKwkJCSAgICAmbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSAgICAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKworICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyIGhhcworICAgICBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgbG9jYWwKKyAgICAgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSB1c2VyIGhhcworICAgICByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAic3RyZWFtcGVyZiIKKyAgICAgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSBvZiBncmVhdGVyIHRoYW4gMSwKKyAgICAgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mIGJhY2tncm91bmQgaW5mb3JtYXRpb24KKyAgICAgZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgbm90IGNwdV9tZWFzdXJlbWVudAorICAgICBzcGVjaWZpYy4uLiAgKi8KKworICBpZiAoY29uZmlkZW5jZSA8IDApIHsKKyAgICAvKiB3ZSBkaWQgbm90IGhpdCBjb25maWRlbmNlLCBidXQgd2VyZSB3ZSBhc2tlZCB0byBsb29rIGZvciBpdD8gKi8KKyAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworICAgIH0KKyAgfQorCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChjcHVfbWV0aG9kKTsKKyAgICByZW1vdGVfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKHNkcF9ycl9yZXN1bHQtPmNwdV9tZXRob2QpOworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCSgocHJpbnRfaGVhZGVycykgfHwgCisJCSAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorCQlyZW1vdGVfY3B1X21ldGhvZCwKKwkJKChwcmludF9oZWFkZXJzKSB8fCAKKwkJIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogZ3Vlc3MgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LAorCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgKChwcmludF9oZWFkZXJzKSB8fCAKKwkgICAgICAgKHJlc3VsdF9icmFuZCA9PSBOVUxMKSkgPyAiIiA6IHJlc3VsdF9icmFuZCk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzIsCisJICAgICAgcnNzX3NpemUsCisJICAgICAgcnNyX3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgdGhydXB1dCwKKwkgICAgICAoKHByaW50X2hlYWRlcnMpIHx8IAorCSAgICAgICAocmVzdWx0X2JyYW5kID09IE5VTEwpKSA/ICIiIDogcmVzdWx0X2JyYW5kKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgICB9CisKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzEsCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXNwb25zZXMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICB0aHJ1cHV0LAorCSAgICAgICgocHJpbnRfaGVhZGVycykgfHwgCisJICAgICAgIChyZXN1bHRfYnJhbmQgPT0gTlVMTCkpID8gIiIgOiByZXN1bHRfYnJhbmQpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgcnNyX3NpemUpOworICAgICAgCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIC8qIGhvdyB0byBoYW5kbGUgdGhlIHZlcmJvc2UgaW5mb3JtYXRpb24gaW4gdGhlIHByZXNlbmNlIG9mICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGlzIHlldCB0byBiZSBkZXRlcm1pbmVkLi4uIHJhaiAxMS85NCAqLworICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogU0RQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgICAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCwKKwkgICAgbG9jYWxfc2VuZF9vZmZzZXQsCisJICAgIHJlbW90ZV9yZWN2X29mZnNldCk7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIlxuSGlzdG9ncmFtIG9mIHJlcXVlc3QvcmVzcG9uc2UgdGltZXNcbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgSElTVF9yZXBvcnQodGltZV9oaXN0KTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIH0KKyAgCit9CisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgKG5ldHNlcnZlcikgc2lkZSBvZiBhIFNEUF9SUiAqLworIC8qIHRlc3QgKi8KK3ZvaWQKK3JlY3Zfc2RwX3JyKCkKK3sKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBzdHJ1Y3QgYWRkcmluZm8gKmxvY2FsX3JlczsKKyAgY2hhciBsb2NhbF9uYW1lW0JVRlNJWl07CisgIGNoYXIgcG9ydF9idWZmZXJbUE9SVEJVRlNJWkVdOworCisgIHN0cnVjdAlzb2NrYWRkcl9pbiAgICAgICAgbXlhZGRyX2luLAorICBwZWVyYWRkcl9pbjsKKyAgU09DS0VUCXNfbGlzdGVuLHNfZGF0YTsKKyAgbmV0cGVyZl9zb2NrbGVuX3QgCWFkZHJsZW47CisgIGNoYXIJKnRlbXBfbWVzc2FnZV9wdHI7CisgIGludAl0cmFuc19yZWNlaXZlZDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgaW50CWJ5dGVzX3NlbnQ7CisgIGludAlyZXF1ZXN0X2J5dGVzX3JlY3ZkOworICBpbnQJcmVxdWVzdF9ieXRlc19yZW1haW5pbmc7CisgIGludAl0aW1lZF9vdXQgPSAwOworICBpbnQgICBzb2NrX2Nsb3NlZCA9IDA7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgCisgIHN0cnVjdAlzZHBfcnJfcmVxdWVzdF9zdHJ1Y3QJKnNkcF9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJc2RwX3JyX3Jlc3BvbnNlX3N0cnVjdAkqc2RwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJc2RwX3JyX3Jlc3VsdHNfc3RydWN0CSpzZHBfcnJfcmVzdWx0czsKKyAgCisgIHNkcF9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCBzZHBfcnJfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHNkcF9ycl9yZXNwb25zZSA9CisgICAgKHN0cnVjdCBzZHBfcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc2RwX3JyX3Jlc3VsdHMgPQorICAgIChzdHJ1Y3Qgc2RwX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9zZHBfcnI6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfcnI6IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gU0RQX1JSX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfcnI6IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogYWxsb2NhdGUgdGhlIHJlY3YgYW5kIHNlbmQgcmluZ3Mgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudHMgKi8KKyAgLyogYW5kIG9mZnNldHMuIHJhaiA3Lzk0ICovCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc2RwX3JyOiByZXF1ZXN0ZWQgcmVjdiBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICBzZHBfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJICAgIHNkcF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfcnI6IHJlcXVlc3RlZCBzZW5kIGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIHNkcF9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkgICAgc2RwX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogYXQgc29tZSBwb2ludCwgdGhlc2UgbmVlZCB0byBjb21lIHRvIHVzIGZyb20gdGhlIHJlbW90ZSBzeXN0ZW0gKi8KKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgc2RwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUsCisJCQkJICAgc2RwX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCQkJCSAgIHNkcF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICBzZHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplLAorCQkJCSAgIHNkcF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkJCQkgICBzZHBfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfcnI6IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogY3JlYXRlX2RhdGFfc29ja2V0IGV4cGVjdHMgdG8gZmluZCBzb21lIHRoaW5ncyBpbiB0aGUgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcywgc28gc2V0IHRoZSBnbG9iYWxzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuICovCisgIC8qIG9uY2UgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCB3ZSB3aWxsIHNldCB0aGUgcmVzcG9uc2UgdmFsdWVzICovCisgIC8qIGJhc2VkIG9uIHRoZSB1cGRhdGVkIHZhbHVlIG9mIHRob3NlIGdsb2JhbHMuIHJhaiA3Lzk0ICovCisgIGxzc19zaXplX3JlcSA9IHNkcF9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZV9yZXEgPSBzZHBfcnJfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZTsKKyAgbG9jX25vZGVsYXkgPSBzZHBfcnJfcmVxdWVzdC0+bm9fZGVsYXk7CisgIGxvY19yY3Zhdm9pZCA9IHNkcF9ycl9yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0gc2RwX3JyX3JlcXVlc3QtPnNvX3NuZGF2b2lkOworCisgIHNldF9ob3N0bmFtZV9hbmRfcG9ydChsb2NhbF9uYW1lLAorCQkJcG9ydF9idWZmZXIsCisJCQluZl90b19hZihzZHBfcnJfcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJc2RwX3JyX3JlcXVlc3QtPnBvcnQpOworCisgIGxvY2FsX3JlcyA9IGNvbXBsZXRlX2FkZHJpbmZvKGxvY2FsX25hbWUsCisJCQkJbG9jYWxfbmFtZSwKKwkJCQlwb3J0X2J1ZmZlciwKKwkJCQluZl90b19hZihzZHBfcnJfcmVxdWVzdC0+aXBmYW1pbHkpLAorCQkJCVNPQ0tfU1RSRUFNLAorCQkJCUlQUFJPVE9fVENQLAorCQkJCTApOworCisgIC8qIGZha2UgdGhpbmdzIG91dCBieSBjaGFuZ2luZyBsb2NhbF9yZXMtPmFpX2ZhbWlseSB0byBBRl9JTkVUX1NEUCAqLworICBsb2NhbF9yZXMtPmFpX2ZhbWlseSA9IEFGX0lORVRfU0RQOworICBsb2NhbF9yZXMtPmFpX3Byb3RvY29sID0gMDsKKyAgc19saXN0ZW4gPSBjcmVhdGVfZGF0YV9zb2NrZXQobG9jYWxfcmVzKTsKKyAgCisgIGlmIChzX2xpc3RlbiA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIAorI2lmZGVmIFdJTjMyCisgIC8qIFRoZSB0ZXN0IHRpbWVyIGNhbiBmaXJlIGR1cmluZyBvcGVyYXRpb25zIG9uIHRoZSBsaXN0ZW5pbmcgc29ja2V0LAorICAgICBzbyB0byBtYWtlIHRoZSBzdGFydF90aW1lciBiZWxvdyB3b3JrIHdlIGhhdmUgdG8gbW92ZQorICAgICBpdCB0byBjbG9zZSBzX2xpc3RlbiB3aGlsZSB3ZSBhcmUgYmxvY2tlZCBvbiBhY2NlcHQuICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0MiA9IHNfbGlzdGVuOworI2VuZGlmCisKKyAgCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfbGlzdGVuLCA1KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLCAKKwkJICAmYWRkcmxlbikgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIE5vdyBteWFkZHJfaW4gY29udGFpbnMgdGhlIHBvcnQgYW5kIHRoZSBpbnRlcm5ldCBhZGRyZXNzIHRoaXMgaXMgKi8KKyAgLyogcmV0dXJuZWQgdG8gdGhlIHNlbmRlciBhbHNvIGltcGxpY2l0bHkgdGVsbGluZyB0aGUgc2VuZGVyIHRoYXQgdGhlICovCisgIC8qIHNvY2tldCBidWZmZXIgc2l6aW5nIGhhcyBiZWVuIGRvbmUuICovCisgIAorICBzZHBfcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAoaW50KSBudG9ocyhteWFkZHJfaW4uc2luX3BvcnQpOworICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyAgID0gMDsKKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAwLjAgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHNkcF9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSAoZmxvYXQpMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBzZHBfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMDsKKworICBpZiAoc2RwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgc2RwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgc2RwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUoc2RwX3JyX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgc2RwX3JyX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHNkcF9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworICBzZHBfcnJfcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHNkcF9ycl9yZXNwb25zZS0+c29fcmN2YXZvaWQgPSBsb2NfcmN2YXZvaWQ7CisgIHNkcF9ycl9yZXNwb25zZS0+c29fc25kYXZvaWQgPSBsb2Nfc25kYXZvaWQ7CisgIHNkcF9ycl9yZXNwb25zZS0+dGVzdF9sZW5ndGggPSBzZHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGg7CisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworICAKKyAgaWYgKChzX2RhdGEgPSBhY2NlcHQoc19saXN0ZW4sCisJCSAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnBlZXJhZGRyX2luLAorCQkgICAgICAgJmFkZHJsZW4pKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIC8qIExldCdzIGp1c3QgcHVudC4gVGhlIHJlbW90ZSB3aWxsIGJlIGdpdmVuIHNvbWUgaW5mb3JtYXRpb24gKi8KKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyNpZmRlZiBLTFVER0VfU09DS0VUX09QVElPTlMKKyAgLyogdGhpcyBpcyBmb3IgdGhvc2Ugc3lzdGVtcyB3aGljaCAqSU5DT1JSRUNUTFkqIGZhaWwgdG8gcGFzcyAqLworICAvKiBhdHRyaWJ1dGVzIGFjcm9zcyBhbiBhY2NlcHQoKSBjYWxsLiBJbmNsdWRpbmcgdGhpcyBnb2VzIGFnYWluc3QgKi8KKyAgLyogbXkgYmV0dGVyIGp1ZGdlbWVudCA6KCByYWogMTEvOTUgKi8KKworICBrbHVkZ2Vfc29ja2V0X29wdGlvbnMoc19kYXRhKTsKKworI2VuZGlmIC8qIEtMVURHRV9TT0NLRVRfT1BUSU9OUyAqLworCisjaWZkZWYgV0lOMzIKKyAgLyogdGhpcyBpcyB1c2VkIHNvIHRoZSB0aW1lciB0aHJlYWQgY2FuIGNsb3NlIHRoZSBzb2NrZXQgb3V0IGZyb20gKi8KKyAgLyogdW5kZXIgdXMsIHdoaWNoIHRvIGRhdGUgaXMgdGhlIGVhc2llc3QvY2xlYW5lc3QvbGVhc3QgKi8KKyAgLyogV2luZG93cy1zcGVjaWZpYyB3YXkgSSBjYW4gZmluZCB0byBmb3JjZSB0aGUgd2luc29jayBjYWxscyB0byAqLworICAvKiByZXR1cm4gV1NBRUlOVFIgd2l0aCB0aGUgdGVzdCBpcyBvdmVyLiBhbnl0aGluZyB0aGF0IHdpbGwgcnVuIG9uICovCisgIC8qIDk1IGFuZCBOVCBhbmQgaXMgY2xvc2VyIHRvIHdoYXQgbmV0cGVyZiBleHBlY3RzIGZyb20gVW5peCBzaWduYWxzICovCisgIC8qIGFuZCBzdWNoIHdvdWxkIGJlIGFwcHJlY2lhdGVkIHJhaiAxLzk2ICovCisgIHdpbl9rbHVkZ2Vfc29ja2V0ID0gc19kYXRhOworI2VuZGlmIC8qIFdJTjMyICovCisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zZHBfcnI6IGFjY2VwdCBjb21wbGV0ZXMgb24gdGhlIGRhdGEgY29ubmVjdGlvbi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydChzZHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworICAKKyAgLyogVGhlIGxvb3Agd2lsbCBleGl0IHdoZW4gd2UgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgdGltZSwgb3Igd2hlbiAqLworICAvKiB3ZSBoYXZlIGV4Y2hhbmdlZCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiB0cmFuc2FjdGlvbnMuICovCisgIAorICBpZiAoc2RwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHNkcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0gc2RwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICogLTE7CisgIH0KKworICB0cmFuc19yZWNlaXZlZCA9IDA7CisgIAorICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgdGVtcF9tZXNzYWdlX3B0ciA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICByZXF1ZXN0X2J5dGVzX3JlbWFpbmluZwk9IHNkcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemU7CisgICAgd2hpbGUocmVxdWVzdF9ieXRlc19yZW1haW5pbmcgPiAwKSB7CisgICAgICBpZigocmVxdWVzdF9ieXRlc19yZWN2ZD1yZWN2KHNfZGF0YSwKKwkJCQkgICB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJCSAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nLAorCQkJCSAgIDApKSA9PSBTT0NLRVRfRVJST1IpIHsKKwlpZiAoU09DS0VUX0VJTlRSKHJlcXVlc3RfYnl0ZXNfcmVjdmQpKQorCXsKKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9CisKKwluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworCXNlbmRfcmVzcG9uc2UoKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgZWxzZSBpZiggcmVxdWVzdF9ieXRlc19yZWN2ZCA9PSAwICkgeworCWlmIChkZWJ1ZykgeworCSAgZnByaW50Zih3aGVyZSwiemVybyBpcyBteSBoZXJvXG4iKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisJfQorCXNvY2tfY2xvc2VkID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nIC09IHJlcXVlc3RfYnl0ZXNfcmVjdmQ7CisJdGVtcF9tZXNzYWdlX3B0ciAgKz0gcmVxdWVzdF9ieXRlc19yZWN2ZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyAgICBpZiAoKHRpbWVkX291dCkgfHwgKHNvY2tfY2xvc2VkKSkgeworICAgICAgLyogd2UgaGl0IHRoZSBlbmQgb2YgdGhlIHRlc3QgYmFzZWQgb24gdGltZSAtIG9yIHRoZSBzb2NrZXQKKwkgY2xvc2VkIG9uIHVzIGFsb25nIHRoZSB3YXkuICBiYWlsIG91dCBvZiBoZXJlIG5vdy4uLiAqLworICAgICAgaWYgKGRlYnVnKSB7CisJZnByaW50Zih3aGVyZSwieW81XG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQkJCQkJCQorICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSAqLworICAgIGlmKChieXRlc19zZW50PXNlbmQoc19kYXRhLAorCQkJc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkJc2RwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUsCisJCQkwKSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBpZiAoU09DS0VUX0VJTlRSKGJ5dGVzX3NlbnQpKSB7CisJLyogdGhlIHRlc3QgdGltZXIgaGFzIHBvcHBlZCAqLworCXRpbWVkX291dCA9IDE7CisJZnByaW50Zih3aGVyZSwieW82XG4iKTsKKwlmZmx1c2god2hlcmUpOwkJCQkJCQorCWJyZWFrOworICAgICAgfQorICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSA5OTI7CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisKKyAgICB0cmFuc19yZWNlaXZlZCsrOworICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgfQorICAKKyAgCisgIC8qIFRoZSBsb29wIG5vdyBleGl0cyBkdWUgdG8gdGltZW91dCBvciB0cmFuc2FjdGlvbiBjb3VudCBiZWluZyAqLworICAvKiByZWFjaGVkICovCisgIAorICBjcHVfc3RvcChzZHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICBzdG9wX3RpbWVyKCk7CisKKyAgaWYgKHRpbWVkX291dCkgeworICAgIC8qIHdlIGVuZGVkIHRoZSB0ZXN0IGJ5IHRpbWUsIHdoaWNoIHdhcyBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyAgICAvKiBsb25nZXIgdGhhbiB3ZSB3YW50ZWQgdG8gcnVuLiBzbywgd2Ugd2FudCB0byBzdWJ0cmFjdCAqLworICAgIC8qIFBBRF9USU1FIGZyb20gdGhlIGVsYXBzZWRfdGltZS4gKi8KKyAgICBlbGFwc2VkX3RpbWUgLT0gUEFEX1RJTUU7CisgIH0KKworICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc2RwX3JyOiBnb3QgJWQgdHJhbnNhY3Rpb25zXG4iLAorCSAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2RwX3JyX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkID0gKHRyYW5zX3JlY2VpdmVkICogCisJCQkJICAgIChzZHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplICsgCisJCQkJICAgICBzZHBfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSkpOworICBzZHBfcnJfcmVzdWx0cy0+dHJhbnNfcmVjZWl2ZWQgPSB0cmFuc19yZWNlaXZlZDsKKyAgc2RwX3JyX3Jlc3VsdHMtPmVsYXBzZWRfdGltZSAgID0gZWxhcHNlZF90aW1lOworICBzZHBfcnJfcmVzdWx0cy0+Y3B1X21ldGhvZCAgICAgPSBjcHVfbWV0aG9kOworICBzZHBfcnJfcmVzdWx0cy0+bnVtX2NwdXMgICAgICAgPSBsaWJfbnVtX2xvY19jcHVzOworICBpZiAoc2RwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgc2RwX3JyX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbChlbGFwc2VkX3RpbWUpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zZHBfcnI6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIHdlIGFyZSBub3cgZG9uZSB3aXRoIHRoZSBzb2NrZXRzICovCisgIGNsb3NlKHNfZGF0YSk7CisgIGNsb3NlKHNfbGlzdGVuKTsKKworICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorfQorCisKKwordm9pZAorcHJpbnRfc2RwX3VzYWdlKCkKK3sKKworICBwcmludGYoIiVzIixzZHBfdXNhZ2UpOworICBleGl0KDEpOworCit9Cit2b2lkCitzY2FuX3NkcF9hcmdzKGFyZ2MsIGFyZ3YpCisgICAgIGludAlhcmdjOworICAgICBjaGFyCSphcmd2W107CisKK3sKKworI2RlZmluZSBTT0NLRVRTX0FSR1MgImI6RGhIOkk6TDptOk06UDpyOnM6UzpWNDYiCisKKyAgZXh0ZXJuIGNoYXIJKm9wdGFyZzsJICAvKiBwb2ludGVyIHRvIG9wdGlvbiBzdHJpbmcJKi8KKyAgCisgIGludAkJYzsKKyAgCisgIGNoYXIJCisgICAgYXJnMVtCVUZTSVpdLCAgLyogYXJndW1lbnQgaG9sZGVycwkJKi8KKyAgICBhcmcyW0JVRlNJWl07CisKKyAgaWYgKG5vX2NvbnRyb2wpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiVGhlIFNEUCB0ZXN0cyBkbyBub3Qga25vdyBob3cgdG8gZGVhbCB3aXRoIG5vIGNvbnRyb2wgdGVzdHNcbiIpOworICAgIGV4aXQoLTEpOworICB9CisKKyAgc3RybmNweShsb2NhbF9kYXRhX3BvcnQsIjAiLHNpemVvZihsb2NhbF9kYXRhX3BvcnQpKTsKKyAgc3RybmNweShyZW1vdGVfZGF0YV9wb3J0LCIwIixzaXplb2YocmVtb3RlX2RhdGFfcG9ydCkpOworICAKKyAgLyogR28gdGhyb3VnaCBhbGwgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGJyZWFrIHRoZW0gKi8KKyAgLyogb3V0LiBGb3IgdGhvc2Ugb3B0aW9ucyB0aGF0IHRha2UgdHdvIHBhcm1zLCBzcGVjaWZ5aW5nIG9ubHkgKi8KKyAgLyogdGhlIGZpcnN0IHdpbGwgc2V0IGJvdGggdG8gdGhhdCB2YWx1ZS4gU3BlY2lmeWluZyBvbmx5IHRoZSAqLworICAvKiBzZWNvbmQgd2lsbCBsZWF2ZSB0aGUgZmlyc3QgdW50b3VjaGVkLiBUbyBjaGFuZ2Ugb25seSB0aGUgKi8KKyAgLyogZmlyc3QsIHVzZSB0aGUgZm9ybSAiZmlyc3QsIiAoc2VlIHRoZSByb3V0aW5lIGJyZWFrX2FyZ3MuLiAqLworICAKKyAgd2hpbGUgKChjPSBnZXRvcHQoYXJnYywgYXJndiwgU09DS0VUU19BUkdTKSkgIT0gRU9GKSB7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnPyc6CQorICAgIGNhc2UgJzQnOgorICAgICAgcmVtb3RlX2RhdGFfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGxvY2FsX2RhdGFfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJzYnOgorI2lmIGRlZmluZWQoQUZfSU5FVDYpCisgICAgICByZW1vdGVfZGF0YV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGxvY2FsX2RhdGFfZmFtaWx5ID0gQUZfSU5FVDY7CisjZWxzZQorICAgICAgZnByaW50ZihzdGRlcnIsCisJICAgICAgIlRoaXMgbmV0cGVyZiB3YXMgbm90IGNvbXBpbGVkIG9uIGFuIElQdjYgY2FwYWJsZSBob3N0IVxuIik7CisgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgIGV4aXQoLTEpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlICdoJzoKKyAgICAgIHByaW50X3NkcF91c2FnZSgpOworICAgICAgZXhpdCgxKTsKKyAgICBjYXNlICdiJzoKKyNpZmRlZiBXQU5UX0ZJUlNUX0JVUlNUCisgICAgICBmaXJzdF9idXJzdF9zaXplID0gYXRvaShvcHRhcmcpOworI2Vsc2UgLyogV0FOVF9GSVJTVF9CVVJTVCAqLworICAgICAgcHJpbnRmKCJJbml0aWFsIHJlcXVlc3QgYnVyc3QgZnVuY3Rpb25hbGl0eSBub3QgY29tcGlsZWQtaW4hXG4iKTsKKyNlbmRpZiAvKiBXQU5UX0ZJUlNUX0JVUlNUICovCisgICAgICBicmVhazsKKyAgICBjYXNlICdEJzoKKyAgICAgIC8qIHNldCB0aGUgbm9kZWxheSBmbGFnICovCisgICAgICBsb2Nfbm9kZWxheSA9IDE7CisgICAgICByZW1fbm9kZWxheSA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdIJzoKKyAgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgeworCS8qIG1ha2Ugc3VyZSB3ZSBsZWF2ZSByb29tIGZvciB0aGUgTlVMTCB0ZXJtaW5hdGlvbiBib3lzIGFuZAorCSAgIGdpcmxzLiByYWogMjAwNS0wMi04MiAqLyAKKwlyZW1vdGVfZGF0YV9hZGRyZXNzID0gbWFsbG9jKHN0cmxlbihhcmcxKSsxKTsKKwlzdHJuY3B5KHJlbW90ZV9kYXRhX2FkZHJlc3MsYXJnMSxzdHJsZW4oYXJnMSkpOworICAgICAgfQorICAgICAgaWYgKGFyZzJbMF0pCisJcmVtb3RlX2RhdGFfZmFtaWx5ID0gcGFyc2VfYWRkcmVzc19mYW1pbHkoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdMJzoKKyAgICAgIGJyZWFrX2FyZ3NfZXhwbGljaXQob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkgeworCS8qIG1ha2Ugc3VyZSB3ZSBsZWF2ZSByb29tIGZvciB0aGUgTlVMTCB0ZXJtaW5hdGlvbiBib3lzIGFuZAorCSAgIGdpcmxzLiByYWogMjAwNS0wMi04MiAqLyAKKwlsb2NhbF9kYXRhX2FkZHJlc3MgPSBtYWxsb2Moc3RybGVuKGFyZzEpKzEpOworCXN0cm5jcHkobG9jYWxfZGF0YV9hZGRyZXNzLGFyZzEsc3RybGVuKGFyZzEpKTsKKyAgICAgIH0KKyAgICAgIGlmIChhcmcyWzBdKQorCWxvY2FsX2RhdGFfZmFtaWx5ID0gcGFyc2VfYWRkcmVzc19mYW1pbHkoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdQJzoKKyAgICAgIC8qIHNldCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBkYXRhIHBvcnQgbnVtYmVycyBmb3IgdGhlIHRlc3RzIHRvCisJIGFsbG93IHRoZW0gdG8gcnVuIHRocm91Z2ggdGhvc2UgYmxhbmtldHkgYmxhbmsgZW5kLXRvLWVuZAorCSBicmVha2luZyBmaXJld2FsbHMuIHJhaiAyMDA0LTA2LTE1ICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJc3RybmNweShsb2NhbF9kYXRhX3BvcnQsYXJnMSxzaXplb2YobG9jYWxfZGF0YV9wb3J0KSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJc3RybmNweShyZW1vdGVfZGF0YV9wb3J0LGFyZzIsc2l6ZW9mKHJlbW90ZV9kYXRhX3BvcnQpKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3MnOgorICAgICAgLyogc2V0IGxvY2FsIHNvY2tldCBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCWxzc19zaXplX3JlcSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlsc3Jfc2l6ZV9yZXEgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnUyc6CisgICAgICAvKiBzZXQgcmVtb3RlIHNvY2tldCBzaXplcyAqLworICAgICAgYnJlYWtfYXJncyhvcHRhcmcsYXJnMSxhcmcyKTsKKyAgICAgIGlmIChhcmcxWzBdKQorCXJzc19zaXplX3JlcSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlyc3Jfc2l6ZV9yZXEgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6CisgICAgICAvKiBzZXQgdGhlIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlyZXFfc2l6ZSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJcnNwX3NpemUgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgICAvKiBzZXQgc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciBlYWNoIHNlbnQgbWVzc2FnZSAqLworICAgICAgc2VuZF9zaXplID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgICAvKiBzZXQgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgZWFjaCByZWNlaXZlZCBtZXNzYWdlICovCisgICAgICByZWN2X3NpemUgPSBjb252ZXJ0KG9wdGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICd0JzoKKyAgICAgIC8qIHNldCB0aGUgdGVzdCBuYW1lICovCisgICAgICBzdHJjcHkodGVzdF9uYW1lLG9wdGFyZyk7CisgICAgICBicmVhazsKKyAgICBjYXNlICdXJzoKKwkvKiBzZXQgdGhlICJ3aWR0aCIgb2YgdGhlIHVzZXIgc3BhY2UgZGF0YSAqLworCS8qIGJ1ZmZlci4gVGhpcyB3aWxsIGJlIHRoZSBudW1iZXIgb2YgKi8KKwkvKiBzZW5kX3NpemUgYnVmZmVycyBtYWxsb2MnZCBpbiB0aGUgKi8KKwkvKiAqX1NUUkVBTSB0ZXN0LiBJdCBtYXkgYmUgZW5oYW5jZWQgdG8gc2V0ICovCisJLyogYm90aCBzZW5kIGFuZCByZWNlaXZlICJ3aWR0aHMiIGJ1dCBmb3Igbm93ICovCisJLyogaXQgaXMganVzdCB0aGUgc2VuZGluZyAqX1NUUkVBTS4gKi8KKwlzZW5kX3dpZHRoID0gY29udmVydChvcHRhcmcpOworCWJyZWFrOworICAgIGNhc2UgJ1YnOgorICAgICAgLyogd2Ugd2FudCB0byBkbyBjb3B5IGF2b2lkYW5jZSBhbmQgd2lsbCBzZXQgKi8KKyAgICAgIC8qIGl0IGZvciBldmVyeXRoaW5nLCBldmVyeXdoZXJlLCBpZiB3ZSByZWFsbHkgKi8KKyAgICAgIC8qIGNhbi4gb2YgY291cnNlLCB3ZSBkb24ndCBrbm93IGFueXRoaW5nICovCisgICAgICAvKiBhYm91dCB0aGUgcmVtb3RlLi4uICovCisjaWZkZWYgU09fU05EX0NPUFlBVk9JRAorICAgICAgbG9jX3NuZGF2b2lkID0gMTsKKyNlbHNlCisgICAgICBsb2Nfc25kYXZvaWQgPSAwOworICAgICAgcHJpbnRmKCJMb2NhbCBzZW5kIGNvcHkgYXZvaWRhbmNlIG5vdCBhdmFpbGFibGUuXG4iKTsKKyNlbmRpZgorI2lmZGVmIFNPX1JDVl9DT1BZQVZPSUQKKyAgICAgIGxvY19yY3Zhdm9pZCA9IDE7CisjZWxzZQorICAgICAgbG9jX3JjdmF2b2lkID0gMDsKKyAgICAgIHByaW50ZigiTG9jYWwgcmVjdiBjb3B5IGF2b2lkYW5jZSBub3QgYXZhaWxhYmxlLlxuIik7CisjZW5kaWYKKyAgICAgIHJlbV9zbmRhdm9pZCA9IDE7CisgICAgICByZW1fcmN2YXZvaWQgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTic6CisgICAgICAvKiB0aGlzIG9wdG9uIGFsbG93cyB0aGUgdXNlciB0byBzZXQgdGhlIG51bWJlciBvZiAKKyAgICAgICAqIG1lc3NhZ2VzIHRvIHNlbmQuICBUaGlzIGluIGVmZmVjdCBtb2RpZmllcyB0aGUgdGVzdAorICAgICAgICogdGltZS4gIElmIHdlIGtub3cgdGhlIG1lc3NhZ2Ugc2l6ZSwgdGhlbiB0aGUgd2UgY2FuCisgICAgICAgKiBleHByZXNzIHRoZSB0ZXN0IHRpbWUgYXMgbWVzc2FnZV9zaXplICogbnVtYmVyX21lc3NhZ2VzCisgICAgICAgKi8KKyAgICAgIG1zZ19jb3VudCA9IGNvbnZlcnQgKG9wdGFyZyk7CisgICAgICBpZiAobXNnX2NvdW50ID4gMCkKKwkgIHRlc3RfdGltZSA9IDA7CisgICAgICBicmVhazsKKyAgICBjYXNlICdCJzoKKyAgICAgIG5vbl9ibG9jayA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdUJzoKKyAgICAgIG51bV9hc3NvY2lhdGlvbnMgPSBhdG9pKG9wdGFyZyk7CisgICAgICBpZiAobnVtX2Fzc29jaWF0aW9ucyA8PSAxKSB7CisJICBwcmludGYoIk51bWJlciBvZiBTRFAgYXNzb2NpYXRpb25zIG11c3QgYmUgPj0gMVxuIik7CisJICBleGl0KDEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfTsKKyAgfQorfQorCisjZW5kaWYgIC8qIFdBTlRfU0RQICovCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X3NkcC5oIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9zZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ3NmJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF9zZHAuaApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3IEhld2xldHQtUGFja2FyZCBDb21wYW55CisqLworCisgLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0ZXN0LXNwZWNpZmljIGRlZmluaXRpb25zIGZvciBuZXRwZXJmJ3MgU0RQICovCisgLyogc29ja2V0cyB0ZXN0cyAqLworCisvKiBvbmUgb2YgdGhlc2UgZGF5cywgdGhpcyBzaG91bGQgbm90IGJlIHJlcXVpcmVkICovCisjaWZuZGVmIEFGX0lORVRfU0RQCisjZGVmaW5lIEFGX0lORVRfU0RQIDI3CisjZGVmaW5lIFBGX0lORVRfU0RQIEFGX0lORVRfU0RQCisjZW5kaWYgCisKK3N0cnVjdAlzZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0IHsKKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0IC0gdGhlICovCisJCQkvKiByZWNlaXZlIHNvY2tldCBidWZmZXIgdGhhdCBpcyAqLyAKKyAgaW50CXJlY2VpdmVfc2l6ZTsgICAvKiBob3cgbWFueSBieXRlcyBkbyB3ZSB3YW50IHRvIHJlY2VpdmUgYXQgb25lICovCisJCQkvKiB0aW1lPyAqLyAKKyAgaW50CXJlY3ZfYWxpZ25tZW50OyAvKiB3aGF0IGlzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHJlY2VpdmUgKi8KKwkJCS8qIGJ1ZmZlcj8gKi8gCisgIGludAlyZWN2X29mZnNldDsgICAgLyogYW5kIGF0IHdoYXQgb2Zmc2V0IGZyb20gdGhhdCBhbGlnbm1lbnQ/ICovIAorICBpbnQJbm9fZGVsYXk7ICAgICAgIC8qIGRvIHdlIGRpc2FibGUgdGhlIG5hZ2xlIGFsZ29yaXRobSBmb3Igc2VuZCAqLworCQkJLyogY29hbGVzY2luZz8gKi8gCisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdSB1dGlsaXphdGlvbiAqLworCQkJLyogbWVhc3VyZWQ/ICovIAorICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzIGFscmVhZHk/ICovIAorICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgY29waWVzIG9uICovCisJCQkvKiByZWNlaXZlcz8gKi8gCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBkaXJ0eV9jb3VudDsgICAgLyogaG93IG1hbnkgaW50ZWdlcnMgaW4gdGhlIHJlY2VpdmUgYnVmZmVyICovCisJCQkvKiBzaG91bGQgYmUgbWFkZSBkaXJ0eSBiZWZvcmUgY2FsbGluZyByZWN2PyAqLyAgCisgIGludCAgIGNsZWFuX2NvdW50OyAgICAvKiBob3cgbWFueSBpbnRlZ2VycyBzaG91bGQgYmUgcmVhZCBmcm9tIHRoZSAqLworCQkJLyogcmVjdiBidWZmZXIgYmVmb3JlIGNhbGxpbmcgcmVjdj8gKi8gCisgIGludCAgIHBvcnQ7CQkvKiB0aGUgdG8gcG9ydCB0byB3aGljaCByZWN2IHNpZGUgc2hvdWxkIGJpbmQKKwkJCSAgIHRvIGFsbG93IG5ldHBlcmYgdG8gcnVuIHRocm91Z2ggZmlyZXdhbGxzICovCisgIGludCAgIGlwZmFtaWx5OwkvKiBhZGRyZXNzIGZhbWlseSBvZiBpcGFkZHJlc3MgKi8KKyAgaW50ICAgbm9uX2Jsb2NraW5nOyAgIC8qIHJ1biB0aGUgdGVzdCBpbiBub24tYmxvY2tpbmcgbW9kZSAqLworfTsKKworc3RydWN0CXNkcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQJKi8KKyAgaW50CXJlY2VpdmVfc2l6ZTsKKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJZGF0YV9wb3J0X251bWJlcjsJLyogY29ubmVjdCB0byBtZSBoZXJlCSovCisgIGZsb2F0CWNwdV9yYXRlOwkJLyogY291bGQgd2UgbWVhc3VyZQkqLworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIG5vbl9ibG9ja2luZzsgICAvKiBydW4gdGhlIHRlc3QgaW4gbm9uLWJsb2NraW5nIG1vZGUgKi8KK307CisKK3N0cnVjdCBzZHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0IHsKKyAgZG91YmxlICAgICAgICAgYnl0ZXNfcmVjZWl2ZWQ7CisgIHVuc2lnbmVkIGludAkgcmVjdl9jYWxsczsJCisgIGZsb2F0CSAgICAgICAgIGVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CSAgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIGNwdSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIGhhZCB0aGUgcmVtb3RlPyAqLworfTsKKworc3RydWN0CXNkcF9ycl9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJcmVjdl9hbGlnbm1lbnQ7CisgIGludAlyZWN2X29mZnNldDsKKyAgaW50CXNlbmRfYWxpZ25tZW50OworICBpbnQJc2VuZF9vZmZzZXQ7CisgIGludAlyZXF1ZXN0X3NpemU7CisgIGludAlyZXNwb25zZV9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzPwkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSAqLworCQkJLyogY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHBvcnQ7CQkvKiB0aGUgdG8gcG9ydCB0byB3aGljaCByZWN2IHNpZGUgc2hvdWxkIGJpbmQKKwkJCSAgIHRvIGFsbG93IG5ldHBlcmYgdG8gcnVuIHRocm91Z2ggZmlyZXdhbGxzICovCisgIGludCAgIGlwZmFtaWx5OwkvKiBhZGRyZXNzIGZhbWlseSBvZiBpcGFkZHJlc3MgKi8KKyAgaW50ICAgbm9uX2Jsb2NraW5nOyAgIC8qIHJ1biB0aGUgdGVzdCBpbiBub24tYmxvY2tpbmcgbW9kZSAqLworfTsKKworc3RydWN0CXNkcF9ycl9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlkYXRhX3BvcnRfbnVtYmVyOwkvKiBjb25uZWN0IHRvIG1lIGhlcmUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludAlzb19yY3Zhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBub25fYmxvY2tpbmc7ICAgLyogcnVuIHRoZSB0ZXN0IGluIG5vbi1ibG9ja2luZyBtb2RlICovCit9OworCitzdHJ1Y3Qgc2RwX3JyX3Jlc3VsdHNfc3RydWN0IHsKKyAgdW5zaWduZWQgaW50ICBieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIHVuc2lnbmVkIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CSAgICAgICAgZWxhcHNlZF90aW1lOwkvKiBob3cgbG9uZyB0aGUgdGVzdCByYW4gKi8KKyAgZmxvYXQJICAgICAgICBjcHVfdXRpbDsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGZsb2F0CSAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgIGNwdV9tZXRob2Q7ICAgIC8qIGhvdyB3YXMgY3B1IHV0aWwgbWVhc3VyZWQ/ICovCisgIGludCAgICAgICAgICAgbnVtX2NwdXM7ICAgICAgLyogaG93IG1hbnkgQ1BVcyBoYWQgdGhlIHJlbW90ZT8gKi8KK307CisKK3N0cnVjdAlzZHBfbWFlcnRzX3JlcXVlc3Rfc3RydWN0IHsKKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0IC0gdGhlICovCisJCQkvKiByZWNlaXZlIHNvY2tldCBidWZmZXIgdGhhdCBpcyAqLyAKKyAgaW50CXNlbmRfc2l6ZTsgICAgICAvKiBob3cgbWFueSBieXRlcyBkbyB3ZSB3YW50IG5ldHNlcnZlciB0byBzZW5kCisJCQkgICBhdCBvbmUgdGltZT8gKi8KKyAgaW50CXNlbmRfYWxpZ25tZW50OyAvKiB3aGF0IGlzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHNlbmQgKi8KKwkJCS8qIGJ1ZmZlcj8gKi8gCisgIGludAlzZW5kX29mZnNldDsgICAgLyogYW5kIGF0IHdoYXQgb2Zmc2V0IGZyb20gdGhhdCBhbGlnbm1lbnQ/ICovIAorICBpbnQJbm9fZGVsYXk7ICAgICAgIC8qIGRvIHdlIGRpc2FibGUgdGhlIG5hZ2xlIGFsZ29yaXRobSBmb3Igc2VuZCAqLworCQkJLyogY29hbGVzY2luZz8gKi8gCisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdSB1dGlsaXphdGlvbiAqLworCQkJLyogbWVhc3VyZWQ/ICovIAorICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzIGFscmVhZHk/ICovIAorICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgY29waWVzIG9uICovCisJCQkvKiByZWNlaXZlcz8gKi8gCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBkaXJ0eV9jb3VudDsgICAgLyogaG93IG1hbnkgaW50ZWdlcnMgaW4gdGhlIHNlbmQgYnVmZmVyICovCisJCQkvKiBzaG91bGQgYmUgbWFkZSBkaXJ0eSBiZWZvcmUgY2FsbGluZyByZWN2PyAqLyAgCisgIGludCAgIGNsZWFuX2NvdW50OyAgICAvKiBob3cgbWFueSBpbnRlZ2VycyBzaG91bGQgYmUgcmVhZCBmcm9tIHRoZSAqLworCQkJLyogcmVjdiBidWZmZXIgYmVmb3JlIGNhbGxpbmcgcmVjdj8gKi8gCisgIGludCAgIHBvcnQ7ICAgICAgICAgICAvKiB0aGUgcG9ydCB0byB3aGljaCB0aGUgcmVjdiBzaWRlIHNob3VsZCBiaW5kCisJCQkgICB0byBhbGxvdyBuZXRwZXJmIHRvIHJ1biB0aHJvdWdoIHRob3NlIGV2aWwKKwkJCSAgIGZpcmV3YWxsIHRoaW5ncyAqLworICBpbnQgICBpcGZhbWlseTsKK307CisKK3N0cnVjdAlzZHBfbWFlcnRzX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX3NpemU7CisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CS8qIGNvbm5lY3QgdG8gbWUgaGVyZQkqLworICBmbG9hdAljcHVfcmF0ZTsJCS8qIGNvdWxkIHdlIG1lYXN1cmUJKi8KKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworfTsKKworc3RydWN0IHNkcF9tYWVydHNfcmVzdWx0c19zdHJ1Y3QgeworICBkb3VibGUgICAgICAgICBieXRlc19zZW50OworICB1bnNpZ25lZCBpbnQJIHNlbmRfY2FsbHM7CQorICBmbG9hdAkgICAgICAgICBlbGFwc2VkX3RpbWU7CS8qIGhvdyBsb25nIHRoZSB0ZXN0IHJhbiAqLworICBmbG9hdAkgICAgICAgICBjcHVfdXRpbDsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGZsb2F0CSAgICAgICAgIHNlcnZfZGVtOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgaW50ICAgICAgICAgICAgY3B1X21ldGhvZDsgICAgLyogaG93IHdhcyBjcHUgdXRpbCBtZWFzdXJlZD8gKi8KKyAgaW50ICAgICAgICAgICAgbnVtX2NwdXM7ICAgICAgLyogaG93IG1hbnkgQ1BVcyBoYWQgdGhlIHJlbW90ZT8gKi8KK307CisKK2V4dGVybiB2b2lkIHNlbmRfc2RwX3N0cmVhbSgpOworZXh0ZXJuIHZvaWQgc2VuZF9zZHBfcnIoKTsKKworZXh0ZXJuIHZvaWQgcmVjdl9zZHBfc3RyZWFtKCk7CitleHRlcm4gdm9pZCByZWN2X3NkcF9ycigpOworCitleHRlcm4gdm9pZCBsb2NfY3B1X3JhdGUoKTsKK2V4dGVybiB2b2lkIHJlbV9jcHVfcmF0ZSgpOwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF91bml4LmMgYi9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X3VuaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODVmMDMwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF91bml4LmMKQEAgLTAsMCArMSwzNDM1IEBACisjaWZkZWYgbGludAorI2RlZmluZSBXQU5UX1VOSVgKKyNkZWZpbmUgRElSVFkKKyNkZWZpbmUgV0FOVF9JTlRFUlZBTFMKKyNlbmRpZiAvKiBsaW50ICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIFdJTjMyCisjZXJyb3IgVW5peCBEb21haW4gU29ja2V0cyBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciBXaW5kb3dzCisjZW5kaWYKKworI2lmZGVmIFdBTlRfVU5JWAorY2hhcgluZXR0ZXN0X3VuaXhfaWRbXT0iXAorQCgjKW5ldHRlc3RfdW5peC5jIChjKSBDb3B5cmlnaHQgMTk5NC0yMDA4IEhld2xldHQtUGFja2FyZCBDby4gVmVyc2lvbiAyLjQuNSI7CisgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCQkJCQkJKi8KKy8qCW5ldHRlc3RfYnNkLmMJCQkJCQkqLworLyoJCQkJCQkJCSovCisvKiAgICAgIHRoZSBCU0Qgc29ja2V0cyBwYXJzaW5nIHJvdXRpbmUuLi4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzY2FuX3VuaXhfYXJncygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qCXRoZSBhY3R1YWwgdGVzdCByb3V0aW5lcy4uLgkJCQkqLworLyoJCQkJCQkJCSovCisvKglzZW5kX3N0cmVhbV9zdHJlYW0oKSAgcGVyZm9ybSBhIHN0cmVhbSBzdHJlYW0gdGVzdAkqLworLyoJcmVjdl9zdHJlYW1fc3RyZWFtKCkJCQkJCSovCisvKglzZW5kX3N0cmVhbV9ycigpICAgICAgcGVyZm9ybSBhIHN0cmVhbSByZXF1ZXN0L3Jlc3BvbnNlCSovCisvKglyZWN2X3N0cmVhbV9ycigpCQkJCQkqLworLyoJc2VuZF9kZ19zdHJlYW0oKSAgICAgIHBlcmZvcm0gYSBkZyBzdHJlYW0gdGVzdAkgICAgICAgICovCisvKglyZWN2X2RnX3N0cmVhbSgpCQkJCQkqLworLyoJc2VuZF9kZ19ycigpCSAgICAgIHBlcmZvcm0gYSBkZyByZXF1ZXN0L3Jlc3BvbnNlCSovCisvKglyZWN2X2RnX3JyKCkJCQkJCQkqLworLyoJbG9jX2NwdV9yYXRlKCkJICAgICAgZGV0ZXJtaW5lIHRoZSBsb2NhbCBjcHUgbWF4cmF0ZSAgICovCisvKglyZW1fY3B1X3JhdGUoKQkgICAgICBmaW5kIHRoZSByZW1vdGUgY3B1IG1heHJhdGUJKi8KKy8qCQkJCQkJCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgIAorIC8qIGF0IHNvbWUgcG9pbnQsIEkgbWlnaHQgd2FudCB0byBnby1pbiBhbmQgc2VlIGlmIEkgcmVhbGx5IG5lZWQgYWxsICovCisgLyogdGhlc2UgaW5jbHVkZXMsIGJ1dCBmb3IgdGhlIG1vbWVudCwgd2UnbGwgbGV0IHRoZW0gYWxsIGp1c3Qgc2l0ICovCisgLyogdGhlcmUuIHJhaiA4Lzk0ICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmbmRlZiBXSU4zMgorI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlIC8qIFdJTjMyICovCisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmIC8qIFdJTjMyICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpZmRlZiBOT1NURExJQkgKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbHNlIC8qIE5PU1RETElCSCAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmIC8qIE5PU1RETElCSCAqLworCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworICAgCisjaW5jbHVkZSAibmV0bGliLmgiCisjaW5jbHVkZSAibmV0c2guaCIKKyNpbmNsdWRlICJuZXR0ZXN0X3VuaXguaCIKKworDAorCisgLyogdGhlc2UgdmFyaWFibGVzIGFyZSBzcGVjaWZpYyB0byB0aGUgVU5JWCBzb2NrZXRzIHRlc3RzLiBkZWNsYXJlICovCisgLyogdGhlbSBzdGF0aWMgdG8gbWFrZSB0aGVtIGdsb2JhbCBvbmx5IHRvIHRoaXMgZmlsZS4gKi8KKworI2RlZmluZSBVTklYX1BSRlggIm5ldHBlcmYuIgorI2RlZmluZSBVTklYX0xFTkdUSF9NQVggMHhGRkZGIC0gMjgKKworc3RhdGljIGNoYXIKKyAgcGF0aF9wcmVmaXhbMzJdOyAKKworc3RhdGljIGludAkKKyAgcnNzX3NpemUsCQkvKiByZW1vdGUgc29ja2V0IHNlbmQgYnVmZmVyIHNpemUJKi8KKyAgcnNyX3NpemUsCQkvKiByZW1vdGUgc29ja2V0IHJlY3YgYnVmZmVyIHNpemUJKi8KKyAgbHNzX3NpemVfcmVxLAkJLyogcmVxdWVzdGVkIGxvY2FsIHNvY2tldCBzZW5kIGJ1ZmZlciBzaXplICovCisgIGxzcl9zaXplX3JlcSwJCS8qIHJlcXVlc3RlZCBsb2NhbCBzb2NrZXQgcmVjdiBidWZmZXIgc2l6ZSAqLworICBsc3Nfc2l6ZSwJCS8qIGxvY2FsICBzb2NrZXQgc2VuZCBidWZmZXIgc2l6ZSAJKi8KKyAgbHNyX3NpemUsCQkvKiBsb2NhbCAgc29ja2V0IHJlY3YgYnVmZmVyIHNpemUgCSovCisgIHJlcV9zaXplID0gMSwJCS8qIHJlcXVlc3Qgc2l6ZSAgICAgICAgICAgICAgICAgICAJKi8KKyAgcnNwX3NpemUgPSAxLAkJLyogcmVzcG9uc2Ugc2l6ZQkJCSovCisgIHNlbmRfc2l6ZSwJCS8qIGhvdyBiaWcgYXJlIGluZGl2aWR1YWwgc2VuZHMJCSovCisgIHJlY3Zfc2l6ZTsJCS8qIGhvdyBiaWcgYXJlIGluZGl2aWR1YWwgcmVjZWl2ZXMJKi8KKworIC8qIGRpZmZlcmVudCBvcHRpb25zIGZvciB0aGUgc29ja2V0cwkJCQkqLworCisKK2NoYXIgdW5peF91c2FnZVtdID0gIlxuXAorVXNhZ2U6IG5ldHBlcmYgW2dsb2JhbCBvcHRpb25zXSAtLSBbdGVzdCBvcHRpb25zXSBcblwKK1xuXAorU1RSRUFNL0RHIFVOSVggU29ja2V0cyBUZXN0IE9wdGlvbnM6XG5cCisgICAgLWggICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIHRleHRcblwKKyAgICAtbSBieXRlcyAgICAgICAgICBTZXQgdGhlIHNlbmQgc2l6ZSAoU1RSRUFNX1NUUkVBTSwgREdfU1RSRUFNKVxuXAorICAgIC1NIGJ5dGVzICAgICAgICAgIFNldCB0aGUgcmVjdiBzaXplIChTVFJFQU1fU1RSRUFNLCBER19TVFJFQU0pXG5cCisgICAgLXAgZGlyICAgICAgICAgICAgU2V0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgcGlwZXMgYXJlIGNyZWF0ZWRcblwKKyAgICAtciByZXEscmVzICAgICAgICBTZXQgcmVxdWVzdCxyZXNwb25zZSBzaXplIChTVFJFQU1fUlIsIERHX1JSKVxuXAorICAgIC1zIHNlbmRbLHJlY3ZdICAgIFNldCBsb2NhbCBzb2NrZXQgc2VuZC9yZWN2IGJ1ZmZlciBzaXplc1xuXAorICAgIC1TIHNlbmRbLHJlY3ZdICAgIFNldCByZW1vdGUgc29ja2V0IHNlbmQvcmVjdiBidWZmZXIgc2l6ZXNcblwKK1xuXAorRm9yIHRob3NlIG9wdGlvbnMgdGFraW5nIHR3byBwYXJtcywgYXQgbGVhc3Qgb25lIG11c3QgYmUgc3BlY2lmaWVkO1xuXAorc3BlY2lmeWluZyBvbmUgdmFsdWUgd2l0aG91dCBhIGNvbW1hIHdpbGwgc2V0IGJvdGggcGFybXMgdG8gdGhhdFxuXAordmFsdWUsIHNwZWNpZnlpbmcgYSB2YWx1ZSB3aXRoIGEgbGVhZGluZyBjb21tYSB3aWxsIHNldCBqdXN0IHRoZSBzZWNvbmRcblwKK3Bhcm0sIGEgdmFsdWUgd2l0aCBhIHRyYWlsaW5nIGNvbW1hIHdpbGwgc2V0IGp1c3QgdGhlIGZpcnN0LiBUbyBzZXRcblwKK2VhY2ggcGFybSB0byB1bmlxdWUgdmFsdWVzLCBzcGVjaWZ5IGJvdGggYW5kIHNlcGFyYXRlIHRoZW0gd2l0aCBhXG5cCitjb21tYS5cbiI7IAorDAorIC8qIHRoaXMgcm91dGluZyBpbml0aWFsaXplcyBhbGwgdGhlIHRlc3Qgc3BlY2lmaWMgdmFyaWFibGVzICovCisKK3N0YXRpYyB2b2lkCitpbml0X3Rlc3RfdmFycygpCit7CisgIHJzc19zaXplICA9IDA7CisgIHJzcl9zaXplICA9IDA7CisgIGxzc19zaXplX3JlcSA9IDA7CisgIGxzcl9zaXplX3JlcSA9IDA7CisgIGxzc19zaXplICA9IDA7CisgIGxzcl9zaXplICA9IDA7CisgIHJlcV9zaXplICA9IDE7CisgIHJzcF9zaXplICA9IDE7CisgIHNlbmRfc2l6ZSA9IDA7CisgIHJlY3Zfc2l6ZSA9IDA7CisKKyAgc3RyY3B5KHBhdGhfcHJlZml4LCIvdG1wIik7CisKK30gICAgIAorDAorIC8qIFRoaXMgcm91dGluZSB3aWxsIGNyZWF0ZSBhIGRhdGEgKGxpc3Rlbikgc29ja2V0IHdpdGggdGhlIGFwcm9wcmlhdGUgKi8KKyAvKiBvcHRpb25zIHNldCBhbmQgcmV0dXJuIGl0IHRvIHRoZSBjYWxsZXIuIHRoaXMgcmVwbGFjZXMgYWxsIHRoZSAqLworIC8qIGR1cGxpY2F0ZSBjb2RlIGluIGVhY2ggb2YgdGhlIHRlc3Qgcm91dGluZXMgYW5kIHNob3VsZCBoZWxwIG1ha2UgKi8KKyAvKiB0aGluZ3MgYSBsaXR0bGUgZWFzaWVyIHRvIHVuZGVyc3RhbmQuIHNpbmNlIHRoaXMgcm91dGluZSBjYW4gYmUgKi8KKyAvKiBjYWxsZWQgYnkgZWl0aGVyIHRoZSBuZXRwZXJmIG9yIG5ldHNlcnZlciBwcm9ncmFtcywgYWxsIG91dHB1dCAqLworIC8qIHNob3VsZCBiZSBkaXJlY3RlZCB0b3dhcmRzICJ3aGVyZS4iIGZhbWlseSBpcyBnZW5lcmFsbHkgQUZfVU5JWCwgKi8KKyAvKiBhbmQgdHlwZSB3aWxsIGJlIGVpdGhlciBTT0NLX1NUUkVBTSBvciBTT0NLX0RHUkFNICovCitTT0NLRVQKK2NyZWF0ZV91bml4X3NvY2tldChpbnQgZmFtaWx5LCBpbnQgdHlwZSkKK3sKKworICBTT0NLRVQgdGVtcF9zb2NrZXQ7CisgIGludCBzb2NrX29wdF9sZW47CisKKyAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdGVtcF9zb2NrZXQgPSBzb2NrZXQoZmFtaWx5LCAKKwkJICAgICAgIHR5cGUsCisJCSAgICAgICAwKTsKKyAgCisgIGlmICh0ZW1wX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IGNyZWF0ZV91bml4X3NvY2tldDogc29ja2V0OiAlZFxuIiwKKwkgICAgZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwiY3JlYXRlX3VuaXhfc29ja2V0OiBzb2NrZXQgJWQgb2J0YWluZWQuLi5cbiIsdGVtcF9zb2NrZXQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE1vZGlmeSB0aGUgbG9jYWwgc29ja2V0IHNpemUuIFRoZSByZWFzb24gd2UgYWx0ZXIgdGhlIHNlbmQgYnVmZmVyICovCisgIC8qIHNpemUgaGVyZSByYXRoZXIgdGhhbiB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUgaXMgdG8gdGFrZSBjYXJlICovCisgIC8qIG9mIGRlY3JlYXNlcyBpbiBidWZmZXIgc2l6ZS4gRGVjcmVhc2luZyB0aGUgd2luZG93IHNpemUgYWZ0ZXIgKi8KKyAgLyogY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGlzIGEgU1RSRUFNIG5vLW5vLiBBbHNvLCBieSBzZXR0aW5nIHRoZSAqLworICAvKiBidWZmZXIgKHdpbmRvdykgc2l6ZSBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIHdlIGNhbiAqLworICAvKiBjb250cm9sIHRoZSBTVFJFQU0gTVNTIChzZWdtZW50IHNpemUpLiBUaGUgTVNTIGlzIG5ldmVyIG1vcmUgdGhhdCAxLzIgKi8KKyAgLyogdGhlIG1pbmltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZSBhdCBlYWNoIGhhbGYgb2YgdGhlIGNvbm5lY3Rpb24uICovCisgIC8qIFRoaXMgaXMgd2h5IHdlIGFyZSBhbHRlcmluZyB0aGUgcmVjZWl2ZSBidWZmZXIgc2l6ZSBvbiB0aGUgc2VuZGluZyAqLworICAvKiBzaXplIG9mIGEgdW5pZGlyZWN0aW9uYWwgdHJhbnNmZXIuIElmIHRoZSB1c2VyIGhhcyBub3QgcmVxdWVzdGVkICovCisgIC8qIHRoYXQgdGhlIHNvY2tldCBidWZmZXJzIGJlIGFsdGVyZWQsIHdlIHdpbGwgdHJ5IHRvIGZpbmQtb3V0IHdoYXQgKi8KKyAgLyogdGhlaXIgdmFsdWVzIGFyZS4gSWYgd2UgY2Fubm90IHRvdWNoIHRoZSBzb2NrZXQgYnVmZmVyIGluIGFueSB3YXksICovCisgIC8qIHdlIHdpbGwgc2V0IHRoZSB2YWx1ZXMgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdC4gICovCisgIAorICBzZXRfc29ja19idWZmZXIodGVtcF9zb2NrZXQsIFNFTkRfQlVGRkVSLCBsc3Nfc2l6ZV9yZXEsICZsc3Nfc2l6ZSk7CisgIHNldF9zb2NrX2J1ZmZlcih0ZW1wX3NvY2tldCwgUkVDVl9CVUZGRVIsIGxzcl9zaXplX3JlcSwgJmxzcl9zaXplKTsKKworICByZXR1cm4odGVtcF9zb2NrZXQpOworCit9CisKKwwKKy8qIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBTVFJFQU0gdW5pZGlyZWN0aW9uYWwgZGF0YSB0cmFuc2ZlciB0ZXN0ICovCisvKiAoYS5rLmEuIHN0cmVhbSkgZm9yIHRoZSBzb2NrZXRzIGludGVyZmFjZS4gSXQgcmVjZWl2ZXMgaXRzICovCisvKiBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwgdmFyaWFibGVzIGZyb20gdGhlIHNoZWxsIGFuZCB3cml0ZXMgaXRzICovCisvKiBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKworCit2b2lkIAorc2VuZF9zdHJlYW1fc3RyZWFtKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIFxuXAorYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgICAgc2Vjcy4gICAgJXMvc2VjICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZlxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzEgPQorICAgICIlNWQgICU1ZCAgJTZkICAgICUtNi4yZiAgICU3LjJmICAgXG4iOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxpemF0aW9uICAgIFNlcnZpY2UgRGVtYW5kXG5cCitTb2NrZXQgU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgICAgICAgICBTZW5kICAgUmVjdiAgICBTZW5kICAgIFJlY3ZcblwKK1NpemUgICBTaXplICAgIFNpemUgICAgIFRpbWUgICAgIFRocm91Z2hwdXQgIGxvY2FsICByZW1vdGUgIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgICBieXRlcyAgICBzZWNzLiAgICAlLTguOHMvcyAgJSUgICAgICAlJSAgICAgICB1cy9LQiAgIHVzL0tCXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMSA9CisgICAgIiU1ZCAgJTVkICAlNmQgICAgJS02LjJmICAgICAlNy4yZiAgICUtNi4yZiAlLTYuMmYgICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlxuXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0ICAgICAgICAgJS04LjhzICUtOC44cyAgICBTZW5kcyAgICUtOC44cyBSZWN2c1xuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZSAgWGZlcmVkICAgUGVyICAgICAgICAgICAgICAgICBQZXJcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2ICAgICAgICAgICAgIFNlbmQgKGF2ZykgICAgICAgICAgUmVjdiAoYXZnKVxuXAorJTVkICAgJTVkICAlNWQgICAlNWQgJTYuNGcgICU2LjJmICAgICAlNmQgJTYuMmYgICAlNmRcbiI7CisgIAorICAKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIGludCBpbnRlcnZhbF9jb3VudDsKKyNlbmRpZgorICAKKyAgLyogd2hhdCB3ZSB3YW50IGlzIHRvIGhhdmUgYSBidWZmZXIgc3BhY2UgdGhhdCBpcyBhdCBsZWFzdCBvbmUgKi8KKyAgLyogc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc2VuZCB3aW5kb3cuIHRoaXMgd2lsbCBpbnN1cmUgdGhhdCB3ZSAqLworICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgLyogb2YgdGhlIHRyYW5zcG9ydC4gVGhpcyBidWZmZXIgd2lsbCBiZSBtYWxsb2MnZCBhZnRlciB3ZSBoYXZlIGZvdW5kICovCisgIC8qIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBzZW5jIHNvY2tldCBidWZmZXIuIFdlIHdpbGwgd2FudCB0byBkZWFsICovCisgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKyAgCisjaWZkZWYgRElSVFkKKyAgaW50CSptZXNzYWdlX2ludF9wdHI7CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICAKKyAgaW50CWxlbiA9IDA7CisgIGludAludW1tZXNzYWdlczsKKyAgU09DS0VUIHNlbmRfc29ja2V0OworICBpbnQJYnl0ZXNfcmVtYWluaW5nOworICAvKiB3aXRoIGxpbmtzIGxpa2UgZmRkaSwgb25lIGNhbiBzZW5kID4gMzIgYml0cyB3b3J0aCBvZiBieXRlcyAqLworICAvKiBkdXJpbmcgYSB0ZXN0Li4uIDstKSAqLworICBkb3VibGUJYnl0ZXNfc2VudDsKKyAgCisjaWZkZWYgRElSVFkKKyAgaW50CWk7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICBzdHJ1Y3QJc29ja2FkZHJfdW4Jc2VydmVyOworICAKKyAgc3RydWN0CXN0cmVhbV9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKnN0cmVhbV9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXN0cmVhbV9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJc3RyZWFtX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqc3RyZWFtX3N0cmVhbV9yZXN1bHQ7CisgIAorICBzdHJlYW1fc3RyZWFtX3JlcXVlc3QgID0gCisgICAgKHN0cnVjdCBzdHJlYW1fc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHN0cmVhbV9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc3RyZWFtX3N0cmVhbV9yZXN1bHQgICA9IAorICAgIChzdHJ1Y3Qgc3RyZWFtX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgIC8qIGNvbnRyb2wgc29ja2V0LCBhbmQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBkaWZmZXJlbnQgKi8KKyAgLyogcHJvdG9jb2xzIGFuZCBzdWNoLCB3ZSBhcmUgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaG9zdCBhbmQgKi8KKyAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworICAKKyAgYnplcm8oKGNoYXIgKikmc2VydmVyLAorCXNpemVvZihzZXJ2ZXIpKTsKKyAgc2VydmVyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJTVFJFQU0gU1RSRUFNIFRFU1RcbiIpOworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkKKyAgICAgIGZwcmludGYod2hlcmUsY3B1X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICBlbHNlCisgICAgICBmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICB9CisgIAorICAvKiBpbml0aWFsaXplIGEgZmV3IGNvdW50ZXJzICovCisgIAorICBudW1tZXNzYWdlcwk9CTA7CisgIGJ5dGVzX3NlbnQJPQkwLjA7CisgIHRpbWVzX3VwIAk9IAkwOworICAKKyAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfdW5peF9zb2NrZXQoQUZfVU5JWCwgCisJCQkJICAgU09DS19TVFJFQU0pOworICAKKyAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfc3RyZWFtX3N0cmVhbTogc3RyZWFtIHN0cmVhbSBkYXRhIHNvY2tldCIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInNlbmRfc3RyZWFtX3N0cmVhbTogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICB9CisgIAorICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGVpdGhlciByZXRyaWV2ZWQgdGhlIHNvY2tldCBidWZmZXIgc2l6ZXMsICovCisgIC8qIG9yIGhhdmUgdHJpZWQgdG8gc2V0IHRoZW0sIHNvIG5vdywgd2UgbWF5IHdhbnQgdG8gc2V0IHRoZSBzZW5kICovCisgIC8qIHNpemUgYmFzZWQgb24gdGhhdCAoYmVjYXVzZSB0aGUgdXNlciBlaXRoZXIgZGlkIG5vdCB1c2UgYSAtbSAqLworICAvKiBvcHRpb24sIG9yIHVzZWQgb25lIHdpdGggYW4gYXJndW1lbnQgb2YgMCkuIElmIHRoZSBzb2NrZXQgYnVmZmVyICovCisgIC8qIHNpemUgaXMgbm90IGF2YWlsYWJsZSwgd2Ugd2lsbCBzZXQgdGhlIHNlbmQgc2l6ZSB0byA0S0IgLSBubyAqLworICAvKiBwYXJ0aWN1bGFyIHJlYXNvbiwganVzdCBhcmJpdHJhcnkuLi4gKi8KKyAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgaWYgKGxzc19zaXplID4gMCkgeworICAgICAgc2VuZF9zaXplID0gbHNzX3NpemU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgc2VuZF9zaXplID0gNDA5NjsKKyAgICB9CisgIH0KKyAgCisgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXIgcmluZyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQuICovCisgIC8qIG5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYWxsb2NhdGVkIGEgcXVhbnRpdHkgKi8KKyAgLyogb2YgbWVtb3J5IHRoYXQgaXMgYXQgbGVhc3Qgb25lIHNlbmQtc2l6ZSBncmVhdGVyIHRoYW4gb3VyIHNvY2tldCAqLworICAvKiBidWZmZXIgc2l6ZS4gV2Ugd2FudCB0byBiZSBzdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAqLworICAvKiBidWZmZXJzIGFsbG9jYXRlZCAtIHRoaXMgY2FuIGJlIGEgYml0IG9mIGEgcHJvYmxlbSB3aGVuIHRoZSAqLworICAvKiBzZW5kX3NpemUgaXMgYmlnZ2VyIHRoYW4gdGhlIHNvY2tldCBzaXplLCBzbyB3ZSBtdXN0IGNoZWNrLi4uIHRoZSAqLworICAvKiB1c2VyIG1heSBoYXZlIHdhbnRlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgIndpZHRoIiBvZiBvdXIgc2VuZCAqLworICAvKiBidWZmZXJzLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGF0IHdpc2guLi4gKi8KKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgeworICAgIHNlbmRfd2lkdGggPSAobHNzX3NpemUvc2VuZF9zaXplKSArIDE7CisgICAgaWYgKHNlbmRfd2lkdGggPT0gMSkgc2VuZF93aWR0aCsrOworICB9CisgIAorICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIHNlbmRfc2l6ZSwKKwkJCQkgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgIGxvY2FsX3NlbmRfb2Zmc2V0KTsKKworICAvKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGNwdSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudHMsIHdlIG11c3QgKi8KKyAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAvKiB0aGVtc2VsdmVzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBjcHUgcmF0ZSwgdGhlbiAqLworICAvKiBjYWxpYnJhdGVfbG9jYWxfY3B1IHdpbGwgcmV0dXJuIHJhdGhlciBxdWlja2x5IGFzIGl0IHdpbGwgaGF2ZSAqLworICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAvKiBhbGwgdGhlICJub3JtYWwiIGNhbGlicmF0aW9uIHN0dWZmIGFuZCByZXR1cm4gdGhlIHJhdGUgYmFjay4qLworICAKKyAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgIH0KKyAgCisgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgKi8KKyAgLyogcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZSByZWFzb24gZm9yICovCisgIC8qIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkICovCisgIC8qIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCAqLworICAvKiB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUgdGhhdCBubyBjaGFuZ2VzIGJleW9uZCB0aGUgc3lzdGVtJ3MgKi8KKyAgLyogZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgKi8KKyAgLyogZGVmYXVsdCB0byAxLCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgCisgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQkJPQlET19TVFJFQU1fU1RSRUFNOworICBzdHJlYW1fc3RyZWFtX3JlcXVlc3QtPnNlbmRfYnVmX3NpemUJPQlyc3Nfc2l6ZTsKKyAgc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemU7CisgIHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplCT0JcmVjdl9zaXplOworICBzdHJlYW1fc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50CT0JcmVtb3RlX3JlY3ZfYWxpZ247CisgIHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQJPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgIHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUJPQlyZW1vdGVfY3B1X3VzYWdlOworICBzdHJlYW1fc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlCT0JcmVtb3RlX2NwdV9yYXRlOworICBpZiAodGVzdF90aW1lKSB7CisgICAgc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgfQorICBlbHNlIHsKKyAgICBzdHJlYW1fc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF9ieXRlczsKKyAgfQorI2lmZGVmIERJUlRZCisgIHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+ZGlydHlfY291bnQgICAgPSAgICAgICByZW1fZGlydHlfY291bnQ7CisgIHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+Y2xlYW5fY291bnQgICAgPSAgICAgICByZW1fY2xlYW5fY291bnQ7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgCisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IHNlbmRfc3RyZWFtX3N0cmVhbTogcmVxdWVzdGluZyBTVFJFQU0gc3RyZWFtIHRlc3RcbiIpOworICB9CisgIAorICBzZW5kX3JlcXVlc3QoKTsKKyAgCisgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQgCSovCisgIC8qIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrIGludG8gCSovCisgIC8qIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4gIFRoZQkqLworICAvKiByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwgaGF2ZSBkb25lCSovCisgIC8qIGFsbCB0aGUgbmVlZGVkIHNldC11cCB3ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCB0aGUgY3B1IGxvY2FsbHkJKi8KKyAgLyogYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgdmFsdWUgcmlnaHQJKi8KKyAgLyogYWZ0ZXIgdGhlIGNvbm5lY3QgcmV0dXJucy4gVGhlIHJlbW90ZSB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgcmlnaHQJKi8KKyAgLyogYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMJKi8KKyAgLyogYmVpbmcgc2VudCBmb3IgdGhlIFNUUkVBTSB0ZXN0cy4JCQkJCSovCisgIAorICByZWN2X3Jlc3BvbnNlKCk7CisgIAorICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgaWYgKGRlYnVnKQorICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisgICAgcnNyX3NpemUJICAgICAgICA9CXN0cmVhbV9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisgICAgcnNzX3NpemUJICAgICAgICA9CXN0cmVhbV9zdHJlYW1fcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisgICAgcmVtb3RlX2NwdV91c2FnZSAgICA9CXN0cmVhbV9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgIHJlbW90ZV9jcHVfcmF0ZSAgICAgPSAJc3RyZWFtX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGU7CisgICAgc3RyY3B5KHNlcnZlci5zdW5fcGF0aCxzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlLT51bml4X3BhdGgpOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCJuZXRwZXJmOiBzZW5kX3N0cmVhbV9zdHJlYW06IHJlbW90ZSBlcnJvciIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICBpZiAoY29ubmVjdChzZW5kX3NvY2tldCwgCisJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsCisJICAgICAgc2l6ZW9mKHNlcnZlcikpID09IElOVkFMSURfU09DS0VUKXsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfc3RyZWFtX3N0cmVhbTogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICBwcmludGYoIiBwYXRoOiAlc1xuIixzZXJ2ZXIuc3VuX3BhdGgpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIERhdGEgU29ja2V0IHNldC11cCBpcyBmaW5pc2hlZC4gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcywgZWl0aGVyIHRoZSAqLworICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAvKiBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBleHRyYSAqLworICAvKiBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCB3ZSdsbCBzZWUgaXQgKi8KKyAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgCisgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgc3RyZWFtIHRlc3QsIHRoZXkgY2FuIGJlICovCisgIC8qIGVpdGhlciB0aW1lIG9yIGJ5dGUtY291bnQgYmFzZWQuICovCisgIAorICBpZiAodGVzdF90aW1lKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgIHRpbWVzX3VwID0gMDsKKyAgICBieXRlc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICBieXRlc19yZW1haW5pbmcgPSB0ZXN0X2J5dGVzOworICAgIHRpbWVzX3VwID0gMTsKKyAgfQorICAKKyAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAvKiB2YWx1ZSBvZiB0aGUgaWRsZSBjb3VudGVyIGZvciBsYXRlciB1c2UgaW4gbWVhc3VyaW5nIGNwdSAqLworICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgIAorICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKyAgCisgIC8qIFdlIHVzZSBhbiAiT1IiIHRvIGNvbnRyb2wgdGVzdCBleGVjdXRpb24uIFdoZW4gdGhlIHRlc3QgaXMgKi8KKyAgLyogY29udHJvbGxlZCBieSB0aW1lLCB0aGUgYnl0ZSBjb3VudCBjaGVjayB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuICovCisgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgLyogYWx3YXlzIHJldHVybiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgdGhlIHdob2xlICovCisgIC8qIGV4cHJlc3Npb24gd2lsbCBnbyBmYWxzZSBhbmQgd2Ugd2lsbCBzdG9wIHNlbmRpbmcgZGF0YS4gKi8KKyAgCisjaWZkZWYgRElSVFkKKyAgLyogaW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIHB1dHRpbmcgZGlydHkgc3R1ZmYgKi8KKyAgLyogaW50byB0aGUgc2VuZCBidWZmZXIuIHJhaiAqLworICBzcmFuZCgoaW50KSBnZXRwaWQoKSk7CisjZW5kaWYKKyAgCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAoYnl0ZXNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAKKyNpZmRlZiBESVJUWQorICAgIC8qIHdlIHdhbnQgdG8gZGlydHkgc29tZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZWdlcnMgaW4gdGhlIGJ1ZmZlciAqLworICAgIC8qIHdlIGFyZSBhYm91dCB0byBzZW5kLiB3ZSBtYXkgYWxzbyB3YW50IHRvIGJyaW5nIHNvbWUgbnVtYmVyIG9mICovCisgICAgLyogdGhlbSBjbGVhbmx5IGludG8gdGhlIGNhY2hlLiBUaGUgY2xlYW4gb25lcyB3aWxsIGZvbGxvdyBhbnkgZGlydHkgKi8KKyAgICAvKiBvbmVzIGludG8gdGhlIGNhY2hlLiBhdCBzb21lIHBvaW50LCB3ZSBtaWdodCB3YW50IHRvIHJlcGxhY2UgKi8KKyAgICAvKiB0aGUgcmFuZCgpIGNhbGwgd2l0aCBzb21ldGhpbmcgZnJvbSBhIHRhYmxlIHRvIHJlZHVjZSBvdXIgY2FsbCAqLworICAgIC8qIG92ZXJoZWFkIGR1cmluZyB0aGUgdGVzdCwgYnV0IGl0IGlzIG5vdCBhIGhpZ2ggcHJpb3JpdHkgaXRlbS4gKi8KKyAgICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopKHNlbmRfcmluZy0+YnVmZmVyX3B0cik7CisgICAgZm9yIChpID0gMDsgaSA8IGxvY19kaXJ0eV9jb3VudDsgaSsrKSB7CisgICAgICAqbWVzc2FnZV9pbnRfcHRyID0gcmFuZCgpOworICAgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBsb2NfY2xlYW5fY291bnQ7IGkrKykgeworICAgICAgbG9jX2RpcnR5X2NvdW50ID0gKm1lc3NhZ2VfaW50X3B0cjsKKyAgICAgIG1lc3NhZ2VfaW50X3B0cisrOworICAgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworICAgIAorICAgIGlmKChsZW49c2VuZChzZW5kX3NvY2tldCwKKwkJIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJIHNlbmRfc2l6ZSwKKwkJIDApKSAhPSBzZW5kX3NpemUpIHsKKyAgICAgIGlmICgobGVuID49MCkgfHwgKGVycm5vID09IEVJTlRSKSkgeworCS8qIHRoZSB0ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgbXVzdCBiZSB0aGUgZW5kIG9mIHRlc3QgKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHBlcnJvcigibmV0cGVyZjogZGF0YSBzZW5kIGVycm9yIik7CisgICAgICBwcmludGYoImxlbiB3YXMgJWRcbiIsbGVuKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgZm9yIChpbnRlcnZhbF9jb3VudCA9IDA7CisJIGludGVydmFsX2NvdW50IDwgaW50ZXJ2YWxfd2F0ZTsKKwkgaW50ZXJ2YWxfY291bnQrKyk7CisjZW5kaWYKKyAgICAKKyAgICAvKiBub3cgd2Ugd2FudCB0byBtb3ZlIG91ciBwb2ludGVyIHRvIHRoZSBuZXh0IHBvc2l0aW9uIGluIHRoZSAqLworICAgIC8qIGRhdGEgYnVmZmVyLi4ud2UgbWF5IGFsc28gd2FudCB0byB3cmFwIGJhY2sgdG8gdGhlICJiZWdpbm5pbmciICovCisgICAgLyogb2YgdGhlIGJ1ZmZlcnNwYWNlLCBzbyB3ZSB3aWxsIG1vZCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgKi8KKyAgICAvKiBieSB0aGUgc2VuZCB3aWR0aCwgYW5kIHVzZSB0aGF0IHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IHRvIGFkZCAqLworICAgIC8qIHRvIHRoZSBiYXNlIHBvaW50ZXIuICovCisgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgIGlmIChieXRlc19yZW1haW5pbmcpIHsKKyAgICAgIGJ5dGVzX3JlbWFpbmluZyAtPSBzZW5kX3NpemU7CisgICAgfQorICB9CisgIAorICAvKiBUaGUgdGVzdCBpcyBvdmVyLiBGbHVzaCB0aGUgYnVmZmVycyB0byB0aGUgcmVtb3RlIGVuZC4gV2UgZG8gYSAqLworICAvKiBncmFjZWZ1bCByZWxlYXNlIHRvIGluc3VyZSB0aGF0IGFsbCBkYXRhIGhhcyBiZWVuIHRha2VuIGJ5IHRoZSAqLworICAvKiByZW1vdGUuICovIAorICAKKyAgaWYgKGNsb3NlKHNlbmRfc29ja2V0KSA9PSAtMSkgeworICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF9zdHJlYW1fc3RyZWFtOiBjYW5ub3QgY2xvc2Ugc29ja2V0Iik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworICAKKyAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nICovCisJCQkJCQkvKiBtZWFzdXJlZCBhbmQgaG93ICovCisJCQkJCQkvKiBsb25nIGRpZCB3ZSByZWFsbHkgKi8KKwkJCQkJCS8qIHJ1bj8gKi8gIAorICAKKyAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIHJlbW90ZSBlbmQuIFRoZSByZW1vdGUgd2lsbCBoYXZlICovCisgIC8qIGNhbGN1bGF0ZWQgc2VydmljZSBkZW1hbmQgYW5kIGFsbCB0aG9zZSBpbnRlcmVzdGluZyB0aGluZ3MuIElmIGl0ICovCisgIC8qIHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgIGlmIChkZWJ1ZykKKyAgICAgIGZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgfQorICBlbHNlIHsKKyAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgIHBlcnJvcigibmV0cGVyZjogcmVtb3RlIGVycm9yIik7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZSBmdXR1cmUsICovCisgIC8qIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dCBtZWFzdXJlZCBieSAqLworICAvKiB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgU1RSRUFNIHN0cmVhbSB0ZXN0LCAqLworICAvKiB0aGF0IHRoZSB0d28gbnVtYmVycyBzaG91bGQgYmUgKnZlcnkqIGNsb3NlLi4uIFdlIGNhbGN1bGF0ZSAqLworICAvKiBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICovCisgIC8qIElmIGl0IHdhcyB0aW1lLCB3ZSBuZWVkZWQgdG8sIGFuZCBpZiBpdCB3YXMgYnkgYnl0ZXMsIHRoZSB1c2VyIG1heSAqLworICAvKiBoYXZlIHNwZWNpZmllZCBhIG51bWJlciBvZiBieXRlcyB0aGF0IHdhc24ndCBhIG11bHRpcGxlIG9mIHRoZSAqLworICAvKiBzZW5kX3NpemUsIHNvIHdlIHJlYWxseSBkaWRuJ3Qgc2VuZCB3aGF0IGhlIGFza2VkIGZvciA7LSkgKi8KKyAgCisgIGJ5dGVzX3NlbnQJPSAoKGRvdWJsZSkgc2VuZF9zaXplICogKGRvdWJsZSkgbnVtbWVzc2FnZXMpICsgbGVuOworICB0aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3NlbnQpOworCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSAqLworICAgIC8qIE9mIGNvdXJzZSwgc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgYm9ndXMgYmVjYXVzZSAqLworICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgLyogYSBub3RlIG9mIHRoaXMgZm9yIHRoZSB1c2VyJ3MgYmVuZWZpdC4uLiovCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgaWYgKGxvY2FsX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsIldBUk5JTkcgV0FSTklORyBXQVJOSU5HICBXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyFcbiIpOworCWZwcmludGYod2hlcmUsIkxvY2FsIENQVSB1c2FnZSBudW1iZXJzIGJhc2VkIG9uIHByb2Nlc3MgaW5mb3JtYXRpb24gb25seSFcbiIpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbgk9IC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IC0xLjA7CisgICAgfQorICAgIAorICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisgICAgICBpZiAocmVtb3RlX2NwdV9yYXRlID09IDAuMCkgeworCWZwcmludGYod2hlcmUsIkRBTkdFUiAgIERBTkdFUiAgREFOR0VSICAgREFOR0VSICAgREFOR0VSICBEQU5HRVIgICBEQU5HRVIhXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJSZW1vdGUgQ1BVIHVzYWdlIG51bWJlcnMgYmFzZWQgb24gcHJvY2VzcyBpbmZvcm1hdGlvbiBvbmx5IVxuIik7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24JPSBzdHJlYW1fc3RyZWFtX3Jlc3VsdC0+Y3B1X3V0aWw7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQJPSBjYWxjX3NlcnZpY2VfZGVtYW5kKGJ5dGVzX3NlbnQsCisJCQkJCQkgICAgICAwLjAsCisJCQkJCQkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJCQkJICAgICAgc3RyZWFtX3N0cmVhbV9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgICAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgICAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICByc3Jfc2l6ZSwJCSAgICAgICAgLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGxzc19zaXplLAkJICAgICAgICAvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICB0aHJ1cHV0LCAJCSAgICAgICAgLyogd2hhdCB3YXMgdGhlIHhmZXIgcmF0ZSAqLworCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgdGhydXB1dCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICByc3Jfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgbHNzX3NpemUsIAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHNlbmRzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgdGhydXB1dCk7LyogaG93IGZhc3QgZGlkIGl0IGdvICovCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBTVFJFQU0gc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgIkJ5dGVzIiwKKwkgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3ZfYWxpZ24sCisJICAgIGxvY2FsX3NlbmRfb2Zmc2V0LAorCSAgICByZW1vdGVfcmVjdl9vZmZzZXQsCisJICAgIGJ5dGVzX3NlbnQsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKW51bW1lc3NhZ2VzLAorCSAgICBudW1tZXNzYWdlcywKKwkgICAgYnl0ZXNfc2VudCAvIChkb3VibGUpc3RyZWFtX3N0cmVhbV9yZXN1bHQtPnJlY3ZfY2FsbHMsCisJICAgIHN0cmVhbV9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzKTsKKyAgfQorICAKK30KKwwKKworLyogVGhpcyBpcyB0aGUgc2VydmVyLXNpZGUgcm91dGluZSBmb3IgdGhlIHN0cmVhbSBzdHJlYW0gdGVzdC4gSXQgaXMgKi8KKy8qIGltcGxlbWVudGVkIGFzIG9uZSByb3V0aW5lLiBJIGNvdWxkIGJyZWFrIHRoaW5ncy1vdXQgc29tZXdoYXQsIGJ1dCAqLworLyogZGlkbid0IGZlZWwgaXQgd2FzIG5lY2Vzc2FyeS4gKi8KKwordm9pZAorcmVjdl9zdHJlYW1fc3RyZWFtKCkKK3sKKyAgCisgIHN0cnVjdCBzb2NrYWRkcl91biBteWFkZHJfdW4sIHBlZXJhZGRyX3VuOworICBTT0NLRVQgc19saXN0ZW4sc19kYXRhOworICBpbnQgCWFkZHJsZW47CisgIGludAlsZW47CisgIGludAlyZWNlaXZlX2NhbGxzID0gMDsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworICBpbnQgICBieXRlc19yZWNlaXZlZDsKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworCisjaWZkZWYgRElSVFkKKyAgY2hhcgkqbWVzc2FnZV9wdHI7CisgIGludCAgICptZXNzYWdlX2ludF9wdHI7CisgIGludCAgIGRpcnR5X2NvdW50OworICBpbnQgICBjbGVhbl9jb3VudDsKKyAgaW50ICAgaTsKKyNlbmRpZgorICAKKyAgc3RydWN0CXN0cmVhbV9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QJKnN0cmVhbV9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXN0cmVhbV9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlOworICBzdHJ1Y3QJc3RyZWFtX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqc3RyZWFtX3N0cmVhbV9yZXN1bHRzOworICAKKyAgc3RyZWFtX3N0cmVhbV9yZXF1ZXN0CT0gCisgICAgKHN0cnVjdCBzdHJlYW1fc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlCT0gCisgICAgKHN0cnVjdCBzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHN0cmVhbV9zdHJlYW1fcmVzdWx0cwk9IAorICAgIChzdHJ1Y3Qgc3RyZWFtX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3Zfc3RyZWFtX3N0cmVhbTogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQgKi8KKyAgLyogcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZiAqLworICAvKiBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZSAqLworICAvKiBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3N0cmVhbV9zdHJlYW06IHNldHRpbmcgdGhlIHJlc3BvbnNlIHR5cGUuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5yZXNwb25zZV90eXBlID0gU1RSRUFNX1NUUkVBTV9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc3RyZWFtX3N0cmVhbTogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudCB3aXRoIHRoZSBkZXNpcmVkIG9mZnNldC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc3RyZWFtX3N0cmVhbTogcmVxdWVzdGVkIGFsaWdubWVudCBvZiAlZFxuIiwKKwkgICAgc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIExldCdzIGNsZWFyLW91dCBvdXIgc29ja2FkZHIgZm9yIHRoZSBzYWtlIG9mIGNsZWFubGluZXMuIFRoZW4gd2UgKi8KKyAgLyogY2FuIHB1dCBpbiBPVVIgdmFsdWVzICEtKSBBdCBzb21lIHBvaW50LCB3ZSBtYXkgd2FudCB0byBuYWlsIHRoaXMgKi8KKyAgLyogc29ja2V0IHRvIGEgcGFydGljdWxhciBuZXR3b3JrLWxldmVsIGFkZHJlc3MsIGJ1dCBmb3Igbm93LCAqLworICAvKiBJTkFERFJfQU5ZIHNob3VsZCBiZSBqdXN0IGZpbmUuICovCisgIAorICBiemVybygoY2hhciAqKSZteWFkZHJfdW4sCisJc2l6ZW9mKG15YWRkcl91bikpOworICBteWFkZHJfdW4uc3VuX2ZhbWlseSAgICAgID0gQUZfVU5JWDsKKyAgCisgIC8qIEdyYWIgYSBzb2NrZXQgdG8gbGlzdGVuIG9uLCBhbmQgdGhlbiBsaXN0ZW4gb24gaXQuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3N0cmVhbV9zdHJlYW06IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBjcmVhdGVfdW5peF9zb2NrZXQgZXhwZWN0cyB0byBmaW5kIHNvbWUgdGhpbmdzIGluIHRoZSBnbG9iYWwgKi8KKyAgLyogdmFyaWFibGVzLCBzbyBzZXQgdGhlIGdsb2JhbHMgYmFzZWQgb24gdGhlIHZhbHVlcyBpbiB0aGUgcmVxdWVzdC4gKi8KKyAgLyogb25jZSB0aGUgc29ja2V0IGhhcyBiZWVuIGNyZWF0ZWQsIHdlIHdpbGwgc2V0IHRoZSByZXNwb25zZSB2YWx1ZXMgKi8KKyAgLyogYmFzZWQgb24gdGhlIHVwZGF0ZWQgdmFsdWUgb2YgdGhvc2UgZ2xvYmFscy4gcmFqIDcvOTQgKi8KKyAgbHNzX3NpemVfcmVxID0gc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZV9yZXEgPSBzdHJlYW1fc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisKKyAgc19saXN0ZW4gPSBjcmVhdGVfdW5peF9zb2NrZXQoQUZfVU5JWCwKKwkJCQlTT0NLX1NUUkVBTSk7CisgIAorICBpZiAoc19saXN0ZW4gPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBMZXQncyBnZXQgYW4gYWRkcmVzcyBhc3NpZ25lZCB0byB0aGlzIHNvY2tldCBzbyB3ZSBjYW4gdGVsbCB0aGUgKi8KKyAgLyogaW5pdGlhdG9yIGhvdyB0byByZWFjaCB0aGUgZGF0YSBzb2NrZXQuIFRoZXJlIG1heSBiZSBhIGRlc2lyZSB0byAqLworICAvKiBuYWlsIHRoaXMgc29ja2V0IHRvIGEgc3BlY2lmaWMgSVAgYWRkcmVzcyBpbiBhIG11bHRpLWhvbWVkLCAqLworICAvKiBtdWx0aS1jb25uZWN0aW9uIHNpdHVhdGlvbiwgYnV0IGZvciBub3csIHdlJ2xsIGlnbm9yZSB0aGUgaXNzdWUgKi8KKyAgLyogYW5kIGNvbmNlbnRyYXRlIG9uIHNpbmdsZSBjb25uZWN0aW9uIHRlc3RpbmcuICovCisgIAorICBzdHJjcHkobXlhZGRyX3VuLnN1bl9wYXRoLHRlbXBuYW0ocGF0aF9wcmVmaXgsIm5ldHBlcmYuIikpOworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJzZWxlY3RlZCBhIHBhdGggb2YgJXNcbiIsbXlhZGRyX3VuLnN1bl9wYXRoKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIGlmIChiaW5kKHNfbGlzdGVuLAorCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX3VuLAorCSAgIHNpemVvZihteWFkZHJfdW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGZwcmludGYod2hlcmUsImNvdWxkIG5vdCBiaW5kIHRvIHBhdGhcbiIpOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgY2htb2QobXlhZGRyX3VuLnN1bl9wYXRoLCAwNjY2KTsKKworICAvKiB3aGF0IHNvcnQgb2Ygc2l6ZXMgZGlkIHdlIGVuZC11cCB3aXRoPyAqLworICBpZiAoc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5yZWNlaXZlX3NpemUgPT0gMCkgeworICAgIGlmIChsc3Jfc2l6ZSA+IDApIHsKKyAgICAgIHJlY3Zfc2l6ZSA9IGxzcl9zaXplOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlY3Zfc2l6ZSA9IDQwOTY7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHJlY3Zfc2l6ZSA9IHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplOworICB9CisgIAorICAvKiB3ZSB3YW50IHRvIHNldC11cCBvdXIgcmVjdl9yaW5nIGluIGEgbWFubmVyIGFuYWxhZ291cyB0byB3aGF0IHdlICovCisgIC8qIGRvIG9uIHRoZSBzZW5kaW5nIHNpZGUuIHRoaXMgaXMgbW9yZSBmb3IgdGhlIHNha2Ugb2Ygc3ltbWV0cnkgKi8KKyAgLyogdGhhbiBmb3IgdGhlIG5lZWRzIG9mIHNheSBjb3B5IGF2b2lkYW5jZSwgYnV0IGl0IG1pZ2h0IGFsc28gYmUgKi8KKyAgLyogbW9yZSByZWFsaXN0aWMgLSB0aGlzIHdheSBvbmUgY291bGQgY29uY2VpdmFibHkgZ28gd2l0aCBhICovCisgIC8qIGRvdWJsZS1idWZmZXJpbmcgc2NoZW1lIHdoZW4gdGFraW5nIHRoZSBkYXRhIGFuIHB1dHRpbmcgaXQgaW50byAqLworICAvKiB0aGUgZmlsZXN5c3RlbSBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiByYWogNy85NCAqLworCisgIGlmIChyZWN2X3dpZHRoID09IDApIHsKKyAgICByZWN2X3dpZHRoID0gKGxzcl9zaXplL3JlY3Zfc2l6ZSkgKyAxOworICAgIGlmIChyZWN2X3dpZHRoID09IDEpIHJlY3Zfd2lkdGgrKzsKKyAgfQorCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgcmVjdl9zaXplLAorCQkJCSAgIHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJCQkJICAgc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9zdHJlYW1fc3RyZWFtOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTm93LCBsZXQncyBzZXQtdXAgdGhlIHNvY2tldCB0byBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zICovCisgIGlmIChsaXN0ZW4oc19saXN0ZW4sIDUpID09IFNPQ0tFVF9FUlJPUikgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBub3cgZ2V0IHRoZSBwb3J0IG51bWJlciBhc3NpZ25lZCBieSB0aGUgc3lzdGVtICAqLworICBhZGRybGVuID0gc2l6ZW9mKG15YWRkcl91bik7CisgIGlmIChnZXRzb2NrbmFtZShzX2xpc3RlbiwgCisJCSAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfdW4sCisJCSAgJmFkZHJsZW4pID09IFNPQ0tFVF9FUlJPUil7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIE5vdyBteWFkZHJfdW4gY29udGFpbnMgdGhlIHBhdGggKi8KKyAgLyogcmV0dXJuZWQgdG8gdGhlIHNlbmRlciBhbHNvIGltcGxpY2l0bHkgdGVsbGluZyB0aGUgc2VuZGVyIHRoYXQgdGhlICovCisgIC8qIHNvY2tldCBidWZmZXIgc2l6aW5nIGhhcyBiZWVuIGRvbmUuICovCisgIHN0cmNweShzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlLT51bml4X3BhdGgsbXlhZGRyX3VuLnN1bl9wYXRoKTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgLTEgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHN0cmVhbV9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlID0gMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBpZiAoc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHN0cmVhbV9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICBzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdShzdHJlYW1fc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKyAgLyogYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3BvbnNlIGJhY2sgdG8gdGhlIGluaXRpYXRvciwgcHVsbCBzb21lIG9mICovCisgIC8qIHRoZSBzb2NrZXQgcGFybXMgZnJvbSB0aGUgZ2xvYmFscyAqLworICBzdHJlYW1fc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHN0cmVhbV9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgc3RyZWFtX3N0cmVhbV9yZXNwb25zZS0+cmVjZWl2ZV9zaXplID0gcmVjdl9zaXplOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfdW4pOworICAKKyAgaWYgKChzX2RhdGE9YWNjZXB0KHNfbGlzdGVuLAorCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcmFkZHJfdW4sCisJCSAgICAgJmFkZHJsZW4pKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIC8qIExldCdzIGp1c3QgcHVudC4gVGhlIHJlbW90ZSB3aWxsIGJlIGdpdmVuIHNvbWUgaW5mb3JtYXRpb24gKi8KKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHN0cmVhbV9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworICAKKyAgLyogVGhlIGxvb3Agd2lsbCBleGl0IHdoZW4gdGhlIHNlbmRlciBkb2VzIGEgc2h1dGRvd24sIHdoaWNoIHdpbGwgKi8KKyAgLyogcmV0dXJuIGEgbGVuZ3RoIG9mIHplcm8gICAqLworICAKKyNpZmRlZiBESVJUWQorICAgIC8qIHdlIHdhbnQgdG8gZGlydHkgc29tZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZWdlcnMgaW4gdGhlIGJ1ZmZlciAqLworICAgIC8qIHdlIGFyZSBhYm91dCB0byByZWN2LiB3ZSBtYXkgYWxzbyB3YW50IHRvIGJyaW5nIHNvbWUgbnVtYmVyIG9mICovCisgICAgLyogdGhlbSBjbGVhbmx5IGludG8gdGhlIGNhY2hlLiBUaGUgY2xlYW4gb25lcyB3aWxsIGZvbGxvdyBhbnkgZGlydHkgKi8KKyAgICAvKiBvbmVzIGludG8gdGhlIGNhY2hlLiAqLworCisgIGRpcnR5X2NvdW50ID0gc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5kaXJ0eV9jb3VudDsKKyAgY2xlYW5fY291bnQgPSBzdHJlYW1fc3RyZWFtX3JlcXVlc3QtPmNsZWFuX2NvdW50OworICBtZXNzYWdlX2ludF9wdHIgPSAoaW50ICopcmVjdl9yaW5nLT5idWZmZXJfcHRyOworICBmb3IgKGkgPSAwOyBpIDwgZGlydHlfY291bnQ7IGkrKykgeworICAgICptZXNzYWdlX2ludF9wdHIgPSByYW5kKCk7CisgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IGNsZWFuX2NvdW50OyBpKyspIHsKKyAgICBkaXJ0eV9jb3VudCA9ICptZXNzYWdlX2ludF9wdHI7CisgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgIH0KKyNlbmRpZiAvKiBESVJUWSAqLworICBieXRlc19yZWNlaXZlZCA9IDA7CisKKyAgd2hpbGUgKChsZW4gPSByZWN2KHNfZGF0YSwgcmVjdl9yaW5nLT5idWZmZXJfcHRyLCByZWN2X3NpemUsIDApKSAhPSAwKSB7CisgICAgaWYgKGxlbiA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBieXRlc19yZWNlaXZlZCArPSBsZW47CisgICAgcmVjZWl2ZV9jYWxscysrOworCisgICAgLyogbW9yZSB0byB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIHJlY3ZfcmluZyAqLworICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKworI2lmZGVmIERJUlRZCisgICAgbWVzc2FnZV9pbnRfcHRyID0gKGludCAqKShyZWN2X3JpbmctPmJ1ZmZlcl9wdHIpOworICAgIGZvciAoaSA9IDA7IGkgPCBkaXJ0eV9jb3VudDsgaSsrKSB7CisgICAgICAqbWVzc2FnZV9pbnRfcHRyID0gcmFuZCgpOworICAgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBjbGVhbl9jb3VudDsgaSsrKSB7CisgICAgICBkaXJ0eV9jb3VudCA9ICptZXNzYWdlX2ludF9wdHI7CisgICAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgICB9CisjZW5kaWYgLyogRElSVFkgKi8KKyAgfQorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0byB6ZXJvIGJ5dGVzIHJlY2VpdmVkLiB3ZSB3aWxsIGhhdmUgKi8KKyAgLyogY291bnRlZCBvbmUgdG9vIG1hbnkgbWVzc2FnZXMgcmVjZWl2ZWQsIHNvIGRlY3JlbWVudCB0aGUgKi8KKyAgLyogcmVjZWl2ZV9jYWxscyBjb3VudGVyIGJ5IG9uZS4gcmFqIDcvOTQgKi8KKyAgcmVjZWl2ZV9jYWxscy0tOworICAKKyAgLyogcGVyZm9ybSBhIHNodXRkb3duIHRvIHNpZ25hbCB0aGUgc2VuZGVyIHRoYXQgKi8KKyAgLyogd2UgaGF2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEgc2VudC4gcmFqIDQvOTMgKi8KKworICBpZiAoc2h1dGRvd24oc19kYXRhLDEpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAKKyAgY3B1X3N0b3Aoc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zdHJlYW1fc3RyZWFtOiBnb3QgJWQgYnl0ZXNcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9zdHJlYW1fc3RyZWFtOiBnb3QgJWQgcmVjdnNcbiIsCisJICAgIHJlY2VpdmVfY2FsbHMpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHN0cmVhbV9zdHJlYW1fcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQJPSBieXRlc19yZWNlaXZlZDsKKyAgc3RyZWFtX3N0cmVhbV9yZXN1bHRzLT5lbGFwc2VkX3RpbWUJPSBlbGFwc2VkX3RpbWU7CisgIHN0cmVhbV9zdHJlYW1fcmVzdWx0cy0+cmVjdl9jYWxscwk9IHJlY2VpdmVfY2FsbHM7CisgIAorICBpZiAoc3RyZWFtX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHN0cmVhbV9zdHJlYW1fcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgIH07CisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3Zfc3RyZWFtX3N0cmVhbTogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICB1bmxpbmsobXlhZGRyX3VuLnN1bl9wYXRoKTsKK30KKwwKKworIC8qIHRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBzZW5kaW5nIChuZXRwZXJmKSBzaWRlIG9mIHRoZSBTVFJFQU1fUlIgKi8KKyAvKiB0ZXN0LiAqLworCit2b2lkCitzZW5kX3N0cmVhbV9ycihjaGFyIHJlbW90ZV9ob3N0W10pCit7CisgIAorICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCAgUmVzcC4gICBFbGFwc2VkICBUcmFucy5cblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICAgU2l6ZSAgICBUaW1lICAgICBSYXRlICAgICAgICAgXG5cCitieXRlcyAgQnl0ZXMgIGJ5dGVzICAgIGJ5dGVzICAgc2Vjcy4gICAgcGVyIHNlYyAgIFxuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICAlLTZkICAlLTYuMmYgICAlNy4yZiAgIFxuIjsKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCBSZXNwLiAgRWxhcHNlZCBUcmFucy4gICBDUFUgICAgQ1BVICAgIFMuZGVtICAgUy5kZW1cblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICBTaXplICAgVGltZSAgICBSYXRlICAgICBsb2NhbCAgcmVtb3RlIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgIHNlY3MuICAgcGVyIHNlYyAgJSUgICAgICAlJSAgICAgIHVzL1RyICAgdXMvVHJcblxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMCA9CisgICAgIiU2LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgJS02ZCAlLTYuMmYgICUtNi4yZiAgICUtNi4yZiAlLTYuMmYgJS02LjNmICAlLTYuM2ZcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmtzaW5rX2ZtdCA9ICJcCitBbGlnbm1lbnQgICAgICBPZmZzZXRcblwKK0xvY2FsICBSZW1vdGUgIExvY2FsICBSZW1vdGVcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2XG5cCislNWQgICU1ZCAgICU1ZCAgJTVkXG4iOworICAKKyAgCisgIGludAkJCXRpbWVkX291dCA9IDA7CisgIGZsb2F0CQkJZWxhcHNlZF90aW1lOworICAKKyAgaW50CWxlbjsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CW51bW1lc3NhZ2VzOworICBTT0NLRVQgc2VuZF9zb2NrZXQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGRvdWJsZQlieXRlc194ZmVyZDsKKworICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIAorICBpbnQJcnNwX2J5dGVzX2xlZnQ7CisgIGludAlyc3BfYnl0ZXNfcmVjdmQ7CisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisgIGRvdWJsZQl0aHJ1cHV0OworICAKKyAgc3RydWN0CXNvY2thZGRyX3VuCXNlcnZlcjsKKyAgCisgIHN0cnVjdAlzdHJlYW1fcnJfcmVxdWVzdF9zdHJ1Y3QJKnN0cmVhbV9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJc3RyZWFtX3JyX3Jlc3BvbnNlX3N0cnVjdAkqc3RyZWFtX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJc3RyZWFtX3JyX3Jlc3VsdHNfc3RydWN0CSpzdHJlYW1fcnJfcmVzdWx0OworICAKKyAgc3RyZWFtX3JyX3JlcXVlc3QgPSAKKyAgICAoc3RydWN0IHN0cmVhbV9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgc3RyZWFtX3JyX3Jlc3BvbnNlPQorICAgIChzdHJ1Y3Qgc3RyZWFtX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHN0cmVhbV9ycl9yZXN1bHQJPQorICAgIChzdHJ1Y3Qgc3RyZWFtX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBiemVybygoY2hhciAqKSZzZXJ2ZXIsCisJc2l6ZW9mKHNlcnZlcikpOworICAKKyAgc2VydmVyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJTVFJFQU0gUkVRVUVTVC9SRVNQT05TRSBURVNUXG4iKTsKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpCisgICAgICBmcHJpbnRmKHdoZXJlLGNwdV90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgZWxzZQorICAgICAgZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgfQorICAKKyAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycyAqLworICAKKyAgbnVtbWVzc2FnZXMJPQkwOworICBieXRlc194ZmVyZAk9CTAuMDsKKyAgdGltZXNfdXAgCT0gCTA7CisgIAorICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVycyB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQuICovCisgIC8qIHNpbmNlIHRoaXMgaXMgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIGRlZmF1bHQgdGhlIHNlbmRfd2lkdGggYW5kICovCisgIC8qIHJlY3Zfd2lkdGggdG8gMSBhbmQgbm90IHR3byByYWogNy85NCAqLworCisgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKyAgCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgcmVxX3NpemUsCisJCQkJICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICBsb2NhbF9zZW5kX29mZnNldCk7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICByc3Bfc2l6ZSwKKwkJCQkgICBsb2NhbF9yZWN2X2FsaWduLAorCQkJCSAgIGxvY2FsX3JlY3Zfb2Zmc2V0KTsKKwkJCQkgICAKKyAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfdW5peF9zb2NrZXQoQUZfVU5JWCwgCisJCQkJICAgU09DS19TVFJFQU0pOworICAKKyAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfc3RyZWFtX3JyOiBzdHJlYW0gc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwic2VuZF9zdHJlYW1fcnI6IHNlbmRfc29ja2V0IG9idGFpbmVkLi4uXG4iKTsKKyAgfQorICAKKyAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgLyogdGhlbXNlbHZlcy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGUgY3B1IHJhdGUsIHRoZW4gKi8KKyAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgLyogYWxsIHRoZSAibm9ybWFsIiBjYWxpYnJhdGlvbiBzdHVmZiBhbmQgcmV0dXJuIHRoZSByYXRlIGJhY2suKi8KKyAgCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICB9CisgIAorICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIGRvIGEgbGlzdGVuLiBUaGUgc2VydmVyIGFsdGVycyB0aGUgc29ja2V0ICovCisgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAvKiBub3Qgc3BlY2lmeSBhbnkgb2YgdGhlIHBhcmFtZXRlcnMsIHRoZXkgd2lsbCBiZSBwYXNzZWQgYXMgMCwgd2hpY2ggKi8KKyAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgIC8qIGRlZmF1bHQgdG8gOCwgd2hpY2ggd2lsbCBiZSBubyBhbGlnbm1lbnQgYWx0ZXJhdGlvbnMuICovCisgIAorICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJPQlET19TVFJFQU1fUlI7CisgIHN0cmVhbV9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemU7CisgIHN0cmVhbV9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplCT0JcnNzX3NpemU7CisgIHN0cmVhbV9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudD0JcmVtb3RlX3JlY3ZfYWxpZ247CisgIHN0cmVhbV9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldAk9CXJlbW90ZV9yZWN2X29mZnNldDsKKyAgc3RyZWFtX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50PQlyZW1vdGVfc2VuZF9hbGlnbjsKKyAgc3RyZWFtX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0CT0JcmVtb3RlX3NlbmRfb2Zmc2V0OworICBzdHJlYW1fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplCT0JcmVxX3NpemU7CisgIHN0cmVhbV9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplCT0JcnNwX3NpemU7CisgIHN0cmVhbV9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdQk9CXJlbW90ZV9jcHVfdXNhZ2U7CisgIHN0cmVhbV9ycl9yZXF1ZXN0LT5jcHVfcmF0ZQk9CXJlbW90ZV9jcHVfcmF0ZTsKKyAgaWYgKHRlc3RfdGltZSkgeworICAgIHN0cmVhbV9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgfQorICBlbHNlIHsKKyAgICBzdHJlYW1fcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RyYW5zICogLTE7CisgIH0KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRwZXJmOiBzZW5kX3N0cmVhbV9ycjogcmVxdWVzdGluZyBTVFJFQU0gcnIgdGVzdFxuIik7CisgIH0KKyAgCisgIHNlbmRfcmVxdWVzdCgpOworICAKKyAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAJKi8KKyAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodAkqLworICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodAkqLworICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAvKiBiZWluZyBzZW50IGZvciB0aGUgU1RSRUFNIHRlc3RzLgkJCQkJKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKyAgICByc3Jfc2l6ZQk9CXN0cmVhbV9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKyAgICByc3Nfc2l6ZQk9CXN0cmVhbV9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICByZW1vdGVfY3B1X3VzYWdlPQlzdHJlYW1fcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgIHJlbW90ZV9jcHVfcmF0ZSA9IAlzdHJlYW1fcnJfcmVzcG9uc2UtPmNwdV9yYXRlOworICAgIC8qIG1ha2Ugc3VyZSB0aGF0IHBvcnQgbnVtYmVycyBhcmUgaW4gbmV0d29yayBvcmRlciAqLworICAgIHN0cmNweShzZXJ2ZXIuc3VuX3BhdGgsc3RyZWFtX3JyX3Jlc3BvbnNlLT51bml4X3BhdGgpOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCJuZXRwZXJmOiByZW1vdGUgZXJyb3IiKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKkNvbm5lY3QgdXAgdG8gdGhlIHJlbW90ZSBwb3J0IG9uIHRoZSBkYXRhIHNvY2tldCAgKi8KKyAgaWYgKGNvbm5lY3Qoc2VuZF9zb2NrZXQsIAorCSAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VydmVyLAorCSAgICAgIHNpemVvZihzZXJ2ZXIpKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgcGVycm9yKCJuZXRwZXJmOiBkYXRhIHNvY2tldCBjb25uZWN0IGZhaWxlZCIpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIERhdGEgU29ja2V0IHNldC11cCBpcyBmaW5pc2hlZC4gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcywgZWl0aGVyIHRoZSAqLworICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAvKiBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBleHRyYSAqLworICAvKiBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCB3ZSdsbCBzZWUgaXQgKi8KKyAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgCisgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCB0aGV5ICovCisgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgCisgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgdGltZXNfdXAgPSAxOworICB9CisgIAorICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgCisgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworICAKKyAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gKi8KKyAgLyogV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3Qgd2lsbCAqLworICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiBJIHRoaW5rIEkgKi8KKyAgLyoganVzdCBhcmJpdHJhcmlseSBkZWNyZW1lbnQgdHJhbnNfcmVtYWluaW5nIGZvciB0aGUgdGltZWQgdGVzdCwgYnV0ICovCisgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgIC8qIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSB0aGUgc2FtZSBidWZmZXIuICovCisgIAorICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgLyogc2VuZCB0aGUgcmVxdWVzdC4gd2UgYXNzdW1lIHRoYXQgaWYgd2UgdXNlIGEgYmxvY2tpbmcgc29ja2V0LCAqLworICAgIC8qIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudCBhdCBvbmUgc2hvdC4gKi8KKyAgICBpZigobGVuPXNlbmQoc2VuZF9zb2NrZXQsCisJCSBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCSByZXFfc2l6ZSwKKwkJIDApKSAhPSByZXFfc2l6ZSkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJLyogd2UgaGl0IHRoZSBlbmQgb2YgYSAqLworCS8qIHRpbWVkIHRlc3QuICovCisJdGltZWRfb3V0ID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHBlcnJvcigic2VuZF9zdHJlYW1fcnI6IGRhdGEgc2VuZCBlcnJvciIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgIAorICAgIC8qIHJlY2VpdmUgdGhlIHJlc3BvbnNlICovCisgICAgcnNwX2J5dGVzX2xlZnQgPSByc3Bfc2l6ZTsKKyAgICB0ZW1wX21lc3NhZ2VfcHRyICA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICB3aGlsZShyc3BfYnl0ZXNfbGVmdCA+IDApIHsKKyAgICAgIGlmKChyc3BfYnl0ZXNfcmVjdmQ9cmVjdihzZW5kX3NvY2tldCwKKwkJCSAgICAgICB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJICAgICAgIHJzcF9ieXRlc19sZWZ0LAorCQkJICAgICAgIDApKSA9PSBTT0NLRVRfRVJST1IpIHsKKwlpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkgIC8qIFdlIGhpdCB0aGUgZW5kIG9mIGEgdGltZWQgdGVzdC4gKi8KKwkgIHRpbWVkX291dCA9IDE7CisJICBicmVhazsKKwl9CisJcGVycm9yKCJzZW5kX3N0cmVhbV9ycjogZGF0YSByZWN2IGVycm9yIik7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIHJzcF9ieXRlc19sZWZ0IC09IHJzcF9ieXRlc19yZWN2ZDsKKyAgICAgIHRlbXBfbWVzc2FnZV9wdHIgICs9IHJzcF9ieXRlc19yZWN2ZDsKKyAgICB9CQorICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKyAgICAKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBtYXkgaGF2ZSBiZWVuIGluIGEgbmVzdGVkIHdoaWxlIGxvb3AgLSB3ZSBuZWVkICovCisgICAgICAvKiBhbm90aGVyIGNhbGwgdG8gYnJlYWsuICovCisgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZyA+IDMpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIlRyYW5zYWN0aW9uICVkIGNvbXBsZXRlZFxuIiwKKwkgICAgICBudW1tZXNzYWdlcyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgfQorICAKKyAgLyogQXQgdGhpcyBwb2ludCB3ZSB1c2VkIHRvIGNhbGwgc2h1dGRvd24gb24gdGhlIGRhdGEgc29ja2V0IHRvIGJlICovCisgIC8qIHN1cmUgYWxsIHRoZSBkYXRhIHdhcyBkZWxpdmVyZWQsIGJ1dCB0aGlzIHdhcyBub3QgZ2VybWFuZSBpbiBhICovCisgIC8qIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgYW5kIGl0IHdhcyBjYXVzaW5nIHRoZSB0ZXN0cyB0byAiaGFuZyIgd2hlbiAqLworICAvKiB0aGV5IHdlcmUgYmVpbmcgY29udHJvbGxlZCBieSB0aW1lLiBTbywgSSBoYXZlIHJlcGxhY2VkIHRoaXMgKi8KKyAgLyogc2h1dGRvd24gY2FsbCB3aXRoIGEgY2FsbCB0byBjbG9zZSB0aGF0IGNhbiBiZSBmb3VuZCBsYXRlciBpbiB0aGUgKi8KKyAgLyogcHJvY2VkdXJlLiAqLworICAKKyAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAvKiB3aWxsIGFsc28gc3RvcmUtYXdheSB0aGUgbmVjZXNzYXJpZXMgZm9yIGNwdSB1dGlsaXphdGlvbiAqLworICAKKyAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nIG1lYXN1cmVkPyAqLworICAvKiBob3cgbG9uZyBkaWQgd2UgcmVhbGx5IHJ1bj8gKi8KKyAgCisgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZSAqLworICAvKiBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZiBpdCAqLworICAvKiB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQgd2lsbCByZXR1cm4gb2J2aW91cyB2YWx1ZXMuICovCisgIAorICByZWN2X3Jlc3BvbnNlKCk7CisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHJlbW90ZSBlcnJvciIpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhydXB1dCB3YXMgZm9yIHRoZSB0ZXN0LiBJbiB0aGUgZnV0dXJlLCAqLworICAvKiB3ZSBtYXkgd2FudCB0byBpbmNsdWRlIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRocnVwdXQgbWVhc3VyZWQgYnkgKi8KKyAgLyogdGhlIHJlbW90ZSwgYnV0IGl0IHNob3VsZCBiZSB0aGUgY2FzZSB0aGF0IGZvciBhIFNUUkVBTSBzdHJlYW0gdGVzdCwgKi8KKyAgLyogdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiBXZSBjYWxjdWxhdGUgKi8KKyAgLyogYnl0ZXNfc2VudCByZWdhcmRsZXNzIG9mIHRoZSB3YXkgdGhlIHRlc3QgbGVuZ3RoIHdhcyBjb250cm9sbGVkLiAqLworICAvKiBJZiBpdCB3YXMgdGltZSwgd2UgbmVlZGVkIHRvLCBhbmQgaWYgaXQgd2FzIGJ5IGJ5dGVzLCB0aGUgdXNlciBtYXkgKi8KKyAgLyogaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgKi8KKyAgLyogc2VuZF9zaXplLCBzbyB3ZSByZWFsbHkgZGlkbid0IHNlbmQgd2hhdCBoZSBhc2tlZCBmb3IgOy0pIFdlIHVzZSAqLworICAvKiBLYnl0ZXMvcyBhcyB0aGUgdW5pdHMgb2YgdGhydXB1dCBmb3IgYSBTVFJFQU0gc3RyZWFtIHRlc3QsIHdoZXJlIEsgPSAqLworICAvKiAxMDI0LiBBIGZ1dHVyZSBlbmhhbmNlbWVudCAqbWlnaHQqIGJlIHRvIGNob29zZSBmcm9tIGEgY291cGxlIG9mICovCisgIC8qIHVuaXQgc2VsZWN0aW9ucy4gKi8gCisgIAorICBieXRlc194ZmVyZAk9IChyZXFfc2l6ZSAqIG51bW1lc3NhZ2VzKSArIChyc3Bfc2l6ZSAqIG51bW1lc3NhZ2VzKTsKKyAgdGhydXB1dAk9IGNhbGNfdGhydXB1dChieXRlc194ZmVyZCk7CisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChsb2NhbF9jcHVfcmF0ZSA9PSAwLjApIHsKKwlmcHJpbnRmKHdoZXJlLCJXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgIFdBUk5JTkchXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJMb2NhbCBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uID0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gLTEuMDsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChyZW1vdGVfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiREFOR0VSICBEQU5HRVIgIERBTkdFUiAgICBEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiFcbiIpOworCWZwcmludGYod2hlcmUsIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHN0cmVhbV9ycl9yZXN1bHQtPmNwdV91dGlsOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgIHN0cmVhbV9ycl9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgICAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgICAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIGxzcl9zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBndWVzcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSwKKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwKKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMSwJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwKKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlc3BvbnNlcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICAKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8ga25vdyBpdCBhbGwsIHNvIHdlIHdpbGwgZ2l2ZSBpdCB0byBoaW0uICovCisgICAgLyogVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluY2x1ZGUgYXMgbXVjaCBhcyB3ZSBjYW4gZmluZCBhYm91dCAqLworICAgIC8qIFNUUkVBTSBzdGF0aXN0aWNzLCB0aGUgYWxpZ25tZW50cyBvZiB0aGUgc2VuZHMgYW5kIHJlY2VpdmVzICovCisgICAgLyogYW5kIGFsbCB0aGF0IHNvcnQgb2Ygcm90Li4uICovCisgICAgCisgICAgZnByaW50Zih3aGVyZSwKKwkgICAga3NpbmtfZm10KTsKKyAgfQorICAvKiBUaGUgdGVzdCBpcyBvdmVyLiBLaWxsIHRoZSBkYXRhIHNvY2tldCAqLworICAKKyAgaWYgKGNsb3NlKHNlbmRfc29ja2V0KSA9PSAtMSkgeworICAgIHBlcnJvcigic2VuZF9zdHJlYW1fcnI6IGNhbm5vdCBzaHV0ZG93biBzdHJlYW0gc3RyZWFtIHNvY2tldCIpOworICB9CisgIAorfQorDAordm9pZAorc2VuZF9kZ19zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKQoreworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKgkJCQkJCQkJCSovCisgIC8qICAgICAgICAgICAgICAgCURHIFVuaWRpcmVjdGlvbmFsIFNlbmQgVGVzdCAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoJCQkJCQkJCQkqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBjaGFyICp0cHV0X3RpdGxlID0KKyAgICAiU29ja2V0ICBNZXNzYWdlICBFbGFwc2VkICAgICAgTWVzc2FnZXMgICAgICAgICAgICAgICAgXG5cCitTaXplICAgIFNpemUgICAgIFRpbWUgICAgICAgICBPa2F5IEVycm9ycyAgIFRocm91Z2hwdXRcblwKK2J5dGVzICAgYnl0ZXMgICAgc2VjcyAgICAgICAgICAgICMgICAgICAjICAgJXMvc2VjXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xID0KKyAgICAiJTVkICAgJTVkICAgICUtNy4yZiAgICU3ZCAlNmQgICAgJTcuMmZcblwKKyU1ZCAgICAgICAgICAgICUtNy4yZiAgICU3ZCAgICAgICAgICAgJTcuMmZcblxuIjsKKyAgCisgIAorICBjaGFyICpjcHVfdGl0bGUgPQorICAgICJTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICBNZXNzYWdlcyAgICAgICAgICAgICAgICAgICBDUFUgICAgIFNlcnZpY2VcblwKK1NpemUgICAgU2l6ZSAgICAgVGltZSAgICAgICAgIE9rYXkgRXJyb3JzICAgVGhyb3VnaHB1dCAgIFV0aWwgICAgRGVtYW5kXG5cCitieXRlcyAgIGJ5dGVzICAgIHNlY3MgICAgICAgICAgICAjICAgICAgIyAgICVzL3NlYyAgICUlICAgICAgIHVzL0tCXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4yZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMSA9CisgICAgIiU1ZCAgICU1ZCAgICAlLTcuMmYgICAlN2QgJTZkICAgICU3LjFmICAgICAgJS02LjJmICAlLTYuM2ZcblwKKyU1ZCAgICAgICAgICAgICUtNy4yZiAgICU3ZCAgICAgICAgICAgJTcuMWYgICAgICAlLTYuMmYgICUtNi4zZlxuXG4iOworICAKKyAgaW50CW1lc3NhZ2VzX3JlY3ZkOworICBmbG9hdAllbGFwc2VkX3RpbWUsIAorICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sIAorICByZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICAKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQsIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCWxvY2FsX3RocnVwdXQsIHJlbW90ZV90aHJ1cHV0OworICBkb3VibGUJYnl0ZXNfc2VudDsKKyAgZG91YmxlCWJ5dGVzX3JlY3ZkOworICAKKyAgCisgIGludAlsZW47CisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBpbnQJZmFpbGVkX3NlbmRzOworICBpbnQJZmFpbGVkX2Nvd3M7CisgIGludCAJbWVzc2FnZXNfc2VudDsKKyAgU09DS0VUIGRhdGFfc29ja2V0OworICAKKyAgCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgaW50CWludGVydmFsX2NvdW50OworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisjaWZkZWYgRElSVFkKKyAgaW50CSptZXNzYWdlX2ludF9wdHI7CisgIGludAlpOworI2VuZGlmIC8qIERJUlRZICovCisgIAorICBzdHJ1Y3QJc29ja2FkZHJfdW4Jc2VydmVyOworICAKKyAgc3RydWN0CWRnX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdAkqZGdfc3RyZWFtX3JlcXVlc3Q7CisgIHN0cnVjdAlkZ19zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpkZ19zdHJlYW1fcmVzcG9uc2U7CisgIHN0cnVjdAlkZ19zdHJlYW1fcmVzdWx0c19zdHJ1Y3QJKmRnX3N0cmVhbV9yZXN1bHRzOworICAKKyAgZGdfc3RyZWFtX3JlcXVlc3QJPSAoc3RydWN0IGRnX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgZGdfc3RyZWFtX3Jlc3BvbnNlCT0gKHN0cnVjdCBkZ19zdHJlYW1fcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgZGdfc3RyZWFtX3Jlc3VsdHMJPSAoc3RydWN0IGRnX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgIC8qIGNvbnRyb2wgc29ja2V0LCBhbmQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBkaWZmZXJlbnQgKi8KKyAgLyogcHJvdG9jb2xzIGFuZCBzdWNoLCB3ZSBhcmUgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaG9zdCBhbmQgKi8KKyAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworICAKKyAgYnplcm8oKGNoYXIgKikmc2VydmVyLAorCXNpemVvZihzZXJ2ZXIpKTsKKyAgCisgIHNlcnZlci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBwcmludGYoIkRHIFVOSURJUkVDVElPTkFMIFNFTkQgVEVTVFxuIik7CisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKQorICAgICAgcHJpbnRmKGNwdV90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgZWxzZQorICAgICAgcHJpbnRmKHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICB9CQorICAKKyAgZmFpbGVkX3NlbmRzCT0gMDsKKyAgZmFpbGVkX2Nvd3MJPSAwOworICBtZXNzYWdlc19zZW50CT0gMDsKKyAgdGltZXNfdXAJPSAwOworICAKKyAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0CQkJKi8KKyAgZGF0YV9zb2NrZXQgPSBjcmVhdGVfdW5peF9zb2NrZXQoQUZfVU5JWCwKKwkJCQkgICBTT0NLX0RHUkFNKTsKKyAgCisgIGlmIChkYXRhX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgcGVycm9yKCJkZ19zZW5kOiBkYXRhIHNvY2tldCIpOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIG5vdywgd2Ugd2FudCB0byBzZWUgaWYgd2UgbmVlZCB0byBzZXQgdGhlIHNlbmRfc2l6ZSAqLworICBpZiAoc2VuZF9zaXplID09IDApIHsKKyAgICBpZiAobHNzX3NpemUgPiAwKSB7CisgICAgICBzZW5kX3NpemUgPSAobHNzX3NpemUgPCBVTklYX0xFTkdUSF9NQVggPyBsc3Nfc2l6ZSA6IFVOSVhfTEVOR1RIX01BWCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgc2VuZF9zaXplID0gNDA5NjsKKyAgICB9CisgIH0KKyAgCisgIAorICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldCwgKi8KKyAgLyogbW9zdCBvZiB0aGUgbnVtYmVycyBoZXJlIGFyZSBqdXN0IGEgaGFjayB0byBwaWNrIHNvbWV0aGluZyBuaWNlICovCisgIC8qIGFuZCBiaWcgaW4gYW4gYXR0ZW1wdCB0byBuZXZlciB0cnkgdG8gc2VuZCBhIGJ1ZmZlciBhIHNlY29uZCB0aW1lICovCisgIC8qIGJlZm9yZSBpdCBsZWF2ZXMgdGhlIG5vZGUuLi51bmxlc3MgdGhlIHVzZXIgc2V0IHRoZSB3aWR0aCAqLworICAvKiBleHBsaWNpdGx5LiAqLworICBpZiAoc2VuZF93aWR0aCA9PSAwKSBzZW5kX3dpZHRoID0gMzI7CisKKyAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICBzZW5kX3NpemUsCisJCQkJICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICBsb2NhbF9zZW5kX29mZnNldCk7CisKKyAgLyogQXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0byBkbyB0aGluZ3MgbGlrZSBkaXNhYmxlIERHIGNoZWNrc3VtbWluZyAqLworICAvKiBhbmQgbWVhc3VyZSB0aGUgY3B1IHJhdGUgYW5kIGFsbCB0aGF0IHNvIHdlIGFyZSByZWFkeSB0byBnbyAqLworICAvKiBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGVzdCByZXNwb25zZSBtZXNzYWdlIGlzIGRlbGl2ZXJlZC4gKi8KKyAgCisgIC8qIGlmIHRoZSB1c2VyIHN1cHBsaWVkIGEgY3B1IHJhdGUsIHRoaXMgY2FsbCB3aWxsIGNvbXBsZXRlIHJhdGhlciAqLworICAvKiBxdWlja2x5LCBvdGhlcndpc2UsIHRoZSBjcHUgcmF0ZSB3aWxsIGJlIHJldHVyZWQgdG8gdXMgZm9yICovCisgIC8qIHBvc3NpYmxlIGRpc3BsYXkuIFRoZSBMaWJyYXJ5IHdpbGwga2VlcCBpdCdzIG93biBjb3B5IG9mIHRoaXMgZGF0YSAqLworICAvKiBmb3IgdXNlIGVsc2V3aGVyZS4gV2Ugd2lsbCBvbmx5IGRpc3BsYXkgaXQuIChEb2VzIHRoYXQgbWFrZSBpdCAqLworICAvKiAib3BhcXVlIiB0byB1cz8pICovCisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlKQorICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgIAorICAvKiBUZWxsIHRoZSByZW1vdGUgZW5kIHRvIHNldCB1cCB0aGUgZGF0YSBjb25uZWN0aW9uLiBUaGUgc2VydmVyICovCisgIC8qIHNlbmRzIGJhY2sgdGhlIHBvcnQgbnVtYmVyIGFuZCBhbHRlcnMgdGhlIHNvY2tldCBwYXJhbWV0ZXJzIHRoZXJlLiAqLworICAvKiBPZiBjb3Vyc2UgdGhpcyBpcyBhIGRhdGFncmFtIHNlcnZpY2Ugc28gbm8gY29ubmVjdGlvbiBpcyBhY3R1YWxseSAqLworICAvKiBzZXQgdXAsIHRoZSBzZXJ2ZXIganVzdCBzZXRzIHVwIHRoZSBzb2NrZXQgYW5kIGJpbmRzIGl0LiAqLworICAKKyAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlID0gRE9fREdfU1RSRUFNOworICBkZ19zdHJlYW1fcmVxdWVzdC0+cmVjdl9idWZfc2l6ZQk9IHJzcl9zaXplOworICBkZ19zdHJlYW1fcmVxdWVzdC0+bWVzc2FnZV9zaXplCT0gc2VuZF9zaXplOworICBkZ19zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQJPSByZW1vdGVfcmVjdl9hbGlnbjsKKyAgZGdfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0gcmVtb3RlX3JlY3Zfb2Zmc2V0OworICBkZ19zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUJPSByZW1vdGVfY3B1X3VzYWdlOworICBkZ19zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUJCT0gcmVtb3RlX2NwdV9yYXRlOworICBkZ19zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGgJPSB0ZXN0X3RpbWU7CisgIAorICBzZW5kX3JlcXVlc3QoKTsKKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX2RnX3N0cmVhbTogcmVtb3RlIGRhdGEgY29ubmVjdGlvbiBkb25lLlxuIik7CisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoInNlbmRfZGdfc3RyZWFtOiBlcnJvciBvbiByZW1vdGUiKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBQbGFjZSB0aGUgcG9ydCBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIHJlbW90ZSBpbnRvIHRoZSBzb2NrYWRkciAqLworICAvKiBzdHJ1Y3R1cmUgc28gb3VyIHNlbmRzIGNhbiBiZSBzZW50IHRvIHRoZSBjb3JyZWN0IHBsYWNlLiBBbHNvIGdldCAqLworICAvKiBzb21lIG9mIHRoZSByZXR1cm5lZCBzb2NrZXQgYnVmZmVyIGluZm9ybWF0aW9uIGZvciB1c2VyIGRpc3BsYXkuICovCisgIAorICAvKiBtYWtlIHN1cmUgdGhhdCBwb3J0IG51bWJlcnMgYXJlIGluIHRoZSBwcm9wZXIgb3JkZXIgKi8KKyAgc3RyY3B5KHNlcnZlci5zdW5fcGF0aCxkZ19zdHJlYW1fcmVzcG9uc2UtPnVuaXhfcGF0aCk7CisgIHJzcl9zaXplCT0gZGdfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICByc3Nfc2l6ZQk9IGRnX3N0cmVhbV9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgcmVtb3RlX2NwdV9yYXRlCT0gZGdfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKyAgCisgIC8qIFdlICJjb25uZWN0IiB1cCB0byB0aGUgcmVtb3RlIHBvc3QgdG8gYWxsb3cgaXMgdG8gdXNlIHRoZSBzZW5kICovCisgIC8qIGNhbGwgaW5zdGVhZCBvZiB0aGUgc2VuZHRvIGNhbGwuIFByZXN1bWVhYmx5LCB0aGlzIGlzIGEgbGl0dGxlICovCisgIC8qIHNpbXBsZXIsIGFuZCBhIGxpdHRsZSBtb3JlIGVmZmljaWVudC4gSSB0aGluayB0aGF0IGl0IGFsc28gbWVhbnMgKi8KKyAgLyogdGhhdCB3ZSBjYW4gYmUgaW5mb3JtZWQgb2YgY2VydGFpbiB0aGluZ3MsIGJ1dCBhbSBub3Qgc3VyZSB5ZXQuLi4gKi8KKyAgCisgIGlmIChjb25uZWN0KGRhdGFfc29ja2V0LAorCSAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VydmVyLAorCSAgICAgIHNpemVvZihzZXJ2ZXIpKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgcGVycm9yKCJzZW5kX2RnX3N0cmVhbTogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBzZXQgdXAgdGhlIHRpbWVyIHRvIGNhbGwgdXMgYWZ0ZXIgdGVzdF90aW1lCSovCisgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgIAorICAvKiBHZXQgdGhlIHN0YXJ0IGNvdW50IGZvciB0aGUgaWRsZSBjb3VudGVyIGFuZCB0aGUgc3RhcnQgdGltZSAqLworICAKKyAgY3B1X3N0YXJ0KGxvY2FsX2NwdV91c2FnZSk7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIGludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisjZW5kaWYKKyAgCisgIC8qIFNlbmQgZGF0YWdyYW1zIGxpa2UgdGhlcmUgd2FzIG5vIHRvbW9ycm93LiBhdCBzb21lcG9pbnQgaXQgbWlnaHQgKi8KKyAgLyogYmUgbmljZSB0byBzZXQgdGhpcyB1cCBzbyB0aGF0IGEgcXVhbnRpdHkgb2YgYnl0ZXMgY291bGQgYmUgc2VudCwgKi8KKyAgLyogYnV0IHdlIHN0aWxsIG5lZWQgc29tZSBzb3J0IG9mIGVuZCBvZiB0ZXN0IHRyaWdnZXIgb24gdGhlIHJlY2VpdmUgKi8KKyAgLyogc2lkZS4gdGhhdCBjb3VsZCBiZSBhIHNlbGVjdCB3aXRoIGEgb25lIHNlY29uZCB0aW1lb3V0LCBidXQgdGhlbiAqLworICAvKiBpZiB0aGVyZSBpcyBhIHRlc3Qgd2hlcmUgbm9uZSBvZiB0aGUgZGF0YSBhcnJpdmVzIGZvciBhd2lsZSBhbmQgKi8KKyAgLyogdGhlbiBzdGFydHMgYWdhaW4sIHdlIHdvdWxkIGVuZCB0aGUgdGVzdCB0b28gc29vbi4gc29tZXRoaW5nIHRvICovCisgIC8qIHRoaW5rIGFib3V0Li4uICovCisgIHdoaWxlICghdGltZXNfdXApIHsKKworI2lmZGVmIERJUlRZCisgICAgLyogd2Ugd2FudCB0byBkaXJ0eSBzb21lIG51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlZ2VycyBpbiB0aGUgYnVmZmVyICovCisgICAgLyogd2UgYXJlIGFib3V0IHRvIHNlbmQuIHdlIG1heSBhbHNvIHdhbnQgdG8gYnJpbmcgc29tZSBudW1iZXIgb2YgKi8KKyAgICAvKiB0aGVtIGNsZWFubHkgaW50byB0aGUgY2FjaGUuIFRoZSBjbGVhbiBvbmVzIHdpbGwgZm9sbG93IGFueSBkaXJ0eSAqLworICAgIC8qIG9uZXMgaW50byB0aGUgY2FjaGUuICovCisgICAgbWVzc2FnZV9pbnRfcHRyID0gKGludCAqKShzZW5kX3JpbmctPmJ1ZmZlcl9wdHIpOworICAgIGZvciAoaSA9IDA7IGkgPCBsb2NfZGlydHlfY291bnQ7IGkrKykgeworICAgICAgKm1lc3NhZ2VfaW50X3B0ciA9IDQ7CisgICAgICBtZXNzYWdlX2ludF9wdHIrKzsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IGxvY19jbGVhbl9jb3VudDsgaSsrKSB7CisgICAgICBsb2NfZGlydHlfY291bnQgPSAqbWVzc2FnZV9pbnRfcHRyOworICAgICAgbWVzc2FnZV9pbnRfcHRyKys7CisgICAgfQorI2VuZGlmIC8qIERJUlRZICovCisKKyAgICBpZiAoKGxlbj1zZW5kKGRhdGFfc29ja2V0LAorCQkgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICBzZW5kX3NpemUsCisJCSAgMCkpICAhPSBzZW5kX3NpemUpIHsKKyAgICAgIGlmICgobGVuID49IDApIHx8IChlcnJubyA9PSBFSU5UUikpCisJYnJlYWs7CisgICAgICBpZiAoZXJybm8gPT0gRU5PQlVGUykgeworCWZhaWxlZF9zZW5kcysrOworCWNvbnRpbnVlOworICAgICAgfQorICAgICAgcGVycm9yKCJkZ19zZW5kOiBkYXRhIHNlbmQgZXJyb3IiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIG1lc3NhZ2VzX3NlbnQrKzsgICAgICAgICAgCisgICAgCisgICAgLyogbm93IHdlIHdhbnQgdG8gbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgbmV4dCBwb3NpdGlvbiBpbiB0aGUgKi8KKyAgICAvKiBkYXRhIGJ1ZmZlci4uLiAqLworCisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgIAorICAgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgaW50ZXJ2YWwgY291bnQgaXMgdGhlIGNvdW50LWRvd24gY291dGVyICovCisgICAgLyogdG8gZGVjaWRlIHRvIHNsZWVwIGZvciBhIGxpdHRsZSBiaXQgKi8KKyAgICBpZiAoKGludGVydmFsX2J1cnN0KSAmJiAoLS1pbnRlcnZhbF9jb3VudCA9PSAwKSkgeworICAgICAgLyogY2FsbCB0aGUgc2xlZXAgcm91dGluZSBmb3Igc29tZSBtaWxsaXNlY29uZHMsIGlmIG91ciAqLworICAgICAgLyogdGltZXIgcG9wcGVkIHdoaWxlIHdlIHdlcmUgaW4gdGhlcmUsIHdlIHdhbnQgdG8gKi8KKyAgICAgIC8qIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4gKi8KKyAgICAgIGlmIChtc2VjX3NsZWVwKGludGVydmFsX3dhdGUpKSB7CisJYnJlYWs7CisgICAgICB9CisgICAgICBpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OworICAgIH0KKyAgICAKKyNlbmRpZgorICAgIAorICB9CisgIAorICAvKiBUaGlzIGlzIGEgdGltZWQgdGVzdCwgc28gdGhlIHJlbW90ZSB3aWxsIGJlIHJldHVybmluZyB0byB1cyBhZnRlciAqLworICAvKiBhIHRpbWUuIFdlIHNob3VsZCBub3QgbmVlZCB0byBzZW5kIGFueSAic3RyYW5nZSIgbWVzc2FnZXMgdG8gdGVsbCAqLworICAvKiB0aGUgcmVtb3RlIHRoYXQgdGhlIHRlc3QgaXMgY29tcGxldGVkLCB1bmxlc3Mgd2UgZGVjaWRlIHRvIGFkZCBhICovCisgIC8qIG51bWJlciBvZiBtZXNzYWdlcyB0byB0aGUgdGVzdC4gKi8KKyAgCisgIC8qIHRoZSB0ZXN0IGlzIG92ZXIsIHNvIGdldCBzdGF0cyBhbmQgc3R1ZmYgKi8KKyAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLAkKKwkgICAmZWxhcHNlZF90aW1lKTsKKyAgCisgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kCSovCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgIGlmIChkZWJ1ZykKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfZGdfc3RyZWFtOiByZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoInNlbmRfZGdfc3RyZWFtOiBlcnJvciBvbiByZW1vdGUiKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBieXRlc19zZW50CT0gc2VuZF9zaXplICogbWVzc2FnZXNfc2VudDsKKyAgbG9jYWxfdGhydXB1dAk9IGNhbGNfdGhydXB1dChieXRlc19zZW50KTsKKyAgCisgIG1lc3NhZ2VzX3JlY3ZkCT0gZGdfc3RyZWFtX3Jlc3VsdHMtPm1lc3NhZ2VzX3JlY3ZkOworICBieXRlc19yZWN2ZAk9IHNlbmRfc2l6ZSAqIG1lc3NhZ2VzX3JlY3ZkOworICAKKyAgLyogd2UgYXN1bWUgdGhhdCB0aGUgcmVtb3RlIHJhbiBmb3IgYXMgbG9uZyBhcyB3ZSBkaWQgKi8KKyAgCisgIHJlbW90ZV90aHJ1cHV0CT0gY2FsY190aHJ1cHV0KGJ5dGVzX3JlY3ZkKTsKKyAgCisgIC8qIHByaW50IHRoZSByZXN1bHRzIGZvciB0aGlzIHNvY2tldCBhbmQgbWVzc2FnZSBzaXplICovCisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgV2UgcGFzcyB6ZXJvcyBmb3IgdGhlIGxvY2FsICovCisgICAgLyogY3B1IHV0aWxpemF0aW9uIGFuZCBlbGFwc2VkIHRpbWUgdG8gdGVsbCB0aGUgcm91dGluZSB0byB1c2UgKi8KKyAgICAvKiB0aGUgbGlicmFyaWVzIG93biB2YWx1ZXMgZm9yIHRob3NlLiAqLworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChsb2NhbF9jcHVfcmF0ZSA9PSAwLjApIHsKKwlmcHJpbnRmKHdoZXJlLCJXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgIFdBUk5JTkchXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJMb2NhbCBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSBjYWxjX2NwdV91dGlsKDAuMCk7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbgk9IC0xLjA7CisgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IC0xLjA7CisgICAgfQorICAgIAorICAgIC8qIFRoZSBsb2NhbCBjYWxjdWxhdGlvbnMgY291bGQgdXNlIHZhcmlhYmxlcyBiZWluZyBrZXB0IGJ5ICovCisgICAgLyogdGhlIGxvY2FsIG5ldGxpYiByb3V0aW5lcy4gVGhlIHJlbW90ZSBjYWxjdWF0aW9ucyBuZWVkIHRvICovCisgICAgLyogaGF2ZSBhIGZldyB0aGluZ3MgcGFzc2VkIHRvIHRoZW0uICovCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChyZW1vdGVfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiREFOR0VSICAgREFOR0VSICBEQU5HRVIgICBEQU5HRVIgIERBTkdFUiAgIERBTkdFUiAgIERBTkdFUiFcbiIpOworCWZwcmludGYod2hlcmUsIlJFTU9URSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgCisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uCT0gZGdfc3RyZWFtX3Jlc3VsdHMtPmNwdV91dGlsOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19yZWN2ZCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgICBkZ19zdHJlYW1fcmVzdWx0cy0+bnVtX2NwdXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24JPSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kCT0gLTEuMDsKKyAgICB9CisgICAgCisgICAgLyogV2UgYXJlIG5vdyByZWFkeSB0byBwcmludCBhbGwgdGhlIGluZm9ybWF0aW9uLiBJZiB0aGUgdXNlciAqLworICAgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgICAgLyogdXNlciBoYXMgcmVxdWVzdGVkIHZlcmJvc2l0eSBsZXZlbCAxLCBoZSB3aWxsIGdldCB0aGUgYmFzaWMgKi8KKyAgICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgICAvKiBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGZyb20gb3V0c2lkZSBvZiB0aGlzIGJsb2NrIGFzIGl0IGl0ICovCisgICAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIG1lc3NhZ2VzX3NlbnQsCisJICAgICAgZmFpbGVkX3NlbmRzLAorCSAgICAgIGxvY2FsX3RocnVwdXQsIAkJLyogd2hhdCB3YXMgdGhlIHhmZXIgcmF0ZSAqLworCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcnNyX3NpemUsCisJICAgICAgZWxhcHNlZF90aW1lLAorCSAgICAgIG1lc3NhZ2VzX3JlY3ZkLAorCSAgICAgIHJlbW90ZV90aHJ1cHV0LAorCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIGxvY2FsX3RocnVwdXQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwgCQkvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICBtZXNzYWdlc19zZW50LAorCSAgICAgIGZhaWxlZF9zZW5kcywKKwkgICAgICBsb2NhbF90aHJ1cHV0LAorCSAgICAgIHJzcl9zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCisJICAgICAgbWVzc2FnZXNfcmVjdmQsCisJICAgICAgcmVtb3RlX3RocnVwdXQKKwkgICAgICApOworICAgICAgYnJlYWs7CisgICAgfQorICB9Cit9CisMCisKKyAvKiB0aGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgcmVjZWl2ZSBzaWRlIChuZXRzZXJ2ZXIpIG9mIHRoZSAqLworIC8qIERHX1NUUkVBTSBwZXJmb3JtYW5jZSB0ZXN0LiAqLworCit2b2lkCityZWN2X2RnX3N0cmVhbSgpCit7CisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworCisgIHN0cnVjdCBzb2NrYWRkcl91biBteWFkZHJfdW47CisgIFNPQ0tFVCBzX2RhdGE7CisgIGludAlsZW4gPSAwOworICBpbnQJYnl0ZXNfcmVjZWl2ZWQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBpbnQJbWVzc2FnZV9zaXplOworICBpbnQJbWVzc2FnZXNfcmVjdmQgPSAwOworICAKKyAgc3RydWN0CWRnX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdAkqZGdfc3RyZWFtX3JlcXVlc3Q7CisgIHN0cnVjdAlkZ19zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSpkZ19zdHJlYW1fcmVzcG9uc2U7CisgIHN0cnVjdAlkZ19zdHJlYW1fcmVzdWx0c19zdHJ1Y3QJKmRnX3N0cmVhbV9yZXN1bHRzOworICAKKyAgZGdfc3RyZWFtX3JlcXVlc3QgID0gCisgICAgKHN0cnVjdCBkZ19zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRnX3N0cmVhbV9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgZGdfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIGRnX3N0cmVhbV9yZXN1bHRzICA9IAorICAgIChzdHJ1Y3QgZGdfc3RyZWFtX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9kZ19zdHJlYW06IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGdfc3RyZWFtOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IERHX1NUUkVBTV9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZyA+IDIpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RnX3N0cmVhbTogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudCB3aXRoIHRoZSBkZXNpcmVkIG9mZnNldC4gKi8KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RnX3N0cmVhbTogcmVxdWVzdGVkIGFsaWdubWVudCBvZiAlZFxuIiwKKwkgICAgZGdfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgcmVjdl93aWR0aCA9IDE7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICBkZ19zdHJlYW1fcmVxdWVzdC0+bWVzc2FnZV9zaXplLAorCQkJCSAgIGRnX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkJCQkgICBkZ19zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RnX3N0cmVhbTogcmVjZWl2ZSBhbGlnbm1lbnQgYW5kIG9mZnNldCBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIExldCdzIGNsZWFyLW91dCBvdXIgc29ja2FkZHIgZm9yIHRoZSBzYWtlIG9mIGNsZWFubGluZXMuIFRoZW4gd2UgKi8KKyAgLyogY2FuIHB1dCBpbiBPVVIgdmFsdWVzICEtKSBBdCBzb21lIHBvaW50LCB3ZSBtYXkgd2FudCB0byBuYWlsIHRoaXMgKi8KKyAgLyogc29ja2V0IHRvIGEgcGFydGljdWxhciBuZXR3b3JrLWxldmVsIGFkZHJlc3MsIGJ1dCBmb3Igbm93LCAqLworICAvKiBJTkFERFJfQU5ZIHNob3VsZCBiZSBqdXN0IGZpbmUuICovCisgIAorICBiemVybygoY2hhciAqKSZteWFkZHJfdW4sCisJc2l6ZW9mKG15YWRkcl91bikpOworICBteWFkZHJfdW4uc3VuX2ZhbWlseSAgICAgID0gQUZfVU5JWDsKKyAgCisgIC8qIEdyYWIgYSBzb2NrZXQgdG8gbGlzdGVuIG9uLCBhbmQgdGhlbiBsaXN0ZW4gb24gaXQuICovCisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kZ19zdHJlYW06IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogY3JlYXRlX3VuaXhfc29ja2V0IGV4cGVjdHMgdG8gZmluZCBzb21lIHRoaW5ncyBpbiB0aGUgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcywgc28gc2V0IHRoZSBnbG9iYWxzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuICovCisgIC8qIG9uY2UgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCB3ZSB3aWxsIHNldCB0aGUgcmVzcG9uc2UgdmFsdWVzICovCisgIC8qIGJhc2VkIG9uIHRoZSB1cGRhdGVkIHZhbHVlIG9mIHRob3NlIGdsb2JhbHMuIHJhaiA3Lzk0ICovCisgIGxzcl9zaXplID0gZGdfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgICAgCisgIHNfZGF0YSA9IGNyZWF0ZV91bml4X3NvY2tldChBRl9VTklYLAorCQkJICAgICAgU09DS19ER1JBTSk7CisgIAorICBpZiAoc19kYXRhID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTGV0J3MgZ2V0IGFuIGFkZHJlc3MgYXNzaWduZWQgdG8gdGhpcyBzb2NrZXQgc28gd2UgY2FuIHRlbGwgdGhlICovCisgIC8qIGluaXRpYXRvciBob3cgdG8gcmVhY2ggdGhlIGRhdGEgc29ja2V0LiBUaGVyZSBtYXkgYmUgYSBkZXNpcmUgdG8gKi8KKyAgLyogbmFpbCB0aGlzIHNvY2tldCB0byBhIHNwZWNpZmljIElQIGFkZHJlc3MgaW4gYSBtdWx0aS1ob21lZCwgKi8KKyAgLyogbXVsdGktY29ubmVjdGlvbiBzaXR1YXRpb24sIGJ1dCBmb3Igbm93LCB3ZSdsbCBpZ25vcmUgdGhlIGlzc3VlICovCisgIC8qIGFuZCBjb25jZW50cmF0ZSBvbiBzaW5nbGUgY29ubmVjdGlvbiB0ZXN0aW5nLiAqLworICAKKyAgc3RyY3B5KG15YWRkcl91bi5zdW5fcGF0aCx0ZW1wbmFtKHBhdGhfcHJlZml4LCJuZXRwZXJmLiIpKTsKKyAgaWYgKGJpbmQoc19kYXRhLAorCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX3VuLAorCSAgIHNpemVvZihteWFkZHJfdW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgY2htb2QobXlhZGRyX3VuLnN1bl9wYXRoLCAwNjY2KTsKKworICBkZ19zdHJlYW1fcmVzcG9uc2UtPnRlc3RfbGVuZ3RoID0gZGdfc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoOworICAKKyAgLyogTm93IG15YWRkcl91biBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHN0cmNweShkZ19zdHJlYW1fcmVzcG9uc2UtPnVuaXhfcGF0aCxteWFkZHJfdW4uc3VuX3BhdGgpOworICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyAgID0gMDsKKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAtMSB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgZGdfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IDAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgaWYgKGRnX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIC8qIFdlIHdpbGwgcGFzcyB0aGUgcmF0ZSBpbnRvIHRoZSBjYWxpYnJhdGlvbiByb3V0aW5lLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBvbmUsIGl0IHdpbGwgYmUgMC4wLCBhbmQgd2Ugd2lsbCBkbyBhICovCisgICAgLyogInJlYWwiIGNhbGlicmF0aW9uLiBPdGhlcndpc2UsIGFsbCBpdCB3aWxsIHJlYWxseSBkbyBpcyAqLworICAgIC8qIHN0b3JlIGl0IGF3YXkuLi4gKi8KKyAgICBkZ19zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICBkZ19zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlID0gCisgICAgICBjYWxpYnJhdGVfbG9jYWxfY3B1KGRnX3N0cmVhbV9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgCisgIG1lc3NhZ2Vfc2l6ZQk9IGRnX3N0cmVhbV9yZXF1ZXN0LT5tZXNzYWdlX3NpemU7CisgIHRlc3RfdGltZQk9IGRnX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aDsKKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgZGdfc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIGRnX3N0cmVhbV9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydChkZ19zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpOworICAKKyAgLyogVGhlIGxvb3Agd2lsbCBleGl0IHdoZW4gdGhlIHRpbWVyIHBvcHMsIG9yIGlmIHdlIGhhcHBlbiB0byByZWN2IGEgKi8KKyAgLyogbWVzc2FnZSBvZiBsZXNzIHRoYW4gc2VuZF9zaXplIGJ5dGVzLi4uICovCisgIAorICB0aW1lc191cCA9IDA7CisgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSArIFBBRF9USU1FKTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGdfc3RyZWFtOiBhYm91dCB0byBlbnRlciBpbm5lciBzYW5jdHVtLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgd2hpbGUgKCF0aW1lc191cCkgeworICAgIGlmICgobGVuID0gcmVjdihzX2RhdGEsIAorCQkgICAgcmVjdl9yaW5nLT5idWZmZXJfcHRyLAorCQkgICAgbWVzc2FnZV9zaXplLCAKKwkJICAgIDApKSAhPSBtZXNzYWdlX3NpemUpIHsKKyAgICAgIGlmICgobGVuID09IFNPQ0tFVF9FUlJPUikgJiYgKGVycm5vICE9IEVJTlRSKSkgeworCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisJc2VuZF9yZXNwb25zZSgpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgbWVzc2FnZXNfcmVjdmQrKzsKKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGdfc3RyZWFtOiBnb3QgJWQgbWVzc2FnZXMuXG4iLG1lc3NhZ2VzX3JlY3ZkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAKKyAgLyogVGhlIGxvb3Agbm93IGV4aXRzIGR1ZSB0aW1lciBvciA8IHNlbmRfc2l6ZSBieXRlcyByZWNlaXZlZC4gKi8KKyAgCisgIGNwdV9zdG9wKGRnX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lc191cCkgeworICAgIC8qIHdlIGVuZGVkIG9uIGEgdGltZXIsIHN1YnRyYWN0IHRoZSBQQURfVElNRSAqLworICAgIGVsYXBzZWRfdGltZSAtPSAoZmxvYXQpUEFEX1RJTUU7CisgIH0KKyAgZWxzZSB7CisgICAgc3RvcF90aW1lcigpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RnX3N0cmVhbTogdGVzdCBlbmRlZCBpbiAlZiBzZWNvbmRzLlxuIixlbGFwc2VkX3RpbWUpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIAorICAvKiBXZSB3aWxsIGNvdW50IHRoZSAib2ZmIiBtZXNzYWdlIHRoYXQgZ290IHVzIG91dCBvZiB0aGUgbG9vcCAqLworICBieXRlc19yZWNlaXZlZCA9IChtZXNzYWdlc19yZWN2ZCAqIG1lc3NhZ2Vfc2l6ZSkgKyBsZW47CisgIAorICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfZGdfc3RyZWFtOiBnb3QgJWQgYnl0ZXNcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZQkJPSBER19TVFJFQU1fUkVTVUxUUzsKKyAgZGdfc3RyZWFtX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkCT0gYnl0ZXNfcmVjZWl2ZWQ7CisgIGRnX3N0cmVhbV9yZXN1bHRzLT5tZXNzYWdlc19yZWN2ZAk9IG1lc3NhZ2VzX3JlY3ZkOworICBkZ19zdHJlYW1fcmVzdWx0cy0+ZWxhcHNlZF90aW1lCT0gZWxhcHNlZF90aW1lOworICBpZiAoZGdfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgZGdfc3RyZWFtX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbChlbGFwc2VkX3RpbWUpOworICB9CisgIGVsc2UgeworICAgIGRnX3N0cmVhbV9yZXN1bHRzLT5jcHVfdXRpbAk9IC0xLjA7CisgIH0KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kZ19zdHJlYW06IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCit9CisMCit2b2lkCitzZW5kX2RnX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgXG4iOworICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0IFJlc3AuICBFbGFwc2VkIFRyYW5zLiAgIENQVSAgICBDUFUgICAgUy5kZW0gICBTLmRlbVxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIFJhdGUgICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAgICAgICUlICAgICAgdXMvVHIgICB1cy9UclxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2ZcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAlLTZkICUtNi4yZiAgJS02LjJmICAgJS02LjJmICUtNi4yZiAlLTYuM2YgICUtNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorICAvKiB3ZSBhZGQgTUFYQUxJR05NRU5UIGFuZCBNQVhPRkZTRVQgdG8gaW5zdXJlIHRoYXQgdGhlcmUgaXMgZW5vdWdoICovCisgIC8qIHNwYWNlIGZvciBhIG1heGltYWxseSBhbGlnbmVkLCBtYXhpbWFsbHkgc2l6ZWQgbWVzc2FnZS4gQXQgc29tZSAqLworICAvKiBwb2ludCwgd2UgbWF5IHdhbnQgdG8gYWN0dWFsbHkgbWFrZSB0aGlzIGV2ZW4gbGFyZ2VyIGFuZCBjeWNsZSAqLworICAvKiB0aHJvdWdoIHRoZSB0aGluZyBvbmUgcGllY2UgYXQgYSB0aW1lLiovCisgIAorICBpbnQJbGVuOworICBjaGFyCSpzZW5kX21lc3NhZ2VfcHRyOworICBjaGFyCSpyZWN2X21lc3NhZ2VfcHRyOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJbnVtbWVzc2FnZXM7CisgIFNPQ0tFVCBzZW5kX3NvY2tldDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgaW50CWJ5dGVzX3hmZXJkOworICAKKyAgaW50CXJzcF9ieXRlc19yZWN2ZDsKKyAgCisgIGZsb2F0CWxvY2FsX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJbG9jYWxfc2VydmljZV9kZW1hbmQ7CisgIGZsb2F0CXJlbW90ZV9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CXJlbW90ZV9zZXJ2aWNlX2RlbWFuZDsKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIC8qIHRpbWluZyBzdHVmZiAqLworI2RlZmluZQlNQVhfS0VQVF9USU1FUwkxMDI0CisgIGludAl0aW1lX2luZGV4ID0gMDsKKyAgaW50CXVudXNlZF9idWNrZXRzOworICBpbnQJa2VwdF90aW1lc1tNQVhfS0VQVF9USU1FU107CisgIGludAlzbGVlcF91c2VjczsKKyAgdW5zaWduZWQJaW50CXRvdGFsX3RpbWVzPTA7CisgIHN0cnVjdAl0aW1lem9uZQlkdW1teV96b25lOworICBzdHJ1Y3QJdGltZXZhbAkJc2VuZF90aW1lOworICBzdHJ1Y3QJdGltZXZhbAkJcmVjdl90aW1lOworICBzdHJ1Y3QJdGltZXZhbAkJc2xlZXBfdGltZXZhbDsKKyNlbmRpZgorICAKKyAgc3RydWN0CXNvY2thZGRyX3VuCXNlcnZlciwgbXlhZGRyX3VuOworICAKKyAgc3RydWN0CWRnX3JyX3JlcXVlc3Rfc3RydWN0CSpkZ19ycl9yZXF1ZXN0OworICBzdHJ1Y3QJZGdfcnJfcmVzcG9uc2Vfc3RydWN0CSpkZ19ycl9yZXNwb25zZTsKKyAgc3RydWN0CWRnX3JyX3Jlc3VsdHNfc3RydWN0CSpkZ19ycl9yZXN1bHQ7CisgIAorICBkZ19ycl9yZXF1ZXN0CT0gCisgICAgKHN0cnVjdCBkZ19ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgZGdfcnJfcmVzcG9uc2U9CisgICAgKHN0cnVjdCBkZ19ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkZ19ycl9yZXN1bHQJPQorICAgIChzdHJ1Y3QgZGdfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgLyogd2Ugd2FudCB0byB6ZXJvIG91dCB0aGUgdGltZXMsIHNvIHdlIGNhbiBkZXRlY3QgdW51c2VkIGVudHJpZXMuICovCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgdGltZV9pbmRleCA9IDA7CisgIHdoaWxlICh0aW1lX2luZGV4IDwgTUFYX0tFUFRfVElNRVMpIHsKKyAgICBrZXB0X3RpbWVzW3RpbWVfaW5kZXhdID0gMDsKKyAgICB0aW1lX2luZGV4ICs9IDE7CisgIH0KKyAgdGltZV9pbmRleCA9IDA7CisjZW5kaWYKKyAgCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBiemVybygoY2hhciAqKSZzZXJ2ZXIsCisJc2l6ZW9mKHNlcnZlcikpOworICBzZXJ2ZXIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisKKyAgYnplcm8oKGNoYXIgKikmbXlhZGRyX3VuLAorCXNpemVvZihteWFkZHJfdW4pKTsKKyAgbXlhZGRyX3VuLnN1bl9mYW1pbHkgPSBBRl9VTklYOworCisgIHN0cmNweShteWFkZHJfdW4uc3VuX3BhdGgsdGVtcG5hbShwYXRoX3ByZWZpeCwibmV0cGVyZi4iKSk7CisgIAorICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgZnByaW50Zih3aGVyZSwiREcgUkVRVUVTVC9SRVNQT05TRSBURVNUXG4iKTsKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpCisgICAgICBmcHJpbnRmKHdoZXJlLGNwdV90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgZWxzZQorICAgICAgZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgfQorICAKKyAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycyAqLworICAKKyAgbnVtbWVzc2FnZXMJPQkwOworICBieXRlc194ZmVyZAk9CTA7CisgIHRpbWVzX3VwIAk9IAkwOworICAKKyAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlciB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQgKi8KKyAgdGVtcF9tZXNzYWdlX3B0ciA9IChjaGFyICopbWFsbG9jKERBVEFCVUZGRVJMRU4pOworICBpZiAodGVtcF9tZXNzYWdlX3B0ciA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIERBVEFCVUZGRVJMRU4pOworICAgIGV4aXQoMSk7CisgIH0KKyAgc2VuZF9tZXNzYWdlX3B0ciA9IChjaGFyICopKCggKGxvbmcpdGVtcF9tZXNzYWdlX3B0ciArIAorCQkJKGxvbmcpIGxvY2FsX3NlbmRfYWxpZ24gLSAxKSAmCQorCQkJfigobG9uZykgbG9jYWxfc2VuZF9hbGlnbiAtIDEpKTsKKyAgc2VuZF9tZXNzYWdlX3B0ciA9IHNlbmRfbWVzc2FnZV9wdHIgKyBsb2NhbF9zZW5kX29mZnNldDsKKyAgdGVtcF9tZXNzYWdlX3B0ciA9IChjaGFyICopbWFsbG9jKERBVEFCVUZGRVJMRU4pOworICBpZiAodGVtcF9tZXNzYWdlX3B0ciA9PSBOVUxMKSB7CisgICAgcHJpbnRmKCJtYWxsb2MoJWQpIGZhaWxlZCFcbiIsIERBVEFCVUZGRVJMRU4pOworICAgIGV4aXQoMSk7CisgIH0KKyAgcmVjdl9tZXNzYWdlX3B0ciA9IChjaGFyICopKCggKGxvbmcpdGVtcF9tZXNzYWdlX3B0ciArIAorCQkJKGxvbmcpIGxvY2FsX3JlY3ZfYWxpZ24gLSAxKSAmCQorCQkJfigobG9uZykgbG9jYWxfcmVjdl9hbGlnbiAtIDEpKTsKKyAgcmVjdl9tZXNzYWdlX3B0ciA9IHJlY3ZfbWVzc2FnZV9wdHIgKyBsb2NhbF9yZWN2X29mZnNldDsKKyAgCisgIC8qc2V0IHVwIHRoZSBkYXRhIHNvY2tldCAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHNlbmRfc29ja2V0ID0gY3JlYXRlX3VuaXhfc29ja2V0KEFGX1VOSVgsIAorCQkJCSAgIFNPQ0tfREdSQU0pOworICAKKyAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfZGdfcnI6IGRnIHJyIGRhdGEgc29ja2V0Iik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwic2VuZF9kZ19ycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICB9CisgIAorCQorICAvKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGNwdSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudHMsIHdlIG11c3QgKi8KKyAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAvKiB0aGVtc2VsdmVzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBjcHUgcmF0ZSwgdGhlbiAqLworICAvKiBjYWxpYnJhdGVfbG9jYWxfY3B1IHdpbGwgcmV0dXJuIHJhdGhlciBxdWlja2x5IGFzIGl0IHdpbGwgaGF2ZSAqLworICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAvKiBhbGwgdGhlICJub3JtYWwiIGNhbGlicmF0aW9uIHN0dWZmIGFuZCByZXR1cm4gdGhlIHJhdGUgYmFjay4gSWYgKi8KKyAgLyogdGhlcmUgaXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwgaWRsZSBsb29wLCB0aGUgKi8KKyAgLyogbG9jYWxfY3B1X3JhdGUgd2lsbCBiZSBzZXQgdG8gLTEuICovCisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgfQorICAKKyAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlIHNvY2tldCAqLworICAvKiBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgKi8KKyAgLyogYWxsIHRoZSB2YWx1ZXMgYmVpbmcgcGFzc2VkIGluIHRoZSBzZXR1cCBtZXNzYWdlLiBJZiB0aGUgdXNlciBkaWQgKi8KKyAgLyogbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGV5IHdpbGwgYmUgcGFzc2VkIGFzIDAsIHdoaWNoICovCisgIC8qIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZSB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyAqLworICAvKiBkZWZhdWx0IHNob3VsZCBiZSB1c2VkLiBBbGlnbm1lbnQgaXMgdGhlIGV4Y2VwdGlvbiwgaXQgd2lsbCAqLworICAvKiBkZWZhdWx0IHRvIDgsIHdoaWNoIHdpbGwgYmUgbm8gYWxpZ25tZW50IGFsdGVyYXRpb25zLiAqLworICAKKyAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlCT0JRE9fREdfUlI7CisgIGRnX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUJPQlyc3Jfc2l6ZTsKKyAgZGdfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZQk9CXJzc19zaXplOworICBkZ19ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudAk9CXJlbW90ZV9yZWN2X2FsaWduOworICBkZ19ycl9yZXF1ZXN0LT5yZWN2X29mZnNldAk9CXJlbW90ZV9yZWN2X29mZnNldDsKKyAgZGdfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQJPQlyZW1vdGVfc2VuZF9hbGlnbjsKKyAgZGdfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQJPQlyZW1vdGVfc2VuZF9vZmZzZXQ7CisgIGRnX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZQk9CXJlcV9zaXplOworICBkZ19ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplCT0JcnNwX3NpemU7CisgIGRnX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgZGdfcnJfcmVxdWVzdC0+Y3B1X3JhdGUJPQlyZW1vdGVfY3B1X3JhdGU7CisgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICBkZ19ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdGltZTsKKyAgfQorICBlbHNlIHsKKyAgICBkZ19ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdHJhbnMgKiAtMTsKKyAgfQorICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfZGdfcnI6IHJlcXVlc3RpbmcgREcgcmVxdWVzdC9yZXNwb25zZSB0ZXN0XG4iKTsKKyAgfQorICAKKyAgc2VuZF9yZXF1ZXN0KCk7CisgIAorICAvKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIHJlbGV2YW50IAkqLworICAvKiBzb2NrZXQgcGFyYW1ldGVycyBmb3IgdGhpcyB0ZXN0IHR5cGUuIFdlIHdpbGwgcHV0IHRoZW0gYmFjayBpbnRvIAkqLworICAvKiB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuICBUaGUJKi8KKyAgLyogcmVtb3RlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIENQVSBpZiBuZWNlc3NhcnksIGFuZCB3aWxsIGhhdmUgZG9uZQkqLworICAvKiBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlIGNwdSBsb2NhbGx5CSovCisgIC8qIGJlZm9yZSBzZW5kaW5nIHRoZSByZXF1ZXN0LCBhbmQgd2lsbCBncmFiIHRoZSBjb3VudGVyIHZhbHVlIHJpZ2h0CSovCisgIC8qIGFmdGVyIHRoZSBjb25uZWN0IHJldHVybnMuIFRoZSByZW1vdGUgd2lsbCBncmFiIHRoZSBjb3VudGVyIHJpZ2h0CSovCisgIC8qIGFmdGVyIHRoZSBhY2NlcHQgY2FsbC4gVGhpcyBzYXZlcyB0aGUgaGFzc2xlIG9mIGV4dHJhIG1lc3NhZ2VzCSovCisgIC8qIGJlaW5nIHNlbnQgZm9yIHRoZSBERyB0ZXN0cy4JCQkJCSovCisgIAorICByZWN2X3Jlc3BvbnNlKCk7CisgIAorICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgaWYgKGRlYnVnKQorICAgICAgZnByaW50Zih3aGVyZSwicmVtb3RlIGxpc3RlbiBkb25lLlxuIik7CisgICAgcnNyX3NpemUJPQlkZ19ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKyAgICByc3Nfc2l6ZQk9CWRnX3JyX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplOworICAgIHJlbW90ZV9jcHVfdXNhZ2U9CWRnX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKyAgICByZW1vdGVfY3B1X3JhdGUgPSAJZGdfcnJfcmVzcG9uc2UtPmNwdV9yYXRlOworICAgIC8qIHBvcnQgbnVtYmVycyBpbiBwcm9wZXIgb3JkZXIgKi8KKyAgICBzdHJjcHkoc2VydmVyLnN1bl9wYXRoLGRnX3JyX3Jlc3BvbnNlLT51bml4X3BhdGgpOworICB9CisgIGVsc2UgeworICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgcGVycm9yKCJuZXRwZXJmOiByZW1vdGUgZXJyb3IiKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQuIFRoaXMgd2lsbCBzZXQgKi8KKyAgLyogdGhlIGRlZmF1bHQgZGVzdGluYXRpb24gYWRkcmVzcyBvbiB0aGlzIHNvY2tldC4gd2UgbmVlZCB0byBiaW5kICovCisgIC8qIG91dCBzb2NrZXQgc28gdGhhdCB0aGUgcmVtb3RlIGdldHMgc29tZXRoaW5nIGZyb20gYSByZWN2ZnJvbSAgKi8KKyAgaWYgKGJpbmQoc2VuZF9zb2NrZXQsCisJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfdW4sCisJICAgc2l6ZW9mKG15YWRkcl91bikpID09IFNPQ0tFVF9FUlJPUikgeworICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF9kZ19yciIpOworICAgIHVubGluayhteWFkZHJfdW4uc3VuX3BhdGgpOworICAgIGNsb3NlKHNlbmRfc29ja2V0KTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoY29ubmVjdChzZW5kX3NvY2tldCwgCisJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsCisJICAgICAgc2l6ZW9mKHNlcnZlcikpID09IElOVkFMSURfU09DS0VUICkgeworICAgIHBlcnJvcigibmV0cGVyZjogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciB0aGUgKi8KKyAgLyogY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkIGhhdmUgKi8KKyAgLyogaW5kaWNhdGVkIGEgcHJvYmxlbS4gSSBmYWlsZWQgdG8gc2VlIHRoZSB2YWx1ZSBvZiB0aGUgZXh0cmEgKi8KKyAgLyogbWVzc2FnZSBhZnRlciB0aGUgYWNjZXB0IG9uIHRoZSByZW1vdGUuIElmIGl0IGZhaWxlZCwgd2UnbGwgc2VlIGl0ICovCisgIC8qIGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nIGRhdGEuICovCisgIAorICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgdGhleSAqLworICAvKiBjYW4gYmUgZWl0aGVyIHRpbWUgb3IgdHJhbnNhY3Rpb24gYmFzZWQuICovCisgIAorICBpZiAodGVzdF90aW1lKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICB0cmFuc19yZW1haW5pbmcgPSB0ZXN0X2J5dGVzOworICAgIHRpbWVzX3VwID0gMTsKKyAgfQorICAKKyAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAvKiB2YWx1ZSBvZiB0aGUgaWRsZSBjb3VudGVyIGZvciBsYXRlciB1c2UgaW4gbWVhc3VyaW5nIGNwdSAqLworICAvKiB1dGlsaXphdGlvbiBhbmQvb3Igc2VydmljZSBkZW1hbmQgYW5kIHRocnVwdXQuICovCisgIAorICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKyAgCisgIC8qIFdlIHVzZSBhbiAiT1IiIHRvIGNvbnRyb2wgdGVzdCBleGVjdXRpb24uIFdoZW4gdGhlIHRlc3QgaXMgKi8KKyAgLyogY29udHJvbGxlZCBieSB0aW1lLCB0aGUgYnl0ZSBjb3VudCBjaGVjayB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuICovCisgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgLyogYWx3YXlzIHJldHVybiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgdGhlIHdob2xlICovCisgIC8qIGV4cHJlc3Npb24gd2lsbCBnbyBmYWxzZSBhbmQgd2Ugd2lsbCBzdG9wIHNlbmRpbmcgZGF0YS4gSSB0aGluayBJICovCisgIC8qIGp1c3QgYXJiaXRyYXJpbHkgZGVjcmVtZW50IHRyYW5zX3JlbWFpbmluZyBmb3IgdGhlIHRpbWVkIHRlc3QsIGJ1dCAqLworICAvKiB3aWxsIG5vdCBkbyB0aGF0IGp1c3QgeWV0Li4uIE9uZSBvdGhlciBxdWVzdGlvbiBpcyB3aGV0aGVyIG9yIG5vdCAqLworICAvKiB0aGUgc2VuZCBidWZmZXIgYW5kIHRoZSByZWNlaXZlIGJ1ZmZlciBzaG91bGQgYmUgdGhlIHNhbWUgYnVmZmVyLiAqLworICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgLyogc2VuZCB0aGUgcmVxdWVzdCAqLworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgZ2V0dGltZW9mZGF5KCZzZW5kX3RpbWUsJmR1bW15X3pvbmUpOworI2VuZGlmCisgICAgaWYoKGxlbj1zZW5kKHNlbmRfc29ja2V0LAorCQkgc2VuZF9tZXNzYWdlX3B0ciwKKwkJIHJlcV9zaXplLAorCQkgMCkpICE9IHJlcV9zaXplKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiBXZSBsaWtlbHkgaGl0ICovCisJLyogdGVzdC1lbmQgdGltZS4gKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIHBlcnJvcigic2VuZF9kZ19ycjogZGF0YSBzZW5kIGVycm9yIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiByZWNlaXZlIHRoZSByZXNwb25zZS4gd2l0aCBERyB3ZSB3aWxsIGdldCBpdCBhbGwsIG9yIG5vdGhpbmcgKi8KKyAgICAKKyAgICBpZigocnNwX2J5dGVzX3JlY3ZkPXJlY3Yoc2VuZF9zb2NrZXQsCisJCQkgICAgIHJlY3ZfbWVzc2FnZV9wdHIsCisJCQkgICAgIHJzcF9zaXplLAorCQkJICAgICAwKSkgIT0gcnNwX3NpemUpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIEFnYWluLCB3ZSBoYXZlIGxpa2VseSBoaXQgdGVzdC1lbmQgdGltZSAqLworCWJyZWFrOworICAgICAgfQorICAgICAgcGVycm9yKCJzZW5kX2RnX3JyOiBkYXRhIHJlY3YgZXJyb3IiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgZ2V0dGltZW9mZGF5KCZyZWN2X3RpbWUsJmR1bW15X3pvbmUpOworICAgIAorICAgIC8qIG5vdyB3ZSBkbyBzb21lIGFyaXRobWF0aWMgb24gdGhlIHR3byB0aW1ldmFscyAqLworICAgIGlmIChyZWN2X3RpbWUudHZfdXNlYyA8IHNlbmRfdGltZS50dl91c2VjKSB7CisgICAgICAvKiB3ZSB3cmFwcGVkIGFyb3VuZCBhIHNlY29uZCAqLworICAgICAgcmVjdl90aW1lLnR2X3VzZWMgKz0gMTAwMDAwMDsKKyAgICAgIHJlY3ZfdGltZS50dl9zZWMgIC09IDE7CisgICAgfQorICAgIAorICAgIC8qIGFuZCBzdG9yZSBpdCBhd2F5ICovCisgICAga2VwdF90aW1lc1t0aW1lX2luZGV4XSA9IChyZWN2X3RpbWUudHZfc2VjIC0gc2VuZF90aW1lLnR2X3NlYykgKiAxMDAwMDAwOworICAgIGtlcHRfdGltZXNbdGltZV9pbmRleF0gKz0gKHJlY3ZfdGltZS50dl91c2VjIC0gc2VuZF90aW1lLnR2X3VzZWMpOworICAgIAorICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIG1heSB3aXNoIHRvIHNsZWVwIGZvciBzb21lIHBlcmlvZCBvZiAqLworICAgIC8qIHRpbWUsIHNvIHdlIHNlZSBob3cgbG9uZyB0aGF0IGxhc3QgdHJhbnNhY3Rpb24ganVzdCB0b29rLCAqLworICAgIC8qIGFuZCBzbGVlcCBmb3IgdGhlIGRpZmZlcmVuY2Ugb2YgdGhhdCBhbmQgdGhlIGludGVydmFsLiBXZSAqLworICAgIC8qIHdpbGwgbm90IHNsZWVwIGlmIHRoZSB0aW1lIHdvdWxkIGJlIGxlc3MgdGhhbiBhICovCisgICAgLyogbWlsbGlzZWNvbmQuICAqLworICAgIGlmIChpbnRlcnZhbF91c2VjcyA+IDApIHsKKyAgICAgIHNsZWVwX3VzZWNzID0gaW50ZXJ2YWxfdXNlY3MgLSBrZXB0X3RpbWVzW3RpbWVfaW5kZXhdOworICAgICAgaWYgKHNsZWVwX3VzZWNzID4gMTAwMCkgeworCS8qIHdlIHNsZWVwICovCisJc2xlZXBfdGltZXZhbC50dl9zZWMgPSBzbGVlcF91c2VjcyAvIDEwMDAwMDA7CisJc2xlZXBfdGltZXZhbC50dl91c2VjID0gc2xlZXBfdXNlY3MgJSAxMDAwMDAwOworCXNlbGVjdCgwLAorCSAgICAgICAwLAorCSAgICAgICAwLAorCSAgICAgICAwLAorCSAgICAgICAmc2xlZXBfdGltZXZhbCk7CisgICAgICB9CisgICAgfQorICAgIAorICAgIC8qIG5vdyB1cCB0aGUgdGltZSBpbmRleCAqLworICAgIHRpbWVfaW5kZXggPSAodGltZV9pbmRleCArMSklTUFYX0tFUFRfVElNRVM7CisjZW5kaWYKKyAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisgICAgICB0cmFuc19yZW1haW5pbmctLTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnID4gMykgeworICAgICAgZnByaW50Zih3aGVyZSwiVHJhbnNhY3Rpb24gJWQgY29tcGxldGVkXG4iLG51bW1lc3NhZ2VzKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIAorICB9CisgIAorICAvKiBUaGUgdGVzdCBpcyBvdmVyLiBGbHVzaCB0aGUgYnVmZmVycyB0byB0aGUgcmVtb3RlIGVuZC4gV2UgZG8gYSAqLworICAvKiBncmFjZWZ1bCByZWxlYXNlIHRvIGluc3VyZSB0aGF0IGFsbCBkYXRhIGhhcyBiZWVuIHRha2VuIGJ5IHRoZSAqLworICAvKiByZW1vdGUuIE9mIGNvdXJzZSwgc2luY2UgdGhpcyB3YXMgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIHRoZXJlICovCisgIC8qIHNob3VsZCBiZSBubyBkYXRhIG91dHN0YW5kaW5nIG9uIHRoZSBzb2NrZXQgOy0pICovIAorICAKKyAgaWYgKHNodXRkb3duKHNlbmRfc29ja2V0LDEpID09IFNPQ0tFVF9FUlJPUikgeworICAgIHBlcnJvcigibmV0cGVyZjogY2Fubm90IHNodXRkb3duIGRnIHN0cmVhbSBzb2NrZXQiKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgIC8qIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1IHV0aWxpemF0aW9uICovCisgIAorICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgbWVhc3VyZWQ/ICovCisgIC8qIGhvdyBsb25nIGRpZCB3ZSByZWFsbHkgcnVuPyAqLworICAKKyAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIHJlbW90ZSBlbmQuIFRoZSByZW1vdGUgd2lsbCBoYXZlICovCisgIC8qIGNhbGN1bGF0ZWQgc2VydmljZSBkZW1hbmQgYW5kIGFsbCB0aG9zZSBpbnRlcmVzdGluZyB0aGluZ3MuIElmIGl0ICovCisgIC8qIHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgIGlmIChkZWJ1ZykKKyAgICAgIGZwcmludGYod2hlcmUsInJlbW90ZSByZXN1bHRzIG9idGFpbmVkXG4iKTsKKyAgfQorICBlbHNlIHsKKyAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgIHBlcnJvcigibmV0cGVyZjogcmVtb3RlIGVycm9yIik7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGNhbGN1bGF0ZSB3aGF0IG91ciB0aHJ1cHV0IHdhcyBmb3IgdGhlIHRlc3QuIEluIHRoZSBmdXR1cmUsICovCisgIC8qIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dCBtZWFzdXJlZCBieSAqLworICAvKiB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgREcgc3RyZWFtIHRlc3QsICovCisgIC8qIHRoYXQgdGhlIHR3byBudW1iZXJzIHNob3VsZCBiZSAqdmVyeSogY2xvc2UuLi4gV2UgY2FsY3VsYXRlICovCisgIC8qIGJ5dGVzX3NlbnQgcmVnYXJkbGVzcyBvZiB0aGUgd2F5IHRoZSB0ZXN0IGxlbmd0aCB3YXMgY29udHJvbGxlZC4gKi8KKyAgLyogSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5ICovCisgIC8qIGhhdmUgc3BlY2lmaWVkIGEgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Fzbid0IGEgbXVsdGlwbGUgb2YgdGhlICovCisgIC8qIHNlbmRfc2l6ZSwgc28gd2UgcmVhbGx5IGRpZG4ndCBzZW5kIHdoYXQgaGUgYXNrZWQgZm9yIDstKSBXZSB1c2UgKi8KKyAgCisgIGJ5dGVzX3hmZXJkCT0gKHJlcV9zaXplICogbnVtbWVzc2FnZXMpICsgKHJzcF9zaXplICogbnVtbWVzc2FnZXMpOworICB0aHJ1cHV0CQk9IGNhbGNfdGhydXB1dChieXRlc194ZmVyZCk7CisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChsb2NhbF9jcHVfcmF0ZSA9PSAwLjApIHsKKwlmcHJpbnRmKHdoZXJlLCJXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgIFdBUk5JTkchXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJMb2NhbCBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uID0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gLTEuMDsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChyZW1vdGVfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiREFOR0VSICBEQU5HRVIgIERBTkdFUiAgICBEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiFcbiIpOworCWZwcmludGYod2hlcmUsIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IGRnX3JyX3Jlc3VsdC0+Y3B1X3V0aWw7CisgICAgICAvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKyAgICAgIC8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKyAgICAgIC8qICJnb29kIiBudW1iZXJzICovCisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgMC4wLAorCQkJCQkJICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgIGRnX3JyX3Jlc3VsdC0+bnVtX2NwdXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24gPSAtMS4wOworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IC0xLjA7CisgICAgfQorICAgIAorICAgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgICAvKiBoYXMgc3BlY2lmaWVkIHplcm8tbGV2ZWwgdmVyYm9zaXR5LCB3ZSB3aWxsIGp1c3QgcHJpbnQgdGhlICovCisgICAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgICAgLyogInN0cmVhbXBlcmYiIG51bWJlcnMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgYSB2ZXJib3NpdHkgKi8KKyAgICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgICAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAgIC8qIG5vdCBjcHVfbWVhc3VyZW1lbnQgc3BlY2lmaWMuLi4gICovCisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIGxzcl9zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBndWVzcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSwKKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwKKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMV9saW5lXzEsCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgbHNzX3NpemUsCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXNwb25zZXMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsIAkJLyogaG93IGxvbmcgZGlkIGl0IHRha2UgKi8KKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUpOworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwgCQkvKiByZW1vdGUgcmVjdmJ1ZiBzaXplICovCisJICAgICAgcnNyX3NpemUpOworICAgICAgCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBERyBzdGF0aXN0aWNzLCB0aGUgYWxpZ25tZW50cyBvZiB0aGUgc2VuZHMgYW5kIHJlY2VpdmVzICovCisgICAgLyogYW5kIGFsbCB0aGF0IHNvcnQgb2Ygcm90Li4uICovCisgICAgCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBrZXB0X3RpbWVzW01BWF9LRVBUX1RJTUVTXSA9IDA7CisgICAgdGltZV9pbmRleCA9IDA7CisgICAgd2hpbGUgKHRpbWVfaW5kZXggPCBNQVhfS0VQVF9USU1FUykgeworICAgICAgaWYgKGtlcHRfdGltZXNbdGltZV9pbmRleF0gPiAwKSB7CisJdG90YWxfdGltZXMgKz0ga2VwdF90aW1lc1t0aW1lX2luZGV4XTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwl1bnVzZWRfYnVja2V0cysrOworICAgICAgdGltZV9pbmRleCArPSAxOworICAgIH0KKyAgICB0b3RhbF90aW1lcyAvPSAoTUFYX0tFUFRfVElNRVMtdW51c2VkX2J1Y2tldHMpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJBdmVyYWdlIHJlc3BvbnNlIHRpbWUgJWQgdXNlY3NcbiIsCisJICAgIHRvdGFsX3RpbWVzKTsKKyNlbmRpZgorICB9CisgIHVubGluayhteWFkZHJfdW4uc3VuX3BhdGgpOworfQorDAorIC8qIHRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSByZWNlaXZlIHNpZGUgKG5ldHNlcnZlcikgb2YgYSBER19SUiAqLworIC8qIHRlc3QuICovCit2b2lkCityZWN2X2RnX3JyKCkKK3sKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKworICBzdHJ1Y3QJc29ja2FkZHJfdW4gICAgICAgIG15YWRkcl91biwKKyAgcGVlcmFkZHJfdW47CisgIFNPQ0tFVCBzX2RhdGE7CisgIGludCAJYWRkcmxlbjsKKyAgaW50CXRyYW5zX3JlY2VpdmVkID0gMDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworICAKKyAgc3RydWN0CWRnX3JyX3JlcXVlc3Rfc3RydWN0CSpkZ19ycl9yZXF1ZXN0OworICBzdHJ1Y3QJZGdfcnJfcmVzcG9uc2Vfc3RydWN0CSpkZ19ycl9yZXNwb25zZTsKKyAgc3RydWN0CWRnX3JyX3Jlc3VsdHNfc3RydWN0CSpkZ19ycl9yZXN1bHRzOworICAKKyAgZGdfcnJfcmVxdWVzdCAgPSAKKyAgICAoc3RydWN0IGRnX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBkZ19ycl9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgZGdfcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgZGdfcnJfcmVzdWx0cyAgPSAKKyAgICAoc3RydWN0IGRnX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl9kZ19ycjogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQgKi8KKyAgLyogcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZiAqLworICAvKiBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZSAqLworICAvKiBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X2RnX3JyOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IERHX1JSX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kZ19ycjogdGhlIHJlc3BvbnNlIHR5cGUgaXMgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSBub3cgYWx0ZXIgdGhlIG1lc3NhZ2VfcHRyIHZhcmlhYmxlcyB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnRzIHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0cy4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGdfcnI6IHJlcXVlc3RlZCByZWN2IGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIGRnX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICBkZ19ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kZ19ycjogcmVxdWVzdGVkIHNlbmQgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgZGdfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJICAgIGRnX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgZGdfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplLAorCQkJCSAgIGRnX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIGRnX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKworICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIGRnX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUsCisJCQkJICAgZGdfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJCQkJICAgZGdfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfZGdfcnI6IHJlY2VpdmUgYWxpZ25tZW50IGFuZCBvZmZzZXQgc2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBMZXQncyBjbGVhci1vdXQgb3VyIHNvY2thZGRyIGZvciB0aGUgc2FrZSBvZiBjbGVhbmxpbmVzLiBUaGVuIHdlICovCisgIC8qIGNhbiBwdXQgaW4gT1VSIHZhbHVlcyAhLSkgQXQgc29tZSBwb2ludCwgd2UgbWF5IHdhbnQgdG8gbmFpbCB0aGlzICovCisgIC8qIHNvY2tldCB0byBhIHBhcnRpY3VsYXIgbmV0d29yay1sZXZlbCBhZGRyZXNzLCBidXQgZm9yIG5vdywgKi8KKyAgLyogSU5BRERSX0FOWSBzaG91bGQgYmUganVzdCBmaW5lLiAqLworICAKKyAgYnplcm8oKGNoYXIgKikmbXlhZGRyX3VuLAorCXNpemVvZihteWFkZHJfdW4pKTsKKyAgbXlhZGRyX3VuLnN1bl9mYW1pbHkgICAgICA9IEFGX1VOSVg7CisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl9kZ19ycjogZ3JhYmJpbmcgYSBzb2NrZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisKKyAgLyogY3JlYXRlX3VuaXhfc29ja2V0IGV4cGVjdHMgdG8gZmluZCBzb21lIHRoaW5ncyBpbiB0aGUgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcywgc28gc2V0IHRoZSBnbG9iYWxzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuICovCisgIC8qIG9uY2UgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCB3ZSB3aWxsIHNldCB0aGUgcmVzcG9uc2UgdmFsdWVzICovCisgIC8qIGJhc2VkIG9uIHRoZSB1cGRhdGVkIHZhbHVlIG9mIHRob3NlIGdsb2JhbHMuIHJhaiA3Lzk0ICovCisgIGxzc19zaXplX3JlcSA9IGRnX3JyX3JlcXVlc3QtPnNlbmRfYnVmX3NpemU7CisgIGxzcl9zaXplX3JlcSA9IGRnX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisKKyAgc19kYXRhID0gY3JlYXRlX3VuaXhfc29ja2V0KEFGX1VOSVgsCisJCQkgICAgICBTT0NLX0RHUkFNKTsKKyAgCisgIGlmIChzX2RhdGEgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBMZXQncyBnZXQgYW4gYWRkcmVzcyBhc3NpZ25lZCB0byB0aGlzIHNvY2tldCBzbyB3ZSBjYW4gdGVsbCB0aGUgKi8KKyAgLyogaW5pdGlhdG9yIGhvdyB0byByZWFjaCB0aGUgZGF0YSBzb2NrZXQuIFRoZXJlIG1heSBiZSBhIGRlc2lyZSB0byAqLworICAvKiBuYWlsIHRoaXMgc29ja2V0IHRvIGEgc3BlY2lmaWMgSVAgYWRkcmVzcyBpbiBhIG11bHRpLWhvbWVkLCAqLworICAvKiBtdWx0aS1jb25uZWN0aW9uIHNpdHVhdGlvbiwgYnV0IGZvciBub3csIHdlJ2xsIGlnbm9yZSB0aGUgaXNzdWUgKi8KKyAgLyogYW5kIGNvbmNlbnRyYXRlIG9uIHNpbmdsZSBjb25uZWN0aW9uIHRlc3RpbmcuICovCisgIAorICBzdHJjcHkobXlhZGRyX3VuLnN1bl9wYXRoLHRlbXBuYW0ocGF0aF9wcmVmaXgsIm5ldHBlcmYuIikpOworICBpZiAoYmluZChzX2RhdGEsCisJICAgKHN0cnVjdCBzb2NrYWRkciAqKSZteWFkZHJfdW4sCisJICAgc2l6ZW9mKG15YWRkcl91bikpID09IFNPQ0tFVF9FUlJPUikgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgdW5saW5rKG15YWRkcl91bi5zdW5fcGF0aCk7CisgICAgY2xvc2Uoc19kYXRhKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl91biBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHN0cmNweShkZ19ycl9yZXNwb25zZS0+dW5peF9wYXRoLG15YWRkcl91bi5zdW5fcGF0aCk7CisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIDAuMCB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgZGdfcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBpZiAoZGdfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICBkZ19ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIGRnX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUoZGdfcnJfcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgICAKKyAgLyogYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3BvbnNlIGJhY2sgdG8gdGhlIGluaXRpYXRvciwgcHVsbCBzb21lIG9mICovCisgIC8qIHRoZSBzb2NrZXQgcGFybXMgZnJvbSB0aGUgZ2xvYmFscyAqLworICBkZ19ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICBkZ19ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZSA9IGxzcl9zaXplOworIAorICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KGRnX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIGlmIChkZ19ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCA+IDApIHsKKyAgICB0aW1lc191cCA9IDA7CisgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICBzdGFydF90aW1lcihkZ19ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0gZGdfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKKyAgfQorICAKKyAgYWRkcmxlbiA9IHNpemVvZihwZWVyYWRkcl91bik7CisgIGJ6ZXJvKChjaGFyICopJnBlZXJhZGRyX3VuLCBhZGRybGVuKTsKKyAgCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAKKyAgICAvKiByZWNlaXZlIHRoZSByZXF1ZXN0IGZyb20gdGhlIG90aGVyIHNpZGUgKi8KKyAgICBmcHJpbnRmKHdoZXJlLCJzb2NrZXQgJWQgcHRyICVwIHNpemUgJWRcbiIsCisJICAgIHNfZGF0YSwKKwkgICAgcmVjdl9yaW5nLT5idWZmZXJfcHRyLAorCSAgICBkZ19ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgaWYgKHJlY3Zmcm9tKHNfZGF0YSwKKwkJIHJlY3ZfcmluZy0+YnVmZmVyX3B0ciwKKwkJIGRnX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJIDAsCisJCSAoc3RydWN0IHNvY2thZGRyICopJnBlZXJhZGRyX3VuLAorCQkgJmFkZHJsZW4pICE9IGRnX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSkgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJLyogd2UgbXVzdCBoYXZlIGhpdCB0aGUgZW5kIG9mIHRlc3QgdGltZS4gKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgICBmcHJpbnRmKHdoZXJlLCJlcnJvciBvbiByZWN2ZnJvbSBlcnJubyAlZFxuIixlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgdW5saW5rKG15YWRkcl91bi5zdW5fcGF0aCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyAgICAvKiBOb3csIHNlbmQgdGhlIHJlc3BvbnNlIHRvIHRoZSByZW1vdGUgKi8KKyAgICBpZiAoc2VuZHRvKHNfZGF0YSwKKwkgICAgICAgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCSAgICAgICBkZ19ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCSAgICAgICAwLAorCSAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnBlZXJhZGRyX3VuLAorCSAgICAgICBhZGRybGVuKSAhPSBkZ19ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiB3ZSBoYXZlIGhpdCBlbmQgb2YgdGVzdCB0aW1lLiAqLworCWJyZWFrOworICAgICAgfQorICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICAgIGZwcmludGYod2hlcmUsImVycm9yIG9uIHJlY3Zmcm9tIGVycm5vICVkXG4iLGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICB1bmxpbmsobXlhZGRyX3VuLnN1bl9wYXRoKTsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHNlbmRfcmluZyA9IHNlbmRfcmluZy0+bmV4dDsKKyAgICAKKyAgICB0cmFuc19yZWNlaXZlZCsrOworICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInJlY3ZfZGdfcnI6IFRyYW5zYWN0aW9uICVkIGNvbXBsZXRlLlxuIiwKKwkgICAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgIH0KKyAgICAKKyAgfQorICAKKyAgCisgIC8qIFRoZSBsb29wIG5vdyBleGl0cyBkdWUgdG8gdGltZW91dCBvciB0cmFuc2FjdGlvbiBjb3VudCBiZWluZyAqLworICAvKiByZWFjaGVkICovCisgIAorICBjcHVfc3RvcChkZ19ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lc191cCkgeworICAgIC8qIHdlIGVuZGVkIHRoZSB0ZXN0IGJ5IHRpbWUsIHdoaWNoIHdhcyBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyAgICAvKiBsb25nZXIgdGhhbiB3ZSB3YW50ZWQgdG8gcnVuLiBzbywgd2Ugd2FudCB0byBzdWJ0cmFjdCAqLworICAgIC8qIFBBRF9USU1FIGZyb20gdGhlIGVsYXBzZWRfdGltZS4gKi8KKyAgICBlbGFwc2VkX3RpbWUgLT0gUEFEX1RJTUU7CisgIH0KKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X2RnX3JyOiBnb3QgJWQgdHJhbnNhY3Rpb25zXG4iLAorCSAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgZGdfcnJfcmVzdWx0cy0+Ynl0ZXNfcmVjZWl2ZWQJPSAodHJhbnNfcmVjZWl2ZWQgKiAKKwkJCQkJICAgKGRnX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSArIAorCQkJCQkgICAgZGdfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSkpOworICBkZ19ycl9yZXN1bHRzLT50cmFuc19yZWNlaXZlZAk9IHRyYW5zX3JlY2VpdmVkOworICBkZ19ycl9yZXN1bHRzLT5lbGFwc2VkX3RpbWUJPSBlbGFwc2VkX3RpbWU7CisgIGlmIChkZ19ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIGRnX3JyX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbChlbGFwc2VkX3RpbWUpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl9kZ19ycjogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICB1bmxpbmsobXlhZGRyX3VuLnN1bl9wYXRoKTsKKyAgCit9CisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgKG5ldHNlcnZlcikgc2lkZSBvZiBhIFNUUkVBTV9SUiAqLworIC8qIHRlc3QgKi8KKwwKK3ZvaWQKK3JlY3Zfc3RyZWFtX3JyKCkKK3sKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBzdHJ1Y3QJc29ja2FkZHJfdW4gICAgICAgIG15YWRkcl91biwKKyAgcGVlcmFkZHJfdW47CisgIFNPQ0tFVCBzX2xpc3RlbixzX2RhdGE7CisgIGludCAJYWRkcmxlbjsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CXRyYW5zX3JlY2VpdmVkID0gMDsKKyAgaW50CXRyYW5zX3JlbWFpbmluZzsKKyAgaW50CWJ5dGVzX3NlbnQ7CisgIGludAlyZXF1ZXN0X2J5dGVzX3JlY3ZkOworICBpbnQJcmVxdWVzdF9ieXRlc19yZW1haW5pbmc7CisgIGludAl0aW1lZF9vdXQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICBzdHJ1Y3QJc3RyZWFtX3JyX3JlcXVlc3Rfc3RydWN0CSpzdHJlYW1fcnJfcmVxdWVzdDsKKyAgc3RydWN0CXN0cmVhbV9ycl9yZXNwb25zZV9zdHJ1Y3QJKnN0cmVhbV9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXN0cmVhbV9ycl9yZXN1bHRzX3N0cnVjdAkqc3RyZWFtX3JyX3Jlc3VsdHM7CisgIAorICBzdHJlYW1fcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3Qgc3RyZWFtX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICBzdHJlYW1fcnJfcmVzcG9uc2UgPQorICAgIChzdHJ1Y3Qgc3RyZWFtX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHN0cmVhbV9ycl9yZXN1bHRzID0KKyAgICAoc3RydWN0IHN0cmVhbV9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3Zfc3RyZWFtX3JyOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwgKi8KKyAgLyogc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGRldGVybWluZWQsICovCisgIC8qIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvIHdyb25nIGZvciBhbnkgKi8KKyAgLyogcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQgKi8KKyAgLyogd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMgKi8KKyAgLyogdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cyB1bmV4cGVjdGVkICovCisgIC8qIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc3RyZWFtX3JyOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IFNUUkVBTV9SUl9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc3RyZWFtX3JyOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIGFsbG9jYXRlIHRoZSByZWN2IGFuZCBzZW5kIHJpbmdzIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnRzICovCisgIC8qIGFuZCBvZmZzZXRzLiByYWogNy85NCAqLworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3N0cmVhbV9ycjogcmVxdWVzdGVkIHJlY3YgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgc3RyZWFtX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICBzdHJlYW1fcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc3RyZWFtX3JyOiByZXF1ZXN0ZWQgc2VuZCBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICBzdHJlYW1fcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJICAgIHN0cmVhbV9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGF0IHNvbWUgcG9pbnQsIHRoZXNlIG5lZWQgdG8gY29tZSB0byB1cyBmcm9tIHRoZSByZW1vdGUgc3lzdGVtICovCisgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKworICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIHN0cmVhbV9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgIHN0cmVhbV9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkJCQkgICBzdHJlYW1fcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgc3RyZWFtX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJCQkgICBzdHJlYW1fcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJCQkJICAgc3RyZWFtX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKworICAKKyAgLyogTGV0J3MgY2xlYXItb3V0IG91ciBzb2NrYWRkciBmb3IgdGhlIHNha2Ugb2YgY2xlYW5saW5lcy4gVGhlbiB3ZSAqLworICAvKiBjYW4gcHV0IGluIE9VUiB2YWx1ZXMgIS0pIEF0IHNvbWUgcG9pbnQsIHdlIG1heSB3YW50IHRvIG5haWwgdGhpcyAqLworICAvKiBzb2NrZXQgdG8gYSBwYXJ0aWN1bGFyIG5ldHdvcmstbGV2ZWwgYWRkcmVzcywgYnV0IGZvciBub3csICovCisgIC8qIElOQUREUl9BTlkgc2hvdWxkIGJlIGp1c3QgZmluZS4gKi8KKyAgCisgIGJ6ZXJvKChjaGFyICopJm15YWRkcl91biwKKwlzaXplb2YobXlhZGRyX3VuKSk7CisgIG15YWRkcl91bi5zdW5fZmFtaWx5ICAgICAgPSBBRl9VTklYOworICAKKyAgLyogR3JhYiBhIHNvY2tldCB0byBsaXN0ZW4gb24sIGFuZCB0aGVuIGxpc3RlbiBvbiBpdC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc3RyZWFtX3JyOiBncmFiYmluZyBhIHNvY2tldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIGNyZWF0ZV91bml4X3NvY2tldCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZV9yZXEgPSBzdHJlYW1fcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemVfcmVxID0gc3RyZWFtX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIAorICBzX2xpc3RlbiA9IGNyZWF0ZV91bml4X3NvY2tldChBRl9VTklYLAorCQkJCVNPQ0tfU1RSRUFNKTsKKyAgCisgIGlmIChzX2xpc3RlbiA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIExldCdzIGdldCBhbiBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoaXMgc29ja2V0IHNvIHdlIGNhbiB0ZWxsIHRoZSAqLworICAvKiBpbml0aWF0b3IgaG93IHRvIHJlYWNoIHRoZSBkYXRhIHNvY2tldC4gVGhlcmUgbWF5IGJlIGEgZGVzaXJlIHRvICovCisgIC8qIG5haWwgdGhpcyBzb2NrZXQgdG8gYSBzcGVjaWZpYyBJUCBhZGRyZXNzIGluIGEgbXVsdGktaG9tZWQsICovCisgIC8qIG11bHRpLWNvbm5lY3Rpb24gc2l0dWF0aW9uLCBidXQgZm9yIG5vdywgd2UnbGwgaWdub3JlIHRoZSBpc3N1ZSAqLworICAvKiBhbmQgY29uY2VudHJhdGUgb24gc2luZ2xlIGNvbm5lY3Rpb24gdGVzdGluZy4gKi8KKyAgCisgIHN0cmNweShteWFkZHJfdW4uc3VuX3BhdGgsdGVtcG5hbShwYXRoX3ByZWZpeCwibmV0cGVyZi4iKSk7CisgIGlmIChiaW5kKHNfbGlzdGVuLAorCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX3VuLAorCSAgIHNpemVvZihteWFkZHJfdW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHVubGluayhteWFkZHJfdW4uc3VuX3BhdGgpOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93LCBsZXQncyBzZXQtdXAgdGhlIHNvY2tldCB0byBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zICovCisgIGlmIChsaXN0ZW4oc19saXN0ZW4sIDUpID09IFNPQ0tFVF9FUlJPUikgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBOb3cgbXlhZGRyX3VuIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzICovCisgIC8qIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0IHRoZSAqLworICAvKiBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiAqLworICAKKyAgc3RyY3B5KHN0cmVhbV9ycl9yZXNwb25zZS0+dW5peF9wYXRoLG15YWRkcl91bi5zdW5fcGF0aCk7CisgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vICAgPSAwOworICAKKyAgLyogQnV0IHdhaXQsIHRoZXJlJ3MgbW9yZS4gSWYgdGhlIGluaXRpYXRvciB3YW50ZWQgY3B1IG1lYXN1cmVtZW50cywgKi8KKyAgLyogdGhlbiB3ZSBtdXN0IGNhbGwgdGhlIGNhbGlicmF0ZSByb3V0aW5lLCB3aGljaCB3aWxsIHJldHVybiB0aGUgbWF4ICovCisgIC8qIHJhdGUgYmFjayB0byB0aGUgaW5pdGlhdG9yLiBJZiB0aGUgQ1BVIHdhcyBub3QgdG8gYmUgbWVhc3VyZWQsIG9yICovCisgIC8qIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNhbGlicmF0aW9uLCB3ZSB3aWxsIHJldHVybiBhIDAuMCB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgc3RyZWFtX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IDAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgaWYgKHN0cmVhbV9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHN0cmVhbV9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHN0cmVhbV9ycl9yZXNwb25zZS0+Y3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KHN0cmVhbV9ycl9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgCisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHN0cmVhbV9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICBzdHJlYW1fcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKworICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorICBhZGRybGVuID0gc2l6ZW9mKHBlZXJhZGRyX3VuKTsKKyAgCisgIGlmICgoc19kYXRhID0gYWNjZXB0KHNfbGlzdGVuLAorCQkgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyYWRkcl91biwKKwkJICAgICAgICZhZGRybGVuKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAvKiBMZXQncyBqdXN0IHB1bnQuIFRoZSByZW1vdGUgd2lsbCBiZSBnaXZlbiBzb21lIGluZm9ybWF0aW9uICovCisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3Zfc3RyZWFtX3JyOiBhY2NlcHQgY29tcGxldGVzIG9uIHRoZSBkYXRhIGNvbm5lY3Rpb24uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBOb3cgaXQncyB0aW1lIHRvIHN0YXJ0IHJlY2VpdmluZyBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLiBXZSB3aWxsICovCisgIC8qIGZpcnN0IGdyYWIgdGhlIGFwcm9wcmlhdGUgY291bnRlcnMgYW5kIHRoZW4gc3RhcnQgZ3JhYmJpbmcuICovCisgIAorICBjcHVfc3RhcnQoc3RyZWFtX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSBzZW5kZXIgZG9lcyBhIHNodXRkb3duLCB3aGljaCB3aWxsICovCisgIC8qIHJldHVybiBhIGxlbmd0aCBvZiB6ZXJvICAgKi8KKyAgCisgIGlmIChzdHJlYW1fcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggPiAwKSB7CisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIoc3RyZWFtX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICsgUEFEX1RJTUUpOworICB9CisgIGVsc2UgeworICAgIHRpbWVzX3VwID0gMTsKKyAgICB0cmFuc19yZW1haW5pbmcgPSBzdHJlYW1fcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKKyAgfQorICAKKyAgd2hpbGUgKCghdGltZXNfdXApIHx8ICh0cmFuc19yZW1haW5pbmcgPiAwKSkgeworICAgIHRlbXBfbWVzc2FnZV9wdHIgPSByZWN2X3JpbmctPmJ1ZmZlcl9wdHI7CisgICAgcmVxdWVzdF9ieXRlc19yZW1haW5pbmcJPSBzdHJlYW1fcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplOworICAgIAorICAgIC8qIHJlY2VpdmUgdGhlIHJlcXVlc3QgZnJvbSB0aGUgb3RoZXIgc2lkZSAqLworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiYWJvdXQgdG8gcmVjZWl2ZSBmb3IgdHJhbnMgJWRcbiIsdHJhbnNfcmVjZWl2ZWQpOworICAgICAgZnByaW50Zih3aGVyZSwidGVtcF9tZXNzYWdlX3B0ciBpcyAlcFxuIix0ZW1wX21lc3NhZ2VfcHRyKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIHdoaWxlKHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nID4gMCkgeworICAgICAgaWYoKHJlcXVlc3RfYnl0ZXNfcmVjdmQ9cmVjdihzX2RhdGEsCisJCQkJICAgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCQkgICByZXF1ZXN0X2J5dGVzX3JlbWFpbmluZywKKwkJCQkgICAwKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJaWYgKGVycm5vID09IEVJTlRSKSB7CisJICAvKiB0aGUgdGltZXIgcG9wcGVkICovCisJICB0aW1lZF9vdXQgPSAxOworCSAgYnJlYWs7CisJfQorCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisJc2VuZF9yZXNwb25zZSgpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZXF1ZXN0X2J5dGVzX3JlbWFpbmluZyAtPSByZXF1ZXN0X2J5dGVzX3JlY3ZkOworCXRlbXBfbWVzc2FnZV9wdHIgICs9IHJlcXVlc3RfYnl0ZXNfcmVjdmQ7CisgICAgICB9CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLCJqdXN0IHJlY2VpdmVkIGZvciB0cmFucyAlZFxuIix0cmFuc19yZWNlaXZlZCk7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBiYXNlZCBvbiB0aW1lIC0gbGV0cyAqLworICAgICAgLyogYmFpbCBvdXQgb2YgaGVyZSBub3cuLi4gKi8KKyAgICAgIGZwcmludGYod2hlcmUsInlvNVxuIik7CisgICAgICBmZmx1c2god2hlcmUpOwkJCQkJCQorICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSAqLworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiYWJvdXQgdG8gc2VuZCBmb3IgdHJhbnMgJWRcbiIsdHJhbnNfcmVjZWl2ZWQpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgaWYoKGJ5dGVzX3NlbnQ9c2VuZChzX2RhdGEsCisJCQlzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCQlzdHJlYW1fcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSwKKwkJCTApKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHRoZSB0ZXN0IHRpbWVyIGhhcyBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWZwcmludGYod2hlcmUsInlvNlxuIik7CisJZmZsdXNoKHdoZXJlKTsJCQkJCQkKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gOTk3OworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworCisgICAgdHJhbnNfcmVjZWl2ZWQrKzsKKyAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisgICAgICB0cmFuc19yZW1haW5pbmctLTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJyZWN2X3N0cmVhbV9ycjogVHJhbnNhY3Rpb24gJWQgY29tcGxldGVcbiIsCisJICAgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIH0KKyAgCisgIAorICAvKiBUaGUgbG9vcCBub3cgZXhpdHMgZHVlIHRvIHRpbWVvdXQgb3IgdHJhbnNhY3Rpb24gY291bnQgYmVpbmcgKi8KKyAgLyogcmVhY2hlZCAqLworICAKKyAgY3B1X3N0b3Aoc3RyZWFtX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1LCZlbGFwc2VkX3RpbWUpOworICAKKyAgaWYgKHRpbWVkX291dCkgeworICAgIC8qIHdlIGVuZGVkIHRoZSB0ZXN0IGJ5IHRpbWUsIHdoaWNoIHdhcyBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyAgICAvKiBsb25nZXIgdGhhbiB3ZSB3YW50ZWQgdG8gcnVuLiBzbywgd2Ugd2FudCB0byBzdWJ0cmFjdCAqLworICAgIC8qIFBBRF9USU1FIGZyb20gdGhlIGVsYXBzZWRfdGltZS4gKi8KKyAgICBlbGFwc2VkX3RpbWUgLT0gUEFEX1RJTUU7CisgIH0KKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3N0cmVhbV9ycjogZ290ICVkIHRyYW5zYWN0aW9uc1xuIiwKKwkgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHN0cmVhbV9ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZAk9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCQkgICAoc3RyZWFtX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSArIAorCQkJCQkgICAgc3RyZWFtX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUpKTsKKyAgc3RyZWFtX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkCT0gdHJhbnNfcmVjZWl2ZWQ7CisgIHN0cmVhbV9ycl9yZXN1bHRzLT5lbGFwc2VkX3RpbWUJPSBlbGFwc2VkX3RpbWU7CisgIGlmIChzdHJlYW1fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICBzdHJlYW1fcnJfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3N0cmVhbV9ycjogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICB1bmxpbmsobXlhZGRyX3VuLnN1bl9wYXRoKTsKK30KKwwKK3ZvaWQKK3ByaW50X3VuaXhfdXNhZ2UoKQoreworCisgIGZ3cml0ZSh1bml4X3VzYWdlLCBzaXplb2YoY2hhciksIHN0cmxlbih1bml4X3VzYWdlKSwgc3Rkb3V0KTsKKyAgZXhpdCgxKTsKKworfQordm9pZAorc2Nhbl91bml4X2FyZ3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyNkZWZpbmUgVU5JWF9BUkdTICJobTpNOnA6cjpzOlM6IgorICBleHRlcm4gY2hhcgkqb3B0YXJnOwkgIC8qIHBvaW50ZXIgdG8gb3B0aW9uIHN0cmluZwkqLworICAKKyAgaW50CQljOworICAKKyAgY2hhcgkKKyAgICBhcmcxW0JVRlNJWl0sICAvKiBhcmd1bWVudCBob2xkZXJzCQkqLworICAgIGFyZzJbQlVGU0laXTsKKyAgCisgIGluaXRfdGVzdF92YXJzKCk7CisKKyAgaWYgKG5vX2NvbnRyb2wpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiVGhlIFVOSVggdGVzdHMgZG8gbm90IGtub3cgaG93IHRvIHJ1biB3aXRoIG5vIGNvbnRyb2wgY29ubmVjdGlvblxuIik7CisgICAgZXhpdCgtMSk7CisgIH0KKworICAvKiBHbyB0aHJvdWdoIGFsbCB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgYnJlYWsgdGhlbSAqLworICAvKiBvdXQuIEZvciB0aG9zZSBvcHRpb25zIHRoYXQgdGFrZSB0d28gcGFybXMsIHNwZWNpZnlpbmcgb25seSAqLworICAvKiB0aGUgZmlyc3Qgd2lsbCBzZXQgYm90aCB0byB0aGF0IHZhbHVlLiBTcGVjaWZ5aW5nIG9ubHkgdGhlICovCisgIC8qIHNlY29uZCB3aWxsIGxlYXZlIHRoZSBmaXJzdCB1bnRvdWNoZWQuIFRvIGNoYW5nZSBvbmx5IHRoZSAqLworICAvKiBmaXJzdCwgdXNlIHRoZSBmb3JtICJmaXJzdCwiIChzZWUgdGhlIHJvdXRpbmUgYnJlYWtfYXJncy4uICovCisgIAorICB3aGlsZSAoKGM9IGdldG9wdChhcmdjLCBhcmd2LCBVTklYX0FSR1MpKSAhPSBFT0YpIHsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICBjYXNlICc/JzoJCisgICAgY2FzZSAnaCc6CisgICAgICBwcmludF91bml4X3VzYWdlKCk7CisgICAgICBleGl0KDEpOworICAgIGNhc2UgJ3AnOgorICAgICAgLyogc2V0IHRoZSBwYXRoIHByZWZpeCAoZGlyZWN0b3J5KSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgKi8KKyAgICAgIC8qIHBpcGVzLiBhdCBzb21lIHBvaW50LCB0aGVyZSBzaG91bGQgYmUgc29tZSBlcnJvciBjaGVja2luZy4gKi8KKyAgICAgIHN0cmNweShwYXRoX3ByZWZpeCxvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgICAvKiBzZXQgbG9jYWwgc29ja2V0IHNpemVzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJbHNzX3NpemVfcmVxID0gYXRvaShhcmcxKTsKKyAgICAgIGlmIChhcmcyWzBdKQorCWxzcl9zaXplX3JlcSA9IGF0b2koYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdTJzoKKyAgICAgIC8qIHNldCByZW1vdGUgc29ja2V0IHNpemVzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJcnNzX3NpemUgPSBhdG9pKGFyZzEpOworICAgICAgaWYgKGFyZzJbMF0pCisJcnNyX3NpemUgPSBhdG9pKGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6CisgICAgICAvKiBzZXQgdGhlIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlyZXFfc2l6ZSA9IGF0b2koYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJcnNwX3NpemUgPSBhdG9pKGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgICAvKiBzZXQgdGhlIHNlbmQgc2l6ZSAqLworICAgICAgc2VuZF9zaXplID0gYXRvaShvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgICAvKiBzZXQgdGhlIHJlY3Ygc2l6ZSAqLworICAgICAgcmVjdl9zaXplID0gYXRvaShvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgfTsKKyAgfQorfQorI2VuZGlmIC8qIFdBTlRfVU5JWCAqLyAKZGlmZiAtLWdpdCBhL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfdW5peC5oIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF91bml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViMzkzYgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfdW5peC5oCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorKi8KKworIC8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgdGVzdC1zcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbmV0cGVyZidzICovCisgLyogRExQSSB0ZXN0cyAqLworCitzdHJ1Y3QJc3RyZWFtX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY2VpdmVfc2l6ZTsgICAvKiBob3cgbWFueSBieXRlcyBkbyB3ZSB3YW50IHRvICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWNlaXZlIGF0IG9uZSB0aW1lPyAqLworICBpbnQJcmVjdl9hbGlnbm1lbnQ7IC8qIHdoYXQgaXMgdGhlIGFsaWdubWVudCBvZiB0aGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlY2VpdmUgYnVmZmVyPyAqLworICBpbnQJcmVjdl9vZmZzZXQ7ICAgIC8qIGFuZCBhdCB3aGF0IG9mZnNldCBmcm9tIHRoYXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsaWdubWVudD8gKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0aWxpemF0aW9uIG1lYXN1cmVkPyAqLworICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbHJlYWR5PyAqLyAKKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludCAgIGRpcnR5X2NvdW50OyAgICAvKiBob3cgbWFueSBpbnRlZ2VycyBpbiB0aGUgcmVjZWl2ZSBidWZmZXIgKi8KKwkJCS8qIHNob3VsZCBiZSBtYWRlIGRpcnR5IGJlZm9yZSBjYWxsaW5nIHJlY3Y/ICovCisgIGludCAgIGNsZWFuX2NvdW50OyAgICAvKiBob3cgbWFueSBpbnRlZ2VycyBzaG91bGQgYmUgcmVhZCBmcm9tIHRoZSAqLworCQkJLyogcmVjdiBidWZmZXIgYmVmb3JlIGNhbGxpbmcgcmVjdj8gKi8gCisgIGludCAgIHBhdGhfbmFtZV9sZW47ICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nLiB0aGlzICovCisJCQkvKiBpcyB1c2VkIHRvIHB1dCBpdCBpbnRvIHRoZSBwcm9wZXIgb3JkZXIgb24gKi8KKwkJCS8qIEAjJCUgYnl0ZS1zd2FwcGVkIGJveGVzLi4uICovCisgIGNoYXIgIHVuaXhfcGF0aFszMl07IC8qIHRoZSBwYXRoICovCit9OworCitzdHJ1Y3QJc3RyZWFtX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY2VpdmVfc2l6ZTsKKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlkYXRhX3BvcnRfbnVtYmVyOwkvKiBjb25uZWN0IHRvIG1lIGhlcmUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludCAgIHBhdGhfbmFtZV9sZW47ICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nLiB0aGlzICovCisJCQkvKiBpcyB1c2VkIHRvIHB1dCBpdCBpbnRvIHRoZSBwcm9wZXIgb3JkZXIgb24gKi8KKwkJCS8qIEAjJCUgYnl0ZS1zd2FwcGVkIGJveGVzLi4uICovCisgIGNoYXIgIHVuaXhfcGF0aFszMl07IC8qIHRoZSBwYXRoICovCit9OworCitzdHJ1Y3Qgc3RyZWFtX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCB7CisgIGludAlieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIGZsb2F0CWVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CWNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICBudW1fY3B1czsKK307CisKK3N0cnVjdAlzdHJlYW1fcnJfcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAlzZW5kX2FsaWdubWVudDsKKyAgaW50CXNlbmRfb2Zmc2V0OworICBpbnQJcmVxdWVzdF9zaXplOworICBpbnQJcmVzcG9uc2Vfc2l6ZTsKKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CS8qIGRvIHdlIGtub3cgaG93IGZhc3QgdGhlIGNwdSBpcz8JKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludCAgIHBhdGhfbmFtZV9sZW47ICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nLiB0aGlzICovCisJCQkvKiBpcyB1c2VkIHRvIHB1dCBpdCBpbnRvIHRoZSBwcm9wZXIgb3JkZXIgb24gKi8KKwkJCS8qIEAjJCUgYnl0ZS1zd2FwcGVkIGJveGVzLi4uICovCisgIGNoYXIgIHVuaXhfcGF0aFszMl07IC8qIHRoZSBwYXRoICovCit9OworCitzdHJ1Y3QJc3RyZWFtX3JyX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludCAgIHBhdGhfbmFtZV9sZW47ICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nLiB0aGlzICovCisJCQkvKiBpcyB1c2VkIHRvIHB1dCBpdCBpbnRvIHRoZSBwcm9wZXIgb3JkZXIgb24gKi8KKwkJCS8qIEAjJCUgYnl0ZS1zd2FwcGVkIGJveGVzLi4uICovCisgIGNoYXIgIHVuaXhfcGF0aFszMl07IC8qIHRoZSBwYXRoIHRvIHRoZSBkbHBpIGRldmljZSAqLworfTsKKworc3RydWN0IHN0cmVhbV9ycl9yZXN1bHRzX3N0cnVjdCB7CisgIGludAlieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CWVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CWNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICBudW1fY3B1czsKK307CisKK3N0cnVjdAlkZ19zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsKKyAgaW50CW1lc3NhZ2Vfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAltZWFzdXJlX2NwdTsKKyAgZmxvYXQJY3B1X3JhdGU7CisgIGludAl0ZXN0X2xlbmd0aDsKKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBwYXRoX25hbWVfbGVuOyAgIC8qIHRoZSBsZW5ndGggb2YgdGhlIGRldmljZSBuYW1lIHN0cmluZy4gdGhpcyAqLworCQkJLyogaXMgdXNlZCB0byBwdXQgaXQgaW50byB0aGUgcHJvcGVyIG9yZGVyIG9uICovCisJCQkvKiBAIyQlIGJ5dGUtc3dhcHBlZCBib3hlcy4uLiAqLworICBjaGFyICB1bml4X3BhdGhbMzJdOyAvKiB0aGUgcGF0aCAqLworfTsKKworc3RydWN0CWRnX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsKKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAltZWFzdXJlX2NwdTsKKyAgaW50CXRlc3RfbGVuZ3RoOworICBmbG9hdAljcHVfcmF0ZTsKKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLworICBpbnQJc29fc25kYXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIHBhdGhfbmFtZV9sZW47ICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nLiB0aGlzICovCisJCQkvKiBpcyB1c2VkIHRvIHB1dCBpdCBpbnRvIHRoZSBwcm9wZXIgb3JkZXIgb24gKi8KKwkJCS8qIEAjJCUgYnl0ZS1zd2FwcGVkIGJveGVzLi4uICovCisgIGNoYXIgIHVuaXhfcGF0aFszMl07IC8qIHRoZSBwYXRoICovCit9OworCitzdHJ1Y3QJZGdfc3RyZWFtX3Jlc3VsdHNfc3RydWN0IHsKKyAgaW50CW1lc3NhZ2VzX3JlY3ZkOworICBpbnQJYnl0ZXNfcmVjZWl2ZWQ7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgZmxvYXQJY3B1X3V0aWw7CisgIGludCAgIG51bV9jcHVzOworfTsKKworCitzdHJ1Y3QJZGdfcnJfcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAlzZW5kX2FsaWdubWVudDsKKyAgaW50CXNlbmRfb2Zmc2V0OworICBpbnQJcmVxdWVzdF9zaXplOworICBpbnQJcmVzcG9uc2Vfc2l6ZTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGZsb2F0CWNwdV9yYXRlOwkvKiBkbyB3ZSBrbm93IGhvdyBmYXN0IHRoZSBjcHUgaXM/CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCByZWNlaXZlICovCisJCQkvKiBjb3BpZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgcGF0aF9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgdW5peF9wYXRoWzMyXTsgLyogdGhlIHBhdGggKi8KK307CisKK3N0cnVjdAlkZ19ycl9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGZsb2F0CWNwdV9yYXRlOwkJLyogY291bGQgd2UgbWVhc3VyZQkqLworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgcGF0aF9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgdW5peF9wYXRoWzMyXTsgLyogdGhlIHBhdGggKi8KK307CisKK3N0cnVjdCBkZ19ycl9yZXN1bHRzX3N0cnVjdCB7CisgIGludAlieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CWVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CWNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICBudW1fY3B1czsKK307CisKK2V4dGVybiB2b2lkIHNjYW5fdW5peF9hcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10pOworCitleHRlcm4gdm9pZCBzZW5kX3N0cmVhbV9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKTsKK2V4dGVybiB2b2lkIHNlbmRfc3RyZWFtX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSk7CitleHRlcm4gdm9pZCBzZW5kX2RnX3N0cmVhbShjaGFyIHJlbW90ZV9ob3N0W10pOworZXh0ZXJuIHZvaWQgc2VuZF9kZ19ycihjaGFyIHJlbW90ZV9ob3N0W10pOworCitleHRlcm4gdm9pZCByZWN2X3N0cmVhbV9zdHJlYW0oKTsKK2V4dGVybiB2b2lkIHJlY3Zfc3RyZWFtX3JyKCk7CitleHRlcm4gdm9pZCByZWN2X2RnX3N0cmVhbSgpOworZXh0ZXJuIHZvaWQgcmVjdl9kZ19ycigpOwpkaWZmIC0tZ2l0IGEvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF94dGkuYyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfeHRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyOTFlYgotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYtMi40LjUvc3JjL25ldHRlc3RfeHRpLmMKQEAgLTAsMCArMSw2MDI1IEBACisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpZmRlZiBXQU5UX1hUSQorI2lmbmRlZiBsaW50CitjaGFyCW5ldHRlc3RfeHRpX2lkW109IlwKK0AoIyluZXR0ZXN0X3h0aS5jIChjKSBDb3B5cmlnaHQgMTk5NS0yMDA4IEhld2xldHQtUGFja2FyZCBDby4gVmVyc2lvbiAyLjQuNSI7CisjZWxzZQorI2RlZmluZSBESVJUWQorI2RlZmluZSBXQU5UX0hJU1RPR1JBTQorI2RlZmluZSBXQU5UX0lOVEVSVkFMUworI2VuZGlmIC8qIGxpbnQgKi8KKworI2lmZGVmIFdJTjMyCisjZXJyb3IgWFRJIEludGVyZmFjZSB0ZXN0cyBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciBXaW5kb3dzCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCQkJCQkJKi8KKy8qCW5ldHRlc3RfeHRpLmMJCQkJCQkqLworLyoJCQkJCQkJCSovCisvKiAgICAgIHRoZSBYVEkgYXJncyBwYXJzaW5nIHJvdXRpbmUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzY2FuX3h0aV9hcmdzKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qCXRoZSBhY3R1YWwgdGVzdCByb3V0aW5lcy4uLgkJCQkqLworLyoJCQkJCQkJCSovCisvKglzZW5kX3h0aV90Y3Bfc3RyZWFtKCkJcGVyZm9ybSBhIHRjcCBzdHJlYW0gdGVzdAkqLworLyoJcmVjdl94dGlfdGNwX3N0cmVhbSgpCQkJCQkqLworLyoJc2VuZF94dGlfdGNwX3JyKCkJcGVyZm9ybSBhIHRjcCByZXF1ZXN0L3Jlc3BvbnNlCSovCisvKglyZWN2X3h0aV90Y3BfcnIoKQkJCQkJKi8KKy8qICAgICAgc2VuZF94dGlfdGNwX2Nvbm5fcnIoKSAgYW4gUlIgdGVzdCBpbmNsdWRpbmcgY29ubmVjdCAgICAqLworLyogICAgICByZWN2X3h0aV90Y3BfY29ubl9ycigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKglzZW5kX3h0aV91ZHBfc3RyZWFtKCkJcGVyZm9ybSBhIHVkcCBzdHJlYW0gdGVzdAkqLworLyoJcmVjdl94dGlfdWRwX3N0cmVhbSgpCQkJCQkqLworLyoJc2VuZF94dGlfdWRwX3JyKCkJcGVyZm9ybSBhIHVkcCByZXF1ZXN0L3Jlc3BvbnNlCSovCisvKglyZWN2X3h0aV91ZHBfcnIoKQkJCQkJKi8KKy8qCQkJCQkJCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYgCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyAvKiB4dGkuaCBzaG91bGQgYmUgaW5jbHVkZWQgKmFmdGVyKiBpbi5oIGJlY2F1c2UgdGhlcmUgYXJlIG5hbWUgKi8KKyAvKiBjb25mbGljdHMhKCBTaWxseSBzdGFuZGFyZHMgcGVvcGxlLi4uIHJhaiAyLzk1IGZvcnR1ZW5hdGVseSwgdGhlICovCisgLyogY29uZmlsY3RzIGFyZSBvbiBJUF9UT1AgYW5kIElQX1RUTCwgd2hjaWggbmV0cGVyZiBkb2VzIG5vdCB5ZXQgdXNlICovCisjaW5jbHVkZSA8eHRpLmg+CisKKyNpbmNsdWRlICJuZXRsaWIuaCIKKyNpbmNsdWRlICJuZXRzaC5oIgorI2luY2x1ZGUgIm5ldHRlc3RfeHRpLmgiCisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorI2lmZGVmIF9fc2dpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBfX3NnaSAqLworI2luY2x1ZGUgImhpc3QuaCIKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisMCisKKyAvKiB0aGVzZSB2YXJpYWJsZXMgYXJlIHNwZWNpZmljIHRvIHRoZSBYVEkgc29ja2V0cyB0ZXN0cy4gZGVjbGFyZSAqLworIC8qIHRoZW0gc3RhdGljIHRvIG1ha2UgdGhlbSBnbG9iYWwgb25seSB0byB0aGlzIGZpbGUuICovCisKK3N0YXRpYyBpbnQJCisgIHJzc19zaXplLAkJLyogcmVtb3RlIHNvY2tldCBzZW5kIGJ1ZmZlciBzaXplCSovCisgIHJzcl9zaXplLAkJLyogcmVtb3RlIHNvY2tldCByZWN2IGJ1ZmZlciBzaXplCSovCisgIGxzc19zaXplLAkJLyogbG9jYWwgIHNvY2tldCBzZW5kIGJ1ZmZlciBzaXplIAkqLworICBsc3Jfc2l6ZSwJCS8qIGxvY2FsICBzb2NrZXQgcmVjdiBidWZmZXIgc2l6ZSAJKi8KKyAgcmVxX3NpemUgPSAxLAkJLyogcmVxdWVzdCBzaXplICAgICAgICAgICAgICAgICAgIAkqLworICByc3Bfc2l6ZSA9IDEsCQkvKiByZXNwb25zZSBzaXplCQkJKi8KKyAgc2VuZF9zaXplLAkJLyogaG93IGJpZyBhcmUgaW5kaXZpZHVhbCBzZW5kcwkJKi8KKyAgcmVjdl9zaXplOwkJLyogaG93IGJpZyBhcmUgaW5kaXZpZHVhbCByZWNlaXZlcwkqLworCitzdGF0aWMgIGludCAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uOworc3RhdGljICBjaGFyICBsb2NhbF9jcHVfbWV0aG9kOworc3RhdGljICBjaGFyICByZW1vdGVfY3B1X21ldGhvZDsKKworIC8qIGRpZmZlcmVudCBvcHRpb25zIGZvciB0aGUgeHRpCQkJCSovCisKK3N0YXRpYyBpbnQKKyAgbG9jX25vZGVsYXksCQkvKiBkb24ndC9kbyB1c2UgTk9ERUxBWQlsb2NhbGx5CQkqLworICByZW1fbm9kZWxheSwJCS8qIGRvbid0L2RvIHVzZSBOT0RFTEFZIHJlbW90ZWx5CSovCisgIGxvY19zbmRhdm9pZCwJCS8qIGF2b2lkIHNlbmQgY29waWVzIGxvY2FsbHkJCSovCisgIGxvY19yY3Zhdm9pZCwJCS8qIGF2b2lkIHJlY3YgY29waWVzIGxvY2FsbHkJCSovCisgIHJlbV9zbmRhdm9pZCwJCS8qIGF2b2lkIHNlbmQgY29waWVzIHJlbW90ZWx5CQkqLworICByZW1fcmN2YXZvaWQ7CQkvKiBhdm9pZCByZWN2X2NvcGllcyByZW1vdGVseQkJKi8KKworc3RhdGljIHN0cnVjdCB0X2luZm8gaW5mb19zdHJ1Y3Q7CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorI2lmZGVmIEhBVkVfR0VUSFJUSU1FCitocnRpbWVfdCB0aW1lX29uZTsKK2hydGltZV90IHRpbWVfdHdvOworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lX29uZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1lX3R3bzsKKyNlbmRpZiAvKiBIQVZFX0dFVEhSVElNRSAqLworc3RhdGljIEhJU1QgdGltZV9oaXN0OworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKK3N0YXRpYyBjaGFyIGxvY194dGlfZGV2aWNlWzMyXSA9ICIvZGV2L3RjcCI7CitzdGF0aWMgY2hhciByZW1feHRpX2RldmljZVszMl0gPSAiL2Rldi90Y3AiOworCitzdGF0aWMgaW50ICB4dGlfZmxhZ3MgPSAwOworCitjaGFyIHh0aV91c2FnZVtdID0gIlxuXAorVXNhZ2U6IG5ldHBlcmYgW2dsb2JhbCBvcHRpb25zXSAtLSBbdGVzdCBvcHRpb25zXSBcblwKK1xuXAorVENQL1VEUCBYVEkgQVBJIFRlc3QgT3B0aW9uczpcblwKKyAgICAtRCBbTF1bLFJdICAgICAgICBTZXQgWFRJX1RDUF9OT0RFTEFZIGxvY2FsbHkgYW5kL29yIHJlbW90ZWx5IChYVElfVENQXyopXG5cCisgICAgLWggICAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIHRleHRcblwKKyAgICAtbSBieXRlcyAgICAgICAgICBTZXQgdGhlIHNlbmQgc2l6ZSAoWFRJX1RDUF9TVFJFQU0sIFhUSV9VRFBfU1RSRUFNKVxuXAorICAgIC1NIGJ5dGVzICAgICAgICAgIFNldCB0aGUgcmVjdiBzaXplIChYVElfVENQX1NUUkVBTSwgWFRJX1VEUF9TVFJFQU0pXG5cCisgICAgLXIgYnl0ZXMgICAgICAgICAgU2V0IHJlcXVlc3Qgc2l6ZSAoWFRJX1RDUF9SUiwgWFRJX1VEUF9SUilcblwKKyAgICAtUiBieXRlcyAgICAgICAgICBTZXQgcmVzcG9uc2Ugc2l6ZSAoWFRJX1RDUF9SUiwgWFRJX1VEUF9SUilcblwKKyAgICAtcyBzZW5kWyxyZWN2XSAgICBTZXQgbG9jYWwgc29ja2V0IHNlbmQvcmVjdiBidWZmZXIgc2l6ZXNcblwKKyAgICAtUyBzZW5kWyxyZWN2XSAgICBTZXQgcmVtb3RlIHNvY2tldCBzZW5kL3JlY3YgYnVmZmVyIHNpemVzXG5cCisgICAgLVggZGV2WyxkZXZdICAgICAgU2V0IHRoZSBsb2NhbC9yZW1vdGUgWFRJIGRldmljZSBmaWxlIG5hbWVcblwKK1xuXAorRm9yIHRob3NlIG9wdGlvbnMgdGFraW5nIHR3byBwYXJtcywgYXQgbGVhc3Qgb25lIG11c3QgYmUgc3BlY2lmaWVkO1xuXAorc3BlY2lmeWluZyBvbmUgdmFsdWUgd2l0aG91dCBhIGNvbW1hIHdpbGwgc2V0IGJvdGggcGFybXMgdG8gdGhhdFxuXAordmFsdWUsIHNwZWNpZnlpbmcgYSB2YWx1ZSB3aXRoIGEgbGVhZGluZyBjb21tYSB3aWxsIHNldCBqdXN0IHRoZSBzZWNvbmRcblwKK3Bhcm0sIGEgdmFsdWUgd2l0aCBhIHRyYWlsaW5nIGNvbW1hIHdpbGwgc2V0IGp1c3QgdGhlIGZpcnN0LiBUbyBzZXRcblwKK2VhY2ggcGFybSB0byB1bmlxdWUgdmFsdWVzLCBzcGVjaWZ5IGJvdGggYW5kIHNlcGFyYXRlIHRoZW0gd2l0aCBhXG5cCitjb21tYS5cbiI7IAorICAgICAKKwwKKyAvKiBUaGlzIHJvdXRpbmUgaXMgaW50ZW5kZWQgdG8gcmV0cmlldmUgaW50ZXJlc3RpbmcgYXNwZWN0cyBvZiB0Y3AgKi8KKyAvKiBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbi4gYXQgZmlyc3QsIGl0IGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZSAqLworIC8qIG1heGltdW0gc2VnbWVudCBzaXplLiBsYXRlciwgaXQgbWlnaHQgYmUgbW9kaWZpZWQgdG8gcmV0cmlldmUgKi8KKyAvKiBvdGhlciBpbmZvcm1hdGlvbiwgYnV0IGl0IG11c3QgYmUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgKi8KKyAvKiByZXRyaWV2ZWQgcXVpY2tseSBhcyBpdCBpcyBjYWxsZWQgZHVyaW5nIHRoZSB0aW1pbmcgb2YgdGhlIHRlc3QuICovCisgLyogZm9yIHRoYXQgcmVhc29uLCBhIHNlY29uZCByb3V0aW5lIG1heSBiZSBjcmVhdGVkIHRoYXQgY2FuIGJlICovCisgLyogY2FsbGVkIG91dHNpZGUgb2YgdGhlIHRpbWluZyBsb29wICovCit2b2lkCitnZXRfeHRpX2luZm8oc29ja2V0LCBpbmZvX3N0cnVjdCkKKyAgICAgaW50IHNvY2tldDsKKyAgICAgc3RydWN0IHRfaW5mbyAqaW5mb19zdHJ1Y3Q7Cit7CisKK30KKworDAorIC8qIFRoaXMgcm91dGluZSB3aWxsIGNyZWF0ZSBhIGRhdGEgKGxpc3Rlbikgc29ja2V0IHdpdGggdGhlIGFwcm9wcmlhdGUgKi8KKyAvKiBvcHRpb25zIHNldCBhbmQgcmV0dXJuIGl0IHRvIHRoZSBjYWxsZXIuIHRoaXMgcmVwbGFjZXMgYWxsIHRoZSAqLworIC8qIGR1cGxpY2F0ZSBjb2RlIGluIGVhY2ggb2YgdGhlIHRlc3Qgcm91dGluZXMgYW5kIHNob3VsZCBoZWxwIG1ha2UgKi8KKyAvKiB0aGluZ3MgYSBsaXR0bGUgZWFzaWVyIHRvIHVuZGVyc3RhbmQuIHNpbmNlIHRoaXMgcm91dGluZSBjYW4gYmUgKi8KKyAvKiBjYWxsZWQgYnkgZWl0aGVyIHRoZSBuZXRwZXJmIG9yIG5ldHNlcnZlciBwcm9ncmFtcywgYWxsIG91dHB1dCAqLworIC8qIHNob3VsZCBiZSBkaXJlY3RlZCB0b3dhcmRzICJ3aGVyZS4iIGZhbWlseSBpcyBnZW5lcmFsbHkgQUZfSU5FVCwgKi8KKyAvKiBhbmQgdHlwZSB3aWxsIGJlIGVpdGhlciBTT0NLX1NUUkVBTSBvciBTT0NLX0RHUkFNICovCitTT0NLRVQKK2NyZWF0ZV94dGlfZW5kcG9pbnQoY2hhciAqbmFtZSkKK3sKKworICBTT0NLRVQgdGVtcF9zb2NrZXQ7CisKKyAgc3RydWN0IHRfb3B0bWdtdCAqb3B0X3JlcTsgIC8qIHdlIHJlcXVlc3QgYW4gb3B0aW9uICovCisgIHN0cnVjdCB0X29wdG1nbXQgKm9wdF9yZXQ7ICAvKiBpdCB0ZWxscyB1cyB3aGF0IHdlIGdvdCAqLworCisgIC8qIHdlIHVzZSB0aGlzIHRvIHBhc3MtaW4gQlNELWxpa2Ugc29ja2V0IG9wdGlvbnMgdGhyb3VnaCB0X29wdG1nbXQuICovCisgIC8qIGl0IGVuZHMgdXAgYmVpbmcgYWJvdXQgYXMgY2xlYXIgYXMgbXVkLiByYWogMi85NSAqLworICBzdHJ1Y3Qgc29ja19vcHRpb24geworICAgIHN0cnVjdCB0X29wdGhkciBteW9wdGhkcjsKKyAgICBsb25nIHZhbHVlOworICB9ICpzb2NrX29wdGlvbjsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJjcmVhdGVfeHRpX2VuZHBvaW50OiBhdHRlbXB0aW5nIHRvIG9wZW4gJXNcbiIsCisJICAgIG5hbWUpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0ZW1wX3NvY2tldCA9IHRfb3BlbihuYW1lLE9fUkRXUixOVUxMKTsKKyAgCisgIGlmICh0ZW1wX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IGNyZWF0ZV94dGlfZW5kcG9pbnQ6IHRfb3BlbiAlczogZXJybm8gJWQgdF9lcnJubyAlZFxuIiwKKwkgICAgbmFtZSwKKwkgICAgZXJybm8sCisJICAgIHRfZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwiY3JlYXRlX3h0aV9lbmRwb2ludDogc29ja2V0ICVkIG9idGFpbmVkLi4uXG4iLHRlbXBfc29ja2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBhbGxvY2F0ZSB3aGF0IHdlIG5lZWQgZm9yIG9wdGlvbiBtZ210ICovCisgIGlmICgob3B0X3JlcSA9IChzdHJ1Y3QgdF9vcHRtZ210ICopdF9hbGxvYyh0ZW1wX3NvY2tldCxUX09QVE1HTVQsVF9BTEwpKSA9PSAKKyAgICAgIE5VTEwpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAibmV0cGVyZjogY3JlYXRlX3h0aV9lbmRwb2ludDogdF9hbGxvYzogb3B0X3JlcSBlcnJubyAlZFxuIiwKKwkgICAgZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJjcmVhdGVfeHRpX2VuZHBvaW50OiBvcHRfcmVxLT5vcHQuYnVmICV4IG1heGxlbiAlZCBsZW4gJWRcbiIsCisJICAgIG9wdF9yZXEtPm9wdC5idWYsCisJICAgIG9wdF9yZXEtPm9wdC5tYXhsZW4sCisJICAgIG9wdF9yZXEtPm9wdC5sZW4pOworICAgIAorICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBpZiAoKG9wdF9yZXQgPSAoc3RydWN0IHRfb3B0bWdtdCAqKSB0X2FsbG9jKHRlbXBfc29ja2V0LFRfT1BUTUdNVCxUX0FMTCkpID09CisgICAgICBOVUxMKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIm5ldHBlcmY6IGNyZWF0ZV94dGlfZW5kcG9pbnQ6IHRfYWxsb2M6IG9wdF9yZXQgZXJybm8gJWRcbiIsCisJICAgIGVycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGV4aXQoMSk7CisgIH0KKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiY3JlYXRlX3h0aV9lbmRwb2ludDogb3B0X3JldC0+b3B0LmJ1ZiAleCBtYXhsZW4gJWQgbGVuICVkXG4iLAorCSAgICBvcHRfcmV0LT5vcHQuYnVmLAorCSAgICBvcHRfcmV0LT5vcHQubWF4bGVuLAorCSAgICBvcHRfcmV0LT5vcHQubGVuKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogTW9kaWZ5IHRoZSBsb2NhbCBzb2NrZXQgc2l6ZS4gVGhlIHJlYXNvbiB3ZSBhbHRlciB0aGUgc2VuZCBidWZmZXIgKi8KKyAgLyogc2l6ZSBoZXJlIHJhdGhlciB0aGFuIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSBpcyB0byB0YWtlIGNhcmUgKi8KKyAgLyogb2YgZGVjcmVhc2VzIGluIGJ1ZmZlciBzaXplLiBEZWNyZWFzaW5nIHRoZSB3aW5kb3cgc2l6ZSBhZnRlciAqLworICAvKiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgaXMgYSBUQ1Agbm8tbm8uIEFsc28sIGJ5IHNldHRpbmcgdGhlICovCisgIC8qIGJ1ZmZlciAod2luZG93KSBzaXplIGJlZm9yZSB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgd2UgY2FuICovCisgIC8qIGNvbnRyb2wgdGhlIFRDUCBNU1MgKHNlZ21lbnQgc2l6ZSkuIFRoZSBNU1MgaXMgbmV2ZXIgbW9yZSB0aGF0IDEvMiAqLworICAvKiB0aGUgbWluaW11bSByZWNlaXZlIGJ1ZmZlciBzaXplIGF0IGVhY2ggaGFsZiBvZiB0aGUgY29ubmVjdGlvbi4gKi8KKyAgLyogVGhpcyBpcyB3aHkgd2UgYXJlIGFsdGVyaW5nIHRoZSByZWNlaXZlIGJ1ZmZlciBzaXplIG9uIHRoZSBzZW5kaW5nICovCisgIC8qIHNpemUgb2YgYSB1bmlkaXJlY3Rpb25hbCB0cmFuc2Zlci4gSWYgdGhlIHVzZXIgaGFzIG5vdCByZXF1ZXN0ZWQgKi8KKyAgLyogdGhhdCB0aGUgc29ja2V0IGJ1ZmZlcnMgYmUgYWx0ZXJlZCwgd2Ugd2lsbCB0cnkgdG8gZmluZC1vdXQgd2hhdCAqLworICAvKiB0aGVpciB2YWx1ZXMgYXJlLiBJZiB3ZSBjYW5ub3QgdG91Y2ggdGhlIHNvY2tldCBidWZmZXIgaW4gYW55IHdheSwgKi8KKyAgLyogd2Ugd2lsbCBzZXQgdGhlIHZhbHVlcyB0byAtMSB0byBpbmRpY2F0ZSB0aGF0LiAgKi8KKworI2lmZGVmIFhUSV9TTkRCVUYKKyAgaWYgKGxzc19zaXplID4gMCkgeworICAgIC8qIHdlIHdhbnQgdG8gIm5lZ290aWF0ZSIgdGhlIG9wdGlvbiAqLworICAgIG9wdF9yZXEtPmZsYWdzID0gVF9ORUdPVElBVEU7CisgIH0KKyAgZWxzZSB7CisgICAgLyogd2Ugd2FudCB0byBhY2NlcHQgdGhlIGRlZmF1bHQsIGFuZCBrbm93IHdoYXQgaXQgaXMuIEkgYXNzdW1lICovCisgICAgLyogdGhhdCB3aGVuIG5vdGhpbmcgaGFzIGJlZW4gY2hhbmdlZCwgdGhhdCBUX0NVUlJFTlQgd2lsbCByZXR1cm4gKi8KKyAgICAvKiB0aGUgc2FtZSBhcyBUX0RFRkFVTFQgcmFqIDMvOTUgKi8KKyAgICBvcHRfcmVxLT5mbGFncyA9IFRfQ1VSUkVOVDsKKyAgfQorCisgIC8qIHRoZSBmaXJzdCBwYXJ0IGlzIGZvciB0aGUgbmV0YnVmIHRoYXQgaG9sZHMgdGhlIG9wdGlvbiB3ZSB3YW50ICovCisgIC8qIHRvIG5lZ290aWF0ZSBvciBjaGVjayAqLworICAvKiB0aGUgYnVmZmVyIG9mIHRoZSBuZXRidWYgcG9pbnRzIGF0IHRoZSBzb2NrZXQgb3B0aW9ucyBzdHJ1Y3R1cmUgKi8KKyAgCisgIC8qIHdlIGFzc3VtZSB0aGF0IHRoZSB0X2FsbG9jIGNhbGwgYWxsb2NhdGVkIGEgYnVmZmVyIHRoYXQgc3RhcnRlZCAqLworICAvKiBvbiBhIHByb3BlciBhbGlnbm1lbnQgKi8KKyAgc29ja19vcHRpb24gPSAoc3RydWN0IHNvY2tfb3B0aW9uICopb3B0X3JlcS0+b3B0LmJ1ZjsKKyAgCisgIC8qIGFuZCBuZXh0LCBzZXQgdGhlIGZpZWxkcyBpbiB0aGUgc29ja19vcHRpb24gc3RydWN0dXJlICovCisgIHNvY2tfb3B0aW9uLT5teW9wdGhkci5sZXZlbCA9IFhUSV9HRU5FUklDOworICBzb2NrX29wdGlvbi0+bXlvcHRoZHIubmFtZSAgPSBYVElfU05EQlVGOworICBzb2NrX29wdGlvbi0+bXlvcHRoZHIubGVuICAgPSBzaXplb2Yoc3RydWN0IHRfb3B0aGRyKSArIHNpemVvZihsb25nKTsKKyAgc29ja19vcHRpb24tPnZhbHVlICAgICAgICA9IGxzc19zaXplOworICAKKyAgb3B0X3JlcS0+b3B0LmxlbiAgICAgICAgICA9IHNpemVvZihzdHJ1Y3QgdF9vcHRoZHIpICsgc2l6ZW9mKGxvbmcpOworICAKKyAgLyogbm93LCBzZXQtdXAgdGhlIHN0dWZmIHRvIHJldHVybiB0aGUgdmFsdWUgaW4gdGhlIGVuZCAqLworICAvKiB3ZSBhc3N1bWUgdGhhdCB0aGUgdF9hbGxvYyBjYWxsIGFsbG9jYXRlZCBhIGJ1ZmZlciB0aGF0IHN0YXJ0ZWQgKi8KKyAgLyogb24gYSBwcm9wZXIgYWxpZ25tZW50ICovCisgIHNvY2tfb3B0aW9uID0gKHN0cnVjdCBzb2NrX29wdGlvbiAqKW9wdF9yZXQtPm9wdC5idWY7CisgIAorICAvKiBmaW5hbGx5LCBjYWxsIHRfb3B0bWdtdC4gY2xlYXIgYXMgbXVkLiAqLworICBpZiAodF9vcHRtZ210KHRlbXBfc29ja2V0LG9wdF9yZXEsb3B0X3JldCkgPT0gLTEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAibmV0cGVyZjogY3JlYXRlX3h0aV9lbmRwb2ludDogWFRJX1NOREJVRiBvcHRpb246IHRfZXJybm8gJWRcbiIsCisJICAgIHRfZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmIChzb2NrX29wdGlvbi0+bXlvcHRoZHIuc3RhdHVzID09IFRfU1VDQ0VTUykgeworICAgIGxzc19zaXplID0gc29ja19vcHRpb24tPnZhbHVlOworICB9CisgIGVsc2UgeworICAgIGZwcmludGYod2hlcmUsImNyZWF0ZV94dGlfZW5kcG9pbnQ6IFhUSV9TTkRCVUYgb3B0aW9uIHN0YXR1cyAweCUuNHgiLAorCSAgICBzb2NrX29wdGlvbi0+bXlvcHRoZHIuc3RhdHVzKTsKKyAgICBmcHJpbnRmKHdoZXJlLCIgdmFsdWUgJWRcbiIsCisJICAgIHNvY2tfb3B0aW9uLT52YWx1ZSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBsc3Nfc2l6ZSA9IC0xOworICB9CisKKyAgaWYgKGxzcl9zaXplID4gMCkgeworICAgIC8qIHdlIHdhbnQgdG8gIm5lZ290aWF0ZSIgdGhlIG9wdGlvbiAqLworICAgIG9wdF9yZXEtPmZsYWdzID0gVF9ORUdPVElBVEU7CisgIH0KKyAgZWxzZSB7CisgICAgLyogd2Ugd2FudCB0byBhY2NlcHQgdGhlIGRlZmF1bHQsIGFuZCBrbm93IHdoYXQgaXQgaXMuIEkgYXNzdW1lICovCisgICAgLyogdGhhdCB3aGVuIG5vdGhpbmcgaGFzIGJlZW4gY2hhbmdlZCwgdGhhdCBUX0NVUlJFTlQgd2lsbCByZXR1cm4gKi8KKyAgICAvKiB0aGUgc2FtZSBhcyBUX0RFRkFVTFQgcmFqIDMvOTUgKi8KKyAgICBvcHRfcmVxLT5mbGFncyA9IFRfQ1VSUkVOVDsKKyAgfQorICAKKyAgLyogdGhlIGZpcnN0IHBhcnQgaXMgZm9yIHRoZSBuZXRidWYgdGhhdCBob2xkcyB0aGUgb3B0aW9uIHdlIHdhbnQgKi8KKyAgLyogdG8gbmVnb3RpYXRlIG9yIGNoZWNrICovCisgIC8qIHRoZSBidWZmZXIgb2YgdGhlIG5ldGJ1ZiBwb2ludHMgYXQgdGhlIHNvY2tldCBvcHRpb25zIHN0cnVjdHVyZSAqLworICAKKyAgLyogd2UgYXNzdW1lIHRoYXQgdGhlIHRfYWxsb2MgY2FsbCBhbGxvY2F0ZWQgYSBidWZmZXIgdGhhdCBzdGFydGVkICovCisgIC8qIG9uIGEgcHJvcGVyIGFsaWdubWVudCAqLworICBzb2NrX29wdGlvbiA9IChzdHJ1Y3Qgc29ja19vcHRpb24gKilvcHRfcmVxLT5vcHQuYnVmOworICAKKyAgLyogYW5kIG5leHQsIHNldCB0aGUgZmllbGRzIGluIHRoZSBzb2NrX29wdGlvbiBzdHJ1Y3R1cmUgKi8KKyAgc29ja19vcHRpb24tPm15b3B0aGRyLmxldmVsID0gWFRJX0dFTkVSSUM7CisgIHNvY2tfb3B0aW9uLT5teW9wdGhkci5uYW1lICA9IFhUSV9SQ1ZCVUY7CisgIHNvY2tfb3B0aW9uLT5teW9wdGhkci5sZW4gICA9IHNpemVvZihzdHJ1Y3QgdF9vcHRoZHIpICsgc2l6ZW9mKGxvbmcpOworICBzb2NrX29wdGlvbi0+dmFsdWUgICAgICAgID0gbHNyX3NpemU7CisgIAorICBvcHRfcmVxLT5vcHQubGVuICAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB0X29wdGhkcikgKyBzaXplb2YobG9uZyk7CisgIAorICAvKiBub3csIHNldC11cCB0aGUgc3R1ZmYgdG8gcmV0dXJuIHRoZSB2YWx1ZSBpbiB0aGUgZW5kICovCisgIC8qIHdlIGFzc3VtZSB0aGF0IHRoZSB0X2FsbG9jIGNhbGwgYWxsb2NhdGVkIGEgYnVmZmVyIHRoYXQgc3RhcnRlZCAqLworICAvKiBvbiBhIHByb3BlciBhbGlnbm1lbnQgKi8KKyAgc29ja19vcHRpb24gPSAoc3RydWN0IHNvY2tfb3B0aW9uICopb3B0X3JldC0+b3B0LmJ1ZjsKKyAgCisgIC8qIGZpbmFsbHksIGNhbGwgdF9vcHRtZ210LiBjbGVhciBhcyBtdWQuICovCisgIGlmICh0X29wdG1nbXQodGVtcF9zb2NrZXQsb3B0X3JlcSxvcHRfcmV0KSA9PSAtMSkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJuZXRwZXJmOiBjcmVhdGVfeHRpX2VuZHBvaW50OiBYVElfUkNWQlVGIG9wdGlvbjogdF9lcnJubyAlZFxuIiwKKwkgICAgdF9lcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBleGl0KDEpOworICB9CisgIGxzcl9zaXplID0gc29ja19vcHRpb24tPnZhbHVlOworCisgIC8qIHRoaXMgbmVlZHMgY29kZSAqLworCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IGNyZWF0ZV94dGlfZW5kcG9pbnQ6IHNvY2tldCBzaXplcyBkZXRlcm1pbmVkLi4uXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLCIgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6ICVkIHJlY3Y6ICVkXG4iLAorCSAgICBsc3Nfc2l6ZSxsc3Jfc2l6ZSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyNlbHNlIC8qIFhUSV9TTkRCVUYgKi8KKyAgCisgIGxzc19zaXplID0gLTE7CisgIGxzcl9zaXplID0gLTE7CisgIAorI2VuZGlmIC8qIFhUSV9TTkRCVUYgKi8KKworICAvKiBub3csIHdlIG1heSB3aXNoIHRvIGVuYWJsZSB0aGUgY29weSBhdm9pZGFuY2UgZmVhdHVyZXMgb24gdGhlICovCisgIC8qIGxvY2FsIHN5c3RlbS4gb2YgY291cnNlLCB0aGlzIG1heSBub3QgYmUgcG9zc2libGUuLi4gKi8KKyAgCisgIGlmIChsb2NfcmN2YXZvaWQpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAibmV0cGVyZjogY3JlYXRlX3h0aV9lbmRwb2ludDogQ291bGQgbm90IGVuYWJsZSByZWNlaXZlIGNvcHkgYXZvaWRhbmNlIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBsb2NfcmN2YXZvaWQgPSAwOworICB9CisKKyAgaWYgKGxvY19zbmRhdm9pZCkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJuZXRwZXJmOiBjcmVhdGVfeHRpX2VuZHBvaW50OiBDb3VsZCBub3QgZW5hYmxlIHNlbmQgY29weSBhdm9pZGFuY2UiKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGxvY19zbmRhdm9pZCA9IDA7CisgIH0KKyAgCisgIC8qIE5vdywgd2Ugd2lsbCBzZWUgYWJvdXQgc2V0dGluZyB0aGUgVENQX05PREVMQVkgZmxhZyBvbiB0aGUgbG9jYWwgKi8KKyAgLyogc29ja2V0LiBXZSB3aWxsIG9ubHkgZG8gdGhpcyBmb3IgdGhvc2Ugc3lzdGVtcyB0aGF0IGFjdHVhbGx5ICovCisgIC8qIHN1cHBvcnQgdGhlIG9wdGlvbi4gSWYgaXQgZmFpbHMsIG5vdGUgdGhlIGZhY3QsIGJ1dCBrZWVwIGdvaW5nLiAqLworICAvKiBJZiB0aGUgdXNlciB0cmllcyB0byBlbmFibGUgVENQX05PREVMQVkgb24gYSBVRFAgc29ja2V0LCB0aGlzICovCisgIC8qIHdpbGwgY2F1c2UgYW4gZXJyb3IgdG8gYmUgZGlzcGxheWVkICovCisgIAorI2lmZGVmIFRDUF9OT0RFTEFZCisgIGlmICgoc3RyY21wKHRlc3RfbmFtZSwiWFRJX1RDUF9TVFJFQU0iKSA9PSAwKSB8fAorICAgICAgKHN0cmNtcCh0ZXN0X25hbWUsIlhUSV9UQ1BfUlIiKSA9PSAwKSB8fAorICAgICAgKHN0cmNtcCh0ZXN0X25hbWUsIlhUSV9UQ1BfQ1JSIikgPT0gMCkpIHsKKyAgICBpZiAobG9jX25vZGVsYXkpIHsKKyAgICAgIC8qIHdlIHdhbnQgdG8gIm5lZ290aWF0ZSIgdGhlIG9wdGlvbiAqLworICAgICAgb3B0X3JlcS0+ZmxhZ3MgPSBUX05FR09USUFURTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3YW50IHRvIGFjY2VwdCB0aGUgZGVmYXVsdCwgYW5kIGtub3cgd2hhdCBpdCBpcy4gSSBhc3N1bWUgKi8KKyAgICAgIC8qIHRoYXQgd2hlbiBub3RoaW5nIGhhcyBiZWVuIGNoYW5nZWQsIHRoYXQgVF9DVVJSRU5UIHdpbGwgcmV0dXJuICovCisgICAgICAvKiB0aGUgc2FtZSBhcyBUX0RFRkFVTFQgcmFqIDMvOTUgKi8KKyAgICAgIG9wdF9yZXEtPmZsYWdzID0gVF9DVVJSRU5UOworICAgIH0KKyAgICAKKyAgICAvKiB0aGUgZmlyc3QgcGFydCBpcyBmb3IgdGhlIG5ldGJ1ZiB0aGF0IGhvbGRzIHRoZSBvcHRpb24gd2Ugd2FudCAqLworICAgIC8qIHRvIG5lZ290aWF0ZSBvciBjaGVjayB0aGUgYnVmZmVyIG9mIHRoZSBuZXRidWYgcG9pbnRzIGF0IHRoZSAqLworICAgIC8qIHNvY2tldCBvcHRpb25zIHN0cnVjdHVyZSAqLyAKKyAgICAKKyAgICAvKiB3ZSBhc3N1bWUgdGhhdCB0aGUgdF9hbGxvYyBjYWxsIGFsbG9jYXRlZCBhIGJ1ZmZlciB0aGF0IHN0YXJ0ZWQgKi8KKyAgICAvKiBvbiBhIHByb3BlciBhbGlnbm1lbnQgKi8KKyAgICBzb2NrX29wdGlvbiA9IChzdHJ1Y3Qgc29ja19vcHRpb24gKilvcHRfcmVxLT5vcHQuYnVmOworICAgIAorICAgIC8qIGFuZCBuZXh0LCBzZXQgdGhlIGZpZWxkcyBpbiB0aGUgc29ja19vcHRpb24gc3RydWN0dXJlICovCisgICAgc29ja19vcHRpb24tPm15b3B0aGRyLmxldmVsID0gSU5FVF9UQ1A7CisgICAgc29ja19vcHRpb24tPm15b3B0aGRyLm5hbWUgID0gVENQX05PREVMQVk7CisgICAgc29ja19vcHRpb24tPm15b3B0aGRyLmxlbiAgID0gc2l6ZW9mKHN0cnVjdCB0X29wdGhkcikgKyBzaXplb2YobG9uZyk7CisgICAgc29ja19vcHRpb24tPnZhbHVlICAgICAgICAgID0gVF9ZRVM7CisgICAgCisgICAgb3B0X3JlcS0+b3B0LmxlbiAgICAgICAgICA9IHNpemVvZihzdHJ1Y3QgdF9vcHRoZHIpICsgc2l6ZW9mKGxvbmcpOworICAgIAorICAgIC8qIG5vdywgc2V0LXVwIHRoZSBzdHVmZiB0byByZXR1cm4gdGhlIHZhbHVlIGluIHRoZSBlbmQgKi8KKyAgICAvKiB3ZSBhc3N1bWUgdGhhdCB0aGUgdF9hbGxvYyBjYWxsIGFsbG9jYXRlZCBhIGJ1ZmZlciB0aGF0IHN0YXJ0ZWQgKi8KKyAgICAvKiBvbiBhIHByb3BlciBhbGlnbm1lbnQgKi8KKyAgICBzb2NrX29wdGlvbiA9IChzdHJ1Y3Qgc29ja19vcHRpb24gKilvcHRfcmV0LT5vcHQuYnVmOworICAgIAorICAgIC8qIGZpbmFsbHksIGNhbGwgdF9vcHRtZ210LiBjbGVhciBhcyBtdWQuICovCisgICAgaWYgKHRfb3B0bWdtdCh0ZW1wX3NvY2tldCxvcHRfcmVxLG9wdF9yZXQpID09IC0xKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJjcmVhdGVfeHRpX2VuZHBvaW50OiBUQ1BfTk9ERUxBWSBvcHRpb246IGVycm5vICVkIHRfZXJybm8gJWRcbiIsCisJICAgICAgZXJybm8sCisJICAgICAgdF9lcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgbG9jX25vZGVsYXkgPSBzb2NrX29wdGlvbi0+dmFsdWU7CisgIH0KKyNlbHNlIC8qIFRDUF9OT0RFTEFZICovCisgIAorICBsb2Nfbm9kZWxheSA9IDA7CisgIAorI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisKKyAgcmV0dXJuKHRlbXBfc29ja2V0KTsKKworfQorCisMCisvKiBUaGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgVENQIHVuaWRpcmVjdGlvbmFsIGRhdGEgdHJhbnNmZXIgdGVzdCAqLworLyogKGEuay5hLiBzdHJlYW0pIGZvciB0aGUgeHRpIGludGVyZmFjZS4gSXQgcmVjZWl2ZXMgaXRzICovCisvKiBwYXJhbWV0ZXJzIHZpYSBnbG9iYWwgdmFyaWFibGVzIGZyb20gdGhlIHNoZWxsIGFuZCB3cml0ZXMgaXRzICovCisvKiBvdXRwdXQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKworCit2b2lkIAorc2VuZF94dGlfdGNwX3N0cmVhbShjaGFyIHJlbW90ZV9ob3N0W10pCit7CisgIAorICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK1JlY3YgICBTZW5kICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXAorU29ja2V0IFNvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgICAgICAgICAgXG5cCitTaXplICAgU2l6ZSAgICBTaXplICAgICBUaW1lICAgICBUaHJvdWdocHV0ICBcblwKK2J5dGVzICBieXRlcyAgIGJ5dGVzICAgIHNlY3MuICAgICVzL3NlYyAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xID0KKyAgICAiJTZkICU2ZCAlNmQgICAgJS02LjJmICAgJTcuMmYgICBcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorUmVjdiAgIFNlbmQgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl6YXRpb24gICAgICAgU2VydmljZSBEZW1hbmRcblwKK1NvY2tldCBTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICAgICAgICAgIFNlbmQgICAgIFJlY3YgICAgIFNlbmQgICAgUmVjdlxuXAorU2l6ZSAgIFNpemUgICAgU2l6ZSAgICAgVGltZSAgICAgVGhyb3VnaHB1dCAgbG9jYWwgICAgcmVtb3RlICAgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgIGJ5dGVzICAgIHNlY3MuICAgICUtOC44cy9zICAlJSAlYyAgICAgICUlICVjICAgICAgdXMvS0IgICB1cy9LQlxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2YgJWNcbiI7CisKKyAgY2hhciAqY3B1X2ZtdF8xID0KKyAgICAiJTZkICU2ZCAlNmQgICAgJS02LjJmICAgICAlNy4yZiAgICUtNi4yZiAgICUtNi4yZiAgICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqa3NpbmtfZm10ID0gIlxuXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0ICAgICAgICAgJS04LjhzICUtOC44cyAgICBTZW5kcyAgICUtOC44cyBSZWN2c1xuXAorTG9jYWwgIFJlbW90ZSAgTG9jYWwgIFJlbW90ZSAgWGZlcmVkICAgUGVyICAgICAgICAgICAgICAgICBQZXJcblwKK1NlbmQgICBSZWN2ICAgIFNlbmQgICBSZWN2ICAgICAgICAgICAgIFNlbmQgKGF2ZykgICAgICAgICAgUmVjdiAoYXZnKVxuXAorJTVkICAgJTVkICAlNWQgICAlNWQgJTYuNGcgICU2LjJmICAgICU2ZCAgICU2LjJmICU2ZFxuIjsKKworICBjaGFyICprc2lua19mbXQyID0gIlxuXAorTWF4aW11bVxuXAorU2VnbWVudFxuXAorU2l6ZSAoYnl0ZXMpXG5cCislNmRcbiI7CisgIAorICAKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgIGludCBpbnRlcnZhbF9jb3VudDsKKyAgc2lnc2V0X3Qgc2lnbmFsX3NldDsKKyNlbmRpZgorICAKKyAgLyogd2hhdCB3ZSB3YW50IGlzIHRvIGhhdmUgYSBidWZmZXIgc3BhY2UgdGhhdCBpcyBhdCBsZWFzdCBvbmUgKi8KKyAgLyogc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc2VuZCB3aW5kb3cuIHRoaXMgd2lsbCBpbnN1cmUgdGhhdCB3ZSAqLworICAvKiBhcmUgbmV2ZXIgdHJ5aW5nIHRvIHJlLXVzZSBhIGJ1ZmZlciB0aGF0IG1heSBzdGlsbCBiZSBpbiB0aGUgaGFuZHMgKi8KKyAgLyogb2YgdGhlIHRyYW5zcG9ydC4gVGhpcyBidWZmZXIgd2lsbCBiZSBtYWxsb2MnZCBhZnRlciB3ZSBoYXZlIGZvdW5kICovCisgIC8qIHRoZSBzaXplIG9mIHRoZSBsb2NhbCBzZW5jIHNvY2tldCBidWZmZXIuIFdlIHdpbGwgd2FudCB0byBkZWFsICovCisgIC8qIHdpdGggYWxpZ25tZW50IGFuZCBvZmZzZXQgY29uY2VybnMgYXMgd2VsbC4gKi8KKyAgCisgIGludAkqbWVzc2FnZV9pbnRfcHRyOworCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICAKKyAgaW50IGxlbjsKKyAgdW5zaWduZWQgaW50IG51bW1lc3NhZ2VzOworICBTT0NLRVQgc2VuZF9zb2NrZXQ7CisgIGludCBieXRlc19yZW1haW5pbmc7CisgIGludCB0Y3BfbXNzID0gLTE7ICAvKiBwb3NzaWJseSB1bmluaXRpYWxpemVkIG9uIHByaW50ZiBmYXIgYmVsb3cgKi8KKworICAvKiB3aXRoIGxpbmtzIGxpa2UgZmRkaSwgb25lIGNhbiBzZW5kID4gMzIgYml0cyB3b3J0aCBvZiBieXRlcyAqLworICAvKiBkdXJpbmcgYSB0ZXN0Li4uIDstKSBhdCBzb21lIHBvaW50LCB0aGlzIHNob3VsZCBwcm9iYWJseSBiZWNvbWUgYSAqLworICAvKiA2NGJpdCBpbnRlZ3JhbCB0eXBlLCBidXQgdGhvc2UgYXJlIG5vdCBlbnRpcmVseSBjb21tb24geWV0ICovCisKKyAgZG91YmxlCWJ5dGVzX3NlbnQ7CisgIAorICBmbG9hdAlsb2NhbF9jcHVfdXRpbGl6YXRpb247CisgIGZsb2F0CWxvY2FsX3NlcnZpY2VfZGVtYW5kOworICBmbG9hdAlyZW1vdGVfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlyZW1vdGVfc2VydmljZV9kZW1hbmQ7CisKKyAgZG91YmxlCXRocnVwdXQ7CisgIAorICAvKiBzb21lIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24gKi8KKyAgc3RydWN0CWhvc3RlbnQJICAgICAgICAqaHA7CisgIHN0cnVjdAlzb2NrYWRkcl9pbglzZXJ2ZXI7CisgIHVuc2lnbmVkICAgICAgaW50ICAgICAgICAgICAgIGFkZHI7CisKKyAgc3RydWN0IHRfY2FsbCBzZXJ2ZXJfY2FsbDsKKyAgCisgIHN0cnVjdAl4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0X3N0cnVjdAkqeHRpX3RjcF9zdHJlYW1fcmVxdWVzdDsKKyAgc3RydWN0CXh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdAkqeHRpX3RjcF9zdHJlYW1fcmVzcG9uc2U7CisgIHN0cnVjdAl4dGlfdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdAkqeHRpX3RjcF9zdHJlYW1fcmVzdWx0OworICAKKyAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdCAgPSAKKyAgICAoc3RydWN0IHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX3N0cmVhbV9yZXNwb25zZSA9CisgICAgKHN0cnVjdCB4dGlfdGNwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX3N0cmVhbV9yZXN1bHQgICA9IAorICAgIChzdHJ1Y3QgeHRpX3RjcF9zdHJlYW1fcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICB0aW1lX2hpc3QgPSBISVNUX25ldygpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBiemVybygoY2hhciAqKSZzZXJ2ZXIsCisJc2l6ZW9mKHNlcnZlcikpOworICAKKyAgLyogaXQgd291bGQgc2VlbSB0aGF0IHdoaWxlIEhQLVVYIHdpbGwgYWxsb3cgYW4gSVAgYWRkcmVzcyAoYXMgYSAqLworICAvKiBzdHJpbmcpIGluIGEgY2FsbCB0byBnZXRob3N0YnluYW1lLCBvdGhlciwgbGVzcyBlbmxpZ2h0ZW5lZCAqLworICAvKiBzeXN0ZW1zIGRvIG5vdC4gZml4IGZyb20gYXdqYWNrc0BjYS5zYW5kaWEuZ292IHJhaiAxMC85NSAqLyAgCisgIC8qIG9yZGVyIGNoYW5nZWQgdG8gY2hlY2sgZm9yIElQIGFkZHJlc3MgZmlyc3QuIHJhaiA3Lzk2ICovCisKKyAgaWYgKChhZGRyID0gaW5ldF9hZGRyKHJlbW90ZV9ob3N0KSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgLyogaXQgd2FzIG5vdCBhbiBJUCBhZGRyZXNzLCB0cnkgaXQgYXMgYSBuYW1lICovCisgICAgaWYgKChocCA9IGdldGhvc3RieW5hbWUocmVtb3RlX2hvc3QpKSA9PSBOVUxMKSB7CisgICAgICAvKiB3ZSBoYXZlIG5vIGlkZWEgd2hhdCBpdCBpcyAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiZXN0YWJsaXNoX2NvbnRyb2w6IGNvdWxkIG5vdCByZXNvbHZlIHRoZSBkZXN0aW5hdGlvbiAlc1xuIiwKKwkgICAgICByZW1vdGVfaG9zdCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBpdCB3YXMgYSB2YWxpZCByZW1vdGVfaG9zdCAqLworICAgICAgYmNvcHkoaHAtPmhfYWRkciwKKwkgICAgKGNoYXIgKikmc2VydmVyLnNpbl9hZGRyLAorCSAgICBocC0+aF9sZW5ndGgpOworICAgICAgc2VydmVyLnNpbl9mYW1pbHkgPSBocC0+aF9hZGRydHlwZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogaXQgd2FzIGEgdmFsaWQgSVAgYWRkcmVzcyAqLworICAgIHNlcnZlci5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworICAgIHNlcnZlci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgfSAgICAKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICAvKiB3ZSB3YW50IHRvIGhhdmUgc29tZSBhZGRpdGlvbmFsLCBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiBpbiAqLworICAgIC8qIHRoZSBoZWFkZXJzLiB3ZSBrbm93IHNvbWUgb2YgaXQgaGVyZSwgYnV0IG5vdCBhbGwsIHNvIHdlIHdpbGwgKi8KKyAgICAvKiBvbmx5IHByaW50IHRoZSB0ZXN0IHRpdGxlIGhlcmUgYW5kIHdpbGwgcHJpbnQgdGhlIHJlc3VsdHMgKi8KKyAgICAvKiB0aXRsZXMgYWZ0ZXIgdGhlIHRlc3QgaXMgZmluaXNoZWQgKi8KKyAgICBmcHJpbnRmKHdoZXJlLCJYVEkgVENQIFNUUkVBTSBURVNUIik7CisgICAgZnByaW50Zih3aGVyZSwiIHRvICVzIiwgcmVtb3RlX2hvc3QpOworICAgIGlmIChpdGVyYXRpb25fbWF4ID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiIDogKy8tJTMuMWYlJSBAICUyZCUlIGNvbmYuIiwKKwkgICAgICBpbnRlcnZhbC8wLjAyLAorCSAgICAgIGNvbmZpZGVuY2VfbGV2ZWwpOworICAgICAgfQorICAgIGlmIChsb2Nfbm9kZWxheSB8fCByZW1fbm9kZWxheSkgeworICAgICAgZnByaW50Zih3aGVyZSwiIDogbm9kZWxheSIpOworICAgIH0KKyAgICBpZiAobG9jX3NuZGF2b2lkIHx8IAorCWxvY19yY3Zhdm9pZCB8fAorCXJlbV9zbmRhdm9pZCB8fAorCXJlbV9yY3Zhdm9pZCkgeworICAgICAgZnByaW50Zih3aGVyZSwiIDogY29weSBhdm9pZGFuY2UiKTsKKyAgICB9CisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICBmcHJpbnRmKHdoZXJlLCIgOiBoaXN0b2dyYW0iKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgZnByaW50Zih3aGVyZSwiIDogaW50ZXJ2YWwiKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworI2lmZGVmIERJUlRZIAorICAgIGZwcmludGYod2hlcmUsIiA6IGRpcnR5IGRhdGEiKTsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgIGZwcmludGYod2hlcmUsIlxuIik7CisgIH0KKworICBzZW5kX3JpbmcgPSBOVUxMOworICBjb25maWRlbmNlX2l0ZXJhdGlvbiA9IDE7CisgIGluaXRfc3RhdCgpOworCisgIC8qIHdlIGhhdmUgYSBncmVhdC1iaWcgd2hpbGUgbG9vcCB3aGljaCBjb250cm9scyB0aGUgbnVtYmVyIG9mIHRpbWVzICovCisgIC8qIHdlIHJ1biBhIHBhcnRpY3VsYXIgdGVzdC4gdGhpcyBpcyBmb3IgdGhlIGNhbGN1bGF0aW9uIG9mIGEgKi8KKyAgLyogY29uZmlkZW5jZSBpbnRlcnZhbCAoSSByZWFsbHkgc2hvdWxkIGhhdmUgc3RheWVkIGF3YWtlIGR1cmluZyAqLworICAvKiBwcm9ic3RhdHMgOikuIElmIHRoZSB1c2VyIGRpZCBub3QgcmVxdWVzdCBjb25maWRlbmNlIG1lYXN1cmVtZW50ICovCisgIC8qIChubyBjb25maWRlbmNlIGlzIHRoZSBkZWZhdWx0KSB0aGVuIHdlIHdpbGwgb25seSBnbyB0aG91Z2ggdGhlICovCisgIC8qIGxvb3Agb25jZS4gdGhlIGNvbmZpZGVuY2Ugc3R1ZmYgb3JpZ2luYXRlcyBmcm9tIHRoZSBmb2xrcyBhdCBJQk0gKi8KKworICB3aGlsZSAoKChjb25maWRlbmNlIDwgMCkgJiYgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDwgaXRlcmF0aW9uX21heCkpIHx8CisJIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8PSBpdGVyYXRpb25fbWluKSkgeworCisgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgLyogZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZS4gKi8KKyAgICAKKyAgICBudW1tZXNzYWdlcyAgICA9CTA7CisgICAgYnl0ZXNfc2VudCAgICAgPQkwLjA7CisgICAgdGltZXNfdXAgICAgICAgPSAJMDsKKyAgICAKKyAgICAvKnNldCB1cCB0aGUgZGF0YSBzb2NrZXQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHNlbmRfc29ja2V0ID0gY3JlYXRlX3h0aV9lbmRwb2ludChsb2NfeHRpX2RldmljZSk7CisgICAgCisgICAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfeHRpX3RjcF9zdHJlYW06IHRjcCBzdHJlYW0gZGF0YSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwic2VuZF94dGlfdGNwX3N0cmVhbTogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgICAKKyAgICAvKiBpdCB3b3VsZCBzZWVtIHRoYXQgd2l0aCBYVEksIHRoZXJlIGlzIG5vIGltcGxpY2l0IGJpbmQgb24gYSAqLworICAgIC8qIGNvbm5lY3QsIHNvIHdlIGhhdmUgdG8gbWFrZSBhIGNhbGwgdG8gdF9iaW5kLiB0aGlzIGlzIG5vdCAqLworICAgIC8qIHRlcnJpYmx5IGNvbnZlbmllbnQsIGJ1dCBJIHN1cHBvc2UgdGhhdCAic3RhbmRhcmQgaXMgYmV0dGVyICovCisgICAgLyogdGhhbiBiZXR0ZXIiIDopIHJhaiAyLzk1ICovCisKKyAgICBpZiAodF9iaW5kKHNlbmRfc29ja2V0LCBOVUxMLCBOVUxMKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIHRfZXJyb3IoInNlbmRfeHRpX3RjcF9zdHJlYW06IHRfYmluZCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgICAKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGVpdGhlciByZXRyaWV2ZWQgdGhlIHNvY2tldCBidWZmZXIgc2l6ZXMsICovCisgICAgLyogb3IgaGF2ZSB0cmllZCB0byBzZXQgdGhlbSwgc28gbm93LCB3ZSBtYXkgd2FudCB0byBzZXQgdGhlIHNlbmQgKi8KKyAgICAvKiBzaXplIGJhc2VkIG9uIHRoYXQgKGJlY2F1c2UgdGhlIHVzZXIgZWl0aGVyIGRpZCBub3QgdXNlIGEgLW0gKi8KKyAgICAvKiBvcHRpb24sIG9yIHVzZWQgb25lIHdpdGggYW4gYXJndW1lbnQgb2YgMCkuIElmIHRoZSBzb2NrZXQgYnVmZmVyICovCisgICAgLyogc2l6ZSBpcyBub3QgYXZhaWxhYmxlLCB3ZSB3aWxsIHNldCB0aGUgc2VuZCBzaXplIHRvIDRLQiAtIG5vICovCisgICAgLyogcGFydGljdWxhciByZWFzb24sIGp1c3QgYXJiaXRyYXJ5Li4uICovCisgICAgaWYgKHNlbmRfc2l6ZSA9PSAwKSB7CisgICAgICBpZiAobHNzX3NpemUgPiAwKSB7CisJc2VuZF9zaXplID0gbHNzX3NpemU7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlzZW5kX3NpemUgPSA0MDk2OworICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHJpbmcgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0LiAqLworICAgIC8qIG5vdGUgYWxzbyB0aGF0IHdlIGhhdmUgYWxsb2NhdGVkIGEgcXVhbnRpdHkgKi8KKyAgICAvKiBvZiBtZW1vcnkgdGhhdCBpcyBhdCBsZWFzdCBvbmUgc2VuZC1zaXplIGdyZWF0ZXIgdGhhbiBvdXIgc29ja2V0ICovCisgICAgLyogYnVmZmVyIHNpemUuIFdlIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gKi8KKyAgICAvKiBidWZmZXJzIGFsbG9jYXRlZCAtIHRoaXMgY2FuIGJlIGEgYml0IG9mIGEgcHJvYmxlbSB3aGVuIHRoZSAqLworICAgIC8qIHNlbmRfc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgc29ja2V0IHNpemUsIHNvIHdlIG11c3QgY2hlY2suLi4gdGhlICovCisgICAgLyogdXNlciBtYXkgaGF2ZSB3YW50ZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlICJ3aWR0aCIgb2Ygb3VyIHNlbmQgKi8KKyAgICAvKiBidWZmZXJzLCB3ZSBzaG91bGQgcmVzcGVjdCB0aGF0IHdpc2guLi4gKi8KKworICAgIGlmIChzZW5kX3dpZHRoID09IDApIHsKKyAgICAgIHNlbmRfd2lkdGggPSAobHNzX3NpemUvc2VuZF9zaXplKSArIDE7CisgICAgICBpZiAoc2VuZF93aWR0aCA9PSAxKSBzZW5kX3dpZHRoKys7CisgICAgfQorICAgIAorICAgIGlmIChzZW5kX3JpbmcgPT0gTlVMTCkgeworICAgICAgLyogb25seSBhbGxvY2F0ZSB0aGUgc2VuZCByaW5nIG9uY2UuIHRoaXMgaXMgYSBuZXR3b3JraW5nIHRlc3QsICovCisgICAgICAvKiBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbiB0ZXN0LiB0aGlzIHdheSwgd2UgZG8gbm90IG5lZWQgYSAqLworICAgICAgLyogZGVhbGxvY2F0ZV9idWZmZXJfcmluZygpIHJvdXRpbmUsIGFuZCBJIGRvbid0IGZlZWwgbGlrZSAqLworICAgICAgLyogd3JpdGluZyBvbmUgYW55d2F5IDopIHJhaiAxMS85NCAqLworICAgICAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICAgICAgc2VuZF9zaXplLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9zZW5kX29mZnNldCk7CisgICAgfQorCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiAqLworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgICAgfQorICAgIAorICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgKi8KKyAgICAvKiBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgKi8KKyAgICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAgIC8qIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCAqLworICAgIC8qIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZSB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyAqLworICAgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgICAgLyogZGVmYXVsdCB0byAxLCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUgICAgICAgICAgPSBET19YVElfVENQX1NUUkVBTTsKKyAgICB4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplICA9IHJzc19zaXplOworICAgIHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemUgID0gcnNyX3NpemU7CisgICAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplICAgPSByZWN2X3NpemU7CisgICAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+bm9fZGVsYXkgICAgICAgPSByZW1fbm9kZWxheTsKKyAgICB4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCA9IHJlbW90ZV9yZWN2X2FsaWduOworICAgIHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0ICAgID0gcmVtb3RlX3JlY3Zfb2Zmc2V0OworICAgIHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1ICAgID0gcmVtb3RlX2NwdV91c2FnZTsKKyAgICB4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5jcHVfcmF0ZSAgICAgICA9IHJlbW90ZV9jcHVfcmF0ZTsKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICB4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT50ZXN0X2xlbmd0aCAgPSB0ZXN0X3RpbWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGggID0gdGVzdF9ieXRlczsKKyAgICB9CisgICAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+c29fcmN2YXZvaWQgICAgPSByZW1fcmN2YXZvaWQ7CisgICAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQgICAgPSByZW1fc25kYXZvaWQ7CisKKyAgICBzdHJjcHkoeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+eHRpX2RldmljZSwgcmVtX3h0aV9kZXZpY2UpOworICAKKyNpZmRlZiBfX2FscGhhCisgIAorICAgIC8qIG9rIC0gZXZlbiBvbiBhIERFQyBib3gsIHN0cmluZ3MgYXJlIHN0cmluZ3MuIEkgZGlkbid0IHJlYWxseSB3YW50ICovCisgICAgLyogdG8gbnRvaGwgdGhlIHdvcmRzIG9mIGEgc3RyaW5nLiBzaW5jZSBJIGRvbid0IHdhbnQgdG8gdGVhY2ggdGhlICovCisgICAgLyogc2VuZF8gYW5kIHJlY3ZfIF9yZXF1ZXN0IGFuZCBfcmVzcG9uc2Ugcm91dGluZXMgYWJvdXQgdGhlIHR5cGVzLCAqLworICAgIC8qIEkgd2lsbCBwdXQgImFudGktbnRvaGwiIGNhbGxzIGhlcmUuIEkgaW1hZ2luZSB0aGF0IHRoZSAicHVyZSIgKi8KKyAgICAvKiBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgWERSLCBidXQgSSBhbSBzdGlsbCBsZWFyeSBvZiBiZWluZyBhYmxlICovCisgICAgLyogdG8gZmluZCBYRFIgbGlicyBvbiBhbGwgcGxhdGZvcm1zIEkgd2FudCBydW5uaW5nIG5ldHBlcmYuIHJhaiAqLworICAgIHsKKyAgICAgIGludCAqY2hhcndvcmQ7CisgICAgICBpbnQgKmluaXR3b3JkOworICAgICAgaW50ICpsYXN0d29yZDsKKyAgICAgIAorICAgICAgaW5pdHdvcmQgPSAoaW50ICopIHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPnh0aV9kZXZpY2U7CisgICAgICBsYXN0d29yZCA9IGluaXR3b3JkICsgKChzdHJsZW4ocmVtX3h0aV9kZXZpY2UpICsgMykgLyA0KTsKKyAgICAgIAorICAgICAgZm9yIChjaGFyd29yZCA9IGluaXR3b3JkOworCSAgIGNoYXJ3b3JkIDwgbGFzdHdvcmQ7CisJICAgY2hhcndvcmQrKykgeworCQorCSpjaGFyd29yZCA9IG50b2hsKCpjaGFyd29yZCk7CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qIF9fYWxwaGEgKi8KKyAgICAKKyNpZmRlZiBESVJUWQorICAgIHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPmRpcnR5X2NvdW50ICAgICAgICAgPSByZW1fZGlydHlfY291bnQ7CisgICAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+Y2xlYW5fY291bnQgICAgICAgICA9IHJlbV9jbGVhbl9jb3VudDsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgIAorICAgIAorICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICJuZXRwZXJmOiBzZW5kX3h0aV90Y3Bfc3RyZWFtOiByZXF1ZXN0aW5nIFRDUCBzdHJlYW0gdGVzdFxuIik7CisgICAgfQorICAgIAorICAgIHNlbmRfcmVxdWVzdCgpOworICAgIAorICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQgICAgKi8KKyAgICAvKiBzb2NrZXQgcGFyYW1ldGVycyBmb3IgdGhpcyB0ZXN0IHR5cGUuIFdlIHdpbGwgcHV0IHRoZW0gYmFjayBpbnRvICovCisgICAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlICAgICAqLworICAgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUgKi8KKyAgICAvKiBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlIGNwdSBsb2NhbGx5ICAgICovCisgICAgLyogYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgdmFsdWUgcmlnaHQqLworICAgIC8qIGFmdGVyIHRoZSBjb25uZWN0IHJldHVybnMuIFRoZSByZW1vdGUgd2lsbCBncmFiIHRoZSBjb3VudGVyIHJpZ2h0Ki8KKyAgICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcyAgICovCisgICAgLyogYmVpbmcgc2VudCBmb3IgdGhlIFRDUCB0ZXN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICBpZiAoZGVidWcpCisgICAgICAgIGZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworICAgICAgcnNyX3NpemUgICAgICAgICA9IHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplOworICAgICAgcnNzX3NpemUgICAgICAgICA9IHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplOworICAgICAgcmVtX25vZGVsYXkgICAgICA9IHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5ub19kZWxheTsKKyAgICAgIHJlbW90ZV9jcHVfdXNhZ2UgPSB4dGlfdGNwX3N0cmVhbV9yZXNwb25zZS0+bWVhc3VyZV9jcHU7CisgICAgICByZW1vdGVfY3B1X3JhdGUgID0geHRpX3RjcF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlOworCisgICAgICAvKiB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXJ2ZXIgcG9ydCBudW1iZXIgaXMgaW4gKi8KKyAgICAgIC8qIG5ldHdvcmsgb3JkZXIgKi8KKyAgICAgIHNlcnZlci5zaW5fcG9ydCAgID0gKHNob3J0KXh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyOworICAgICAgc2VydmVyLnNpbl9wb3J0ICAgPSBodG9ucyhzZXJ2ZXIuc2luX3BvcnQpOyAKKyAgICAgIHJlbV9yY3Zhdm9pZCAgICAgID0geHRpX3RjcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3JjdmF2b2lkOworICAgICAgcmVtX3NuZGF2b2lkICAgICAgPSB4dGlfdGNwX3N0cmVhbV9yZXNwb25zZS0+c29fc25kYXZvaWQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogcmVtb3RlIGVycm9yIik7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICAgIG1lbXNldCAoJnNlcnZlcl9jYWxsLCAwLCBzaXplb2Yoc2VydmVyX2NhbGwpKTsKKyAgICBzZXJ2ZXJfY2FsbC5hZGRyLm1heGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgIHNlcnZlcl9jYWxsLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgc2VydmVyX2NhbGwuYWRkci5idWYgICAgPSAoY2hhciAqKSZzZXJ2ZXI7CisKKyAgICBpZiAodF9jb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJICAmc2VydmVyX2NhbGwsCisJCSAgTlVMTCkgPT0gSU5WQUxJRF9TT0NLRVQpeworICAgICAgdF9lcnJvcigibmV0cGVyZjogc2VuZF94dGlfdGNwX3N0cmVhbTogZGF0YSBzb2NrZXQgY29ubmVjdCBmYWlsZWQiKTsKKyAgICAgIHByaW50ZigiIHBvcnQ6ICVkXG4iLG50b2hzKHNlcnZlci5zaW5fcG9ydCkpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogRGF0YSBTb2NrZXQgc2V0LXVwIGlzIGZpbmlzaGVkLiBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zLCBlaXRoZXIgKi8KKyAgICAvKiB0aGUgY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkICovCisgICAgLyogaGF2ZSBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSAqLworICAgIC8qIGV4dHJhICBtZXNzYWdlIGFmdGVyIHRoZSBhY2NlcHQgb24gdGhlIHJlbW90ZS4gSWYgaXQgZmFpbGVkLCAqLworICAgIC8qIHdlJ2xsIHNlZSBpdCBoZXJlLiBJZiBpdCBkaWRuJ3QsIHdlIG1pZ2h0IGFzIHdlbGwgc3RhcnQgcHVtcGluZyAqLworICAgIC8qIGRhdGEuICovIAorICAgIAorICAgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgc3RyZWFtIHRlc3QsIHRoZXkgY2FuIGJlICovCisgICAgLyogZWl0aGVyIHRpbWUgb3IgYnl0ZS1jb3VudCBiYXNlZC4gKi8KKyAgICAKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgICB0aW1lc191cCA9IDA7CisgICAgICBieXRlc19yZW1haW5pbmcgPSAwOworICAgICAgLyogaW4gcHJldmlvdXMgcmV2aXNpb25zLCB3ZSBoYWQgdGhlIHNhbWUgY29kZSByZXBlYXRlZCB0aHJvdWdodCAqLworICAgICAgLyogYWxsIHRoZSB0ZXN0IHN1aXRlcy4gdGhpcyB3YXMgdW5uZWNlc3NhcnksIGFuZCBtZWFudCBtb3JlICovCisgICAgICAvKiB3b3JrIGZvciBtZSB3aGVuIEkgd2FudGVkIHRvIHN3aXRjaCB0byBQT1NJWCBzaWduYWxzLCBzbyBJICovCisgICAgICAvKiBoYXZlIGFic3RyYWN0ZWQgdGhpcyBvdXQgaW50byBhIHJvdXRpbmUgaW4gbmV0bGliLmMuIGlmIHlvdSAqLworICAgICAgLyogYXJlIGV4cGVyaWVuY2luZyBzaWduYWwgcHJvYmxlbXMsIHlvdSBtaWdodCB3YW50IHRvIGxvb2sgKi8KKyAgICAgIC8qIHRoZXJlLiByYWogMTEvOTQgKi8KKyAgICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICAgIGJ5dGVzX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgICB0aW1lc191cCA9IDE7CisgICAgfQorICAgIAorICAgIC8qIFRoZSBjcHVfc3RhcnQgcm91dGluZSB3aWxsIGdyYWIgdGhlIGN1cnJlbnQgdGltZSBhbmQgcG9zc2libHkgKi8KKyAgICAvKiB2YWx1ZSBvZiB0aGUgaWRsZSBjb3VudGVyIGZvciBsYXRlciB1c2UgaW4gbWVhc3VyaW5nIGNwdSAqLworICAgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgICAKKyAgICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKyAgICAKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpIHx8IChkZW1vX21vZGUpKSB7CisgICAgICAvKiB6ZXJvIG1lYW5zIHRoYXQgd2UgbmV2ZXIgcGF1c2UsIHNvIHdlIG5ldmVyIHNob3VsZCBuZWVkIHRoZSAqLworICAgICAgLyogaW50ZXJ2YWwgdGltZXIsIHVubGVzcyB3ZSBhcmUgaW4gZGVtb19tb2RlICovCisgICAgICBzdGFydF9pdGltZXIoaW50ZXJ2YWxfd2F0ZSk7CisgICAgfQorICAgIGludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisgICAgLyogZ2V0IHRoZSBzaWduYWwgc2V0IGZvciB0aGUgY2FsbCB0byBzaWdzdXNwZW5kICovCisgICAgaWYgKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgKHNpZ3NldF90ICopTlVMTCwgJnNpZ25hbF9zZXQpICE9IDApIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICJzZW5kX3h0aV90Y3Bfc3RyZWFtOiB1bmFibGUgdG8gZ2V0IHNpZ21hc2sgZXJybm8gJWRcbiIsCisgICAgICAgICAgICAgIGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworCisgICAgLyogYmVmb3JlIHdlIHN0YXJ0LCBpbml0aWFsaXplIGEgZmV3IHZhcmlhYmxlcyAqLworCisgICAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuICovCisgICAgCisgICAgd2hpbGUgKCghdGltZXNfdXApIHx8IChieXRlc19yZW1haW5pbmcgPiAwKSkgeworICAgICAgCisjaWZkZWYgRElSVFkKKyAgICAgIC8qIHdlIHdhbnQgdG8gZGlydHkgc29tZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZWdlcnMgaW4gdGhlIGJ1ZmZlciAqLworICAgICAgLyogd2UgYXJlIGFib3V0IHRvIHNlbmQuIHdlIG1heSBhbHNvIHdhbnQgdG8gYnJpbmcgc29tZSBudW1iZXIgb2YgKi8KKyAgICAgIC8qIHRoZW0gY2xlYW5seSBpbnRvIHRoZSBjYWNoZS4gVGhlIGNsZWFuIG9uZXMgd2lsbCBmb2xsb3cgYW55IGRpcnR5ICovCisgICAgICAvKiBvbmVzIGludG8gdGhlIGNhY2hlLiBhdCBzb21lIHBvaW50LCB3ZSBtaWdodCB3YW50IHRvIHJlcGxhY2UgKi8KKyAgICAgIC8qIHRoZSByYW5kKCkgY2FsbCB3aXRoIHNvbWV0aGluZyBmcm9tIGEgdGFibGUgdG8gcmVkdWNlIG91ciBjYWxsICovCisgICAgICAvKiBvdmVyaGVhZCBkdXJpbmcgdGhlIHRlc3QsIGJ1dCBpdCBpcyBub3QgYSBoaWdoIHByaW9yaXR5IGl0ZW0uICovCisgICAgICBhY2Nlc3NfYnVmZmVyKHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgIHNlbmRfc2l6ZSwKKwkJICAgIGxvY19kaXJ0eV9jb3VudCwKKwkJICAgIGxvY19jbGVhbl9jb3VudCk7CisjZW5kaWYgLyogRElSVFkgKi8KKyAgICAgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICAvKiB0aW1lc3RhbXAganVzdCBiZWZvcmUgd2UgZ28gaW50byBzZW5kIGFuZCB0aGVuIGFnYWluIGp1c3QgYWZ0ZXIgKi8KKyAgICAgIC8qIHdlIGNvbWUgb3V0IHJhaiA4Lzk0ICovCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgICAgICAKKyAgICAgIGlmKChsZW49dF9zbmQoc2VuZF9zb2NrZXQsCisJCSAgICBzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCSAgICBzZW5kX3NpemUsCisJCSAgICAwKSkgIT0gc2VuZF9zaXplKSB7CisgICAgICAgIGlmICgobGVuID49MCkgfHwgKGVycm5vID09IEVJTlRSKSkgeworICAgICAgICAgIC8qIHRoZSB0ZXN0IHdhcyBpbnRlcnJ1cHRlZCwgbXVzdCBiZSB0aGUgZW5kIG9mIHRlc3QgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmcHJpbnRmKHdoZXJlLAorCQkic2VuZF94dGlfdGNwX3N0cmVhbTogdF9zbmQ6IGVycm5vICVkIHRfZXJybm8gJWQgdF9sb29rIDB4JS40eFxuIiwKKwkJZXJybm8sCisJCXRfZXJybm8sCisJCXRfbG9vayhzZW5kX3NvY2tldCkpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgICB9CisKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgLyogdGltZXN0YW1wIHRoZSBleGl0IGZyb20gdGhlIHNlbmQgY2FsbCBhbmQgdXBkYXRlIHRoZSBoaXN0b2dyYW0gKi8KKyAgICAgIEhJU1RfdGltZXN0YW1wKCZ0aW1lX3R3byk7CisgICAgICBISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovICAgICAgCisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUyAgICAgIAorICAgICAgaWYgKGRlbW9fbW9kZSkgeworICAgICAgICB1bml0c190aGlzX3RpY2sgKz0gc2VuZF9zaXplOworICAgICAgfQorICAgICAgLyogaW4gdGhpcyBjYXNlLCB0aGUgaW50ZXJ2YWwgY291bnQgaXMgdGhlIGNvdW50LWRvd24gY291dGVyICovCisgICAgICAvKiB0byBkZWNpZGUgdG8gc2xlZXAgZm9yIGEgbGl0dGxlIGJpdCAqLworICAgICAgaWYgKChpbnRlcnZhbF9idXJzdCkgJiYgKC0taW50ZXJ2YWxfY291bnQgPT0gMCkpIHsKKyAgICAgICAgLyogY2FsbCBzaWdzdXNwZW5kIGFuZCB3YWl0IGZvciB0aGUgaW50ZXJ2YWwgdGltZXIgdG8gZ2V0IHVzICovCisgICAgICAgIC8qIG91dCAqLworICAgICAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzdXNwZW5kXG4iKTsKKyAgICAgICAgICBmZmx1c2god2hlcmUpOworICAgICAgICB9CisgICAgICAgIGlmIChzaWdzdXNwZW5kKCZzaWduYWxfc2V0KSA9PSBFRkFVTFQpIHsKKyAgICAgICAgICBmcHJpbnRmKHdoZXJlLAorICAgICAgICAgICAgICAgICAgInNlbmRfeHRpX3RjcF9zdHJlYW06IGZhdWx0IHdpdGggc2lnbmFsIHNldCFcbiIpOworICAgICAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OworICAgICAgfQorI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgICAKKyAgICAgIC8qIG5vdyB3ZSB3YW50IHRvIG1vdmUgb3VyIHBvaW50ZXIgdG8gdGhlIG5leHQgcG9zaXRpb24gaW4gdGhlICovCisgICAgICAvKiBkYXRhIGJ1ZmZlci4uLndlIG1heSBhbHNvIHdhbnQgdG8gd3JhcCBiYWNrIHRvIHRoZSAiYmVnaW5uaW5nIiAqLworICAgICAgLyogb2YgdGhlIGJ1ZmZlcnNwYWNlLCBzbyB3ZSB3aWxsIG1vZCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgKi8KKyAgICAgIC8qIGJ5IHRoZSBzZW5kIHdpZHRoLCBhbmQgdXNlIHRoYXQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgdG8gYWRkICovCisgICAgICAvKiB0byB0aGUgYmFzZSBwb2ludGVyLiAqLworICAgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisgICAgICBpZiAoYnl0ZXNfcmVtYWluaW5nKSB7CisgICAgICAgIGJ5dGVzX3JlbWFpbmluZyAtPSBzZW5kX3NpemU7CisgICAgICB9CisgICAgfQorCisgICAgLyogVGhlIHRlc3QgaXMgb3Zlci4gRmx1c2ggdGhlIGJ1ZmZlcnMgdG8gdGhlIHJlbW90ZSBlbmQuIFdlIGRvIGEgKi8KKyAgICAvKiBncmFjZWZ1bCByZWxlYXNlIHRvIGluc3VyZSB0aGF0IGFsbCBkYXRhIGhhcyBiZWVuIHRha2VuIGJ5IHRoZSAqLworICAgIC8qIHJlbW90ZS4gKi8gCisKKyAgICAvKiBidXQgZmlyc3QsIGlmIHRoZSB2ZXJib3NpdHkgaXMgZ3JlYXRlciB0aGFuIDEsIGZpbmQtb3V0IHdoYXQgKi8KKyAgICAvKiB0aGUgVENQIG1heGltdW0gc2VnbWVudF9zaXplIHdhcyAoaWYgcG9zc2libGUpICovCisgICAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAgIHRjcF9tc3MgPSAtMTsKKyAgICAgIGdldF94dGlfaW5mbyhzZW5kX3NvY2tldCxpbmZvX3N0cnVjdCk7CisgICAgfQorICAgIAorICAgIGlmICh0X3NuZHJlbChzZW5kX3NvY2tldCkgPT0gLTEpIHsKKyAgICAgIHRfZXJyb3IoIm5ldHBlcmY6IGNhbm5vdCBzaHV0ZG93biB0Y3Agc3RyZWFtIHNvY2tldCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogaGFuZyBhIHRfcmN2cmVsKCkgb2ZmIHRoZSBzb2NrZXQgdG8gYmxvY2sgdW50aWwgdGhlIHJlbW90ZSBoYXMgKi8KKyAgICAvKiBicm91Z2h0IGFsbCB0aGUgZGF0YSB1cCBpbnRvIHRoZSBhcHBsaWNhdGlvbi4gaXQgd2lsbCBkbyBhICovCisgICAgLyogdF9zZWRyZWwgdG8gY2F1c2UgYSBGSU4gdG8gYmUgc2VudCBvdXIgd2F5LiBXZSB3aWxsIGFzc3VtZSB0aGF0ICovCisgICAgLyogYW55IGV4aXQgZnJvbSB0aGUgdF9yY3ZyZWwoKSBjYWxsIGlzIGdvb2QuLi4gcmFqIDIvOTUgKi8KKyAgICAKKyAgICBpZiAoZGVidWcgPiAxKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBoYW5nIGEgcmVjZWl2ZSBmb3IgZ3JhY2VmdWwgcmVsZWFzZS5cbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisKKyAgICB0X3JjdnJlbChzZW5kX3NvY2tldCk7CisgICAgCisgICAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAgIC8qIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1IHV0aWxpemF0aW9uICovCisgICAgCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOyAgICAvKiB3YXMgY3B1IGJlaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZWFzdXJlZCBhbmQgaG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb25nIGRpZCB3ZSByZWFsbHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJ1bj8gKi8KKyAgICAKKyAgICAvKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgcmVtb3RlIGVuZC4gVGhlIHJlbW90ZSB3aWxsIGhhdmUgKi8KKyAgICAvKiBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZiBpdCAqLworICAgIC8qIHdhc24ndCBzdXBwb3NlZCB0byBjYXJlLCBpdCB3aWxsIHJldHVybiBvYnZpb3VzIHZhbHVlcy4gKi8KKyAgICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorICAgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogcmVtb3RlIGVycm9yIik7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhydXB1dCB3YXMgZm9yIHRoZSB0ZXN0LiBJbiB0aGUgZnV0dXJlLCAqLworICAgIC8qIHdlIG1heSB3YW50IHRvIGluY2x1ZGUgYSBjYWxjdWxhdGlvbiBvZiB0aGUgdGhydXB1dCBtZWFzdXJlZCBieSAqLworICAgIC8qIHRoZSByZW1vdGUsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCBmb3IgYSBUQ1Agc3RyZWFtIHRlc3QsICovCisgICAgLyogdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiBXZSBjYWxjdWxhdGUgKi8KKyAgICAvKiBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggd2FzIGNvbnRyb2xsZWQuICovCisgICAgLyogSWYgaXQgd2FzIHRpbWUsIHdlIG5lZWRlZCB0bywgYW5kIGlmIGl0IHdhcyBieSBieXRlcywgdGhlIHVzZXIgbWF5ICovCisgICAgLyogaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgKi8KKyAgICAvKiBzZW5kX3NpemUsIHNvIHdlIHJlYWxseSBkaWRuJ3Qgc2VuZCB3aGF0IGhlIGFza2VkIGZvciA7LSkgKi8KKyAgICAKKyAgICBieXRlc19zZW50ICA9IHh0aV90Y3Bfc3RyZWFtX3Jlc3VsdC0+Ynl0ZXNfcmVjZWl2ZWQ7CisKKyAgICB0aHJ1cHV0ICAgICA9IGNhbGNfdGhydXB1dChieXRlc19zZW50KTsKKyAgICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAgIC8qIHV0aWxpemF0aW9uIGZvciB0aGUgc3lzdGVtKHMpICovCisgICAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgICAvKiBhIG5vdGUgb2YgdGhpcyBmb3IgdGhlIHVzZXIncyBiZW5lZml0Li4uKi8KKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgICAgCisgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiAgID0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCAgICA9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiAgID0gLTEuMDsKKyAgICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgICAgPSAtMS4wOworICAgICAgfQorICAgICAgCisgICAgICBpZiAocmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgICAKKyAgICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiAgPSB4dGlfdGNwX3N0cmVhbV9yZXN1bHQtPmNwdV91dGlsOworICAgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgICA9IGNhbGNfc2VydmljZV9kZW1hbmQoYnl0ZXNfc2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgICB4dGlfdGNwX3N0cmVhbV9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKyAgICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IC0xLjA7CisgICAgICB9CisgICAgfSAgICAKKyAgICBlbHNlIHsKKyAgICAgIC8qIHdlIHdlcmUgbm90IG1lYXN1cmluZyBjcHUsIGZvciB0aGUgY29uZmlkZW5jZSBzdHVmZiwgd2UgKi8KKyAgICAgIC8qIHNob3VsZCBtYWtlIGl0IC0xLjAgKi8KKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiAgPSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgICA9IC0xLjA7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAtMS4wOworICAgIH0KKworICAgIC8qIGF0IHRoaXMgcG9pbnQsIHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBjb25maWRlbmNlIGluZm9ybWF0aW9uLiAqLworICAgIC8qIGlmIGRlYnVnZ2luZyBpcyBvbiwgY2FsY3VsYXRlX2NvbmZpZGVuY2Ugd2lsbCBwcmludC1vdXQgdGhlICovCisgICAgLyogcGFyYW1ldGVycyB3ZSBwYXNzIGl0ICovCisgICAgCisgICAgY2FsY3VsYXRlX2NvbmZpZGVuY2UoY29uZmlkZW5jZV9pdGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRocnVwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKyAgICAKKyAgICAKKyAgICBjb25maWRlbmNlX2l0ZXJhdGlvbisrOworICB9CisKKyAgLyogYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBmaW5pc2hlZCBtYWtpbmcgYWxsIHRoZSBydW5zIHRoYXQgd2UgKi8KKyAgLyogd2lsbCBiZSBtYWtpbmcuIHNvLCB3ZSBzaG91bGQgZXh0cmFjdCB3aGF0IHRoZSBjYWxjdWF0ZWQgdmFsdWVzICovCisgIC8qIGFyZSBmb3IgYWxsIHRoZSBjb25maWRlbmNlIHN0dWZmLiB3ZSBjb3VsZCBtYWtlIHRoZSB2YWx1ZXMgKi8KKyAgLyogZ2xvYmFsLCBidXQgdGhhdCBzZWVtZWQgYSBsaXR0bGUgbWVzc3ksIGFuZCBpdCBkaWQgbm90IHNlZW0gd29ydGggKi8KKyAgLyogYWxsIHRoZSBtdWNraW5nIHdpdGggaGVhZGVyIGZpbGVzLiBzbywgd2UgY3JlYXRlIGEgcm91dGluZSBtdWNoICovCisgIC8qIGxpa2UgY2FsY3VhbHRlX2NvbmZpZGVuY2UsIHdoaWNoIGp1c3QgcmV0dXJucyB0aGUgbWVhbiB2YWx1ZXMuICovCisgIC8qIHJhaiAxMS85NCAqLworCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhydXB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKworICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKworICBpZiAoY29uZmlkZW5jZSA8IDApIHsKKyAgICAvKiB3ZSBkaWQgbm90IGhpdCBjb25maWRlbmNlLCBidXQgd2VyZSB3ZSBhc2tlZCB0byBsb29rIGZvciBpdD8gKi8KKyAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworICAgIH0KKyAgfQorCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChjcHVfbWV0aG9kKTsKKyAgICByZW1vdGVfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKHh0aV90Y3Bfc3RyZWFtX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisgICAgICAgIGZwcmludGYod2hlcmUsCisgICAgICAgICAgICAgICAgY3B1X2ZtdF8wLAorICAgICAgICAgICAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQlsb2NhbF9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfdGl0bGUsCisJCWZvcm1hdF91bml0cygpLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgcnNyX3NpemUsCQkgICAgICAgIC8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCSAgICAgICAgLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgc2VuZF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHNlbmRzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgdGhydXB1dCwgCQkgICAgICAgIC8qIHdoYXQgd2FzIHRoZSB4ZmVyIHJhdGUgKi8KKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIHRocnVwdXQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSx0cHV0X3RpdGxlLGZvcm1hdF91bml0cygpKTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMSwJCS8qIHRoZSBmb3JtYXQgc3RyaW5nICovCisJICAgICAgcnNyX3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGxzc19zaXplLCAJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIHRocnVwdXQpOy8qIGhvdyBmYXN0IGRpZCBpdCBnbyAqLworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIAorICAvKiBpdCB3b3VsZCBiZSBhIGdvb2QgdGhpbmcgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCBzb21lIG9mIHRoZSAqLworICAvKiBvdGhlciBwYXJhbWV0ZXJzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgZm9yIHRoaXMgdGVzdCwgYnV0IGF0IHRoZSAqLworICAvKiBtb21lbnQsIEkgZG8gbm90IHdpc2ggdG8gZmlndXJlLW91dCBhbGwgdGhlICBmb3JtYXR0aW5nLCBzbyBJIHdpbGwgKi8KKyAgLyoganVzdCBwdXQgdGhpcyBjb21tZW50IGhlcmUgdG8gaGVscCByZW1pbmQgbWUgdGhhdCBpdCBpcyBzb21ldGhpbmcgKi8KKyAgLyogdGhhdCBzaG91bGQgYmUgZG9uZSBhdCBhIGxhdGVyIHRpbWUuICovCisgIAorICBpZiAodmVyYm9zaXR5ID4gMSkgeworICAgIC8qIFRoZSB1c2VyIHdhbnRlZCB0byBrbm93IGl0IGFsbCwgc28gd2Ugd2lsbCBnaXZlIGl0IHRvIGhpbS4gKi8KKyAgICAvKiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5jbHVkZSBhcyBtdWNoIGFzIHdlIGNhbiBmaW5kIGFib3V0ICovCisgICAgLyogVENQIHN0YXRpc3RpY3MsIHRoZSBhbGlnbm1lbnRzIG9mIHRoZSBzZW5kcyBhbmQgcmVjZWl2ZXMgKi8KKyAgICAvKiBhbmQgYWxsIHRoYXQgc29ydCBvZiByb3QuLi4gKi8KKyAgIAorICAgIC8qIHRoaXMgc3R1ZmYgbmVlZHMgdG8gYmUgd29ya2VkLW91dCBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZmlkZW5jZSAqLworICAgIC8qIGludGVydmFscyBhbmQgbXVsdGlwbGUgaXRlcmF0aW9ucyBvZiB0aGUgdGVzdC4uLiByYWogMTEvOTQgKi8KKyAKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgICJCeXRlcyIsCisJICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJICAgIHJlbW90ZV9yZWN2X2FsaWduLAorCSAgICBsb2NhbF9zZW5kX29mZnNldCwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICBieXRlc19zZW50LAorCSAgICBieXRlc19zZW50IC8gKGRvdWJsZSludW1tZXNzYWdlcywKKwkgICAgbnVtbWVzc2FnZXMsCisJICAgIGJ5dGVzX3NlbnQgLyAoZG91YmxlKXh0aV90Y3Bfc3RyZWFtX3Jlc3VsdC0+cmVjdl9jYWxscywKKwkgICAgeHRpX3RjcF9zdHJlYW1fcmVzdWx0LT5yZWN2X2NhbGxzKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICBrc2lua19mbXQyLAorCSAgICB0Y3BfbXNzKTsKKyAgICBmZmx1c2god2hlcmUpOworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgZnByaW50Zih3aGVyZSwiXG5cbkhpc3RvZ3JhbSBvZiB0aW1lIHNwZW50IGluIHNlbmQoKSBjYWxsLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIH0KKyAgCit9CisMCisKKy8qIFRoaXMgaXMgdGhlIHNlcnZlci1zaWRlIHJvdXRpbmUgZm9yIHRoZSB0Y3Agc3RyZWFtIHRlc3QuIEl0IGlzICovCisvKiBpbXBsZW1lbnRlZCBhcyBvbmUgcm91dGluZS4gSSBjb3VsZCBicmVhayB0aGluZ3Mtb3V0IHNvbWV3aGF0LCBidXQgKi8KKy8qIGRpZG4ndCBmZWVsIGl0IHdhcyBuZWNlc3NhcnkuICovCisKK3ZvaWQgCityZWN2X3h0aV90Y3Bfc3RyZWFtKCkKK3sKKyAgCisgIHN0cnVjdCBzb2NrYWRkcl9pbiBteWFkZHJfaW4sIHBlZXJhZGRyX2luOworICBzdHJ1Y3QgdF9iaW5kICAgICAgYmluZF9yZXEsIGJpbmRfcmVzcDsKKyAgc3RydWN0IHRfY2FsbCAgICAgIGNhbGxfcmVxOworCisgIFNPQ0tFVCAgICAgICBzX2xpc3RlbixzX2RhdGE7CisgIGludCAgICAgICAgICAgYWRkcmxlbjsKKyAgaW50CSAgICAgICAgbGVuOworICB1bnNpZ25lZCBpbnQJcmVjZWl2ZV9jYWxsczsKKyAgZmxvYXQJICAgICAgICBlbGFwc2VkX3RpbWU7CisgIGRvdWJsZSAgICAgICAgYnl0ZXNfcmVjZWl2ZWQ7CisgIAorICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBpbnQgICAqbWVzc2FnZV9pbnRfcHRyOworICBpbnQgICBpOworICAKKyAgc3RydWN0IHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSp4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QgeHRpX3RjcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSp4dGlfdGNwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0IHh0aV90Y3Bfc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSp4dGlfdGNwX3N0cmVhbV9yZXN1bHRzOworICAKKyAgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdAk9IAorICAgIChzdHJ1Y3QgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlCT0gCisgICAgKHN0cnVjdCB4dGlfdGNwX3N0cmVhbV9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX3N0cmVhbV9yZXN1bHRzCT0gCisgICAgKHN0cnVjdCB4dGlfdGNwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJuZXRzZXJ2ZXI6IHJlY3ZfeHRpX3RjcF9zdHJlYW06IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdGNwX3N0cmVhbTogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBYVElfVENQX1NUUkVBTV9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3RjcF9zdHJlYW06IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGFsdGVyIHRoZSBtZXNzYWdlX3B0ciB2YXJpYWJsZSB0byBiZSBhdCB0aGUgZGVzaXJlZCAqLworICAvKiBhbGlnbm1lbnQgd2l0aCB0aGUgZGVzaXJlZCBvZmZzZXQuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV90Y3Bfc3RyZWFtOiByZXF1ZXN0ZWQgYWxpZ25tZW50IG9mICVkXG4iLAorCSAgICB4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIExldCdzIGNsZWFyLW91dCBvdXIgc29ja2FkZHIgZm9yIHRoZSBzYWtlIG9mIGNsZWFubGluZXMuIFRoZW4gd2UgKi8KKyAgLyogY2FuIHB1dCBpbiBPVVIgdmFsdWVzICEtKSBBdCBzb21lIHBvaW50LCB3ZSBtYXkgd2FudCB0byBuYWlsIHRoaXMgKi8KKyAgLyogc29ja2V0IHRvIGEgcGFydGljdWxhciBuZXR3b3JrLWxldmVsIGFkZHJlc3MsIGJ1dCBmb3Igbm93LCAqLworICAvKiBJTkFERFJfQU5ZIHNob3VsZCBiZSBqdXN0IGZpbmUuICovCisgIAorICBiemVybygoY2hhciAqKSZteWFkZHJfaW4sCisJc2l6ZW9mKG15YWRkcl9pbikpOworICBteWFkZHJfaW4uc2luX2ZhbWlseSAgICAgID0gQUZfSU5FVDsKKyAgbXlhZGRyX2luLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisgIG15YWRkcl9pbi5zaW5fcG9ydCAgICAgICAgPSAwOworICAKKyAgLyogR3JhYiBhIHNvY2tldCB0byBsaXN0ZW4gb24sIGFuZCB0aGVuIGxpc3RlbiBvbiBpdC4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3RjcF9zdHJlYW06IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBjcmVhdGVfeHRpX2VuZHBvaW50IGV4cGVjdHMgdG8gZmluZCBzb21lIHRoaW5ncyBpbiB0aGUgZ2xvYmFsICovCisgIC8qIHZhcmlhYmxlcywgc28gc2V0IHRoZSBnbG9iYWxzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3QuICovCisgIC8qIG9uY2UgdGhlIHNvY2tldCBoYXMgYmVlbiBjcmVhdGVkLCB3ZSB3aWxsIHNldCB0aGUgcmVzcG9uc2UgdmFsdWVzICovCisgIC8qIGJhc2VkIG9uIHRoZSB1cGRhdGVkIHZhbHVlIG9mIHRob3NlIGdsb2JhbHMuIHJhaiA3Lzk0ICovCisgIGxzc19zaXplID0geHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemUgPSB4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplOworICBsb2Nfbm9kZWxheSA9IHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPm5vX2RlbGF5OworICBsb2NfcmN2YXZvaWQgPSB4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0geHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+c29fc25kYXZvaWQ7CisKKyNpZmRlZiBfX2FscGhhCisgIAorICAvKiBvayAtIGV2ZW4gb24gYSBERUMgYm94LCBzdHJpbmdzIGFyZSBzdHJpbmdzLiBJIGRpbid0IHJlYWxseSB3YW50ICovCisgIC8qIHRvIG50b2hsIHRoZSB3b3JkcyBvZiBhIHN0cmluZy4gc2luY2UgSSBkb24ndCB3YW50IHRvIHRlYWNoIHRoZSAqLworICAvKiBzZW5kXyBhbmQgcmVjdl8gX3JlcXVlc3QgYW5kIF9yZXNwb25zZSByb3V0aW5lcyBhYm91dCB0aGUgdHlwZXMsICovCisgIC8qIEkgd2lsbCBwdXQgImFudGktbnRvaGwiIGNhbGxzIGhlcmUuIEkgaW1hZ2luZSB0aGF0IHRoZSAicHVyZSIgKi8KKyAgLyogc29sdXRpb24gd291bGQgYmUgdG8gdXNlIFhEUiwgYnV0IEkgYW0gc3RpbGwgbGVhcnkgb2YgYmVpbmcgYWJsZSAqLworICAvKiB0byBmaW5kIFhEUiBsaWJzIG9uIGFsbCBwbGF0Zm9ybXMgSSB3YW50IHJ1bm5pbmcgbmV0cGVyZi4gcmFqICovCisgIHsKKyAgICBpbnQgKmNoYXJ3b3JkOworICAgIGludCAqaW5pdHdvcmQ7CisgICAgaW50ICpsYXN0d29yZDsKKyAgICAKKyAgICBpbml0d29yZCA9IChpbnQgKikgeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+eHRpX2RldmljZTsKKyAgICBsYXN0d29yZCA9IGluaXR3b3JkICsgKCh4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5kZXZfbmFtZV9sZW4gKyAzKSAvIDQpOworICAgIAorICAgIGZvciAoY2hhcndvcmQgPSBpbml0d29yZDsKKwkgY2hhcndvcmQgPCBsYXN0d29yZDsKKwkgY2hhcndvcmQrKykgeworICAgICAgCisgICAgICAqY2hhcndvcmQgPSBodG9ubCgqY2hhcndvcmQpOworICAgIH0KKyAgfQorICAKKyNlbmRpZiAvKiBfX2FscGhhICovCisKKyAgc19saXN0ZW4gPSBjcmVhdGVfeHRpX2VuZHBvaW50KHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPnh0aV9kZXZpY2UpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTGV0J3MgZ2V0IGFuIGFkZHJlc3MgYXNzaWduZWQgdG8gdGhpcyBzb2NrZXQgc28gd2UgY2FuIHRlbGwgdGhlICovCisgIC8qIGluaXRpYXRvciBob3cgdG8gcmVhY2ggdGhlIGRhdGEgc29ja2V0LiBUaGVyZSBtYXkgYmUgYSBkZXNpcmUgdG8gKi8KKyAgLyogbmFpbCB0aGlzIHNvY2tldCB0byBhIHNwZWNpZmljIElQIGFkZHJlc3MgaW4gYSBtdWx0aS1ob21lZCwgKi8KKyAgLyogbXVsdGktY29ubmVjdGlvbiBzaXR1YXRpb24sIGJ1dCBmb3Igbm93LCB3ZSdsbCBpZ25vcmUgdGhlIGlzc3VlICovCisgIC8qIGFuZCBjb25jZW50cmF0ZSBvbiBzaW5nbGUgY29ubmVjdGlvbiB0ZXN0aW5nLiAqLworICAKKyAgYmluZF9yZXEuYWRkci5tYXhsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgYmluZF9yZXEuYWRkci5sZW4gICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgYmluZF9yZXEuYWRkci5idWYgICAgPSAoY2hhciAqKSZteWFkZHJfaW47CisgIGJpbmRfcmVxLnFsZW4gICAgICAgID0gMTsKKworICBiaW5kX3Jlc3AuYWRkci5tYXhsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgYmluZF9yZXNwLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIGJpbmRfcmVzcC5hZGRyLmJ1ZiAgICA9IChjaGFyICopJm15YWRkcl9pbjsKKyAgYmluZF9yZXNwLnFsZW4gICAgICAgID0gMTsKKworICBpZiAodF9iaW5kKHNfbGlzdGVuLAorCSAgICAgJmJpbmRfcmVxLAorCSAgICAgJmJpbmRfcmVzcCkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSB0X2Vycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3Bfc3RyZWFtOiB0X2JpbmQgY29tcGxldGUgcG9ydCAlZFxuIiwKKwkgICAgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogd2hhdCBzb3J0IG9mIHNpemVzIGRpZCB3ZSBlbmQtdXAgd2l0aD8gKi8KKyAgaWYgKHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY2VpdmVfc2l6ZSA9PSAwKSB7CisgICAgaWYgKGxzcl9zaXplID4gMCkgeworICAgICAgcmVjdl9zaXplID0gbHNyX3NpemU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmVjdl9zaXplID0gNDA5NjsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgcmVjdl9zaXplID0geHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+cmVjZWl2ZV9zaXplOworICB9CisgIAorICAvKiB3ZSB3YW50IHRvIHNldC11cCBvdXIgcmVjdl9yaW5nIGluIGEgbWFubmVyIGFuYWxhZ291cyB0byB3aGF0IHdlICovCisgIC8qIGRvIG9uIHRoZSBzZW5kaW5nIHNpZGUuIHRoaXMgaXMgbW9yZSBmb3IgdGhlIHNha2Ugb2Ygc3ltbWV0cnkgKi8KKyAgLyogdGhhbiBmb3IgdGhlIG5lZWRzIG9mIHNheSBjb3B5IGF2b2lkYW5jZSwgYnV0IGl0IG1pZ2h0IGFsc28gYmUgKi8KKyAgLyogbW9yZSByZWFsaXN0aWMgLSB0aGlzIHdheSBvbmUgY291bGQgY29uY2VpdmFibHkgZ28gd2l0aCBhICovCisgIC8qIGRvdWJsZS1idWZmZXJpbmcgc2NoZW1lIHdoZW4gdGFraW5nIHRoZSBkYXRhIGFuIHB1dHRpbmcgaXQgaW50byAqLworICAvKiB0aGUgZmlsZXN5c3RlbSBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiByYWogNy85NCAqLworCisgIGlmIChyZWN2X3dpZHRoID09IDApIHsKKyAgICByZWN2X3dpZHRoID0gKGxzcl9zaXplL3JlY3Zfc2l6ZSkgKyAxOworICAgIGlmIChyZWN2X3dpZHRoID09IDEpIHJlY3Zfd2lkdGgrKzsKKyAgfQorCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgcmVjdl9zaXplLAorCQkJCSAgIHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV90Y3Bfc3RyZWFtOiByZWN2IGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyID0gCisgICAgKGludCkgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgLTEgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IDAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgaWYgKHh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgeHRpX3RjcF9zdHJlYW1fcmVzcG9uc2UtPm1lYXN1cmVfY3B1ID0gMTsKKyAgICB4dGlfdGNwX3N0cmVhbV9yZXNwb25zZS0+Y3B1X3JhdGUgPSAKKyAgICAgIGNhbGlicmF0ZV9sb2NhbF9jcHUoeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIGVsc2UgeworICAgIHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIH0KKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgeHRpX3RjcF9zdHJlYW1fcmVzcG9uc2UtPnNlbmRfYnVmX3NpemUgPSBsc3Nfc2l6ZTsKKyAgeHRpX3RjcF9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgeHRpX3RjcF9zdHJlYW1fcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgeHRpX3RjcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworICB4dGlfdGNwX3N0cmVhbV9yZXNwb25zZS0+cmVjZWl2ZV9zaXplID0gcmVjdl9zaXplOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucy4gZm9yIHh0aSwgKi8KKyAgLyogdGhlIHRfbGlzdGVuIGNhbGwgaXMgYmxvY2tpbmcgYnkgZGVmYXVsdCAtIHRoaXMgaXMgZGlmZmVyZW50ICovCisgIC8qIHNlbWFudGljcyBmcm9tIEJTRCAtIHByb2JhYmx5IGhhcyB0byBkbyB3aXRoIGJlaW5nIGFibGUgdG8gcmVqZWN0ICovCisgIC8qIGEgY2FsbCBiZWZvcmUgYW4gYWNjZXB0ICovCisgIGNhbGxfcmVxLmFkZHIubWF4bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIGNhbGxfcmVxLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIGNhbGxfcmVxLmFkZHIuYnVmICAgID0gKGNoYXIgKikmcGVlcmFkZHJfaW47CisgIGNhbGxfcmVxLm9wdC5tYXhsZW4gID0gMDsKKyAgY2FsbF9yZXEub3B0LmxlbiAgICAgPSAwOworICBjYWxsX3JlcS5vcHQuYnVmICAgICA9IE5VTEw7CisgIGNhbGxfcmVxLnVkYXRhLm1heGxlbj0gMDsKKyAgY2FsbF9yZXEudWRhdGEubGVuICAgPSAwOworICBjYWxsX3JlcS51ZGF0YS5idWYgICA9IDA7CisKKyAgaWYgKHRfbGlzdGVuKHNfbGlzdGVuLCAmY2FsbF9yZXEpID09IC0xKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfeHRpX3RjcF9zdHJlYW06IHRfbGlzdGVuOiBlcnJubyAlZCB0X2Vycm5vICVkXG4iLAorCSAgICBlcnJubywKKwkgICAgdF9lcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IHRfZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdGNwX3N0cmVhbTogdF9saXN0ZW4gY29tcGxldGUgdF9sb29rIDB4JS40eFxuIiwKKwkgICAgdF9sb29rKHNfbGlzdGVuKSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogbm93IGp1c3QgcnViYmVyIHN0YW1wIHRoZSB0aGluZy4gd2Ugd2FudCB0byB1c2UgdGhlIHNhbWUgZmQ/IHNvICovCisgIC8qIHdlIHdpbGwganVzdCBlcXVhdGUgc19kYXRhIHdpdGggc19saXN0ZW4uIHRoaXMgc2VlbXMgYSBsaXR0bGUgKi8KKyAgLyogaG9rZXkgdG8gbWUsIGJ1dCB0aGVuIEknbSBhIEJTRCBiaWdnb3Qgc3RpbGwuIHJhaiAyLzk1ICovCisgIHNfZGF0YSA9IHNfbGlzdGVuOworICBpZiAodF9hY2NlcHQoc19saXN0ZW4sCisJICAgICAgIHNfZGF0YSwKKwkgICAgICAgJmNhbGxfcmVxKSA9PSAtMSkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3Bfc3RyZWFtOiB0X2FjY2VwdDogZXJybm8gJWQgdF9lcnJubyAlZFxuIiwKKwkgICAgZXJybm8sCisJICAgIHRfZXJybm8pOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3Bfc3RyZWFtOiB0X2FjY2VwdCBjb21wbGV0ZSB0X2xvb2sgMHglLjR4XG4iLAorCSAgICB0X2xvb2soc19kYXRhKSk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiAgICAgICAgICAgICAgICAgICAgIHJlbW90ZSBpcyAlcyBwb3J0ICVkXG4iLAorCSAgICBpbmV0X250b2EoKihzdHJ1Y3QgaW5fYWRkciAqKSZwZWVyYWRkcl9pbi5zaW5fYWRkciksCisJICAgIG50b2hzKHBlZXJhZGRyX2luLnNpbl9wb3J0KSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydCh4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSk7CisgIAorICAvKiBUaGUgbG9vcCB3aWxsIGV4aXQgd2hlbiB0aGUgc2VuZGVyIGRvZXMgYSB0X3NuZHJlbCwgd2hpY2ggd2lsbCAqLworICAvKiByZXR1cm4gVF9MT09LIGVycm9yIGZyb20gdGhlIHRfcmVjdiAqLworICAKKyNpZmRlZiBESVJUWQorICAgIC8qIHdlIHdhbnQgdG8gZGlydHkgc29tZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZWdlcnMgaW4gdGhlIGJ1ZmZlciAqLworICAgIC8qIHdlIGFyZSBhYm91dCB0byByZWN2LiB3ZSBtYXkgYWxzbyB3YW50IHRvIGJyaW5nIHNvbWUgbnVtYmVyIG9mICovCisgICAgLyogdGhlbSBjbGVhbmx5IGludG8gdGhlIGNhY2hlLiBUaGUgY2xlYW4gb25lcyB3aWxsIGZvbGxvdyBhbnkgZGlydHkgKi8KKyAgICAvKiBvbmVzIGludG8gdGhlIGNhY2hlLiAqLworCisgIGFjY2Vzc19idWZmZXIocmVjdl9yaW5nLT5idWZmZXJfcHRyLAorCQlyZWN2X3NpemUsCisJCXh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPmRpcnR5X2NvdW50LAorCQl4dGlfdGNwX3N0cmVhbV9yZXF1ZXN0LT5jbGVhbl9jb3VudCk7CisKKyNlbmRpZiAvKiBESVJUWSAqLworCisgIGJ5dGVzX3JlY2VpdmVkID0gMDsKKyAgcmVjZWl2ZV9jYWxscyAgPSAwOworCisgIHdoaWxlICgobGVuID0gdF9yY3Yoc19kYXRhLAorCQkgICAgICByZWN2X3JpbmctPmJ1ZmZlcl9wdHIsCisJCSAgICAgIHJlY3Zfc2l6ZSwKKwkJICAgICAgJnh0aV9mbGFncykpICE9IC0xKSB7CisgICAgYnl0ZXNfcmVjZWl2ZWQgKz0gbGVuOworICAgIHJlY2VpdmVfY2FsbHMrKzsKKyAgICAKKyAgICAvKiBtb3JlIHRvIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUgcmVjdl9yaW5nICovCisgICAgcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworICAgIAorI2lmZGVmIERJUlRZCisKKyAgYWNjZXNzX2J1ZmZlcihyZWN2X3JpbmctPmJ1ZmZlcl9wdHIsCisJCXJlY3Zfc2l6ZSwKKwkJeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+ZGlydHlfY291bnQsCisJCXh0aV90Y3Bfc3RyZWFtX3JlcXVlc3QtPmNsZWFuX2NvdW50KTsKKworI2VuZGlmIC8qIERJUlRZICovCisgIH0KKyAgCisgIGlmICh0X2xvb2soc19kYXRhKSA9PSBUX09SRFJFTCkgeworICAgIC8qIHRoaXMgaXMgYSBub3JtYWwgZXhpdCBwYXRoICovCisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJyZWN2X3h0aV90Y3Bfc3RyZWFtOiB0X3JjdiBUX09SRFJFTCBpbmRpY2F0ZWRcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdGNwX3N0cmVhbTogdF9yY3Y6IGVycm5vICVkIHRfZXJybm8gJWQgbGVuICVkIiwKKwkgICAgZXJybm8sCisJICAgIHRfZXJybm8sCisJICAgIGxlbik7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiB0X2xvb2sgMHglLjR4IiwKKwkgICAgdF9sb29rKHNfZGF0YSkpOworICAgIGZmbHVzaCh3aGVyZSk7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSB0X2Vycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiByZWNlaXZlIHRoZSByZWxlYXNlIGFuZCBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgd2UgaGF2ZSAqLworICAvKiByZWNlaXZlZCBhbGwgdGhlIGRhdGEuIHJhaiAzLzk1ICovCisKKyAgaWYgKHRfcmN2cmVsKHNfZGF0YSkgPT0gLTEpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9ICAgIAorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3Bfc3RyZWFtOiB0X3JjdnJlbCBjb21wbGV0ZVxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIGlmICh0X3NuZHJlbChzX2RhdGEpID09IC0xKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfeHRpX3RjcF9zdHJlYW06IHRfc25kcmVsIGNvbXBsZXRlXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgY3B1X3N0b3AoeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUsJmVsYXBzZWRfdGltZSk7CisgIAorICAvKiBzZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBzZW5kZXIJCQkqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfeHRpX3RjcF9zdHJlYW06IGdvdCAlZyBieXRlc1xuIiwKKwkgICAgYnl0ZXNfcmVjZWl2ZWQpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3Bfc3RyZWFtOiBnb3QgJWQgcmVjdnNcbiIsCisJICAgIHJlY2VpdmVfY2FsbHMpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHh0aV90Y3Bfc3RyZWFtX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkCT0gYnl0ZXNfcmVjZWl2ZWQ7CisgIHh0aV90Y3Bfc3RyZWFtX3Jlc3VsdHMtPmVsYXBzZWRfdGltZQk9IGVsYXBzZWRfdGltZTsKKyAgeHRpX3RjcF9zdHJlYW1fcmVzdWx0cy0+cmVjdl9jYWxscwk9IHJlY2VpdmVfY2FsbHM7CisgIAorICBpZiAoeHRpX3RjcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB4dGlfdGNwX3N0cmVhbV9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoMC4wKTsKKyAgfTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3Bfc3RyZWFtOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiICAgICAgICAgICAgICAgICBieXRlc19yZWNlaXZlZCAlZyByZWNlaXZlX2NhbGxzICVkXG4iLAorCSAgICBieXRlc19yZWNlaXZlZCwKKwkgICAgcmVjZWl2ZV9jYWxscyk7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgIiAgICAgICAgICAgICAgICAgbGVuICVkXG4iLAorCSAgICBsZW4pOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHh0aV90Y3Bfc3RyZWFtX3Jlc3VsdHMtPmNwdV9tZXRob2QgPSBjcHVfbWV0aG9kOworICBzZW5kX3Jlc3BvbnNlKCk7CisKKyAgLyogd2UgYXJlIG5vdyBkb25lIHdpdGggdGhlIHNvY2tldCAqLworICB0X2Nsb3NlKHNfZGF0YSk7CisKK30KKwwKKworIC8qIHRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBzZW5kaW5nIChuZXRwZXJmKSBzaWRlIG9mIHRoZSBYVElfVENQX1JSICovCisgLyogdGVzdC4gKi8KKwordm9pZCAKK3NlbmRfeHRpX3RjcF9ycihjaGFyIHJlbW90ZV9ob3N0W10pCit7CisgIAorICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCAgUmVzcC4gICBFbGFwc2VkICBUcmFucy5cblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICAgU2l6ZSAgICBUaW1lICAgICBSYXRlICAgICAgICAgXG5cCitieXRlcyAgQnl0ZXMgIGJ5dGVzICAgIGJ5dGVzICAgc2Vjcy4gICAgcGVyIHNlYyAgIFxuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICAlLTZkICAlLTYuMmYgICAlNy4yZiAgIFxuIjsKKyAgY2hhciAqdHB1dF9mbXRfMV9saW5lXzIgPSAiXAorJS02ZCAlLTZkXG4iOworICAKKyAgY2hhciAqY3B1X3RpdGxlID0gIlwKK0xvY2FsIC9SZW1vdGVcblwKK1NvY2tldCBTaXplICAgUmVxdWVzdCBSZXNwLiAgRWxhcHNlZCBUcmFucy4gICBDUFUgICAgQ1BVICAgIFMuZGVtICAgUy5kZW1cblwKK1NlbmQgICBSZWN2ICAgU2l6ZSAgICBTaXplICAgVGltZSAgICBSYXRlICAgICBsb2NhbCAgcmVtb3RlIGxvY2FsICAgcmVtb3RlXG5cCitieXRlcyAgYnl0ZXMgIGJ5dGVzICAgYnl0ZXMgIHNlY3MuICAgcGVyIHNlYyAgJSUgJWMgICAgJSUgJWMgICAgdXMvVHIgICB1cy9UclxuXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8wID0KKyAgICAiJTYuM2YgJWNcbiI7CisgIAorICBjaGFyICpjcHVfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAlLTZkICUtNi4yZiAgJS02LjJmICAlLTYuMmYgJS02LjJmICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICprc2lua19mbXQgPSAiXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0XG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdlxuXAorJTVkICAlNWQgICAlNWQgICU1ZFxuIjsKKyAgCisgIAorICBpbnQJCQl0aW1lZF9vdXQgPSAwOworICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIGludAlsZW47CisgIGNoYXIJKnRlbXBfbWVzc2FnZV9wdHI7CisgIGludAludW1tZXNzYWdlczsKKyAgU09DS0VUIHNlbmRfc29ja2V0OworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBkb3VibGUJYnl0ZXNfeGZlcmQ7CisKKyAgc3RydWN0IHJpbmdfZWx0ICpzZW5kX3Jpbmc7CisgIHN0cnVjdCByaW5nX2VsdCAqcmVjdl9yaW5nOworICAKKyAgaW50CXJzcF9ieXRlc19sZWZ0OworICBpbnQJcnNwX2J5dGVzX3JlY3ZkOworICAKKyAgZmxvYXQJbG9jYWxfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgZmxvYXQJcmVtb3RlX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworICBkb3VibGUJdGhydXB1dDsKKyAgCisgIHN0cnVjdAlob3N0ZW50CSAgICAgICAgKmhwOworICBzdHJ1Y3QJc29ja2FkZHJfaW4Jc2VydmVyOworICB1bnNpZ25lZCAgICAgIGludCAgICAgICAgICAgICBhZGRyOworICAKKyAgc3RydWN0IHRfY2FsbCBzZXJ2ZXJfY2FsbDsKKworICBzdHJ1Y3QJeHRpX3RjcF9ycl9yZXF1ZXN0X3N0cnVjdAkqeHRpX3RjcF9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJeHRpX3RjcF9ycl9yZXNwb25zZV9zdHJ1Y3QJKnh0aV90Y3BfcnJfcmVzcG9uc2U7CisgIHN0cnVjdAl4dGlfdGNwX3JyX3Jlc3VsdHNfc3RydWN0CSp4dGlfdGNwX3JyX3Jlc3VsdDsKKyAgCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgaW50CWludGVydmFsX2NvdW50OworICBzaWdzZXRfdCBzaWduYWxfc2V0OworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisKKyAgeHRpX3RjcF9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCB4dGlfdGNwX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX3JyX3Jlc3BvbnNlPQorICAgIChzdHJ1Y3QgeHRpX3RjcF9ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX3JyX3Jlc3VsdAk9CisgICAgKHN0cnVjdCB4dGlfdGNwX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisKKyAgYnplcm8oKGNoYXIgKikmc2VydmVyLAorCXNpemVvZihzZXJ2ZXIpKTsKKyAgCisgIC8qIGl0IHdvdWxkIHNlZW0gdGhhdCB3aGlsZSBIUC1VWCB3aWxsIGFsbG93IGFuIElQIGFkZHJlc3MgKGFzIGEgKi8KKyAgLyogc3RyaW5nKSBpbiBhIGNhbGwgdG8gZ2V0aG9zdGJ5bmFtZSwgb3RoZXIsIGxlc3MgZW5saWdodGVuZWQgKi8KKyAgLyogc3lzdGVtcyBkbyBub3QuIGZpeCBmcm9tIGF3amFja3NAY2Euc2FuZGlhLmdvdiByYWogMTAvOTUgKi8gIAorICAvKiBvcmRlciBjaGFuZ2VkIHRvIGNoZWNrIGZvciBJUCBhZGRyZXNzIGZpcnN0LiByYWogNy85NiAqLworCisgIGlmICgoYWRkciA9IGluZXRfYWRkcihyZW1vdGVfaG9zdCkpID09IFNPQ0tFVF9FUlJPUikgeworICAgIC8qIGl0IHdhcyBub3QgYW4gSVAgYWRkcmVzcywgdHJ5IGl0IGFzIGEgbmFtZSAqLworICAgIGlmICgoaHAgPSBnZXRob3N0YnluYW1lKHJlbW90ZV9ob3N0KSkgPT0gTlVMTCkgeworICAgICAgLyogd2UgaGF2ZSBubyBpZGVhIHdoYXQgaXQgaXMgKi8KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgImVzdGFibGlzaF9jb250cm9sOiBjb3VsZCBub3QgcmVzb2x2ZSB0aGUgZGVzdGluYXRpb24gJXNcbiIsCisJICAgICAgcmVtb3RlX2hvc3QpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogaXQgd2FzIGEgdmFsaWQgcmVtb3RlX2hvc3QgKi8KKyAgICAgIGJjb3B5KGhwLT5oX2FkZHIsCisJICAgIChjaGFyICopJnNlcnZlci5zaW5fYWRkciwKKwkgICAgaHAtPmhfbGVuZ3RoKTsKKyAgICAgIHNlcnZlci5zaW5fZmFtaWx5ID0gaHAtPmhfYWRkcnR5cGU7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIGl0IHdhcyBhIHZhbGlkIElQIGFkZHJlc3MgKi8KKyAgICBzZXJ2ZXIuc2luX2FkZHIuc19hZGRyID0gYWRkcjsKKyAgICBzZXJ2ZXIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgIH0gICAgCisgIAorICBpZiAoIHByaW50X2hlYWRlcnMgKSB7CisgICAgZnByaW50Zih3aGVyZSwiWFRJIFRDUCBSRVFVRVNUL1JFU1BPTlNFIFRFU1QiKTsKKyAgICBmcHJpbnRmKHdoZXJlLCIgdG8gJXMiLCByZW1vdGVfaG9zdCk7CisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICIgOiArLy0lMy4xZiUlIEAgJTJkJSUgY29uZi4iLAorCSAgICAgIGludGVydmFsLzAuMDIsCisJICAgICAgY29uZmlkZW5jZV9sZXZlbCk7CisgICAgICB9CisgICAgaWYgKGxvY19ub2RlbGF5IHx8IHJlbV9ub2RlbGF5KSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCIgOiBub2RlbGF5Iik7CisgICAgfQorICAgIGlmIChsb2Nfc25kYXZvaWQgfHwgCisJbG9jX3JjdmF2b2lkIHx8CisJcmVtX3NuZGF2b2lkIHx8CisJcmVtX3JjdmF2b2lkKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCIgOiBjb3B5IGF2b2lkYW5jZSIpOworICAgIH0KKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIiA6IGhpc3RvZ3JhbSIpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBmcHJpbnRmKHdoZXJlLCIgOiBpbnRlcnZhbCIpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisjaWZkZWYgRElSVFkgCisgICAgZnByaW50Zih3aGVyZSwiIDogZGlydHkgZGF0YSIpOworI2VuZGlmIC8qIERJUlRZICovCisgICAgZnByaW50Zih3aGVyZSwiXG4iKTsKKyAgfQorICAKKyAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycyAqLworICAKKyAgc2VuZF9yaW5nID0gTlVMTDsKKyAgcmVjdl9yaW5nID0gTlVMTDsKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKworICAvKiB3ZSBoYXZlIGEgZ3JlYXQtYmlnIHdoaWxlIGxvb3Agd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyAqLworICAvKiB3ZSBydW4gYSBwYXJ0aWN1bGFyIHRlc3QuIHRoaXMgaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBhICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKEkgcmVhbGx5IHNob3VsZCBoYXZlIHN0YXllZCBhd2FrZSBkdXJpbmcgKi8KKyAgLyogcHJvYnN0YXRzIDopLiBJZiB0aGUgdXNlciBkaWQgbm90IHJlcXVlc3QgY29uZmlkZW5jZSBtZWFzdXJlbWVudCAqLworICAvKiAobm8gY29uZmlkZW5jZSBpcyB0aGUgZGVmYXVsdCkgdGhlbiB3ZSB3aWxsIG9ubHkgZ28gdGhvdWdoIHRoZSAqLworICAvKiBsb29wIG9uY2UuIHRoZSBjb25maWRlbmNlIHN0dWZmIG9yaWdpbmF0ZXMgZnJvbSB0aGUgZm9sa3MgYXQgSUJNICovCisKKyAgd2hpbGUgKCgoY29uZmlkZW5jZSA8IDApICYmIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8IGl0ZXJhdGlvbl9tYXgpKSB8fAorCSAoY29uZmlkZW5jZV9pdGVyYXRpb24gPD0gaXRlcmF0aW9uX21pbikpIHsKKworICAgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMuIHdlIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB3ZSBtaWdodCBiZSAqLworICAgIC8qIGdvaW5nIHRocm91Z2ggdGhlIGxvb3AgbW9yZSB0aGFuIG9uY2UuICovCisKKyAgICBudW1tZXNzYWdlcyAgICAgPSAwOworICAgIGJ5dGVzX3hmZXJkICAgICA9IDAuMDsKKyAgICB0aW1lc191cCAgICAgICAgPSAwOworICAgIHRpbWVkX291dCAgICAgICA9IDA7CisgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKworICAgIC8qIHNldC11cCB0aGUgZGF0YSBidWZmZXJzIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldC4gKi8KKyAgICAvKiBzaW5jZSB0aGlzIGlzIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCBkZWZhdWx0IHRoZSBzZW5kX3dpZHRoIGFuZCAqLworICAgIC8qIHJlY3Zfd2lkdGggdG8gMSBhbmQgbm90IHR3byByYWogNy85NCAqLworCisgICAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgICAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgcmVjdl93aWR0aCA9IDE7CisgIAorICAgIGlmIChzZW5kX3JpbmcgPT0gTlVMTCkgeworICAgICAgc2VuZF9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3Jpbmcoc2VuZF93aWR0aCwKKwkJCQkgICAgICAgcmVxX3NpemUsCisJCQkJICAgICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3NlbmRfb2Zmc2V0KTsKKyAgICB9CisKKyAgICBpZiAocmVjdl9yaW5nID09IE5VTEwpIHsKKyAgICAgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgICAgIHJzcF9zaXplLAorCQkJCSAgICAgICBsb2NhbF9yZWN2X2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9yZWN2X29mZnNldCk7CisgICAgfQorICAgIAorICAgIC8qc2V0IHVwIHRoZSBkYXRhIHNvY2tldCAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc2VuZF9zb2NrZXQgPSBjcmVhdGVfeHRpX2VuZHBvaW50KGxvY194dGlfZGV2aWNlKTsKKyAgCisgICAgaWYgKHNlbmRfc29ja2V0ID09IElOVkFMSURfU09DS0VUKXsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF94dGlfdGNwX3JyOiB0Y3Agc3RyZWFtIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfeHRpX3RjcF9ycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKworICAgIC8qIGl0IHdvdWxkIHNlZW0gdGhhdCB3aXRoIFhUSSwgdGhlcmUgaXMgbm8gaW1wbGljaXQgYmluZCBvbiBhICovCisgICAgLyogY29ubmVjdCwgc28gd2UgaGF2ZSB0byBtYWtlIGEgY2FsbCB0byB0X2JpbmQuIHRoaXMgaXMgbm90ICovCisgICAgLyogdGVycmlibHkgY29udmVuaWVudCwgYnV0IEkgc3VwcG9zZSB0aGF0ICJzdGFuZGFyZCBpcyBiZXR0ZXIgKi8KKyAgICAvKiB0aGFuIGJldHRlciIgOikgcmFqIDIvOTUgKi8KKworICAgIGlmICh0X2JpbmQoc2VuZF9zb2NrZXQsIE5VTEwsIE5VTEwpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgdF9lcnJvcigic2VuZF94dGlfdGNwX3N0cmVhbTogdF9iaW5kIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgCisgICAgLyogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBjcHUgdXRpbGl6YXRpb24gbWVhc3VyZW1lbnRzLCB3ZSBtdXN0ICovCisgICAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAgIC8qIHRoZW1zZWx2ZXMuIElmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgdGhlIGNwdSByYXRlLCB0aGVuICovCisgICAgLyogY2FsaWJyYXRlX2xvY2FsX2NwdSB3aWxsIHJldHVybiByYXRoZXIgcXVpY2tseSBhcyBpdCB3aWxsIGhhdmUgKi8KKyAgICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAgIC8qIGFsbCB0aGUgIm5vcm1hbCIgY2FsaWJyYXRpb24gc3R1ZmYgYW5kIHJldHVybiB0aGUgcmF0ZSBiYWNrLiovCisgICAgCisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgICAgbG9jYWxfY3B1X3JhdGUgPSBjYWxpYnJhdGVfbG9jYWxfY3B1KGxvY2FsX2NwdV9yYXRlKTsKKyAgICB9CisgICAgCisgICAgLyogVGVsbCB0aGUgcmVtb3RlIGVuZCB0byBkbyBhIGxpc3Rlbi4gVGhlIHNlcnZlciBhbHRlcnMgdGhlIHNvY2tldCAqLworICAgIC8qIHBhcmFtdGVycyBvbiB0aGUgb3RoZXIgc2lkZSBhdCB0aGlzIHBvaW50LCBoZW5jZSB0aGUgcmVhc29uIGZvciAqLworICAgIC8qIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkICovCisgICAgLyogbm90IHNwZWNpZnkgYW55IG9mIHRoZSBwYXJhbWV0ZXJzLCB0aGV5IHdpbGwgYmUgcGFzc2VkIGFzIDAsIHdoaWNoICovCisgICAgLyogd2lsbCBpbmRpY2F0ZSB0byB0aGUgcmVtb3RlIHRoYXQgbm8gY2hhbmdlcyBiZXlvbmQgdGhlIHN5c3RlbSdzICovCisgICAgLyogZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgKi8KKyAgICAvKiBkZWZhdWx0IHRvIDgsIHdoaWNoIHdpbGwgYmUgbm8gYWxpZ25tZW50IGFsdGVyYXRpb25zLiAqLworICAgIAorICAgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQk9CURPX1hUSV9UQ1BfUlI7CisgICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemU7CisgICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplCT0JcnNzX3NpemU7CisgICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCAgPQlyZW1vdGVfcmVjdl9hbGlnbjsKKyAgICB4dGlfdGNwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0CT0JcmVtb3RlX3JlY3Zfb2Zmc2V0OworICAgIHh0aV90Y3BfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQgID0JcmVtb3RlX3NlbmRfYWxpZ247CisgICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldAk9CXJlbW90ZV9zZW5kX29mZnNldDsKKyAgICB4dGlfdGNwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZQk9CXJlcV9zaXplOworICAgIHh0aV90Y3BfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZQk9CXJzcF9zaXplOworICAgIHh0aV90Y3BfcnJfcmVxdWVzdC0+bm9fZGVsYXkJPQlyZW1fbm9kZWxheTsKKyAgICB4dGlfdGNwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgICB4dGlfdGNwX3JyX3JlcXVlc3QtPmNwdV9yYXRlCT0JcmVtb3RlX2NwdV9yYXRlOworICAgIHh0aV90Y3BfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQJPQlyZW1fcmN2YXZvaWQ7CisgICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZAk9CXJlbV9zbmRhdm9pZDsKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICB4dGlfdGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90aW1lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHh0aV90Y3BfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPQl0ZXN0X3RyYW5zICogLTE7CisgICAgfQorCisgICAgc3RyY3B5KHh0aV90Y3BfcnJfcmVxdWVzdC0+eHRpX2RldmljZSwgcmVtX3h0aV9kZXZpY2UpOworICAKKyNpZmRlZiBfX2FscGhhCisgIAorICAgIC8qIG9rIC0gZXZlbiBvbiBhIERFQyBib3gsIHN0cmluZ3MgYXJlIHN0cmluZ3MuIEkgZGlkbid0IHJlYWxseSB3YW50ICovCisgICAgLyogdG8gbnRvaGwgdGhlIHdvcmRzIG9mIGEgc3RyaW5nLiBzaW5jZSBJIGRvbid0IHdhbnQgdG8gdGVhY2ggdGhlICovCisgICAgLyogc2VuZF8gYW5kIHJlY3ZfIF9yZXF1ZXN0IGFuZCBfcmVzcG9uc2Ugcm91dGluZXMgYWJvdXQgdGhlIHR5cGVzLCAqLworICAgIC8qIEkgd2lsbCBwdXQgImFudGktbnRvaGwiIGNhbGxzIGhlcmUuIEkgaW1hZ2luZSB0aGF0IHRoZSAicHVyZSIgKi8KKyAgICAvKiBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgWERSLCBidXQgSSBhbSBzdGlsbCBsZWFyeSBvZiBiZWluZyBhYmxlICovCisgICAgLyogdG8gZmluZCBYRFIgbGlicyBvbiBhbGwgcGxhdGZvcm1zIEkgd2FudCBydW5uaW5nIG5ldHBlcmYuIHJhaiAqLworICAgIHsKKyAgICAgIGludCAqY2hhcndvcmQ7CisgICAgICBpbnQgKmluaXR3b3JkOworICAgICAgaW50ICpsYXN0d29yZDsKKyAgICAgIAorICAgICAgaW5pdHdvcmQgPSAoaW50ICopIHh0aV90Y3BfcnJfcmVxdWVzdC0+eHRpX2RldmljZTsKKyAgICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKHN0cmxlbihyZW1feHRpX2RldmljZSkgKyAzKSAvIDQpOworICAgICAgCisgICAgICBmb3IgKGNoYXJ3b3JkID0gaW5pdHdvcmQ7CisJICAgY2hhcndvcmQgPCBsYXN0d29yZDsKKwkgICBjaGFyd29yZCsrKSB7CisJCisJKmNoYXJ3b3JkID0gbnRvaGwoKmNoYXJ3b3JkKTsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogX19hbHBoYSAqLworICAgIAorICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfeHRpX3RjcF9ycjogcmVxdWVzdGluZyBUQ1AgcnIgdGVzdFxuIik7CisgICAgfQorICAgIAorICAgIHNlbmRfcmVxdWVzdCgpOworICAgIAorICAgIC8qIFRoZSByZXNwb25zZSBmcm9tIHRoZSByZW1vdGUgd2lsbCBjb250YWluIGFsbCBvZiB0aGUgcmVsZXZhbnQgCSovCisgICAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAqLworICAgIC8qIHRoZSB2YXJpYWJsZXMgaGVyZSBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgaWYgZGVzaXJlZC4gIFRoZQkqLworICAgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgICAvKiBhbGwgdGhlIG5lZWRlZCBzZXQtdXAgd2Ugd2lsbCBoYXZlIGNhbGlicmF0ZWQgdGhlIGNwdSBsb2NhbGx5CSovCisgICAgLyogYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QsIGFuZCB3aWxsIGdyYWIgdGhlIGNvdW50ZXIgdmFsdWUgcmlnaHQqLworICAgIC8qIGFmdGVyIHRoZSBjb25uZWN0IHJldHVybnMuIFRoZSByZW1vdGUgd2lsbCBncmFiIHRoZSBjb3VudGVyIHJpZ2h0Ki8KKyAgICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAgIC8qIGJlaW5nIHNlbnQgZm9yIHRoZSBUQ1AgdGVzdHMuCQkJCQkqLworICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgIAorICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICAgIGlmIChkZWJ1ZykKKwlmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKyAgICAgIHJzcl9zaXplICAgICAgICAgID0geHRpX3RjcF9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKyAgICAgIHJzc19zaXplICAgICAgICAgID0geHRpX3RjcF9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICAgIHJlbV9ub2RlbGF5ICAgICAgID0geHRpX3RjcF9ycl9yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgICByZW1vdGVfY3B1X3VzYWdlICA9IHh0aV90Y3BfcnJfcmVzcG9uc2UtPm1lYXN1cmVfY3B1OworICAgICAgcmVtb3RlX2NwdV9yYXRlICAgPSB4dGlfdGNwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKyAgICAgIC8qIG1ha2Ugc3VyZSB0aGF0IHBvcnQgbnVtYmVycyBhcmUgaW4gbmV0d29yayBvcmRlciAqLworICAgICAgc2VydmVyLnNpbl9wb3J0ICAgPSAoc2hvcnQpeHRpX3RjcF9ycl9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlcjsKKyAgICAgIHNlcnZlci5zaW5fcG9ydCAgID0gaHRvbnMoc2VydmVyLnNpbl9wb3J0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgcGVycm9yKCJuZXRwZXJmOiByZW1vdGUgZXJyb3IiKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLypDb25uZWN0IHVwIHRvIHRoZSByZW1vdGUgcG9ydCBvbiB0aGUgZGF0YSBzb2NrZXQgICovCisgICAgbWVtc2V0ICgmc2VydmVyX2NhbGwsIDAsIHNpemVvZihzZXJ2ZXJfY2FsbCkpOworICAgIHNlcnZlcl9jYWxsLmFkZHIubWF4bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgc2VydmVyX2NhbGwuYWRkci5sZW4gICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICBzZXJ2ZXJfY2FsbC5hZGRyLmJ1ZiAgICA9IChjaGFyICopJnNlcnZlcjsKKworICAgIGlmICh0X2Nvbm5lY3Qoc2VuZF9zb2NrZXQsIAorCQkgICZzZXJ2ZXJfY2FsbCwKKwkJICBOVUxMKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICB0X2Vycm9yKCJuZXRwZXJmOiBzZW5kX3h0aV90Y3BfcnI6IGRhdGEgc29ja2V0IGNvbm5lY3QgZmFpbGVkIik7CisgICAgICBwcmludGYoIiBwb3J0OiAlZFxuIixudG9ocyhzZXJ2ZXIuc2luX3BvcnQpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogRGF0YSBTb2NrZXQgc2V0LXVwIGlzIGZpbmlzaGVkLiBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zLCBlaXRoZXIgdGhlICovCisgICAgLyogY29ubmVjdCB3b3VsZCBoYXZlIGZhaWxlZCwgb3IgdGhlIHByZXZpb3VzIHJlc3BvbnNlIHdvdWxkIGhhdmUgKi8KKyAgICAvKiBpbmRpY2F0ZWQgYSBwcm9ibGVtLiBJIGZhaWxlZCB0byBzZWUgdGhlIHZhbHVlIG9mIHRoZSBleHRyYSAqLworICAgIC8qIG1lc3NhZ2UgYWZ0ZXIgdGhlIGFjY2VwdCBvbiB0aGUgcmVtb3RlLiBJZiBpdCBmYWlsZWQsIHdlJ2xsIHNlZSBpdCAqLworICAgIC8qIGhlcmUuIElmIGl0IGRpZG4ndCwgd2UgbWlnaHQgYXMgd2VsbCBzdGFydCBwdW1waW5nIGRhdGEuICovCisgICAgCisgICAgLyogU2V0LXVwIHRoZSB0ZXN0IGVuZCBjb25kaXRpb25zLiBGb3IgYSByZXF1ZXN0L3Jlc3BvbnNlIHRlc3QsIHRoZXkgKi8KKyAgICAvKiBjYW4gYmUgZWl0aGVyIHRpbWUgb3IgdHJhbnNhY3Rpb24gYmFzZWQuICovCisgICAgCisgICAgaWYgKHRlc3RfdGltZSkgeworICAgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGVuZCB0aGUgdGVzdCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLiAqLworICAgICAgdGltZXNfdXAgPSAwOworICAgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICAgIHN0YXJ0X3RpbWVyKHRlc3RfdGltZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogVGhlIHRlc3RlciB3YW50ZWQgdG8gc2VuZCBhIG51bWJlciBvZiBieXRlcy4gKi8KKyAgICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgICB0aW1lc191cCA9IDE7CisgICAgfQorICAgIAorICAgIC8qIFRoZSBjcHVfc3RhcnQgcm91dGluZSB3aWxsIGdyYWIgdGhlIGN1cnJlbnQgdGltZSBhbmQgcG9zc2libHkgKi8KKyAgICAvKiB2YWx1ZSBvZiB0aGUgaWRsZSBjb3VudGVyIGZvciBsYXRlciB1c2UgaW4gbWVhc3VyaW5nIGNwdSAqLworICAgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgICAKKyAgICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgaWYgKChpbnRlcnZhbF9idXJzdCkgfHwgKGRlbW9fbW9kZSkpIHsKKyAgICAgIC8qIHplcm8gbWVhbnMgdGhhdCB3ZSBuZXZlciBwYXVzZSwgc28gd2UgbmV2ZXIgc2hvdWxkIG5lZWQgdGhlICovCisgICAgICAvKiBpbnRlcnZhbCB0aW1lciwgdW5sZXNzIHdlIGFyZSBpbiBkZW1vX21vZGUgKi8KKyAgICAgIHN0YXJ0X2l0aW1lcihpbnRlcnZhbF93YXRlKTsKKyAgICB9CisgICAgaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsKKyAgICAvKiBnZXQgdGhlIHNpZ25hbCBzZXQgZm9yIHRoZSBjYWxsIHRvIHNpZ3N1c3BlbmQgKi8KKyAgICBpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCAoc2lnc2V0X3QgKilOVUxMLCAmc2lnbmFsX3NldCkgIT0gMCkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAic2VuZF94dGlfdGNwX3JyOiB1bmFibGUgdG8gZ2V0IHNpZ21hc2sgZXJybm8gJWRcbiIsCisJICAgICAgZXJybm8pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisgICAgCisgICAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAgIC8qIGNvbnRyb2xsZWQgYnkgdGltZSwgdGhlIGJ5dGUgY291bnQgY2hlY2sgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlLiAqLworICAgIC8qIFdoZW4gdGhlIHRlc3QgaXMgY29udHJvbGxlZCBieSBieXRlIGNvdW50LCB0aGUgdGltZSB0ZXN0IHdpbGwgKi8KKyAgICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgICAvKiBleHByZXNzaW9uIHdpbGwgZ28gZmFsc2UgYW5kIHdlIHdpbGwgc3RvcCBzZW5kaW5nIGRhdGEuIEkgdGhpbmsgSSAqLworICAgIC8qIGp1c3QgYXJiaXRyYXJpbHkgZGVjcmVtZW50IHRyYW5zX3JlbWFpbmluZyBmb3IgdGhlIHRpbWVkIHRlc3QsIGJ1dCAqLworICAgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgICAgLyogdGhlIHNlbmQgYnVmZmVyIGFuZCB0aGUgcmVjZWl2ZSBidWZmZXIgc2hvdWxkIGJlIHRoZSBzYW1lIGJ1ZmZlci4gKi8KKworICAgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKyAgICAgIC8qIHNlbmQgdGhlIHJlcXVlc3QuIHdlIGFzc3VtZSB0aGF0IGlmIHdlIHVzZSBhIGJsb2NraW5nIHNvY2tldCwgKi8KKyAgICAgIC8qIHRoZSByZXF1ZXN0IHdpbGwgYmUgc2VudCBhdCBvbmUgc2hvdC4gKi8KKyAgICAgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICAvKiB0aW1lc3RhbXAganVzdCBiZWZvcmUgb3VyIGNhbGwgdG8gc2VuZCwgYW5kIHRoZW4gYWdhaW4ganVzdCAqLworICAgICAgLyogYWZ0ZXIgdGhlIHJlY2VpdmUgcmFqIDgvOTQgKi8KKyAgICAgIEhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKyAgICAgIAorICAgICAgaWYoKGxlbj10X3NuZChzZW5kX3NvY2tldCwKKwkJICAgIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJICAgIHJlcV9zaXplLAorCQkgICAgMCkpICE9IHJlcV9zaXplKSB7CisJaWYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IDApKSB7CisJICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiBhICovCisJICAvKiB0aW1lZCB0ZXN0LiAqLworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKyAgICAgICAgZnByaW50Zih3aGVyZSwKKwkJInNlbmRfeHRpX3RjcF9ycjogdF9zbmQ6IGVycm5vICVkIHRfZXJybm8gJWQgdF9sb29rIDB4JS40eFxuIiwKKwkJZXJybm8sCisJCXRfZXJybm8sCisJCXRfbG9vayhzZW5kX3NvY2tldCkpOworCWZmbHVzaCh3aGVyZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgICB9CisgICAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisgICAgICAKKyAgICAgIC8qIHJlY2VpdmUgdGhlIHJlc3BvbnNlICovCisgICAgICByc3BfYnl0ZXNfbGVmdCA9IHJzcF9zaXplOworICAgICAgdGVtcF9tZXNzYWdlX3B0ciAgPSByZWN2X3JpbmctPmJ1ZmZlcl9wdHI7CisgICAgICB3aGlsZShyc3BfYnl0ZXNfbGVmdCA+IDApIHsKKwlpZigocnNwX2J5dGVzX3JlY3ZkPXRfcmN2KHNlbmRfc29ja2V0LAorCQkJCSAgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCQkgIHJzcF9ieXRlc19sZWZ0LAorCQkJCSAgJnh0aV9mbGFncykpID09IFNPQ0tFVF9FUlJPUikgeworCSAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJICAgIC8qIFdlIGhpdCB0aGUgZW5kIG9mIGEgdGltZWQgdGVzdC4gKi8KKwkgICAgdGltZWRfb3V0ID0gMTsKKwkgICAgYnJlYWs7CisJICB9CisJICBmcHJpbnRmKHdoZXJlLAorCQkgICJzZW5kX3h0aV90Y3BfcnI6IHRfcmN2OiBlcnJubyAlZCB0X2Vycm5vICVkIHRfbG9vayAweCV4XG4iLAorCQkgIGVycm5vLAorCQkgIHRfZXJybm8sCisJCSAgdF9sb29rKHNlbmRfc29ja2V0KSk7CisJICBmZmx1c2god2hlcmUpOworCSAgZXhpdCgxKTsKKwl9CisJcnNwX2J5dGVzX2xlZnQgLT0gcnNwX2J5dGVzX3JlY3ZkOworCXRlbXBfbWVzc2FnZV9wdHIgICs9IHJzcF9ieXRlc19yZWN2ZDsKKyAgICAgIH0JCisgICAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisgICAgICAKKyAgICAgIGlmICh0aW1lZF9vdXQpIHsKKwkvKiB3ZSBtYXkgaGF2ZSBiZWVuIGluIGEgbmVzdGVkIHdoaWxlIGxvb3AgLSB3ZSBuZWVkICovCisJLyogYW5vdGhlciBjYWxsIHRvIGJyZWFrLiAqLworCWJyZWFrOworICAgICAgfQorICAgICAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIEhJU1RfdGltZXN0YW1wKCZ0aW1lX3R3byk7CisgICAgICBISVNUX2FkZCh0aW1lX2hpc3QsZGVsdGFfbWljcm8oJnRpbWVfb25lLCZ0aW1lX3R3bykpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMgICAgICAKKyAgICAgIGlmIChkZW1vX21vZGUpIHsKKwl1bml0c190aGlzX3RpY2sgKz0gMTsKKyAgICAgIH0KKyAgICAgIC8qIGluIHRoaXMgY2FzZSwgdGhlIGludGVydmFsIGNvdW50IGlzIHRoZSBjb3VudC1kb3duIGNvdXRlciAqLworICAgICAgLyogdG8gZGVjaWRlIHRvIHNsZWVwIGZvciBhIGxpdHRsZSBiaXQgKi8KKyAgICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpICYmICgtLWludGVydmFsX2NvdW50ID09IDApKSB7CisJLyogY2FsbCBzaWdzdXNwZW5kIGFuZCB3YWl0IGZvciB0aGUgaW50ZXJ2YWwgdGltZXIgdG8gZ2V0IHVzICovCisJLyogb3V0ICovCisJaWYgKGRlYnVnKSB7CisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzdXNwZW5kXG4iKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisJfQorCWlmIChzaWdzdXNwZW5kKCZzaWduYWxfc2V0KSA9PSBFRkFVTFQpIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgInNlbmRfeHRpX3VkcF9ycjogZmF1bHQgd2l0aCBzaWduYWwgc2V0IVxuIik7CisJICBmZmx1c2god2hlcmUpOworCSAgZXhpdCgxKTsKKwl9CisJaW50ZXJ2YWxfY291bnQgPSBpbnRlcnZhbF9idXJzdDsKKyAgICAgIH0KKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworICAgICAgCisgICAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKwl0cmFuc19yZW1haW5pbmctLTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGRlYnVnID4gMykgeworCWlmICgobnVtbWVzc2FnZXMgJSAxMDApID09IDApIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgIlRyYW5zYWN0aW9uICVkIGNvbXBsZXRlZFxuIiwKKwkJICBudW1tZXNzYWdlcyk7CisJICBmZmx1c2god2hlcmUpOworCX0KKyAgICAgIH0KKyAgICB9CisKKyAgICAKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgICAgLyogd2lsbCBhbHNvIHN0b3JlLWF3YXkgdGhlIG5lY2Vzc2FyaWVzIGZvciBjcHUgdXRpbGl6YXRpb24gKi8KKyAgICAKKyAgICBjcHVfc3RvcChsb2NhbF9jcHVfdXNhZ2UsJmVsYXBzZWRfdGltZSk7CS8qIHdhcyBjcHUgYmVpbmcgKi8KKwkJCQkJCS8qIG1lYXN1cmVkPyBob3cgbG9uZyAqLworCQkJCQkJLyogZGlkIHdlIHJlYWxseSBydW4/ICovCisgICAgCisgICAgLyogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIHJlbW90ZSBlbmQuIFRoZSByZW1vdGUgd2lsbCBoYXZlICovCisgICAgLyogY2FsY3VsYXRlZCBzZXJ2aWNlIGRlbWFuZCBhbmQgYWxsIHRob3NlIGludGVyZXN0aW5nIHRoaW5ncy4gSWYgaXQgKi8KKyAgICAvKiB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQgd2lsbCByZXR1cm4gb2J2aW91cyB2YWx1ZXMuICovCisgICAgCisgICAgcmVjdl9yZXNwb25zZSgpOworICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICAgIGlmIChkZWJ1ZykKKwlmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogcmVtb3RlIGVycm9yIik7CisgICAgICAKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhydXB1dCB3YXMgZm9yIHRoZSB0ZXN0LiAqLworICAKKyAgICBieXRlc194ZmVyZAk9IChyZXFfc2l6ZSAqIG51bW1lc3NhZ2VzKSArIChyc3Bfc2l6ZSAqIG51bW1lc3NhZ2VzKTsKKyAgICB0aHJ1cHV0CT0gbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lOworICAKKyAgICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIC8qIFdlIG11c3Qgbm93IGRvIGEgbGl0dGxlIG1hdGggZm9yIHNlcnZpY2UgZGVtYW5kIGFuZCBjcHUgKi8KKyAgICAgIC8qIHV0aWxpemF0aW9uIGZvciB0aGUgc3lzdGVtKHMpICovCisgICAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAgIC8qIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbChzKS4gV2UgbmVlZCB0byBtYWtlICovCisgICAgICAvKiBhIG5vdGUgb2YgdGhpcyBmb3IgdGhlIHVzZXIncyBiZW5lZml0Li4uKi8KKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24gPSBjYWxjX2NwdV91dGlsKDAuMCk7CisJLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisJLyogbXVsdGlwbHkgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBieSAxMDI0IHRvIGdldCAqLworCS8qICJnb29kIiBudW1iZXJzICovCisJbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgIDAuMCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgMCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAtMS4wOworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gLTEuMDsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0geHRpX3RjcF9ycl9yZXN1bHQtPmNwdV91dGlsOworCS8qIHNpbmNlIGNhbGNfc2VydmljZSBkZW1hbmQgaXMgZG9pbmcgbXMvS3VuaXQgd2Ugd2lsbCAqLworCS8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKwkvKiAiZ29vZCIgbnVtYmVycyAqLworCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCA9IGNhbGNfc2VydmljZV9kZW1hbmQoKGRvdWJsZSkgbnVtbWVzc2FnZXMqMTAyNCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCQkJCSAgICB4dGlfdGNwX3JyX3Jlc3VsdC0+bnVtX2NwdXMpOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IC0xLjA7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kICA9IC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3ZXJlIG5vdCBtZWFzdXJpbmcgY3B1LCBmb3IgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYsIHdlICovCisgICAgICAvKiBzaG91bGQgbWFrZSBpdCAtMS4wICovCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAtMS4wOworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gLTEuMDsKKyAgICB9CisKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSB0aHJ1cHV0LAorCQkJIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQkJIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgICAgCisgICAgCisgICAgY29uZmlkZW5jZV9pdGVyYXRpb24rKzsKKworICAgIC8qIHdlIGFyZSBub3cgZG9uZSB3aXRoIHRoZSBzb2NrZXQsIHNvIGNsb3NlIGl0ICovCisgICAgdF9jbG9zZShzZW5kX3NvY2tldCk7CisKKyAgfQorCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmdGhydXB1dCwKKwkJCSAgICAmbG9jYWxfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZyZW1vdGVfY3B1X3V0aWxpemF0aW9uLAorCQkJICAgICZsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSAgICAmcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsKKworICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKworICBpZiAoY29uZmlkZW5jZSA8IDApIHsKKyAgICAvKiB3ZSBkaWQgbm90IGhpdCBjb25maWRlbmNlLCBidXQgd2VyZSB3ZSBhc2tlZCB0byBsb29rIGZvciBpdD8gKi8KKyAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgIGRpc3BsYXlfY29uZmlkZW5jZSgpOworICAgIH0KKyAgfQorCisgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZChjcHVfbWV0aG9kKTsKKyAgICByZW1vdGVfY3B1X21ldGhvZCA9IGZvcm1hdF9jcHVfbWV0aG9kKHh0aV90Y3BfcnJfcmVzdWx0LT5jcHVfbWV0aG9kKTsKKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQlsb2NhbF9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfdGl0bGUsCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCXJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIGxzcl9zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBndWVzcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIHRocnVwdXQsCisJICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uLAkvKiBsb2NhbCBjcHUgKi8KKwkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAkvKiByZW1vdGUgY3B1ICovCisJICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQsCS8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kICovCisJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzIsCisJICAgICAgcnNzX3NpemUsCisJICAgICAgcnNyX3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8qIFRoZSB0ZXN0ZXIgZGlkIG5vdCB3aXNoIHRvIG1lYXN1cmUgc2VydmljZSBkZW1hbmQuICovCisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzAsCisJICAgICAgdGhydXB1dCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgICAgfQorCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8xLAkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAorCSAgICAgIGxzcl9zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVzcG9uc2VzICovCisJICAgICAgZWxhcHNlZF90aW1lLCAJCS8qIGhvdyBsb25nIGRpZCBpdCB0YWtlICovCisJICAgICAgdGhydXB1dCk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICAKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgLyogaG93IHRvIGhhbmRsZSB0aGUgdmVyYm9zZSBpbmZvcm1hdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YgKi8KKyAgLyogY29uZmlkZW5jZSBpbnRlcnZhbHMgaXMgeWV0IHRvIGJlIGRldGVybWluZWQuLi4gcmFqIDExLzk0ICovCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBUQ1Agc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgIAorICAgIGZwcmludGYod2hlcmUsCisJICAgIGtzaW5rX2ZtdCwKKwkgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0LAorCSAgICBsb2NhbF9zZW5kX29mZnNldCwKKwkgICAgcmVtb3RlX3JlY3Zfb2Zmc2V0KTsKKworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgZnByaW50Zih3aGVyZSwiXG5IaXN0b2dyYW0gb2YgcmVxdWVzdC9yZXNwb25zZSB0aW1lc1xuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisKKyAgfQorICAKK30KKwwKK3ZvaWQKK3NlbmRfeHRpX3VkcF9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKQoreworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoJCQkJCQkJCQkqLworICAvKiAgICAgICAgICAgICAgIAlVRFAgVW5pZGlyZWN0aW9uYWwgU2VuZCBUZXN0ICAgICAgICAgICAgICAgICAgICAqLworICAvKgkJCQkJCQkJCSovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICBjaGFyICp0cHV0X3RpdGxlID0gIlwKK1NvY2tldCAgTWVzc2FnZSAgRWxhcHNlZCAgICAgIE1lc3NhZ2VzICAgICAgICAgICAgICAgIFxuXAorU2l6ZSAgICBTaXplICAgICBUaW1lICAgICAgICAgT2theSBFcnJvcnMgICBUaHJvdWdocHV0XG5cCitieXRlcyAgIGJ5dGVzICAgIHNlY3MgICAgICAgICAgICAjICAgICAgIyAgICVzL3NlY1xuXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMCA9CisgICAgIiU3LjJmXG4iOworICAKKyAgY2hhciAqdHB1dF9mbXRfMSA9ICJcCislNmQgICU2ZCAgICUtNy4yZiAgICU3ZCAlNmQgICAgJTcuMmZcblwKKyU2ZCAgICAgICAgICAgJS03LjJmICAgJTdkICAgICAgICAgICAlNy4yZlxuXG4iOworICAKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitTb2NrZXQgIE1lc3NhZ2UgIEVsYXBzZWQgICAgICBNZXNzYWdlcyAgICAgICAgICAgICAgICAgICBDUFUgICAgICBTZXJ2aWNlXG5cCitTaXplICAgIFNpemUgICAgIFRpbWUgICAgICAgICBPa2F5IEVycm9ycyAgIFRocm91Z2hwdXQgICBVdGlsICAgICBEZW1hbmRcblwKK2J5dGVzICAgYnl0ZXMgICAgc2VjcyAgICAgICAgICAgICMgICAgICAjICAgJXMvc2VjICUlICVjJWMgICAgIHVzL0tCXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4yZiAlY1xuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMSA9ICJcCislNmQgICU2ZCAgICUtNy4yZiAgICU3ZCAlNmQgICAgJTcuMWYgICAgICUtNi4yZiAgICUtNi4zZlxuXAorJTZkICAgICAgICAgICAlLTcuMmYgICAlN2QgICAgICAgICAgICU3LjFmICAgICAlLTYuMmYgICAlLTYuM2ZcblxuIjsKKyAgCisgIHVuc2lnbmVkIGludAltZXNzYWdlc19yZWN2ZDsKKyAgdW5zaWduZWQgaW50IAltZXNzYWdlc19zZW50OworICB1bnNpZ25lZCBpbnQJZmFpbGVkX3NlbmRzOworCisgIGZsb2F0CWVsYXBzZWRfdGltZSwgIAorICAgICAgICByZWN2X2VsYXBzZWQsCisgICAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwKKyAgICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbjsKKyAgCisgIGZsb2F0CSBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwgcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworICBkb3VibGUgbG9jYWxfdGhydXB1dCwgcmVtb3RlX3RocnVwdXQ7CisgIGRvdWJsZSBieXRlc19zZW50OworICBkb3VibGUgYnl0ZXNfcmVjdmQ7CisgIAorICAKKyAgaW50CWxlbjsKKyAgaW50CSptZXNzYWdlX2ludF9wdHI7CisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBTT0NLRVQgZGF0YV9zb2NrZXQ7CisgIAorICB1bnNpZ25lZCBpbnQgc3VtX21lc3NhZ2VzX3NlbnQ7CisgIHVuc2lnbmVkIGludCBzdW1fbWVzc2FnZXNfcmVjdmQ7CisgIHVuc2lnbmVkIGludCBzdW1fZmFpbGVkX3NlbmRzOworICBkb3VibGUgc3VtX2xvY2FsX3RocnVwdXQ7CisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICBpbnQJaW50ZXJ2YWxfY291bnQ7CisgIHNpZ3NldF90IHNpZ25hbF9zZXQ7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgCisgIHN0cnVjdCAgIGhvc3RlbnQgICAgICpocDsKKyAgc3RydWN0ICAgc29ja2FkZHJfaW4gc2VydmVyOworICB1bnNpZ25lZCBpbnQgICAgICAgICBhZGRyOworICAKKyAgc3RydWN0IHRfdW5pdGRhdGEgdW5pdGRhdGE7CisgICAKKyAgc3RydWN0IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSp4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSp4dGlfdWRwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0IHh0aV91ZHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSp4dGlfdWRwX3N0cmVhbV9yZXN1bHRzOworICAKKyAgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdCAgPSAKKyAgICAoc3RydWN0IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdWRwX3N0cmVhbV9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgeHRpX3VkcF9zdHJlYW1fcmVzdWx0cyAgPSAKKyAgICAoc3RydWN0IHh0aV91ZHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworCisgIC8qIHNpbmNlIHdlIGFyZSBub3cgZGlzY29ubmVjdGVkIGZyb20gdGhlIGNvZGUgdGhhdCBlc3RhYmxpc2hlZCB0aGUgKi8KKyAgLyogY29udHJvbCBzb2NrZXQsIGFuZCBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIGRpZmZlcmVudCAqLworICAvKiBwcm90b2NvbHMgYW5kIHN1Y2gsIHdlIGFyZSBwYXNzZWQgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBob3N0IGFuZCAqLworICAvKiBtdXN0IHR1cm4gdGhhdCBpbnRvIHRoZSB0ZXN0IHNwZWNpZmljIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24uICovCisgIAorICBiemVybygoY2hhciAqKSZzZXJ2ZXIsCisJc2l6ZW9mKHNlcnZlcikpOworICAKKyAgLyogaXQgd291bGQgc2VlbSB0aGF0IHdoaWxlIEhQLVVYIHdpbGwgYWxsb3cgYW4gSVAgYWRkcmVzcyAoYXMgYSAqLworICAvKiBzdHJpbmcpIGluIGEgY2FsbCB0byBnZXRob3N0YnluYW1lLCBvdGhlciwgbGVzcyBlbmxpZ2h0ZW5lZCAqLworICAvKiBzeXN0ZW1zIGRvIG5vdC4gZml4IGZyb20gYXdqYWNrc0BjYS5zYW5kaWEuZ292IHJhaiAxMC85NSAqLyAgCisgIC8qIG9yZGVyIGNoYW5nZWQgdG8gY2hlY2sgZm9yIElQIGFkZHJlc3MgZmlyc3QuIHJhaiA3Lzk2ICovCisKKyAgaWYgKChhZGRyID0gaW5ldF9hZGRyKHJlbW90ZV9ob3N0KSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgLyogaXQgd2FzIG5vdCBhbiBJUCBhZGRyZXNzLCB0cnkgaXQgYXMgYSBuYW1lICovCisgICAgaWYgKChocCA9IGdldGhvc3RieW5hbWUocmVtb3RlX2hvc3QpKSA9PSBOVUxMKSB7CisgICAgICAvKiB3ZSBoYXZlIG5vIGlkZWEgd2hhdCBpdCBpcyAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiZXN0YWJsaXNoX2NvbnRyb2w6IGNvdWxkIG5vdCByZXNvbHZlIHRoZSBkZXN0aW5hdGlvbiAlc1xuIiwKKwkgICAgICByZW1vdGVfaG9zdCk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBpdCB3YXMgYSB2YWxpZCByZW1vdGVfaG9zdCAqLworICAgICAgYmNvcHkoaHAtPmhfYWRkciwKKwkgICAgKGNoYXIgKikmc2VydmVyLnNpbl9hZGRyLAorCSAgICBocC0+aF9sZW5ndGgpOworICAgICAgc2VydmVyLnNpbl9mYW1pbHkgPSBocC0+aF9hZGRydHlwZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogaXQgd2FzIGEgdmFsaWQgSVAgYWRkcmVzcyAqLworICAgIHNlcnZlci5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworICAgIHNlcnZlci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgfSAgICAKKyAgCisgIGlmICggcHJpbnRfaGVhZGVycyApIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJVRFAgVU5JRElSRUNUSU9OQUwgU0VORCBURVNUIik7CisgICAgZnByaW50Zih3aGVyZSwiIHRvICVzIiwgcmVtb3RlX2hvc3QpOworICAgIGlmIChpdGVyYXRpb25fbWF4ID4gMSkgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiIDogKy8tJTMuMWYlJSBAICUyZCUlIGNvbmYuIiwKKwkgICAgICBpbnRlcnZhbC8wLjAyLAorCSAgICAgIGNvbmZpZGVuY2VfbGV2ZWwpOworICAgICAgfQorICAgIGlmIChsb2Nfc25kYXZvaWQgfHwgCisJbG9jX3JjdmF2b2lkIHx8CisJcmVtX3NuZGF2b2lkIHx8CisJcmVtX3JjdmF2b2lkKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCIgOiBjb3B5IGF2b2lkYW5jZSIpOworICAgIH0KKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgIGZwcmludGYod2hlcmUsIiA6IGhpc3RvZ3JhbSIpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBmcHJpbnRmKHdoZXJlLCIgOiBpbnRlcnZhbCIpOworI2VuZGlmIC8qIFdBTlRfSU5URVJWQUxTICovCisjaWZkZWYgRElSVFkgCisgICAgZnByaW50Zih3aGVyZSwiIDogZGlydHkgZGF0YSIpOworI2VuZGlmIC8qIERJUlRZICovCisgICAgZnByaW50Zih3aGVyZSwiXG4iKTsKKyAgfQkKKyAgCisgIHNlbmRfcmluZyAgICAgICAgICAgID0gTlVMTDsKKyAgY29uZmlkZW5jZV9pdGVyYXRpb24gPSAxOworICBpbml0X3N0YXQoKTsKKyAgc3VtX21lc3NhZ2VzX3NlbnQgICAgPSAwOworICBzdW1fbWVzc2FnZXNfcmVjdmQgICA9IDA7CisgIHN1bV9mYWlsZWRfc2VuZHMgICAgID0gMDsKKyAgc3VtX2xvY2FsX3RocnVwdXQgICAgPSAwLjA7CisKKyAgLyogd2UgaGF2ZSBhIGdyZWF0LWJpZyB3aGlsZSBsb29wIHdoaWNoIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgdGltZXMgKi8KKyAgLyogd2UgcnVuIGEgcGFydGljdWxhciB0ZXN0LiB0aGlzIGlzIGZvciB0aGUgY2FsY3VsYXRpb24gb2YgYSAqLworICAvKiBjb25maWRlbmNlIGludGVydmFsIChJIHJlYWxseSBzaG91bGQgaGF2ZSBzdGF5ZWQgYXdha2UgZHVyaW5nICovCisgIC8qIHByb2JzdGF0cyA6KS4gSWYgdGhlIHVzZXIgZGlkIG5vdCByZXF1ZXN0IGNvbmZpZGVuY2UgbWVhc3VyZW1lbnQgKi8KKyAgLyogKG5vIGNvbmZpZGVuY2UgaXMgdGhlIGRlZmF1bHQpIHRoZW4gd2Ugd2lsbCBvbmx5IGdvIHRob3VnaCB0aGUgKi8KKyAgLyogbG9vcCBvbmNlLiB0aGUgY29uZmlkZW5jZSBzdHVmZiBvcmlnaW5hdGVzIGZyb20gdGhlIGZvbGtzIGF0IElCTSAqLworCisgIHdoaWxlICgoKGNvbmZpZGVuY2UgPCAwKSAmJiAoY29uZmlkZW5jZV9pdGVyYXRpb24gPCBpdGVyYXRpb25fbWF4KSkgfHwKKwkgKGNvbmZpZGVuY2VfaXRlcmF0aW9uIDw9IGl0ZXJhdGlvbl9taW4pKSB7CisgICAgCisgICAgLyogaW5pdGlhbGl6ZSBhIGZldyBjb3VudGVycy4gd2UgaGF2ZSB0byByZW1lbWJlciB0aGF0IHdlIG1pZ2h0IGJlICovCisgICAgLyogZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCBtb3JlIHRoYW4gb25jZS4gKi8KKyAgICBtZXNzYWdlc19zZW50ICA9IDA7CisgICAgbWVzc2FnZXNfcmVjdmQgPSAwOworICAgIGZhaWxlZF9zZW5kcyAgID0gMDsKKyAgICB0aW1lc191cCAgICAgICA9IDA7CisgICAgCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0CQkJKi8KKyAgICBkYXRhX3NvY2tldCA9IGNyZWF0ZV94dGlfZW5kcG9pbnQobG9jX3h0aV9kZXZpY2UpOworICAgIAorICAgIGlmIChkYXRhX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgcGVycm9yKCJzZW5kX3h0aV91ZHBfc3RyZWFtOiBjcmVhdGVfeHRpX2VuZHBvaW50Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmICh0X2JpbmQoZGF0YV9zb2NrZXQsIE5VTEwsIE5VTEwpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgdF9lcnJvcigic2VuZF94dGlfdWRwX3N0cmVhbTogdF9iaW5kIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8qIG5vdywgd2Ugd2FudCB0byBzZWUgaWYgd2UgbmVlZCB0byBzZXQgdGhlIHNlbmRfc2l6ZSAqLworICAgIGlmIChzZW5kX3NpemUgPT0gMCkgeworICAgICAgaWYgKGxzc19zaXplID4gMCkgeworCXNlbmRfc2l6ZSA9IGxzc19zaXplOworICAgICAgfQorICAgICAgZWxzZSB7CisJc2VuZF9zaXplID0gNDA5NjsKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlciB3aXRoIHRoZSByZXF1ZXN0ZWQgYWxpZ25tZW50IGFuZCBvZmZzZXQsICovCisgICAgLyogbW9zdCBvZiB0aGUgbnVtYmVycyBoZXJlIGFyZSBqdXN0IGEgaGFjayB0byBwaWNrIHNvbWV0aGluZyBuaWNlICovCisgICAgLyogYW5kIGJpZyBpbiBhbiBhdHRlbXB0IHRvIG5ldmVyIHRyeSB0byBzZW5kIGEgYnVmZmVyIGEgc2Vjb25kIHRpbWUgKi8KKyAgICAvKiBiZWZvcmUgaXQgbGVhdmVzIHRoZSBub2RlLi4udW5sZXNzIHRoZSB1c2VyIHNldCB0aGUgd2lkdGggKi8KKyAgICAvKiBleHBsaWNpdGx5LiAqLworICAgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAzMjsKKyAgICAKKyAgICBpZiAoc2VuZF9yaW5nID09IE5VTEwgKSB7CisgICAgICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgICAgICBzZW5kX3NpemUsCisJCQkJICAgICAgIGxvY2FsX3NlbmRfYWxpZ24sCisJCQkJICAgICAgIGxvY2FsX3NlbmRfb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgCisgICAgLyogaWYgdGhlIHVzZXIgc3VwcGxpZWQgYSBjcHUgcmF0ZSwgdGhpcyBjYWxsIHdpbGwgY29tcGxldGUgcmF0aGVyICovCisgICAgLyogcXVpY2tseSwgb3RoZXJ3aXNlLCB0aGUgY3B1IHJhdGUgd2lsbCBiZSByZXR1cmVkIHRvIHVzIGZvciAqLworICAgIC8qIHBvc3NpYmxlIGRpc3BsYXkuIFRoZSBMaWJyYXJ5IHdpbGwga2VlcCBpdCdzIG93biBjb3B5IG9mIHRoaXMgZGF0YSAqLworICAgIC8qIGZvciB1c2UgZWxzZXdoZXJlLiBXZSB3aWxsIG9ubHkgZGlzcGxheSBpdC4gKERvZXMgdGhhdCBtYWtlIGl0ICovCisgICAgLyogIm9wYXF1ZSIgdG8gdXM/KSAqLworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpCisgICAgICBsb2NhbF9jcHVfcmF0ZSA9IGNhbGlicmF0ZV9sb2NhbF9jcHUobG9jYWxfY3B1X3JhdGUpOworICAgIAorICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gc2V0IHVwIHRoZSBkYXRhIGNvbm5lY3Rpb24uIFRoZSBzZXJ2ZXIgKi8KKyAgICAvKiBzZW5kcyBiYWNrIHRoZSBwb3J0IG51bWJlciBhbmQgYWx0ZXJzIHRoZSBzb2NrZXQgcGFyYW1ldGVycyB0aGVyZS4gKi8KKyAgICAvKiBPZiBjb3Vyc2UgdGhpcyBpcyBhIGRhdGFncmFtIHNlcnZpY2Ugc28gbm8gY29ubmVjdGlvbiBpcyBhY3R1YWxseSAqLworICAgIC8qIHNldCB1cCwgdGhlIHNlcnZlciBqdXN0IHNldHMgdXAgdGhlIHNvY2tldCBhbmQgYmluZHMgaXQuICovCisgICAgCisgICAgbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQucmVxdWVzdF90eXBlICAgICAgPSBET19YVElfVURQX1NUUkVBTTsKKyAgICB4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplICA9IHJzcl9zaXplOworICAgIHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPm1lc3NhZ2Vfc2l6ZSAgID0gc2VuZF9zaXplOworICAgIHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50ID0gcmVtb3RlX3JlY3ZfYWxpZ247CisgICAgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQgICAgPSByZW1vdGVfcmVjdl9vZmZzZXQ7CisgICAgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUgICAgPSByZW1vdGVfY3B1X3VzYWdlOworICAgIHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPmNwdV9yYXRlICAgICAgID0gcmVtb3RlX2NwdV9yYXRlOworICAgIHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICAgID0gdGVzdF90aW1lOworICAgIHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPnNvX3JjdmF2b2lkICAgID0gcmVtX3JjdmF2b2lkOworICAgIHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPnNvX3NuZGF2b2lkICAgID0gcmVtX3NuZGF2b2lkOworICAgIAorICAgIHN0cmNweSh4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT54dGlfZGV2aWNlLCByZW1feHRpX2RldmljZSk7CisgIAorI2lmZGVmIF9fYWxwaGEKKyAgCisgICAgLyogb2sgLSBldmVuIG9uIGEgREVDIGJveCwgc3RyaW5ncyBhcmUgc3RyaW5ncy4gSSBkaWRuJ3QgcmVhbGx5IHdhbnQgKi8KKyAgICAvKiB0byBudG9obCB0aGUgd29yZHMgb2YgYSBzdHJpbmcuIHNpbmNlIEkgZG9uJ3Qgd2FudCB0byB0ZWFjaCB0aGUgKi8KKyAgICAvKiBzZW5kXyBhbmQgcmVjdl8gX3JlcXVlc3QgYW5kIF9yZXNwb25zZSByb3V0aW5lcyBhYm91dCB0aGUgdHlwZXMsICovCisgICAgLyogSSB3aWxsIHB1dCAiYW50aS1udG9obCIgY2FsbHMgaGVyZS4gSSBpbWFnaW5lIHRoYXQgdGhlICJwdXJlIiAqLworICAgIC8qIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVzZSBYRFIsIGJ1dCBJIGFtIHN0aWxsIGxlYXJ5IG9mIGJlaW5nIGFibGUgKi8KKyAgICAvKiB0byBmaW5kIFhEUiBsaWJzIG9uIGFsbCBwbGF0Zm9ybXMgSSB3YW50IHJ1bm5pbmcgbmV0cGVyZi4gcmFqICovCisgICAgeworICAgICAgaW50ICpjaGFyd29yZDsKKyAgICAgIGludCAqaW5pdHdvcmQ7CisgICAgICBpbnQgKmxhc3R3b3JkOworICAgICAgCisgICAgICBpbml0d29yZCA9IChpbnQgKikgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+eHRpX2RldmljZTsKKyAgICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKHN0cmxlbihyZW1feHRpX2RldmljZSkgKyAzKSAvIDQpOworICAgICAgCisgICAgICBmb3IgKGNoYXJ3b3JkID0gaW5pdHdvcmQ7CisJICAgY2hhcndvcmQgPCBsYXN0d29yZDsKKwkgICBjaGFyd29yZCsrKSB7CisJCisJKmNoYXJ3b3JkID0gbnRvaGwoKmNoYXJ3b3JkKTsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogX19hbHBoYSAqLworCisgICAgc2VuZF9yZXF1ZXN0KCk7CisgICAgCisgICAgcmVjdl9yZXNwb25zZSgpOworICAgIAorICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICAgIGlmIChkZWJ1ZykKKwlmcHJpbnRmKHdoZXJlLCJzZW5kX3h0aV91ZHBfc3RyZWFtOiByZW1vdGUgZGF0YSBjb25uZWN0aW9uIGRvbmUuXG4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBTZXRfZXJybm8obmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pOworICAgICAgcGVycm9yKCJzZW5kX3h0aV91ZHBfc3RyZWFtOiBlcnJvciBvbiByZW1vdGUiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIC8qIFBsYWNlIHRoZSBwb3J0IG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVtb3RlIGludG8gdGhlIHNvY2thZGRyICovCisgICAgLyogc3RydWN0dXJlIHNvIG91ciBzZW5kcyBjYW4gYmUgc2VudCB0byB0aGUgY29ycmVjdCBwbGFjZS4gQWxzbyBnZXQgKi8KKyAgICAvKiBzb21lIG9mIHRoZSByZXR1cm5lZCBzb2NrZXQgYnVmZmVyIGluZm9ybWF0aW9uIGZvciB1c2VyIGRpc3BsYXkuICovCisgICAgCisgICAgLyogbWFrZSBzdXJlIHRoYXQgcG9ydCBudW1iZXJzIGFyZSBpbiB0aGUgcHJvcGVyIG9yZGVyICovCisgICAgc2VydmVyLnNpbl9wb3J0ID0gKHNob3J0KXh0aV91ZHBfc3RyZWFtX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyOworICAgIHNlcnZlci5zaW5fcG9ydCA9IGh0b25zKHNlcnZlci5zaW5fcG9ydCk7CisgICAgcnNyX3NpemUgICAgICAgID0geHRpX3VkcF9zdHJlYW1fcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemU7CisgICAgcnNzX3NpemUgICAgICAgID0geHRpX3VkcF9zdHJlYW1fcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisgICAgcmVtb3RlX2NwdV9yYXRlID0geHRpX3VkcF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlOworICAgIAorICAgIC8qIGl0IHdvdWxkIHNlZW0gdGhhdCBYVEkgZG9lcyBub3QgYWxsb3cgdGhlIGV4cGVkaWVudCBvZiAqLworICAgIC8qICJjb25uZWN0aW5nIiBhIFVEUCBlbmQtcG9pbnQgdGhlIHdheSBCU0QgZG9lcy4gc28sIHdlIHdpbGwgZG8gKi8KKyAgICAvKiBldmVyeXRoaW5nIHdpdGggdF9zbmR1ZGF0YSBhbmQgdF9yY3Z1ZGF0YS4gT3VyICJ2aXJ0dWFsIiAqLworICAgIC8qIGNvbm5lY3QgaGVyZSB3aWxsIGJlIHRvIGFzc2lnbiB0aGUgZGVzdGluYXRpb24gcG9ydGlvbiBvZiB0aGUgKi8KKyAgICAvKiB0X3VuaXRkYXRhIHN0cnVjdCBoZXJlLCB3aGVyZSB3ZSB3b3VsZCBoYXZlIG90aGVyd2lzZSBjYWxsZWQgKi8KKyAgICAvKiB0X2Nvbm5lY3QoKSByYWogMy85NSAqLworICAgIAorICAgIG1lbXNldCAoJnVuaXRkYXRhLCAwLCBzaXplb2YodW5pdGRhdGEpKTsKKyAgICB1bml0ZGF0YS5hZGRyLm1heGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgIHVuaXRkYXRhLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgdW5pdGRhdGEuYWRkci5idWYgICAgPSAoY2hhciAqKSZzZXJ2ZXI7CisKKyAgICAvKiB3ZSBkb24ndCB1c2UgYW55IG9wdGlvbnMsIHNvIG1pZ2h0IGFzIHdlbGwgc2V0IHRoYXQgcGFydCBoZXJlICovCisgICAgLyogdG9vICovCisKKyAgICB1bml0ZGF0YS5vcHQubWF4bGVuID0gMDsKKyAgICB1bml0ZGF0YS5vcHQubGVuICAgID0gMDsKKyAgICB1bml0ZGF0YS5vcHQuYnVmICAgID0gTlVMTDsKKworICAgIC8qIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgc2VuZCBidWZmZXIgZm9yIHRoZSBmaXJzdCB0aW1lIGFzICovCisgICAgLyogd2VsbCBzaW5jZSB3ZSBtb3ZlIHRvIHRoZSBuZXh0IHBvaW50ZXIgYWZ0ZXIgdGhlIHNlbmQgY2FsbC4gKi8KKworICAgIHVuaXRkYXRhLnVkYXRhLm1heGxlbiA9IHNlbmRfc2l6ZTsKKyAgICB1bml0ZGF0YS51ZGF0YS5sZW4gICAgPSBzZW5kX3NpemU7CisgICAgdW5pdGRhdGEudWRhdGEuYnVmICAgID0gc2VuZF9yaW5nLT5idWZmZXJfcHRyOworCisgICAgLyogc2V0IHVwIHRoZSB0aW1lciB0byBjYWxsIHVzIGFmdGVyIHRlc3RfdGltZS4gb25lIG9mIHRoZXNlIGRheXMsICovCisgICAgLyogaXQgbWlnaHQgYmUgbmljZSB0byBmaWd1cmUtb3V0IGEgbmljZSByZWxpYWJsZSB3YXkgdG8gaGF2ZSB0aGUgKi8KKyAgICAvKiB0ZXN0IGNvbnRyb2xsZWQgYnkgYSBieXRlIGNvdW50IGFzIHdlbGwsIGJ1dCBzaW5jZSBVRFAgaXMgbm90ICovCisgICAgLyogcmVsaWFibGUsIHRoYXQgY291bGQgcHJvdmUgZGlmZmljdWx0LiBzbywgaW4gdGhlIG1lYW50aW1lLCB3ZSAqLworICAgIC8qIG9ubHkgYWxsb3cgYSBYVElfVURQX1NUUkVBTSB0ZXN0IHRvIGJlIGEgdGltZWQgdGVzdC4gKi8KKyAgICAKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICB0aW1lc191cCA9IDA7CisgICAgICBzdGFydF90aW1lcih0ZXN0X3RpbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGZwcmludGYod2hlcmUsIlNvcnJ5LCBYVElfVURQX1NUUkVBTSB0ZXN0cyBtdXN0IGJlIHRpbWVkLlxuIik7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgCisgICAgLyogR2V0IHRoZSBzdGFydCBjb3VudCBmb3IgdGhlIGlkbGUgY291bnRlciBhbmQgdGhlIHN0YXJ0IHRpbWUgKi8KKyAgICAKKyAgICBjcHVfc3RhcnQobG9jYWxfY3B1X3VzYWdlKTsKKyAgICAKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpIHx8IChkZW1vX21vZGUpKSB7CisgICAgICAvKiB6ZXJvIG1lYW5zIHRoYXQgd2UgbmV2ZXIgcGF1c2UsIHNvIHdlIG5ldmVyIHNob3VsZCBuZWVkIHRoZSAqLworICAgICAgLyogaW50ZXJ2YWwgdGltZXIsIHVubGVzcyB3ZSBhcmUgaW4gZGVtb19tb2RlICovCisgICAgICBzdGFydF9pdGltZXIoaW50ZXJ2YWxfd2F0ZSk7CisgICAgfQorICAgIGludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisgICAgLyogZ2V0IHRoZSBzaWduYWwgc2V0IGZvciB0aGUgY2FsbCB0byBzaWdzdXNwZW5kICovCisgICAgaWYgKHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgKHNpZ3NldF90ICopTlVMTCwgJnNpZ25hbF9zZXQpICE9IDApIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInNlbmRfeHRpX3VkcF9zdHJlYW06IHVuYWJsZSB0byBnZXQgc2lnbWFzayBlcnJubyAlZFxuIiwKKwkgICAgICBlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAKKyAgICAvKiBTZW5kIGRhdGFncmFtcyBsaWtlIHRoZXJlIHdhcyBubyB0b21vcnJvdy4gYXQgc29tZXBvaW50IGl0IG1pZ2h0ICovCisgICAgLyogYmUgbmljZSB0byBzZXQgdGhpcyB1cCBzbyB0aGF0IGEgcXVhbnRpdHkgb2YgYnl0ZXMgY291bGQgYmUgc2VudCwgKi8KKyAgICAvKiBidXQgd2Ugc3RpbGwgbmVlZCBzb21lIHNvcnQgb2YgZW5kIG9mIHRlc3QgdHJpZ2dlciBvbiB0aGUgcmVjZWl2ZSAqLworICAgIC8qIHNpZGUuIHRoYXQgY291bGQgYmUgYSBzZWxlY3Qgd2l0aCBhIG9uZSBzZWNvbmQgdGltZW91dCwgYnV0IHRoZW4gKi8KKyAgICAvKiBpZiB0aGVyZSBpcyBhIHRlc3Qgd2hlcmUgbm9uZSBvZiB0aGUgZGF0YSBhcnJpdmVzIGZvciBhd2lsZSBhbmQgKi8KKyAgICAvKiB0aGVuIHN0YXJ0cyBhZ2Fpbiwgd2Ugd291bGQgZW5kIHRoZSB0ZXN0IHRvbyBzb29uLiBzb21ldGhpbmcgdG8gKi8KKyAgICAvKiB0aGluayBhYm91dC4uLiAqLworICAgIHdoaWxlICghdGltZXNfdXApIHsKKyAgICAgIAorI2lmZGVmIERJUlRZCisgICAgICAvKiB3ZSB3YW50IHRvIGRpcnR5IHNvbWUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVnZXJzIGluIHRoZSBidWZmZXIgKi8KKyAgICAgIC8qIHdlIGFyZSBhYm91dCB0byBzZW5kLiB3ZSBtYXkgYWxzbyB3YW50IHRvIGJyaW5nIHNvbWUgbnVtYmVyIG9mICovCisgICAgICAvKiB0aGVtIGNsZWFubHkgaW50byB0aGUgY2FjaGUuIFRoZSBjbGVhbiBvbmVzIHdpbGwgZm9sbG93IGFueSBkaXJ0eSAqLworICAgICAgLyogb25lcyBpbnRvIHRoZSBjYWNoZS4gKi8KKworICAgICAgYWNjZXNzX2J1ZmZlcihzZW5kX3JpbmctPmJ1ZmZlcl9wdHIsCisJCSAgICBzZW5kX3NpemUsCisJCSAgICBsb2NfZGlydHlfY291bnQsCisJCSAgICBsb2NfY2xlYW5fY291bnQpOworCisjZW5kaWYgLyogRElSVFkgKi8KKyAgICAgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV9vbmUpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgICAgICAKKyAgICAgIGlmICgodF9zbmR1ZGF0YShkYXRhX3NvY2tldCwKKwkJICAgICAgJnVuaXRkYXRhKSkgICE9IDApIHsKKwlpZiAoZXJybm8gPT0gRUlOVFIpCisJICBicmVhazsKKwlpZiAoZXJybm8gPT0gRU5PQlVGUykgeworCSAgZmFpbGVkX3NlbmRzKys7CisJICBjb250aW51ZTsKKwl9CisJcGVycm9yKCJ4dGlfdWRwX3NlbmQ6IGRhdGEgc2VuZCBlcnJvciIpOworCXRfZXJyb3IoInh0aV91ZHBfc2VuZDogZGF0YSBzZW5kIGVycm9yIik7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIG1lc3NhZ2VzX3NlbnQrKzsgICAgICAgICAgCisgICAgICAKKyAgICAgIC8qIG5vdyB3ZSB3YW50IHRvIG1vdmUgb3VyIHBvaW50ZXIgdG8gdGhlIG5leHQgcG9zaXRpb24gaW4gdGhlICovCisgICAgICAvKiBkYXRhIGJ1ZmZlci4uLmFuZCB1cGRhdGUgdGhlIHVuaXRkYXRhIHN0cnVjdHVyZSAqLworICAgICAgCisgICAgICBzZW5kX3JpbmcgICAgICAgICAgPSBzZW5kX3JpbmctPm5leHQ7CisgICAgICB1bml0ZGF0YS51ZGF0YS5idWYgPSBzZW5kX3JpbmctPmJ1ZmZlcl9wdHI7CisgICAgICAKKyNpZmRlZiBXQU5UX0hJU1RPR1JBTQorICAgICAgLyogZ2V0IHRoZSBzZWNvbmQgdGltZXN0YW1wICovCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworICAgICAgSElTVF9hZGQodGltZV9oaXN0LGRlbHRhX21pY3JvKCZ0aW1lX29uZSwmdGltZV90d28pKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworI2lmZGVmIFdBTlRfSU5URVJWQUxTICAgICAgCisgICAgICBpZiAoZGVtb19tb2RlKSB7CisJdW5pdHNfdGhpc190aWNrICs9IHNlbmRfc2l6ZTsKKyAgICAgIH0KKyAgICAgIC8qIGluIHRoaXMgY2FzZSwgdGhlIGludGVydmFsIGNvdW50IGlzIHRoZSBjb3VudC1kb3duIGNvdXRlciAqLworICAgICAgLyogdG8gZGVjaWRlIHRvIHNsZWVwIGZvciBhIGxpdHRsZSBiaXQgKi8KKyAgICAgIGlmICgoaW50ZXJ2YWxfYnVyc3QpICYmICgtLWludGVydmFsX2NvdW50ID09IDApKSB7CisJLyogY2FsbCBzaWdzdXNwZW5kIGFuZCB3YWl0IGZvciB0aGUgaW50ZXJ2YWwgdGltZXIgdG8gZ2V0IHVzICovCisJLyogb3V0ICovCisJaWYgKGRlYnVnKSB7CisJICBmcHJpbnRmKHdoZXJlLCJhYm91dCB0byBzdXNwZW5kXG4iKTsKKwkgIGZmbHVzaCh3aGVyZSk7CisJfQorCWlmIChzaWdzdXNwZW5kKCZzaWduYWxfc2V0KSA9PSBFRkFVTFQpIHsKKwkgIGZwcmludGYod2hlcmUsCisJCSAgInNlbmRfeHRpX3VkcF9zdHJlYW06IGZhdWx0IHdpdGggc2lnbmFsIHNldCFcbiIpOworCSAgZmZsdXNoKHdoZXJlKTsKKwkgIGV4aXQoMSk7CisJfQorCWludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKiBUaGlzIGlzIGEgdGltZWQgdGVzdCwgc28gdGhlIHJlbW90ZSB3aWxsIGJlIHJldHVybmluZyB0byB1cyBhZnRlciAqLworICAgIC8qIGEgdGltZS4gV2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHNlbmQgYW55ICJzdHJhbmdlIiBtZXNzYWdlcyB0byB0ZWxsICovCisgICAgLyogdGhlIHJlbW90ZSB0aGF0IHRoZSB0ZXN0IGlzIGNvbXBsZXRlZCwgdW5sZXNzIHdlIGRlY2lkZSB0byBhZGQgYSAqLworICAgIC8qIG51bWJlciBvZiBtZXNzYWdlcyB0byB0aGUgdGVzdC4gKi8KKyAgICAKKyAgICAvKiB0aGUgdGVzdCBpcyBvdmVyLCBzbyBnZXQgc3RhdHMgYW5kIHN0dWZmICovCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLAkKKwkgICAgICZlbGFwc2VkX3RpbWUpOworICAgIAorICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kCSovCisgICAgcmVjdl9yZXNwb25zZSgpOworICAgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICAgIGlmIChkZWJ1ZykKKwlmcHJpbnRmKHdoZXJlLCJzZW5kX3h0aV91ZHBfc3RyZWFtOiByZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICAgIHBlcnJvcigic2VuZF94dGlfdWRwX3N0cmVhbTogZXJyb3Igb24gcmVtb3RlIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBieXRlc19zZW50ICAgID0gKGRvdWJsZSkgc2VuZF9zaXplICogKGRvdWJsZSkgbWVzc2FnZXNfc2VudDsKKyAgICBsb2NhbF90aHJ1cHV0ID0gY2FsY190aHJ1cHV0KGJ5dGVzX3NlbnQpOworICAgIAorICAgIG1lc3NhZ2VzX3JlY3ZkID0geHRpX3VkcF9zdHJlYW1fcmVzdWx0cy0+bWVzc2FnZXNfcmVjdmQ7CisgICAgYnl0ZXNfcmVjdmQgICAgPSAoZG91YmxlKSBzZW5kX3NpemUgKiAoZG91YmxlKSBtZXNzYWdlc19yZWN2ZDsKKyAgICAKKyAgICAvKiB3ZSBhc3VtZSB0aGF0IHRoZSByZW1vdGUgcmFuIGZvciBhcyBsb25nIGFzIHdlIGRpZCAqLworICAgIAorICAgIHJlbW90ZV90aHJ1cHV0ID0gY2FsY190aHJ1cHV0KGJ5dGVzX3JlY3ZkKTsKKyAgICAKKyAgICAvKiBwcmludCB0aGUgcmVzdWx0cyBmb3IgdGhpcyBzb2NrZXQgYW5kIG1lc3NhZ2Ugc2l6ZSAqLworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworICAgICAgLyogV2UgbXVzdCBub3cgZG8gYSBsaXR0bGUgbWF0aCBmb3Igc2VydmljZSBkZW1hbmQgYW5kIGNwdSAqLworICAgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgV2UgcGFzcyB6ZXJvcyBmb3IgdGhlIGxvY2FsICovCisgICAgICAvKiBjcHUgdXRpbGl6YXRpb24gYW5kIGVsYXBzZWQgdGltZSB0byB0ZWxsIHRoZSByb3V0aW5lIHRvIHVzZSAqLworICAgICAgLyogdGhlIGxpYnJhcmllcyBvd24gdmFsdWVzIGZvciB0aG9zZS4gKi8KKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSBjYWxjX2NwdV91dGlsKDAuMCk7CisJLyogc2hvdWxkbid0IHRoaXMgcmVhbGx5IGJlIGJhc2VkIG9uIGJ5dGVzX3JlY3ZkLCBzaW5jZSB0aGF0IGlzICovCisJLyogdGhlIGVmZmVjdGl2ZSB0aHJvdWdocHV0IG9mIHRoZSB0ZXN0PyBJIHRoaW5rIHRoYXQgaXQgc2hvdWxkLCAqLworCS8qIHNvIHdpbGwgbWFrZSB0aGUgY2hhbmdlIHJhaiAxMS85NCAqLworCWxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19yZWN2ZCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIDApOworICAgICAgfQorICAgICAgZWxzZSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gLTEuMDsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIFRoZSBsb2NhbCBjYWxjdWxhdGlvbnMgY291bGQgdXNlIHZhcmlhYmxlcyBiZWluZyBrZXB0IGJ5ICovCisgICAgICAvKiB0aGUgbG9jYWwgbmV0bGliIHJvdXRpbmVzLiBUaGUgcmVtb3RlIGNhbGN1YXRpb25zIG5lZWQgdG8gKi8KKyAgICAgIC8qIGhhdmUgYSBmZXcgdGhpbmdzIHBhc3NlZCB0byB0aGVtLiAqLworICAgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uCT0geHRpX3VkcF9zdHJlYW1fcmVzdWx0cy0+Y3B1X3V0aWw7CisJcmVtb3RlX3NlcnZpY2VfZGVtYW5kCT0gY2FsY19zZXJ2aWNlX2RlbWFuZChieXRlc19yZWN2ZCwKKwkJCQkJCSAgICAgIDAuMCwKKwkJCQkJCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgICB4dGlfdWRwX3N0cmVhbV9yZXN1bHRzLT5udW1fY3B1cyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uCT0gLTEuMDsKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQJPSAtMS4wOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHdlIHdlcmUgbm90IG1lYXN1cmluZyBjcHUsIGZvciB0aGUgY29uZmlkZW5jZSBzdHVmZiwgd2UgKi8KKyAgICAgIC8qIHNob3VsZCBtYWtlIGl0IC0xLjAgKi8KKyAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiAgPSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgICA9IC0xLjA7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBhdCB0aGlzIHBvaW50LCB3ZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgY29uZmlkZW5jZSBpbmZvcm1hdGlvbi4gKi8KKyAgICAvKiBpZiBkZWJ1Z2dpbmcgaXMgb24sIGNhbGN1bGF0ZV9jb25maWRlbmNlIHdpbGwgcHJpbnQtb3V0IHRoZSAqLworICAgIC8qIHBhcmFtZXRlcnMgd2UgcGFzcyBpdCAqLworICAgIAorICAgIGNhbGN1bGF0ZV9jb25maWRlbmNlKGNvbmZpZGVuY2VfaXRlcmF0aW9uLAorCQkJIGVsYXBzZWRfdGltZSwKKwkJCSByZW1vdGVfdGhydXB1dCwKKwkJCSBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSByZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgIAorICAgIC8qIHNpbmNlIHRoZSByb3V0aW5lIGNhbGN1bGF0ZV9jb25maWRlbmNlIGlzIHJhdGhlciBnZW5lcmljLCBhbmQgKi8KKyAgICAvKiB3ZSBoYXZlIGEgZmV3IG90aGVyIHBhcm1zIG9mIGludGVyZXN0LCB3ZSB3aWxsIGRvIGEgbGl0dGxlIHdvcmsgKi8KKyAgICAvKiBoZXJlIHRvIGNhY2x1bGF0ZSB0aGVpciBhdmVyYWdlLiAqLworICAgIHN1bV9tZXNzYWdlc19zZW50ICArPSBtZXNzYWdlc19zZW50OworICAgIHN1bV9tZXNzYWdlc19yZWN2ZCArPSBtZXNzYWdlc19yZWN2ZDsKKyAgICBzdW1fZmFpbGVkX3NlbmRzICAgKz0gZmFpbGVkX3NlbmRzOworICAgIHN1bV9sb2NhbF90aHJ1cHV0ICArPSBsb2NhbF90aHJ1cHV0OworICAgIAorICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uKys7CisKKyAgICAvKiB0aGlzIGRhdGFwb2ludCBpcyBkb25lLCBzbyB3ZSBkb24ndCBuZWVkIHRoZSBzb2NrZXQgYW55IGxvbmdlciAqLworICAgIGNsb3NlKGRhdGFfc29ja2V0KTsKKworICB9CisKKyAgLyogd2Ugc2hvdWxkIHJlYWNoIHRoaXMgcG9pbnQgb25jZSB0aGUgdGVzdCBpcyBmaW5pc2hlZCAqLworCisgIHJldHJpZXZlX2NvbmZpZGVudF92YWx1ZXMoJmVsYXBzZWRfdGltZSwKKwkJCSAgICAmcmVtb3RlX3RocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisKKyAgLyogc29tZSBvZiB0aGUgaW50ZXJlc3RpbmcgdmFsdWVzIGFyZW4ndCBjb3ZlcmVkIGJ5IHRoZSBnZW5lcmljICovCisgIC8qIGNvbmZpZGVuY2Ugcm91dGluZSAqLworICBtZXNzYWdlc19zZW50ICAgID0gc3VtX21lc3NhZ2VzX3NlbnQgLyAoY29uZmlkZW5jZV9pdGVyYXRpb24gLTEpOworICBtZXNzYWdlc19yZWN2ZCAgID0gc3VtX21lc3NhZ2VzX3JlY3ZkIC8gKGNvbmZpZGVuY2VfaXRlcmF0aW9uIC0xKTsKKyAgZmFpbGVkX3NlbmRzICAgICA9IHN1bV9mYWlsZWRfc2VuZHMgLyAoY29uZmlkZW5jZV9pdGVyYXRpb24gLTEpOworICBsb2NhbF90aHJ1cHV0ICAgID0gc3VtX2xvY2FsX3RocnVwdXQgLyAoY29uZmlkZW5jZV9pdGVyYXRpb24gLTEpOworCisgIC8qIFdlIGFyZSBub3cgcmVhZHkgdG8gcHJpbnQgYWxsIHRoZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHVzZXIgKi8KKyAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCwgb3IgdGhlIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZC4gSWYgdGhlICovCisgIC8qIHVzZXIgaGFzIHJlcXVlc3RlZCB2ZXJib3NpdHkgbGV2ZWwgMSwgaGUgd2lsbCBnZXQgdGhlIGJhc2ljICovCisgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgIC8qIG9mIGdyZWF0ZXIgdGhhbiAxLCB3ZSB3aWxsIGRpc3BsYXkgYSB2ZXJpdGFibGUgcGxldGhvcmEgb2YgKi8KKyAgLyogYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBmcm9tIG91dHNpZGUgb2YgdGhpcyBibG9jayBhcyBpdCBpdCAqLworICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworICAgIAorICAKKyAgaWYgKGNvbmZpZGVuY2UgPCAwKSB7CisgICAgLyogd2UgZGlkIG5vdCBoaXQgY29uZmlkZW5jZSwgYnV0IHdlcmUgd2UgYXNrZWQgdG8gbG9vayBmb3IgaXQ/ICovCisgICAgaWYgKGl0ZXJhdGlvbl9tYXggPiAxKSB7CisgICAgICBkaXNwbGF5X2NvbmZpZGVuY2UoKTsKKyAgICB9CisgIH0KKworICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZCh4dGlfdWRwX3N0cmVhbV9yZXN1bHRzLT5jcHVfbWV0aG9kKTsKKyAgICAKKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCWxvY2FsX3NlcnZpY2VfZGVtYW5kLAorCQlsb2NhbF9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJcmVtb3RlX3NlcnZpY2VfZGVtYW5kLAorCQlsb2NhbF9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsCisJCWNwdV90aXRsZSwKKwkJZm9ybWF0X3VuaXRzKCksCisJCWxvY2FsX2NwdV9tZXRob2QsCisJCXJlbW90ZV9jcHVfbWV0aG9kKTsKKyAgICAgIH0KKworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAkJICAgICAgICAvKiBsb2NhbCBzZW5kYnVmIHNpemUgKi8KKwkgICAgICBzZW5kX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgc2VuZHMgKi8KKwkgICAgICBlbGFwc2VkX3RpbWUsCQkvKiBob3cgbG9uZyB3YXMgdGhlIHRlc3QgKi8KKwkgICAgICBtZXNzYWdlc19zZW50LAorCSAgICAgIGZhaWxlZF9zZW5kcywKKwkgICAgICBsb2NhbF90aHJ1cHV0LCAJCS8qIHdoYXQgd2FzIHRoZSB4ZmVyIHJhdGUgKi8KKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJzcl9zaXplLAorCSAgICAgIGVsYXBzZWRfdGltZSwKKwkgICAgICBtZXNzYWdlc19yZWN2ZCwKKwkgICAgICByZW1vdGVfdGhydXB1dCwKKwkgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uLAkvKiByZW1vdGUgY3B1ICovCisJICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kKTsJLyogcmVtb3RlIHNlcnZpY2UgZGVtYW5kICovCisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICBsb2NhbF90aHJ1cHV0KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgICBpZiAocHJpbnRfaGVhZGVycykgeworCWZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgICAgICB9CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLCAJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIHNlbmRfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSBzZW5kcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIG1lc3NhZ2VzX3NlbnQsCisJICAgICAgZmFpbGVkX3NlbmRzLAorCSAgICAgIGxvY2FsX3RocnVwdXQsCisJICAgICAgcnNyX3NpemUsIAkJLyogcmVtb3RlIHJlY3ZidWYgc2l6ZSAqLworCSAgICAgIGVsYXBzZWRfdGltZSwKKwkgICAgICBtZXNzYWdlc19yZWN2ZCwKKwkgICAgICByZW1vdGVfdGhydXB1dCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBmZmx1c2god2hlcmUpOworI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwiXG5IaXN0b2dyYW0gb2YgdGltZSBzcGVudCBpbiBzZW5kKCkgY2FsbFxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworICB9CisjZW5kaWYgLyogV0FOVF9ISVNUT0dSQU0gKi8KKworfQorDAorCisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgc2lkZSAobmV0c2VydmVyKSBvZiB0aGUgKi8KKyAvKiBYVElfVURQX1NUUkVBTSBwZXJmb3JtYW5jZSB0ZXN0LiAqLworCit2b2lkCityZWN2X3h0aV91ZHBfc3RyZWFtKCkKK3sKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisKKyAgc3RydWN0IHRfYmluZCBiaW5kX3JlcSwgYmluZF9yZXNwOworICBzdHJ1Y3QgdF91bml0ZGF0YSB1bml0ZGF0YTsKKyAgaW50CSAgICAgICAgICAgIGZsYWdzID0gMDsKKworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbXlhZGRyX2luOworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZnJvbWFkZHJfaW47CisKKyAgU09DS0VUIHNfZGF0YTsKKyAgaW50IAlhZGRybGVuOworICB1bnNpZ25lZCBpbnQJYnl0ZXNfcmVjZWl2ZWQgPSAwOworICBmbG9hdAllbGFwc2VkX3RpbWU7CisgIAorICB1bnNpZ25lZCBpbnQJbWVzc2FnZV9zaXplOworICB1bnNpZ25lZCBpbnQJbWVzc2FnZXNfcmVjdmQgPSAwOworICAKKyAgc3RydWN0IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0CSp4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0OworICBzdHJ1Y3QgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0CSp4dGlfdWRwX3N0cmVhbV9yZXNwb25zZTsKKyAgc3RydWN0IHh0aV91ZHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0CSp4dGlfdWRwX3N0cmVhbV9yZXN1bHRzOworICAKKyAgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdCAgPSAKKyAgICAoc3RydWN0IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdWRwX3N0cmVhbV9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgeHRpX3VkcF9zdHJlYW1fcmVzdWx0cyAgPSAKKyAgICAoc3RydWN0IHh0aV91ZHBfc3RyZWFtX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl94dGlfdWRwX3N0cmVhbTogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQgKi8KKyAgLyogcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZiAqLworICAvKiBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZSAqLworICAvKiBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcgPiAxKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdWRwX3N0cmVhbTogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBYVElfVURQX1NUUkVBTV9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZyA+IDIpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV91ZHBfc3RyZWFtOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGUgdG8gYmUgYXQgdGhlIGRlc2lyZWQgKi8KKyAgLyogYWxpZ25tZW50IHdpdGggdGhlIGRlc2lyZWQgb2Zmc2V0LiAqLworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3VkcF9zdHJlYW06IHJlcXVlc3RlZCBhbGlnbm1lbnQgb2YgJWRcbiIsCisJICAgIHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgcmVjdl93aWR0aCA9IDE7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICB4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT5tZXNzYWdlX3NpemUsCisJCQkJICAgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsCisJCQkJICAgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV91ZHBfc3RyZWFtOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTGV0J3MgY2xlYXItb3V0IG91ciBzb2NrYWRkciBmb3IgdGhlIHNha2Ugb2YgY2xlYW5saW5lcy4gVGhlbiB3ZSAqLworICAvKiBjYW4gcHV0IGluIE9VUiB2YWx1ZXMgIS0pIEF0IHNvbWUgcG9pbnQsIHdlIG1heSB3YW50IHRvIG5haWwgdGhpcyAqLworICAvKiBzb2NrZXQgdG8gYSBwYXJ0aWN1bGFyIG5ldHdvcmstbGV2ZWwgYWRkcmVzcywgYnV0IGZvciBub3csICovCisgIC8qIElOQUREUl9BTlkgc2hvdWxkIGJlIGp1c3QgZmluZS4gKi8KKyAgCisgIGJ6ZXJvKChjaGFyICopJm15YWRkcl9pbiwKKwlzaXplb2YobXlhZGRyX2luKSk7CisgIG15YWRkcl9pbi5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOworICBteWFkZHJfaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgbXlhZGRyX2luLnNpbl9wb3J0ICAgICAgICA9IDA7CisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3VkcF9zdHJlYW06IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogY3JlYXRlX3h0aV9lbmRwb2ludCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Jfc2l6ZSA9IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19yY3Zhdm9pZCA9IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPnNvX3JjdmF2b2lkOworICBsb2Nfc25kYXZvaWQgPSB4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKworI2lmZGVmIF9fYWxwaGEKKyAgCisgIC8qIG9rIC0gZXZlbiBvbiBhIERFQyBib3gsIHN0cmluZ3MgYXJlIHN0cmluZ3MuIEkgZGluJ3QgcmVhbGx5IHdhbnQgKi8KKyAgLyogdG8gbnRvaGwgdGhlIHdvcmRzIG9mIGEgc3RyaW5nLiBzaW5jZSBJIGRvbid0IHdhbnQgdG8gdGVhY2ggdGhlICovCisgIC8qIHNlbmRfIGFuZCByZWN2XyBfcmVxdWVzdCBhbmQgX3Jlc3BvbnNlIHJvdXRpbmVzIGFib3V0IHRoZSB0eXBlcywgKi8KKyAgLyogSSB3aWxsIHB1dCAiYW50aS1udG9obCIgY2FsbHMgaGVyZS4gSSBpbWFnaW5lIHRoYXQgdGhlICJwdXJlIiAqLworICAvKiBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UgWERSLCBidXQgSSBhbSBzdGlsbCBsZWFyeSBvZiBiZWluZyBhYmxlICovCisgIC8qIHRvIGZpbmQgWERSIGxpYnMgb24gYWxsIHBsYXRmb3JtcyBJIHdhbnQgcnVubmluZyBuZXRwZXJmLiByYWogKi8KKyAgeworICAgIGludCAqY2hhcndvcmQ7CisgICAgaW50ICppbml0d29yZDsKKyAgICBpbnQgKmxhc3R3b3JkOworICAgIAorICAgIGluaXR3b3JkID0gKGludCAqKSB4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT54dGlfZGV2aWNlOworICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPmRldl9uYW1lX2xlbiArIDMpIC8gNCk7CisgICAgCisgICAgZm9yIChjaGFyd29yZCA9IGluaXR3b3JkOworCSBjaGFyd29yZCA8IGxhc3R3b3JkOworCSBjaGFyd29yZCsrKSB7CisgICAgICAKKyAgICAgICpjaGFyd29yZCA9IGh0b25sKCpjaGFyd29yZCk7CisgICAgfQorICB9CisgIAorI2VuZGlmIC8qIF9fYWxwaGEgKi8KKyAgICAKKyAgc19kYXRhID0gY3JlYXRlX3h0aV9lbmRwb2ludCh4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT54dGlfZGV2aWNlKTsKKyAgCisgIGlmIChzX2RhdGEgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICAvKiBMZXQncyBnZXQgYW4gYWRkcmVzcyBhc3NpZ25lZCB0byB0aGlzIHNvY2tldCBzbyB3ZSBjYW4gdGVsbCB0aGUgKi8KKyAgLyogaW5pdGlhdG9yIGhvdyB0byByZWFjaCB0aGUgZGF0YSBzb2NrZXQuIFRoZXJlIG1heSBiZSBhIGRlc2lyZSB0byAqLworICAvKiBuYWlsIHRoaXMgc29ja2V0IHRvIGEgc3BlY2lmaWMgSVAgYWRkcmVzcyBpbiBhIG11bHRpLWhvbWVkLCAqLworICAvKiBtdWx0aS1jb25uZWN0aW9uIHNpdHVhdGlvbiwgYnV0IGZvciBub3csIHdlJ2xsIGlnbm9yZSB0aGUgaXNzdWUgKi8KKyAgLyogYW5kIGNvbmNlbnRyYXRlIG9uIHNpbmdsZSBjb25uZWN0aW9uIHRlc3RpbmcuICovCisKKyAgYmluZF9yZXEuYWRkci5tYXhsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgYmluZF9yZXEuYWRkci5sZW4gICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgYmluZF9yZXEuYWRkci5idWYgICAgPSAoY2hhciAqKSZteWFkZHJfaW47CisgIGJpbmRfcmVxLnFsZW4gICAgICAgID0gMTsKKworICBiaW5kX3Jlc3AuYWRkci5tYXhsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgYmluZF9yZXNwLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIGJpbmRfcmVzcC5hZGRyLmJ1ZiAgICA9IChjaGFyICopJm15YWRkcl9pbjsKKyAgYmluZF9yZXNwLnFsZW4gICAgICAgID0gMTsKKworICBpZiAodF9iaW5kKHNfZGF0YSwKKwkgICAgICZiaW5kX3JlcSwKKwkgICAgICZiaW5kX3Jlc3ApID09IFNPQ0tFVF9FUlJPUikgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gdF9lcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgCisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2UtPnRlc3RfbGVuZ3RoID0gCisgICAgeHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGg7CisgIAorICAvKiBOb3cgbXlhZGRyX2luIGNvbnRhaW5zIHRoZSBwb3J0IGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyB0aGlzIGlzICovCisgIC8qIHJldHVybmVkIHRvIHRoZSBzZW5kZXIgYWxzbyBpbXBsaWNpdGx5IHRlbGxpbmcgdGhlIHNlbmRlciB0aGF0IHRoZSAqLworICAvKiBzb2NrZXQgYnVmZmVyIHNpemluZyBoYXMgYmVlbiBkb25lLiAqLworICAKKyAgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAKKyAgICAoaW50KSBudG9ocyhteWFkZHJfaW4uc2luX3BvcnQpOworICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyAgID0gMDsKKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAtMSB0byAqLworICAvKiB0aGUgaW5pdGlhdG9yLiAqLworICAKKyAgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2UtPmNwdV9yYXRlICAgID0gMC4wOyAvKiBhc3N1bWUgbm8gY3B1ICovCisgIHh0aV91ZHBfc3RyZWFtX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIGlmICh4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIC8qIFdlIHdpbGwgcGFzcyB0aGUgcmF0ZSBpbnRvIHRoZSBjYWxpYnJhdGlvbiByb3V0aW5lLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBvbmUsIGl0IHdpbGwgYmUgMC4wLCBhbmQgd2Ugd2lsbCBkbyBhICovCisgICAgLyogInJlYWwiIGNhbGlicmF0aW9uLiBPdGhlcndpc2UsIGFsbCBpdCB3aWxsIHJlYWxseSBkbyBpcyAqLworICAgIC8qIHN0b3JlIGl0IGF3YXkuLi4gKi8KKyAgICB4dGlfdWRwX3N0cmVhbV9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHh0aV91ZHBfc3RyZWFtX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdSh4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT5jcHVfcmF0ZSk7CisgIH0KKyAgCisgIG1lc3NhZ2Vfc2l6ZQk9IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPm1lc3NhZ2Vfc2l6ZTsKKyAgdGVzdF90aW1lCT0geHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+dGVzdF9sZW5ndGg7CisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHh0aV91ZHBfc3RyZWFtX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHh0aV91ZHBfc3RyZWFtX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplID0gbHNyX3NpemU7CisgIHh0aV91ZHBfc3RyZWFtX3Jlc3BvbnNlLT5zb19yY3Zhdm9pZCA9IGxvY19yY3Zhdm9pZDsKKyAgeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworCisgIC8qIHNpbmNlIHdlIGFyZSBnb2luZyB0byBjYWxsIHRfcmN2dWRhdGEoKSBpbnN0ZWFkIG9mIHRfcmN2KCkgd2UgKi8KKyAgLyogbmVlZCB0byBpbml0IHRoZSB1bml0ZGF0YSBzdHJ1Y3R1cmUgcmFqIDMvOTUgKi8KKworICB1bml0ZGF0YS5hZGRyLm1heGxlbiA9IHNpemVvZihmcm9tYWRkcl9pbik7CisgIHVuaXRkYXRhLmFkZHIubGVuICAgID0gc2l6ZW9mKGZyb21hZGRyX2luKTsKKyAgdW5pdGRhdGEuYWRkci5idWYgICAgPSAoY2hhciAqKSZmcm9tYWRkcl9pbjsKKworICB1bml0ZGF0YS5vcHQubWF4bGVuID0gMDsKKyAgdW5pdGRhdGEub3B0LmxlbiAgICA9IDA7CisgIHVuaXRkYXRhLm9wdC5idWYgICAgPSBOVUxMOworCisgIHVuaXRkYXRhLnVkYXRhLm1heGxlbiA9IHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPm1lc3NhZ2Vfc2l6ZTsKKyAgdW5pdGRhdGEudWRhdGEubGVuICAgID0geHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+bWVzc2FnZV9zaXplOworICB1bml0ZGF0YS51ZGF0YS5idWYgICAgPSByZWN2X3JpbmctPmJ1ZmZlcl9wdHI7CisKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHh0aV91ZHBfc3RyZWFtX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIC8qIFRoZSBsb29wIHdpbGwgZXhpdCB3aGVuIHRoZSB0aW1lciBwb3BzLCBvciBpZiB3ZSBoYXBwZW4gdG8gcmVjdiBhICovCisgIC8qIG1lc3NhZ2Ugb2YgbGVzcyB0aGFuIHNlbmRfc2l6ZSBieXRlcy4uLiAqLworICAKKyAgdGltZXNfdXAgPSAwOworICBzdGFydF90aW1lcih0ZXN0X3RpbWUgKyBQQURfVElNRSk7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV91ZHBfc3RyZWFtOiBhYm91dCB0byBlbnRlciBpbm5lciBzYW5jdHVtLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgd2hpbGUgKCF0aW1lc191cCkgeworI2lmZGVmIFJBSl9ERUJVRworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwidF9yY3Z1ZGF0YSwgZXJybm8gJWQsIHRfZXJybm8gJWQiLAorCSAgICAgIGVycm5vLAorCSAgICAgIHRfZXJybm8pOworICAgICAgZnByaW50Zih3aGVyZSwiIGFmdGVyICVkIG1lc3NhZ2VzXG4iLG1lc3NhZ2VzX3JlY3ZkKTsKKyAgICAgIGZwcmludGYod2hlcmUsImFkZHJtYXggJWQgYWRkcmxlbiAlZCBhZGRyYnVmICV4XG4iLAorCSAgICAgIHVuaXRkYXRhLmFkZHIubWF4bGVuLAorCSAgICAgIHVuaXRkYXRhLmFkZHIubGVuLAorCSAgICAgIHVuaXRkYXRhLmFkZHIuYnVmKTsKKyAgICAgIGZwcmludGYod2hlcmUsIm9wdG1heCAlZCBvcHRsZW4gJWQgb3B0YnVmICV4XG4iLAorCSAgICAgIHVuaXRkYXRhLm9wdC5tYXhsZW4sCisJICAgICAgdW5pdGRhdGEub3B0LmxlbiwKKwkgICAgICB1bml0ZGF0YS5vcHQuYnVmKTsKKyAgICAgIGZwcmludGYod2hlcmUsInVkYXRhbWF4ICVkIHVkYXRhbGVuICVkIHVkYXRhYnVmICV4XG4iLAorCSAgICAgIHVuaXRkYXRhLnVkYXRhLm1heGxlbiwKKwkgICAgICB1bml0ZGF0YS51ZGF0YS5sZW4sCisJICAgICAgdW5pdGRhdGEudWRhdGEuYnVmKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorI2VuZGlmIC8qIFJBSl9ERUJVRyAqLworICAgIGlmICh0X3JjdnVkYXRhKHNfZGF0YSwgCisJCSAgICZ1bml0ZGF0YSwKKwkJICAgJmZsYWdzKSAhPSAwKSB7CisgICAgICBpZiAoZXJybm8gPT0gVE5PREFUQSkgeworCWNvbnRpbnVlOworICAgICAgfQorICAgICAgaWYgKGVycm5vICE9IEVJTlRSKSB7CisJbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSB0X2Vycm5vOworCXNlbmRfcmVzcG9uc2UoKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIG1lc3NhZ2VzX3JlY3ZkKys7CisgICAgcmVjdl9yaW5nID0gcmVjdl9yaW5nLT5uZXh0OworICAgIHVuaXRkYXRhLnVkYXRhLmJ1ZiA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgfQorICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdWRwX3N0cmVhbTogZ290ICVkIG1lc3NhZ2VzLlxuIixtZXNzYWdlc19yZWN2ZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgCisgIC8qIFRoZSBsb29wIG5vdyBleGl0cyBkdWUgdGltZXIgb3IgPCBzZW5kX3NpemUgYnl0ZXMgcmVjZWl2ZWQuICovCisgIAorICBjcHVfc3RvcCh4dGlfdWRwX3N0cmVhbV9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lc191cCkgeworICAgIC8qIHdlIGVuZGVkIG9uIGEgdGltZXIsIHN1YnRyYWN0IHRoZSBQQURfVElNRSAqLworICAgIGVsYXBzZWRfdGltZSAtPSAoZmxvYXQpUEFEX1RJTUU7CisgIH0KKyAgZWxzZSB7CisgICAgc3RvcF90aW1lcigpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV91ZHBfc3RyZWFtOiB0ZXN0IGVuZGVkIGluICVmIHNlY29uZHMuXG4iLGVsYXBzZWRfdGltZSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgYnl0ZXNfcmVjZWl2ZWQgPSAobWVzc2FnZXNfcmVjdmQgKiBtZXNzYWdlX3NpemUpOworICAKKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV91ZHBfc3RyZWFtOiBnb3QgJWQgYnl0ZXNcbiIsCisJICAgIGJ5dGVzX3JlY2VpdmVkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZQk9IFhUSV9VRFBfU1RSRUFNX1JFU1VMVFM7CisgIHh0aV91ZHBfc3RyZWFtX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkCT0gYnl0ZXNfcmVjZWl2ZWQ7CisgIHh0aV91ZHBfc3RyZWFtX3Jlc3VsdHMtPm1lc3NhZ2VzX3JlY3ZkCT0gbWVzc2FnZXNfcmVjdmQ7CisgIHh0aV91ZHBfc3RyZWFtX3Jlc3VsdHMtPmVsYXBzZWRfdGltZQk9IGVsYXBzZWRfdGltZTsKKyAgeHRpX3VkcF9zdHJlYW1fcmVzdWx0cy0+Y3B1X21ldGhvZCAgICAgICAgPSBjcHVfbWV0aG9kOworICBpZiAoeHRpX3VkcF9zdHJlYW1fcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB4dGlfdWRwX3N0cmVhbV9yZXN1bHRzLT5jcHVfdXRpbAk9IGNhbGNfY3B1X3V0aWwoZWxhcHNlZF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICB4dGlfdWRwX3N0cmVhbV9yZXN1bHRzLT5jcHVfdXRpbAk9IC0xLjA7CisgIH0KKyAgCisgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdWRwX3N0cmVhbTogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICAKK30KKwwKK3ZvaWQgc2VuZF94dGlfdWRwX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSkKK3sKKyAgCisgIGNoYXIgKnRwdXRfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0ICBSZXNwLiAgIEVsYXBzZWQgIFRyYW5zLlxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgICBTaXplICAgIFRpbWUgICAgIFJhdGUgICAgICAgICBcblwKK2J5dGVzICBCeXRlcyAgYnl0ZXMgICAgYnl0ZXMgICBzZWNzLiAgICBwZXIgc2VjICAgXG5cbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8wID0KKyAgICAiJTcuMmZcbiI7CisgIAorICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMSA9ICJcCislLTZkICUtNmQgJS02ZCAgICUtNmQgICUtNi4yZiAgICU3LjJmICAgXG4iOworICBjaGFyICp0cHV0X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICpjcHVfdGl0bGUgPSAiXAorTG9jYWwgL1JlbW90ZVxuXAorU29ja2V0IFNpemUgICBSZXF1ZXN0IFJlc3AuICBFbGFwc2VkIFRyYW5zLiAgIENQVSAgICBDUFUgICAgUy5kZW0gICBTLmRlbVxuXAorU2VuZCAgIFJlY3YgICBTaXplICAgIFNpemUgICBUaW1lICAgIFJhdGUgICAgIGxvY2FsICByZW1vdGUgbG9jYWwgICByZW1vdGVcblwKK2J5dGVzICBieXRlcyAgYnl0ZXMgICBieXRlcyAgc2Vjcy4gICBwZXIgc2VjICAlJSAlYyAgICAlJSAlYyAgICB1cy9UciAgIHVzL1RyXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZiAlY1xuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICUtNmQgJS02LjJmICAlLTYuMmYgICAlLTYuMmYgJS02LjJmICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICprc2lua19mbXQgPSAiXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0XG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdlxuXAorJTVkICAlNWQgICAlNWQgICU1ZFxuIjsKKyAgCisgIAorICBmbG9hdAkJCWVsYXBzZWRfdGltZTsKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBzdHJ1Y3QgdF9iaW5kIGJpbmRfcmVxLCBiaW5kX3Jlc3A7CisgIHN0cnVjdCB0X3VuaXRkYXRhIHVuaXRkYXRhOworICBzdHJ1Y3QgdF91bml0ZGF0YSBzZW5kX3VuaXRkYXRhOworICBzdHJ1Y3QgdF91bml0ZGF0YSByZWN2X3VuaXRkYXRhOworICBpbnQJICAgICAgICAgICAgZmxhZ3MgPSAwOworCisgIGludAlsZW47CisgIGludAludW1tZXNzYWdlczsKKyAgU09DS0VUIHNlbmRfc29ja2V0OworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBpbnQJYnl0ZXNfeGZlcmQ7CisgIAorICBpbnQJcnNwX2J5dGVzX3JlY3ZkOworICAKKyAgZmxvYXQJbG9jYWxfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgZmxvYXQJcmVtb3RlX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworICBkb3VibGUgdGhydXB1dDsKKyAgCisgIHN0cnVjdAlob3N0ZW50CSAgICAgICAgKmhwOworICBzdHJ1Y3QJc29ja2FkZHJfaW4Jc2VydmVyLCBteWFkZHJfaW47CisgIHVuc2lnbmVkICAgICAgaW50ICAgICAgICAgICAgIGFkZHI7CisgIGludAkgICAgICAgICAgICAgICAgICAgICAgICBhZGRybGVuOworICAKKyAgc3RydWN0CXh0aV91ZHBfcnJfcmVxdWVzdF9zdHJ1Y3QJKnh0aV91ZHBfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXh0aV91ZHBfcnJfcmVzcG9uc2Vfc3RydWN0CSp4dGlfdWRwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJeHRpX3VkcF9ycl9yZXN1bHRzX3N0cnVjdAkqeHRpX3VkcF9ycl9yZXN1bHQ7CisKKyNpZmRlZiBXQU5UX0lOVEVSVkFMUworICBpbnQJaW50ZXJ2YWxfY291bnQ7CisgIHNpZ3NldF90IHNpZ25hbF9zZXQ7CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgCisgIHh0aV91ZHBfcnJfcmVxdWVzdCAgPQorICAgIChzdHJ1Y3QgeHRpX3VkcF9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgeHRpX3VkcF9ycl9yZXNwb25zZSA9CisgICAgKHN0cnVjdCB4dGlfdWRwX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHh0aV91ZHBfcnJfcmVzdWx0CSA9CisgICAgKHN0cnVjdCB4dGlfdWRwX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgdGltZV9oaXN0ID0gSElTVF9uZXcoKTsKKyNlbmRpZgorICAKKyAgLyogc2luY2Ugd2UgYXJlIG5vdyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29kZSB0aGF0IGVzdGFibGlzaGVkIHRoZSAqLworICAvKiBjb250cm9sIHNvY2tldCwgYW5kIHNpbmNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgZGlmZmVyZW50ICovCisgIC8qIHByb3RvY29scyBhbmQgc3VjaCwgd2UgYXJlIHBhc3NlZCB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3QgYW5kICovCisgIC8qIG11c3QgdHVybiB0aGF0IGludG8gdGhlIHRlc3Qgc3BlY2lmaWMgYWRkcmVzc2luZyBpbmZvcm1hdGlvbi4gKi8KKyAgCisgIGJ6ZXJvKChjaGFyICopJnNlcnZlciwKKwlzaXplb2Yoc2VydmVyKSk7CisgIAorICAvKiBpdCB3b3VsZCBzZWVtIHRoYXQgd2hpbGUgSFAtVVggd2lsbCBhbGxvdyBhbiBJUCBhZGRyZXNzIChhcyBhICovCisgIC8qIHN0cmluZykgaW4gYSBjYWxsIHRvIGdldGhvc3RieW5hbWUsIG90aGVyLCBsZXNzIGVubGlnaHRlbmVkICovCisgIC8qIHN5c3RlbXMgZG8gbm90LiBmaXggZnJvbSBhd2phY2tzQGNhLnNhbmRpYS5nb3YgcmFqIDEwLzk1ICovICAKKyAgLyogb3JkZXIgY2hhbmdlZCB0byBjaGVjayBmb3IgSVAgYWRkcmVzcyBmaXJzdC4gcmFqIDcvOTYgKi8KKworICBpZiAoKGFkZHIgPSBpbmV0X2FkZHIocmVtb3RlX2hvc3QpKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAvKiBpdCB3YXMgbm90IGFuIElQIGFkZHJlc3MsIHRyeSBpdCBhcyBhIG5hbWUgKi8KKyAgICBpZiAoKGhwID0gZ2V0aG9zdGJ5bmFtZShyZW1vdGVfaG9zdCkpID09IE5VTEwpIHsKKyAgICAgIC8qIHdlIGhhdmUgbm8gaWRlYSB3aGF0IGl0IGlzICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJlc3RhYmxpc2hfY29udHJvbDogY291bGQgbm90IHJlc29sdmUgdGhlIGRlc3RpbmF0aW9uICVzXG4iLAorCSAgICAgIHJlbW90ZV9ob3N0KTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGl0IHdhcyBhIHZhbGlkIHJlbW90ZV9ob3N0ICovCisgICAgICBiY29weShocC0+aF9hZGRyLAorCSAgICAoY2hhciAqKSZzZXJ2ZXIuc2luX2FkZHIsCisJICAgIGhwLT5oX2xlbmd0aCk7CisgICAgICBzZXJ2ZXIuc2luX2ZhbWlseSA9IGhwLT5oX2FkZHJ0eXBlOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBpdCB3YXMgYSB2YWxpZCBJUCBhZGRyZXNzICovCisgICAgc2VydmVyLnNpbl9hZGRyLnNfYWRkciA9IGFkZHI7CisgICAgc2VydmVyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICB9ICAgIAorICAKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIGZwcmludGYod2hlcmUsIlhUSSBVRFAgUkVRVUVTVC9SRVNQT05TRSBURVNUIik7CisgICAgICAgIGZwcmludGYod2hlcmUsIiB0byAlcyIsIHJlbW90ZV9ob3N0KTsKKyAgICBpZiAoaXRlcmF0aW9uX21heCA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgIiA6ICsvLSUzLjFmJSUgQCAlMmQlJSBjb25mLiIsCisJICAgICAgaW50ZXJ2YWwvMC4wMiwKKwkgICAgICBjb25maWRlbmNlX2xldmVsKTsKKyAgICAgIH0KKyAgICBpZiAobG9jX3NuZGF2b2lkIHx8IAorCWxvY19yY3Zhdm9pZCB8fAorCXJlbV9zbmRhdm9pZCB8fAorCXJlbV9yY3Zhdm9pZCkgeworICAgICAgZnByaW50Zih3aGVyZSwiIDogY29weSBhdm9pZGFuY2UiKTsKKyAgICB9CisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICBmcHJpbnRmKHdoZXJlLCIgOiBoaXN0b2dyYW0iKTsKKyNlbmRpZiAvKiBXQU5UX0hJU1RPR1JBTSAqLworI2lmZGVmIFdBTlRfSU5URVJWQUxTCisgICAgZnByaW50Zih3aGVyZSwiIDogaW50ZXJ2YWwiKTsKKyNlbmRpZiAvKiBXQU5UX0lOVEVSVkFMUyAqLworI2lmZGVmIERJUlRZIAorICAgIGZwcmludGYod2hlcmUsIiA6IGRpcnR5IGRhdGEiKTsKKyNlbmRpZiAvKiBESVJUWSAqLworICAgIGZwcmludGYod2hlcmUsIlxuIik7CisgIH0KKyAgCisgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMgKi8KKyAgCisgIHNlbmRfcmluZyAgICAgPSBOVUxMOworICByZWN2X3JpbmcgICAgID0gTlVMTDsKKyAgbnVtbWVzc2FnZXMJPSAwOworICBieXRlc194ZmVyZAk9IDA7CisgIHRpbWVzX3VwIAk9IDA7CisgIGNvbmZpZGVuY2VfaXRlcmF0aW9uID0gMTsKKyAgaW5pdF9zdGF0KCk7CisKKworICAvKiB3ZSBoYXZlIGEgZ3JlYXQtYmlnIHdoaWxlIGxvb3Agd2hpY2ggY29udHJvbHMgdGhlIG51bWJlciBvZiB0aW1lcyAqLworICAvKiB3ZSBydW4gYSBwYXJ0aWN1bGFyIHRlc3QuIHRoaXMgaXMgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBhICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKEkgcmVhbGx5IHNob3VsZCBoYXZlIHN0YXllZCBhd2FrZSBkdXJpbmcgKi8KKyAgLyogcHJvYnN0YXRzIDopLiBJZiB0aGUgdXNlciBkaWQgbm90IHJlcXVlc3QgY29uZmlkZW5jZSBtZWFzdXJlbWVudCAqLworICAvKiAobm8gY29uZmlkZW5jZSBpcyB0aGUgZGVmYXVsdCkgdGhlbiB3ZSB3aWxsIG9ubHkgZ28gdGhvdWdoIHRoZSAqLworICAvKiBsb29wIG9uY2UuIHRoZSBjb25maWRlbmNlIHN0dWZmIG9yaWdpbmF0ZXMgZnJvbSB0aGUgZm9sa3MgYXQgSUJNICovCisKKyAgd2hpbGUgKCgoY29uZmlkZW5jZSA8IDApICYmIChjb25maWRlbmNlX2l0ZXJhdGlvbiA8IGl0ZXJhdGlvbl9tYXgpKSB8fAorCSAoY29uZmlkZW5jZV9pdGVyYXRpb24gPD0gaXRlcmF0aW9uX21pbikpIHsKKyAgICAKKyAgICBudW1tZXNzYWdlcyAgICAgPSAwOworICAgIGJ5dGVzX3hmZXJkICAgICA9IDAuMDsKKyAgICB0aW1lc191cCAgICAgICAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgCisgICAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlcnMgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0ICovCisgICAgCisgICAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgICAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgcmVjdl93aWR0aCA9IDE7CisgICAgCisgICAgaWYgKHNlbmRfcmluZyA9PSBOVUxMKSB7CisgICAgICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgICAgICByZXFfc2l6ZSwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9hbGlnbiwKKwkJCQkgICAgICAgbG9jYWxfc2VuZF9vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBpZiAocmVjdl9yaW5nID09IE5VTEwpIHsKKyAgICAgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgICAgIHJzcF9zaXplLAorCQkJCSAgICAgICBsb2NhbF9yZWN2X2FsaWduLAorCQkJCSAgICAgICBsb2NhbF9yZWN2X29mZnNldCk7CisgICAgfQorICAgIAorICAvKiBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gY2FsbCB0X3JjdnVkYXRhKCkgaW5zdGVhZCBvZiB0X3JjdigpIHdlICovCisgIC8qIG5lZWQgdG8gaW5pdCB0aGUgdW5pdGRhdGEgc3RydWN0dXJlIHJhaiA4Lzk1ICovCisKKyAgICBtZW1zZXQgKCZyZWN2X3VuaXRkYXRhLCAwLCBzaXplb2YocmVjdl91bml0ZGF0YSkpOworICAgIHJlY3ZfdW5pdGRhdGEuYWRkci5tYXhsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICByZWN2X3VuaXRkYXRhLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgcmVjdl91bml0ZGF0YS5hZGRyLmJ1ZiAgICA9IChjaGFyICopJnNlcnZlcjsKKyAgICAKKyAgICByZWN2X3VuaXRkYXRhLm9wdC5tYXhsZW4gPSAwOworICAgIHJlY3ZfdW5pdGRhdGEub3B0LmxlbiAgICA9IDA7CisgICAgcmVjdl91bml0ZGF0YS5vcHQuYnVmICAgID0gTlVMTDsKKyAgICAKKyAgICByZWN2X3VuaXRkYXRhLnVkYXRhLm1heGxlbiA9IHJzcF9zaXplOworICAgIHJlY3ZfdW5pdGRhdGEudWRhdGEubGVuICAgID0gcnNwX3NpemU7CisgICAgcmVjdl91bml0ZGF0YS51ZGF0YS5idWYgICAgPSByZWN2X3JpbmctPmJ1ZmZlcl9wdHI7CisgICAgCisgICAgLyogc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGNhbGwgdF9zbmR1ZGF0YSgpIGluc3RlYWQgb2YgdF9zbmQoKSB3ZSAqLworICAgIC8qIG5lZWQgdG8gaW5pdCB0aGUgdW5pdGRhdGEgc3RydWN0dXJlIHJhaiA4Lzk1ICovCisgICAgCisgICAgbWVtc2V0ICgmc2VuZF91bml0ZGF0YSwgMCwgc2l6ZW9mKHNlbmRfdW5pdGRhdGEpKTsKKyAgICBzZW5kX3VuaXRkYXRhLmFkZHIubWF4bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgc2VuZF91bml0ZGF0YS5hZGRyLmxlbiAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgIHNlbmRfdW5pdGRhdGEuYWRkci5idWYgICAgPSAoY2hhciAqKSZzZXJ2ZXI7CisgICAgCisgICAgc2VuZF91bml0ZGF0YS5vcHQubWF4bGVuID0gMDsKKyAgICBzZW5kX3VuaXRkYXRhLm9wdC5sZW4gICAgPSAwOworICAgIHNlbmRfdW5pdGRhdGEub3B0LmJ1ZiAgICA9IE5VTEw7CisgICAgCisgICAgc2VuZF91bml0ZGF0YS51ZGF0YS5tYXhsZW4gPSByZXFfc2l6ZTsKKyAgICBzZW5kX3VuaXRkYXRhLnVkYXRhLmxlbiAgICA9IHJlcV9zaXplOworICAgIHNlbmRfdW5pdGRhdGEudWRhdGEuYnVmICAgID0gc2VuZF9yaW5nLT5idWZmZXJfcHRyOworCisgICAgLypzZXQgdXAgdGhlIGRhdGEgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBzZW5kX3NvY2tldCA9IGNyZWF0ZV94dGlfZW5kcG9pbnQobG9jX3h0aV9kZXZpY2UpOworICAgIAorICAgIGlmIChzZW5kX3NvY2tldCA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfeHRpX3VkcF9ycjogdWRwIHJyIGRhdGEgc29ja2V0Iik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsInNlbmRfeHRpX3VkcF9ycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICAgIH0KKyAgICAKKyAgICAvKiBpdCB3b3VsZCBzZWVtIHRoYXQgd2l0aCBYVEksIHRoZXJlIGlzIG5vIGltcGxpY2l0IGJpbmQgICovCisgICAgLyogc28gd2UgaGF2ZSB0byBtYWtlIGEgY2FsbCB0byB0X2JpbmQuIHRoaXMgaXMgbm90ICovCisgICAgLyogdGVycmlibHkgY29udmVuaWVudCwgYnV0IEkgc3VwcG9zZSB0aGF0ICJzdGFuZGFyZCBpcyBiZXR0ZXIgKi8KKyAgICAvKiB0aGFuIGJldHRlciIgOikgcmFqIDIvOTUgKi8KKworICAgIGlmICh0X2JpbmQoc2VuZF9zb2NrZXQsIE5VTEwsIE5VTEwpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgdF9lcnJvcigic2VuZF94dGlfdGNwX3N0cmVhbTogdF9iaW5kIik7CisgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8qIElmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgY3B1IHV0aWxpemF0aW9uIG1lYXN1cmVtZW50cywgd2UgbXVzdCAqLworICAgIC8qIGNhbGlicmF0ZSB0aGUgY3B1KHMpLiBXZSB3aWxsIHBlcmZvcm0gdGhpcyB0YXNrIHdpdGhpbiB0aGUgdGVzdHMgKi8KKyAgICAvKiB0aGVtc2VsdmVzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBjcHUgcmF0ZSwgdGhlbiAqLworICAgIC8qIGNhbGlicmF0ZV9sb2NhbF9jcHUgd2lsbCByZXR1cm4gcmF0aGVyIHF1aWNrbHkgYXMgaXQgd2lsbCBoYXZlICovCisgICAgLyogbm90aGluZyB0byBkby4gSWYgbG9jYWxfY3B1X3JhdGUgaXMgemVybywgdGhlbiB3ZSB3aWxsIGdvIHRocm91Z2ggKi8KKyAgICAvKiBhbGwgdGhlICJub3JtYWwiIGNhbGlicmF0aW9uIHN0dWZmIGFuZCByZXR1cm4gdGhlIHJhdGUgYmFjay4gSWYgKi8KKyAgICAvKiB0aGVyZSBpcyBubyBpZGxlIGNvdW50ZXIgaW4gdGhlIGtlcm5lbCBpZGxlIGxvb3AsIHRoZSAqLworICAgIC8qIGxvY2FsX2NwdV9yYXRlIHdpbGwgYmUgc2V0IHRvIC0xLiAqLworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgICAgfQorICAgIAorICAgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgKi8KKyAgICAvKiBwYXJhbXRlcnMgb24gdGhlIG90aGVyIHNpZGUgYXQgdGhpcyBwb2ludCwgaGVuY2UgdGhlIHJlYXNvbiBmb3IgKi8KKyAgICAvKiBhbGwgdGhlIHZhbHVlcyBiZWluZyBwYXNzZWQgaW4gdGhlIHNldHVwIG1lc3NhZ2UuIElmIHRoZSB1c2VyIGRpZCAqLworICAgIC8qIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCAqLworICAgIC8qIHdpbGwgaW5kaWNhdGUgdG8gdGhlIHJlbW90ZSB0aGF0IG5vIGNoYW5nZXMgYmV5b25kIHRoZSBzeXN0ZW0ncyAqLworICAgIC8qIGRlZmF1bHQgc2hvdWxkIGJlIHVzZWQuIEFsaWdubWVudCBpcyB0aGUgZXhjZXB0aW9uLCBpdCB3aWxsICovCisgICAgLyogZGVmYXVsdCB0byA4LCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgICAKKyAgICBuZXRwZXJmX3JlcXVlc3QuY29udGVudC5yZXF1ZXN0X3R5cGUJPSBET19YVElfVURQX1JSOworICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+cmVjdl9idWZfc2l6ZQk9IHJzcl9zaXplOworICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZQk9IHJzc19zaXplOworICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQgID0gcmVtb3RlX3JlY3ZfYWxpZ247CisgICAgeHRpX3VkcF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldAk9IHJlbW90ZV9yZWN2X29mZnNldDsKKyAgICB4dGlfdWRwX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50ICA9IHJlbW90ZV9zZW5kX2FsaWduOworICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQJPSByZW1vdGVfc2VuZF9vZmZzZXQ7CisgICAgeHRpX3VkcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUJPSByZXFfc2l6ZTsKKyAgICB4dGlfdWRwX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUJPSByc3Bfc2l6ZTsKKyAgICB4dGlfdWRwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0gcmVtb3RlX2NwdV91c2FnZTsKKyAgICB4dGlfdWRwX3JyX3JlcXVlc3QtPmNwdV9yYXRlCT0gcmVtb3RlX2NwdV9yYXRlOworICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQJPSByZW1fcmN2YXZvaWQ7CisgICAgeHRpX3VkcF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZAk9IHJlbV9zbmRhdm9pZDsKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICB4dGlfdWRwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0gdGVzdF90aW1lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGgJPSB0ZXN0X3RyYW5zICogLTE7CisgICAgfQorICAgIAorICAgIHN0cmNweSh4dGlfdWRwX3JyX3JlcXVlc3QtPnh0aV9kZXZpY2UsIHJlbV94dGlfZGV2aWNlKTsKKyAgCisjaWZkZWYgX19hbHBoYQorICAKKyAgICAvKiBvayAtIGV2ZW4gb24gYSBERUMgYm94LCBzdHJpbmdzIGFyZSBzdHJpbmdzLiBJIGRpZG4ndCByZWFsbHkgd2FudCAqLworICAgIC8qIHRvIG50b2hsIHRoZSB3b3JkcyBvZiBhIHN0cmluZy4gc2luY2UgSSBkb24ndCB3YW50IHRvIHRlYWNoIHRoZSAqLworICAgIC8qIHNlbmRfIGFuZCByZWN2XyBfcmVxdWVzdCBhbmQgX3Jlc3BvbnNlIHJvdXRpbmVzIGFib3V0IHRoZSB0eXBlcywgKi8KKyAgICAvKiBJIHdpbGwgcHV0ICJhbnRpLW50b2hsIiBjYWxscyBoZXJlLiBJIGltYWdpbmUgdGhhdCB0aGUgInB1cmUiICovCisgICAgLyogc29sdXRpb24gd291bGQgYmUgdG8gdXNlIFhEUiwgYnV0IEkgYW0gc3RpbGwgbGVhcnkgb2YgYmVpbmcgYWJsZSAqLworICAgIC8qIHRvIGZpbmQgWERSIGxpYnMgb24gYWxsIHBsYXRmb3JtcyBJIHdhbnQgcnVubmluZyBuZXRwZXJmLiByYWogKi8KKyAgICB7CisgICAgICBpbnQgKmNoYXJ3b3JkOworICAgICAgaW50ICppbml0d29yZDsKKyAgICAgIGludCAqbGFzdHdvcmQ7CisgICAgICAKKyAgICAgIGluaXR3b3JkID0gKGludCAqKSB4dGlfdWRwX3JyX3JlcXVlc3QtPnh0aV9kZXZpY2U7CisgICAgICBsYXN0d29yZCA9IGluaXR3b3JkICsgKChzdHJsZW4ocmVtX3h0aV9kZXZpY2UpICsgMykgLyA0KTsKKyAgICAgIAorICAgICAgZm9yIChjaGFyd29yZCA9IGluaXR3b3JkOworCSAgIGNoYXJ3b3JkIDwgbGFzdHdvcmQ7CisJICAgY2hhcndvcmQrKykgeworCQorCSpjaGFyd29yZCA9IG50b2hsKCpjaGFyd29yZCk7CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qIF9fYWxwaGEgKi8KKworICAgIGlmIChkZWJ1ZyA+IDEpIHsKKyAgICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfeHRpX3VkcF9ycjogcmVxdWVzdGluZyBVRFAgci9yIHRlc3RcbiIpOworICAgIH0KKyAgICAKKyAgICBzZW5kX3JlcXVlc3QoKTsKKyAgICAKKyAgICAvKiBUaGUgcmVzcG9uc2UgZnJvbSB0aGUgcmVtb3RlIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIHJlbGV2YW50IAkqLworICAgIC8qIHNvY2tldCBwYXJhbWV0ZXJzIGZvciB0aGlzIHRlc3QgdHlwZS4gV2Ugd2lsbCBwdXQgdGhlbSBiYWNrIGludG8gKi8KKyAgICAvKiB0aGUgdmFyaWFibGVzIGhlcmUgc28gdGhleSBjYW4gYmUgZGlzcGxheWVkIGlmIGRlc2lyZWQuICBUaGUJKi8KKyAgICAvKiByZW1vdGUgd2lsbCBoYXZlIGNhbGlicmF0ZWQgQ1BVIGlmIG5lY2Vzc2FyeSwgYW5kIHdpbGwgaGF2ZSBkb25lCSovCisgICAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAgIC8qIGJlZm9yZSBzZW5kaW5nIHRoZSByZXF1ZXN0LCBhbmQgd2lsbCBncmFiIHRoZSBjb3VudGVyIHZhbHVlIHJpZ2h0Ki8KKyAgICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodCovCisgICAgLyogYWZ0ZXIgdGhlIGFjY2VwdCBjYWxsLiBUaGlzIHNhdmVzIHRoZSBoYXNzbGUgb2YgZXh0cmEgbWVzc2FnZXMJKi8KKyAgICAvKiBiZWluZyBzZW50IGZvciB0aGUgVURQIHRlc3RzLgkJCQkJKi8KKyAgICAKKyAgICByZWN2X3Jlc3BvbnNlKCk7CisgICAgCisgICAgaWYgKCFuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubykgeworICAgICAgaWYgKGRlYnVnKQorCWZwcmludGYod2hlcmUsInJlbW90ZSBsaXN0ZW4gZG9uZS5cbiIpOworICAgICAgcnNyX3NpemUJICAgICAgID0JeHRpX3VkcF9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKyAgICAgIHJzc19zaXplCSAgICAgICA9CXh0aV91ZHBfcnJfcmVzcG9uc2UtPnNlbmRfYnVmX3NpemU7CisgICAgICByZW1vdGVfY3B1X3VzYWdlID0JeHRpX3VkcF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHU7CisgICAgICByZW1vdGVfY3B1X3JhdGUgID0gCXh0aV91ZHBfcnJfcmVzcG9uc2UtPmNwdV9yYXRlOworICAgICAgLyogcG9ydCBudW1iZXJzIGluIHByb3BlciBvcmRlciAqLworICAgICAgc2VydmVyLnNpbl9wb3J0ICA9CShzaG9ydCl4dGlfdWRwX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyOworICAgICAgc2VydmVyLnNpbl9wb3J0ICA9IAlodG9ucyhzZXJ2ZXIuc2luX3BvcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHJlbW90ZSBlcnJvciIpOworICAgICAgCisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiBEYXRhIFNvY2tldCBzZXQtdXAgaXMgZmluaXNoZWQuIElmIHRoZXJlIHdlcmUgcHJvYmxlbXMsIGVpdGhlciB0aGUgKi8KKyAgICAvKiBjb25uZWN0IHdvdWxkIGhhdmUgZmFpbGVkLCBvciB0aGUgcHJldmlvdXMgcmVzcG9uc2Ugd291bGQgaGF2ZSAqLworICAgIC8qIGluZGljYXRlZCBhIHByb2JsZW0uIEkgZmFpbGVkIHRvIHNlZSB0aGUgdmFsdWUgb2YgdGhlIGV4dHJhICovCisgICAgLyogbWVzc2FnZSBhZnRlciB0aGUgYWNjZXB0IG9uIHRoZSByZW1vdGUuIElmIGl0IGZhaWxlZCwgd2UnbGwgc2VlIGl0ICovCisgICAgLyogaGVyZS4gSWYgaXQgZGlkbid0LCB3ZSBtaWdodCBhcyB3ZWxsIHN0YXJ0IHB1bXBpbmcgZGF0YS4gKi8KKyAgICAKKyAgICAvKiBTZXQtdXAgdGhlIHRlc3QgZW5kIGNvbmRpdGlvbnMuIEZvciBhIHJlcXVlc3QvcmVzcG9uc2UgdGVzdCwgdGhleSAqLworICAgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgICAKKyAgICBpZiAodGVzdF90aW1lKSB7CisgICAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgICB0aW1lc191cCA9IDA7CisgICAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgICAgdHJhbnNfcmVtYWluaW5nID0gdGVzdF9ieXRlczsKKyAgICAgIHRpbWVzX3VwID0gMTsKKyAgICB9CisgICAgCisgICAgLyogVGhlIGNwdV9zdGFydCByb3V0aW5lIHdpbGwgZ3JhYiB0aGUgY3VycmVudCB0aW1lIGFuZCBwb3NzaWJseSAqLworICAgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gYW5kL29yIHNlcnZpY2UgZGVtYW5kIGFuZCB0aHJ1cHV0LiAqLworICAgIAorICAgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworCisjaWZkZWYgV0FOVF9JTlRFUlZBTFMKKyAgICBpZiAoKGludGVydmFsX2J1cnN0KSB8fCAoZGVtb19tb2RlKSkgeworICAgICAgLyogemVybyBtZWFucyB0aGF0IHdlIG5ldmVyIHBhdXNlLCBzbyB3ZSBuZXZlciBzaG91bGQgbmVlZCB0aGUgKi8KKyAgICAgIC8qIGludGVydmFsIHRpbWVyLCB1bmxlc3Mgd2UgYXJlIGluIGRlbW9fbW9kZSAqLworICAgICAgc3RhcnRfaXRpbWVyKGludGVydmFsX3dhdGUpOworICAgIH0KKyAgICBpbnRlcnZhbF9jb3VudCA9IGludGVydmFsX2J1cnN0OworICAgIC8qIGdldCB0aGUgc2lnbmFsIHNldCBmb3IgdGhlIGNhbGwgdG8gc2lnc3VzcGVuZCAqLworICAgIGlmIChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIChzaWdzZXRfdCAqKU5VTEwsICZzaWduYWxfc2V0KSAhPSAwKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJzZW5kX3h0aV91ZHBfcnI6IHVuYWJsZSB0byBnZXQgc2lnbWFzayBlcnJubyAlZFxuIiwKKwkgICAgICBlcnJubyk7CisgICAgICBmZmx1c2god2hlcmUpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAKKyAgICAvKiBXZSB1c2UgYW4gIk9SIiB0byBjb250cm9sIHRlc3QgZXhlY3V0aW9uLiBXaGVuIHRoZSB0ZXN0IGlzICovCisgICAgLyogY29udHJvbGxlZCBieSB0aW1lLCB0aGUgYnl0ZSBjb3VudCBjaGVjayB3aWxsIGFsd2F5cyByZXR1cm4gKi8KKyAgICAvKiBmYWxzZS4gV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3QgKi8KKyAgICAvKiB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuIFdoZW4gdGhlIHRlc3QgaXMgZmluaXNoZWQsIHRoZSB3aG9sZSAqLworICAgIC8qIGV4cHJlc3Npb24gd2lsbCBnbyBmYWxzZSBhbmQgd2Ugd2lsbCBzdG9wIHNlbmRpbmcgZGF0YS4gSSB0aGluayAqLworICAgIC8qIEkganVzdCBhcmJpdHJhcmlseSBkZWNyZW1lbnQgdHJhbnNfcmVtYWluaW5nIGZvciB0aGUgdGltZWQgKi8KKyAgICAvKiB0ZXN0LCBidXQgd2lsbCBub3QgZG8gdGhhdCBqdXN0IHlldC4uLiBPbmUgb3RoZXIgcXVlc3Rpb24gaXMgKi8KKyAgICAvKiB3aGV0aGVyIG9yIG5vdCB0aGUgc2VuZCBidWZmZXIgYW5kIHRoZSByZWNlaXZlIGJ1ZmZlciBzaG91bGQgYmUgKi8KKyAgICAvKiB0aGUgc2FtZSBidWZmZXIuICovCisKKyAgICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgICAvKiBzZW5kIHRoZSByZXF1ZXN0ICovCisjaWZkZWYgV0FOVF9ISVNUT0dSQU0KKyAgICAgIEhJU1RfdGltZXN0YW1wKCZ0aW1lX29uZSk7CisjZW5kaWYKKyAgICAgIGlmKCh0X3NuZHVkYXRhKHNlbmRfc29ja2V0LAorCQkgICAgICZzZW5kX3VuaXRkYXRhKSkgIT0gMCkgeworCWlmIChlcnJubyA9PSBFSU5UUikgeworCSAgLyogV2UgbGlrZWx5IGhpdCAqLworCSAgLyogdGVzdC1lbmQgdGltZS4gKi8KKwkgIGJyZWFrOworCX0KKyAgICAgICAgZnByaW50Zih3aGVyZSwKKwkJInNlbmRfeHRpX3VkcF9ycjogdF9zbmR1ZGF0YTogZXJybm8gJWQgdF9lcnJubyAlZCB0X2xvb2sgMHglLjR4XG4iLAorCQllcnJubywKKwkJdF9lcnJubywKKwkJdF9sb29rKHNlbmRfc29ja2V0KSk7CisJZmZsdXNoKHdoZXJlKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgICAgCisgICAgICAvKiByZWNlaXZlIHRoZSByZXNwb25zZS4gd2l0aCBVRFAgd2Ugd2lsbCBnZXQgaXQgYWxsLCBvciBub3RoaW5nICovCisgICAgICAKKyAgICAgIGlmKCh0X3JjdnVkYXRhKHNlbmRfc29ja2V0LAorCQkgICAgICZyZWN2X3VuaXRkYXRhLAorCQkgICAgICZmbGFncykpICE9IDApIHsKKwlpZiAoZXJybm8gPT0gVE5PREFUQSkgeworCSAgY29udGludWU7CisJfQorCWlmIChlcnJubyA9PSBFSU5UUikgeworCSAgLyogQWdhaW4sIHdlIGhhdmUgbGlrZWx5IGhpdCB0ZXN0LWVuZCB0aW1lICovCisJICBicmVhazsKKwl9CisJZnByaW50Zih3aGVyZSwKKwkJInNlbmRfeHRpX3VkcF9ycjogdF9yY3Z1ZGF0YTogZXJybm8gJWQgdF9lcnJubyAlZCB0X2xvb2sgMHgleFxuIiwKKwkJZXJybm8sCisJCXRfZXJybm8sCisJCXRfbG9vayhzZW5kX3NvY2tldCkpOworCWZwcmludGYod2hlcmUsCisJCSJyZWN2X3VuaXRkYXRhLnVkYXRhLmJ1ZiAleFxuIixyZWN2X3VuaXRkYXRhLnVkYXRhLmJ1Zik7CisJZnByaW50Zih3aGVyZSwKKwkJInJlY3ZfdW5pdGRhdGEudWRhdGEubWF4bGVuICV4XG4iLHJlY3ZfdW5pdGRhdGEudWRhdGEubWF4bGVuKTsKKwlmcHJpbnRmKHdoZXJlLAorCQkicmVjdl91bml0ZGF0YS51ZGF0YS5sZW4gJXhcbiIscmVjdl91bml0ZGF0YS51ZGF0YS5sZW4pOworCWZwcmludGYod2hlcmUsCisJCSJyZWN2X3VuaXRkYXRhLmFkZHIuYnVmICV4XG4iLHJlY3ZfdW5pdGRhdGEuYWRkci5idWYpOworCWZwcmludGYod2hlcmUsCisJCSJyZWN2X3VuaXRkYXRhLmFkZHIubWF4bGVuICV4XG4iLHJlY3ZfdW5pdGRhdGEuYWRkci5tYXhsZW4pOworCWZwcmludGYod2hlcmUsCisJCSJyZWN2X3VuaXRkYXRhLmFkZHIubGVuICV4XG4iLHJlY3ZfdW5pdGRhdGEuYWRkci5sZW4pOworCWZmbHVzaCh3aGVyZSk7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKyAgICAgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgICBISVNUX3RpbWVzdGFtcCgmdGltZV90d28pOworICAgICAgSElTVF9hZGQodGltZV9oaXN0LGRlbHRhX21pY3JvKCZ0aW1lX29uZSwmdGltZV90d28pKTsKKyAgICAgIAorICAgICAgLyogYXQgdGhpcyBwb2ludCwgd2UgbWF5IHdpc2ggdG8gc2xlZXAgZm9yIHNvbWUgcGVyaW9kIG9mICovCisgICAgICAvKiB0aW1lLCBzbyB3ZSBzZWUgaG93IGxvbmcgdGhhdCBsYXN0IHRyYW5zYWN0aW9uIGp1c3QgdG9vaywgKi8KKyAgICAgIC8qIGFuZCBzbGVlcCBmb3IgdGhlIGRpZmZlcmVuY2Ugb2YgdGhhdCBhbmQgdGhlIGludGVydmFsLiBXZSAqLworICAgICAgLyogd2lsbCBub3Qgc2xlZXAgaWYgdGhlIHRpbWUgd291bGQgYmUgbGVzcyB0aGFuIGEgKi8KKyAgICAgIC8qIG1pbGxpc2Vjb25kLiAgKi8KKyNlbmRpZgorI2lmZGVmIFdBTlRfSU5URVJWQUxTICAgICAgCisgICAgICBpZiAoZGVtb19tb2RlKSB7CisJdW5pdHNfdGhpc190aWNrICs9IDE7CisgICAgICB9CisgICAgICAvKiBpbiB0aGlzIGNhc2UsIHRoZSBpbnRlcnZhbCBjb3VudCBpcyB0aGUgY291bnQtZG93biBjb3V0ZXIgKi8KKyAgICAgIC8qIHRvIGRlY2lkZSB0byBzbGVlcCBmb3IgYSBsaXR0bGUgYml0ICovCisgICAgICBpZiAoKGludGVydmFsX2J1cnN0KSAmJiAoLS1pbnRlcnZhbF9jb3VudCA9PSAwKSkgeworCS8qIGNhbGwgc2lnc3VzcGVuZCBhbmQgd2FpdCBmb3IgdGhlIGludGVydmFsIHRpbWVyIHRvIGdldCB1cyAqLworCS8qIG91dCAqLworCWlmIChkZWJ1ZykgeworCSAgZnByaW50Zih3aGVyZSwiYWJvdXQgdG8gc3VzcGVuZFxuIik7CisJICBmZmx1c2god2hlcmUpOworCX0KKwlpZiAoc2lnc3VzcGVuZCgmc2lnbmFsX3NldCkgPT0gRUZBVUxUKSB7CisJICBmcHJpbnRmKHdoZXJlLAorCQkgICJzZW5kX3h0aV91ZHBfcnI6IGZhdWx0IHdpdGggc2lnbmFsIHNldCFcbiIpOworCSAgZmZsdXNoKHdoZXJlKTsKKwkgIGV4aXQoMSk7CisJfQorCWludGVydmFsX2NvdW50ID0gaW50ZXJ2YWxfYnVyc3Q7CisgICAgICB9CisjZW5kaWYgLyogV0FOVF9JTlRFUlZBTFMgKi8KKyAgICAgIAorICAgICAgbnVtbWVzc2FnZXMrKzsgICAgICAgICAgCisgICAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisJdHJhbnNfcmVtYWluaW5nLS07CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChkZWJ1ZyA+IDMpIHsKKwlpZiAoKG51bW1lc3NhZ2VzICUgMTAwKSA9PSAwKSB7CisJICBmcHJpbnRmKHdoZXJlLCJUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZWRcbiIsbnVtbWVzc2FnZXMpOworCSAgZmZsdXNoKHdoZXJlKTsKKwl9CisgICAgICB9CisgICAgICAKKyAgICB9CisgICAgCisgICAgLyogdGhpcyBjYWxsIHdpbGwgYWx3YXlzIGdpdmUgdXMgdGhlIGVsYXBzZWQgdGltZSBmb3IgdGhlIHRlc3QsIGFuZCAqLworICAgIC8qIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1IHV0aWxpemF0aW9uICovCisgICAgCisgICAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nICovCisJCQkJCQkvKiBtZWFzdXJlZD8gaG93IGxvbmcgKi8KKwkJCQkJCS8qIGRpZCB3ZSByZWFsbHkgcnVuPyAqLworICAgIAorICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZSAqLworICAgIC8qIGNhbGN1bGF0ZWQgc2VydmljZSBkZW1hbmQgYW5kIGFsbCB0aG9zZSBpbnRlcmVzdGluZyB0aGluZ3MuIElmICovCisgICAgLyogaXQgd2Fzbid0IHN1cHBvc2VkIHRvIGNhcmUsIGl0IHdpbGwgcmV0dXJuIG9idmlvdXMgdmFsdWVzLiAqLworICAgIAorICAgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgICBpZiAoIW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKSB7CisgICAgICBpZiAoZGVidWcpCisJZnByaW50Zih3aGVyZSwicmVtb3RlIHJlc3VsdHMgb2J0YWluZWRcbiIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFNldF9lcnJubyhuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyk7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHJlbW90ZSBlcnJvciIpOworICAgICAgCisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICAvKiBXZSBub3cgY2FsY3VsYXRlIHdoYXQgb3VyIHRocnVwdXQgd2FzIGZvciB0aGUgdGVzdC4gSW4gdGhlICovCisgICAgLyogZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBpbmNsdWRlIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRocnVwdXQgKi8KKyAgICAvKiBtZWFzdXJlZCBieSB0aGUgcmVtb3RlLCBidXQgaXQgc2hvdWxkIGJlIHRoZSBjYXNlIHRoYXQgZm9yIGEgKi8KKyAgICAvKiBVRFAgcnIgdGVzdCwgdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiAqLworICAgIC8qIFdlIGNhbGN1bGF0ZSBieXRlc19zZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHdheSB0aGUgdGVzdCBsZW5ndGggKi8KKyAgICAvKiB3YXMgY29udHJvbGxlZC4gICovCisgICAgCisgICAgYnl0ZXNfeGZlcmQJPSAocmVxX3NpemUgKiBudW1tZXNzYWdlcykgKyAocnNwX3NpemUgKiBudW1tZXNzYWdlcyk7CisgICAgdGhydXB1dAk9IG51bW1lc3NhZ2VzIC8gZWxhcHNlZF90aW1lOworICAgIAorICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UgfHwgcmVtb3RlX2NwdV91c2FnZSkgeworCisgICAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgICAvKiB1dGlsaXphdGlvbiBmb3IgdGhlIHN5c3RlbShzKSBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlICovCisgICAgICAvKiBpbmZvcm1hdGlvbiBtaWdodCBiZSBib2d1cyBiZWNhdXNlIHRoZXJlIHdhcyBubyBpZGxlIGNvdW50ZXIgKi8KKyAgICAgIC8qIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcyBmb3IgdGhlICovCisgICAgICAvKiB1c2VyJ3MgYmVuZWZpdCBieSBwbGFjaW5nIGEgY29kZSBmb3IgdGhlIG1ldG9kIHVzZWQgaW4gdGhlICovCisgICAgICAvKiB0ZXN0IGJhbm5lciAqLworCisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uID0gY2FsY19jcHVfdXRpbCgwLjApOworCQorCS8qIHNpbmNlIGNhbGNfc2VydmljZSBkZW1hbmQgaXMgZG9pbmcgbXMvS3VuaXQgd2Ugd2lsbCAqLworCS8qIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gYnkgMTAyNCB0byBnZXQgKi8KKwkvKiAiZ29vZCIgbnVtYmVycyAqLworCQorCWxvY2FsX3NlcnZpY2VfZGVtYW5kICA9IGNhbGNfc2VydmljZV9kZW1hbmQoKGRvdWJsZSkgbnVtbWVzc2FnZXMqMTAyNCwKKwkJCQkJCSAgICAwLjAsCisJCQkJCQkgICAgMC4wLAorCQkJCQkJICAgIDApOworICAgICAgfQorICAgICAgZWxzZSB7CisJbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gLTEuMDsKKwlsb2NhbF9zZXJ2aWNlX2RlbWFuZAk9IC0xLjA7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChyZW1vdGVfY3B1X3VzYWdlKSB7CisJcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHh0aV91ZHBfcnJfcmVzdWx0LT5jcHVfdXRpbDsKKwkKKwkvKiBzaW5jZSBjYWxjX3NlcnZpY2UgZGVtYW5kIGlzIGRvaW5nIG1zL0t1bml0IHdlIHdpbGwgKi8KKwkvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisJLyogImdvb2QiIG51bWJlcnMgKi8KKwkKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAgICAwLjAsCisJCQkJCQkgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgICAgIHh0aV91ZHBfcnJfcmVzdWx0LT5udW1fY3B1cyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlyZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKwlyZW1vdGVfc2VydmljZV9kZW1hbmQgID0gLTEuMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiB3ZSB3ZXJlIG5vdCBtZWFzdXJpbmcgY3B1LCBmb3IgdGhlIGNvbmZpZGVuY2Ugc3R1ZmYsIHdlICovCisgICAgICAvKiBzaG91bGQgbWFrZSBpdCAtMS4wICovCisgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24JPSAtMS4wOworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQJPSAtMS4wOworICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IC0xLjA7CisgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQgID0gLTEuMDsKKyAgICB9CisgICAgCisgICAgLyogYXQgdGhpcyBwb2ludCwgd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW5mb3JtYXRpb24uICovCisgICAgLyogaWYgZGVidWdnaW5nIGlzIG9uLCBjYWxjdWxhdGVfY29uZmlkZW5jZSB3aWxsIHByaW50LW91dCB0aGUgKi8KKyAgICAvKiBwYXJhbWV0ZXJzIHdlIHBhc3MgaXQgKi8KKyAgICAKKyAgICBjYWxjdWxhdGVfY29uZmlkZW5jZShjb25maWRlbmNlX2l0ZXJhdGlvbiwKKwkJCSBlbGFwc2VkX3RpbWUsCisJCQkgdGhydXB1dCwKKwkJCSBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCisJCQkgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJCSByZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgIAorICAgIAorICAgIGNvbmZpZGVuY2VfaXRlcmF0aW9uKys7CisgICAgCisgICAgLyogd2UgYXJlIGRvbmUgd2l0aCB0aGUgc29ja2V0ICovCisgICAgdF9jbG9zZShzZW5kX3NvY2tldCk7CisgIH0KKworICAvKiBhdCB0aGlzIHBvaW50LCB3ZSBoYXZlIG1hZGUgYWxsIHRoZSBpdGVyYXRpb25zIHdlIGFyZSBnb2luZyB0byAqLworICAvKiBtYWtlLiAqLworICByZXRyaWV2ZV9jb25maWRlbnRfdmFsdWVzKCZlbGFwc2VkX3RpbWUsCisJCQkgICAgJnRocnVwdXQsCisJCQkgICAgJmxvY2FsX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmcmVtb3RlX2NwdV91dGlsaXphdGlvbiwKKwkJCSAgICAmbG9jYWxfc2VydmljZV9kZW1hbmQsCisJCQkgICAgJnJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CisgIAorICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgIC8qIGhhcyBzcGVjaWZpZWQgemVyby1sZXZlbCB2ZXJib3NpdHksIHdlIHdpbGwganVzdCBwcmludCB0aGUgKi8KKyAgLyogbG9jYWwgc2VydmljZSBkZW1hbmQsIG9yIHRoZSByZW1vdGUgc2VydmljZSBkZW1hbmQuIElmIHRoZSAqLworICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAvKiAic3RyZWFtcGVyZiIgbnVtYmVycy4gSWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBhIHZlcmJvc2l0eSAqLworICAvKiBvZiBncmVhdGVyIHRoYW4gMSwgd2Ugd2lsbCBkaXNwbGF5IGEgdmVyaXRhYmxlIHBsZXRob3JhIG9mICovCisgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgLyogbm90IGNwdV9tZWFzdXJlbWVudCBzcGVjaWZpYy4uLiAgKi8KKyAgCisgIGlmIChjb25maWRlbmNlIDwgMCkgeworICAgIC8qIHdlIGRpZCBub3QgaGl0IGNvbmZpZGVuY2UsIGJ1dCB3ZXJlIHdlIGFza2VkIHRvIGxvb2sgZm9yIGl0PyAqLworICAgIGlmIChpdGVyYXRpb25fbWF4ID4gMSkgeworICAgICAgZGlzcGxheV9jb25maWRlbmNlKCk7CisgICAgfQorICB9CisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICBsb2NhbF9jcHVfbWV0aG9kID0gZm9ybWF0X2NwdV9tZXRob2QoY3B1X21ldGhvZCk7CisgICAgcmVtb3RlX2NwdV9tZXRob2QgPSBmb3JtYXRfY3B1X21ldGhvZCh4dGlfdWRwX3JyX3Jlc3VsdC0+Y3B1X21ldGhvZCk7CisgICAgCisgICAgc3dpdGNoICh2ZXJib3NpdHkpIHsKKyAgICBjYXNlIDA6CisgICAgICBpZiAobG9jYWxfY3B1X3VzYWdlKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlsb2NhbF9zZXJ2aWNlX2RlbWFuZCwKKwkJbG9jYWxfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKwlmcHJpbnRmKHdoZXJlLAorCQljcHVfZm10XzAsCisJCXJlbW90ZV9zZXJ2aWNlX2RlbWFuZCwKKwkJcmVtb3RlX2NwdV9tZXRob2QpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIGlmIChwcmludF9oZWFkZXJzKSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X3RpdGxlLAorCQlsb2NhbF9jcHVfbWV0aG9kLAorCQlyZW1vdGVfY3B1X21ldGhvZCk7CisgICAgICB9CisgICAgCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIGNwdV9mbXRfMV9saW5lXzEsCQkvKiB0aGUgZm9ybWF0IHN0cmluZyAqLworCSAgICAgIGxzc19zaXplLAkJLyogbG9jYWwgc2VuZGJ1ZiBzaXplICovCisJICAgICAgbHNyX3NpemUsCisJICAgICAgcmVxX3NpemUsCQkvKiBob3cgbGFyZ2Ugd2VyZSB0aGUgcmVxdWVzdHMgKi8KKwkgICAgICByc3Bfc2l6ZSwJCS8qIGd1ZXNzICovCisJICAgICAgZWxhcHNlZF90aW1lLAkJLyogaG93IGxvbmcgd2FzIHRoZSB0ZXN0ICovCisJICAgICAgbnVtbWVzc2FnZXMvZWxhcHNlZF90aW1lLAorCSAgICAgIGxvY2FsX2NwdV91dGlsaXphdGlvbiwJLyogbG9jYWwgY3B1ICovCisJICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiwJLyogcmVtb3RlIGNwdSAqLworCSAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kLAkvKiBsb2NhbCBzZXJ2aWNlIGRlbWFuZCAqLworCSAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCk7CS8qIHJlbW90ZSBzZXJ2aWNlIGRlbWFuZCAqLworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLAorCSAgICAgIHJzcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIGRpZCBub3Qgd2lzaCB0byBtZWFzdXJlIHNlcnZpY2UgZGVtYW5kLiAqLworICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8wLAorCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgaWYgKHByaW50X2hlYWRlcnMpIHsKKwlmcHJpbnRmKHdoZXJlLHRwdXRfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgICAgfQorICAgIAorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMSwJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwKKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlc3BvbnNlcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICAKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBmZmx1c2god2hlcmUpOworCisgIC8qIGl0IHdvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHNvbWUgb2YgdGhlICovCisgIC8qIG90aGVyIHBhcmFtZXRlcnMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBmb3IgdGhpcyB0ZXN0LCBidXQgYXQgdGhlICovCisgIC8qIG1vbWVudCwgSSBkbyBub3Qgd2lzaCB0byBmaWd1cmUtb3V0IGFsbCB0aGUgIGZvcm1hdHRpbmcsIHNvIEkgd2lsbCAqLworICAvKiBqdXN0IHB1dCB0aGlzIGNvbW1lbnQgaGVyZSB0byBoZWxwIHJlbWluZCBtZSB0aGF0IGl0IGlzIHNvbWV0aGluZyAqLworICAvKiB0aGF0IHNob3VsZCBiZSBkb25lIGF0IGEgbGF0ZXIgdGltZS4gKi8KKyAgCisgIC8qIGhvdyB0byBoYW5kbGUgdGhlIHZlcmJvc2UgaW5mb3JtYXRpb24gaW4gdGhlIHByZXNlbmNlIG9mICovCisgIC8qIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGlzIHlldCB0byBiZSBkZXRlcm1pbmVkLi4uIHJhaiAxMS85NCAqLworCisgIGlmICh2ZXJib3NpdHkgPiAxKSB7CisgICAgLyogVGhlIHVzZXIgd2FudGVkIHRvIGtub3cgaXQgYWxsLCBzbyB3ZSB3aWxsIGdpdmUgaXQgdG8gaGltLiAqLworICAgIC8qIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmNsdWRlIGFzIG11Y2ggYXMgd2UgY2FuIGZpbmQgYWJvdXQgKi8KKyAgICAvKiBVRFAgc3RhdGlzdGljcywgdGhlIGFsaWdubWVudHMgb2YgdGhlIHNlbmRzIGFuZCByZWNlaXZlcyAqLworICAgIC8qIGFuZCBhbGwgdGhhdCBzb3J0IG9mIHJvdC4uLiAqLworICAgIAorI2lmZGVmIFdBTlRfSElTVE9HUkFNCisgICAgZnByaW50Zih3aGVyZSwiXG5IaXN0b2dyYW0gb2YgcmVxdWVzdC9yZXBvbnNlIHRpbWVzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBISVNUX3JlcG9ydCh0aW1lX2hpc3QpOworI2VuZGlmIC8qIFdBTlRfSElTVE9HUkFNICovCisgIH0KK30KKwwKKyAvKiB0aGlzIHJvdXRpbmUgaW1wbGVtZW50cyB0aGUgcmVjZWl2ZSBzaWRlIChuZXRzZXJ2ZXIpIG9mIGEgWFRJX1VEUF9SUiAqLworIC8qIHRlc3QuICovCit2b2lkIAorICByZWN2X3h0aV91ZHBfcnIoKQoreworICAKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworCisgIHN0cnVjdCB0X2JpbmQgYmluZF9yZXEsIGJpbmRfcmVzcDsKKyAgc3RydWN0IHRfdW5pdGRhdGEgc2VuZF91bml0ZGF0YTsKKyAgc3RydWN0IHRfdW5pdGRhdGEgcmVjdl91bml0ZGF0YTsKKyAgaW50CSAgICAgICAgICAgIGZsYWdzID0gMDsKKworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbXlhZGRyX2luLCBwZWVyYWRkcl9pbjsKKyAgU09DS0VUIHNfZGF0YTsKKyAgaW50IAlhZGRybGVuOworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgCisgIHN0cnVjdAl4dGlfdWRwX3JyX3JlcXVlc3Rfc3RydWN0CSp4dGlfdWRwX3JyX3JlcXVlc3Q7CisgIHN0cnVjdAl4dGlfdWRwX3JyX3Jlc3BvbnNlX3N0cnVjdAkqeHRpX3VkcF9ycl9yZXNwb25zZTsKKyAgc3RydWN0CXh0aV91ZHBfcnJfcmVzdWx0c19zdHJ1Y3QJKnh0aV91ZHBfcnJfcmVzdWx0czsKKyAgCisgIAorICAvKiBhIGxpdHRsZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbiAqLworICBtZW1zZXQgKCZteWFkZHJfaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgbXlhZGRyX2luLnNpbl9mYW1pbHkgICAgICA9IEFGX0lORVQ7CisgIG15YWRkcl9pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICBteWFkZHJfaW4uc2luX3BvcnQgICAgICAgID0gMDsKKyAgbWVtc2V0ICgmcGVlcmFkZHJfaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKworICAvKiBhbmQgc29tZSBub3Qgc28gcGFyYW5vaWQgOikgKi8KKyAgeHRpX3VkcF9ycl9yZXF1ZXN0ICA9IAorICAgIChzdHJ1Y3QgeHRpX3VkcF9ycl9yZXF1ZXN0X3N0cnVjdCAqKW5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgeHRpX3VkcF9ycl9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgeHRpX3VkcF9ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdWRwX3JyX3Jlc3VsdHMgID0gCisgICAgKHN0cnVjdCB4dGlfdWRwX3JyX3Jlc3VsdHNfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsIm5ldHNlcnZlcjogcmVjdl94dGlfdWRwX3JyOiBlbnRlcmVkLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBXZSB3YW50IHRvIHNldC11cCB0aGUgbGlzdGVuIHNvY2tldCB3aXRoIGFsbCB0aGUgZGVzaXJlZCAqLworICAvKiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGxldCB0aGUgaW5pdGlhdG9yIGtub3cgdGhhdCBhbGwgaXMgcmVhZHkuIElmICovCisgIC8qIHNvY2tldCBzaXplIGRlZmF1bHRzIGFyZSB0byBiZSB1c2VkLCB0aGVuIHRoZSBpbml0aWF0b3Igd2lsbCBoYXZlICovCisgIC8qIHNlbnQgdXMgMCdzLiBJZiB0aGUgc29ja2V0IHNpemVzIGNhbm5vdCBiZSBjaGFuZ2VkLCB0aGVuIHdlIHdpbGwgKi8KKyAgLyogc2VuZC1iYWNrIHdoYXQgdGhleSBhcmUuIElmIHRoYXQgaW5mb3JtYXRpb24gY2Fubm90IGJlIGRldGVybWluZWQsICovCisgIC8qIHRoZW4gd2Ugc2VuZC1iYWNrIC0xJ3MgZm9yIHRoZSBzaXplcy4gSWYgdGhpbmdzIGdvIHdyb25nIGZvciBhbnkgKi8KKyAgLyogcmVhc29uLCB3ZSB3aWxsIGRyb3AgYmFjayB0ZW4geWFyZHMgYW5kIHB1bnQuICovCisgIAorICAvKiBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCB3ZSB3YW50IHRoZSByZW1vdGUgdG8ga25vdyBhYm91dCBpdC4gSXQgKi8KKyAgLyogd291bGQgYmUgYmVzdCBpZiB0aGUgZXJyb3IgdGhhdCB0aGUgcmVtb3RlIHJlcG9ydHMgdG8gdGhlIHVzZXIgaXMgKi8KKyAgLyogdGhlIGFjdHVhbCBlcnJvciB3ZSBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gc29tZSBib2d1cyB1bmV4cGVjdGVkICovCisgIC8qIHJlc3BvbnNlIHR5cGUgbWVzc2FnZS4gKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3VkcF9ycjogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBYVElfVURQX1JSX1JFU1BPTlNFOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdWRwX3JyOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBhbHRlciB0aGUgbWVzc2FnZV9wdHIgdmFyaWFibGVzIHRvIGJlIGF0IHRoZSBkZXNpcmVkICovCisgIC8qIGFsaWdubWVudHMgd2l0aCB0aGUgZGVzaXJlZCBvZmZzZXRzLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdWRwX3JyOiByZXF1ZXN0ZWQgcmVjdiBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICB4dGlfdWRwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCSAgICB4dGlfdWRwX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV91ZHBfcnI6IHJlcXVlc3RlZCBzZW5kIGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJICAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICBpZiAoc2VuZF93aWR0aCA9PSAwKSBzZW5kX3dpZHRoID0gMTsKKyAgaWYgKHJlY3Zfd2lkdGggPT0gMCkgcmVjdl93aWR0aCA9IDE7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICB4dGlfdWRwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJCQkgICB4dGlfdWRwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgeHRpX3VkcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgIHh0aV91ZHBfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJCQkJICAgeHRpX3VkcF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdWRwX3JyOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogY3JlYXRlX3h0aV9lbmRwb2ludCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZSA9IHh0aV91ZHBfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemUgPSB4dGlfdWRwX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19yY3Zhdm9pZCA9IHh0aV91ZHBfcnJfcmVxdWVzdC0+c29fcmN2YXZvaWQ7CisgIGxvY19zbmRhdm9pZCA9IHh0aV91ZHBfcnJfcmVxdWVzdC0+c29fc25kYXZvaWQ7CisKKyNpZmRlZiBfX2FscGhhCisgIAorICAvKiBvayAtIGV2ZW4gb24gYSBERUMgYm94LCBzdHJpbmdzIGFyZSBzdHJpbmdzLiBJIGRpbid0IHJlYWxseSB3YW50ICovCisgIC8qIHRvIG50b2hsIHRoZSB3b3JkcyBvZiBhIHN0cmluZy4gc2luY2UgSSBkb24ndCB3YW50IHRvIHRlYWNoIHRoZSAqLworICAvKiBzZW5kXyBhbmQgcmVjdl8gX3JlcXVlc3QgYW5kIF9yZXNwb25zZSByb3V0aW5lcyBhYm91dCB0aGUgdHlwZXMsICovCisgIC8qIEkgd2lsbCBwdXQgImFudGktbnRvaGwiIGNhbGxzIGhlcmUuIEkgaW1hZ2luZSB0aGF0IHRoZSAicHVyZSIgKi8KKyAgLyogc29sdXRpb24gd291bGQgYmUgdG8gdXNlIFhEUiwgYnV0IEkgYW0gc3RpbGwgbGVhcnkgb2YgYmVpbmcgYWJsZSAqLworICAvKiB0byBmaW5kIFhEUiBsaWJzIG9uIGFsbCBwbGF0Zm9ybXMgSSB3YW50IHJ1bm5pbmcgbmV0cGVyZi4gcmFqICovCisgIHsKKyAgICBpbnQgKmNoYXJ3b3JkOworICAgIGludCAqaW5pdHdvcmQ7CisgICAgaW50ICpsYXN0d29yZDsKKyAgICAKKyAgICBpbml0d29yZCA9IChpbnQgKikgeHRpX3VkcF9ycl9yZXF1ZXN0LT54dGlfZGV2aWNlOworICAgIGxhc3R3b3JkID0gaW5pdHdvcmQgKyAoKHh0aV91ZHBfcnJfcmVxdWVzdC0+ZGV2X25hbWVfbGVuICsgMykgLyA0KTsKKyAgICAKKyAgICBmb3IgKGNoYXJ3b3JkID0gaW5pdHdvcmQ7CisJIGNoYXJ3b3JkIDwgbGFzdHdvcmQ7CisJIGNoYXJ3b3JkKyspIHsKKyAgICAgIAorICAgICAgKmNoYXJ3b3JkID0gaHRvbmwoKmNoYXJ3b3JkKTsKKyAgICB9CisgIH0KKyAgCisjZW5kaWYgLyogX19hbHBoYSAqLworICAgIAorICBzX2RhdGEgPSBjcmVhdGVfeHRpX2VuZHBvaW50KHh0aV91ZHBfcnJfcmVxdWVzdC0+eHRpX2RldmljZSk7CisgIAorICBpZiAoc19kYXRhID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3VkcF9ycjogZW5kcG9pbnQgY3JlYXRlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTGV0J3MgZ2V0IGFuIGFkZHJlc3MgYXNzaWduZWQgdG8gdGhpcyBzb2NrZXQgc28gd2UgY2FuIHRlbGwgdGhlICovCisgIC8qIGluaXRpYXRvciBob3cgdG8gcmVhY2ggdGhlIGRhdGEgc29ja2V0LiBUaGVyZSBtYXkgYmUgYSBkZXNpcmUgdG8gKi8KKyAgLyogbmFpbCB0aGlzIHNvY2tldCB0byBhIHNwZWNpZmljIElQIGFkZHJlc3MgaW4gYSBtdWx0aS1ob21lZCwgKi8KKyAgLyogbXVsdGktY29ubmVjdGlvbiBzaXR1YXRpb24sIGJ1dCBmb3Igbm93LCB3ZSdsbCBpZ25vcmUgdGhlIGlzc3VlICovCisgIC8qIGFuZCBjb25jZW50cmF0ZSBvbiBzaW5nbGUgY29ubmVjdGlvbiB0ZXN0aW5nLiAqLworCisgIGJpbmRfcmVxLmFkZHIubWF4bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIGJpbmRfcmVxLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIGJpbmRfcmVxLmFkZHIuYnVmICAgID0gKGNoYXIgKikmbXlhZGRyX2luOworICBiaW5kX3JlcS5xbGVuICAgICAgICA9IDE7CisKKyAgYmluZF9yZXNwLmFkZHIubWF4bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIGJpbmRfcmVzcC5hZGRyLmxlbiAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBiaW5kX3Jlc3AuYWRkci5idWYgICAgPSAoY2hhciAqKSZteWFkZHJfaW47CisgIGJpbmRfcmVzcC5xbGVuICAgICAgICA9IDE7CisKKyAgaWYgKHRfYmluZChzX2RhdGEsCisJICAgICAmYmluZF9yZXEsCisJICAgICAmYmluZF9yZXNwKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgInJlY3ZfeHRpX3VkcF9ycjogdF9iaW5kIGZhaWxlZCwgdF9lcnJubyAlZCBlcnJubyAlZFxuIiwKKwkgICAgICB0X2Vycm5vLAorCSAgICAgIGVycm5vKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorCisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSB0X2Vycm5vOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfeHRpX3VkcF9ycjogZW5kcG9pbnQgYm91bmQgdG8gcG9ydCAlZC4uLlxuIiwKKwkgICAgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KSk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorCisgIHh0aV91ZHBfcnJfcmVzcG9uc2UtPnRlc3RfbGVuZ3RoID0gCisgICAgeHRpX3VkcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aDsKKworICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHh0aV91ZHBfcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIgPSAoaW50KSBudG9ocyhteWFkZHJfaW4uc2luX3BvcnQpOworICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyAgID0gMDsKKyAgCisgIGZwcmludGYod2hlcmUsInJlY3YgcG9ydCBudW1iZXIgJWRcbiIsbXlhZGRyX2luLnNpbl9wb3J0KTsKKyAgZmZsdXNoKHdoZXJlKTsKKyAgCisgIC8qIEJ1dCB3YWl0LCB0aGVyZSdzIG1vcmUuIElmIHRoZSBpbml0aWF0b3Igd2FudGVkIGNwdSBtZWFzdXJlbWVudHMsICovCisgIC8qIHRoZW4gd2UgbXVzdCBjYWxsIHRoZSBjYWxpYnJhdGUgcm91dGluZSwgd2hpY2ggd2lsbCByZXR1cm4gdGhlIG1heCAqLworICAvKiByYXRlIGJhY2sgdG8gdGhlIGluaXRpYXRvci4gSWYgdGhlIENQVSB3YXMgbm90IHRvIGJlIG1lYXN1cmVkLCBvciAqLworICAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBjYWxpYnJhdGlvbiwgd2Ugd2lsbCByZXR1cm4gYSAwLjAgdG8gKi8KKyAgLyogdGhlIGluaXRpYXRvci4gKi8KKyAgCisgIHh0aV91ZHBfcnJfcmVzcG9uc2UtPmNwdV9yYXRlICAgID0gMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICB4dGlfdWRwX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDA7CisgIGlmICh4dGlfdWRwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgeHRpX3VkcF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHh0aV91ZHBfcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gCisgICAgICBjYWxpYnJhdGVfbG9jYWxfY3B1KHh0aV91ZHBfcnJfcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgICAKKyAgLyogYmVmb3JlIHdlIHNlbmQgdGhlIHJlc3BvbnNlIGJhY2sgdG8gdGhlIGluaXRpYXRvciwgcHVsbCBzb21lIG9mICovCisgIC8qIHRoZSBzb2NrZXQgcGFybXMgZnJvbSB0aGUgZ2xvYmFscyAqLworICB4dGlfdWRwX3JyX3Jlc3BvbnNlLT5zZW5kX2J1Zl9zaXplID0gbHNzX3NpemU7CisgIHh0aV91ZHBfcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgeHRpX3VkcF9ycl9yZXNwb25zZS0+c29fcmN2YXZvaWQgICA9IGxvY19yY3Zhdm9pZDsKKyAgeHRpX3VkcF9ycl9yZXNwb25zZS0+c29fc25kYXZvaWQgICA9IGxvY19zbmRhdm9pZDsKKyAKKyAgLyogc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGNhbGwgdF9yY3Z1ZGF0YSgpIGluc3RlYWQgb2YgdF9yY3YoKSB3ZSAqLworICAvKiBuZWVkIHRvIGluaXQgdGhlIHVuaXRkYXRhIHN0cnVjdHVyZSByYWogMy85NSAqLworCisgIG1lbXNldCAoJnJlY3ZfdW5pdGRhdGEsIDAsIHNpemVvZihyZWN2X3VuaXRkYXRhKSk7CisgIHJlY3ZfdW5pdGRhdGEuYWRkci5tYXhsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgcmVjdl91bml0ZGF0YS5hZGRyLmxlbiAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICByZWN2X3VuaXRkYXRhLmFkZHIuYnVmICAgID0gKGNoYXIgKikmcGVlcmFkZHJfaW47CisKKyAgcmVjdl91bml0ZGF0YS5vcHQubWF4bGVuID0gMDsKKyAgcmVjdl91bml0ZGF0YS5vcHQubGVuICAgID0gMDsKKyAgcmVjdl91bml0ZGF0YS5vcHQuYnVmICAgID0gTlVMTDsKKworICByZWN2X3VuaXRkYXRhLnVkYXRhLm1heGxlbiA9IHh0aV91ZHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplOworICByZWN2X3VuaXRkYXRhLnVkYXRhLmxlbiAgICA9IHh0aV91ZHBfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplOworICByZWN2X3VuaXRkYXRhLnVkYXRhLmJ1ZiAgICA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKworICAvKiBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gY2FsbCB0X3NuZHVkYXRhKCkgaW5zdGVhZCBvZiB0X3NuZCgpIHdlICovCisgIC8qIG5lZWQgdG8gaW5pdCB0aGUgdW5pdGRhdGEgc3RydWN0dXJlIHJhaiA4Lzk1ICovCisKKyAgbWVtc2V0ICgmc2VuZF91bml0ZGF0YSwgMCwgc2l6ZW9mKHNlbmRfdW5pdGRhdGEpKTsKKyAgc2VuZF91bml0ZGF0YS5hZGRyLm1heGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBzZW5kX3VuaXRkYXRhLmFkZHIubGVuICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgIHNlbmRfdW5pdGRhdGEuYWRkci5idWYgICAgPSAoY2hhciAqKSZwZWVyYWRkcl9pbjsKKworICBzZW5kX3VuaXRkYXRhLm9wdC5tYXhsZW4gPSAwOworICBzZW5kX3VuaXRkYXRhLm9wdC5sZW4gICAgPSAwOworICBzZW5kX3VuaXRkYXRhLm9wdC5idWYgICAgPSBOVUxMOworCisgIHNlbmRfdW5pdGRhdGEudWRhdGEubWF4bGVuID0geHRpX3VkcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplOworICBzZW5kX3VuaXRkYXRhLnVkYXRhLmxlbiAgICA9IHh0aV91ZHBfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZTsKKyAgc2VuZF91bml0ZGF0YS51ZGF0YS5idWYgICAgPSBzZW5kX3JpbmctPmJ1ZmZlcl9wdHI7CisKKyAgc2VuZF9yZXNwb25zZSgpOworICAKKyAgCisgIC8qIE5vdyBpdCdzIHRpbWUgdG8gc3RhcnQgcmVjZWl2aW5nIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24uIFdlIHdpbGwgKi8KKyAgLyogZmlyc3QgZ3JhYiB0aGUgYXByb3ByaWF0ZSBjb3VudGVycyBhbmQgdGhlbiBzdGFydCBncmFiYmluZy4gKi8KKyAgCisgIGNwdV9zdGFydCh4dGlfdWRwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KTsKKyAgCisgIGlmICh4dGlfdWRwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHh0aV91ZHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKyBQQURfVElNRSk7CisgIH0KKyAgZWxzZSB7CisgICAgdGltZXNfdXAgPSAxOworICAgIHRyYW5zX3JlbWFpbmluZyA9IHh0aV91ZHBfcnJfcmVxdWVzdC0+dGVzdF9sZW5ndGggKiAtMTsKKyAgfQorICAKKyAgYWRkcmxlbiA9IHNpemVvZihwZWVyYWRkcl9pbik7CisgIGJ6ZXJvKChjaGFyICopJnBlZXJhZGRyX2luLCBhZGRybGVuKTsKKyAgCisgIHRyYW5zX3JlY2VpdmVkID0gMDsKKworICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgCisgICAgLyogcmVjZWl2ZSB0aGUgcmVxdWVzdCBmcm9tIHRoZSBvdGhlciBzaWRlICovCisgICAgaWYgKHRfcmN2dWRhdGEoc19kYXRhLAorCQkgICAmcmVjdl91bml0ZGF0YSwKKwkJICAgJmZsYWdzKSAhPSAwKSB7CisgICAgICBpZiAoZXJybm8gPT0gVE5PREFUQSkgeworCWNvbnRpbnVlOworICAgICAgfQorICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJLyogd2UgbXVzdCBoYXZlIGhpdCB0aGUgZW5kIG9mIHRlc3QgdGltZS4gKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsCisJCSJyZWN2X3h0aV91ZHBfcnI6IHRfcmN2dWRhdGEgZmFpbGVkLCB0X2Vycm5vICVkIGVycm5vICVkXG4iLAorCQl0X2Vycm5vLAorCQllcnJubyk7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0KKyAgICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gdF9lcnJubzsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHJlY3ZfcmluZyA9IHJlY3ZfcmluZy0+bmV4dDsKKyAgICByZWN2X3VuaXRkYXRhLnVkYXRhLmJ1ZiA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKworICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSAqLworICAgIGlmICh0X3NuZHVkYXRhKHNfZGF0YSwKKwkJICAgJnNlbmRfdW5pdGRhdGEpICE9IDApIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHdlIGhhdmUgaGl0IGVuZCBvZiB0ZXN0IHRpbWUuICovCisJYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoZGVidWcpIHsKKwlmcHJpbnRmKHdoZXJlLAorCQkicmVjdl94dGlfdWRwX3JyOiB0X3NuZHVkYXRhIGZhaWxlZCwgdF9lcnJubyAlZCBlcnJubyAlZFxuIiwKKwkJdF9lcnJubywKKwkJZXJybm8pOworCWZmbHVzaCh3aGVyZSk7CisgICAgICB9CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgICAgc2VuZF9yZXNwb25zZSgpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgc2VuZF9yaW5nID0gc2VuZF9yaW5nLT5uZXh0OworICAgIHNlbmRfdW5pdGRhdGEudWRhdGEuYnVmID0gc2VuZF9yaW5nLT5idWZmZXJfcHRyOworICAgIAorICAgIHRyYW5zX3JlY2VpdmVkKys7CisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAicmVjdl94dGlfdWRwX3JyOiBUcmFuc2FjdGlvbiAlZCBjb21wbGV0ZS5cbiIsCisJICAgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgCisgIH0KKyAgCisgIAorICAvKiBUaGUgbG9vcCBub3cgZXhpdHMgZHVlIHRvIHRpbWVvdXQgb3IgdHJhbnNhY3Rpb24gY291bnQgYmVpbmcgKi8KKyAgLyogcmVhY2hlZCAqLworICAKKyAgY3B1X3N0b3AoeHRpX3VkcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSwmZWxhcHNlZF90aW1lKTsKKyAgCisgIGlmICh0aW1lc191cCkgeworICAgIC8qIHdlIGVuZGVkIHRoZSB0ZXN0IGJ5IHRpbWUsIHdoaWNoIHdhcyBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyAgICAvKiBsb25nZXIgdGhhbiB3ZSB3YW50ZWQgdG8gcnVuLiBzbywgd2Ugd2FudCB0byBzdWJ0cmFjdCAqLworICAgIC8qIFBBRF9USU1FIGZyb20gdGhlIGVsYXBzZWRfdGltZS4gKi8KKyAgICBlbGFwc2VkX3RpbWUgLT0gUEFEX1RJTUU7CisgIH0KKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV91ZHBfcnI6IGdvdCAlZCB0cmFuc2FjdGlvbnNcbiIsCisJICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICB4dGlfdWRwX3JyX3Jlc3VsdHMtPmJ5dGVzX3JlY2VpdmVkID0gKHRyYW5zX3JlY2VpdmVkICogCisJCQkJICAgICh4dGlfdWRwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSArIAorCQkJCSAgICAgeHRpX3VkcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplKSk7CisgIHh0aV91ZHBfcnJfcmVzdWx0cy0+dHJhbnNfcmVjZWl2ZWQgPSB0cmFuc19yZWNlaXZlZDsKKyAgeHRpX3VkcF9ycl9yZXN1bHRzLT5lbGFwc2VkX3RpbWUJID0gZWxhcHNlZF90aW1lOworICB4dGlfdWRwX3JyX3Jlc3VsdHMtPmNwdV9tZXRob2QgICAgID0gY3B1X21ldGhvZDsKKyAgaWYgKHh0aV91ZHBfcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB4dGlfdWRwX3JyX3Jlc3VsdHMtPmNwdV91dGlsCT0gY2FsY19jcHVfdXRpbChlbGFwc2VkX3RpbWUpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdWRwX3JyOiB0ZXN0IGNvbXBsZXRlLCBzZW5kaW5nIHJlc3VsdHMuXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBzZW5kX3Jlc3BvbnNlKCk7CisKKyAgLyogd2UgYXJlIGRvbmUgd2l0aCB0aGUgc29ja2V0IG5vdyAqLworICBjbG9zZShzX2RhdGEpOworCit9CisMCisgLyogdGhpcyByb3V0aW5lIGltcGxlbWVudHMgdGhlIHJlY2VpdmUgKG5ldHNlcnZlcikgc2lkZSBvZiBhIFhUSV9UQ1BfUlIgKi8KKyAvKiB0ZXN0ICovCit2b2lkIAorcmVjdl94dGlfdGNwX3JyKCkKK3sKKyAgCisgIHN0cnVjdCByaW5nX2VsdCAqc2VuZF9yaW5nOworICBzdHJ1Y3QgcmluZ19lbHQgKnJlY3ZfcmluZzsKKworICBzdHJ1Y3Qgc29ja2FkZHJfaW4gIG15YWRkcl9pbiwgIHBlZXJhZGRyX2luOworICBzdHJ1Y3QgdF9iaW5kIGJpbmRfcmVxLCBiaW5kX3Jlc3A7CisgIHN0cnVjdCB0X2NhbGwgY2FsbF9yZXE7CisKKyAgU09DS0VUIHNfbGlzdGVuLHNfZGF0YTsKKyAgaW50IAlhZGRybGVuOworICBjaGFyCSp0ZW1wX21lc3NhZ2VfcHRyOworICBpbnQJdHJhbnNfcmVjZWl2ZWQ7CisgIGludAl0cmFuc19yZW1haW5pbmc7CisgIGludAlieXRlc19zZW50OworICBpbnQJcmVxdWVzdF9ieXRlc19yZWN2ZDsKKyAgaW50CXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nOworICBpbnQJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJZWxhcHNlZF90aW1lOworICAKKyAgc3RydWN0CXh0aV90Y3BfcnJfcmVxdWVzdF9zdHJ1Y3QJKnh0aV90Y3BfcnJfcmVxdWVzdDsKKyAgc3RydWN0CXh0aV90Y3BfcnJfcmVzcG9uc2Vfc3RydWN0CSp4dGlfdGNwX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJeHRpX3RjcF9ycl9yZXN1bHRzX3N0cnVjdAkqeHRpX3RjcF9ycl9yZXN1bHRzOworICAKKyAgeHRpX3RjcF9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCB4dGlfdGNwX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX3JyX3Jlc3BvbnNlID0KKyAgICAoc3RydWN0IHh0aV90Y3BfcnJfcmVzcG9uc2Vfc3RydWN0ICopbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnRlc3Rfc3BlY2lmaWNfZGF0YTsKKyAgeHRpX3RjcF9ycl9yZXN1bHRzID0KKyAgICAoc3RydWN0IHh0aV90Y3BfcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X3h0aV90Y3BfcnI6IGVudGVyZWQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIFdlIHdhbnQgdG8gc2V0LXVwIHRoZSBsaXN0ZW4gc29ja2V0IHdpdGggYWxsIHRoZSBkZXNpcmVkICovCisgIC8qIHBhcmFtZXRlcnMgYW5kIHRoZW4gbGV0IHRoZSBpbml0aWF0b3Iga25vdyB0aGF0IGFsbCBpcyByZWFkeS4gSWYgKi8KKyAgLyogc29ja2V0IHNpemUgZGVmYXVsdHMgYXJlIHRvIGJlIHVzZWQsIHRoZW4gdGhlIGluaXRpYXRvciB3aWxsIGhhdmUgKi8KKyAgLyogc2VudCB1cyAwJ3MuIElmIHRoZSBzb2NrZXQgc2l6ZXMgY2Fubm90IGJlIGNoYW5nZWQsIHRoZW4gd2Ugd2lsbCAqLworICAvKiBzZW5kLWJhY2sgd2hhdCB0aGV5IGFyZS4gSWYgdGhhdCBpbmZvcm1hdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZCwgKi8KKyAgLyogdGhlbiB3ZSBzZW5kLWJhY2sgLTEncyBmb3IgdGhlIHNpemVzLiBJZiB0aGluZ3MgZ28gd3JvbmcgZm9yIGFueSAqLworICAvKiByZWFzb24sIHdlIHdpbGwgZHJvcCBiYWNrIHRlbiB5YXJkcyBhbmQgcHVudC4gKi8KKyAgCisgIC8qIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBrbm93IGFib3V0IGl0LiBJdCAqLworICAvKiB3b3VsZCBiZSBiZXN0IGlmIHRoZSBlcnJvciB0aGF0IHRoZSByZW1vdGUgcmVwb3J0cyB0byB0aGUgdXNlciBpcyAqLworICAvKiB0aGUgYWN0dWFsIGVycm9yIHdlIGVuY291bnRlcmVkLCByYXRoZXIgdGhhbiBzb21lIGJvZ3VzIHVuZXhwZWN0ZWQgKi8KKyAgLyogcmVzcG9uc2UgdHlwZSBtZXNzYWdlLiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdGNwX3JyOiBzZXR0aW5nIHRoZSByZXNwb25zZSB0eXBlLi4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQucmVzcG9uc2VfdHlwZSA9IFhUSV9UQ1BfUlJfUkVTUE9OU0U7CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV90Y3BfcnI6IHRoZSByZXNwb25zZSB0eXBlIGlzIHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogYWxsb2NhdGUgdGhlIHJlY3YgYW5kIHNlbmQgcmluZ3Mgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudHMgKi8KKyAgLyogYW5kIG9mZnNldHMuIHJhaiA3Lzk0ICovCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3RjcF9ycjogcmVxdWVzdGVkIHJlY3YgYWxpZ25tZW50IG9mICVkIG9mZnNldCAlZFxuIiwKKwkgICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkgICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdGNwX3JyOiByZXF1ZXN0ZWQgc2VuZCBhbGlnbm1lbnQgb2YgJWQgb2Zmc2V0ICVkXG4iLAorCSAgICB4dGlfdGNwX3JyX3JlcXVlc3QtPnNlbmRfYWxpZ25tZW50LAorCSAgICB4dGlfdGNwX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogYXQgc29tZSBwb2ludCwgdGhlc2UgbmVlZCB0byBjb21lIHRvIHVzIGZyb20gdGhlIHJlbW90ZSBzeXN0ZW0gKi8KKyAgaWYgKHNlbmRfd2lkdGggPT0gMCkgc2VuZF93aWR0aCA9IDE7CisgIGlmIChyZWN2X3dpZHRoID09IDApIHJlY3Zfd2lkdGggPSAxOworCisgIHNlbmRfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHNlbmRfd2lkdGgsCisJCQkJICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJCSAgIHh0aV90Y3BfcnJfcmVxdWVzdC0+c2VuZF9hbGlnbm1lbnQsCisJCQkJICAgeHRpX3RjcF9ycl9yZXF1ZXN0LT5zZW5kX29mZnNldCk7CisKKyAgcmVjdl9yaW5nID0gYWxsb2NhdGVfYnVmZmVyX3JpbmcocmVjdl93aWR0aCwKKwkJCQkgICB4dGlfdGNwX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSwKKwkJCQkgICB4dGlfdGNwX3JyX3JlcXVlc3QtPnJlY3ZfYWxpZ25tZW50LAorCQkJCSAgIHh0aV90Y3BfcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQpOworCisgIAorICAvKiBMZXQncyBjbGVhci1vdXQgb3VyIHNvY2thZGRyIGZvciB0aGUgc2FrZSBvZiBjbGVhbmxpbmVzLiBUaGVuIHdlICovCisgIC8qIGNhbiBwdXQgaW4gT1VSIHZhbHVlcyAhLSkgQXQgc29tZSBwb2ludCwgd2UgbWF5IHdhbnQgdG8gbmFpbCB0aGlzICovCisgIC8qIHNvY2tldCB0byBhIHBhcnRpY3VsYXIgbmV0d29yay1sZXZlbCBhZGRyZXNzLCBidXQgZm9yIG5vdywgKi8KKyAgLyogSU5BRERSX0FOWSBzaG91bGQgYmUganVzdCBmaW5lLiAqLworICAKKyAgYnplcm8oKGNoYXIgKikmbXlhZGRyX2luLAorCXNpemVvZihteWFkZHJfaW4pKTsKKyAgbXlhZGRyX2luLnNpbl9mYW1pbHkgICAgICA9IEFGX0lORVQ7CisgIG15YWRkcl9pbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworICBteWFkZHJfaW4uc2luX3BvcnQgICAgICAgID0gMDsKKyAgCisgIC8qIEdyYWIgYSBzb2NrZXQgdG8gbGlzdGVuIG9uLCBhbmQgdGhlbiBsaXN0ZW4gb24gaXQuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV90Y3BfcnI6IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogY3JlYXRlX3h0aV9lbmRwb2ludCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZSA9IHh0aV90Y3BfcnJfcmVxdWVzdC0+c2VuZF9idWZfc2l6ZTsKKyAgbHNyX3NpemUgPSB4dGlfdGNwX3JyX3JlcXVlc3QtPnJlY3ZfYnVmX3NpemU7CisgIGxvY19ub2RlbGF5ID0geHRpX3RjcF9ycl9yZXF1ZXN0LT5ub19kZWxheTsKKyAgbG9jX3JjdmF2b2lkID0geHRpX3RjcF9ycl9yZXF1ZXN0LT5zb19yY3Zhdm9pZDsKKyAgbG9jX3NuZGF2b2lkID0geHRpX3RjcF9ycl9yZXF1ZXN0LT5zb19zbmRhdm9pZDsKKyAgCisjaWZkZWYgX19hbHBoYQorICAKKyAgLyogb2sgLSBldmVuIG9uIGEgREVDIGJveCwgc3RyaW5ncyBhcmUgc3RyaW5ncy4gSSBkaW4ndCByZWFsbHkgd2FudCAqLworICAvKiB0byBudG9obCB0aGUgd29yZHMgb2YgYSBzdHJpbmcuIHNpbmNlIEkgZG9uJ3Qgd2FudCB0byB0ZWFjaCB0aGUgKi8KKyAgLyogc2VuZF8gYW5kIHJlY3ZfIF9yZXF1ZXN0IGFuZCBfcmVzcG9uc2Ugcm91dGluZXMgYWJvdXQgdGhlIHR5cGVzLCAqLworICAvKiBJIHdpbGwgcHV0ICJhbnRpLW50b2hsIiBjYWxscyBoZXJlLiBJIGltYWdpbmUgdGhhdCB0aGUgInB1cmUiICovCisgIC8qIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHVzZSBYRFIsIGJ1dCBJIGFtIHN0aWxsIGxlYXJ5IG9mIGJlaW5nIGFibGUgKi8KKyAgLyogdG8gZmluZCBYRFIgbGlicyBvbiBhbGwgcGxhdGZvcm1zIEkgd2FudCBydW5uaW5nIG5ldHBlcmYuIHJhaiAqLworICB7CisgICAgaW50ICpjaGFyd29yZDsKKyAgICBpbnQgKmluaXR3b3JkOworICAgIGludCAqbGFzdHdvcmQ7CisgICAgCisgICAgaW5pdHdvcmQgPSAoaW50ICopIHh0aV90Y3BfcnJfcmVxdWVzdC0+eHRpX2RldmljZTsKKyAgICBsYXN0d29yZCA9IGluaXR3b3JkICsgKCh4dGlfdGNwX3JyX3JlcXVlc3QtPmRldl9uYW1lX2xlbiArIDMpIC8gNCk7CisgICAgCisgICAgZm9yIChjaGFyd29yZCA9IGluaXR3b3JkOworCSBjaGFyd29yZCA8IGxhc3R3b3JkOworCSBjaGFyd29yZCsrKSB7CisgICAgICAKKyAgICAgICpjaGFyd29yZCA9IGh0b25sKCpjaGFyd29yZCk7CisgICAgfQorICB9CisgIAorI2VuZGlmIC8qIF9fYWxwaGEgKi8KKworICBzX2xpc3RlbiA9IGNyZWF0ZV94dGlfZW5kcG9pbnQoeHRpX3RjcF9ycl9yZXF1ZXN0LT54dGlfZGV2aWNlKTsKKyAgCisgIGlmIChzX2xpc3RlbiA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIExldCdzIGdldCBhbiBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoaXMgc29ja2V0IHNvIHdlIGNhbiB0ZWxsIHRoZSAqLworICAvKiBpbml0aWF0b3IgaG93IHRvIHJlYWNoIHRoZSBkYXRhIHNvY2tldC4gVGhlcmUgbWF5IGJlIGEgZGVzaXJlIHRvICovCisgIC8qIG5haWwgdGhpcyBzb2NrZXQgdG8gYSBzcGVjaWZpYyBJUCBhZGRyZXNzIGluIGEgbXVsdGktaG9tZWQsICovCisgIC8qIG11bHRpLWNvbm5lY3Rpb24gc2l0dWF0aW9uLCBidXQgZm9yIG5vdywgd2UnbGwgaWdub3JlIHRoZSBpc3N1ZSAqLworICAvKiBhbmQgY29uY2VudHJhdGUgb24gc2luZ2xlIGNvbm5lY3Rpb24gdGVzdGluZy4gKi8KKworICBiaW5kX3JlcS5hZGRyLm1heGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBiaW5kX3JlcS5hZGRyLmxlbiAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBiaW5kX3JlcS5hZGRyLmJ1ZiAgICA9IChjaGFyICopJm15YWRkcl9pbjsKKyAgYmluZF9yZXEucWxlbiAgICAgICAgPSAxOworCisgIGJpbmRfcmVzcC5hZGRyLm1heGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBiaW5kX3Jlc3AuYWRkci5sZW4gICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgYmluZF9yZXNwLmFkZHIuYnVmICAgID0gKGNoYXIgKikmbXlhZGRyX2luOworICBiaW5kX3Jlc3AucWxlbiAgICAgICAgPSAxOworCisgIGlmICh0X2JpbmQoc19saXN0ZW4sCisJICAgICAmYmluZF9yZXEsCisJICAgICAmYmluZF9yZXNwKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IHRfZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAKKyAgICBleGl0KDEpOworICB9CisKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfeHRpX3RjcF9ycjogdF9iaW5kIGNvbXBsZXRlIHBvcnQgJWRcbiIsCisJICAgIG50b2hzKG15YWRkcl9pbi5zaW5fcG9ydCkpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIE5vdyBteWFkZHJfaW4gY29udGFpbnMgdGhlIHBvcnQgYW5kIHRoZSBpbnRlcm5ldCBhZGRyZXNzIHRoaXMgaXMgKi8KKyAgLyogcmV0dXJuZWQgdG8gdGhlIHNlbmRlciBhbHNvIGltcGxpY2l0bHkgdGVsbGluZyB0aGUgc2VuZGVyIHRoYXQgdGhlICovCisgIC8qIHNvY2tldCBidWZmZXIgc2l6aW5nIGhhcyBiZWVuIGRvbmUuICovCisgIAorICB4dGlfdGNwX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyID0gKGludCkgbnRvaHMobXlhZGRyX2luLnNpbl9wb3J0KTsKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICB4dGlfdGNwX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IDAuMDsgCS8qIGFzc3VtZSBubyBjcHUgKi8KKyAgeHRpX3RjcF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAwOworCisgIGlmICh4dGlfdGNwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgeHRpX3RjcF9ycl9yZXNwb25zZS0+bWVhc3VyZV9jcHUgPSAxOworICAgIHh0aV90Y3BfcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdSh4dGlfdGNwX3JyX3JlcXVlc3QtPmNwdV9yYXRlKTsKKyAgfQorICAKKyAgCisgIC8qIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IsIHB1bGwgc29tZSBvZiAqLworICAvKiB0aGUgc29ja2V0IHBhcm1zIGZyb20gdGhlIGdsb2JhbHMgKi8KKyAgeHRpX3RjcF9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICB4dGlfdGNwX3JyX3Jlc3BvbnNlLT5yZWN2X2J1Zl9zaXplID0gbHNyX3NpemU7CisgIHh0aV90Y3BfcnJfcmVzcG9uc2UtPm5vX2RlbGF5ID0gbG9jX25vZGVsYXk7CisgIHh0aV90Y3BfcnJfcmVzcG9uc2UtPnNvX3JjdmF2b2lkID0gbG9jX3JjdmF2b2lkOworICB4dGlfdGNwX3JyX3Jlc3BvbnNlLT5zb19zbmRhdm9pZCA9IGxvY19zbmRhdm9pZDsKKyAgeHRpX3RjcF9ycl9yZXNwb25zZS0+dGVzdF9sZW5ndGggPSB4dGlfdGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoOworICBzZW5kX3Jlc3BvbnNlKCk7CisgIAorICAvKiBOb3csIGxldCdzIHNldC11cCB0aGUgc29ja2V0IHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbnMuIGZvciB4dGksICovCisgIC8qIHRoZSB0X2xpc3RlbiBjYWxsIGlzIGJsb2NraW5nIGJ5IGRlZmF1bHQgLSB0aGlzIGlzIGRpZmZlcmVudCAqLworICAvKiBzZW1hbnRpY3MgZnJvbSBCU0QgLSBwcm9iYWJseSBoYXMgdG8gZG8gd2l0aCBiZWluZyBhYmxlIHRvIHJlamVjdCAqLworICAvKiBhIGNhbGwgYmVmb3JlIGFuIGFjY2VwdCAqLworICBjYWxsX3JlcS5hZGRyLm1heGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBjYWxsX3JlcS5hZGRyLmxlbiAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICBjYWxsX3JlcS5hZGRyLmJ1ZiAgICA9IChjaGFyICopJnBlZXJhZGRyX2luOworICBjYWxsX3JlcS5vcHQubWF4bGVuICA9IDA7CisgIGNhbGxfcmVxLm9wdC5sZW4gICAgID0gMDsKKyAgY2FsbF9yZXEub3B0LmJ1ZiAgICAgPSBOVUxMOworICBjYWxsX3JlcS51ZGF0YS5tYXhsZW49IDA7CisgIGNhbGxfcmVxLnVkYXRhLmxlbiAgID0gMDsKKyAgY2FsbF9yZXEudWRhdGEuYnVmICAgPSAwOworCisgIGlmICh0X2xpc3RlbihzX2xpc3RlbiwgJmNhbGxfcmVxKSA9PSAtMSkgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3BfcnI6IHRfbGlzdGVuOiBlcnJubyAlZCB0X2Vycm5vICVkXG4iLAorCSAgICBlcnJubywKKwkgICAgdF9lcnJubyk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IHRfZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdGNwX3JyOiB0X2xpc3RlbiBjb21wbGV0ZSB0X2xvb2sgMHglLjR4XG4iLAorCSAgICB0X2xvb2soc19saXN0ZW4pKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBub3cganVzdCBydWJiZXIgc3RhbXAgdGhlIHRoaW5nLiB3ZSB3YW50IHRvIHVzZSB0aGUgc2FtZSBmZD8gc28gKi8KKyAgLyogd2Ugd2lsbCBqdXN0IGVxdWF0ZSBzX2RhdGEgd2l0aCBzX2xpc3Rlbi4gdGhpcyBzZWVtcyBhIGxpdHRsZSAqLworICAvKiBob2tleSB0byBtZSwgYnV0IHRoZW4gSSdtIGEgQlNEIGJpZ2dvdCBzdGlsbC4gcmFqIDIvOTUgKi8KKyAgc19kYXRhID0gc19saXN0ZW47CisgIGlmICh0X2FjY2VwdChzX2xpc3RlbiwKKwkgICAgICAgc19kYXRhLAorCSAgICAgICAmY2FsbF9yZXEpID09IC0xKSB7CisgICAgZnByaW50Zih3aGVyZSwKKwkgICAgInJlY3ZfeHRpX3RjcF9ycjogdF9hY2NlcHQ6IGVycm5vICVkIHRfZXJybm8gJWRcbiIsCisJICAgIGVycm5vLAorCSAgICB0X2Vycm5vKTsKKyAgICBmZmx1c2god2hlcmUpOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBleGl0KDEpOworICB9CisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdGNwX3JyOiB0X2FjY2VwdCBjb21wbGV0ZSB0X2xvb2sgMHglLjR4IiwKKwkgICAgdF9sb29rKHNfZGF0YSkpOworICAgIGZwcmludGYod2hlcmUsCisJICAgICIgcmVtb3RlIGlzICVzIHBvcnQgJWRcbiIsCisJICAgIGluZXRfbnRvYSgqKHN0cnVjdCBpbl9hZGRyICopJnBlZXJhZGRyX2luLnNpbl9hZGRyKSwKKwkgICAgbnRvaHMocGVlcmFkZHJfaW4uc2luX3BvcnQpKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisgIAorICAvKiBOb3cgaXQncyB0aW1lIHRvIHN0YXJ0IHJlY2VpdmluZyBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLiBXZSB3aWxsICovCisgIC8qIGZpcnN0IGdyYWIgdGhlIGFwcm9wcmlhdGUgY291bnRlcnMgYW5kIHRoZW4gc3RhcnQgZ3JhYmJpbmcuICovCisgIAorICBjcHVfc3RhcnQoeHRpX3RjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSk7CisgIAorICBpZiAoeHRpX3RjcF9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCA+IDApIHsKKyAgICB0aW1lc191cCA9IDA7CisgICAgdHJhbnNfcmVtYWluaW5nID0gMDsKKyAgICBzdGFydF90aW1lcih4dGlfdGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICsgUEFEX1RJTUUpOworICB9CisgIGVsc2UgeworICAgIHRpbWVzX3VwID0gMTsKKyAgICB0cmFuc19yZW1haW5pbmcgPSB4dGlfdGNwX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICogLTE7CisgIH0KKworICB0cmFuc19yZWNlaXZlZCA9IDA7CisgIAorICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisgICAgdGVtcF9tZXNzYWdlX3B0ciA9IHJlY3ZfcmluZy0+YnVmZmVyX3B0cjsKKyAgICByZXF1ZXN0X2J5dGVzX3JlbWFpbmluZwk9IHh0aV90Y3BfcnJfcmVxdWVzdC0+cmVxdWVzdF9zaXplOworICAgIHdoaWxlKHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nID4gMCkgeworICAgICAgaWYoKHJlcXVlc3RfYnl0ZXNfcmVjdmQ9dF9yY3Yoc19kYXRhLAorCQkJCSAgICB0ZW1wX21lc3NhZ2VfcHRyLAorCQkJCSAgICByZXF1ZXN0X2J5dGVzX3JlbWFpbmluZywKKwkJCQkgICAgJnh0aV9mbGFncykpID09IFNPQ0tFVF9FUlJPUikgeworCWlmIChlcnJubyA9PSBFSU5UUikgeworCSAgLyogdGhlIHRpbWVyIHBvcHBlZCAqLworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKwlmcHJpbnRmKHdoZXJlLAorCQkicmVjdl94dGlfdGNwX3JyOiB0X3JjdjogZXJybm8gJWQgdF9lcnJubyAlZCBsZW4gJWQiLAorCQllcnJubywKKwkJdF9lcnJubywKKwkJcmVxdWVzdF9ieXRlc19yZWN2ZCk7CisJZnByaW50Zih3aGVyZSwKKwkJIiB0X2xvb2sgMHgleCIsCisJCXRfbG9vayhzX2RhdGEpKTsKKwlmZmx1c2god2hlcmUpOworCW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gdF9lcnJubzsKKwlzZW5kX3Jlc3BvbnNlKCk7CisJZXhpdCgxKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCXJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nIC09IHJlcXVlc3RfYnl0ZXNfcmVjdmQ7CisJdGVtcF9tZXNzYWdlX3B0ciAgKz0gcmVxdWVzdF9ieXRlc19yZWN2ZDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBiYXNlZCBvbiB0aW1lIC0gbGV0cyAqLworICAgICAgLyogYmFpbCBvdXQgb2YgaGVyZSBub3cuLi4gKi8KKyAgICAgIGlmIChkZWJ1ZykgeworCWZwcmludGYod2hlcmUsInlvNVxuIik7CisJZmZsdXNoKHdoZXJlKTsKKyAgICAgIH0JCQkJCQkKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICAvKiBOb3csIHNlbmQgdGhlIHJlc3BvbnNlIHRvIHRoZSByZW1vdGUgKi8KKyAgICBpZigoYnl0ZXNfc2VudD10X3NuZChzX2RhdGEsCisJCQkgc2VuZF9yaW5nLT5idWZmZXJfcHRyLAorCQkJIHh0aV90Y3BfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSwKKwkJCSAwKSkgPT0gLTEpIHsKKyAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworCS8qIHRoZSB0ZXN0IHRpbWVyIGhhcyBwb3BwZWQgKi8KKwl0aW1lZF9vdXQgPSAxOworCWlmIChkZWJ1ZykgeworCSAgZnByaW50Zih3aGVyZSwieW82XG4iKTsKKwkgIGZmbHVzaCh3aGVyZSk7CQkJCQkJCisJfQorCWJyZWFrOworICAgICAgfQorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAicmVjdl94dGlfdGNwX3JyOiB0X3JjdjogZXJybm8gJWQgdF9lcnJubyAlZCBsZW4gJWQiLAorCSAgICAgIGVycm5vLAorCSAgICAgIHRfZXJybm8sCisJICAgICAgYnl0ZXNfc2VudCk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICIgdF9sb29rIDB4JXgiLAorCSAgICAgIHRfbG9vayhzX2RhdGEpKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IHRfZXJybm87CisgICAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICAKKyAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisKKyAgICB0cmFuc19yZWNlaXZlZCsrOworICAgIGlmICh0cmFuc19yZW1haW5pbmcpIHsKKyAgICAgIHRyYW5zX3JlbWFpbmluZy0tOworICAgIH0KKyAgfQorICAKKyAgCisgIC8qIFRoZSBsb29wIG5vdyBleGl0cyBkdWUgdG8gdGltZW91dCBvciB0cmFuc2FjdGlvbiBjb3VudCBiZWluZyAqLworICAvKiByZWFjaGVkICovCisgIAorICBjcHVfc3RvcCh4dGlfdGNwX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1LCZlbGFwc2VkX3RpbWUpOworICAKKyAgc3RvcF90aW1lcigpOyAvKiB0aGlzIGlzIHByb2JhYmx5IHVubmVjZXNzYXJ5LCBidXQgaXQgc2hvdWxkbid0IGh1cnQgKi8KKworICBpZiAodGltZWRfb3V0KSB7CisgICAgLyogd2UgZW5kZWQgdGhlIHRlc3QgYnkgdGltZSwgd2hpY2ggd2FzIGF0IGxlYXN0IDIgc2Vjb25kcyAqLworICAgIC8qIGxvbmdlciB0aGFuIHdlIHdhbnRlZCB0byBydW4uIHNvLCB3ZSB3YW50IHRvIHN1YnRyYWN0ICovCisgICAgLyogUEFEX1RJTUUgZnJvbSB0aGUgZWxhcHNlZF90aW1lLiAqLworICAgIGVsYXBzZWRfdGltZSAtPSBQQURfVElNRTsKKyAgfQorCisgIC8qIHNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHNlbmRlcgkJCSovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdGNwX3JyOiBnb3QgJWQgdHJhbnNhY3Rpb25zXG4iLAorCSAgICB0cmFuc19yZWNlaXZlZCk7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgeHRpX3RjcF9ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZCA9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCQkoeHRpX3RjcF9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUgKyAKKwkJCQkJIHh0aV90Y3BfcnJfcmVxdWVzdC0+cmVzcG9uc2Vfc2l6ZSkpOworICB4dGlfdGNwX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkID0gdHJhbnNfcmVjZWl2ZWQ7CisgIHh0aV90Y3BfcnJfcmVzdWx0cy0+ZWxhcHNlZF90aW1lICAgPSBlbGFwc2VkX3RpbWU7CisgIHh0aV90Y3BfcnJfcmVzdWx0cy0+Y3B1X21ldGhvZCAgICAgPSBjcHVfbWV0aG9kOworICBpZiAoeHRpX3RjcF9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSkgeworICAgIHh0aV90Y3BfcnJfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3BfcnI6IHRlc3QgY29tcGxldGUsIHNlbmRpbmcgcmVzdWx0cy5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIC8qIHdlIGFyZSBkb25lIHdpdGggdGhlIHNvY2tldCwgZnJlZSBpdCAqLworICB0X2Nsb3NlKHNfZGF0YSk7CisKKyAgc2VuZF9yZXNwb25zZSgpOworICAKK30KKworDAorCisgLyogdGhpcyB0ZXN0IGlzIGludGVuZGVkIHRvIHRlc3QgdGhlIHBlcmZvcm1hbmNlIG9mIGVzdGFibGlzaGluZyBhICovCisgLyogY29ubmVjdGlvbiwgZXhjaGFuZ2luZyBhIHJlcXVlc3QvcmVzcG9uc2UgcGFpciwgYW5kIHJlcGVhdGluZy4gaXQgKi8KKyAvKiBpcyBleHBlY3RlZCB0aGF0IHRoaXMgd291bGQgYmUgYSBnb29kIHN0YXJ0aW5nLXBvaW50IGZvciAqLworIC8qIGNvbXBhcmlzaW9uIG9mIFQvVENQIHdpdGggY2xhc3NpYyBUQ1AgZm9yIHRyYW5zYWN0aW9uYWwgd29ya2xvYWRzLiAqLworIC8qIGl0IHdpbGwgYWxzbyBsb29rIChjYW4gbG9vaykgbXVjaCBsaWtlIHRoZSBjb21tdW5pY2F0aW9uIHBhdHRlcm4gKi8KKyAvKiBvZiBodHRwIGZvciB3d3cgYWNjZXNzLiAqLworCit2b2lkIAorc2VuZF94dGlfdGNwX2Nvbm5fcnIoY2hhciByZW1vdGVfaG9zdFtdKQoreworICAKKyAgY2hhciAqdHB1dF90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgIFJlc3AuICAgRWxhcHNlZCAgVHJhbnMuXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgIFNpemUgICAgVGltZSAgICAgUmF0ZSAgICAgICAgIFxuXAorYnl0ZXMgIEJ5dGVzICBieXRlcyAgICBieXRlcyAgIHNlY3MuICAgIHBlciBzZWMgICBcblxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzAgPQorICAgICIlNy4yZlxuIjsKKyAgCisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8xID0gIlwKKyUtNmQgJS02ZCAlLTZkICAgJS02ZCAgJS02LjJmICAgJTcuMmYgICBcbiI7CisgIGNoYXIgKnRwdXRfZm10XzFfbGluZV8yID0gIlwKKyUtNmQgJS02ZFxuIjsKKyAgCisgIGNoYXIgKmNwdV90aXRsZSA9ICJcCitMb2NhbCAvUmVtb3RlXG5cCitTb2NrZXQgU2l6ZSAgIFJlcXVlc3QgUmVzcC4gIEVsYXBzZWQgVHJhbnMuICAgQ1BVICAgIENQVSAgICBTLmRlbSAgIFMuZGVtXG5cCitTZW5kICAgUmVjdiAgIFNpemUgICAgU2l6ZSAgIFRpbWUgICAgUmF0ZSAgICAgbG9jYWwgIHJlbW90ZSBsb2NhbCAgIHJlbW90ZVxuXAorYnl0ZXMgIGJ5dGVzICBieXRlcyAgIGJ5dGVzICBzZWNzLiAgIHBlciBzZWMgICUlICAgICAgJSUgICAgICB1cy9UciAgIHVzL1RyXG5cbiI7CisgIAorICBjaGFyICpjcHVfZm10XzAgPQorICAgICIlNi4zZlxuIjsKKyAgCisgIGNoYXIgKmNwdV9mbXRfMV9saW5lXzEgPSAiXAorJS02ZCAlLTZkICUtNmQgICUtNmQgJS02LjJmICAlLTYuMmYgICAlLTYuMmYgJS02LjJmICUtNi4zZiAgJS02LjNmXG4iOworICAKKyAgY2hhciAqY3B1X2ZtdF8xX2xpbmVfMiA9ICJcCislLTZkICUtNmRcbiI7CisgIAorICBjaGFyICprc2lua19mbXQgPSAiXAorQWxpZ25tZW50ICAgICAgT2Zmc2V0XG5cCitMb2NhbCAgUmVtb3RlICBMb2NhbCAgUmVtb3RlXG5cCitTZW5kICAgUmVjdiAgICBTZW5kICAgUmVjdlxuXAorJTVkICAlNWQgICAlNWQgICU1ZFxuIjsKKyAgCisgIAorICBpbnQgCQkJb25lID0gMTsKKyAgaW50CQkJdGltZWRfb3V0ID0gMDsKKyAgZmxvYXQJCQllbGFwc2VkX3RpbWU7CisgIAorICBpbnQJbGVuOworICBzdHJ1Y3QgcmluZ19lbHQgKnNlbmRfcmluZzsKKyAgc3RydWN0IHJpbmdfZWx0ICpyZWN2X3Jpbmc7CisgIGNoYXIJKnRlbXBfbWVzc2FnZV9wdHI7CisgIGludAludW1tZXNzYWdlczsKKyAgU09DS0VUIHNlbmRfc29ja2V0OworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBkb3VibGUJYnl0ZXNfeGZlcmQ7CisgIGludAlzb2NrX29wdF9sZW4gPSBzaXplb2YoaW50KTsKKyAgaW50CXJzcF9ieXRlc19sZWZ0OworICBpbnQJcnNwX2J5dGVzX3JlY3ZkOworICAKKyAgZmxvYXQJbG9jYWxfY3B1X3V0aWxpemF0aW9uOworICBmbG9hdAlsb2NhbF9zZXJ2aWNlX2RlbWFuZDsKKyAgZmxvYXQJcmVtb3RlX2NwdV91dGlsaXphdGlvbjsKKyAgZmxvYXQJcmVtb3RlX3NlcnZpY2VfZGVtYW5kOworICBkb3VibGUJdGhydXB1dDsKKyAgCisgIHN0cnVjdAlob3N0ZW50CSAgICAgICAgKmhwOworICBzdHJ1Y3QJc29ja2FkZHJfaW4Jc2VydmVyOworICBzdHJ1Y3QgICAgICAgIHNvY2thZGRyX2luICAgICAqbXlhZGRyOworICB1bnNpZ25lZCAgICAgIGludCAgICAgICAgICAgICBhZGRyOworICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBteXBvcnQ7CisKKyAgc3RydWN0CXh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0X3N0cnVjdAkqeHRpX3RjcF9jb25uX3JyX3JlcXVlc3Q7CisgIHN0cnVjdAl4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2Vfc3RydWN0CSp4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2U7CisgIHN0cnVjdAl4dGlfdGNwX2Nvbm5fcnJfcmVzdWx0c19zdHJ1Y3QJKnh0aV90Y3BfY29ubl9ycl9yZXN1bHQ7CisgIAorICB4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdCA9IAorICAgIChzdHJ1Y3QgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3Rfc3RydWN0ICopbmV0cGVyZl9yZXF1ZXN0LmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2UgPSAKKyAgICAoc3RydWN0IHh0aV90Y3BfY29ubl9ycl9yZXNwb25zZV9zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICB4dGlfdGNwX2Nvbm5fcnJfcmVzdWx0ID0KKyAgICAoc3RydWN0IHh0aV90Y3BfY29ubl9ycl9yZXN1bHRzX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIAorICAvKiBzaW5jZSB3ZSBhcmUgbm93IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBjb2RlIHRoYXQgZXN0YWJsaXNoZWQgdGhlICovCisgIC8qIGNvbnRyb2wgc29ja2V0LCBhbmQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBkaWZmZXJlbnQgKi8KKyAgLyogcHJvdG9jb2xzIGFuZCBzdWNoLCB3ZSBhcmUgcGFzc2VkIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgaG9zdCBhbmQgKi8KKyAgLyogbXVzdCB0dXJuIHRoYXQgaW50byB0aGUgdGVzdCBzcGVjaWZpYyBhZGRyZXNzaW5nIGluZm9ybWF0aW9uLiAqLworICAKKyAgbXlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisgIGlmIChteWFkZHIgPT0gTlVMTCkgeworICAgIHByaW50ZigibWFsbG9jKCVkKSBmYWlsZWQhXG4iLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGJ6ZXJvKChjaGFyICopJnNlcnZlciwKKwlzaXplb2Yoc2VydmVyKSk7CisgIGJ6ZXJvKChjaGFyICopbXlhZGRyLAorCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgbXlhZGRyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAvKiBpdCB3b3VsZCBzZWVtIHRoYXQgd2hpbGUgSFAtVVggd2lsbCBhbGxvdyBhbiBJUCBhZGRyZXNzIChhcyBhICovCisgIC8qIHN0cmluZykgaW4gYSBjYWxsIHRvIGdldGhvc3RieW5hbWUsIG90aGVyLCBsZXNzIGVubGlnaHRlbmVkICovCisgIC8qIHN5c3RlbXMgZG8gbm90LiBmaXggZnJvbSBhd2phY2tzQGNhLnNhbmRpYS5nb3YgcmFqIDEwLzk1ICovICAKKyAgLyogb3JkZXIgY2hhbmdlZCB0byBjaGVjayBmb3IgSVAgYWRkcmVzcyBmaXJzdC4gcmFqIDcvOTYgKi8KKworICBpZiAoKGFkZHIgPSBpbmV0X2FkZHIocmVtb3RlX2hvc3QpKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAvKiBpdCB3YXMgbm90IGFuIElQIGFkZHJlc3MsIHRyeSBpdCBhcyBhIG5hbWUgKi8KKyAgICBpZiAoKGhwID0gZ2V0aG9zdGJ5bmFtZShyZW1vdGVfaG9zdCkpID09IE5VTEwpIHsKKyAgICAgIC8qIHdlIGhhdmUgbm8gaWRlYSB3aGF0IGl0IGlzICovCisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgICJlc3RhYmxpc2hfY29udHJvbDogY291bGQgbm90IHJlc29sdmUgdGhlIGRlc3RpbmF0aW9uICVzXG4iLAorCSAgICAgIHJlbW90ZV9ob3N0KTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIGl0IHdhcyBhIHZhbGlkIHJlbW90ZV9ob3N0ICovCisgICAgICBiY29weShocC0+aF9hZGRyLAorCSAgICAoY2hhciAqKSZzZXJ2ZXIuc2luX2FkZHIsCisJICAgIGhwLT5oX2xlbmd0aCk7CisgICAgICBzZXJ2ZXIuc2luX2ZhbWlseSA9IGhwLT5oX2FkZHJ0eXBlOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAvKiBpdCB3YXMgYSB2YWxpZCBJUCBhZGRyZXNzICovCisgICAgc2VydmVyLnNpbl9hZGRyLnNfYWRkciA9IGFkZHI7CisgICAgc2VydmVyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICB9ICAgIAorICAKKyAgaWYgKCBwcmludF9oZWFkZXJzICkgeworICAgIGZwcmludGYod2hlcmUsIlRDUCBDb25uZWN0L1JlcXVlc3QvUmVzcG9uc2UgVGVzdFxuIik7CisgICAgaWYgKGxvY2FsX2NwdV91c2FnZSB8fCByZW1vdGVfY3B1X3VzYWdlKQorICAgICAgZnByaW50Zih3aGVyZSxjcHVfdGl0bGUsZm9ybWF0X3VuaXRzKCkpOworICAgIGVsc2UKKyAgICAgIGZwcmludGYod2hlcmUsdHB1dF90aXRsZSxmb3JtYXRfdW5pdHMoKSk7CisgIH0KKyAgCisgIC8qIGluaXRpYWxpemUgYSBmZXcgY291bnRlcnMgKi8KKyAgCisgIG51bW1lc3NhZ2VzCT0JMDsKKyAgYnl0ZXNfeGZlcmQJPQkwLjA7CisgIHRpbWVzX3VwIAk9IAkwOworICAKKyAgLyogc2V0LXVwIHRoZSBkYXRhIGJ1ZmZlcnMgd2l0aCB0aGUgcmVxdWVzdGVkIGFsaWdubWVudCBhbmQgb2Zmc2V0ICovCisgIGlmIChzZW5kX3dpZHRoID09IDApIHNlbmRfd2lkdGggPSAxOworICBpZiAocmVjdl93aWR0aCA9PSAwKSByZWN2X3dpZHRoID0gMTsKKworICBzZW5kX3JpbmcgPSBhbGxvY2F0ZV9idWZmZXJfcmluZyhzZW5kX3dpZHRoLAorCQkJCSAgIHJlcV9zaXplLAorCQkJCSAgIGxvY2FsX3NlbmRfYWxpZ24sCisJCQkJICAgbG9jYWxfc2VuZF9vZmZzZXQpOworCisgIHJlY3ZfcmluZyA9IGFsbG9jYXRlX2J1ZmZlcl9yaW5nKHJlY3Zfd2lkdGgsCisJCQkJICAgcnNwX3NpemUsCisJCQkJICAgbG9jYWxfcmVjdl9hbGlnbiwKKwkJCQkgICBsb2NhbF9yZWN2X29mZnNldCk7CisKKworICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJzZW5kX3h0aV90Y3BfY29ubl9ycjogc2VuZF9zb2NrZXQgb2J0YWluZWQuLi5cbiIpOworICB9CisgIAorICAvKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIGNwdSB1dGlsaXphdGlvbiBtZWFzdXJlbWVudHMsIHdlIG11c3QgKi8KKyAgLyogY2FsaWJyYXRlIHRoZSBjcHUocykuIFdlIHdpbGwgcGVyZm9ybSB0aGlzIHRhc2sgd2l0aGluIHRoZSB0ZXN0cyAqLworICAvKiB0aGVtc2VsdmVzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoZSBjcHUgcmF0ZSwgdGhlbiAqLworICAvKiBjYWxpYnJhdGVfbG9jYWxfY3B1IHdpbGwgcmV0dXJuIHJhdGhlciBxdWlja2x5IGFzIGl0IHdpbGwgaGF2ZSAqLworICAvKiBub3RoaW5nIHRvIGRvLiBJZiBsb2NhbF9jcHVfcmF0ZSBpcyB6ZXJvLCB0aGVuIHdlIHdpbGwgZ28gdGhyb3VnaCAqLworICAvKiBhbGwgdGhlICJub3JtYWwiIGNhbGlicmF0aW9uIHN0dWZmIGFuZCByZXR1cm4gdGhlIHJhdGUgYmFjay4qLworICAKKyAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworICAgIGxvY2FsX2NwdV9yYXRlID0gY2FsaWJyYXRlX2xvY2FsX2NwdShsb2NhbF9jcHVfcmF0ZSk7CisgIH0KKyAgCisgIC8qIFRlbGwgdGhlIHJlbW90ZSBlbmQgdG8gZG8gYSBsaXN0ZW4uIFRoZSBzZXJ2ZXIgYWx0ZXJzIHRoZSBzb2NrZXQgKi8KKyAgLyogcGFyYW10ZXJzIG9uIHRoZSBvdGhlciBzaWRlIGF0IHRoaXMgcG9pbnQsIGhlbmNlIHRoZSByZWFzb24gZm9yICovCisgIC8qIGFsbCB0aGUgdmFsdWVzIGJlaW5nIHBhc3NlZCBpbiB0aGUgc2V0dXAgbWVzc2FnZS4gSWYgdGhlIHVzZXIgZGlkICovCisgIC8qIG5vdCBzcGVjaWZ5IGFueSBvZiB0aGUgcGFyYW1ldGVycywgdGhleSB3aWxsIGJlIHBhc3NlZCBhcyAwLCB3aGljaCAqLworICAvKiB3aWxsIGluZGljYXRlIHRvIHRoZSByZW1vdGUgdGhhdCBubyBjaGFuZ2VzIGJleW9uZCB0aGUgc3lzdGVtJ3MgKi8KKyAgLyogZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4gQWxpZ25tZW50IGlzIHRoZSBleGNlcHRpb24sIGl0IHdpbGwgKi8KKyAgLyogZGVmYXVsdCB0byA4LCB3aGljaCB3aWxsIGJlIG5vIGFsaWdubWVudCBhbHRlcmF0aW9ucy4gKi8KKyAgCisgIG5ldHBlcmZfcmVxdWVzdC5jb250ZW50LnJlcXVlc3RfdHlwZQkgICAgICAgID0JRE9fWFRJX1RDUF9DUlI7CisgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplCT0JcnNyX3NpemU7CisgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplCT0JcnNzX3NpemU7CisgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudAk9CXJlbW90ZV9yZWN2X2FsaWduOworICB4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdC0+cmVjdl9vZmZzZXQJPQlyZW1vdGVfcmVjdl9vZmZzZXQ7CisgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudAk9CXJlbW90ZV9zZW5kX2FsaWduOworICB4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdC0+c2VuZF9vZmZzZXQJPQlyZW1vdGVfc2VuZF9vZmZzZXQ7CisgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZXF1ZXN0X3NpemUJPQlyZXFfc2l6ZTsKKyAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUJPQlyc3Bfc2l6ZTsKKyAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPm5vX2RlbGF5CSAgICAgICAgPQlyZW1fbm9kZWxheTsKKyAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1CT0JcmVtb3RlX2NwdV91c2FnZTsKKyAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPmNwdV9yYXRlCSAgICAgICAgPQlyZW1vdGVfY3B1X3JhdGU7CisgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5zb19yY3Zhdm9pZAk9CXJlbV9yY3Zhdm9pZDsKKyAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnNvX3NuZGF2b2lkCT0JcmVtX3NuZGF2b2lkOworICBpZiAodGVzdF90aW1lKSB7CisgICAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoCT0JdGVzdF90aW1lOworICB9CisgIGVsc2UgeworICAgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aAk9CXRlc3RfdHJhbnMgKiAtMTsKKyAgfQorICAKKyAgaWYgKGRlYnVnID4gMSkgeworICAgIGZwcmludGYod2hlcmUsIm5ldHBlcmY6IHNlbmRfeHRpX3RjcF9jb25uX3JyOiByZXF1ZXN0aW5nIFRDUCBjcnIgdGVzdFxuIik7CisgIH0KKyAgCisgIHNlbmRfcmVxdWVzdCgpOworICAKKyAgLyogVGhlIHJlc3BvbnNlIGZyb20gdGhlIHJlbW90ZSB3aWxsIGNvbnRhaW4gYWxsIG9mIHRoZSByZWxldmFudCAJKi8KKyAgLyogc29ja2V0IHBhcmFtZXRlcnMgZm9yIHRoaXMgdGVzdCB0eXBlLiBXZSB3aWxsIHB1dCB0aGVtIGJhY2sgaW50byAJKi8KKyAgLyogdGhlIHZhcmlhYmxlcyBoZXJlIHNvIHRoZXkgY2FuIGJlIGRpc3BsYXllZCBpZiBkZXNpcmVkLiAgVGhlCSovCisgIC8qIHJlbW90ZSB3aWxsIGhhdmUgY2FsaWJyYXRlZCBDUFUgaWYgbmVjZXNzYXJ5LCBhbmQgd2lsbCBoYXZlIGRvbmUJKi8KKyAgLyogYWxsIHRoZSBuZWVkZWQgc2V0LXVwIHdlIHdpbGwgaGF2ZSBjYWxpYnJhdGVkIHRoZSBjcHUgbG9jYWxseQkqLworICAvKiBiZWZvcmUgc2VuZGluZyB0aGUgcmVxdWVzdCwgYW5kIHdpbGwgZ3JhYiB0aGUgY291bnRlciB2YWx1ZSByaWdodAkqLworICAvKiBhZnRlciB0aGUgY29ubmVjdCByZXR1cm5zLiBUaGUgcmVtb3RlIHdpbGwgZ3JhYiB0aGUgY291bnRlciByaWdodAkqLworICAvKiBhZnRlciB0aGUgYWNjZXB0IGNhbGwuIFRoaXMgc2F2ZXMgdGhlIGhhc3NsZSBvZiBleHRyYSBtZXNzYWdlcwkqLworICAvKiBiZWluZyBzZW50IGZvciB0aGUgVENQIHRlc3RzLgkJCQkJKi8KKyAgCisgIHJlY3ZfcmVzcG9uc2UoKTsKKyAgCisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICByc3Jfc2l6ZQk9CXh0aV90Y3BfY29ubl9ycl9yZXNwb25zZS0+cmVjdl9idWZfc2l6ZTsKKyAgICByc3Nfc2l6ZQk9CXh0aV90Y3BfY29ubl9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZTsKKyAgICByZW1fbm9kZWxheQk9CXh0aV90Y3BfY29ubl9ycl9yZXNwb25zZS0+bm9fZGVsYXk7CisgICAgcmVtb3RlX2NwdV91c2FnZT0JeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdTsKKyAgICByZW1vdGVfY3B1X3JhdGUgPSAJeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZTsKKyAgICAvKiBtYWtlIHN1cmUgdGhhdCBwb3J0IG51bWJlcnMgYXJlIGluIG5ldHdvcmsgb3JkZXIgKi8KKyAgICBzZXJ2ZXIuc2luX3BvcnQJPQkoc2hvcnQpeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlLT5kYXRhX3BvcnRfbnVtYmVyOworICAgIHNlcnZlci5zaW5fcG9ydCA9CWh0b25zKHNlcnZlci5zaW5fcG9ydCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgbGlzdGVuIGRvbmUuXG4iKTsKKyAgICAgIGZwcmludGYod2hlcmUsInJlbW90ZSBwb3J0IGlzICVkXG4iLG50b2hzKHNlcnZlci5zaW5fcG9ydCkpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHJlbW90ZSBlcnJvciIpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFNldC11cCB0aGUgdGVzdCBlbmQgY29uZGl0aW9ucy4gRm9yIGEgcmVxdWVzdC9yZXNwb25zZSB0ZXN0LCB0aGV5ICovCisgIC8qIGNhbiBiZSBlaXRoZXIgdGltZSBvciB0cmFuc2FjdGlvbiBiYXNlZC4gKi8KKyAgCisgIGlmICh0ZXN0X3RpbWUpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8gZW5kIHRoZSB0ZXN0IGFmdGVyIGEgcGVyaW9kIG9mIHRpbWUuICovCisgICAgdGltZXNfdXAgPSAwOworICAgIHRyYW5zX3JlbWFpbmluZyA9IDA7CisgICAgc3RhcnRfdGltZXIodGVzdF90aW1lKTsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBUaGUgdGVzdGVyIHdhbnRlZCB0byBzZW5kIGEgbnVtYmVyIG9mIGJ5dGVzLiAqLworICAgIHRyYW5zX3JlbWFpbmluZyA9IHRlc3RfYnl0ZXM7CisgICAgdGltZXNfdXAgPSAxOworICB9CisgIAorICAvKiBUaGUgY3B1X3N0YXJ0IHJvdXRpbmUgd2lsbCBncmFiIHRoZSBjdXJyZW50IHRpbWUgYW5kIHBvc3NpYmx5ICovCisgIC8qIHZhbHVlIG9mIHRoZSBpZGxlIGNvdW50ZXIgZm9yIGxhdGVyIHVzZSBpbiBtZWFzdXJpbmcgY3B1ICovCisgIC8qIHV0aWxpemF0aW9uIGFuZC9vciBzZXJ2aWNlIGRlbWFuZCBhbmQgdGhydXB1dC4gKi8KKyAgCisgIGNwdV9zdGFydChsb2NhbF9jcHVfdXNhZ2UpOworICAKKyAgLyogV2UgdXNlIGFuICJPUiIgdG8gY29udHJvbCB0ZXN0IGV4ZWN1dGlvbi4gV2hlbiB0aGUgdGVzdCBpcyAqLworICAvKiBjb250cm9sbGVkIGJ5IHRpbWUsIHRoZSBieXRlIGNvdW50IGNoZWNrIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZS4gKi8KKyAgLyogV2hlbiB0aGUgdGVzdCBpcyBjb250cm9sbGVkIGJ5IGJ5dGUgY291bnQsIHRoZSB0aW1lIHRlc3Qgd2lsbCAqLworICAvKiBhbHdheXMgcmV0dXJuIGZhbHNlLiBXaGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCB0aGUgd2hvbGUgKi8KKyAgLyogZXhwcmVzc2lvbiB3aWxsIGdvIGZhbHNlIGFuZCB3ZSB3aWxsIHN0b3Agc2VuZGluZyBkYXRhLiBJIHRoaW5rIEkgKi8KKyAgLyoganVzdCBhcmJpdHJhcmlseSBkZWNyZW1lbnQgdHJhbnNfcmVtYWluaW5nIGZvciB0aGUgdGltZWQgdGVzdCwgYnV0ICovCisgIC8qIHdpbGwgbm90IGRvIHRoYXQganVzdCB5ZXQuLi4gT25lIG90aGVyIHF1ZXN0aW9uIGlzIHdoZXRoZXIgb3Igbm90ICovCisgIC8qIHRoZSBzZW5kIGJ1ZmZlciBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSB0aGUgc2FtZSBidWZmZXIuICovCisKKyAgLyoganVzdCBmb3IgZ3JpbnMsIHN0YXJ0IHRoZSBwb3J0IG51bWJlcnMgYXQgNjU1MzAuIHRoaXMgc2hvdWxkICovCisgIC8qIHF1aWNrbHkgZmx1c2gtb3V0IHRob3NlIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnMgb2YgVENQIHdoaWNoIHRyZWF0ICovCisgIC8qIHRoZSBwb3J0IG51bWJlciBhcyBhIHNpZ25lZCAxNiBiaXQgcXVhbnRpdHkuICovCisgIG15cG9ydCA9IDY1NTMwOworICBteWFkZHItPnNpbl9wb3J0ID0gaHRvbnMobXlwb3J0KTsKKyAgCisgIHdoaWxlICgoIXRpbWVzX3VwKSB8fCAodHJhbnNfcmVtYWluaW5nID4gMCkpIHsKKworICAgIC8qIHNldCB1cCB0aGUgZGF0YSBzb2NrZXQgKi8KKyAgICBzZW5kX3NvY2tldCA9IGNyZWF0ZV94dGlfZW5kcG9pbnQobG9jX3h0aV9kZXZpY2UpOworICAKKyAgICBpZiAoc2VuZF9zb2NrZXQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF94dGlfdGNwX2Nvbm5fcnI6IHRjcCBzdHJlYW0gZGF0YSBzb2NrZXQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogd2Ugc2V0IFNPX1JFVVNFQUREUiBvbiB0aGUgcHJlbWlzIHRoYXQgbm8gdW5yZXNlcnZlZCBwb3J0ICovCisgICAgLyogbnVtYmVyIG9uIHRoZSBsb2NhbCBzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgYWxyZWFkeSBjb25uZWN0ZWQgdG8gKi8KKyAgICAvKiB0aGUgcmVtb3RlIG5ldHNlcnZlcidzIHBvcnQgbnVtYmVyLiB3ZSBtaWdodCBzdGlsbCBoYXZlIGEgKi8KKyAgICAvKiBwcm9ibGVtIGlmIHRoZXJlIGlzIGEgcG9ydCBpbiB0aGUgdW5jb25uZWN0ZWQgc3RhdGUuIEluIHRoYXQgKi8KKyAgICAvKiBjYXNlLCB3ZSBtaWdodCB3YW50IHRvIHRocm93LWluIGEgZ290byB0byB0aGUgcG9pbnQgd2hlcmUgd2UgKi8KKyAgICAvKiBpbmNyZW1lbnQgdGhlIHBvcnQgbnVtYmVyIGJ5IG9uZSBhbmQgdHJ5IGFnYWluLiBvZiBjb3Vyc2UsIHRoaXMgKi8KKyAgICAvKiBjb3VsZCBsZWFkIHRvIGEgYmlnIGxvYWQgb2Ygc3Bpbm5pbmcuIG9uZSB0aGluZyB0aGF0IEkgbWlnaHQgKi8KKyAgICAvKiB0cnkgbGF0ZXIgaXMgdG8gaGF2ZSB0aGUgcmVtb3RlIGFjdHVhbGx5IGFsbG9jYXRlIGEgY291cGxlIG9mICovCisgICAgLyogcG9ydCBudW1iZXJzIGFuZCBjeWNsZSB0aHJvdWdoIHRob3NlIGFzIHdlbGwuIGRlcGVuZHMgb24gaWYgd2UgKi8KKyAgICAvKiBjYW4gZ2V0IHRocm91Z2ggYWxsIHRoZSB1bnJlc2VydmVkIHBvcnQgbnVtYmVycyBpbiBsZXNzIHRoYW4gKi8KKyAgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBUSU1FX1dBSVQgc3RhdGUgcmFqIDgvOTQgKi8KKyAgICBvbmUgPSAxOworICAgIGlmKHNldHNvY2tvcHQoc2VuZF9zb2NrZXQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKwkJICAoY2hhciAqKSZvbmUsIHNvY2tfb3B0X2xlbikgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICBwZXJyb3IoIm5ldHBlcmY6IHNlbmRfeHRpX3RjcF9jb25uX3JyOiBzb19yZXVzZWFkZHIiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogd2Ugd2FudCB0byBiaW5kIG91ciBzb2NrZXQgdG8gYSBwYXJ0aWN1bGFyIHBvcnQgbnVtYmVyLiAqLworICAgIGlmIChiaW5kKHNlbmRfc29ja2V0LAorCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKW15YWRkciwKKwkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgIHByaW50ZigibmV0cGVyZjogc2VuZF94dGlfdGNwX2Nvbm5fcnI6IHRyaWVkIHRvIGJpbmQgdG8gcG9ydCAlZFxuIiwKKwkgICAgIG50b2hzKG15YWRkci0+c2luX3BvcnQpKTsKKyAgICAgIHBlcnJvcigibmV0cGVyZjogc2VuZF94dGlfdGNwX2Nvbm5fcnI6IGJpbmQiKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogQ29ubmVjdCB1cCB0byB0aGUgcmVtb3RlIHBvcnQgb24gdGhlIGRhdGEgc29ja2V0ICAqLworICAgIGlmIChjb25uZWN0KHNlbmRfc29ja2V0LCAKKwkJKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsCisJCXNpemVvZihzZXJ2ZXIpKSA9PSBJTlZBTElEX1NPQ0tFVCl7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiB3ZSBoaXQgdGhlIGVuZCBvZiBhICovCisJLyogdGltZWQgdGVzdC4gKi8KKwl0aW1lZF9vdXQgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgcGVycm9yKCJuZXRwZXJmOiBkYXRhIHNvY2tldCBjb25uZWN0IGZhaWxlZCIpOworICAgICAgcHJpbnRmKCJcdGF0dGVtcHRlZCB0byBjb25uZWN0IG9uIHNvY2tldCAlZCB0byBwb3J0ICVkIiwKKwkgICAgIHNlbmRfc29ja2V0LAorCSAgICAgbnRvaHMoc2VydmVyLnNpbl9wb3J0KSk7CisgICAgICBwcmludGYoIiBmcm9tIHBvcnQgJWQgXG4iLG50b2hzKG15YWRkci0+c2luX3BvcnQpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLyogc2VuZCB0aGUgcmVxdWVzdCAqLworICAgIGlmKChsZW49c2VuZChzZW5kX3NvY2tldCwKKwkJIHNlbmRfcmluZy0+YnVmZmVyX3B0ciwKKwkJIHJlcV9zaXplLAorCQkgMCkpICE9IHJlcV9zaXplKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiB3ZSBoaXQgdGhlIGVuZCBvZiBhICovCisJLyogdGltZWQgdGVzdC4gKi8KKwl0aW1lZF9vdXQgPSAxOworCWJyZWFrOworICAgICAgfQorICAgICAgcGVycm9yKCJzZW5kX3h0aV90Y3BfY29ubl9ycjogZGF0YSBzZW5kIGVycm9yIik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBzZW5kX3JpbmcgPSBzZW5kX3JpbmctPm5leHQ7CisKKyAgICAvKiByZWNlaXZlIHRoZSByZXNwb25zZSAqLworICAgIHJzcF9ieXRlc19sZWZ0ID0gcnNwX3NpemU7CisgICAgdGVtcF9tZXNzYWdlX3B0ciAgPSByZWN2X3JpbmctPmJ1ZmZlcl9wdHI7CisgICAgd2hpbGUocnNwX2J5dGVzX2xlZnQgPiAwKSB7CisgICAgICBpZigocnNwX2J5dGVzX3JlY3ZkPXJlY3Yoc2VuZF9zb2NrZXQsCisJCQkgICAgICAgdGVtcF9tZXNzYWdlX3B0ciwKKwkJCSAgICAgICByc3BfYnl0ZXNfbGVmdCwKKwkJCSAgICAgICAwKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJaWYgKGVycm5vID09IEVJTlRSKSB7CisJICAvKiBXZSBoaXQgdGhlIGVuZCBvZiBhIHRpbWVkIHRlc3QuICovCisJICB0aW1lZF9vdXQgPSAxOworCSAgYnJlYWs7CisJfQorCXBlcnJvcigic2VuZF94dGlfdGNwX2Nvbm5fcnI6IGRhdGEgcmVjdiBlcnJvciIpOworCWV4aXQoMSk7CisgICAgICB9CisgICAgICByc3BfYnl0ZXNfbGVmdCAtPSByc3BfYnl0ZXNfcmVjdmQ7CisgICAgICB0ZW1wX21lc3NhZ2VfcHRyICArPSByc3BfYnl0ZXNfcmVjdmQ7CisgICAgfQkKKyAgICByZWN2X3JpbmcgPSByZWN2X3JpbmctPm5leHQ7CisKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBtYXkgaGF2ZSBiZWVuIGluIGEgbmVzdGVkIHdoaWxlIGxvb3AgLSB3ZSBuZWVkICovCisgICAgICAvKiBhbm90aGVyIGNhbGwgdG8gYnJlYWsuICovCisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjbG9zZShzZW5kX3NvY2tldCk7CisKKyAgICBudW1tZXNzYWdlcysrOyAgICAgICAgICAKKyAgICBpZiAodHJhbnNfcmVtYWluaW5nKSB7CisgICAgICB0cmFuc19yZW1haW5pbmctLTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlYnVnID4gMykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAiVHJhbnNhY3Rpb24gJWQgY29tcGxldGVkIG9uIGxvY2FsIHBvcnQgJWRcbiIsCisJICAgICAgbnVtbWVzc2FnZXMsCisJICAgICAgbnRvaHMobXlhZGRyLT5zaW5fcG9ydCkpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisKK25ld3BvcnQ6CisgICAgLyogcGljayBhIG5ldyBwb3J0IG51bWJlciAqLworICAgIG15cG9ydCA9IG50b2hzKG15YWRkci0+c2luX3BvcnQpOworICAgIG15cG9ydCsrOworICAgIC8qIHdlIGRvIG5vdCB3YW50IHRvIHVzZSB0aGUgcG9ydCBudW1iZXIgdGhhdCB0aGUgc2VydmVyIGlzICovCisgICAgLyogc2l0dGluZyBhdCAtIHRoaXMgd291bGQgY2F1c2UgdXMgdG8gZmFpbCBpbiBhIGxvb3BiYWNrIHRlc3QgKi8KKworICAgIGlmIChteXBvcnQgPT0gbnRvaHMoc2VydmVyLnNpbl9wb3J0KSkgbXlwb3J0Kys7CisKKyAgICAvKiB3cmFwIHRoZSBwb3J0IG51bWJlciB3aGVuIHdlIGdldCB0byA2NTUzNS4gTk9URSwgc29tZSBicm9rZW4gKi8KKyAgICAvKiBUQ1AncyBtaWdodCB0cmVhdCB0aGUgcG9ydCBudW1iZXIgYXMgYSBzaWduZWQgMTYgYml0IHF1YW50aXR5LiAqLworICAgIC8qIHdlIGFyZW4ndCBpbnRlcmVzdGVkIGluIHRlc3Rpbmcgc3VjaCBicm9la24gaW1wbGVtZW50YXRpb25zIDopICovCisgICAgLyogcmFqIDgvOTQgICovCisgICAgaWYgKG15cG9ydCA9PSA2NTUzNSkgeworICAgICAgbXlwb3J0ID0gNTAwMDsKKyAgICB9CisgICAgbXlhZGRyLT5zaW5fcG9ydCA9IGh0b25zKG15cG9ydCk7CisKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGlmICgobXlwb3J0ICUgMTAwMCkgPT0gMCkgeworCXByaW50ZigicG9ydCAlZFxuIixteXBvcnQpOworICAgICAgfQorICAgIH0KKworICB9CisgIAorICAvKiB0aGlzIGNhbGwgd2lsbCBhbHdheXMgZ2l2ZSB1cyB0aGUgZWxhcHNlZCB0aW1lIGZvciB0aGUgdGVzdCwgYW5kICovCisgIC8qIHdpbGwgYWxzbyBzdG9yZS1hd2F5IHRoZSBuZWNlc3NhcmllcyBmb3IgY3B1IHV0aWxpemF0aW9uICovCisKKyAgY3B1X3N0b3AobG9jYWxfY3B1X3VzYWdlLCZlbGFwc2VkX3RpbWUpOwkvKiB3YXMgY3B1IGJlaW5nIG1lYXN1cmVkPyAqLworICAvKiBob3cgbG9uZyBkaWQgd2UgcmVhbGx5IHJ1bj8gKi8KKyAgCisgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSByZW1vdGUgZW5kLiBUaGUgcmVtb3RlIHdpbGwgaGF2ZSAqLworICAvKiBjYWxjdWxhdGVkIHNlcnZpY2UgZGVtYW5kIGFuZCBhbGwgdGhvc2UgaW50ZXJlc3RpbmcgdGhpbmdzLiBJZiBpdCAqLworICAvKiB3YXNuJ3Qgc3VwcG9zZWQgdG8gY2FyZSwgaXQgd2lsbCByZXR1cm4gb2J2aW91cyB2YWx1ZXMuICovCisgIAorICByZWN2X3Jlc3BvbnNlKCk7CisgIGlmICghbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8pIHsKKyAgICBpZiAoZGVidWcpCisgICAgICBmcHJpbnRmKHdoZXJlLCJyZW1vdGUgcmVzdWx0cyBvYnRhaW5lZFxuIik7CisgIH0KKyAgZWxzZSB7CisgICAgU2V0X2Vycm5vKG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vKTsKKyAgICBwZXJyb3IoIm5ldHBlcmY6IHJlbW90ZSBlcnJvciIpOworICAgIAorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIFdlIG5vdyBjYWxjdWxhdGUgd2hhdCBvdXIgdGhydXB1dCB3YXMgZm9yIHRoZSB0ZXN0LiBJbiB0aGUgZnV0dXJlLCAqLworICAvKiB3ZSBtYXkgd2FudCB0byBpbmNsdWRlIGEgY2FsY3VsYXRpb24gb2YgdGhlIHRocnVwdXQgbWVhc3VyZWQgYnkgKi8KKyAgLyogdGhlIHJlbW90ZSwgYnV0IGl0IHNob3VsZCBiZSB0aGUgY2FzZSB0aGF0IGZvciBhIFRDUCBzdHJlYW0gdGVzdCwgKi8KKyAgLyogdGhhdCB0aGUgdHdvIG51bWJlcnMgc2hvdWxkIGJlICp2ZXJ5KiBjbG9zZS4uLiBXZSBjYWxjdWxhdGUgKi8KKyAgLyogYnl0ZXNfc2VudCByZWdhcmRsZXNzIG9mIHRoZSB3YXkgdGhlIHRlc3QgbGVuZ3RoIHdhcyBjb250cm9sbGVkLiAqLworICAvKiBJZiBpdCB3YXMgdGltZSwgd2UgbmVlZGVkIHRvLCBhbmQgaWYgaXQgd2FzIGJ5IGJ5dGVzLCB0aGUgdXNlciBtYXkgKi8KKyAgLyogaGF2ZSBzcGVjaWZpZWQgYSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXNuJ3QgYSBtdWx0aXBsZSBvZiB0aGUgKi8KKyAgLyogc2VuZF9zaXplLCBzbyB3ZSByZWFsbHkgZGlkbid0IHNlbmQgd2hhdCBoZSBhc2tlZCBmb3IgOy0pIFdlIHVzZSAqLworICAvKiBLYnl0ZXMvcyBhcyB0aGUgdW5pdHMgb2YgdGhydXB1dCBmb3IgYSBUQ1Agc3RyZWFtIHRlc3QsIHdoZXJlIEsgPSAqLworICAvKiAxMDI0LiBBIGZ1dHVyZSBlbmhhbmNlbWVudCAqbWlnaHQqIGJlIHRvIGNob29zZSBmcm9tIGEgY291cGxlIG9mICovCisgIC8qIHVuaXQgc2VsZWN0aW9ucy4gKi8gCisgIAorICBieXRlc194ZmVyZAk9IChyZXFfc2l6ZSAqIG51bW1lc3NhZ2VzKSArIChyc3Bfc2l6ZSAqIG51bW1lc3NhZ2VzKTsKKyAgdGhydXB1dAk9IGNhbGNfdGhydXB1dChieXRlc194ZmVyZCk7CisgIAorICBpZiAobG9jYWxfY3B1X3VzYWdlIHx8IHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAvKiBXZSBtdXN0IG5vdyBkbyBhIGxpdHRsZSBtYXRoIGZvciBzZXJ2aWNlIGRlbWFuZCBhbmQgY3B1ICovCisgICAgLyogdXRpbGl6YXRpb24gZm9yIHRoZSBzeXN0ZW0ocykgKi8KKyAgICAvKiBPZiBjb3Vyc2UsIHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIG1pZ2h0IGJlIGJvZ3VzIGJlY2F1c2UgKi8KKyAgICAvKiB0aGVyZSB3YXMgbm8gaWRsZSBjb3VudGVyIGluIHRoZSBrZXJuZWwocykuIFdlIG5lZWQgdG8gbWFrZSAqLworICAgIC8qIGEgbm90ZSBvZiB0aGlzIGZvciB0aGUgdXNlcidzIGJlbmVmaXQuLi4qLworICAgIGlmIChsb2NhbF9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChsb2NhbF9jcHVfcmF0ZSA9PSAwLjApIHsKKwlmcHJpbnRmKHdoZXJlLCJXQVJOSU5HIFdBUk5JTkcgV0FSTklORyAgV0FSTklORyBXQVJOSU5HIFdBUk5JTkcgIFdBUk5JTkchXG4iKTsKKwlmcHJpbnRmKHdoZXJlLCJMb2NhbCBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uID0gY2FsY19jcHVfdXRpbCgwLjApOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgbG9jYWxfc2VydmljZV9kZW1hbmQgID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIDAuMCwKKwkJCQkJCSAgMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgbG9jYWxfY3B1X3V0aWxpemF0aW9uCT0gLTEuMDsKKyAgICAgIGxvY2FsX3NlcnZpY2VfZGVtYW5kCT0gLTEuMDsKKyAgICB9CisgICAgCisgICAgaWYgKHJlbW90ZV9jcHVfdXNhZ2UpIHsKKyAgICAgIGlmIChyZW1vdGVfY3B1X3JhdGUgPT0gMC4wKSB7CisJZnByaW50Zih3aGVyZSwiREFOR0VSICBEQU5HRVIgIERBTkdFUiAgICBEQU5HRVIgIERBTkdFUiAgREFOR0VSICAgIERBTkdFUiFcbiIpOworCWZwcmludGYod2hlcmUsIlJlbW90ZSBDUFUgdXNhZ2UgbnVtYmVycyBiYXNlZCBvbiBwcm9jZXNzIGluZm9ybWF0aW9uIG9ubHkhXG4iKTsKKwlmZmx1c2god2hlcmUpOworICAgICAgfQorICAgICAgcmVtb3RlX2NwdV91dGlsaXphdGlvbiA9IHh0aV90Y3BfY29ubl9ycl9yZXN1bHQtPmNwdV91dGlsOworICAgICAgLyogc2luY2UgY2FsY19zZXJ2aWNlIGRlbWFuZCBpcyBkb2luZyBtcy9LdW5pdCB3ZSB3aWxsICovCisgICAgICAvKiBtdWx0aXBseSB0aGUgbnVtYmVyIG9mIHRyYW5zYWN0aW9uIGJ5IDEwMjQgdG8gZ2V0ICovCisgICAgICAvKiAiZ29vZCIgbnVtYmVycyAqLworICAgICAgcmVtb3RlX3NlcnZpY2VfZGVtYW5kID0gY2FsY19zZXJ2aWNlX2RlbWFuZCgoZG91YmxlKSBudW1tZXNzYWdlcyoxMDI0LAorCQkJCQkJICAwLjAsCisJCQkJCQkgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCisJCQkJCQkgIHh0aV90Y3BfY29ubl9ycl9yZXN1bHQtPm51bV9jcHVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICByZW1vdGVfY3B1X3V0aWxpemF0aW9uID0gLTEuMDsKKyAgICAgIHJlbW90ZV9zZXJ2aWNlX2RlbWFuZCAgPSAtMS4wOworICAgIH0KKyAgICAKKyAgICAvKiBXZSBhcmUgbm93IHJlYWR5IHRvIHByaW50IGFsbCB0aGUgaW5mb3JtYXRpb24uIElmIHRoZSB1c2VyICovCisgICAgLyogaGFzIHNwZWNpZmllZCB6ZXJvLWxldmVsIHZlcmJvc2l0eSwgd2Ugd2lsbCBqdXN0IHByaW50IHRoZSAqLworICAgIC8qIGxvY2FsIHNlcnZpY2UgZGVtYW5kLCBvciB0aGUgcmVtb3RlIHNlcnZpY2UgZGVtYW5kLiBJZiB0aGUgKi8KKyAgICAvKiB1c2VyIGhhcyByZXF1ZXN0ZWQgdmVyYm9zaXR5IGxldmVsIDEsIGhlIHdpbGwgZ2V0IHRoZSBiYXNpYyAqLworICAgIC8qICJzdHJlYW1wZXJmIiBudW1iZXJzLiBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGEgdmVyYm9zaXR5ICovCisgICAgLyogb2YgZ3JlYXRlciB0aGFuIDEsIHdlIHdpbGwgZGlzcGxheSBhIHZlcml0YWJsZSBwbGV0aG9yYSBvZiAqLworICAgIC8qIGJhY2tncm91bmQgaW5mb3JtYXRpb24gZnJvbSBvdXRzaWRlIG9mIHRoaXMgYmxvY2sgYXMgaXQgaXQgKi8KKyAgICAvKiBub3QgY3B1X21lYXN1cmVtZW50IHNwZWNpZmljLi4uICAqLworICAgIAorICAgIHN3aXRjaCAodmVyYm9zaXR5KSB7CisgICAgY2FzZSAwOgorICAgICAgaWYgKGxvY2FsX2NwdV91c2FnZSkgeworCWZwcmludGYod2hlcmUsCisJCWNwdV9mbXRfMCwKKwkJbG9jYWxfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgZWxzZSB7CisJZnByaW50Zih3aGVyZSwKKwkJY3B1X2ZtdF8wLAorCQlyZW1vdGVfc2VydmljZV9kZW1hbmQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICBjcHVfZm10XzFfbGluZV8xLAkJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwJCS8qIGxvY2FsIHNlbmRidWYgc2l6ZSAqLworCSAgICAgIGxzcl9zaXplLAorCSAgICAgIHJlcV9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlcXVlc3RzICovCisJICAgICAgcnNwX3NpemUsCQkvKiBndWVzcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwJCS8qIGhvdyBsb25nIHdhcyB0aGUgdGVzdCAqLworCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSwKKwkgICAgICBsb2NhbF9jcHVfdXRpbGl6YXRpb24sCS8qIGxvY2FsIGNwdSAqLworCSAgICAgIHJlbW90ZV9jcHVfdXRpbGl6YXRpb24sCS8qIHJlbW90ZSBjcHUgKi8KKwkgICAgICBsb2NhbF9zZXJ2aWNlX2RlbWFuZCwJLyogbG9jYWwgc2VydmljZSBkZW1hbmQgKi8KKwkgICAgICByZW1vdGVfc2VydmljZV9kZW1hbmQpOwkvKiByZW1vdGUgc2VydmljZSBkZW1hbmQgKi8KKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgY3B1X2ZtdF8xX2xpbmVfMiwKKwkgICAgICByc3Nfc2l6ZSwKKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLyogVGhlIHRlc3RlciBkaWQgbm90IHdpc2ggdG8gbWVhc3VyZSBzZXJ2aWNlIGRlbWFuZC4gKi8KKyAgICBzd2l0Y2ggKHZlcmJvc2l0eSkgeworICAgIGNhc2UgMDoKKyAgICAgIGZwcmludGYod2hlcmUsCisJICAgICAgdHB1dF9mbXRfMCwKKwkgICAgICBudW1tZXNzYWdlcy9lbGFwc2VkX3RpbWUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICB0cHV0X2ZtdF8xX2xpbmVfMSwJLyogdGhlIGZvcm1hdCBzdHJpbmcgKi8KKwkgICAgICBsc3Nfc2l6ZSwKKwkgICAgICBsc3Jfc2l6ZSwKKwkgICAgICByZXFfc2l6ZSwJCS8qIGhvdyBsYXJnZSB3ZXJlIHRoZSByZXF1ZXN0cyAqLworCSAgICAgIHJzcF9zaXplLAkJLyogaG93IGxhcmdlIHdlcmUgdGhlIHJlc3BvbnNlcyAqLworCSAgICAgIGVsYXBzZWRfdGltZSwgCQkvKiBob3cgbG9uZyBkaWQgaXQgdGFrZSAqLworCSAgICAgIG51bW1lc3NhZ2VzL2VsYXBzZWRfdGltZSk7CisgICAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAgIHRwdXRfZm10XzFfbGluZV8yLAorCSAgICAgIHJzc19zaXplLCAJCS8qIHJlbW90ZSByZWN2YnVmIHNpemUgKi8KKwkgICAgICByc3Jfc2l6ZSk7CisgICAgICAKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAKKyAgLyogaXQgd291bGQgYmUgYSBnb29kIHRoaW5nIHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgc29tZSBvZiB0aGUgKi8KKyAgLyogb3RoZXIgcGFyYW1ldGVycyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGZvciB0aGlzIHRlc3QsIGJ1dCBhdCB0aGUgKi8KKyAgLyogbW9tZW50LCBJIGRvIG5vdCB3aXNoIHRvIGZpZ3VyZS1vdXQgYWxsIHRoZSAgZm9ybWF0dGluZywgc28gSSB3aWxsICovCisgIC8qIGp1c3QgcHV0IHRoaXMgY29tbWVudCBoZXJlIHRvIGhlbHAgcmVtaW5kIG1lIHRoYXQgaXQgaXMgc29tZXRoaW5nICovCisgIC8qIHRoYXQgc2hvdWxkIGJlIGRvbmUgYXQgYSBsYXRlciB0aW1lLiAqLworICAKKyAgaWYgKHZlcmJvc2l0eSA+IDEpIHsKKyAgICAvKiBUaGUgdXNlciB3YW50ZWQgdG8ga25vdyBpdCBhbGwsIHNvIHdlIHdpbGwgZ2l2ZSBpdCB0byBoaW0uICovCisgICAgLyogVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluY2x1ZGUgYXMgbXVjaCBhcyB3ZSBjYW4gZmluZCBhYm91dCAqLworICAgIC8qIFRDUCBzdGF0aXN0aWNzLCB0aGUgYWxpZ25tZW50cyBvZiB0aGUgc2VuZHMgYW5kIHJlY2VpdmVzICovCisgICAgLyogYW5kIGFsbCB0aGF0IHNvcnQgb2Ygcm90Li4uICovCisgICAgCisgICAgZnByaW50Zih3aGVyZSwKKwkgICAga3NpbmtfZm10KTsKKyAgfQorICAKK30KKworDAordm9pZCAKK3JlY3ZfeHRpX3RjcF9jb25uX3JyKCkKK3sKKyAgCisgIGNoYXIgICptZXNzYWdlOworICBzdHJ1Y3QJc29ja2FkZHJfaW4gICAgICAgIG15YWRkcl9pbiwKKyAgcGVlcmFkZHJfaW47CisgIFNPQ0tFVCBzX2xpc3RlbixzX2RhdGE7CisgIGludCAJYWRkcmxlbjsKKyAgY2hhcgkqcmVjdl9tZXNzYWdlX3B0cjsKKyAgY2hhcgkqc2VuZF9tZXNzYWdlX3B0cjsKKyAgY2hhcgkqdGVtcF9tZXNzYWdlX3B0cjsKKyAgaW50CXRyYW5zX3JlY2VpdmVkOworICBpbnQJdHJhbnNfcmVtYWluaW5nOworICBpbnQJYnl0ZXNfc2VudDsKKyAgaW50CXJlcXVlc3RfYnl0ZXNfcmVjdmQ7CisgIGludAlyZXF1ZXN0X2J5dGVzX3JlbWFpbmluZzsKKyAgaW50CXRpbWVkX291dCA9IDA7CisgIGZsb2F0CWVsYXBzZWRfdGltZTsKKyAgCisgIHN0cnVjdAl4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdF9zdHJ1Y3QJKnh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0OworICBzdHJ1Y3QJeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlX3N0cnVjdAkqeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlOworICBzdHJ1Y3QJeHRpX3RjcF9jb25uX3JyX3Jlc3VsdHNfc3RydWN0CSp4dGlfdGNwX2Nvbm5fcnJfcmVzdWx0czsKKyAgCisgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0ID0gCisgICAgKHN0cnVjdCB4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdF9zdHJ1Y3QgKiluZXRwZXJmX3JlcXVlc3QuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHh0aV90Y3BfY29ubl9ycl9yZXNwb25zZSA9IAorICAgIChzdHJ1Y3QgeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlX3N0cnVjdCAqKW5ldHBlcmZfcmVzcG9uc2UuY29udGVudC50ZXN0X3NwZWNpZmljX2RhdGE7CisgIHh0aV90Y3BfY29ubl9ycl9yZXN1bHRzID0gCisgICAgKHN0cnVjdCB4dGlfdGNwX2Nvbm5fcnJfcmVzdWx0c19zdHJ1Y3QgKiluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQudGVzdF9zcGVjaWZpY19kYXRhOworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwibmV0c2VydmVyOiByZWN2X3h0aV90Y3BfY29ubl9ycjogZW50ZXJlZC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogV2Ugd2FudCB0byBzZXQtdXAgdGhlIGxpc3RlbiBzb2NrZXQgd2l0aCBhbGwgdGhlIGRlc2lyZWQgKi8KKyAgLyogcGFyYW1ldGVycyBhbmQgdGhlbiBsZXQgdGhlIGluaXRpYXRvciBrbm93IHRoYXQgYWxsIGlzIHJlYWR5LiBJZiAqLworICAvKiBzb2NrZXQgc2l6ZSBkZWZhdWx0cyBhcmUgdG8gYmUgdXNlZCwgdGhlbiB0aGUgaW5pdGlhdG9yIHdpbGwgaGF2ZSAqLworICAvKiBzZW50IHVzIDAncy4gSWYgdGhlIHNvY2tldCBzaXplcyBjYW5ub3QgYmUgY2hhbmdlZCwgdGhlbiB3ZSB3aWxsICovCisgIC8qIHNlbmQtYmFjayB3aGF0IHRoZXkgYXJlLiBJZiB0aGF0IGluZm9ybWF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCAqLworICAvKiB0aGVuIHdlIHNlbmQtYmFjayAtMSdzIGZvciB0aGUgc2l6ZXMuIElmIHRoaW5ncyBnbyB3cm9uZyBmb3IgYW55ICovCisgIC8qIHJlYXNvbiwgd2Ugd2lsbCBkcm9wIGJhY2sgdGVuIHlhcmRzIGFuZCBwdW50LiAqLworICAKKyAgLyogSWYgYW55dGhpbmcgZ29lcyB3cm9uZywgd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGtub3cgYWJvdXQgaXQuIEl0ICovCisgIC8qIHdvdWxkIGJlIGJlc3QgaWYgdGhlIGVycm9yIHRoYXQgdGhlIHJlbW90ZSByZXBvcnRzIHRvIHRoZSB1c2VyIGlzICovCisgIC8qIHRoZSBhY3R1YWwgZXJyb3Igd2UgZW5jb3VudGVyZWQsIHJhdGhlciB0aGFuIHNvbWUgYm9ndXMgdW5leHBlY3RlZCAqLworICAvKiByZXNwb25zZSB0eXBlIG1lc3NhZ2UuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLCJyZWN2X3h0aV90Y3BfY29ubl9ycjogc2V0dGluZyB0aGUgcmVzcG9uc2UgdHlwZS4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnJlc3BvbnNlX3R5cGUgPSBYVElfVENQX0NSUl9SRVNQT05TRTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3RjcF9jb25uX3JyOiB0aGUgcmVzcG9uc2UgdHlwZSBpcyBzZXQuLi5cbiIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKworICAvKiBzZXQtdXAgdGhlIGRhdGEgYnVmZmVyIHdpdGggdGhlIHJlcXVlc3RlZCBhbGlnbm1lbnQgYW5kIG9mZnNldCAqLworICBtZXNzYWdlID0gKGNoYXIgKiltYWxsb2MoREFUQUJVRkZFUkxFTik7CisgIGlmIChtZXNzYWdlID09IE5VTEwpIHsKKyAgICBwcmludGYoIm1hbGxvYyglZCkgZmFpbGVkIVxuIiwgREFUQUJVRkZFUkxFTik7CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogV2Ugbm93IGFsdGVyIHRoZSBtZXNzYWdlX3B0ciB2YXJpYWJsZXMgdG8gYmUgYXQgdGhlIGRlc2lyZWQgKi8KKyAgLyogYWxpZ25tZW50cyB3aXRoIHRoZSBkZXNpcmVkIG9mZnNldHMuICovCisgIAorICBpZiAoZGVidWcpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdGNwX2Nvbm5fcnI6IHJlcXVlc3RlZCByZWN2IGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZWN2X2FsaWdubWVudCwKKwkgICAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnJlY3Zfb2Zmc2V0KTsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAicmVjdl94dGlfdGNwX2Nvbm5fcnI6IHJlcXVlc3RlZCBzZW5kIGFsaWdubWVudCBvZiAlZCBvZmZzZXQgJWRcbiIsCisJICAgIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwKKwkgICAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgcmVjdl9tZXNzYWdlX3B0ciA9IEFMSUdOX0JVRkZFUihtZXNzYWdlLCB4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdC0+cmVjdl9hbGlnbm1lbnQsIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZWN2X29mZnNldCk7CisgIAorICBzZW5kX21lc3NhZ2VfcHRyID0gQUxJR05fQlVGRkVSKG1lc3NhZ2UsIHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5zZW5kX2FsaWdubWVudCwgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnNlbmRfb2Zmc2V0KTsKKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3RjcF9jb25uX3JyOiByZWNlaXZlIGFsaWdubWVudCBhbmQgb2Zmc2V0IHNldC4uLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgLyogTGV0J3MgY2xlYXItb3V0IG91ciBzb2NrYWRkciBmb3IgdGhlIHNha2Ugb2YgY2xlYW5saW5lcy4gVGhlbiB3ZSAqLworICAvKiBjYW4gcHV0IGluIE9VUiB2YWx1ZXMgIS0pIEF0IHNvbWUgcG9pbnQsIHdlIG1heSB3YW50IHRvIG5haWwgdGhpcyAqLworICAvKiBzb2NrZXQgdG8gYSBwYXJ0aWN1bGFyIG5ldHdvcmstbGV2ZWwgYWRkcmVzcywgYnV0IGZvciBub3csICovCisgIC8qIElOQUREUl9BTlkgc2hvdWxkIGJlIGp1c3QgZmluZS4gKi8KKyAgCisgIGJ6ZXJvKChjaGFyICopJm15YWRkcl9pbiwKKwlzaXplb2YobXlhZGRyX2luKSk7CisgIG15YWRkcl9pbi5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOworICBteWFkZHJfaW4uc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyAgbXlhZGRyX2luLnNpbl9wb3J0ICAgICAgICA9IDA7CisgIAorICAvKiBHcmFiIGEgc29ja2V0IHRvIGxpc3RlbiBvbiwgYW5kIHRoZW4gbGlzdGVuIG9uIGl0LiAqLworICAKKyAgaWYgKGRlYnVnKSB7CisgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdGNwX2Nvbm5fcnI6IGdyYWJiaW5nIGEgc29ja2V0Li4uXG4iKTsKKyAgICBmZmx1c2god2hlcmUpOworICB9CisKKyAgLyogY3JlYXRlX3h0aV9lbmRwb2ludCBleHBlY3RzIHRvIGZpbmQgc29tZSB0aGluZ3MgaW4gdGhlIGdsb2JhbCAqLworICAvKiB2YXJpYWJsZXMsIHNvIHNldCB0aGUgZ2xvYmFscyBiYXNlZCBvbiB0aGUgdmFsdWVzIGluIHRoZSByZXF1ZXN0LiAqLworICAvKiBvbmNlIHRoZSBzb2NrZXQgaGFzIGJlZW4gY3JlYXRlZCwgd2Ugd2lsbCBzZXQgdGhlIHJlc3BvbnNlIHZhbHVlcyAqLworICAvKiBiYXNlZCBvbiB0aGUgdXBkYXRlZCB2YWx1ZSBvZiB0aG9zZSBnbG9iYWxzLiByYWogNy85NCAqLworICBsc3Nfc2l6ZSA9IHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5zZW5kX2J1Zl9zaXplOworICBsc3Jfc2l6ZSA9IHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZWN2X2J1Zl9zaXplOworICBsb2Nfbm9kZWxheSA9IHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5ub19kZWxheTsKKyAgbG9jX3JjdmF2b2lkID0geHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnNvX3JjdmF2b2lkOworICBsb2Nfc25kYXZvaWQgPSB4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdC0+c29fc25kYXZvaWQ7CisgIAorICBzX2xpc3RlbiA9IGNyZWF0ZV94dGlfZW5kcG9pbnQobG9jX3h0aV9kZXZpY2UpOworICAKKyAgaWYgKHNfbGlzdGVuID09IElOVkFMSURfU09DS0VUKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgY3JlYXRlIGRhdGEgc29ja2V0XG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGV4aXQoMSk7CisgIH0KKworICAvKiBMZXQncyBnZXQgYW4gYWRkcmVzcyBhc3NpZ25lZCB0byB0aGlzIHNvY2tldCBzbyB3ZSBjYW4gdGVsbCB0aGUgKi8KKyAgLyogaW5pdGlhdG9yIGhvdyB0byByZWFjaCB0aGUgZGF0YSBzb2NrZXQuIFRoZXJlIG1heSBiZSBhIGRlc2lyZSB0byAqLworICAvKiBuYWlsIHRoaXMgc29ja2V0IHRvIGEgc3BlY2lmaWMgSVAgYWRkcmVzcyBpbiBhIG11bHRpLWhvbWVkLCAqLworICAvKiBtdWx0aS1jb25uZWN0aW9uIHNpdHVhdGlvbiwgYnV0IGZvciBub3csIHdlJ2xsIGlnbm9yZSB0aGUgaXNzdWUgKi8KKyAgLyogYW5kIGNvbmNlbnRyYXRlIG9uIHNpbmdsZSBjb25uZWN0aW9uIHRlc3RpbmcuICovCisgIAorICBpZiAoYmluZChzX2xpc3RlbiwKKwkgICAoc3RydWN0IHNvY2thZGRyICopJm15YWRkcl9pbiwKKwkgICBzaXplb2YobXlhZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSBlcnJubzsKKyAgICBjbG9zZShzX2xpc3Rlbik7CisgICAgc2VuZF9yZXNwb25zZSgpOworICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwiY291bGQgbm90IGJpbmRcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgZXhpdCgxKTsKKyAgfQorCisgIC8qIE5vdywgbGV0J3Mgc2V0LXVwIHRoZSBzb2NrZXQgdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucyAqLworICBpZiAobGlzdGVuKHNfbGlzdGVuLCA1KSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBuZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICBzZW5kX3Jlc3BvbnNlKCk7CisgICAgaWYgKGRlYnVnKSB7CisgICAgICBmcHJpbnRmKHdoZXJlLCJjb3VsZCBub3QgbGlzdGVuXG4iKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorICAgIGV4aXQoMSk7CisgIH0KKyAgCisgIC8qIG5vdyBnZXQgdGhlIHBvcnQgbnVtYmVyIGFzc2lnbmVkIGJ5IHRoZSBzeXN0ZW0gICovCisgIGFkZHJsZW4gPSBzaXplb2YobXlhZGRyX2luKTsKKyAgaWYgKGdldHNvY2tuYW1lKHNfbGlzdGVuLAorCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXlhZGRyX2luLAorCQkgICZhZGRybGVuKSA9PSBTT0NLRVRfRVJST1IpeworICAgIG5ldHBlcmZfcmVzcG9uc2UuY29udGVudC5zZXJ2X2Vycm5vID0gZXJybm87CisgICAgY2xvc2Uoc19saXN0ZW4pOworICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICBpZiAoZGVidWcpIHsKKyAgICAgIGZwcmludGYod2hlcmUsImNvdWxkIG5vdCBnZWV0c29ja25hbWVcbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgICAgZXhpdCgxKTsKKyAgfQorICAKKyAgLyogTm93IG15YWRkcl9pbiBjb250YWlucyB0aGUgcG9ydCBhbmQgdGhlIGludGVybmV0IGFkZHJlc3MgdGhpcyBpcyAqLworICAvKiByZXR1cm5lZCB0byB0aGUgc2VuZGVyIGFsc28gaW1wbGljaXRseSB0ZWxsaW5nIHRoZSBzZW5kZXIgdGhhdCB0aGUgKi8KKyAgLyogc29ja2V0IGJ1ZmZlciBzaXppbmcgaGFzIGJlZW4gZG9uZS4gKi8KKyAgCisgIHh0aV90Y3BfY29ubl9ycl9yZXNwb25zZS0+ZGF0YV9wb3J0X251bWJlciA9IChpbnQpIG50b2hzKG15YWRkcl9pbi5zaW5fcG9ydCk7CisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsInRlbGxpbmcgdGhlIHJlbW90ZSB0byBjYWxsIG1lIGF0ICVkXG4iLAorCSAgICB4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPmRhdGFfcG9ydF9udW1iZXIpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gICA9IDA7CisgIAorICAvKiBCdXQgd2FpdCwgdGhlcmUncyBtb3JlLiBJZiB0aGUgaW5pdGlhdG9yIHdhbnRlZCBjcHUgbWVhc3VyZW1lbnRzLCAqLworICAvKiB0aGVuIHdlIG11c3QgY2FsbCB0aGUgY2FsaWJyYXRlIHJvdXRpbmUsIHdoaWNoIHdpbGwgcmV0dXJuIHRoZSBtYXggKi8KKyAgLyogcmF0ZSBiYWNrIHRvIHRoZSBpbml0aWF0b3IuIElmIHRoZSBDUFUgd2FzIG5vdCB0byBiZSBtZWFzdXJlZCwgb3IgKi8KKyAgLyogc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgY2FsaWJyYXRpb24sIHdlIHdpbGwgcmV0dXJuIGEgMC4wIHRvICovCisgIC8qIHRoZSBpbml0aWF0b3IuICovCisgIAorICB4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPmNwdV9yYXRlID0gMC4wOyAJLyogYXNzdW1lIG5vIGNwdSAqLworICBpZiAoeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1KSB7CisgICAgeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlLT5tZWFzdXJlX2NwdSA9IDE7CisgICAgeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlLT5jcHVfcmF0ZSA9IAorICAgICAgY2FsaWJyYXRlX2xvY2FsX2NwdSh4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdC0+Y3B1X3JhdGUpOworICB9CisgIAorCisgIAorICAvKiBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVzcG9uc2UgYmFjayB0byB0aGUgaW5pdGlhdG9yLCBwdWxsIHNvbWUgb2YgKi8KKyAgLyogdGhlIHNvY2tldCBwYXJtcyBmcm9tIHRoZSBnbG9iYWxzICovCisgIHh0aV90Y3BfY29ubl9ycl9yZXNwb25zZS0+c2VuZF9idWZfc2l6ZSA9IGxzc19zaXplOworICB4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPnJlY3ZfYnVmX3NpemUgPSBsc3Jfc2l6ZTsKKyAgeHRpX3RjcF9jb25uX3JyX3Jlc3BvbnNlLT5ub19kZWxheSA9IGxvY19ub2RlbGF5OworICB4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPnNvX3JjdmF2b2lkID0gbG9jX3JjdmF2b2lkOworICB4dGlfdGNwX2Nvbm5fcnJfcmVzcG9uc2UtPnNvX3NuZGF2b2lkID0gbG9jX3NuZGF2b2lkOworCisgIHNlbmRfcmVzcG9uc2UoKTsKKyAgCisgIGFkZHJsZW4gPSBzaXplb2YocGVlcmFkZHJfaW4pOworICAKKyAgLyogTm93IGl0J3MgdGltZSB0byBzdGFydCByZWNlaXZpbmcgZGF0YSBvbiB0aGUgY29ubmVjdGlvbi4gV2Ugd2lsbCAqLworICAvKiBmaXJzdCBncmFiIHRoZSBhcHJvcHJpYXRlIGNvdW50ZXJzIGFuZCB0aGVuIHN0YXJ0IGdyYWJiaW5nLiAqLworICAKKyAgY3B1X3N0YXJ0KHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5tZWFzdXJlX2NwdSk7CisgIAorICAvKiBUaGUgbG9vcCB3aWxsIGV4aXQgd2hlbiB0aGUgc2VuZGVyIGRvZXMgYSBzaHV0ZG93biwgd2hpY2ggd2lsbCAqLworICAvKiByZXR1cm4gYSBsZW5ndGggb2YgemVybyAgICovCisgIAorICBpZiAoeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoID4gMCkgeworICAgIHRpbWVzX3VwID0gMDsKKyAgICB0cmFuc19yZW1haW5pbmcgPSAwOworICAgIHN0YXJ0X3RpbWVyKHh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT50ZXN0X2xlbmd0aCArIFBBRF9USU1FKTsKKyAgfQorICBlbHNlIHsKKyAgICB0aW1lc191cCA9IDE7CisgICAgdHJhbnNfcmVtYWluaW5nID0geHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnRlc3RfbGVuZ3RoICogLTE7CisgIH0KKyAgCisgIHRyYW5zX3JlY2VpdmVkID0gMDsKKworICB3aGlsZSAoKCF0aW1lc191cCkgfHwgKHRyYW5zX3JlbWFpbmluZyA+IDApKSB7CisKKyAgICAvKiBhY2NlcHQgYSBjb25uZWN0aW9uIGZyb20gdGhlIHJlbW90ZSAqLworICAgIGlmICgoc19kYXRhPWFjY2VwdChzX2xpc3RlbiwKKwkJICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmcGVlcmFkZHJfaW4sCisJCSAgICAgICAmYWRkcmxlbikpID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkvKiB0aGUgdGltZXIgcG9wcGVkICovCisJdGltZWRfb3V0ID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGZwcmludGYod2hlcmUsInJlY3ZfeHRpX3RjcF9jb25uX3JyOiBhY2NlcHQ6IGVycm5vID0gJWRcbiIsZXJybm8pOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICAgIGNsb3NlKHNfbGlzdGVuKTsKKyAgICAgIAorICAgICAgZXhpdCgxKTsKKyAgICB9CisgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwicmVjdl94dGlfdGNwX2Nvbm5fcnI6IGFjY2VwdGVkIGRhdGEgY29ubmVjdGlvbi5cbiIpOworICAgICAgZmZsdXNoKHdoZXJlKTsKKyAgICB9CisgIAorICAgIHRlbXBfbWVzc2FnZV9wdHIJPSByZWN2X21lc3NhZ2VfcHRyOworICAgIHJlcXVlc3RfYnl0ZXNfcmVtYWluaW5nCT0geHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZTsKKyAgICAKKyAgICAvKiByZWNlaXZlIHRoZSByZXF1ZXN0IGZyb20gdGhlIG90aGVyIHNpZGUgKi8KKyAgICB3aGlsZShyZXF1ZXN0X2J5dGVzX3JlbWFpbmluZyA+IDApIHsKKyAgICAgIGlmKChyZXF1ZXN0X2J5dGVzX3JlY3ZkPXJlY3Yoc19kYXRhLAorCQkJCSAgIHRlbXBfbWVzc2FnZV9wdHIsCisJCQkJICAgcmVxdWVzdF9ieXRlc19yZW1haW5pbmcsCisJCQkJICAgMCkpID09IFNPQ0tFVF9FUlJPUikgeworCWlmIChlcnJubyA9PSBFSU5UUikgeworCSAgLyogdGhlIHRpbWVyIHBvcHBlZCAqLworCSAgdGltZWRfb3V0ID0gMTsKKwkgIGJyZWFrOworCX0KKwluZXRwZXJmX3Jlc3BvbnNlLmNvbnRlbnQuc2Vydl9lcnJubyA9IGVycm5vOworCXNlbmRfcmVzcG9uc2UoKTsKKwlleGl0KDEpOworICAgICAgfQorICAgICAgZWxzZSB7CisJcmVxdWVzdF9ieXRlc19yZW1haW5pbmcgLT0gcmVxdWVzdF9ieXRlc19yZWN2ZDsKKwl0ZW1wX21lc3NhZ2VfcHRyICArPSByZXF1ZXN0X2J5dGVzX3JlY3ZkOworICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAodGltZWRfb3V0KSB7CisgICAgICAvKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBiYXNlZCBvbiB0aW1lIC0gbGV0cyAqLworICAgICAgLyogYmFpbCBvdXQgb2YgaGVyZSBub3cuLi4gKi8KKyAgICAgIGZwcmludGYod2hlcmUsInlvNVxuIik7CisgICAgICBmZmx1c2god2hlcmUpOwkJCQkJCQorICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIC8qIE5vdywgc2VuZCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSAqLworICAgIGlmKChieXRlc19zZW50PXNlbmQoc19kYXRhLAorCQkJc2VuZF9tZXNzYWdlX3B0ciwKKwkJCXh0aV90Y3BfY29ubl9ycl9yZXF1ZXN0LT5yZXNwb25zZV9zaXplLAorCQkJMCkpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisJLyogdGhlIHRlc3QgdGltZXIgaGFzIHBvcHBlZCAqLworCXRpbWVkX291dCA9IDE7CisJZnByaW50Zih3aGVyZSwieW82XG4iKTsKKwlmZmx1c2god2hlcmUpOwkJCQkJCQorCWJyZWFrOworICAgICAgfQorICAgICAgbmV0cGVyZl9yZXNwb25zZS5jb250ZW50LnNlcnZfZXJybm8gPSA5OTsKKyAgICAgIHNlbmRfcmVzcG9uc2UoKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIAorICAgIHRyYW5zX3JlY2VpdmVkKys7CisgICAgaWYgKHRyYW5zX3JlbWFpbmluZykgeworICAgICAgdHJhbnNfcmVtYWluaW5nLS07CisgICAgfQorICAgIAorICAgIGlmIChkZWJ1ZykgeworICAgICAgZnByaW50Zih3aGVyZSwKKwkgICAgICAicmVjdl94dGlfdGNwX2Nvbm5fcnI6IFRyYW5zYWN0aW9uICVkIGNvbXBsZXRlXG4iLAorCSAgICAgIHRyYW5zX3JlY2VpdmVkKTsKKyAgICAgIGZmbHVzaCh3aGVyZSk7CisgICAgfQorCisgICAgLyogY2xvc2UgdGhlIGNvbm5lY3Rpb24gKi8KKyAgICBjbG9zZShzX2RhdGEpOworCisgIH0KKyAgCisgIAorICAvKiBUaGUgbG9vcCBub3cgZXhpdHMgZHVlIHRvIHRpbWVvdXQgb3IgdHJhbnNhY3Rpb24gY291bnQgYmVpbmcgKi8KKyAgLyogcmVhY2hlZCAqLworICAKKyAgY3B1X3N0b3AoeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPm1lYXN1cmVfY3B1LCZlbGFwc2VkX3RpbWUpOworICAKKyAgaWYgKHRpbWVkX291dCkgeworICAgIC8qIHdlIGVuZGVkIHRoZSB0ZXN0IGJ5IHRpbWUsIHdoaWNoIHdhcyBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyAgICAvKiBsb25nZXIgdGhhbiB3ZSB3YW50ZWQgdG8gcnVuLiBzbywgd2Ugd2FudCB0byBzdWJ0cmFjdCAqLworICAgIC8qIFBBRF9USU1FIGZyb20gdGhlIGVsYXBzZWRfdGltZS4gKi8KKyAgICBlbGFwc2VkX3RpbWUgLT0gUEFEX1RJTUU7CisgIH0KKyAgLyogc2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgc2VuZGVyCQkJKi8KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3BfY29ubl9ycjogZ290ICVkIHRyYW5zYWN0aW9uc1xuIiwKKwkgICAgdHJhbnNfcmVjZWl2ZWQpOworICAgIGZmbHVzaCh3aGVyZSk7CisgIH0KKyAgCisgIHh0aV90Y3BfY29ubl9ycl9yZXN1bHRzLT5ieXRlc19yZWNlaXZlZAk9ICh0cmFuc19yZWNlaXZlZCAqIAorCQkJCQkgICAoeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnJlcXVlc3Rfc2l6ZSArIAorCQkJCQkgICAgeHRpX3RjcF9jb25uX3JyX3JlcXVlc3QtPnJlc3BvbnNlX3NpemUpKTsKKyAgeHRpX3RjcF9jb25uX3JyX3Jlc3VsdHMtPnRyYW5zX3JlY2VpdmVkCT0gdHJhbnNfcmVjZWl2ZWQ7CisgIHh0aV90Y3BfY29ubl9ycl9yZXN1bHRzLT5lbGFwc2VkX3RpbWUJPSBlbGFwc2VkX3RpbWU7CisgIGlmICh4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdC0+bWVhc3VyZV9jcHUpIHsKKyAgICB4dGlfdGNwX2Nvbm5fcnJfcmVzdWx0cy0+Y3B1X3V0aWwJPSBjYWxjX2NwdV91dGlsKGVsYXBzZWRfdGltZSk7CisgIH0KKyAgCisgIGlmIChkZWJ1ZykgeworICAgIGZwcmludGYod2hlcmUsCisJICAgICJyZWN2X3h0aV90Y3BfY29ubl9ycjogdGVzdCBjb21wbGV0ZSwgc2VuZGluZyByZXN1bHRzLlxuIik7CisgICAgZmZsdXNoKHdoZXJlKTsKKyAgfQorICAKKyAgc2VuZF9yZXNwb25zZSgpOworICAKK30KKwwKK3ZvaWQKK3ByaW50X3h0aV91c2FnZSgpCit7CisKKyAgZndyaXRlKHh0aV91c2FnZSwgc2l6ZW9mKGNoYXIpLCBzdHJsZW4oeHRpX3VzYWdlKSwgc3Rkb3V0KTsKKyAgZXhpdCgxKTsKKworfQorCit2b2lkCitzY2FuX3h0aV9hcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisjZGVmaW5lIFhUSV9BUkdTICJEaG06TTpyOnM6UzpWdzpXOlg6IgorICBleHRlcm4gaW50CW9wdGluZCwgb3B0ZXJyczsgIC8qIGluZGV4IG9mIGZpcnN0IHVudXNlZCBhcmcgCSovCisgIGV4dGVybiBjaGFyCSpvcHRhcmc7CSAgLyogcG9pbnRlciB0byBvcHRpb24gc3RyaW5nCSovCisgIAorICBpbnQJCWM7CisgIAorICBjaGFyCQorICAgIGFyZzFbQlVGU0laXSwgIC8qIGFyZ3VtZW50IGhvbGRlcnMJCSovCisgICAgYXJnMltCVUZTSVpdOworICAKKyAgaWYgKG5vX2NvbnRyb2wpIHsKKyAgICBmcHJpbnRmKHdoZXJlLAorCSAgICAiVGhlIFhUSSB0ZXN0cyBkbyBub3Qga25vdyBob3cgdG8gcnVuIHdpdGggbm8gY29udHJvbCBjb25uZWN0aW9uXG4iKTsKKyAgICBleGl0KC0xKTsKKyAgfQorCisgIC8qIEdvIHRocm91Z2ggYWxsIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBicmVhayB0aGVtICovCisgIC8qIG91dC4gRm9yIHRob3NlIG9wdGlvbnMgdGhhdCB0YWtlIHR3byBwYXJtcywgc3BlY2lmeWluZyBvbmx5ICovCisgIC8qIHRoZSBmaXJzdCB3aWxsIHNldCBib3RoIHRvIHRoYXQgdmFsdWUuIFNwZWNpZnlpbmcgb25seSB0aGUgKi8KKyAgLyogc2Vjb25kIHdpbGwgbGVhdmUgdGhlIGZpcnN0IHVudG91Y2hlZC4gVG8gY2hhbmdlIG9ubHkgdGhlICovCisgIC8qIGZpcnN0LCB1c2UgdGhlIGZvcm0gImZpcnN0LCIgKHNlZSB0aGUgcm91dGluZSBicmVha19hcmdzLi4gKi8KKyAgCisgIHdoaWxlICgoYz0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIFhUSV9BUkdTKSkgIT0gRU9GKSB7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnPyc6CQorICAgIGNhc2UgJ2gnOgorICAgICAgcHJpbnRfeHRpX3VzYWdlKCk7CisgICAgICBleGl0KDEpOworICAgIGNhc2UgJ0QnOgorICAgICAgLyogc2V0IHRoZSBUQ1Agbm9kZWxheSBmbGFnICovCisgICAgICBsb2Nfbm9kZWxheSA9IDE7CisgICAgICByZW1fbm9kZWxheSA9IDE7CisgICAgICBicmVhazsKKyAgICBjYXNlICdzJzoKKyAgICAgIC8qIHNldCBsb2NhbCBzb2NrZXQgc2l6ZXMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlsc3Nfc2l6ZSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkKKwlsc3Jfc2l6ZSA9IGNvbnZlcnQoYXJnMik7CisgICAgICBicmVhazsKKyAgICBjYXNlICdTJzoKKyAgICAgIC8qIHNldCByZW1vdGUgc29ja2V0IHNpemVzICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJcnNzX3NpemUgPSBjb252ZXJ0KGFyZzEpOworICAgICAgaWYgKGFyZzJbMF0pCisJcnNyX3NpemUgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6CisgICAgICAvKiBzZXQgdGhlIHJlcXVlc3QvcmVzcG9uc2Ugc2l6ZXMgKi8KKyAgICAgIGJyZWFrX2FyZ3Mob3B0YXJnLGFyZzEsYXJnMik7CisgICAgICBpZiAoYXJnMVswXSkKKwlyZXFfc2l6ZSA9IGNvbnZlcnQoYXJnMSk7CisgICAgICBpZiAoYXJnMlswXSkJCisJcnNwX3NpemUgPSBjb252ZXJ0KGFyZzIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgICAvKiBzZXQgdGhlIHNlbmQgc2l6ZSAqLworICAgICAgc2VuZF9zaXplID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgICAvKiBzZXQgdGhlIHJlY3Ygc2l6ZSAqLworICAgICAgcmVjdl9zaXplID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVyc6CisgICAgICAvKiBzZXQgdGhlICJ3aWR0aCIgb2YgdGhlIHVzZXIgc3BhY2UgZGF0YSAqLworICAgICAgLyogYnVmZmVyLiBUaGlzIHdpbGwgYmUgdGhlIG51bWJlciBvZiAqLworICAgICAgLyogc2VuZF9zaXplIGJ1ZmZlcnMgbWFsbG9jJ2QgaW4gdGhlICovCisgICAgICAvKiAqX1NUUkVBTSB0ZXN0LiBJdCBtYXkgYmUgZW5oYW5jZWQgdG8gc2V0ICovCisgICAgICAvKiBib3RoIHNlbmQgYW5kIHJlY2VpdmUgIndpZHRocyIgYnV0IGZvciBub3cgKi8KKyAgICAgIC8qIGl0IGlzIGp1c3QgdGhlIHNlbmRpbmcgKl9TVFJFQU0uICovCisgICAgICBzZW5kX3dpZHRoID0gY29udmVydChvcHRhcmcpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnVicgOgorICAgICAgLyogd2Ugd2FudCB0byBkbyBjb3B5IGF2b2lkYW5jZSBhbmQgd2lsbCBzZXQgKi8KKyAgICAgIC8qIGl0IGZvciBldmVyeXRoaW5nLCBldmVyeXdoZXJlLCBpZiB3ZSByZWFsbHkgKi8KKyAgICAgIC8qIGNhbi4gb2YgY291cnNlLCB3ZSBkb24ndCBrbm93IGFueXRoaW5nICovCisgICAgICAvKiBhYm91dCB0aGUgcmVtb3RlLi4uICovCisjaWZkZWYgU09fU05EX0NPUFlBVk9JRAorICAgICAgbG9jX3NuZGF2b2lkID0gMTsKKyNlbHNlCisgICAgICBsb2Nfc25kYXZvaWQgPSAwOworICAgICAgcHJpbnRmKCJMb2NhbCBzZW5kIGNvcHkgYXZvaWRhbmNlIG5vdCBhdmFpbGFibGUuXG4iKTsKKyNlbmRpZgorI2lmZGVmIFNPX1JDVl9DT1BZQVZPSUQKKyAgICAgIGxvY19yY3Zhdm9pZCA9IDE7CisjZWxzZQorICAgICAgbG9jX3JjdmF2b2lkID0gMDsKKyAgICAgIHByaW50ZigiTG9jYWwgcmVjdiBjb3B5IGF2b2lkYW5jZSBub3QgYXZhaWxhYmxlLlxuIik7CisjZW5kaWYKKyAgICAgIHJlbV9zbmRhdm9pZCA9IDE7CisgICAgICByZW1fcmN2YXZvaWQgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnWCc6CisgICAgICAvKiBzZXQgdGhlIHh0aSBkZXZpY2UgZmlsZSBuYW1lKHMpICovCisgICAgICBicmVha19hcmdzKG9wdGFyZyxhcmcxLGFyZzIpOworICAgICAgaWYgKGFyZzFbMF0pCisJc3RyY3B5KGxvY194dGlfZGV2aWNlLGFyZzEpOworICAgICAgaWYgKGFyZzJbMF0pCisJc3RyY3B5KHJlbV94dGlfZGV2aWNlLGFyZzIpOworICAgICAgYnJlYWs7CisgICAgfTsKKyAgfQorfQorI2VuZGlmIC8qIFdBTlRfWFRJICovCmRpZmYgLS1naXQgYS9uZXRwZXJmLTIuNC41L3NyYy9uZXR0ZXN0X3h0aS5oIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF94dGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmY5OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0cGVyZi0yLjQuNS9zcmMvbmV0dGVzdF94dGkuaApAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqICAgICAgIENvcHlyaWdodCAoQykgMTk5NSwyMDA0IEhld2xldHQtUGFja2FyZCBDb21wYW55CisgKi8KKworIC8qIFRoaXMgZmlsZSBjb250YWlucyB0aGUgdGVzdC1zcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbmV0cGVyZidzIEJTRCAqLworIC8qIHNvY2tldHMgdGVzdHMgKi8KKworc3RydWN0CXh0aV90Y3Bfc3RyZWFtX3JlcXVlc3Rfc3RydWN0IHsKKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0IC0gdGhlICovCisJCQkvKiByZWNlaXZlIHNvY2tldCBidWZmZXIgdGhhdCBpcyAqLyAKKyAgaW50CXJlY2VpdmVfc2l6ZTsgICAvKiBob3cgbWFueSBieXRlcyBkbyB3ZSB3YW50IHRvIHJlY2VpdmUgYXQgb25lICovCisJCQkvKiB0aW1lPyAqLyAKKyAgaW50CXJlY3ZfYWxpZ25tZW50OyAvKiB3aGF0IGlzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHJlY2VpdmUgKi8KKwkJCS8qIGJ1ZmZlcj8gKi8gCisgIGludAlyZWN2X29mZnNldDsgICAgLyogYW5kIGF0IHdoYXQgb2Zmc2V0IGZyb20gdGhhdCBhbGlnbm1lbnQ/ICovIAorICBpbnQJbm9fZGVsYXk7ICAgICAgIC8qIGRvIHdlIGRpc2FibGUgdGhlIG5hZ2xlIGFsZ29yaXRobSBmb3Igc2VuZCAqLworCQkJLyogY29hbGVzY2luZz8gKi8gCisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdSB1dGlsaXphdGlvbiAqLworCQkJLyogbWVhc3VyZWQ/ICovIAorICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzIGFscmVhZHk/ICovIAorICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgY29waWVzIG9uICovCisJCQkvKiByZWNlaXZlcz8gKi8gCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBkaXJ0eV9jb3VudDsgICAgLyogaG93IG1hbnkgaW50ZWdlcnMgaW4gdGhlIHJlY2VpdmUgYnVmZmVyICovCisJCQkvKiBzaG91bGQgYmUgbWFkZSBkaXJ0eSBiZWZvcmUgY2FsbGluZyByZWN2PyAqLyAgCisgIGludCAgIGNsZWFuX2NvdW50OyAgICAvKiBob3cgbWFueSBpbnRlZ2VycyBzaG91bGQgYmUgcmVhZCBmcm9tIHRoZSAqLworCQkJLyogcmVjdiBidWZmZXIgYmVmb3JlIGNhbGxpbmcgcmVjdj8gKi8gCisgIGludCAgIGRldl9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgeHRpX2RldmljZVszMl07IC8qIHRoZSBwYXRoIHRvIHRoZSBkbHBpIGRldmljZSAqLworfTsKKworc3RydWN0CXh0aV90Y3Bfc3RyZWFtX3Jlc3BvbnNlX3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlyZWNlaXZlX3NpemU7CisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CS8qIGNvbm5lY3QgdG8gbWUgaGVyZQkqLworICBmbG9hdAljcHVfcmF0ZTsJCS8qIGNvdWxkIHdlIG1lYXN1cmUJKi8KKyAgaW50CXNvX3JjdmF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHJlY2VpdmUgY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworfTsKKworc3RydWN0IHh0aV90Y3Bfc3RyZWFtX3Jlc3VsdHNfc3RydWN0IHsKKyAgZG91YmxlICAgICAgICAgYnl0ZXNfcmVjZWl2ZWQ7CisgIHVuc2lnbmVkIGludAkgcmVjdl9jYWxsczsJCisgIGZsb2F0CSAgICAgICAgIGVsYXBzZWRfdGltZTsJLyogaG93IGxvbmcgdGhlIHRlc3QgcmFuICovCisgIGZsb2F0CSAgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIGNwdSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIHdlcmUgdGhlcmUgKi8KK307CisKK3N0cnVjdAl4dGlfdGNwX3JyX3JlcXVlc3Rfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQJKi8KKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlyZWN2X2FsaWdubWVudDsKKyAgaW50CXJlY3Zfb2Zmc2V0OworICBpbnQJc2VuZF9hbGlnbm1lbnQ7CisgIGludAlzZW5kX29mZnNldDsKKyAgaW50CXJlcXVlc3Rfc2l6ZTsKKyAgaW50CXJlc3BvbnNlX3NpemU7CisgIGludAlub19kZWxheTsKKyAgaW50CW1lYXN1cmVfY3B1OwkvKiBkb2VzIHRoZSBjbGllbnQgd2FudCBzZXJ2ZXIgY3B1CSovCisgIGZsb2F0CWNwdV9yYXRlOwkvKiBkbyB3ZSBrbm93IGhvdyBmYXN0IHRoZSBjcHUgaXM/CSovCisgIGludAl0ZXN0X2xlbmd0aDsJLyogaG93IGxvbmcgaXMgdGhlIHRlc3Q/CQkqLworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCByZWNlaXZlICovCisJCQkvKiBjb3BpZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgZGV2X25hbWVfbGVuOyAgIC8qIHRoZSBsZW5ndGggb2YgdGhlIGRldmljZSBuYW1lIHN0cmluZy4gdGhpcyAqLworCQkJLyogaXMgdXNlZCB0byBwdXQgaXQgaW50byB0aGUgcHJvcGVyIG9yZGVyIG9uICovCisJCQkvKiBAIyQlIGJ5dGUtc3dhcHBlZCBib3hlcy4uLiAqLworICBjaGFyICB4dGlfZGV2aWNlWzMyXTsgLyogdGhlIHBhdGggdG8gdGhlIGRscGkgZGV2aWNlICovCit9OworCitzdHJ1Y3QJeHRpX3RjcF9ycl9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlkYXRhX3BvcnRfbnVtYmVyOwkvKiBjb25uZWN0IHRvIG1lIGhlcmUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludAlzb19yY3Zhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworfTsKKworc3RydWN0IHh0aV90Y3BfcnJfcmVzdWx0c19zdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgIGJ5dGVzX3JlY2VpdmVkOwkvKiBpZ25vcmVkIGluaXRpYWxseSAqLworICB1bnNpZ25lZCBpbnQJcmVjdl9jYWxsczsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXRyYW5zX3JlY2VpdmVkOwkvKiBub3QgaWdub3JlZCAgKi8KKyAgZmxvYXQJICAgICAgICBlbGFwc2VkX3RpbWU7CS8qIGhvdyBsb25nIHRoZSB0ZXN0IHJhbiAqLworICBmbG9hdAkgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICBzZXJ2X2RlbTsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGludCAgICAgICAgICAgY3B1X21ldGhvZDsgICAgLyogaG93IHdhcyBjcHUgdXRpbCBtZWFzdXJlZD8gKi8KKyAgaW50ICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIHdlcmUgdGhlcmUgKi8KK307CisKK3N0cnVjdAl4dGlfdGNwX2Nvbm5fcnJfcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJc2VuZF9idWZfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAlzZW5kX2FsaWdubWVudDsKKyAgaW50CXNlbmRfb2Zmc2V0OworICBpbnQJcmVxdWVzdF9zaXplOworICBpbnQJcmVzcG9uc2Vfc2l6ZTsKKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CS8qIGRvIHdlIGtub3cgaG93IGZhc3QgdGhlIGNwdSBpcz8JKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzb19yY3Zhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHJlY2VpdmUgKi8KKwkJCS8qIGNvcGllcz8gKi8gCisgIGludAlzb19zbmRhdm9pZDsgICAgLyogZG8gd2Ugd2FudCB0aGUgcmVtb3RlIHRvIGF2b2lkIHNlbmQgY29waWVzPyAqLworICBpbnQgICBkZXZfbmFtZV9sZW47ICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nLiB0aGlzICovCisJCQkvKiBpcyB1c2VkIHRvIHB1dCBpdCBpbnRvIHRoZSBwcm9wZXIgb3JkZXIgb24gKi8KKwkJCS8qIEAjJCUgYnl0ZS1zd2FwcGVkIGJveGVzLi4uICovCisgIGNoYXIgIHh0aV9kZXZpY2VbMzJdOyAvKiB0aGUgcGF0aCB0byB0aGUgZGxwaSBkZXZpY2UgKi8KK307CisKKworc3RydWN0CXh0aV90Y3BfY29ubl9ycl9yZXNwb25zZV9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsJLyogaG93IGJpZyBkb2VzIHRoZSBjbGllbnQgd2FudCBpdAkqLworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNlbmRfYnVmX3NpemU7CisgIGludAlkYXRhX3BvcnRfbnVtYmVyOwkvKiBjb25uZWN0IHRvIG1lIGhlcmUJKi8KKyAgZmxvYXQJY3B1X3JhdGU7CQkvKiBjb3VsZCB3ZSBtZWFzdXJlCSovCisgIGludAlzb19yY3Zhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCByZWNlaXZlIGNvcGllcz8gKi8KKyAgaW50CXNvX3NuZGF2b2lkOwkvKiBjb3VsZCB0aGUgcmVtb3RlIGF2b2lkIHNlbmQgY29waWVzPyAqLworfTsKKworc3RydWN0IHh0aV90Y3BfY29ubl9ycl9yZXN1bHRzX3N0cnVjdCB7CisgIHVuc2lnbmVkIGludAlieXRlc19yZWNlaXZlZDsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXJlY3ZfY2FsbHM7CS8qIGlnbm9yZWQgaW5pdGlhbGx5ICovCisgIHVuc2lnbmVkIGludAl0cmFuc19yZWNlaXZlZDsJLyogbm90IGlnbm9yZWQgICovCisgIGZsb2F0CSAgICAgICAgZWxhcHNlZF90aW1lOwkvKiBob3cgbG9uZyB0aGUgdGVzdCByYW4gKi8KKyAgZmxvYXQJICAgICAgICBjcHVfdXRpbDsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGZsb2F0CSAgICAgICAgc2Vydl9kZW07CS8qIC0xIGlmIG5vdCBtZWFzdXJlZCAqLworICBpbnQgICAgICAgICAgIGNwdV9tZXRob2Q7ICAgIC8qIGhvdyB3YXMgY3B1IHV0aWwgbWVhc3VyZWQ/ICovCisgIGludCAgICAgICAgICAgbnVtX2NwdXM7ICAgICAgLyogaG93IG1hbnkgQ1BVcyB3ZXJlIHRoZXJlICovCit9OworCitzdHJ1Y3QJeHRpX3VkcF9zdHJlYW1fcmVxdWVzdF9zdHJ1Y3QgeworICBpbnQJcmVjdl9idWZfc2l6ZTsKKyAgaW50CW1lc3NhZ2Vfc2l6ZTsKKyAgaW50CXJlY3ZfYWxpZ25tZW50OworICBpbnQJcmVjdl9vZmZzZXQ7CisgIGludAljaGVja3N1bV9vZmY7ICAgLyogbm90IHVzZWQuIGxlZnQgaW4gZm9yIGNvbXBhdGliaWxpdHkgKi8KKyAgaW50CW1lYXN1cmVfY3B1OworICBmbG9hdAljcHVfcmF0ZTsKKyAgaW50CXRlc3RfbGVuZ3RoOworICBpbnQJc29fcmN2YXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCByZWNlaXZlICovCisJCQkvKiBjb3BpZXM/ICovIAorICBpbnQJc29fc25kYXZvaWQ7ICAgIC8qIGRvIHdlIHdhbnQgdGhlIHJlbW90ZSB0byBhdm9pZCBzZW5kIGNvcGllcz8gKi8KKyAgaW50ICAgZGV2X25hbWVfbGVuOyAgIC8qIHRoZSBsZW5ndGggb2YgdGhlIGRldmljZSBuYW1lIHN0cmluZy4gdGhpcyAqLworCQkJLyogaXMgdXNlZCB0byBwdXQgaXQgaW50byB0aGUgcHJvcGVyIG9yZGVyIG9uICovCisJCQkvKiBAIyQlIGJ5dGUtc3dhcHBlZCBib3hlcy4uLiAqLworICBjaGFyICB4dGlfZGV2aWNlWzMyXTsgLyogdGhlIHBhdGggdG8gdGhlIGRscGkgZGV2aWNlICovCit9OworCitzdHJ1Y3QJeHRpX3VkcF9zdHJlYW1fcmVzcG9uc2Vfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJbWVhc3VyZV9jcHU7CisgIGludAl0ZXN0X2xlbmd0aDsKKyAgaW50CWRhdGFfcG9ydF9udW1iZXI7CisgIGZsb2F0CWNwdV9yYXRlOworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCBzZW5kIGNvcGllcz8gKi8KK307CisKK3N0cnVjdAl4dGlfdWRwX3N0cmVhbV9yZXN1bHRzX3N0cnVjdCB7CisgIHVuc2lnbmVkIGludAltZXNzYWdlc19yZWN2ZDsKKyAgdW5zaWduZWQgaW50CWJ5dGVzX3JlY2VpdmVkOworICBmbG9hdAkgICAgICAgIGVsYXBzZWRfdGltZTsKKyAgZmxvYXQJICAgICAgICBjcHVfdXRpbDsKKyAgaW50ICAgICAgICAgICBjcHVfbWV0aG9kOyAgICAvKiBob3cgd2FzIGNwdSB1dGlsIG1lYXN1cmVkPyAqLworICBpbnQgICAgICAgICAgIG51bV9jcHVzOyAgICAgIC8qIGhvdyBtYW55IENQVXMgd2VyZSB0aGVyZSAqLworfTsKKworCitzdHJ1Y3QJeHRpX3VkcF9ycl9yZXF1ZXN0X3N0cnVjdCB7CisgIGludAlyZWN2X2J1Zl9zaXplOwkvKiBob3cgYmlnIGRvZXMgdGhlIGNsaWVudCB3YW50IGl0CSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJcmVjdl9hbGlnbm1lbnQ7CisgIGludAlyZWN2X29mZnNldDsKKyAgaW50CXNlbmRfYWxpZ25tZW50OworICBpbnQJc2VuZF9vZmZzZXQ7CisgIGludAlyZXF1ZXN0X3NpemU7CisgIGludAlyZXNwb25zZV9zaXplOworICBpbnQJbm9fZGVsYXk7CisgIGludAltZWFzdXJlX2NwdTsJLyogZG9lcyB0aGUgY2xpZW50IHdhbnQgc2VydmVyIGNwdQkqLworICBmbG9hdAljcHVfcmF0ZTsJLyogZG8gd2Uga25vdyBob3cgZmFzdCB0aGUgY3B1IGlzPwkqLworICBpbnQJdGVzdF9sZW5ndGg7CS8qIGhvdyBsb25nIGlzIHRoZSB0ZXN0PwkJKi8KKyAgaW50CXNvX3JjdmF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgcmVjZWl2ZSAqLworCQkJLyogY29waWVzPyAqLyAKKyAgaW50CXNvX3NuZGF2b2lkOyAgICAvKiBkbyB3ZSB3YW50IHRoZSByZW1vdGUgdG8gYXZvaWQgc2VuZCBjb3BpZXM/ICovCisgIGludCAgIGRldl9uYW1lX2xlbjsgICAvKiB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgbmFtZSBzdHJpbmcuIHRoaXMgKi8KKwkJCS8qIGlzIHVzZWQgdG8gcHV0IGl0IGludG8gdGhlIHByb3BlciBvcmRlciBvbiAqLworCQkJLyogQCMkJSBieXRlLXN3YXBwZWQgYm94ZXMuLi4gKi8KKyAgY2hhciAgeHRpX2RldmljZVszMl07IC8qIHRoZSBwYXRoIHRvIHRoZSBkbHBpIGRldmljZSAqLworfTsKKworc3RydWN0CXh0aV91ZHBfcnJfcmVzcG9uc2Vfc3RydWN0IHsKKyAgaW50CXJlY3ZfYnVmX3NpemU7CS8qIGhvdyBiaWcgZG9lcyB0aGUgY2xpZW50IHdhbnQgaXQJKi8KKyAgaW50CW5vX2RlbGF5OworICBpbnQJbWVhc3VyZV9jcHU7CS8qIGRvZXMgdGhlIGNsaWVudCB3YW50IHNlcnZlciBjcHUJKi8KKyAgaW50CXRlc3RfbGVuZ3RoOwkvKiBob3cgbG9uZyBpcyB0aGUgdGVzdD8JCSovCisgIGludAlzZW5kX2J1Zl9zaXplOworICBpbnQJZGF0YV9wb3J0X251bWJlcjsJLyogY29ubmVjdCB0byBtZSBoZXJlCSovCisgIGZsb2F0CWNwdV9yYXRlOwkJLyogY291bGQgd2UgbWVhc3VyZQkqLworICBpbnQJc29fcmN2YXZvaWQ7CS8qIGNvdWxkIHRoZSByZW1vdGUgYXZvaWQgcmVjZWl2ZSBjb3BpZXM/ICovCisgIGludAlzb19zbmRhdm9pZDsJLyogY291bGQgdGhlIHJlbW90ZSBhdm9pZCBzZW5kIGNvcGllcz8gKi8KK307CisKK3N0cnVjdCB4dGlfdWRwX3JyX3Jlc3VsdHNfc3RydWN0IHsKKyAgdW5zaWduZWQgaW50CWJ5dGVzX3JlY2VpdmVkOwkvKiBpZ25vcmVkIGluaXRpYWxseSAqLworICB1bnNpZ25lZCBpbnQJcmVjdl9jYWxsczsJLyogaWdub3JlZCBpbml0aWFsbHkgKi8KKyAgdW5zaWduZWQgaW50CXRyYW5zX3JlY2VpdmVkOwkvKiBub3QgaWdub3JlZCAgKi8KKyAgZmxvYXQJICAgICAgICBlbGFwc2VkX3RpbWU7CS8qIGhvdyBsb25nIHRoZSB0ZXN0IHJhbiAqLworICBmbG9hdAkgICAgICAgIGNwdV91dGlsOwkvKiAtMSBpZiBub3QgbWVhc3VyZWQgKi8KKyAgZmxvYXQJICAgICAgICBzZXJ2X2RlbTsJLyogLTEgaWYgbm90IG1lYXN1cmVkICovCisgIGludCAgICAgICAgICAgY3B1X21ldGhvZDsgICAgLyogaG93IHdhcyBjcHUgdXRpbCBtZWFzdXJlZD8gKi8KKyAgaW50ICAgICAgICAgICBudW1fY3B1czsgICAgICAvKiBob3cgbWFueSBDUFVzIHdlcmUgdGhlcmUgKi8KK307CisKK2V4dGVybiB2b2lkIHNlbmRfeHRpX3RjcF9zdHJlYW0oY2hhciByZW1vdGVfaG9zdFtdKTsKKworZXh0ZXJuIHZvaWQgcmVjdl94dGlfdGNwX3N0cmVhbSgpOworCitleHRlcm4gdm9pZCBzZW5kX3h0aV90Y3BfcnIoY2hhciByZW1vdGVfaG9zdFtdKTsKKworZXh0ZXJuIHZvaWQgc2VuZF94dGlfdWRwX3N0cmVhbShjaGFyIHJlbW90ZV9ob3N0W10pOworCitleHRlcm4gdm9pZCByZWN2X3h0aV91ZHBfc3RyZWFtKCk7CisKK2V4dGVybiB2b2lkIHNlbmRfeHRpX3VkcF9ycihjaGFyIHJlbW90ZV9ob3N0W10pOworCitleHRlcm4gdm9pZCByZWN2X3h0aV91ZHBfcnIoKTsKKworZXh0ZXJuIHZvaWQgcmVjdl94dGlfdGNwX3JyKCk7CisKK2V4dGVybiB2b2lkIHNlbmRfeHRpX3RjcF9jb25uX3JyKGNoYXIgcmVtb3RlX2hvc3RbXSk7CisKK2V4dGVybiB2b2lkIHJlY3ZfeHRpX3RjcF9jb25uX3JyKCk7CisKK2V4dGVybiB2b2lkIHNjYW5feHRpX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL25ldHBlcmYudGFyLmd6IGIvbmV0cGVyZi50YXIuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlYWU5YQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYudGFyLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL25ldHBlcmYudXJsIGIvbmV0cGVyZi51cmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlYjczYQotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYudXJsCkBAIC0wLDAgKzEgQEAKK2Z0cDovL2Z0cC5uZXRwZXJmLm9yZy9uZXRwZXJmL25ldHBlcmYtMi40LjUudGFyLmd6CmRpZmYgLS1naXQgYS9uZXRwZXJmLnZlcnNpb24gYi9uZXRwZXJmLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhYTYyYwotLS0gL2Rldi9udWxsCisrKyBiL25ldHBlcmYudmVyc2lvbgpAQCAtMCwwICsxIEBACisyLjQuNQo=