LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMywgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBMaW51eCBGb3VuZGF0aW9uIG5vcgogICAgICB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCiAgICAgIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCkVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ck9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLApXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgpPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCkFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgojaWZuZGVmIF9fSF9RT01YX0lWQ09NTU9ORVhURU5TSU9OU19IX18KI2RlZmluZSBfX0hfUU9NWF9JVkNPTU1PTkVYVEVOU0lPTlNfSF9fIAoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiovLyoqIEBmaWxlIFFPTVhfQ29tbW9uRXh0ZW5zaW9ucy5oIAoKQHBhciBGSUxFIFNFUlZJQ0VTOgogICAgICBjb21tb24gZXh0ZW5zaW9ucyBBUEkgZm9yIE9wZW5NYXggSUwuCgogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBRdWFsY29tbSBPcGVuTWF4IElMCiAgICAgIGNvbW1vbiBleHRlbnRpb24gaW50ZXJmYWNlLCB0aHJvdWdoIHdoaWNoIHRoZSBJTCBjbGllbnQgYW5kIE9wZW5NYXggCiAgICAgIGNvbXBvbmVudHMgY2FuIGFjY2VzcyBhZGRpdGlvbmFsIGNhcGFiaWxpdGllcy4KCiovLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgogCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAogCiAgICAgICAgICAgICAgICAgICAgIElOQ0xVREUgRklMRVMgRk9SIE1PRFVMRSAKIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLyAKI2luY2x1ZGUgPE9NWF9Db3JlLmg+CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgIERFRklOSVRJT05TIEFORCBERUNMQVJBVElPTlMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgojaWYgZGVmaW5lZCggX19jcGx1c3BsdXMgKQpleHRlcm4gIkMiCnsKI2VuZGlmIC8qIGVuZCBvZiBtYWNybyBfX2NwbHVzcGx1cyAqLwoKLyogSVYgY29tbW9uIGV4dGVuc2lvbiBzdHJpbmdzICovCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfQ09ORklHX01FRElBSU5GTyAgICAgICAgICAgICAgICAgIk9NWC5RQ09NLmluZGV4LmNvbmZpZy5tZWRpYWluZm8iICAvKio8IHJlZmVyZW5jZTogUU9NWF9NRURJQUlORk9UWVBFICovCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfQ09ORklHX0NPTlRFTlRVUkkgICAgICAgICAgICAgICAgIk9NWC5RQ09NLmluZGV4LmNvbmZpZy5jb250ZW50dXJpIiAvKio8IHJlZmVyZW5jZTogT01YX1BBUkFNX0NPTlRFTlRVUklUWVBFICovCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fSU1BR0VTSVpFQ09OVFJPTCAgICAgICAgICAgIk9NWC5RdWFsY29tbS5pbmRleC5wYXJhbS5JbWFnZVNpemVDb250cm9sIiAvKio8IHJlZmVyZW5jZTogUU9NWF9JTUFHRV9JTUFHRVNJWkVDT05UUk9MVFlQRSAqLwojZGVmaW5lIE9NWF9RQ09NX0lOREVYX0NPTkZJR19QQVVTRVBPUlQgICAgICAgICAgICAgICAgICJPTVguUUNPTS5pbmRleC5jb25maWcuUGF1c2VQb3J0IiAvKio8IHJlZmVyZW5jZTogUU9NWF9DT05GSUdfUEFVU0VQT1JUVFlQRSAqLwoKLyoqIHJlZmVyZW5jZTogUU9NWF9VUkFOR0VUWVBFIAogKiAgbk1pbiwgbk1heCwgblN0ZXBTaXplIGdpdmUgd2lkdGggaW4gcGl4ZWxzICovCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fRlJBTUVXSURUSFJBTkdFU1VQUE9SVEVEICAgIk9NWC5RQ09NLmluZGV4LnBhcmFtLkZyYW1lV2lkdGhSYW5nZVN1cHBvcnRlZCIgCgovKiogcmVmZXJlbmNlOiBRT01YX1VSQU5HRVRZUEUgCiAqICBuTWluLCBuTWF4LCBuU3RlcFNpemUgZ2l2ZSBoZWlnaHQgaW4gcGl4ZWxzICovCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fRlJBTUVIRUlHSFRSQU5HRVNVUFBPUlRFRCAgIk9NWC5RQ09NLmluZGV4LnBhcmFtLkZyYW1lSGVpZ2h0UmFuZ2VTdXBwb3J0ZWQiIAoKLyoqIHJlZmVyZW5jZTogUU9NWF9VUkFOR0VUWVBFIAogKiAgbk1pbiwgbk1heCwgblN0ZXBTaXplIGdpdmUgdGhlIG51bWJlciBvZiBtYWNyb2Jsb2NrcyBwZXIKICogIGZyYW1lLiAqLwojZGVmaW5lIE9NWF9RQ09NX0lOREVYX1BBUkFNX01BQ1JPQkxPQ0tTUEVSRlJBTUVSQU5HRVNVUFBPUlRFRCAiT01YLlFDT00uaW5kZXgucGFyYW0uTWFjcm9ibG9ja3NQZXJGcmFtZVJhbmdlU3VwcG9ydGVkIiAKCi8qKiByZWZlcmVuY2U6IFFPTVhfVVJBTkdFVFlQRSAKICogIG5NaW4sIG5NYXgsIG5TdGVwU2l6ZSBnaXZlIHRoZSBudW1iZXIgb2YgbWFjcm9ibG9ja3MgcGVyIAogKiAgc2Vjb25kLiAqLwojZGVmaW5lIE9NWF9RQ09NX0lOREVYX1BBUkFNX01BQ1JPQkxPQ0tTUEVSU0VDT05EUkFOR0VTVVBQT1JURUQgIk9NWC5RQ09NLmluZGV4LnBhcmFtLk1hY3JvYmxvY2tzUGVyU2Vjb25kUmFuZ2VTdXBwb3J0ZWQiIAoKLyoqIHJlZmVyZW5jZTogUU9NWF9VUkFOR0VUWVBFIAogKiAgbk1pbiwgbk1heCwgblN0ZXBTaXplIGdpdmUgZnJhbWUgcmF0ZSBpbiBmcmFtZXMgcGVyIHNlY29uZAogKiAgaW4gUTE2IGZvcm1hdC4gKi8KI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9QQVJBTV9GUkFNRVJBVEVSQU5HRVNVUFBPUlRFRCAgICAiT01YLlFDT00uaW5kZXgucGFyYW0uRnJhbWVSYXRlUmFuZ2VTdXBwb3J0ZWQiIAoKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9QQVJBTV9QTEFORURFRklOSVRJT04gICAgICAgICAgICAiT01YLlFDT00uaW5kZXgucGFyYW0uUGxhbmVEZWZpbml0aW9uIiAvKiogcmVmZXJlbmNlOiBRT01YX1BMQU5FREVGSU5JVElPTlRZUEUgKi8KCi8qKiByZWZlcmVuY2U6IFFPTVhfVVJBTkdFVFlQRSAKICogIG5NaW4sIG5NYXgsIG5TdGVwU2l6ZSBnaXZlIHRoZSBjcm9wIHdpZHRoIGluIHBpeGVscyAqLwojZGVmaW5lIE9NWF9RT01YX0lOREVYX1BBUkFNX0NST1BXSURUSFJBTkdFU1VQUE9SVEVEICAgICAgICAiT01YLlFDT00uaW5kZXgucGFyYW0uQ3JvcFdpZHRoUmFuZ2VTdXBwb3J0ZWQiCgovKiogcmVmZXJlbmNlOiBRT01YX1VSQU5HRVRZUEUgCiAqICBuTWluLCBuTWF4LCBuU3RlcFNpemUgZ2l2ZSB0aGUgY3JvcCBoZWlnaHQgaW4gcGl4ZWxzICovCiNkZWZpbmUgT01YX1FPTVhfSU5ERVhfUEFSQU1fQ1JPUEhFSUdIVFJBTkdFU1VQUE9SVEVEICAgICAgICAiT01YLlFDT00uaW5kZXgucGFyYW0uQ3JvcEhlaWdodFJhbmdlU3VwcG9ydGVkIgoKLyoqIHJlZmVyZW5jZTogUU9NWF9VUkFOR0VUWVBFIAogKiAgbk1pbiwgbk1heCwgblN0ZXBTaXplIGdpdmUgdGhlIGRpZ2l0YWwgem9vbSBmYWN0b3Igb24gd2lkdGgKICogIGluIFExNiBmb3JtYXQuICovCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fRElHSVRBTFpPT01XSURUSFJBTkdFU1VQUE9SVEVEICAgICJPTVguUUNPTS5pbmRleC5wYXJhbS5EaWdpdGFsWm9vbVdpZHRoUmFuZ2VTdXBwb3J0ZWQiCgovKiogcmVmZXJlbmNlOiBRT01YX1VSQU5HRVRZUEUgCiAqICBuTWluLCBuTWF4LCBuU3RlcFNpemUgZ2l2ZSB0aGUgZGlnaXRhbCB6b29tIGZhY3RvciBvbiBoZWlnaHQKICogIGluIFExNiBmb3JtYXQuICovCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfUEFSQU1fRElHSVRBTFpPT01IRUlHSFRSQU5HRVNVUFBPUlRFRCAgICAiT01YLlFDT00uaW5kZXgucGFyYW0uRGlnaXRhbFpvb21IZWlnaHRSYW5nZVN1cHBvcnRlZCIKCiAgICAvLyBuZXcgZXh0ZXJuc2lvbnMgZm9yIHZpZHBwCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfQ09ORklHX0FDVElWRV9SRUdJT05fREVURUNUSU9OICAgICAgICAgICAiT01YLlFDT00uaW5kZXguY29uZmlnLmFjdGl2ZXJlZ2lvbmRldGVjdGlvbiIKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9DT05GSUdfQUNUSVZFX1JFR0lPTl9ERVRFQ1RJT05fU1RBVFVTICAgICJPTVguUUNPTS5pbmRleC5jb25maWcuYWN0aXZlcmVnaW9uZGV0ZWN0aW9uc3RhdHVzIgojZGVmaW5lIE9NWF9RQ09NX0lOREVYX0NPTkZJR19TQ0FMSU5HX01PREUgICAgICAgICAgICAgICAgICAgICAgIk9NWC5RQ09NLmluZGV4LmNvbmZpZy5zY2FsaW5nbW9kZSIKI2RlZmluZSBPTVhfUUNPTV9JTkRFWF9DT05GSUdfTk9JU0VSRURVQ1RJT04gICAgICAgICAgICAgICAgICAgICJPTVguUUNPTS5pbmRleC5jb25maWcubm9pc2VyZWR1Y3Rpb24iCiNkZWZpbmUgT01YX1FDT01fSU5ERVhfQ09ORklHX0lNQUdFRU5IQU5DRU1FTlQgICAgICAgICAgICAgICAgICAiT01YLlFDT00uaW5kZXguY29uZmlnLmltYWdlZW5oYW5jZW1lbnQiCi8qKgogKiBFbnVtZXJhdGlvbiBkZWZpbmluZyB0aGUgZXh0ZW5kZWQgdW5jb21wcmVzc2VkIGltYWdlL3ZpZGVvCiAqIGZvcm1hdHMuCiAqCiAqIEVOVU1TOgogKiAgWVZVNDIwUGFja2VkU2VtaVBsYW5hciAgICAgICA6IEJ1ZmZlciBjb250YWluaW5nIGFsbCBZLCBhbmQgdGhlbiBWIGFuZCBVIAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybGVhdmVkLgogKiAgWVZVNDIwUGFja2VkU2VtaVBsYW5hcjMybTRrYSA6IFlVViBwbGFuYXIgZm9ybWF0LCBzaW1pbGFyIHRvIHRoZSAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZVlU0MjBQYWNrZWRTZW1pUGxhbmFyIGZvcm1hdCwgYnV0IHdpdGggdGhlCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLiBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiBib3RoIHBsYW5lIG11c3QgCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYSBtdWx0aXBsZSBvZiAzMiB0ZXhlbHMuCiAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4gVGhlIGJhc2UgYWRkcmVzcyBvZiBib3RoIHBsYW5lcyBtdXN0IGJlIAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduZWQgdG8gYSA0a0IgYm91bmRhcnkuCiAqIAogKiAgWVVWNDIwUGFja2VkU2VtaVBsYW5hcjE2bTJrYSA6IFlVViBwbGFuYXIgZm9ybWF0LCBzaW1pbGFyIHRvIHRoZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIgZm9ybWF0LCBidXQgd2l0aCB0aGUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgogKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuIFRoZSB3aWR0aCBvZiB0aGUgbHVtYSBwbGFuZSBtdXN0IGJlIGEKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBvZiAxNiBwaXhlbHMuCiAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4gVGhlIGFkZHJlc3Mgb2YgYm90aCBwbGFuZXMgbXVzdCBiZSAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbmVkIHRvIGEgMmtCIGJvdW5kYXJ5LgogKiAKICogIFlVVjQyMFBhY2tlZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYSA6IFlVViBwbGFuYXIgZm9ybWF0LCBzaW1pbGFyIHRvIHRoZSAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZVVY0MjBQYWNrZWRTZW1pUGxhbmFyIGZvcm1hdCwgYnV0IHdpdGggdGhlCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLiBUaGUgZGF0YSBpcyBsYWlkIG91dCBpbiBhIDR4MiBNQiB0aWxpbmcgCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5IHN0cnVjdHVyZQogKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuIFRoZSB3aWR0aCBvZiBlYWNoIHBsYW5lIGlzIGEgbXVsdGlwbGUgb2YKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDR4MiBNQiB0aWxlcy4KICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLiBUaGUgaGVpZ2h0IG9mIGVhY2ggcGxhbiBpcyBhIG11bHRpcGxlIG9mCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA0eDIgTUIgdGlsZS4KICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LiBUaGUgYmFzZSBhZGRyZXNzIG9mIGJvdGggcGxhbmVzIG11c3QgYmUgCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25lZCB0byBhbiA4a0IgYm91bmRhcnkuCiAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS4gVGhlIHRpbGVzIGFyZSBzY2FubmVkIGluIHRoZSBvcmRlciAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGluIHRoZSBNRkNWNS4xIFVzZXIncyBNYW51YWwuCiAqLwp0eXBlZGVmIGVudW0gUU9NWF9DT0xPUl9GT1JNQVRUWVBFCnsKICAgIFFPTVhfQ09MT1JfRm9ybWF0WVZVNDIwUGFja2VkU2VtaVBsYW5hciAgICAgICA9IDB4N0YwMDAwMDEsCiAgICBRT01YX0NPTE9SX0Zvcm1hdFlWVTQyMFBhY2tlZFNlbWlQbGFuYXIzMm00a2EsCiAgICBRT01YX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIxNm0ya2EsCiAgICBRT01YX0NPTE9SX0Zvcm1hdFlVVjQyMFBhY2tlZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYSwKICAgIFFPTVhfQ09MT1JfRk9STUFUWVVWNDIwUGFja2VkU2VtaVBsYW5hcjMybSwKfSBRT01YX0NPTE9SX0ZPUk1BVFRZUEU7Cgp0eXBlZGVmIGVudW0gUU9NWF9NRURJQUlORk9UQUdUWVBFIHsKICAgIFFPTVhfTWVkaWFJbmZvVGFnVmVyc2lvbiwgICAgICAgLyoqPCBPTVhfVkVSU0lPTlRZUEUuIFZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIHNwZWNpZnlpbmcgdGhlIG1lZGlhIGluZm9ybWF0aW9uLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ1VJRCwgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gVW5pcXVlIElEIG9mIHRoZSBtZWRpYSBkYXRhLCBpZSBpbWFnZSB1bmlxdWUgSUQuKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnRGVzY3JpcHRpb24sICAgLyoqPCBPTVhfVTgqLiBDb21tZW50cyBhYm91dCB0aGUgbWVkaWEuKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnVGl0bGUsICAgICAgICAgLyoqPCBPTVhfVTgqLiBUaXRsZSBvZiB0aGUgbWVkaWEuKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnQXV0aG9yLCAgICAgICAgLyoqPCBPTVhfVTgqLiBBdXRob3Igb2YgdGhlIG1lZGlhLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ0NvcHlyaWdodCwgICAgIC8qKjwgT01YX1U4Ki4gQ29weXJpZ2h0IGluZm9ybWF0aW9uLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ1RyYWNrTnVtLCAgICAgIC8qKjwgT01YX1UzMi4gVHJhY2sgbnVtYmVyLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ0dlbnJlLCAgICAgICAgIC8qKjwgT01YX1U4Ki4gVGhlIGdlbnJlIG9mIHRoZSBtZWRpYS4qLwogICAgUU9NWF9NZWRpYUluZm9UYWdFcXVpcG1lbnRNYWtlLCAvKio8IE9NWF9VOCouIE1hbnVmYWN0dXJlciBvZiByZWNvcmRpbmcgZXF1aXBtZW50LiovCiAgICBRT01YX01lZGlhSW5mb1RhZ0VxdWlwbWVudE1vZGVsLC8qKjwgT01YX1U4Ki4gTW9kZWwgb3IgbmFtZSBvZiB0aGUgcmVjb3JkaW5nIGVxdWlwbWVudC4qLwogICAgUU9NWF9NZWRpYUluZm9UYWdTb2Z0d2FyZSwgICAgICAvKio8IE9NWF9VOCouIE5hbWUgYW5kIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIG9yIGZpcm13YXJlIG9mIHRoZSBkZXZpY2UgZ2VuZXJhdGluZyB0aGUgbWVkaWEuKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnQXNzb2NpYXRlZEZpbGUsLyoqPCBPTVhfVTgqLiBUaGUgbmFtZSBvZiB0aGUgZmlsZSByZWxhdGVkIHRvIHRoZSBtZWRpYS4gIEZvciBleGFtcGxlLCBhbiBhdWRpbyBmaWxlIHJlbGF0ZWQgdG8gYW4gaW1hZ2UgZmlsZS4qLwogICAgUU9NWF9NZWRpYUluZm9UYWdSZXNvbHV0aW9uLCAgICAvKio8IFFPTVhfUkVTT0xVVElPTlRZUEUuIE51bWJlciBvZiBwaXhlbHMgcGVyIHJlc29sdXRpb24gdW5pdC4qLwogICAgUU9NWF9NZWRpYUluZm9UYWdEYXRlQ3JlYXRlZCwgICAvKio8IFFPTVhfREFURVNUQU1QVFlQRS4gRGF0ZSB3aGVuIG1lZGlhIHdhcyBjcmVhdGVkLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ1RpbWVDcmVhdGVkLCAgIC8qKjwgUU9NWF9USU1FU1RBTVBUWVBFLiBUaW1lIHdoZW4gbWVkaWEgd2FzIGNyZWF0ZWQuKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnRGF0ZU1vZGlmaWVkLCAgLyoqPCBRT01YX0RBVEVTVEFNUEVUWVBFLiBEYXRlIHdoZW4gZmlsZSB3YXMgbGFzdCBtb2RpZmllZC4qLwogICAgUU9NWF9NZWRpYUluZm9UYWdUaW1lTW9kaWZpZWQsICAvKio8IFFPTVhfVElNRVNUQU1QVFlQRS4gVGltZSB3aGVuIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQuKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnR1BTQXJlYU5hbWUsICAgLyoqPCBPTVhfVTgqLiBUaGUgbmFtZSBvZiB0aGUgbG9jYXRpb24uKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnR1BTVmVyc2lvbiwgICAgLyoqPCBPTVhfVkVSU0lPTlRZUEUuIEdQUyB2ZXJzaW9uLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ0dQU0Nvb3JkaW5hdGVzLC8qKjwgUU9NWF9HRU9ERVRJQ1RZUEUuIFRoZSBsb25naXR1ZGUsIGxhdGl0dWRlLCBhbmQgYWx0aXR1ZGUuKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnR1BTU2F0ZWxsaXRlcywgLyoqPCBPTVhfVTgqLiBUaGUgR1BTIHNhdGVsbGl0ZXMgdXNlZCBmb3IgbWVhc3VyZW1lbnRzLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ0dQU1ByZWNpc2lvbiwgIC8qKjwgT01YX1UzMi4gR1BTIGRlZ3JlZSBvZiBwcmVjaXNpb24uKi8KICAgIFFPTVhfTWVkaWFJbmZvVGFnR1BTRGF0ZVN0YW1wLCAgLyoqPCBRT01YX0RBVEVTVEFNUFRZUEUuIERhdGUgb2YgdGhlIEdQUyBkYXRhLiovCiAgICBRT01YX01lZGlhSW5mb1RhZ0dQU1RpbWVTdGFtcCwgIC8qKjwgUU9NWF9USU1FU1RBTVBUWVBFLiBUaW1lIG9mIHRoZSBHUFMgZGF0YS4qLwogICAgUU9NWF9NZWRpYUluZm9UYWdNZWRpYVN0cmVhbVR5cGUsLyoqPCBRT01YX01FRElBU1RSRUFNVFlQRS4gVHlwZSBvZiB0aGUgc3RyZWFtLiAqLyAKICAgIFFPTVhfTWVkaWFJbmZvRHVyYXRpb24sICAgICAgICAgLyoqPCBPTVhfVElDS1MuIFRvdGFsIGR1cmF0aW9uIG9mIHRoZSBtZWRpYS4qLwogICAgUU9NWF9NZWRpYUluZm9TaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTMyLiBUb3RhbCBzaXplIG9mIHRoZSBtZWRpYSBpbiBieXRlcy4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnQWxidW0sICAgICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBOYW1lIG9mIGFsYnVtL21vdmllL3Nob3cuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0xvY2F0aW9uLCAgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gUmVjb3JkaW5nIGxvY2F0aW9uIGluZm9ybWF0aW9uLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdDbGFzc2lmaWNhdGlvbiwgICAgICAgICAgICAvKio8IE9NWF9VOCouIENsYXNzaWZpY2F0aW9uIGluZm9ybWF0aW9uIG9mIG1lZGlhLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdSYXRpbmdzLCAgICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIE1lZGlhIFJhdGluZ3MgYmFzZWQgb24gcG9wdWxhcml0eSAmIHJhdGluZyBjcml0ZXJpYS4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnS2V5d29yZCwgICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBLZXl3b3JkIGFzc29jaWF0ZWQgd2l0aCBtZWRpYSB3aGljaCBhcmUgaW50ZW5kZWQgdG8gcmVmbGVjdCBtb29kIG9mIHRoZSBBL1YuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ1BlcmZvcm1hbmNlLCAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gTWVkaWEgUGVyZm9ybWVyIGluZm9ybWF0aW9uLi4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnWWVhciwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBQcm9kdWN0aW9uIHllYXIgaW5mb3JtYXRpb24gb2YgbWVkaWEuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0NvbXBvc2VyLCAgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gTmFtZSBvZiB0aGUgY29tcG9zZXIgb2YgbWVkaWEgaS5lLiBhdWRpby4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnRW5jb2Rlck5hbWUsICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBOYW1lIG9mIHRoZSBwZXJzb24gb3Igb3JnYW5pc2F0aW9uIHdobyBlbmNvZGVkIG1lZGlhLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdDb3B5UHJvaGliaXRGbGFnLCAgICAgICAgICAvKio8IE9NWF9VOCouIEZsYWcgdG8gaW5kaWNhdGUgaWYgY29weSBpcyBhbGxvd2VkIG9yIG5vdC4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnTHlyaWNpc3QsICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBOYW1lIG9mIHRoZSBseXJpY2lzdCBvciB0ZXh0IHdyaXRlciBpbiByZWNvcmRpbmcuIFNwZWNpZmljIHRvIElEMyB0YWcuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ1N1YnRpdGxlLCAgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gU3VidGl0bGUvRGVzY3JpcHRpb24gdXNlZCBmb3IgaW5mb3JtYXRvbiBkaXJlY3RseSByZWxhdGVkIHRvIHRpdGxlIG9mIG1lZGlhLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdPcmlnaW5hbEZpbGVOYW1lLCAgICAgICAgICAvKio8IE9NWF9VOCouIE9yaWdpbmFsIGZpbGUgbmFtZS4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnT3JpZ2luYWxMeXJpY2lzdCwgICAgICAgICAgLyoqPCBPTVhfVTgqLiBOYW1lIG9mIHRoZSBvcmlnaW5hbCBseXJpY2lzdC90ZXh0IHdyaXRlciBvZiBvcmlnaW5hbCByZWNvcmRpbmcuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ09yaWdpbmFsQXJ0aXN0LCAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gTmFtZSBvZiB0aGUgb3JpZ2luYWwgYXJ0aXN0LiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdPcmlnaW5hbFJlbGVhc2VZZWFyLCAgICAgICAvKio8IE9NWF9VOCouIE9yaWdpbmFsIHJlbGVhc2UgeWVhciBvZiByZWNvcmRlZCBtZWRpYS4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnRmlsZU93bmVyLCAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBMaWNlbnNlZSBvciBuYW1lIG9mIHRoZSBmaWxlIG93bmVyLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdPcmNoZXN0cmEsICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIE5hbWUgb2YgdGhlIG9yY2hlc3RyYSBvciBwZXJmb3JtZXJzIGR1cmluZyByZWNvcmRpbmcuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0NvbmR1Y3RvciwgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gTmFtZSBvZiB0aGUgY29uZHVjdG9yLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdSZW1peGVkQnksICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIFBlcnNvbiBvciBvcmdhbml6YXRpb24gbmFtZSB3aG8gZGlkIHRoZSByZW1peC4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnQWxidW1BcnRpc3QsICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBOYW1lIG9mIHRoZSBhbGJ1bSBhcnRpc3QuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ1B1Ymxpc2hlciwgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gTmFtZSBvZiB0aGUgcHVibGlzaGVyIG9yIGxhYmVsLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdSZWNvcmRpbmdEYXRlcywgICAgICAgICAgICAvKio8IE9NWF9VOCouIFJlY29yZGluZyBkYXRlIG9mIG1lZGlhLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdJbnRlcm5ldFJhZGlvU3RhdGlvbk5hbWUsICAvKio8IE9NWF9VOCouIE5hbWUgb2YgdGhlIEludGVybmV0IHJhZGlvIHN0YXRpb24gZnJvbSB3aGljaCB0aGUgYXVkaW8gaXMgc3RyZWFtZWQuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0ludGVybmV0UmFkaW9TdGF0aW9uT3duZXIsIC8qKjwgT01YX1U4Ki4gTmFtZSBvZiB0aGUgb3duZXIgb2YgdGhlIEludGVybmV0IHJhZGlvIHN0YXRpb24gZnJvbSB3aGljaCB0aGUgYXVkaW8gaXMgc3RyZWFtZWQuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0ludGVybmF0aW9uYWxSZWNvcmRpbmdDb2RlLC8qKjwgT01YX1U4Ki4gSW50ZXJuYXRpb25hbCBzdGFuZGFyZCByZWNvcmRpbmcgY29kZS4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnRW5jb2RlclN3SHdTZXR0aW5ncywgICAgICAgLyoqPCBPTVhfVTgqLiBTb2Z0d2FyZSxoYXJkd2FyZSBzZXR0aW5ncyB1c2VkIGJ5IGVuY29kZXIuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0ludm9sdmVkUGVvcGxlTGlzdCwgICAgICAgIC8qKjwgT01YX1U4Ki4gTGlzdCBvZiBwZW9wbGUgaW52b2x2ZWQuIFNwZWNpZmljIHRvIElEMyB0YWcuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0NvbW1lbnRzLCAgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gQ29tbWVudHMgYWJvdXQgdGhlIG1lZGlhLiBJdCBjYW4gYmUgYW55IGtpbmQgb2YgZnVsbCB0ZXh0IGluZm9ybWF0b24uKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0NvbW1pc3Npb25lZCwgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gQ29tbWlzc2lvbmVkIGluZm9ybWF0aW9uIG9mIG1lZGlhLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdTdWJqZWN0LCAgICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIFN1YmplY3QgYXNzb2NpYXRlZCB3aXRoIG1lZGlhLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdDb250YWN0LCAgICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIENvbmF0Y3QgaW5mb3JtYXRpb24uIFVSTCBpbmZvcm1hdGlvbiBvZiB0aGUgc2VsbGVyLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdWYWxpZGl0eVBlcmlvZCwgICAgICAgICAgICAvKio8IE9NWF9VOCouIExlbmd0aCBvciBwZXJpb2Qgb2YgdmFsaWRpdHkgb2YgbWVkaWEuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ1ZhbGlkaXR5RWZmZWN0aXZlRGF0ZSwgICAgIC8qKjwgT01YX1U4Ki4gVmFsaWRpdHkgZWZmZWN0aXZlIGRhdGUgb2YgbWVkaWEqLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnTnVtYmVyT2ZBbGxvd2VkUGxheWJhY2tzLCAgLyoqPCBPTVhfVTgqLiBOdW1iZXIgb2YgYWxsb3dlZCBwbGF5YmFja3MgZm9yIHRoaXMgbWVkaWEqLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnUGxheUNvdW50ZXIsICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBDdXJyZW50IHBsYXkgY291bnRlciBvZiB0aGUgbWVkaWEuSXRzIG51bWJlciBvZiB0aW1lcyBhIGZpbGUgaGFzIGJlZW4gcGxheWVkLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdNZW1vLCAgICAgICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIE1lbW8gYXNzb2NpYXRkIHdpdGggbWVkaWEuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0RldmljZU5hbWUsICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gTmFtZSBvZiB0aGUgZGV2aWNlcyB1c2VkIGluIGNyZWF0aW5nIG1lZGlhLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdVUkwsICAgICAgICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIExpc3QgYXJ0aXN0IC9nZW5yZSAvbW92aWUgc2l0ZXMgVVJMLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdGaWxlVHlwZSwgICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIEluZGljYXRlcyB0eXBlIG9mIGF1ZGlvIHRyYWNrLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdDb250ZW50R3JvdXBEZXNjLCAgICAgICAgICAvKio8IE9NWF9VOCouIENvbnRlbnQgZ3JvdXAgZGVzY3JpcHRpb24gaWYgdGhlIHNvdW5kIGJlbG9uZ3MgdG8gYSBsYXJnZXIgY2F0ZWdvcnkgb2Ygb2YgbXVzaWMgL3NvdW5kLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdJbml0aWFsS2V5cywgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIENvbnRhaW5zIHRoZSBtdXNpY2FsIGtleSBpbiB3aGljaCBtZWRpYSBzdGFydHMuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0xhbmd1YWdlcywgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gTGFuZ3VhZ2VzIG9mIHRoZSB0ZXh0IG9yIGx5cmljcyBzcG9rZW4gb3Igc3VuZyBpbiB0aGUgbWVkaWEuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ01lZGlhVHlwZSwgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gRGVzY3JpYmVzIGZyb20gd2hpY2ggbWVkaWEgdGhlIG1lZGlhIHNvdW5kIG9yaWdpbmF0ZWQuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ1BsYXlsaXN0RGVsYXksICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gRGVub3RlcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCBzb25nIG9mIHRoZSBwbGF5bGlzdC4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnQmVhdHNQZXJNaW51dGUsICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBOdW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiBtYWluIHBhcnQgb2YgYXVkaW8uKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ1BhcnRPZlNldCwgICAgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gRGVzY3JpYmVzIHBhcnQgb2YgdGhlIHNldCBzZWxlY3RlZCBvciBwbGF5ZWQuICovIAogICAgUU9NWF9NZWRpYUluZm9UYWdJbnN0cnVtZW50TmFtZSwgICAgICAgICAgICAvKio8IE9NWF9VOCouIE5hbWUgb2YgdGhlIGluc3RydW1lbnQgdXNlZCBpbiBjcmVhdGluZyBtZWRpYS4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnTHlyaWNzLCAgICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBMeXJpY3Mgb2YgdGhlIG1lZGlhL2F1ZGlvIHRyYWNrLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdUcmFja05hbWUsICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIE5hbWUgb2YgdGhlIG1lZGlhL2F1ZGlvIHRyYWNrLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdNYXJrZXIsICAgICAgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIFRleHQgc3RyaW5nIGNvdG5lbnRzIHBsYWNlZCBhdCBhIHNwZWNpZmljIGxvY2F0aW9uIHRvIGRlbm90ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbXVzaWMgYXQgdGhhdCBwb2ludC4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnQ3VlUG9pbnQsICAgICAgICAgICAgICAgICAgLyoqPCBPTVhfVTgqLiBTdWJzZXQgb2YgdGhlIGNvbnRlbnQgd2hpY2ggY2FuIGJlIG9wdGlvbmFsbHkgcGxheWVkLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdHUFNQb3NpdGlvbmluZ05hbWUsICAgICAgICAvKio8IE9NWF9VOCouIEdQUyBwb3NpdGlvbmluZyBuYW1lLiAqLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnR1BTUG9zaXRpb25pbmdNZXRob2QsICAgICAgLyoqPCBPTVhfVTgqLiBHUFMgcG9zaXRpb25pbmcgbWV0aG9kLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdHUFNTdXJ2ZXlEYXRhLCAgICAgICAgICAgICAvKio8IE9NWF9VOCouIEdQUyBzdXJ2ZXkgZGF0YS4gKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0dQU0J5dGVPcmRlciwgICAgICAgICAgICAgIC8qKjwgT01YX1UxNi5HUFMgYnl0ZSBvcmRlci4gKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0dQU0xhdGl0dWRlUmVmLCAgICAgICAgICAgIC8qKjwgT01YX1UzMi5SZWZlcmVuY2UgR1BTIGxhdGl0dWRlLiAqLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnR1BTTG9uZ2l0dWRlUmVmLCAgICAgICAgICAgLyoqPCBPTVhfVTMyLlJlZmVyZW5jZSBHUFMgbG9uZ2l0dWRlICovIAogICAgUU9NWF9NZWRpYUluZm9UYWdHUFNBbHRpdHVkZVJlZiwgICAgICAgICAgICAvKio8IE9NWF9VMzIuIFJlZmVyZW5jZSBHUFMgYWx0aXR1ZGUuKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ0dQU0V4dGVuc2lvbk1hcFNjYWxlSW5mbywgIC8qKjwgT01YX1U2NC4gR1BTIGV4dGVuc2lvbiBtYXAgc2NhbGUgaW5mb3JtYXRpb24uKi8gCiAgICBRT01YX01lZGlhSW5mb1RhZ1VVSURBdG9tSW5mbywgICAgICAgICAgICAgIC8qKjwgT01YX1U4Ki4gVGhlIHVzZXIgZGVmaW5lZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBVVUlELiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdVVUlEQXRvbUNvdW50LCAgICAgICAgICAgICAvKio8IE9NWF9VMzIgVVVJRCBhdG9tIGNvdW50LiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdMb2NhdGlvblJvbGUsICAgICAgICAgICAgICAvKio8IE9NWF8zMi4gSW5kaWNhdGVzIHRoZSByb2xlIG9mIHRoZSBwbGFjZS4gaS5lLiCRMJIgaW5kaWNhdGUgkXNob290aW5nIGxvY2F0aW9uJy4gkTGSIJFyZWFsIGxvY2F0aW9uki4qLyAKICAgIFFPTVhfTWVkaWFJbmZvVGFnQXN0cm9ub21pY2FsQm9keSwgICAgICAgICAgLyoqPCBPTVhfVTgqLiBBc3Ryb25vbWljYWwgYm9keSBvbiB3aGljaCB0aGUgbG9jYXRpb24gZXhpc3RzLiovIAogICAgUU9NWF9NZWRpYUluZm9UYWdVc2VySW5mb0RhdGEgICAgICAgICAgICAgICAvKio8IE9NWF9VOCouIFRoZSB1c2VyIGRlZmluZWQgdGFnIGluZm9ybWF0b24uKi8gCn0gUU9NWF9NRURJQUlORk9UQUdUWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9NRURJQUlORk9UWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7IC8qKjwgUmVhZC1vbmx5IHZhbHVlIGNvbnRhaW5pbmcgdGhlIGluZGV4IG9mIHRoZSBvdXRwdXQgcG9ydC4gKi8KICAgIFFPTVhfTUVESUFJTkZPVEFHVFlQRSBlVGFnOyAvKio8IFRoZSB0eXBlIG9mIG1lZGlhIGluZm8gYmVpbmcgc3BlY2lmaWVkLiAqLwogICAgT01YX1UzMiBuRGF0YVNpemU7IC8qKjwgVGhlIHNpemUgb2YgdGhlIGFzc29jaWF0ZWQgY0RhdGEuICBTZXQgbkRhdGFTaXplIHRvIDAgdG8gcmV0cmlldmUgdGhlIHNpemUgcmVxdWlyZWQgZm9yIGNEYXRhLiAqLwogICAgT01YX1U4IGNEYXRhWzFdOyAvKio8IFRoZSBtZWRpYSBkYXRhIGluZm8gKi8KfSBRT01YX01FRElBSU5GT1RZUEU7CgoKdHlwZWRlZiBlbnVtIFFPTVhfUkVTT0xVVElPTlVOSVRUWVBFIHsKICAgIFFPTVhfUmVzb2x1dGlvblVuaXRJbmNoLAogICAgUU9NWF9SZXNvbHV0aW9uQ2VudGltZXRlcgp9IFFPTVhfUkVTT0xVVElPTlVOSVRUWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9SRVNPTFVUSU9OVFlQRSB7CiAgICBRT01YX1JFU09MVVRJT05VTklUVFlQRSBlVW5pdDsgLyoqPCBUaGUgdW5pdCBvZiBtZWFzdXJlbWVudC4gKi8KICAgIE9NWF9VMzIgblg7IC8qKjwgVGhlIG51bWJlciBvZiBwaXhlbHMgcGVyIHVuaXQgaW4gdGhlIHdpZHRoIGRpcmVjdGlvbi4gKi8KICAgIE9NWF9VMzIgblk7IC8qKjwgVGhlIG51bWJlciBvZiBwaXhlbHMgcGVyIHVuaXQgaW4gdGhlIGhlaWdodCBkaXJlY3Rpb24uICovCn0gUU9NWF9SRVNPTFVUSU9OVFlQRTsKCnR5cGVkZWYgc3RydWN0IFFPTVhfVElNRVNUQU1QVFlQRSB7CiAgICBPTVhfVTMyIG5Ib3VyOyAvKio8IFRoZSBob3VyIHBvcnRpb24gb2YgdGhlIHRpbWUgc3RhbXAsIGJhc2VkIG9uIGEgMjQtaG91ciBmb3JtYXQuICovCiAgICBPTVhfVTMyIG5NaW51dGU7IC8qKjwgVGhlIG1pbnV0ZSBwb3J0aW9uIG9mIHRoZSB0aW1lIHN0YW1wLiAqLwogICAgT01YX1UzMiBuU2Vjb25kOyAvKio8IFRoZSBzZWNvbmQgcG9ydGlvbiBvZiB0aGUgdGltZSBzdGFtcC4gKi8KICAgIE9NWF9VMzIgbk1pbGxpc2Vjb25kOyAvKio8IHRoZSBtaWxsaXNlY29uZCBwb3J0aW9uIG9mIHRoZSB0aW1lIHN0YW1wLiAqLwp9IFFPTVhfVElNRVNUQU1QVFlQRTsKCnR5cGVkZWYgc3RydWN0IFFPTVhfREFURVNUQU1QVFlQRSB7CiAgICBPTVhfVTMyIG5ZZWFyOyAgLyoqPCBUaGUgeWVhciBwb3J0aW9uIG9mIHRoZSBkYXRlIHN0YW1wLiAqLwogICAgT01YX1UzMiBuTW9udGg7IC8qKjwgVGhlIG1vbnRocG9ydGlvbiBvZiB0aGUgZGF0ZSBzdGFtcC4gVmFsaWQgdmFsdWVzIGFyZSAxIHRvIDEyLiovCiAgICBPTVhfVTMyIG5EYXk7IC8qKjwgVGhlIGRheSBwb3J0aW9uIG9mIHRoZSBkYXRlIHN0YW1wLiBWYWxpZCB2YWx1ZXMgYXJlIDEgdG8gMzEgZGVwZW5kaW5nIG9uIHRoZSBtb250aCBzcGVjaWZpZWQuKi8KfSBRT01YX0RBVEVTVEFNUFRZUEU7Cgp0eXBlZGVmIGVudW0gUU9NWF9HRU9ERVRJQ1JFRlRZUEUgewogICAgUU9NWF9HZW9kZXRpY1JlZk5vcnRoLCAgLyoqPCBOb3J0aCBsYXRpdHVkZS4gKi8KICAgIFFPTVhfR2VvZGV0aWNSZWZTb3V0aCwgIC8qKjwgU291dGggbGF0aXR1ZGUuICovCiAgICBRT01YX0dlb2RldGljUmVmRWFzdCwgICAvKio8IEVhc3QgbG9uZ2l0dWRlLiAqLwogICAgUU9NWF9HZW9kZXRpY1JlZldlc3QgICAgLyoqPCBXZXN0IGxvbmdpdHVkZS4gKi8KfSBRT01YX0dFT0RFVElDUkVGVFlQRTsKCi8qKiBRT01YX0dFT0RFVElDQU5HTEVUWVBFIGlzIHVzZWQgdG8gc2V0IGdlb2RldGljIGFuZ2xlIGNvb3JkaW5hdGVzIG9uIGFuIGVsbGlwc29pZCAodGhlIEVhcnRoKSwKYW5kIGlzIGV4cGxpY2l0bHkgdXNlZCB0byBzcGVjaWZ5IGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuICBUaGlzIHN0cnVjdHVyZSBpcyByZWZlcmVuY2VkIGJ5IFFPTVhfR0VPREVUSUNUWVBFLiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX0dFT0RFVElDQU5HTEVUWVBFIHsKICAgIFFPTVhfR0VPREVUSUNSRUZUWVBFIGVSZWZlcmVuY2U7IC8qKjwgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdlb2RldGljIGFuZ2xlIGlzIGEgbGF0aXR1ZGUgb3IgbG9uZ2l0dWRlLiAqLwogICAgT01YX1UzMiBuRGVncmVlOyAvKio8IFRoZSBkZWdyZWUgb2YgdGhlIGxhdGl0dWRlIG9yIGxvbmdpdHVkZS4gKi8KICAgIE9NWF9VMzIgbk1pbnV0ZTsgLyoqPCBUaGUgbWludXRlIG9mIHRoZSBsYXRpdHVkZSBvciBsb25naXR1ZGUuICovCiAgICBPTVhfVTMyIG5TZWNvbmQ7IC8qKjwgVGhlIHNlY29uZCBvZiB0aGUgbGF0aXR1ZGUgb3IgbG9uZ2l0dWRlLiAqLwp9IFFPTVhfR0VPREVUSUNBTkdMRVRZUEU7Cgp0eXBlZGVmIGVudW0gUU9NWF9BTFRJVFVERVJFRlRZUEUgewogICAgUU9NWF9BbHRpdHVkZVJlZlNlYUxldmVsLCAvKio8IEF0IHNlYSBsZXZlbC4gKi8KICAgIFFPTVhfQWx0aXR1ZGVSZWZCZWxvd1NlYUxldmVsIC8qKjwgQmVsb3cgc2VhIGxldmVsLiAqLwp9IFFPTVhfQUxUSVRVREVSRUZUWVBFOwoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9BTFRJVFVERVRZUEUgewogICAgUU9NWF9BTFRJVFVERVJFRlRZUEUgZVJlZmVyZW5jZTsgLyoqPCBUaGUgcmVmZXJlbmNlIHBvaW50IGZvciB0aGUgYWx0aXR1ZGUuICovCiAgICBPTVhfVTMyIG5NZXRlcjsgLyoqPCBUaGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBvZiBtZXRlcnMgYWJvdmUgb3IgYmVsb3cgc2VhIGxldmVsLiAqLwogICAgT01YX1UzMiBuTWlsbGltZXRlcjsgLyoqPCBUaGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciBvZiBtaWxsaW1ldGVycyBhYm92ZSBvciBiZWxvdyBzZWEgbGV2ZWwuICovCn0gUU9NWF9BTFRJVFVERVRZUEU7CgovKiogUU9NWF9HRU9ERVRJQ1RZUEUgaXMgdXNlZCB0byBzZXQgZ2VvZGV0aWMgY29vcmRpbmF0ZXMgc3VjaCBhcyBsb25naXR1ZGUsIGxhdGl0dWRlLCBhbmQgYWx0aXR1ZGUuClRoaXMgc3RydWN0dXJlIHJlZmVyZW5jZXMgUU9NWF9HRU9ERVRJQ0FOR0xFVFlQRSBhbmQgUU9NWF9BTFRJVFVERVRZUEUuICovCnR5cGVkZWYgc3RydWN0IFFPTVhfR0VPREVUSUNUWVBFIHsKICAgIFFPTVhfR0VPREVUSUNBTkdMRVRZUEUgc0xhdGl0dWRlOyAvKio8IEluZGljYXRlcyB0aGUgbGF0aXR1ZGUuKi8KICAgIFFPTVhfR0VPREVUSUNBTkdMRVRZUEUgc0xvbmdpdHVkZTsgLyoqPCBJbmRpY2F0ZXMgdGhlIGxvbmdpdHVkZS4qLwogICAgUU9NWF9BTFRJVFVERVRZUEUgc0FsdGl0dWRlOyAvKio8IEluZGljYXRlcyB0aGUgYWx0aXR1ZGUuKi8KfSBRT01YX0dFT0RFVElDVFlQRTsKCgp0eXBlZGVmIHN0cnVjdCBRT01YX0lNQUdFX0lNQUdFU0laRUNPTlRST0xUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7IC8qKjwgcG9ydCBpbmRleCBvbiB3aGljaCBzaXplIGNvbnRyb2wgbmVlZHMgdG8gYmUgYXBwbGllZCAqLwogICAgT01YX1UzMiBuVGFyZ2V0SW1hZ2VTaXplOyAvKio8IGV4cGVjdGVkIG1heCB0YXJnZXQgc2l6ZSBpbiBCeXRlcyAqLwp9IFFPTVhfSU1BR0VfSU1BR0VTSVpFQ09OVFJPTFRZUEU7Cgp0eXBlZGVmIGVudW0gUU9NWF9VUklUWVBFIHsKICAgIFFPTVhfVVJJVFlQRV9SVFNQLCAvKio8IFJUU1AgVVJJIFR5cGUuICovIAogICAgUU9NWF9VUklUWVBFX0hUVFAsIC8qKjwgSFRUUCBVUkkgVHlwZS4gKi8KICAgIFFPTVhfVVJJVFlQRV9MT0NBTCAvKio8IExvY2FsIFVSSSBUeXBlLihpLmUgTm9uIE5ldHdvcmspICovCn1RT01YX1VSSVRZUEU7CgoKdHlwZWRlZiBlbnVtIFFPTVhfU1RSRUFNVFlQRSB7CiAgICBRT01YX1NUUkVBTVRZUEVfVk9ELCAvKio8IFZpZGVvIE9uIGRlbWFuZCBTdHJlYW0gKi8KICAgIFFPTVhfU1RSRUFNVFlQRV9MSVZFLC8qKjwgTGl2ZSBTdHJlYW0gKi8KICAgIFFPTVhfU1RSRUFNVFlQRV9GSUxFIC8qKjwgRmlsZSBiYXNlZCBTdHJlYW0gKi8KfVFPTVhfU1RSRUFNVFlQRTsKCgp0eXBlZGVmIHN0cnVjdCBRT01YX01FRElBU1RSRUFNVFlQRXsKICAgIFFPTVhfVVJJVFlQRSBlVVJJVHlwZTsKICAgIFFPTVhfU1RSRUFNVFlQRSBlU3RyZWFtVHlwZTsKfVFPTVhfTUVESUFTVFJFQU1UWVBFOyAgICAgICAgICAgICAgIAoKCi8qKgogKiBUaGlzIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIGVhY2gKICogcGxhbmUgb2YgdGhlIHVuY29tcHJlc3NlZCBpbWFnZS92aWRlbyBmb3JtYXQuCiAqLwp0eXBlZGVmIHN0cnVjdCBRT01YX1BMQU5FREVGSU5JVElPTlRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAvKio8IFJlcHJlc2VudHMgdGhlIHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCiAgICBPTVhfVTMyIG5QbGFuZUluZGV4OyAgICAgICAgICAgICAgLyoqPCBTcGVjaWZpZXMgdGhlIHBsYW5lIGVudW1lcmF0aW9uIGluZGV4IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0bywgc3RhcnRpbmcgd2l0aCBhIGJhc2UgdmFsdWUgb2YgMSAqLwogICAgT01YX1UzMiBuTWluU3RyaWRlOyAgICAgICAgICAgICAgIC8qKjwgUmVhZC1vbmx5IHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgbWluaW11bSBidWZmZXIgc3RyaWRlICovCiAgICBPTVhfVTMyIG5NYXhTdHJpZGU7ICAgICAgICAgICAgICAgLyoqPCBSZWFkLW9ubHkgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGJ1ZmZlciBzdHJpZGUgKi8KICAgIE9NWF9VMzIgblN0cmlkZU11bHRpcGxlczsgICAgICAgICAvKio8IFJlYWQtb25seSBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGJ1ZmZlciBzdHJpZGUgbXVsdGlwbGUgc3VwcG9ydGVkICovCiAgICBPTVhfUzMyIG5BY3R1YWxTdHJpZGU7ICAgICAgICAgICAgLyoqPCBTcGVjaWZpZXMgdGhlIGFjdHVhbCBzdHJpZGUgdG8gYmUgYXBwbGllZCAqLwogICAgT01YX1UzMiBuTWluUGxhbmVCdWZmZXJIZWlnaHQ7ICAgIC8qKjwgUmVhZC1vbmx5IHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgbWluaW11bSBidWZmZXIgaGVpZ2h0IChudW1iZXIgb2Ygc3RyaWRlIGxpbmVzKSAqLwogICAgT01YX1UzMiBuQWN0dWFsUGxhbmVCdWZmZXJIZWlnaHQ7IC8qKjwgU3BlY2lmaWVzIHRoZSBhY3R1YWwgYnVmZmVyIGhlaWdodCAobnVtYmVyIG9mIHN0cmlkZSBsaW5lcykgdG8gYmUgYXBwbGllZCAqLwogICAgT01YX1UzMiBuQnVmZmVyU2l6ZTsgICAgICAgICAgICAgIC8qKjwgUmVhZC1vbmx5IHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBidWZmZXIsIGluIGJ5dGVzICovCiAgICBPTVhfVTMyIG5CdWZmZXJBbGlnbm1lbnQ7ICAgICAgICAgLyoqPCBSZWFkLW9ubHkgZmllbGQgdGhhdCBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkIGFsaWdubWVudCBvZiB0aGUgYnVmZmVyLCBpbiBieXRlcyAqLwp9IFFPTVhfUExBTkVERUZJTklUSU9OVFlQRTsKCi8qKgogKiAgUGF1c2UgcG9ydCBwYXJhbWV0ZXJzCiAqCiAqICBTVFJVQ1QgTUVNQkVSUzoKICogIG5TaXplICAgICAgICAgICA6IFNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcwogKiAgblZlcnNpb24gICAgICAgIDogT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbgogKiAgblBvcnRJbmRleCAgICAgIDogSW5kZXggb2YgcG9ydCB0aGF0IHRoaXMgc3RydWN0dXJlIHJlcHJlc2VudAogKiAgYlBhdXNlUG9ydCAgICAgIDogQm9vbGVhbiBmaWVsZCB3aGljaCBpbmRpY2F0ZXMgaWYgcG9ydCBpcyBwYXVzZWQgb3IgcmVzdW1lLiBCeSBkZWZhdWx0IGJQYXVzZVBvcnQgPSBPTVhfRkFMU0UgCiAqICAgICAgICAgICAgICAgICAgICAmIHBvcnQgd2lsbCBiZSBwYXVzZWQgd2hlbiBiUGF1c2VQb3J0ID0gT01YX1RSVUUKICovCnR5cGVkZWYgc3RydWN0IFFPTVhfQ09ORklHX1BBVVNFUE9SVFRZUEUgewogIE9NWF9VMzIgblNpemU7CiAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAgICAgICAgLyoqPCBSZXByZXNlbnRzIHRoZSBwb3J0IHRoYXQgdGhpcyBzdHJ1Y3R1cmUgYXBwbGllcyB0byAqLwogIE9NWF9CT09MIGJQYXVzZVBvcnQ7ICAgICAgICAgICAgICAgLyoqPCBTcGVjaWZpZXMgaWYgcG9ydCBuZWVkIHRvIFBBVVNFIG9yIFJFU1VNRSAqLwp9IFFPTVhfQ09ORklHX1BBVVNFUE9SVFRZUEU7CgoKdHlwZWRlZiBzdHJ1Y3QgUU9NWF9SRUNUVFlQRSB7CiAgICBPTVhfUzMyIG5MZWZ0OwogICAgT01YX1MzMiBuVG9wOwogICAgT01YX1UzMiBuV2lkdGg7CiAgICBPTVhfVTMyIG5IZWlnaHQ7Cn0gUU9NWF9SRUNUVFlQRTsKCnR5cGVkZWYgc3RydWN0IFFPTVhfQUNUSVZFUkVHSU9OREVURUNUSU9OVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX0JPT0wgYkVuYWJsZTsKICAgIFFPTVhfUkVDVFRZUEUgc1JPSTsKICAgIE9NWF9VMzIgbk51bUV4Y2x1c2lvblJlZ2lvbnM7CiAgICBRT01YX1JFQ1RUWVBFIHNFeGNsdXNpb25SZWdpb25zWzFdOwp9IFFPTVhfQUNUSVZFUkVHSU9OREVURUNUSU9OVFlQRTsKCnR5cGVkZWYgc3RydWN0IFFPTVhfQUNUSVZFUkVHSU9OREVURUNUSU9OX1NUQVRVU1RZUEUgewogICAgT01YX1UzMiBuU2l6ZTsKICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsKICAgIE9NWF9VMzIgblBvcnRJbmRleDsKICAgIE9NWF9CT09MIGJEZXRlY3RlZDsKICAgIFFPTVhfUkVDVFRZUEUgc0RldGVjdGVkUmVnaW9uOwp9IFFPTVhfQUNUSVZFUkVHSU9OREVURUNUSU9OX1NUQVRVU1RZUEU7Cgp0eXBlZGVmIGVudW0gUU9NWF9TQ0FMRV9NT0RFVFlQRSB7CiAgICBRT01YX1NDQUxFX01PREVfTm9ybWFsLAogICAgUU9NWF9TQ0FMRV9NT0RFX0FuYW1vcnBoaWMsCiAgICBRT01YX1NDQUxFX01PREVfTWF4ID0gMHg3RkZGRkZGRgp9IFFPTVhfU0NBTEVfTU9ERVRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBRT01YX1NDQUxJTkdNT0RFVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgUU9NWF9TQ0FMRV9NT0RFVFlQRSAgZVNjYWxlTW9kZTsKfSBRT01YX1NDQUxJTkdNT0RFVFlQRTsKCnR5cGVkZWYgc3RydWN0IFFPTVhfTk9JU0VSRURVQ1RJT05UWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfQk9PTCBiRW5hYmxlOwogICAgT01YX0JPT0wgYkF1dG9Nb2RlOwogICAgT01YX1MzMiBuTm9pc2VSZWR1Y3Rpb247Cn0gUU9NWF9OT0lTRVJFRFVDVElPTlRZUEU7Cgp0eXBlZGVmIHN0cnVjdCBRT01YX0lNQUdFRU5IQU5DRU1FTlRUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7CiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247CiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7CiAgICBPTVhfQk9PTCBiRW5hYmxlOwogICAgT01YX0JPT0wgYkF1dG9Nb2RlOwogICAgT01YX1MzMiBuSW1hZ2VFbmhhbmNlbWVudDsKfSBRT01YX0lNQUdFRU5IQU5DRU1FTlRUWVBFOwoKLyoKICogdGhlc2UgYXJlIHBhcnQgb2YgT01YMS4yIGJ1dCBKQiBNUjIgYnJhbmNoIGRvZXNuJ3QgaGF2ZSB0aGVtIGRlZmluZWQKICogT01YX0luZGV4UGFyYW1JbnRlcmxhY2VGb3JtYXQKICogT01YX0lOVEVSTEFDRUZPUk1BVFRZUEUKICovCiNpZm5kZWYgT01YX0luZGV4UGFyYW1JbnRlcmxhY2VGb3JtYXQKI2RlZmluZSBPTVhfSW5kZXhQYXJhbUludGVybGFjZUZvcm1hdCAoMHg3RkYwMDAwMCkKdHlwZWRlZiBlbnVtIE9NWF9JTlRFUkxBQ0VUWVBFCnsKICAgT01YX0ludGVybGFjZUZyYW1lUHJvZ3Jlc3NpdmUsCiAgIE9NWF9JbnRlcmxhY2VJbnRlcmxlYXZlRnJhbWVUb3BGaWVsZEZpcnN0LAogICBPTVhfSW50ZXJsYWNlSW50ZXJsZWF2ZUZyYW1lQm90dG9tRmllbGRGaXJzdCwKICAgT01YX0ludGVybGFjZUZyYW1lVG9wRmllbGRGaXJzdCwKICAgT01YX0ludGVybGFjZUZyYW1lQm90dG9tRmllbGRGaXJzdAp9T01YX0lOVEVSTEFDRXM7Cgp0eXBlZGVmIHN0cnVjdCBPTVhfSU5URVJMQUNFRk9STUFUVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOwogICAgT01YX1UzMiBuUG9ydEluZGV4OwogICAgT01YX1UzMiBuRm9ybWF0OwogICAgT01YX1RJQ0tTIG5UaW1lU3RhbXA7Cn0gT01YX0lOVEVSTEFDRUZPUk1BVFRZUEU7CiNlbmRpZgojaWYgZGVmaW5lZCggX19jcGx1c3BsdXMgKQp9CiNlbmRpZiAvKiBlbmQgb2YgbWFjcm8gX19jcGx1c3BsdXMgKi8KCiNlbmRpZiAvKiBlbmQgb2YgbWFjcm8gX19IX1FPTVhfSVZDT01NT05FWFRFTlNJT05TX0hfXyAqLwo=