From: tadayoshi funaba Date: 2011-01-10T21:52:28+09:00 Subject: [ruby-core:34305] [Ruby 1.9-Feature#4257][Open] switch_hitter - an acceleration of date library --mimepart_4d2b01093d0d5_1f23b28f5ea30d7 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4257: switch_hitter - an acceleration of date library http://redmine.ruby-lang.org/issues/show/4257 Author: tadayoshi funaba Status: Open, Priority: Low Assigned to: tadayoshi funaba, Category: ext switch_hitter'ed already passed nearly all of tests (except some tests of class name and some confirmations of format of inspect). * The constructors may return Date::Light instead of Date. * as fast as home_run when it represents simple date of proleptic gregorian of the age of the human race. * keeps compatibility. - can load ruby 1.9.2 dumped marshal. * accepts flonum explicitly with limitations. - If the given offset is flonum, DateTime assumes its precision is at most second. - If the given +/- argument is flonum, DateTime assumes its precision is at most nanosecond. I'd like to apply this to trunk in the near future. I also have a plan of improvement about some format methods. see also http://redmine.ruby-lang.org/issues/show/4068 ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d2b01093d0d5_1f23b28f5ea30d7 Content-Type: application/octet-stream; name=switch_hitter.patch2 Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=switch_hitter.patch2 SW5kZXg6IGxpYi9kYXRlLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGxpYi9kYXRlLnJiCShyZXZpc2lvbiAzMDUwNikKKysrIGxpYi9kYXRlLnJi CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogIwotIyBkYXRlLnJi IC0gZGF0ZSBhbmQgdGltZSBsaWJyYXJ5CisjIGRhdGUucmIgPHN3aXRjaF9o aXR0ZXI+IC0gZGF0ZSBhbmQgdGltZSBsaWJyYXJ5CiAjCiAjIEF1dGhvcjog VGFkYXlvc2hpIEZ1bmFiYSAxOTk4LTIwMTAKICMKQEAgLTI4MCw2ICsyODAs MTUgQEAKICAgICAgIGVuZAogICAgIGVuZAogCisgICAgZGVmIHRvX2YKKyAg ICAgIHJldHVybiAwIGlmIEBkID09IDAKKyAgICAgIGlmIEBkID4gMAorCUZs b2F0OjpJTkZJTklUWQorICAgICAgZWxzZQorCS1GbG9hdDo6SU5GSU5JVFkK KyAgICAgIGVuZAorICAgIGVuZAorCiAgIGVuZAogCiAgICMgVGhlIEp1bGlh biBEYXkgTnVtYmVyIG9mIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtIGZv ciBJdGFseQpAQCAtNDQzLDggKzQ1MiwxNCBAQAogICAgICMgW2NvbW1lcmNp YWxfeWVhciwgd2Vla19vZl95ZWFyLCBkYXlfb2Zfd2Vla10KICAgICBkZWYg amRfdG9fY29tbWVyY2lhbChqZCwgc2c9R1JFR09SSUFOKSAjIDpub2RvYzoK ICAgICAgIGEgPSBqZF90b19jaXZpbChqZCAtIDMsIHNnKVswXQotICAgICAg eSA9IGlmIGpkID49IGNvbW1lcmNpYWxfdG9famQoYSArIDEsIDEsIDEsIHNn KSB0aGVuIGEgKyAxIGVsc2UgYSBlbmQKLSAgICAgIHcgPSAxICsgKChqZCAt IGNvbW1lcmNpYWxfdG9famQoeSwgMSwgMSwgc2cpKSAvIDcpLmZsb29yCisg ICAgICBqID0gY29tbWVyY2lhbF90b19qZChhICsgMSwgMSwgMSwgc2cpCisg ICAgICBpZiBqZCA+PSBqCisJeSA9IGEgKyAxCisgICAgICBlbHNlCisJaiA9 IGNvbW1lcmNpYWxfdG9famQoYSwgMSwgMSwgc2cpCisJeSA9IGEKKyAgICAg IGVuZAorICAgICAgdyA9IDEgKyAoKGpkIC0gaikgLyA3KS5mbG9vcgogICAg ICAgZCA9IChqZCArIDEpICUgNwogICAgICAgZCA9IDcgaWYgZCA9PSAwCiAg ICAgICByZXR1cm4geSwgdywgZApAQCAtNzE5LDI2ICs3MzQsMzkgQEAKICAg ZGVmIHNlbGYuZ3JlZ29yaWFuX2xlYXA/ICh5KSB5ICUgNCA9PSAwICYmIHkg JSAxMDAgIT0gMCB8fCB5ICUgNDAwID09IDAgZW5kCiAKICAgY2xhc3MgPDwg c2VsZjsgYWxpYXNfbWV0aG9kIDpsZWFwPywgOmdyZWdvcmlhbl9sZWFwPyBl bmQKLSAgY2xhc3MgPDwgc2VsZjsgYWxpYXNfbWV0aG9kIDpuZXchLCA6bmV3 IGVuZAogCi0gIGRlZiBzZWxmLnZhbGlkX2pkPyAoamQsIHNnPUlUQUxZKQor ICBkZWYgc2VsZi52YWxpZF9qZF9yPyAoamQsIHNnPUlUQUxZKQogICAgICEh X3ZhbGlkX2pkPyhqZCwgc2cpCiAgIGVuZAogCi0gIGRlZiBzZWxmLnZhbGlk X29yZGluYWw/ICh5LCBkLCBzZz1JVEFMWSkKKyAgcHJpdmF0ZV9jbGFzc19t ZXRob2QgOnZhbGlkX2pkX3I/CisKKyAgZGVmIHNlbGYudmFsaWRfb3JkaW5h bF9yPyAoeSwgZCwgc2c9SVRBTFkpCiAgICAgISFfdmFsaWRfb3JkaW5hbD8o eSwgZCwgc2cpCiAgIGVuZAogCi0gIGRlZiBzZWxmLnZhbGlkX2NpdmlsPyAo eSwgbSwgZCwgc2c9SVRBTFkpCisgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDp2 YWxpZF9vcmRpbmFsX3I/CisKKyAgZGVmIHNlbGYudmFsaWRfY2l2aWxfcj8g KHksIG0sIGQsIHNnPUlUQUxZKQogICAgICEhX3ZhbGlkX2NpdmlsPyh5LCBt LCBkLCBzZykKICAgZW5kCiAKLSAgY2xhc3MgPDwgc2VsZjsgYWxpYXNfbWV0 aG9kIDp2YWxpZF9kYXRlPywgOnZhbGlkX2NpdmlsPyBlbmQKKyAgY2xhc3Mg PDwgc2VsZjsgYWxpYXNfbWV0aG9kIDp2YWxpZF9kYXRlX3I/LCA6dmFsaWRf Y2l2aWxfcj8gZW5kCiAKLSAgZGVmIHNlbGYudmFsaWRfY29tbWVyY2lhbD8g KHksIHcsIGQsIHNnPUlUQUxZKQorICBwcml2YXRlX2NsYXNzX21ldGhvZCA6 dmFsaWRfY2l2aWxfcj8sIDp2YWxpZF9kYXRlX3I/CisKKyAgZGVmIHNlbGYu dmFsaWRfY29tbWVyY2lhbF9yPyAoeSwgdywgZCwgc2c9SVRBTFkpCiAgICAg ISFfdmFsaWRfY29tbWVyY2lhbD8oeSwgdywgZCwgc2cpCiAgIGVuZAogCisg IGRlZiBzZWxmLnZhbGlkX2pkPygqYXJncykgcmFpc2UgTm90SW1wbGVtZW50 ZWRFcnJvciBlbmQKKyAgZGVmIHNlbGYudmFsaWRfb3JkaW5hbD8oKmFyZ3Mp IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgZW5kCisgIGRlZiBzZWxmLnZh bGlkX2NpdmlsPygqYXJncykgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciBl bmQKKworICBjbGFzcyA8PCBzZWxmOyBhbGlhc19tZXRob2QgOnZhbGlkX2Rh dGU/LCA6dmFsaWRfY2l2aWw/IGVuZAorCisgIGRlZiBzZWxmLnZhbGlkX2Nv bW1lcmNpYWw/KCphcmdzKSByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yIGVu ZAorCiAgIGRlZiBzZWxmLnZhbGlkX3dlZWtudW0/ICh5LCB3LCBkLCBmLCBz Zz1JVEFMWSkgIyA6bm9kb2M6CiAgICAgISFfdmFsaWRfd2Vla251bT8oeSwg dywgZCwgZiwgc2cpCiAgIGVuZApAQCAtNzU3LDE2ICs3ODUsMzggQEAKIAog ICBwcml2YXRlX2NsYXNzX21ldGhvZCA6dmFsaWRfdGltZT8KIAorICBkZWYg c2VsZi5uZXdfciEoYWpkPTAsIG9mPTAsIHNnPUlUQUxZKQorICAgIGQgPSBh bGxvY2F0ZQorICAgIGQuaW5zdGFuY2VfZXZhbCBkbworICAgICAgQGFqZCwg QG9mLCBAc2cgPSBhamQsIG9mLCBzZworICAgICAgQF9fY2FfXyA9IHt9Cisg ICAgZW5kCisgICAgZAorICBlbmQKKworICBkZWYgc2VsZi5uZXchKGFqZD0w LCBvZj0wLCBzZz1JVEFMWSkKKyAgICBqZCwgZGYgPSBhamRfdG9famQoYWpk LCAwKQorICAgIGRmLCBzZiA9IChkZiAqIDg2NDAwKS5kaXZtb2QoMSkKKyAg ICBpZiAhKEZpeG51bSA9PT0gamQpIHx8IGFqZCA8IHNnIHx8IGRmICE9MCB8 fCBvZiAhPSAwCisgICAgICByZXR1cm4gbmV3X3IhKGFqZCwgb2YsIHNnKQor ICAgIGVuZAorICAgIG5ld19sIShqZCwgc2cpCisgIGVuZAorCiAgICMgQ3Jl YXRlIGEgbmV3IERhdGUgb2JqZWN0IGZyb20gYSBKdWxpYW4gRGF5IE51bWJl ci4KICAgIwogICAjICtqZCsgaXMgdGhlIEp1bGlhbiBEYXkgTnVtYmVyOyBp ZiBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0bwogICAjIDAuCiAgICMg K3NnKyBzcGVjaWZpZXMgdGhlIERheSBvZiBDYWxlbmRhciBSZWZvcm0uCi0g IGRlZiBzZWxmLmpkKGpkPTAsIHNnPUlUQUxZKQorICBkZWYgc2VsZi5qZF9y KGpkPTAsIHNnPUlUQUxZKQogICAgIGpkID0gX3ZhbGlkX2pkPyhqZCwgc2cp Ci0gICAgbmV3IShqZF90b19hamQoamQsIDAsIDApLCAwLCBzZykKKyAgICBu ZXdfciEoamRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCiAgIGVuZAogCisg IHByaXZhdGVfY2xhc3NfbWV0aG9kIDpqZF9yCisKKyAgZGVmIHNlbGYuamQo KmFyZ3MpIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgZW5kCisKICAgIyBD cmVhdGUgYSBuZXcgRGF0ZSBvYmplY3QgZnJvbSBhbiBPcmRpbmFsIERhdGUs IHNwZWNpZmllZAogICAjIGJ5IHllYXIgK3krIGFuZCBkYXktb2YteWVhciAr ZCsuICtkKyBjYW4gYmUgbmVnYXRpdmUsCiAgICMgaW4gd2hpY2ggaXQgY291 bnRzIGJhY2t3YXJkcyBmcm9tIHRoZSBlbmQgb2YgdGhlIHllYXIuCkBAIC03 NzcsMTMgKzgyNywxNyBAQAogICAjIE51bWJlciBkYXkgMC4KICAgIwogICAj ICtzZysgc3BlY2lmaWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtLgot ICBkZWYgc2VsZi5vcmRpbmFsKHk9LTQ3MTIsIGQ9MSwgc2c9SVRBTFkpCisg IGRlZiBzZWxmLm9yZGluYWxfcih5PS00NzEyLCBkPTEsIHNnPUlUQUxZKQog ICAgIHVubGVzcyBqZCA9IF92YWxpZF9vcmRpbmFsPyh5LCBkLCBzZykKICAg ICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUnCiAgICAg ZW5kCi0gICAgbmV3IShqZF90b19hamQoamQsIDAsIDApLCAwLCBzZykKKyAg ICBuZXdfciEoamRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCiAgIGVuZAog CisgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDpvcmRpbmFsX3IKKworICBkZWYg c2VsZi5vcmRpbmFsKCphcmdzKSByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y IGVuZAorCiAgICMgQ3JlYXRlIGEgbmV3IERhdGUgb2JqZWN0IGZvciB0aGUg Q2l2aWwgRGF0ZSBzcGVjaWZpZWQgYnkKICAgIyB5ZWFyICt5KywgbW9udGgg K20rLCBhbmQgZGF5LW9mLW1vbnRoICtkKy4KICAgIwpAQCAtNzk3LDEzICs4 NTEsMTkgQEAKICAgIyBKdWxpYW4gRGF5IE51bWJlciBkYXkgMC4KICAgIwog ICAjICtzZysgc3BlY2lmaWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3Jt LgotICBkZWYgc2VsZi5jaXZpbCh5PS00NzEyLCBtPTEsIGQ9MSwgc2c9SVRB TFkpCisgIGRlZiBzZWxmLmNpdmlsX3IoeT0tNDcxMiwgbT0xLCBkPTEsIHNn PUlUQUxZKQogICAgIHVubGVzcyBqZCA9IF92YWxpZF9jaXZpbD8oeSwgbSwg ZCwgc2cpCiAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLCAnaW52YWxpZCBk YXRlJwogICAgIGVuZAotICAgIG5ldyEoamRfdG9fYWpkKGpkLCAwLCAwKSwg MCwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2FqZChqZCwgMCwgMCksIDAsIHNn KQogICBlbmQKIAorICBjbGFzcyA8PCBzZWxmOyBhbGlhc19tZXRob2QgOm5l d19yLCA6Y2l2aWxfciBlbmQKKworICBwcml2YXRlX2NsYXNzX21ldGhvZCA6 Y2l2aWxfciwgOm5ld19yCisKKyAgZGVmIHNlbGYuY2l2aWwoKmFyZ3MpIHJh aXNlIE5vdEltcGxlbWVudGVkRXJyb3IgZW5kCisKICAgY2xhc3MgPDwgc2Vs ZjsgYWxpYXNfbWV0aG9kIDpuZXcsIDpjaXZpbCBlbmQKIAogICAjIENyZWF0 ZSBhIG5ldyBEYXRlIG9iamVjdCBmb3IgdGhlIENvbW1lcmNpYWwgRGF0ZSBz cGVjaWZpZWQgYnkKQEAgLTgyMCwxOCArODgwLDIyIEBACiAgICMgSnVsaWFu IERheSBOdW1iZXIgZGF5IDAuCiAgICMKICAgIyArc2crIHNwZWNpZmllcyB0 aGUgRGF5IG9mIENhbGVuZGFyIFJlZm9ybS4KLSAgZGVmIHNlbGYuY29tbWVy Y2lhbCh5PS00NzEyLCB3PTEsIGQ9MSwgc2c9SVRBTFkpCisgIGRlZiBzZWxm LmNvbW1lcmNpYWxfcih5PS00NzEyLCB3PTEsIGQ9MSwgc2c9SVRBTFkpCiAg ICAgdW5sZXNzIGpkID0gX3ZhbGlkX2NvbW1lcmNpYWw/KHksIHcsIGQsIHNn KQogICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgJ2ludmFsaWQgZGF0ZScK ICAgICBlbmQKLSAgICBuZXchKGpkX3RvX2FqZChqZCwgMCwgMCksIDAsIHNn KQorICAgIG5ld19yIShqZF90b19hamQoamQsIDAsIDApLCAwLCBzZykKICAg ZW5kCiAKKyAgcHJpdmF0ZV9jbGFzc19tZXRob2QgOmNvbW1lcmNpYWxfcgor CisgIGRlZiBzZWxmLmNvbW1lcmNpYWwoKmFyZ3MpIHJhaXNlIE5vdEltcGxl bWVudGVkRXJyb3IgZW5kCisKICAgZGVmIHNlbGYud2Vla251bSh5PS00NzEy LCB3PTAsIGQ9MSwgZj0wLCBzZz1JVEFMWSkKICAgICB1bmxlc3MgamQgPSBf dmFsaWRfd2Vla251bT8oeSwgdywgZCwgZiwgc2cpCiAgICAgICByYWlzZSBB cmd1bWVudEVycm9yLCAnaW52YWxpZCBkYXRlJwogICAgIGVuZAotICAgIG5l dyEoamRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCisgICAgbmV3X3IhKGpk X3RvX2FqZChqZCwgMCwgMCksIDAsIHNnKQogICBlbmQKIAogICBwcml2YXRl X2NsYXNzX21ldGhvZCA6d2Vla251bQpAQCAtODQwLDcgKzkwNCw3IEBACiAg ICAgdW5sZXNzIGpkID0gX3ZhbGlkX250aF9rZGF5Pyh5LCBtLCBuLCBrLCBz ZykKICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUn CiAgICAgZW5kCi0gICAgbmV3IShqZF90b19hamQoamQsIDAsIDApLCAwLCBz ZykKKyAgICBuZXdfciEoamRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCiAg IGVuZAogCiAgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDpudGhfa2RheQpAQCAt MTEwMyw3ICsxMTY3LDcgQEAKIAkgIGVuZAogCWVuZDsKICAgICAgIGVuZAot ICAgIGVuZAorICAgIGVuZCAjIDw8ZHVtbXkKIAogICAgIHByaXZhdGUgOm9u Y2UKIApAQCAtMTEyOCwyMCArMTE5MiwxNyBAQAogICAjCiAgICMgVXNpbmcg b25lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMgc3VjaCBhcyBEYXRlOjpjaXZp bCBpcwogICAjIGdlbmVyYWxseSBlYXNpZXIgYW5kIHNhZmVyLgotICBkZWYg aW5pdGlhbGl6ZShhamQ9MCwgb2Y9MCwgc2c9SVRBTFkpCi0gICAgQGFqZCwg QG9mLCBAc2cgPSBhamQsIG9mLCBzZwotICAgIEBfX2NhX18gPSB7fQotICBl bmQKKyAgZGVmIGluaXRpYWxpemUoKmFyZ3MpIHJhaXNlIE5vdEltcGxlbWVu dGVkRXJyb3IgZW5kCiAKICAgIyBHZXQgdGhlIGRhdGUgYXMgYW4gQXN0cm9u b21pY2FsIEp1bGlhbiBEYXkgTnVtYmVyLgogICBkZWYgYWpkKCkgQGFqZCBl bmQKIAogICAjIEdldCB0aGUgZGF0ZSBhcyBhbiBBc3Ryb25vbWljYWwgTW9k aWZpZWQgSnVsaWFuIERheSBOdW1iZXIuCi0gIGRlZiBhbWpkKCkgYWpkX3Rv X2FtamQoQGFqZCkgZW5kCisgIGRlZiBhbWpkKCkgYWpkX3RvX2FtamQoYWpk KSBlbmQKIAogICBvbmNlIDphbWpkCiAKLSAgZGVmIGRheW51bSgpIGFqZF90 b19qZChAYWpkLCBAb2YpIGVuZAorICBkZWYgZGF5bnVtKCkgYWpkX3RvX2pk KGFqZCwgb2Zmc2V0KSBlbmQKIAogICBvbmNlIDpkYXludW0KICAgcHJpdmF0 ZSA6ZGF5bnVtCkBAIC0xMTYyLDE2ICsxMjIzLDE2IEBACiAgIG9uY2UgOmpk LCA6ZGF5X2ZyYWN0aW9uLCA6bWpkLCA6bGQKIAogICAjIEdldCB0aGUgZGF0 ZSBhcyBhIENpdmlsIERhdGUsIFt5ZWFyLCBtb250aCwgZGF5X29mX21vbnRo XQotICBkZWYgY2l2aWwoKSBqZF90b19jaXZpbChqZCwgQHNnKSBlbmQgIyA6 bm9kb2M6CisgIGRlZiBjaXZpbCgpIGpkX3RvX2NpdmlsKGpkLCBzdGFydCkg ZW5kICMgOm5vZG9jOgogCiAgICMgR2V0IHRoZSBkYXRlIGFzIGFuIE9yZGlu YWwgRGF0ZSwgW3llYXIsIGRheV9vZl95ZWFyXQotICBkZWYgb3JkaW5hbCgp IGpkX3RvX29yZGluYWwoamQsIEBzZykgZW5kICMgOm5vZG9jOgorICBkZWYg b3JkaW5hbCgpIGpkX3RvX29yZGluYWwoamQsIHN0YXJ0KSBlbmQgIyA6bm9k b2M6CiAKICAgIyBHZXQgdGhlIGRhdGUgYXMgYSBDb21tZXJjaWFsIERhdGUs IFt5ZWFyLCB3ZWVrX29mX3llYXIsIGRheV9vZl93ZWVrXQotICBkZWYgY29t bWVyY2lhbCgpIGpkX3RvX2NvbW1lcmNpYWwoamQsIEBzZykgZW5kICMgOm5v ZG9jOgorICBkZWYgY29tbWVyY2lhbCgpIGpkX3RvX2NvbW1lcmNpYWwoamQs IHN0YXJ0KSBlbmQgIyA6bm9kb2M6CiAKLSAgZGVmIHdlZWtudW0wKCkgamRf dG9fd2Vla251bShqZCwgMCwgQHNnKSBlbmQgIyA6bm9kb2M6Ci0gIGRlZiB3 ZWVrbnVtMSgpIGpkX3RvX3dlZWtudW0oamQsIDEsIEBzZykgZW5kICMgOm5v ZG9jOgorICBkZWYgd2Vla251bTAoKSBqZF90b193ZWVrbnVtKGpkLCAwLCBz dGFydCkgZW5kICMgOm5vZG9jOgorICBkZWYgd2Vla251bTEoKSBqZF90b193 ZWVrbnVtKGpkLCAxLCBzdGFydCkgZW5kICMgOm5vZG9jOgogCiAgIG9uY2Ug OmNpdmlsLCA6b3JkaW5hbCwgOmNvbW1lcmNpYWwsIDp3ZWVrbnVtMCwgOndl ZWtudW0xCiAgIHByaXZhdGUgOmNpdmlsLCA6b3JkaW5hbCwgOmNvbW1lcmNp YWwsIDp3ZWVrbnVtMCwgOndlZWtudW0xCkBAIC0xMjc1LDcgKzEzMzYsNyBA QAogICBwcml2YXRlIDpudGhfa2RheT8KIAogICAjIElzIHRoZSBjdXJyZW50 IGRhdGUgb2xkLXN0eWxlIChKdWxpYW4gQ2FsZW5kYXIpPwotICBkZWYganVs aWFuPyAoKSBqZCA8IEBzZyBlbmQKKyAgZGVmIGp1bGlhbj8gKCkgamQgPCBz dGFydCBlbmQKIAogICAjIElzIHRoZSBjdXJyZW50IGRhdGUgbmV3LXN0eWxl IChHcmVnb3JpYW4gQ2FsZW5kYXIpPwogICBkZWYgZ3JlZ29yaWFuPyAoKSAh anVsaWFuPyBlbmQKQEAgLTEzMDIsNyArMTM2Myw3IEBACiAgIGRlZiBzdGFy dCgpIEBzZyBlbmQKIAogICAjIENyZWF0ZSBhIGNvcHkgb2YgdGhpcyBEYXRl IG9iamVjdCB1c2luZyBhIG5ldyBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtLgot ICBkZWYgbmV3X3N0YXJ0KHNnPXNlbGYuY2xhc3M6OklUQUxZKSBzZWxmLmNs YXNzLm5ldyEoQGFqZCwgQG9mLCBzZykgZW5kCisgIGRlZiBuZXdfc3RhcnQo c2c9c2VsZi5jbGFzczo6SVRBTFkpIHNlbGYuY2xhc3MubmV3X3IhKGFqZCwg b2Zmc2V0LCBzZykgZW5kCiAKICAgIyBDcmVhdGUgYSBjb3B5IG9mIHRoaXMg RGF0ZSBvYmplY3QgdGhhdCB1c2VzIHRoZSBJdGFsaWFuL0NhdGhvbGljCiAg ICMgRGF5IG9mIENhbGVuZGFyIFJlZm9ybS4KQEAgLTEzMjUsOCArMTM4Niwx MCBAQAogICBkZWYgbmV3X29mZnNldChvZj0wKQogICAgIGlmIFN0cmluZyA9 PT0gb2YKICAgICAgIG9mID0gUmF0aW9uYWwoem9uZV90b19kaWZmKG9mKSB8 fCAwLCA4NjQwMCkKKyAgICBlbHNpZiBGbG9hdCA9PT0gb2YKKyAgICAgIG9m ID0gUmF0aW9uYWwoKG9mICogODY0MDApLnJvdW5kLCA4NjQwMCkKICAgICBl bmQKLSAgICBzZWxmLmNsYXNzLm5ldyEoQGFqZCwgb2YsIEBzZykKKyAgICBz ZWxmLmNsYXNzLm5ld19yIShhamQsIG9mLCBzdGFydCkKICAgZW5kCiAKICAg cHJpdmF0ZSA6b2Zmc2V0LCA6bmV3X29mZnNldApAQCAtMTM0Miw3ICsxNDA1 LDExIEBACiAgICMgcGFydGljdWxhciwgdHdvIERhdGVzIGNhbm5vdCBiZSBh ZGRlZCB0byBlYWNoIG90aGVyLgogICBkZWYgKyAobikKICAgICBjYXNlIG4K LSAgICB3aGVuIE51bWVyaWM7IHJldHVybiBzZWxmLmNsYXNzLm5ldyEoQGFq ZCArIG4sIEBvZiwgQHNnKQorICAgIHdoZW4gTnVtZXJpYworICAgICAgaWYg RmxvYXQgPT09IG4KKwluID0gUmF0aW9uYWwoKG4gKiA4NjQwMDAwMDAwMDAw MCkucm91bmQsIDg2NDAwMDAwMDAwMDAwKQorICAgICAgZW5kCisgICAgICBy ZXR1cm4gc2VsZi5jbGFzcy5uZXdfciEoYWpkICsgbiwgb2Zmc2V0LCBzdGFy dCkKICAgICBlbmQKICAgICByYWlzZSBUeXBlRXJyb3IsICdleHBlY3RlZCBu dW1lcmljJwogICBlbmQKQEAgLTEzNTcsOCArMTQyNCwxMyBAQAogICAjIElm ICt4KyBpcyBuZWl0aGVyIE51bWVyaWMgbm9yIGEgRGF0ZSwgYSBUeXBlRXJy b3IgaXMgcmFpc2VkLgogICBkZWYgLSAoeCkKICAgICBjYXNlIHgKLSAgICB3 aGVuIE51bWVyaWM7IHJldHVybiBzZWxmLmNsYXNzLm5ldyEoQGFqZCAtIHgs IEBvZiwgQHNnKQotICAgIHdoZW4gRGF0ZTsgICAgcmV0dXJuIEBhamQgLSB4 LmFqZAorICAgIHdoZW4gTnVtZXJpYworICAgICAgaWYgRmxvYXQgPT09IHgK Kwl4ID0gUmF0aW9uYWwoKHggKiA4NjQwMDAwMDAwMDAwMCkucm91bmQsIDg2 NDAwMDAwMDAwMDAwKQorICAgICAgZW5kCisgICAgICByZXR1cm4gc2VsZi5j bGFzcy5uZXdfciEoYWpkIC0geCwgb2Zmc2V0LCBzdGFydCkKKyAgICB3aGVu IERhdGUKKyAgICAgIHJldHVybiBhamQgLSB4LmFqZAogICAgIGVuZAogICAg IHJhaXNlIFR5cGVFcnJvciwgJ2V4cGVjdGVkIG51bWVyaWMgb3IgZGF0ZScK ICAgZW5kCkBAIC0xMzc2LDggKzE0NDgsOCBAQAogICAjIGNvbnNpZGVyZWQg YXMgZmFsbGluZyBvbiBtaWRuaWdodCBVVEMuCiAgIGRlZiA8PT4gKG90aGVy KQogICAgIGNhc2Ugb3RoZXIKLSAgICB3aGVuIE51bWVyaWM7IHJldHVybiBA YWpkIDw9PiBvdGhlcgotICAgIHdoZW4gRGF0ZTsgICAgcmV0dXJuIEBhamQg PD0+IG90aGVyLmFqZAorICAgIHdoZW4gTnVtZXJpYzsgcmV0dXJuIGFqZCA8 PT4gb3RoZXIKKyAgICB3aGVuIERhdGU7ICAgIHJldHVybiBhamQgPD0+IG90 aGVyLmFqZAogICAgIGVsc2UKICAgICAgIGJlZ2luCiAgICAgICAgIGwsIHIg PSBvdGhlci5jb2VyY2Uoc2VsZikKQEAgLTEzODgsNiArMTQ2MCwxNyBAQAog ICAgIG5pbAogICBlbmQKIAorICBkZWYgY29lcmNlKG90aGVyKQorICAgIGNh c2Ugb3RoZXIKKyAgICB3aGVuIExpZ2h0CisgICAgICByZXR1cm4gb3RoZXIu dG9fcmlnaHQsIHNlbGYKKyAgICB3aGVuIFJpZ2h0CisgICAgICByZXR1cm4g b3RoZXIsIHNlbGYudG9fcmlnaHQKKyAgICBlbHNlCisgICAgICBzdXBlcgor ICAgIGVuZAorICBlbmQKKwogICAjIFRoZSByZWxhdGlvbnNoaXAgb3BlcmF0 b3IgZm9yIERhdGUuCiAgICMKICAgIyBDb21wYXJlcyBkYXRlcyBieSBKdWxp YW4gRGF5IE51bWJlci4gIFdoZW4gY29tcGFyaW5nCkBAIC0xNDIzLDcgKzE1 MDYsNyBAQAogICAgIHksIG0gPSAoeWVhciAqIDEyICsgKG1vbiAtIDEpICsg bikuZGl2bW9kKDEyKQogICAgIG0sICAgPSAobSArIDEpICAgICAgICAgICAg ICAgICAgICAuZGl2bW9kKDEpCiAgICAgZCA9IG1kYXkKLSAgICB1bnRpbCBq ZDIgPSBfdmFsaWRfY2l2aWw/KHksIG0sIGQsIEBzZykKKyAgICB1bnRpbCBq ZDIgPSBfdmFsaWRfY2l2aWw/KHksIG0sIGQsIHN0YXJ0KQogICAgICAgZCAt PSAxCiAgICAgICByYWlzZSBBcmd1bWVudEVycm9yLCAnaW52YWxpZCBkYXRl JyB1bmxlc3MgZCA+IDAKICAgICBlbmQKQEAgLTE0ODYsMTEgKzE1NjksMTEg QEAKICAgZGVmIGVxbD8gKG90aGVyKSBEYXRlID09PSBvdGhlciAmJiBzZWxm ID09IG90aGVyIGVuZAogCiAgICMgQ2FsY3VsYXRlIGEgaGFzaCB2YWx1ZSBm b3IgdGhpcyBkYXRlLgotICBkZWYgaGFzaCgpIEBhamQuaGFzaCBlbmQKKyAg ZGVmIGhhc2goKSBhamQuaGFzaCBlbmQKIAogICAjIFJldHVybiBpbnRlcm5h bCBvYmplY3Qgc3RhdGUgYXMgYSBwcm9ncmFtbWVyLXJlYWRhYmxlIHN0cmlu Zy4KICAgZGVmIGluc3BlY3QKLSAgICBmb3JtYXQoJyM8JXM6ICVzICglcywl cywlcyk+Jywgc2VsZi5jbGFzcywgdG9fcywgQGFqZCwgQG9mLCBAc2cpCisg ICAgZm9ybWF0KCcjPCVzOiAlcyAoJXMsJXMsJXMpPicsIHNlbGYuY2xhc3Ms IHRvX3MsIGFqZCwgb2Zmc2V0LCBzdGFydCkKICAgZW5kCiAKICAgIyBSZXR1 cm4gdGhlIGRhdGUgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuCkBAIC0x NTU5LDYgKzE2NDIsMTcgQEAKICMKIGNsYXNzIERhdGVUaW1lIDwgRGF0ZQog CisgIGRlZiBzZWxmLm5ldyEoYWpkPTAsIG9mPTAsIHNnPUlUQUxZKQorICAg IGpkLCBkZiA9IGFqZF90b19qZChhamQsIDApCisgICAgZGYsIHNmID0gKGRm ICogODY0MDApLmRpdm1vZCgxKQorICAgIHNmLCBzc2YgPSAoc2YgKiAxMDAw MDAwMDAwKS5kaXZtb2QoMSkKKyAgICBvZGYsIG9zZiA9IChvZiAqIDg2NDAw KS5kaXZtb2QoMSkKKyAgICBpZiAhKEZpeG51bSA9PT0gamQpIHx8IGFqZCA8 IHNnIHx8IHNzZiAhPSAwIHx8IG9zZiAhPSAwCisgICAgICByZXR1cm4gbmV3 X3IhKGFqZCwgb2YsIHNnKQorICAgIGVuZAorICAgIG5ld19sIShqZCwgZGYs IHNmLCBvZGYsIHNnKQorICBlbmQKKwogICAjIENyZWF0ZSBhIG5ldyBEYXRl VGltZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkCiAg ICMgSnVsaWFuIERheSBOdW1iZXIgK2pkKyBhbmQgaG91ciAraCssIG1pbnV0 ZSArbWluKywgc2Vjb25kICtzKy4KICAgIwpAQCAtMTU3MiwxNyArMTY2Niwy MyBAQAogICAjICtzZysgc3BlY2lmaWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIg UmVmb3JtLgogICAjCiAgICMgQWxsIGRheS90aW1lIHZhbHVlcyBkZWZhdWx0 IHRvIDAuCi0gIGRlZiBzZWxmLmpkKGpkPTAsIGg9MCwgbWluPTAsIHM9MCwg b2Y9MCwgc2c9SVRBTFkpCisgIGRlZiBzZWxmLmpkX3IoamQ9MCwgaD0wLCBt aW49MCwgcz0wLCBvZj0wLCBzZz1JVEFMWSkKICAgICB1bmxlc3MgKGpkID0g X3ZhbGlkX2pkPyhqZCwgc2cpKSAmJgogCSAgIChmciA9IF92YWxpZF90aW1l PyhoLCBtaW4sIHMpKQogICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgJ2lu dmFsaWQgZGF0ZScKICAgICBlbmQKICAgICBpZiBTdHJpbmcgPT09IG9mCiAg ICAgICBvZiA9IFJhdGlvbmFsKHpvbmVfdG9fZGlmZihvZikgfHwgMCwgODY0 MDApCisgICAgZWxzaWYgRmxvYXQgPT09IG9mCisgICAgICBvZiA9IFJhdGlv bmFsKChvZiAqIDg2NDAwKS5yb3VuZCwgODY0MDApCiAgICAgZW5kCi0gICAg bmV3IShqZF90b19hamQoamQsIGZyLCBvZiksIG9mLCBzZykKKyAgICBuZXdf ciEoamRfdG9fYWpkKGpkLCBmciwgb2YpLCBvZiwgc2cpCiAgIGVuZAogCisg IHByaXZhdGVfY2xhc3NfbWV0aG9kIDpqZF9yCisKKyAgZGVmIHNlbGYuamQo KmFyZ3MpIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgZW5kCisKICAgIyBD cmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8g dGhlIHNwZWNpZmllZAogICAjIE9yZGluYWwgRGF0ZSBhbmQgaG91ciAraCss IG1pbnV0ZSArbWluKywgc2Vjb25kICtzKy4KICAgIwpAQCAtMTU5NywxNyAr MTY5NywyMyBAQAogICAjCiAgICMgK3krIGRlZmF1bHRzIHRvIC00NzEyLCBh bmQgK2QrIHRvIDE7IHRoaXMgaXMgSnVsaWFuIERheSBOdW1iZXIKICAgIyBk YXkgMC4gIFRoZSB0aW1lIHZhbHVlcyBkZWZhdWx0IHRvIDAuCi0gIGRlZiBz ZWxmLm9yZGluYWwoeT0tNDcxMiwgZD0xLCBoPTAsIG1pbj0wLCBzPTAsIG9m PTAsIHNnPUlUQUxZKQorICBkZWYgc2VsZi5vcmRpbmFsX3IoeT0tNDcxMiwg ZD0xLCBoPTAsIG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKQogICAgIHVu bGVzcyAoamQgPSBfdmFsaWRfb3JkaW5hbD8oeSwgZCwgc2cpKSAmJgogCSAg IChmciA9IF92YWxpZF90aW1lPyhoLCBtaW4sIHMpKQogICAgICAgcmFpc2Ug QXJndW1lbnRFcnJvciwgJ2ludmFsaWQgZGF0ZScKICAgICBlbmQKICAgICBp ZiBTdHJpbmcgPT09IG9mCiAgICAgICBvZiA9IFJhdGlvbmFsKHpvbmVfdG9f ZGlmZihvZikgfHwgMCwgODY0MDApCisgICAgZWxzaWYgRmxvYXQgPT09IG9m CisgICAgICBvZiA9IFJhdGlvbmFsKChvZiAqIDg2NDAwKS5yb3VuZCwgODY0 MDApCiAgICAgZW5kCi0gICAgbmV3IShqZF90b19hamQoamQsIGZyLCBvZiks IG9mLCBzZykKKyAgICBuZXdfciEoamRfdG9fYWpkKGpkLCBmciwgb2YpLCBv Ziwgc2cpCiAgIGVuZAogCisgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDpvcmRp bmFsX3IKKworICBkZWYgc2VsZi5vcmRpbmFsKCphcmdzKSByYWlzZSBOb3RJ bXBsZW1lbnRlZEVycm9yIGVuZAorCiAgICMgQ3JlYXRlIGEgbmV3IERhdGVU aW1lIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQKICAg IyBDaXZpbCBEYXRlIGFuZCBob3VyICtoKywgbWludXRlICttaW4rLCBzZWNv bmQgK3MrLgogICAjCkBAIC0xNjIyLDE5ICsxNzI4LDI1IEBACiAgICMKICAg IyAreSsgZGVmYXVsdHMgdG8gLTQ3MTIsICttKyB0byAxLCBhbmQgK2QrIHRv IDE7IHRoaXMgaXMgSnVsaWFuIERheQogICAjIE51bWJlciBkYXkgMC4gIFRo ZSB0aW1lIHZhbHVlcyBkZWZhdWx0IHRvIDAuCi0gIGRlZiBzZWxmLmNpdmls KHk9LTQ3MTIsIG09MSwgZD0xLCBoPTAsIG1pbj0wLCBzPTAsIG9mPTAsIHNn PUlUQUxZKQorICBkZWYgc2VsZi5jaXZpbF9yKHk9LTQ3MTIsIG09MSwgZD0x LCBoPTAsIG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKQogICAgIHVubGVz cyAoamQgPSBfdmFsaWRfY2l2aWw/KHksIG0sIGQsIHNnKSkgJiYKIAkgICAo ZnIgPSBfdmFsaWRfdGltZT8oaCwgbWluLCBzKSkKICAgICAgIHJhaXNlIEFy Z3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUnCiAgICAgZW5kCiAgICAgaWYg U3RyaW5nID09PSBvZgogICAgICAgb2YgPSBSYXRpb25hbCh6b25lX3RvX2Rp ZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVsc2lmIEZsb2F0ID09PSBvZgor ICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4NjQwMCkucm91bmQsIDg2NDAw KQogICAgIGVuZAotICAgIG5ldyEoamRfdG9fYWpkKGpkLCBmciwgb2YpLCBv Ziwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2FqZChqZCwgZnIsIG9mKSwgb2Ys IHNnKQogICBlbmQKIAotICBjbGFzcyA8PCBzZWxmOyBhbGlhc19tZXRob2Qg Om5ldywgOmNpdmlsIGVuZAorICBjbGFzcyA8PCBzZWxmOyBhbGlhc19tZXRo b2QgOm5ld19yLCA6Y2l2aWxfciBlbmQKIAorICBwcml2YXRlX2NsYXNzX21l dGhvZCA6Y2l2aWxfciwgOm5ld19yCisKKyAgZGVmIHNlbGYuY2l2aWwoKmFy Z3MpIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IgZW5kCisKICAgIyBDcmVh dGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhl IHNwZWNpZmllZAogICAjIENvbW1lcmNpYWwgRGF0ZSBhbmQgaG91ciAraCss IG1pbnV0ZSArbWluKywgc2Vjb25kICtzKy4KICAgIwpAQCAtMTY1MCwxNyAr MTc2MiwyMyBAQAogICAjICt5KyBkZWZhdWx0cyB0byAtNDcxMiwgK3crIHRv IDEsIGFuZCArZCsgdG8gMTsgdGhpcyBpcwogICAjIEp1bGlhbiBEYXkgTnVt YmVyIGRheSAwLgogICAjIFRoZSB0aW1lIHZhbHVlcyBkZWZhdWx0IHRvIDAu Ci0gIGRlZiBzZWxmLmNvbW1lcmNpYWwoeT0tNDcxMiwgdz0xLCBkPTEsIGg9 MCwgbWluPTAsIHM9MCwgb2Y9MCwgc2c9SVRBTFkpCisgIGRlZiBzZWxmLmNv bW1lcmNpYWxfcih5PS00NzEyLCB3PTEsIGQ9MSwgaD0wLCBtaW49MCwgcz0w LCBvZj0wLCBzZz1JVEFMWSkKICAgICB1bmxlc3MgKGpkID0gX3ZhbGlkX2Nv bW1lcmNpYWw/KHksIHcsIGQsIHNnKSkgJiYKIAkgICAoZnIgPSBfdmFsaWRf dGltZT8oaCwgbWluLCBzKSkKICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3Is ICdpbnZhbGlkIGRhdGUnCiAgICAgZW5kCiAgICAgaWYgU3RyaW5nID09PSBv ZgogICAgICAgb2YgPSBSYXRpb25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAs IDg2NDAwKQorICAgIGVsc2lmIEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBS YXRpb25hbCgob2YgKiA4NjQwMCkucm91bmQsIDg2NDAwKQogICAgIGVuZAot ICAgIG5ldyEoamRfdG9fYWpkKGpkLCBmciwgb2YpLCBvZiwgc2cpCisgICAg bmV3X3IhKGpkX3RvX2FqZChqZCwgZnIsIG9mKSwgb2YsIHNnKQogICBlbmQK IAorICBwcml2YXRlX2NsYXNzX21ldGhvZCA6Y29tbWVyY2lhbF9yCisKKyAg ZGVmIHNlbGYuY29tbWVyY2lhbCgqYXJncykgcmFpc2UgTm90SW1wbGVtZW50 ZWRFcnJvciBlbmQKKwogICBkZWYgc2VsZi53ZWVrbnVtKHk9LTQ3MTIsIHc9 MCwgZD0xLCBmPTAsIGg9MCwgbWluPTAsIHM9MCwgb2Y9MCwgc2c9SVRBTFkp ICMgOm5vZG9jOgogICAgIHVubGVzcyAoamQgPSBfdmFsaWRfd2Vla251bT8o eSwgdywgZCwgZiwgc2cpKSAmJgogCSAgIChmciA9IF92YWxpZF90aW1lPyho LCBtaW4sIHMpKQpAQCAtMTY2OCw4ICsxNzg2LDEwIEBACiAgICAgZW5kCiAg ICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBSYXRpb25hbCh6b25l X3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVsc2lmIEZsb2F0ID09 PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4NjQwMCkucm91bmQs IDg2NDAwKQogICAgIGVuZAotICAgIG5ldyEoamRfdG9fYWpkKGpkLCBmciwg b2YpLCBvZiwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2FqZChqZCwgZnIsIG9m KSwgb2YsIHNnKQogICBlbmQKIAogICBwcml2YXRlX2NsYXNzX21ldGhvZCA6 d2Vla251bQpAQCAtMTY4MSw2ICsxODAxLDggQEAKICAgICBlbmQKICAgICBp ZiBTdHJpbmcgPT09IG9mCiAgICAgICBvZiA9IFJhdGlvbmFsKHpvbmVfdG9f ZGlmZihvZikgfHwgMCwgODY0MDApCisgICAgZWxzaWYgRmxvYXQgPT09IG9m CisgICAgICBvZiA9IFJhdGlvbmFsKChvZiAqIDg2NDAwKS5yb3VuZCwgODY0 MDApCiAgICAgZW5kCiAgICAgbmV3IShqZF90b19hamQoamQsIGZyLCBvZiks IG9mLCBzZykKICAgZW5kCkBAIC0xNzgzLDE2ICsxOTA1LDE0IEBACiAKICAg ZGVmIHRvX2RhdGUKICAgICBqZCA9IERhdGUuX19zZW5kX18oOmNpdmlsX3Rv X2pkLCB5ZWFyLCBtb24sIG1kYXksIERhdGU6OklUQUxZKQotICAgIERhdGUu bmV3IShEYXRlLl9fc2VuZF9fKDpqZF90b19hamQsIGpkLCAwLCAwKSwgMCwg RGF0ZTo6SVRBTFkpCisgICAgRGF0ZS5uZXdfbCEoamQsIERhdGU6OklUQUxZ KQogICBlbmQKIAogICBkZWYgdG9fZGF0ZXRpbWUKLSAgICBqZCA9IERhdGVU aW1lLl9fc2VuZF9fKDpjaXZpbF90b19qZCwgeWVhciwgbW9uLCBtZGF5LCBE YXRlVGltZTo6SVRBTFkpCi0gICAgZnIgPSBEYXRlVGltZS5fX3NlbmRfXyg6 dGltZV90b19kYXlfZnJhY3Rpb24sIGhvdXIsIG1pbiwgW3NlYywgNTldLm1p bikgKwotICAgICAgUmF0aW9uYWwoc3Vic2VjLCA4NjQwMCkKLSAgICBvZiA9 IFJhdGlvbmFsKHV0Y19vZmZzZXQsIDg2NDAwKQotICAgIERhdGVUaW1lLm5l dyEoRGF0ZVRpbWUuX19zZW5kX18oOmpkX3RvX2FqZCwgamQsIGZyLCBvZiks Ci0JCSAgb2YsIERhdGVUaW1lOjpJVEFMWSkKKyAgICB1ID0gZ2V0dXRjCisg ICAgamQgPSBEYXRlVGltZS5fX3NlbmRfXyg6Y2l2aWxfdG9famQsIHUueWVh ciwgdS5tb24sIHUubWRheSwgRGF0ZVRpbWU6OklUQUxZKQorICAgIGRmID0g dS5ob3VyICogMzYwMCArIHUubWluICogNjAgKyB1LnNlYworICAgIERhdGVU aW1lLm5ld19sIShqZCwgZGYsIHUubnNlYywgdXRjX29mZnNldCwgRGF0ZVRp bWU6OklUQUxZKQogICBlbmQKIAogZW5kCkBAIC0xODAxLDQ4ICsxOTIxLDc3 IEBACiAKICAgZGVmIHRvX3RpbWUoKSBUaW1lLmxvY2FsKHllYXIsIG1vbiwg bWRheSkgZW5kCiAgIGRlZiB0b19kYXRlKCkgc2VsZiBlbmQKLSAgZGVmIHRv X2RhdGV0aW1lKCkgRGF0ZVRpbWUubmV3IShqZF90b19hamQoamQsIDAsIDAp LCBAb2YsIEBzZykgZW5kCisgIGRlZiB0b19kYXRldGltZSgpIERhdGVUaW1l Lm5ld19yIShqZF90b19hamQoamQsIDAsIDApLCBvZmZzZXQsIHN0YXJ0KSBl bmQKIAotICAjIENyZWF0ZSBhIG5ldyBEYXRlIG9iamVjdCByZXByZXNlbnRp bmcgdG9kYXkuCi0gICMKLSAgIyArc2crIHNwZWNpZmllcyB0aGUgRGF5IG9m IENhbGVuZGFyIFJlZm9ybS4KLSAgZGVmIHNlbGYudG9kYXkoc2c9SVRBTFkp Ci0gICAgdCA9IFRpbWUubm93Ci0gICAgamQgPSBjaXZpbF90b19qZCh0Lnll YXIsIHQubW9uLCB0Lm1kYXksIHNnKQotICAgIG5ldyEoamRfdG9fYWpkKGpk LCAwLCAwKSwgMCwgc2cpCi0gIGVuZAotCi0gICMgQ3JlYXRlIGEgbmV3IERh dGVUaW1lIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgdGltZS4K LSAgIwotICAjICtzZysgc3BlY2lmaWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIg UmVmb3JtLgotICBkZWYgc2VsZi5ub3coc2c9SVRBTFkpCi0gICAgdCA9IFRp bWUubm93Ci0gICAgamQgPSBjaXZpbF90b19qZCh0LnllYXIsIHQubW9uLCB0 Lm1kYXksIHNnKQotICAgIGZyID0gdGltZV90b19kYXlfZnJhY3Rpb24odC5o b3VyLCB0Lm1pbiwgW3Quc2VjLCA1OV0ubWluKSArCi0gICAgICBSYXRpb25h bCh0LnN1YnNlYywgODY0MDApCi0gICAgb2YgPSBSYXRpb25hbCh0LnV0Y19v ZmZzZXQsIDg2NDAwKQotICAgIG5ldyEoamRfdG9fYWpkKGpkLCBmciwgb2Yp LCBvZiwgc2cpCi0gIGVuZAotCi0gIHByaXZhdGVfY2xhc3NfbWV0aG9kIDpu b3cKLQogZW5kCiAKIGNsYXNzIERhdGVUaW1lIDwgRGF0ZQogCiAgIGRlZiB0 b190aW1lCi0gICAgZCA9IG5ld19vZmZzZXQoMCkKLSAgICBkLmluc3RhbmNl X2V2YWwgZG8KLSAgICAgIFRpbWUudXRjKHllYXIsIG1vbiwgbWRheSwgaG91 ciwgbWluLCBzZWMgKwotCSAgICAgICBzZWNfZnJhY3Rpb24pCisgICAgaW5z dGFuY2VfZXZhbCBkbworICAgICAgVGltZS5uZXcoeWVhciwgbW9uLCBtZGF5 LCBob3VyLCBtaW4sIHNlYyArCisJICAgICAgIHNlY19mcmFjdGlvbiwgem9u ZSkKICAgICBlbmQuCiAJZ2V0bG9jYWwKICAgZW5kCiAKLSAgZGVmIHRvX2Rh dGUoKSBEYXRlLm5ldyEoamRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgQHNnKSBl bmQKKyAgZGVmIHRvX2RhdGUoKSBEYXRlLm5ld19yIShqZF90b19hamQoamQs IDAsIDApLCAwLCBzdGFydCkgZW5kCiAgIGRlZiB0b19kYXRldGltZSgpIHNl bGYgZW5kCiAKLSAgcHJpdmF0ZV9jbGFzc19tZXRob2QgOnRvZGF5Ci0gIHB1 YmxpY19jbGFzc19tZXRob2QgIDpub3cKK2VuZAogCitjbGFzcyBEYXRlOjpM aWdodCA8IERhdGUKKworICBkZWYgdG9fZGF0ZXRpbWUoKSBEYXRlVGltZS5u ZXdfbCEoamQsIDAsIDAsIDAsIHN0YXJ0KSBlbmQKKwogZW5kCisKK2NsYXNz IERhdGVUaW1lOjpMaWdodCA8IERhdGVUaW1lCisKKyAgZGVmIHRvX2RhdGUo KSBEYXRlLm5ld19sIShqZCwgc3RhcnQpIGVuZAorCitlbmQKKworCityZXF1 aXJlICdkYXRlX2NvcmUnCisKK2NsYXNzIERhdGUKKworICBkZWYgdG9fcmln aHQoKSBzZWxmIGVuZAorCisgIGRlZiB0b19saWdodAorICAgIHJhaXNlIFJh bmdlRXJyb3IsICJjYW5ub3QgY3JlYXRlIiB1bmxlc3MgZ3JlZ29yaWFuPwor ICAgIGosIGYsID0gKGFqZCArIFJhdGlvbmFsKDEsIDIpKS5kaXZtb2QoMSkK KyAgICByYWlzZSBSYW5nZUVycm9yLCAiY2Fubm90IGNyZWF0ZSIgdW5sZXNz IGYgPT0gMAorICAgIERhdGUubmV3X2whKGosIHN0YXJ0LnRvX2YpCisgIGVu ZAorCitlbmQKKworY2xhc3MgRGF0ZVRpbWUgPCBEYXRlCisKKyAgZGVmIHRv X3JpZ2h0KCkgc2VsZiBlbmQKKworICBkZWYgdG9fbGlnaHQKKyAgICByYWlz ZSBSYW5nZUVycm9yLCAiY2Fubm90IGNyZWF0ZSIgdW5sZXNzIGdyZWdvcmlh bj8KKyAgICBqLCBmLCA9IChhamQgKyBSYXRpb25hbCgxLCAyKSkuZGl2bW9k KDEpCisgICAgZGYsIGYsID0gZi5kaXZtb2QoU0VDT05EU19JTl9EQVkpCisg ICAgc2YgPSBmLmRpdihOQU5PU0VDT05EU19JTl9EQVkpLnJvdW5kCisgICAg RGF0ZVRpbWUubmV3X2whKGosIGRmLCBzZiwgKG9mZnNldCAqIDg2NDAwKS5y b3VuZCwgc3RhcnQudG9fZikKKyAgZW5kCisKK2VuZAorCitjbGFzcyBEYXRl OjpMaWdodCA8IERhdGUKKworICBkZWYgdG9fcmlnaHQoKSBEYXRlLm5ld19y IShhamQsIG9mZnNldCwgc3RhcnQpIGVuZAorICBkZWYgdG9fbGlnaHQoKSBz ZWxmIGVuZAorCitlbmQKKworY2xhc3MgRGF0ZVRpbWU6OkxpZ2h0IDwgRGF0 ZVRpbWUKKworICBkZWYgdG9fcmlnaHQoKSBEYXRlVGltZS5uZXdfciEoYWpk LCBvZmZzZXQsIHN0YXJ0KSBlbmQKKyAgZGVmIHRvX2xpZ2h0KCkgc2VsZiBl bmQKKworZW5kCkluZGV4OiBleHQvZGF0ZS9kYXRlX2NvcmUuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBleHQvZGF0ZS9kYXRlX2NvcmUuYwkocmV2 aXNpb24gMCkKKysrIGV4dC9kYXRlL2RhdGVfY29yZS5jCShyZXZpc2lvbiAw KQpAQCAtMCwwICsxLDMwNTkgQEAKKy8qCisgIGRhdGVfY29yZS5jIDxzd2l0 Y2hfaGl0dGVyPjogQ29kZWQgYnkgVGFkYXlvc2hpIEZ1bmFiYSAyMDEwLCAy MDExCisqLworCisjaW5jbHVkZSAicnVieS5oIgorI2luY2x1ZGUgPG1hdGgu aD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNkZWZpbmUgTkRFQlVHCisjaW5j bHVkZSA8YXNzZXJ0Lmg+CisKKyNkZWZpbmUgSEFWRV9KRCAxCisjZGVmaW5l IEhBVkVfREYgMgorI2RlZmluZSBIQVZFX0NJVklMIDQKKyNkZWZpbmUgSEFW RV9USU1FIDgKKworI2RlZmluZSBJVEFMWSAyMjk5MTYxCisKKyNkZWZpbmUg TElHSFRBQkxFX0pEKGopIChqID49IG1pbl9qZCAmJiBqIDw9IG1heF9qZCkK KyNkZWZpbmUgTElHSFRBQkxFX1lFQVIoeSkgKHkgPj0gbWluX3llYXIgJiYg eSA8PSBtYXhfeWVhcikKKyNkZWZpbmUgTElHSFRBQkxFX0NXWUVBUih5KSBM SUdIVEFCTEVfWUVBUih5KQorCisjZGVmaW5lIERBWV9JTl9TRUNPTkRTIDg2 NDAwCisjZGVmaW5lIFNFQ09ORF9JTl9OQU5PU0VDT05EUyAxMDAwMDAwMDAw CisjZGVmaW5lIERBWV9JTl9OQU5PU0VDT05EUyA4NjQwMDAwMDAwMDAwMExM CisKKy8qIGNvcGllZCBmcm9tIHRpbWUuYyAqLworI2RlZmluZSBORElWKHgs eSkgKC0oLSgoeCkrMSkvKHkpKS0xKQorI2RlZmluZSBOTU9EKHgseSkgKCh5 KS0oLSgoeCkrMSklKHkpKS0xKQorI2RlZmluZSBESVYobixkKSAoKG4pPDAg PyBORElWKChuKSwoZCkpIDogKG4pLyhkKSkKKyNkZWZpbmUgTU9EKG4sZCkg KChuKTwwID8gTk1PRCgobiksKGQpKSA6IChuKSUoZCkpCisKK3N0cnVjdCBE YXRlTGlnaHREYXRhCit7CisgIGxvbmcgamQ7CS8qIGFzIHV0YyAqLworICBk b3VibGUgc2c7CisgIC8qIGRlY29kZWQgKi8KKyAgaW50IHllYXI7CisgIGlu dCBtb247CisgIGludCBtZGF5OworICB1bnNpZ25lZCBmbGFnczsKK307CisK K3N0cnVjdCBEYXRlVGltZUxpZ2h0RGF0YQoreworICBsb25nIGpkOwkvKiBh cyB1dGMgKi8KKyAgaW50IGRmOwkvKiBhcyB1dGMsIGluIHNlY3MgKi8KKyAg bG9uZyBsb25nIHNmOwkvKiBpbiBuYW5vIHNlY3MgKi8KKyAgaW50IG9mOwkv KiBpbiBzZWNzICovCisgIGRvdWJsZSBzZzsKKyAgLyogZGVjb2RlZCAqLwor ICBpbnQgeWVhcjsKKyAgaW50IG1vbjsKKyAgaW50IG1kYXk7CisgIGludCBo b3VyOworICBpbnQgbWluOworICBpbnQgc2VjOworICB1bnNpZ25lZCBmbGFn czsKK307CisKKyNkZWZpbmUgZ2V0X2QxKHgpIFwKKyAgc3RydWN0IERhdGVM aWdodERhdGEgKmRhdDtcCisgIERhdGFfR2V0X1N0cnVjdCh4LCBzdHJ1Y3Qg RGF0ZUxpZ2h0RGF0YSwgZGF0KQorCisjZGVmaW5lIGdldF9kMih4LHkpIFwK KyAgc3RydWN0IERhdGVMaWdodERhdGEgKmFkYXQsICpiZGF0O1wKKyAgRGF0 YV9HZXRfU3RydWN0KHgsIHN0cnVjdCBEYXRlTGlnaHREYXRhLCBhZGF0KTtc CisgIERhdGFfR2V0X1N0cnVjdCh5LCBzdHJ1Y3QgRGF0ZUxpZ2h0RGF0YSwg YmRhdCkKKworI2RlZmluZSBnZXRfZDFfZHQxKHgseSkgXAorICBzdHJ1Y3Qg RGF0ZUxpZ2h0RGF0YSAqYWRhdCwgKmJkYXQ7XAorICBEYXRhX0dldF9TdHJ1 Y3QoeCwgc3RydWN0IERhdGVMaWdodERhdGEsIGFkYXQpO1wKKyAgRGF0YV9H ZXRfU3RydWN0KHksIHN0cnVjdCBEYXRlVGltZUxpZ2h0RGF0YSwgYmRhdCkK KworI2RlZmluZSBnZXRfZHQxKHgpIFwKKyAgc3RydWN0IERhdGVUaW1lTGln aHREYXRhICpkYXQ7XAorICBEYXRhX0dldF9TdHJ1Y3QoeCwgc3RydWN0IERh dGVUaW1lTGlnaHREYXRhLCBkYXQpCisKKyNkZWZpbmUgZ2V0X2R0Mih4LHkp IFwKKyAgc3RydWN0IERhdGVUaW1lTGlnaHREYXRhICphZGF0LCAqYmRhdDtc CisgIERhdGFfR2V0X1N0cnVjdCh4LCBzdHJ1Y3QgRGF0ZVRpbWVMaWdodERh dGEsIGFkYXQpO1wKKyAgRGF0YV9HZXRfU3RydWN0KHksIHN0cnVjdCBEYXRl VGltZUxpZ2h0RGF0YSwgYmRhdCkKKworI2RlZmluZSBnZXRfZHQxX2QxKHgs eSkgXAorICBzdHJ1Y3QgRGF0ZVRpbWVMaWdodERhdGEgKmFkYXQsICpiZGF0 O1wKKyAgRGF0YV9HZXRfU3RydWN0KHgsIHN0cnVjdCBEYXRlVGltZUxpZ2h0 RGF0YSwgYWRhdCk7XAorICBEYXRhX0dldF9TdHJ1Y3QoeSwgc3RydWN0IERh dGVUaW1lRGF0YSwgYmRhdCkKKworI2RlZmluZSBmb3J3YXJkKGssbSkgcmJf ZnVuY2FsbDIoaywgcmJfaW50ZXJuKG0pLCBhcmdjLCBhcmd2KQorI2RlZmlu ZSB0b19yaWdodCh4KSByYl9mdW5jYWxsKHgsIHJiX2ludGVybigidG9fcmln aHQiKSwgMCkKKworc3RhdGljIFZBTFVFIGNEYXRlLCBjRGF0ZUxpZ2h0LCBj RGF0ZVRpbWUsIGNEYXRlVGltZUxpZ2h0Oworc3RhdGljIFZBTFVFIHJ6ZXJv LCByaGFsZjsKK3N0YXRpYyBsb25nIG1pbl9qZCwgbWF4X2pkOworc3RhdGlj IGludCBtaW5feWVhciwgbWF4X3llYXI7CisKK3N0YXRpYyBpbnQgdmFsaWRf Y2l2aWxfcChpbnQgeSwgaW50IG0sIGludCBkLCBkb3VibGUgc2csCisJCQkg aW50ICpybSwgaW50ICpyZCwgbG9uZyAqcmpkLCBpbnQgKm5zKTsKKworc3Rh dGljIGludAorZmluZF9mZG95KGludCB5LCBkb3VibGUgc2csIGxvbmcgKnJq ZCwgaW50ICpucykKK3sKKyAgaW50IGQsIHJtLCByZDsKKworICBmb3IgKGQg PSAxOyBkIDwgMzE7IGQrKykKKyAgICBpZiAodmFsaWRfY2l2aWxfcCh5LCAx LCBkLCBzZywgJnJtLCAmcmQsIHJqZCwgbnMpKQorICAgICAgcmV0dXJuIDE7 CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmaW5kX2xkb3koaW50 IHksIGRvdWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQoreworICBpbnQg aSwgcm0sIHJkOworCisgIGZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKQorICAg IGlmICh2YWxpZF9jaXZpbF9wKHksIDEyLCAzMSAtIGksIHNnLCAmcm0sICZy ZCwgcmpkLCBucykpCisgICAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQKK2ZpbmRfZmRvbShpbnQgeSwgaW50IG0sIGRvdWJs ZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQoreworICBpbnQgZCwgcm0sIHJk OworCisgIGZvciAoZCA9IDE7IGQgPCAzMTsgZCsrKQorICAgIGlmICh2YWxp ZF9jaXZpbF9wKHksIG0sIGQsIHNnLCAmcm0sICZyZCwgcmpkLCBucykpCisg ICAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQK K2ZpbmRfbGRvbShpbnQgeSwgaW50IG0sIGRvdWJsZSBzZywgbG9uZyAqcmpk LCBpbnQgKm5zKQoreworICBpbnQgaSwgcm0sIHJkOworCisgIGZvciAoaSA9 IDA7IGkgPCAzMDsgaSsrKQorICAgIGlmICh2YWxpZF9jaXZpbF9wKHksIG0s IDMxIC0gaSwgc2csICZybSwgJnJkLCByamQsIG5zKSkKKyAgICAgIHJldHVy biAxOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2NpdmlsX3Rv X2pkKGludCB5LCBpbnQgbSwgaW50IGQsIGRvdWJsZSBzZywgbG9uZyAqcmpk LCBpbnQgKm5zKQoreworICBkb3VibGUgYSwgYiwgamQ7CisKKyAgaWYgKG0g PD0gMikgeworICAgIHkgLT0gMTsKKyAgICBtICs9IDEyOworICB9CisgIGEg PSBmbG9vcih5IC8gMTAwLjApOworICBiID0gMiAtIGEgKyBmbG9vcihhIC8g NC4wKTsKKyAgamQgPSBmbG9vcigzNjUuMjUgKiAoeSArIDQ3MTYpKSArCisg ICAgZmxvb3IoMzAuNjAwMSAqIChtICsgMSkpICsKKyAgICBkICsgYiAtIDE1 MjQ7CisgIGlmIChqZCA8IHNnKSB7CisgICAgamQgLT0gYjsKKyAgICAqbnMg PSAwOworICB9IGVsc2UKKyAgICAqbnMgPSAxOworCisgICpyamQgPSBqZDsK K30KKworc3RhdGljIHZvaWQKK2pkX3RvX2NpdmlsKGxvbmcgamQsIGRvdWJs ZSBzZywgaW50ICpyeSwgaW50ICpybSwgaW50ICpyZG9tKQoreworICBkb3Vi bGUgeCwgYSwgYiwgYywgZCwgZSwgeSwgbSwgZG9tOworCisgIGlmIChqZCA8 IHNnKQorICAgIGEgPSBqZDsKKyAgZWxzZSB7CisgICAgeCA9IGZsb29yKChq ZCAtIDE4NjcyMTYuMjUpIC8gMzY1MjQuMjUpOworICAgIGEgPSBqZCArIDEg KyB4IC0gZmxvb3IoeCAvIDQuMCk7CisgIH0KKyAgYiA9IGEgKyAxNTI0Owor ICBjID0gZmxvb3IoKGIgLSAxMjIuMSkgLyAzNjUuMjUpOworICBkID0gZmxv b3IoMzY1LjI1ICogYyk7CisgIGUgPSBmbG9vcigoYiAtIGQpIC8gMzAuNjAw MSk7CisgIGRvbSA9IGIgLSBkIC0gZmxvb3IoMzAuNjAwMSAqIGUpOworICBp ZiAoZSA8PSAxMykgeworICAgIG0gPSBlIC0gMTsKKyAgICB5ID0gYyAtIDQ3 MTY7CisgIH0gZWxzZSB7CisgICAgbSA9IGUgLSAxMzsKKyAgICB5ID0gYyAt IDQ3MTU7CisgIH0KKworICAqcnkgPSB5OworICAqcm0gPSBtOworICAqcmRv bSA9IGRvbTsKK30KKworc3RhdGljIHZvaWQKK29yZGluYWxfdG9famQoaW50 IHksIGludCBkLCBkb3VibGUgc2csIGxvbmcgKnJqZCwgaW50ICpucykKK3sK KyAgaW50IG5zMjsKKworICBmaW5kX2Zkb3koeSwgc2csIHJqZCwgJm5zMik7 CisgICpyamQgKz0gZCAtIDE7CisgICpucyA9ICgqcmpkIDwgc2cpID8gMCA6 IDE7Cit9CisKK3N0YXRpYyB2b2lkCitqZF90b19vcmRpbmFsKGxvbmcgamQs IGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpyZCkKK3sKKyAgaW50IHJtMiwg cmQyLCBuczsKKyAgbG9uZyByamQ7CisKKyAgamRfdG9fY2l2aWwoamQsIHNn LCByeSwgJnJtMiwgJnJkMik7CisgIGZpbmRfZmRveSgqcnksIHNnLCAmcmpk LCAmbnMpOworICAqcmQgPSBqZCAtIHJqZCArIDE7Cit9CisKK3N0YXRpYyB2 b2lkCitjb21tZXJjaWFsX3RvX2pkKGludCB5LCBpbnQgdywgaW50IGQsIGRv dWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQoreworICBsb25nIHJqZDI7 CisgIGludCBuczI7CisKKyAgZmluZF9mZG95KHksIHNnLCAmcmpkMiwgJm5z Mik7CisgIHJqZDIgKz0gMzsKKyAgKnJqZCA9CisgICAgKHJqZDIgLSBNT0Qo KHJqZDIgLSAxKSArIDEsIDcpKSArCisgICAgNyAqICh3IC0gMSkgKworICAg IChkIC0gMSk7CisgICpucyA9ICgqcmpkIDwgc2cpID8gMCA6IDE7Cit9CisK K3N0YXRpYyB2b2lkCitqZF90b19jb21tZXJjaWFsKGxvbmcgamQsIGRvdWJs ZSBzZywgaW50ICpyeSwgaW50ICpydywgaW50ICpyZCkKK3sKKyAgaW50IHJ5 Miwgcm0yLCByZDIsIGEsIG5zMjsKKyAgbG9uZyByamQyOworCisgIGpkX3Rv X2NpdmlsKGpkIC0gMywgc2csICZyeTIsICZybTIsICZyZDIpOworICBhID0g cnkyOworICBjb21tZXJjaWFsX3RvX2pkKGEgKyAxLCAxLCAxLCBzZywgJnJq ZDIsICZuczIpOworICBpZiAoamQgPj0gcmpkMikKKyAgICAqcnkgPSBhICsg MTsKKyAgZWxzZSB7CisgICAgY29tbWVyY2lhbF90b19qZChhLCAxLCAxLCBz ZywgJnJqZDIsICZuczIpOworICAgICpyeSA9IGE7CisgIH0KKyAgKnJ3ID0g MSArIERJVihqZCAtIHJqZDIsICA3KTsKKyAgKnJkID0gTU9EKGpkICsgMSwg Nyk7CisgIGlmICgqcmQgPT0gMCkKKyAgICAqcmQgPSA3OworfQorCitzdGF0 aWMgdm9pZAord2Vla251bV90b19qZChpbnQgeSwgaW50IHcsIGludCBkLCBp bnQgZiwgZG91YmxlIHNnLCBsb25nICpyamQsIGludCAqbnMpCit7CisgIGxv bmcgcmpkMjsKKyAgaW50IG5zMjsKKworICBmaW5kX2Zkb3koeSwgc2csICZy amQyLCAmbnMyKTsKKyAgcmpkMiArPSA2OworICAqcmpkID0gKHJqZDIgLSBN T0QoKChyamQyIC0gZikgKyAxKSwgNykgLSA3KSArIDcgKiB3ICsgZDsKKyAg Km5zID0gKCpyamQgPCBzZykgPyAwIDogMTsKK30KKworc3RhdGljIHZvaWQK K2pkX3RvX3dlZWtudW0obG9uZyBqZCwgaW50IGYsIGRvdWJsZSBzZywgaW50 ICpyeSwgaW50ICpydywgaW50ICpyZCkKK3sKKyAgaW50IHJtLCByZDIsIG5z OworICBsb25nIHJqZCwgajsKKworICBqZF90b19jaXZpbChqZCwgc2csIHJ5 LCAmcm0sICZyZDIpOworICBmaW5kX2Zkb3koKnJ5LCBzZywgJnJqZCwgJm5z KTsKKyAgcmpkICs9IDY7CisgIGogPSBqZCAtIChyamQgLSBNT0QoKHJqZCAt IGYpICsgMSwgNykpICsgNzsKKyAgKnJ3ID0gRElWKGosIDcpOworICAqcmQg PSBNT0QoaiwgNyk7Cit9CisKK3N0YXRpYyB2b2lkCitudGhfa2RheV90b19q ZChpbnQgeSwgaW50IG0sIGludCBuLCBpbnQgaywgZG91YmxlIHNnLCBsb25n ICpyamQsIGludCAqbnMpCit7CisgIGxvbmcgcmpkMjsKKyAgaW50IG5zMjsK KworICBpZiAobiA+IDApIHsKKyAgICBmaW5kX2Zkb20oeSwgbSwgc2csICZy amQyLCAmbnMyKTsKKyAgICByamQyIC09IDE7CisgIH0gZWxzZSB7CisgICAg ZmluZF9sZG9tKHksIG0sIHNnLCAmcmpkMiwgJm5zMik7CisgICAgcmpkMiAr PSA3OworICB9CisgICpyamQgPSAocmpkMiAtIE1PRCgocmpkMiAtIGspICsg MSwgNykpICsgNyAqIG47CisgICpucyA9ICgqcmpkIDwgc2cpID8gMCA6IDE7 Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGpkX3RvX3dkYXkobG9uZyBqZCk7 CisKK3N0YXRpYyB2b2lkCitqZF90b19udGhfa2RheShsb25nIGpkLCBkb3Vi bGUgc2csIGludCAqcnksIGludCAqcm0sIGludCAqcm4sIGludCAqcmspCit7 CisgIGludCByZCwgbnMyOworICBsb25nIHJqZDsKKworICBqZF90b19jaXZp bChqZCwgc2csIHJ5LCBybSwgJnJkKTsKKyAgZmluZF9mZG9tKCpyeSwgKnJt LCBzZywgJnJqZCwgJm5zMik7CisgICpybiA9IERJVihqZCAtIHJqZCwgNykg KyAxOworICAqcmsgPSBqZF90b193ZGF5KGpkKTsKK30KKworc3RhdGljIGlu dAordmFsaWRfb3JkaW5hbF9wKGludCB5LCBpbnQgZCwgZG91YmxlIHNnLAor CQlpbnQgKnJkLCBsb25nICpyamQsIGludCAqbnMpCit7CisgIGludCByeTIs IHJkMjsKKworICBpZiAoZCA8IDApIHsKKyAgICBsb25nIHJqZDI7CisgICAg aW50IG5zMjsKKworICAgIGlmICghZmluZF9sZG95KHksIHNnLCAmcmpkMiwg Jm5zMikpCisgICAgICByZXR1cm4gMDsKKyAgICBqZF90b19vcmRpbmFsKHJq ZDIgKyBkICsgMSwgc2csICZyeTIsICZyZDIpOworICAgIGlmIChyeTIgIT0g eSkKKyAgICAgIHJldHVybiAwOworICAgIGQgPSByZDI7CisgIH0KKyAgb3Jk aW5hbF90b19qZCh5LCBkLCBzZywgcmpkLCBucyk7CisgIGpkX3RvX29yZGlu YWwoKnJqZCwgc2csICZyeTIsICZyZDIpOworICBpZiAocnkyICE9IHkgfHwg cmQyICE9IGQpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitz dGF0aWMgY29uc3QgaW50IG1vbnRodGFiWzJdWzEzXSA9IHsKKyAgeyAwLCAz MSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMx IH0sCisgIHsgMCwgMzEsIDI5LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAz MCwgMzEsIDMwLCAzMSB9Cit9OworCitpbmxpbmUgc3RhdGljIGludAorbGVh cF9wKGludCB5KQoreworICByZXR1cm4gTU9EKHksIDQpID09IDAgJiYgeSAl IDEwMCAhPSAwIHx8IE1PRCh5LCA0MDApID09IDA7Cit9CisKK3N0YXRpYyBp bnQKK2xhc3RfZGF5X29mX21vbnRoKGludCB5LCBpbnQgbSkKK3sKKyAgcmV0 dXJuIG1vbnRodGFiW2xlYXBfcCh5KSA/IDEgOiAwXVttXTsKK30KKworc3Rh dGljIGludAordmFsaWRfZ3JlZ29yaWFuX3AoaW50IHksIGludCBtLCBpbnQg ZCwgaW50ICpybSwgaW50ICpyZCkKK3sKKyAgaW50IGxhc3Q7CisKKyAgaWYg KG0gPCAwKQorICAgIG0gKz0gMTM7CisgIGxhc3QgPSBsYXN0X2RheV9vZl9t b250aCh5LCBtKTsKKyAgaWYgKGQgPCAwKQorICAgIGQgPSBsYXN0ICsgZCAr IDE7CisKKyAgKnJtID0gbTsKKyAgKnJkID0gZDsKKworICByZXR1cm4gISht IDwgMCB8fCBtID4gMTIgfHwKKwkgICBkIDwgMSB8fCBkID4gbGFzdCk7Cit9 CisKK3N0YXRpYyBpbnQKK3ZhbGlkX2NpdmlsX3AoaW50IHksIGludCBtLCBp bnQgZCwgZG91YmxlIHNnLAorCSAgICAgIGludCAqcm0sIGludCAqcmQsIGxv bmcgKnJqZCwgaW50ICpucykKK3sKKyAgaW50IHJ5OworCisgIGlmIChtIDwg MCkKKyAgICBtICs9IDEzOworICBpZiAoZCA8IDApIHsKKyAgICBpZiAoIWZp bmRfbGRvbSh5LCBtLCBzZywgcmpkLCBucykpCisgICAgICByZXR1cm4gMDsK KyAgICBqZF90b19jaXZpbCgqcmpkICsgZCArIDEsIHNnLCAmcnksIHJtLCBy ZCk7CisgICAgaWYgKHJ5ICE9IHkgfHwgKnJtICE9IG0pCisgICAgICByZXR1 cm4gMDsKKyAgICBkID0gKnJkOworICB9CisgIGNpdmlsX3RvX2pkKHksIG0s IGQsIHNnLCByamQsIG5zKTsKKyAgamRfdG9fY2l2aWwoKnJqZCwgc2csICZy eSwgcm0sIHJkKTsKKyAgaWYgKHJ5ICE9IHkgfHwgKnJtICE9IG0gfHwgKnJk ICE9IGQpCisgICAgcmV0dXJuIDA7CisgIHJldHVybiAxOworfQorCitzdGF0 aWMgaW50Cit2YWxpZF9jb21tZXJjaWFsX3AoaW50IHksIGludCB3LCBpbnQg ZCwgZG91YmxlIHNnLAorCQkgICBpbnQgKnJ3LCBpbnQgKnJkLCBsb25nICpy amQsIGludCAqbnMpCit7CisgIGludCBuczIsIHJ5MiwgcncyLCByZDI7CisK KyAgaWYgKGQgPCAwKQorICAgIGQgKz0gODsKKyAgaWYgKHcgPCAwKSB7Cisg ICAgbG9uZyByamQyOworCisgICAgY29tbWVyY2lhbF90b19qZCh5ICsgMSwg MSwgMSwgc2csICZyamQyLCAmbnMyKTsKKyAgICBqZF90b19jb21tZXJjaWFs KHJqZDIgKyB3ICogNywgc2csICZyeTIsICZydzIsICZyZDIpOworICAgIGlm IChyeTIgIT0geSkKKyAgICAgIHJldHVybiAwOworICAgIHcgPSBydzI7Cisg IH0KKyAgY29tbWVyY2lhbF90b19qZCh5LCB3LCBkLCBzZywgcmpkLCBucyk7 CisgIGpkX3RvX2NvbW1lcmNpYWwoKnJqZCwgc2csICZyeTIsIHJ3LCByZCk7 CisgIGlmICh5ICE9IHJ5MiB8fCB3ICE9ICpydyB8fCBkICE9ICpyZCkKKyAg ICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3Zh bGlkX3RpbWVfcChpbnQgaCwgaW50IG1pbiwgaW50IHMsIGludCAqcmgsIGlu dCAqcm1pbiwgaW50ICpycykKK3sKKyAgaWYgKGggPCAwKQorICAgIGggKz0g MjQ7CisgIGlmIChtaW4gPCAwKQorICAgIG1pbiArPSA2MDsKKyAgaWYgKHMg PCAwKQorICAgIHMgKz0gNjA7CisgICpyaCA9IGg7CisgICpybWluID0gbWlu OworICAqcnMgPSBzOworICByZXR1cm4gIShoICAgPCAwIHx8IGggICA+IDI0 IHx8CisJICAgbWluIDwgMCB8fCBtaW4gPiA1OSB8fAorCSAgIHMgICA8IDAg fHwgcyAgID4gNTkgfHwKKwkgICAoaCA9PSAyNCAmJiAobWluID4gMCB8fCBz ID4gMCkpKTsKK30KKworaW5saW5lIHN0YXRpYyBpbnQKK2RmX2xvY2FsX3Rv X3V0YyhpbnQgZGYsIGludCBvZikKK3sKKyAgZGYgLT0gb2Y7CisgIGlmIChk ZiA8IDApCisgICAgZGYgKz0gREFZX0lOX1NFQ09ORFM7CisgIGVsc2UgaWYg KGRmID49IERBWV9JTl9TRUNPTkRTKQorICAgIGRmIC09IERBWV9JTl9TRUNP TkRTOworICByZXR1cm4gZGY7Cit9CisKK2lubGluZSBzdGF0aWMgaW50Citk Zl91dGNfdG9fbG9jYWwoaW50IGRmLCBpbnQgb2YpCit7CisgIGRmICs9IG9m OworICBpZiAoZGYgPCAwKQorICAgIGRmICs9IERBWV9JTl9TRUNPTkRTOwor ICBlbHNlIGlmIChkZiA+PSBEQVlfSU5fU0VDT05EUykKKyAgICBkZiAtPSBE QVlfSU5fU0VDT05EUzsKKyAgcmV0dXJuIGRmOworfQorCitpbmxpbmUgc3Rh dGljIGxvbmcKK2pkX2xvY2FsX3RvX3V0Yyhsb25nIGpkLCBpbnQgZGYsIGlu dCBvZikKK3sKKyAgZGYgLT0gb2Y7CisgIGlmIChkZiA8IDApCisgICAgamQg LT0gMTsKKyAgZWxzZSBpZiAoZGYgPj0gREFZX0lOX1NFQ09ORFMpCisgICAg amQgKz0gMTsKKyAgcmV0dXJuIGpkOworfQorCitpbmxpbmUgc3RhdGljIGxv bmcKK2pkX3V0Y190b19sb2NhbChsb25nIGpkLCBpbnQgZGYsIGludCBvZikK K3sKKyAgZGYgKz0gb2Y7CisgIGlmIChkZiA8IDApCisgICAgamQgLT0gMTsK KyAgZWxzZSBpZiAoZGYgPj0gREFZX0lOX1NFQ09ORFMpCisgICAgamQgKz0g MTsKKyAgcmV0dXJuIGpkOworfQorCitpbmxpbmUgc3RhdGljIGludAordGlt ZV90b19kZihpbnQgaCwgaW50IG1pbiwgaW50IHMpCit7CisgIHJldHVybiBo ICogMzYwMCArIG1pbiAqIDYwICsgczsKK30KKworaW5saW5lIHN0YXRpYyBp bnQKK2pkX3RvX3dkYXkobG9uZyBqZCkKK3sKKyAgcmV0dXJuIE1PRChqZCAr IDEsIDcpOworfQorCitzdGF0aWMgaW50CitkYXlkaWZmX3RvX3NlYyhWQUxV RSB2b2YsIGludCAqcm9mKQoreworICBzd2l0Y2ggKFRZUEUodm9mKSkgewor ICBjYXNlIFRfRklYTlVNOgorICAgIHsKKyAgICAgIGludCBuOworCisgICAg ICBuID0gRklYMklOVCh2b2YpOworICAgICAgaWYgKG4gIT0gLTEgJiYgbiAh PSAwICYmIG4gIT0gMSkKKwlyZXR1cm4gMDsKKyAgICAgICpyb2YgPSBuICog REFZX0lOX1NFQ09ORFM7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGNh c2UgVF9GTE9BVDoKKyAgICB7CisgICAgICBkb3VibGUgbjsKKworICAgICAg biA9IE5VTTJEQkwodm9mKTsKKyAgICAgIGlmIChuIDwgLURBWV9JTl9TRUNP TkRTIHx8IG4gPiBEQVlfSU5fU0VDT05EUykKKwlyZXR1cm4gMDsKKyAgICAg ICpyb2YgPSByb3VuZChuICogREFZX0lOX1NFQ09ORFMpOworICAgICAgcmV0 dXJuIDE7CisgICAgfQorICBjYXNlIFRfUkFUSU9OQUw6CisgICAgeworICAg ICAgVkFMVUUgdnMgPSByYl9mdW5jYWxsKHZvZiwgJyonLCAxLCBJTlQyRklY KERBWV9JTl9TRUNPTkRTKSk7CisgICAgICBWQUxVRSB2biA9IFJSQVRJT05B TCh2cyktPm51bTsKKyAgICAgIFZBTFVFIHZkID0gUlJBVElPTkFMKHZzKS0+ ZGVuOworICAgICAgaW50IG4sIGQ7CisKKyAgICAgIGlmICghRklYTlVNX1Ao dm4pIHx8ICFGSVhOVU1fUCh2ZCkpCisJcmV0dXJuIDA7CisgICAgICBuID0g RklYMklOVCh2bik7CisgICAgICBkID0gRklYMklOVCh2ZCk7CisgICAgICBp ZiAoZCAhPSAxKQorCXJldHVybiAwOworICAgICAgaWYgKG4gPCAtREFZX0lO X1NFQ09ORFMgfHwgbiA+IERBWV9JTl9TRUNPTkRTKQorCXJldHVybiAwOwor ICAgICAgKnJvZiA9IG47CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIGNh c2UgVF9TVFJJTkc6CisgICAgeworICAgICAgVkFMVUUgdnMgPSByYl9mdW5j YWxsKGNEYXRlLCByYl9pbnRlcm4oInpvbmVfdG9fZGlmZiIpLCAxLCB2b2Yp OworICAgICAgaW50IG47CisKKyAgICAgIGlmICghRklYTlVNX1AodnMpKQor CXJldHVybiAwOworICAgICAgbiA9IEZJWDJJTlQodnMpOworICAgICAgaWYg KG4gPCAtREFZX0lOX1NFQ09ORFMgfHwgbiA+IERBWV9JTl9TRUNPTkRTKQor CXJldHVybiAwOworICAgICAgKnJvZiA9IG47CisgICAgICByZXR1cm4gMTsK KyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2lubGluZSBzdGF0aWMg dm9pZAorZ2V0X2RfamQoc3RydWN0IERhdGVMaWdodERhdGEgKngpCit7Cisg IGlmICghKHgtPmZsYWdzICYgSEFWRV9KRCkpIHsKKyAgICBsb25nIGpkOwor ICAgIGludCBuczsKKworICAgIGFzc2VydCh4LT5mbGFncyAmIEhBVkVfQ0lW SUwpOworCisgICAgY2l2aWxfdG9famQoeC0+eWVhciwgeC0+bW9uLCB4LT5t ZGF5LCB4LT5zZywgJmpkLCAmbnMpOworICAgIHgtPmpkID0gamQ7CisgICAg eC0+ZmxhZ3MgfD0gSEFWRV9KRDsKKyAgfQorfQorCitpbmxpbmUgc3RhdGlj IHZvaWQKK2dldF9kX2NpdmlsKHN0cnVjdCBEYXRlTGlnaHREYXRhICp4KQor eworICBpZiAoISh4LT5mbGFncyAmIEhBVkVfQ0lWSUwpKSB7CisgICAgaW50 IHksIG0sIGQ7CisKKyAgICBhc3NlcnQoeC0+ZmxhZ3MgJiBIQVZFX0pEKTsK KworICAgIGpkX3RvX2NpdmlsKHgtPmpkLCB4LT5zZywgJnksICZtLCAmZCk7 CisgICAgeC0+eWVhciA9IHk7CisgICAgeC0+bW9uID0gbTsKKyAgICB4LT5t ZGF5ID0gZDsKKyAgICB4LT5mbGFncyB8PSBIQVZFX0NJVklMOworICB9Cit9 CisKK2lubGluZSBzdGF0aWMgdm9pZAorZ2V0X2R0X2RmKHN0cnVjdCBEYXRl VGltZUxpZ2h0RGF0YSAqeCkKK3sKKyAgaWYgKCEoeC0+ZmxhZ3MgJiBIQVZF X0RGKSkgeworICAgIGFzc2VydCh4LT5mbGFncyAmIEhBVkVfVElNRSk7CisK KyAgICB4LT5kZiA9IGRmX2xvY2FsX3RvX3V0Yyh0aW1lX3RvX2RmKHgtPmhv dXIsIHgtPm1pbiwgeC0+c2VjKSwgeC0+b2YpOworICAgIHgtPmZsYWdzIHw9 IEhBVkVfREY7CisgIH0KK30KKworaW5saW5lIHN0YXRpYyB2b2lkCitnZXRf ZHRfdGltZShzdHJ1Y3QgRGF0ZVRpbWVMaWdodERhdGEgKngpCit7CisgIGlu dCByOworCisgIGlmICghKHgtPmZsYWdzICYgSEFWRV9USU1FKSkgeworICAg IGFzc2VydCh4LT5mbGFncyAmIEhBVkVfREYpOworCisgICAgciA9IGRmX3V0 Y190b19sb2NhbCh4LT5kZiwgeC0+b2YpOworICAgIHgtPmhvdXIgPSByIC8g MzYwMDsKKyAgICByICU9IDM2MDA7CisgICAgeC0+bWluID0gciAvIDYwOwor ICAgIHgtPnNlYyA9IHIgJSA2MDsKKyAgICB4LT5mbGFncyB8PSBIQVZFX1RJ TUU7CisgIH0KK30KKworaW5saW5lIHN0YXRpYyB2b2lkCitnZXRfZHRfamQo c3RydWN0IERhdGVUaW1lTGlnaHREYXRhICp4KQoreworICBpZiAoISh4LT5m bGFncyAmIEhBVkVfSkQpKSB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7 CisKKyAgICBhc3NlcnQoeC0+ZmxhZ3MgJiBIQVZFX0NJVklMKTsKKworICAg IGNpdmlsX3RvX2pkKHgtPnllYXIsIHgtPm1vbiwgeC0+bWRheSwgeC0+c2cs ICZqZCwgJm5zKTsKKworICAgIGdldF9kdF90aW1lKHgpOworICAgIHgtPmpk ID0gamRfbG9jYWxfdG9fdXRjKGpkLAorCQkJICAgIHRpbWVfdG9fZGYoeC0+ aG91ciwgeC0+bWluLCB4LT5zZWMpLAorCQkJICAgIHgtPm9mKTsKKyAgICB4 LT5mbGFncyB8PSBIQVZFX0pEOworICB9Cit9CisKK2lubGluZSBzdGF0aWMg dm9pZAorZ2V0X2R0X2NpdmlsKHN0cnVjdCBEYXRlVGltZUxpZ2h0RGF0YSAq eCkKK3sKKyAgaWYgKCEoeC0+ZmxhZ3MgJiBIQVZFX0NJVklMKSkgeworICAg IGxvbmcgamQ7CisgICAgaW50IHksIG0sIGQ7CisKKyAgICBhc3NlcnQoeC0+ ZmxhZ3MgJiBIQVZFX0pEKTsKKworICAgIGdldF9kdF9kZih4KTsKKyAgICBq ZCA9IGpkX3V0Y190b19sb2NhbCh4LT5qZCwgeC0+ZGYsIHgtPm9mKTsKKyAg ICBqZF90b19jaXZpbChqZCwgeC0+c2csICZ5LCAmbSwgJmQpOworICAgIHgt PnllYXIgPSB5OworICAgIHgtPm1vbiA9IG07CisgICAgeC0+bWRheSA9IGQ7 CisgICAgeC0+ZmxhZ3MgfD0gSEFWRV9DSVZJTDsKKyAgfQorfQorCitpbmxp bmUgc3RhdGljIFZBTFVFCitmX2tpbmRfb2ZfcChWQUxVRSB4LCBWQUxVRSBj KQoreworICByZXR1cm4gcmJfb2JqX2lzX2tpbmRfb2YoeCwgYyk7Cit9CisK K2lubGluZSBzdGF0aWMgVkFMVUUKK2tfZGF0ZV9wKFZBTFVFIHgpCit7Cisg IHJldHVybiBmX2tpbmRfb2ZfcCh4LCBjRGF0ZSk7Cit9CisKK2lubGluZSBz dGF0aWMgVkFMVUUKK2tfZGF0ZXRpbWVfcChWQUxVRSB4KQoreworICByZXR1 cm4gZl9raW5kX29mX3AoeCwgY0RhdGVUaW1lKTsKK30KKworaW5saW5lIHN0 YXRpYyBWQUxVRQora19kX2xpdGVfcChWQUxVRSB4KQoreworICByZXR1cm4g Zl9raW5kX29mX3AoeCwgY0RhdGVMaWdodCk7Cit9CisKK2lubGluZSBzdGF0 aWMgVkFMVUUKK2tfZHRfbGl0ZV9wKFZBTFVFIHgpCit7CisgIHJldHVybiBm X2tpbmRfb2ZfcCh4LCBjRGF0ZVRpbWVMaWdodCk7Cit9CisKK2lubGluZSBz dGF0aWMgVkFMVUUKK2tfbnVtZXJpY19wKFZBTFVFIHgpCit7CisgIHJldHVy biBmX2tpbmRfb2ZfcCh4LCByYl9jTnVtZXJpYyk7Cit9CisKK3N0YXRpYyBW QUxVRQorZGF0ZV9zX3ZhbGlkX2pkX3AoaW50IGFyZ2MsIFZBTFVFICphcmd2 LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUgdmpkLCB2c2c7CisKKyAgcmJf c2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIxMSIsICZ2amQsICZ2c2cpOworCisg IHJldHVybiBRdHJ1ZTsKK30KKworc3RhdGljIFZBTFVFCitkYXRlX3NfdmFs aWRfY2l2aWxfcChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNz KQoreworICBWQUxVRSB2eSwgdm0sIHZkLCB2c2c7CisgIGludCB5LCBtLCBk LCBybSwgcmQ7CisgIGRvdWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3MoYXJn YywgYXJndiwgIjMxIiwgJnZ5LCAmdm0sICZ2ZCwgJnZzZyk7CisKKyAgaWYg KCEoRklYTlVNX1AodnkpICYmCisJRklYTlVNX1Aodm0pICYmCisJRklYTlVN X1AodmQpKSkKKyAgICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgInZhbGlkX2Np dmlsX3I/Iik7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0gTlVN MkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworICB5ID0g LTQ3MTI7CisgIG0gPSAxOworICBkID0gMTsKKworICBzd2l0Y2ggKGFyZ2Mp IHsKKyAgY2FzZSA0OgorICBjYXNlIDM6CisgICAgZCA9IE5VTTJMT05HKHZk KTsKKyAgY2FzZSAyOgorICAgIG0gPSBOVU0yTE9ORyh2bSk7CisgIGNhc2Ug MToKKyAgICB5ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRBQkxF X1lFQVIoeSkpCisgICAgICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgInZhbGlk X2NpdmlsX3I/Iik7CisgIH0KKworICBpZiAoaXNpbmYoc2cpICYmIHNnIDwg MCkgeworICAgIGlmICghdmFsaWRfZ3JlZ29yaWFuX3AoeSwgbSwgZCwgJnJt LCAmcmQpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKyAgICByZXR1cm4gUXRy dWU7CisgIH0gZWxzZSB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisK KyAgICBpZiAoIXZhbGlkX2NpdmlsX3AoeSwgbSwgZCwgc2csICZybSwgJnJk LCAmamQsICZucykpCisgICAgICByZXR1cm4gUWZhbHNlOworICAgIHJldHVy biBRdHJ1ZTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RhdGVfc192YWxp ZF9vcmRpbmFsX3AoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFz cykKK3sKKyAgVkFMVUUgdnksIHZkLCB2c2c7CisgIGludCB5LCBkLCByZDsK KyAgZG91YmxlIHNnOworCisgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAi MjEiLCAmdnksICZ2ZCwgJnZzZyk7CisKKyAgaWYgKCEoRklYTlVNX1Aodnkp ICYmCisJRklYTlVNX1AodmQpKSkKKyAgICByZXR1cm4gZm9yd2FyZChjRGF0 ZSwgInZhbGlkX29yZGluYWxfcj8iKTsKKworICBpZiAoIU5JTF9QKHZzZykp CisgICAgc2cgPSBOVU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBzZyA9IElU QUxZOworCisgIHkgPSAtNDcxMjsKKyAgZCA9IDE7CisKKyAgc3dpdGNoIChh cmdjKSB7CisgIGNhc2UgMzoKKyAgY2FzZSAyOgorICAgIGQgPSBOVU0yTE9O Ryh2ZCk7CisgIGNhc2UgMToKKyAgICB5ID0gTlVNMkxPTkcodnkpOworICAg IGlmICghTElHSFRBQkxFX1lFQVIoeSkpCisgICAgICByZXR1cm4gZm9yd2Fy ZChjRGF0ZSwgInZhbGlkX29yZGluYWxfcj8iKTsKKyAgfQorCisgIHsKKyAg ICBsb25nIGpkOworICAgIGludCBuczsKKworICAgIGlmICghdmFsaWRfb3Jk aW5hbF9wKHksIGQsIHNnLCAmcmQsICZqZCwgJm5zKSkKKyAgICAgIHJldHVy biBRZmFsc2U7CisgICAgcmV0dXJuIFF0cnVlOworICB9Cit9CisKK3N0YXRp YyBWQUxVRQorZGF0ZV9zX3ZhbGlkX2NvbW1lcmNpYWxfcChpbnQgYXJnYywg VkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICBWQUxVRSB2eSwgdncs IHZkLCB2c2c7CisgIGludCB5LCB3LCBkLCBydywgcmQ7CisgIGRvdWJsZSBz ZzsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjMxIiwgJnZ5LCAm dncsICZ2ZCwgJnZzZyk7CisKKyAgaWYgKCEoRklYTlVNX1AodnkpICYmCisJ RklYTlVNX1AodncpICYmCisJRklYTlVNX1AodmQpKSkKKyAgICByZXR1cm4g Zm9yd2FyZChjRGF0ZSwgInZhbGlkX2NvbW1lcmNpYWxfcj8iKTsKKworICBp ZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBOVU0yREJMKHZzZyk7CisgIGVs c2UKKyAgICBzZyA9IElUQUxZOworCisgIHkgPSAtNDcxMjsKKyAgdyA9IDE7 CisgIGQgPSAxOworCisgIHN3aXRjaCAoYXJnYykgeworICBjYXNlIDQ6Cisg IGNhc2UgMzoKKyAgICBkID0gTlVNMkxPTkcodmQpOworICBjYXNlIDI6Cisg ICAgdyA9IE5VTTJMT05HKHZ3KTsKKyAgY2FzZSAxOgorICAgIHkgPSBOVU0y TE9ORyh2eSk7CisgICAgaWYgKCFMSUdIVEFCTEVfQ1dZRUFSKHkpKQorICAg ICAgcmV0dXJuIGZvcndhcmQoY0RhdGUsICJ2YWxpZF9jb21tZXJjaWFsX3I/ Iik7CisgIH0KKworICB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisK KyAgICBpZiAoIXZhbGlkX2NvbW1lcmNpYWxfcCh5LCB3LCBkLCBzZywgJnJ3 LCAmcmQsICZqZCwgJm5zKSkKKyAgICAgIHJldHVybiBRZmFsc2U7CisgICAg cmV0dXJuIFF0cnVlOworICB9Cit9CisKK2lubGluZSBzdGF0aWMgVkFMVUUK K2RfbGl0ZV9zX25ld19pbnRlcm5hbChWQUxVRSBrbGFzcywgbG9uZyBqZCwg ZG91YmxlIHNnLAorCQkgICAgICBpbnQgeSwgaW50IG0sIGludCBkLCB1bnNp Z25lZCBmbGFncykKK3sKKyAgc3RydWN0IERhdGVMaWdodERhdGEgKmRhdDsK KyAgVkFMVUUgb2JqOworCisgIG9iaiA9IERhdGFfTWFrZV9TdHJ1Y3Qoa2xh c3MsIHN0cnVjdCBEYXRlTGlnaHREYXRhLCAwLCAtMSwgZGF0KTsKKworICBk YXQtPmpkID0gamQ7CisgIGRhdC0+c2cgPSBzZzsKKyAgZGF0LT55ZWFyID0g eTsKKyAgZGF0LT5tb24gPSBtOworICBkYXQtPm1kYXkgPSBkOworICBkYXQt PmZsYWdzID0gZmxhZ3M7CisKKyAgcmV0dXJuIG9iajsKK30KKworc3RhdGlj IFZBTFVFCitkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2aWwoVkFMVUUg a2xhc3MsIGxvbmcgamQsIGRvdWJsZSBzZywKKwkJCSAgICAgICB1bnNpZ25l ZCBmbGFncykKK3sKKyAgcmV0dXJuIGRfbGl0ZV9zX25ld19pbnRlcm5hbChr bGFzcywgamQsIHNnLCAwLCAwLCAwLCBmbGFncyk7Cit9CisKK3N0YXRpYyBW QUxVRQorZF9saXRlX3NfYWxsb2MoVkFMVUUga2xhc3MpCit7CisgIHJldHVy biBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2aWwoa2xhc3MsIDAsIDAs IDApOworfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9zX25ld19sX2Jhbmco aW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFM VUUgdmpkLCB2c2c7CisgIGxvbmcgamQ7CisgIGRvdWJsZSBzZzsKKworICBy Yl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjAyIiwgJnZqZCwgJnZzZyk7CisK KyAgaWYgKGFyZ2MgPCAxKQorICAgIGpkID0gMDsKKyAgZWxzZSB7CisgICAg aWYgKCFGSVhOVU1fUCh2amQpKQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vy cm9yLCAiY2Fubm90IGNyZWF0ZSIpOworICAgIGpkID0gTlVNMkxPTkcodmpk KTsKKyAgICBpZiAoIUxJR0hUQUJMRV9KRChqZCkpCisgICAgICByYl9yYWlz ZShyYl9lQXJnRXJyb3IsICJjYW5ub3QgY3JlYXRlIik7CisgIH0KKyAgaWYg KGFyZ2MgPCAyKQorICAgIHNnID0gMDsKKyAgZWxzZQorICAgIHNnID0gTlVN MkRCTCh2c2cpOworCisgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxf d29fY2l2aWwoa2xhc3MsCisJCQkJCWpkLAorCQkJCQlzZywKKwkJCQkJSEFW RV9KRCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX25ld19sX2Jhbmco aW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgcmV0 dXJuIGRfbGl0ZV9zX25ld19sX2JhbmcoYXJnYywgYXJndiwgY0RhdGVMaWdo dCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX2pkKGludCBhcmdjLCBW QUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZqZCwgdnNn OworICBsb25nIGpkOworICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdz KGFyZ2MsIGFyZ3YsICIwMiIsICZ2amQsICZ2c2cpOworCisgIGlmICghRklY TlVNX1AodmpkKSkKKyAgICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgImpkX3Ii KTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBOVU0yREJMKHZz Zyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIGlmIChhcmdjID49 IDEpIHsKKyAgICBqZCA9IE5VTTJMT05HKHZqZCk7CisgICAgaWYgKCFMSUdI VEFCTEVfSkQoamQpKQorICAgICAgcmV0dXJuIGZvcndhcmQoY0RhdGUsICJq ZF9yIik7CisgIH0gZWxzZQorICAgIGpkID0gMDsKKworICBpZiAoamQgPCBz ZykKKyAgICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgImpkX3IiKTsKKworICBy ZXR1cm4gZF9saXRlX3NfbmV3X2ludGVybmFsX3dvX2NpdmlsKGNEYXRlTGln aHQsIGpkLCBzZywgSEFWRV9KRCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0 ZV9zX29yZGluYWwoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFz cykKK3sKKyAgVkFMVUUgdnksIHZkLCB2c2c7CisgIGludCB5LCBkLCByZDsK KyAgZG91YmxlIHNnOworCisgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAi MDMiLCAmdnksICZ2ZCwgJnZzZyk7CisKKyAgaWYgKCEoKE5JTF9QKHZ5KSB8 fCBGSVhOVU1fUCh2eSkpICYmCisJKE5JTF9QKHZkKSB8fCBGSVhOVU1fUCh2 ZCkpKSkKKyAgICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgIm9yZGluYWxfciIp OworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5VTTJEQkwodnNn KTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9IC00NzEyOwor ICBkID0gMTsKKworICBzd2l0Y2ggKGFyZ2MpIHsKKyAgY2FzZSAzOgorICBj YXNlIDI6CisgICAgZCA9IE5VTTJMT05HKHZkKTsKKyAgY2FzZSAxOgorICAg IHkgPSBOVU0yTE9ORyh2eSk7CisgICAgaWYgKCFMSUdIVEFCTEVfWUVBUih5 KSkKKyAgICAgIHJldHVybiBmb3J3YXJkKGNEYXRlLCAib3JkaW5hbF9yIik7 CisgIH0KKworICB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisKKyAg ICBpZiAoIXZhbGlkX29yZGluYWxfcCh5LCBkLCBzZywgJnJkLCAmamQsICZu cykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZhbGlkIGRh dGUiKTsKKworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSB8fCAhbnMpCisg ICAgICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgIm9yZGluYWxfciIpOworCisg ICAgcmV0dXJuIGRfbGl0ZV9zX25ld19pbnRlcm5hbF93b19jaXZpbChjRGF0 ZUxpZ2h0LCBqZCwgc2csIEhBVkVfSkQpOworICB9Cit9CisKK3N0YXRpYyBW QUxVRQorZGF0ZV9zX2NpdmlsKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFM VUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2bSwgdmQsIHZzZzsKKyAgaW50 IHksIG0sIGQsIHJtLCByZDsKKyAgZG91YmxlIHNnOworCisgIHJiX3NjYW5f YXJncyhhcmdjLCBhcmd2LCAiMDQiLCAmdnksICZ2bSwgJnZkLCAmdnNnKTsK KworICBpZiAoISgoTklMX1AodnkpIHx8IEZJWE5VTV9QKHZ5KSkgJiYKKwko TklMX1Aodm0pIHx8IEZJWE5VTV9QKHZtKSkgJiYKKwkoTklMX1AodmQpIHx8 IEZJWE5VTV9QKHZkKSkpKQorICAgIHJldHVybiBmb3J3YXJkKGNEYXRlLCAi Y2l2aWxfciIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5V TTJEQkwodnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9 IC00NzEyOworICBtID0gMTsKKyAgZCA9IDE7CisKKyAgc3dpdGNoIChhcmdj KSB7CisgIGNhc2UgNDoKKyAgY2FzZSAzOgorICAgIGQgPSBOVU0yTE9ORyh2 ZCk7CisgIGNhc2UgMjoKKyAgICBtID0gTlVNMkxPTkcodm0pOworICBjYXNl IDE6CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJM RV9ZRUFSKHkpKQorICAgICAgcmV0dXJuIGZvcndhcmQoY0RhdGUsICJjaXZp bF9yIik7CisgIH0KKworICBpZiAoaXNpbmYoc2cpICYmIHNnIDwgMCkgewor ICAgIGlmICghdmFsaWRfZ3JlZ29yaWFuX3AoeSwgbSwgZCwgJnJtLCAmcmQp KQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRl Iik7CisKKyAgICByZXR1cm4gZF9saXRlX3NfbmV3X2ludGVybmFsKGNEYXRl TGlnaHQsIDAsIHNnLCB5LCBybSwgcmQsIEhBVkVfQ0lWSUwpOworICB9IGVs c2UgeworICAgIGxvbmcgamQ7CisgICAgaW50IG5zOworCisgICAgaWYgKCF2 YWxpZF9jaXZpbF9wKHksIG0sIGQsIHNnLCAmcm0sICZyZCwgJmpkLCAmbnMp KQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRl Iik7CisKKyAgICBpZiAoIUxJR0hUQUJMRV9KRChqZCkgfHwgIW5zKQorICAg ICAgcmV0dXJuIGZvcndhcmQoY0RhdGUsICJjaXZpbF9yIik7CisKKyAgICBy ZXR1cm4gZF9saXRlX3NfbmV3X2ludGVybmFsKGNEYXRlTGlnaHQsIGpkLCBz ZywgeSwgcm0sIHJkLAorCQkJCSBIQVZFX0pEIHwgSEFWRV9DSVZJTCk7Cisg IH0KK30KKworc3RhdGljIFZBTFVFCitkYXRlX3NfY29tbWVyY2lhbChpbnQg YXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICBWQUxVRSB2 eSwgdncsIHZkLCB2c2c7CisgIGludCB5LCB3LCBkLCBydywgcmQ7CisgIGRv dWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjA0Iiwg JnZ5LCAmdncsICZ2ZCwgJnZzZyk7CisKKyAgaWYgKCEoKE5JTF9QKHZ5KSB8 fCBGSVhOVU1fUCh2eSkpICYmCisJKE5JTF9QKHZ3KSB8fCBGSVhOVU1fUCh2 dykpICYmCisJKE5JTF9QKHZkKSB8fCBGSVhOVU1fUCh2ZCkpKSkKKyAgICBy ZXR1cm4gZm9yd2FyZChjRGF0ZSwgImNvbW1lcmNpYWxfciIpOworCisgIGlm ICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5VTTJEQkwodnNnKTsKKyAgZWxz ZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9IC00NzEyOworICB3ID0gMTsK KyAgZCA9IDE7CisKKyAgc3dpdGNoIChhcmdjKSB7CisgIGNhc2UgNDoKKyAg Y2FzZSAzOgorICAgIGQgPSBOVU0yTE9ORyh2ZCk7CisgIGNhc2UgMjoKKyAg ICB3ID0gTlVNMkxPTkcodncpOworICBjYXNlIDE6CisgICAgeSA9IE5VTTJM T05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJMRV9DV1lFQVIoeSkpCisgICAg ICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgImNvbW1lcmNpYWxfciIpOworICB9 CisKKyAgeworICAgIGxvbmcgamQ7CisgICAgaW50IG5zOworCisgICAgaWYg KCF2YWxpZF9jb21tZXJjaWFsX3AoeSwgdywgZCwgc2csICZydywgJnJkLCAm amQsICZucykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZh bGlkIGRhdGUiKTsKKworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSB8fCAh bnMpCisgICAgICByZXR1cm4gZm9yd2FyZChjRGF0ZSwgImNvbW1lcmNpYWxf ciIpOworCisgICAgcmV0dXJuIGRfbGl0ZV9zX25ld19pbnRlcm5hbF93b19j aXZpbChjRGF0ZUxpZ2h0LCBqZCwgc2csIEhBVkVfSkQpOworICB9Cit9CisK KyNpZiAhZGVmaW5lZChIQVZFX0dNVElNRV9SKQorc3RhdGljIHN0cnVjdCB0 bSoKK2xvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdCwgc3RydWN0IHRtICp0 bSkKK3sKKyAgYXV0byBzdHJ1Y3QgdG0gKnRtcCA9IGxvY2FsdGltZSh0KTsK KyAgaWYgKHRtcCkKKyAgICAqdG0gPSAqdG1wOworICByZXR1cm4gdG1wOwor fQorI2VuZGlmCisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX3RvZGF5KGludCBh cmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZz ZzsKKyAgZG91YmxlIHNnOworICB0aW1lX3QgdDsKKyAgc3RydWN0IHRtIHRt OworICBpbnQgeSwgbSwgZDsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJn diwgIjAxIiwgJnZzZyk7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNn ID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKwor ICBpZiAodGltZSgmdCkgPT0gLTEpCisgICAgcmJfc3lzX2ZhaWwoInRpbWUi KTsKKyAgbG9jYWx0aW1lX3IoJnQsICZ0bSk7CisKKyAgeSA9IHRtLnRtX3ll YXIgKyAxOTAwOworICBtID0gdG0udG1fbW9uICsgMTsKKyAgZCA9IHRtLnRt X21kYXk7CisKKyAgaWYgKGlzaW5mKHNnKSAmJiBzZyA8IDApCisgICAgcmV0 dXJuIGRfbGl0ZV9zX25ld19pbnRlcm5hbChjRGF0ZUxpZ2h0LCAwLCBzZywg eSwgbSwgZCwgSEFWRV9DSVZJTCk7CisgIGVsc2UgeworICAgIGxvbmcgamQ7 CisgICAgaW50IG5zOworCisgICAgY2l2aWxfdG9famQoeSwgbSwgZCwgc2cs ICZqZCwgJm5zKTsKKworICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJu YWwoY0RhdGVMaWdodCwgamQsIHNnLCB5LCBtLCBkLAorCQkJCSBIQVZFX0pE IHwgSEFWRV9DSVZJTCk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkX2xp dGVfYWpkKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgZ2V0 X2RfamQoZGF0KTsKKyAgcmV0dXJuIHJiX2Z1bmNhbGwoSU5UMkZJWChkYXQt PmpkKSwgJy0nLCAxLCByaGFsZik7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9s aXRlX2FtamQoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOworICBn ZXRfZF9qZChkYXQpOworICByZXR1cm4gcmJfcmF0aW9uYWxfbmV3MShMT05H Mk5VTShkYXQtPmpkIC0gMjQwMDAwMUwpKTsKK30KKworc3RhdGljIFZBTFVF CitkX2xpdGVfamQoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOwor ICBnZXRfZF9qZChkYXQpOworICByZXR1cm4gSU5UMkZJWChkYXQtPmpkKTsK K30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfbWpkKFZBTFVFIHNlbGYpCit7 CisgIGdldF9kMShzZWxmKTsKKyAgZ2V0X2RfamQoZGF0KTsKKyAgcmV0dXJu IExPTkcyTlVNKGRhdC0+amQgLSAyNDAwMDAxTCk7Cit9CisKK3N0YXRpYyBW QUxVRQorZF9saXRlX2xkKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxm KTsKKyAgZ2V0X2RfamQoZGF0KTsKKyAgcmV0dXJuIExPTkcyTlVNKGRhdC0+ amQgLSAyMjk5MTYwTCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX3ll YXIoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOworICBnZXRfZF9j aXZpbChkYXQpOworICByZXR1cm4gSU5UMkZJWChkYXQtPnllYXIpOworfQor CitzdGF0aWMgVkFMVUUKK2RfbGl0ZV95ZGF5KFZBTFVFIHNlbGYpCit7Cisg IGludCByeSwgcmQ7CisKKyAgZ2V0X2QxKHNlbGYpOworICBnZXRfZF9qZChk YXQpOworICBqZF90b19vcmRpbmFsKGRhdC0+amQsIGRhdC0+c2csICZyeSwg JnJkKTsKKyAgcmV0dXJuIElOVDJGSVgocmQpOworfQorCitzdGF0aWMgVkFM VUUKK2RfbGl0ZV9tb24oVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYp OworICBnZXRfZF9jaXZpbChkYXQpOworICByZXR1cm4gSU5UMkZJWChkYXQt Pm1vbik7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX21kYXkoVkFMVUUg c2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOworICBnZXRfZF9jaXZpbChkYXQp OworICByZXR1cm4gSU5UMkZJWChkYXQtPm1kYXkpOworfQorCitzdGF0aWMg VkFMVUUKK2RfbGl0ZV93bnVtMChWQUxVRSBzZWxmKQoreworICBpbnQgcnks IHJ3LCByZDsKKworICBnZXRfZDEoc2VsZik7CisgIGdldF9kX2pkKGRhdCk7 CisgIGpkX3RvX3dlZWtudW0oZGF0LT5qZCwgMCwgZGF0LT5zZywgJnJ5LCAm cncsICZyZCk7CisgIHJldHVybiBJTlQyRklYKHJ3KTsKK30KKworc3RhdGlj IFZBTFVFCitkX2xpdGVfd251bTEoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5 LCBydywgcmQ7CisKKyAgZ2V0X2QxKHNlbGYpOworICBnZXRfZF9qZChkYXQp OworICBqZF90b193ZWVrbnVtKGRhdC0+amQsIDEsIGRhdC0+c2csICZyeSwg JnJ3LCAmcmQpOworICByZXR1cm4gSU5UMkZJWChydyk7Cit9CisKK3N0YXRp YyBWQUxVRQorZF9saXRlX3pvbmUoVkFMVUUgc2VsZikKK3sKKyAgcmV0dXJu IHJiX3N0cl9uZXcyKCIrMDA6MDAiKTsKK30KKworc3RhdGljIFZBTFVFCitk X2xpdGVfY3d5ZWFyKFZBTFVFIHNlbGYpCit7CisgIGludCByeSwgcncsIHJk OworCisgIGdldF9kMShzZWxmKTsKKyAgZ2V0X2RfamQoZGF0KTsKKyAgamRf dG9fY29tbWVyY2lhbChkYXQtPmpkLCBkYXQtPnNnLCAmcnksICZydywgJnJk KTsKKyAgcmV0dXJuIElOVDJGSVgocnkpOworfQorCitzdGF0aWMgVkFMVUUK K2RfbGl0ZV9jd2VlayhWQUxVRSBzZWxmKQoreworICBpbnQgcnksIHJ3LCBy ZDsKKworICBnZXRfZDEoc2VsZik7CisgIGdldF9kX2pkKGRhdCk7CisgIGpk X3RvX2NvbW1lcmNpYWwoZGF0LT5qZCwgZGF0LT5zZywgJnJ5LCAmcncsICZy ZCk7CisgIHJldHVybiBJTlQyRklYKHJ3KTsKK30KKworc3RhdGljIFZBTFVF CitkX2xpdGVfY3dkYXkoVkFMVUUgc2VsZikKK3sKKyAgaW50IHc7CisKKyAg Z2V0X2QxKHNlbGYpOworICBnZXRfZF9qZChkYXQpOworICB3ID0gamRfdG9f d2RheShkYXQtPmpkKTsKKyAgaWYgKHcgPT0gMCkKKyAgICB3ID0gNzsKKyAg cmV0dXJuIElOVDJGSVgodyk7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRl X3dkYXkoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOworICBnZXRf ZF9qZChkYXQpOworICByZXR1cm4gSU5UMkZJWChqZF90b193ZGF5KGRhdC0+ amQpKTsKK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfbGVhcF9wKFZBTFVF IHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgZ2V0X2RfY2l2aWwoZGF0 KTsKKworICByZXR1cm4gbGVhcF9wKGRhdC0+eWVhcikgPyBRdHJ1ZSA6IFFm YWxzZTsKK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfc3RhcnQoVkFMVUUg c2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOworICByZXR1cm4gREJMMk5VTShk YXQtPnNnKTsKK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfbmV3X3N0YXJ0 KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgc2VsZikKK3sKKyAgVkFM VUUgdnNnOworICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2Ms IGFyZ3YsICIwMSIsICZ2c2cpOworCisgIGlmICghTklMX1AodnNnKSkKKyAg ICBzZyA9IE5VTTJEQkwodnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7 CisKKyAgeworICAgIGdldF9kMShzZWxmKTsKKyAgICBnZXRfZF9qZChkYXQp OworCisgICAgaWYgKGRhdC0+amQgPCBzZykKKyAgICAgIHJldHVybiBmb3J3 YXJkKHRvX3JpZ2h0KHNlbGYpLCAibmV3X3N0YXJ0Iik7CisKKyAgICByZXR1 cm4gZF9saXRlX3NfbmV3X2ludGVybmFsX3dvX2NpdmlsKENMQVNTX09GKHNl bGYpLAorCQkJCQkgIGRhdC0+amQsCisJCQkJCSAgc2csCisJCQkJCSAgSEFW RV9KRCk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfbmV3X29m ZnNldChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIHNlbGYpCit7Cisg IFZBTFVFIHZvZjsKKyAgaW50IHJvZjsKKworICByYl9zY2FuX2FyZ3MoYXJn YywgYXJndiwgIjAxIiwgJnZvZik7CisKKyAgaWYgKE5JTF9QKHZvZikpCisg ICAgcm9mID0gMDsKKyAgZWxzZSB7CisgICAgaWYgKCFkYXlkaWZmX3RvX3Nl Yyh2b2YsICZyb2YpIHx8IHJvZiAhPSAwKQorICAgICAgcmV0dXJuIGZvcndh cmQodG9fcmlnaHQoc2VsZiksICJuZXdfb2Zmc2V0Iik7CisgIH0KKworICB7 CisgICAgZ2V0X2QxKHNlbGYpOworICAgIGdldF9kX2pkKGRhdCk7CisKKyAg ICByZXR1cm4gZF9saXRlX3NfbmV3X2ludGVybmFsX3dvX2NpdmlsKENMQVNT X09GKHNlbGYpLAorCQkJCQkgIGRhdC0+amQsCisJCQkJCSAgZGF0LT5zZywK KwkJCQkJICBIQVZFX0pEKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2Rf bGl0ZV9wbHVzKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVyKQoreworICBzd2l0 Y2ggKFRZUEUob3RoZXIpKSB7CisgIGNhc2UgVF9GSVhOVU06CisgICAgewor ICAgICAgbG9uZyBqZDsKKworICAgICAgZ2V0X2QxKHNlbGYpOworICAgICAg Z2V0X2RfamQoZGF0KTsKKworICAgICAgamQgPSBkYXQtPmpkICsgRklYMkxP Tkcob3RoZXIpOworCisgICAgICBpZiAoTElHSFRBQkxFX0pEKGpkKSAmJiBq ZCA+PSBkYXQtPnNnKQorCXJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWwo Q0xBU1NfT0Yoc2VsZiksCisJCQkJICAgICBqZCwgZGF0LT5zZywKKwkJCQkg ICAgIDAsIDAsIDAsCisJCQkJICAgICBkYXQtPmZsYWdzICYgfkhBVkVfQ0lW SUwpOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBUX0ZMT0FUOgorICAg IHsKKyAgICAgIGRvdWJsZSBkID0gTlVNMkRCTChvdGhlcik7CisgICAgICBs b25nIGwgPSByb3VuZChkKTsKKyAgICAgIGlmIChsID09IGQgJiYgTElHSFRB QkxFX0pEKGwpKQorCXJldHVybiBkX2xpdGVfcGx1cyhzZWxmLCBJTlQyRklY KGwpKTsKKyAgICB9CisgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIHJiX2Z1 bmNhbGwodG9fcmlnaHQoc2VsZiksICcrJywgMSwgb3RoZXIpOworfQorCitz dGF0aWMgVkFMVUUKK2RfbGl0ZV9taW51cyhWQUxVRSBzZWxmLCBWQUxVRSBv dGhlcikKK3sKKyAgaWYgKGtfZF9saXRlX3Aob3RoZXIpKSB7CisgICAgbG9u ZyBkOworICAgIGdldF9kMihzZWxmLCBvdGhlcik7CisKKyAgICBnZXRfZF9q ZChhZGF0KTsKKyAgICBnZXRfZF9qZChiZGF0KTsKKyAgICBkID0gYWRhdC0+ amQgLSBiZGF0LT5qZDsKKyAgICByZXR1cm4gcmJfcmF0aW9uYWxfbmV3MShM T05HMk5VTShkKSk7CisgIH0KKworICBzd2l0Y2ggKFRZUEUob3RoZXIpKSB7 CisgIGNhc2UgVF9GSVhOVU06CisgICAgcmV0dXJuIGRfbGl0ZV9wbHVzKHNl bGYsIExPTkcyTlVNKC1GSVgyTE9ORyhvdGhlcikpKTsKKyAgY2FzZSBUX0ZM T0FUOgorICAgIHJldHVybiBkX2xpdGVfcGx1cyhzZWxmLCBEQkwyTlVNKC1O VU0yREJMKG90aGVyKSkpOworICB9CisgIHJldHVybiByYl9mdW5jYWxsKHRv X3JpZ2h0KHNlbGYpLCAnLScsIDEsIG90aGVyKTsKK30KKworc3RhdGljIFZB TFVFCitkX2xpdGVfY21wKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVyKQorewor ICBpZiAoa19kX2xpdGVfcChvdGhlcikpIHsKKyAgICBnZXRfZDIoc2VsZiwg b3RoZXIpOworCisgICAgaWYgKGFkYXQtPmZsYWdzICYgSEFWRV9KRCAmJgor CWJkYXQtPmZsYWdzICYgSEFWRV9KRCkgeworICAgICAgaWYgKGFkYXQtPmpk ID09IGJkYXQtPmpkKQorCXJldHVybiBJTlQyRklYKDApOworICAgICAgaWYg KGFkYXQtPmpkIDwgYmRhdC0+amQpCisJcmV0dXJuIElOVDJGSVgoLTEpOwor ICAgICAgcmV0dXJuIElOVDJGSVgoMSk7CisgICAgfSBlbHNlIHsKKyAgICAg IGdldF9kX2NpdmlsKGFkYXQpOworICAgICAgZ2V0X2RfY2l2aWwoYmRhdCk7 CisgICAgICBpZiAoYWRhdC0+eWVhciA9PSBiZGF0LT55ZWFyKSB7CisJaWYg KGFkYXQtPm1vbiA9PSBiZGF0LT5tb24pIHsKKwkgIGlmIChhZGF0LT5tZGF5 ID09IGJkYXQtPm1kYXkpIHsKKwkgICAgcmV0dXJuIElOVDJGSVgoMCk7CisJ ICB9IGVsc2UgaWYgKGFkYXQtPm1kYXkgPCBiZGF0LT5tZGF5KSB7CisJICAg IHJldHVybiBJTlQyRklYKC0xKTsKKwkgIH0gZWxzZSB7CisJICAgIHJldHVy biBJTlQyRklYKDEpOworCSAgfQorCX0gZWxzZSBpZiAoYWRhdC0+bW9uIDwg YmRhdC0+bW9uKSB7CisJICByZXR1cm4gSU5UMkZJWCgtMSk7CisJfSBlbHNl IHsKKwkgIHJldHVybiBJTlQyRklYKDEpOworCX0KKyAgICAgIH0gZWxzZSBp ZiAoYWRhdC0+eWVhciA8IGJkYXQtPnllYXIpIHsKKwlyZXR1cm4gSU5UMkZJ WCgtMSk7CisgICAgICB9IGVsc2UgeworCXJldHVybiBJTlQyRklYKDEpOwor ICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoa19kYXRlX3Aob3RoZXIpKQor ICAgIHJldHVybiByYl9udW1fY29lcmNlX2NtcChkX2xpdGVfYWpkKHNlbGYp LAorCQkJICAgICByYl9mdW5jYWxsKG90aGVyLCByYl9pbnRlcm4oImFqZCIp LCAwKSwKKwkJCSAgICAgcmJfaW50ZXJuKCI8PT4iKSk7CisgIGlmIChrX251 bWVyaWNfcChvdGhlcikpCisgICAgcmV0dXJuIHJiX251bV9jb2VyY2VfY21w KGRfbGl0ZV9hamQoc2VsZiksCisJCQkgICAgIG90aGVyLAorCQkJICAgICBy Yl9pbnRlcm4oIjw9PiIpKTsKKyAgcmV0dXJuIHJiX251bV9jb2VyY2VfY21w KHNlbGYsIG90aGVyLCByYl9pbnRlcm4oIjw9PiIpKTsKK30KKworc3RhdGlj IFZBTFVFCitkX2xpdGVfZXFlcWVxKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVy KQoreworICBpZiAoa19kX2xpdGVfcChvdGhlcikpIHsKKyAgICBnZXRfZDIo c2VsZiwgb3RoZXIpOworCisgICAgaWYgKGFkYXQtPmZsYWdzICYgSEFWRV9K RCAmJgorCWJkYXQtPmZsYWdzICYgSEFWRV9KRCkgeworICAgICAgaWYgKGFk YXQtPmpkID09IGJkYXQtPmpkKQorCXJldHVybiBRdHJ1ZTsKKyAgICAgIHJl dHVybiBRZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgIGdldF9kX2Npdmls KGFkYXQpOworICAgICAgZ2V0X2RfY2l2aWwoYmRhdCk7CisgICAgICBpZiAo YWRhdC0+eWVhciA9PSBiZGF0LT55ZWFyKQorCWlmIChhZGF0LT5tb24gPT0g YmRhdC0+bW9uKQorCSAgaWYgKGFkYXQtPm1kYXkgPT0gYmRhdC0+bWRheSkK KwkgICAgcmV0dXJuIFF0cnVlOworICAgICAgcmV0dXJuIFFmYWxzZTsKKyAg ICB9CisgIH0KKyAgaWYgKGtfZGF0ZV9wKG90aGVyKSkKKyAgICByZXR1cm4g cmJfbnVtX2NvZXJjZV9jbXAoZF9saXRlX2pkKHNlbGYpLAorCQkJICAgICBy Yl9mdW5jYWxsKG90aGVyLCByYl9pbnRlcm4oImpkIiksIDApLAorCQkJICAg ICByYl9pbnRlcm4oIj09IikpOworICBpZiAoa19udW1lcmljX3Aob3RoZXIp KQorICAgIHJldHVybiByYl9udW1fY29lcmNlX2NtcChkX2xpdGVfamQoc2Vs ZiksCisJCQkgICAgIG90aGVyLAorCQkJICAgICByYl9pbnRlcm4oIj09Iikp OworICByZXR1cm4gcmJfbnVtX2NvZXJjZV9jbXAoc2VsZiwgb3RoZXIsIHJi X2ludGVybigiPT09IikpOworfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9l cWxfcChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgaWYgKGtfZF9s aXRlX3Aob3RoZXIpKSB7CisgICAgZ2V0X2QyKHNlbGYsIG90aGVyKTsKKwor ICAgIGlmIChhZGF0LT5mbGFncyAmIEhBVkVfSkQgJiYKKwliZGF0LT5mbGFn cyAmIEhBVkVfSkQpIHsKKyAgICAgIGlmIChhZGF0LT5qZCA9PSBiZGF0LT5q ZCkKKwlyZXR1cm4gUXRydWU7CisgICAgICByZXR1cm4gUWZhbHNlOworICAg IH0gZWxzZSB7CisgICAgICBnZXRfZF9jaXZpbChhZGF0KTsKKyAgICAgIGdl dF9kX2NpdmlsKGJkYXQpOworICAgICAgaWYgKGFkYXQtPnllYXIgPT0gYmRh dC0+eWVhcikKKwlpZiAoYWRhdC0+bW9uID09IGJkYXQtPm1vbikKKwkgIGlm IChhZGF0LT5tZGF5ID09IGJkYXQtPm1kYXkpCisJICAgIHJldHVybiBRdHJ1 ZTsKKyAgICAgIHJldHVybiBRZmFsc2U7CisgICAgfQorICB9CisgIGlmIChr X2RhdGVfcChvdGhlcikpCisgICAgcmV0dXJuIHJiX251bV9jb2VyY2VfY21w KGRfbGl0ZV9hamQoc2VsZiksCisJCQkgICAgIHJiX2Z1bmNhbGwob3RoZXIs IHJiX2ludGVybigiYWpkIiksIDApLAorCQkJICAgICByYl9pbnRlcm4oIj09 IikpOworICByZXR1cm4gUWZhbHNlOworfQorCitzdGF0aWMgVkFMVUUKK2Rf bGl0ZV9oYXNoKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKwor ICByZXR1cm4gcmJfZnVuY2FsbChkX2xpdGVfYWpkKHNlbGYpLCByYl9pbnRl cm4oImhhc2giKSwgMCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX3Rv X3MoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOworICBnZXRfZF9j aXZpbChkYXQpOworICByZXR1cm4gcmJfc3ByaW50ZigiJS40ZC0lMDJkLSUw MmQiLCBkYXQtPnllYXIsIGRhdC0+bW9uLCBkYXQtPm1kYXkpOworfQorCitz dGF0aWMgVkFMVUUKK2RfbGl0ZV9pbnNwZWN0KFZBTFVFIHNlbGYpCit7Cisg IGdldF9kMShzZWxmKTsKKyAgZ2V0X2RfY2l2aWwoZGF0KTsKKyAgZ2V0X2Rf amQoZGF0KTsKKyAgcmV0dXJuIHJiX3NwcmludGYoIiM8RGF0ZTo6TGlnaHQ6 ICUuNGQtJTAyZC0lMDJkICglbGRqLDAsJS4wZik+IiwKKwkJICAgIGRhdC0+ eWVhciwgZGF0LT5tb24sIGRhdC0+bWRheSwgZGF0LT5qZCwgZGF0LT5zZyk7 Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX3plcm8oVkFMVUUgc2VsZikK K3sKKyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBWQUxVRQor ZF9saXRlX3J6ZXJvKFZBTFVFIHNlbGYpCit7CisgIHJldHVybiByemVybzsK K30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfZmFsc2UoVkFMVUUgc2VsZikK K3sKKyAgcmV0dXJuIFFmYWxzZTsKK30KKworc3RhdGljIFZBTFVFCitkX2xp dGVfdHJ1ZShWQUxVRSBzZWxmKQoreworICByZXR1cm4gUXRydWU7Cit9CisK K3N0YXRpYyBWQUxVRQorZF9saXRlX21hcnNoYWxfZHVtcChWQUxVRSBzZWxm KQoreworICBWQUxVRSBhOworCisgIGdldF9kMShzZWxmKTsKKyAgZ2V0X2Rf amQoZGF0KTsKKyAgYSA9IHJiX2Fzc29jX25ldyhJTlQyRklYKGRhdC0+amQp LCBEQkwyTlVNKGRhdC0+c2cpKTsKKworICBpZiAoRkxfVEVTVChzZWxmLCBG TF9FWElWQVIpKSB7CisgICAgcmJfY29weV9nZW5lcmljX2l2YXIoYSwgc2Vs Zik7CisgICAgRkxfU0VUKGEsIEZMX0VYSVZBUik7CisgIH0KKworICByZXR1 cm4gYTsKK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfbWFyc2hhbF9sb2Fk KFZBTFVFIHNlbGYsIFZBTFVFIGEpCit7CisgIGdldF9kMShzZWxmKTsKKwor ICBkYXQtPmpkID0gRklYMklOVChSQVJSQVlfUFRSKGEpWzBdKTsKKyAgZGF0 LT5zZyA9IE5VTTJEQkwoUkFSUkFZX1BUUihhKVsxXSk7CisgIGRhdC0+eWVh ciA9IDA7CisgIGRhdC0+bW9uID0gMDsKKyAgZGF0LT5tZGF5ID0gMDsKKyAg ZGF0LT5mbGFncyB8PSBIQVZFX0pEOworCisgIGlmIChGTF9URVNUKGEsIEZM X0VYSVZBUikpIHsKKyAgICByYl9jb3B5X2dlbmVyaWNfaXZhcihzZWxmLCBh KTsKKyAgICBGTF9TRVQoc2VsZiwgRkxfRVhJVkFSKTsKKyAgfQorCisgIHJl dHVybiBzZWxmOworfQorCisvKiBkYXRldGltZSBsaWdodCAqLworCitpbmxp bmUgc3RhdGljIFZBTFVFCitkdF9saXRlX3NfbmV3X2ludGVybmFsKFZBTFVF IGtsYXNzLCBsb25nIGpkLCBpbnQgZGYsCisJCSAgICAgICBsb25nIGxvbmcg c2YsIGludCBvZiwgZG91YmxlIHNnLAorCQkgICAgICAgaW50IHksIGludCBt LCBpbnQgZCwKKwkJICAgICAgIGludCBoLCBpbnQgbWluLCBpbnQgcywKKwkJ ICAgICAgIHVuc2lnbmVkIGZsYWdzKQoreworICBzdHJ1Y3QgRGF0ZVRpbWVM aWdodERhdGEgKmRhdDsKKyAgVkFMVUUgb2JqOworCisgIG9iaiA9IERhdGFf TWFrZV9TdHJ1Y3Qoa2xhc3MsIHN0cnVjdCBEYXRlVGltZUxpZ2h0RGF0YSwg MCwgLTEsIGRhdCk7CisKKyAgZGF0LT5qZCA9IGpkOworICBkYXQtPmRmID0g ZGY7CisgIGRhdC0+c2YgPSBzZjsKKyAgZGF0LT5vZiA9IG9mOworICBkYXQt PnNnID0gc2c7CisgIGRhdC0+eWVhciA9IHk7CisgIGRhdC0+bW9uID0gbTsK KyAgZGF0LT5tZGF5ID0gZDsKKyAgZGF0LT5ob3VyID0gaDsKKyAgZGF0LT5t aW4gPSBtaW47CisgIGRhdC0+c2VjID0gczsKKyAgZGF0LT5mbGFncyA9IGZs YWdzOworCisgIHJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRf bGl0ZV9zX25ld19pbnRlcm5hbF93b19jaXZpbChWQUxVRSBrbGFzcywgbG9u ZyBqZCwgaW50IGRmLAorCQkJCWxvbmcgbG9uZyBzZiwgaW50IG9mLCBkb3Vi bGUgc2csCisJCQkJdW5zaWduZWQgZmxhZ3MpCit7CisgIHJldHVybiBkdF9s aXRlX3NfbmV3X2ludGVybmFsKGtsYXNzLCBqZCwgZGYsIHNmLCBvZiwgc2cs CisJCQkJMCwgMCwgMCwgMCwgMCwgMCwgZmxhZ3MpOworfQorCitzdGF0aWMg VkFMVUUKK2R0X2xpdGVfc19hbGxvYyhWQUxVRSBrbGFzcykKK3sKKyAgcmV0 dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2aWwoa2xhc3MsIDAs IDAsIDAsIDAsIDAsIDApOworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVf c19uZXdfbF9iYW5nKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xh c3MpCit7CisgIFZBTFVFIHZqZCwgdmRmLCB2c2YsIHZvZiwgdnNnOworCisg IHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDUiLCAmdmpkLCAmdmRmLCAm dnNmLCAmdm9mLCAmdnNnKTsKKworICBpZiAoYXJnYyA8IDEpCisgICAgdmpk ID0gSU5UMkZJWCgwKTsKKyAgaWYgKGFyZ2MgPCAyKQorICAgIHZkZiA9IElO VDJGSVgoMCk7CisgIGlmIChhcmdjIDwgMykKKyAgICB2c2YgPSBJTlQyRklY KDApOworICBpZiAoYXJnYyA8IDQpCisgICAgdm9mID0gSU5UMkZJWCgwKTsK KyAgaWYgKGFyZ2MgPCA1KQorICAgIHZzZyA9IElOVDJGSVgoMCk7CisKKyAg aWYgKCFGSVhOVU1fUCh2amQpIHx8CisgICAgICAhRklYTlVNX1AodmRmKSB8 fAorICAgICAgIUZJWE5VTV9QKHZzZikgfHwKKyAgICAgICFGSVhOVU1fUCh2 b2YpKQorICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgImNhbm5vdCBjcmVh dGUiKTsKKworICByZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbF93b19j aXZpbChrbGFzcywKKwkJCQkJIEZJWDJJTlQodmpkKSwKKwkJCQkJIEZJWDJJ TlQodmRmKSwKKwkJCQkJIEZJWDJJTlQodnNmKSwKKwkJCQkJIEZJWDJJTlQo dm9mKSwKKwkJCQkJIE5VTTJEQkwodnNnKSwKKwkJCQkJIEhBVkVfSkQgfCBI QVZFX0RGKTsKK30KKworc3RhdGljIFZBTFVFCitkYXRldGltZV9zX25ld19s X2JhbmcoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykKK3sK KyAgcmV0dXJuIGR0X2xpdGVfc19uZXdfbF9iYW5nKGFyZ2MsIGFyZ3YsIGNE YXRlVGltZUxpZ2h0KTsKK30KKworc3RhdGljIFZBTFVFCitkYXRldGltZV9z X2pkKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCit7Cisg IFZBTFVFIHZqZCwgdmgsIHZtaW4sIHZzLCB2b2YsIHZzZzsKKyAgbG9uZyBq ZDsKKyAgaW50IGgsIG1pbiwgcywgcmgsIHJtaW4sIHJzLCByb2Y7CisgIGRv dWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjA2Iiwg JnZqZCwgJnZoLCAmdm1pbiwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAo IUZJWE5VTV9QKHZqZCkpCisgICAgcmV0dXJuIGZvcndhcmQoY0RhdGVUaW1l LCAiamRfciIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5V TTJEQkwodnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisKKyAgamQg PSBoID0gbWluID0gcyA9IDA7CisgIHJvZiA9IDA7CisKKyAgc3dpdGNoIChh cmdjKSB7CisgIGNhc2UgNjoKKyAgY2FzZSA1OgorICAgIGlmICghZGF5ZGlm Zl90b19zZWModm9mLCAmcm9mKSkKKyAgICAgIHJldHVybiBmb3J3YXJkKGNE YXRlVGltZSwgImpkX3IiKTsKKyAgY2FzZSA0OgorICAgIHMgPSBOVU0yTE9O Ryh2cyk7CisgIGNhc2UgMzoKKyAgICBtaW4gPSBOVU0yTE9ORyh2bWluKTsK KyAgY2FzZSAyOgorICAgIGggPSBOVU0yTE9ORyh2aCk7CisgIGNhc2UgMToK KyAgICBqZCA9IE5VTTJMT05HKHZqZCk7CisgICAgaWYgKCFMSUdIVEFCTEVf SkQoamQpKQorICAgICAgcmV0dXJuIGZvcndhcmQoY0RhdGVUaW1lLCAiamRf ciIpOworICB9CisKKyAgaWYgKGpkIDwgc2cpCisgICAgcmV0dXJuIGZvcndh cmQoY0RhdGVUaW1lLCAiamRfciIpOworCisgIGlmICghdmFsaWRfdGltZV9w KGgsIG1pbiwgcywgJnJoLCAmcm1pbiwgJnJzKSkKKyAgICByYl9yYWlzZShy Yl9lQXJnRXJyb3IsICJpbnZhbGlkIGRhdGUiKTsKKworICByZXR1cm4gZHRf bGl0ZV9zX25ld19pbnRlcm5hbChjRGF0ZVRpbWVMaWdodCwKKwkJCQlqZF9s b2NhbF90b191dGMoamQsCisJCQkJCQl0aW1lX3RvX2RmKHJoLCBybWluLCBy cyksCisJCQkJCQlyb2YpLAorCQkJCTAsIDAsIHJvZiwgc2csIDAsIDAsIDAs IHJoLCBybWluLCBycywKKwkJCQlIQVZFX0pEIHwgSEFWRV9USU1FKTsKK30K Kworc3RhdGljIFZBTFVFCitkYXRldGltZV9zX29yZGluYWwoaW50IGFyZ2Ms IFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUgdnksIHZk LCB2aCwgdm1pbiwgdnMsIHZvZiwgdnNnOworICBpbnQgeSwgZCwgcmQsIGgs IG1pbiwgcywgcmgsIHJtaW4sIHJzLCByb2Y7CisgIGRvdWJsZSBzZzsKKwor ICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjA3IiwgJnZ5LCAmdmQsICZ2 aCwgJnZtaW4sICZ2cywgJnZvZiwgJnZzZyk7CisKKyAgaWYgKCEoKE5JTF9Q KHZ5KSAgIHx8IEZJWE5VTV9QKHZ5KSkgJiYKKwkoTklMX1AodmQpICAgfHwg RklYTlVNX1AodmQpKSAmJgorCShOSUxfUCh2aCkgICB8fCBGSVhOVU1fUCh2 aCkpICYmCisJKE5JTF9QKHZtaW4pIHx8IEZJWE5VTV9QKHZtaW4pKSAmJgor CShOSUxfUCh2cykgICB8fCBGSVhOVU1fUCh2cykpKSkKKyAgICByZXR1cm4g Zm9yd2FyZChjRGF0ZVRpbWUsICJvcmRpbmFsX3IiKTsKKworICBpZiAoIU5J TF9QKHZzZykpCisgICAgc2cgPSBOVU0yREJMKHZzZyk7CisgIGVsc2UKKyAg ICBzZyA9IElUQUxZOworCisgIHkgPSAtNDcxMjsKKyAgZCA9IDE7CisKKyAg aCA9IG1pbiA9IHMgPSAwOworICByb2YgPSAwOworCisgIHN3aXRjaCAoYXJn YykgeworICBjYXNlIDc6CisgIGNhc2UgNjoKKyAgICBpZiAoIWRheWRpZmZf dG9fc2VjKHZvZiwgJnJvZikpCisgICAgICByZXR1cm4gZm9yd2FyZChjRGF0 ZVRpbWUsICJvcmRpbmFsX3IiKTsKKyAgY2FzZSA1OgorICAgIHMgPSBOVU0y TE9ORyh2cyk7CisgIGNhc2UgNDoKKyAgICBtaW4gPSBOVU0yTE9ORyh2bWlu KTsKKyAgY2FzZSAzOgorICAgIGggPSBOVU0yTE9ORyh2aCk7CisgIGNhc2Ug MjoKKyAgICBkID0gTlVNMkxPTkcodmQpOworICBjYXNlIDE6CisgICAgeSA9 IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJMRV9ZRUFSKHkpKQor ICAgICAgcmV0dXJuIGZvcndhcmQoY0RhdGVUaW1lLCAib3JkaW5hbF9yIik7 CisgIH0KKworICB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisKKyAg ICBpZiAoIXZhbGlkX29yZGluYWxfcCh5LCBkLCBzZywgJnJkLCAmamQsICZu cykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZhbGlkIGRh dGUiKTsKKyAgICBpZiAoIXZhbGlkX3RpbWVfcChoLCBtaW4sIHMsICZyaCwg JnJtaW4sICZycykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJp bnZhbGlkIGRhdGUiKTsKKworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSB8 fCAhbnMpCisgICAgICByZXR1cm4gZm9yd2FyZChjRGF0ZVRpbWUsICJvcmRp bmFsX3IiKTsKKworICAgIHJldHVybiBkdF9saXRlX3NfbmV3X2ludGVybmFs KGNEYXRlVGltZUxpZ2h0LAorCQkJCSAgamRfbG9jYWxfdG9fdXRjKGpkLAor CQkJCQkJICB0aW1lX3RvX2RmKHJoLCBybWluLCBycyksCisJCQkJCQkgIHJv ZiksCisJCQkJICAwLCAwLCByb2YsIHNnLAorCQkJCSAgMCwgMCwgMCwgcmgs IHJtaW4sIHJzLAorCQkJCSAgSEFWRV9KRCB8IEhBVkVfVElNRSk7CisgIH0K K30KKworc3RhdGljIFZBTFVFCitkYXRldGltZV9zX2NpdmlsKGludCBhcmdj LCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2 bSwgdmQsIHZoLCB2bWluLCB2cywgdm9mLCB2c2c7CisgIGludCB5LCBtLCBk LCBybSwgcmQsIGgsIG1pbiwgcywgcmgsIHJtaW4sIHJzLCByb2Y7CisgIGRv dWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjA4Iiwg JnZ5LCAmdm0sICZ2ZCwgJnZoLCAmdm1pbiwgJnZzLCAmdm9mLCAmdnNnKTsK KworICBpZiAoISgoTklMX1AodnkpICAgfHwgRklYTlVNX1AodnkpKSAmJgor CShOSUxfUCh2bSkgICB8fCBGSVhOVU1fUCh2bSkpICYmCisJKE5JTF9QKHZk KSAgIHx8IEZJWE5VTV9QKHZkKSkgJiYKKwkoTklMX1AodmgpICAgfHwgRklY TlVNX1AodmgpKSAmJgorCShOSUxfUCh2bWluKSB8fCBGSVhOVU1fUCh2bWlu KSkgJiYKKwkoTklMX1AodnMpICAgfHwgRklYTlVNX1AodnMpKSkpCisgICAg cmV0dXJuIGZvcndhcmQoY0RhdGVUaW1lLCAiY2l2aWxfciIpOworCisgIGlm ICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5VTTJEQkwodnNnKTsKKyAgZWxz ZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9IC00NzEyOworICBtID0gMTsK KyAgZCA9IDE7CisKKyAgaCA9IG1pbiA9IHMgPSAwOworICByb2YgPSAwOwor CisgIHN3aXRjaCAoYXJnYykgeworICBjYXNlIDg6CisgIGNhc2UgNzoKKyAg ICBpZiAoIWRheWRpZmZfdG9fc2VjKHZvZiwgJnJvZikpCisgICAgICByZXR1 cm4gZm9yd2FyZChjRGF0ZVRpbWUsICJjaXZpbF9yIik7CisgIGNhc2UgNjoK KyAgICBzID0gTlVNMkxPTkcodnMpOworICBjYXNlIDU6CisgICAgbWluID0g TlVNMkxPTkcodm1pbik7CisgIGNhc2UgNDoKKyAgICBoID0gTlVNMkxPTkco dmgpOworICBjYXNlIDM6CisgICAgZCA9IE5VTTJMT05HKHZkKTsKKyAgY2Fz ZSAyOgorICAgIG0gPSBOVU0yTE9ORyh2bSk7CisgIGNhc2UgMToKKyAgICB5 ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRBQkxFX1lFQVIoeSkp CisgICAgICByZXR1cm4gZm9yd2FyZChjRGF0ZVRpbWUsICJjaXZpbF9yIik7 CisgIH0KKworICBpZiAoaXNpbmYoc2cpICYmIHNnIDwgMCkgeworICAgIGlm ICghdmFsaWRfZ3JlZ29yaWFuX3AoeSwgbSwgZCwgJnJtLCAmcmQpKQorICAg ICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7Cisg ICAgaWYgKCF2YWxpZF90aW1lX3AoaCwgbWluLCBzLCAmcmgsICZybWluLCAm cnMpKQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBk YXRlIik7CisKKyAgICByZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbChj RGF0ZVRpbWVMaWdodCwgMCwgMCwgMCwgcm9mLCBzZywKKwkJCQkgIHksIHJt LCByZCwgcmgsIHJtaW4sIHJzLAorCQkJCSAgSEFWRV9DSVZJTCB8IEhBVkVf VElNRSk7CisgIH0gZWxzZSB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7 CisKKyAgICBpZiAoIXZhbGlkX2NpdmlsX3AoeSwgbSwgZCwgc2csICZybSwg JnJkLCAmamQsICZucykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3Is ICJpbnZhbGlkIGRhdGUiKTsKKyAgICBpZiAoIXZhbGlkX3RpbWVfcChoLCBt aW4sIHMsICZyaCwgJnJtaW4sICZycykpCisgICAgICByYl9yYWlzZShyYl9l QXJnRXJyb3IsICJpbnZhbGlkIGRhdGUiKTsKKworICAgIGlmICghTElHSFRB QkxFX0pEKGpkKSB8fCAhbnMpCisgICAgICByZXR1cm4gZm9yd2FyZChjRGF0 ZVRpbWUsICJjaXZpbF9yIik7CisKKyAgICByZXR1cm4gZHRfbGl0ZV9zX25l d19pbnRlcm5hbChjRGF0ZVRpbWVMaWdodCwKKwkJCQkgIGpkX2xvY2FsX3Rv X3V0YyhqZCwKKwkJCQkJCSAgdGltZV90b19kZihyaCwgcm1pbiwgcnMpLAor CQkJCQkJICByb2YpLAorCQkJCSAgMCwgMCwgcm9mLCBzZywKKwkJCQkgIHks IHJtLCByZCwgcmgsIHJtaW4sIHJzLAorCQkJCSAgSEFWRV9KRCB8IEhBVkVf Q0lWSUwgfCBIQVZFX1RJTUUpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQor ZGF0ZXRpbWVfc19jb21tZXJjaWFsKGludCBhcmdjLCBWQUxVRSAqYXJndiwg VkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2dywgdmQsIHZoLCB2bWlu LCB2cywgdm9mLCB2c2c7CisgIGludCB5LCB3LCBkLCBydywgcmQsIGgsIG1p biwgcywgcmgsIHJtaW4sIHJzLCByb2Y7CisgIGRvdWJsZSBzZzsKKworICBy Yl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjA4IiwgJnZ5LCAmdncsICZ2ZCwg JnZoLCAmdm1pbiwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAoISgoTklM X1AodnkpICAgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2dykgICB8 fCBGSVhOVU1fUCh2dykpICYmCisJKE5JTF9QKHZkKSAgIHx8IEZJWE5VTV9Q KHZkKSkgJiYKKwkoTklMX1AodmgpICAgfHwgRklYTlVNX1AodmgpKSAmJgor CShOSUxfUCh2bWluKSB8fCBGSVhOVU1fUCh2bWluKSkgJiYKKwkoTklMX1Ao dnMpICAgfHwgRklYTlVNX1AodnMpKSkpCisgICAgcmV0dXJuIGZvcndhcmQo Y0RhdGVUaW1lLCAiY29tbWVyY2lhbF9yIik7CisKKyAgaWYgKCFOSUxfUCh2 c2cpKQorICAgIHNnID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cg PSBJVEFMWTsKKworICB5ID0gLTQ3MTI7CisgIHcgPSAxOworICBkID0gMTsK KworICBoID0gbWluID0gcyA9IDA7CisgIHJvZiA9IDA7CisKKyAgc3dpdGNo IChhcmdjKSB7CisgIGNhc2UgODoKKyAgY2FzZSA3OgorICAgIGlmICghZGF5 ZGlmZl90b19zZWModm9mLCAmcm9mKSkKKyAgICAgIHJldHVybiBmb3J3YXJk KGNEYXRlVGltZSwgImNvbW1lcmNpYWxfciIpOworICBjYXNlIDY6CisgICAg cyA9IE5VTTJMT05HKHZzKTsKKyAgY2FzZSA1OgorICAgIG1pbiA9IE5VTTJM T05HKHZtaW4pOworICBjYXNlIDQ6CisgICAgaCA9IE5VTTJMT05HKHZoKTsK KyAgY2FzZSAzOgorICAgIGQgPSBOVU0yTE9ORyh2ZCk7CisgIGNhc2UgMjoK KyAgICB3ID0gTlVNMkxPTkcodncpOworICBjYXNlIDE6CisgICAgeSA9IE5V TTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJMRV9DV1lFQVIoeSkpCisg ICAgICByZXR1cm4gZm9yd2FyZChjRGF0ZVRpbWUsICJjb21tZXJjaWFsX3Ii KTsKKyAgfQorCisgIHsKKyAgICBsb25nIGpkOworICAgIGludCBuczsKKwor ICAgIGlmICghdmFsaWRfY29tbWVyY2lhbF9wKHksIHcsIGQsIHNnLCAmcncs ICZyZCwgJmpkLCAmbnMpKQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9y LCAiaW52YWxpZCBkYXRlIik7CisgICAgaWYgKCF2YWxpZF90aW1lX3AoaCwg bWluLCBzLCAmcmgsICZybWluLCAmcnMpKQorICAgICAgcmJfcmFpc2UocmJf ZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisKKyAgICBpZiAoIUxJR0hU QUJMRV9KRChqZCkgfHwgIW5zKQorICAgICAgcmV0dXJuIGZvcndhcmQoY0Rh dGVUaW1lLCAiY29tbWVyY2lhbF9yIik7CisKKyAgICByZXR1cm4gZHRfbGl0 ZV9zX25ld19pbnRlcm5hbChjRGF0ZVRpbWVMaWdodCwKKwkJCQkgIGpkX2xv Y2FsX3RvX3V0YyhqZCwKKwkJCQkJCSAgdGltZV90b19kZihyaCwgcm1pbiwg cnMpLAorCQkJCQkJICByb2YpLAorCQkJCSAgMCwgMCwgcm9mLCBzZywKKwkJ CQkgIDAsIDAsIDAsIHJoLCBybWluLCBycywKKwkJCQkgIEhBVkVfSkQgfCBI QVZFX1RJTUUpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZXRpbWVf c19ub3coaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykKK3sK KyAgVkFMVUUgdnNnOworICBkb3VibGUgc2c7CisjaWZkZWYgSEFWRV9DTE9D S19HRVRUSU1FCisgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyNlbHNlCisgIHN0 cnVjdCB0aW1ldmFsIHR2OworI2VuZGlmCisgIHN0cnVjdCB0bSB0bTsKKyAg aW50IHksIG0sIGQsIGgsIG1pbiwgcywgb2YsIHNmOworCisgIHJiX3NjYW5f YXJncyhhcmdjLCBhcmd2LCAiMDEiLCAmdnNnKTsKKworICBpZiAoIU5JTF9Q KHZzZykpCisgICAgc2cgPSBOVU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBz ZyA9IElUQUxZOworCisjaWZkZWYgSEFWRV9DTE9DS19HRVRUSU1FCisgIGlm IChjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpID09IC0xKQor ICAgIHJiX3N5c19mYWlsKCJjbG9ja19nZXR0aW1lIik7CisgIGxvY2FsdGlt ZV9yKCZ0cy50dl9zZWMsICZ0bSk7CisjZWxzZQorICBpZiAoZ2V0dGltZW9m ZGF5KCZ0diwgTlVMTCkgPT0gLTEpCisgICAgcmJfc3lzX2ZhaWwoImdldHRp bWVvZmRheSIpOworICBsb2NhbHRpbWVfcigmdHYudHZfc2VjLCAmdG0pOwor I2VuZGlmCisKKyAgeSA9IHRtLnRtX3llYXIgKyAxOTAwOworICBtID0gdG0u dG1fbW9uICsgMTsKKyAgZCA9IHRtLnRtX21kYXk7CisgIGggPSB0bS50bV9o b3VyOworICBtaW4gPSB0bS50bV9taW47CisgIHMgPSB0bS50bV9zZWM7Cisg IGlmIChzID09IDYwKQorICAgIHMgPSA1OTsKKyNpZmRlZiBIQVZFX1NUUlVD VF9UTV9UTV9HTVRPRkYKKyAgb2YgPSB0bS50bV9nbXRvZmY7CisjZWxzZQor ICBvZiA9IChpbnQpLXRpbWV6b25lOworI2VuZGlmCisjaWZkZWYgSEFWRV9D TE9DS19HRVRUSU1FCisgIHNmID0gdHMudHZfbnNlYzsKKyNlbHNlCisgIHNm ID0gdHYudHZfdXNlYyAqIDEwMDA7CisjZW5kaWYKKworICBpZiAoaXNpbmYo c2cpICYmIHNnIDwgMCkKKyAgICByZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRl cm5hbChjRGF0ZVRpbWVMaWdodCwgMCwgMCwgc2YsIG9mLCBzZywKKwkJCQkg IHksIG0sIGQsIGgsIG1pbiwgcywKKwkJCQkgIEhBVkVfQ0lWSUwgfCBIQVZF X1RJTUUpOworICBlbHNlIHsKKyAgICBsb25nIGpkOworICAgIGludCBuczsK KworICAgIGNpdmlsX3RvX2pkKHksIG0sIGQsIHNnLCAmamQsICZucyk7CisK KyAgICByZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbChjRGF0ZVRpbWVM aWdodCwKKwkJCQkgIGpkX2xvY2FsX3RvX3V0YyhqZCwKKwkJCQkJCSAgdGlt ZV90b19kZihoLCBtaW4sIHMpLAorCQkJCQkJICBvZiksCisJCQkJICAwLCBz Ziwgb2YsIHNnLAorCQkJCSAgeSwgbSwgZCwgaCwgbWluLCBzLAorCQkJCSAg SEFWRV9KRCB8IEhBVkVfQ0lWSUwgfCBIQVZFX1RJTUUpOworICB9Cit9CisK K3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9hamQoVkFMVUUgc2VsZikKK3sKKyAg VkFMVUUgcjsKKworICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfamQoZGF0 KTsKKyAgZ2V0X2R0X2RmKGRhdCk7CisgIHIgPSByYl9mdW5jYWxsKElOVDJG SVgoZGF0LT5qZCksICctJywgMSwgcmhhbGYpOworICBpZiAoZGF0LT5kZikK KyAgICByID0gcmJfZnVuY2FsbChyLCAnKycsIDEsCisJCSAgIHJiX3JhdGlv bmFsX25ldzIoSU5UMkZJWChkYXQtPmRmKSwKKwkJCQkgICAgSU5UMkZJWChE QVlfSU5fU0VDT05EUykpKTsKKyAgaWYgKGRhdC0+c2YpCisgICAgciA9IHJi X2Z1bmNhbGwociwgJysnLCAxLAorCQkgICByYl9yYXRpb25hbF9uZXcyKElO VDJGSVgoZGF0LT5zZiksCisJCQkJICAgIHJiX2xsMmludW0oREFZX0lOX05B Tk9TRUNPTkRTKSkpOworICByZXR1cm4gcjsKK30KKworc3RhdGljIFZBTFVF CitkdF9saXRlX2FtamQoVkFMVUUgc2VsZikKK3sKKyAgVkFMVUUgcjsKKwor ICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfamQoZGF0KTsKKyAgZ2V0X2R0 X2RmKGRhdCk7CisgIHIgPSByYl9yYXRpb25hbF9uZXcxKExPTkcyTlVNKGRh dC0+amQgLSAyNDAwMDAxTCkpOworICBpZiAoZGF0LT5kZikKKyAgICByID0g cmJfZnVuY2FsbChyLCAnKycsIDEsCisJCSAgIHJiX3JhdGlvbmFsX25ldzIo SU5UMkZJWChkYXQtPmRmKSwKKwkJCQkgICAgSU5UMkZJWChEQVlfSU5fU0VD T05EUykpKTsKKyAgaWYgKGRhdC0+c2YpCisgICAgciA9IHJiX2Z1bmNhbGwo ciwgJysnLCAxLAorCQkgICByYl9yYXRpb25hbF9uZXcyKElOVDJGSVgoZGF0 LT5zZiksCisJCQkJICAgIHJiX2xsMmludW0oREFZX0lOX05BTk9TRUNPTkRT KSkpOworICByZXR1cm4gcjsKK30KKworI2RlZmluZSBsb2NhbF9qZCBqZF91 dGNfdG9fbG9jYWwoZGF0LT5qZCwgZGF0LT5kZiwgZGF0LT5vZikKKyNkZWZp bmUgbG9jYWxfZGYgZGZfdXRjX3RvX2xvY2FsKGRhdC0+ZGYsIGRhdC0+b2Yp CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9qZChWQUxVRSBzZWxmKQorewor ICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfamQoZGF0KTsKKyAgZ2V0X2R0 X2RmKGRhdCk7CisgIHJldHVybiBJTlQyRklYKGxvY2FsX2pkKTsKK30KKwor c3RhdGljIFZBTFVFCitkdF9saXRlX21qZChWQUxVRSBzZWxmKQoreworICBn ZXRfZHQxKHNlbGYpOworICBnZXRfZHRfamQoZGF0KTsKKyAgZ2V0X2R0X2Rm KGRhdCk7CisgIHJldHVybiBMT05HMk5VTShsb2NhbF9qZCAtIDI0MDAwMDFM KTsKK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX2xkKFZBTFVFIHNlbGYp Cit7CisgIGdldF9kdDEoc2VsZik7CisgIGdldF9kdF9qZChkYXQpOworICBn ZXRfZHRfZGYoZGF0KTsKKyAgcmV0dXJuIExPTkcyTlVNKGxvY2FsX2pkIC0g MjI5OTE2MEwpOworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfeWVhcihW QUxVRSBzZWxmKQoreworICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfY2l2 aWwoZGF0KTsKKyAgcmV0dXJuIElOVDJGSVgoZGF0LT55ZWFyKTsKK30KKwor c3RhdGljIFZBTFVFCitkdF9saXRlX3lkYXkoVkFMVUUgc2VsZikKK3sKKyAg aW50IHJ5LCByZDsKKworICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfamQo ZGF0KTsKKyAgZ2V0X2R0X2RmKGRhdCk7CisgIGpkX3RvX29yZGluYWwobG9j YWxfamQsIGRhdC0+c2csICZyeSwgJnJkKTsKKyAgcmV0dXJuIElOVDJGSVgo cmQpOworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfbW9uKFZBTFVFIHNl bGYpCit7CisgIGdldF9kdDEoc2VsZik7CisgIGdldF9kdF9jaXZpbChkYXQp OworICByZXR1cm4gSU5UMkZJWChkYXQtPm1vbik7Cit9CisKK3N0YXRpYyBW QUxVRQorZHRfbGl0ZV9tZGF5KFZBTFVFIHNlbGYpCit7CisgIGdldF9kdDEo c2VsZik7CisgIGdldF9kdF9jaXZpbChkYXQpOworICByZXR1cm4gSU5UMkZJ WChkYXQtPm1kYXkpOworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfZGF5 X2ZyYWN0aW9uKFZBTFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7Cisg IGdldF9kdF9kZihkYXQpOworICByZXR1cm4gcmJfcmF0aW9uYWxfbmV3MihJ TlQyRklYKGxvY2FsX2RmKSwgSU5UMkZJWChEQVlfSU5fU0VDT05EUykpOwor fQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfd251bTAoVkFMVUUgc2VsZikK K3sKKyAgaW50IHJ5LCBydywgcmQ7CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAg Z2V0X2R0X2pkKGRhdCk7CisgIGdldF9kdF9kZihkYXQpOworICBqZF90b193 ZWVrbnVtKGxvY2FsX2pkLCAwLCBkYXQtPnNnLCAmcnksICZydywgJnJkKTsK KyAgcmV0dXJuIElOVDJGSVgocncpOworfQorCitzdGF0aWMgVkFMVUUKK2R0 X2xpdGVfd251bTEoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywgcmQ7 CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAgZ2V0X2R0X2pkKGRhdCk7CisgIGdl dF9kdF9kZihkYXQpOworICBqZF90b193ZWVrbnVtKGxvY2FsX2pkLCAxLCBk YXQtPnNnLCAmcnksICZydywgJnJkKTsKKyAgcmV0dXJuIElOVDJGSVgocncp OworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfaG91cihWQUxVRSBzZWxm KQoreworICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfdGltZShkYXQpOwor ICByZXR1cm4gSU5UMkZJWChkYXQtPmhvdXIpOworfQorCitzdGF0aWMgVkFM VUUKK2R0X2xpdGVfbWluKFZBTFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2Vs Zik7CisgIGdldF9kdF90aW1lKGRhdCk7CisgIHJldHVybiBJTlQyRklYKGRh dC0+bWluKTsKK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX3NlYyhWQUxV RSBzZWxmKQoreworICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfdGltZShk YXQpOworICByZXR1cm4gSU5UMkZJWChkYXQtPnNlYyk7Cit9CisKK3N0YXRp YyBWQUxVRQorZHRfbGl0ZV9zZWNfZnJhY3Rpb24oVkFMVUUgc2VsZikKK3sK KyAgZ2V0X2R0MShzZWxmKTsKKyAgcmV0dXJuIHJiX3JhdGlvbmFsX25ldzIo SU5UMkZJWChkYXQtPnNmKSwgSU5UMkZJWChTRUNPTkRfSU5fTkFOT1NFQ09O RFMpKTsKK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX29mZnNldChWQUxV RSBzZWxmKQoreworICBnZXRfZHQxKHNlbGYpOworICByZXR1cm4gcmJfcmF0 aW9uYWxfbmV3MihJTlQyRklYKGRhdC0+b2YpLCBJTlQyRklYKERBWV9JTl9T RUNPTkRTKSk7Cit9CisKKyNkZWZpbmUgZGVjb2RlX29mZnNldChvZixzLGgs bSkgXAoreyBcCisgIGludCBhOyBcCisgIHMgPSAob2YgPCAwKSA/ICctJyA6 ICcrJzsgXAorICBhID0gKG9mIDwgMCkgPyAtb2YgOiBvZjsgXAorICBoID0g YSAvIDM2MDA7IFwKKyAgbSA9IGEgJSAzNjAwIC8gNjA7IFwKK30KKworc3Rh dGljIFZBTFVFCitkdF9saXRlX3pvbmUoVkFMVUUgc2VsZikKK3sKKyAgaW50 IHMsIGgsIG07CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAgZGVjb2RlX29mZnNl dChkYXQtPm9mLCBzLCBoLCBtKTsKKyAgcmV0dXJuIHJiX3NwcmludGYoIiVj JTAyZDolMDJkIiwgcywgaCwgbSk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRf bGl0ZV9jd3llYXIoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywgcmQ7 CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAgZ2V0X2R0X2pkKGRhdCk7CisgIGdl dF9kdF9kZihkYXQpOworICBqZF90b19jb21tZXJjaWFsKGxvY2FsX2pkLCBk YXQtPnNnLCAmcnksICZydywgJnJkKTsKKyAgcmV0dXJuIElOVDJGSVgocnkp OworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfY3dlZWsoVkFMVUUgc2Vs ZikKK3sKKyAgaW50IHJ5LCBydywgcmQ7CisKKyAgZ2V0X2R0MShzZWxmKTsK KyAgZ2V0X2R0X2pkKGRhdCk7CisgIGdldF9kdF9kZihkYXQpOworICBqZF90 b19jb21tZXJjaWFsKGxvY2FsX2pkLCBkYXQtPnNnLCAmcnksICZydywgJnJk KTsKKyAgcmV0dXJuIElOVDJGSVgocncpOworfQorCitzdGF0aWMgVkFMVUUK K2R0X2xpdGVfY3dkYXkoVkFMVUUgc2VsZikKK3sKKyAgaW50IHc7CisKKyAg Z2V0X2R0MShzZWxmKTsKKyAgZ2V0X2R0X2pkKGRhdCk7CisgIGdldF9kdF9k ZihkYXQpOworICB3ID0gamRfdG9fd2RheShsb2NhbF9qZCk7CisgIGlmICh3 ID09IDApCisgICAgdyA9IDc7CisgIHJldHVybiBJTlQyRklYKHcpOworfQor CitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfd2RheShWQUxVRSBzZWxmKQorewor ICBpbnQgdzsKKworICBnZXRfZHQxKHNlbGYpOworICBnZXRfZHRfamQoZGF0 KTsKKyAgZ2V0X2R0X2RmKGRhdCk7CisgIHcgPSBqZF90b193ZGF5KGxvY2Fs X2pkKTsKKyAgcmV0dXJuIElOVDJGSVgodyk7Cit9CisKK3N0YXRpYyBWQUxV RQorZHRfbGl0ZV9sZWFwX3AoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShz ZWxmKTsKKyAgZ2V0X2R0X2NpdmlsKGRhdCk7CisKKyAgcmV0dXJuIGxlYXBf cChkYXQtPnllYXIpID8gUXRydWUgOiBRZmFsc2U7Cit9CisKK3N0YXRpYyBW QUxVRQorZHRfbGl0ZV9zdGFydChWQUxVRSBzZWxmKQoreworICBnZXRfZHQx KHNlbGYpOworICByZXR1cm4gREJMMk5VTShkYXQtPnNnKTsKK30KKworc3Rh dGljIFZBTFVFCitkdF9saXRlX25ld19zdGFydChpbnQgYXJnYywgVkFMVUUg KmFyZ3YsIFZBTFVFIHNlbGYpCit7CisgIFZBTFVFIHZzZzsKKyAgZG91Ymxl IHNnOworCisgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDEiLCAmdnNn KTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBOVU0yREJMKHZz Zyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIHsKKyAgICBnZXRf ZHQxKHNlbGYpOworICAgIGdldF9kdF9qZChkYXQpOworICAgIGdldF9kdF9k ZihkYXQpOworCisgICAgaWYgKGRhdC0+amQgPCBzZykKKyAgICAgIHJldHVy biBmb3J3YXJkKHRvX3JpZ2h0KHNlbGYpLCAibmV3X3N0YXJ0Iik7CisKKyAg ICByZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbF93b19jaXZpbChDTEFT U19PRihzZWxmKSwKKwkJCQkJICAgZGF0LT5qZCwKKwkJCQkJICAgZGF0LT5k ZiwKKwkJCQkJICAgZGF0LT5zZiwKKwkJCQkJICAgZGF0LT5vZiwKKwkJCQkJ ICAgc2csCisJCQkJCSAgIEhBVkVfSkQgfCBIQVZFX0RGKTsKKyAgfQorfQor CitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfbmV3X29mZnNldChpbnQgYXJnYywg VkFMVUUgKmFyZ3YsIFZBTFVFIHNlbGYpCit7CisgIFZBTFVFIHZvZjsKKyAg aW50IHJvZjsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjAxIiwg JnZvZik7CisKKyAgaWYgKE5JTF9QKHZvZikpCisgICAgcm9mID0gMDsKKyAg ZWxzZSB7CisgICAgaWYgKCFkYXlkaWZmX3RvX3NlYyh2b2YsICZyb2YpKQor ICAgICAgcmV0dXJuIGZvcndhcmQodG9fcmlnaHQoc2VsZiksICJuZXdfb2Zm c2V0Iik7CisgIH0KKworICB7CisgICAgZ2V0X2R0MShzZWxmKTsKKyAgICBn ZXRfZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKworICAgIHJl dHVybiBkdF9saXRlX3NfbmV3X2ludGVybmFsX3dvX2NpdmlsKENMQVNTX09G KHNlbGYpLAorCQkJCQkgICBkYXQtPmpkLAorCQkJCQkgICBkYXQtPmRmLAor CQkJCQkgICBkYXQtPnNmLAorCQkJCQkgICByb2YsCisJCQkJCSAgIGRhdC0+ c2csCisJCQkJCSAgIEhBVkVfSkQgfCBIQVZFX0RGKTsKKyAgfQorfQorCitz dGF0aWMgVkFMVUUKK2R0X2xpdGVfcGx1cyhWQUxVRSBzZWxmLCBWQUxVRSBv dGhlcikKK3sKKyAgc3dpdGNoIChUWVBFKG90aGVyKSkgeworICBjYXNlIFRf RklYTlVNOgorICAgIHsKKyAgICAgIGxvbmcgamQ7CisKKyAgICAgIGdldF9k dDEoc2VsZik7CisgICAgICBnZXRfZHRfamQoZGF0KTsKKyAgICAgIGdldF9k dF9kZihkYXQpOworCisgICAgICBqZCA9IGRhdC0+amQgKyBGSVgyTE9ORyhv dGhlcik7CisKKyAgICAgIGlmIChMSUdIVEFCTEVfSkQoamQpICYmIGpkID49 IGRhdC0+c2cpCisJcmV0dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWwoQ0xB U1NfT0Yoc2VsZiksCisJCQkJICAgICAgamQsCisJCQkJICAgICAgZGF0LT5k ZiwKKwkJCQkgICAgICBkYXQtPnNmLAorCQkJCSAgICAgIGRhdC0+b2YsCisJ CQkJICAgICAgZGF0LT5zZywKKwkJCQkgICAgICAwLCAwLCAwLAorCQkJCSAg ICAgIGRhdC0+aG91ciwKKwkJCQkgICAgICBkYXQtPm1pbiwKKwkJCQkgICAg ICBkYXQtPnNlYywKKwkJCQkgICAgICBkYXQtPmZsYWdzICYgfkhBVkVfQ0lW SUwpOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBUX0ZMT0FUOgorICAg IHsKKyAgICAgIGxvbmcgamQsIGRmOworICAgICAgbG9uZyBsb25nIHNmOwor ICAgICAgbG9uZyBkb3VibGUgbzsKKyAgICAgIGludCBzOworCisgICAgICBn ZXRfZHQxKHNlbGYpOworICAgICAgZ2V0X2R0X2pkKGRhdCk7CisgICAgICBn ZXRfZHRfZGYoZGF0KTsKKworICAgICAgamQgPSBkYXQtPmpkOworICAgICAg byA9IE5VTTJEQkwob3RoZXIpOworCisgICAgICBpZiAobyA8IDApIHsKKwlz ID0gLTE7CisJbyA9IC1vOworICAgICAgfSBlbHNlCisJcyA9ICsxOworCisg ICAgICBqZCA9IChsb25nKWZsb29ybChvKTsKKyAgICAgIG8gPSBvIC0gamQ7 CisgICAgICBvICo9IERBWV9JTl9TRUNPTkRTOworICAgICAgZGYgPSAobG9u ZylmbG9vcmwobyk7CisgICAgICBvID0gbyAtIGRmOworICAgICAgbyAqPSBT RUNPTkRfSU5fTkFOT1NFQ09ORFM7CisgICAgICBzZiA9IChsb25nKXJvdW5k bChvKTsKKworICAgICAgaWYgKHMgPCAwKSB7CisJamQgPSAtamQ7CisJZGYg PSAtZGY7CisJc2YgPSAtc2Y7CisgICAgICB9CisKKyAgICAgIHNmID0gZGF0 LT5zZiArIHNmOworICAgICAgaWYgKHNmIDwgMCkgeworCWRmIC09IDE7CisJ c2YgKz0gU0VDT05EX0lOX05BTk9TRUNPTkRTOworICAgICAgfSBlbHNlIGlm IChzZiA+PSBTRUNPTkRfSU5fTkFOT1NFQ09ORFMpIHsKKwlkZiArPSAxOwor CXNmIC09IFNFQ09ORF9JTl9OQU5PU0VDT05EUzsKKyAgICAgIH0KKworICAg ICAgZGYgPSBkYXQtPmRmICsgZGY7CisgICAgICBpZiAoZGYgPCAwKSB7CisJ amQgLT0gMTsKKwlkZiArPSBEQVlfSU5fU0VDT05EUzsKKyAgICAgIH0gZWxz ZSBpZiAoZGYgPj0gREFZX0lOX1NFQ09ORFMpIHsKKwlqZCArPSAxOworCWRm IC09IERBWV9JTl9TRUNPTkRTOworICAgICAgfQorCisgICAgICBqZCA9IGRh dC0+amQgKyBqZDsKKworICAgICAgaWYgKExJR0hUQUJMRV9KRChqZCkgJiYg amQgPj0gZGF0LT5zZykKKwlyZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5h bChDTEFTU19PRihzZWxmKSwKKwkJCQkgICAgICBqZCwKKwkJCQkgICAgICBk ZiwKKwkJCQkgICAgICBzZiwKKwkJCQkgICAgICBkYXQtPm9mLAorCQkJCSAg ICAgIGRhdC0+c2csCisJCQkJICAgICAgMCwgMCwgMCwKKwkJCQkgICAgICBk YXQtPmhvdXIsCisJCQkJICAgICAgZGF0LT5taW4sCisJCQkJICAgICAgZGF0 LT5zZWMsCisJCQkJICAgICAgZGF0LT5mbGFncyAmIH5IQVZFX0NJVklMICYg fkhBVkVfVElNRSk7CisgICAgfQorICAgIGJyZWFrOworICB9CisgIHJldHVy biByYl9mdW5jYWxsKHRvX3JpZ2h0KHNlbGYpLCAnKycsIDEsIG90aGVyKTsK K30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX21pbnVzKFZBTFVFIHNlbGYs IFZBTFVFIG90aGVyKQoreworICBpZiAoa19kX2xpdGVfcChvdGhlcikpCisg ICAgcmV0dXJuIHJiX2Z1bmNhbGwoZHRfbGl0ZV9hamQoc2VsZiksICctJywg MSwgZHRfbGl0ZV9hamQob3RoZXIpKTsKKworICBzd2l0Y2ggKFRZUEUob3Ro ZXIpKSB7CisgIGNhc2UgVF9GSVhOVU06CisgICAgcmV0dXJuIGR0X2xpdGVf cGx1cyhzZWxmLCBMT05HMk5VTSgtRklYMkxPTkcob3RoZXIpKSk7CisgIGNh c2UgVF9GTE9BVDoKKyAgICByZXR1cm4gZHRfbGl0ZV9wbHVzKHNlbGYsIERC TDJOVU0oLU5VTTJEQkwob3RoZXIpKSk7CisgIH0KKyAgcmV0dXJuIHJiX2Z1 bmNhbGwodG9fcmlnaHQoc2VsZiksICctJywgMSwgb3RoZXIpOworfQorCitz dGF0aWMgVkFMVUUKK2R0X2xpdGVfY21wKFZBTFVFIHNlbGYsIFZBTFVFIG90 aGVyKQoreworICBpZiAoa19kdF9saXRlX3Aob3RoZXIpKSB7CisgICAgZ2V0 X2R0MihzZWxmLCBvdGhlcik7CisKKyAgICBnZXRfZHRfamQoYWRhdCk7Cisg ICAgZ2V0X2R0X2pkKGJkYXQpOworICAgIGdldF9kdF9kZihhZGF0KTsKKyAg ICBnZXRfZHRfZGYoYmRhdCk7CisKKyAgICBpZiAoYWRhdC0+amQgPT0gYmRh dC0+amQpIHsKKyAgICAgIGlmIChhZGF0LT5kZiA9PSBiZGF0LT5kZikgewor CWlmIChhZGF0LT5zZiA9PSBiZGF0LT5zZikgeworCSAgcmV0dXJuIElOVDJG SVgoMCk7CisJfSBlbHNlIGlmIChhZGF0LT5zZiA8IGJkYXQtPnNmKSB7CisJ ICByZXR1cm4gSU5UMkZJWCgtMSk7CisJfSBlbHNlIHsKKwkgIHJldHVybiBJ TlQyRklYKDEpOworCX0KKyAgICAgIH0gZWxzZSBpZiAoYWRhdC0+ZGYgPCBi ZGF0LT5kZikgeworCXJldHVybiBJTlQyRklYKC0xKTsKKyAgICAgIH0gZWxz ZSB7CisJcmV0dXJuIElOVDJGSVgoMSk7CisgICAgICB9CisgICAgfSBlbHNl IGlmIChhZGF0LT5qZCA8IGJkYXQtPmpkKSB7CisgICAgICByZXR1cm4gSU5U MkZJWCgtMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBJTlQyRklY KDEpOworICAgIH0KKyAgfQorICBpZiAoa19kYXRlX3Aob3RoZXIpKQorICAg IHJldHVybiByYl9udW1fY29lcmNlX2NtcChkdF9saXRlX2FqZChzZWxmKSwK KwkJCSAgICAgcmJfZnVuY2FsbChvdGhlciwgcmJfaW50ZXJuKCJhamQiKSwg MCksCisJCQkgICAgIHJiX2ludGVybigiPD0+IikpOworICBpZiAoa19udW1l cmljX3Aob3RoZXIpKQorICAgIHJldHVybiByYl9udW1fY29lcmNlX2NtcChk dF9saXRlX2FqZChzZWxmKSwKKwkJCSAgICAgb3RoZXIsCisJCQkgICAgIHJi X2ludGVybigiPD0+IikpOworICByZXR1cm4gcmJfbnVtX2NvZXJjZV9jbXAo c2VsZiwgb3RoZXIsIHJiX2ludGVybigiPD0+IikpOworfQorCitzdGF0aWMg VkFMVUUKK2R0X2xpdGVfZXFlcWVxKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVy KQoreworICBpZiAoa19kdF9saXRlX3Aob3RoZXIpKSB7CisgICAgZ2V0X2R0 MihzZWxmLCBvdGhlcik7CisKKyAgICBpZiAoYWRhdC0+ZmxhZ3MgJiBIQVZF X0pEICYmCisJYmRhdC0+ZmxhZ3MgJiBIQVZFX0pEKSB7CisgICAgICBpZiAo YWRhdC0+amQgPT0gYmRhdC0+amQpCisJcmV0dXJuIFF0cnVlOworICAgICAg cmV0dXJuIFFmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgZ2V0X2R0X2Np dmlsKGFkYXQpOworICAgICAgZ2V0X2R0X2NpdmlsKGJkYXQpOworICAgICAg aWYgKGFkYXQtPnllYXIgPT0gYmRhdC0+eWVhcikKKwlpZiAoYWRhdC0+bW9u ID09IGJkYXQtPm1vbikKKwkgIGlmIChhZGF0LT5tZGF5ID09IGJkYXQtPm1k YXkpCisJICAgIHJldHVybiBRdHJ1ZTsKKyAgICAgIHJldHVybiBRZmFsc2U7 CisgICAgfQorICB9CisgIGlmIChrX2RhdGVfcChvdGhlcikpCisgICAgcmV0 dXJuIHJiX251bV9jb2VyY2VfY21wKGR0X2xpdGVfamQoc2VsZiksCisJCQkg ICAgIHJiX2Z1bmNhbGwob3RoZXIsIHJiX2ludGVybigiamQiKSwgMCksCisJ CQkgICAgIHJiX2ludGVybigiPT0iKSk7CisgIGlmIChrX251bWVyaWNfcChv dGhlcikpCisgICAgcmV0dXJuIHJiX251bV9jb2VyY2VfY21wKGR0X2xpdGVf amQoc2VsZiksCisJCQkgICAgIG90aGVyLAorCQkJICAgICByYl9pbnRlcm4o Ij09IikpOworICByZXR1cm4gcmJfbnVtX2NvZXJjZV9jbXAoc2VsZiwgb3Ro ZXIsIHJiX2ludGVybigiPT09IikpOworfQorCitzdGF0aWMgVkFMVUUKK2R0 X2xpdGVfZXFsX3AoVkFMVUUgc2VsZiwgVkFMVUUgb3RoZXIpCit7CisgIGlm IChrX2R0X2xpdGVfcChvdGhlcikpIHsKKyAgICBnZXRfZHQyKHNlbGYsIG90 aGVyKTsKKworICAgIGdldF9kdF9qZChhZGF0KTsKKyAgICBnZXRfZHRfamQo YmRhdCk7CisgICAgZ2V0X2R0X2RmKGFkYXQpOworICAgIGdldF9kdF9kZihi ZGF0KTsKKworICAgIGlmIChhZGF0LT5qZCA9PSBiZGF0LT5qZCkKKyAgICAg IGlmIChhZGF0LT5kZiA9PSBiZGF0LT5kZikKKwlpZiAoYWRhdC0+c2YgPT0g YmRhdC0+c2YpCisJICByZXR1cm4gUXRydWU7CisgICAgcmV0dXJuIFFmYWxz ZTsKKyAgfQorICBpZiAoa19kYXRlX3Aob3RoZXIpKQorICAgIHJldHVybiBy Yl9udW1fY29lcmNlX2NtcChkdF9saXRlX2FqZChzZWxmKSwKKwkJCSAgICAg cmJfZnVuY2FsbChvdGhlciwgcmJfaW50ZXJuKCJhamQiKSwgMCksCisJCQkg ICAgIHJiX2ludGVybigiPT0iKSk7CisgIHJldHVybiBRZmFsc2U7Cit9CisK K3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9oYXNoKFZBTFVFIHNlbGYpCit7Cisg IGdldF9kdDEoc2VsZik7CisgIHJldHVybiByYl9mdW5jYWxsKGR0X2xpdGVf YWpkKHNlbGYpLCByYl9pbnRlcm4oImhhc2giKSwgMCk7Cit9CisKK3N0YXRp YyBWQUxVRQorZHRfbGl0ZV90b19zKFZBTFVFIHNlbGYpCit7CisgIGludCBz LCBoLCBtOworCisgIGdldF9kdDEoc2VsZik7CisgIGdldF9kdF9jaXZpbChk YXQpOworICBnZXRfZHRfdGltZShkYXQpOworICBkZWNvZGVfb2Zmc2V0KGRh dC0+b2YsIHMsIGgsIG0pOworICByZXR1cm4gcmJfc3ByaW50ZigiJS40ZC0l MDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlYyUwMmQ6JTAyZCIsCisJCSAgICBk YXQtPnllYXIsIGRhdC0+bW9uLCBkYXQtPm1kYXksCisJCSAgICBkYXQtPmhv dXIsIGRhdC0+bWluLCBkYXQtPnNlYywKKwkJICAgIHMsIGgsIG0pOworfQor CitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfaW5zcGVjdChWQUxVRSBzZWxmKQor eworICBpbnQgcywgaCwgbTsKKworICBnZXRfZHQxKHNlbGYpOworICBnZXRf ZHRfY2l2aWwoZGF0KTsKKyAgZ2V0X2R0X3RpbWUoZGF0KTsKKyAgZ2V0X2R0 X2pkKGRhdCk7CisgIGdldF9kdF9kZihkYXQpOworICBkZWNvZGVfb2Zmc2V0 KGRhdC0+b2YsIHMsIGgsIG0pOworICByZXR1cm4gcmJfc3ByaW50ZigiIzxE YXRlVGltZTo6TGlnaHQ6ICIKKwkJICAgICIlLjRkLSUwMmQtJTAyZFQlMDJk OiUwMmQ6JTAyZCVjJTAyZDolMDJkICIKKwkJICAgICIoKCVsZGosJWRzLCUu MGZuKSwlZC84NjQwMCwlLjBmKT4iLAorCQkgICAgZGF0LT55ZWFyLCBkYXQt Pm1vbiwgZGF0LT5tZGF5LAorCQkgICAgZGF0LT5ob3VyLCBkYXQtPm1pbiwg ZGF0LT5zZWMsCisJCSAgICBzLCBoLCBtLAorCQkgICAgZGF0LT5qZCwgZGF0 LT5kZiwgKGRvdWJsZSlkYXQtPnNmLCBkYXQtPm9mLCBkYXQtPnNnKTsKK30K Kworc3RhdGljIFZBTFVFCitkdF9saXRlX21hcnNoYWxfZHVtcChWQUxVRSBz ZWxmKQoreworICBWQUxVRSBhOworCisgIGdldF9kdDEoc2VsZik7CisgIGdl dF9kdF9qZChkYXQpOworICBnZXRfZHRfZGYoZGF0KTsKKyAgYSA9IHJiX2Fy eV9uZXczKDUsCisJCSAgSU5UMkZJWChkYXQtPmpkKSwgSU5UMkZJWChkYXQt PmRmKSwgSU5UMkZJWChkYXQtPnNmKSwKKwkJICBJTlQyRklYKGRhdC0+b2Yp LCBEQkwyTlVNKGRhdC0+c2cpKTsKKworICBpZiAoRkxfVEVTVChzZWxmLCBG TF9FWElWQVIpKSB7CisgICAgcmJfY29weV9nZW5lcmljX2l2YXIoYSwgc2Vs Zik7CisgICAgRkxfU0VUKGEsIEZMX0VYSVZBUik7CisgIH0KKworICByZXR1 cm4gYTsKK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX21hcnNoYWxfbG9h ZChWQUxVRSBzZWxmLCBWQUxVRSBhKQoreworICBnZXRfZHQxKHNlbGYpOwor CisgIGRhdC0+amQgPSBGSVgySU5UKFJBUlJBWV9QVFIoYSlbMF0pOworICBk YXQtPmRmID0gRklYMklOVChSQVJSQVlfUFRSKGEpWzFdKTsKKyAgZGF0LT5z ZiA9IEZJWDJJTlQoUkFSUkFZX1BUUihhKVsyXSk7CisgIGRhdC0+b2YgPSBG SVgySU5UKFJBUlJBWV9QVFIoYSlbM10pOworICBkYXQtPnNnID0gTlVNMkRC TChSQVJSQVlfUFRSKGEpWzRdKTsKKyAgZGF0LT55ZWFyID0gMDsKKyAgZGF0 LT5tb24gPSAwOworICBkYXQtPm1kYXkgPSAwOworICBkYXQtPmhvdXIgPSAw OworICBkYXQtPm1pbiA9IDA7CisgIGRhdC0+c2VjID0gMDsKKyAgZGF0LT5m bGFncyB8PSBIQVZFX0pEIHwgSEFWRV9ERjsKKworICBpZiAoRkxfVEVTVChh LCBGTF9FWElWQVIpKSB7CisgICAgcmJfY29weV9nZW5lcmljX2l2YXIoc2Vs ZiwgYSk7CisgICAgRkxfU0VUKHNlbGYsIEZMX0VYSVZBUik7CisgIH0KKwor ICByZXR1cm4gc2VsZjsKK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBp bnQKK3Rlc3RfY2l2aWwobG9uZyBmcm9tLCBsb25nIHRvLCBkb3VibGUgc2cp Cit7CisgIGxvbmcgajsKKworICBmcHJpbnRmKHN0ZGVyciwgIiVsZC4uLiVs ZCAoJWxkKSAtICUuMGZcbiIsIGZyb20sIHRvLCB0byAtIGZyb20sIHNnKTsK KyAgZm9yIChqID0gZnJvbTsgaiA8PSB0bzsgaisrKSB7CisgICAgaW50IHks IG0sIGQsIG5zOworICAgIGxvbmcgcmo7CisKKyAgICBqZF90b19jaXZpbChq LCBzZywgJnksICZtLCAmZCk7CisgICAgY2l2aWxfdG9famQoeSwgbSwgZCwg c2csICZyaiwgJm5zKTsKKyAgICBpZiAoaiAhPSByaikgeworICAgICAgZnBy aW50ZihzdGRlcnIsICIlbGQgIT0gJWxkXG4iLCBqLCByaik7CisgICAgICBy ZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRp YyBWQUxVRQorZGF0ZV9zX3Rlc3RfY2l2aWwoVkFMVUUga2xhc3MpCit7Cisg IGRvdWJsZSBncmVnID0gLU5VTTJEQkwocmJfY29uc3RfZ2V0KHJiX2NGbG9h dCwgcmJfaW50ZXJuKCJJTkZJTklUWSIpKSk7CisKKyAgaWYgKCF0ZXN0X2Np dmlsKG1pbl9qZCwgbWluX2pkICsgMzY2LCBncmVnKSkKKyAgICByZXR1cm4g UWZhbHNlOworICBpZiAoIXRlc3RfY2l2aWwoMjMwNTgxNCwgMjU5ODAwNywg Z3JlZykpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKCF0ZXN0X2Npdmls KG1heF9qZCAtIDM2NiwgbWF4X2pkLCBncmVnKSkKKyAgICByZXR1cm4gUWZh bHNlOworCisgIGlmICghdGVzdF9jaXZpbChtaW5famQsIG1pbl9qZCArIDM2 NiwgSVRBTFkpKQorICAgIHJldHVybiBRZmFsc2U7CisgIGlmICghdGVzdF9j aXZpbCgyMzA1ODE0LCAyNTk4MDA3LCBJVEFMWSkpCisgICAgcmV0dXJuIFFm YWxzZTsKKyAgaWYgKCF0ZXN0X2NpdmlsKG1heF9qZCAtIDM2NiwgbWF4X2pk LCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKworICByZXR1cm4gUXRy dWU7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3Rfb3JkaW5hbChsb25nIGZyb20s IGxvbmcgdG8sIGRvdWJsZSBzZykKK3sKKyAgbG9uZyBqOworCisgIGZwcmlu dGYoc3RkZXJyLCAiJWxkLi4uJWxkICglbGQpIC0gJS4wZlxuIiwgZnJvbSwg dG8sIHRvIC0gZnJvbSwgc2cpOworICBmb3IgKGogPSBmcm9tOyBqIDw9IHRv OyBqKyspIHsKKyAgICBpbnQgeSwgZCwgbnM7CisgICAgbG9uZyByajsKKwor ICAgIGpkX3RvX29yZGluYWwoaiwgc2csICZ5LCAmZCk7CisgICAgb3JkaW5h bF90b19qZCh5LCBkLCBzZywgJnJqLCAmbnMpOworICAgIGlmIChqICE9IHJq KSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVsZCAhPSAlbGRcbiIsIGos IHJqKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorICByZXR1cm4g MTsKK30KKworc3RhdGljIFZBTFVFCitkYXRlX3NfdGVzdF9vcmRpbmFsKFZB TFVFIGtsYXNzKQoreworICBkb3VibGUgZ3JlZyA9IC1OVU0yREJMKHJiX2Nv bnN0X2dldChyYl9jRmxvYXQsIHJiX2ludGVybigiSU5GSU5JVFkiKSkpOwor CisgIGlmICghdGVzdF9vcmRpbmFsKG1pbl9qZCwgbWluX2pkICsgMzY2LCBn cmVnKSkKKyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3Rfb3JkaW5h bCgyMzA1ODE0LCAyNTk4MDA3LCBncmVnKSkKKyAgICByZXR1cm4gUWZhbHNl OworICBpZiAoIXRlc3Rfb3JkaW5hbChtYXhfamQgLSAzNjYsIG1heF9qZCwg Z3JlZykpCisgICAgcmV0dXJuIFFmYWxzZTsKKworICBpZiAoIXRlc3Rfb3Jk aW5hbChtaW5famQsIG1pbl9qZCArIDM2NiwgSVRBTFkpKQorICAgIHJldHVy biBRZmFsc2U7CisgIGlmICghdGVzdF9vcmRpbmFsKDIzMDU4MTQsIDI1OTgw MDcsIElUQUxZKSkKKyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3Rf b3JkaW5hbChtYXhfamQgLSAzNjYsIG1heF9qZCwgSVRBTFkpKQorICAgIHJl dHVybiBRZmFsc2U7CisKKyAgcmV0dXJuIFF0cnVlOworfQorCitzdGF0aWMg aW50Cit0ZXN0X2NvbW1lcmNpYWwobG9uZyBmcm9tLCBsb25nIHRvLCBkb3Vi bGUgc2cpCit7CisgIGxvbmcgajsKKworICBmcHJpbnRmKHN0ZGVyciwgIiVs ZC4uLiVsZCAoJWxkKSAtICUuMGZcbiIsIGZyb20sIHRvLCB0byAtIGZyb20s IHNnKTsKKyAgZm9yIChqID0gZnJvbTsgaiA8PSB0bzsgaisrKSB7CisgICAg aW50IHksIHcsIGQsIG5zOworICAgIGxvbmcgcmo7CisKKyAgICBqZF90b19j b21tZXJjaWFsKGosIHNnLCAmeSwgJncsICZkKTsKKyAgICBjb21tZXJjaWFs X3RvX2pkKHksIHcsIGQsIHNnLCAmcmosICZucyk7CisgICAgaWYgKGogIT0g cmopIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJWxkICE9ICVsZFxuIiwg aiwgcmopOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVy biAxOworfQorCitzdGF0aWMgVkFMVUUKK2RhdGVfc190ZXN0X2NvbW1lcmNp YWwoVkFMVUUga2xhc3MpCit7CisgIGRvdWJsZSBncmVnID0gLU5VTTJEQkwo cmJfY29uc3RfZ2V0KHJiX2NGbG9hdCwgcmJfaW50ZXJuKCJJTkZJTklUWSIp KSk7CisKKyAgaWYgKCF0ZXN0X2NvbW1lcmNpYWwobWluX2pkLCBtaW5famQg KyAzNjYsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7CisgIGlmICghdGVz dF9jb21tZXJjaWFsKDIzMDU4MTQsIDI1OTgwMDcsIGdyZWcpKQorICAgIHJl dHVybiBRZmFsc2U7CisgIGlmICghdGVzdF9jb21tZXJjaWFsKG1heF9qZCAt IDM2NiwgbWF4X2pkLCBncmVnKSkKKyAgICByZXR1cm4gUWZhbHNlOworCisg IGlmICghdGVzdF9jb21tZXJjaWFsKG1pbl9qZCwgbWluX2pkICsgMzY2LCBJ VEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKCF0ZXN0X2NvbW1l cmNpYWwoMjMwNTgxNCwgMjU5ODAwNywgSVRBTFkpKQorICAgIHJldHVybiBR ZmFsc2U7CisgIGlmICghdGVzdF9jb21tZXJjaWFsKG1heF9qZCAtIDM2Niwg bWF4X2pkLCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKworICByZXR1 cm4gUXRydWU7Cit9CisKK3N0YXRpYyBpbnQKK3Rlc3Rfd2Vla251bShsb25n IGZyb20sIGxvbmcgdG8sIGludCBmLCBkb3VibGUgc2cpCit7CisgIGxvbmcg ajsKKworICBmcHJpbnRmKHN0ZGVyciwgIiVsZC4uLiVsZCAoJWxkKSAtICUu MGZcbiIsIGZyb20sIHRvLCB0byAtIGZyb20sIHNnKTsKKyAgZm9yIChqID0g ZnJvbTsgaiA8PSB0bzsgaisrKSB7CisgICAgaW50IHksIHcsIGQsIG5zOwor ICAgIGxvbmcgcmo7CisKKyAgICBqZF90b193ZWVrbnVtKGosIGYsIHNnLCAm eSwgJncsICZkKTsKKyAgICB3ZWVrbnVtX3RvX2pkKHksIHcsIGQsIGYsIHNn LCAmcmosICZucyk7CisgICAgaWYgKGogIT0gcmopIHsKKyAgICAgIGZwcmlu dGYoc3RkZXJyLCAiJWxkICE9ICVsZFxuIiwgaiwgcmopOworICAgICAgcmV0 dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMg VkFMVUUKK2RhdGVfc190ZXN0X3dlZWtudW0oVkFMVUUga2xhc3MpCit7Cisg IGRvdWJsZSBncmVnID0gLU5VTTJEQkwocmJfY29uc3RfZ2V0KHJiX2NGbG9h dCwgcmJfaW50ZXJuKCJJTkZJTklUWSIpKSk7CisgIGludCBmOworCisgIGZv ciAoZiA9IDA7IGYgPD0gMTsgZisrKSB7CisgICAgaWYgKCF0ZXN0X3dlZWtu dW0obWluX2pkLCBtaW5famQgKyAzNjYsIGYsIGdyZWcpKQorICAgICAgcmV0 dXJuIFFmYWxzZTsKKyAgICBpZiAoIXRlc3Rfd2Vla251bSgyMzA1ODE0LCAy NTk4MDA3LCBmLCBncmVnKSkKKyAgICAgIHJldHVybiBRZmFsc2U7CisgICAg aWYgKCF0ZXN0X3dlZWtudW0obWF4X2pkIC0gMzY2LCBtYXhfamQsIGYsIGdy ZWcpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKworICAgIGlmICghdGVzdF93 ZWVrbnVtKG1pbl9qZCwgbWluX2pkICsgMzY2LCBmLCBJVEFMWSkpCisgICAg ICByZXR1cm4gUWZhbHNlOworICAgIGlmICghdGVzdF93ZWVrbnVtKDIzMDU4 MTQsIDI1OTgwMDcsIGYsIElUQUxZKSkKKyAgICAgIHJldHVybiBRZmFsc2U7 CisgICAgaWYgKCF0ZXN0X3dlZWtudW0obWF4X2pkIC0gMzY2LCBtYXhfamQs IGYsIElUQUxZKSkKKyAgICAgIHJldHVybiBRZmFsc2U7CisgIH0KKworICBy ZXR1cm4gUXRydWU7Cit9CisKKworc3RhdGljIGludAordGVzdF9udGhfa2Rh eShsb25nIGZyb20sIGxvbmcgdG8sIGRvdWJsZSBzZykKK3sKKyAgbG9uZyBq OworCisgIGZwcmludGYoc3RkZXJyLCAiJWxkLi4uJWxkICglbGQpIC0gJS4w ZlxuIiwgZnJvbSwgdG8sIHRvIC0gZnJvbSwgc2cpOworICBmb3IgKGogPSBm cm9tOyBqIDw9IHRvOyBqKyspIHsKKyAgICBpbnQgeSwgbSwgbiwgaywgbnM7 CisgICAgbG9uZyByajsKKworICAgIGpkX3RvX250aF9rZGF5KGosIHNnLCAm eSwgJm0sICZuLCAmayk7CisgICAgbnRoX2tkYXlfdG9famQoeSwgbSwgbiwg aywgc2csICZyaiwgJm5zKTsKKyAgICBpZiAoaiAhPSByaikgeworICAgICAg ZnByaW50ZihzdGRlcnIsICIlbGQgIT0gJWxkXG4iLCBqLCByaik7CisgICAg ICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0 YXRpYyBWQUxVRQorZGF0ZV9zX3Rlc3RfbnRoX2tkYXkoVkFMVUUga2xhc3Mp Cit7CisgIGRvdWJsZSBncmVnID0gLU5VTTJEQkwocmJfY29uc3RfZ2V0KHJi X2NGbG9hdCwgcmJfaW50ZXJuKCJJTkZJTklUWSIpKSk7CisKKyAgaWYgKCF0 ZXN0X250aF9rZGF5KG1pbl9qZCwgbWluX2pkICsgMzY2LCBncmVnKSkKKyAg ICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3RfbnRoX2tkYXkoMjMwNTgx NCwgMjU5ODAwNywgZ3JlZykpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYg KCF0ZXN0X250aF9rZGF5KG1heF9qZCAtIDM2NiwgbWF4X2pkLCBncmVnKSkK KyAgICByZXR1cm4gUWZhbHNlOworCisgIGlmICghdGVzdF9udGhfa2RheSht aW5famQsIG1pbl9qZCArIDM2NiwgSVRBTFkpKQorICAgIHJldHVybiBRZmFs c2U7CisgIGlmICghdGVzdF9udGhfa2RheSgyMzA1ODE0LCAyNTk4MDA3LCBJ VEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKCF0ZXN0X250aF9r ZGF5KG1heF9qZCAtIDM2NiwgbWF4X2pkLCBJVEFMWSkpCisgICAgcmV0dXJu IFFmYWxzZTsKKworICByZXR1cm4gUXRydWU7Cit9CisKK3N0YXRpYyBWQUxV RQorZGF0ZV9zX3Rlc3RfYWxsKFZBTFVFIGtsYXNzKQoreworICBpZiAoZGF0 ZV9zX3Rlc3RfY2l2aWwoa2xhc3MpID09IFFmYWxzZSkKKyAgICByZXR1cm4g UWZhbHNlOworICBpZiAoZGF0ZV9zX3Rlc3Rfb3JkaW5hbChrbGFzcykgPT0g UWZhbHNlKQorICAgIHJldHVybiBRZmFsc2U7CisgIGlmIChkYXRlX3NfdGVz dF9jb21tZXJjaWFsKGtsYXNzKSA9PSBRZmFsc2UpCisgICAgcmV0dXJuIFFm YWxzZTsKKyAgaWYgKGRhdGVfc190ZXN0X3dlZWtudW0oa2xhc3MpID09IFFm YWxzZSkKKyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoZGF0ZV9zX3Rlc3Rf bnRoX2tkYXkoa2xhc3MpID09IFFmYWxzZSkKKyAgICByZXR1cm4gUWZhbHNl OworICByZXR1cm4gUXRydWU7Cit9CisjZW5kaWYKKwordm9pZAorSW5pdF9k YXRlX2NvcmUodm9pZCkKK3sKKyAgYXNzZXJ0KGZwcmludGYoc3RkZXJyLCAi YXNzZXJ0KCkgaXMgbm93IGFjdGl2ZVxuIikpOworCisgIHJ6ZXJvID0gcmJf cmF0aW9uYWxfbmV3MShJTlQyRklYKDApKTsKKyAgcmhhbGYgPSByYl9yYXRp b25hbF9uZXcyKElOVDJGSVgoMSksIElOVDJGSVgoMikpOworCisgIHJiX2dj X3JlZ2lzdGVyX21hcmtfb2JqZWN0KHJ6ZXJvKTsKKyAgcmJfZ2NfcmVnaXN0 ZXJfbWFya19vYmplY3QocmhhbGYpOworCisgIHsKKyAgICBkb3VibGUgZ3Jl ZyA9IC1OVU0yREJMKHJiX2NvbnN0X2dldChyYl9jRmxvYXQsIHJiX2ludGVy bigiSU5GSU5JVFkiKSkpOworICAgIGludCByeSwgcm0sIHJkLCByeTIsIHJ3 LCByZDIsIG5zOworICAgIGxvbmcgcmpkOworCisgICAgamRfdG9fY2l2aWwo RklYTlVNX01JTiArIDIsIGdyZWcsICZyeSwgJnJtLCAmcmQpOworICAgIGpk X3RvX2NvbW1lcmNpYWwoRklYTlVNX01JTiArIDIsIGdyZWcsICZyeTIsICZy dywgJnJkMik7CisgICAgaWYgKHJ5ID4gcnkyKQorICAgICAgbWluX3llYXIg PSByeSArIDE7CisgICAgZWxzZQorICAgICAgbWluX3llYXIgPSByeTIgKyAx OworICAgIGNpdmlsX3RvX2pkKG1pbl95ZWFyLCAxLCAxLCBncmVnLCAmcmpk LCAmbnMpOworICAgIG1pbl9qZCA9IHJqZDsKKworICAgIGpkX3RvX2Npdmls KEZJWE5VTV9NQVggLSAyLCBncmVnLCAmcnksICZybSwgJnJkKTsKKyAgICBq ZF90b19jb21tZXJjaWFsKEZJWE5VTV9NQVggKyAyLCBncmVnLCAmcnkyLCAm cncsICZyZDIpOworICAgIGlmIChyeSA8IHJ5MikKKyAgICAgIG1heF95ZWFy ID0gcnkgLSAxOworICAgIGVsc2UKKyAgICAgIG1heF95ZWFyID0gcnkyIC0g MTsKKyAgICBjaXZpbF90b19qZChtYXhfeWVhciwgMTIsIDMxLCBncmVnLCAm cmpkLCAmbnMpOworICAgIG1heF9qZCA9IHJqZDsKKyAgfQorCisgIC8qIGRh dGUgbGlnaHQgKi8KKworICBjRGF0ZSA9IHJiX2RlZmluZV9jbGFzcygiRGF0 ZSIsIHJiX2NPYmplY3QpOworICBjRGF0ZUxpZ2h0ID0gcmJfZGVmaW5lX2Ns YXNzX3VuZGVyKGNEYXRlLCAiTGlnaHQiLCBjRGF0ZSk7CisKKyAgcmJfZGVm aW5lX2FsbG9jX2Z1bmMoY0RhdGVMaWdodCwgZF9saXRlX3NfYWxsb2MpOwor ICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgIm5ld19sISIs IGRhdGVfc19uZXdfbF9iYW5nLCAtMSk7CisKKyAgcmJfZGVmaW5lX3Npbmds ZXRvbl9tZXRob2QoY0RhdGUsICJ2YWxpZF9qZD8iLCBkYXRlX3NfdmFsaWRf amRfcCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0 ZSwgInZhbGlkX29yZGluYWw/IiwKKwkJCSAgICAgZGF0ZV9zX3ZhbGlkX29y ZGluYWxfcCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj RGF0ZSwgInZhbGlkX2NpdmlsPyIsIGRhdGVfc192YWxpZF9jaXZpbF9wLCAt MSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAidmFs aWRfZGF0ZT8iLCBkYXRlX3NfdmFsaWRfY2l2aWxfcCwgLTEpOworICByYl9k ZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInZhbGlkX2NvbW1lcmNp YWw/IiwKKwkJCSAgICAgZGF0ZV9zX3ZhbGlkX2NvbW1lcmNpYWxfcCwgLTEp OworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgImpkIiwg ZGF0ZV9zX2pkLCAtMSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9k KGNEYXRlLCAib3JkaW5hbCIsIGRhdGVfc19vcmRpbmFsLCAtMSk7CisgIHJi X2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAiY2l2aWwiLCBkYXRl X3NfY2l2aWwsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2Qo Y0RhdGUsICJuZXciLCBkYXRlX3NfY2l2aWwsIC0xKTsKKyAgcmJfZGVmaW5l X3NpbmdsZXRvbl9tZXRob2QoY0RhdGUsICJjb21tZXJjaWFsIiwgZGF0ZV9z X2NvbW1lcmNpYWwsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRo b2QoY0RhdGUsICJ0b2RheSIsIGRhdGVfc190b2RheSwgLTEpOworCisgIHJi X2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwgImFqZCIsIGRfbGl0ZV9hamQs IDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlTGlnaHQsICJhbWpkIiwg ZF9saXRlX2FtamQsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlTGln aHQsICJqZCIsIGRfbGl0ZV9qZCwgMCk7CisgIHJiX2RlZmluZV9tZXRob2Qo Y0RhdGVMaWdodCwgIm1qZCIsIGRfbGl0ZV9tamQsIDApOworICByYl9kZWZp bmVfbWV0aG9kKGNEYXRlTGlnaHQsICJsZCIsIGRfbGl0ZV9sZCwgMCk7CisK KyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZUxpZ2h0LCAieWVhciIsIGRfbGl0 ZV95ZWFyLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZUxpZ2h0LCAi eWRheSIsIGRfbGl0ZV95ZGF5LCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChj RGF0ZUxpZ2h0LCAibW9uIiwgZF9saXRlX21vbiwgMCk7CisgIHJiX2RlZmlu ZV9tZXRob2QoY0RhdGVMaWdodCwgIm1vbnRoIiwgZF9saXRlX21vbiwgMCk7 CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwgIm1kYXkiLCBkX2xp dGVfbWRheSwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwg ImRheSIsIGRfbGl0ZV9tZGF5LCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChj RGF0ZUxpZ2h0LCAiZGF5X2ZyYWN0aW9uIiwgZF9saXRlX3J6ZXJvLCAwKTsK KworICByYl9kZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGVMaWdodCwgIndu dW0wIiwgZF9saXRlX3dudW0wLCAwKTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVf bWV0aG9kKGNEYXRlTGlnaHQsICJ3bnVtMSIsIGRfbGl0ZV93bnVtMSwgMCk7 CisKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlTGlnaHQsICJo b3VyIiwgZF9saXRlX3plcm8sIDApOworICByYl9kZWZpbmVfcHJpdmF0ZV9t ZXRob2QoY0RhdGVMaWdodCwgIm1pbiIsIGRfbGl0ZV96ZXJvLCAwKTsKKyAg cmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlTGlnaHQsICJtaW51dGUi LCBkX2xpdGVfemVybywgMCk7CisgIHJiX2RlZmluZV9wcml2YXRlX21ldGhv ZChjRGF0ZUxpZ2h0LCAic2VjIiwgZF9saXRlX3plcm8sIDApOworICByYl9k ZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGVMaWdodCwgInNlY29uZCIsIGRf bGl0ZV96ZXJvLCAwKTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNE YXRlTGlnaHQsICJzZWNfZnJhY3Rpb24iLCBkX2xpdGVfemVybywgMCk7Cisg IHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZUxpZ2h0LCAic2Vjb25k X2ZyYWN0aW9uIiwgZF9saXRlX3plcm8sIDApOworICByYl9kZWZpbmVfcHJp dmF0ZV9tZXRob2QoY0RhdGVMaWdodCwgIm9mZnNldCIsIGRfbGl0ZV96ZXJv LCAwKTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlTGlnaHQs ICJ6b25lIiwgZF9saXRlX3pvbmUsIDApOworCisgIHJiX2RlZmluZV9tZXRo b2QoY0RhdGVMaWdodCwgImN3eWVhciIsIGRfbGl0ZV9jd3llYXIsIDApOwor ICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlTGlnaHQsICJjd2VlayIsIGRfbGl0 ZV9jd2VlaywgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwg ImN3ZGF5IiwgZF9saXRlX2N3ZGF5LCAwKTsKKworICByYl9kZWZpbmVfbWV0 aG9kKGNEYXRlTGlnaHQsICJ3ZGF5IiwgZF9saXRlX3dkYXksIDApOworCisg IHJiX2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwgImp1bGlhbj8iLCBkX2xp dGVfZmFsc2UsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlTGlnaHQs ICJncmVnb3JpYW4/IiwgZF9saXRlX3RydWUsIDApOworICByYl9kZWZpbmVf bWV0aG9kKGNEYXRlTGlnaHQsICJsZWFwPyIsIGRfbGl0ZV9sZWFwX3AsIDAp OworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwgInN0YXJ0Iiwg ZF9saXRlX3N0YXJ0LCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZUxp Z2h0LCAibmV3X3N0YXJ0IiwgZF9saXRlX25ld19zdGFydCwgLTEpOworICBy Yl9kZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGVMaWdodCwgIm5ld19vZmZz ZXQiLCBkX2xpdGVfbmV3X29mZnNldCwgLTEpOworCisgIHJiX2RlZmluZV9t ZXRob2QoY0RhdGVMaWdodCwgIisiLCBkX2xpdGVfcGx1cywgMSk7CisgIHJi X2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwgIi0iLCBkX2xpdGVfbWludXMs IDEpOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwgIjw9PiIs IGRfbGl0ZV9jbXAsIDEpOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlTGln aHQsICI9PT0iLCBkX2xpdGVfZXFlcWVxLCAxKTsKKyAgcmJfZGVmaW5lX21l dGhvZChjRGF0ZUxpZ2h0LCAiZXFsPyIsIGRfbGl0ZV9lcWxfcCwgMSk7Cisg IHJiX2RlZmluZV9tZXRob2QoY0RhdGVMaWdodCwgImhhc2giLCBkX2xpdGVf aGFzaCwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZUxpZ2h0LCAi dG9fcyIsIGRfbGl0ZV90b19zLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChj RGF0ZUxpZ2h0LCAiaW5zcGVjdCIsIGRfbGl0ZV9pbnNwZWN0LCAwKTsKKwor ICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlTGlnaHQsICJtYXJzaGFsX2R1bXAi LCBkX2xpdGVfbWFyc2hhbF9kdW1wLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhv ZChjRGF0ZUxpZ2h0LCAibWFyc2hhbF9sb2FkIiwgZF9saXRlX21hcnNoYWxf bG9hZCwgMSk7CisKKyAgLyogZGF0ZXRpbWUgbGlnaHQgKi8KKworICBjRGF0 ZVRpbWUgPSByYl9kZWZpbmVfY2xhc3MoIkRhdGVUaW1lIiwgY0RhdGUpOwor ICBjRGF0ZVRpbWVMaWdodCA9IHJiX2RlZmluZV9jbGFzc191bmRlcihjRGF0 ZVRpbWUsICJMaWdodCIsIGNEYXRlVGltZSk7CisKKyAgcmJfZGVmaW5lX2Fs bG9jX2Z1bmMoY0RhdGVUaW1lTGlnaHQsIGR0X2xpdGVfc19hbGxvYyk7Cisg IHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlVGltZSwgIm5ld19s ISIsIGRhdGV0aW1lX3NfbmV3X2xfYmFuZywgLTEpOworCisgIHJiX3VuZGVm X21ldGhvZChDTEFTU19PRihjRGF0ZVRpbWUpLCAidG9kYXkiKTsKKworICBy Yl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZVRpbWUsICJqZCIsIGRh dGV0aW1lX3NfamQsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRo b2QoY0RhdGVUaW1lLCAib3JkaW5hbCIsIGRhdGV0aW1lX3Nfb3JkaW5hbCwg LTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZVRpbWUs ICJjaXZpbCIsIGRhdGV0aW1lX3NfY2l2aWwsIC0xKTsKKyAgcmJfZGVmaW5l X3NpbmdsZXRvbl9tZXRob2QoY0RhdGVUaW1lLCAibmV3IiwgZGF0ZXRpbWVf c19jaXZpbCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj RGF0ZVRpbWUsICJjb21tZXJjaWFsIiwKKwkJCSAgICAgZGF0ZXRpbWVfc19j b21tZXJjaWFsLCAtMSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9k KGNEYXRlVGltZSwgIm5vdyIsIGRhdGV0aW1lX3Nfbm93LCAtMSk7CisKKyAg cmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgImFqZCIsIGR0X2xp dGVfYWpkLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdo dCwgImFtamQiLCBkdF9saXRlX2FtamQsIDApOworICByYl9kZWZpbmVfbWV0 aG9kKGNEYXRlVGltZUxpZ2h0LCAiamQiLCBkdF9saXRlX2pkLCAwKTsKKyAg cmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgIm1qZCIsIGR0X2xp dGVfbWpkLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdo dCwgImxkIiwgZHRfbGl0ZV9sZCwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhv ZChjRGF0ZVRpbWVMaWdodCwgInllYXIiLCBkdF9saXRlX3llYXIsIDApOwor ICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZUxpZ2h0LCAieWRheSIsIGR0 X2xpdGVfeWRheSwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1l TGlnaHQsICJtb24iLCBkdF9saXRlX21vbiwgMCk7CisgIHJiX2RlZmluZV9t ZXRob2QoY0RhdGVUaW1lTGlnaHQsICJtb250aCIsIGR0X2xpdGVfbW9uLCAw KTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgIm1kYXki LCBkdF9saXRlX21kYXksIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRl VGltZUxpZ2h0LCAiZGF5IiwgZHRfbGl0ZV9tZGF5LCAwKTsKKyAgcmJfZGVm aW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgImRheV9mcmFjdGlvbiIsIGR0 X2xpdGVfZGF5X2ZyYWN0aW9uLCAwKTsKKworICByYl9kZWZpbmVfcHJpdmF0 ZV9tZXRob2QoY0RhdGVUaW1lTGlnaHQsICJ3bnVtMCIsIGR0X2xpdGVfd251 bTAsIDApOworICByYl9kZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGVUaW1l TGlnaHQsICJ3bnVtMSIsIGR0X2xpdGVfd251bTEsIDApOworCisgIHJiX2Rl ZmluZV9tZXRob2QoY0RhdGVUaW1lTGlnaHQsICJob3VyIiwgZHRfbGl0ZV9o b3VyLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwg Im1pbiIsIGR0X2xpdGVfbWluLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChj RGF0ZVRpbWVMaWdodCwgIm1pbnV0ZSIsIGR0X2xpdGVfbWluLCAwKTsKKyAg cmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgInNlYyIsIGR0X2xp dGVfc2VjLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdo dCwgInNlY29uZCIsIGR0X2xpdGVfc2VjLCAwKTsKKyAgcmJfZGVmaW5lX21l dGhvZChjRGF0ZVRpbWVMaWdodCwgInNlY19mcmFjdGlvbiIsIGR0X2xpdGVf c2VjX2ZyYWN0aW9uLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRp bWVMaWdodCwgInNlY29uZF9mcmFjdGlvbiIsIGR0X2xpdGVfc2VjX2ZyYWN0 aW9uLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwg Im9mZnNldCIsIGR0X2xpdGVfb2Zmc2V0LCAwKTsKKyAgcmJfZGVmaW5lX21l dGhvZChjRGF0ZVRpbWVMaWdodCwgInpvbmUiLCBkdF9saXRlX3pvbmUsIDAp OworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lTGlnaHQsICJjd3ll YXIiLCBkdF9saXRlX2N3eWVhciwgMCk7CisgIHJiX2RlZmluZV9tZXRob2Qo Y0RhdGVUaW1lTGlnaHQsICJjd2VlayIsIGR0X2xpdGVfY3dlZWssIDApOwor ICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZUxpZ2h0LCAiY3dkYXkiLCBk dF9saXRlX2N3ZGF5LCAwKTsKKworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRl VGltZUxpZ2h0LCAid2RheSIsIGR0X2xpdGVfd2RheSwgMCk7CisKKyAgcmJf ZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgImp1bGlhbj8iLCBkX2xp dGVfZmFsc2UsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZUxp Z2h0LCAiZ3JlZ29yaWFuPyIsIGRfbGl0ZV90cnVlLCAwKTsKKyAgcmJfZGVm aW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgImxlYXA/IiwgZHRfbGl0ZV9s ZWFwX3AsIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lTGln aHQsICJzdGFydCIsIGR0X2xpdGVfc3RhcnQsIDApOworICByYl9kZWZpbmVf bWV0aG9kKGNEYXRlVGltZUxpZ2h0LCAibmV3X3N0YXJ0IiwgZHRfbGl0ZV9u ZXdfc3RhcnQsIC0xKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVM aWdodCwgIm5ld19vZmZzZXQiLCBkdF9saXRlX25ld19vZmZzZXQsIC0xKTsK KworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZUxpZ2h0LCAiKyIsIGR0 X2xpdGVfcGx1cywgMSk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1l TGlnaHQsICItIiwgZHRfbGl0ZV9taW51cywgMSk7CisKKyAgcmJfZGVmaW5l X21ldGhvZChjRGF0ZVRpbWVMaWdodCwgIjw9PiIsIGR0X2xpdGVfY21wLCAx KTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgIj09PSIs IGR0X2xpdGVfZXFlcWVxLCAxKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0 ZVRpbWVMaWdodCwgImVxbD8iLCBkdF9saXRlX2VxbF9wLCAxKTsKKyAgcmJf ZGVmaW5lX21ldGhvZChjRGF0ZVRpbWVMaWdodCwgImhhc2giLCBkdF9saXRl X2hhc2gsIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lTGln aHQsICJ0b19zIiwgZHRfbGl0ZV90b19zLCAwKTsKKyAgcmJfZGVmaW5lX21l dGhvZChjRGF0ZVRpbWVMaWdodCwgImluc3BlY3QiLCBkdF9saXRlX2luc3Bl Y3QsIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lTGlnaHQs ICJtYXJzaGFsX2R1bXAiLCBkdF9saXRlX21hcnNoYWxfZHVtcCwgMCk7Cisg IHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lTGlnaHQsICJtYXJzaGFsX2xv YWQiLCBkdF9saXRlX21hcnNoYWxfbG9hZCwgMSk7CisKKyNpZm5kZWYgTkRF QlVHCisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAidGVz dF9jaXZpbCIsIGRhdGVfc190ZXN0X2NpdmlsLCAwKTsKKyAgcmJfZGVmaW5l X3NpbmdsZXRvbl9tZXRob2QoY0RhdGUsICJ0ZXN0X29yZGluYWwiLCBkYXRl X3NfdGVzdF9vcmRpbmFsLCAwKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9t ZXRob2QoY0RhdGUsICJ0ZXN0X2NvbW1lcmNpYWwiLCBkYXRlX3NfdGVzdF9j b21tZXJjaWFsLCAwKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2Qo Y0RhdGUsICJ0ZXN0X3dlZWtudW0iLCBkYXRlX3NfdGVzdF93ZWVrbnVtLCAw KTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0RhdGUsICJ0ZXN0 X250aF9rZGF5IiwgZGF0ZV9zX3Rlc3RfbnRoX2tkYXksIDApOworICByYl9k ZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInRlc3RfYWxsIiwgZGF0 ZV9zX3Rlc3RfYWxsLCAwKTsKKyNlbmRpZgorfQoKUHJvcGVydHkgY2hhbmdl cyBvbjogZXh0L2RhdGUvZGF0ZV9jb3JlLmMKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KCklu ZGV4OiBleHQvZGF0ZS9leHRjb25mLnJiCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGV4dC9kYXRlL2V4dGNvbmYucmIJKHJldmlzaW9uIDApCisrKyBl eHQvZGF0ZS9leHRjb25mLnJiCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIg QEAKK3JlcXVpcmUgJ21rbWYnCitjcmVhdGVfbWFrZWZpbGUoJ2RhdGVfY29y ZScpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBleHQvZGF0ZS9leHRjb25mLnJi Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUK ICAgKyB0ZXh0L3BsYWluCgo= --mimepart_4d2b01093d0d5_1f23b28f5ea30d7--