LyoKICogTUlETCBwcm94eS9zdHViIHN0dWZmCiAqCiAqIENvcHlyaWdodCAyMDAyIE92ZSBL5XZlbiwgVHJhbnNHYW1pbmcgVGVjaG5vbG9naWVzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKgogKiBUT0RPOgogKiAgLSBmaWd1cmUgb3V0IHdoZXRoZXIgd2UgKnJlYWxseSogZ290IHRoaXMgcmlnaHQKICogIC0gY2hlY2sgZm9yIGVycm9ycyBhbmQgdGhyb3cgZXhjZXB0aW9ucwogKi8KCiNpbmNsdWRlIDxzdGRhcmcuaD4KCiNkZWZpbmUgQ09CSk1BQ1JPUwoKI2luY2x1ZGUgIndpbmRlZi5oIgojaW5jbHVkZSAid2luYmFzZS5oIgojaW5jbHVkZSAid2luZXJyb3IuaCIKCiNpbmNsdWRlICJvYmpiYXNlLmgiCgojaW5jbHVkZSAicnBjcHJveHkuaCIKCiNpbmNsdWRlICJ3aW5lL2RlYnVnLmgiCgojaW5jbHVkZSAibmRyX21pc2MuaCIKI2luY2x1ZGUgInJwY25kci5oIgoKV0lORV9ERUZBVUxUX0RFQlVHX0NIQU5ORUwocnBjKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgTmRyQ2xpZW50SW5pdGlhbGl6ZU5ldyBbUlBDUlQ0LkBdCiAqLwp2b2lkIFdJTkFQSSBOZHJDbGllbnRJbml0aWFsaXplTmV3KCBQUlBDX01FU1NBR0UgcFJwY01lc3NhZ2UsIFBNSURMX1NUVUJfTUVTU0FHRSBwU3R1Yk1zZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNSURMX1NUVUJfREVTQyBwU3R1YkRlc2MsIHVuc2lnbmVkIGludCBQcm9jTnVtICkKewogIFRSQUNFKCIocFJwY01lc3NhZ2UgPT0gXiVwLCBwU3R1Yk1zZyA9PSBeJXAsIHBTdHViRGVzYyA9PSBeJXAsIFByb2NOdW0gPT0gJWQpXG4iLAogICAgcFJwY01lc3NhZ2UsIHBTdHViTXNnLCBwU3R1YkRlc2MsIFByb2NOdW0pOwoKICBwUnBjTWVzc2FnZS0+SGFuZGxlID0gTlVMTDsKICBwUnBjTWVzc2FnZS0+UHJvY051bSA9IFByb2NOdW0gfCBSUENfRkxBR1NfVkFMSURfQklUOwogIHBScGNNZXNzYWdlLT5ScGNJbnRlcmZhY2VJbmZvcm1hdGlvbiA9IHBTdHViRGVzYy0+UnBjSW50ZXJmYWNlSW5mb3JtYXRpb247CiAgcFJwY01lc3NhZ2UtPlJwY0ZsYWdzID0gMDsKICBwUnBjTWVzc2FnZS0+UmVzZXJ2ZWRGb3JSdW50aW1lID0gTlVMTDsKICBwUnBjTWVzc2FnZS0+RGF0YVJlcHJlc2VudGF0aW9uID0gTkRSX0xPQ0FMX0RBVEFfUkVQUkVTRU5UQVRJT047CgogIHBTdHViTXNnLT5ScGNNc2cgPSBwUnBjTWVzc2FnZTsKICBwU3R1Yk1zZy0+QnVmZmVyU3RhcnQgPSBOVUxMOwogIHBTdHViTXNnLT5CdWZmZXJFbmQgPSBOVUxMOwogIHBTdHViTXNnLT5CdWZmZXJMZW5ndGggPSAwOwogIHBTdHViTXNnLT5Jc0NsaWVudCA9IFRSVUU7CiAgcFN0dWJNc2ctPlJldXNlQnVmZmVyID0gRkFMU0U7CiAgcFN0dWJNc2ctPnBBbGxvY0FsbE5vZGVzQ29udGV4dCA9IE5VTEw7CiAgcFN0dWJNc2ctPnBQb2ludGVyUXVldWVTdGF0ZSA9IE5VTEw7CiAgcFN0dWJNc2ctPklnbm9yZUVtYmVkZGVkUG9pbnRlcnMgPSAwOwogIHBTdHViTXNnLT5Qb2ludGVyQnVmZmVyTWFyayA9IE5VTEw7CiAgcFN0dWJNc2ctPkNvcnJEZXNwSW5jcmVtZW50ID0gMDsKICBwU3R1Yk1zZy0+dUZsYWdzID0gMDsKICBwU3R1Yk1zZy0+VW5pcXVlUHRyQ291bnQgPSAwOwogIHBTdHViTXNnLT5wZm5BbGxvY2F0ZSA9IHBTdHViRGVzYy0+cGZuQWxsb2NhdGU7CiAgcFN0dWJNc2ctPnBmbkZyZWUgPSBwU3R1YkRlc2MtPnBmbkZyZWU7CiAgcFN0dWJNc2ctPlN0YWNrVG9wID0gTlVMTDsKICBwU3R1Yk1zZy0+U3R1YkRlc2MgPSBwU3R1YkRlc2M7CiAgcFN0dWJNc2ctPkZ1bGxQdHJSZWZJZCA9IDA7CiAgcFN0dWJNc2ctPlBvaW50ZXJMZW5ndGggPSAwOwogIHBTdHViTXNnLT5mSW5Eb250RnJlZSA9IDA7CiAgcFN0dWJNc2ctPmZEb250Q2FsbEZyZWVJbnN0ID0gMDsKICBwU3R1Yk1zZy0+ZkluT25seVBhcmFtID0gMDsKICBwU3R1Yk1zZy0+Zkhhc1JldHVybiA9IDA7CiAgcFN0dWJNc2ctPmZIYXNFeHRlbnNpb25zID0gMDsKICBwU3R1Yk1zZy0+Zkhhc05ld0NvcnJEZXNjID0gMDsKICBwU3R1Yk1zZy0+ZklzSW4gPSAwOwogIHBTdHViTXNnLT5mSXNPdXQgPSAwOwogIHBTdHViTXNnLT5mSXNPaWNmID0gMDsKICBwU3R1Yk1zZy0+ZkJ1ZmZlclZhbGlkID0gMDsKICBwU3R1Yk1zZy0+Zkhhc01lbW9yeVZhbGlkYXRlQ2FsbGJhY2sgPSAwOwogIHBTdHViTXNnLT5mSW5GcmVlID0gMDsKICBwU3R1Yk1zZy0+Zk5lZWRNQ0NQID0gMDsKICBwU3R1Yk1zZy0+ZlVudXNlZCA9IDA7CiAgcFN0dWJNc2ctPmR3RGVzdENvbnRleHQgPSBNU0hDVFhfRElGRkVSRU5UTUFDSElORTsKICBwU3R1Yk1zZy0+cHZEZXN0Q29udGV4dCA9IE5VTEw7CiAgcFN0dWJNc2ctPnBScGNDaGFubmVsQnVmZmVyID0gTlVMTDsKICBwU3R1Yk1zZy0+cEFycmF5SW5mbyA9IE5VTEw7CiAgcFN0dWJNc2ctPmR3U3R1YlBoYXNlID0gMDsKICAvKiBGSVhNRTogTG93U3RhY2tNYXJrICovCiAgcFN0dWJNc2ctPnBBc3luY01zZyA9IE5VTEw7CiAgcFN0dWJNc2ctPnBDb3JySW5mbyA9IE5VTEw7CiAgcFN0dWJNc2ctPnBDb3JyTWVtb3J5ID0gTlVMTDsKICBwU3R1Yk1zZy0+cE1lbW9yeUxpc3QgPSBOVUxMOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgTmRyU2VydmVySW5pdGlhbGl6ZU5ldyBbUlBDUlQ0LkBdCiAqLwp1bnNpZ25lZCBjaGFyKiBXSU5BUEkgTmRyU2VydmVySW5pdGlhbGl6ZU5ldyggUFJQQ19NRVNTQUdFIHBScGNNc2csIFBNSURMX1NUVUJfTUVTU0FHRSBwU3R1Yk1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNSURMX1NUVUJfREVTQyBwU3R1YkRlc2MgKQp7CiAgVFJBQ0UoIihwUnBjTXNnID09IF4lcCwgcFN0dWJNc2cgPT0gXiVwLCBwU3R1YkRlc2MgPT0gXiVwKVxuIiwgcFJwY01zZywgcFN0dWJNc2csIHBTdHViRGVzYyk7CgogIHBTdHViTXNnLT5ScGNNc2cgPSBwUnBjTXNnOwogIHBTdHViTXNnLT5CdWZmZXIgPSBwU3R1Yk1zZy0+QnVmZmVyU3RhcnQgPSBwUnBjTXNnLT5CdWZmZXI7CiAgcFN0dWJNc2ctPkJ1ZmZlckVuZCA9IHBTdHViTXNnLT5CdWZmZXIgKyBwUnBjTXNnLT5CdWZmZXJMZW5ndGg7CiAgcFN0dWJNc2ctPkJ1ZmZlckxlbmd0aCA9IHBScGNNc2ctPkJ1ZmZlckxlbmd0aDsKICBwU3R1Yk1zZy0+SXNDbGllbnQgPSBGQUxTRTsKICBwU3R1Yk1zZy0+UmV1c2VCdWZmZXIgPSBGQUxTRTsKICBwU3R1Yk1zZy0+cEFsbG9jQWxsTm9kZXNDb250ZXh0ID0gTlVMTDsKICBwU3R1Yk1zZy0+cFBvaW50ZXJRdWV1ZVN0YXRlID0gTlVMTDsKICBwU3R1Yk1zZy0+SWdub3JlRW1iZWRkZWRQb2ludGVycyA9IDA7CiAgcFN0dWJNc2ctPlBvaW50ZXJCdWZmZXJNYXJrID0gTlVMTDsKICBwU3R1Yk1zZy0+dUZsYWdzID0gMDsKICBwU3R1Yk1zZy0+VW5pcXVlUHRyQ291bnQgPSAwOwogIHBTdHViTXNnLT5wZm5BbGxvY2F0ZSA9IHBTdHViRGVzYy0+cGZuQWxsb2NhdGU7CiAgcFN0dWJNc2ctPnBmbkZyZWUgPSBwU3R1YkRlc2MtPnBmbkZyZWU7CiAgcFN0dWJNc2ctPlN0YWNrVG9wID0gTlVMTDsKICBwU3R1Yk1zZy0+U3R1YkRlc2MgPSBwU3R1YkRlc2M7CiAgcFN0dWJNc2ctPkZ1bGxQdHJYbGF0VGFibGVzID0gTlVMTDsKICBwU3R1Yk1zZy0+RnVsbFB0clJlZklkID0gMDsKICBwU3R1Yk1zZy0+UG9pbnRlckxlbmd0aCA9IDA7CiAgcFN0dWJNc2ctPmZJbkRvbnRGcmVlID0gMDsKICBwU3R1Yk1zZy0+ZkRvbnRDYWxsRnJlZUluc3QgPSAwOwogIHBTdHViTXNnLT5mSW5Pbmx5UGFyYW0gPSAwOwogIHBTdHViTXNnLT5mSGFzUmV0dXJuID0gMDsKICBwU3R1Yk1zZy0+Zkhhc0V4dGVuc2lvbnMgPSAwOwogIHBTdHViTXNnLT5mSGFzTmV3Q29yckRlc2MgPSAwOwogIHBTdHViTXNnLT5mSXNJbiA9IDA7CiAgcFN0dWJNc2ctPmZJc091dCA9IDA7CiAgcFN0dWJNc2ctPmZJc09pY2YgPSAwOwogIHBTdHViTXNnLT5mSGFzTWVtb3J5VmFsaWRhdGVDYWxsYmFjayA9IDA7CiAgcFN0dWJNc2ctPmZJbkZyZWUgPSAwOwogIHBTdHViTXNnLT5mTmVlZE1DQ1AgPSAwOwogIHBTdHViTXNnLT5mVW51c2VkID0gMDsKICBwU3R1Yk1zZy0+ZHdEZXN0Q29udGV4dCA9IE1TSENUWF9ESUZGRVJFTlRNQUNISU5FOwogIHBTdHViTXNnLT5wdkRlc3RDb250ZXh0ID0gTlVMTDsKICBwU3R1Yk1zZy0+cFJwY0NoYW5uZWxCdWZmZXIgPSBOVUxMOwogIHBTdHViTXNnLT5wQXJyYXlJbmZvID0gTlVMTDsKICBwU3R1Yk1zZy0+ZHdTdHViUGhhc2UgPSAwOwogIC8qIEZJWE1FOiBMb3dTdGFja01hcmsgKi8KICBwU3R1Yk1zZy0+cEFzeW5jTXNnID0gTlVMTDsKICBwU3R1Yk1zZy0+cENvcnJJbmZvID0gTlVMTDsKICBwU3R1Yk1zZy0+cENvcnJNZW1vcnkgPSBOVUxMOwogIHBTdHViTXNnLT5wTWVtb3J5TGlzdCA9IE5VTEw7CgogIHJldHVybiBOVUxMOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIE5kckdldEJ1ZmZlciBbUlBDUlQ0LkBdCiAqLwp1bnNpZ25lZCBjaGFyICpXSU5BUEkgTmRyR2V0QnVmZmVyKFBNSURMX1NUVUJfTUVTU0FHRSBzdHVibXNnLCBVTE9ORyBidWZsZW4sIFJQQ19CSU5ESU5HX0hBTkRMRSBoYW5kbGUpCnsKICBSUENfU1RBVFVTIHN0YXR1czsKCiAgVFJBQ0UoIihzdHVibXNnID09IF4lcCwgYnVmbGVuID09ICV1LCBoYW5kbGUgPT0gJXApXG4iLCBzdHVibXNnLCBidWZsZW4sIGhhbmRsZSk7CiAgCiAgc3R1Ym1zZy0+UnBjTXNnLT5IYW5kbGUgPSBoYW5kbGU7CiAgc3R1Ym1zZy0+UnBjTXNnLT5CdWZmZXJMZW5ndGggPSBidWZsZW47CgogIHN0YXR1cyA9IElfUnBjR2V0QnVmZmVyKHN0dWJtc2ctPlJwY01zZyk7CiAgaWYgKHN0YXR1cyAhPSBSUENfU19PSykKICAgIFJwY1JhaXNlRXhjZXB0aW9uKHN0YXR1cyk7CgogIHN0dWJtc2ctPkJ1ZmZlciA9IHN0dWJtc2ctPlJwY01zZy0+QnVmZmVyOwogIHN0dWJtc2ctPmZCdWZmZXJWYWxpZCA9IFRSVUU7CiAgc3R1Ym1zZy0+QnVmZmVyTGVuZ3RoID0gc3R1Ym1zZy0+UnBjTXNnLT5CdWZmZXJMZW5ndGg7CiAgcmV0dXJuIHN0dWJtc2ctPkJ1ZmZlcjsKfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgIE5kckZyZWVCdWZmZXIgW1JQQ1JUNC5AXQogKi8Kdm9pZCBXSU5BUEkgTmRyRnJlZUJ1ZmZlcihQTUlETF9TVFVCX01FU1NBR0UgcFN0dWJNc2cpCnsKICBUUkFDRSgiKHBTdHViTXNnID09IF4lcClcbiIsIHBTdHViTXNnKTsKICBpZiAocFN0dWJNc2ctPmZCdWZmZXJWYWxpZCkKICB7CiAgICBJX1JwY0ZyZWVCdWZmZXIocFN0dWJNc2ctPlJwY01zZyk7CiAgICBwU3R1Yk1zZy0+ZkJ1ZmZlclZhbGlkID0gRkFMU0U7CiAgfQp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBOZHJTZW5kUmVjZWl2ZSBbUlBDUlQ0LkBdCiAqLwp1bnNpZ25lZCBjaGFyICpXSU5BUEkgTmRyU2VuZFJlY2VpdmUoIFBNSURMX1NUVUJfTUVTU0FHRSBzdHVibXNnLCB1bnNpZ25lZCBjaGFyICpidWZmZXIgICkKewogIFJQQ19TVEFUVVMgc3RhdHVzOwoKICBUUkFDRSgiKHN0dWJtc2cgPT0gXiVwLCBidWZmZXIgPT0gXiVwKVxuIiwgc3R1Ym1zZywgYnVmZmVyKTsKCiAgLyogRklYTUU6IGhvdyB0byBoYW5kbGUgZXJyb3JzPyAocmFpc2UgZXhjZXB0aW9uPykgKi8KICBpZiAoIXN0dWJtc2cpIHsKICAgIEVSUigiTlVMTCBzdHViIG1lc3NhZ2UuICBObyBhY3Rpb24gdGFrZW4uXG4iKTsKICAgIHJldHVybiBOVUxMOwogIH0KICBpZiAoIXN0dWJtc2ctPlJwY01zZykgewogICAgRVJSKCJSUEMgTWVzc2FnZSBub3QgcHJlc2VudCBpbiBzdHViIG1lc3NhZ2UuICBObyBhY3Rpb24gdGFrZW4uXG4iKTsKICAgIHJldHVybiBOVUxMOwogIH0KCiAgLyogYXZvaWQgc2VuZGluZyB1bmluaXRpYWxpc2VkIHBhcnRzIG9mIHRoZSBidWZmZXIgb24gdGhlIHdpcmUgKi8KICBzdHVibXNnLT5ScGNNc2ctPkJ1ZmZlckxlbmd0aCA9IGJ1ZmZlciAtICh1bnNpZ25lZCBjaGFyICopc3R1Ym1zZy0+UnBjTXNnLT5CdWZmZXI7CiAgc3RhdHVzID0gSV9ScGNTZW5kUmVjZWl2ZShzdHVibXNnLT5ScGNNc2cpOwogIGlmIChzdGF0dXMgIT0gUlBDX1NfT0spCiAgICBScGNSYWlzZUV4Y2VwdGlvbihzdGF0dXMpOwoKICBzdHVibXNnLT5CdWZmZXJMZW5ndGggPSBzdHVibXNnLT5ScGNNc2ctPkJ1ZmZlckxlbmd0aDsKICBzdHVibXNnLT5CdWZmZXJTdGFydCA9IHN0dWJtc2ctPlJwY01zZy0+QnVmZmVyOwogIHN0dWJtc2ctPkJ1ZmZlckVuZCA9IHN0dWJtc2ctPkJ1ZmZlclN0YXJ0ICsgc3R1Ym1zZy0+QnVmZmVyTGVuZ3RoOwogIHN0dWJtc2ctPkJ1ZmZlciA9IHN0dWJtc2ctPkJ1ZmZlclN0YXJ0OwoKICAvKiBGSVhNRTogaXMgdGhpcyB0aGUgcmlnaHQgcmV0dXJuIHZhbHVlPyAqLwogIHJldHVybiBOVUxMOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICBOZHJNYXBDb21tQW5kRmF1bHRTdGF0dXMgW1JQQ1JUNC5AXQogKi8KUlBDX1NUQVRVUyBSUENfRU5UUlkgTmRyTWFwQ29tbUFuZEZhdWx0U3RhdHVzKCBQTUlETF9TVFVCX01FU1NBR0UgcFN0dWJNc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkcgKnBDb21tU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HICpwRmF1bHRTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlBDX1NUQVRVUyBTdGF0dXMgKQp7CiAgICBUUkFDRSgiKCVwLCAlcCwgJXAsICVsZClcbiIsIHBTdHViTXNnLCBwQ29tbVN0YXR1cywgcEZhdWx0U3RhdHVzLCBTdGF0dXMpOwoKICAgIHN3aXRjaCAoU3RhdHVzKQogICAgewogICAgY2FzZSBFUlJPUl9JTlZBTElEX0hBTkRMRToKICAgIGNhc2UgUlBDX1NfSU5WQUxJRF9CSU5ESU5HOgogICAgY2FzZSBSUENfU19VTktOT1dOX0lGOgogICAgY2FzZSBSUENfU19TRVJWRVJfVU5BVkFJTEFCTEU6CiAgICBjYXNlIFJQQ19TX1NFUlZFUl9UT09fQlVTWToKICAgIGNhc2UgUlBDX1NfQ0FMTF9GQUlMRURfRE5FOgogICAgY2FzZSBSUENfU19QUk9UT0NPTF9FUlJPUjoKICAgIGNhc2UgUlBDX1NfVU5TVVBQT1JURURfVFJBTlNfU1lOOgogICAgY2FzZSBSUENfU19VTlNVUFBPUlRFRF9UWVBFOgogICAgY2FzZSBSUENfU19QUk9DTlVNX09VVF9PRl9SQU5HRToKICAgIGNhc2UgRVBUX1NfTk9UX1JFR0lTVEVSRUQ6CiAgICBjYXNlIFJQQ19TX0NPTU1fRkFJTFVSRToKICAgICAgICAqcENvbW1TdGF0dXMgPSBTdGF0dXM7CiAgICAgICAgKnBGYXVsdFN0YXR1cyA9IDA7CiAgICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICAgICpwQ29tbVN0YXR1cyA9IDA7CiAgICAgICAgKnBGYXVsdFN0YXR1cyA9IFN0YXR1czsKICAgIH0KCiAgICByZXR1cm4gUlBDX1NfT0s7Cn0K