ZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGhwbXluZXRjb25mLnBocCBiL3NjcmlwdHMvcGhwbXluZXRjb25mLnBocApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmVlMzZlCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9waHBteW5ldGNvbmYucGhwCkBAIC0wLDAgKzEsMzA5IEBACis8P3BocAorLyohCisgKiBcZmlsZSBwaHBteW5ldGNvbmYucGhwCisgKiBcYnJpZWYgTkVUQ09ORiBQSFAgZ2F0ZXdheSBmb3IgQXBhY2hlIG1vZHVsZSBvZiBOZXRvcGVlcgorICogXGF1dGhvciBUb21hcyBDZWprYSA8Y2Vqa2F0QGNlc25ldC5jej4KKyAqIFxkYXRlIDIwMTIKKyAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIENFU05FVAorICoKKyAqIExJQ0VOU0UgVEVSTVMKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBDb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIGlzIHJldGFpbmVkIGluIGZ1bGwsIHRoaXMKKyAqIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIChHUEwpIHZlcnNpb24gMiBvciBsYXRlciwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucworICogb2YgdGhlIEdQTCBhcHBseSBJTlNURUFEIE9GIHRob3NlIGdpdmVuIGFib3ZlLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YKKyAqIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYXJlIGRpc2NsYWltZWQuCisgKiBJbiBubyBldmVudCBzaGFsbCB0aGUgY29tcGFueSBvciBjb250cmlidXRvcnMgYmUgbGlhYmxlIGZvciBhbnkKKyAqIGRpcmVjdCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwsIGV4ZW1wbGFyeSwgb3IgY29uc2VxdWVudGlhbAorICogZGFtYWdlcyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUKKyAqIGdvb2RzIG9yIHNlcnZpY2VzOyBsb3NzIG9mIHVzZSwgZGF0YSwgb3IgcHJvZml0czsgb3IgYnVzaW5lc3MKKyAqIGludGVycnVwdGlvbikgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyCisgKiBpbiBjb250cmFjdCwgc3RyaWN0IGxpYWJpbGl0eSwgb3IgdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2Ugb3IKKyAqIG90aGVyd2lzZSkgYXJpc2luZyBpbiBhbnkgd2F5IG91dCBvZiB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUsIGV2ZW4KKyAqIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorICoKKyAqLworCisvKiBFbnVtZXJhdGlvbiBvZiBNZXNzYWdlIHR5cGUgKHRha2VuIGZyb20gbW9kX25ldGNvbmYuYykgKi8KK2NsYXNzIE1zZ1R5cGUgeworCWNvbnN0IFJFUExZX09LCQk9IDA7CisJY29uc3QgUkVQTFlfREFUQQk9IDE7CisJY29uc3QgUkVQTFlfRVJST1IJPSAyOworCWNvbnN0IFJFUExZX0lORk8JPSAzOworCWNvbnN0IE1TR19DT05ORUNUCT0gNDsKKwljb25zdCBNU0dfRElTQ09OTkVDVAk9IDU7CisJY29uc3QgTVNHX0dFVAkJPSA2OworCWNvbnN0IE1TR19HRVRDT05GSUcJPSA3OworCWNvbnN0IE1TR19FRElUQ09ORklHCT0gODsKKwljb25zdCBNU0dfQ09QWUNPTkZJRwk9IDk7CisJY29uc3QgTVNHX0RFTEVURUNPTkZJRyAgPSAxMDsKKwljb25zdCBNU0dfTE9DSwkJPSAxMTsKKwljb25zdCBNU0dfVU5MT0NLCT0gMTI7CisJY29uc3QgTVNHX0tJTEwJCT0gMTM7CisJY29uc3QgTVNHX0lORk8JCT0gMTQ7CisJY29uc3QgTVNHX0dFTkVSSUMJPSAxNTsKK307CisKKy8qKgorICBcYnJpZWYgUmVhZCByZXNwb25zZSBmcm9tIHNvY2tldAorICBccGFyYW1baW4sb3V0XSAkc29jayBzb2NrZXQgZGVzY3JpcHRvcgorICBccmV0dXJuIHRyaW1tZWQgc3RyaW5nIHRoYXQgd2FzIHJlYWQKKyAqLworZnVuY3Rpb24gcmVhZG5ldGNvbmYoJiRzb2NrKQoreworCSRyZXNwb25zZSA9ICIiOworCWRvIHsKKwkJJHRtcCA9ICIiOworCQkkdG1wID0gZnJlYWQoJHNvY2ssIDQwOTYpOworCQlpZiAoJHRtcCAhPSAiIikgeworCQkJJHJlc3BvbnNlIC49ICR0bXA7CisJCX0KKwkJaWYgKHN0cmxlbigkdG1wKSA8IDQwOTYpIHsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoJHRtcCAhPSAiIik7CisJcmV0dXJuIHRyaW0oJHJlc3BvbnNlKTsKK30KKworZnVuY3Rpb24gcHJpbnRKc29uRXJyb3IoKSB7CisJc3dpdGNoIChqc29uX2xhc3RfZXJyb3IoKSkgeworCQljYXNlIEpTT05fRVJST1JfTk9ORToKKwkJCWVjaG8gJ05vIGVycm9ycyc7CisJCQlicmVhazsKKwkJY2FzZSBKU09OX0VSUk9SX0RFUFRIOgorCQkJZWNobyAnTWF4aW11bSBzdGFjayBkZXB0aCBleGNlZWRlZCc7CisJCQlicmVhazsKKwkJY2FzZSBKU09OX0VSUk9SX1NUQVRFX01JU01BVENIOgorCQkJZWNobyAnVW5kZXJmbG93IG9yIHRoZSBtb2RlcyBtaXNtYXRjaCc7CisJCQlicmVhazsKKwkJY2FzZSBKU09OX0VSUk9SX0NUUkxfQ0hBUjoKKwkJCWVjaG8gJ1VuZXhwZWN0ZWQgY29udHJvbCBjaGFyYWN0ZXIgZm91bmQnOworCQkJYnJlYWs7CisJCWNhc2UgSlNPTl9FUlJPUl9TWU5UQVg6CisJCQllY2hvICdTeW50YXggZXJyb3IsIG1hbGZvcm1lZCBKU09OJzsKKwkJCWJyZWFrOworCQljYXNlIEpTT05fRVJST1JfVVRGODoKKwkJCWVjaG8gJ01hbGZvcm1lZCBVVEYtOCBjaGFyYWN0ZXJzLCBwb3NzaWJseSBpbmNvcnJlY3RseSBlbmNvZGVkJzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWNobyAnVW5rbm93biBlcnJvcic7CisJCQlicmVhazsKKwl9Cit9CisKKy8qKgorICBcYnJpZWYgUHJpbnRzIGZvcm1hdHRlZCBYTUwKKyAqLworZnVuY3Rpb24gcHJpbnR4bWwoJHN0cmluZykKK3sKKwkkeG1sT2JqID0gc2ltcGxleG1sX2xvYWRfc3RyaW5nKCI8cm9vdG5vZGU+Ii5zdHJfcmVwbGFjZSgnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4nLCAiIiwgJHN0cmluZykuIjwvcm9vdG5vZGU+Iik7CisJZWNobygiPHByZT4iLmh0bWxzcGVjaWFsY2hhcnMoJHhtbE9iai0+YXNYTUwoKSkuIjwvcHJlPiIpOworfQorCisvKioKKyBccGFyYW1baW4sb3V0XSAkc29jayBzb2NrZXQgZGVzY3JpcHRvcgorIFxyZXR1cm4gMCBvbiBzdWNjZXNzCisqLworZnVuY3Rpb24gaGFuZGxlX2Nvbm5lY3QoJiRzb2NrKQoreworCSRjb25uZWN0ID0ganNvbl9lbmNvZGUoYXJyYXkoInR5cGUiID0+IE1zZ1R5cGU6Ok1TR19DT05ORUNULAorCSJob3N0IiA9PiAkX1JFUVVFU1RbImhvc3QiXSwKKwkicG9ydCIgPT4gMjIsCisJInVzZXIiID0+ICRfUkVRVUVTVFsidXNlciJdLAorCSJwYXNzIiA9PiAkX1JFUVVFU1RbInBhc3MiXQorCSkpOworCWZ3cml0ZSgkc29jaywgJGNvbm5lY3QpOworCSRyZXNwb25zZSA9IHJlYWRuZXRjb25mKCRzb2NrKTsKKwkkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCRyZXNwb25zZSwgdHJ1ZSk7CisJZWNobyAiPGgyPkNPTk5FQ1Q8L2gyPiI7CisJaWYgKCRkZWNvZGVkWyJ0eXBlIl0gPT0gTXNnVHlwZTo6UkVQTFlfT0spIHsKKwkJJHNlc3Npb25rZXkgPSAkZGVjb2RlZFsic2Vzc2lvbiJdOworCQlpZiAoIWlzc2V0KCRfU0VTU0lPTlsia2V5cyJdKSkgeworCQkJJF9TRVNTSU9OWyJrZXlzIl0gPSBhcnJheSgiJHNlc3Npb25rZXkiKTsKKwkJfSBlbHNlIHsKKwkJCSRfU0VTU0lPTlsia2V5cyJdW10gPSAkc2Vzc2lvbmtleTsKKwkJfQorCQlpZiAoIWlzc2V0KCRfU0VTU0lPTlsiaG9zdHMiXSkpIHsKKwkJCSRfU0VTU0lPTlsiaG9zdHMiXSA9IGFycmF5KCRfUkVRVUVTVFsiaG9zdCJdKTsKKwkJfSBlbHNlIHsKKwkJCSRfU0VTU0lPTlsiaG9zdHMiXVtdID0gJF9SRVFVRVNUWyJob3N0Il07CisJCX0KKwkJZWNobyAiU3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZC4iOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQllY2hvICJDb3VsZCBub3QgY29ubmVjdC4iOworCQl2YXJfZHVtcCgkZGVjb2RlZCk7CisJCXJldHVybiAxOworCX0KK30KKworLyoqCisgXHJldHVybiAwIG9uIHN1Y2Nlc3MKKyAqLworZnVuY3Rpb24gY2hlY2tfbG9nZ2VkX2tleXMoKQoreworCWlmICghaXNzZXQoJF9TRVNTSU9OWyJrZXlzIl0pKSB7CisJCWVjaG8gIk5vdCBsb2dnZWQgaW4uIjsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghaXNzZXQoJF9SRVFVRVNUWyJrZXkiXSkpIHsKKwkJZWNobyAiTm8gSW5kZXggb2Yga2V5LiI7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWlzc2V0KCRfU0VTU0lPTlsia2V5cyJdWyRfUkVRVUVTVFsia2V5Il1dKSkgeworCQllY2hvICJCYWQgSW5kZXggb2Yga2V5LiI7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgXHBhcmFtW2luLG91dF0gJHNvY2sgc29ja2V0IGRlc2NyaXB0b3IKKyBccGFyYW1baW5dICRwYXJhbXMgYXJyYXkgb2YgdmFsdWVzIGZvciBtb2RfbmV0Y29uZiAodHlwZSwgcGFyYW1zLi4uKQorIFxyZXR1cm4gYXJyYXkgLSByZXNwb25zZSBmcm9tIG1vZF9uZXRjb25mCisqLworZnVuY3Rpb24gZXhlY3V0ZV9vcGVyYXRpb24oJiRzb2NrLCAkcGFyYW1zKQoreworCSRvcGVyYXRpb24gPSBqc29uX2VuY29kZSgkcGFyYW1zKTsKKwlmd3JpdGUoJHNvY2ssICRvcGVyYXRpb24pOworCSRyZXNwb25zZSA9IHJlYWRuZXRjb25mKCRzb2NrKTsKKwlyZXR1cm4ganNvbl9kZWNvZGUoJHJlc3BvbnNlLCB0cnVlKTsKK30KKworLyoqCisgXHBhcmFtW2luLG91dF0gJHNvY2sgc29ja2V0IGRlc2NyaXB0b3IKKyBccmV0dXJuIDAgb24gc3VjY2VzcworKi8KK2Z1bmN0aW9uIGhhbmRsZV9nZXQoJiRzb2NrKQoreworCWlmIChjaGVja19sb2dnZWRfa2V5cygpICE9IDApIHsKKwkJcmV0dXJuIDE7CisJfQorCSRzZXNzaW9ua2V5ID0gJF9TRVNTSU9OWyJrZXlzIl1bJF9SRVFVRVNUWyJrZXkiXV07CisKKwkkZGVjb2RlZCA9IGV4ZWN1dGVfb3BlcmF0aW9uKCRzb2NrLAorCQlhcnJheSgJInR5cGUiID0+IE1zZ1R5cGU6Ok1TR19HRVQsCisJCQkic2Vzc2lvbiIgPT4gJHNlc3Npb25rZXksCisJCQkic291cmNlIiA9PiAicnVubmluZyIpKTsKKworCWVjaG8gIjxoMj5HRVQtQ09ORklHPC9oMj4iOworCXByaW50eG1sKCRkZWNvZGVkWyJkYXRhIl0pOworfQorCisvKioKKyBccGFyYW1baW4sb3V0XSAkc29jayBzb2NrZXQgZGVzY3JpcHRvcgorIFxyZXR1cm4gMCBvbiBzdWNjZXNzCisqLworZnVuY3Rpb24gaGFuZGxlX2dldGNvbmZpZygmJHNvY2spCit7CisJaWYgKGNoZWNrX2xvZ2dlZF9rZXlzKCkgIT0gMCkgeworCQlyZXR1cm4gMTsKKwl9CisJJHNlc3Npb25rZXkgPSAkX1NFU1NJT05bImtleXMiXVskX1JFUVVFU1RbImtleSJdXTsKKwkkZGVjb2RlZCA9IGV4ZWN1dGVfb3BlcmF0aW9uKCRzb2NrLAorCQlhcnJheSgJInR5cGUiID0+IE1zZ1R5cGU6Ok1TR19HRVRDT05GSUcsCisJCQkic2Vzc2lvbiIgPT4gJHNlc3Npb25rZXksCisJCQkic291cmNlIiA9PiAicnVubmluZyIpKTsKKworCWVjaG8gIjxoMj5HRVQtQ09ORklHPC9oMj4iOworCXByaW50eG1sKCRkZWNvZGVkWyJkYXRhIl0pOworCXJldHVybiAwOworfQorCisvKioKKyBccGFyYW1baW4sb3V0XSAkc29jayBzb2NrZXQgZGVzY3JpcHRvcgorIFxyZXR1cm4gMCBvbiBzdWNjZXNzCisqLworZnVuY3Rpb24gaGFuZGxlX2Rpc2Nvbm5lY3QoJiRzb2NrKQoreworCWlmIChjaGVja19sb2dnZWRfa2V5cygpICE9IDApIHsKKwkJcmV0dXJuIDE7CisJfQorCSRzZXNzaW9ua2V5ID0gJF9TRVNTSU9OWyJrZXlzIl1bJF9SRVFVRVNUWyJrZXkiXV07CisJJGRlY29kZWQgPSBleGVjdXRlX29wZXJhdGlvbigkc29jaywKKwkJYXJyYXkoCSJ0eXBlIiA9PiBNc2dUeXBlOjpNU0dfRElTQ09OTkVDVCwKKwkJCSJzZXNzaW9uIiA9PiAkc2Vzc2lvbmtleSkpOworCWVjaG8gIjxoMj5EaXNjb25uZWN0PC9oMj4iOworCWlmICgkZGVjb2RlZFsidHlwZSJdID09IE1zZ1R5cGU6OlJFUExZX09LKSB7CisJCWVjaG8gIlN1Y2Nlc3NmdWxseSBkaXNjb25uZWN0ZWQuIjsKKwl9IGVsc2UgeworCQllY2hvICJFcnJvciBvY2N1cmVkLiI7CisJCXZhcl9kdW1wKCRkZWNvZGVkKTsKKwl9CisJdW5zZXQoJF9TRVNTSU9OWyJrZXlzIl1bJF9SRVFVRVNUWyJrZXkiXV0pOworCXVuc2V0KCRfU0VTU0lPTlsiaG9zdHMiXVskX1JFUVVFU1RbImtleSJdXSk7CisJJF9TRVNTSU9OWyJrZXlzIl0gPSBhcnJheV92YWx1ZXMoJF9TRVNTSU9OWyJrZXlzIl0pOworCSRfU0VTU0lPTlsiaG9zdHMiXSA9IGFycmF5X3ZhbHVlcygkX1NFU1NJT05bImhvc3RzIl0pOworfQorCisvKiBtYWluIHBhcnQgb2Ygc2NyaXB0ICovCitzZXNzaW9uX3N0YXJ0KCk7CisKK2lmICghaXNzZXQoJF9SRVFVRVNUWyJjb21tYW5kIl0pKSB7CisJZWNobyAiPGgyPkNvbm5lY3QgdG8gbmV3IE5FVENPTkYgc2VydmVyPC9oMj4KKwk8Zm9ybSBhY3Rpb249Jz8nIG1ldGhvZD0nUE9TVCc+CisJPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nY29tbWFuZCcgdmFsdWU9J2Nvbm5lY3QnPgorCTxsYWJlbCBmb3I9J2hvc3QnPkhvc3RuYW1lOjwvbGFiZWw+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hvc3QnPjxicj4KKwk8bGFiZWwgZm9yPSd1c2VyJz5Vc2VybmFtZTo8L2xhYmVsPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd1c2VyJz48YnI+CisJPGxhYmVsIGZvcj0ncGFzcyc+UGFzc3dvcmQ6PC9sYWJlbD48aW5wdXQgdHlwZT0ncGFzc3dvcmQnIG5hbWU9J3Bhc3MnPjxicj4KKwk8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nTG9naW4nPgorCTwvZm9ybT4iOworLy8gcGF2bMNrIGphbgorCWlmIChpc3NldCgkX1NFU1NJT05bImtleXMiXSkpIHsKKwkJZWNobyAiPGgyPkFscmVhZHkgY29ubmVjdGVkIG5vZGVzPC9oMj4iOworCQkka2V5cyA9ICRfU0VTU0lPTlsia2V5cyJdOworCQkkaSA9IDA7CisJCWZvcmVhY2ggKCRrZXlzIGFzICRrKSB7CisJCQllY2hvICIkaSAiLiRfU0VTU0lPTlsiaG9zdHMiXVskaV0uIiA8YSBocmVmPSc/Y29tbWFuZD1nZXQmYW1wO2tleT0kaSc+Z2V0PC9hPiA8YSBocmVmPSc/Y29tbWFuZD1nZXRjb25maWcmYW1wO2tleT0kaSc+Z2V0LWNvbmZpZzwvYT4gPGEgaHJlZj0nP2NvbW1hbmQ9ZGlzY29ubmVjdCZhbXA7a2V5PSRpJz5kaXNjb25uZWN0PC9hPjxicj4iOworCQkJJGkrKzsKKwkJfQorCX0KKwlleGl0KDApOworfQorCitpZiAoaXNzZXQoJF9SRVFVRVNUWyJjb21tYW5kIl0pKSB7CisJJGVycm5vID0gMDsKKwkkZXJyc3RyID0gIiI7CisJJHNvY2sgPSBmc29ja29wZW4oJ3VuaXg6Ly8vdG1wL21vZF9uZXRjb25mLnNvY2snLCBOVUxMLCAkZXJybm8sICRlcnJzdHIpOworCWlmICgkZXJybm8gIT0gMCkgeworCQllY2hvICJDb3VsZCBub3QgY29ubmVjdCB0byBzb2NrZXQuIjsKKwkJZWNobyAiJGVycnN0ciI7CisJCXJldHVybiAxOworCX0KKwlzdHJlYW1fc2V0X3RpbWVvdXQoJHNvY2ssIDEsIDEwMCk7CisJZWNobyAiPGEgaHJlZj0nPyc+QmFjazwvYT4iOworCisJaWYgKCRfUkVRVUVTVFsiY29tbWFuZCJdID09PSAiY29ubmVjdCIpIHsKKwkJaGFuZGxlX2Nvbm5lY3QoJHNvY2spOworCX0gZWxzZSBpZiAoJF9SRVFVRVNUWyJjb21tYW5kIl0gPT09ICJnZXQiKSB7CisJCWhhbmRsZV9nZXQoJHNvY2spOworCX0gZWxzZSBpZiAoJF9SRVFVRVNUWyJjb21tYW5kIl0gPT09ICJnZXRjb25maWciKSB7CisJCWhhbmRsZV9nZXRjb25maWcoJHNvY2spOworCX0gZWxzZSBpZiAoJF9SRVFVRVNUWyJjb21tYW5kIl0gPT09ICJkaXNjb25uZWN0IikgeworCQloYW5kbGVfZGlzY29ubmVjdCgkc29jayk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJOb3QgaW1wbGVtZW50ZWQgeWV0LiAoJXMpIiwgJF9SRVFVRVNUWyJjb21tYW5kIl0pOworCX0KKwlmY2xvc2UoJHNvY2spOworCWV4aXQoMCk7Cit9CisKKwo=