IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgU0hBMjU2IGJsb2NrIHRyYW5zZm9ybSBmb3IgeDg2LiBTZXB0ZW1iZXIgMjAwNy4KIwojIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG92ZXIgY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUgdmFyaWVzIGZyb20KIyAxMCUgdG8gNDAlIFtzZWUgYmVsb3ddLiBOb3QgdmVyeSBpbXByZXNzaXZlIG9uIHNvbWUgtS1hcmNocywgYnV0CiMgaXQncyA1IHRpbWVzIHNtYWxsZXIgYW5kIG9wdGltaXppZXMgYW1vdW50IG9mIHdyaXRlcy4KIwojIE1heSAyMDEyLgojCiMgT3B0aW1pemF0aW9uIGluY2x1ZGluZyB0d28gb2YgUGF2ZWwgU2VtamFub3YncyBpZGVhcywgYWx0ZXJuYXRpdmUKIyBNYWogYW5kIGZ1bGwgdW5yb2xsLCByZXN1bHRlZCBpbiB+MjAtMjUlIGltcHJvdmVtZW50IG9uIG1vc3QgQ1BVcywKIyB+NyUgb24gUGVudGl1bSwgfjQwJSBvbiBBdG9tLiBBcyBmdWxseSB1bnJvbGxlZCBsb29wIGJvZHkgaXMgYWxtb3N0CiMgMTV4IGxhcmdlciwgOEtCIHZzLiA1NjBCLCBpdCdzIGZpcmVkIG9ubHkgZm9yIGxvbmdlciBpbnB1dHMuIEJ1dCBub3QKIyBvbiBQNCwgd2hlcmUgaXQga2lsbHMgcGVyZm9ybWFuY2UsIG5vciBTYW5keSBCcmlkZ2UsIHdoZXJlIGZvbGRlZAojIGxvb3AgaXMgYXBwcm94aW1hdGVseSBhcyBmYXN0Li4uCiMKIyBKdW5lIDIwMTIuCiMKIyBBZGQgQU1EIFhPUC1zcGVjaWZpYyBjb2RlIHBhdGgsID4zMCUgaW1wcm92ZW1lbnQgb24gQnVsbGRvemVyIG92ZXIKIyBNYXkgdmVyc2lvbiwgPjYwJSBvdmVyIG9yaWdpbmFsLiBBZGQgQVZYK3NocmQgY29kZSBwYXRoLCA+MjUlCiMgaW1wcm92ZW1lbnQgb24gU2FuZHkgQnJpZGdlIG92ZXIgTWF5IHZlcnNpb24sIDYwJSBvdmVyIG9yaWdpbmFsLgojCiMgTWF5IDIwMTMuCiMKIyBSZXBsYWNlIEFNRCBYT1AgY29kZSBwYXRoIHdpdGggU1NTRTMgdG8gY292ZXIgbW9yZSBwcm9jZXNzb3JzLgojIChCaWdnZXN0IGltcHJvdmVtZW50IGNvZWZmaWNpZW50IGlzIG9uIHVwY29taW5nIEF0b20gU2lsdmVybW9udCwKIyBub3Qgc2hvd24uKSBBZGQgQVZYK0JNSSBjb2RlIHBhdGguCiMKIyBNYXJjaCAyMDE0LgojCiMgQWRkIHN1cHBvcnQgZm9yIEludGVsIFNIQSBFeHRlbnNpb25zLgojCiMgUGVyZm9ybWFuY2UgaW4gY2xvY2sgY3ljbGVzIHBlciBwcm9jZXNzZWQgYnl0ZSAobGVzcyBpcyBiZXR0ZXIpOgojCiMJCWdjYwlpY2MJeDg2IGFzbSgqKQlTSU1ECXg4Nl82NCBhc20oKiopCQojIFBlbnRpdW0JNDYJNTcJNDAvMzgJCS0JLQojIFBJSUkJCTM2CTMzCTI3LzI0CQktCS0KIyBQNAkJNDEJMzgJMjgJCS0JMTcuMwojIEFNRCBLOAkyNwkyNQkxOS8xNS41CQktCTE0LjkKIyBDb3JlMgkJMjYJMjMJMTgvMTUuNgkJMTQuMwkxMy44CiMgV2VzdG1lcmUJMjcJLQkxOS8xNS43CQkxMy40CTEyLjMKIyBTYW5keSBCcmlkZ2UJMjUJLQkxNS45CQkxMi40CTExLjYKIyBJdnkgQnJpZGdlCTI0CS0JMTUuMAkJMTEuNAkxMC4zCiMgSGFzd2VsbAkyMgktCTEzLjkJCTkuNDYJNy44MAojIEJ1bGxkb3plcgkzNgktCTI3LzIyCQkxNy4wCTEzLjYKIyBWSUEgTmFubwkzNgktCTI1LzIyCQkxNi44CTE2LjUKIyBBdG9tCQk1MAktCTMwLzI1CQkyMS45CTE4LjkKIwojICgqKQludW1iZXJzIGFmdGVyIHNsYXNoIGFyZSBmb3IgdW5yb2xsZWQgbG9vcCwgd2hlcmUgYXBwbGljYWJsZTsKIyAoKiopCXg4Nl82NCBhc3NlbWJseSBwZXJmb3JtYW5jZSBpcyBwcmVzZW50ZWQgZm9yIHJlZmVyZW5jZQojCXB1cnBvc2VzLCByZXN1bHRzIGFyZSBiZXN0LWF2YWlsYWJsZTsKCiQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CnB1c2goQElOQywiJHtkaXJ9IiwiJHtkaXJ9Li4vLi4vcGVybGFzbSIpOwpyZXF1aXJlICJ4ODZhc20ucGwiOwoKJmFzbV9pbml0KCRBUkdWWzBdLCJzaGE1MTItNTg2LnBsIiwkQVJHVlskI0FSR1ZdIGVxICIzODYiKTsKCiR4bW09JGF2eD0wOwpmb3IgKEBBUkdWKSB7ICR4bW09MSBpZiAoLy1ET1BFTlNTTF9JQTMyX1NTRTIvKTsgfQoKaWYgKCR4bW0gJiYJYCRFTlZ7Q0N9IC1XYSwtdiAtYyAtbyAvZGV2L251bGwgLXggYXNzZW1ibGVyIC9kZXYvbnVsbCAyPiYxYAoJCQk9fiAvR05VIGFzc2VtYmxlciB2ZXJzaW9uIChbMi05XVwuWzAtOV0rKS8pIHsKCSRhdnggPSAoJDE+PTIuMTkpICsgKCQxPj0yLjIyKTsKfQoKaWYgKCR4bW0gJiYgISRhdnggJiYgJEFSR1ZbMF0gZXEgIndpbjMybiIgJiYKCQlgbmFzbSAtdiAyPiYxYCA9fiAvTkFTTSB2ZXJzaW9uIChbMi05XVwuWzAtOV0rKS8pIHsKCSRhdnggPSAoJDE+PTIuMDMpICsgKCQxPj0yLjEwKTsKfQoKaWYgKCR4bW0gJiYgISRhdnggJiYgJEFSR1ZbMF0gZXEgIndpbjMyIiAmJgoJCWBtbCAyPiYxYCA9fiAvVmVyc2lvbiAoWzAtOV0rKVwuLykgewoJJGF2eCA9ICgkMT49MTApICsgKCQxPj0xMSk7Cn0KCiR1bnJvbGxfYWZ0ZXIgPSA2NCo0OwkjIElmIHByZS1ldmljdGVkIGZyb20gTDFQIGNhY2hlIGZpcnN0IHNwaW4gb2YKCQkJIyBmdWxseSB1bnJvbGxlZCBsb29wIHdhcyBtZWFzdXJlZCB0byBydW4gYWJvdXQKCQkJIyAzLTR4IHNsb3dlci4gSWYgc2xvd2Rvd24gY29lZmZpY2llbnQgaXMgTiBhbmQKCQkJIyB1bnJvbGxlZCBsb29wIGlzIG0gdGltZXMgZmFzdGVyLCB0aGVuIHlvdSBicmVhawoJCQkjIGV2ZW4gYXQgKE4tMSkvKG0tMSkgYmxvY2tzLiBUaGVuIGl0IG5lZWRzIHRvIGJlCgkJCSMgYWRqdXN0ZWQgZm9yIHByb2JhYmlsaXR5IG9mIGNvZGUgYmVpbmcgZXZpY3RlZCwKCQkJIyBjb2RlIHNpemUvY2FjaGUgc2l6ZT0xLzQuIFR5cGljYWwgbSBpcyAxLjE1Li4uCgokQT0iZWF4IjsKJEU9ImVkeCI7CiRUPSJlYngiOwokQW9mZj0mRFdQKDQsImVzcCIpOwokQm9mZj0mRFdQKDgsImVzcCIpOwokQ29mZj0mRFdQKDEyLCJlc3AiKTsKJERvZmY9JkRXUCgxNiwiZXNwIik7CiRFb2ZmPSZEV1AoMjAsImVzcCIpOwokRm9mZj0mRFdQKDI0LCJlc3AiKTsKJEdvZmY9JkRXUCgyOCwiZXNwIik7CiRIb2ZmPSZEV1AoMzIsImVzcCIpOwokWG9mZj0mRFdQKDM2LCJlc3AiKTsKJEsyNTY9ImVicCI7CgpzdWIgQk9EWV8xNl82MygpIHsKCSZtb3YJKCRULCJlY3giKTsJCQkjICJlY3giIGlzIHByZWxvYWRlZAoJICZtb3YJKCJlc2kiLCZEV1AoNCooOSsxNSsxNi0xNCksImVzcCIpKTsKCSZyb3IJKCJlY3giLDE4LTcpOwoJICZtb3YJKCJlZGkiLCJlc2kiKTsKCSZyb3IJKCJlc2kiLDE5LTE3KTsKCSAmeG9yCSgiZWN4IiwkVCk7CgkgJnNocgkoJFQsMyk7Cgkmcm9yCSgiZWN4Iiw3KTsKCSAmeG9yCSgiZXNpIiwiZWRpIik7CgkgJnhvcgkoJFQsImVjeCIpOwkJCSMgVCA9IHNpZ21hMChYWy0xNV0pCgkmcm9yCSgiZXNpIiwxNyk7CgkgJmFkZAkoJFQsJkRXUCg0Kig5KzE1KzE2KSwiZXNwIikpOwkjIFQgKz0gWFstMTZdCgkmc2hyCSgiZWRpIiwxMCk7CgkgJmFkZAkoJFQsJkRXUCg0Kig5KzE1KzE2LTkpLCJlc3AiKSk7CSMgVCArPSBYWy03XQoJIyZ4b3IJKCJlZGkiLCJlc2kiKQkJCSMgc2lnbWExKFhbLTJdKQoJIyAmYWRkCSgkVCwiZWRpIik7CQkJIyBUICs9IHNpZ21hMShYWy0yXSkKCSMgJm1vdgkoJkRXUCg0Kig5KzE1KSwiZXNwIiksJFQpOwkjIHNhdmUgWFswXQoKCSZCT0RZXzAwXzE1KDEpOwp9CnN1YiBCT0RZXzAwXzE1KCkgewogICAgbXkgJGluXzE2XzYzPXNoaWZ0OwoKCSZtb3YJKCJlY3giLCRFKTsKCSAmeG9yCSgiZWRpIiwiZXNpIikJCQlpZiAoJGluXzE2XzYzKTsJIyBzaWdtYTEoWFstMl0pCgkgJm1vdgkoImVzaSIsJEZvZmYpOwoJJnJvcgkoImVjeCIsMjUtMTEpOwoJICZhZGQJKCRULCJlZGkiKQkJCWlmICgkaW5fMTZfNjMpOwkjIFQgKz0gc2lnbWExKFhbLTJdKQoJICZtb3YJKCJlZGkiLCRHb2ZmKTsKCSZ4b3IJKCJlY3giLCRFKTsKCSAmeG9yCSgiZXNpIiwiZWRpIik7CgkgJm1vdgkoJFQsJkRXUCg0Kig5KzE1KSwiZXNwIikpCWlmICghJGluXzE2XzYzKTsKCSAmbW92CSgmRFdQKDQqKDkrMTUpLCJlc3AiKSwkVCkJaWYgKCRpbl8xNl82Myk7CSMgc2F2ZSBYWzBdCgkmcm9yCSgiZWN4IiwxMS02KTsKCSAmYW5kCSgiZXNpIiwkRSk7CgkgJm1vdgkoJEVvZmYsJEUpOwkJIyBtb2R1bG8tc2NoZWR1bGVkCgkmeG9yCSgkRSwiZWN4Iik7CgkgJmFkZAkoJFQsJEhvZmYpOwkJIyBUICs9IGgKCSAmeG9yCSgiZXNpIiwiZWRpIik7CQkjIENoKGUsZixnKQoJJnJvcgkoJEUsNik7CQkJIyBTaWdtYTEoZSkKCSAmbW92CSgiZWN4IiwkQSk7CgkgJmFkZAkoJFQsImVzaSIpOwkJIyBUICs9IENoKGUsZixnKQoKCSZyb3IJKCJlY3giLDIyLTEzKTsKCSAmYWRkCSgkVCwkRSk7CQkjIFQgKz0gU2lnbWExKGUpCgkgJm1vdgkoImVkaSIsJEJvZmYpOwoJJnhvcgkoImVjeCIsJEEpOwoJICZtb3YJKCRBb2ZmLCRBKTsJCSMgbW9kdWxvLXNjaGVkdWxlZAoJICZsZWEJKCJlc3AiLCZEV1AoLTQsImVzcCIpKTsKCSZyb3IJKCJlY3giLDEzLTIpOwoJICZtb3YJKCJlc2kiLCZEV1AoMCwkSzI1NikpOwoJJnhvcgkoImVjeCIsJEEpOwoJICZtb3YJKCRFLCRFb2ZmKTsJCSMgZSBpbiBuZXh0IGl0ZXJhdGlvbiwgZCBpbiB0aGlzIG9uZQoJICZ4b3IJKCRBLCJlZGkiKTsJCSMgYSBePSBiCgkmcm9yCSgiZWN4IiwyKTsJCSMgU2lnbWEwKGEpCgoJICZhZGQJKCRULCJlc2kiKTsJCSMgVCs9IEtbaV0KCSAmbW92CSgmRFdQKDAsImVzcCIpLCRBKTsJIyAoYl5jKSBpbiBuZXh0IHJvdW5kCgkmYWRkCSgkRSwkVCk7CQkjIGQgKz0gVAoJICZhbmQJKCRBLCZEV1AoNCwiZXNwIikpOwkjIGEgJj0gKGJeYykKCSZhZGQJKCRULCJlY3giKTsJCSMgVCArPSBTaWdtYTAoYSkKCSAmeG9yCSgkQSwiZWRpIik7CQkjIGggPSBNYWooYSxiLGMpID0gQ2goYV5iLGMsYikKCSAmbW92CSgiZWN4IiwmRFdQKDQqKDkrMTUrMTYtMSksImVzcCIpKQlpZiAoJGluXzE2XzYzKTsJIyBwcmVsb2FkIFQKCSZhZGQJKCRLMjU2LDQpOwoJICZhZGQJKCRBLCRUKTsJCSMgaCArPSBUCn0KCiZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKQkJaWYgKCEkaTM4Nik7CgomZnVuY3Rpb25fYmVnaW4oInNoYTI1Nl9ibG9ja19kYXRhX29yZGVyIik7CgkmbW92CSgiZXNpIix3cGFyYW0oMCkpOwkjIGN0eAoJJm1vdgkoImVkaSIsd3BhcmFtKDEpKTsJIyBpbnAKCSZtb3YJKCJlYXgiLHdwYXJhbSgyKSk7CSMgbnVtCgkmbW92CSgiZWJ4IiwiZXNwIik7CQkjIHNhdmVkIHNwCgoJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50IikpOwkjIG1ha2UgaXQgUElDIQomc2V0X2xhYmVsKCJwaWNfcG9pbnQiKTsKCSZibGluZHBvcCgkSzI1Nik7CgkmbGVhCSgkSzI1NiwmRFdQKCZsYWJlbCgiSzI1NiIpLiItIi4mbGFiZWwoInBpY19wb2ludCIpLCRLMjU2KSk7CgoJJnN1YgkoImVzcCIsMTYpOwoJJmFuZAkoImVzcCIsLTY0KTsKCgkmc2hsCSgiZWF4Iiw2KTsKCSZhZGQJKCJlYXgiLCJlZGkiKTsKCSZtb3YJKCZEV1AoMCwiZXNwIiksImVzaSIpOwkjIGN0eAoJJm1vdgkoJkRXUCg0LCJlc3AiKSwiZWRpIik7CSMgaW5wCgkmbW92CSgmRFdQKDgsImVzcCIpLCJlYXgiKTsJIyBpbnArbnVtKjEyOAoJJm1vdgkoJkRXUCgxMiwiZXNwIiksImVieCIpOwkjIHNhdmVkIHNwCgkJCQkJCWlmICghJGkzODYgJiYgJHhtbSkgewoJJnBpY21ldXAoImVkeCIsIk9QRU5TU0xfaWEzMmNhcF9QIiwkSzI1NiwmbGFiZWwoIksyNTYiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDAsImVkeCIpKTsKCSZtb3YJKCJlYngiLCZEV1AoNCwiZWR4IikpOwoJJnRlc3QJKCJlY3giLDE8PDIwKTsJCSMgY2hlY2sgZm9yIFA0Cgkmam56CSgmbGFiZWwoImxvb3AiKSk7CgkmbW92CSgiZWR4IiwmRFdQKDgsImVkeCIpKQlpZiAoJHhtbSk7CgkmdGVzdAkoImVjeCIsMTw8MjQpOwkJIyBjaGVjayBmb3IgRlhTUgoJJmp6CSgkdW5yb2xsX2FmdGVyPyZsYWJlbCgibm9feG1tIik6JmxhYmVsKCJsb29wIikpOwoJJmFuZAkoImVjeCIsMTw8MzApOwkJIyBtYXNrICJJbnRlbCBDUFUiIGJpdAoJJmFuZAkoImVieCIsMTw8Mjh8MTw8OSk7CSMgbWFzayBBVlggYW5kIFNTU0UzIGJpdHMKCSZ0ZXN0CSgiZWR4IiwxPDwyOSkJCWlmICgkeG1tKTsJIyBjaGVjayBmb3IgU0hBCgkmam56CSgmbGFiZWwoInNoYWV4dCIpKQlpZiAoJHhtbSk7Cgkmb3IJKCJlY3giLCJlYngiKTsKCSZhbmQJKCJlY3giLDE8PDI4fDE8PDMwKTsKCSZjbXAJKCJlY3giLDE8PDI4fDE8PDMwKTsKCQkJCQlpZiAoJHhtbSkgewoJJmplCSgmbGFiZWwoIkFWWCIpKQkJaWYgKCRhdngpOwoJJnRlc3QJKCJlYngiLDE8PDkpOwkJIyBjaGVjayBmb3IgU1NTRTMKCSZqbnoJKCZsYWJlbCgiU1NTRTMiKSk7CgkJCQkJfSBlbHNlIHsKCSZqZQkoJmxhYmVsKCJsb29wX3NocmQiKSk7CgkJCQkJfQoJCQkJCQlpZiAoJHVucm9sbF9hZnRlcikgewomc2V0X2xhYmVsKCJub194bW0iKTsKCSZzdWIJKCJlYXgiLCJlZGkiKTsKCSZjbXAJKCJlYXgiLCR1bnJvbGxfYWZ0ZXIpOwoJJmphZQkoJmxhYmVsKCJ1bnJvbGxlZCIpKTsKCQkJCQkJfSB9Cgkmam1wCSgmbGFiZWwoImxvb3AiKSk7CgpzdWIgQ09NUEFDVF9MT09QKCkgewpteSAkc3VmZml4PXNoaWZ0OwoKJnNldF9sYWJlbCgibG9vcCRzdWZmaXgiLCRzdWZmaXg/MzI6MTYpOwogICAgIyBjb3B5IGlucHV0IGJsb2NrIHRvIHN0YWNrIHJldmVyc2luZyBieXRlIGFuZCBkd29yZCBvcmRlcgogICAgZm9yKCRpPTA7JGk8NDskaSsrKSB7CgkmbW92CSgiZWF4IiwmRFdQKCRpKjE2KzAsImVkaSIpKTsKCSZtb3YJKCJlYngiLCZEV1AoJGkqMTYrNCwiZWRpIikpOwoJJm1vdgkoImVjeCIsJkRXUCgkaSoxNis4LCJlZGkiKSk7CgkmYnN3YXAJKCJlYXgiKTsKCSZtb3YJKCJlZHgiLCZEV1AoJGkqMTYrMTIsImVkaSIpKTsKCSZic3dhcAkoImVieCIpOwoJJnB1c2gJKCJlYXgiKTsKCSZic3dhcAkoImVjeCIpOwoJJnB1c2gJKCJlYngiKTsKCSZic3dhcAkoImVkeCIpOwoJJnB1c2gJKCJlY3giKTsKCSZwdXNoCSgiZWR4Iik7CiAgICB9CgkmYWRkCSgiZWRpIiw2NCk7CgkmbGVhCSgiZXNwIiwmRFdQKC00KjksImVzcCIpKTsjIHBsYWNlIGZvciBBLEIsQyxELEUsRixHLEgKCSZtb3YJKCZEV1AoNCooOSsxNikrNCwiZXNwIiksImVkaSIpOwoKCSMgY29weSBjdHgtPmhbMC03XSB0byBBLEIsQyxELEUsRixHLEggb24gc3RhY2sKCSZtb3YJKCRBLCZEV1AoMCwiZXNpIikpOwoJJm1vdgkoImVieCIsJkRXUCg0LCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDgsImVzaSIpKTsKCSZtb3YJKCJlZGkiLCZEV1AoMTIsImVzaSIpKTsKCSMgJm1vdgkoJEFvZmYsJEEpOwoJJm1vdgkoJEJvZmYsImVieCIpOwoJJnhvcgkoImVieCIsImVjeCIpOwoJJm1vdgkoJENvZmYsImVjeCIpOwoJJm1vdgkoJERvZmYsImVkaSIpOwoJJm1vdgkoJkRXUCgwLCJlc3AiKSwiZWJ4Iik7CSMgbWFnaWMKCSZtb3YJKCRFLCZEV1AoMTYsImVzaSIpKTsJCgkmbW92CSgiZWJ4IiwmRFdQKDIwLCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDI0LCJlc2kiKSk7CgkmbW92CSgiZWRpIiwmRFdQKDI4LCJlc2kiKSk7CgkjICZtb3YJKCRFb2ZmLCRFKTsKCSZtb3YJKCRGb2ZmLCJlYngiKTsKCSZtb3YJKCRHb2ZmLCJlY3giKTsKCSZtb3YJKCRIb2ZmLCJlZGkiKTsKCiZzZXRfbGFiZWwoIjAwXzE1JHN1ZmZpeCIsMTYpOwoKCSZCT0RZXzAwXzE1KCk7CgoJJmNtcAkoImVzaSIsMHhjMTliZjE3NCk7Cgkmam5lCSgmbGFiZWwoIjAwXzE1JHN1ZmZpeCIpKTsKCgkmbW92CSgiZWN4IiwmRFdQKDQqKDkrMTUrMTYtMSksImVzcCIpKTsJIyBwcmVsb2FkZWQgaW4gQk9EWV8wMF8xNSgxKQoJJmptcAkoJmxhYmVsKCIxNl82MyRzdWZmaXgiKSk7Cgomc2V0X2xhYmVsKCIxNl82MyRzdWZmaXgiLDE2KTsKCgkmQk9EWV8xNl82MygpOwoKCSZjbXAJKCJlc2kiLDB4YzY3MTc4ZjIpOwoJJmpuZQkoJmxhYmVsKCIxNl82MyRzdWZmaXgiKSk7CgoJJm1vdgkoImVzaSIsJkRXUCg0Kig5KzE2KzY0KSswLCJlc3AiKSk7I2N0eAoJIyAmbW92CSgkQSwkQW9mZik7CgkmbW92CSgiZWJ4IiwkQm9mZik7CgkjICZtb3YJKCJlZGkiLCRDb2ZmKTsKCSZtb3YJKCJlY3giLCREb2ZmKTsKCSZhZGQJKCRBLCZEV1AoMCwiZXNpIikpOwoJJmFkZAkoImVieCIsJkRXUCg0LCJlc2kiKSk7CgkmYWRkCSgiZWRpIiwmRFdQKDgsImVzaSIpKTsKCSZhZGQJKCJlY3giLCZEV1AoMTIsImVzaSIpKTsKCSZtb3YJKCZEV1AoMCwiZXNpIiksJEEpOwoJJm1vdgkoJkRXUCg0LCJlc2kiKSwiZWJ4Iik7CgkmbW92CSgmRFdQKDgsImVzaSIpLCJlZGkiKTsKCSZtb3YJKCZEV1AoMTIsImVzaSIpLCJlY3giKTsKCSMgJm1vdgkoJEUsJEVvZmYpOwoJJm1vdgkoImVheCIsJEZvZmYpOwoJJm1vdgkoImVieCIsJEdvZmYpOwoJJm1vdgkoImVjeCIsJEhvZmYpOwoJJm1vdgkoImVkaSIsJkRXUCg0Kig5KzE2KzY0KSs0LCJlc3AiKSk7I2lucAoJJmFkZAkoJEUsJkRXUCgxNiwiZXNpIikpOwoJJmFkZAkoImVheCIsJkRXUCgyMCwiZXNpIikpOwoJJmFkZAkoImVieCIsJkRXUCgyNCwiZXNpIikpOwoJJmFkZAkoImVjeCIsJkRXUCgyOCwiZXNpIikpOwoJJm1vdgkoJkRXUCgxNiwiZXNpIiksJEUpOwoJJm1vdgkoJkRXUCgyMCwiZXNpIiksImVheCIpOwoJJm1vdgkoJkRXUCgyNCwiZXNpIiksImVieCIpOwoJJm1vdgkoJkRXUCgyOCwiZXNpIiksImVjeCIpOwoKCSZsZWEJKCJlc3AiLCZEV1AoNCooOSsxNis2NCksImVzcCIpKTsjIGRlc3Ryb3kgZnJhbWUKCSZzdWIJKCRLMjU2LDQqNjQpOwkJCSMgcmV3aW5kIEsKCgkmY21wCSgiZWRpIiwmRFdQKDgsImVzcCIpKTsJCSMgYXJlIHdlIGRvbmUgeWV0PwoJJmpiCSgmbGFiZWwoImxvb3Akc3VmZml4IikpOwp9CgkmQ09NUEFDVF9MT09QKCk7CgkmbW92CSgiZXNwIiwmRFdQKDEyLCJlc3AiKSk7CQkjIHJlc3RvcmUgc3AKJmZ1bmN0aW9uX2VuZF9BKCk7CgkJCQkJCWlmICghJGkzODYgJiYgISR4bW0pIHsKCSMgfjIwJSBpbXByb3ZlbWVudCBvbiBTYW5keSBCcmlkZ2UKCWxvY2FsICpyb3IgPSBzdWIgeyAmc2hyZChAX1swXSxAXykgfTsKCSZDT01QQUNUX0xPT1AoIl9zaHJkIik7CgkmbW92CSgiZXNwIiwmRFdQKDEyLCJlc3AiKSk7CQkjIHJlc3RvcmUgc3AKJmZ1bmN0aW9uX2VuZF9BKCk7CgkJCQkJCX0KCiZzZXRfbGFiZWwoIksyNTYiLDY0KTsJIyBZZXMhIEkga2VlcCBpdCBpbiB0aGUgY29kZSBzZWdtZW50IQpASzI1Nj0oCTB4NDI4YTJmOTgsMHg3MTM3NDQ5MSwweGI1YzBmYmNmLDB4ZTliNWRiYTUsCgkweDM5NTZjMjViLDB4NTlmMTExZjEsMHg5MjNmODJhNCwweGFiMWM1ZWQ1LAoJMHhkODA3YWE5OCwweDEyODM1YjAxLDB4MjQzMTg1YmUsMHg1NTBjN2RjMywKCTB4NzJiZTVkNzQsMHg4MGRlYjFmZSwweDliZGMwNmE3LDB4YzE5YmYxNzQsCgkweGU0OWI2OWMxLDB4ZWZiZTQ3ODYsMHgwZmMxOWRjNiwweDI0MGNhMWNjLAoJMHgyZGU5MmM2ZiwweDRhNzQ4NGFhLDB4NWNiMGE5ZGMsMHg3NmY5ODhkYSwKCTB4OTgzZTUxNTIsMHhhODMxYzY2ZCwweGIwMDMyN2M4LDB4YmY1OTdmYzcsCgkweGM2ZTAwYmYzLDB4ZDVhNzkxNDcsMHgwNmNhNjM1MSwweDE0MjkyOTY3LAoJMHgyN2I3MGE4NSwweDJlMWIyMTM4LDB4NGQyYzZkZmMsMHg1MzM4MGQxMywKCTB4NjUwYTczNTQsMHg3NjZhMGFiYiwweDgxYzJjOTJlLDB4OTI3MjJjODUsCgkweGEyYmZlOGExLDB4YTgxYTY2NGIsMHhjMjRiOGI3MCwweGM3NmM1MWEzLAoJMHhkMTkyZTgxOSwweGQ2OTkwNjI0LDB4ZjQwZTM1ODUsMHgxMDZhYTA3MCwKCTB4MTlhNGMxMTYsMHgxZTM3NmMwOCwweDI3NDg3NzRjLDB4MzRiMGJjYjUsCgkweDM5MWMwY2IzLDB4NGVkOGFhNGEsMHg1YjljY2E0ZiwweDY4MmU2ZmYzLAoJMHg3NDhmODJlZSwweDc4YTU2MzZmLDB4ODRjODc4MTQsMHg4Y2M3MDIwOCwKCTB4OTBiZWZmZmEsMHhhNDUwNmNlYiwweGJlZjlhM2Y3LDB4YzY3MTc4ZjIJKTsKJmRhdGFfd29yZChASzI1Nik7CiZkYXRhX3dvcmQoMHgwMDAxMDIwMywweDA0MDUwNjA3LDB4MDgwOTBhMGIsMHgwYzBkMGUwZik7CSMgYnl0ZSBzd2FwIG1hc2sKJmFzY2l6KCJTSEEyNTYgYmxvY2sgdHJhbnNmb3JtIGZvciB4ODYsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iKTsKCigkYSwkYiwkYywkZCwkZSwkZiwkZywkaCk9KDAuLjcpOwkjIG9mZnNldHMKc3ViIG9mZiB7ICZEV1AoNCooKChzaGlmdCktJGkpJjcpLCJlc3AiKTsgfQoKaWYgKCEkaTM4NiAmJiAkdW5yb2xsX2FmdGVyKSB7Cm15IEBBSD0oJEEsJEsyNTYpOwoKJnNldF9sYWJlbCgidW5yb2xsZWQiLDE2KTsKCSZsZWEJKCJlc3AiLCZEV1AoLTk2LCJlc3AiKSk7CgkjIGNvcHkgY3R4LT5oWzAtN10gdG8gQSxCLEMsRCxFLEYsRyxIIG9uIHN0YWNrCgkmbW92CSgkQUhbMF0sJkRXUCgwLCJlc2kiKSk7CgkmbW92CSgkQUhbMV0sJkRXUCg0LCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDgsImVzaSIpKTsKCSZtb3YJKCJlYngiLCZEV1AoMTIsImVzaSIpKTsKCSMmbW92CSgmRFdQKDAsImVzcCIpLCRBSFswXSk7CgkmbW92CSgmRFdQKDQsImVzcCIpLCRBSFsxXSk7CgkmeG9yCSgkQUhbMV0sImVjeCIpOwkJIyBtYWdpYwoJJm1vdgkoJkRXUCg4LCJlc3AiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDEyLCJlc3AiKSwiZWJ4Iik7CgkmbW92CSgkRSwmRFdQKDE2LCJlc2kiKSk7CQoJJm1vdgkoImVieCIsJkRXUCgyMCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCgyNCwiZXNpIikpOwoJJm1vdgkoImVzaSIsJkRXUCgyOCwiZXNpIikpOwoJIyZtb3YJKCZEV1AoMTYsImVzcCIpLCRFKTsKCSZtb3YJKCZEV1AoMjAsImVzcCIpLCJlYngiKTsKCSZtb3YJKCZEV1AoMjQsImVzcCIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMjgsImVzcCIpLCJlc2kiKTsKCSZqbXAJKCZsYWJlbCgiZ3JhbmRfbG9vcCIpKTsKCiZzZXRfbGFiZWwoImdyYW5kX2xvb3AiLDE2KTsKICAgICMgY29weSBpbnB1dCBibG9jayB0byBzdGFjayByZXZlcnNpbmcgYnl0ZSBvcmRlcgogICAgZm9yKCRpPTA7JGk8NTskaSsrKSB7CgkmbW92CSgiZWJ4IiwmRFdQKDEyKiRpKzAsImVkaSIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMTIqJGkrNCwiZWRpIikpOwoJJmJzd2FwCSgiZWJ4Iik7CgkmbW92CSgiZXNpIiwmRFdQKDEyKiRpKzgsImVkaSIpKTsKCSZic3dhcAkoImVjeCIpOwoJJm1vdgkoJkRXUCgzMisxMiokaSswLCJlc3AiKSwiZWJ4Iik7CgkmYnN3YXAJKCJlc2kiKTsKCSZtb3YJKCZEV1AoMzIrMTIqJGkrNCwiZXNwIiksImVjeCIpOwoJJm1vdgkoJkRXUCgzMisxMiokaSs4LCJlc3AiKSwiZXNpIik7CiAgICB9CgkmbW92CSgiZWJ4IiwmRFdQKCRpKjEyLCJlZGkiKSk7CgkmYWRkCSgiZWRpIiw2NCk7CgkmYnN3YXAJKCJlYngiKTsKCSZtb3YJKCZEV1AoOTYrNCwiZXNwIiksImVkaSIpOwoJJm1vdgkoJkRXUCgzMisxMiokaSwiZXNwIiksImVieCIpOwoKICAgIG15ICgkdDEsJHQyKSA9ICgiZWN4IiwiZXNpIik7CgogICAgZm9yICgkaT0wOyRpPDY0OyRpKyspIHsKCiAgICAgIGlmICgkaT49MTYpIHsKCSZtb3YJKCRULCR0MSk7CQkJIyAkdDEgaXMgcHJlbG9hZGVkCgkjICZtb3YJKCR0MiwmRFdQKDMyKzQqKCgkaSsxNCkmMTUpLCJlc3AiKSk7Cgkmcm9yCSgkdDEsMTgtNyk7CgkgJm1vdgkoImVkaSIsJHQyKTsKCSZyb3IJKCR0MiwxOS0xNyk7CgkgJnhvcgkoJHQxLCRUKTsKCSAmc2hyCSgkVCwzKTsKCSZyb3IJKCR0MSw3KTsKCSAmeG9yCSgkdDIsImVkaSIpOwoJICZ4b3IJKCRULCR0MSk7CQkJIyBUID0gc2lnbWEwKFhbLTE1XSkKCSZyb3IJKCR0MiwxNyk7CgkgJmFkZAkoJFQsJkRXUCgzMis0KigkaSYxNSksImVzcCIpKTsJIyBUICs9IFhbLTE2XQoJJnNocgkoImVkaSIsMTApOwoJICZhZGQJKCRULCZEV1AoMzIrNCooKCRpKzkpJjE1KSwiZXNwIikpOwkjIFQgKz0gWFstN10KCSMmeG9yCSgiZWRpIiwkdDIpCQkJIyBzaWdtYTEoWFstMl0pCgkjICZhZGQJKCRULCJlZGkiKTsJCQkjIFQgKz0gc2lnbWExKFhbLTJdKQoJIyAmbW92CSgmRFdQKDQqKDkrMTUpLCJlc3AiKSwkVCk7CSMgc2F2ZSBYWzBdCiAgICAgIH0KCSZtb3YJKCR0MSwkRSk7CgkgJnhvcgkoImVkaSIsJHQyKQkJCWlmICgkaT49MTYpOwkjIHNpZ21hMShYWy0yXSkKCSAmbW92CSgkdDIsJm9mZigkZikpOwoJJnJvcgkoJEUsMjUtMTEpOwoJICZhZGQJKCRULCJlZGkiKQkJCWlmICgkaT49MTYpOwkjIFQgKz0gc2lnbWExKFhbLTJdKQoJICZtb3YJKCJlZGkiLCZvZmYoJGcpKTsKCSZ4b3IJKCRFLCR0MSk7CgkgJm1vdgkoJFQsJkRXUCgzMis0KigkaSYxNSksImVzcCIpKQlpZiAoJGk8MTYpOwkjIFhbaV0KCSAmbW92CSgmRFdQKDMyKzQqKCRpJjE1KSwiZXNwIiksJFQpCWlmICgkaT49MTYgJiYgJGk8NjIpOwkjIHNhdmUgWFswXQoJICZ4b3IJKCR0MiwiZWRpIik7Cgkmcm9yCSgkRSwxMS02KTsKCSAmYW5kCSgkdDIsJHQxKTsKCSAmbW92CSgmb2ZmKCRlKSwkdDEpOwkJIyBzYXZlICRFLCBtb2R1bG8tc2NoZWR1bGVkCgkmeG9yCSgkRSwkdDEpOwoJICZhZGQJKCRULCZvZmYoJGgpKTsJCSMgVCArPSBoCgkgJnhvcgkoImVkaSIsJHQyKTsJCSMgQ2goZSxmLGcpCgkmcm9yCSgkRSw2KTsJCQkjIFNpZ21hMShlKQoJICZtb3YJKCR0MSwkQUhbMF0pOwoJICZhZGQJKCRULCJlZGkiKTsJCSMgVCArPSBDaChlLGYsZykKCgkmcm9yCSgkdDEsMjItMTMpOwoJICZtb3YJKCR0MiwkQUhbMF0pOwoJICZtb3YJKCJlZGkiLCZvZmYoJGIpKTsKCSZ4b3IJKCR0MSwkQUhbMF0pOwoJICZtb3YJKCZvZmYoJGEpLCRBSFswXSk7CSMgc2F2ZSAkQSwgbW9kdWxvLXNjaGVkdWxlZAoJICZ4b3IJKCRBSFswXSwiZWRpIik7CQkjIGEgXj0gYiwgKGJeYykgaW4gbmV4dCByb3VuZAoJJnJvcgkoJHQxLDEzLTIpOwoJICZhbmQJKCRBSFsxXSwkQUhbMF0pOwkjIChiXmMpICY9IChhXmIpCgkgJmxlYQkoJEUsJkRXUChASzI1NlskaV0sJFQsJEUpKTsJIyBUICs9IFNpZ21hMSgxKStLW2ldCgkmeG9yCSgkdDEsJHQyKTsKCSAmeG9yCSgkQUhbMV0sImVkaSIpOwkJIyBoID0gTWFqKGEsYixjKSA9IENoKGFeYixjLGIpCgkgJm1vdgkoJHQyLCZEV1AoMzIrNCooKCRpKzIpJjE1KSwiZXNwIikpCWlmICgkaT49MTUgJiYgJGk8NjMpOwoJJnJvcgkoJHQxLDIpOwkJIyBTaWdtYTAoYSkKCgkgJmFkZAkoJEFIWzFdLCRFKTsJCSMgaCArPSBUCgkgJmFkZAkoJEUsJm9mZigkZCkpOwkJIyBkICs9IFQKCSZhZGQJKCRBSFsxXSwkdDEpOwkJIyBoICs9IFNpZ21hMChhKQoJICZtb3YJKCR0MSwmRFdQKDMyKzQqKCgkaSsxNSkmMTUpLCJlc3AiKSkJaWYgKCRpPj0xNSAmJiAkaTw2Myk7CgoJQEFIID0gcmV2ZXJzZShAQUgpOwkJIyByb3RhdGUoYSxoKQoJKCR0MSwkdDIpID0gKCR0MiwkdDEpOwkJIyByb3RhdGUodDEsdDIpCiAgICB9CgkmbW92CSgiZXNpIiwmRFdQKDk2LCJlc3AiKSk7CSNjdHgKCQkJCQkjJm1vdgkoJEFIWzBdLCZEV1AoMCwiZXNwIikpOwoJJnhvcgkoJEFIWzFdLCJlZGkiKTsJCSMmbW92CSgkQUhbMV0sJkRXUCg0LCJlc3AiKSk7CgkJCQkJIyZtb3YJKCJlZGkiLCAmRFdQKDgsImVzcCIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMTIsImVzcCIpKTsKCSZhZGQJKCRBSFswXSwmRFdQKDAsImVzaSIpKTsKCSZhZGQJKCRBSFsxXSwmRFdQKDQsImVzaSIpKTsKCSZhZGQJKCJlZGkiLCZEV1AoOCwiZXNpIikpOwoJJmFkZAkoImVjeCIsJkRXUCgxMiwiZXNpIikpOwoJJm1vdgkoJkRXUCgwLCJlc2kiKSwkQUhbMF0pOwoJJm1vdgkoJkRXUCg0LCJlc2kiKSwkQUhbMV0pOwoJJm1vdgkoJkRXUCg4LCJlc2kiKSwiZWRpIik7CgkmbW92CSgmRFdQKDEyLCJlc2kiKSwiZWN4Iik7CgkgIyZtb3YJKCZEV1AoMCwiZXNwIiksJEFIWzBdKTsKCSAmbW92CSgmRFdQKDQsImVzcCIpLCRBSFsxXSk7CgkgJnhvcgkoJEFIWzFdLCJlZGkiKTsJCSMgbWFnaWMKCSAmbW92CSgmRFdQKDgsImVzcCIpLCJlZGkiKTsKCSAmbW92CSgmRFdQKDEyLCJlc3AiKSwiZWN4Iik7CgkjJm1vdgkoJEUsJkRXUCgxNiwiZXNwIikpOwoJJm1vdgkoImVkaSIsJkRXUCgyMCwiZXNwIikpOwoJJm1vdgkoImVieCIsJkRXUCgyNCwiZXNwIikpOwoJJm1vdgkoImVjeCIsJkRXUCgyOCwiZXNwIikpOwoJJmFkZAkoJEUsJkRXUCgxNiwiZXNpIikpOwoJJmFkZAkoImVkaSIsJkRXUCgyMCwiZXNpIikpOwoJJmFkZAkoImVieCIsJkRXUCgyNCwiZXNpIikpOwoJJmFkZAkoImVjeCIsJkRXUCgyOCwiZXNpIikpOwoJJm1vdgkoJkRXUCgxNiwiZXNpIiksJEUpOwoJJm1vdgkoJkRXUCgyMCwiZXNpIiksImVkaSIpOwoJJm1vdgkoJkRXUCgyNCwiZXNpIiksImVieCIpOwoJJm1vdgkoJkRXUCgyOCwiZXNpIiksImVjeCIpOwoJICMmbW92CSgmRFdQKDE2LCJlc3AiKSwkRSk7CgkgJm1vdgkoJkRXUCgyMCwiZXNwIiksImVkaSIpOwoJJm1vdgkoImVkaSIsJkRXUCg5Nis0LCJlc3AiKSk7CSMgaW5wCgkgJm1vdgkoJkRXUCgyNCwiZXNwIiksImVieCIpOwoJICZtb3YJKCZEV1AoMjgsImVzcCIpLCJlY3giKTsKCgkmY21wCSgiZWRpIiwmRFdQKDk2KzgsImVzcCIpKTsJIyBhcmUgd2UgZG9uZSB5ZXQ/CgkmamIJKCZsYWJlbCgiZ3JhbmRfbG9vcCIpKTsKCgkmbW92CSgiZXNwIiwmRFdQKDk2KzEyLCJlc3AiKSk7CSMgcmVzdG9yZSBzcAomZnVuY3Rpb25fZW5kX0EoKTsKfQoJCQkJCQlpZiAoISRpMzg2ICYmICR4bW0pIHt7ewp7CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBJbnRlbCBTSEEgRXh0ZW5zaW9ucyBpbXBsZW1lbnRhdGlvbiBvZiBTSEEyNTYgdXBkYXRlIGZ1bmN0aW9uLgojCm15ICgkY3R4LCRpbnAsJGVuZCk9KCJlc2kiLCJlZGkiLCJlYXgiKTsKbXkgKCRXaSwkQUJFRiwkQ0RHSCwkVE1QKT1tYXAoInhtbSRfIiwoMC4uMiw3KSk7Cm15IEBNU0c9bWFwKCJ4bW0kXyIsKDMuLjYpKTsKCnN1YiBzaGEyNTZvcDM4IHsKIG15ICgkb3Bjb2RlbGV0LCRkc3QsJHNyYyk9QF87CiAgICBpZiAoIiRkc3Q6JHNyYyIgPX4gL3htbShbMC03XSk6eG1tKFswLTddKS8pCiAgICB7CSZkYXRhX2J5dGUoMHgwZiwweDM4LCRvcGNvZGVsZXQsMHhjMHwoJDE8PDMpfCQyKTsJfQp9CnN1YiBzaGEyNTZybmRzMgl7IHNoYTI1Nm9wMzgoMHhjYixAXyk7IH0Kc3ViIHNoYTI1Nm1zZzEJeyBzaGEyNTZvcDM4KDB4Y2MsQF8pOyB9CnN1YiBzaGEyNTZtc2cyCXsgc2hhMjU2b3AzOCgweGNkLEBfKTsgfQoKJnNldF9sYWJlbCgic2hhZXh0IiwzMik7Cgkmc3ViCQkoImVzcCIsMzIpOwoKCSZtb3ZkcXUJCSgkQUJFRiwmUVdQKDAsJGN0eCkpOwkJIyBEQ0JBCgkmbGVhCQkoJEsyNTYsJkRXUCgweDgwLCRLMjU2KSk7CgkmbW92ZHF1CQkoJENER0gsJlFXUCgxNiwkY3R4KSk7CQkjIEhHRkUKCSZtb3ZkcWEJCSgkVE1QLCZRV1AoMHgxMDAtMHg4MCwkSzI1NikpOwkjIGJ5dGUgc3dhcCBtYXNrCgoJJnBzaHVmZAkJKCRXaSwkQUJFRiwweDFiKTsJCSMgQUJDRAoJJnBzaHVmZAkJKCRBQkVGLCRBQkVGLDB4YjEpOwkJIyBDREFCCgkmcHNodWZkCQkoJENER0gsJENER0gsMHgxYik7CQkjIEVGR0gKCSZwYWxpZ25yCSgkQUJFRiwkQ0RHSCw4KTsJCSMgQUJFRgoJJnB1bnBja2xxZHEJKCRDREdILCRXaSk7CQkJIyBDREdICgkmam1wCQkoJmxhYmVsKCJsb29wX3NoYWV4dCIpKTsKCiZzZXRfbGFiZWwoImxvb3Bfc2hhZXh0IiwxNik7CgkmbW92ZHF1CQkoQE1TR1swXSwmUVdQKDAsJGlucCkpOwoJJm1vdmRxdQkJKEBNU0dbMV0sJlFXUCgweDEwLCRpbnApKTsKCSZtb3ZkcXUJCShATVNHWzJdLCZRV1AoMHgyMCwkaW5wKSk7CgkmcHNodWZiCQkoQE1TR1swXSwkVE1QKTsKCSZtb3ZkcXUJCShATVNHWzNdLCZRV1AoMHgzMCwkaW5wKSk7CgkmbW92ZHFhCQkoJlFXUCgxNiwiZXNwIiksJENER0gpOwkJIyBvZmZsb2FkCgoJJm1vdmRxYQkJKCRXaSwmUVdQKDAqMTYtMHg4MCwkSzI1NikpOwoJJnBhZGRkCQkoJFdpLEBNU0dbMF0pOwoJJnBzaHVmYgkJKEBNU0dbMV0sJFRNUCk7Cgkmc2hhMjU2cm5kczIJKCRDREdILCRBQkVGKTsJCQkjIDAtMwoJJnBzaHVmZAkJKCRXaSwkV2ksMHgwZSk7Cgkmbm9wCQkoKTsKCSZtb3ZkcWEJCSgmUVdQKDAsImVzcCIpLCRBQkVGKTsJCSMgb2ZmbG9hZAoJJnNoYTI1NnJuZHMyCSgkQUJFRiwkQ0RHSCk7CgoJJm1vdmRxYQkJKCRXaSwmUVdQKDEqMTYtMHg4MCwkSzI1NikpOwoJJnBhZGRkCQkoJFdpLEBNU0dbMV0pOwoJJnBzaHVmYgkJKEBNU0dbMl0sJFRNUCk7Cgkmc2hhMjU2cm5kczIJKCRDREdILCRBQkVGKTsJCQkjIDQtNwoJJnBzaHVmZAkJKCRXaSwkV2ksMHgwZSk7CgkmbGVhCQkoJGlucCwmRFdQKDB4NDAsJGlucCkpOwoJJnNoYTI1Nm1zZzEJKEBNU0dbMF0sQE1TR1sxXSk7Cgkmc2hhMjU2cm5kczIJKCRBQkVGLCRDREdIKTsKCgkmbW92ZHFhCQkoJFdpLCZRV1AoMioxNi0weDgwLCRLMjU2KSk7CgkmcGFkZGQJCSgkV2ksQE1TR1syXSk7CgkmcHNodWZiCQkoQE1TR1szXSwkVE1QKTsKCSZzaGEyNTZybmRzMgkoJENER0gsJEFCRUYpOwkJCSMgOC0xMQoJJnBzaHVmZAkJKCRXaSwkV2ksMHgwZSk7CgkmbW92ZHFhCQkoJFRNUCxATVNHWzNdKTsKCSZwYWxpZ25yCSgkVE1QLEBNU0dbMl0sNCk7Cgkmbm9wCQkoKTsKCSZwYWRkZAkJKEBNU0dbMF0sJFRNUCk7Cgkmc2hhMjU2bXNnMQkoQE1TR1sxXSxATVNHWzJdKTsKCSZzaGEyNTZybmRzMgkoJEFCRUYsJENER0gpOwoKCSZtb3ZkcWEJCSgkV2ksJlFXUCgzKjE2LTB4ODAsJEsyNTYpKTsKCSZwYWRkZAkJKCRXaSxATVNHWzNdKTsKCSZzaGEyNTZtc2cyCShATVNHWzBdLEBNU0dbM10pOwoJJnNoYTI1NnJuZHMyCSgkQ0RHSCwkQUJFRik7CQkJIyAxMi0xNQoJJnBzaHVmZAkJKCRXaSwkV2ksMHgwZSk7CgkmbW92ZHFhCQkoJFRNUCxATVNHWzBdKTsKCSZwYWxpZ25yCSgkVE1QLEBNU0dbM10sNCk7Cgkmbm9wCQkoKTsKCSZwYWRkZAkJKEBNU0dbMV0sJFRNUCk7Cgkmc2hhMjU2bXNnMQkoQE1TR1syXSxATVNHWzNdKTsKCSZzaGEyNTZybmRzMgkoJEFCRUYsJENER0gpOwoKZm9yKCRpPTQ7JGk8MTYtMzskaSsrKSB7CgkmbW92ZHFhCQkoJFdpLCZRV1AoJGkqMTYtMHg4MCwkSzI1NikpOwoJJnBhZGRkCQkoJFdpLEBNU0dbMF0pOwoJJnNoYTI1Nm1zZzIJKEBNU0dbMV0sQE1TR1swXSk7Cgkmc2hhMjU2cm5kczIJKCRDREdILCRBQkVGKTsJCQkjIDE2LTE5Li4uCgkmcHNodWZkCQkoJFdpLCRXaSwweDBlKTsKCSZtb3ZkcWEJCSgkVE1QLEBNU0dbMV0pOwoJJnBhbGlnbnIJKCRUTVAsQE1TR1swXSw0KTsKCSZub3AJCSgpOwoJJnBhZGRkCQkoQE1TR1syXSwkVE1QKTsKCSZzaGEyNTZtc2cxCShATVNHWzNdLEBNU0dbMF0pOwoJJnNoYTI1NnJuZHMyCSgkQUJFRiwkQ0RHSCk7CgoJcHVzaChATVNHLHNoaWZ0KEBNU0cpKTsKfQoJJm1vdmRxYQkJKCRXaSwmUVdQKDEzKjE2LTB4ODAsJEsyNTYpKTsKCSZwYWRkZAkJKCRXaSxATVNHWzBdKTsKCSZzaGEyNTZtc2cyCShATVNHWzFdLEBNU0dbMF0pOwoJJnNoYTI1NnJuZHMyCSgkQ0RHSCwkQUJFRik7CQkJIyA1Mi01NQoJJnBzaHVmZAkJKCRXaSwkV2ksMHgwZSk7CgkmbW92ZHFhCQkoJFRNUCxATVNHWzFdKQoJJnBhbGlnbnIJKCRUTVAsQE1TR1swXSw0KTsKCSZzaGEyNTZybmRzMgkoJEFCRUYsJENER0gpOwoJJnBhZGRkCQkoQE1TR1syXSwkVE1QKTsKCgkmbW92ZHFhCQkoJFdpLCZRV1AoMTQqMTYtMHg4MCwkSzI1NikpOwoJJnBhZGRkCQkoJFdpLEBNU0dbMV0pOwoJJnNoYTI1NnJuZHMyCSgkQ0RHSCwkQUJFRik7CQkJIyA1Ni01OQoJJnBzaHVmZAkJKCRXaSwkV2ksMHgwZSk7Cgkmc2hhMjU2bXNnMgkoQE1TR1syXSxATVNHWzFdKTsKCSZtb3ZkcWEJCSgkVE1QLCZRV1AoMHgxMDAtMHg4MCwkSzI1NikpOwkjIGJ5dGUgc3dhcCBtYXNrCgkmc2hhMjU2cm5kczIJKCRBQkVGLCRDREdIKTsKCgkmbW92ZHFhCQkoJFdpLCZRV1AoMTUqMTYtMHg4MCwkSzI1NikpOwoJJnBhZGRkCQkoJFdpLEBNU0dbMl0pOwoJJm5vcAkJKCk7Cgkmc2hhMjU2cm5kczIJKCRDREdILCRBQkVGKTsJCQkjIDYwLTYzCgkmcHNodWZkCQkoJFdpLCRXaSwweDBlKTsKCSZjbXAJCSgkZW5kLCRpbnApOwoJJm5vcAkJKCk7Cgkmc2hhMjU2cm5kczIJKCRBQkVGLCRDREdIKTsKCgkmcGFkZGQJCSgkQ0RHSCwmUVdQKDE2LCJlc3AiKSk7CgkmcGFkZGQJCSgkQUJFRiwmUVdQKDAsImVzcCIpKTsKCSZqbnoJCSgmbGFiZWwoImxvb3Bfc2hhZXh0IikpOwoKCSZwc2h1ZmQJCSgkQ0RHSCwkQ0RHSCwweGIxKTsJCSMgRENIRwoJJnBzaHVmZAkJKCRUTVAsJEFCRUYsMHgxYik7CQkjIEZFQkEKCSZwc2h1ZmQJCSgkQUJFRiwkQUJFRiwweGIxKTsJCSMgQkFGRQoJJnB1bnBja2hxZHEJKCRBQkVGLCRDREdIKTsJCQkjIERDQkEKCSZwYWxpZ25yCSgkQ0RHSCwkVE1QLDgpOwkJCSMgSEdGRQoKCSZtb3YJCSgiZXNwIiwmRFdQKDMyKzEyLCJlc3AiKSk7CgkmbW92ZHF1CQkoJlFXUCgwLCRjdHgpLCRBQkVGKTsKCSZtb3ZkcXUJCSgmUVdQKDE2LCRjdHgpLCRDREdIKTsKJmZ1bmN0aW9uX2VuZF9BKCk7Cn0KCm15IEBYID0gbWFwKCJ4bW0kXyIsKDAuLjMpKTsKbXkgKCR0MCwkdDEsJHQyLCR0MykgPSBtYXAoInhtbSRfIiwoNC4uNykpOwpteSBAQUggPSAoJEEsJFQpOwoKJnNldF9sYWJlbCgiU1NTRTMiLDMyKTsKCSZsZWEJKCJlc3AiLCZEV1AoLTk2LCJlc3AiKSk7CgkjIGNvcHkgY3R4LT5oWzAtN10gdG8gQSxCLEMsRCxFLEYsRyxIIG9uIHN0YWNrCgkmbW92CSgkQUhbMF0sJkRXUCgwLCJlc2kiKSk7CgkmbW92CSgkQUhbMV0sJkRXUCg0LCJlc2kiKSk7CgkmbW92CSgiZWN4IiwmRFdQKDgsImVzaSIpKTsKCSZtb3YJKCJlZGkiLCZEV1AoMTIsImVzaSIpKTsKCSMmbW92CSgmRFdQKDAsImVzcCIpLCRBSFswXSk7CgkmbW92CSgmRFdQKDQsImVzcCIpLCRBSFsxXSk7CgkmeG9yCSgkQUhbMV0sImVjeCIpOwkJCSMgbWFnaWMKCSZtb3YJKCZEV1AoOCwiZXNwIiksImVjeCIpOwoJJm1vdgkoJkRXUCgxMiwiZXNwIiksImVkaSIpOwoJJm1vdgkoJEUsJkRXUCgxNiwiZXNpIikpOwoJJm1vdgkoImVkaSIsJkRXUCgyMCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCgyNCwiZXNpIikpOwoJJm1vdgkoImVzaSIsJkRXUCgyOCwiZXNpIikpOwoJIyZtb3YJKCZEV1AoMTYsImVzcCIpLCRFKTsKCSZtb3YJKCZEV1AoMjAsImVzcCIpLCJlZGkiKTsKCSZtb3YJKCJlZGkiLCZEV1AoOTYrNCwiZXNwIikpOwkjIGlucAoJJm1vdgkoJkRXUCgyNCwiZXNwIiksImVjeCIpOwoJJm1vdgkoJkRXUCgyOCwiZXNwIiksImVzaSIpOwoJJm1vdmRxYQkoJHQzLCZRV1AoMjU2LCRLMjU2KSk7Cgkmam1wCSgmbGFiZWwoImdyYW5kX3Nzc2UzIikpOwoKJnNldF9sYWJlbCgiZ3JhbmRfc3NzZTMiLDE2KTsKCSMgbG9hZCBpbnB1dCwgcmV2ZXJzZSBieXRlIG9yZGVyLCBhZGQgSzI1NlswLi4xNV0sIHNhdmUgdG8gc3RhY2sKCSZtb3ZkcXUJKEBYWzBdLCZRV1AoMCwiZWRpIikpOwoJJm1vdmRxdQkoQFhbMV0sJlFXUCgxNiwiZWRpIikpOwoJJm1vdmRxdQkoQFhbMl0sJlFXUCgzMiwiZWRpIikpOwoJJm1vdmRxdQkoQFhbM10sJlFXUCg0OCwiZWRpIikpOwoJJmFkZAkoImVkaSIsNjQpOwoJJnBzaHVmYgkoQFhbMF0sJHQzKTsKCSZtb3YJKCZEV1AoOTYrNCwiZXNwIiksImVkaSIpOwoJJnBzaHVmYgkoQFhbMV0sJHQzKTsKCSZtb3ZkcWEJKCR0MCwmUVdQKDAsJEsyNTYpKTsKCSZwc2h1ZmIJKEBYWzJdLCR0Myk7CgkmbW92ZHFhCSgkdDEsJlFXUCgxNiwkSzI1NikpOwoJJnBhZGRkCSgkdDAsQFhbMF0pOwoJJnBzaHVmYgkoQFhbM10sJHQzKTsKCSZtb3ZkcWEJKCR0MiwmUVdQKDMyLCRLMjU2KSk7CgkmcGFkZGQJKCR0MSxAWFsxXSk7CgkmbW92ZHFhCSgkdDMsJlFXUCg0OCwkSzI1NikpOwoJJm1vdmRxYQkoJlFXUCgzMiswLCJlc3AiKSwkdDApOwoJJnBhZGRkCSgkdDIsQFhbMl0pOwoJJm1vdmRxYQkoJlFXUCgzMisxNiwiZXNwIiksJHQxKTsKCSZwYWRkZAkoJHQzLEBYWzNdKTsKCSZtb3ZkcWEJKCZRV1AoMzIrMzIsImVzcCIpLCR0Mik7CgkmbW92ZHFhCSgmUVdQKDMyKzQ4LCJlc3AiKSwkdDMpOwoJJmptcAkoJmxhYmVsKCJzc3NlM18wMF80NyIpKTsKCiZzZXRfbGFiZWwoInNzc2UzXzAwXzQ3IiwxNik7CgkmYWRkCQkoJEsyNTYsNjQpOwoKc3ViIFNTU0UzXzAwXzQ3ICgpIHsKbXkgJGogPSBzaGlmdDsKbXkgJGJvZHkgPSBzaGlmdDsKbXkgQFggPSBAXzsKbXkgQGluc25zID0gKCYkYm9keSwmJGJvZHksJiRib2R5LCYkYm9keSk7CSMgMTIwIGluc3RydWN0aW9ucwoKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZtb3ZkcWEJCSgkdDAsQFhbMV0pOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwkJCSMgQAoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJJm1vdmRxYQkJKCR0MyxAWFszXSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcGFsaWducgkoJHQwLEBYWzBdLDQpOwkJIyBYWzEuLjRdCgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgJnBhbGlnbnIJKCR0MyxAWFsyXSw0KTsJCSMgWFs5Li4xMl0KCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZtb3ZkcWEJCSgkdDEsJHQwKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZtb3ZkcWEJCSgkdDIsJHQwKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSZwc3JsZAkJKCR0MCwzKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCSAmcGFkZGQJCShAWFswXSwkdDMpOwkJIyBYWzAuLjNdICs9IFhbOS4uMTJdCgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHNybGQJCSgkdDIsNyk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgJnBzaHVmZAkoJHQzLEBYWzNdLDBiMTExMTEwMTApOwkjIFhbMTQuLjE1XQoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzbGxkCQkoJHQxLDMyLTE4KTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCSZweG9yCQkoJHQwLCR0Mik7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcHNybGQJCSgkdDIsMTgtNyk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkmcHhvcgkJKCR0MCwkdDEpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBzbGxkCQkoJHQxLDE4LTcpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwkJCSMgQAoJJnB4b3IJCSgkdDAsJHQyKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAmbW92ZHFhCSgkdDIsJHQzKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCSZweG9yCQkoJHQwLCR0MSk7CQkjIHNpZ21hMChYWzEuLjRdKQoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICZwc3JsZAkJKCR0MywxMCk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkmcGFkZGQJCShAWFswXSwkdDApOwkJIyBYWzAuLjNdICs9IHNpZ21hMChYWzEuLjRdKQoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICZwc3JscQkJKCR0MiwxNyk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkgJnB4b3IJCSgkdDMsJHQyKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAmcHNybHEJCSgkdDIsMTktMTcpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwkJCSMgQAoJICZweG9yCQkoJHQzLCR0Mik7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgJnBzaHVmZAkoJHQzLCR0MywwYjEwMDAwMDAwKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAmcHNybGRxCSgkdDMsOCk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkmcGFkZGQJCShAWFswXSwkdDMpOwkJIyBYWzAuLjFdICs9IHNpZ21hMShYWzE0Li4xNV0pCgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgJnBzaHVmZAkoJHQzLEBYWzBdLDBiMDEwMTAwMDApOwkjIFhbMTYuLjE3XQoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICZtb3ZkcWEJKCR0MiwkdDMpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwkJCSMgQAoJICZwc3JsZAkJKCR0MywxMCk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgJnBzcmxxCQkoJHQyLDE3KTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCSAmcHhvcgkJKCR0MywkdDIpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICZwc3JscQkJKCR0MiwxOS0xNyk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CQkJIyBACgkgJnB4b3IJCSgkdDMsJHQyKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsKCSAmcHNodWZkCSgkdDMsJHQzLDBiMDAwMDEwMDApOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwkJCSMgQAoJJm1vdmRxYQkJKCR0MiwmUVdQKDE2KiRqLCRLMjU2KSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgJnBzbGxkcQkoJHQzLDgpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwkJCSMgQAoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwkJCSMgQAoJJnBhZGRkCQkoQFhbMF0sJHQzKTsJCSMgWFsyLi4zXSArPSBzaWdtYTEoWFsxNi4uMTddKQoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICBldmFsKHNoaWZ0KEBpbnNucykpOwoJJnBhZGRkCQkoJHQyLEBYWzBdKTsKCSAgZXZhbChzaGlmdChAaW5zbnMpKTsJCQkjIEAKCglmb3JlYWNoIChAaW5zbnMpIHsgZXZhbDsgfQkJIyByZW1haW5pbmcgaW5zdHJ1Y3Rpb25zCgoJJm1vdmRxYQkJKCZRV1AoMzIrMTYqJGosImVzcCIpLCR0Mik7Cn0KCnN1YiBib2R5XzAwXzE1ICgpIHsKCSgKCScmbW92CSgiZWN4IiwkRSk7JywKCScmcm9yCSgkRSwyNS0xMSk7JywKCSAnJm1vdgkoImVzaSIsJm9mZigkZikpOycsCgknJnhvcgkoJEUsImVjeCIpOycsCgkgJyZtb3YJKCJlZGkiLCZvZmYoJGcpKTsnLAoJICcmeG9yCSgiZXNpIiwiZWRpIik7JywKCScmcm9yCSgkRSwxMS02KTsnLAoJICcmYW5kCSgiZXNpIiwiZWN4Iik7JywKCSAnJm1vdgkoJm9mZigkZSksImVjeCIpOycsCSMgc2F2ZSAkRSwgbW9kdWxvLXNjaGVkdWxlZAoJJyZ4b3IJKCRFLCJlY3giKTsnLAoJICcmeG9yCSgiZWRpIiwiZXNpIik7JywJIyBDaChlLGYsZykKCScmcm9yCSgkRSw2KTsnLAkJIyBUID0gU2lnbWExKGUpCgkgJyZtb3YJKCJlY3giLCRBSFswXSk7JywKCSAnJmFkZAkoJEUsImVkaSIpOycsCQkjIFQgKz0gQ2goZSxmLGcpCgkgJyZtb3YJKCJlZGkiLCZvZmYoJGIpKTsnLAoJJyZtb3YJKCJlc2kiLCRBSFswXSk7JywKCgknJnJvcgkoImVjeCIsMjItMTMpOycsCgkgJyZtb3YJKCZvZmYoJGEpLCRBSFswXSk7JywJIyBzYXZlICRBLCBtb2R1bG8tc2NoZWR1bGVkCgknJnhvcgkoImVjeCIsJEFIWzBdKTsnLAoJICcmeG9yCSgkQUhbMF0sImVkaSIpOycsCSMgYSBePSBiLCAoYl5jKSBpbiBuZXh0IHJvdW5kCgkgJyZhZGQJKCRFLCZvZmYoJGgpKTsnLAkjIFQgKz0gaAoJJyZyb3IJKCJlY3giLDEzLTIpOycsCgkgJyZhbmQJKCRBSFsxXSwkQUhbMF0pOycsCSMgKGJeYykgJj0gKGFeYikKCScmeG9yCSgiZWN4IiwiZXNpIik7JywKCSAnJmFkZAkoJEUsJkRXUCgzMis0KigkaSYxNSksImVzcCIpKTsnLAkjIFQgKz0gS1tpXStYW2ldCgkgJyZ4b3IJKCRBSFsxXSwiZWRpIik7JywJIyBoID0gTWFqKGEsYixjKSA9IENoKGFeYixjLGIpCgknJnJvcgkoImVjeCIsMik7JywJCSMgU2lnbWEwKGEpCgoJICcmYWRkCSgkQUhbMV0sJEUpOycsCQkjIGggKz0gVAoJICcmYWRkCSgkRSwmb2ZmKCRkKSk7JywJIyBkICs9IFQKCScmYWRkCSgkQUhbMV0sImVjeCIpOycuCSMgaCArPSBTaWdtYTAoYSkKCgknQEFIID0gcmV2ZXJzZShAQUgpOyAkaSsrOycJIyByb3RhdGUoYSxoKQoJKTsKfQoKICAgIGZvciAoJGk9MCwkaj0wOyAkajw0OyAkaisrKSB7CgkmU1NTRTNfMDBfNDcoJGosXCZib2R5XzAwXzE1LEBYKTsKCXB1c2goQFgsc2hpZnQoQFgpKTsJCSMgcm90YXRlKEBYKQogICAgfQoJJmNtcAkoJkRXUCgxNiokaiwkSzI1NiksMHgwMDAxMDIwMyk7Cgkmam5lCSgmbGFiZWwoInNzc2UzXzAwXzQ3IikpOwoKICAgIGZvciAoJGk9MDsgJGk8MTY7ICkgewoJZm9yZWFjaChib2R5XzAwXzE1KCkpIHsgZXZhbDsgfQogICAgfQoKCSZtb3YJKCJlc2kiLCZEV1AoOTYsImVzcCIpKTsJI2N0eAoJCQkJCSMmbW92CSgkQUhbMF0sJkRXUCgwLCJlc3AiKSk7CgkmeG9yCSgkQUhbMV0sImVkaSIpOwkJIyZtb3YJKCRBSFsxXSwmRFdQKDQsImVzcCIpKTsKCQkJCQkjJm1vdgkoImVkaSIsICZEV1AoOCwiZXNwIikpOwoJJm1vdgkoImVjeCIsJkRXUCgxMiwiZXNwIikpOwoJJmFkZAkoJEFIWzBdLCZEV1AoMCwiZXNpIikpOwoJJmFkZAkoJEFIWzFdLCZEV1AoNCwiZXNpIikpOwoJJmFkZAkoImVkaSIsJkRXUCg4LCJlc2kiKSk7CgkmYWRkCSgiZWN4IiwmRFdQKDEyLCJlc2kiKSk7CgkmbW92CSgmRFdQKDAsImVzaSIpLCRBSFswXSk7CgkmbW92CSgmRFdQKDQsImVzaSIpLCRBSFsxXSk7CgkmbW92CSgmRFdQKDgsImVzaSIpLCJlZGkiKTsKCSZtb3YJKCZEV1AoMTIsImVzaSIpLCJlY3giKTsKCSAjJm1vdgkoJkRXUCgwLCJlc3AiKSwkQUhbMF0pOwoJICZtb3YJKCZEV1AoNCwiZXNwIiksJEFIWzFdKTsKCSAmeG9yCSgkQUhbMV0sImVkaSIpOwkJCSMgbWFnaWMKCSAmbW92CSgmRFdQKDgsImVzcCIpLCJlZGkiKTsKCSAmbW92CSgmRFdQKDEyLCJlc3AiKSwiZWN4Iik7CgkjJm1vdgkoJEUsJkRXUCgxNiwiZXNwIikpOwoJJm1vdgkoImVkaSIsJkRXUCgyMCwiZXNwIikpOwoJJm1vdgkoImVjeCIsJkRXUCgyNCwiZXNwIikpOwoJJmFkZAkoJEUsJkRXUCgxNiwiZXNpIikpOwoJJmFkZAkoImVkaSIsJkRXUCgyMCwiZXNpIikpOwoJJmFkZAkoImVjeCIsJkRXUCgyNCwiZXNpIikpOwoJJm1vdgkoJkRXUCgxNiwiZXNpIiksJEUpOwoJJm1vdgkoJkRXUCgyMCwiZXNpIiksImVkaSIpOwoJICZtb3YJKCZEV1AoMjAsImVzcCIpLCJlZGkiKTsKCSZtb3YJKCJlZGkiLCZEV1AoMjgsImVzcCIpKTsKCSZtb3YJKCZEV1AoMjQsImVzaSIpLCJlY3giKTsKCSAjJm1vdgkoJkRXUCgxNiwiZXNwIiksJEUpOwoJJmFkZAkoImVkaSIsJkRXUCgyOCwiZXNpIikpOwoJICZtb3YJKCZEV1AoMjQsImVzcCIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMjgsImVzaSIpLCJlZGkiKTsKCSAmbW92CSgmRFdQKDI4LCJlc3AiKSwiZWRpIik7CgkmbW92CSgiZWRpIiwmRFdQKDk2KzQsImVzcCIpKTsJIyBpbnAKCgkmbW92ZHFhCSgkdDMsJlFXUCg2NCwkSzI1NikpOwoJJnN1YgkoJEsyNTYsMyo2NCk7CQkJIyByZXdpbmQgSwoJJmNtcAkoImVkaSIsJkRXUCg5Nis4LCJlc3AiKSk7CSMgYXJlIHdlIGRvbmUgeWV0PwoJJmpiCSgmbGFiZWwoImdyYW5kX3Nzc2UzIikpOwoKCSZtb3YJKCJlc3AiLCZEV1AoOTYrMTIsImVzcCIpKTsJIyByZXN0b3JlIHNwCiZmdW5jdGlvbl9lbmRfQSgpOwoJCQkJCQlpZiAoJGF2eCkgewomc2V0X2xhYmVsKCJBVlgiLDMyKTsKCQkJCQkJaWYgKCRhdng+MSkgewoJJmFuZAkoImVkeCIsMTw8OHwxPDwzKTsJCSMgY2hlY2sgZm9yIEJNSTIrQk1JMQoJJmNtcAkoImVkeCIsMTw8OHwxPDwzKTsKCSZqZQkoJmxhYmVsKCJBVlhfQk1JIikpOwoJCQkJCQl9CgkmbGVhCSgiZXNwIiwmRFdQKC05NiwiZXNwIikpOwoJJnZ6ZXJvYWxsCSgpOwoJIyBjb3B5IGN0eC0+aFswLTddIHRvIEEsQixDLEQsRSxGLEcsSCBvbiBzdGFjawoJJm1vdgkoJEFIWzBdLCZEV1AoMCwiZXNpIikpOwoJJm1vdgkoJEFIWzFdLCZEV1AoNCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CgkmbW92CSgiZWRpIiwmRFdQKDEyLCJlc2kiKSk7CgkjJm1vdgkoJkRXUCgwLCJlc3AiKSwkQUhbMF0pOwoJJm1vdgkoJkRXUCg0LCJlc3AiKSwkQUhbMV0pOwoJJnhvcgkoJEFIWzFdLCJlY3giKTsJCQkjIG1hZ2ljCgkmbW92CSgmRFdQKDgsImVzcCIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMTIsImVzcCIpLCJlZGkiKTsKCSZtb3YJKCRFLCZEV1AoMTYsImVzaSIpKTsKCSZtb3YJKCJlZGkiLCZEV1AoMjAsImVzaSIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMjQsImVzaSIpKTsKCSZtb3YJKCJlc2kiLCZEV1AoMjgsImVzaSIpKTsKCSMmbW92CSgmRFdQKDE2LCJlc3AiKSwkRSk7CgkmbW92CSgmRFdQKDIwLCJlc3AiKSwiZWRpIik7CgkmbW92CSgiZWRpIiwmRFdQKDk2KzQsImVzcCIpKTsJIyBpbnAKCSZtb3YJKCZEV1AoMjQsImVzcCIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMjgsImVzcCIpLCJlc2kiKTsKCSZ2bW92ZHFhCSgkdDMsJlFXUCgyNTYsJEsyNTYpKTsKCSZqbXAJKCZsYWJlbCgiZ3JhbmRfYXZ4IikpOwoKJnNldF9sYWJlbCgiZ3JhbmRfYXZ4IiwzMik7CgkjIGxvYWQgaW5wdXQsIHJldmVyc2UgYnl0ZSBvcmRlciwgYWRkIEsyNTZbMC4uMTVdLCBzYXZlIHRvIHN0YWNrCgkmdm1vdmRxdQkoQFhbMF0sJlFXUCgwLCJlZGkiKSk7Cgkmdm1vdmRxdQkoQFhbMV0sJlFXUCgxNiwiZWRpIikpOwoJJnZtb3ZkcXUJKEBYWzJdLCZRV1AoMzIsImVkaSIpKTsKCSZ2bW92ZHF1CShAWFszXSwmUVdQKDQ4LCJlZGkiKSk7CgkmYWRkCQkoImVkaSIsNjQpOwoJJnZwc2h1ZmIJKEBYWzBdLEBYWzBdLCR0Myk7CgkmbW92CQkoJkRXUCg5Nis0LCJlc3AiKSwiZWRpIik7CgkmdnBzaHVmYgkoQFhbMV0sQFhbMV0sJHQzKTsKCSZ2cHNodWZiCShAWFsyXSxAWFsyXSwkdDMpOwoJJnZwYWRkZAkJKCR0MCxAWFswXSwmUVdQKDAsJEsyNTYpKTsKCSZ2cHNodWZiCShAWFszXSxAWFszXSwkdDMpOwoJJnZwYWRkZAkJKCR0MSxAWFsxXSwmUVdQKDE2LCRLMjU2KSk7CgkmdnBhZGRkCQkoJHQyLEBYWzJdLCZRV1AoMzIsJEsyNTYpKTsKCSZ2cGFkZGQJCSgkdDMsQFhbM10sJlFXUCg0OCwkSzI1NikpOwoJJnZtb3ZkcWEJKCZRV1AoMzIrMCwiZXNwIiksJHQwKTsKCSZ2bW92ZHFhCSgmUVdQKDMyKzE2LCJlc3AiKSwkdDEpOwoJJnZtb3ZkcWEJKCZRV1AoMzIrMzIsImVzcCIpLCR0Mik7Cgkmdm1vdmRxYQkoJlFXUCgzMis0OCwiZXNwIiksJHQzKTsKCSZqbXAJCSgmbGFiZWwoImF2eF8wMF80NyIpKTsKCiZzZXRfbGFiZWwoImF2eF8wMF80NyIsMTYpOwoJJmFkZAkJKCRLMjU2LDY0KTsKCnN1YiBYdXBkYXRlX0FWWCAoKSB7CgkoCgknJnZwYWxpZ25yCSgkdDAsQFhbMV0sQFhbMF0sNCk7JywJIyBYWzEuLjRdCgkgJyZ2cGFsaWducgkoJHQzLEBYWzNdLEBYWzJdLDQpOycsCSMgWFs5Li4xMl0KCScmdnBzcmxkCSgkdDIsJHQwLDcpOycsCgkgJyZ2cGFkZGQJKEBYWzBdLEBYWzBdLCR0Myk7JywJIyBYWzAuLjNdICs9IFhbOS4uMTZdCgknJnZwc3JsZAkoJHQzLCR0MCwzKTsnLAoJJyZ2cHNsbGQJKCR0MSwkdDAsMTQpOycsCgknJnZweG9yCQkoJHQwLCR0MywkdDIpOycsCgkgJyZ2cHNodWZkCSgkdDMsQFhbM10sMGIxMTExMTAxMCknLCMgWFsxNC4uMTVdCgknJnZwc3JsZAkoJHQyLCR0MiwxOC03KTsnLAoJJyZ2cHhvcgkJKCR0MCwkdDAsJHQxKTsnLAoJJyZ2cHNsbGQJKCR0MSwkdDEsMjUtMTQpOycsCgknJnZweG9yCQkoJHQwLCR0MCwkdDIpOycsCgkgJyZ2cHNybGQJKCR0MiwkdDMsMTApOycsCgknJnZweG9yCQkoJHQwLCR0MCwkdDEpOycsCSMgc2lnbWEwKFhbMS4uNF0pCgkgJyZ2cHNybHEJKCR0MSwkdDMsMTcpOycsCgknJnZwYWRkZAkoQFhbMF0sQFhbMF0sJHQwKTsnLAkjIFhbMC4uM10gKz0gc2lnbWEwKFhbMS4uNF0pCgkgJyZ2cHhvcgkoJHQyLCR0MiwkdDEpOycsCgkgJyZ2cHNybHEJKCR0MywkdDMsMTkpOycsCgkgJyZ2cHhvcgkoJHQyLCR0MiwkdDMpOycsCSMgc2lnbWExKFhbMTQuLjE1XQoJICcmdnBzaHVmZAkoJHQzLCR0MiwwYjEwMDAwMTAwKTsnLAoJJyZ2cHNybGRxCSgkdDMsJHQzLDgpOycsCgknJnZwYWRkZAkoQFhbMF0sQFhbMF0sJHQzKTsnLAkjIFhbMC4uMV0gKz0gc2lnbWExKFhbMTQuLjE1XSkKCSAnJnZwc2h1ZmQJKCR0MyxAWFswXSwwYjAxMDEwMDAwKScsIyBYWzE2Li4xN10KCSAnJnZwc3JsZAkoJHQyLCR0MywxMCk7JywKCSAnJnZwc3JscQkoJHQxLCR0MywxNyk7JywKCSAnJnZweG9yCSgkdDIsJHQyLCR0MSk7JywKCSAnJnZwc3JscQkoJHQzLCR0MywxOSk7JywKCSAnJnZweG9yCSgkdDIsJHQyLCR0Myk7JywJIyBzaWdtYTEoWFsxNi4uMTddCgkgJyZ2cHNodWZkCSgkdDMsJHQyLDBiMTExMDEwMDApOycsCgknJnZwc2xsZHEJKCR0MywkdDMsOCk7JywKCScmdnBhZGRkCShAWFswXSxAWFswXSwkdDMpOycJIyBYWzIuLjNdICs9IHNpZ21hMShYWzE2Li4xN10pCgkpOwp9Cgpsb2NhbCAqcm9yID0gc3ViIHsgJnNocmQoQF9bMF0sQF8pIH07CnN1YiBBVlhfMDBfNDcgKCkgewpteSAkaiA9IHNoaWZ0OwpteSAkYm9keSA9IHNoaWZ0OwpteSBAWCA9IEBfOwpteSBAaW5zbnMgPSAoJiRib2R5LCYkYm9keSwmJGJvZHksJiRib2R5KTsJIyAxMjAgaW5zdHJ1Y3Rpb25zCm15ICRpbnNuOwoKCWZvcmVhY2ggKFh1cGRhdGVfQVZYKCkpIHsJCSMgMzEgaW5zdHJ1Y3Rpb25zCgkgICAgZXZhbDsKCSAgICBldmFsKHNoaWZ0KEBpbnNucykpOwoJICAgIGV2YWwoc2hpZnQoQGluc25zKSk7CgkgICAgZXZhbCgkaW5zbiA9IHNoaWZ0KEBpbnNucykpOwoJICAgIGV2YWwoc2hpZnQoQGluc25zKSkgaWYgKCRpbnNuID1+IC9yb3J4LyAmJiBAaW5zbnNbMF0gPX4gL3JvcngvKTsKCX0KCSZ2cGFkZGQJCSgkdDIsQFhbMF0sJlFXUCgxNiokaiwkSzI1NikpOwoJZm9yZWFjaCAoQGluc25zKSB7IGV2YWw7IH0JCSMgcmVtYWluaW5nIGluc3RydWN0aW9ucwoJJnZtb3ZkcWEJKCZRV1AoMzIrMTYqJGosImVzcCIpLCR0Mik7Cn0KCiAgICBmb3IgKCRpPTAsJGo9MDsgJGo8NDsgJGorKykgewoJJkFWWF8wMF80NygkaixcJmJvZHlfMDBfMTUsQFgpOwoJcHVzaChAWCxzaGlmdChAWCkpOwkJIyByb3RhdGUoQFgpCiAgICB9CgkmY21wCSgmRFdQKDE2KiRqLCRLMjU2KSwweDAwMDEwMjAzKTsKCSZqbmUJKCZsYWJlbCgiYXZ4XzAwXzQ3IikpOwoKICAgIGZvciAoJGk9MDsgJGk8MTY7ICkgewoJZm9yZWFjaChib2R5XzAwXzE1KCkpIHsgZXZhbDsgfQogICAgfQoKCSZtb3YJKCJlc2kiLCZEV1AoOTYsImVzcCIpKTsJI2N0eAoJCQkJCSMmbW92CSgkQUhbMF0sJkRXUCgwLCJlc3AiKSk7CgkmeG9yCSgkQUhbMV0sImVkaSIpOwkJIyZtb3YJKCRBSFsxXSwmRFdQKDQsImVzcCIpKTsKCQkJCQkjJm1vdgkoImVkaSIsICZEV1AoOCwiZXNwIikpOwoJJm1vdgkoImVjeCIsJkRXUCgxMiwiZXNwIikpOwoJJmFkZAkoJEFIWzBdLCZEV1AoMCwiZXNpIikpOwoJJmFkZAkoJEFIWzFdLCZEV1AoNCwiZXNpIikpOwoJJmFkZAkoImVkaSIsJkRXUCg4LCJlc2kiKSk7CgkmYWRkCSgiZWN4IiwmRFdQKDEyLCJlc2kiKSk7CgkmbW92CSgmRFdQKDAsImVzaSIpLCRBSFswXSk7CgkmbW92CSgmRFdQKDQsImVzaSIpLCRBSFsxXSk7CgkmbW92CSgmRFdQKDgsImVzaSIpLCJlZGkiKTsKCSZtb3YJKCZEV1AoMTIsImVzaSIpLCJlY3giKTsKCSAjJm1vdgkoJkRXUCgwLCJlc3AiKSwkQUhbMF0pOwoJICZtb3YJKCZEV1AoNCwiZXNwIiksJEFIWzFdKTsKCSAmeG9yCSgkQUhbMV0sImVkaSIpOwkJCSMgbWFnaWMKCSAmbW92CSgmRFdQKDgsImVzcCIpLCJlZGkiKTsKCSAmbW92CSgmRFdQKDEyLCJlc3AiKSwiZWN4Iik7CgkjJm1vdgkoJEUsJkRXUCgxNiwiZXNwIikpOwoJJm1vdgkoImVkaSIsJkRXUCgyMCwiZXNwIikpOwoJJm1vdgkoImVjeCIsJkRXUCgyNCwiZXNwIikpOwoJJmFkZAkoJEUsJkRXUCgxNiwiZXNpIikpOwoJJmFkZAkoImVkaSIsJkRXUCgyMCwiZXNpIikpOwoJJmFkZAkoImVjeCIsJkRXUCgyNCwiZXNpIikpOwoJJm1vdgkoJkRXUCgxNiwiZXNpIiksJEUpOwoJJm1vdgkoJkRXUCgyMCwiZXNpIiksImVkaSIpOwoJICZtb3YJKCZEV1AoMjAsImVzcCIpLCJlZGkiKTsKCSZtb3YJKCJlZGkiLCZEV1AoMjgsImVzcCIpKTsKCSZtb3YJKCZEV1AoMjQsImVzaSIpLCJlY3giKTsKCSAjJm1vdgkoJkRXUCgxNiwiZXNwIiksJEUpOwoJJmFkZAkoImVkaSIsJkRXUCgyOCwiZXNpIikpOwoJICZtb3YJKCZEV1AoMjQsImVzcCIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMjgsImVzaSIpLCJlZGkiKTsKCSAmbW92CSgmRFdQKDI4LCJlc3AiKSwiZWRpIik7CgkmbW92CSgiZWRpIiwmRFdQKDk2KzQsImVzcCIpKTsJIyBpbnAKCgkmdm1vdmRxYQkoJHQzLCZRV1AoNjQsJEsyNTYpKTsKCSZzdWIJKCRLMjU2LDMqNjQpOwkJCSMgcmV3aW5kIEsKCSZjbXAJKCJlZGkiLCZEV1AoOTYrOCwiZXNwIikpOwkjIGFyZSB3ZSBkb25lIHlldD8KCSZqYgkoJmxhYmVsKCJncmFuZF9hdngiKSk7CgoJJm1vdgkoImVzcCIsJkRXUCg5NisxMiwiZXNwIikpOwkjIHJlc3RvcmUgc3AKCSZ2emVyb2FsbAkoKTsKJmZ1bmN0aW9uX2VuZF9BKCk7CgkJCQkJCWlmICgkYXZ4PjEpIHsKc3ViIGJvZHl4XzAwXzE1ICgpIHsJCQkjICsxMCUKCSgKCScmcm9yeAkoImVjeCIsJEUsNiknLAoJJyZyb3J4CSgiZXNpIiwkRSwxMSknLAoJICcmbW92CSgmb2ZmKCRlKSwkRSknLAkJIyBzYXZlICRFLCBtb2R1bG8tc2NoZWR1bGVkCgknJnJvcngJKCJlZGkiLCRFLDI1KScsCgknJnhvcgkoImVjeCIsImVzaSIpJywKCSAnJmFuZG4JKCJlc2kiLCRFLCZvZmYoJGcpKScsCgknJnhvcgkoImVjeCIsImVkaSIpJywJCSMgU2lnbWExKGUpCgkgJyZhbmQJKCRFLCZvZmYoJGYpKScsCgkgJyZtb3YJKCZvZmYoJGEpLCRBSFswXSk7JywJIyBzYXZlICRBLCBtb2R1bG8tc2NoZWR1bGVkCgkgJyZvcgkoJEUsImVzaSIpJywJCSMgVCA9IENoKGUsZixnKQoKCScmcm9yeAkoImVkaSIsJEFIWzBdLDIpJywKCScmcm9yeAkoImVzaSIsJEFIWzBdLDEzKScsCgkgJyZsZWEJKCRFLCZEV1AoMCwkRSwiZWN4IikpJywJIyBUICs9IFNpZ21hMShlKQoJJyZyb3J4CSgiZWN4IiwkQUhbMF0sMjIpJywKCScmeG9yCSgiZXNpIiwiZWRpIiknLAoJICcmbW92CSgiZWRpIiwmb2ZmKCRiKSknLAoJJyZ4b3IJKCJlY3giLCJlc2kiKScsCQkjIFNpZ21hMChhKQoKCSAnJnhvcgkoJEFIWzBdLCJlZGkiKScsCSMgYSBePSBiLCAoYl5jKSBpbiBuZXh0IHJvdW5kCgkgJyZhZGQJKCRFLCZvZmYoJGgpKScsCQkjIFQgKz0gaAoJICcmYW5kCSgkQUhbMV0sJEFIWzBdKScsCSMgKGJeYykgJj0gKGFeYikKCSAnJmFkZAkoJEUsJkRXUCgzMis0KigkaSYxNSksImVzcCIpKScsCSMgVCArPSBLW2ldK1hbaV0KCSAnJnhvcgkoJEFIWzFdLCJlZGkiKScsCSMgaCA9IE1haihhLGIsYykgPSBDaChhXmIsYyxiKQoKCSAnJmFkZAkoImVjeCIsJEUpJywJCSMgaCArPSBUCgkgJyZhZGQJKCRFLCZvZmYoJGQpKScsCQkjIGQgKz0gVAoJJyZsZWEJKCRBSFsxXSwmRFdQKDAsJEFIWzFdLCJlY3giKSk7Jy4JIyBoICs9IFNpZ21hMChhKQoKCSdAQUggPSByZXZlcnNlKEBBSCk7ICRpKys7JwkjIHJvdGF0ZShhLGgpCgkpOwp9Cgomc2V0X2xhYmVsKCJBVlhfQk1JIiwzMik7CgkmbGVhCSgiZXNwIiwmRFdQKC05NiwiZXNwIikpOwoJJnZ6ZXJvYWxsCSgpOwoJIyBjb3B5IGN0eC0+aFswLTddIHRvIEEsQixDLEQsRSxGLEcsSCBvbiBzdGFjawoJJm1vdgkoJEFIWzBdLCZEV1AoMCwiZXNpIikpOwoJJm1vdgkoJEFIWzFdLCZEV1AoNCwiZXNpIikpOwoJJm1vdgkoImVjeCIsJkRXUCg4LCJlc2kiKSk7CgkmbW92CSgiZWRpIiwmRFdQKDEyLCJlc2kiKSk7CgkjJm1vdgkoJkRXUCgwLCJlc3AiKSwkQUhbMF0pOwoJJm1vdgkoJkRXUCg0LCJlc3AiKSwkQUhbMV0pOwoJJnhvcgkoJEFIWzFdLCJlY3giKTsJCQkjIG1hZ2ljCgkmbW92CSgmRFdQKDgsImVzcCIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMTIsImVzcCIpLCJlZGkiKTsKCSZtb3YJKCRFLCZEV1AoMTYsImVzaSIpKTsKCSZtb3YJKCJlZGkiLCZEV1AoMjAsImVzaSIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMjQsImVzaSIpKTsKCSZtb3YJKCJlc2kiLCZEV1AoMjgsImVzaSIpKTsKCSMmbW92CSgmRFdQKDE2LCJlc3AiKSwkRSk7CgkmbW92CSgmRFdQKDIwLCJlc3AiKSwiZWRpIik7CgkmbW92CSgiZWRpIiwmRFdQKDk2KzQsImVzcCIpKTsJIyBpbnAKCSZtb3YJKCZEV1AoMjQsImVzcCIpLCJlY3giKTsKCSZtb3YJKCZEV1AoMjgsImVzcCIpLCJlc2kiKTsKCSZ2bW92ZHFhCSgkdDMsJlFXUCgyNTYsJEsyNTYpKTsKCSZqbXAJKCZsYWJlbCgiZ3JhbmRfYXZ4X2JtaSIpKTsKCiZzZXRfbGFiZWwoImdyYW5kX2F2eF9ibWkiLDMyKTsKCSMgbG9hZCBpbnB1dCwgcmV2ZXJzZSBieXRlIG9yZGVyLCBhZGQgSzI1NlswLi4xNV0sIHNhdmUgdG8gc3RhY2sKCSZ2bW92ZHF1CShAWFswXSwmUVdQKDAsImVkaSIpKTsKCSZ2bW92ZHF1CShAWFsxXSwmUVdQKDE2LCJlZGkiKSk7Cgkmdm1vdmRxdQkoQFhbMl0sJlFXUCgzMiwiZWRpIikpOwoJJnZtb3ZkcXUJKEBYWzNdLCZRV1AoNDgsImVkaSIpKTsKCSZhZGQJCSgiZWRpIiw2NCk7CgkmdnBzaHVmYgkoQFhbMF0sQFhbMF0sJHQzKTsKCSZtb3YJCSgmRFdQKDk2KzQsImVzcCIpLCJlZGkiKTsKCSZ2cHNodWZiCShAWFsxXSxAWFsxXSwkdDMpOwoJJnZwc2h1ZmIJKEBYWzJdLEBYWzJdLCR0Myk7CgkmdnBhZGRkCQkoJHQwLEBYWzBdLCZRV1AoMCwkSzI1NikpOwoJJnZwc2h1ZmIJKEBYWzNdLEBYWzNdLCR0Myk7CgkmdnBhZGRkCQkoJHQxLEBYWzFdLCZRV1AoMTYsJEsyNTYpKTsKCSZ2cGFkZGQJCSgkdDIsQFhbMl0sJlFXUCgzMiwkSzI1NikpOwoJJnZwYWRkZAkJKCR0MyxAWFszXSwmUVdQKDQ4LCRLMjU2KSk7Cgkmdm1vdmRxYQkoJlFXUCgzMiswLCJlc3AiKSwkdDApOwoJJnZtb3ZkcWEJKCZRV1AoMzIrMTYsImVzcCIpLCR0MSk7Cgkmdm1vdmRxYQkoJlFXUCgzMiszMiwiZXNwIiksJHQyKTsKCSZ2bW92ZHFhCSgmUVdQKDMyKzQ4LCJlc3AiKSwkdDMpOwoJJmptcAkJKCZsYWJlbCgiYXZ4X2JtaV8wMF80NyIpKTsKCiZzZXRfbGFiZWwoImF2eF9ibWlfMDBfNDciLDE2KTsKCSZhZGQJCSgkSzI1Niw2NCk7CgogICAgZm9yICgkaT0wLCRqPTA7ICRqPDQ7ICRqKyspIHsKCSZBVlhfMDBfNDcoJGosXCZib2R5eF8wMF8xNSxAWCk7CglwdXNoKEBYLHNoaWZ0KEBYKSk7CQkjIHJvdGF0ZShAWCkKICAgIH0KCSZjbXAJKCZEV1AoMTYqJGosJEsyNTYpLDB4MDAwMTAyMDMpOwoJJmpuZQkoJmxhYmVsKCJhdnhfYm1pXzAwXzQ3IikpOwoKICAgIGZvciAoJGk9MDsgJGk8MTY7ICkgewoJZm9yZWFjaChib2R5eF8wMF8xNSgpKSB7IGV2YWw7IH0KICAgIH0KCgkmbW92CSgiZXNpIiwmRFdQKDk2LCJlc3AiKSk7CSNjdHgKCQkJCQkjJm1vdgkoJEFIWzBdLCZEV1AoMCwiZXNwIikpOwoJJnhvcgkoJEFIWzFdLCJlZGkiKTsJCSMmbW92CSgkQUhbMV0sJkRXUCg0LCJlc3AiKSk7CgkJCQkJIyZtb3YJKCJlZGkiLCAmRFdQKDgsImVzcCIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMTIsImVzcCIpKTsKCSZhZGQJKCRBSFswXSwmRFdQKDAsImVzaSIpKTsKCSZhZGQJKCRBSFsxXSwmRFdQKDQsImVzaSIpKTsKCSZhZGQJKCJlZGkiLCZEV1AoOCwiZXNpIikpOwoJJmFkZAkoImVjeCIsJkRXUCgxMiwiZXNpIikpOwoJJm1vdgkoJkRXUCgwLCJlc2kiKSwkQUhbMF0pOwoJJm1vdgkoJkRXUCg0LCJlc2kiKSwkQUhbMV0pOwoJJm1vdgkoJkRXUCg4LCJlc2kiKSwiZWRpIik7CgkmbW92CSgmRFdQKDEyLCJlc2kiKSwiZWN4Iik7CgkgIyZtb3YJKCZEV1AoMCwiZXNwIiksJEFIWzBdKTsKCSAmbW92CSgmRFdQKDQsImVzcCIpLCRBSFsxXSk7CgkgJnhvcgkoJEFIWzFdLCJlZGkiKTsJCQkjIG1hZ2ljCgkgJm1vdgkoJkRXUCg4LCJlc3AiKSwiZWRpIik7CgkgJm1vdgkoJkRXUCgxMiwiZXNwIiksImVjeCIpOwoJIyZtb3YJKCRFLCZEV1AoMTYsImVzcCIpKTsKCSZtb3YJKCJlZGkiLCZEV1AoMjAsImVzcCIpKTsKCSZtb3YJKCJlY3giLCZEV1AoMjQsImVzcCIpKTsKCSZhZGQJKCRFLCZEV1AoMTYsImVzaSIpKTsKCSZhZGQJKCJlZGkiLCZEV1AoMjAsImVzaSIpKTsKCSZhZGQJKCJlY3giLCZEV1AoMjQsImVzaSIpKTsKCSZtb3YJKCZEV1AoMTYsImVzaSIpLCRFKTsKCSZtb3YJKCZEV1AoMjAsImVzaSIpLCJlZGkiKTsKCSAmbW92CSgmRFdQKDIwLCJlc3AiKSwiZWRpIik7CgkmbW92CSgiZWRpIiwmRFdQKDI4LCJlc3AiKSk7CgkmbW92CSgmRFdQKDI0LCJlc2kiKSwiZWN4Iik7CgkgIyZtb3YJKCZEV1AoMTYsImVzcCIpLCRFKTsKCSZhZGQJKCJlZGkiLCZEV1AoMjgsImVzaSIpKTsKCSAmbW92CSgmRFdQKDI0LCJlc3AiKSwiZWN4Iik7CgkmbW92CSgmRFdQKDI4LCJlc2kiKSwiZWRpIik7CgkgJm1vdgkoJkRXUCgyOCwiZXNwIiksImVkaSIpOwoJJm1vdgkoImVkaSIsJkRXUCg5Nis0LCJlc3AiKSk7CSMgaW5wCgoJJnZtb3ZkcWEJKCR0MywmUVdQKDY0LCRLMjU2KSk7Cgkmc3ViCSgkSzI1NiwzKjY0KTsJCQkjIHJld2luZCBLCgkmY21wCSgiZWRpIiwmRFdQKDk2KzgsImVzcCIpKTsJIyBhcmUgd2UgZG9uZSB5ZXQ/CgkmamIJKCZsYWJlbCgiZ3JhbmRfYXZ4X2JtaSIpKTsKCgkmbW92CSgiZXNwIiwmRFdQKDk2KzEyLCJlc3AiKSk7CSMgcmVzdG9yZSBzcAoJJnZ6ZXJvYWxsCSgpOwomZnVuY3Rpb25fZW5kX0EoKTsKCQkJCQkJfQoJCQkJCQl9CgkJCQkJCX19fQomZnVuY3Rpb25fZW5kX0IoInNoYTI1Nl9ibG9ja19kYXRhX29yZGVyIik7CgomYXNtX2ZpbmlzaCgpOwo=