LyoKICogaWRlLmgKICoKICogSURFIGRyaXZlciBpbnRlcmZhY2UKICoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHczMmFwaSBwYWNrYWdlLgogKgogKiBDb250cmlidXRvcnM6CiAqICAgQ3JlYXRlZCBieSBIZXJ26SBQb3Vzc2luZWF1IDxocG91c3NpbkByZWFjdG9zLm9yZz4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBOT1QgQ09QWVJJR0hURUQKICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBvZmZlcmVkIGZvciB1c2UgaW4gdGhlIHB1YmxpYyBkb21haW4uIFlvdSBtYXkKICogdXNlLCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSBpdCBmcmVlbHkuCiAqCiAqIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWS4gQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCBBUkUgSEVSRUJZCiAqIERJU0NMQUlNRUQuIFRoaXMgaW5jbHVkZXMgYnV0IGlzIG5vdCBsaW1pdGVkIHRvIHdhcnJhbnRpZXMgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKgogKi8KCiNpZm5kZWYgX19JREVfSAojZGVmaW5lIF9fSURFX0gKCiNpZmRlZiBfX2NwbHVzcGx1cwpleHRlcm4gIkMiIHsKI2VuZGlmCgojZGVmaW5lIE1BWF9JREVfQ0hBTk5FTCAgIDIKI2RlZmluZSBNQVhfSURFX0xJTkUgICAgICAyCiNkZWZpbmUgTUFYX0lERV9ERVZJQ0UgICAgMgoKI2luY2x1ZGUgPHBzaHBhY2sxLmg+CnR5cGVkZWYgc3RydWN0IF9JREVOVElGWV9EQVRBIHsKICBVU0hPUlQgR2VuZXJhbENvbmZpZ3VyYXRpb247ICAgICAgIC8qIDAwICovCiAgVVNIT1JUIE51bUN5bGluZGVyczsgICAgICAgICAgICAgICAvKiAwMiAqLwogIFVTSE9SVCBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMDQgKi8KICBVU0hPUlQgTnVtSGVhZHM7ICAgICAgICAgICAgICAgICAgIC8qIDA2ICovCiAgVVNIT1JUIFVuZm9ybWF0dGVkQnl0ZXNQZXJUcmFjazsgICAvKiAwOCAqLwogIFVTSE9SVCBVbmZvcm1hdHRlZEJ5dGVzUGVyU2VjdG9yOyAgLyogMTAgKi8KICBVU0hPUlQgTnVtU2VjdG9yc1BlclRyYWNrOyAgICAgICAgIC8qIDEyICovCiAgVVNIT1JUIFZlbmRvclVuaXF1ZTFbM107ICAgICAgICAgICAvKiAxNCAqLwogIFVDSEFSICBTZXJpYWxOdW1iZXJbMjBdOyAgICAgICAgICAgLyogMjAgKi8KICBVU0hPUlQgQnVmZmVyVHlwZTsgICAgICAgICAgICAgICAgIC8qIDQwICovCiAgVVNIT1JUIEJ1ZmZlclNlY3RvclNpemU7ICAgICAgICAgICAvKiA0MiAqLwogIFVTSE9SVCBOdW1iZXJPZkVjY0J5dGVzOyAgICAgICAgICAgLyogNDQgKi8KICBVQ0hBUiAgRmlybXdhcmVSZXZpc2lvbls4XTsgICAgICAgIC8qIDQ2ICovCiAgVUNIQVIgIE1vZGVsTnVtYmVyWzQwXTsgICAgICAgICAgICAvKiA1NCAqLwogIFVDSEFSICBNYXhpbXVtQmxvY2tUcmFuc2ZlcjsgICAgICAgLyogOTQgKi8KICBVQ0hBUiAgVmVuZG9yVW5pcXVlMjsgICAgICAgICAgICAgIC8qIDk1ICovCiAgVVNIT1JUIERvdWJsZVdvcmRJbzsgICAgICAgICAgICAgICAvKiA5NiAqLwogIFVTSE9SVCBDYXBhYmlsaXRpZXM7ICAgICAgICAgICAgICAgLyogOTggKi8KICBVU0hPUlQgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDEwMCAqLwogIFVDSEFSICBWZW5kb3JVbmlxdWUzOyAgICAgICAgICAgICAgLyogMTAyICovCiAgVUNIQVIgIFBpb0N5Y2xlVGltaW5nTW9kZTsgICAgICAgICAvKiAxMDMgKi8KICBVQ0hBUiAgVmVuZG9yVW5pcXVlNDsgICAgICAgICAgICAgIC8qIDEwNCAqLwogIFVDSEFSICBEbWFDeWNsZVRpbWluZ01vZGU7ICAgICAgICAgLyogMTA1ICovCiAgVVNIT1JUIFRyYW5zbGF0aW9uRmllbGRzVmFsaWQ6MzsgICAvKiAxMDYgKi8KICBVU0hPUlQgUmVzZXJ2ZWQzOjEzOyAgICAgICAgICAgICAgIC8qICAtICAqLwogIFVTSE9SVCBOdW1iZXJPZkN1cnJlbnRDeWxpbmRlcnM7ICAgLyogMTA4ICovCiAgVVNIT1JUIE51bWJlck9mQ3VycmVudEhlYWRzOyAgICAgICAvKiAxMTAgKi8KICBVU0hPUlQgQ3VycmVudFNlY3RvcnNQZXJUcmFjazsgICAgIC8qIDExMiAqLwogIFVMT05HICBDdXJyZW50U2VjdG9yQ2FwYWNpdHk7ICAgICAgLyogMTE0ICovCiAgVVNIT1JUIEN1cnJlbnRNdWx0aVNlY3RvclNldHRpbmc7ICAvKiAxMTggKi8KICBVTE9ORyAgVXNlckFkZHJlc3NhYmxlU2VjdG9yczsgICAgIC8qIDEyMCAqLwogIFVTSE9SVCBTaW5nbGVXb3JkRE1BU3VwcG9ydDo4OyAgICAgLyogMTI0ICovCiAgVVNIT1JUIFNpbmdsZVdvcmRETUFBY3RpdmU6ODsgICAgICAvKiAgLSAgKi8KICBVU0hPUlQgTXVsdGlXb3JkRE1BU3VwcG9ydDo4OyAgICAgIC8qIDEyNiAqLwogIFVTSE9SVCBNdWx0aVdvcmRETUFBY3RpdmU6ODsgICAgICAgLyogIC0gICovCiAgVVNIT1JUIEFkdmFuY2VkUElPTW9kZXM6ODsgICAgICAgICAvKiAxMjggKi8KICBVU0hPUlQgUmVzZXJ2ZWQ0Ojg7ICAgICAgICAgICAgICAgIC8qICAtICAqLwogIFVTSE9SVCBNaW5pbXVtTVdYZmVyQ3ljbGVUaW1lOyAgICAgLyogMTMwICovCiAgVVNIT1JUIFJlY29tbWVuZGVkTVdYZmVyQ3ljbGVUaW1lOyAvKiAxMzIgKi8KICBVU0hPUlQgTWluaW11bVBJT0N5Y2xlVGltZTsgICAgICAgIC8qIDEzNCAqLwogIFVTSE9SVCBNaW5pbXVtUElPQ3ljbGVUaW1lSU9SRFk7ICAgLyogMTM2ICovCiAgVVNIT1JUIFJlc2VydmVkNVsxMV07ICAgICAgICAgICAgICAvKiAxMzggKi8KICBVU0hPUlQgTWFqb3JSZXZpc2lvbjsgICAgICAgICAgICAgIC8qIDE2MCAqLwogIFVTSE9SVCBNaW5vclJldmlzaW9uOyAgICAgICAgICAgICAgLyogMTYyICovCiAgVVNIT1JUIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAxNjQgKi8KICBVU0hPUlQgQ29tbWFuZFNldFN1cHBvcnQ7ICAgICAgICAgIC8qIDE2NiAqLwogIFVTSE9SVCBSZXNlcnZlZDZhWzJdOyAgICAgICAgICAgICAgLyogMTY4ICovCiAgVVNIT1JUIENvbW1hbmRTZXRBY3RpdmU7ICAgICAgICAgICAvKiAxNzIgKi8KICBVU0hPUlQgUmVzZXJ2ZWQ2YjsgICAgICAgICAgICAgICAgIC8qIDE3NCAqLwogIFVTSE9SVCBVbHRyYURNQVN1cHBvcnQ6ODsgICAgICAgICAgLyogMTc2ICovCiAgVVNIT1JUIFVsdHJhRE1BQWN0aXZlOjg7ICAgICAgICAgICAvKiAgLSAgKi8KICBVU0hPUlQgUmVzZXJ2ZWQ3WzExXTsgICAgICAgICAgICAgIC8qIDE3OCAqLwogIFVMT05HICBNYXg0OEJpdExCQVsyXTsgICAgICAgICAgICAgLyogMjAwICovCiAgVVNIT1JUIFJlc2VydmVkN2FbMjJdOyAgICAgICAgICAgICAvKiAyMDggKi8KICBVU0hPUlQgTGFzdEx1bjozOyAgICAgICAgICAgICAgICAgIC8qIDI1MiAqLwogIFVTSE9SVCBSZXNlcnZlZDg6MTM7ICAgICAgICAgICAgICAgLyogIC0gICovCiAgVVNIT1JUIE1lZGlhU3RhdHVzTm90aWZpY2F0aW9uOjI7ICAvKiAyNTQgKi8KICBVU0hPUlQgUmVzZXJ2ZWQ5OjY7ICAgICAgICAgICAgICAgIC8qICAtICAqLwogIFVTSE9SVCBEZXZpY2VXcml0ZVByb3RlY3Q6MTsgICAgICAgLyogIC0gICovCiAgVVNIT1JUIFJlc2VydmVkMTA6NzsgICAgICAgICAgICAgICAvKiAgLSAgKi8KICBVU0hPUlQgUmVzZXJ2ZWQxMVsxMjhdOyAgICAgICAgICAgIC8qIDI1NiAqLwp9IElERU5USUZZX0RBVEEsICpQSURFTlRJRllfREFUQTsKCnR5cGVkZWYgc3RydWN0IF9FWFRFTkRFRF9JREVOVElGWV9EQVRBIHsKICBVU0hPUlQgR2VuZXJhbENvbmZpZ3VyYXRpb247ICAgICAgIC8qIDAwICovCiAgVVNIT1JUIE51bUN5bGluZGVyczsgICAgICAgICAgICAgICAvKiAwMiAqLwogIFVTSE9SVCBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMDQgKi8KICBVU0hPUlQgTnVtSGVhZHM7ICAgICAgICAgICAgICAgICAgIC8qIDA2ICovCiAgVVNIT1JUIFVuZm9ybWF0dGVkQnl0ZXNQZXJUcmFjazsgICAvKiAwOCAqLwogIFVTSE9SVCBVbmZvcm1hdHRlZEJ5dGVzUGVyU2VjdG9yOyAgLyogMTAgKi8KICBVU0hPUlQgTnVtU2VjdG9yc1BlclRyYWNrOyAgICAgICAgIC8qIDEyICovCiAgX19HTlVfRVhURU5TSU9OIHVuaW9uCiAgewogICAgVVNIT1JUIFZlbmRvclVuaXF1ZTFbM107ICAgICAgICAgLyogMTQgKi8KICAgIHN0cnVjdAogICAgewogICAgICBVQ0hBUiBJbnRlclNlY3RvckdhcDsgICAgICAgICAgLyogMTQgKi8KICAgICAgVUNIQVIgSW50ZXJTZWN0b3JHYXBTaXplOyAgICAgIC8qIC0gICovCiAgICAgIFVDSEFSIFJlc2VydmVkMTY7ICAgICAgICAgICAgICAvKiAxNiAqLwogICAgICBVQ0hBUiBCeXRlc0luUExPOyAgICAgICAgICAgICAgLyogLSAgKi8KICAgICAgVVNIT1JUIFZlbmRvclVuaXF1ZUNudDsgICAgICAgIC8qIDE4ICovCiAgICB9IHU7CiAgfTsKICBVQ0hBUiAgU2VyaWFsTnVtYmVyWzIwXTsgICAgICAgICAgIC8qIDIwICovCiAgVVNIT1JUIEJ1ZmZlclR5cGU7ICAgICAgICAgICAgICAgICAvKiA0MCAqLwogIFVTSE9SVCBCdWZmZXJTZWN0b3JTaXplOyAgICAgICAgICAgLyogNDIgKi8KICBVU0hPUlQgTnVtYmVyT2ZFY2NCeXRlczsgICAgICAgICAgIC8qIDQ0ICovCiAgVUNIQVIgIEZpcm13YXJlUmV2aXNpb25bOF07ICAgICAgICAvKiA0NiAqLwogIFVDSEFSICBNb2RlbE51bWJlcls0MF07ICAgICAgICAgICAgLyogNTQgKi8KICBVQ0hBUiAgTWF4aW11bUJsb2NrVHJhbnNmZXI7ICAgICAgIC8qIDk0ICovCiAgVUNIQVIgIFZlbmRvclVuaXF1ZTI7ICAgICAgICAgICAgICAvKiA5NSAqLwogIFVTSE9SVCBEb3VibGVXb3JkSW87ICAgICAgICAgICAgICAgLyogOTYgKi8KICBVU0hPUlQgQ2FwYWJpbGl0aWVzOyAgICAgICAgICAgICAgIC8qIDk4ICovCiAgVVNIT1JUIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAxMDAgKi8KICBVQ0hBUiAgVmVuZG9yVW5pcXVlMzsgICAgICAgICAgICAgIC8qIDEwMiAqLwogIFVDSEFSICBQaW9DeWNsZVRpbWluZ01vZGU7ICAgICAgICAgLyogMTAzICovCiAgVUNIQVIgIFZlbmRvclVuaXF1ZTQ7ICAgICAgICAgICAgICAvKiAxMDQgKi8KICBVQ0hBUiAgRG1hQ3ljbGVUaW1pbmdNb2RlOyAgICAgICAgIC8qIDEwNSAqLwogIFVTSE9SVCBUcmFuc2xhdGlvbkZpZWxkc1ZhbGlkOjM7ICAgLyogMTA2ICovCiAgVVNIT1JUIFJlc2VydmVkMzoxMzsgICAgICAgICAgICAgICAvKiAgLSAgKi8KICBVU0hPUlQgTnVtYmVyT2ZDdXJyZW50Q3lsaW5kZXJzOyAgIC8qIDEwOCAqLwogIFVTSE9SVCBOdW1iZXJPZkN1cnJlbnRIZWFkczsgICAgICAgLyogMTEwICovCiAgVVNIT1JUIEN1cnJlbnRTZWN0b3JzUGVyVHJhY2s7ICAgICAvKiAxMTIgKi8KICBVTE9ORyAgQ3VycmVudFNlY3RvckNhcGFjaXR5OyAgICAgIC8qIDExNCAqLwogIFVTSE9SVCBDdXJyZW50TXVsdGlTZWN0b3JTZXR0aW5nOyAgLyogMTE4ICovCiAgVUxPTkcgIFVzZXJBZGRyZXNzYWJsZVNlY3RvcnM7ICAgICAvKiAxMjAgKi8KICBVU0hPUlQgU2luZ2xlV29yZERNQVN1cHBvcnQ6ODsgICAgIC8qIDEyNCAqLwogIFVTSE9SVCBTaW5nbGVXb3JkRE1BQWN0aXZlOjg7ICAgICAgLyogIC0gICovCiAgVVNIT1JUIE11bHRpV29yZERNQVN1cHBvcnQ6ODsgICAgICAvKiAxMjYgKi8KICBVU0hPUlQgTXVsdGlXb3JkRE1BQWN0aXZlOjg7ICAgICAgIC8qICAtICAqLwogIFVTSE9SVCBBZHZhbmNlZFBJT01vZGVzOjg7ICAgICAgICAgLyogMTI4ICovCiAgVVNIT1JUIFJlc2VydmVkNDo4OyAgICAgICAgICAgICAgICAvKiAgLSAgKi8KICBVU0hPUlQgTWluaW11bU1XWGZlckN5Y2xlVGltZTsgICAgIC8qIDEzMCAqLwogIFVTSE9SVCBSZWNvbW1lbmRlZE1XWGZlckN5Y2xlVGltZTsgLyogMTMyICovCiAgVVNIT1JUIE1pbmltdW1QSU9DeWNsZVRpbWU7ICAgICAgICAvKiAxMzQgKi8KICBVU0hPUlQgTWluaW11bVBJT0N5Y2xlVGltZUlPUkRZOyAgIC8qIDEzNiAqLwogIFVTSE9SVCBSZXNlcnZlZDVbMTFdOyAgICAgICAgICAgICAgLyogMTM4ICovCiAgVVNIT1JUIE1ham9yUmV2aXNpb247ICAgICAgICAgICAgICAvKiAxNjAgKi8KICBVU0hPUlQgTWlub3JSZXZpc2lvbjsgICAgICAgICAgICAgIC8qIDE2MiAqLwogIFVTSE9SVCBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMTY0ICovCiAgVVNIT1JUIENvbW1hbmRTZXRTdXBwb3J0OyAgICAgICAgICAvKiAxNjYgKi8KICBVU0hPUlQgUmVzZXJ2ZWQ2YVsyXTsgICAgICAgICAgICAgIC8qIDE2OCAqLwogIFVTSE9SVCBDb21tYW5kU2V0QWN0aXZlOyAgICAgICAgICAgLyogMTcyICovCiAgVVNIT1JUIFJlc2VydmVkNmI7ICAgICAgICAgICAgICAgICAvKiAxNzQgKi8KICBVU0hPUlQgVWx0cmFETUFTdXBwb3J0Ojg7ICAgICAgICAgIC8qIDE3NiAqLwogIFVTSE9SVCBVbHRyYURNQUFjdGl2ZTo4OyAgICAgICAgICAgLyogIC0gICovCiAgVVNIT1JUIFJlc2VydmVkN1sxMV07ICAgICAgICAgICAgICAvKiAxNzggKi8KICBVTE9ORyAgTWF4NDhCaXRMQkFbMl07ICAgICAgICAgICAgIC8qIDIwMCAqLwogIFVTSE9SVCBSZXNlcnZlZDdhWzIyXTsgICAgICAgICAgICAgLyogMjA4ICovCiAgVVNIT1JUIExhc3RMdW46MzsgICAgICAgICAgICAgICAgICAvKiAyNTIgKi8KICBVU0hPUlQgUmVzZXJ2ZWQ4OjEzOyAgICAgICAgICAgICAgIC8qICAtICAqLwogIFVTSE9SVCBNZWRpYVN0YXR1c05vdGlmaWNhdGlvbjoyOyAgLyogMjU0ICovCiAgVVNIT1JUIFJlc2VydmVkOTo2OyAgICAgICAgICAgICAgICAvKiAgLSAgKi8KICBVU0hPUlQgRGV2aWNlV3JpdGVQcm90ZWN0OjE7ICAgICAgIC8qICAtICAqLwogIFVTSE9SVCBSZXNlcnZlZDEwOjc7ICAgICAgICAgICAgICAgLyogIC0gICovCiAgVVNIT1JUIFJlc2VydmVkMTFbMTI4XTsgICAgICAgICAgICAvKiAyNTYgKi8KfSBFWFRFTkRFRF9JREVOVElGWV9EQVRBLCAqUEVYVEVOREVEX0lERU5USUZZX0RBVEE7CiNpbmNsdWRlIDxwb3BwYWNrLmg+Cgp0eXBlZGVmIHN0cnVjdCBfUENJSURFX1RSQU5TRkVSX01PREVfU0VMRUNUCnsKICBVTE9ORyBDaGFubmVsOwogIEJPT0xFQU4gRGV2aWNlUHJlc2VudFtNQVhfSURFX0RFVklDRSAqIE1BWF9JREVfTElORV07CiAgQk9PTEVBTiBGaXhlZERpc2tbTUFYX0lERV9ERVZJQ0UgKiBNQVhfSURFX0xJTkVdOwogIEJPT0xFQU4gSW9SZWFkeVN1cHBvcnRlZFtNQVhfSURFX0RFVklDRSAqIE1BWF9JREVfTElORV07CiAgVUxPTkcgRGV2aWNlVHJhbnNmZXJNb2RlU3VwcG9ydGVkW01BWF9JREVfREVWSUNFICogTUFYX0lERV9MSU5FXTsKICBVTE9ORyBCZXN0UGlvQ3ljbGVUaW1lW01BWF9JREVfREVWSUNFICogTUFYX0lERV9MSU5FXTsKICBVTE9ORyBCZXN0U3dEbWFDeWNsZVRpbWVbTUFYX0lERV9ERVZJQ0UgKiBNQVhfSURFX0xJTkVdOwogIFVMT05HIEJlc3RNd0RtYUN5Y2xlVGltZVtNQVhfSURFX0RFVklDRSAqIE1BWF9JREVfTElORV07CiAgVUxPTkcgQmVzdFVEbWFDeWNsZVRpbWVbTUFYX0lERV9ERVZJQ0UgKiBNQVhfSURFX0xJTkVdOwogIFVMT05HIERldmljZVRyYW5zZmVyTW9kZUN1cnJlbnRbTUFYX0lERV9ERVZJQ0UgKiBNQVhfSURFX0xJTkVdOwogIFVMT05HIFVzZXJDaG9pY2VUcmFuc2Zlck1vZGVbTUFYX0lERV9ERVZJQ0UgKiBNQVhfSURFX0xJTkVdOwogIFVMT05HIEVuYWJsZVVETUE2NjsKICBJREVOVElGWV9EQVRBIElkZW50aWZ5RGF0YVtNQVhfSURFX0RFVklDRV07CiAgVUxPTkcgRGV2aWNlVHJhbnNmZXJNb2RlU2VsZWN0ZWRbTUFYX0lERV9ERVZJQ0UgKiBNQVhfSURFX0xJTkVdOwogIFBVTE9ORyBUcmFuc2Zlck1vZGVUaW1pbmdUYWJsZTsKICBVTE9ORyBUcmFuc2Zlck1vZGVUYWJsZUxlbmd0aDsKfSBQQ0lJREVfVFJBTlNGRVJfTU9ERV9TRUxFQ1QsICpQUENJSURFX1RSQU5TRkVSX01PREVfU0VMRUNUOwoKdHlwZWRlZiBlbnVtCnsKICBDaGFubmVsRGlzYWJsZWQgPSAwLAogIENoYW5uZWxFbmFibGVkLAogIENoYW5uZWxTdGF0ZVVua25vd24KfSBJREVfQ0hBTk5FTF9TVEFURTsKCnR5cGVkZWYgSURFX0NIQU5ORUxfU1RBVEUKKE5UQVBJICpQQ0lJREVfQ0hBTk5FTF9FTkFCTEVEKSgKICBJTiBQVk9JRCBEZXZpY2VFeHRlbnNpb24sCiAgSU4gVUxPTkcgQ2hhbm5lbCk7Cgp0eXBlZGVmIEJPT0xFQU4KKE5UQVBJICpQQ0lJREVfU1lOQ19BQ0NFU1NfUkVRVUlSRUQpKAogIElOIFBWT0lEIERldmljZUV4dGVuc2lvbik7Cgp0eXBlZGVmIE5UU1RBVFVTCihOVEFQSSAqUENJSURFX1RSQU5TRkVSX01PREVfU0VMRUNUX0ZVTkMpKAogIElOIFBWT0lEIERldmljZUV4dGVuc2lvbiwKICBJTiBPVVQgUFBDSUlERV9UUkFOU0ZFUl9NT0RFX1NFTEVDVCBYZmVyTW9kZSk7Cgp0eXBlZGVmIFVMT05HCihOVEFQSSAqUENJSURFX1VTRURNQV9GVU5DKSgKICBJTiBQVk9JRCBEZXZpY2VFeHRlbnNpb24sCiAgSU4gUFVDSEFSIENkYkNvbW1hbmQsCiAgSU4gUFVDSEFSIFNsYXZlKTsKCnR5cGVkZWYgTlRTVEFUVVMKKE5UQVBJICpQQ0lJREVfVURNQV9NT0RFU19TVVBQT1JURUQpKAogIElOIElERU5USUZZX0RBVEEgSWRlbnRpZnlEYXRhLAogIE9VVCBQVUxPTkcgQmVzdFhmZXJNb2RlLAogIE9VVCBQVUxPTkcgQ3VycmVudFhmZXJNb2RlKTsKCnR5cGVkZWYgc3RydWN0IF9JREVfQ09OVFJPTExFUl9QUk9QRVJUSUVTCnsKICBVTE9ORyBTaXplOwogIFVMT05HIEV4dGVuc2lvblNpemU7CiAgVUxPTkcgU3VwcG9ydGVkVHJhbnNmZXJNb2RlW01BWF9JREVfQ0hBTk5FTF1bTUFYX0lERV9ERVZJQ0VdOwogIFBDSUlERV9DSEFOTkVMX0VOQUJMRUQgUGNpSWRlQ2hhbm5lbEVuYWJsZWQ7CiAgUENJSURFX1NZTkNfQUNDRVNTX1JFUVVJUkVEIFBjaUlkZVN5bmNBY2Nlc3NSZXF1aXJlZDsKICBQQ0lJREVfVFJBTlNGRVJfTU9ERV9TRUxFQ1RfRlVOQyBQY2lJZGVUcmFuc2Zlck1vZGVTZWxlY3Q7CiAgQk9PTEVBTiBJZ25vcmVBY3RpdmVCaXRGb3JBdGFEZXZpY2U7CiAgQk9PTEVBTiBBbHdheXNDbGVhckJ1c01hc3RlckludGVycnVwdDsKICBQQ0lJREVfVVNFRE1BX0ZVTkMgUGNpSWRlVXNlRG1hOwogIFVMT05HIEFsaWdubWVudFJlcXVpcmVtZW50OwogIFVMT05HIERlZmF1bHRQSU87CiAgUENJSURFX1VETUFfTU9ERVNfU1VQUE9SVEVEIFBjaUlkZVVkbWFNb2Rlc1N1cHBvcnRlZDsKfSBJREVfQ09OVFJPTExFUl9QUk9QRVJUSUVTLCAqUElERV9DT05UUk9MTEVSX1BST1BFUlRJRVM7Cgp0eXBlZGVmIE5UU1RBVFVTCihOVEFQSSAqUENPTlRST0xMRVJfUFJPUEVSVElFUykoCiAgSU4gUFZPSUQgRGV2aWNlRXh0ZW5zaW9uLAogIElOIFBJREVfQ09OVFJPTExFUl9QUk9QRVJUSUVTIENvbnRyb2xsZXJQcm9wZXJ0aWVzKTsKCk5UU1RBVFVTIE5UQVBJClBjaUlkZVhJbml0aWFsaXplKAogIElOIFBEUklWRVJfT0JKRUNUIERyaXZlck9iamVjdCwKICBJTiBQVU5JQ09ERV9TVFJJTkcgUmVnaXN0cnlQYXRoLAogIElOIFBDT05UUk9MTEVSX1BST1BFUlRJRVMgSHdHZXRDb250cm9sbGVyUHJvcGVydGllcywKICBJTiBVTE9ORyBFeHRlbnNpb25TaXplKTsKCk5UU1RBVFVTIE5UQVBJClBjaUlkZVhHZXRCdXNEYXRhKAogIElOIFBWT0lEIERldmljZUV4dGVuc2lvbiwKICBJTiBQVk9JRCBCdWZmZXIsCiAgSU4gVUxPTkcgQ29uZmlnRGF0YU9mZnNldCwKICBJTiBVTE9ORyBCdWZmZXJMZW5ndGgpOwoKTlRTVEFUVVMgTlRBUEkKUGNpSWRlWFNldEJ1c0RhdGEoCiAgSU4gUFZPSUQgRGV2aWNlRXh0ZW5zaW9uLAogIElOIFBWT0lEIEJ1ZmZlciwKICBJTiBQVk9JRCBEYXRhTWFzaywKICBJTiBVTE9ORyBDb25maWdEYXRhT2Zmc2V0LAogIElOIFVMT05HIEJ1ZmZlckxlbmd0aCk7CgovKiBCaXQgZmllbGQgdmFsdWVzIGZvcgogKiBQQ0lJREVfVFJBTlNGRVJfTU9ERV9TRUxFQ1QuRGV2aWNlVHJhbnNmZXJNb2RlU3VwcG9ydGVkIGFuZAogKiBJREVfQ09OVFJPTExFUl9QUk9QRVJUSUVTLlN1cHBvcnRlZFRyYW5zZmVyTW9kZQogKi8KLy8gUElPIE1vZGVzCiNkZWZpbmUgUElPX01PREUwICAgKDEgPDwgMCkKI2RlZmluZSBQSU9fTU9ERTEgICAoMSA8PCAxKQojZGVmaW5lIFBJT19NT0RFMiAgICgxIDw8IDIpCiNkZWZpbmUgUElPX01PREUzICAgKDEgPDwgMykKI2RlZmluZSBQSU9fTU9ERTQgICAoMSA8PCA0KQovLyBTaW5nbGUtd29yZCBETUEgTW9kZXMKI2RlZmluZSBTV0RNQV9NT0RFMCAoMSA8PCA1KQojZGVmaW5lIFNXRE1BX01PREUxICgxIDw8IDYpCiNkZWZpbmUgU1dETUFfTU9ERTIgKDEgPDwgNykKLy8gTXVsdGktd29yZCBETUEgTW9kZXMKI2RlZmluZSBNV0RNQV9NT0RFMCAoMSA8PCA4KQojZGVmaW5lIE1XRE1BX01PREUxICgxIDw8IDkpCiNkZWZpbmUgTVdETUFfTU9ERTIgKDEgPDwgMTApCi8vIFVsdHJhIERNQSBNb2RlcwojZGVmaW5lIFVETUFfTU9ERTAgICgxIDw8IDExKQojZGVmaW5lIFVETUFfTU9ERTEgICgxIDw8IDEyKQojZGVmaW5lIFVETUFfTU9ERTIgICgxIDw8IDEzKQojZGVmaW5lIFVETUFfTU9ERTMgICgxIDw8IDE0KQojZGVmaW5lIFVETUFfTU9ERTQgICgxIDw8IDE1KQojZGVmaW5lIFVETUFfTU9ERTUgICgxIDw8IDE2KQoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgojZW5kaWYgLyogX19JREVfSCAqLwo=