LmV4cGxpY2l0Ci50ZXh0Ci5pZGVudAkiaWE2NC5TLCBWZXJzaW9uIDIuMSIKLmlkZW50CSJJQS02NCBJU0EgYXJ0d29yayBieSBBbmR5IFBvbHlha292IDxhcHByb0BmeS5jaGFsbWVycy5zZT4iCgovLwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKLy8gcHJvamVjdC4KLy8KLy8gUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlCi8vIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuIFdhcnJhbnR5IG9mIGFueSBraW5kIGlzCi8vIGRpc2NsYWltZWQuCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vCi8vIFZlcnNpb24gMi54IGlzIEl0YW5pdW0yIHJlLXR1bmUuIEZldyB3b3JkcyBhYm91dCBob3cgSXRhbnVtMiBpcwovLyBkaWZmZXJlbnQgZnJvbSBJdGFuaXVtIHRvIHRoaXMgbW9kdWxlIHZpZXdwb2ludC4gTW9zdCBub3RhYmx5LCBpcyBpdAovLyAid2lkZXIiIHRoYW4gSXRhbml1bT8gQ2FuIHlvdSBleHBlcmllbmNlIGxvb3Agc2NhbGFiaWxpdHkgYXMKLy8gZGlzY3Vzc2VkIGluIGNvbW1lbnRhcnkgc2VjdGlvbnM/IE5vdCByZWFsbHk6LSggSXRhbml1bTIgaGFzIDYKLy8gaW50ZWdlciBBTFUgcG9ydHMsIGkuZS4gaXQncyAyIHBvcnRzIHdpZGVyLCBidXQgaXQncyBub3QgZW5vdWdoIHRvCi8vIHNwaW4gdHdpY2UgYXMgZmFzdCwgYXMgSSBuZWVkIDggSUFMVSBwb3J0cy4gQW1vdW50IG9mIGZsb2F0aW5nIHBvaW50Ci8vIHBvcnRzIGlzIHRoZSBzYW1lLCBpLmUuIDIsIHdoaWxlIEkgbmVlZCA0LiBJbiBvdGhlciB3b3JkcywgdG8gdGhpcwovLyBtb2R1bGUgSXRhbml1bTIgcmVtYWlucyBlZmZlY3RpdmVseSBhcyAid2lkZSIgYXMgSXRhbml1bS4gWWV0IGl0J3MKLy8gZXNzZW50aWFsbHkgZGlmZmVyZW50IGluIHJlc3BlY3QgdG8gdGhpcyBtb2R1bGUsIGFuZCBhIHJlLXR1bmUgd2FzCi8vIHJlcXVpcmVkLiBXZWxsLCBiZWNhdXNlIHNvbWUgaW50cnVjdGlvbiBsYXRlbmNpZXMgaGFzIGNoYW5nZWQuIE1vc3QKLy8gbm90aWNlYWJseSB0aG9zZSBpbnRlbnNpdmVseSB1c2VkOgovLwovLwkJCUl0YW5pdW0JSXRhbml1bTIKLy8JbGRmOAkJOQk2CQlMMiBoaXQKLy8JbGQ4CQkyCTEJCUwxIGhpdAovLwlnZXRmCQkyCTUKLy8JeG1hWy0+Z2V0Zl0JN1srMV0JNFsrMF0KLy8JYWRkWy0+c3Q4XQkxWysxXQkxWyswXQovLwovLyBXaGF0IGRvZXMgaXQgbWVhbj8gWW91IG1pZ2h0IHJhdGlvY2luYXRlIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUKLy8gc2hvdWxkIHJ1biBqdXN0IGZhc3Rlci4uLiBCZWNhdXNlIHN1bSBvZiBsYXRlbmNpZXMgaXMgc21hbGxlci4uLgovLyBXcm9uZyEgTm90ZSB0aGF0IGdldGYgbGF0ZW5jeSBpbmNyZWFzZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGxvb3AgaXMKLy8gc2NoZWR1bGVkIGZvciBsb3dlciBsYXRlbmN5IChhcyB0aGV5IHdlcmUpLCB0aGVuIGl0IHdpbGwgc3VmZmVyIGZyb20KLy8gc3RhbGwgY29uZGl0aW9uIGFuZCB0aGUgY29kZSB3aWxsIHRoZXJlZm9yZSB0dXJuIGFudGktc2NhbGFibGUsIGUuZy4KLy8gb3JpZ2luYWwgYm5fbXVsX3dvcmRzIHNwdW4gYXQgNSpuIG9yIDIuNSB0aW1lcyBzbG93ZXIgdGhhbiBleHBlY3RlZAovLyBvbiBJdGFuaXVtMiEgV2hhdCB0byBkbz8gUmVzY2hlZHVsZSBsb29wcyBmb3IgSXRhbml1bTI/IEJ1dCB0aGVuCi8vIEl0YW5pdW0gd291bGQgZXhoaWJpdCBhbnRpLXNjYWxhYmlsaXR5LiBTbyBJJ3ZlIGNob3NlbiB0byByZXNjaGVkdWxlCi8vIGZvciB3b3JzdCBsYXRlbmN5IGZvciBldmVyeSBpbnN0cnVjdGlvbiBhaW1pbmcgZm9yIGJlc3QgKmFsbC1yb3VuZCoKLy8gcGVyZm9ybWFuY2UuICAKCi8vIFEuCUhvdyBtdWNoIGZhc3RlciBkb2VzIGl0IGdldD8KLy8gQS4JSGVyZSBpcyB0aGUgb3V0cHV0IGZyb20gJ29wZW5zc2wgc3BlZWQgcnNhIGRzYScgZm9yIHZhbmlsbGEKLy8JMC45LjZhIGNvbXBpbGVkIHdpdGggZ2NjIHZlcnNpb24gMi45NiAyMDAwMDczMSAoUmVkIEhhdAovLwlMaW51eCA3LjEgMi45Ni04MSk6Ci8vCi8vCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwovLwlyc2EgIDUxMiBiaXRzICAgMC4wMDM2cyAgIDAuMDAwM3MgICAgMjc1LjMgICAyOTk5LjIKLy8JcnNhIDEwMjQgYml0cyAgIDAuMDIwM3MgICAwLjAwMTFzICAgICA0OS4zICAgIDg5NC4xCi8vCXJzYSAyMDQ4IGJpdHMgICAwLjEzMzFzICAgMC4wMDQwcyAgICAgIDcuNSAgICAyNTAuOQovLwlyc2EgNDA5NiBiaXRzICAgMC45MjcwcyAgIDAuMDE0N3MgICAgICAxLjEgICAgIDY4LjEKLy8JICAgICAgICAgICAgICAgICAgc2lnbiAgICB2ZXJpZnkgICAgc2lnbi9zIHZlcmlmeS9zCi8vCWRzYSAgNTEyIGJpdHMgICAwLjAwMzVzICAgMC4wMDQzcyAgICAyODguMyAgICAyMzQuOAovLwlkc2EgMTAyNCBiaXRzICAgMC4wMTExcyAgIDAuMDEzNXMgICAgIDkwLjAgICAgIDc0LjIKLy8KLy8JQW5kIGhlcmUgaXMgc2ltaWxhciBvdXRwdXQgYnV0IGZvciB0aGlzIGFzc2VtYmxlcgovLwlpbXBsZW1lbnRhdGlvbjotKQovLwovLwkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKLy8JcnNhICA1MTIgYml0cyAgIDAuMDAyMXMgICAwLjAwMDFzICAgIDU0OS40ICAgOTYzOC41Ci8vCXJzYSAxMDI0IGJpdHMgICAwLjAwNTVzICAgMC4wMDAycyAgICAxODMuOCAgIDQ0ODEuMQovLwlyc2EgMjA0OCBiaXRzICAgMC4wMjQ0cyAgIDAuMDAwNnMgICAgIDQxLjQgICAxNzI2LjMKLy8JcnNhIDQwOTYgYml0cyAgIDAuMTI5NXMgICAwLjAwMThzICAgICAgNy43ICAgIDU2MS41Ci8vCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwovLwlkc2EgIDUxMiBiaXRzICAgMC4wMDEycyAgIDAuMDAxM3MgICAgODkxLjkgICAgNzU2LjYKLy8JZHNhIDEwMjQgYml0cyAgIDAuMDAyM3MgICAwLjAwMjhzICAgIDQ0MC40ICAgIDM3Ni4yCi8vCQovLwlZZXMsIHlvdSBtYXkgYXJndWUgdGhhdCBpdCdzIG5vdCBmYWlyIGNvbXBhcmlzb24gYXMgaXQncwovLwlwb3NzaWJsZSB0byBjcmFmdCB0aGUgQyBpbXBsZW1lbnRhdGlvbiB3aXRoIEJOX1VNVUxUX0hJR0gKLy8JaW5saW5lIGFzc2VtYmxlciBtYWNyby4gQnV0IG9mIGNvdXJzZSEgSGVyZSBpcyB0aGUgb3V0cHV0Ci8vCXdpdGggdGhlIG1hY3JvOgovLwovLwkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKLy8JcnNhICA1MTIgYml0cyAgIDAuMDAyMHMgICAwLjAwMDJzICAgIDQ5NS4wICAgNjU2MS4wCi8vCXJzYSAxMDI0IGJpdHMgICAwLjAwODZzICAgMC4wMDA0cyAgICAxMTYuMiAgIDIyMzUuNwovLwlyc2EgMjA0OCBiaXRzICAgMC4wNTE5cyAgIDAuMDAxNXMgICAgIDE5LjMgICAgNjY3LjMKLy8JcnNhIDQwOTYgYml0cyAgIDAuMzQ2NHMgICAwLjAwNTNzICAgICAgMi45ICAgIDE4Ny43Ci8vCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwovLwlkc2EgIDUxMiBiaXRzICAgMC4wMDE2cyAgIDAuMDAyMHMgICAgNjEzLjEgICAgNTEwLjUKLy8JZHNhIDEwMjQgYml0cyAgIDAuMDA0NXMgICAwLjAwNTRzICAgIDIyMS4wICAgIDE4My45Ci8vCi8vCU15IGNvZGUgaXMgc3RpbGwgd2F5IGZhc3RlciwgaHVoOi0pIEFuZCBJIGJlbGlldmUgdGhhdCBldmVuCi8vCWhpZ2hlciBwZXJmb3JtYW5jZSBjYW4gYmUgYWNoaWV2ZWQuIE5vdGUgdGhhdCBhcyBrZXlzIGdldAovLwlsb25nZXIsIHBlcmZvcm1hbmNlIGdhaW4gaXMgbGFyZ2VyLiBXaHk/IEFjY29yZGluZyB0byB0aGUKLy8JcHJvZmlsZXIgdGhlcmUgaXMgYW5vdGhlciBwbGF5ZXIgaW4gdGhlIGZpZWxkLCBuYW1lbHkKLy8JQk5fZnJvbV9tb250Z29tZXJ5IGNvbnN1bWluZyBsYXJnZXIgYW5kIGxhcmdlciBwb3J0aW9uIG9mIENQVQovLwl0aW1lIGFzIGtleXNpemUgZGVjcmVhc2VzLiBJIHRoZXJlZm9yZSBjb25zaWRlciBwdXR0aW5nIGVmZm9ydAovLwl0byBhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvbGxvd2luZyByb3V0aW5lOgovLwovLwl2b2lkIGJuX211bF9hZGRfbW9udCAoQk5fVUxPTkcgKnJwLEJOX1VMT05HICpucCxpbnQgbmwsQk5fVUxPTkcgbjApCi8vCXsKLy8JaW50ICAgICAgaSxqOwovLwlCTl9VTE9ORyB2OwovLwovLwlmb3IgKGk9MDsgaTxubDsgaSsrKQovLwkJewovLwkJdj1ibl9tdWxfYWRkX3dvcmRzKHJwLG5wLG5sLChycFswXSpuMCkmQk5fTUFTSzIpOwovLwkJbnJwKys7Ci8vCQlycCsrOwovLwkJaWYgKCgobnJwWy0xXSs9dikmQk5fTUFTSzIpIDwgdikKLy8JCQlmb3IgKGo9MDsgKCgrK25ycFtqXSkmQk5fTUFTSzIpID09IDA7IGorKykgOwovLwkJfQovLwl9Ci8vCi8vCUl0IG1pZ2h0IGFzIHdlbGwgYmUgYmVuZWZpY2lhbCB0byBpbXBsZW1lbnQgZXZlbiBjb21iYVgKLy8JdmFyaWFudHMsIGFzIGl0IGFwcGVhcnMgYXMgaXQgY2FuIGxpdGVyYWxseSB1bmxlYXNoIHRoZQovLwlwZXJmb3JtYW5jZSAoc2VlIGNvbW1lbnQgc2VjdGlvbiB0byBibl9tdWxfY29tYmE4IGJlbG93KS4KLy8KLy8JQW5kIGZpbmFsbHkgZm9yIHlvdXIgcmVmZXJlbmNlIHRoZSBvdXRwdXQgZm9yIDAuOS42YSBjb21waWxlZAovLwl3aXRoIFNHSWNjIHZlcnNpb24gMC4wMS4wLTEyIChrZWVwIGluIG1pbmQgdGhhdCBmb3IgdGhlIG1vbWVudAovLwlvZiB0aGlzIHdyaXRpbmcgaXQncyBub3QgcG9zc2libGUgdG8gY29udmluY2UgU0dJY2MgdG8gdXNlCi8vCUJOX1VNVUxUX0hJR0ggaW5saW5lIGFzc2VtYmxlciBtYWNybywgeWV0IHRoZSBjb2RlIGlzIGZhc3QsCi8vCWkuZS4gZm9yIGEgY29tcGlsZXIgZ2VuZXJhdGVkIG9uZTotKToKLy8KLy8JICAgICAgICAgICAgICAgICAgc2lnbiAgICB2ZXJpZnkgICAgc2lnbi9zIHZlcmlmeS9zCi8vCXJzYSAgNTEyIGJpdHMgICAwLjAwMjJzICAgMC4wMDAycyAgICA0NTIuNyAgIDU4OTQuMwovLwlyc2EgMTAyNCBiaXRzICAgMC4wMDk3cyAgIDAuMDAwNXMgICAgMTAyLjcgICAyMDAyLjkKLy8JcnNhIDIwNDggYml0cyAgIDAuMDU3OHMgICAwLjAwMTdzICAgICAxNy4zICAgIDYwMC4yCi8vCXJzYSA0MDk2IGJpdHMgICAwLjM4MzhzICAgMC4wMDYxcyAgICAgIDIuNiAgICAxNjQuNQovLwkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKLy8JZHNhICA1MTIgYml0cyAgIDAuMDAxOHMgICAwLjAwMjJzICAgIDU0Ny4zICAgIDQ1OS42Ci8vCWRzYSAxMDI0IGJpdHMgICAwLjAwNTFzICAgMC4wMDYycyAgICAxOTYuNiAgICAxNjEuMwovLwovLwlPaCEgQmVuY2htYXJrcyB3ZXJlIHBlcmZvcm1lZCBvbiA3MzNNSHogTGlvbi1jbGFzcyBJdGFuaXVtCi8vCXN5c3RlbSBydW5uaW5nIFJlZGhhdCBMaW51eCA3LjEgKHZlcnkgc3BlY2lhbCB0aGFua3MgdG8gUmF5Ci8vCU1jQ2FmZml0eSBvZiBXaWxsaWFtcyBDb21tdW5pY2F0aW9ucyBmb3IgcHJvdmlkaW5nIGFuIGFjY291bnQpLgovLwovLyBRLglXaGF0J3MgdGhlIGhlY2sgd2l0aCAncnVtIDE8PDUnIGF0IHRoZSBlbmQgb2YgZXZlcnkgZnVuY3Rpb24/Ci8vIEEuCVdlbGwsIGJ5IGNsZWFyaW5nIHRoZSAidXBwZXIgRlAgcmVnaXN0ZXJzIHdyaXR0ZW4iIGJpdCBvZiB0aGUKLy8JVXNlciBNYXNrIEkgd2FudCB0byBleGN1c2UgdGhlIGtlcm5lbCBmcm9tIHByZXNlcnZpbmcgdXBwZXIKLy8JKGYzMi1mMTI4KSBGUCByZWdpc3RlciBiYW5rIG92ZXIgcHJvY2VzcyBjb250ZXh0IHN3aXRjaCwgdGh1cwovLwltaW5pbWl6aW5nIGJ1cyBiYW5kd2lkdGggY29uc3VtcHRpb24gZHVyaW5nIHRoZSBzd2l0Y2ggKGkuZS4KLy8JYWZ0ZXIgUEtJIG9wcmF0aW9uIGNvbXBsZXRlcyBhbmQgdGhlIHByb2dyYW0gaXMgb2ZmIGRvaW5nCi8vCXNvbWV0aGluZyBlbHNlIGxpa2UgYnVsayBzeW1tZXRyaWMgZW5jcnlwdGlvbikuIEhhdmluZyBzYWlkCi8vCXRoaXMsIEkgYWxzbyB3YW50IHRvIHBvaW50IG91dCB0aGF0IGl0IG1pZ2h0IGJlIGdvb2QgaWRlYQovLwl0byBjb21waWxlIHRoZSB3aG9sZSB0b29sa2l0IChhcyB3ZWxsIGFzIG1ham9yaXR5IG9mIHRoZQovLwlwcm9ncmFtcyBmb3IgdGhhdCBtYXR0ZXIpIHdpdGggLW1maXhlZC1yYW5nZT1mMzItZjEyNyBjb21tYW5kCi8vCWxpbmUgb3B0aW9uLiBObywgaXQgZG9lc24ndCBwcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIHdyaXRpbmcKLy8JdG8gdXBwZXIgYmFuaywgYnV0IGF0IGxlYXN0IGRpc2NvdXJhZ2VzIHRvIGRvIHNvLiBJZiB5b3UgZG9uJ3QKLy8JbGlrZSB0aGUgaWRlYSB5b3UgaGF2ZSB0aGUgb3B0aW9uIHRvIGNvbXBpbGUgdGhlIG1vZHVsZSB3aXRoCi8vCS1EcnVtPW5vcC5tIGluIGNvbW1hbmQgbGluZS4KLy8KCiNpZiBkZWZpbmVkKF9IUFVYX1NPVVJDRSkgJiYgIWRlZmluZWQoX0xQNjQpCiNkZWZpbmUJQUREUAlhZGRwNAojZWxzZQojZGVmaW5lCUFERFAJYWRkCiNlbmRpZgoKI2lmIDEKLy8KLy8gYm5fW2FkZHxzdWJdX3dvcmRzIHJvdXRpbmVzLgovLwovLyBMb29wcyBhcmUgc3Bpbm5pbmcgaW4gMioobis1KSB0aWNrcyBvbiBJdGFudWltIChwcm92aWRlZCB0aGF0IHRoZQovLyBkYXRhIHJlc2lkZSBpbiBMMSBjYWNoZSwgaS5lLiAyIHRpY2tzIGF3YXkpLiBJdCdzIHBvc3NpYmxlIHRvCi8vIGNvbXByZXNzIHRoZSBlcGlsb2d1ZSBhbmQgZ2V0IGRvd24gdG8gMipuKzYsIGJ1dCBhdCB0aGUgY29zdCBvZgovLyBzY2FsYWJpbGl0eSAodGhlIG5lYXQgZmVhdHVyZSBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRoYXQgaXQKLy8gc2hhbGwgYXV0b21hZ2ljYWxseSBzcGluIGluIG4rNSBvbiAid2lkZXIiIElBLTY0IGltcGxlbWVudGF0aW9uczotKQovLyBJIGNvbnNpZGVyIHRoYXQgdGhlIGVwaWxvZ3VlIGlzIHNob3J0IGVub3VnaCBhcyBpdCBpcyB0byB0cmFkZSB0aW55Ci8vIHBlcmZvcm1hbmNlIGxvc3Mgb24gSXRhbml1bSBmb3Igc2NhbGFiaWxpdHkuCi8vCi8vIEJOX1VMT05HIGJuX2FkZF93b3JkcyhCTl9VTE9ORyAqcnAsIEJOX1VMT05HICphcCwgQk5fVUxPTkcgKmJwLGludCBudW0pCi8vCi5nbG9iYWwJYm5fYWRkX3dvcmRzIwoucHJvYwlibl9hZGRfd29yZHMjCi5hbGlnbgk2NAouc2tpcAkzMgkvLyBtYWtlcyB0aGUgbG9vcCBib2R5IGFsaWduZWQgYXQgNjQtYnl0ZSBib3VuZGFyeQpibl9hZGRfd29yZHM6CgkucHJvbG9ndWUKCS5zYXZlCWFyLnBmcyxyMgp7IC5taWk7CWFsbG9jCQlyMj1hci5wZnMsNCwxMiwwLDE2CgljbXA0LmxlCQlwNixwMD1yMzUscjAJfTs7CnsgLm1mYjsJbW92CQlyOD1yMAkJCS8vIHJldHVybiB2YWx1ZQoocDYpCWJyLnJldC5zcG50Lm1hbnkJYjAJfTs7Cgp7IC5taWI7CXN1YgkJcjEwPXIzNSxyMCwxCgkuc2F2ZQlhci5sYyxyMwoJbW92CQlyMz1hci5sYwoJYnJwLmxvb3AuaW1wCS5MX2JuX2FkZF93b3Jkc19jdG9wLC5MX2JuX2FkZF93b3Jkc19jZW5kLTE2CgkJCQkJfQp7IC5taWI7CUFERFAJCXIxND0wLHIzMgkJLy8gcnAKCS5zYXZlCXByLHI5Cgltb3YJCXI5PXByCQl9OzsKCS5ib2R5CnsgLm1paTsJQUREUAkJcjE1PTAscjMzCQkvLyBhcAoJbW92CQlhci5sYz1yMTAKCW1vdgkJYXIuZWM9NgkJfQp7IC5taWI7CUFERFAJCXIxNj0wLHIzNAkJLy8gYnAKCW1vdgkJcHIucm90PTE8PDE2CX07OwoKLkxfYm5fYWRkX3dvcmRzX2N0b3A6CnsgLm1paTsJKHAxNikJbGQ4CQlyMzI9W3IxNl0sOAkgIC8vIGI9KihicCsrKQoJKHAxOCkJYWRkCQlyMzk9cjM3LHIzNAoJKHAxOSkJY21wLmx0dS51bmMJcDU2LHAwPXI0MCxyMzgJfQp7IC5tZmI7CShwMCkJbm9wLm0JCTB4MAoJKHAwKQlub3AuZgkJMHgwCgkocDApCW5vcC5iCQkweDAJCX0KeyAubWlpOwkocDE2KQlsZDgJCXIzNT1bcjE1XSw4CSAgLy8gYT0qKGFwKyspCgkocDU4KQljbXAuZXEub3IJcDU3LHAwPS0xLHI0MQkgIC8vIChwMjApCgkocDU4KQlhZGQJCXI0MT0xLHI0MQl9IC8vIChwMjApCnsgLm1mYjsJKHAyMSkJc3Q4CQlbcjE0XT1yNDIsOAkgIC8vICoocnArKyk9cgoJKHAwKQlub3AuZgkJMHgwCglici5jdG9wLnNwdGsJLkxfYm5fYWRkX3dvcmRzX2N0b3AJfTs7Ci5MX2JuX2FkZF93b3Jkc19jZW5kOgoKeyAubWlpOwoocDU5KQlhZGQJCXI4PTEscjgJCS8vIHJldHVybiB2YWx1ZQoJbW92CQlwcj1yOSwweDFmZmZmCgltb3YJCWFyLmxjPXIzCX0KeyAubWJiOwlub3AuYgkJMHgwCglici5yZXQuc3B0ay5tYW55CWIwCX07OwouZW5kcAlibl9hZGRfd29yZHMjCgovLwovLyBCTl9VTE9ORyBibl9zdWJfd29yZHMoQk5fVUxPTkcgKnJwLCBCTl9VTE9ORyAqYXAsIEJOX1VMT05HICpicCxpbnQgbnVtKQovLwouZ2xvYmFsCWJuX3N1Yl93b3JkcyMKLnByb2MJYm5fc3ViX3dvcmRzIwouYWxpZ24JNjQKLnNraXAJMzIJLy8gbWFrZXMgdGhlIGxvb3AgYm9keSBhbGlnbmVkIGF0IDY0LWJ5dGUgYm91bmRhcnkKYm5fc3ViX3dvcmRzOgoJLnByb2xvZ3VlCgkuc2F2ZQlhci5wZnMscjIKeyAubWlpOwlhbGxvYwkJcjI9YXIucGZzLDQsMTIsMCwxNgoJY21wNC5sZQkJcDYscDA9cjM1LHIwCX07Owp7IC5tZmI7CW1vdgkJcjg9cjAJCQkvLyByZXR1cm4gdmFsdWUKKHA2KQlici5yZXQuc3BudC5tYW55CWIwCX07OwoKeyAubWliOwlzdWIJCXIxMD1yMzUscjAsMQoJLnNhdmUJYXIubGMscjMKCW1vdgkJcjM9YXIubGMKCWJycC5sb29wLmltcAkuTF9ibl9zdWJfd29yZHNfY3RvcCwuTF9ibl9zdWJfd29yZHNfY2VuZC0xNgoJCQkJCX0KeyAubWliOwlBRERQCQlyMTQ9MCxyMzIJCS8vIHJwCgkuc2F2ZQlwcixyOQoJbW92CQlyOT1wcgkJfTs7CgkuYm9keQp7IC5taWk7CUFERFAJCXIxNT0wLHIzMwkJLy8gYXAKCW1vdgkJYXIubGM9cjEwCgltb3YJCWFyLmVjPTYJCX0KeyAubWliOwlBRERQCQlyMTY9MCxyMzQJCS8vIGJwCgltb3YJCXByLnJvdD0xPDwxNgl9OzsKCi5MX2JuX3N1Yl93b3Jkc19jdG9wOgp7IC5taWk7CShwMTYpCWxkOAkJcjMyPVtyMTZdLDgJICAvLyBiPSooYnArKykKCShwMTgpCXN1YgkJcjM5PXIzNyxyMzQKCShwMTkpCWNtcC5ndHUudW5jCXA1NixwMD1yNDAscjM4CX0KeyAubWZiOwkocDApCW5vcC5tCQkweDAKCShwMCkJbm9wLmYJCTB4MAoJKHAwKQlub3AuYgkJMHgwCQl9CnsgLm1paTsJKHAxNikJbGQ4CQlyMzU9W3IxNV0sOAkgIC8vIGE9KihhcCsrKQoJKHA1OCkJY21wLmVxLm9yCXA1NyxwMD0wLHI0MQkgIC8vIChwMjApCgkocDU4KQlhZGQJCXI0MT0tMSxyNDEJfSAvLyAocDIwKQp7IC5tYmI7CShwMjEpCXN0OAkJW3IxNF09cjQyLDgJICAvLyAqKHJwKyspPXIKCShwMCkJbm9wLmIJCTB4MAoJYnIuY3RvcC5zcHRrCS5MX2JuX3N1Yl93b3Jkc19jdG9wCX07OwouTF9ibl9zdWJfd29yZHNfY2VuZDoKCnsgLm1paTsKKHA1OSkJYWRkCQlyOD0xLHI4CQkvLyByZXR1cm4gdmFsdWUKCW1vdgkJcHI9cjksMHgxZmZmZgoJbW92CQlhci5sYz1yMwl9CnsgLm1iYjsJbm9wLmIJCTB4MAoJYnIucmV0LnNwdGsubWFueQliMAl9OzsKLmVuZHAJYm5fc3ViX3dvcmRzIwojZW5kaWYKCiNpZiAwCiNkZWZpbmUgWE1BX1RFTVBUQVRJT04KI2VuZGlmCgojaWYgMQovLwovLyBCTl9VTE9ORyBibl9tdWxfd29yZHMoQk5fVUxPTkcgKnJwLCBCTl9VTE9ORyAqYXAsIGludCBudW0sIEJOX1VMT05HIHcpCi8vCi5nbG9iYWwJYm5fbXVsX3dvcmRzIwoucHJvYwlibl9tdWxfd29yZHMjCi5hbGlnbgk2NAouc2tpcAkzMgkvLyBtYWtlcyB0aGUgbG9vcCBib2R5IGFsaWduZWQgYXQgNjQtYnl0ZSBib3VuZGFyeQpibl9tdWxfd29yZHM6CgkucHJvbG9ndWUKCS5zYXZlCWFyLnBmcyxyMgojaWZkZWYgWE1BX1RFTVBUQVRJT04KeyAubWZpOwlhbGxvYwkJcjI9YXIucGZzLDQsMCwwLDAJfTs7CiNlbHNlCnsgLm1maTsJYWxsb2MJCXIyPWFyLnBmcyw0LDEyLDAsMTYJfTs7CiNlbmRpZgp7IC5taWI7CW1vdgkJcjg9cjAJCQkvLyByZXR1cm4gdmFsdWUKCWNtcDQubGUJCXA2LHAwPXIzNCxyMAoocDYpCWJyLnJldC5zcG50Lm1hbnkJYjAJCX07OwoKeyAubWlpOwlzdWIJcjEwPXIzNCxyMCwxCgkuc2F2ZQlhci5sYyxyMwoJbW92CXIzPWFyLmxjCgkuc2F2ZQlwcixyOQoJbW92CXI5PXByCQkJfTs7CgoJLmJvZHkKeyAubWliOwlzZXRmLnNpZwlmOD1yMzUJLy8gdwoJbW92CQlwci5yb3Q9MHg4MDAwMDE8PDE2CgkJCS8vIC0tLS0tLV4tLS0tLSBzZXJ2ZXMgYXMgKHA1MCkgYXQgZmlyc3QgKHAyNykKCWJycC5sb29wLmltcAkuTF9ibl9tdWxfd29yZHNfY3RvcCwuTF9ibl9tdWxfd29yZHNfY2VuZC0xNgoJCQkJCX0KCiNpZm5kZWYgWE1BX1RFTVBUQVRJT04KCnsgLm1taTsJQUREUAkJcjE0PTAscjMyCS8vIHJwCglBRERQCQlyMTU9MCxyMzMJLy8gYXAKCW1vdgkJYXIubGM9cjEwCX0KeyAubW1pOwltb3YJCXI0MD0wCQkvLyBzZXJ2ZXMgYXMgcjM1IGF0IGZpcnN0IChwMjcpCgltb3YJCWFyLmVjPTEzCX07OwoKLy8gVGhpcyBsb29wIHNwaW5zIGluIDIqKG4rMTIpIHRpY2tzLiBJdCdzIHNjaGVkdWxlZCBmb3IgZGF0YSBpbiBJdGFuaXVtCi8vIEwyIGNhY2hlIChpLmUuIDkgdGlja3MgYXdheSkgYXMgZmxvYXRpbmcgcG9pbnQgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMKLy8gYnlwYXNzIEwxIGNhY2hlIGFuZCBMMiBsYXRlbmN5IGlzIGFjdHVhbGx5IGJlc3QtY2FzZSBzY2VuYXJpbyBmb3IKLy8gbGRmOC4gVGhlIGxvb3AgaXMgbm90IHNjYWxhYmxlIGFuZCBzaGFsbCBydW4gaW4gMioobisxMikgZXZlbiBvbgovLyAid2lkZXIiIElBLTY0IGltcGxlbWVudGF0aW9ucy4gSXQncyBhIHRyYWRlLW9mZiBoZXJlLiBuKzI0IGxvb3AKLy8gd291bGQgZ2l2ZSB1cyB+NSUgaW4gKm92ZXJhbGwqIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uICJ3aWRlciIKLy8gSUEtNjQsIGJ1dCB3b3VsZCBodXJ0IEl0YW5pdW0gZm9yIGFib3V0IHNhbWUgYmVjYXVzZSBvZiBsb25nZXIKLy8gZXBpbG9ndWUuIEFzIGl0J3MgYSBtYXR0ZXIgb2YgZmV3IHBlcmNlbnRzIGluIGVpdGhlciBjYXNlIEkndmUKLy8gY2hvc2VuIHRvIHRyYWRlIHRoZSBzY2FsYWJpbGl0eSBmb3IgZGV2ZWxvcG1lbnQgdGltZSAoeW91IGNhbiBzZWUKLy8gdGhpcyB2ZXJ5IGluc3RydWN0aW9uIHNlcXVlbmNlIGluIGJuX211bF9hZGRfd29yZHMgbG9vcCB3aGljaCBpbgovLyB0dXJuIGlzIHNjYWxhYmxlKS4KLkxfYm5fbXVsX3dvcmRzX2N0b3A6CnsgLm1maTsJKHAyNSkJZ2V0Zi5zaWcJcjM2PWY1MgkJCS8vIGxvdwoJKHAyMSkJeG1weS5sdQkJZjQ4PWYzNyxmOAoJKHAyOCkJY21wLmx0dQkJcDU0LHA1MD1yNDEscjM5CX0KeyAubWZpOwkocDE2KQlsZGY4CQlmMzI9W3IxNV0sOAoJKHAyMSkJeG1weS5odQkJZjQwPWYzNyxmOAoJKHAwKQlub3AuaQkJMHgwCQl9OzsKeyAubWlpOwkocDI1KQlnZXRmLnNpZwlyMzI9ZjQ0CQkJLy8gaGlnaAoJLnByZWQucmVsCSJtdXRleCIscDUwLHA1NAoJKHA1MCkJYWRkCQlyNDA9cjM4LHIzNQkJLy8gKHAyNykKCShwNTQpCWFkZAkJcjQwPXIzOCxyMzUsMQl9CS8vIChwMjcpCnsgLm1mYjsJKHAyOCkJc3Q4CQlbcjE0XT1yNDEsOAoJKHAwKQlub3AuZgkJMHgwCglici5jdG9wLnNwdGsJLkxfYm5fbXVsX3dvcmRzX2N0b3AJfTs7Ci5MX2JuX211bF93b3Jkc19jZW5kOgoKeyAubWlpOwlub3AubQkJMHgwCi5wcmVkLnJlbAkibXV0ZXgiLHA1MSxwNTUKKHA1MSkJYWRkCQlyOD1yMzYscjAKKHA1NSkJYWRkCQlyOD1yMzYscjAsMQl9CnsgLm1mYjsJbm9wLm0JMHgwCglub3AuZgkweDAKCW5vcC5iCTB4MAkJCX0KCiNlbHNlCS8vIFhNQV9URU1QVEFUSU9OCgoJc2V0Zi5zaWcJZjM3PXIwCS8vIHNlcnZlcyBhcyBjYXJyeSBhdCAocDE4KSB0aWNrCgltb3YJCWFyLmxjPXIxMAoJbW92CQlhci5lYz01OzsKCi8vIE1vc3Qgb2YgeW91IGV4YW1pbmluZyB0aGlzIGNvZGUgdmVyeSBsaWtlbHkgd29uZGVyIHdoeSBpbiB0aGUgbmFtZQovLyBvZiBJbnRlbCB0aGUgZm9sbG93aW5nIGxvb3AgaXMgY29tbWVudGVkIG91dD8gSW5kZWVkLCBpdCBsb29rcyBzbwovLyBuZWF0IHRoYXQgeW91IGZpbmQgaXQgaGFyZCB0byBiZWxpZXZlIHRoYXQgaXQncyBzb21ldGhpbmcgd3JvbmcKLy8gd2l0aCBpdCwgcmlnaHQ/IFRoZSBjYXRjaCBpcyB0aGF0IGV2ZXJ5IGl0ZXJhdGlvbiBkZXBlbmRzIG9uIHRoZQovLyByZXN1bHQgZnJvbSBwcmV2aW91cyBvbmUgYW5kIHRoZSBsYXR0ZXIgaXNuJ3QgYXZhaWxhYmxlIGluc3RhbnRseS4KLy8gVGhlIGxvb3AgdGhlcmVmb3JlIHNwaW5zIGF0IHRoZSBsYXRlbmN5IG9mIHhtYSBtaW51cyAxLCBvciBpbiBvdGhlcgovLyB3b3JkcyBhdCA2KihuKzQpIHRpY2tzOi0oIENvbXBhcmUgdG8gdGhlICJwcm9kdWN0aW9uIiBsb29wIGFib3ZlCi8vIHRoYXQgcnVucyBpbiAyKihuKzExKSB3aGVyZSB0aGUgbG93IGxhdGVuY3kgcHJvYmxlbSBpcyB3b3JrZWQgYXJvdW5kCi8vIGJ5IG1vdmluZyB0aGUgZGVwZW5kZW5jeSB0byBvbmUtdGljayBsYXRlbnQgaW50ZXJnZXIgQUxVLiBOb3RlIHRoYXQKLy8gImRpc3RhbmNlIiBiZXR3ZWVuIGxkZjggYW5kIHhtYSBpcyBub3QgbGF0ZW5jeSBvZiBsZGY4LCBidXQgdGhlCi8vICpkaWZmZXJlbmNlKiBiZXR3ZWVuIHhtYSBhbmQgbGRmOCBsYXRlbmNpZXMuCi5MX2JuX211bF93b3Jkc19jdG9wOgp7IC5tZmk7CShwMTYpCWxkZjgJCWYzMj1bcjMzXSw4CgkocDE4KQl4bWEuaHUJCWYzOD1mMzQsZjgsZjM5CX0KeyAubWZiOwkocDIwKQlzdGY4CQlbcjMyXT1mMzcsOAoJKHAxOCkJeG1hLmx1CQlmMzU9ZjM0LGY4LGYzOQoJYnIuY3RvcC5zcHRrCS5MX2JuX211bF93b3Jkc19jdG9wCX07OwouTF9ibl9tdWxfd29yZHNfY2VuZDoKCglnZXRmLnNpZwlyOD1mNDEJCS8vIHRoZSByZXR1cm4gdmFsdWUKCiNlbmRpZgkvLyBYTUFfVEVNUFRBVElPTgoKeyAubWlpOwlub3AubQkJMHgwCgltb3YJCXByPXI5LDB4MWZmZmYKCW1vdgkJYXIubGM9cjMJfQp7IC5tZmI7CXJ1bQkJMTw8NQkJLy8gY2xlYXIgdW0ubWZoCglub3AuZgkJMHgwCglici5yZXQuc3B0ay5tYW55CWIwCX07OwouZW5kcAlibl9tdWxfd29yZHMjCiNlbmRpZgoKI2lmIDEKLy8KLy8gQk5fVUxPTkcgYm5fbXVsX2FkZF93b3JkcyhCTl9VTE9ORyAqcnAsIEJOX1VMT05HICphcCwgaW50IG51bSwgQk5fVUxPTkcgdykKLy8KLmdsb2JhbAlibl9tdWxfYWRkX3dvcmRzIwoucHJvYwlibl9tdWxfYWRkX3dvcmRzIwouYWxpZ24JNjQKLnNraXAJNDgJLy8gbWFrZXMgdGhlIGxvb3AgYm9keSBhbGlnbmVkIGF0IDY0LWJ5dGUgYm91bmRhcnkKYm5fbXVsX2FkZF93b3JkczoKCS5wcm9sb2d1ZQoJLnNhdmUJYXIucGZzLHIyCnsgLm1taTsJYWxsb2MJCXIyPWFyLnBmcyw0LDQsMCw4CgljbXA0LmxlCQlwNixwMD1yMzQscjAKCS5zYXZlCWFyLmxjLHIzCgltb3YJCXIzPWFyLmxjCX07Owp7IC5taWI7CW1vdgkJcjg9cjAJCS8vIHJldHVybiB2YWx1ZQoJc3ViCQlyMTA9cjM0LHIwLDEKKHA2KQlici5yZXQuc3BudC5tYW55CWIwCX07OwoKeyAubWliOwlzZXRmLnNpZwlmOD1yMzUJCS8vIHcKCS5zYXZlCXByLHI5Cgltb3YJCXI5PXByCglicnAubG9vcC5pbXAJLkxfYm5fbXVsX2FkZF93b3Jkc19jdG9wLC5MX2JuX211bF9hZGRfd29yZHNfY2VuZC0xNgoJCQkJCX0KCS5ib2R5CnsgLm1taTsJQUREUAkJcjE0PTAscjMyCS8vIHJwCglBRERQCQlyMTU9MCxyMzMJLy8gYXAKCW1vdgkJYXIubGM9cjEwCX0KeyAubWlpOwlBRERQCQlyMTY9MCxyMzIJLy8gcnAgY29weQoJbW92CQlwci5yb3Q9MHgyMDAxPDwxNgoJCQkvLyAtLS0tLS1eLS0tLS0gc2VydmVzIGFzIChwNDApIGF0IGZpcnN0IChwMjcpCgltb3YJCWFyLmVjPTExCX07OwoKLy8gVGhpcyBsb29wIHNwaW5zIGluIDMqKG4rMTApIHRpY2tzIG9uIEl0YW5pdW0gYW5kIGluIDIqKG4rMTApIG9uCi8vIEl0YW5pdW0gMi4gWWVzLCB1bmxpa2UgcHJldmlvdXMgdmVyc2lvbnMgaXQgc2NhbGVzOi0pIFByZXZpb3VzCi8vIHZlcnNpb24gd2FzIHBlZm9ybWluZyAqYWxsKiBhZGRpdGlvbnMgaW4gSUFMVSBhbmQgd2FzIHN0YXJ2aW5nCi8vIGZvciB0aG9zZSBldmVuIG9uIEl0YW5pdW0gMi4gSW4gdGhpcyB2ZXJzaW9uIG9uZSBhZGRpdGlvbiBpcwovLyBtb3ZlZCB0byBGUFUgYW5kIGlzIGZvbGRlZCB3aXRoIG11bHRpcGxpY2F0aW9uLiBUaGlzIGlzIGF0IGNvc3QKLy8gb2YgcHJvcG9nYXRpbmcgdGhlIHJlc3VsdCBmcm9tIHByZXZpb3VzIGNhbGwgdG8gdGhpcyBzdWJyb3V0aW5lCi8vIHRvIEwyIGNhY2hlLi4uIEluIG90aGVyIHdvcmRzIG5lZ2xpZ2libGUgZXZlbiBmb3Igc2hvcnRlciBrZXlzLgovLyAqT3ZlcmFsbCogcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgW292ZXIgcHJldmlvdXMgdmVyc2lvbl0gdmFyaWVzCi8vIGZyb20gMTEgdG8gMjIgcGVyY2VudCBkZXBlbmRpbmcgb24ga2V5IGxlbmd0aC4KLkxfYm5fbXVsX2FkZF93b3Jkc19jdG9wOgoucHJlZC5yZWwJIm11dGV4IixwNDAscDQyCnsgLm1maTsJKHAyMykJZ2V0Zi5zaWcJcjM2PWY0NQkJCS8vIGxvdwoJKHAyMCkJeG1hLmx1CQlmNDI9ZjM2LGY4LGY1MAkJLy8gbG93CgkocDQwKQlhZGQJCXIzOT1yMzkscjM1CX0JLy8gKHAyNykKeyAubWZpOwkocDE2KQlsZGY4CQlmMzI9W3IxNV0sOAkJLy8gKihhcCsrKQoJKHAyMCkJeG1hLmh1CQlmMzY9ZjM2LGY4LGY1MAkJLy8gaGlnaAoJKHA0MikJYWRkCQlyMzk9cjM5LHIzNSwxCX07OwkvLyAocDI3KQp7IC5tbWk7CShwMjQpCWdldGYuc2lnCXIzMj1mNDAJCQkvLyBoaWdoCgkocDE2KQlsZGY4CQlmNDY9W3IxNl0sOAkJLy8gKihycDErKykKCShwNDApCWNtcC5sdHUJCXA0MSxwMzk9cjM5LHIzNQl9CS8vIChwMjcpCnsgLm1pYjsJKHAyNikJc3Q4CQlbcjE0XT1yMzksOAkJLy8gKihycDIrKykKCShwNDIpCWNtcC5sZXUJCXA0MSxwMzk9cjM5LHIzNQkJLy8gKHAyNykKCWJyLmN0b3Auc3B0awkuTF9ibl9tdWxfYWRkX3dvcmRzX2N0b3B9OzsKLkxfYm5fbXVsX2FkZF93b3Jkc19jZW5kOgoKeyAubW1pOwkucHJlZC5yZWwJIm11dGV4IixwNDAscDQyCihwNDApCWFkZAkJcjg9cjM1LHIwCihwNDIpCWFkZAkJcjg9cjM1LHIwLDEKCW1vdgkJcHI9cjksMHgxZmZmZgl9CnsgLm1pYjsJcnVtCQkxPDw1CQkvLyBjbGVhciB1bS5tZmgKCW1vdgkJYXIubGM9cjMKCWJyLnJldC5zcHRrLm1hbnkJYjAJfTs7Ci5lbmRwCWJuX211bF9hZGRfd29yZHMjCiNlbmRpZgoKI2lmIDEKLy8KLy8gdm9pZCBibl9zcXJfd29yZHMoQk5fVUxPTkcgKnJwLCBCTl9VTE9ORyAqYXAsIGludCBudW0pCi8vCi5nbG9iYWwJYm5fc3FyX3dvcmRzIwoucHJvYwlibl9zcXJfd29yZHMjCi5hbGlnbgk2NAouc2tpcAkzMgkvLyBtYWtlcyB0aGUgbG9vcCBib2R5IGFsaWduZWQgYXQgNjQtYnl0ZSBib3VuZGFyeSAKYm5fc3FyX3dvcmRzOgoJLnByb2xvZ3VlCgkuc2F2ZQlhci5wZnMscjIKeyAubWlpOwlhbGxvYwkJcjI9YXIucGZzLDMsMCwwLDAKCXN4dDQJCXIzND1yMzQJCX07Owp7IC5taWk7CWNtcC5sZQkJcDYscDA9cjM0LHIwCgltb3YJCXI4PXIwCQl9CS8vIHJldHVybiB2YWx1ZQp7IC5tZmI7CUFERFAJCXIzMj0wLHIzMgoJbm9wLmYJCTB4MAoocDYpCWJyLnJldC5zcG50Lm1hbnkJYjAJfTs7Cgp7IC5taWk7CXN1YglyMTA9cjM0LHIwLDEKCS5zYXZlCWFyLmxjLHIzCgltb3YJcjM9YXIubGMKCS5zYXZlCXByLHI5Cgltb3YJcjk9cHIJCQl9OzsKCgkuYm9keQp7IC5taWI7CUFERFAJCXIzMz0wLHIzMwoJbW92CQlwci5yb3Q9MTw8MTYKCWJycC5sb29wLmltcAkuTF9ibl9zcXJfd29yZHNfY3RvcCwuTF9ibl9zcXJfd29yZHNfY2VuZC0xNgoJCQkJCX0KeyAubWlpOwlhZGQJCXIzND04LHIzMgoJbW92CQlhci5sYz1yMTAKCW1vdgkJYXIuZWM9MTgJfTs7CgovLyAyKihuKzE3KSBvbiBJdGFuaXVtLCAobisxNykgb24gIndpZGVyIiBJQS02NCBpbXBsZW1lbnRhdGlvbnMuIEl0J3MKLy8gcG9zc2libGUgdG8gY29tcHJlc3MgdGhlIGVwaWxvZ3VlIChJJ20gZ2V0dGluZyB0aXJlZCB0byB3cml0ZSB0aGlzCi8vIGNvbW1lbnQgb3ZlciBhbmQgb3ZlcikgYW5kIGdldCBkb3duIHRvIDIqbisxNiBhdCB0aGUgY29zdCBvZgovLyBzY2FsYWJpbGl0eS4gVGhlIGRlY2lzaW9uIHdpbGwgdmVyeSBsaWtlbHkgYmUgcmVjb25zaWRlcmVkIGFmdGVyIHRoZQovLyBiZW5jaG1hcmsgcHJvZ3JhbSBpcyBwcm9maWxlZC4gSS5lLiBpZiBwZXJmb21hbmNlIGdhaW4gb24gSXRhbml1bQovLyB3aWxsIGFwcGVhciBsYXJnZXIgdGhhbiBsb3NzIG9uICJ3aWRlciIgSUEtNjQsIHRoZW4gdGhlIGxvb3Agc2hvdWxkCi8vIGJlIGV4cGxpY2l0ZWx5IHNwbGl0IGFuZCB0aGUgZXBpbG9ndWUgY29tcHJlc3NlZC4KLkxfYm5fc3FyX3dvcmRzX2N0b3A6CnsgLm1maTsJKHAxNikJbGRmOAkJZjMyPVtyMzNdLDgKCShwMjUpCXhtcHkubHUJCWY0Mj1mNDEsZjQxCgkocDApCW5vcC5pCQkweDAJCX0KeyAubWliOwkocDMzKQlzdGY4CQlbcjMyXT1mNTAsMTYKCShwMCkJbm9wLmkJCTB4MAoJKHAwKQlub3AuYgkJMHgwCQl9CnsgLm1maTsJKHAwKQlub3AubQkJMHgwCgkocDI1KQl4bXB5Lmh1CQlmNTI9ZjQxLGY0MQoJKHAwKQlub3AuaQkJMHgwCQl9CnsgLm1pYjsJKHAzMykJc3RmOAkJW3IzNF09ZjYwLDE2CgkocDApCW5vcC5pCQkweDAKCWJyLmN0b3Auc3B0awkuTF9ibl9zcXJfd29yZHNfY3RvcAl9OzsKLkxfYm5fc3FyX3dvcmRzX2NlbmQ6Cgp7IC5taWk7CW5vcC5tCQkweDAKCW1vdgkJcHI9cjksMHgxZmZmZgoJbW92CQlhci5sYz1yMwl9CnsgLm1mYjsJcnVtCQkxPDw1CQkvLyBjbGVhciB1bS5tZmgKCW5vcC5mCQkweDAKCWJyLnJldC5zcHRrLm1hbnkJYjAJfTs7Ci5lbmRwCWJuX3Nxcl93b3JkcyMKI2VuZGlmCgojaWYgMQovLyBBcHBhcmVudGx5IHdlIHdpbiBub3RoaW5nIGJ5IGltcGxlbWVudGluZyBzcGVjaWFsIGJuX3Nxcl9jb21iYTguCi8vIFllcywgaXQgaXMgcG9zc2libGUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbXVsdGlwbGljYXRpb25zIGJ5Ci8vIGFsbW9zdCBmYWN0b3Igb2YgdHdvLCBidXQgdGhlbiB0aGUgYW1vdW50IG9mIGFkZGl0aW9ucyB3b3VsZAovLyBpbmNyZWFzZSBieSBmYWN0b3Igb2YgdHdvIChhcyB3ZSB3b3VsZCBoYXZlIHRvIHBlcmZvcm0gdGhvc2UKLy8gb3RoZXJ3aXNlIHBlcmZvcm1lZCBieSB4bWEgb3Vyc2VsdmVzKS4gTm9ybWFsbHkgd2Ugd291bGQgdHJhZGUKLy8gYW55d2F5IGFzIG11bHRpcGxpY2F0aW9ucyBhcmUgd2F5IG1vcmUgZXhwZW5zaXZlLCBidXQgbm90IHRoaXMKLy8gdGltZS4uLiBNdWx0aXBsaWNhdGlvbiBrZXJuZWwgaXMgZnVsbHkgcGlwZWxpbmVkIGFuZCBhcyB3ZSBkcmFpbgovLyBvbmUgMTI4LWJpdCBtdWx0aXBsaWNhdGlvbiByZXN1bHQgcGVyIGNsb2NrIGN5Y2xlIG11bHRpcGxpY2F0aW9ucwovLyBhcmUgZWZmZWN0aXZlbHkgYXMgaW5leHBlbnNpdmUgYXMgYWRkaXRpb25zLiBTcGVjaWFsIGltcGxlbWVudGF0aW9uCi8vIG1pZ2h0IGJlY29tZSBvZiBpbnRlcmVzdCBmb3IgIndpZGVyIiBJQS02NCBpbXBsZW1lbnRhdGlvbiBhcyB5b3UnbGwKLy8gYmUgYWJsZSB0byBnZXQgdGhyb3VnaCB0aGUgbXVsdGlwbGljYXRpb24gcGhhc2UgZmFzdGVyICh0aGVyZSB3b24ndAovLyBiZSBhbnkgc3RhbGwgaXNzdWVzIGFzIGRpc2N1c3NlZCBpbiB0aGUgY29tbWVudGFyeSBzZWN0aW9uIGJlbG93IGFuZAovLyB5b3UgdGhlcmVmb3JlIHdpbGwgYmUgYWJsZSB0byBlbXBsb3kgYWxsIDQgRlAgdW5pdHMpLi4uIEJ1dCB0aGVzZQovLyBJdGFuaXVtIGRheXMgaXQncyBzaW1wbHkgdG9vIGhhcmQgdG8ganVzdGlmeSB0aGUgZWZmb3J0IHNvIEkganVzdAovLyBkcm9wIGRvd24gdG8gYm5fbXVsX2NvbWJhOCBjb2RlOi0pCi8vCi8vIHZvaWQgYm5fc3FyX2NvbWJhOChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEpCi8vCi5nbG9iYWwJYm5fc3FyX2NvbWJhOCMKLnByb2MJYm5fc3FyX2NvbWJhOCMKLmFsaWduCTY0CmJuX3Nxcl9jb21iYTg6CgkucHJvbG9ndWUKCS5zYXZlCWFyLnBmcyxyMgojaWYgZGVmaW5lZChfSFBVWF9TT1VSQ0UpICYmICFkZWZpbmVkKF9MUDY0KQp7IC5taWk7CWFsbG9jCXIyPWFyLnBmcywyLDEsMCwwCglhZGRwNAlyMzM9MCxyMzMKCWFkZHA0CXIzMj0wLHIzMgkJfTs7CnsgLm1paTsKI2Vsc2UKeyAubWlpOwlhbGxvYwlyMj1hci5wZnMsMiwxLDAsMAojZW5kaWYKCW1vdglyMzQ9cjMzCglhZGQJcjE0PTgscjMzCQl9OzsKCS5ib2R5CnsgLm1paTsJYWRkCXIxNz04LHIzNAoJYWRkCXIxNT0xNixyMzMKCWFkZAlyMTg9MTYscjM0CQl9CnsgLm1mYjsJYWRkCXIxNj0yNCxyMzMKCWJyCS5MX2NoZWF0X2VudHJ5X3BvaW50OAl9OzsKLmVuZHAJYm5fc3FyX2NvbWJhOCMKI2VuZGlmCgojaWYgMQovLyBJJ3ZlIGVzdGltYXRlZCB0aGlzIHJvdXRpbmUgdG8gcnVuIGluIH4xMjAgdGlja3MsIGJ1dCBpbiByZWFsaXR5Ci8vIChpLmUuIGFjY29yZGluZyB0byBhci5pdGMpIGl0IHRha2VzIH4xNjAgdGlja3MuIEFyZSB0aG9zZSBleHRyYQovLyBjeWNsZXMgY29uc3VtZWQgZm9yIGluc3RydWN0aW9ucyBmZXRjaD8gT3IgZGlkIEkgbWlzaW50ZXJwcmV0IHNvbWUKLy8gY2xhdXNlIGluIEl0YW5pdW0gtS1hcmNoaXRlY3R1cmUgbWFudWFsPyBDb21tZW50cyBhcmUgd2VsY29tZWQgYW5kCi8vIGhpZ2hseSBhcHByZWNpYXRlZC4KLy8KLy8gT24gSXRhbml1bSAyIGl0IHRha2VzIH4xOTAgdGlja3MuIFRoaXMgaXMgYmVjYXVzZSBvZiBzdGFsbHMgb24KLy8gcmVzdWx0IGZyb20gZ2V0Zi5zaWcuIEkgZG8gbm90aGluZyBhYm91dCBpdCBhdCB0aGlzIHBvaW50IGZvcgovLyByZWFzb25zIGRlcGljdGVkIGJlbG93LgovLwovLyBIb3dldmVyISBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBldmVuIDE2MCB0aWNrcyBpcyBkYXJuIGdvb2QgcmVzdWx0Ci8vIGFzIGl0J3Mgb3ZlciAxMCAoeWVzLCB0ZW4sIHNwZWxsZWQgYXMgdC1lLW4pIHRpbWVzIGZhc3RlciB0aGFuIHRoZQovLyBDIHZlcnNpb24gKGNvbXBpbGVkIHdpdGggZ2NjIHdpdGggaW5saW5lIGFzc2VtYmxlcikuIEkgcmVhbGx5Ci8vIGtpY2tlZCBjb21waWxlcidzIGJ1dHQgaGVyZSwgZGlkbid0IEk/IFllYWghIFRoaXMgYnJpbmdzIHVzIHRvIHRoZQovLyBmb2xsb3dpbmcgc3RhdGVtZW50LiBJdCdzIGRhbW4gc2hhbWUgdGhhdCB0aGlzIHJvdXRpbmUgaXNuJ3QgY2FsbGVkCi8vIHZlcnkgb2Z0ZW4gbm93YWRheXMhIEFjY29yZGluZyB0byB0aGUgcHJvZmlsZXIgbW9zdCBDUFUgdGltZSBpcwovLyBjb25zdW1lZCBieSBibl9tdWxfYWRkX3dvcmRzIGNhbGxlZCBmcm9tIEJOX2Zyb21fbW9udGdvbWVyeS4gSW4KLy8gb3JkZXIgdG8gZXN0aW1hdGUgd2hhdCB3ZSdyZSBtaXNzaW5nLCBJJ3ZlIGNvbXBhcmVkIHRoZSBwZXJmb3JtYW5jZQovLyBvZiB0aGlzIHJvdXRpbmUgYWdhaW5zdCAidHJhZGl0aW9uYWwiIGltcGxlbWVudGF0aW9uLCBpLmUuIGFnYWluc3QKLy8gZm9sbG93aW5nIHJvdXRpbmU6Ci8vCi8vIHZvaWQgYm5fbXVsX2NvbWJhOChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEsIEJOX1VMT05HICpiKQovLyB7CXJbIDhdPWJuX211bF93b3JkcyggICAgJihyWzBdKSxhLDgsYlswXSk7Ci8vCXJbIDldPWJuX211bF9hZGRfd29yZHMoJihyWzFdKSxhLDgsYlsxXSk7Ci8vCXJbMTBdPWJuX211bF9hZGRfd29yZHMoJihyWzJdKSxhLDgsYlsyXSk7Ci8vCXJbMTFdPWJuX211bF9hZGRfd29yZHMoJihyWzNdKSxhLDgsYlszXSk7Ci8vCXJbMTJdPWJuX211bF9hZGRfd29yZHMoJihyWzRdKSxhLDgsYls0XSk7Ci8vCXJbMTNdPWJuX211bF9hZGRfd29yZHMoJihyWzVdKSxhLDgsYls1XSk7Ci8vCXJbMTRdPWJuX211bF9hZGRfd29yZHMoJihyWzZdKSxhLDgsYls2XSk7Ci8vCXJbMTVdPWJuX211bF9hZGRfd29yZHMoJihyWzddKSxhLDgsYls3XSk7Ci8vIH0KLy8KLy8gVGhlIG9uZSBiZWxvdyBpcyBvdmVyIDggdGltZXMgZmFzdGVyIHRoYW4gdGhlIG9uZSBhYm92ZTotKCBFdmVuCi8vIG1vcmUgcmVhc29ucyB0byAiY29tYmFmeSIgYm5fbXVsX2FkZF9tb250Li4uCi8vCi8vIEFuZCB5ZXMsIHRoaXMgcm91dGluZSByZWFsbHkgbWFkZSBtZSB3aXNoIHRoZXJlIHdlcmUgYW4gb3B0aW1pemluZwovLyBhc3NlbWJsZXIhIEl0IGFsc28gZmVlbHMgbGlrZSBpdCBkZXNlcnZlcyBhIGRlZGljYXRpb24uCi8vCi8vCVRvIG15IHdpZmUgZm9yIGJlaW5nIHRoZXJlIGFuZCB0byBteSBraWRzLi4uCi8vCi8vIHZvaWQgYm5fbXVsX2NvbWJhOChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEsIEJOX1VMT05HICpiKQovLwojZGVmaW5lCWNhcnJ5MQlyMTQKI2RlZmluZQljYXJyeTIJcjE1CiNkZWZpbmUJY2FycnkzCXIzNAouZ2xvYmFsCWJuX211bF9jb21iYTgjCi5wcm9jCWJuX211bF9jb21iYTgjCi5hbGlnbgk2NApibl9tdWxfY29tYmE4OgoJLnByb2xvZ3VlCgkuc2F2ZQlhci5wZnMscjIKI2lmIGRlZmluZWQoX0hQVVhfU09VUkNFKSAmJiAhZGVmaW5lZChfTFA2NCkKeyAubWlpOwlhbGxvYwlyMj1hci5wZnMsMywwLDAsMAoJYWRkcDQJcjMzPTAscjMzCglhZGRwNAlyMzQ9MCxyMzQJCX07Owp7IC5taWk7CWFkZHA0CXIzMj0wLHIzMgojZWxzZQp7IC5taWk7CWFsbG9jICAgcjI9YXIucGZzLDMsMCwwLDAKI2VuZGlmCglhZGQJcjE0PTgscjMzCglhZGQJcjE3PTgscjM0CQl9CgkuYm9keQp7IC5taWk7CWFkZAlyMTU9MTYscjMzCglhZGQJcjE4PTE2LHIzNAoJYWRkCXIxNj0yNCxyMzMJCX0KLkxfY2hlYXRfZW50cnlfcG9pbnQ4Ogp7IC5tbWk7CWFkZAlyMTk9MjQscjM0CgoJbGRmOAlmMzI9W3IzM10sMzIJCX07OwoKeyAubW1pOwlsZGY4CWYxMjA9W3IzNF0sMzIKCWxkZjgJZjEyMT1bcjE3XSwzMgkJfQp7IC5tbWk7CWxkZjgJZjEyMj1bcjE4XSwzMgoJbGRmOAlmMTIzPVtyMTldLDMyCQl9OzsKeyAubW1pOwlsZGY4CWYxMjQ9W3IzNF0KCWxkZjgJZjEyNT1bcjE3XQkJfQp7IC5tbWk7CWxkZjgJZjEyNj1bcjE4XQoJbGRmOAlmMTI3PVtyMTldCQl9Cgp7IC5tbWk7CWxkZjgJZjMzPVtyMTRdLDMyCglsZGY4CWYzND1bcjE1XSwzMgkJfQp7IC5tbWk7CWxkZjgJZjM1PVtyMTZdLDMyOzsKCWxkZjgJZjM2PVtyMzNdCQl9CnsgLm1taTsJbGRmOAlmMzc9W3IxNF0KCWxkZjgJZjM4PVtyMTVdCQl9CnsgLm1maTsJbGRmOAlmMzk9W3IxNl0KLy8gLS0tLS0tLVwgRW50ZXJpbmcgbXVsdGlwbGllcidzIGhlYXZlbiAvLS0tLS0tLQovLyAtLS0tLS0tLS0tLS1cICAgICAgICAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tCi8vIC0tLS0tLS0tLS0tLS0tLS0tXCAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tLS0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCXhtYS5odQlmNDE9ZjMyLGYxMjAsZjAJCX0KeyAubWZpOwkJeG1hLmx1CWY0MD1mMzIsZjEyMCxmMAkJfTs7IC8vICgqKQp7IC5tZmk7CQl4bWEuaHUJZjUxPWYzMixmMTIxLGYwCQl9CnsgLm1maTsJCXhtYS5sdQlmNTA9ZjMyLGYxMjEsZjAJCX07Owp7IC5tZmk7CQl4bWEuaHUJZjYxPWYzMixmMTIyLGYwCQl9CnsgLm1maTsJCXhtYS5sdQlmNjA9ZjMyLGYxMjIsZjAJCX07Owp7IC5tZmk7CQl4bWEuaHUJZjcxPWYzMixmMTIzLGYwCQl9CnsgLm1maTsJCXhtYS5sdQlmNzA9ZjMyLGYxMjMsZjAJCX07Owp7IC5tZmk7CQl4bWEuaHUJZjgxPWYzMixmMTI0LGYwCQl9CnsgLm1maTsJCXhtYS5sdQlmODA9ZjMyLGYxMjQsZjAJCX07Owp7IC5tZmk7CQl4bWEuaHUJZjkxPWYzMixmMTI1LGYwCQl9CnsgLm1maTsJCXhtYS5sdQlmOTA9ZjMyLGYxMjUsZjAJCX07Owp7IC5tZmk7CQl4bWEuaHUJZjEwMT1mMzIsZjEyNixmMAl9CnsgLm1maTsJCXhtYS5sdQlmMTAwPWYzMixmMTI2LGYwCX07Owp7IC5tZmk7CQl4bWEuaHUJZjExMT1mMzIsZjEyNyxmMAl9CnsgLm1maTsJCXhtYS5sdQlmMTEwPWYzMixmMTI3LGYwCX07Oy8vCi8vICgqKQlZb3UgY2FuIGFyZ3VlIHRoYXQgc3BsaXR0aW5nIGF0IGV2ZXJ5IHNlY29uZCBidW5kbGUgd291bGQKLy8JcHJldmVudCAid2lkZXIiIElBLTY0IGltcGxlbWVudGF0aW9ucyBmcm9tIGFjaGlldmluZyB0aGUgcGVhawovLwlwZXJmb3JtYW5jZS4gV2VsbCwgbm90IHJlYWxseS4uLiBUaGUgY2F0Y2ggaXMgdGhhdCBpZiB5b3UKLy8JaW50ZW5kIHRvIGtlZXAgNCBGUCB1bml0cyBidXN5IGJ5IHNwbGl0dGluZyBhdCBldmVyeSBmb3VydGgKLy8JYnVuZGxlIGFuZCB0aHVzIHBlcmZvcm0gdGhlc2UgMTYgbXVsdGlwbGljYXRpb25zIGluIDQgdGlja3MsCi8vCXRoZSBmaXJzdCBidW5kbGUgKmJlbG93KiB3b3VsZCBzdGFsbCBiZWNhdXNlIHRoZSByZXN1bHQgZnJvbQovLwl0aGUgZmlyc3QgeG1hIGJ1bmRsZSAqYWJvdmUqIHdvbid0IGJlIGF2YWlsYWJsZSBmb3IgYW5vdGhlciAzCi8vCXRpY2tzIChpZiBub3QgbW9yZSwgYmVpbmcgYW4gb3B0aW1pc3QsIEkgYXNzdW1lIHRoYXQgIndpZGVyIgovLwlpbXBsZW1lbnRhdGlvbiB3aWxsIGhhdmUgc2FtZSBsYXRlbmN5Oi0pLiBUaGlzIHN0YWxsIHdpbGwgaG9sZAovLwl5b3UgYmFjayBhbmQgdGhlIHBlcmZvcm1hbmNlIHdvdWxkIGJlIGFzIGlmIGV2ZXJ5IHNlY29uZCBidW5kbGUKLy8Jd2VyZSBzcGxpdCAqYW55d2F5Ki4uLgp7IC5tZmk7CWdldGYuc2lnCXIxNj1mNDAKCQl4bWEuaHUJZjQyPWYzMyxmMTIwLGY0MQoJYWRkCQlyMzM9OCxyMzIJCX0KeyAubWZpOwkJeG1hLmx1CWY0MT1mMzMsZjEyMCxmNDEJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjI0PWY1MAoJCXhtYS5odQlmNTI9ZjMzLGYxMjEsZjUxCX0KeyAubWZpOwkJeG1hLmx1CWY1MT1mMzMsZjEyMSxmNTEJfTs7CnsgLm1maTsJc3Q4CQlbcjMyXT1yMTYsMTYKCQl4bWEuaHUJZjYyPWYzMyxmMTIyLGY2MQl9CnsgLm1maTsJCXhtYS5sdQlmNjE9ZjMzLGYxMjIsZjYxCX07Owp7IC5tZmk7CQl4bWEuaHUJZjcyPWYzMyxmMTIzLGY3MQl9CnsgLm1maTsJCXhtYS5sdQlmNzE9ZjMzLGYxMjMsZjcxCX07Owp7IC5tZmk7CQl4bWEuaHUJZjgyPWYzMyxmMTI0LGY4MQl9CnsgLm1maTsJCXhtYS5sdQlmODE9ZjMzLGYxMjQsZjgxCX07Owp7IC5tZmk7CQl4bWEuaHUJZjkyPWYzMyxmMTI1LGY5MQl9CnsgLm1maTsJCXhtYS5sdQlmOTE9ZjMzLGYxMjUsZjkxCX07Owp7IC5tZmk7CQl4bWEuaHUJZjEwMj1mMzMsZjEyNixmMTAxCX0KeyAubWZpOwkJeG1hLmx1CWYxMDE9ZjMzLGYxMjYsZjEwMQl9OzsKeyAubWZpOwkJeG1hLmh1CWYxMTI9ZjMzLGYxMjcsZjExMQl9CnsgLm1maTsJCXhtYS5sdQlmMTExPWYzMyxmMTI3LGYxMTEJfTs7Ly8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KeyAubWZpOwlnZXRmLnNpZwlyMjU9ZjQxCgkJeG1hLmh1CWY0Mz1mMzQsZjEyMCxmNDIJfQp7IC5tZmk7CQl4bWEubHUJZjQyPWYzNCxmMTIwLGY0Mgl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMTY9ZjYwCgkJeG1hLmh1CWY1Mz1mMzQsZjEyMSxmNTIJfQp7IC5tZmk7CQl4bWEubHUJZjUyPWYzNCxmMTIxLGY1Mgl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMTc9ZjUxCgkJeG1hLmh1CWY2Mz1mMzQsZjEyMixmNjIKCWFkZAkJcjI1PXIyNSxyMjQJCX0KeyAubWZpOwkJeG1hLmx1CWY2Mj1mMzQsZjEyMixmNjIKCW1vdgkJY2FycnkxPTAJCX07Owp7IC5tZmk7CWNtcC5sdHUJCXA2LHAwPXIyNSxyMjQKCQl4bWEuaHUJZjczPWYzNCxmMTIzLGY3Mgl9CnsgLm1maTsJCXhtYS5sdQlmNzI9ZjM0LGYxMjMsZjcyCX07Owp7IC5tZmk7CXN0OAkJW3IzM109cjI1LDE2CgkJeG1hLmh1CWY4Mz1mMzQsZjEyNCxmODIKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfQp7IC5tZmk7CQl4bWEubHUJZjgyPWYzNCxmMTI0LGY4Mgl9OzsKeyAubWZpOwkJeG1hLmh1CWY5Mz1mMzQsZjEyNSxmOTIJfQp7IC5tZmk7CQl4bWEubHUJZjkyPWYzNCxmMTI1LGY5Mgl9OzsKeyAubWZpOwkJeG1hLmh1CWYxMDM9ZjM0LGYxMjYsZjEwMgl9CnsgLm1maTsJCXhtYS5sdQlmMTAyPWYzNCxmMTI2LGYxMDIJfTs7CnsgLm1maTsJCXhtYS5odQlmMTEzPWYzNCxmMTI3LGYxMTIJfQp7IC5tZmk7CQl4bWEubHUJZjExMj1mMzQsZjEyNyxmMTEyCX07Oy8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCnsgLm1maTsJZ2V0Zi5zaWcJcjE4PWY0MgoJCXhtYS5odQlmNDQ9ZjM1LGYxMjAsZjQzCglhZGQJCXIxNz1yMTcscjE2CQl9CnsgLm1maTsJCXhtYS5sdQlmNDM9ZjM1LGYxMjAsZjQzCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyND1mNzAKCQl4bWEuaHUJZjU0PWYzNSxmMTIxLGY1Mwl9CnsgLm1maTsJbW92CQljYXJyeTI9MAoJCXhtYS5sdQlmNTM9ZjM1LGYxMjEsZjUzCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyNT1mNjEKCQl4bWEuaHUJZjY0PWYzNSxmMTIyLGY2MwoJY21wLmx0dQkJcDcscDA9cjE3LHIxNgkJfQp7IC5tZmk7CWFkZAkJcjE4PXIxOCxyMTcKCQl4bWEubHUJZjYzPWYzNSxmMTIyLGY2Mwl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMjY9ZjUyCgkJeG1hLmh1CWY3ND1mMzUsZjEyMyxmNzMKKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgkJfQp7IC5tZmk7CWNtcC5sdHUJCXA3LHAwPXIxOCxyMTcKCQl4bWEubHUJZjczPWYzNSxmMTIzLGY3MwoJYWRkCQlyMTg9cjE4LGNhcnJ5MQkJfTs7CnsgLm1maTsKCQl4bWEuaHUJZjg0PWYzNSxmMTI0LGY4MwoocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCQl9CnsgLm1maTsJY21wLmx0dQkJcDcscDA9cjE4LGNhcnJ5MQoJCXhtYS5sdQlmODM9ZjM1LGYxMjQsZjgzCX07Owp7IC5tZmk7CXN0OAkJW3IzMl09cjE4LDE2CgkJeG1hLmh1CWY5ND1mMzUsZjEyNSxmOTMKKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgkJfQp7IC5tZmk7CQl4bWEubHUJZjkzPWYzNSxmMTI1LGY5Mwl9OzsKeyAubWZpOwkJeG1hLmh1CWYxMDQ9ZjM1LGYxMjYsZjEwMwl9CnsgLm1maTsJCXhtYS5sdQlmMTAzPWYzNSxmMTI2LGYxMDMJfTs7CnsgLm1maTsJCXhtYS5odQlmMTE0PWYzNSxmMTI3LGYxMTMJfQp7IC5tZmk7CW1vdgkJY2FycnkxPTAKCQl4bWEubHUJZjExMz1mMzUsZjEyNyxmMTEzCglhZGQJCXIyNT1yMjUscjI0CQl9OzsvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwp7IC5tZmk7CWdldGYuc2lnCXIyNz1mNDMKCQl4bWEuaHUJZjQ1PWYzNixmMTIwLGY0NAoJY21wLmx0dQkJcDYscDA9cjI1LHIyNAkJfQp7IC5tZmk7CQl4bWEubHUJZjQ0PWYzNixmMTIwLGY0NAkKCWFkZAkJcjI2PXIyNixyMjUJCX07Owp7IC5tZmk7CWdldGYuc2lnCXIxNj1mODAKCQl4bWEuaHUJZjU1PWYzNixmMTIxLGY1NAoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCQl9CnsgLm1maTsJCXhtYS5sdQlmNTQ9ZjM2LGYxMjEsZjU0CX07Owp7IC5tZmk7CWdldGYuc2lnCXIxNz1mNzEKCQl4bWEuaHUJZjY1PWYzNixmMTIyLGY2NAoJY21wLmx0dQkJcDYscDA9cjI2LHIyNQkJfQp7IC5tZmk7CQl4bWEubHUJZjY0PWYzNixmMTIyLGY2NAoJYWRkCQlyMjc9cjI3LHIyNgkJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjE4PWY2MgoJCXhtYS5odQlmNzU9ZjM2LGYxMjMsZjc0CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEJCX0KeyAubWZpOwljbXAubHR1CQlwNixwMD1yMjcscjI2CgkJeG1hLmx1CWY3ND1mMzYsZjEyMyxmNzQKCWFkZAkJcjI3PXIyNyxjYXJyeTIJCX07Owp7IC5tZmk7CWdldGYuc2lnCXIxOT1mNTMKCQl4bWEuaHUJZjg1PWYzNixmMTI0LGY4NAoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCQl9CnsgLm1maTsJCXhtYS5sdQlmODQ9ZjM2LGYxMjQsZjg0CgljbXAubHR1CQlwNixwMD1yMjcsY2FycnkyCX07Owp7IC5tZmk7CXN0OAkJW3IzM109cjI3LDE2CgkJeG1hLmh1CWY5NT1mMzYsZjEyNSxmOTQKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfQp7IC5tZmk7CQl4bWEubHUJZjk0PWYzNixmMTI1LGY5NAl9OzsKeyAubWZpOwkJeG1hLmh1CWYxMDU9ZjM2LGYxMjYsZjEwNAl9CnsgLm1maTsJbW92CQljYXJyeTI9MAoJCXhtYS5sdQlmMTA0PWYzNixmMTI2LGYxMDQKCWFkZAkJcjE3PXIxNyxyMTYJCX07Owp7IC5tZmk7CQl4bWEuaHUJZjExNT1mMzYsZjEyNyxmMTE0CgljbXAubHR1CQlwNyxwMD1yMTcscjE2CQl9CnsgLm1maTsJCXhtYS5sdQlmMTE0PWYzNixmMTI3LGYxMTQKCWFkZAkJcjE4PXIxOCxyMTcJCX07Oy8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCnsgLm1maTsJZ2V0Zi5zaWcJcjIwPWY0NAoJCXhtYS5odQlmNDY9ZjM3LGYxMjAsZjQ1CihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX0KeyAubWZpOwljbXAubHR1CQlwNyxwMD1yMTgscjE3CgkJeG1hLmx1CWY0NT1mMzcsZjEyMCxmNDUKCWFkZAkJcjE5PXIxOSxyMTgJCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyND1mOTAKCQl4bWEuaHUJZjU2PWYzNyxmMTIxLGY1NQl9CnsgLm1maTsJCXhtYS5sdQlmNTU9ZjM3LGYxMjEsZjU1CX07Owp7IC5tZmk7CWdldGYuc2lnCXIyNT1mODEKCQl4bWEuaHUJZjY2PWYzNyxmMTIyLGY2NQoocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCQl9CnsgLm1maTsJY21wLmx0dQkJcDcscDA9cjE5LHIxOAoJCXhtYS5sdQlmNjU9ZjM3LGYxMjIsZjY1CglhZGQJCXIyMD1yMjAscjE5CQl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMjY9ZjcyCgkJeG1hLmh1CWY3Nj1mMzcsZjEyMyxmNzUKKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgkJfQp7IC5tZmk7CWNtcC5sdHUJCXA3LHAwPXIyMCxyMTkKCQl4bWEubHUJZjc1PWYzNyxmMTIzLGY3NQoJYWRkCQlyMjA9cjIwLGNhcnJ5MQkJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjI3PWY2MwoJCXhtYS5odQlmODY9ZjM3LGYxMjQsZjg1CihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX0KeyAubWZpOwkJeG1hLmx1CWY4NT1mMzcsZjEyNCxmODUKCWNtcC5sdHUJCXA3LHAwPXIyMCxjYXJyeTEJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjI4PWY1NAoJCXhtYS5odQlmOTY9ZjM3LGYxMjUsZjk1CihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX0KeyAubWZpOwlzdDgJCVtyMzJdPXIyMCwxNgoJCXhtYS5sdQlmOTU9ZjM3LGYxMjUsZjk1CX07Owp7IC5tZmk7CQl4bWEuaHUJZjEwNj1mMzcsZjEyNixmMTA1CX0KeyAubWZpOwltb3YJCWNhcnJ5MT0wCgkJeG1hLmx1CWYxMDU9ZjM3LGYxMjYsZjEwNQoJYWRkCQlyMjU9cjI1LHIyNAkJfTs7CnsgLm1maTsJCXhtYS5odQlmMTE2PWYzNyxmMTI3LGYxMTUKCWNtcC5sdHUJCXA2LHAwPXIyNSxyMjQJCX0KeyAubWZpOwkJeG1hLmx1CWYxMTU9ZjM3LGYxMjcsZjExNQoJYWRkCQlyMjY9cjI2LHIyNQkJfTs7Ly8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KeyAubWZpOwlnZXRmLnNpZwlyMjk9ZjQ1CgkJeG1hLmh1CWY0Nz1mMzgsZjEyMCxmNDYKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfQp7IC5tZmk7CWNtcC5sdHUJCXA2LHAwPXIyNixyMjUKCQl4bWEubHUJZjQ2PWYzOCxmMTIwLGY0NgoJYWRkCQlyMjc9cjI3LHIyNgkJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjE2PWYxMDAKCQl4bWEuaHUJZjU3PWYzOCxmMTIxLGY1NgoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCQl9CnsgLm1maTsJY21wLmx0dQkJcDYscDA9cjI3LHIyNgoJCXhtYS5sdQlmNTY9ZjM4LGYxMjEsZjU2CglhZGQJCXIyOD1yMjgscjI3CQl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMTc9ZjkxCgkJeG1hLmh1CWY2Nz1mMzgsZjEyMixmNjYKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfQp7IC5tZmk7CWNtcC5sdHUJCXA2LHAwPXIyOCxyMjcKCQl4bWEubHUJZjY2PWYzOCxmMTIyLGY2NgoJYWRkCQlyMjk9cjI5LHIyOAkJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjE4PWY4MgoJCXhtYS5odQlmNzc9ZjM4LGYxMjMsZjc2CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEJCX0KeyAubWZpOwljbXAubHR1CQlwNixwMD1yMjkscjI4CgkJeG1hLmx1CWY3Nj1mMzgsZjEyMyxmNzYKCWFkZAkJcjI5PXIyOSxjYXJyeTIJCX07Owp7IC5tZmk7CWdldGYuc2lnCXIxOT1mNzMKCQl4bWEuaHUJZjg3PWYzOCxmMTI0LGY4NgoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCQl9CnsgLm1maTsJCXhtYS5sdQlmODY9ZjM4LGYxMjQsZjg2CgljbXAubHR1CQlwNixwMD1yMjksY2FycnkyCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyMD1mNjQKCQl4bWEuaHUJZjk3PWYzOCxmMTI1LGY5NgoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCQl9CnsgLm1maTsJc3Q4CQlbcjMzXT1yMjksMTYKCQl4bWEubHUJZjk2PWYzOCxmMTI1LGY5Ngl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMjE9ZjU1CgkJeG1hLmh1CWYxMDc9ZjM4LGYxMjYsZjEwNgl9CnsgLm1maTsJbW92CQljYXJyeTI9MAoJCXhtYS5sdQlmMTA2PWYzOCxmMTI2LGYxMDYKCWFkZAkJcjE3PXIxNyxyMTYJCX07Owp7IC5tZmk7CQl4bWEuaHUJZjExNz1mMzgsZjEyNyxmMTE2CgljbXAubHR1CQlwNyxwMD1yMTcscjE2CQl9CnsgLm1maTsJCXhtYS5sdQlmMTE2PWYzOCxmMTI3LGYxMTYKCWFkZAkJcjE4PXIxOCxyMTcJCX07Oy8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCnsgLm1maTsJZ2V0Zi5zaWcJcjIyPWY0NgoJCXhtYS5odQlmNDg9ZjM5LGYxMjAsZjQ3CihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX0KeyAubWZpOwljbXAubHR1CQlwNyxwMD1yMTgscjE3CgkJeG1hLmx1CWY0Nz1mMzksZjEyMCxmNDcKCWFkZAkJcjE5PXIxOSxyMTgJCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyND1mMTEwCgkJeG1hLmh1CWY1OD1mMzksZjEyMSxmNTcKKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgkJfQp7IC5tZmk7CWNtcC5sdHUJCXA3LHAwPXIxOSxyMTgKCQl4bWEubHUJZjU3PWYzOSxmMTIxLGY1NwoJYWRkCQlyMjA9cjIwLHIxOQkJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjI1PWYxMDEKCQl4bWEuaHUJZjY4PWYzOSxmMTIyLGY2NwoocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCQl9CnsgLm1maTsJY21wLmx0dQkJcDcscDA9cjIwLHIxOQoJCXhtYS5sdQlmNjc9ZjM5LGYxMjIsZjY3CglhZGQJCXIyMT1yMjEscjIwCQl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMjY9ZjkyCgkJeG1hLmh1CWY3OD1mMzksZjEyMyxmNzcKKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgkJfQp7IC5tZmk7CWNtcC5sdHUJCXA3LHAwPXIyMSxyMjAKCQl4bWEubHUJZjc3PWYzOSxmMTIzLGY3NwoJYWRkCQlyMjI9cjIyLHIyMQkJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjI3PWY4MwoJCXhtYS5odQlmODg9ZjM5LGYxMjQsZjg3CihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX0KeyAubWZpOwljbXAubHR1CQlwNyxwMD1yMjIscjIxCgkJeG1hLmx1CWY4Nz1mMzksZjEyNCxmODcKCWFkZAkJcjIyPXIyMixjYXJyeTEJCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyOD1mNzQKCQl4bWEuaHUJZjk4PWYzOSxmMTI1LGY5NwoocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCQl9CnsgLm1maTsJCXhtYS5sdQlmOTc9ZjM5LGYxMjUsZjk3CgljbXAubHR1CQlwNyxwMD1yMjIsY2FycnkxCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyOT1mNjUKCQl4bWEuaHUJZjEwOD1mMzksZjEyNixmMTA3CihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX0KeyAubWZpOwlzdDgJCVtyMzJdPXIyMiwxNgoJCXhtYS5sdQlmMTA3PWYzOSxmMTI2LGYxMDcJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjMwPWY1NgoJCXhtYS5odQlmMTE4PWYzOSxmMTI3LGYxMTcJfQp7IC5tZmk7CQl4bWEubHUJZjExNz1mMzksZjEyNyxmMTE3CX07Oy8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi8vIExlYXZpbmcgbXVsaXBsaWVyJ3MgaGVhdmVuLi4uIFF1aXRlIGEgcmlkZSwgaHVoPwoKeyAubWlpOwlnZXRmLnNpZwlyMzE9ZjQ3CglhZGQJCXIyNT1yMjUscjI0Cgltb3YJCWNhcnJ5MT0wCQl9OzsKeyAubWlpOwkJZ2V0Zi5zaWcJcjE2PWYxMTEKCWNtcC5sdHUJCXA2LHAwPXIyNSxyMjQKCWFkZAkJcjI2PXIyNixyMjUJCX07Owp7IC5tZmI7CQlnZXRmLnNpZwlyMTc9ZjEwMgl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjI2LHIyNQoJYWRkCQlyMjc9cjI3LHIyNgkJfTs7CnsgLm1mYjsJbm9wLm0JMHgwCQkJCX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMjcscjI2CglhZGQJCXIyOD1yMjgscjI3CQl9OzsKeyAubWlpOwkJZ2V0Zi5zaWcJcjE4PWY5MwoJCWFkZAkJcjE3PXIxNyxyMTYKCQltb3YJCWNhcnJ5Mz0wCX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMjgscjI3CglhZGQJCXIyOT1yMjkscjI4CQl9OzsKeyAubWlpOwkJZ2V0Zi5zaWcJcjE5PWY4NAoJCWNtcC5sdHUJCXA3LHAwPXIxNyxyMTYJfQp7IC5taWk7CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyOSxyMjgKCWFkZAkJcjMwPXIzMCxyMjkJCX07Owp7IC5taWk7CQlnZXRmLnNpZwlyMjA9Zjc1CgkJYWRkCQlyMTg9cjE4LHIxNwl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjMwLHIyOQoJYWRkCQlyMzE9cjMxLHIzMAkJfTs7CnsgLm1mYjsJCWdldGYuc2lnCXIyMT1mNjYJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkzPTEsY2FycnkzCgkJY21wLmx0dQkJcDcscDA9cjE4LHIxNwoJCWFkZAkJcjE5PXIxOSxyMTgJfQp7IC5tZmI7CW5vcC5tCTB4MAkJCQl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjMxLHIzMAoJYWRkCQlyMzE9cjMxLGNhcnJ5MgkJfTs7CnsgLm1mYjsJCWdldGYuc2lnCXIyMj1mNTcJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkzPTEsY2FycnkzCgkJY21wLmx0dQkJcDcscDA9cjE5LHIxOAoJCWFkZAkJcjIwPXIyMCxyMTkJfQp7IC5tZmI7CW5vcC5tCTB4MAkJCQl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjMxLGNhcnJ5Mgl9OzsKeyAubWZiOwkJZ2V0Zi5zaWcJcjIzPWY0OAkJfQp7IC5taWk7CShwNykJYWRkCQljYXJyeTM9MSxjYXJyeTMKCQljbXAubHR1CQlwNyxwMD1yMjAscjE5CgkJYWRkCQlyMjE9cjIxLHIyMAl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfQp7IC5tZmI7CXN0OAkJW3IzM109cjMxLDE2CQl9OzsKCnsgLm1mYjsJZ2V0Zi5zaWcJcjI0PWYxMTIJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkzPTEsY2FycnkzCgkJY21wLmx0dQkJcDcscDA9cjIxLHIyMAoJCWFkZAkJcjIyPXIyMixyMjEJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjI1PWYxMDMJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkzPTEsY2FycnkzCgkJY21wLmx0dQkJcDcscDA9cjIyLHIyMQoJCWFkZAkJcjIzPXIyMyxyMjIJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjI2PWY5NAkJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkzPTEsY2FycnkzCgkJY21wLmx0dQkJcDcscDA9cjIzLHIyMgoJCWFkZAkJcjIzPXIyMyxjYXJyeTEJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjI3PWY4NQkJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkzPTEsY2FycnkzCgkJY21wLmx0dQkJcDcscDg9cjIzLGNhcnJ5MX07Owp7IC5taWk7CWdldGYuc2lnCXIyOD1mNzYKCWFkZAkJcjI1PXIyNSxyMjQKCW1vdgkJY2FycnkxPTAJCX0KeyAubWlpOwkJc3Q4CQlbcjMyXT1yMjMsMTYKCShwNykJYWRkCQljYXJyeTI9MSxjYXJyeTMKCShwOCkJYWRkCQljYXJyeTI9MCxjYXJyeTMJfTs7Cgp7IC5tZmI7CW5vcC5tCTB4MAkJCQl9CnsgLm1paTsJZ2V0Zi5zaWcJcjI5PWY2NwoJY21wLmx0dQkJcDYscDA9cjI1LHIyNAoJYWRkCQlyMjY9cjI2LHIyNQkJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjMwPWY1OAkJCX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMjYscjI1CglhZGQJCXIyNz1yMjcscjI2CQl9OzsKeyAubWZiOwkJZ2V0Zi5zaWcJcjE2PWYxMTMJfQp7IC5taWk7CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyNyxyMjYKCWFkZAkJcjI4PXIyOCxyMjcJCX07Owp7IC5tZmI7CQlnZXRmLnNpZwlyMTc9ZjEwNAl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjI4LHIyNwoJYWRkCQlyMjk9cjI5LHIyOAkJfTs7CnsgLm1mYjsJCWdldGYuc2lnCXIxOD1mOTUJCX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMjkscjI4CglhZGQJCXIzMD1yMzAscjI5CQl9OzsKeyAubWlpOwkJZ2V0Zi5zaWcJcjE5PWY4NgoJCWFkZAkJcjE3PXIxNyxyMTYKCQltb3YJCWNhcnJ5Mz0wCX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMzAscjI5CglhZGQJCXIzMD1yMzAsY2FycnkyCQl9OzsKeyAubWlpOwkJZ2V0Zi5zaWcJcjIwPWY3NwoJCWNtcC5sdHUJCXA3LHAwPXIxNyxyMTYKCQlhZGQJCXIxOD1yMTgscjE3CX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMzAsY2FycnkyCX07Owp7IC5tZmI7CQlnZXRmLnNpZwlyMjE9ZjY4CQl9CnsgLm1paTsJc3Q4CQlbcjMzXT1yMzAsMTYKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfTs7Cgp7IC5tZmI7CWdldGYuc2lnCXIyND1mMTE0CQl9CnsgLm1paTsJKHA3KQlhZGQJCWNhcnJ5Mz0xLGNhcnJ5MwoJCWNtcC5sdHUJCXA3LHAwPXIxOCxyMTcKCQlhZGQJCXIxOT1yMTkscjE4CX07Owp7IC5tZmI7CWdldGYuc2lnCXIyNT1mMTA1CQl9CnsgLm1paTsJKHA3KQlhZGQJCWNhcnJ5Mz0xLGNhcnJ5MwoJCWNtcC5sdHUJCXA3LHAwPXIxOSxyMTgKCQlhZGQJCXIyMD1yMjAscjE5CX07Owp7IC5tZmI7CWdldGYuc2lnCXIyNj1mOTYJCQl9CnsgLm1paTsJKHA3KQlhZGQJCWNhcnJ5Mz0xLGNhcnJ5MwoJCWNtcC5sdHUJCXA3LHAwPXIyMCxyMTkKCQlhZGQJCXIyMT1yMjEscjIwCX07Owp7IC5tZmI7CWdldGYuc2lnCXIyNz1mODcJCQl9CnsgLm1paTsJKHA3KQlhZGQJCWNhcnJ5Mz0xLGNhcnJ5MwoJCWNtcC5sdHUJCXA3LHAwPXIyMSxyMjAKCQlhZGQJCXIyMT1yMjEsY2FycnkxCX07Owp7IC5taWI7CWdldGYuc2lnCXIyOD1mNzgJCQkKCWFkZAkJcjI1PXIyNSxyMjQJCX0KeyAubWliOwkocDcpCWFkZAkJY2FycnkzPTEsY2FycnkzCgkJY21wLmx0dQkJcDcscDg9cjIxLGNhcnJ5MX07Owp7IC5taWk7CQlzdDgJCVtyMzJdPXIyMSwxNgoJKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MwoJKHA4KQlhZGQJCWNhcnJ5Mj0wLGNhcnJ5Mwl9Cgp7IC5taWk7CW1vdgkJY2FycnkxPTAKCWNtcC5sdHUJCXA2LHAwPXIyNSxyMjQKCWFkZAkJcjI2PXIyNixyMjUJCX07Owp7IC5tZmI7CQlnZXRmLnNpZwlyMTY9ZjExNQl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjI2LHIyNQoJYWRkCQlyMjc9cjI3LHIyNgkJfTs7CnsgLm1mYjsJCWdldGYuc2lnCXIxNz1mMTA2CX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMjcscjI2CglhZGQJCXIyOD1yMjgscjI3CQl9OzsKeyAubWZiOwkJZ2V0Zi5zaWcJcjE4PWY5NwkJfQp7IC5taWk7CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyOCxyMjcKCWFkZAkJcjI4PXIyOCxjYXJyeTIJCX07Owp7IC5taWI7CQlnZXRmLnNpZwlyMTk9Zjg4CgkJYWRkCQlyMTc9cjE3LHIxNgl9CnsgLm1pYjsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjI4LGNhcnJ5Mgl9OzsKeyAubWlpOwlzdDgJCVtyMzNdPXIyOCwxNgoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCQl9Cgp7IC5taWk7CQltb3YJCWNhcnJ5Mj0wCgkJY21wLmx0dQkJcDcscDA9cjE3LHIxNgoJCWFkZAkJcjE4PXIxOCxyMTcJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjI0PWYxMTYJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCgkJY21wLmx0dQkJcDcscDA9cjE4LHIxNwoJCWFkZAkJcjE5PXIxOSxyMTgJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjI1PWYxMDcJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCgkJY21wLmx0dQkJcDcscDA9cjE5LHIxOAoJCWFkZAkJcjE5PXIxOSxjYXJyeTEJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjI2PWY5OAkJCX0KeyAubWlpOwkocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCgkJY21wLmx0dQkJcDcscDA9cjE5LGNhcnJ5MX07Owp7IC5taWk7CQlzdDgJCVtyMzJdPXIxOSwxNgoJKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5Mgl9Cgp7IC5tZmI7CWFkZAkJcjI1PXIyNSxyMjQJCX07OwoKeyAubWZiOwkJZ2V0Zi5zaWcJcjE2PWYxMTcJfQp7IC5taWk7CW1vdgkJY2FycnkxPTAKCWNtcC5sdHUJCXA2LHAwPXIyNSxyMjQKCWFkZAkJcjI2PXIyNixyMjUJCX07Owp7IC5tZmI7CQlnZXRmLnNpZwlyMTc9ZjEwOAl9CnsgLm1paTsKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQoJY21wLmx0dQkJcDYscDA9cjI2LHIyNQoJYWRkCQlyMjY9cjI2LGNhcnJ5MgkJfTs7CnsgLm1mYjsJbm9wLm0JMHgwCQkJCX0KeyAubWlpOwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCgljbXAubHR1CQlwNixwMD1yMjYsY2FycnkyCX07Owp7IC5taWk7CXN0OAkJW3IzM109cjI2LDE2CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEJCX0KCnsgLm1mYjsJCWFkZAkJcjE3PXIxNyxyMTYJfTs7CnsgLm1mYjsJZ2V0Zi5zaWcJcjI0PWYxMTgJCX0KeyAubWlpOwkJbW92CQljYXJyeTI9MAoJCWNtcC5sdHUJCXA3LHAwPXIxNyxyMTYKCQlhZGQJCXIxNz1yMTcsY2FycnkxCX07Owp7IC5taWk7CShwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIKCQljbXAubHR1CQlwNyxwMD1yMTcsY2FycnkxfTs7CnsgLm1paTsJCXN0OAkJW3IzMl09cjE3CgkocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCX07Owp7IC5tZmI7CWFkZAkJcjI0PXIyNCxjYXJyeTIJCX07Owp7IC5taWI7CXN0OAkJW3IzM109cjI0CQl9Cgp7IC5taWI7CXJ1bQkJMTw8NQkJLy8gY2xlYXIgdW0ubWZoCglici5yZXQuc3B0ay5tYW55CWIwCX07OwouZW5kcAlibl9tdWxfY29tYmE4IwojdW5kZWYJY2FycnkzCiN1bmRlZgljYXJyeTIKI3VuZGVmCWNhcnJ5MQojZW5kaWYKCiNpZiAxCi8vIEl0J3MgcG9zc2libGUgdG8gbWFrZSBpdCBmYXN0ZXIgKHNlZSBjb21tZW50IHRvIGJuX3Nxcl9jb21iYTgpLCBidXQKLy8gSSByZWNrb24gaXQgZG9lc24ndCB3b3J0aCB0aGUgZWZmb3J0LiBCYXNpY2FsbHkgYmVjYXVzZSB0aGUgcm91dGluZQovLyAoYWN0dWFsbHkgYm90aCBvZiB0aGVtKSBwcmFjdGljYWxseSBuZXZlciBjYWxsZWQuLi4gU28gSSBqdXN0IHBsYXkKLy8gc2FtZSB0cmljayBhcyB3aXRoIGJuX3Nxcl9jb21iYTguCi8vCi8vIHZvaWQgYm5fc3FyX2NvbWJhNChCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEpCi8vCi5nbG9iYWwJYm5fc3FyX2NvbWJhNCMKLnByb2MJYm5fc3FyX2NvbWJhNCMKLmFsaWduCTY0CmJuX3Nxcl9jb21iYTQ6CgkucHJvbG9ndWUKCS5zYXZlCWFyLnBmcyxyMgojaWYgZGVmaW5lZChfSFBVWF9TT1VSQ0UpICYmICFkZWZpbmVkKF9MUDY0KQp7IC5taWk7CWFsbG9jICAgcjI9YXIucGZzLDIsMSwwLDAKCWFkZHA0CXIzMj0wLHIzMgoJYWRkcDQJcjMzPTAscjMzCQl9OzsKeyAubWlpOwojZWxzZQp7IC5taWk7CWFsbG9jCXIyPWFyLnBmcywyLDEsMCwwCiNlbmRpZgoJbW92CXIzND1yMzMKCWFkZAlyMTQ9OCxyMzMJCX07OwoJLmJvZHkKeyAubWlpOwlhZGQJcjE3PTgscjM0CglhZGQJcjE1PTE2LHIzMwoJYWRkCXIxOD0xNixyMzQJCX0KeyAubWZiOwlhZGQJcjE2PTI0LHIzMwoJYnIJLkxfY2hlYXRfZW50cnlfcG9pbnQ0CX07OwouZW5kcAlibl9zcXJfY29tYmE0IwojZW5kaWYKCiNpZiAxCi8vIFJ1bnMgaW4gfjExNSBjeWNsZXMgYW5kIH40LjUgdGltZXMgZmFzdGVyIHRoYW4gQy4gV2VsbCwgd2hhdGV2ZXIuLi4KLy8KLy8gdm9pZCBibl9tdWxfY29tYmE0KEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSwgQk5fVUxPTkcgKmIpCi8vCiNkZWZpbmUJY2FycnkxCXIxNAojZGVmaW5lCWNhcnJ5MglyMTUKLmdsb2JhbAlibl9tdWxfY29tYmE0IwoucHJvYwlibl9tdWxfY29tYmE0IwouYWxpZ24JNjQKYm5fbXVsX2NvbWJhNDoKCS5wcm9sb2d1ZQoJLnNhdmUJYXIucGZzLHIyCiNpZiBkZWZpbmVkKF9IUFVYX1NPVVJDRSkgJiYgIWRlZmluZWQoX0xQNjQpCnsgLm1paTsJYWxsb2MgICByMj1hci5wZnMsMywwLDAsMAoJYWRkcDQJcjMzPTAscjMzCglhZGRwNAlyMzQ9MCxyMzQJCX07Owp7IC5taWk7CWFkZHA0CXIzMj0wLHIzMgojZWxzZQp7IC5taWk7CWFsbG9jCXIyPWFyLnBmcywzLDAsMCwwCiNlbmRpZgoJYWRkCXIxND04LHIzMwoJYWRkCXIxNz04LHIzNAkJfQoJLmJvZHkKeyAubWlpOwlhZGQJcjE1PTE2LHIzMwoJYWRkCXIxOD0xNixyMzQKCWFkZAlyMTY9MjQscjMzCQl9OzsKLkxfY2hlYXRfZW50cnlfcG9pbnQ0Ogp7IC5tbWk7CWFkZAlyMTk9MjQscjM0CgoJbGRmOAlmMzI9W3IzM10JCX0KCnsgLm1taTsJbGRmOAlmMTIwPVtyMzRdCglsZGY4CWYxMjE9W3IxN10JCX07Owp7IC5tbWk7CWxkZjgJZjEyMj1bcjE4XQoJbGRmOAlmMTIzPVtyMTldCQl9Cgp7IC5tbWk7CWxkZjgJZjMzPVtyMTRdCglsZGY4CWYzND1bcjE1XQkJfQp7IC5tZmk7CWxkZjgJZjM1PVtyMTZdCgoJCXhtYS5odQlmNDE9ZjMyLGYxMjAsZjAJCX0KeyAubWZpOwkJeG1hLmx1CWY0MD1mMzIsZjEyMCxmMAkJfTs7CnsgLm1maTsJCXhtYS5odQlmNTE9ZjMyLGYxMjEsZjAJCX0KeyAubWZpOwkJeG1hLmx1CWY1MD1mMzIsZjEyMSxmMAkJfTs7CnsgLm1maTsJCXhtYS5odQlmNjE9ZjMyLGYxMjIsZjAJCX0KeyAubWZpOwkJeG1hLmx1CWY2MD1mMzIsZjEyMixmMAkJfTs7CnsgLm1maTsJCXhtYS5odQlmNzE9ZjMyLGYxMjMsZjAJCX0KeyAubWZpOwkJeG1hLmx1CWY3MD1mMzIsZjEyMyxmMAkJfTs7Ly8KLy8gTWFqb3Igc3RhbGwgdGFrZXMgcGxhY2UgaGVyZSwgYW5kIDMgbW9yZSBwbGFjZXMgYmVsb3cuIFJlc3VsdCBmcm9tCi8vIGZpcnN0IHhtYSBpcyBub3QgYXZhaWxhYmxlIGZvciBhbm90aGVyIDMgdGlja3MuCnsgLm1maTsJZ2V0Zi5zaWcJcjE2PWY0MAoJCXhtYS5odQlmNDI9ZjMzLGYxMjAsZjQxCglhZGQJCXIzMz04LHIzMgkJfQp7IC5tZmk7CQl4bWEubHUJZjQxPWYzMyxmMTIwLGY0MQl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMjQ9ZjUwCgkJeG1hLmh1CWY1Mj1mMzMsZjEyMSxmNTEJfQp7IC5tZmk7CQl4bWEubHUJZjUxPWYzMyxmMTIxLGY1MQl9OzsKeyAubWZpOwlzdDgJCVtyMzJdPXIxNiwxNgoJCXhtYS5odQlmNjI9ZjMzLGYxMjIsZjYxCX0KeyAubWZpOwkJeG1hLmx1CWY2MT1mMzMsZjEyMixmNjEJfTs7CnsgLm1maTsJCXhtYS5odQlmNzI9ZjMzLGYxMjMsZjcxCX0KeyAubWZpOwkJeG1hLmx1CWY3MT1mMzMsZjEyMyxmNzEJfTs7Ly8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KeyAubWZpOwlnZXRmLnNpZwlyMjU9ZjQxCgkJeG1hLmh1CWY0Mz1mMzQsZjEyMCxmNDIJfQp7IC5tZmk7CQl4bWEubHUJZjQyPWYzNCxmMTIwLGY0Mgl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMTY9ZjYwCgkJeG1hLmh1CWY1Mz1mMzQsZjEyMSxmNTIJfQp7IC5tZmk7CQl4bWEubHUJZjUyPWYzNCxmMTIxLGY1Mgl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMTc9ZjUxCgkJeG1hLmh1CWY2Mz1mMzQsZjEyMixmNjIKCWFkZAkJcjI1PXIyNSxyMjQJCX0KeyAubWZpOwltb3YJCWNhcnJ5MT0wCgkJeG1hLmx1CWY2Mj1mMzQsZjEyMixmNjIJfTs7CnsgLm1maTsJc3Q4CQlbcjMzXT1yMjUsMTYKCQl4bWEuaHUJZjczPWYzNCxmMTIzLGY3MgoJY21wLmx0dQkJcDYscDA9cjI1LHIyNAkJfQp7IC5tZmk7CQl4bWEubHUJZjcyPWYzNCxmMTIzLGY3Mgl9OzsvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwp7IC5tZmk7CWdldGYuc2lnCXIxOD1mNDIKCQl4bWEuaHUJZjQ0PWYzNSxmMTIwLGY0MwoocDYpCWFkZAkJY2FycnkxPTEsY2FycnkxCQl9CnsgLm1maTsJYWRkCQlyMTc9cjE3LHIxNgoJCXhtYS5sdQlmNDM9ZjM1LGYxMjAsZjQzCgltb3YJCWNhcnJ5Mj0wCQl9OzsKeyAubWZpOwlnZXRmLnNpZwlyMjQ9ZjcwCgkJeG1hLmh1CWY1ND1mMzUsZjEyMSxmNTMKCWNtcC5sdHUJCXA3LHAwPXIxNyxyMTYJCX0KeyAubWZpOwkJeG1hLmx1CWY1Mz1mMzUsZjEyMSxmNTMJfTs7CnsgLm1maTsJZ2V0Zi5zaWcJcjI1PWY2MQoJCXhtYS5odQlmNjQ9ZjM1LGYxMjIsZjYzCglhZGQJCXIxOD1yMTgscjE3CQl9CnsgLm1maTsJCXhtYS5sdQlmNjM9ZjM1LGYxMjIsZjYzCihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX07Owp7IC5tZmk7CWdldGYuc2lnCXIyNj1mNTIKCQl4bWEuaHUJZjc0PWYzNSxmMTIzLGY3MwoJY21wLmx0dQkJcDcscDA9cjE4LHIxNwkJfQp7IC5tZmk7CQl4bWEubHUJZjczPWYzNSxmMTIzLGY3MwoJYWRkCQlyMTg9cjE4LGNhcnJ5MQkJfTs7Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCnsgLm1paTsJc3Q4CQlbcjMyXT1yMTgsMTYKKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgoJY21wLmx0dQkJcDcscDA9cjE4LGNhcnJ5MQl9OzsKCnsgLm1maTsJZ2V0Zi5zaWcJcjI3PWY0MwkvLyBsYXN0IG1ham9yIHN0YWxsCihwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJCX07Owp7IC5taWk7CQlnZXRmLnNpZwlyMTY9ZjcxCglhZGQJCXIyNT1yMjUscjI0Cgltb3YJCWNhcnJ5MT0wCQl9OzsKeyAubWlpOwkJZ2V0Zi5zaWcJcjE3PWY2MgkKCWNtcC5sdHUJCXA2LHAwPXIyNSxyMjQKCWFkZAkJcjI2PXIyNixyMjUJCX07Owp7IC5taWk7CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyNixyMjUKCWFkZAkJcjI3PXIyNyxyMjYJCX07Owp7IC5taWk7CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyNyxyMjYKCWFkZAkJcjI3PXIyNyxjYXJyeTIJCX07Owp7IC5taWk7CQlnZXRmLnNpZwlyMTg9ZjUzCihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyNyxjYXJyeTIJfTs7CnsgLm1maTsJc3Q4CQlbcjMzXT1yMjcsMTYKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfQoKeyAubWlpOwkJZ2V0Zi5zaWcJcjE5PWY0NAoJCWFkZAkJcjE3PXIxNyxyMTYKCQltb3YJCWNhcnJ5Mj0wCX07Owp7IC5taWk7CWdldGYuc2lnCXIyND1mNzIKCQljbXAubHR1CQlwNyxwMD1yMTcscjE2CgkJYWRkCQlyMTg9cjE4LHIxNwl9OzsKeyAubWlpOwkocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCgkJY21wLmx0dQkJcDcscDA9cjE4LHIxNwoJCWFkZAkJcjE5PXIxOSxyMTgJfTs7CnsgLm1paTsJKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgoJCWNtcC5sdHUJCXA3LHAwPXIxOSxyMTgKCQlhZGQJCXIxOT1yMTksY2FycnkxCX07Owp7IC5taWk7CWdldGYuc2lnCXIyNT1mNjMKCShwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIKCQljbXAubHR1CQlwNyxwMD1yMTksY2FycnkxfTs7CnsgLm1paTsJCXN0OAkJW3IzMl09cjE5LDE2CgkocDcpCWFkZAkJY2FycnkyPTEsY2FycnkyCX0KCnsgLm1paTsJZ2V0Zi5zaWcJcjI2PWY1NAoJYWRkCQlyMjU9cjI1LHIyNAoJbW92CQljYXJyeTE9MAkJfTs7CnsgLm1paTsJCWdldGYuc2lnCXIxNj1mNzMKCWNtcC5sdHUJCXA2LHAwPXIyNSxyMjQKCWFkZAkJcjI2PXIyNixyMjUJCX07Owp7IC5taWk7CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyNixyMjUKCWFkZAkJcjI2PXIyNixjYXJyeTIJCX07Owp7IC5taWk7CQlnZXRmLnNpZwlyMTc9ZjY0CihwNikJYWRkCQljYXJyeTE9MSxjYXJyeTEKCWNtcC5sdHUJCXA2LHAwPXIyNixjYXJyeTIJfTs7CnsgLm1paTsJc3Q4CQlbcjMzXT1yMjYsMTYKKHA2KQlhZGQJCWNhcnJ5MT0xLGNhcnJ5MQkJfQoKeyAubWlpOwlnZXRmLnNpZwlyMjQ9Zjc0CgkJYWRkCQlyMTc9cjE3LHIxNgkKCQltb3YJCWNhcnJ5Mj0wCX07Owp7IC5taWk7CQljbXAubHR1CQlwNyxwMD1yMTcscjE2CgkJYWRkCQlyMTc9cjE3LGNhcnJ5MQl9OzsKCnsgLm1paTsJKHA3KQlhZGQJCWNhcnJ5Mj0xLGNhcnJ5MgoJCWNtcC5sdHUJCXA3LHAwPXIxNyxjYXJyeTF9OzsKeyAubWlpOwkJc3Q4CQlbcjMyXT1yMTcsMTYKCShwNykJYWRkCQljYXJyeTI9MSxjYXJyeTIJfTs7Cgp7IC5taWk7CWFkZAkJcjI0PXIyNCxjYXJyeTIJCX07Owp7IC5taWk7CXN0OAkJW3IzM109cjI0CQl9Cgp7IC5taWI7CXJ1bQkJMTw8NQkJLy8gY2xlYXIgdW0ubWZoCglici5yZXQuc3B0ay5tYW55CWIwCX07OwouZW5kcAlibl9tdWxfY29tYmE0IwojdW5kZWYJY2FycnkyCiN1bmRlZgljYXJyeTEKI2VuZGlmCgojaWYgMQovLwovLyBCTl9VTE9ORyBibl9kaXZfd29yZHMoQk5fVUxPTkcgaCwgQk5fVUxPTkcgbCwgQk5fVUxPTkcgZCkKLy8KLy8gSW4gdGhlIG51dHNoZWxsIGl0J3MgYSBwb3J0IG9mIG15IE1JUFMgSUlJL0lWIGltcGxlbWVudGF0aW9uLgovLwojZGVmaW5lCUFUCXIxNAojZGVmaW5lCUgJcjE2CiNkZWZpbmUJSEgJcjIwCiNkZWZpbmUJTAlyMTcKI2RlZmluZQlECXIxOAojZGVmaW5lCURICXIyMgojZGVmaW5lCUkJcjIxCgojaWYgMAovLyBTb21lIHByZXByb2Nlc3NvcnMgKG1vc3Qgbm90YWJseSBIUC1VWCkgYXBwZWFyIHRvIGJlIGFsbGVyZ2ljIHRvCi8vIG1hY3JvcyBlbmNsb3NlZCB0byBwYXJlbnRoZXNpcyBbYXMgdGhlc2UgdGhyZWUgd2VyZV0uCiNkZWZpbmUJY29udAlwMTYKI2RlZmluZQlicmVhawlwMAkvLyBwMjAKI2RlZmluZQllcXUJcDI0CiNlbHNlCmNvbnQ9cDE2CmJyZWFrPXAwCmVxdT1wMjQKI2VuZGlmCgouZ2xvYmFsCWFib3J0IwouZ2xvYmFsCWJuX2Rpdl93b3JkcyMKLnByb2MJYm5fZGl2X3dvcmRzIwouYWxpZ24JNjQKYm5fZGl2X3dvcmRzOgoJLnByb2xvZ3VlCgkuc2F2ZQlhci5wZnMscjIKeyAubWlpOwlhbGxvYwkJcjI9YXIucGZzLDMsNSwwLDgKCS5zYXZlCWIwLHIzCgltb3YJCXIzPWIwCgkuc2F2ZQlwcixyMTAKCW1vdgkJcjEwPXByCQl9OzsKeyAubW1iOwljbXAuZXEJCXA2LHAwPXIzNCxyMAoJbW92CQlyOD0tMQoocDYpCWJyLnJldC5zcG50Lm1hbnkJYjAJfTs7CgoJLmJvZHkKeyAubWlpOwltb3YJCUg9cjMyCQkvLyBzYXZlIGgKCW1vdgkJYXIuZWM9MAkJLy8gZG9uJ3Qgcm90YXRlIGF0IGV4aXQKCW1vdgkJcHIucm90PTAJfQp7IC5taWk7CW1vdgkJTD1yMzMJCS8vIHNhdmUgbAoJbW92CQlyMzY9cjAJCX07OwoKLkxfZGl2d19zaGlmdDoJLy8gLXZ2LSBub3RlIHNpZ25lZCBjb21wYXJpc29uCnsgLm1maTsJKHAwKQljbXAubHQJCXAxNixwMD1yMCxyMzQJLy8gZAoJKHAwKQlzaGxhZGQJCXIzMz1yMzQsMSxyMAl9CnsgLm1mYjsJKHAwKQlhZGQJCXIzNT0xLHIzNgoJKHAwKQlub3AuZgkJMHgwCihwMTYpCWJyLnd0b3AuZHBudAkJLkxfZGl2d19zaGlmdAl9OzsKCnsgLm1paTsJbW92CQlEPXIzNAoJc2hyLnUJCURIPXIzNCwzMgoJc3ViCQlyMzU9NjQscjM2CQl9OzsKeyAubWlpOwlzZXRmLnNpZwlmNz1ESAoJc2hyLnUJCUFUPUgscjM1Cgltb3YJCUk9cjM2CQkJfTs7CnsgLm1pYjsJY21wLm5lCQlwNixwMD1yMCxBVAoJc2hsCQlIPUgscjM2CihwNikJYnIuY2FsbC5zcG50LmNscgliMD1hYm9ydAl9OzsJLy8gb3ZlcmZsb3csIGRpZS4uLgoKeyAubWZpOwlmY3Z0Lnh1Zi5zMQlmNz1mNwoJc2hyLnUJCUFUPUwscjM1CQl9OzsKeyAubWlpOwlzaGwJCUw9TCxyMzYKCW9yCQlIPUgsQVQJCQl9OzsKCnsgLm1paTsJbm9wLm0JCTB4MAoJY21wLmxldQkJcDYscDA9RCxIOzsKKHA2KQlzdWIJCUg9SCxECQkJfQoKeyAubWx4OwlzZXRmLnNpZwlmMTQ9RAoJbW92bAkJQVQ9MHhmZmZmZmZmZgkJfTs7Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCnsgLm1paTsJc2V0Zi5zaWcJZjY9SAoJc2hyLnUJCUhIPUgsMzI7OwoJY21wLmVxCQlwNixwNz1ISCxESAkJfTs7CnsgLm1mYjsKKHA2KQlzZXRmLnNpZwlmOD1BVAoocDcpCWZjdnQueHVmLnMxCWY2PWY2CihwNykJYnIuY2FsbC5zcHRrCWI2PS5MX3VkaXY2NF8zMl9iNgl9OzsKCnsgLm1maTsJZ2V0Zi5zaWcJcjMzPWY4CQkJCS8vIHEKCXhtcHkubHUJCWY5PWY4LGYxNAkJfQp7IC5tZmk7CXhtcHkuaHUJCWYxMD1mOCxmMTQKCXNocnAJCUg9SCxMLDMyCQl9OzsKCnsgLm1taTsJZ2V0Zi5zaWcJcjM1PWY5CQkJCS8vIHRsCglnZXRmLnNpZwlyMzE9ZjEwCQkJfTs7CS8vIHRoCgouTF9kaXZ3XzFzdF9pdGVyOgp7IC5taWk7CShwMCkJYWRkCQlyMzI9LTEscjMzCgkocDApCWNtcC5lcQkJZXF1LGNvbnQ9SEgscjMxCQl9OzsKeyAubWlpOwkocDApCWNtcC5sdHUJCXA4LHAwPXIzNSxECgkocDApCXN1YgkJcjM0PXIzNSxECgkoZXF1KQljbXAubGV1CQlicmVhayxjb250PXIzNSxICX07Owp7IC5taWI7CShjb250KQljbXAubGV1CQljb250LGJyZWFrPUhILHIzMQoJKHA4KQlhZGQJCXIzMT0tMSxyMzEKKGNvbnQpCWJyLnd0b3Auc3BudAkJLkxfZGl2d18xc3RfaXRlcgl9OzsKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KeyAubWlpOwlzdWIJCUg9SCxyMzUKCXNobAkJcjg9cjMzLDMyCglzaGwJCUw9TCwzMgkJCX07OwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwp7IC5taWk7CXNldGYuc2lnCWY2PUgKCXNoci51CQlISD1ILDMyOzsKCWNtcC5lcQkJcDYscDc9SEgsREgJCX07Owp7IC5tZmI7CihwNikJc2V0Zi5zaWcJZjg9QVQKKHA3KQlmY3Z0Lnh1Zi5zMQlmNj1mNgoocDcpCWJyLmNhbGwuc3B0awliNj0uTF91ZGl2NjRfMzJfYjYJfTs7Cgp7IC5tZmk7CWdldGYuc2lnCXIzMz1mOAkJCQkvLyBxCgl4bXB5Lmx1CQlmOT1mOCxmMTQJCX0KeyAubWZpOwl4bXB5Lmh1CQlmMTA9ZjgsZjE0CglzaHJwCQlIPUgsTCwzMgkJfTs7Cgp7IC5tbWk7CWdldGYuc2lnCXIzNT1mOQkJCQkvLyB0bAoJZ2V0Zi5zaWcJcjMxPWYxMAkJCX07OwkvLyB0aAoKLkxfZGl2d18ybmRfaXRlcjoKeyAubWlpOwkocDApCWFkZAkJcjMyPS0xLHIzMwoJKHAwKQljbXAuZXEJCWVxdSxjb250PUhILHIzMQkJfTs7CnsgLm1paTsJKHAwKQljbXAubHR1CQlwOCxwMD1yMzUsRAoJKHAwKQlzdWIJCXIzND1yMzUsRAoJKGVxdSkJY21wLmxldQkJYnJlYWssY29udD1yMzUsSAl9OzsKeyAubWliOwkoY29udCkJY21wLmxldQkJY29udCxicmVhaz1ISCxyMzEKCShwOCkJYWRkCQlyMzE9LTEscjMxCihjb250KQlici53dG9wLnNwbnQJCS5MX2RpdndfMm5kX2l0ZXIJfTs7Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCnsgLm1paTsJc3ViCUg9SCxyMzUKCW9yCXI4PXI4LHIzMwoJbW92CWFyLnBmcz1yMgkJfTs7CnsgLm1paTsJc2hyLnUJcjk9SCxJCQkJLy8gcmVtYWluZGVyIGlmIGFueWJvZHkgd2FudHMgaXQKCW1vdglwcj1yMTAsMHgxZmZmZgkJfQp7IC5tZmI7CWJyLnJldC5zcHRrLm1hbnkJYjAJfTs7CgovLyBVbnNpZ25lZCA2NCBieSAzMiAod2VsbCwgYnkgNjQgZm9yIHRoZSBtb21lbnQpIGJpdCBpbnRlZ2VyIGRpdmlzaW9uCi8vIHByb2NlZHVyZS4KLy8KLy8gaW5wdXRzOglmNiA9IChkb3VibGUpYSwgZjcgPSAoZG91YmxlKWIKLy8gb3V0cHV0OglmOCA9IChpbnQpKGEvYikKLy8gY2xvYmJlcmVkOglmOCxmOSxmMTAsZjExLHByZWQKcHJlZD1wMTUKLy8gT25lIGNhbiBhcmd1ZSB0aGF0IHRoaXMgc25pcHBldCBpcyBjb3B5cmlnaHRlZCB0byBJbnRlbAovLyBDb3Jwb3JhdGlvbiwgYXMgaXQncyBlc3NlbnRpYWxseSBpZGVudGljYWwgdG8gb25lIG9mIHRob3NlCi8vIGZvdW5kIGluICJEaXZpZGUsIFNxdWFyZSBSb290IGFuZCBSZW1haW5kZXIiIHNlY3Rpb24gYXQKLy8gaHR0cDovL3d3dy5pbnRlbC5jb20vc29mdHdhcmUvcHJvZHVjdHMvb3BlbnNvdXJjZS9saWJyYXJpZXMvbnVtLmh0bS4KLy8gWWVzLCBJIGFkbWl0IHRoYXQgdGhlIHJlZmVycmVkIGNvZGUgd2FzIHVzZWQgYXMgdGVtcGxhdGUsCi8vIGJ1dCBhZnRlciBJIHJlYWxpemVkIHRoYXQgdGhlcmUgaGFyZGx5IGlzIGFueSBvdGhlciBpbnN0cnVjdGlvbgovLyBzZXF1ZW5jZSB3aGljaCB3b3VsZCBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLiBJIG1lYW4gSSBmaWd1cmUgdGhhdAovLyBhbnkgaW5kZXBlbmRlbnQgYXR0ZW1wdCB0byBpbXBsZW1lbnQgaGlnaC1wZXJmb3JtYW5jZSBkaXZpc2lvbgovLyB3aWxsIHJlc3VsdCBpbiBjb2RlIHZpcnR1YWxseSBpZGVudGljYWwgdG8gdGhlIEludGVsIGNvZGUuIEl0Ci8vIHNob3VsZCBiZSBub3RlZCB0aG91Z2ggdGhhdCBiZWxvdyBkaXZpc2lvbiBrZXJuZWwgaXMgMSBjeWNsZQovLyBmYXN0ZXIgdGhhbiBJbnRlbCBvbmUgKG5vdGUgY29tbWVudGVkIHNwbGl0czotKSwgbm90IHRvIG1lbnRpb24KLy8gb3JpZ2luYWwgcHJvbG9ndWUgKHJhdGhlciBsYWNrIG9mIG9uZSkgYW5kIGVwaWxvZ3VlLgouYWxpZ24JMzIKLnNraXAJMTYKLkxfdWRpdjY0XzMyX2I2OgoJZnJjcGEuczEJZjgscHJlZD1mNixmNzs7CQkvLyBbMF0gIHkwID0gMSAvIGIKCihwcmVkKQlmbm1hLnMxCQlmOT1mNyxmOCxmMQkJLy8gWzVdICBlMCA9IDEgLSBiICogeTAKKHByZWQpCWZtcHkuczEJCWYxMD1mNixmODs7CQkvLyBbNV0gIHEwID0gYSAqIHkwCihwcmVkKQlmbXB5LnMxCQlmMTE9ZjksZjkJCS8vIFsxMF0gZTEgPSBlMCAqIGUwCihwcmVkKQlmbWEuczEJCWYxMD1mOSxmMTAsZjEwOzsJLy8gWzEwXSBxMSA9IHEwICsgZTAgKiBxMAoocHJlZCkJZm1hLnMxCQlmOD1mOSxmOCxmOAkvLzs7CS8vIFsxNV0geTEgPSB5MCArIGUwICogeTAKKHByZWQpCWZtYS5zMQkJZjk9ZjExLGYxMCxmMTA7OwkvLyBbMTVdIHEyID0gcTEgKyBlMSAqIHExCihwcmVkKQlmbWEuczEJCWY4PWYxMSxmOCxmOAkvLzs7CS8vIFsyMF0geTIgPSB5MSArIGUxICogeTEKKHByZWQpCWZubWEuczEJCWYxMD1mNyxmOSxmNjs7CQkvLyBbMjBdIHIyID0gYSAtIGIgKiBxMgoocHJlZCkJZm1hLnMxCQlmOD1mMTAsZjgsZjk7OwkJLy8gWzI1XSBxMyA9IHEyICsgcjIgKiB5MgoKCWZjdnQuZnh1LnRydW5jLnMxCWY4PWY4CQkvLyBbMzBdIHEgPSB0cnVuYyhxMykKCWJyLnJldC5zcHRrLm1hbnkJYjY7OwouZW5kcAlibl9kaXZfd29yZHMjCiNlbmRpZgo=